goldenChat base source add

This commit is contained in:
aidev
2026-05-23 15:11:48 +09:00
commit a4ea7762b5
2081 changed files with 1155760 additions and 0 deletions
@@ -0,0 +1,131 @@
/**
* MainChartSettingsModal
* 메인 차트(캔들스틱) 설정 다이얼로그 — TradingView Settings 와 유사.
* 탭: Symbol (캔들 색상) / 스타일 / 가시성 (미래 확장용)
*/
import React, { useState } from 'react';
import type { MainChartStyle } from '../types';
import { useDraggablePanel } from '../hooks/useDraggablePanel';
interface Props {
style: MainChartStyle;
onSave: (style: MainChartStyle) => void;
onCancel: () => void;
}
type Tab = 'symbol';
const TABS: { id: Tab; label: string }[] = [
{ id: 'symbol', label: '심볼 (Symbol)' },
];
const ColorSwatch: React.FC<{ value: string; onChange: (v: string) => void }> = ({ value, onChange }) => {
const hex6 = value.slice(0, 7);
return (
<label className="mcs-swatch" title={hex6}>
<input
type="color"
value={hex6}
onChange={e => onChange(e.target.value)}
/>
<span style={{ background: hex6 }} />
</label>
);
};
const MainChartSettingsModal: React.FC<Props> = ({ style, onSave, onCancel }) => {
const [tab, setTab] = useState<Tab>('symbol');
const [draft, setDraft] = useState<MainChartStyle>({ ...style });
const {
panelRef,
dragging,
onHeaderPointerDown, headerTouchStyle,
panelStyle,
headerCursor,
} = useDraggablePanel({ centerOnMount: true });
const set = (key: keyof MainChartStyle) => (v: string) =>
setDraft(prev => ({ ...prev, [key]: v }));
const handleOk = () => onSave(draft);
const handleDefaults = () => setDraft({
upColor: '#ff6b6b',
downColor: '#4dabf7',
borderUpColor: '#ff6b6b',
borderDownColor: '#4dabf7',
wickUpColor: '#ff6b6b',
wickDownColor: '#4dabf7',
});
return (
<div className="mcs-overlay" onMouseDown={e => e.target === e.currentTarget && onCancel()}>
<div
ref={panelRef}
className="mcs-dialog"
style={{
...panelStyle,
zIndex: 3001,
cursor: dragging ? 'grabbing' : undefined,
}}
onMouseDown={e => e.stopPropagation()}
>
<div
className="gc-popup-header"
onPointerDown={onHeaderPointerDown}
style={{ cursor: headerCursor, ...headerTouchStyle }}
>
<span className="gc-popup-title"> (Settings)</span>
<button type="button" className="gc-popup-close" onClick={onCancel}></button>
</div>
<div className="mcs-tabs">
{TABS.map(t => (
<button
key={t.id}
className={`mcs-tab${tab === t.id ? ' active' : ''}`}
onClick={() => setTab(t.id)}
>
{t.label}
</button>
))}
</div>
<div className="mcs-body">
{tab === 'symbol' && (
<>
<div className="mcs-section-label"> (CANDLES)</div>
<div className="mcs-row">
<span className="mcs-row-label"> (Up)</span>
<div className="mcs-row-colors">
<ColorSwatch value={draft.upColor} onChange={set('upColor')} />
<ColorSwatch value={draft.borderUpColor} onChange={set('borderUpColor')} />
<ColorSwatch value={draft.wickUpColor} onChange={set('wickUpColor')} />
</div>
</div>
<div className="mcs-row">
<span className="mcs-row-label"> (Down)</span>
<div className="mcs-row-colors">
<ColorSwatch value={draft.downColor} onChange={set('downColor')} />
<ColorSwatch value={draft.borderDownColor} onChange={set('borderDownColor')} />
<ColorSwatch value={draft.wickDownColor} onChange={set('wickDownColor')} />
</div>
</div>
</>
)}
</div>
<div className="mcs-footer">
<button className="mcs-btn-defaults" onClick={handleDefaults}></button>
<div className="mcs-footer-right">
<button className="mcs-btn-cancel" onClick={onCancel}></button>
<button className="mcs-btn-ok" onClick={handleOk}></button>
</div>
</div>
</div>
</div>
);
};
export default MainChartSettingsModal;