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,94 @@
/**
* 캔들 pane 좌측 하단 — 캔들 확대 보기 / 기본 보기 복원 버튼
*/
import React, { useState, useEffect, useCallback } from 'react';
import { ChartManager } from '../utils/ChartManager';
const IconExpand = () => (
<svg width="13" height="13" viewBox="0 0 14 14" fill="none"
stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<polyline points="1,9 1,13 5,13"/>
<line x1="1" y1="13" x2="5.5" y2="8.5"/>
<polyline points="13,5 13,1 9,1"/>
<line x1="13" y1="1" x2="8.5" y2="5.5"/>
</svg>
);
const IconRestore = () => (
<svg width="13" height="13" viewBox="0 0 14 14" fill="none"
stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<polyline points="5,13 1,13 1,9"/>
<line x1="1" y1="13" x2="5.5" y2="8.5"/>
<polyline points="9,1 13,1 13,5"/>
<line x1="13" y1="1" x2="8.5" y2="5.5"/>
</svg>
);
interface CandlePaneControlsProps {
manager: ChartManager;
containerEl: HTMLElement;
candleOnly: boolean;
onExpand: () => void;
onRestore: () => void;
}
const CandlePaneControls: React.FC<CandlePaneControlsProps> = ({
manager,
containerEl,
candleOnly,
onExpand,
onRestore,
}) => {
const [pos, setPos] = useState<{ left: number; top: number } | null>(null);
const updatePos = useCallback(() => {
const main = manager.getPaneLayouts().find(l => l.paneIndex === 0);
if (!main) { setPos(null); return; }
const rect = containerEl.getBoundingClientRect();
const paneBottomY = rect.top + main.topY + main.height;
setPos({
left: rect.left + 4,
top: paneBottomY - 30,
});
}, [manager, containerEl]);
useEffect(() => {
updatePos();
const ro = new ResizeObserver(() => updatePos());
ro.observe(containerEl);
const id = setInterval(updatePos, 400);
return () => { ro.disconnect(); clearInterval(id); };
}, [containerEl, updatePos, candleOnly]);
if (!pos) return null;
return (
<div
className="candle-pane-controls"
style={{ position: 'fixed', left: pos.left, top: pos.top, zIndex: 504 }}
onMouseDown={e => e.stopPropagation()}
>
{candleOnly ? (
<button
type="button"
className="pane-btn pane-btn-expand active"
onClick={e => { e.stopPropagation(); onRestore(); }}
title="기본 보기로 복원"
>
<IconRestore />
</button>
) : (
<button
type="button"
className="pane-btn pane-btn-expand"
onClick={e => { e.stopPropagation(); onExpand(); }}
title="캔들 전체보기 (캔들 영역 오버레이 지표 유지, 하단 보조지표 숨김)"
>
<IconExpand />
</button>
)}
</div>
);
};
export default CandlePaneControls;