fix: minor updated color palette for some components; updated default region/track names for stem separation.
This commit is contained in:
@@ -149,7 +149,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.chatbox-input:focus {
|
.chatbox-input:focus {
|
||||||
border-color: #6a6a6a;
|
border-color: #5a9fd4;
|
||||||
background-color: #4a4a4a;
|
background-color: #4a4a4a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
.kgone-tab.active {
|
.kgone-tab.active {
|
||||||
color: #e0e0e0;
|
color: #e0e0e0;
|
||||||
border-bottom-color: #7a9cff;
|
border-bottom-color: #5a9fd4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scrollable body */
|
/* Scrollable body */
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
.kgone-input:focus,
|
.kgone-input:focus,
|
||||||
.kgone-textarea:focus,
|
.kgone-textarea:focus,
|
||||||
.kgone-select:focus {
|
.kgone-select:focus {
|
||||||
border-color: #5a6aaa;
|
border-color: #5a9fd4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.kgone-textarea {
|
.kgone-textarea {
|
||||||
@@ -277,7 +277,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.kgone-player-play-btn:hover {
|
.kgone-player-play-btn:hover {
|
||||||
color: #7a9cff;
|
color: #5a9fd4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.kgone-player-progress-track {
|
.kgone-player-progress-track {
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
|
|
||||||
.kgone-player-progress-fill {
|
.kgone-player-progress-fill {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: #7a9cff;
|
background-color: #5a9fd4;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
transition: width 0.1s linear;
|
transition: width 0.1s linear;
|
||||||
@@ -336,7 +336,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.kgone-player-download-btn:hover {
|
.kgone-player-download-btn:hover {
|
||||||
color: #7a9cff;
|
color: #5a9fd4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ── Generation state feedback ─────────────────────────────────────────────── */
|
/* ── Generation state feedback ─────────────────────────────────────────────── */
|
||||||
@@ -364,8 +364,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@keyframes kgone-spin {
|
@keyframes kgone-spin {
|
||||||
from { transform: rotate(0deg); }
|
from {
|
||||||
to { transform: rotate(360deg); }
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stem players (Separator tab) */
|
/* Stem players (Separator tab) */
|
||||||
@@ -390,7 +395,7 @@
|
|||||||
.kgone-checkbox-row input[type="checkbox"] {
|
.kgone-checkbox-row input[type="checkbox"] {
|
||||||
width: 14px;
|
width: 14px;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
accent-color: #7a9cff;
|
accent-color: #5a9fd4;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,4 +404,4 @@
|
|||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
@@ -826,6 +826,7 @@ const SeparatorTab: React.FC = () => {
|
|||||||
const taskIdRef = useRef<string>('');
|
const taskIdRef = useRef<string>('');
|
||||||
const originalRegionRef = useRef<{
|
const originalRegionRef = useRef<{
|
||||||
regionName: string;
|
regionName: string;
|
||||||
|
trackName: string;
|
||||||
startFromBeat: number;
|
startFromBeat: number;
|
||||||
trackIndex: number;
|
trackIndex: number;
|
||||||
} | null>(null);
|
} | null>(null);
|
||||||
@@ -866,6 +867,7 @@ const SeparatorTab: React.FC = () => {
|
|||||||
// Capture snapshot before anything changes — selection may shift during generation
|
// Capture snapshot before anything changes — selection may shift during generation
|
||||||
originalRegionRef.current = {
|
originalRegionRef.current = {
|
||||||
regionName: selectedAudioRegion.region.getName(),
|
regionName: selectedAudioRegion.region.getName(),
|
||||||
|
trackName: selectedAudioRegion.trackName,
|
||||||
startFromBeat: selectedAudioRegion.region.getStartFromBeat(),
|
startFromBeat: selectedAudioRegion.region.getStartFromBeat(),
|
||||||
trackIndex: selectedAudioRegion.trackIndex,
|
trackIndex: selectedAudioRegion.trackIndex,
|
||||||
};
|
};
|
||||||
@@ -1043,7 +1045,8 @@ const SeparatorTab: React.FC = () => {
|
|||||||
await KGAudioFileStorage.storeAudioFile(projectName, fileId, audioFile);
|
await KGAudioFileStorage.storeAudioFile(projectName, fileId, audioFile);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
trackName: `${snap.regionName} (${stem.name})`,
|
trackName: `${snap.trackName} - ${stem.name}`,
|
||||||
|
regionName: `${snap.regionName} - ${stem.name}`,
|
||||||
audioFileId: fileId,
|
audioFileId: fileId,
|
||||||
audioFileName: fileName,
|
audioFileName: fileName,
|
||||||
audioDurationSeconds: toneBuffer.duration,
|
audioDurationSeconds: toneBuffer.duration,
|
||||||
|
|||||||
@@ -203,17 +203,17 @@ const GeneralSettings: React.FC = () => {
|
|||||||
<div className="settings-section-header">
|
<div className="settings-section-header">
|
||||||
<h3>General</h3>
|
<h3>General</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="settings-section-content">
|
<div className="settings-section-content">
|
||||||
<div className="settings-group">
|
<div className="settings-group">
|
||||||
<h4>LLM Provider</h4>
|
<h4>LLM Provider</h4>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
LLM Provider
|
LLM Provider
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
className="settings-select"
|
className="settings-select"
|
||||||
value={llmProvider}
|
value={llmProvider}
|
||||||
onChange={(e) => handleLlmProviderChange(e.target.value)}
|
onChange={(e) => handleLlmProviderChange(e.target.value)}
|
||||||
>
|
>
|
||||||
@@ -245,13 +245,13 @@ const GeneralSettings: React.FC = () => {
|
|||||||
|
|
||||||
<div className="settings-group">
|
<div className="settings-group">
|
||||||
<h4>OpenAI</h4>
|
<h4>OpenAI</h4>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Key
|
Key
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="password"
|
type="password"
|
||||||
className="settings-input"
|
className="settings-input"
|
||||||
placeholder="Enter your OpenAI API key"
|
placeholder="Enter your OpenAI API key"
|
||||||
value={openaiKey}
|
value={openaiKey}
|
||||||
@@ -265,7 +265,7 @@ const GeneralSettings: React.FC = () => {
|
|||||||
: 'For security, keys are not persisted on non-local hosts and are kept in-memory for this session.'}
|
: 'For security, keys are not persisted on non-local hosts and are kept in-memory for this session.'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Model
|
Model
|
||||||
@@ -365,13 +365,13 @@ const GeneralSettings: React.FC = () => {
|
|||||||
|
|
||||||
<div className="settings-group">
|
<div className="settings-group">
|
||||||
<h4>Anthropic Claude (via OpenRouter)</h4>
|
<h4>Anthropic Claude (via OpenRouter)</h4>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Key
|
Key
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="password"
|
type="password"
|
||||||
className="settings-input"
|
className="settings-input"
|
||||||
placeholder="Enter your Claude API key"
|
placeholder="Enter your Claude API key"
|
||||||
value={claudeOpenRouterKey}
|
value={claudeOpenRouterKey}
|
||||||
@@ -390,8 +390,8 @@ const GeneralSettings: React.FC = () => {
|
|||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Base URL
|
Base URL
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="settings-input"
|
className="settings-input"
|
||||||
placeholder="e.g. https://openrouter.ai/api/v1"
|
placeholder="e.g. https://openrouter.ai/api/v1"
|
||||||
value={claudeOpenRouterBaseUrl}
|
value={claudeOpenRouterBaseUrl}
|
||||||
@@ -401,7 +401,7 @@ const GeneralSettings: React.FC = () => {
|
|||||||
This is the base URL for the OpenRouter API. Please do not change this unless you know what you are doing.
|
This is the base URL for the OpenRouter API. Please do not change this unless you know what you are doing.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Model
|
Model
|
||||||
@@ -423,13 +423,13 @@ const GeneralSettings: React.FC = () => {
|
|||||||
|
|
||||||
<div className="settings-group">
|
<div className="settings-group">
|
||||||
<h4>OpenAI Compatible Server</h4>
|
<h4>OpenAI Compatible Server</h4>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Key
|
Key
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="password"
|
type="password"
|
||||||
className="settings-input"
|
className="settings-input"
|
||||||
placeholder="Enter your API key"
|
placeholder="Enter your API key"
|
||||||
value={compatibleKey}
|
value={compatibleKey}
|
||||||
@@ -443,26 +443,26 @@ const GeneralSettings: React.FC = () => {
|
|||||||
: 'For security, keys are not persisted on non-local hosts and are kept in-memory for this session.'}
|
: 'For security, keys are not persisted on non-local hosts and are kept in-memory for this session.'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Base URL
|
Base URL
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="settings-input"
|
className="settings-input"
|
||||||
placeholder="e.g. https://openrouter.ai/api/v1"
|
placeholder="e.g. https://openrouter.ai/api/v1"
|
||||||
value={compatibleBaseUrl}
|
value={compatibleBaseUrl}
|
||||||
onChange={(e) => handleCompatibleBaseUrlChange(e.target.value)}
|
onChange={(e) => handleCompatibleBaseUrlChange(e.target.value)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="settings-item">
|
<div className="settings-item">
|
||||||
<label className="settings-label">
|
<label className="settings-label">
|
||||||
Model
|
Model
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="settings-input"
|
className="settings-input"
|
||||||
placeholder="e.g. qwen3:30b"
|
placeholder="e.g. qwen3:30b"
|
||||||
value={compatibleModel}
|
value={compatibleModel}
|
||||||
@@ -500,7 +500,7 @@ const GeneralSettings: React.FC = () => {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
handleSoundfontBaseUrlChange('https://cdn.jsdelivr.net/npm/soundfont-for-samplers/FluidR3_GM/');
|
handleSoundfontBaseUrlChange('https://cdn.jsdelivr.net/npm/soundfont-for-samplers/FluidR3_GM/');
|
||||||
}}
|
}}
|
||||||
style={{ color: '#646cff', textDecoration: 'underline', cursor: 'pointer' }}
|
style={{ color: '#5a9fd4', textDecoration: 'underline', cursor: 'pointer' }}
|
||||||
>
|
>
|
||||||
Restore default
|
Restore default
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -548,7 +548,7 @@ const RegionItem: React.FC<RegionItemProps> = ({
|
|||||||
data-is-dragging={isDragging}
|
data-is-dragging={isDragging}
|
||||||
>
|
>
|
||||||
<div className="region-header">
|
<div className="region-header">
|
||||||
{audioRegion ? audioRegion.getAudioFileName() : name}
|
{name}
|
||||||
</div>
|
</div>
|
||||||
<div className={`region-content${audioRegion ? ' audio-region-content' : ''}`} ref={regionContentRef}>
|
<div className={`region-content${audioRegion ? ' audio-region-content' : ''}`} ref={regionContentRef}>
|
||||||
{!audioRegion && (
|
{!audioRegion && (
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { KGAudioInterface } from '../../audio-interface/KGAudioInterface';
|
|||||||
*/
|
*/
|
||||||
export interface StemImportEntry {
|
export interface StemImportEntry {
|
||||||
trackName: string;
|
trackName: string;
|
||||||
|
regionName: string;
|
||||||
audioFileId: string;
|
audioFileId: string;
|
||||||
audioFileName: string;
|
audioFileName: string;
|
||||||
audioDurationSeconds: number;
|
audioDurationSeconds: number;
|
||||||
@@ -128,7 +129,7 @@ export class ImportStemsCommand extends KGCommand {
|
|||||||
regionId,
|
regionId,
|
||||||
trackId.toString(),
|
trackId.toString(),
|
||||||
track.getTrackIndex(),
|
track.getTrackIndex(),
|
||||||
stem.audioFileName,
|
stem.regionName,
|
||||||
this.insertBeat,
|
this.insertBeat,
|
||||||
durationInBeats,
|
durationInBeats,
|
||||||
stem.audioFileId,
|
stem.audioFileId,
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
z-index: 1005;
|
z-index: 1005;
|
||||||
margin-left: -50px;
|
margin-left: -120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tool buttons (used by Toolbar and PianoRollToolbar) */
|
/* Tool buttons (used by Toolbar and PianoRollToolbar) */
|
||||||
|
|||||||
Reference in New Issue
Block a user