dhx-react-suite 1.1.8 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dhx-react-suite.js +1535 -1364
- package/dist/dhx-react-suite.js.map +1 -1
- package/dist/dhx-react-suite.umd.cjs +2 -2
- package/dist/dhx-react-suite.umd.cjs.map +1 -1
- package/dist/index.d.ts +32 -10
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dhx-react-suite.js","sources":["../src/tokens/index.ts","../src/styles/index.ts","../src/components/Button/Button.tsx","../src/hooks/useClickOutside.ts","../src/hooks/useDrag.ts","../src/components/Menu/Menu.tsx","../src/components/Toolbar/Toolbar.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Layout/Layout.tsx","../src/components/Tabbar/Tabbar.tsx","../src/components/Grid/Grid.tsx","../src/components/Chart/Chart.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Timepicker/Timepicker.tsx","../src/components/Combobox/Combobox.tsx","../src/components/Slider/Slider.tsx","../src/components/Colorpicker/Colorpicker.tsx","../src/components/Popup/Popup.tsx","../src/components/Window/Window.tsx","../src/components/Message/Message.tsx","../src/components/List/List.tsx","../src/components/DataView/DataView.tsx","../src/components/Tree/Tree.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Form/Form.tsx","../src/components/Ribbon/Ribbon.tsx","../src/components/Navbar/Navbar.tsx"],"sourcesContent":["/**\n * Design Tokens — single source of truth for colours, spacing and typography.\n *\n * @example Override for a dark/custom theme:\n * import { tokens } from \"dhx-react-suite\";\n * tokens.primary = \"#7c3aed\";\n */\nconst tokens = {\n primary: \"#0288d1\",\n primaryDk: \"#01579b\",\n primaryLt: \"#e1f5fe\",\n success: \"#43a047\",\n danger: \"#e53935\",\n warning: \"#fb8c00\",\n bg: \"#f5f7fa\",\n surface: \"#ffffff\",\n border: \"#dde3ea\",\n borderDk: \"#b0bec5\",\n text: \"#3d4a5c\",\n textSec: \"#6b7a8d\",\n textMut: \"#9aa5b1\",\n shadow: \"0 2px 8px rgba(0,0,0,.10)\",\n shadowLg: \"0 8px 28px rgba(0,0,0,.14)\",\n r: \"4px\",\n rMd: \"8px\",\n font: \"'Segoe UI', system-ui, -apple-system, sans-serif\",\n};\n\nexport type Tokens = typeof tokens;\nexport default tokens;\n","import T from \"../tokens\";\n\nconst STYLE_ID = \"dhx-react-styles\";\n\n/** Injects a single <style> tag into <head>. Safe to call multiple times. */\nexport function injectStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const s = document.createElement(\"style\");\n s.id = STYLE_ID;\n s.textContent = `\n *,*::before,*::after{box-sizing:border-box}\n .dhx{font-family:${T.font};font-size:14px;color:${T.text}}\n .dhx *{box-sizing:border-box}\n .dhx-scroll::-webkit-scrollbar{width:6px;height:6px}\n .dhx-scroll::-webkit-scrollbar-track{background:${T.bg}}\n .dhx-scroll::-webkit-scrollbar-thumb{background:${T.borderDk};border-radius:3px}\n .dhx-scroll::-webkit-scrollbar-thumb:hover{background:${T.textMut}}\n @keyframes dhx-fade{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n @keyframes dhx-spin{to{transform:rotate(360deg)}}\n @keyframes dhx-toast{from{opacity:0;transform:translateX(110%)}to{opacity:1;transform:translateX(0)}}\n @keyframes dhx-pulse{0%,100%{opacity:1}50%{opacity:.5}}\n .dhx-anim-fade{animation:dhx-fade .15s ease}\n .dhx-btn{display:inline-flex;align-items:center;gap:5px;padding:0 12px;height:32px;border-radius:${T.r};border:1px solid transparent;cursor:pointer;font-size:13px;font-family:inherit;font-weight:500;transition:all .15s ease;outline:none;white-space:nowrap;user-select:none}\n .dhx-btn:focus-visible{box-shadow:0 0 0 3px ${T.primary}33}\n .dhx-btn-primary{background:${T.primary};color:#fff;border-color:${T.primary}}\n .dhx-btn-primary:hover{background:${T.primaryDk};border-color:${T.primaryDk}}\n .dhx-btn-secondary{background:${T.surface};color:${T.text};border-color:${T.border}}\n .dhx-btn-secondary:hover{background:${T.bg};border-color:${T.borderDk}}\n .dhx-btn-ghost{background:transparent;color:${T.textSec};border-color:transparent}\n .dhx-btn-ghost:hover{background:${T.bg};color:${T.text}}\n .dhx-btn-danger{background:${T.danger};color:#fff;border-color:${T.danger}}\n .dhx-btn-danger:hover{background:#c62828;border-color:#c62828}\n .dhx-btn:disabled{opacity:.45;cursor:not-allowed}\n .dhx-input{width:100%;height:32px;padding:0 10px;border:1px solid ${T.border};border-radius:${T.r};font-size:13px;font-family:inherit;color:${T.text};background:${T.surface};outline:none;transition:border-color .15s}\n .dhx-input:focus{border-color:${T.primary};box-shadow:0 0 0 3px ${T.primary}22}\n .dhx-input:disabled{background:${T.bg};color:${T.textMut};cursor:not-allowed}\n .dhx-input-wrap{position:relative;width:100%}\n .dhx-input-wrap .dhx-input-icon{position:absolute;left:9px;top:50%;transform:translateY(-50%);color:${T.textMut};pointer-events:none}\n .dhx-input-wrap .dhx-input--with-icon{padding-left:30px}\n .dhx-label{display:block;font-size:12px;font-weight:600;color:${T.textSec};margin-bottom:5px;letter-spacing:.02em}\n .dhx-form-group{margin-bottom:14px}\n .dhx-card{background:${T.surface};border:1px solid ${T.border};border-radius:${T.rMd};box-shadow:${T.shadow}}\n .dhx-card-padded{padding:16px}\n .dhx-divider{border:none;border-top:1px solid ${T.border};margin:0}\n .dhx-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600}\n .dhx-tag-primary{background:${T.primaryLt};color:${T.primaryDk}}\n .dhx-tag-success{background:#e8f5e9;color:#1b5e20}\n .dhx-tag-danger{background:#ffebee;color:#b71c1c}\n .dhx-tag-warning{background:#fff3e0;color:#e65100}\n `;\n document.head.appendChild(s);\n}\n","import { useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Leading icon element */\n icon?: React.ReactNode;\n disabled?: boolean;\n onClick?: () => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, React.CSSProperties> = {\n sm: { height: 24, padding: \"0 8px\", fontSize: 12 },\n md: {},\n lg: { height: 38, padding: \"0 18px\", fontSize: 14 },\n};\n\nexport function Button({\n children, variant = \"primary\", size = \"md\",\n icon, disabled, onClick, style, className = \"\",\n}: ButtonProps) {\n useEffect(injectStyles, []);\n return (\n <button\n className={`dhx dhx-btn dhx-btn-${variant} ${className}`}\n style={{ ...SIZE_STYLES[size], ...style }}\n disabled={disabled}\n onClick={onClick}\n >\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {children}\n </button>\n );\n}\n","import { useEffect, RefObject } from \"react\";\n\nexport function useClickOutside(\n ref: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n): void {\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) callback(e);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [ref, callback]);\n}\n","import { useRef, useCallback } from \"react\";\nimport React from \"react\";\n\nexport function useDrag(\n onDrag: (x: number, y: number) => void,\n): (e: React.MouseEvent, originX?: number, originY?: number) => void {\n const dragging = useRef(false);\n const origin = useRef({ x: 0, y: 0, ox: 0, oy: 0 });\n\n return useCallback(\n (e: React.MouseEvent, originX = 0, originY = 0) => {\n dragging.current = true;\n origin.current = { x: e.clientX, y: e.clientY, ox: originX, oy: originY };\n const move = (me: MouseEvent) => {\n if (!dragging.current) return;\n const { x, y, ox, oy } = origin.current;\n onDrag(ox + me.clientX - x, oy + me.clientY - y);\n };\n const up = () => {\n dragging.current = false;\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n e.preventDefault();\n },\n [onDrag],\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface MenuItem {\n id?: string;\n value?: string;\n icon?: React.ReactNode;\n hotkey?: string;\n disabled?: boolean;\n type?: \"separator\";\n items?: MenuItem[];\n}\n\ninterface MenuDropdownProps {\n items: MenuItem[];\n onSelect: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function MenuDropdown({ items, onSelect, style }: MenuDropdownProps) {\n const [hov, setHov] = useState<number | null>(null);\n return (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, minWidth: 180, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, boxShadow: T.shadowLg, zIndex: 200, padding: \"4px 0\", ...style }}>\n {items.map((item, i) => {\n if (item.type === \"separator\") return <div key={i} style={{ height: 1, background: T.border, margin: \"4px 0\" }} />;\n const isHov = hov === i;\n return (\n <div key={item.id || i} style={{ position: \"relative\" }} onMouseEnter={() => setHov(i)} onMouseLeave={() => setHov(null)}>\n <div onClick={() => !item.disabled && !item.items?.length && onSelect(item)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"8px 14px\", cursor: item.disabled ? \"not-allowed\" : \"pointer\", fontSize: 13, color: item.disabled ? T.textMut : T.text, background: isHov && !item.disabled ? T.bg : \"transparent\", opacity: item.disabled ? .5 : 1 }}>\n {item.icon && <span style={{ fontSize: 15, width: 18, textAlign: \"center\" }}>{item.icon}</span>}\n <span style={{ flex: 1 }}>{item.value || item.id}</span>\n {item.hotkey && <span style={{ fontSize: 11, color: T.textMut }}>{item.hotkey}</span>}\n {item.items?.length ? <span style={{ fontSize: 10, color: T.textMut }}>▶</span> : null}\n </div>\n {isHov && item.items?.length ? <MenuDropdown items={item.items} onSelect={onSelect} style={{ position: \"absolute\", left: \"100%\", top: -4 }} /> : null}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface MenuProps {\n items?: MenuItem[];\n label?: string;\n onSelect?: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Menu({ items = [], label = \"Menu\", onSelect, style }: MenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\", ...style }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => setOpen(o => !o)}>\n {label} <span style={{ fontSize: 10 }}>{open ? \"▲\" : \"▼\"}</span>\n </button>\n {open && <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setOpen(false); }} />}\n </div>\n );\n}\n\nexport interface ContextMenuProps {\n items?: MenuItem[];\n onSelect?: (item: MenuItem) => void;\n children: React.ReactNode;\n}\n\nexport function ContextMenu({ items = [], onSelect, children }: ContextMenuProps) {\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setPos(null), []));\n const show = (e: React.MouseEvent) => { e.preventDefault(); setPos({ x: e.clientX, y: e.clientY }); };\n return (\n <div ref={ref} onContextMenu={show} style={{ position: \"relative\", display: \"contents\" }}>\n {children}\n {pos && (\n <div style={{ position: \"fixed\", left: pos.x, top: pos.y, zIndex: 9999 }}>\n <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setPos(null); }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface ToolbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"select\" | \"imageButton\";\n value?: string;\n text?: string; // alias for value (backward compat)\n icon?: React.ReactNode;\n src?: string; // imageButton avatar\n items?: MenuItem[]; // dropdown\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n group?: string; // radio-group id\n disabled?: boolean;\n hidden?: boolean;\n count?: number; // notification badge\n label?: string; // prefix label for input/select\n options?: { value: string; label: string }[];\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface ToolbarProps {\n items?: ToolbarItem[];\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Toolbar({ items = [], onAction, style }: ToolbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => {\n if (item.id && (item.twoState || item.group) && item.active) init[item.id] = true;\n });\n return init;\n });\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLDivElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: ToolbarItem, i: number) => {\n if (item.disabled) return;\n\n // twoState toggle\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n\n // radio group\n if (item.group && item.id) {\n setActiveItems(s => {\n const ns = { ...s };\n items.forEach(it => { if (it.group === item.group && it.id) ns[it.id] = false; });\n ns[item.id!] = true;\n return ns;\n });\n }\n\n // dropdown\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: ToolbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{ width: 1, background: T.border, margin: \"6px 4px\", alignSelf: \"stretch\" }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 140, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n </div>\n );\n\n /* ── select ── */\n if (item.type === \"select\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <select\n className=\"dhx dhx-input\"\n style={{ width: item.width || 100, height: 28, cursor: \"pointer\" }}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n >\n {item.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 32, height: 32, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.id && activeItems[item.id]);\n const label = item.value ?? item.text;\n const hasDropdown = !!(item.items?.length);\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n height: 32, gap: 4,\n position: \"relative\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16 }}>{item.icon}</span>}\n {label && <span style={{ fontSize: 13 }}>{label}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={() => setOpenMenu(null)}\n style={{ top: \"100%\", left: 0 }}\n />\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\", alignItems: \"center\", gap: 2,\n padding: \"4px 8px\", background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n minHeight: 44, flexWrap: \"wrap\",\n ...style,\n }}\n >\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport type SidebarBadgeColor = \"danger\" | \"primary\" | \"success\" | \"secondary\";\n\nexport interface SidebarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"title\" | \"customHTML\";\n value?: string;\n icon?: React.ReactNode;\n html?: string;\n tooltip?: string;\n count?: number;\n countColor?: SidebarBadgeColor;\n twoState?: boolean;\n active?: boolean;\n group?: string;\n disabled?: boolean;\n hidden?: boolean;\n items?: SidebarItem[];\n onClick?: (id: string) => void;\n}\n\nexport interface SidebarProps {\n items?: SidebarItem[];\n width?: number;\n minWidth?: number;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n selected?: string;\n defaultSelected?: string;\n onSelect?: (item: SidebarItem) => void;\n onCollapse?: () => void;\n onExpand?: () => void;\n onBeforeCollapse?: () => boolean | void;\n onBeforeExpand?: () => boolean | void;\n onToggleItem?: (id: string, active: boolean) => void;\n style?: React.CSSProperties;\n}\n\nfunction badgeBg(c?: SidebarBadgeColor): string {\n if (c === \"primary\") return T.primary;\n if (c === \"success\") return \"#43a047\";\n if (c === \"secondary\") return \"#9e9e9e\";\n return \"#e53935\"; // danger (default)\n}\n\nfunction flatGroupIds(items: SidebarItem[], group: string): string[] {\n const ids: string[] = [];\n const visit = (i: SidebarItem) => {\n if (i.id && i.group === group) ids.push(i.id);\n i.items?.forEach(visit);\n };\n items.forEach(visit);\n return ids;\n}\n\nfunction initActiveState(items: SidebarItem[]): Record<string, boolean> {\n const r: Record<string, boolean> = {};\n const visit = (i: SidebarItem) => {\n if (i.id && i.twoState && i.active) r[i.id] = true;\n i.items?.forEach(visit);\n };\n items.forEach(visit);\n return r;\n}\n\nexport function Sidebar({\n items = [],\n width = 240,\n minWidth = 64,\n header,\n footer,\n collapsed,\n defaultCollapsed,\n selected,\n defaultSelected,\n onSelect,\n onCollapse,\n onExpand,\n onBeforeCollapse,\n onBeforeExpand,\n onToggleItem,\n style,\n}: SidebarProps) {\n const isCtrlCollapsed = collapsed !== undefined;\n const isCtrlSelected = selected !== undefined;\n\n const [collapsedState, setCollapsedState] = useState(defaultCollapsed ?? false);\n const [selectedState, setSelectedState] = useState<string | null>(defaultSelected ?? null);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n const [activeState, setActiveState] = useState<Record<string, boolean>>(() => initActiveState(items));\n useEffect(injectStyles, []);\n\n const isCollapsed = isCtrlCollapsed ? collapsed! : collapsedState;\n const currentSel = isCtrlSelected ? (selected ?? null) : selectedState;\n const w = isCollapsed ? minWidth : width;\n\n const handleToggle = () => {\n if (isCollapsed) {\n if (onBeforeExpand?.() === false) return;\n if (!isCtrlCollapsed) setCollapsedState(false);\n onExpand?.();\n } else {\n if (onBeforeCollapse?.() === false) return;\n if (!isCtrlCollapsed) setCollapsedState(true);\n onCollapse?.();\n }\n };\n\n const handleSelect = (item: SidebarItem) => {\n if (!isCtrlSelected) setSelectedState(item.id ?? null);\n onSelect?.(item);\n if (item.id && item.onClick) item.onClick(item.id);\n };\n\n const handleTwoState = (item: SidebarItem) => {\n if (!item.id) return;\n const newActive = !activeState[item.id];\n let next = { ...activeState, [item.id]: newActive };\n if (item.group && newActive) {\n flatGroupIds(items, item.group).forEach(gid => {\n if (gid !== item.id) next[gid] = false;\n });\n }\n setActiveState(next);\n onToggleItem?.(item.id, newActive);\n };\n\n /* ── Badge ─────────────────────────────────────────────────────────── */\n const renderBadge = (item: SidebarItem, mini: boolean): React.ReactNode => {\n if (item.count === undefined) return null;\n const bg = badgeBg(item.countColor);\n const txt = item.count > 99 ? \"99+\" : String(item.count);\n if (mini) return (\n <span style={{\n position: \"absolute\", top: 1, right: 1,\n background: bg, color: \"#fff\",\n borderRadius: 8, fontSize: 9, fontWeight: 700,\n padding: \"0 3px\", minWidth: 14, textAlign: \"center\", lineHeight: \"14px\",\n pointerEvents: \"none\",\n }}>{txt}</span>\n );\n return (\n <span style={{\n background: bg, color: \"#fff\",\n borderRadius: 10, padding: \"1px 6px\", fontSize: 11, fontWeight: 700, flexShrink: 0,\n }}>{txt}</span>\n );\n };\n\n /* ── Item renderer ──────────────────────────────────────────────────── */\n const renderItem = (item: SidebarItem, depth: number, idx: number): React.ReactNode => {\n if (item.hidden) return null;\n const key = item.id ?? `${item.type ?? \"navItem\"}-${depth}-${idx}`;\n const type = item.type ?? \"navItem\";\n\n if (type === \"separator\") return (\n <div key={key} style={{ height: 1, background: T.border, margin: \"6px 8px\", flexShrink: 0 }} />\n );\n\n if (type === \"spacer\") return (\n <div key={key} style={{ flex: 1 }} />\n );\n\n if (type === \"title\") {\n if (isCollapsed) return null;\n return (\n <div key={key} style={{\n padding: \"10px 14px 4px\",\n fontSize: 10, fontWeight: 700, textTransform: \"uppercase\",\n letterSpacing: 1, color: T.textMut, flexShrink: 0,\n }}>{item.value}</div>\n );\n }\n\n if (type === \"customHTML\") return (\n <div key={key} dangerouslySetInnerHTML={{ __html: item.html ?? \"\" }}\n style={{ padding: \"8px 12px\", flexShrink: 0 }} />\n );\n\n /* navItem */\n const hasChildren = (item.items?.length ?? 0) > 0;\n const isExp = !!expanded[item.id ?? \"\"];\n const isTwoActive = item.twoState ? !!activeState[item.id ?? \"\"] : false;\n const isSelected = !item.twoState && currentSel === item.id;\n const isActive = isSelected || isTwoActive;\n const isDisabled = !!item.disabled;\n const pl = isCollapsed ? 0 : (12 + depth * 16);\n\n const handleClick = () => {\n if (isDisabled) return;\n if (item.twoState) {\n handleTwoState(item);\n handleSelect(item);\n } else {\n if (hasChildren) setExpanded(e => ({ ...e, [item.id ?? \"\"]: !e[item.id ?? \"\"] }));\n handleSelect(item);\n }\n };\n\n return (\n <div key={key} style={{ flexShrink: 0 }}>\n <div\n title={item.tooltip}\n onClick={handleClick}\n style={{\n display: \"flex\", alignItems: \"center\",\n gap: isCollapsed ? 0 : 8,\n justifyContent: isCollapsed ? \"center\" : \"flex-start\",\n paddingTop: 8, paddingBottom: 8,\n paddingLeft: isCollapsed ? 0 : pl,\n paddingRight: isCollapsed ? 0 : 10,\n borderRadius: T.r,\n margin: \"1px 6px\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n userSelect: \"none\",\n transition: \"background .15s\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isDisabled ? T.textMut : isActive ? T.primary : T.text,\n opacity: isDisabled ? 0.55 : 1,\n }}\n onMouseEnter={e => { if (!isActive && !isDisabled) e.currentTarget.style.background = T.bg; }}\n onMouseLeave={e => { if (!isActive && !isDisabled) e.currentTarget.style.background = \"transparent\"; }}\n >\n {/* Icon with collapsed mini-badge overlay */}\n <span style={{\n position: \"relative\", minWidth: 22, textAlign: \"center\",\n fontSize: 18, flexShrink: 0, lineHeight: 1,\n }}>\n {item.icon ?? (item.value && !item.icon ? null : null)}\n {isCollapsed && renderBadge(item, true)}\n </span>\n\n {/* Label */}\n {!isCollapsed && (\n <span style={{\n flex: 1, fontSize: 13,\n fontWeight: isActive ? 600 : 400,\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n }}>{item.value}</span>\n )}\n\n {/* Badge (expanded) */}\n {!isCollapsed && renderBadge(item, false)}\n\n {/* twoState indicator */}\n {!isCollapsed && item.twoState && (\n <span style={{\n width: 14, height: 14, borderRadius: 2,\n border: `2px solid ${isActive ? T.primary : T.borderDk}`,\n background: isActive ? T.primary : \"transparent\",\n flexShrink: 0, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n {isActive && <span style={{ color: \"#fff\", fontSize: 8, fontWeight: 700, lineHeight: 1 }}>✓</span>}\n </span>\n )}\n\n {/* Expand chevron */}\n {!isCollapsed && hasChildren && !item.twoState && (\n <span style={{\n fontSize: 11, color: T.textMut, flexShrink: 0,\n transition: \"transform .2s\",\n transform: isExp ? \"rotate(90deg)\" : \"rotate(0deg)\",\n display: \"inline-block\",\n }}>▶</span>\n )}\n </div>\n\n {/* Nested children (accordion) */}\n {hasChildren && isExp && !isCollapsed && (\n <div>{item.items!.map((child, ci) => renderItem(child, depth + 1, ci))}</div>\n )}\n </div>\n );\n };\n\n /* ── Collapse toggle ────────────────────────────────────────────────── */\n const collapseBtn = (\n <div\n onClick={handleToggle}\n style={{\n display: \"flex\", alignItems: \"center\",\n justifyContent: isCollapsed ? \"center\" : \"flex-start\",\n gap: 8,\n padding: isCollapsed ? \"8px 0\" : \"8px 14px\",\n margin: \"4px 6px\",\n borderRadius: T.r,\n cursor: \"pointer\",\n color: T.textMut,\n fontSize: 13,\n userSelect: \"none\",\n transition: \"background .15s\",\n flexShrink: 0,\n }}\n onMouseEnter={e => (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => (e.currentTarget.style.background = \"transparent\")}\n >\n <span style={{ fontSize: 16, fontWeight: 700, lineHeight: 1 }}>\n {isCollapsed ? \"›\" : \"‹\"}\n </span>\n {!isCollapsed && <span>Collapse</span>}\n </div>\n );\n\n return (\n <div\n className=\"dhx\"\n style={{\n width: w, minWidth: w,\n background: T.surface,\n borderRight: `1px solid ${T.border}`,\n display: \"flex\", flexDirection: \"column\",\n transition: \"width .2s ease, min-width .2s ease\",\n overflow: \"hidden\",\n ...style,\n }}\n >\n {/* Header */}\n {header && (\n <div style={{\n padding: isCollapsed ? \"12px 0\" : \"12px 14px\",\n borderBottom: `1px solid ${T.border}`,\n fontWeight: 700, fontSize: 15,\n display: \"flex\", alignItems: \"center\",\n justifyContent: isCollapsed ? \"center\" : \"flex-start\",\n overflow: \"hidden\", flexShrink: 0,\n }}>\n {header}\n </div>\n )}\n\n {/* Nav items */}\n <div\n className=\"dhx-scroll\"\n style={{ flex: 1, overflowY: \"auto\", overflowX: \"hidden\", display: \"flex\", flexDirection: \"column\" }}\n >\n {items.map((item, i) => renderItem(item, 0, i))}\n </div>\n\n {/* Collapse toggle */}\n {collapseBtn}\n\n {/* Footer */}\n {footer && !isCollapsed && (\n <div style={{ padding: \"10px 14px\", borderTop: `1px solid ${T.border}`, flexShrink: 0 }}>\n {footer}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface LayoutCellConfig {\n id?: string;\n width?: string | number;\n height?: string | number;\n header?: string;\n collapsable?: boolean;\n padding?: string | number;\n html?: string;\n content?: React.ReactNode;\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n}\n\nexport interface LayoutProps {\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n type?: \"line\" | \"space\" | \"wide\";\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction LayoutCell({ config }: { config: LayoutCellConfig }) {\n const [collapsed, setCollapsed] = useState(false);\n const style: React.CSSProperties = {\n position: \"relative\", background: T.surface,\n border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\",\n ...(config.width ? { width: config.width, minWidth: config.width } : { flex: 1 }),\n ...(config.height ? { height: config.height, minHeight: config.height } : { minHeight: 40 }),\n ...(collapsed ? { flex: \"0 0 auto\" } : {}),\n };\n return (\n <div style={style}>\n {config.header && (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", padding: \"6px 12px\", background: T.bg, borderBottom: `1px solid ${T.border}`, fontSize: 12, fontWeight: 600, color: T.textSec, userSelect: \"none\" }}>\n <span>{config.header}</span>\n {config.collapsable && <button onClick={() => setCollapsed(c => !c)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 16, lineHeight: 1 }}>{collapsed ? \"▼\" : \"▲\"}</button>}\n </div>\n )}\n {!collapsed && (\n <div style={{ padding: config.padding || 0, height: config.header ? \"calc(100% - 33px)\" : \"100%\", overflow: \"auto\" }}>\n {config.html ? <div dangerouslySetInnerHTML={{ __html: config.html }} /> : config.content}\n {(config.rows || config.cols) && <Layout rows={config.rows} cols={config.cols} style={{ height: \"100%\" }} />}\n </div>\n )}\n </div>\n );\n}\n\nexport function Layout({ rows, cols, type = \"line\", style, children }: LayoutProps) {\n useEffect(injectStyles, []);\n const gap = type === \"space\" ? 12 : type === \"wide\" ? 8 : 1;\n const cells = rows || cols;\n const isRow = !!rows;\n if (!cells) return <div className=\"dhx\" style={{ width: \"100%\", height: \"100%\", ...style }}>{children}</div>;\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: isRow ? \"column\" : \"row\", gap, width: \"100%\", height: \"100%\", ...style }}>\n {cells.map((cell, i) => <LayoutCell key={cell.id || i} config={cell} />)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TabView {\n id: string;\n tab: string;\n icon?: React.ReactNode;\n content?: React.ReactNode;\n html?: string;\n}\n\nexport interface TabbarProps {\n views?: TabView[];\n mode?: \"top\" | \"bottom\" | \"left\" | \"right\";\n tabAlign?: \"left\" | \"center\" | \"right\";\n closable?: string[];\n disabled?: string[];\n defaultActive?: string;\n onBeforeChange?: (id: string) => boolean | void;\n onChange?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Tabbar({ views = [], mode = \"top\", tabAlign = \"left\", closable = [], disabled = [], defaultActive, onBeforeChange, onChange, style }: TabbarProps) {\n const [active, setActive] = useState(defaultActive || views[0]?.id);\n const [openTabs, setOpenTabs] = useState(views.map(v => v.id));\n useEffect(injectStyles, []);\n\n const handleClose = (e: React.MouseEvent, id: string) => {\n e.stopPropagation();\n setOpenTabs(t => t.filter(x => x !== id));\n if (active === id) setActive(openTabs.find(t => t !== id) ?? \"\");\n };\n const handleChange = (id: string) => {\n if (disabled.includes(id)) return;\n if (onBeforeChange && onBeforeChange(id) === false) return;\n setActive(id); onChange?.(id);\n };\n\n const isVertical = mode === \"left\" || mode === \"right\";\n const visibleViews = views.filter(v => openTabs.includes(v.id));\n\n const tabBar = (\n <div style={{ display: \"flex\", flexDirection: isVertical ? \"column\" : \"row\", justifyContent: tabAlign === \"center\" ? \"center\" : tabAlign === \"right\" ? \"flex-end\" : \"flex-start\", background: T.surface, borderBottom: !isVertical && mode !== \"bottom\" ? `2px solid ${T.border}` : \"none\", borderTop: mode === \"bottom\" ? `2px solid ${T.border}` : \"none\", borderRight: mode === \"left\" ? `2px solid ${T.border}` : \"none\", borderLeft: mode === \"right\" ? `2px solid ${T.border}` : \"none\", overflowX: \"auto\", flexShrink: 0 }}>\n {visibleViews.map(v => {\n const isActive = active === v.id;\n const isDis = disabled.includes(v.id);\n const activeStyle: React.CSSProperties = mode === \"bottom\"\n ? { borderTop: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 }\n : isVertical\n ? { color: T.primary, fontWeight: 600, background: T.primaryLt, [mode === \"left\" ? \"borderRight\" : \"borderLeft\"]: `2px solid ${T.primary}` }\n : { borderBottom: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 };\n return (\n <div key={v.id} onClick={() => handleChange(v.id)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 6, padding: \"10px 16px\", cursor: isDis ? \"not-allowed\" : \"pointer\", whiteSpace: \"nowrap\", fontSize: 13, transition: \"color .15s\", userSelect: \"none\", minWidth: isVertical ? 120 : \"auto\", ...(isActive ? activeStyle : { color: isDis ? T.textMut : T.textSec }) }}>\n {v.icon && <span style={{ fontSize: 16 }}>{v.icon}</span>}\n <span>{v.tab}</span>\n {closable.includes(v.id) && <span onClick={e => handleClose(e, v.id)} style={{ marginLeft: 4, opacity: .6, fontSize: 12, cursor: \"pointer\" }}>✕</span>}\n </div>\n );\n })}\n </div>\n );\n\n const activeView = visibleViews.find(v => v.id === active);\n const content = (\n <div className=\"dhx-scroll\" style={{ flex: 1, overflow: \"auto\" }}>\n {activeView?.content}\n {activeView?.html && <div dangerouslySetInnerHTML={{ __html: activeView.html }} style={{ padding: 16 }} />}\n </div>\n );\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: mode === \"top\" ? \"column\" : mode === \"bottom\" ? \"column-reverse\" : mode === \"left\" ? \"row\" : \"row-reverse\", width: \"100%\", height: \"100%\", background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\", ...style }}>\n {tabBar}\n {content}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface GridColumnHeader {\n text?: string;\n align?: \"left\" | \"center\" | \"right\";\n htmlEnable?: boolean;\n content?: \"inputFilter\" | \"selectFilter\" | \"comboFilter\";\n}\n\nexport interface GridColumnFooter {\n text?: string | ((s: { sum: number; avg: number; count: number; min: number; max: number }) => string);\n summary?: \"sum\" | \"avg\" | \"count\" | \"min\" | \"max\";\n}\n\nexport interface GridColumn {\n id: string;\n header?: GridColumnHeader[] | string;\n footer?: GridColumnFooter[];\n width?: number;\n minWidth?: number;\n sortable?: boolean;\n filterable?: boolean;\n filterType?: \"input\" | \"select\";\n resizable?: boolean;\n editable?: boolean;\n editorType?: \"input\" | \"select\" | \"combobox\";\n options?: string[];\n hidden?: boolean;\n type?: \"string\" | \"number\" | \"date\" | \"boolean\";\n htmlEnable?: boolean;\n summary?: \"sum\" | \"avg\" | \"count\" | \"min\" | \"max\";\n align?: \"left\" | \"center\" | \"right\";\n template?: (value: unknown, row: Record<string, unknown>) => React.ReactNode;\n}\n\nexport interface GridProps {\n columns: GridColumn[];\n data?: Record<string, unknown>[];\n height?: string | number;\n rowHeight?: number;\n headerRowHeight?: number;\n footerRowHeight?: number;\n sortable?: boolean;\n resizable?: boolean;\n editable?: boolean;\n stripe?: boolean;\n autoWidth?: boolean;\n keyNavigation?: boolean;\n selection?: \"row\" | \"cell\";\n multiselect?: boolean;\n leftSplit?: number;\n onSelect?: (row: Record<string, unknown>) => void;\n onChange?: (row: Record<string, unknown>, colId: string, value: unknown) => void;\n style?: React.CSSProperties;\n}\n\nconst B = `1px solid ${T.border}`;\n\n/* ── SortArrows ── */\nfunction SortArrows({ active, dir }: { active: boolean; dir: \"asc\" | \"desc\" }) {\n return (\n <span style={{ display: \"inline-flex\", flexDirection: \"column\", gap: 1, flexShrink: 0, marginLeft: 4 }}>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 0L7 4H0z\" fill={active && dir === \"asc\" ? T.primary : T.borderDk} />\n </svg>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 4L0 0H7z\" fill={active && dir === \"desc\" ? T.primary : T.borderDk} />\n </svg>\n </span>\n );\n}\n\n/* ── InlineCellCombobox — lightweight dropdown editor for cells ── */\nfunction InlineCellCombobox({ options, value, onChange, onCommit, onCancel }: {\n options: string[];\n value: string;\n onChange: (v: string) => void;\n onCommit: () => void;\n onCancel: () => void;\n}) {\n const [query, setQuery] = useState(value);\n const [open, setOpen] = useState(true);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const h = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) onCommit();\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n }, [onCommit]);\n\n const filtered = options.filter(o => !query || o.toLowerCase().includes(query.toLowerCase()));\n\n return (\n <div ref={ref} style={{ width: \"100%\", position: \"relative\" }}>\n <input\n autoFocus\n value={query}\n onChange={e => { setQuery(e.target.value); onChange(e.target.value); setOpen(true); }}\n onKeyDown={e => { if (e.key === \"Enter\") onCommit(); if (e.key === \"Escape\") onCancel(); }}\n onClick={e => e.stopPropagation()}\n style={{ width: \"100%\", border: \"none\", outline: `2px solid ${T.primary}`, borderRadius: 2, fontSize: 13, padding: \"2px 4px\", background: T.surface, color: T.text }}\n />\n {open && filtered.length > 0 && (\n <div style={{ position: \"absolute\", top: \"100%\", left: 0, right: 0, zIndex: 50, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, boxShadow: T.shadowLg, maxHeight: 160, overflowY: \"auto\" }}>\n {filtered.map(o => (\n <div key={o}\n onMouseDown={e => { e.preventDefault(); onChange(o); setQuery(o); setOpen(false); onCommit(); }}\n style={{ padding: \"6px 10px\", cursor: \"pointer\", fontSize: 13, color: T.text }}\n onMouseEnter={e => (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => (e.currentTarget.style.background = T.surface)}>\n {o}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/* ── Helpers ── */\nfunction formatByType(val: unknown, type: GridColumn[\"type\"]): string {\n if (val == null) return \"\";\n if (type === \"number\") return typeof val === \"number\" ? val.toLocaleString() : String(val);\n if (type === \"date\") {\n const d = val instanceof Date ? val : new Date(String(val));\n return isNaN(d.getTime()) ? String(val) : d.toLocaleDateString();\n }\n return String(val);\n}\n\nfunction compareValues(a: unknown, b: unknown, type: GridColumn[\"type\"]): number {\n if (a == null) return 1;\n if (b == null) return -1;\n if (type === \"date\") return new Date(String(a)).getTime() - new Date(String(b)).getTime();\n if (type === \"number\") return Number(a) - Number(b);\n return String(a) < String(b) ? -1 : String(a) > String(b) ? 1 : 0;\n}\n\nfunction getFilterWidget(col: GridColumn): \"inputFilter\" | \"selectFilter\" | \"comboFilter\" | null {\n if (Array.isArray(col.header) && col.header[1]?.content != null) return col.header[1].content;\n if (col.filterable) return col.filterType === \"select\" ? \"selectFilter\" : \"inputFilter\";\n return null;\n}\n\nfunction renderEditor(\n col: GridColumn,\n editValue: string,\n setEditValue: (v: string) => void,\n commit: () => void,\n cancel: () => void,\n): React.ReactNode {\n const base: React.CSSProperties = {\n width: \"100%\", border: \"none\", outline: `2px solid ${T.primary}`,\n borderRadius: 2, fontSize: 13, padding: \"2px 4px\", background: T.surface, color: T.text,\n };\n\n const et = col.editorType ?? \"input\";\n\n if (et === \"select\") return (\n <select autoFocus value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commit}\n onKeyDown={e => { if (e.key === \"Enter\") commit(); if (e.key === \"Escape\") cancel(); }}\n onClick={e => e.stopPropagation()}\n style={{ ...base, cursor: \"pointer\" }}>\n {(col.options ?? []).map(o => <option key={o} value={o}>{o}</option>)}\n </select>\n );\n\n if (et === \"combobox\") return (\n <InlineCellCombobox options={col.options ?? []} value={editValue}\n onChange={setEditValue} onCommit={commit} onCancel={cancel} />\n );\n\n const inputType = col.type === \"number\" ? \"number\" : col.type === \"date\" ? \"date\" : \"text\";\n return (\n <input autoFocus type={inputType} value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commit}\n onKeyDown={e => { if (e.key === \"Enter\") commit(); if (e.key === \"Escape\") cancel(); }}\n onClick={e => e.stopPropagation()}\n style={base}\n />\n );\n}\n\n/* ── Grid ── */\nexport function Grid({\n columns, data = [], height = 400, rowHeight = 40,\n headerRowHeight = 40, footerRowHeight = 40,\n sortable = true, resizable = true, editable = false,\n stripe = false, autoWidth = false, keyNavigation = false,\n selection, multiselect, leftSplit = 0,\n onSelect, onChange, style,\n}: GridProps) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n const [filter, setFilter] = useState<Record<string, string>>({});\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [focusRow, setFocusRow] = useState(-1);\n const [colWidths, setColWidths] = useState<Record<string, number>>(\n () => Object.fromEntries(columns.map(c => [c.id, c.width ?? c.minWidth ?? 150])),\n );\n const [editCell, setEditCell] = useState<{ key: string | number; colId: string } | null>(null);\n const [editValue, setEditValue] = useState(\"\");\n const [edits, setEdits] = useState<Record<string, Record<string, unknown>>>({});\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerW, setContainerW] = useState(0);\n useEffect(injectStyles, []);\n\n useEffect(() => {\n if (!autoWidth || !containerRef.current) return;\n const ro = new ResizeObserver(() => setContainerW(containerRef.current?.offsetWidth ?? 0));\n ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, [autoWidth]);\n\n /* promote col.summary shorthand → footer[0].summary */\n const normalizedColumns = useMemo(() =>\n columns.map(col =>\n col.summary && (!col.footer || col.footer.length === 0)\n ? { ...col, footer: [{ summary: col.summary }] }\n : col,\n ),\n [columns]);\n\n /* visible (non-hidden) columns */\n const visibleColumns = useMemo(() =>\n normalizedColumns.filter(c => !c.hidden),\n [normalizedColumns]);\n\n /* effective widths (autoWidth distributes leftover) */\n const widths = useMemo<Record<string, number>>(() => {\n if (!autoWidth || containerW === 0) return colWidths;\n const total = visibleColumns.reduce((a, c) => a + (colWidths[c.id] ?? 150), 0);\n if (containerW <= total) return colWidths;\n const extra = (containerW - total) / visibleColumns.length;\n return Object.fromEntries(visibleColumns.map(c => [c.id, (colWidths[c.id] ?? 150) + extra]));\n }, [autoWidth, containerW, colWidths, visibleColumns]);\n\n /* sorted + filtered rows */\n const sorted = useMemo(() => {\n let rows = data\n .map((row, i) => {\n const key = String((row.id as string | number) ?? i);\n return edits[key] ? { ...row, ...edits[key] } : row;\n })\n .filter(row =>\n Object.entries(filter).every(([k, v]) =>\n !v || String(row[k] ?? \"\").toLowerCase().includes(v.toLowerCase()),\n ),\n );\n if (sortKey) {\n const col = normalizedColumns.find(c => c.id === sortKey);\n rows = [...rows].sort((a, b) => {\n const cmp = compareValues(a[sortKey], b[sortKey], col?.type);\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, sortKey, sortDir, filter, edits, normalizedColumns]);\n\n /* footer aggregation */\n const colStats = useMemo(() => {\n const s: Record<string, { sum: number; avg: number; count: number; min: number; max: number }> = {};\n normalizedColumns.forEach(col => {\n if (col.footer?.some(f => f.summary)) {\n const nums = sorted.map(r => Number(r[col.id])).filter(n => !isNaN(n));\n const sum = nums.reduce((a, b) => a + b, 0);\n s[col.id] = { sum, avg: nums.length ? sum / nums.length : 0, count: sorted.length, min: nums.length ? Math.min(...nums) : 0, max: nums.length ? Math.max(...nums) : 0 };\n }\n });\n return s;\n }, [sorted, normalizedColumns]);\n\n /* select filter options */\n const selectOpts = useMemo(() => {\n const o: Record<string, string[]> = {};\n visibleColumns\n .filter(c => { const w = getFilterWidget(c); return w === \"selectFilter\" || w === \"comboFilter\"; })\n .forEach(col => { o[col.id] = [...new Set(data.map(r => String(r[col.id] ?? \"\")))].sort(); });\n return o;\n }, [data, visibleColumns]);\n\n const hasFilterRow = visibleColumns.some(c => getFilterWidget(c) !== null);\n const hasFooter = normalizedColumns.some(c => c.footer?.length);\n const totalW = visibleColumns.reduce((a, c) => a + (widths[c.id] ?? 150), 0);\n\n /* sticky left offsets */\n const stickyLefts = useMemo<Record<string, number>>(() => {\n if (!leftSplit) return {};\n let acc = 0;\n const offsets: Record<string, number> = {};\n visibleColumns.forEach((col, i) => {\n if (i < leftSplit) { offsets[col.id] = acc; acc += widths[col.id] ?? 150; }\n });\n return offsets;\n }, [leftSplit, visibleColumns, widths]);\n\n const lastStickyId = leftSplit > 0 ? visibleColumns[leftSplit - 1]?.id : null;\n\n const rowKey = (row: Record<string, unknown>, ri: number): string | number =>\n (row.id as string | number) ?? ri;\n\n const handleSort = (col: GridColumn) => {\n if (!sortable || col.sortable === false) return;\n setSortDir(d => sortKey === col.id ? (d === \"asc\" ? \"desc\" : \"asc\") : \"asc\");\n setSortKey(col.id);\n };\n\n const selectRow = (row: Record<string, unknown>, ri: number) => {\n if (!selection) return;\n const rk = rowKey(row, ri);\n setFocusRow(ri);\n setSelected(s => {\n const ns = multiselect ? new Set(s) : new Set<string | number>();\n ns.has(rk) ? ns.delete(rk) : ns.add(rk);\n return ns;\n });\n onSelect?.(row);\n };\n\n const commitEdit = () => {\n if (!editCell) return;\n const { key, colId } = editCell;\n setEdits(e => ({ ...e, [String(key)]: { ...(e[String(key)] || {}), [colId]: editValue } }));\n const row = sorted.find((r, i) => rowKey(r, i) === key);\n if (row) onChange?.(row, colId, editValue);\n setEditCell(null);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (editCell && e.key === \"Escape\") { setEditCell(null); return; }\n if (!keyNavigation || !selection) return;\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = Math.min(focusRow + 1, sorted.length - 1);\n if (next >= 0) selectRow(sorted[next], next);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prev = Math.max(focusRow - 1, 0);\n if (prev >= 0) selectRow(sorted[prev], prev);\n }\n };\n\n const startResize = (e: React.MouseEvent, colId: string) => {\n e.preventDefault(); e.stopPropagation();\n const startX = e.clientX, startW = colWidths[colId] ?? 150;\n const col = columns.find(c => c.id === colId);\n const move = (me: MouseEvent) => setColWidths(ws => ({\n ...ws, [colId]: Math.max(col?.minWidth || 50, startW + me.clientX - startX),\n }));\n const up = () => { document.removeEventListener(\"mousemove\", move); document.removeEventListener(\"mouseup\", up); };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n };\n\n /* cell style — includes sticky positioning for left-split columns */\n const cs = (colId: string, w: number, align: GridColumn[\"align\"], first: boolean, h: number, overflow: \"hidden\" | \"visible\" = \"hidden\"): React.CSSProperties => {\n const sticky = colId in stickyLefts;\n return {\n width: w, minWidth: w, flexShrink: 0, boxSizing: \"border-box\",\n padding: \"0 12px\", height: h, display: \"flex\", alignItems: \"center\",\n overflow, textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n fontSize: 13, textAlign: align,\n justifyContent: align === \"center\" ? \"center\" : align === \"right\" ? \"flex-end\" : \"flex-start\",\n borderLeft: first ? \"none\" : B,\n position: sticky ? \"sticky\" : \"relative\",\n ...(sticky ? {\n left: stickyLefts[colId],\n zIndex: 1,\n boxShadow: colId === lastStickyId ? \"2px 0 6px rgba(0,0,0,0.1)\" : undefined,\n } : {}),\n };\n };\n\n return (\n <div\n ref={containerRef}\n className=\"dhx\"\n tabIndex={keyNavigation ? 0 : undefined}\n onKeyDown={handleKeyDown}\n style={{ width: \"100%\", height, display: \"flex\", flexDirection: \"column\", border: B, borderRadius: T.r, overflow: \"hidden\", outline: \"none\", ...style }}\n >\n <div className=\"dhx-scroll\" style={{ overflow: \"auto\", flex: 1 }}>\n <div style={{ minWidth: totalW, display: \"flex\", flexDirection: \"column\", minHeight: \"100%\" }}>\n\n {/* ── Header ── */}\n <div style={{ display: \"flex\", background: T.bg, borderBottom: B, flexShrink: 0, position: \"sticky\", top: 0, zIndex: 3 }}>\n {visibleColumns.map((col, i) => {\n const h0 = Array.isArray(col.header) ? col.header[0] : null;\n const hText = h0?.text ?? (typeof col.header === \"string\" ? col.header : col.id);\n const hAlign = h0?.align ?? col.align;\n const w = widths[col.id] ?? 150;\n const isStickyCl = col.id in stickyLefts;\n return (\n <div key={col.id}\n onClick={() => handleSort(col)}\n style={{\n ...cs(col.id, w, hAlign, i === 0, headerRowHeight),\n fontWeight: 500, color: T.text, background: T.bg,\n cursor: sortable && col.sortable !== false ? \"pointer\" : \"default\",\n userSelect: \"none\",\n ...(isStickyCl ? { zIndex: 4 } : {}),\n }}>\n {h0?.htmlEnable\n ? <span style={{ flex: 1, overflow: \"hidden\" }} dangerouslySetInnerHTML={{ __html: hText }} />\n : <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{hText}</span>\n }\n {sortable && col.sortable !== false && (\n <SortArrows active={sortKey === col.id} dir={sortDir} />\n )}\n {resizable && col.resizable !== false && i < visibleColumns.length - 1 && (\n <div\n onMouseDown={e => startResize(e, col.id)}\n onClick={e => e.stopPropagation()}\n style={{ position: \"absolute\", right: 0, top: 0, bottom: 0, width: 4, cursor: \"col-resize\", zIndex: 1 }}\n onMouseEnter={e => (e.currentTarget.style.background = T.primary + \"55\")}\n onMouseLeave={e => (e.currentTarget.style.background = \"transparent\")}\n />\n )}\n </div>\n );\n })}\n </div>\n\n {/* ── Filter row (or header[1] content row) ── */}\n {hasFilterRow && (\n <div style={{\n display: \"flex\", borderBottom: B, background: T.surface, flexShrink: 0,\n ...(leftSplit ? { position: \"sticky\" as const, top: headerRowHeight, zIndex: 3 } : {}),\n }}>\n {visibleColumns.map((col, i) => {\n const widget = getFilterWidget(col);\n const w = widths[col.id] ?? 150;\n const isStickyCl = col.id in stickyLefts;\n return (\n <div key={col.id} style={{\n width: w, minWidth: w, flexShrink: 0, padding: \"4px 6px\",\n boxSizing: \"border-box\", borderLeft: i === 0 ? \"none\" : B,\n background: T.surface,\n ...(isStickyCl ? {\n position: \"sticky\" as const,\n left: stickyLefts[col.id],\n zIndex: 4,\n boxShadow: col.id === lastStickyId ? \"2px 0 6px rgba(0,0,0,0.1)\" : undefined,\n } : {}),\n }}>\n {(widget === \"selectFilter\" || widget === \"comboFilter\") ? (\n <select className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12, padding: \"0 4px\" }}\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))}>\n <option value=\"\">All</option>\n {(selectOpts[col.id] || []).map(v => <option key={v} value={v}>{v}</option>)}\n </select>\n ) : widget === \"inputFilter\" ? (\n <input className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12 }}\n placeholder=\"Filter...\"\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))} />\n ) : null}\n </div>\n );\n })}\n </div>\n )}\n\n {/* ── Body ── */}\n <div style={{ flex: 1 }}>\n {sorted.map((row, ri) => {\n const rk = rowKey(row, ri);\n const isSel = selected.has(rk);\n const rowBg = isSel ? T.primaryLt : (stripe && ri % 2 !== 0) ? T.bg : T.surface;\n return (\n <div key={String(rk)}\n style={{ display: \"flex\", height: rowHeight, borderBottom: B, flexShrink: 0, background: rowBg, transition: \"background .1s\", cursor: selection ? \"pointer\" : \"default\" }}\n onMouseEnter={e => !isSel && (e.currentTarget.style.background = T.primaryLt + \"80\")}\n onMouseLeave={e => !isSel && (e.currentTarget.style.background = rowBg)}\n >\n {visibleColumns.map((col, ci) => {\n const isEditing = editCell?.key === rk && editCell?.colId === col.id;\n const rawVal = row[col.id];\n const w = widths[col.id] ?? 150;\n const canEdit = (editable || col.editable) && col.editable !== false;\n\n let cellContent: React.ReactNode;\n if (isEditing) {\n cellContent = renderEditor(col, editValue, setEditValue, commitEdit, () => setEditCell(null));\n } else if (col.template) {\n cellContent = col.template(rawVal, row);\n } else if (col.htmlEnable) {\n cellContent = <span dangerouslySetInnerHTML={{ __html: String(rawVal ?? \"\") }} />;\n } else if (col.type === \"boolean\") {\n cellContent = (\n <input type=\"checkbox\" readOnly checked={!!rawVal}\n style={{ width: 16, height: 16, accentColor: T.primary, cursor: canEdit ? \"pointer\" : \"default\" }} />\n );\n } else {\n cellContent = formatByType(rawVal, col.type);\n }\n\n return (\n <div key={col.id}\n onClick={() => {\n selectRow(row, ri);\n if (!canEdit) return;\n if (col.type === \"boolean\") {\n const newVal = !rawVal;\n const k = String(rk);\n setEdits(e => ({ ...e, [k]: { ...(e[k] || {}), [col.id]: newVal } }));\n onChange?.(row, col.id, newVal);\n } else {\n setEditCell({ key: rk, colId: col.id });\n setEditValue(String(rawVal ?? \"\"));\n }\n }}\n style={{ ...cs(col.id, w, col.align, ci === 0, rowHeight, isEditing ? \"visible\" : \"hidden\"), background: rowBg }}>\n {cellContent}\n </div>\n );\n })}\n </div>\n );\n })}\n {sorted.length === 0 && (\n <div style={{ textAlign: \"center\", padding: 40, color: T.textMut, fontSize: 13 }}>No data</div>\n )}\n </div>\n\n {/* ── Footer ── */}\n {hasFooter && (\n <div style={{ display: \"flex\", borderTop: B, background: T.bg, flexShrink: 0, position: \"sticky\", bottom: 0, zIndex: 2 }}>\n {visibleColumns.map((col, i) => {\n const f = col.footer?.[0];\n const stats = colStats[col.id] ?? { sum: 0, avg: 0, count: 0, min: 0, max: 0 };\n let content: React.ReactNode = \"\";\n if (f) {\n if (typeof f.text === \"function\") content = f.text(stats);\n else if (f.text) content = f.text;\n else if (f.summary) content = String(Math.round(stats[f.summary] * 100) / 100);\n }\n const w = widths[col.id] ?? 150;\n const isStickyCl = col.id in stickyLefts;\n return (\n <div key={col.id} style={{\n ...cs(col.id, w, col.align, i === 0, footerRowHeight),\n fontWeight: 600, color: T.text, background: T.bg,\n ...(isStickyCl ? { zIndex: 3 } : {}),\n }}>\n {content}\n </div>\n );\n })}\n </div>\n )}\n\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport {\n BarChart, Bar, LineChart, Line, AreaChart, Area,\n PieChart, Pie, Cell, RadarChart, Radar, PolarGrid, PolarAngleAxis, PolarRadiusAxis,\n ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n ResponsiveContainer, Treemap,\n} from \"recharts\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nconst COLORS = [\"#0288d1\",\"#43a047\",\"#f57c00\",\"#e53935\",\"#8e24aa\",\"#00838f\",\"#ef6c00\",\"#2e7d32\"];\n\nexport interface ChartSeries {\n id?: string;\n value?: string; // data field for value / X axis for scatter\n valueY?: string; // data field for Y axis (scatter)\n label?: string; // legend label\n color?: string; // line/stroke color OR field name for per-item color (pie/donut)\n fill?: string; // explicit fill override (bar/area)\n strokeWidth?: number;\n text?: string; // field name for display label (pie/donut)\n stroke?: string; // border color (pie/donut slices)\n pointColor?: string; // point color alias (radar)\n data?: Record<string, unknown>[];\n tooltipTemplate?:(item: unknown[]) => string;\n direction?: \"asc\" | \"desc\";\n}\n\nexport interface ChartScales {\n bottom?: { text?: string; title?: string; min?: number; max?: number };\n left?: { min?: number; max?: number; maxTicks?: number; title?: string };\n radial?: { value?: string; maxTicks?: number };\n}\n\nexport interface ChartLegend {\n halign?: \"left\" | \"center\" | \"right\";\n valign?: \"top\" | \"middle\" | \"bottom\";\n series?: string[];\n values?: { id?: string; text?: string; color?: string };\n}\n\nexport type ChartType = \"bar\" | \"line\" | \"area\" | \"pie\" | \"donut\" | \"radar\" | \"scatter\" | \"treeMap\";\n\nexport interface ChartProps {\n type?: ChartType;\n data?: Record<string, unknown>[];\n series?: ChartSeries[];\n scales?: ChartScales;\n legend?: ChartLegend;\n height?: number | string;\n style?: React.CSSProperties;\n}\n\n/* build nested tree from flat data with { id, parent } refs */\nfunction buildTreemap(\n data: Record<string, unknown>[],\n valueKey: string,\n nameKey: string,\n): { name: string; children?: { name: string; value: number }[] }[] {\n const roots = data.filter(d => !d.parent);\n const children = data.filter(d => !!d.parent);\n return roots.map(root => ({\n name: root[nameKey] as string,\n children: children\n .filter(c => c.parent === root.id)\n .map(c => ({ name: c[nameKey] as string, value: Number(c[valueKey] ?? 0) })),\n }));\n}\n\nexport function Chart({\n type = \"bar\", data = [], series = [], scales = {}, legend, height = 280, style,\n}: ChartProps) {\n useEffect(injectStyles, []);\n\n const xKey = scales.bottom?.text || (data[0] && Object.keys(data[0])[0]) || \"x\";\n\n const tip = (\n <Tooltip\n contentStyle={{ fontSize: 12, borderRadius: T.r, border: `1px solid ${T.border}` }}\n />\n );\n const leg = legend ? (\n <Legend\n iconSize={10}\n wrapperStyle={{ fontSize: 12 }}\n verticalAlign={legend.valign === \"bottom\" ? \"bottom\" : legend.valign === \"middle\" ? \"middle\" : \"top\"}\n align={legend.halign ?? \"center\"}\n />\n ) : null;\n const grid = <CartesianGrid strokeDasharray=\"3 3\" stroke={T.border} />;\n const xAxis = (\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={{ stroke: T.border }}\n tickLine={false}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n );\n const yAxis = (\n <YAxis\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={false}\n tickLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n tickCount={scales.left?.maxTicks}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n );\n const margin = {\n top: 10, right: 20, left: 0,\n bottom: scales.bottom?.title ? 20 : 0,\n };\n const common = { data, margin };\n\n let chart: React.ReactNode;\n\n /* ── bar ── */\n if (type === \"bar\") {\n chart = (\n <BarChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => (\n <Bar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n fill={s.fill || s.color || COLORS[i % COLORS.length]}\n radius={[3, 3, 0, 0]}\n />\n ))}\n </BarChart>\n );\n\n /* ── line ── */\n } else if (type === \"line\") {\n chart = (\n <LineChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Line\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n strokeWidth={s.strokeWidth ?? 2}\n dot={{ r: 3, fill: c }}\n />\n );\n })}\n </LineChart>\n );\n\n /* ── area ── */\n } else if (type === \"area\") {\n chart = (\n <AreaChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Area\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={(s.fill || c) + \"33\"}\n strokeWidth={s.strokeWidth ?? 2}\n />\n );\n })}\n </AreaChart>\n );\n\n /* ── pie / donut ── */\n } else if (type === \"pie\" || type === \"donut\") {\n const s0 = series[0] || {};\n const dataKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n // s0.color may be a field name in the data (per-item color) or undefined/direct color\n const colorField = s0.color && data[0] && s0.color in data[0] ? s0.color : null;\n chart = (\n <PieChart>\n <Pie\n data={data}\n cx=\"50%\" cy=\"50%\"\n outerRadius={type === \"donut\" ? \"70%\" : \"80%\"}\n innerRadius={type === \"donut\" ? \"40%\" : 0}\n dataKey={dataKey}\n nameKey={nameKey}\n stroke={s0.stroke || \"none\"}\n strokeWidth={s0.strokeWidth ?? 0}\n label={({ name, percent }: { name?: string; percent?: number }) =>\n `${name ?? \"\"} ${((percent ?? 0) * 100).toFixed(0)}%`}\n labelLine\n paddingAngle={2}\n >\n {data.map((row, i) => (\n <Cell\n key={i}\n fill={colorField ? (row[colorField] as string) : COLORS[i % COLORS.length]}\n />\n ))}\n </Pie>\n {tip}{leg}\n </PieChart>\n );\n\n /* ── radar ── */\n } else if (type === \"radar\") {\n const radarKey = scales.radial?.value || xKey;\n chart = (\n <RadarChart {...common} cx=\"50%\" cy=\"50%\">\n <PolarGrid />\n <PolarAngleAxis dataKey={radarKey} tick={{ fontSize: 11 }} />\n <PolarRadiusAxis tick={{ fontSize: 9, fill: T.textMut }} axisLine={false} />\n {series.map((s, i) => {\n const c = s.color || s.pointColor || COLORS[i % COLORS.length];\n return (\n <Radar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={c + \"44\"}\n />\n );\n })}\n {tip}{leg}\n </RadarChart>\n );\n\n /* ── scatter ── */\n } else if (type === \"scatter\") {\n chart = (\n <ScatterChart margin={margin}>\n {grid}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={scales.bottom?.title || \"x\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n domain={[scales.bottom?.min ?? \"auto\", scales.bottom?.max ?? \"auto\"]}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={scales.left?.title || \"y\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n axisLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n {tip}{leg}\n {series.map((s, i) => {\n const xField = s.value || \"x\";\n const yField = s.valueY || \"y\";\n const pts = (s.data || data).map(row => ({\n x: row[xField],\n y: row[yField],\n })) as never[];\n return (\n <Scatter\n key={s.id ?? i}\n data={pts}\n name={s.label || s.id}\n fill={s.color || COLORS[i % COLORS.length]}\n />\n );\n })}\n </ScatterChart>\n );\n\n /* ── treeMap ── */\n } else if (type === \"treeMap\") {\n const s0 = series[0] || {};\n const valKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n const treeData = buildTreemap(data, valKey, nameKey);\n const borderColor = s0.stroke || T.surface;\n const borderWidth = s0.strokeWidth ?? 2;\n chart = (\n <Treemap\n data={treeData}\n dataKey=\"value\"\n aspectRatio={4 / 3}\n stroke={borderColor}\n content={((props: Record<string, unknown>) => {\n const { x, y, width, height: h, depth, index, name } = props as {\n x: number; y: number; width: number; height: number;\n depth: number; index: number; name: string;\n };\n if (depth === 0) return null;\n const fill = COLORS[index % COLORS.length];\n return (\n <g>\n <rect\n x={x} y={y} width={width} height={h}\n fill={fill} stroke={borderColor} strokeWidth={borderWidth}\n style={{ borderRadius: 3 }}\n />\n {width > 40 && h > 20 && (\n <text\n x={x + width / 2} y={y + h / 2}\n textAnchor=\"middle\" dominantBaseline=\"middle\"\n fill=\"#fff\" fontSize={11} pointerEvents=\"none\"\n >\n {name}\n </text>\n )}\n </g>\n );\n }) as never}\n />\n );\n }\n\n return (\n <div\n className=\"dhx\"\n style={{ width: \"100%\", height, padding: 12, background: T.surface, borderRadius: T.rMd, ...style }}\n >\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {chart as React.ReactElement}\n </ResponsiveContainer>\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface CalendarProps {\n value?: Date | [Date, Date] | null;\n range?: boolean;\n timepicker?: boolean;\n onChange?: (value: Date | [Date, Date]) => void;\n style?: React.CSSProperties;\n}\n\nconst MONTHS = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\nconst DAYS = [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"];\n\nexport function Calendar({ value, range = false, timepicker = false, onChange, style }: CalendarProps) {\n const today = new Date();\n const initDate = value ? new Date(Array.isArray(value) ? value[0] : value) : today;\n const [view, setView] = useState(initDate);\n const [selected, setSelected] = useState<Date | [Date | null, Date | null] | null>(value ?? (range ? [null, null] : null));\n const [hovDate, setHovDate] = useState<Date | null>(null);\n const [time, setTime] = useState({ h: 0, m: 0 });\n useEffect(injectStyles, []);\n\n const year = view.getFullYear(); const month = view.getMonth();\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n const cells: (Date | null)[] = [];\n for (let i = 0; i < firstDay; i++) cells.push(null);\n for (let d = 1; d <= daysInMonth; d++) cells.push(new Date(year, month, d));\n\n const isToday = (d: Date) => d.toDateString() === today.toDateString();\n const isSelected = (d: Date) => {\n if (!selected) return false;\n if (range && Array.isArray(selected)) {\n const [s, e] = selected as [Date | null, Date | null];\n if (!s) return false;\n const dv = d.getTime();\n if (!e) return d.toDateString() === s.toDateString();\n return dv >= s.getTime() && dv <= e.getTime();\n }\n return d.toDateString() === (selected as Date).toDateString();\n };\n\n const handleDay = (d: Date) => {\n if (range) {\n const [s, e] = Array.isArray(selected) ? (selected as [Date | null, Date | null]) : [null, null];\n if (!s || e) { setSelected([d, null]); }\n else {\n const sorted: [Date, Date] = d < s ? [d, s] : [s, d];\n setSelected(sorted); onChange?.(sorted);\n }\n } else { setSelected(d); onChange?.(d); }\n };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() - 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>‹</button>\n <div style={{ fontWeight: 700, fontSize: 14 }}>{MONTHS[month]} {year}</div>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() + 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>›</button>\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 32px)\", gap: 2 }}>\n {DAYS.map(d => <div key={d} style={{ textAlign: \"center\", fontSize: 11, fontWeight: 600, color: T.textMut, paddingBottom: 4 }}>{d}</div>)}\n {cells.map((d, i) => {\n const sel = d ? isSelected(d) : false;\n const isHov = d && hovDate && d.toDateString() === hovDate.toDateString();\n return (\n <div key={i} onClick={() => d && handleDay(d)} onMouseEnter={() => d && setHovDate(d)} onMouseLeave={() => setHovDate(null)}\n style={{ width: 32, height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", borderRadius: T.r, cursor: d ? \"pointer\" : \"default\", fontSize: 12, fontWeight: d && isToday(d) ? 700 : 400, background: sel ? T.primary : isHov ? T.bg : \"transparent\", color: sel ? \"#fff\" : d && isToday(d) ? T.primary : d ? T.text : \"transparent\", border: d && isToday(d) && !sel ? `1px solid ${T.primary}` : \"1px solid transparent\", transition: \"all .1s\" }}>\n {d?.getDate()}\n </div>\n );\n })}\n </div>\n {timepicker && (\n <div style={{ borderTop: `1px solid ${T.border}`, marginTop: 12, paddingTop: 12, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 8 }}>\n <input type=\"number\" min={0} max={23} value={time.h} onChange={e => setTime(t => ({ ...t, h: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n <span style={{ fontWeight: 700, color: T.textSec }}>:</span>\n <input type=\"number\" min={0} max={59} value={time.m} onChange={e => setTime(t => ({ ...t, m: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TimeValue { h: number; m: number; ampm?: \"AM\" | \"PM\"; }\n\nexport interface TimepickerProps {\n value?: TimeValue;\n onChange?: (value: TimeValue) => void;\n timeFormat?: 12 | 24;\n controls?: boolean;\n minuteStep?: number;\n style?: React.CSSProperties;\n}\n\nexport function Timepicker({ value, onChange, timeFormat = 12, controls = false, minuteStep = 5, style }: TimepickerProps) {\n const [h, setH] = useState(value?.h ?? (timeFormat === 24 ? 0 : 12));\n const [m, setM] = useState(value?.m ?? 0);\n const [ampm, setAmpm] = useState<\"AM\" | \"PM\">(value?.ampm ?? \"AM\");\n const [pending, setPending] = useState<TimeValue | null>(null);\n useEffect(injectStyles, []);\n\n const hours = timeFormat === 24\n ? Array.from({ length: 24 }, (_, i) => i)\n : Array.from({ length: 12 }, (_, i) => i + 1);\n const mins = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => i * minuteStep);\n\n const handleChange = (newH: number, newM: number, newAmpm: \"AM\" | \"PM\") => {\n const val: TimeValue = timeFormat === 24 ? { h: newH, m: newM } : { h: newH, m: newM, ampm: newAmpm };\n if (controls) setPending(val);\n else onChange?.(val);\n };\n\n const handleCancel = () => {\n setPending(null);\n setH(value?.h ?? (timeFormat === 24 ? 0 : 12));\n setM(value?.m ?? 0);\n setAmpm(value?.ampm ?? \"AM\");\n };\n\n const colStyle = { display: \"flex\", flexDirection: \"column\" as const, alignItems: \"center\" as const, gap: 4 };\n const cellStyle = (active: boolean): React.CSSProperties => ({\n height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n cursor: \"pointer\", fontSize: 13,\n fontWeight: active ? 700 : 400,\n background: active ? T.primaryLt : \"transparent\",\n color: active ? T.primary : T.text,\n });\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"stretch\" }}>\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Hours</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {hours.map(v => (\n <div key={v} onClick={() => { setH(v); handleChange(v, m, ampm); }}\n style={cellStyle(h === v)}\n onMouseEnter={e => h !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => h !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Minutes</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {mins.map(v => (\n <div key={v} onClick={() => { setM(v); handleChange(h, v, ampm); }}\n style={cellStyle(m === v)}\n onMouseEnter={e => m !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => m !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n {timeFormat === 12 && (\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>AM/PM</span>\n <div style={{ display: \"flex\", flexDirection: \"column\", border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\" }}>\n {([\"AM\", \"PM\"] as const).map(v => (\n <div key={v} onClick={() => { setAmpm(v); handleChange(h, m, v); }}\n style={{ height: 40, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", cursor: \"pointer\", padding: \"0 12px\", fontSize: 13, fontWeight: ampm === v ? 700 : 400, background: ampm === v ? T.primary : T.surface, color: ampm === v ? \"#fff\" : T.text }}>\n {v}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <div style={{ textAlign: \"center\", marginTop: 12, fontSize: 22, fontWeight: 700, color: T.primary, letterSpacing: 2 }}>\n {String(h).padStart(2, \"0\")}:{String(m).padStart(2, \"0\")}{timeFormat === 12 ? ` ${ampm}` : \"\"}\n </div>\n\n {controls && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: \"flex-end\", marginTop: 12 }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={handleCancel}>Cancel</button>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => {\n const val = pending ?? (timeFormat === 24 ? { h, m } : { h, m, ampm });\n onChange?.(val);\n }}>Apply</button>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface ComboboxItem {\n id?: string;\n value: string;\n count?: number;\n}\n\nexport interface ComboboxProps {\n data?: ComboboxItem[];\n value?: string | string[] | null;\n placeholder?: string;\n multiselection?: boolean;\n label?: string;\n onChange?: (value: string | string[]) => void;\n style?: React.CSSProperties;\n}\n\nconst Chevron = ({ open }: { open: boolean }) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" style={{ flexShrink: 0, transition: \"transform .15s\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}>\n <path d=\"M2 4l4 4 4-4\" stroke={T.textMut} strokeWidth=\"1.5\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport function Combobox({ data = [], value: valueProp, placeholder = \"Select or type...\", multiselection = false, label, onChange, style }: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selected, setSelected] = useState<string | string[] | null>(\n multiselection\n ? (valueProp ? ([] as string[]).concat(valueProp as string) : [])\n : (valueProp || null)\n );\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => { setOpen(false); setQuery(\"\"); }, []));\n\n const filtered = useMemo(\n () => data.filter(d => !query || d.value.toLowerCase().includes(query.toLowerCase())),\n [data, query]\n );\n const isSelected = (id: string) =>\n multiselection ? (selected as string[] || []).includes(id) : selected === id;\n\n const handleSelect = (item: ComboboxItem) => {\n const key = item.id || item.value;\n if (multiselection) {\n const ns = isSelected(key)\n ? (selected as string[]).filter(s => s !== key)\n : [...(selected as string[] || []), key];\n setSelected(ns);\n onChange?.(ns);\n } else {\n setSelected(key);\n setQuery(\"\");\n setOpen(false);\n onChange?.(key);\n }\n };\n\n const removeTag = (key: string) => {\n const ns = (selected as string[]).filter(s => s !== key);\n setSelected(ns);\n onChange?.(ns);\n };\n\n const openDropdown = () => {\n setOpen(true);\n setTimeout(() => inputRef.current?.focus(), 0);\n };\n\n /* ── single-select display value ── */\n const singleDisplayValue = data.find(d => (d.id || d.value) === selected)?.value || \"\";\n\n const selectedTags = multiselection ? (selected as string[]) || [] : [];\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n\n {/* ── trigger ── */}\n <div\n onClick={openDropdown}\n style={{\n display: \"flex\", alignItems: \"center\", flexWrap: multiselection ? \"wrap\" : \"nowrap\",\n border: `1px solid ${open ? T.primary : T.border}`, borderRadius: T.r,\n minHeight: 34, padding: \"4px 8px\", cursor: \"text\", background: T.surface, gap: 4,\n transition: \"border-color .15s\", boxShadow: open ? `0 0 0 3px ${T.primary}22` : \"none\",\n }}>\n\n {/* ── multiselect: chips + inline search ── */}\n {multiselection && (\n <>\n {selectedTags.map(s => (\n <span key={s} style={{\n display: \"inline-flex\", alignItems: \"center\", gap: 4,\n background: T.primary, color: \"#fff\",\n borderRadius: 12, padding: \"2px 10px 2px 8px\", fontSize: 12, lineHeight: 1.5,\n whiteSpace: \"nowrap\",\n }}>\n {data.find(d => (d.id || d.value) === s)?.value || s}\n <span\n onClick={e => { e.stopPropagation(); removeTag(s); }}\n style={{ cursor: \"pointer\", fontSize: 15, lineHeight: 1, opacity: 0.75, marginLeft: 2 }}>×</span>\n </span>\n ))}\n <input\n ref={inputRef}\n value={query}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => setOpen(true)}\n onClick={e => e.stopPropagation()}\n placeholder={selectedTags.length ? \"\" : placeholder}\n style={{ flex: 1, minWidth: 60, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n </>\n )}\n\n {/* ── single select: search input ── */}\n {!multiselection && (\n <input\n ref={inputRef}\n value={open ? query : singleDisplayValue}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => { setOpen(true); setQuery(\"\"); }}\n onClick={e => e.stopPropagation()}\n placeholder={placeholder}\n style={{ flex: 1, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n )}\n\n <Chevron open={open} />\n </div>\n\n {/* ── dropdown ── */}\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{\n position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, right: 0,\n background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r,\n boxShadow: T.shadowLg, zIndex: 100,\n }}>\n <div className=\"dhx-scroll\" style={{ maxHeight: 220, overflowY: \"auto\" }}>\n {filtered.map(item => {\n const key = item.id || item.value;\n const sel = isSelected(key);\n return (\n <div key={key} onClick={() => handleSelect(item)}\n style={{\n padding: \"8px 12px\", cursor: \"pointer\", display: \"flex\",\n alignItems: \"center\", gap: 8, fontSize: 13,\n background: sel ? T.primaryLt : \"transparent\",\n color: sel ? T.primary : T.text,\n }}\n onMouseEnter={e => !sel && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !sel && (e.currentTarget.style.background = \"transparent\")}>\n {multiselection && (\n <span style={{\n width: 14, height: 14, flexShrink: 0,\n border: `2px solid ${sel ? T.primary : T.borderDk}`,\n borderRadius: 3, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n background: sel ? T.primary : \"transparent\",\n }}>\n {sel && <span style={{ color: \"#fff\", fontSize: 9, lineHeight: 1 }}>✓</span>}\n </span>\n )}\n <span style={{ flex: 1 }}>{item.value}</span>\n {!multiselection && sel && (\n <span style={{ color: T.primary, fontSize: 12, fontWeight: 700 }}>✓</span>\n )}\n {item.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({item.count})</span>\n )}\n </div>\n );\n })}\n {filtered.length === 0 && (\n <div style={{ padding: 16, textAlign: \"center\", color: T.textMut, fontSize: 13 }}>No matches</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SliderProps {\n min?: number;\n max?: number;\n step?: number;\n value?: number | [number, number];\n range?: boolean;\n label?: string;\n tick?: boolean;\n disabled?: boolean;\n onChange?: (value: number | [number, number]) => void;\n style?: React.CSSProperties;\n}\n\nexport function Slider({ min = 0, max = 100, step = 1, value: valueProp, range = false, label, tick, disabled = false, onChange, style }: SliderProps) {\n const [value, setValue] = useState<number | [number, number]>(valueProp ?? (range ? [min, max] : min));\n useEffect(injectStyles, []);\n\n const update = (i: number, v: number) => {\n if (disabled) return;\n if (range) {\n const nv = [...(value as [number, number])] as [number, number];\n nv[i] = v; setValue(nv); onChange?.(nv);\n } else { setValue(v); onChange?.(v); }\n };\n\n const pct = (v: number) => ((v - min) / (max - min)) * 100;\n const arr = range ? (value as [number, number]) : [value as number];\n const trackFill: React.CSSProperties = range\n ? { left: `${pct(arr[0])}%`, width: `${pct(arr[1]) - pct(arr[0])}%` }\n : { left: 0, width: `${pct(arr[0])}%` };\n\n const trackColor = disabled ? T.border : T.primary;\n\n return (\n <div className=\"dhx\" style={{ width: \"100%\", opacity: disabled ? 0.5 : 1, ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n <div style={{ position: \"relative\", height: 36, display: \"flex\", alignItems: \"center\" }}>\n <div style={{ position: \"relative\", flex: 1, height: 4, background: T.border, borderRadius: 2 }}>\n <div style={{ position: \"absolute\", ...trackFill, height: \"100%\", background: trackColor, borderRadius: 2 }} />\n {arr.map((v, i) => (\n <input key={i} type=\"range\" min={min} max={max} step={step} value={v} disabled={disabled}\n onChange={e => { const nv = +e.target.value; if (range && i === 0 && nv >= (value as [number,number])[1]) return; if (range && i === 1 && nv <= (value as [number,number])[0]) return; update(i, nv); }}\n style={{ position: \"absolute\", width: \"100%\", height: \"100%\", opacity: 0, cursor: disabled ? \"not-allowed\" : \"pointer\", top: 0, left: 0, margin: 0 }} />\n ))}\n {arr.map((v, i) => (\n <div key={i} style={{ position: \"absolute\", left: `${pct(v)}%`, top: \"50%\", transform: \"translate(-50%, -50%)\", width: 16, height: 16, borderRadius: \"50%\", background: T.surface, border: `2px solid ${trackColor}`, boxShadow: \"0 1px 4px rgba(0,0,0,.2)\", pointerEvents: \"none\" }}>\n <div style={{ position: \"absolute\", bottom: \"calc(100% + 6px)\", left: \"50%\", transform: \"translateX(-50%)\", background: disabled ? T.textMut : T.primaryDk, color: \"#fff\", padding: \"2px 6px\", borderRadius: T.r, fontSize: 11, fontWeight: 700, whiteSpace: \"nowrap\" }}>{v}</div>\n </div>\n ))}\n </div>\n </div>\n {tick && <div style={{ display: \"flex\", justifyContent: \"space-between\", marginTop: 2 }}>{[min, Math.round((max+min)/2), max].map(v => <span key={v} style={{ fontSize: 10, color: T.textMut }}>{v}</span>)}</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\ntype HSL = [number, number, number];\n\nconst PALETTE = [\"#f44336\",\"#e91e63\",\"#9c27b0\",\"#673ab7\",\"#3f51b5\",\"#2196f3\",\"#03a9f4\",\"#00bcd4\",\"#009688\",\"#4caf50\",\"#8bc34a\",\"#cddc39\",\"#ffeb3b\",\"#ffc107\",\"#ff9800\",\"#ff5722\",\"#795548\",\"#607d8b\",\"#9e9e9e\",\"#000000\",\"#ffffff\",\"#0288d1\",\"#01579b\",\"#43a047\",\"#e53935\",\"#f57c00\"];\n\nfunction hexToHsl(hex: string): HSL {\n const r = parseInt(hex.slice(1,3),16)/255, g = parseInt(hex.slice(3,5),16)/255, b = parseInt(hex.slice(5,7),16)/255;\n const max = Math.max(r,g,b), min = Math.min(r,g,b); let h = 0, s = 0; const l = (max+min)/2;\n if (max !== min) { const d = max-min; s = l > .5 ? d/(2-max-min) : d/(max+min); h = max === r ? ((g-b)/d + (g<b?6:0))/6 : max === g ? ((b-r)/d+2)/6 : ((r-g)/d+4)/6; }\n return [Math.round(h*360), Math.round(s*100), Math.round(l*100)];\n}\nfunction hslToHex(h: number, s: number, l: number): string {\n s /= 100; l /= 100;\n const a = s * Math.min(l, 1-l);\n const f = (n: number) => { const k = (n+h/30)%12; const c = l - a*Math.max(Math.min(k-3, 9-k, 1), -1); return Math.round(255*c).toString(16).padStart(2,\"0\"); };\n return \"#\" + f(0) + f(8) + f(4);\n}\n\nexport interface ColorpickerProps {\n value?: string;\n onChange?: (hex: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Colorpicker({ value = \"#0288d1\", onChange, style }: ColorpickerProps) {\n const [hsl, setHsl] = useState<HSL>(() => hexToHsl(value));\n const hex = hslToHex(...hsl);\n useEffect(injectStyles, []);\n const set = (h: HSL) => { setHsl(h); onChange?.(hslToHex(...h)); };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ width: 200, height: 120, borderRadius: T.r, marginBottom: 12, background: `linear-gradient(to bottom, transparent, black), linear-gradient(to right, white, hsl(${hsl[0]},100%,50%))`, cursor: \"crosshair\" }} />\n {([[\"Hue\", 0, 360, hsl[0]], [\"Saturation\", 0, 100, hsl[1]], [\"Lightness\", 0, 100, hsl[2]]] as [string, number, number, number][]).map(([lbl, mn, mx, val], idx) => (\n <div key={lbl} style={{ marginBottom: idx < 2 ? 8 : 12 }}>\n <div className=\"dhx dhx-label\">{lbl}{idx > 0 ? ` (${val}%)` : \"\"}</div>\n <input type=\"range\" min={mn} max={mx} value={val} onChange={e => { const nv = [...hsl] as HSL; nv[idx] = +e.target.value; set(nv); }} style={{ width: \"100%\", accentColor: T.primary }} />\n </div>\n ))}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 12 }}>\n <div style={{ width: 36, height: 36, borderRadius: T.r, background: hex, border: `1px solid ${T.border}`, flexShrink: 0 }} />\n <input className=\"dhx dhx-input\" style={{ flex: 1, fontFamily: \"monospace\", fontSize: 12 }} value={hex}\n onChange={e => { try { set(hexToHsl(e.target.value)); onChange?.(e.target.value); } catch { /* invalid hex */ } }} />\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(13, 1fr)\", gap: 3 }}>\n {PALETTE.map(c => (\n <div key={c} onClick={() => { setHsl(hexToHsl(c)); onChange?.(c); }}\n style={{ width: 14, height: 14, borderRadius: 2, background: c, cursor: \"pointer\", border: hex === c ? `2px solid ${T.text}` : \"1px solid rgba(0,0,0,.15)\", transition: \"transform .1s\" }}\n onMouseEnter={e => (e.currentTarget.style.transform = \"scale(1.3)\")}\n onMouseLeave={e => (e.currentTarget.style.transform = \"scale(1)\")} />\n ))}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport type PopupPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\";\n\nexport interface PopupProps {\n trigger: React.ReactNode;\n children?: React.ReactNode;\n placement?: PopupPlacement;\n style?: React.CSSProperties;\n}\n\nexport function Popup({ trigger, children, placement = \"bottom-start\", style }: PopupProps) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<React.CSSProperties>({ top: \"100%\", left: 0 });\n const ref = useRef<HTMLDivElement>(null);\n const trigRef = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n\n const toggle = () => {\n setOpen(o => {\n if (!o && trigRef.current) {\n const r = trigRef.current.getBoundingClientRect();\n const placements: Record<PopupPlacement, React.CSSProperties> = {\n \"bottom-start\": { top: r.height + 4, left: 0 },\n \"bottom-end\": { top: r.height + 4, right: 0, left: \"auto\" },\n \"top-start\": { bottom: r.height + 4, top: \"auto\", left: 0 },\n };\n setPos(placements[placement] || placements[\"bottom-start\"]);\n }\n return !o;\n });\n };\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\" }}>\n <div ref={trigRef} onClick={toggle}>{trigger}</div>\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", ...pos, zIndex: 200, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, boxShadow: T.shadowLg, ...style }}>\n {children}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useDrag } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface WindowProps {\n title?: string;\n children?: React.ReactNode;\n width?: number | string;\n height?: number | string;\n closable?: boolean;\n movable?: boolean;\n modal?: boolean;\n defaultOpen?: boolean;\n footer?: React.ReactNode;\n onClose?: () => void;\n style?: React.CSSProperties;\n}\n\nexport function Window({ title, children, width = 480, height, closable = true, movable = true, modal = false, defaultOpen = true, footer, onClose, style }: WindowProps) {\n const [open, setOpen] = useState(defaultOpen);\n const [pos, setPos] = useState({ x: 0, y: 0 });\n useEffect(injectStyles, []);\n\n const drag = useDrag(useCallback((x: number, y: number) => movable && setPos({ x, y }), [movable]));\n const handleClose = () => { setOpen(false); onClose?.(); };\n\n if (!open) return null;\n return (\n <>\n {modal && <div style={{ position: \"fixed\", inset: 0, background: \"rgba(0,0,0,.45)\", zIndex: 900 }} onClick={closable ? handleClose : undefined} />}\n <div className=\"dhx\" style={{ position: modal ? \"fixed\" : \"absolute\", left: \"50%\", top: \"50%\", transform: `translate(calc(-50% + ${pos.x}px), calc(-50% + ${pos.y}px))`, width, ...(height ? { height } : {}), background: T.surface, borderRadius: T.rMd, boxShadow: T.shadowLg, zIndex: 901, display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", ...style }}>\n <div onMouseDown={e => drag(e, pos.x, pos.y)} style={{ display: \"flex\", alignItems: \"center\", padding: \"12px 16px\", borderBottom: `1px solid ${T.border}`, cursor: movable ? \"grab\" : \"default\", background: T.bg, gap: 8, userSelect: \"none\" }}>\n <span style={{ flex: 1, fontWeight: 700, fontSize: 15 }}>{title}</span>\n {closable && <button onClick={handleClose} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", width: 28, height: 28, borderRadius: T.r, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 18, color: T.textSec }}\n onMouseEnter={e => (e.currentTarget.style.background = T.border)} onMouseLeave={e => (e.currentTarget.style.background = \"none\")}>×</button>}\n </div>\n <div className=\"dhx-scroll\" style={{ flex: 1, minHeight: 0, padding: 20, overflowY: \"auto\" }}>{children}</div>\n {footer && <div style={{ padding: \"12px 16px\", borderTop: `1px solid ${T.border}`, display: \"flex\", justifyContent: \"flex-end\", gap: 8, background: T.bg }}>{footer}</div>}\n </div>\n </>\n );\n}\n","import { useState, useCallback, useEffect, createContext, useContext } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport type MessageType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface MessageOptions {\n type?: MessageType;\n title?: string;\n text?: string;\n duration?: number;\n confirm?: (ok: boolean) => void;\n}\n\ninterface MessageItem extends MessageOptions { id: number; }\n\ninterface MessageAPI {\n message: (opts: MessageOptions) => number;\n alert: (title: string, opts?: Omit<MessageOptions, \"title\">) => number;\n confirm: (title: string, cb: (ok: boolean) => void, opts?: Omit<MessageOptions, \"title\" | \"confirm\">) => number;\n}\n\nexport const MessageContext = createContext<MessageAPI | null>(null);\n\nconst ICONS: Record<MessageType, string> = { success: \"✓\", error: \"✕\", warning: \"⚠\", info: \"ℹ\" };\nconst COLORS: Record<MessageType, string> = { success: T.success, error: T.danger, warning: T.warning, info: T.primary };\n\nexport function MessageProvider({ children }: { children: React.ReactNode }) {\n const [messages, setMessages] = useState<MessageItem[]>([]);\n useEffect(injectStyles, []);\n\n const remove = useCallback((id: number) => setMessages(m => m.filter(x => x.id !== id)), []);\n const add = useCallback((opts: MessageOptions) => {\n const id = Date.now();\n setMessages(m => [...m, { id, ...opts }]);\n if (opts.duration !== 0) setTimeout(() => remove(id), opts.duration || 4000);\n return id;\n }, [remove]);\n\n const api: MessageAPI = {\n message: add,\n alert: (title, opts) => add({ type: \"info\", title, ...opts }),\n confirm: (title, cb, opts) => add({ type: \"warning\", title, confirm: cb, ...opts }),\n };\n\n return (\n <MessageContext.Provider value={api}>\n {children}\n <div style={{ position: \"fixed\", top: 20, right: 20, zIndex: 9999, display: \"flex\", flexDirection: \"column\", gap: 8, pointerEvents: \"none\" }}>\n {messages.map(m => {\n const type = m.type || \"info\";\n return (\n <div key={m.id} style={{ background: T.surface, border: `1px solid ${T.border}`, borderLeft: `4px solid ${COLORS[type]}`, borderRadius: T.r, boxShadow: T.shadowLg, padding: \"12px 16px\", minWidth: 280, maxWidth: 380, pointerEvents: \"all\", display: \"flex\", gap: 10, alignItems: \"flex-start\", animation: \"dhx-toast .3s ease\" }}>\n <span style={{ fontSize: 18, color: COLORS[type], lineHeight: 1 }}>{ICONS[type]}</span>\n <div style={{ flex: 1 }}>\n {m.title && <div style={{ fontWeight: 600, fontSize: 13, marginBottom: m.text ? 3 : 0 }}>{m.title}</div>}\n {m.text && <div style={{ fontSize: 12, color: T.textSec, lineHeight: 1.5 }}>{m.text}</div>}\n {m.confirm && (\n <div style={{ display: \"flex\", gap: 6, marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(true); remove(m.id); }}>Confirm</button>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(false); remove(m.id); }}>Cancel</button>\n </div>\n )}\n </div>\n <button onClick={() => remove(m.id)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 14, lineHeight: 1, padding: 0 }}>×</button>\n </div>\n );\n })}\n </div>\n </MessageContext.Provider>\n );\n}\n\nexport function useMessage(): MessageAPI {\n const ctx = useContext(MessageContext);\n if (!ctx) throw new Error(\"useMessage must be used inside <MessageProvider>\");\n return ctx;\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface ListItem {\n id?: string | number;\n value?: string;\n [key: string]: unknown;\n}\n\nexport interface ListProps {\n data?: ListItem[];\n template?: (item: ListItem) => string;\n keyNavigation?: boolean;\n multiselection?: boolean;\n editable?: boolean;\n height?: number | string;\n onSelect?: (item: ListItem) => void;\n onEdit?: (item: ListItem, index: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function List({ data = [], template, keyNavigation = true, multiselection = false, editable = false, height = 400, onSelect, onEdit, style }: ListProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [editing, setEditing] = useState<number | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [focused, setFocused] = useState<number | null>(null);\n useEffect(injectStyles, []);\n\n const handleClick = (item: ListItem, i: number) => {\n const id = item.id ?? i;\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n setFocused(i); onSelect?.(item);\n };\n const commitEdit = (item: ListItem, i: number) => { onEdit?.({ ...item, value: editVal }, i); setEditing(null); };\n\n return (\n <div className=\"dhx dhx-scroll\" style={{ height, overflowY: \"auto\", border: `1px solid ${T.border}`, borderRadius: T.r, background: T.surface, ...style }}\n tabIndex={0}\n onKeyDown={e => {\n if (!keyNavigation) return;\n if (e.key === \"ArrowDown\") setFocused(f => Math.min((f ?? -1) + 1, data.length - 1));\n if (e.key === \"ArrowUp\") setFocused(f => Math.max((f ?? 1) - 1, 0));\n }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n const isFoc = focused === i;\n return (\n <div key={String(id)} onClick={() => handleClick(item, i)} onDoubleClick={() => editable && (setEditing(i), setEditVal(String(item.value || \"\")))}\n style={{ display: \"flex\", alignItems: \"center\", padding: \"0 12px\", height: 40, cursor: \"pointer\", fontSize: 13, borderBottom: `1px solid ${T.border}`, background: isSel ? T.primaryLt : isFoc ? T.bg : T.surface, color: isSel ? T.primary : T.text, outline: isFoc ? `2px solid ${T.primary}44` : \"none\", transition: \"background .1s\" }}>\n {editing === i ? (\n <input autoFocus className=\"dhx dhx-input\" style={{ height: 28, flex: 1 }} value={editVal} onChange={e => setEditVal(e.target.value)}\n onBlur={() => commitEdit(item, i)} onKeyDown={e => { if (e.key === \"Enter\") commitEdit(item, i); if (e.key === \"Escape\") setEditing(null); }} onClick={e => e.stopPropagation()} />\n ) : template ? (\n <div dangerouslySetInnerHTML={{ __html: template(item) }} style={{ flex: 1 }} />\n ) : (\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{String(item.value ?? \"\")}</span>\n )}\n </div>\n );\n })}\n {data.length === 0 && <div style={{ padding: 24, textAlign: \"center\", color: T.textMut }}>No items</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface DataViewItem {\n id?: string | number;\n title?: string;\n value?: string;\n subtitle?: string;\n img?: string;\n [key: string]: unknown;\n}\n\nexport interface DataViewProps {\n data?: DataViewItem[];\n template?: (item: DataViewItem) => string;\n itemsInRow?: number;\n gap?: number;\n multiselection?: boolean;\n onSelect?: (item: DataViewItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function DataView({ data = [], template, itemsInRow = 3, gap = 12, multiselection = false, onSelect, style }: DataViewProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n useEffect(injectStyles, []);\n\n const handleClick = (item: DataViewItem) => {\n const id = item.id ?? String(item.title);\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n onSelect?.(item);\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"grid\", gridTemplateColumns: `repeat(${itemsInRow}, 1fr)`, gap, padding: gap, ...style }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n return (\n <div key={String(id)} onClick={() => handleClick(item)}\n style={{ background: T.surface, border: `2px solid ${isSel ? T.primary : T.border}`, borderRadius: T.rMd, overflow: \"hidden\", cursor: \"pointer\", transition: \"all .15s\", boxShadow: isSel ? `0 0 0 3px ${T.primary}33` : T.shadow, transform: isSel ? \"translateY(-2px)\" : \"none\" }}\n onMouseEnter={e => { e.currentTarget.style.boxShadow = T.shadowLg; e.currentTarget.style.transform = \"translateY(-2px)\"; }}\n onMouseLeave={e => { e.currentTarget.style.boxShadow = isSel ? `0 0 0 3px ${T.primary}33` : T.shadow; e.currentTarget.style.transform = isSel ? \"translateY(-2px)\" : \"none\"; }}>\n {template ? <div dangerouslySetInnerHTML={{ __html: template(item) }} /> : (\n <div style={{ padding: 16 }}>\n {item.img && <img src={item.img} alt={item.title || \"\"} style={{ width: \"100%\", borderRadius: T.r, marginBottom: 8, display: \"block\" }} />}\n <div style={{ fontWeight: 600, fontSize: 14, marginBottom: 4 }}>{item.title || item.value}</div>\n {item.subtitle && <div style={{ fontSize: 12, color: T.textSec }}>{item.subtitle}</div>}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TreeNode {\n id: string;\n value?: string;\n count?: number;\n items?: TreeNode[];\n opened?: boolean;\n}\n\nexport interface TreeProps {\n data?: TreeNode[];\n checkbox?: boolean;\n editable?: boolean;\n dragMode?: \"both\" | \"move\" | \"copy\";\n tooltip?: (node: TreeNode) => string;\n onSelect?: (node: TreeNode) => void;\n onCheck?: (id: string, checked: boolean) => void;\n onChange?: (data: TreeNode[]) => void;\n style?: React.CSSProperties;\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────────── */\n\nfunction cloneTree(nodes: TreeNode[]): TreeNode[] {\n return nodes.map(n => ({ ...n, items: n.items ? cloneTree(n.items) : undefined }));\n}\n\nfunction collectExpanded(nodes: TreeNode[], result: Record<string, boolean> = {}): Record<string, boolean> {\n nodes.forEach(n => {\n if (n.opened) result[n.id] = true;\n if (n.items) collectExpanded(n.items, result);\n });\n return result;\n}\n\n/** Remove node by id. Returns [newTree, removedNode]. */\nfunction removeNode(nodes: TreeNode[], id: string): [TreeNode[], TreeNode | null] {\n let removed: TreeNode | null = null;\n const result = nodes\n .filter(n => { if (n.id === id) { removed = n; return false; } return true; })\n .map(n => {\n if (n.items) {\n const [newItems, r] = removeNode(n.items, id);\n if (r) removed = r;\n return { ...n, items: newItems };\n }\n return n;\n });\n return [result, removed];\n}\n\n/** Insert node relative to targetId. */\nfunction insertNode(\n nodes: TreeNode[],\n targetId: string,\n node: TreeNode,\n pos: \"before\" | \"after\" | \"inside\",\n): TreeNode[] {\n if (pos === \"inside\") {\n return nodes.map(n => {\n if (n.id === targetId) return { ...n, items: [...(n.items || []), node] };\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n }\n // Check if target is at this level\n const atThisLevel = nodes.some(n => n.id === targetId);\n if (atThisLevel) {\n const result: TreeNode[] = [];\n for (const n of nodes) {\n if (n.id === targetId) {\n if (pos === \"before\") { result.push(node); result.push(n); }\n else { result.push(n); result.push(node); }\n } else {\n result.push(n);\n }\n }\n return result;\n }\n // Recurse into children\n return nodes.map(n => {\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n}\n\n/** Returns true if ancestorId contains targetId somewhere in its subtree. */\nfunction isAncestor(nodes: TreeNode[], ancestorId: string, targetId: string): boolean {\n function check(n: TreeNode): boolean {\n if (n.id === ancestorId) {\n const hasDesc = (x: TreeNode): boolean => x.id === targetId || (x.items?.some(hasDesc) ?? false);\n return n.items?.some(hasDesc) ?? false;\n }\n return n.items?.some(check) ?? false;\n }\n return nodes.some(check);\n}\n\n/** Update a node's value in the tree. */\nfunction updateValue(nodes: TreeNode[], id: string, value: string): TreeNode[] {\n return nodes.map(n =>\n n.id === id\n ? { ...n, value }\n : { ...n, items: n.items ? updateValue(n.items, id, value) : undefined }\n );\n}\n\n/** Collect child check stats (for indeterminate state). */\nfunction childStats(node: TreeNode, checked: Record<string, boolean>): { total: number; checkedCount: number } {\n let total = 0, checkedCount = 0;\n const visit = (n: TreeNode) => {\n total++;\n if (checked[n.id]) checkedCount++;\n n.items?.forEach(visit);\n };\n node.items?.forEach(visit);\n return { total, checkedCount };\n}\n\n/* ── Component ────────────────────────────────────────────────────────── */\n\nexport function Tree({\n data = [], checkbox = false, editable = false,\n dragMode, tooltip, onSelect, onCheck, onChange, style,\n}: TreeProps) {\n const [nodes, setNodes] = useState<TreeNode[]>(() => cloneTree(data));\n const [expanded, setExpanded] = useState<Record<string, boolean>>(() => collectExpanded(data));\n const [selected, setSelected] = useState<string | null>(null);\n const [checked, setChecked] = useState<Record<string, boolean>>({});\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [dragId, setDragId] = useState<string | null>(null);\n const [dropTarget, setDropTarget] = useState<{ id: string; pos: \"before\" | \"after\" | \"inside\" } | null>(null);\n useEffect(injectStyles, []);\n\n useEffect(() => {\n setNodes(cloneTree(data));\n setExpanded(prev => ({ ...collectExpanded(data), ...prev }));\n }, [data]);\n\n const toggle = (id: string) => setExpanded(e => ({ ...e, [id]: !e[id] }));\n\n const handleCheck = (id: string, val: boolean) => {\n setChecked(c => ({ ...c, [id]: val }));\n onCheck?.(id, val);\n };\n\n const commitEdit = () => {\n if (!editingId) return;\n const id = editingId, val = editVal;\n setEditingId(null);\n setNodes(prev => {\n const updated = updateValue(prev, id, val);\n onChange?.(updated);\n return updated;\n });\n };\n\n /* ── Drag handlers ──────────────────────────────────────────────────── */\n\n const handleDragStart = (e: React.DragEvent, id: string) => {\n e.dataTransfer.effectAllowed = \"move\";\n setDragId(id);\n };\n\n const handleDragOver = (e: React.DragEvent, id: string) => {\n if (!dragId || dragId === id || isAncestor(nodes, dragId, id)) return;\n e.preventDefault();\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const y = e.clientY - rect.top;\n const h = rect.height;\n const pos: \"before\" | \"after\" | \"inside\" = y < h * 0.25 ? \"before\" : y > h * 0.75 ? \"after\" : \"inside\";\n setDropTarget(dt => (dt?.id === id && dt?.pos === pos) ? dt : { id, pos });\n };\n\n const handleDrop = (e: React.DragEvent, targetId: string) => {\n e.preventDefault();\n if (!dragId || !dropTarget || dragId === targetId) { setDropTarget(null); setDragId(null); return; }\n setNodes(prev => {\n const [withoutDrag, dragged] = removeNode(prev, dragId);\n if (!dragged) return prev;\n const result = insertNode(withoutDrag, targetId, dragged, dropTarget.pos);\n onChange?.(result);\n return result;\n });\n if (dropTarget.pos === \"inside\") setExpanded(e => ({ ...e, [targetId]: true }));\n setDropTarget(null);\n setDragId(null);\n };\n\n const handleDragEnd = () => { setDragId(null); setDropTarget(null); };\n\n /* ── Render node ────────────────────────────────────────────────────── */\n\n const renderNode = (node: TreeNode, depth = 0): React.ReactNode => {\n const hasChildren = (node.items?.length ?? 0) > 0;\n const isExp = expanded[node.id];\n const isSel = selected === node.id;\n const isDragging = dragId === node.id;\n const isDrop = dropTarget?.id === node.id;\n\n // Checkbox indeterminate logic\n let isChecked = !!checked[node.id];\n let isIndet = false;\n if (checkbox && hasChildren) {\n const { total, checkedCount } = childStats(node, checked);\n if (checkedCount > 0 && checkedCount < total) { isIndet = true; }\n else if (total > 0 && checkedCount === total) { isChecked = true; }\n }\n\n const dropShadow: React.CSSProperties = isDrop && dropTarget!.pos !== \"inside\"\n ? { boxShadow: dropTarget!.pos === \"before\" ? `inset 0 2px 0 0 ${T.primary}` : `inset 0 -2px 0 0 ${T.primary}` }\n : {};\n\n const rowBg = isDrop && dropTarget!.pos === \"inside\"\n ? T.primaryLt\n : isSel ? T.primaryLt : \"transparent\";\n\n return (\n <div key={node.id} style={{ opacity: isDragging ? 0.4 : 1 }}>\n <div\n draggable={!!dragMode}\n onDragStart={dragMode ? e => handleDragStart(e, node.id) : undefined}\n onDragOver={dragMode ? e => handleDragOver(e, node.id) : undefined}\n onDrop={dragMode ? e => handleDrop(e, node.id) : undefined}\n onDragEnd={dragMode ? handleDragEnd : undefined}\n title={tooltip?.(node)}\n onClick={() => {\n setSelected(node.id);\n onSelect?.(node);\n if (hasChildren) toggle(node.id);\n }}\n onDoubleClick={() => {\n if (editable) { setEditingId(node.id); setEditVal(node.value || \"\"); }\n }}\n style={{\n display: \"flex\", alignItems: \"center\", gap: 4,\n padding: `5px 8px 5px ${12 + depth * 18}px`,\n cursor: dragMode ? \"grab\" : \"pointer\",\n borderRadius: T.r, margin: \"1px 4px\",\n background: rowBg,\n color: isSel ? T.primary : T.text,\n userSelect: \"none\", fontSize: 13,\n ...dropShadow,\n }}\n onMouseEnter={e => !isSel && !isDrop && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSel && !isDrop && (e.currentTarget.style.background = \"transparent\")}\n >\n {/* Expand arrow */}\n <span\n style={{ width: 16, textAlign: \"center\", fontSize: 11, color: T.textMut, flexShrink: 0 }}\n onClick={e => { e.stopPropagation(); if (hasChildren) toggle(node.id); }}\n >\n {hasChildren ? (isExp ? \"▾\" : \"▸\") : \"\"}\n </span>\n\n {/* Folder / file icon */}\n <span style={{ fontSize: 15, flexShrink: 0 }}>\n {hasChildren ? (isExp ? \"📂\" : \"📁\") : \"📄\"}\n </span>\n\n {/* Checkbox */}\n {checkbox && (\n <input\n ref={el => { if (el) el.indeterminate = isIndet; }}\n type=\"checkbox\"\n checked={isChecked}\n onChange={e => { e.stopPropagation(); handleCheck(node.id, e.target.checked); }}\n style={{ cursor: \"pointer\", accentColor: T.primary, flexShrink: 0 }}\n onClick={e => e.stopPropagation()}\n />\n )}\n\n {/* Label or inline editor */}\n {editingId === node.id ? (\n <input\n autoFocus\n className=\"dhx dhx-input\"\n style={{ height: 24, fontSize: 12, flex: 1 }}\n value={editVal}\n onChange={e => setEditVal(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditingId(null); }}\n onClick={e => e.stopPropagation()}\n />\n ) : (\n <span style={{ flex: 1 }}>{node.value}</span>\n )}\n\n {node.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({node.count})</span>\n )}\n </div>\n\n {hasChildren && isExp && (\n <div>{node.items!.map(child => renderNode(child, depth + 1))}</div>\n )}\n </div>\n );\n };\n\n return (\n <div\n className=\"dhx dhx-scroll\"\n style={{ overflowY: \"auto\", ...style }}\n onDragOver={dragMode ? e => e.preventDefault() : undefined}\n onDrop={dragMode ? e => { e.preventDefault(); setDropTarget(null); setDragId(null); } : undefined}\n >\n {nodes.map(n => renderNode(n))}\n </div>\n );\n}\n","import { useState, useMemo, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface PaginationProps {\n total: number;\n pageSize?: number;\n page?: number;\n onChange?: (page: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function Pagination({ total, pageSize = 10, page: pageProp, onChange, style }: PaginationProps) {\n const [page, setPage] = useState(pageProp || 1);\n const totalPages = Math.ceil(total / pageSize);\n useEffect(injectStyles, []);\n\n const goTo = (p: number) => { const np = Math.min(Math.max(1, p), totalPages); setPage(np); onChange?.(np); };\n\n const range = useMemo(() => {\n const pages: (number | \"...\")[] = [];\n const delta = 2;\n for (let i = Math.max(1, page - delta); i <= Math.min(totalPages, page + delta); i++) pages.push(i);\n if ((pages[0] as number) > 1) { if ((pages[0] as number) > 2) pages.unshift(\"...\"); pages.unshift(1); }\n if ((pages[pages.length - 1] as number) < totalPages) { if ((pages[pages.length - 1] as number) < totalPages - 1) pages.push(\"...\"); pages.push(totalPages); }\n return pages;\n }, [page, totalPages]);\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: \"8px 12px\", ...style }}>\n <span style={{ fontSize: 12, color: T.textSec, marginRight: 8 }}>{(page-1)*pageSize+1}–{Math.min(page*pageSize,total)} of {total}</span>\n {([[\"«\", 1], [\"‹\", page - 1]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === 1} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n {range.map((p, i) => (\n <button key={i} onClick={() => typeof p === \"number\" && goTo(p)} className={`dhx dhx-btn ${p === page ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`} style={{ height: 30, minWidth: 30, padding: \"0 8px\", fontSize: 13 }} disabled={p === \"...\"}>{p}</button>\n ))}\n {([[\"›\", page + 1], [\"»\", totalPages]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === totalPages} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { Slider } from \"../Slider\";\nimport { Combobox } from \"../Combobox\";\nimport { Timepicker, TimeValue } from \"../Timepicker\";\nimport T from \"../../tokens\";\n\nexport interface FormFieldOption { value: string; label?: string; }\n\nexport interface FormField {\n type?: \"input\" | \"textarea\" | \"select\" | \"checkbox\" | \"radio\" | \"slider\" | \"combo\" |\n \"datepicker\" | \"timepicker\" | \"fieldset\" | \"spacer\" | \"text\" | \"toggle\" | \"colorpicker\";\n name: string;\n label?: string;\n labelWidth?: number;\n labelPosition?: \"top\" | \"left\";\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n value?: unknown;\n inputType?: string;\n icon?: React.ReactNode;\n offIcon?: React.ReactNode;\n text?: string;\n offText?: string;\n helpMessage?: string;\n options?: FormFieldOption[];\n data?: { id?: string; value: string }[];\n multiselection?: boolean;\n min?: number;\n max?: number;\n step?: number;\n range?: boolean;\n height?: number;\n rows?: FormField[];\n padding?: string | number;\n width?: string | number;\n}\n\nexport interface FormConfig {\n rows?: (FormField | FormField[])[];\n padding?: string | number;\n width?: string | number;\n labelWidth?: number;\n buttons?: boolean;\n buttonAlign?: \"flex-start\" | \"center\" | \"flex-end\";\n submitText?: string;\n resetButton?: boolean;\n resetText?: string;\n}\n\nexport interface FormProps {\n config?: FormConfig;\n defaultValues?: Record<string, unknown>;\n onSubmit?: (values: Record<string, unknown>) => void | Promise<void>;\n style?: React.CSSProperties;\n}\n\nexport function Form({ config = {}, defaultValues = {}, onSubmit, style }: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>(defaultValues);\n const [errors, setErrors] = useState<Record<string, string | null>>({});\n const [openPicker, setOpenPicker] = useState<string | null>(null);\n useEffect(injectStyles, []);\n\n const set = (name: string, val: unknown) => {\n setValues(v => ({ ...v, [name]: val }));\n setErrors(e => ({ ...e, [name]: null }));\n };\n\n const collectFields = (rows: (FormField | FormField[])[]): FormField[] => {\n const out: FormField[] = [];\n rows.flat().forEach(f => {\n if (!f || typeof f !== \"object\" || !(\"name\" in f)) return;\n out.push(f);\n if (f.type === \"fieldset\" && f.rows) out.push(...collectFields(f.rows));\n });\n return out;\n };\n\n const validate = () => {\n const errs: Record<string, string> = {};\n collectFields(config.rows || []).forEach(f => {\n if (f.required && !values[f.name])\n errs[f.name] = `${f.label || f.name} is required`;\n });\n setErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const renderField = (field: FormField): React.ReactNode => {\n const val = (values[field.name] ?? field.value ?? \"\") as string;\n const err = errors[field.name];\n\n // label width: field-level override or config-level default\n const lw = field.labelWidth ?? config.labelWidth;\n const inline = lw !== undefined || field.labelPosition === \"left\";\n\n /* ── fieldset ── */\n if (field.type === \"fieldset\") return (\n <fieldset key={field.name} style={{ border: `1px solid ${T.border}`, borderRadius: T.r, padding: \"12px 16px\", marginBottom: 14 }}>\n <legend style={{ fontSize: 12, fontWeight: 700, color: T.textSec, padding: \"0 6px\" }}>{field.label}</legend>\n {(field.rows || []).map(f => renderField(f))}\n </fieldset>\n );\n\n if (field.type === \"spacer\") return (\n <div key={field.name} style={{ height: field.height || 16 }} />\n );\n\n /* ── shared sub-elements ── */\n const labelStyle: React.CSSProperties = lw\n ? { minWidth: lw, width: lw, flexShrink: 0, paddingTop: 8, boxSizing: \"border-box\" }\n : {};\n const labelEl = field.label\n ? <label key=\"lbl\" className=\"dhx dhx-label\" style={{ display: \"flex\", gap: 4, ...labelStyle }}>\n {field.label}{field.required && <span style={{ color: T.danger }}>*</span>}\n </label>\n : null;\n const errEl = err ? <div style={{ fontSize: 11, color: T.danger, marginTop: 3 }}>{err}</div> : null;\n const helpEl = field.helpMessage\n ? <div style={{ fontSize: 11, color: T.textMut, marginTop: 3 }}>ⓘ {field.helpMessage}</div>\n : null;\n\n const common = { key: field.name, className: \"dhx-form-group\" };\n\n /* wrap(content) handles both inline and stacked layouts */\n const wrap = (content: React.ReactNode) => inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1, minWidth: 0 }}>{content}{errEl}{helpEl}</div>\n </div>\n ) : (\n <div {...common}>\n {labelEl}\n {content}\n {errEl}\n {helpEl}\n </div>\n );\n\n /* ── input ── */\n if (!field.type || field.type === \"input\") return wrap(\n <div className=\"dhx-input-wrap\">\n {field.icon && <span className=\"dhx-input-icon\">{field.icon}</span>}\n <input className={`dhx dhx-input${field.icon ? \" dhx-input--with-icon\" : \"\"}`}\n style={{ borderColor: err ? T.danger : undefined }}\n type={field.inputType || \"text\"} placeholder={field.placeholder}\n value={val} onChange={e => set(field.name, e.target.value)} disabled={field.disabled} />\n </div>\n );\n\n /* ── textarea ── */\n if (field.type === \"textarea\") return wrap(\n <textarea className=\"dhx dhx-input\"\n style={{ height: 80, resize: \"vertical\", padding: \"8px 10px\" }}\n placeholder={field.placeholder} value={val}\n onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── select ── */\n if (field.type === \"select\") return wrap(\n <select className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} style={{ cursor: \"pointer\" }}>\n <option value=\"\">— Select —</option>\n {(field.options || []).map(o => <option key={o.value} value={o.value}>{o.label || o.value}</option>)}\n </select>\n );\n\n /* ── datepicker ── */\n if (field.type === \"datepicker\") return wrap(\n <input type=\"date\" className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── timepicker (popup) ── */\n if (field.type === \"timepicker\") {\n const tv: TimeValue = (values[field.name] as TimeValue) ?? { h: 12, m: 0, ampm: \"AM\" };\n const hasVal = !!(values[field.name]);\n const display = hasVal\n ? `${String(tv.h).padStart(2,\"0\")}:${String(tv.m).padStart(2,\"0\")}${tv.ampm ? \" \" + tv.ampm : \"\"}`\n : (field.placeholder || \"Click to select\");\n const trigger = (\n <div style={{ position: \"relative\" }}>\n <div className=\"dhx dhx-input\"\n style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}\n onClick={() => setOpenPicker(openPicker === field.name ? null : field.name)}>\n <span style={{ color: hasVal ? T.text : T.textMut }}>{display}</span>\n <span style={{ fontSize: 13, color: T.textSec }}>🕐</span>\n </div>\n {openPicker === field.name && (\n <div style={{ position: \"absolute\", zIndex: 100, top: \"calc(100% + 4px)\", left: 0 }}>\n <Timepicker value={tv} controls onChange={v => { set(field.name, v); setOpenPicker(null); }} />\n </div>\n )}\n </div>\n );\n return wrap(trigger);\n }\n\n /* ── colorpicker ── */\n if (field.type === \"colorpicker\") return wrap(\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <input type=\"color\" value={(val as string) || \"#000000\"} onChange={e => set(field.name, e.target.value)}\n style={{ width: 36, height: 36, padding: 2, border: `1px solid ${T.border}`, borderRadius: T.r, cursor: \"pointer\", background: \"none\" }} />\n <span style={{ fontSize: 12, color: T.textSec, fontFamily: \"monospace\" }}>{(val as string) || \"#000000\"}</span>\n </div>\n );\n\n /* ── text (static) ── */\n if (field.type === \"text\") return wrap(\n <p style={{ margin: \"6px 0\", fontSize: 13, color: T.text }}>{field.value as string}</p>\n );\n\n /* ── checkbox ── */\n if (field.type === \"checkbox\") return (\n <div {...common}>\n {inline\n ? <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {/* push checkbox to label-width offset */}\n {lw && <div style={{ width: lw, flexShrink: 0 }} />}\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n </div>\n : <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n }\n {helpEl}\n </div>\n );\n\n /* ── radio ── */\n if (field.type === \"radio\") {\n const options = (field.options || []).map(o => (\n <label key={o.value} style={{ display: \"flex\", alignItems: \"center\", gap: 6, cursor: \"pointer\", fontSize: 13 }}>\n <input type=\"radio\" name={field.name} value={o.value} checked={val === o.value}\n onChange={() => set(field.name, o.value)} style={{ accentColor: T.primary, cursor: \"pointer\" }} />\n {o.label || o.value}\n </label>\n ));\n return wrap(\n <div style={{ display: \"flex\", gap: 16, flexWrap: \"wrap\", paddingTop: 8 }}>{options}</div>\n );\n }\n\n /* ── slider ── */\n if (field.type === \"slider\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Slider min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Slider label={field.label} min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n );\n\n /* ── combo ── */\n if (field.type === \"combo\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Combobox data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Combobox label={field.label} data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n );\n\n /* ── toggle ── */\n if (field.type === \"toggle\") {\n const isOn = !!val;\n const icon = isOn ? field.icon : (field.offIcon || field.icon);\n const txt = isOn ? (field.text || field.label) : (field.offText || field.text || field.label);\n return (\n <div {...common}>\n {inline && lw && <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <div style={{ width: lw, flexShrink: 0 }} />\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>\n </div>}\n {!inline && <label style={{ display: \"flex\", alignItems: \"center\", gap: 10, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>}\n {helpEl}\n </div>\n );\n }\n\n return null;\n };\n\n const renderRows = (rows: (FormField | FormField[])[]) =>\n rows.map((row, i) =>\n Array.isArray(row)\n ? <div key={i} style={{ display: \"flex\", gap: 12, alignItems: \"flex-start\" }}>{row.map(renderField)}</div>\n : renderField(row)\n );\n\n return (\n <div className=\"dhx\" style={{ padding: config.padding || 0, width: config.width || \"100%\", ...style }}>\n {renderRows(config.rows || [])}\n {(config.buttons || onSubmit) && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: config.buttonAlign || \"flex-start\", marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => validate() && onSubmit?.(values)}>\n {config.submitText || \"Submit\"}\n </button>\n {config.resetButton !== false &&\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => { setValues(defaultValues); setErrors({}); }}>\n {config.resetText || \"Reset\"}\n </button>\n }\n </div>\n )}\n </div>\n );\n}\n\nfunction Switch({ on, onClick }: { on: boolean; onClick: () => void }) {\n return (\n <div style={{ position: \"relative\", width: 40, height: 22, flexShrink: 0 }} onClick={onClick}>\n <div style={{ width: 40, height: 22, borderRadius: 11, background: on ? T.primary : T.border, transition: \"background 0.2s\" }} />\n <div style={{ position: \"absolute\", top: 3, left: on ? 21 : 3, width: 16, height: 16, borderRadius: \"50%\", background: \"#fff\", transition: \"left 0.2s\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\" }} />\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface RibbonSubItem {\n id?: string;\n type?: \"separator\" | \"sep\" | \"input\" | \"selectButton\";\n value?: string; // primary text label\n text?: string; // alias for value (backward compat)\n icon?: React.ReactNode;\n active?: boolean;\n twoState?: boolean;\n group?: string;\n disabled?: boolean;\n hidden?: boolean;\n tooltip?: string;\n label?: string; // prefix label for input fields\n size?: \"auto\" | \"small\"; // \"auto\" = tall button, \"small\" = compact\n placeholder?: string;\n width?: number;\n count?: number;\n items?: { value: string; hotkey?: string }[];\n onClick?: (item: RibbonSubItem) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface RibbonBlock {\n type: \"block\";\n title?: string; // section label shown at bottom (primary)\n label?: string; // alias for title (backward compat)\n direction?: \"col\" | \"row\";\n items?: (RibbonSubItem | RibbonBlock)[];\n}\n\nexport type RibbonItem = RibbonSubItem | RibbonBlock;\n\nexport interface RibbonProps {\n items?: RibbonItem[];\n onAction?: (id: string, item: RibbonSubItem) => void;\n style?: React.CSSProperties;\n}\n\n/* ── Flatten all leaf subitems (for twoState/group state init) ── */\nfunction collectAll(items: (RibbonSubItem | RibbonBlock)[]): RibbonSubItem[] {\n const result: RibbonSubItem[] = [];\n for (const item of items) {\n if (item.type === \"block\") {\n result.push(...collectAll((item as RibbonBlock).items || []));\n } else {\n result.push(item as RibbonSubItem);\n }\n }\n return result;\n}\n\nexport function Ribbon({ items = [], onAction, style }: RibbonProps) {\n useEffect(injectStyles, []);\n\n const [activeMap, setActiveMap] = useState<Record<string, boolean>>(() => {\n const map: Record<string, boolean> = {};\n for (const si of collectAll(items)) {\n if (si.id) map[si.id] = !!si.active;\n }\n return map;\n });\n\n const allItems = collectAll(items);\n\n const handleClick = (si: RibbonSubItem) => {\n if (si.disabled) return;\n if (si.id) {\n if (si.group) {\n const sameGroup = allItems.filter(s => s.group === si.group && s.id);\n setActiveMap(prev => {\n const next = { ...prev };\n for (const s of sameGroup) next[s.id!] = false;\n next[si.id!] = true;\n return next;\n });\n } else if (si.twoState) {\n setActiveMap(prev => ({ ...prev, [si.id!]: !prev[si.id!] }));\n }\n }\n si.onClick?.(si);\n if (si.id) onAction?.(si.id, si);\n };\n\n /* ── Render a leaf subitem ── */\n const renderSubItem = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n if (si.hidden) return null;\n\n const label = si.value ?? si.text;\n const isLarge = si.size === \"auto\";\n const isActive = si.id !== undefined ? (activeMap[si.id] ?? !!si.active) : !!si.active;\n\n if (si.type === \"separator\" || si.type === \"sep\") return (\n <div key={key} style={{ width: 1, background: T.border, margin: \"4px 2px\", alignSelf: \"stretch\" }} />\n );\n\n if (si.type === \"input\") return (\n <div key={key} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", justifyContent: \"center\", padding: \"2px 4px\", gap: 2 }}>\n {si.label && <span style={{ fontSize: 10, color: T.textMut }}>{si.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {si.icon && (\n <span style={{ position: \"absolute\", left: 6, fontSize: 13, color: T.textMut, pointerEvents: \"none\", zIndex: 1 }}>\n {si.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: si.width || 110, height: 26, fontSize: 12, paddingLeft: si.icon ? 24 : undefined }}\n placeholder={si.placeholder}\n defaultValue={si.value}\n onChange={e => si.onChange?.(e.target.value)}\n />\n </div>\n </div>\n );\n\n if (si.type === \"selectButton\") return (\n <select\n key={key}\n className=\"dhx dhx-input\"\n style={{ height: 26, fontSize: 12, cursor: \"pointer\", margin: 2, width: si.width }}\n defaultValue={si.value}\n onChange={e => si.onChange?.(e.target.value)}\n >\n {si.items?.map(o => <option key={o.value} value={o.value}>{o.value}</option>)}\n </select>\n );\n\n return (\n <button\n key={key}\n title={si.tooltip}\n disabled={si.disabled}\n className=\"dhx dhx-btn dhx-btn-ghost\"\n style={{\n flexDirection: isLarge ? \"column\" : \"row\",\n alignSelf: isLarge ? \"stretch\" : \"center\",\n justifyContent: \"center\",\n minHeight: isLarge ? 48 : 26,\n padding: isLarge ? \"6px 10px\" : \"0 8px\",\n gap: isLarge ? 4 : 5,\n position: \"relative\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : si.disabled ? T.textMut : T.text,\n opacity: si.disabled ? 0.55 : 1,\n cursor: si.disabled ? \"not-allowed\" : \"pointer\",\n }}\n onClick={() => handleClick(si)}\n >\n {si.icon && (\n <span style={{ fontSize: isLarge ? 22 : 15, lineHeight: 1, flexShrink: 0 }}>{si.icon}</span>\n )}\n {label && (\n <span style={{\n fontSize: 10,\n maxWidth: isLarge ? 64 : undefined,\n textAlign: isLarge ? \"center\" : \"left\",\n lineHeight: 1.2,\n whiteSpace: isLarge ? \"normal\" : \"nowrap\",\n }}>\n {label}\n </span>\n )}\n {si.count !== undefined && (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 14, height: 14,\n background: T.danger, color: \"#fff\",\n borderRadius: 7, fontSize: 9, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 2px\", pointerEvents: \"none\",\n }}>\n {si.count}\n </span>\n )}\n </button>\n );\n };\n\n /* ── Render an inner block (layout group, no section styling) ── */\n const renderInnerBlock = (block: RibbonBlock, key: string | number): React.ReactNode => (\n <div key={key} style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"flex-start\" : \"center\",\n gap: 2,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, `${key}-${j}`)\n : renderSubItem(sub as RibbonSubItem, `${key}-${j}`)\n )}\n </div>\n );\n\n /* ── Render a top-level section block ── */\n const renderSection = (block: RibbonBlock, key: number): React.ReactNode => {\n const title = block.title || block.label;\n return (\n <div key={key} style={{\n display: \"flex\", flexDirection: \"column\", alignItems: \"stretch\",\n borderRight: `1px solid ${T.border}`,\n padding: \"4px 6px 0\",\n minWidth: 40,\n }}>\n {/* items area */}\n <div style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"stretch\" : \"center\",\n gap: 2,\n flex: 1,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, j)\n : renderSubItem(sub as RibbonSubItem, j)\n )}\n </div>\n\n {/* section title at bottom */}\n {title && (\n <div style={{\n fontSize: 10, color: T.textMut, textAlign: \"center\",\n padding: \"3px 0 4px\", marginTop: 2,\n borderTop: `1px solid ${T.border}`,\n }}>\n {title}\n </div>\n )}\n </div>\n );\n };\n\n const renderItem = (item: RibbonItem, i: number): React.ReactNode => {\n if (item.type === \"block\") return renderSection(item as RibbonBlock, i);\n return renderSubItem(item as RibbonSubItem, i);\n };\n\n return (\n <div className=\"dhx\" style={{\n display: \"flex\", alignItems: \"stretch\",\n background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n overflowX: \"auto\",\n gap: 0,\n minHeight: 72,\n ...style,\n }}>\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface NavbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"imageButton\";\n value?: string;\n icon?: React.ReactNode;\n src?: string;\n items?: MenuItem[];\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n count?: number;\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface NavbarProps {\n logo?: React.ReactNode;\n items?: NavbarItem[];\n vertical?: boolean;\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 3, right: 3,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Navbar({ logo, items = [], vertical = false, onAction, style }: NavbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => { if (item.id && item.twoState && item.active) init[item.id] = true; });\n return init;\n });\n const ref = useRef<HTMLElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: NavbarItem, i: number) => {\n if (item.disabled) return;\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: NavbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{\n [vertical ? \"height\" : \"width\"]: 1,\n background: T.border,\n margin: vertical ? \"4px 8px\" : \"0 6px\",\n alignSelf: \"stretch\",\n }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", margin: \"0 4px\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 200, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 36, height: 36, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.twoState && item.id && activeItems[item.id]);\n const hasDropdown = !!(item.items?.length);\n\n const btnStyle: React.CSSProperties = {\n position: \"relative\",\n height: vertical ? 40 : 36,\n gap: 6,\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n ...(vertical ? {\n width: \"100%\", justifyContent: \"flex-start\",\n padding: \"0 16px\", borderRadius: 0,\n } : {}),\n };\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={btnStyle}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16, flexShrink: 0 }}>{item.icon}</span>}\n {item.value && <span style={{ fontSize: 13 }}>{item.value}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={(mi) => {\n setOpenMenu(null);\n if (mi.id) { item.onClick?.(mi.id); onAction?.(mi.id); }\n }}\n style={vertical ? { left: \"100%\", top: 0 } : { top: \"100%\" }}\n />\n )}\n </div>\n );\n };\n\n return (\n <nav\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\",\n flexDirection: vertical ? \"column\" : \"row\",\n alignItems: vertical ? \"stretch\" : \"center\",\n background: T.surface,\n borderBottom: vertical ? \"none\" : `1px solid ${T.border}`,\n borderRight: vertical ? `1px solid ${T.border}` : \"none\",\n padding: vertical ? \"8px 0\" : \"0 12px\",\n minHeight: vertical ? undefined : 48,\n gap: 2,\n ...style,\n }}\n >\n {logo && (\n <div style={{\n color: T.text, fontWeight: 800, fontSize: 16,\n padding: vertical ? \"8px 16px 12px\" : \"0 12px 0 4px\",\n borderBottom: vertical ? `1px solid ${T.border}` : \"none\",\n borderRight: vertical ? \"none\" : `1px solid ${T.border}`,\n marginRight: vertical ? 0 : 8,\n marginBottom: vertical ? 4 : 0,\n flexShrink: 0,\n }}>\n {logo}\n </div>\n )}\n {items.map(renderItem)}\n </nav>\n );\n}\n"],"names":["tokens","STYLE_ID","injectStyles","s","T","SIZE_STYLES","Button","children","variant","size","icon","disabled","onClick","style","className","useEffect","jsxs","useClickOutside","ref","callback","handler","e","useDrag","onDrag","dragging","useRef","origin","useCallback","originX","originY","move","me","x","y","ox","oy","up","MenuDropdown","items","onSelect","hov","setHov","useState","item","i","jsx","isHov","_a","_b","Menu","label","open","setOpen","o","ContextMenu","pos","setPos","Badge","count","Toolbar","onAction","openMenu","setOpenMenu","activeItems","setActiveItems","init","handleClick","ns","it","prev","renderItem","isActive","hasDropdown","badgeBg","c","flatGroupIds","group","ids","visit","initActiveState","r","Sidebar","width","minWidth","header","footer","collapsed","defaultCollapsed","selected","defaultSelected","onCollapse","onExpand","onBeforeCollapse","onBeforeExpand","onToggleItem","isCtrlCollapsed","isCtrlSelected","collapsedState","setCollapsedState","selectedState","setSelectedState","expanded","setExpanded","activeState","setActiveState","isCollapsed","currentSel","w","handleToggle","handleSelect","handleTwoState","newActive","next","gid","renderBadge","mini","bg","txt","depth","idx","key","type","hasChildren","isExp","isTwoActive","isDisabled","pl","child","ci","collapseBtn","LayoutCell","config","setCollapsed","Layout","rows","cols","gap","cells","isRow","cell","Tabbar","views","mode","tabAlign","closable","defaultActive","onBeforeChange","onChange","active","setActive","openTabs","setOpenTabs","v","handleClose","id","t","handleChange","isVertical","visibleViews","tabBar","isDis","activeStyle","activeView","content","B","SortArrows","dir","InlineCellCombobox","options","value","onCommit","onCancel","query","setQuery","h","filtered","formatByType","val","compareValues","a","b","getFilterWidget","col","renderEditor","editValue","setEditValue","commit","cancel","base","et","inputType","Grid","columns","data","height","rowHeight","headerRowHeight","footerRowHeight","sortable","resizable","editable","stripe","autoWidth","keyNavigation","selection","multiselect","leftSplit","sortKey","setSortKey","sortDir","setSortDir","filter","setFilter","setSelected","focusRow","setFocusRow","colWidths","setColWidths","editCell","setEditCell","edits","setEdits","containerRef","containerW","setContainerW","ro","normalizedColumns","useMemo","visibleColumns","widths","total","extra","sorted","row","k","cmp","colStats","f","nums","n","sum","selectOpts","hasFilterRow","hasFooter","totalW","stickyLefts","acc","offsets","lastStickyId","rowKey","ri","handleSort","d","selectRow","rk","commitEdit","colId","handleKeyDown","startResize","startX","startW","ws","cs","align","first","overflow","sticky","h0","hText","hAlign","isStickyCl","widget","isSel","rowBg","isEditing","rawVal","canEdit","cellContent","newVal","stats","COLORS","buildTreemap","valueKey","nameKey","roots","root","Chart","series","scales","legend","xKey","tip","Tooltip","leg","Legend","grid","CartesianGrid","xAxis","XAxis","yAxis","YAxis","_c","_d","_e","_f","margin","_g","common","chart","BarChart","Bar","LineChart","Line","AreaChart","Area","s0","dataKey","colorField","PieChart","Pie","name","percent","Cell","radarKey","_h","RadarChart","PolarGrid","PolarAngleAxis","PolarRadiusAxis","Radar","ScatterChart","_i","_j","_k","_l","_m","_n","_o","_p","xField","yField","pts","Scatter","valKey","treeData","borderColor","borderWidth","Treemap","props","index","fill","ResponsiveContainer","MONTHS","DAYS","Calendar","range","timepicker","today","initDate","view","setView","hovDate","setHovDate","time","setTime","year","month","firstDay","daysInMonth","isToday","isSelected","dv","handleDay","sel","Timepicker","timeFormat","controls","minuteStep","setH","m","setM","ampm","setAmpm","pending","setPending","hours","_","mins","newH","newM","newAmpm","handleCancel","colStyle","cellStyle","Chevron","Combobox","valueProp","placeholder","multiselection","inputRef","removeTag","openDropdown","singleDisplayValue","selectedTags","Fragment","Slider","min","max","step","tick","setValue","update","nv","pct","arr","trackFill","trackColor","PALETTE","hexToHsl","hex","g","l","hslToHex","Colorpicker","hsl","setHsl","set","lbl","mn","mx","Popup","trigger","placement","trigRef","placements","Window","title","movable","modal","defaultOpen","onClose","drag","MessageContext","createContext","ICONS","MessageProvider","messages","setMessages","remove","add","opts","api","cb","useMessage","ctx","useContext","List","template","onEdit","editing","setEditing","editVal","setEditVal","focused","setFocused","isFoc","DataView","itemsInRow","cloneTree","nodes","collectExpanded","result","removeNode","removed","newItems","insertNode","targetId","node","isAncestor","ancestorId","check","hasDesc","updateValue","childStats","checked","checkedCount","Tree","checkbox","dragMode","tooltip","onCheck","setNodes","setChecked","editingId","setEditingId","dragId","setDragId","dropTarget","setDropTarget","toggle","handleCheck","updated","handleDragStart","handleDragOver","rect","dt","handleDrop","withoutDrag","dragged","handleDragEnd","renderNode","isDragging","isDrop","isChecked","isIndet","dropShadow","el","Pagination","pageSize","pageProp","page","setPage","totalPages","goTo","p","np","pages","Form","defaultValues","onSubmit","values","setValues","errors","setErrors","openPicker","setOpenPicker","collectFields","out","validate","errs","renderField","field","err","lw","inline","labelStyle","labelEl","errEl","helpEl","wrap","tv","hasVal","display","isOn","Switch","renderRows","on","collectAll","Ribbon","activeMap","setActiveMap","map","si","allItems","sameGroup","renderSubItem","isLarge","renderInnerBlock","block","sub","j","renderSection","Navbar","logo","vertical","btnStyle","mi"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dhx-react-suite.js","sources":["../src/tokens/index.ts","../src/styles/index.ts","../src/components/Button/Button.tsx","../src/hooks/useClickOutside.ts","../src/hooks/useDrag.ts","../src/components/Menu/Menu.tsx","../src/components/Toolbar/Toolbar.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Layout/Layout.tsx","../src/components/Tabbar/Tabbar.tsx","../src/components/Grid/Grid.tsx","../src/components/Chart/Chart.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Timepicker/Timepicker.tsx","../src/components/Combobox/Combobox.tsx","../src/components/Slider/Slider.tsx","../src/components/Colorpicker/Colorpicker.tsx","../src/components/Popup/Popup.tsx","../src/components/Window/Window.tsx","../src/components/Message/Message.tsx","../src/components/List/List.tsx","../src/components/DataView/DataView.tsx","../src/components/Tree/Tree.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Form/Form.tsx","../src/components/Ribbon/Ribbon.tsx","../src/components/Navbar/Navbar.tsx"],"sourcesContent":["/**\n * Design Tokens — single source of truth for colours, spacing and typography.\n *\n * @example Override for a dark/custom theme:\n * import { tokens } from \"dhx-react-suite\";\n * tokens.primary = \"#7c3aed\";\n */\nconst tokens = {\n primary: \"#0288d1\",\n primaryDk: \"#01579b\",\n primaryLt: \"#e1f5fe\",\n success: \"#43a047\",\n danger: \"#e53935\",\n warning: \"#fb8c00\",\n bg: \"#f5f7fa\",\n surface: \"#ffffff\",\n border: \"#dde3ea\",\n borderDk: \"#b0bec5\",\n text: \"#3d4a5c\",\n textSec: \"#6b7a8d\",\n textMut: \"#9aa5b1\",\n shadow: \"0 2px 8px rgba(0,0,0,.10)\",\n shadowLg: \"0 8px 28px rgba(0,0,0,.14)\",\n r: \"4px\",\n rMd: \"8px\",\n font: \"'Segoe UI', system-ui, -apple-system, sans-serif\",\n};\n\nexport type Tokens = typeof tokens;\nexport default tokens;\n","import T from \"../tokens\";\n\nconst STYLE_ID = \"dhx-react-styles\";\n\n/** Injects a single <style> tag into <head>. Safe to call multiple times. */\nexport function injectStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const s = document.createElement(\"style\");\n s.id = STYLE_ID;\n s.textContent = `\n *,*::before,*::after{box-sizing:border-box}\n .dhx{font-family:${T.font};font-size:14px;color:${T.text}}\n .dhx *{box-sizing:border-box}\n .dhx-scroll::-webkit-scrollbar{width:6px;height:6px}\n .dhx-scroll::-webkit-scrollbar-track{background:${T.bg}}\n .dhx-scroll::-webkit-scrollbar-thumb{background:${T.borderDk};border-radius:3px}\n .dhx-scroll::-webkit-scrollbar-thumb:hover{background:${T.textMut}}\n @keyframes dhx-fade{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n @keyframes dhx-spin{to{transform:rotate(360deg)}}\n @keyframes dhx-toast{from{opacity:0;transform:translateX(110%)}to{opacity:1;transform:translateX(0)}}\n @keyframes dhx-pulse{0%,100%{opacity:1}50%{opacity:.5}}\n .dhx-anim-fade{animation:dhx-fade .15s ease}\n .dhx-btn{display:inline-flex;align-items:center;gap:5px;padding:0 12px;height:32px;border-radius:${T.r};border:1px solid transparent;cursor:pointer;font-size:13px;font-family:inherit;font-weight:500;transition:all .15s ease;outline:none;white-space:nowrap;user-select:none}\n .dhx-btn:focus-visible{box-shadow:0 0 0 3px ${T.primary}33}\n .dhx-btn-primary{background:${T.primary};color:#fff;border-color:${T.primary}}\n .dhx-btn-primary:hover{background:${T.primaryDk};border-color:${T.primaryDk}}\n .dhx-btn-secondary{background:${T.surface};color:${T.text};border-color:${T.border}}\n .dhx-btn-secondary:hover{background:${T.bg};border-color:${T.borderDk}}\n .dhx-btn-ghost{background:transparent;color:${T.textSec};border-color:transparent}\n .dhx-btn-ghost:hover{background:${T.bg};color:${T.text}}\n .dhx-btn-danger{background:${T.danger};color:#fff;border-color:${T.danger}}\n .dhx-btn-danger:hover{background:#c62828;border-color:#c62828}\n .dhx-btn:disabled{opacity:.45;cursor:not-allowed}\n .dhx-input{width:100%;height:32px;padding:0 10px;border:1px solid ${T.border};border-radius:${T.r};font-size:13px;font-family:inherit;color:${T.text};background:${T.surface};outline:none;transition:border-color .15s}\n .dhx-input:focus{border-color:${T.primary};box-shadow:0 0 0 3px ${T.primary}22}\n .dhx-input:disabled{background:${T.bg};color:${T.textMut};cursor:not-allowed}\n .dhx-input-wrap{position:relative;width:100%}\n .dhx-input-wrap .dhx-input-icon{position:absolute;left:9px;top:50%;transform:translateY(-50%);color:${T.textMut};pointer-events:none}\n .dhx-input-wrap .dhx-input--with-icon{padding-left:30px}\n .dhx-label{display:block;font-size:12px;font-weight:600;color:${T.textSec};margin-bottom:5px;letter-spacing:.02em}\n .dhx-form-group{margin-bottom:14px}\n .dhx-card{background:${T.surface};border:1px solid ${T.border};border-radius:${T.rMd};box-shadow:${T.shadow}}\n .dhx-card-padded{padding:16px}\n .dhx-divider{border:none;border-top:1px solid ${T.border};margin:0}\n .dhx-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600}\n .dhx-tag-primary{background:${T.primaryLt};color:${T.primaryDk}}\n .dhx-tag-success{background:#e8f5e9;color:#1b5e20}\n .dhx-tag-danger{background:#ffebee;color:#b71c1c}\n .dhx-tag-warning{background:#fff3e0;color:#e65100}\n `;\n document.head.appendChild(s);\n}\n","import { useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Leading icon element */\n icon?: React.ReactNode;\n disabled?: boolean;\n onClick?: () => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, React.CSSProperties> = {\n sm: { height: 24, padding: \"0 8px\", fontSize: 12 },\n md: {},\n lg: { height: 38, padding: \"0 18px\", fontSize: 14 },\n};\n\nexport function Button({\n children, variant = \"primary\", size = \"md\",\n icon, disabled, onClick, style, className = \"\",\n}: ButtonProps) {\n useEffect(injectStyles, []);\n return (\n <button\n className={`dhx dhx-btn dhx-btn-${variant} ${className}`}\n style={{ ...SIZE_STYLES[size], ...style }}\n disabled={disabled}\n onClick={onClick}\n >\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {children}\n </button>\n );\n}\n","import { useEffect, RefObject } from \"react\";\n\nexport function useClickOutside(\n ref: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n): void {\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) callback(e);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [ref, callback]);\n}\n","import { useRef, useCallback } from \"react\";\nimport React from \"react\";\n\nexport function useDrag(\n onDrag: (x: number, y: number) => void,\n): (e: React.MouseEvent, originX?: number, originY?: number) => void {\n const dragging = useRef(false);\n const origin = useRef({ x: 0, y: 0, ox: 0, oy: 0 });\n\n return useCallback(\n (e: React.MouseEvent, originX = 0, originY = 0) => {\n dragging.current = true;\n origin.current = { x: e.clientX, y: e.clientY, ox: originX, oy: originY };\n const move = (me: MouseEvent) => {\n if (!dragging.current) return;\n const { x, y, ox, oy } = origin.current;\n onDrag(ox + me.clientX - x, oy + me.clientY - y);\n };\n const up = () => {\n dragging.current = false;\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n e.preventDefault();\n },\n [onDrag],\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface MenuItem {\n id?: string;\n value?: string;\n icon?: React.ReactNode;\n hotkey?: string;\n disabled?: boolean;\n type?: \"separator\";\n items?: MenuItem[];\n}\n\ninterface MenuDropdownProps {\n items: MenuItem[];\n onSelect: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function MenuDropdown({ items, onSelect, style }: MenuDropdownProps) {\n const [hov, setHov] = useState<number | null>(null);\n return (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, minWidth: 180, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, boxShadow: T.shadowLg, zIndex: 200, padding: \"4px 0\", ...style }}>\n {items.map((item, i) => {\n if (item.type === \"separator\") return <div key={i} style={{ height: 1, background: T.border, margin: \"4px 0\" }} />;\n const isHov = hov === i;\n return (\n <div key={item.id || i} style={{ position: \"relative\" }} onMouseEnter={() => setHov(i)} onMouseLeave={() => setHov(null)}>\n <div onClick={() => !item.disabled && !item.items?.length && onSelect(item)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"8px 14px\", cursor: item.disabled ? \"not-allowed\" : \"pointer\", fontSize: 13, color: item.disabled ? T.textMut : T.text, background: isHov && !item.disabled ? T.bg : \"transparent\", opacity: item.disabled ? .5 : 1 }}>\n {item.icon && <span style={{ fontSize: 15, width: 18, textAlign: \"center\" }}>{item.icon}</span>}\n <span style={{ flex: 1 }}>{item.value || item.id}</span>\n {item.hotkey && <span style={{ fontSize: 11, color: T.textMut }}>{item.hotkey}</span>}\n {item.items?.length ? <span style={{ fontSize: 10, color: T.textMut }}>▶</span> : null}\n </div>\n {isHov && item.items?.length ? <MenuDropdown items={item.items} onSelect={onSelect} style={{ position: \"absolute\", left: \"100%\", top: -4 }} /> : null}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface MenuProps {\n items?: MenuItem[];\n label?: string;\n onSelect?: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Menu({ items = [], label = \"Menu\", onSelect, style }: MenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\", ...style }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => setOpen(o => !o)}>\n {label} <span style={{ fontSize: 10 }}>{open ? \"▲\" : \"▼\"}</span>\n </button>\n {open && <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setOpen(false); }} />}\n </div>\n );\n}\n\nexport interface ContextMenuProps {\n items?: MenuItem[];\n onSelect?: (item: MenuItem) => void;\n children: React.ReactNode;\n}\n\nexport function ContextMenu({ items = [], onSelect, children }: ContextMenuProps) {\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setPos(null), []));\n const show = (e: React.MouseEvent) => { e.preventDefault(); setPos({ x: e.clientX, y: e.clientY }); };\n return (\n <div ref={ref} onContextMenu={show} style={{ position: \"relative\", display: \"contents\" }}>\n {children}\n {pos && (\n <div style={{ position: \"fixed\", left: pos.x, top: pos.y, zIndex: 9999 }}>\n <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setPos(null); }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface ToolbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"select\" | \"imageButton\";\n value?: string;\n text?: string; // alias for value (backward compat)\n icon?: React.ReactNode;\n src?: string; // imageButton avatar\n items?: MenuItem[]; // dropdown\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n group?: string; // radio-group id\n disabled?: boolean;\n hidden?: boolean;\n count?: number; // notification badge\n label?: string; // prefix label for input/select\n options?: { value: string; label: string }[];\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface ToolbarProps {\n items?: ToolbarItem[];\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Toolbar({ items = [], onAction, style }: ToolbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => {\n if (item.id && (item.twoState || item.group) && item.active) init[item.id] = true;\n });\n return init;\n });\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLDivElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: ToolbarItem, i: number) => {\n if (item.disabled) return;\n\n // twoState toggle\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n\n // radio group\n if (item.group && item.id) {\n setActiveItems(s => {\n const ns = { ...s };\n items.forEach(it => { if (it.group === item.group && it.id) ns[it.id] = false; });\n ns[item.id!] = true;\n return ns;\n });\n }\n\n // dropdown\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: ToolbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{ width: 1, background: T.border, margin: \"6px 4px\", alignSelf: \"stretch\" }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 140, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n </div>\n );\n\n /* ── select ── */\n if (item.type === \"select\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <select\n className=\"dhx dhx-input\"\n style={{ width: item.width || 100, height: 28, cursor: \"pointer\" }}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n >\n {item.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 32, height: 32, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.id && activeItems[item.id]);\n const label = item.value ?? item.text;\n const hasDropdown = !!(item.items?.length);\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n height: 32, gap: 4,\n position: \"relative\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16 }}>{item.icon}</span>}\n {label && <span style={{ fontSize: 13 }}>{label}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={() => setOpenMenu(null)}\n style={{ top: \"100%\", left: 0 }}\n />\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\", alignItems: \"center\", gap: 2,\n padding: \"4px 8px\", background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n minHeight: 44, flexWrap: \"wrap\",\n ...style,\n }}\n >\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport type SidebarBadgeColor = \"danger\" | \"primary\" | \"success\" | \"secondary\";\n\nexport interface SidebarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"title\" | \"customHTML\";\n value?: string;\n icon?: React.ReactNode;\n html?: string;\n tooltip?: string;\n count?: number;\n countColor?: SidebarBadgeColor;\n twoState?: boolean;\n active?: boolean;\n group?: string;\n disabled?: boolean;\n hidden?: boolean;\n items?: SidebarItem[];\n onClick?: (id: string) => void;\n}\n\nexport interface SidebarProps {\n items?: SidebarItem[];\n width?: number;\n minWidth?: number;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n selected?: string;\n defaultSelected?: string;\n onSelect?: (item: SidebarItem) => void;\n onCollapse?: () => void;\n onExpand?: () => void;\n onBeforeCollapse?: () => boolean | void;\n onBeforeExpand?: () => boolean | void;\n onToggleItem?: (id: string, active: boolean) => void;\n style?: React.CSSProperties;\n}\n\nfunction badgeBg(c?: SidebarBadgeColor): string {\n if (c === \"primary\") return T.primary;\n if (c === \"success\") return \"#43a047\";\n if (c === \"secondary\") return \"#9e9e9e\";\n return \"#e53935\"; // danger (default)\n}\n\nfunction flatGroupIds(items: SidebarItem[], group: string): string[] {\n const ids: string[] = [];\n const visit = (i: SidebarItem) => {\n if (i.id && i.group === group) ids.push(i.id);\n i.items?.forEach(visit);\n };\n items.forEach(visit);\n return ids;\n}\n\nfunction initActiveState(items: SidebarItem[]): Record<string, boolean> {\n const r: Record<string, boolean> = {};\n const visit = (i: SidebarItem) => {\n if (i.id && i.twoState && i.active) r[i.id] = true;\n i.items?.forEach(visit);\n };\n items.forEach(visit);\n return r;\n}\n\nexport function Sidebar({\n items = [],\n width = 240,\n minWidth = 64,\n header,\n footer,\n collapsed,\n defaultCollapsed,\n selected,\n defaultSelected,\n onSelect,\n onCollapse,\n onExpand,\n onBeforeCollapse,\n onBeforeExpand,\n onToggleItem,\n style,\n}: SidebarProps) {\n const isCtrlCollapsed = collapsed !== undefined;\n const isCtrlSelected = selected !== undefined;\n\n const [collapsedState, setCollapsedState] = useState(defaultCollapsed ?? false);\n const [selectedState, setSelectedState] = useState<string | null>(defaultSelected ?? null);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n const [activeState, setActiveState] = useState<Record<string, boolean>>(() => initActiveState(items));\n useEffect(injectStyles, []);\n\n const isCollapsed = isCtrlCollapsed ? collapsed! : collapsedState;\n const currentSel = isCtrlSelected ? (selected ?? null) : selectedState;\n const w = isCollapsed ? minWidth : width;\n\n const handleToggle = () => {\n if (isCollapsed) {\n if (onBeforeExpand?.() === false) return;\n if (!isCtrlCollapsed) setCollapsedState(false);\n onExpand?.();\n } else {\n if (onBeforeCollapse?.() === false) return;\n if (!isCtrlCollapsed) setCollapsedState(true);\n onCollapse?.();\n }\n };\n\n const handleSelect = (item: SidebarItem) => {\n if (!isCtrlSelected) setSelectedState(item.id ?? null);\n onSelect?.(item);\n if (item.id && item.onClick) item.onClick(item.id);\n };\n\n const handleTwoState = (item: SidebarItem) => {\n if (!item.id) return;\n const newActive = !activeState[item.id];\n let next = { ...activeState, [item.id]: newActive };\n if (item.group && newActive) {\n flatGroupIds(items, item.group).forEach(gid => {\n if (gid !== item.id) next[gid] = false;\n });\n }\n setActiveState(next);\n onToggleItem?.(item.id, newActive);\n };\n\n /* ── Badge ─────────────────────────────────────────────────────────── */\n const renderBadge = (item: SidebarItem, mini: boolean): React.ReactNode => {\n if (item.count === undefined) return null;\n const bg = badgeBg(item.countColor);\n const txt = item.count > 99 ? \"99+\" : String(item.count);\n if (mini) return (\n <span style={{\n position: \"absolute\", top: 1, right: 1,\n background: bg, color: \"#fff\",\n borderRadius: 8, fontSize: 9, fontWeight: 700,\n padding: \"0 3px\", minWidth: 14, textAlign: \"center\", lineHeight: \"14px\",\n pointerEvents: \"none\",\n }}>{txt}</span>\n );\n return (\n <span style={{\n background: bg, color: \"#fff\",\n borderRadius: 10, padding: \"1px 6px\", fontSize: 11, fontWeight: 700, flexShrink: 0,\n }}>{txt}</span>\n );\n };\n\n /* ── Item renderer ──────────────────────────────────────────────────── */\n const renderItem = (item: SidebarItem, depth: number, idx: number): React.ReactNode => {\n if (item.hidden) return null;\n const key = item.id ?? `${item.type ?? \"navItem\"}-${depth}-${idx}`;\n const type = item.type ?? \"navItem\";\n\n if (type === \"separator\") return (\n <div key={key} style={{ height: 1, background: T.border, margin: \"6px 8px\", flexShrink: 0 }} />\n );\n\n if (type === \"spacer\") return (\n <div key={key} style={{ flex: 1 }} />\n );\n\n if (type === \"title\") {\n if (isCollapsed) return null;\n return (\n <div key={key} style={{\n padding: \"10px 14px 4px\",\n fontSize: 10, fontWeight: 700, textTransform: \"uppercase\",\n letterSpacing: 1, color: T.textMut, flexShrink: 0,\n }}>{item.value}</div>\n );\n }\n\n if (type === \"customHTML\") return (\n <div key={key} dangerouslySetInnerHTML={{ __html: item.html ?? \"\" }}\n style={{ padding: \"8px 12px\", flexShrink: 0 }} />\n );\n\n /* navItem */\n const hasChildren = (item.items?.length ?? 0) > 0;\n const isExp = !!expanded[item.id ?? \"\"];\n const isTwoActive = item.twoState ? !!activeState[item.id ?? \"\"] : false;\n const isSelected = !item.twoState && currentSel === item.id;\n const isActive = isSelected || isTwoActive;\n const isDisabled = !!item.disabled;\n const pl = isCollapsed ? 0 : (12 + depth * 16);\n\n const handleClick = () => {\n if (isDisabled) return;\n if (item.twoState) {\n handleTwoState(item);\n handleSelect(item);\n } else {\n if (hasChildren) setExpanded(e => ({ ...e, [item.id ?? \"\"]: !e[item.id ?? \"\"] }));\n handleSelect(item);\n }\n };\n\n return (\n <div key={key} style={{ flexShrink: 0 }}>\n <div\n title={item.tooltip}\n onClick={handleClick}\n style={{\n display: \"flex\", alignItems: \"center\",\n gap: isCollapsed ? 0 : 8,\n justifyContent: isCollapsed ? \"center\" : \"flex-start\",\n paddingTop: 8, paddingBottom: 8,\n paddingLeft: isCollapsed ? 0 : pl,\n paddingRight: isCollapsed ? 0 : 10,\n borderRadius: T.r,\n margin: \"1px 6px\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n userSelect: \"none\",\n transition: \"background .15s\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isDisabled ? T.textMut : isActive ? T.primary : T.text,\n opacity: isDisabled ? 0.55 : 1,\n }}\n onMouseEnter={e => { if (!isActive && !isDisabled) e.currentTarget.style.background = T.bg; }}\n onMouseLeave={e => { if (!isActive && !isDisabled) e.currentTarget.style.background = \"transparent\"; }}\n >\n {/* Icon with collapsed mini-badge overlay */}\n <span style={{\n position: \"relative\", minWidth: 22, textAlign: \"center\",\n fontSize: 18, flexShrink: 0, lineHeight: 1,\n }}>\n {item.icon ?? (item.value && !item.icon ? null : null)}\n {isCollapsed && renderBadge(item, true)}\n </span>\n\n {/* Label */}\n {!isCollapsed && (\n <span style={{\n flex: 1, fontSize: 13,\n fontWeight: isActive ? 600 : 400,\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n }}>{item.value}</span>\n )}\n\n {/* Badge (expanded) */}\n {!isCollapsed && renderBadge(item, false)}\n\n {/* twoState indicator */}\n {!isCollapsed && item.twoState && (\n <span style={{\n width: 14, height: 14, borderRadius: 2,\n border: `2px solid ${isActive ? T.primary : T.borderDk}`,\n background: isActive ? T.primary : \"transparent\",\n flexShrink: 0, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n {isActive && <span style={{ color: \"#fff\", fontSize: 8, fontWeight: 700, lineHeight: 1 }}>✓</span>}\n </span>\n )}\n\n {/* Expand chevron */}\n {!isCollapsed && hasChildren && !item.twoState && (\n <span style={{\n fontSize: 11, color: T.textMut, flexShrink: 0,\n transition: \"transform .2s\",\n transform: isExp ? \"rotate(90deg)\" : \"rotate(0deg)\",\n display: \"inline-block\",\n }}>▶</span>\n )}\n </div>\n\n {/* Nested children (accordion) */}\n {hasChildren && isExp && !isCollapsed && (\n <div>{item.items!.map((child, ci) => renderItem(child, depth + 1, ci))}</div>\n )}\n </div>\n );\n };\n\n /* ── Collapse toggle ────────────────────────────────────────────────── */\n const collapseBtn = (\n <div\n onClick={handleToggle}\n style={{\n display: \"flex\", alignItems: \"center\",\n justifyContent: isCollapsed ? \"center\" : \"flex-start\",\n gap: 8,\n padding: isCollapsed ? \"8px 0\" : \"8px 14px\",\n margin: \"4px 6px\",\n borderRadius: T.r,\n cursor: \"pointer\",\n color: T.textMut,\n fontSize: 13,\n userSelect: \"none\",\n transition: \"background .15s\",\n flexShrink: 0,\n }}\n onMouseEnter={e => (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => (e.currentTarget.style.background = \"transparent\")}\n >\n <span style={{ fontSize: 16, fontWeight: 700, lineHeight: 1 }}>\n {isCollapsed ? \"›\" : \"‹\"}\n </span>\n {!isCollapsed && <span>Collapse</span>}\n </div>\n );\n\n return (\n <div\n className=\"dhx\"\n style={{\n width: w, minWidth: w,\n background: T.surface,\n borderRight: `1px solid ${T.border}`,\n display: \"flex\", flexDirection: \"column\",\n transition: \"width .2s ease, min-width .2s ease\",\n overflow: \"hidden\",\n ...style,\n }}\n >\n {/* Header */}\n {header && (\n <div style={{\n padding: isCollapsed ? \"12px 0\" : \"12px 14px\",\n borderBottom: `1px solid ${T.border}`,\n fontWeight: 700, fontSize: 15,\n display: \"flex\", alignItems: \"center\",\n justifyContent: isCollapsed ? \"center\" : \"flex-start\",\n overflow: \"hidden\", flexShrink: 0,\n }}>\n {header}\n </div>\n )}\n\n {/* Nav items */}\n <div\n className=\"dhx-scroll\"\n style={{ flex: 1, overflowY: \"auto\", overflowX: \"hidden\", display: \"flex\", flexDirection: \"column\" }}\n >\n {items.map((item, i) => renderItem(item, 0, i))}\n </div>\n\n {/* Collapse toggle */}\n {collapseBtn}\n\n {/* Footer */}\n {footer && !isCollapsed && (\n <div style={{ padding: \"10px 14px\", borderTop: `1px solid ${T.border}`, flexShrink: 0 }}>\n {footer}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface LayoutCellConfig {\n id?: string;\n width?: string | number;\n height?: string | number;\n header?: string;\n collapsable?: boolean;\n padding?: string | number;\n html?: string;\n content?: React.ReactNode;\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n}\n\nexport interface LayoutProps {\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n type?: \"line\" | \"space\" | \"wide\";\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction LayoutCell({ config }: { config: LayoutCellConfig }) {\n const [collapsed, setCollapsed] = useState(false);\n const style: React.CSSProperties = {\n position: \"relative\", background: T.surface,\n border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\",\n ...(config.width ? { width: config.width, minWidth: config.width } : { flex: 1 }),\n ...(config.height ? { height: config.height, minHeight: config.height } : { minHeight: 40 }),\n ...(collapsed ? { flex: \"0 0 auto\" } : {}),\n };\n return (\n <div style={style}>\n {config.header && (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", padding: \"6px 12px\", background: T.bg, borderBottom: `1px solid ${T.border}`, fontSize: 12, fontWeight: 600, color: T.textSec, userSelect: \"none\" }}>\n <span>{config.header}</span>\n {config.collapsable && <button onClick={() => setCollapsed(c => !c)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 16, lineHeight: 1 }}>{collapsed ? \"▼\" : \"▲\"}</button>}\n </div>\n )}\n {!collapsed && (\n <div style={{ padding: config.padding || 0, height: config.header ? \"calc(100% - 33px)\" : \"100%\", overflow: \"auto\" }}>\n {config.html ? <div dangerouslySetInnerHTML={{ __html: config.html }} /> : config.content}\n {(config.rows || config.cols) && <Layout rows={config.rows} cols={config.cols} style={{ height: \"100%\" }} />}\n </div>\n )}\n </div>\n );\n}\n\nexport function Layout({ rows, cols, type = \"line\", style, children }: LayoutProps) {\n useEffect(injectStyles, []);\n const gap = type === \"space\" ? 12 : type === \"wide\" ? 8 : 1;\n const cells = rows || cols;\n const isRow = !!rows;\n if (!cells) return <div className=\"dhx\" style={{ width: \"100%\", height: \"100%\", ...style }}>{children}</div>;\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: isRow ? \"column\" : \"row\", gap, width: \"100%\", height: \"100%\", ...style }}>\n {cells.map((cell, i) => <LayoutCell key={cell.id || i} config={cell} />)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TabView {\n id: string;\n tab: string;\n icon?: React.ReactNode;\n content?: React.ReactNode;\n html?: string;\n}\n\nexport interface TabbarProps {\n views?: TabView[];\n mode?: \"top\" | \"bottom\" | \"left\" | \"right\";\n tabAlign?: \"left\" | \"center\" | \"right\";\n closable?: string[];\n disabled?: string[];\n defaultActive?: string;\n onBeforeChange?: (id: string) => boolean | void;\n onChange?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Tabbar({ views = [], mode = \"top\", tabAlign = \"left\", closable = [], disabled = [], defaultActive, onBeforeChange, onChange, style }: TabbarProps) {\n const [active, setActive] = useState(defaultActive || views[0]?.id);\n const [openTabs, setOpenTabs] = useState(views.map(v => v.id));\n useEffect(injectStyles, []);\n\n const handleClose = (e: React.MouseEvent, id: string) => {\n e.stopPropagation();\n setOpenTabs(t => t.filter(x => x !== id));\n if (active === id) setActive(openTabs.find(t => t !== id) ?? \"\");\n };\n const handleChange = (id: string) => {\n if (disabled.includes(id)) return;\n if (onBeforeChange && onBeforeChange(id) === false) return;\n setActive(id); onChange?.(id);\n };\n\n const isVertical = mode === \"left\" || mode === \"right\";\n const visibleViews = views.filter(v => openTabs.includes(v.id));\n\n const tabBar = (\n <div style={{ display: \"flex\", flexDirection: isVertical ? \"column\" : \"row\", justifyContent: tabAlign === \"center\" ? \"center\" : tabAlign === \"right\" ? \"flex-end\" : \"flex-start\", background: T.surface, borderBottom: !isVertical && mode !== \"bottom\" ? `2px solid ${T.border}` : \"none\", borderTop: mode === \"bottom\" ? `2px solid ${T.border}` : \"none\", borderRight: mode === \"left\" ? `2px solid ${T.border}` : \"none\", borderLeft: mode === \"right\" ? `2px solid ${T.border}` : \"none\", overflowX: \"auto\", flexShrink: 0 }}>\n {visibleViews.map(v => {\n const isActive = active === v.id;\n const isDis = disabled.includes(v.id);\n const activeStyle: React.CSSProperties = mode === \"bottom\"\n ? { borderTop: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 }\n : isVertical\n ? { color: T.primary, fontWeight: 600, background: T.primaryLt, [mode === \"left\" ? \"borderRight\" : \"borderLeft\"]: `2px solid ${T.primary}` }\n : { borderBottom: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 };\n return (\n <div key={v.id} onClick={() => handleChange(v.id)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 6, padding: \"10px 16px\", cursor: isDis ? \"not-allowed\" : \"pointer\", whiteSpace: \"nowrap\", fontSize: 13, transition: \"color .15s\", userSelect: \"none\", minWidth: isVertical ? 120 : \"auto\", ...(isActive ? activeStyle : { color: isDis ? T.textMut : T.textSec }) }}>\n {v.icon && <span style={{ fontSize: 16 }}>{v.icon}</span>}\n <span>{v.tab}</span>\n {closable.includes(v.id) && <span onClick={e => handleClose(e, v.id)} style={{ marginLeft: 4, opacity: .6, fontSize: 12, cursor: \"pointer\" }}>✕</span>}\n </div>\n );\n })}\n </div>\n );\n\n const activeView = visibleViews.find(v => v.id === active);\n const content = (\n <div className=\"dhx-scroll\" style={{ flex: 1, overflow: \"auto\" }}>\n {activeView?.content}\n {activeView?.html && <div dangerouslySetInnerHTML={{ __html: activeView.html }} style={{ padding: 16 }} />}\n </div>\n );\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: mode === \"top\" ? \"column\" : mode === \"bottom\" ? \"column-reverse\" : mode === \"left\" ? \"row\" : \"row-reverse\", width: \"100%\", height: \"100%\", background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\", ...style }}>\n {tabBar}\n {content}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface GridColumnHeader {\n text?: string;\n align?: \"left\" | \"center\" | \"right\";\n htmlEnable?: boolean;\n content?: \"inputFilter\" | \"selectFilter\" | \"comboFilter\";\n}\n\nexport interface GridColumnFooter {\n text?: string | ((s: { sum: number; avg: number; count: number; min: number; max: number }) => string);\n summary?: \"sum\" | \"avg\" | \"count\" | \"min\" | \"max\";\n}\n\nexport interface GridColumn {\n id: string;\n header?: GridColumnHeader[] | string;\n footer?: GridColumnFooter[];\n width?: number;\n minWidth?: number;\n sortable?: boolean;\n filterable?: boolean;\n filterType?: \"input\" | \"select\";\n resizable?: boolean;\n editable?: boolean;\n editorType?: \"input\" | \"select\" | \"combobox\";\n options?: string[];\n hidden?: boolean;\n type?: \"string\" | \"number\" | \"date\" | \"boolean\";\n htmlEnable?: boolean;\n summary?: \"sum\" | \"avg\" | \"count\" | \"min\" | \"max\";\n align?: \"left\" | \"center\" | \"right\";\n template?: (value: unknown, row: Record<string, unknown>) => React.ReactNode;\n}\n\nexport interface GridProps {\n columns: GridColumn[];\n data?: Record<string, unknown>[];\n height?: string | number;\n rowHeight?: number;\n headerRowHeight?: number;\n footerRowHeight?: number;\n sortable?: boolean;\n resizable?: boolean;\n editable?: boolean;\n stripe?: boolean;\n autoWidth?: boolean;\n keyNavigation?: boolean;\n selection?: \"row\" | \"cell\";\n multiselect?: boolean;\n leftSplit?: number;\n onSelect?: (row: Record<string, unknown>) => void;\n onChange?: (row: Record<string, unknown>, colId: string, value: unknown) => void;\n style?: React.CSSProperties;\n}\n\nconst B = `1px solid ${T.border}`;\n\n/* ── SortArrows ── */\nfunction SortArrows({ active, dir }: { active: boolean; dir: \"asc\" | \"desc\" }) {\n return (\n <span style={{ display: \"inline-flex\", flexDirection: \"column\", gap: 1, flexShrink: 0, marginLeft: 4 }}>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 0L7 4H0z\" fill={active && dir === \"asc\" ? T.primary : T.borderDk} />\n </svg>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 4L0 0H7z\" fill={active && dir === \"desc\" ? T.primary : T.borderDk} />\n </svg>\n </span>\n );\n}\n\n/* ── InlineCellCombobox — lightweight dropdown editor for cells ── */\nfunction InlineCellCombobox({ options, value, onChange, onCommit, onCancel }: {\n options: string[];\n value: string;\n onChange: (v: string) => void;\n onCommit: () => void;\n onCancel: () => void;\n}) {\n const [query, setQuery] = useState(value);\n const [open, setOpen] = useState(true);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const h = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) onCommit();\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n }, [onCommit]);\n\n const filtered = options.filter(o => !query || o.toLowerCase().includes(query.toLowerCase()));\n\n return (\n <div ref={ref} style={{ width: \"100%\", position: \"relative\" }}>\n <input\n autoFocus\n value={query}\n onChange={e => { setQuery(e.target.value); onChange(e.target.value); setOpen(true); }}\n onKeyDown={e => { if (e.key === \"Enter\") onCommit(); if (e.key === \"Escape\") onCancel(); }}\n onClick={e => e.stopPropagation()}\n style={{ width: \"100%\", border: \"none\", outline: `2px solid ${T.primary}`, borderRadius: 2, fontSize: 13, padding: \"2px 4px\", background: T.surface, color: T.text }}\n />\n {open && filtered.length > 0 && (\n <div style={{ position: \"absolute\", top: \"100%\", left: 0, right: 0, zIndex: 50, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, boxShadow: T.shadowLg, maxHeight: 160, overflowY: \"auto\" }}>\n {filtered.map(o => (\n <div key={o}\n onMouseDown={e => { e.preventDefault(); onChange(o); setQuery(o); setOpen(false); onCommit(); }}\n style={{ padding: \"6px 10px\", cursor: \"pointer\", fontSize: 13, color: T.text }}\n onMouseEnter={e => (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => (e.currentTarget.style.background = T.surface)}>\n {o}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/* ── Helpers ── */\nfunction formatByType(val: unknown, type: GridColumn[\"type\"]): string {\n if (val == null) return \"\";\n if (type === \"number\") return typeof val === \"number\" ? val.toLocaleString() : String(val);\n if (type === \"date\") {\n const d = val instanceof Date ? val : new Date(String(val));\n return isNaN(d.getTime()) ? String(val) : d.toLocaleDateString();\n }\n return String(val);\n}\n\nfunction compareValues(a: unknown, b: unknown, type: GridColumn[\"type\"]): number {\n if (a == null) return 1;\n if (b == null) return -1;\n if (type === \"date\") return new Date(String(a)).getTime() - new Date(String(b)).getTime();\n if (type === \"number\") return Number(a) - Number(b);\n return String(a) < String(b) ? -1 : String(a) > String(b) ? 1 : 0;\n}\n\nfunction getFilterWidget(col: GridColumn): \"inputFilter\" | \"selectFilter\" | \"comboFilter\" | null {\n if (Array.isArray(col.header) && col.header[1]?.content != null) return col.header[1].content;\n if (col.filterable) return col.filterType === \"select\" ? \"selectFilter\" : \"inputFilter\";\n return null;\n}\n\nfunction renderEditor(\n col: GridColumn,\n editValue: string,\n setEditValue: (v: string) => void,\n commit: () => void,\n cancel: () => void,\n): React.ReactNode {\n const base: React.CSSProperties = {\n width: \"100%\", border: \"none\", outline: `2px solid ${T.primary}`,\n borderRadius: 2, fontSize: 13, padding: \"2px 4px\", background: T.surface, color: T.text,\n };\n\n const et = col.editorType ?? \"input\";\n\n if (et === \"select\") return (\n <select autoFocus value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commit}\n onKeyDown={e => { if (e.key === \"Enter\") commit(); if (e.key === \"Escape\") cancel(); }}\n onClick={e => e.stopPropagation()}\n style={{ ...base, cursor: \"pointer\" }}>\n {(col.options ?? []).map(o => <option key={o} value={o}>{o}</option>)}\n </select>\n );\n\n if (et === \"combobox\") return (\n <InlineCellCombobox options={col.options ?? []} value={editValue}\n onChange={setEditValue} onCommit={commit} onCancel={cancel} />\n );\n\n const inputType = col.type === \"number\" ? \"number\" : col.type === \"date\" ? \"date\" : \"text\";\n return (\n <input autoFocus type={inputType} value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commit}\n onKeyDown={e => { if (e.key === \"Enter\") commit(); if (e.key === \"Escape\") cancel(); }}\n onClick={e => e.stopPropagation()}\n style={base}\n />\n );\n}\n\n/* ── Grid ── */\nexport function Grid({\n columns, data = [], height = 400, rowHeight = 40,\n headerRowHeight = 40, footerRowHeight = 40,\n sortable = true, resizable = true, editable = false,\n stripe = false, autoWidth = false, keyNavigation = false,\n selection, multiselect, leftSplit = 0,\n onSelect, onChange, style,\n}: GridProps) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n const [filter, setFilter] = useState<Record<string, string>>({});\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [focusRow, setFocusRow] = useState(-1);\n const [colWidths, setColWidths] = useState<Record<string, number>>(\n () => Object.fromEntries(columns.map(c => [c.id, c.width ?? c.minWidth ?? 150])),\n );\n const [editCell, setEditCell] = useState<{ key: string | number; colId: string } | null>(null);\n const [editValue, setEditValue] = useState(\"\");\n const [edits, setEdits] = useState<Record<string, Record<string, unknown>>>({});\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerW, setContainerW] = useState(0);\n useEffect(injectStyles, []);\n\n useEffect(() => {\n if (!autoWidth || !containerRef.current) return;\n const ro = new ResizeObserver(() => setContainerW(containerRef.current?.offsetWidth ?? 0));\n ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, [autoWidth]);\n\n /* promote col.summary shorthand → footer[0].summary */\n const normalizedColumns = useMemo(() =>\n columns.map(col =>\n col.summary && (!col.footer || col.footer.length === 0)\n ? { ...col, footer: [{ summary: col.summary }] }\n : col,\n ),\n [columns]);\n\n /* visible (non-hidden) columns */\n const visibleColumns = useMemo(() =>\n normalizedColumns.filter(c => !c.hidden),\n [normalizedColumns]);\n\n /* effective widths (autoWidth distributes leftover) */\n const widths = useMemo<Record<string, number>>(() => {\n if (!autoWidth || containerW === 0) return colWidths;\n const total = visibleColumns.reduce((a, c) => a + (colWidths[c.id] ?? 150), 0);\n if (containerW <= total) return colWidths;\n const extra = (containerW - total) / visibleColumns.length;\n return Object.fromEntries(visibleColumns.map(c => [c.id, (colWidths[c.id] ?? 150) + extra]));\n }, [autoWidth, containerW, colWidths, visibleColumns]);\n\n /* sorted + filtered rows */\n const sorted = useMemo(() => {\n let rows = data\n .map((row, i) => {\n const key = String((row.id as string | number) ?? i);\n return edits[key] ? { ...row, ...edits[key] } : row;\n })\n .filter(row =>\n Object.entries(filter).every(([k, v]) =>\n !v || String(row[k] ?? \"\").toLowerCase().includes(v.toLowerCase()),\n ),\n );\n if (sortKey) {\n const col = normalizedColumns.find(c => c.id === sortKey);\n rows = [...rows].sort((a, b) => {\n const cmp = compareValues(a[sortKey], b[sortKey], col?.type);\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, sortKey, sortDir, filter, edits, normalizedColumns]);\n\n /* footer aggregation */\n const colStats = useMemo(() => {\n const s: Record<string, { sum: number; avg: number; count: number; min: number; max: number }> = {};\n normalizedColumns.forEach(col => {\n if (col.footer?.some(f => f.summary)) {\n const nums = sorted.map(r => Number(r[col.id])).filter(n => !isNaN(n));\n const sum = nums.reduce((a, b) => a + b, 0);\n s[col.id] = { sum, avg: nums.length ? sum / nums.length : 0, count: sorted.length, min: nums.length ? Math.min(...nums) : 0, max: nums.length ? Math.max(...nums) : 0 };\n }\n });\n return s;\n }, [sorted, normalizedColumns]);\n\n /* select filter options */\n const selectOpts = useMemo(() => {\n const o: Record<string, string[]> = {};\n visibleColumns\n .filter(c => { const w = getFilterWidget(c); return w === \"selectFilter\" || w === \"comboFilter\"; })\n .forEach(col => { o[col.id] = [...new Set(data.map(r => String(r[col.id] ?? \"\")))].sort(); });\n return o;\n }, [data, visibleColumns]);\n\n const hasFilterRow = visibleColumns.some(c => getFilterWidget(c) !== null);\n const hasFooter = normalizedColumns.some(c => c.footer?.length);\n const totalW = visibleColumns.reduce((a, c) => a + (widths[c.id] ?? 150), 0);\n\n /* sticky left offsets */\n const stickyLefts = useMemo<Record<string, number>>(() => {\n if (!leftSplit) return {};\n let acc = 0;\n const offsets: Record<string, number> = {};\n visibleColumns.forEach((col, i) => {\n if (i < leftSplit) { offsets[col.id] = acc; acc += widths[col.id] ?? 150; }\n });\n return offsets;\n }, [leftSplit, visibleColumns, widths]);\n\n const lastStickyId = leftSplit > 0 ? visibleColumns[leftSplit - 1]?.id : null;\n\n const rowKey = (row: Record<string, unknown>, ri: number): string | number =>\n (row.id as string | number) ?? ri;\n\n const handleSort = (col: GridColumn) => {\n if (!sortable || col.sortable === false) return;\n setSortDir(d => sortKey === col.id ? (d === \"asc\" ? \"desc\" : \"asc\") : \"asc\");\n setSortKey(col.id);\n };\n\n const selectRow = (row: Record<string, unknown>, ri: number) => {\n if (!selection) return;\n const rk = rowKey(row, ri);\n setFocusRow(ri);\n setSelected(s => {\n const ns = multiselect ? new Set(s) : new Set<string | number>();\n ns.has(rk) ? ns.delete(rk) : ns.add(rk);\n return ns;\n });\n onSelect?.(row);\n };\n\n const commitEdit = () => {\n if (!editCell) return;\n const { key, colId } = editCell;\n setEdits(e => ({ ...e, [String(key)]: { ...(e[String(key)] || {}), [colId]: editValue } }));\n const row = sorted.find((r, i) => rowKey(r, i) === key);\n if (row) onChange?.(row, colId, editValue);\n setEditCell(null);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (editCell && e.key === \"Escape\") { setEditCell(null); return; }\n if (!keyNavigation || !selection) return;\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = Math.min(focusRow + 1, sorted.length - 1);\n if (next >= 0) selectRow(sorted[next], next);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prev = Math.max(focusRow - 1, 0);\n if (prev >= 0) selectRow(sorted[prev], prev);\n }\n };\n\n const startResize = (e: React.MouseEvent, colId: string) => {\n e.preventDefault(); e.stopPropagation();\n const startX = e.clientX, startW = colWidths[colId] ?? 150;\n const col = columns.find(c => c.id === colId);\n const move = (me: MouseEvent) => setColWidths(ws => ({\n ...ws, [colId]: Math.max(col?.minWidth || 50, startW + me.clientX - startX),\n }));\n const up = () => { document.removeEventListener(\"mousemove\", move); document.removeEventListener(\"mouseup\", up); };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n };\n\n /* cell style — includes sticky positioning for left-split columns */\n const cs = (colId: string, w: number, align: GridColumn[\"align\"], first: boolean, h: number, overflow: \"hidden\" | \"visible\" = \"hidden\"): React.CSSProperties => {\n const sticky = colId in stickyLefts;\n return {\n width: w, minWidth: w, flexShrink: 0, boxSizing: \"border-box\",\n padding: \"0 12px\", height: h, display: \"flex\", alignItems: \"center\",\n overflow, textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n fontSize: 13, textAlign: align,\n justifyContent: align === \"center\" ? \"center\" : align === \"right\" ? \"flex-end\" : \"flex-start\",\n borderLeft: first ? \"none\" : B,\n position: sticky ? \"sticky\" : \"relative\",\n ...(sticky ? {\n left: stickyLefts[colId],\n zIndex: 1,\n boxShadow: colId === lastStickyId ? \"2px 0 6px rgba(0,0,0,0.1)\" : undefined,\n } : {}),\n };\n };\n\n return (\n <div\n ref={containerRef}\n className=\"dhx\"\n tabIndex={keyNavigation ? 0 : undefined}\n onKeyDown={handleKeyDown}\n style={{ width: \"100%\", height, display: \"flex\", flexDirection: \"column\", border: B, borderRadius: T.r, overflow: \"hidden\", outline: \"none\", ...style }}\n >\n <div className=\"dhx-scroll\" style={{ overflow: \"auto\", flex: 1 }}>\n <div style={{ minWidth: totalW, display: \"flex\", flexDirection: \"column\", minHeight: \"100%\" }}>\n\n {/* ── Header ── */}\n <div style={{ display: \"flex\", background: T.bg, borderBottom: B, flexShrink: 0, position: \"sticky\", top: 0, zIndex: 3 }}>\n {visibleColumns.map((col, i) => {\n const h0 = Array.isArray(col.header) ? col.header[0] : null;\n const hText = h0?.text ?? (typeof col.header === \"string\" ? col.header : col.id);\n const hAlign = h0?.align ?? col.align;\n const w = widths[col.id] ?? 150;\n const isStickyCl = col.id in stickyLefts;\n return (\n <div key={col.id}\n onClick={() => handleSort(col)}\n style={{\n ...cs(col.id, w, hAlign, i === 0, headerRowHeight),\n fontWeight: 500, color: T.text, background: T.bg,\n cursor: sortable && col.sortable !== false ? \"pointer\" : \"default\",\n userSelect: \"none\",\n ...(isStickyCl ? { zIndex: 4 } : {}),\n }}>\n {h0?.htmlEnable\n ? <span style={{ flex: 1, overflow: \"hidden\" }} dangerouslySetInnerHTML={{ __html: hText }} />\n : <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{hText}</span>\n }\n {sortable && col.sortable !== false && (\n <SortArrows active={sortKey === col.id} dir={sortDir} />\n )}\n {resizable && col.resizable !== false && i < visibleColumns.length - 1 && (\n <div\n onMouseDown={e => startResize(e, col.id)}\n onClick={e => e.stopPropagation()}\n style={{ position: \"absolute\", right: 0, top: 0, bottom: 0, width: 4, cursor: \"col-resize\", zIndex: 1 }}\n onMouseEnter={e => (e.currentTarget.style.background = T.primary + \"55\")}\n onMouseLeave={e => (e.currentTarget.style.background = \"transparent\")}\n />\n )}\n </div>\n );\n })}\n </div>\n\n {/* ── Filter row (or header[1] content row) ── */}\n {hasFilterRow && (\n <div style={{\n display: \"flex\", borderBottom: B, background: T.surface, flexShrink: 0,\n ...(leftSplit ? { position: \"sticky\" as const, top: headerRowHeight, zIndex: 3 } : {}),\n }}>\n {visibleColumns.map((col, i) => {\n const widget = getFilterWidget(col);\n const w = widths[col.id] ?? 150;\n const isStickyCl = col.id in stickyLefts;\n return (\n <div key={col.id} style={{\n width: w, minWidth: w, flexShrink: 0, padding: \"4px 6px\",\n boxSizing: \"border-box\", borderLeft: i === 0 ? \"none\" : B,\n background: T.surface,\n ...(isStickyCl ? {\n position: \"sticky\" as const,\n left: stickyLefts[col.id],\n zIndex: 4,\n boxShadow: col.id === lastStickyId ? \"2px 0 6px rgba(0,0,0,0.1)\" : undefined,\n } : {}),\n }}>\n {(widget === \"selectFilter\" || widget === \"comboFilter\") ? (\n <select className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12, padding: \"0 4px\" }}\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))}>\n <option value=\"\">All</option>\n {(selectOpts[col.id] || []).map(v => <option key={v} value={v}>{v}</option>)}\n </select>\n ) : widget === \"inputFilter\" ? (\n <input className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12 }}\n placeholder=\"Filter...\"\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))} />\n ) : null}\n </div>\n );\n })}\n </div>\n )}\n\n {/* ── Body ── */}\n <div style={{ flex: 1 }}>\n {sorted.map((row, ri) => {\n const rk = rowKey(row, ri);\n const isSel = selected.has(rk);\n const rowBg = isSel ? T.primaryLt : (stripe && ri % 2 !== 0) ? T.bg : T.surface;\n return (\n <div key={String(rk)}\n style={{ display: \"flex\", height: rowHeight, borderBottom: B, flexShrink: 0, background: rowBg, transition: \"background .1s\", cursor: selection ? \"pointer\" : \"default\" }}\n onMouseEnter={e => !isSel && (e.currentTarget.style.background = T.primaryLt + \"80\")}\n onMouseLeave={e => !isSel && (e.currentTarget.style.background = rowBg)}\n >\n {visibleColumns.map((col, ci) => {\n const isEditing = editCell?.key === rk && editCell?.colId === col.id;\n const rawVal = row[col.id];\n const w = widths[col.id] ?? 150;\n const canEdit = (editable || col.editable) && col.editable !== false;\n\n let cellContent: React.ReactNode;\n if (isEditing) {\n cellContent = renderEditor(col, editValue, setEditValue, commitEdit, () => setEditCell(null));\n } else if (col.template) {\n cellContent = col.template(rawVal, row);\n } else if (col.htmlEnable) {\n cellContent = <span dangerouslySetInnerHTML={{ __html: String(rawVal ?? \"\") }} />;\n } else if (col.type === \"boolean\") {\n cellContent = (\n <input type=\"checkbox\" readOnly checked={!!rawVal}\n style={{ width: 16, height: 16, accentColor: T.primary, cursor: canEdit ? \"pointer\" : \"default\" }} />\n );\n } else {\n cellContent = formatByType(rawVal, col.type);\n }\n\n return (\n <div key={col.id}\n onClick={() => {\n selectRow(row, ri);\n if (!canEdit) return;\n if (col.type === \"boolean\") {\n const newVal = !rawVal;\n const k = String(rk);\n setEdits(e => ({ ...e, [k]: { ...(e[k] || {}), [col.id]: newVal } }));\n onChange?.(row, col.id, newVal);\n } else {\n setEditCell({ key: rk, colId: col.id });\n setEditValue(String(rawVal ?? \"\"));\n }\n }}\n style={{ ...cs(col.id, w, col.align, ci === 0, rowHeight, isEditing ? \"visible\" : \"hidden\"), background: rowBg }}>\n {cellContent}\n </div>\n );\n })}\n </div>\n );\n })}\n {sorted.length === 0 && (\n <div style={{ textAlign: \"center\", padding: 40, color: T.textMut, fontSize: 13 }}>No data</div>\n )}\n </div>\n\n {/* ── Footer ── */}\n {hasFooter && (\n <div style={{ display: \"flex\", borderTop: B, background: T.bg, flexShrink: 0, position: \"sticky\", bottom: 0, zIndex: 2 }}>\n {visibleColumns.map((col, i) => {\n const f = col.footer?.[0];\n const stats = colStats[col.id] ?? { sum: 0, avg: 0, count: 0, min: 0, max: 0 };\n let content: React.ReactNode = \"\";\n if (f) {\n if (typeof f.text === \"function\") content = f.text(stats);\n else if (f.text) content = f.text;\n else if (f.summary) content = String(Math.round(stats[f.summary] * 100) / 100);\n }\n const w = widths[col.id] ?? 150;\n const isStickyCl = col.id in stickyLefts;\n return (\n <div key={col.id} style={{\n ...cs(col.id, w, col.align, i === 0, footerRowHeight),\n fontWeight: 600, color: T.text, background: T.bg,\n ...(isStickyCl ? { zIndex: 3 } : {}),\n }}>\n {content}\n </div>\n );\n })}\n </div>\n )}\n\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport {\n BarChart, Bar, LineChart, Line, AreaChart, Area,\n PieChart, Pie, Cell, RadarChart, Radar, PolarGrid, PolarAngleAxis, PolarRadiusAxis,\n ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n ResponsiveContainer, Treemap,\n} from \"recharts\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nconst COLORS = [\"#0288d1\",\"#43a047\",\"#f57c00\",\"#e53935\",\"#8e24aa\",\"#00838f\",\"#ef6c00\",\"#2e7d32\"];\n\nexport interface ChartSeries {\n id?: string;\n value?: string; // data field for value / X axis for scatter\n valueY?: string; // data field for Y axis (scatter)\n label?: string; // legend label\n color?: string; // line/stroke color OR field name for per-item color (pie/donut)\n fill?: string; // explicit fill override (bar/area)\n strokeWidth?: number;\n text?: string; // field name for display label (pie/donut)\n stroke?: string; // border color (pie/donut slices)\n pointColor?: string; // point color alias (radar)\n data?: Record<string, unknown>[];\n tooltipTemplate?:(item: unknown[]) => string;\n direction?: \"asc\" | \"desc\";\n}\n\nexport interface ChartScales {\n bottom?: { text?: string; title?: string; min?: number; max?: number };\n left?: { min?: number; max?: number; maxTicks?: number; title?: string };\n radial?: { value?: string; maxTicks?: number };\n}\n\nexport interface ChartLegend {\n halign?: \"left\" | \"center\" | \"right\";\n valign?: \"top\" | \"middle\" | \"bottom\";\n series?: string[];\n values?: { id?: string; text?: string; color?: string };\n}\n\nexport type ChartType = \"bar\" | \"line\" | \"area\" | \"pie\" | \"donut\" | \"radar\" | \"scatter\" | \"treeMap\";\n\nexport interface ChartProps {\n type?: ChartType;\n data?: Record<string, unknown>[];\n series?: ChartSeries[];\n scales?: ChartScales;\n legend?: ChartLegend;\n height?: number | string;\n style?: React.CSSProperties;\n}\n\n/* build nested tree from flat data with { id, parent } refs */\nfunction buildTreemap(\n data: Record<string, unknown>[],\n valueKey: string,\n nameKey: string,\n): { name: string; children?: { name: string; value: number }[] }[] {\n const roots = data.filter(d => !d.parent);\n const children = data.filter(d => !!d.parent);\n return roots.map(root => ({\n name: root[nameKey] as string,\n children: children\n .filter(c => c.parent === root.id)\n .map(c => ({ name: c[nameKey] as string, value: Number(c[valueKey] ?? 0) })),\n }));\n}\n\nexport function Chart({\n type = \"bar\", data = [], series = [], scales = {}, legend, height = 280, style,\n}: ChartProps) {\n useEffect(injectStyles, []);\n\n const xKey = scales.bottom?.text || (data[0] && Object.keys(data[0])[0]) || \"x\";\n\n const tip = (\n <Tooltip\n contentStyle={{ fontSize: 12, borderRadius: T.r, border: `1px solid ${T.border}` }}\n />\n );\n const leg = legend ? (\n <Legend\n iconSize={10}\n wrapperStyle={{ fontSize: 12 }}\n verticalAlign={legend.valign === \"bottom\" ? \"bottom\" : legend.valign === \"middle\" ? \"middle\" : \"top\"}\n align={legend.halign ?? \"center\"}\n />\n ) : null;\n const grid = <CartesianGrid strokeDasharray=\"3 3\" stroke={T.border} />;\n const xAxis = (\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={{ stroke: T.border }}\n tickLine={false}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n );\n const yAxis = (\n <YAxis\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={false}\n tickLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n tickCount={scales.left?.maxTicks}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n );\n const margin = {\n top: 10, right: 20, left: 0,\n bottom: scales.bottom?.title ? 20 : 0,\n };\n const common = { data, margin };\n\n let chart: React.ReactNode;\n\n /* ── bar ── */\n if (type === \"bar\") {\n chart = (\n <BarChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => (\n <Bar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n fill={s.fill || s.color || COLORS[i % COLORS.length]}\n radius={[3, 3, 0, 0]}\n />\n ))}\n </BarChart>\n );\n\n /* ── line ── */\n } else if (type === \"line\") {\n chart = (\n <LineChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Line\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n strokeWidth={s.strokeWidth ?? 2}\n dot={{ r: 3, fill: c }}\n />\n );\n })}\n </LineChart>\n );\n\n /* ── area ── */\n } else if (type === \"area\") {\n chart = (\n <AreaChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Area\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={(s.fill || c) + \"33\"}\n strokeWidth={s.strokeWidth ?? 2}\n />\n );\n })}\n </AreaChart>\n );\n\n /* ── pie / donut ── */\n } else if (type === \"pie\" || type === \"donut\") {\n const s0 = series[0] || {};\n const dataKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n // s0.color may be a field name in the data (per-item color) or undefined/direct color\n const colorField = s0.color && data[0] && s0.color in data[0] ? s0.color : null;\n chart = (\n <PieChart>\n <Pie\n data={data}\n cx=\"50%\" cy=\"50%\"\n outerRadius={type === \"donut\" ? \"70%\" : \"80%\"}\n innerRadius={type === \"donut\" ? \"40%\" : 0}\n dataKey={dataKey}\n nameKey={nameKey}\n stroke={s0.stroke || \"none\"}\n strokeWidth={s0.strokeWidth ?? 0}\n label={({ name, percent }: { name?: string; percent?: number }) =>\n `${name ?? \"\"} ${((percent ?? 0) * 100).toFixed(0)}%`}\n labelLine\n paddingAngle={2}\n >\n {data.map((row, i) => (\n <Cell\n key={i}\n fill={colorField ? (row[colorField] as string) : COLORS[i % COLORS.length]}\n />\n ))}\n </Pie>\n {tip}{leg}\n </PieChart>\n );\n\n /* ── radar ── */\n } else if (type === \"radar\") {\n const radarKey = scales.radial?.value || xKey;\n chart = (\n <RadarChart {...common} cx=\"50%\" cy=\"50%\">\n <PolarGrid />\n <PolarAngleAxis dataKey={radarKey} tick={{ fontSize: 11 }} />\n <PolarRadiusAxis tick={{ fontSize: 9, fill: T.textMut }} axisLine={false} />\n {series.map((s, i) => {\n const c = s.color || s.pointColor || COLORS[i % COLORS.length];\n return (\n <Radar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={c + \"44\"}\n />\n );\n })}\n {tip}{leg}\n </RadarChart>\n );\n\n /* ── scatter ── */\n } else if (type === \"scatter\") {\n chart = (\n <ScatterChart margin={margin}>\n {grid}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={scales.bottom?.title || \"x\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n domain={[scales.bottom?.min ?? \"auto\", scales.bottom?.max ?? \"auto\"]}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={scales.left?.title || \"y\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n axisLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n {tip}{leg}\n {series.map((s, i) => {\n const xField = s.value || \"x\";\n const yField = s.valueY || \"y\";\n const pts = (s.data || data).map(row => ({\n x: row[xField],\n y: row[yField],\n })) as never[];\n return (\n <Scatter\n key={s.id ?? i}\n data={pts}\n name={s.label || s.id}\n fill={s.color || COLORS[i % COLORS.length]}\n />\n );\n })}\n </ScatterChart>\n );\n\n /* ── treeMap ── */\n } else if (type === \"treeMap\") {\n const s0 = series[0] || {};\n const valKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n const treeData = buildTreemap(data, valKey, nameKey);\n const borderColor = s0.stroke || T.surface;\n const borderWidth = s0.strokeWidth ?? 2;\n chart = (\n <Treemap\n data={treeData}\n dataKey=\"value\"\n aspectRatio={4 / 3}\n stroke={borderColor}\n content={((props: Record<string, unknown>) => {\n const { x, y, width, height: h, depth, index, name } = props as {\n x: number; y: number; width: number; height: number;\n depth: number; index: number; name: string;\n };\n if (depth === 0) return null;\n const fill = COLORS[index % COLORS.length];\n return (\n <g>\n <rect\n x={x} y={y} width={width} height={h}\n fill={fill} stroke={borderColor} strokeWidth={borderWidth}\n style={{ borderRadius: 3 }}\n />\n {width > 40 && h > 20 && (\n <text\n x={x + width / 2} y={y + h / 2}\n textAnchor=\"middle\" dominantBaseline=\"middle\"\n fill=\"#fff\" fontSize={11} pointerEvents=\"none\"\n >\n {name}\n </text>\n )}\n </g>\n );\n }) as never}\n />\n );\n }\n\n return (\n <div\n className=\"dhx\"\n style={{ width: \"100%\", height, padding: 12, background: T.surface, borderRadius: T.rMd, ...style }}\n >\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {chart as React.ReactElement}\n </ResponsiveContainer>\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface CalendarProps {\n value?: Date | [Date, Date] | null;\n range?: boolean;\n timepicker?: boolean;\n onChange?: (value: Date | [Date, Date]) => void;\n style?: React.CSSProperties;\n}\n\nconst MONTHS = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\nconst DAYS = [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"];\n\nexport function Calendar({ value, range = false, timepicker = false, onChange, style }: CalendarProps) {\n const today = new Date();\n const initDate = value ? new Date(Array.isArray(value) ? value[0] : value) : today;\n const [view, setView] = useState(initDate);\n const [selected, setSelected] = useState<Date | [Date | null, Date | null] | null>(value ?? (range ? [null, null] : null));\n const [hovDate, setHovDate] = useState<Date | null>(null);\n const [time, setTime] = useState({ h: 0, m: 0 });\n useEffect(injectStyles, []);\n\n const year = view.getFullYear(); const month = view.getMonth();\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n const cells: (Date | null)[] = [];\n for (let i = 0; i < firstDay; i++) cells.push(null);\n for (let d = 1; d <= daysInMonth; d++) cells.push(new Date(year, month, d));\n\n const isToday = (d: Date) => d.toDateString() === today.toDateString();\n const isSelected = (d: Date) => {\n if (!selected) return false;\n if (range && Array.isArray(selected)) {\n const [s, e] = selected as [Date | null, Date | null];\n if (!s) return false;\n const dv = d.getTime();\n if (!e) return d.toDateString() === s.toDateString();\n return dv >= s.getTime() && dv <= e.getTime();\n }\n return d.toDateString() === (selected as Date).toDateString();\n };\n\n const handleDay = (d: Date) => {\n if (range) {\n const [s, e] = Array.isArray(selected) ? (selected as [Date | null, Date | null]) : [null, null];\n if (!s || e) { setSelected([d, null]); }\n else {\n const sorted: [Date, Date] = d < s ? [d, s] : [s, d];\n setSelected(sorted); onChange?.(sorted);\n }\n } else { setSelected(d); onChange?.(d); }\n };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() - 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>‹</button>\n <div style={{ fontWeight: 700, fontSize: 14 }}>{MONTHS[month]} {year}</div>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() + 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>›</button>\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 32px)\", gap: 2 }}>\n {DAYS.map(d => <div key={d} style={{ textAlign: \"center\", fontSize: 11, fontWeight: 600, color: T.textMut, paddingBottom: 4 }}>{d}</div>)}\n {cells.map((d, i) => {\n const sel = d ? isSelected(d) : false;\n const isHov = d && hovDate && d.toDateString() === hovDate.toDateString();\n return (\n <div key={i} onClick={() => d && handleDay(d)} onMouseEnter={() => d && setHovDate(d)} onMouseLeave={() => setHovDate(null)}\n style={{ width: 32, height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", borderRadius: T.r, cursor: d ? \"pointer\" : \"default\", fontSize: 12, fontWeight: d && isToday(d) ? 700 : 400, background: sel ? T.primary : isHov ? T.bg : \"transparent\", color: sel ? \"#fff\" : d && isToday(d) ? T.primary : d ? T.text : \"transparent\", border: d && isToday(d) && !sel ? `1px solid ${T.primary}` : \"1px solid transparent\", transition: \"all .1s\" }}>\n {d?.getDate()}\n </div>\n );\n })}\n </div>\n {timepicker && (\n <div style={{ borderTop: `1px solid ${T.border}`, marginTop: 12, paddingTop: 12, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 8 }}>\n <input type=\"number\" min={0} max={23} value={time.h} onChange={e => setTime(t => ({ ...t, h: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n <span style={{ fontWeight: 700, color: T.textSec }}>:</span>\n <input type=\"number\" min={0} max={59} value={time.m} onChange={e => setTime(t => ({ ...t, m: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TimeValue { h: number; m: number; ampm?: \"AM\" | \"PM\"; }\n\nexport interface TimepickerProps {\n value?: TimeValue;\n onChange?: (value: TimeValue) => void;\n timeFormat?: 12 | 24;\n controls?: boolean;\n minuteStep?: number;\n style?: React.CSSProperties;\n}\n\nexport function Timepicker({ value, onChange, timeFormat = 12, controls = false, minuteStep = 5, style }: TimepickerProps) {\n const [h, setH] = useState(value?.h ?? (timeFormat === 24 ? 0 : 12));\n const [m, setM] = useState(value?.m ?? 0);\n const [ampm, setAmpm] = useState<\"AM\" | \"PM\">(value?.ampm ?? \"AM\");\n const [pending, setPending] = useState<TimeValue | null>(null);\n useEffect(injectStyles, []);\n\n const hours = timeFormat === 24\n ? Array.from({ length: 24 }, (_, i) => i)\n : Array.from({ length: 12 }, (_, i) => i + 1);\n const mins = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => i * minuteStep);\n\n const handleChange = (newH: number, newM: number, newAmpm: \"AM\" | \"PM\") => {\n const val: TimeValue = timeFormat === 24 ? { h: newH, m: newM } : { h: newH, m: newM, ampm: newAmpm };\n if (controls) setPending(val);\n else onChange?.(val);\n };\n\n const handleCancel = () => {\n setPending(null);\n setH(value?.h ?? (timeFormat === 24 ? 0 : 12));\n setM(value?.m ?? 0);\n setAmpm(value?.ampm ?? \"AM\");\n };\n\n const colStyle = { display: \"flex\", flexDirection: \"column\" as const, alignItems: \"center\" as const, gap: 4 };\n const cellStyle = (active: boolean): React.CSSProperties => ({\n height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n cursor: \"pointer\", fontSize: 13,\n fontWeight: active ? 700 : 400,\n background: active ? T.primaryLt : \"transparent\",\n color: active ? T.primary : T.text,\n });\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"stretch\" }}>\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Hours</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {hours.map(v => (\n <div key={v} onClick={() => { setH(v); handleChange(v, m, ampm); }}\n style={cellStyle(h === v)}\n onMouseEnter={e => h !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => h !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Minutes</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {mins.map(v => (\n <div key={v} onClick={() => { setM(v); handleChange(h, v, ampm); }}\n style={cellStyle(m === v)}\n onMouseEnter={e => m !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => m !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n {timeFormat === 12 && (\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>AM/PM</span>\n <div style={{ display: \"flex\", flexDirection: \"column\", border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\" }}>\n {([\"AM\", \"PM\"] as const).map(v => (\n <div key={v} onClick={() => { setAmpm(v); handleChange(h, m, v); }}\n style={{ height: 40, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", cursor: \"pointer\", padding: \"0 12px\", fontSize: 13, fontWeight: ampm === v ? 700 : 400, background: ampm === v ? T.primary : T.surface, color: ampm === v ? \"#fff\" : T.text }}>\n {v}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <div style={{ textAlign: \"center\", marginTop: 12, fontSize: 22, fontWeight: 700, color: T.primary, letterSpacing: 2 }}>\n {String(h).padStart(2, \"0\")}:{String(m).padStart(2, \"0\")}{timeFormat === 12 ? ` ${ampm}` : \"\"}\n </div>\n\n {controls && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: \"flex-end\", marginTop: 12 }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={handleCancel}>Cancel</button>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => {\n const val = pending ?? (timeFormat === 24 ? { h, m } : { h, m, ampm });\n onChange?.(val);\n }}>Apply</button>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface ComboboxItem {\n id?: string;\n value: string;\n count?: number;\n}\n\nexport interface ComboboxProps {\n data?: ComboboxItem[];\n value?: string | string[] | null;\n placeholder?: string;\n multiselection?: boolean;\n label?: string;\n onChange?: (value: string | string[]) => void;\n style?: React.CSSProperties;\n}\n\nconst Chevron = ({ open }: { open: boolean }) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" style={{ flexShrink: 0, transition: \"transform .15s\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}>\n <path d=\"M2 4l4 4 4-4\" stroke={T.textMut} strokeWidth=\"1.5\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport function Combobox({ data = [], value: valueProp, placeholder = \"Select or type...\", multiselection = false, label, onChange, style }: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selected, setSelected] = useState<string | string[] | null>(\n multiselection\n ? (valueProp ? ([] as string[]).concat(valueProp as string) : [])\n : (valueProp || null)\n );\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => { setOpen(false); setQuery(\"\"); }, []));\n\n const filtered = useMemo(\n () => data.filter(d => !query || d.value.toLowerCase().includes(query.toLowerCase())),\n [data, query]\n );\n const isSelected = (id: string) =>\n multiselection ? (selected as string[] || []).includes(id) : selected === id;\n\n const handleSelect = (item: ComboboxItem) => {\n const key = item.id || item.value;\n if (multiselection) {\n const ns = isSelected(key)\n ? (selected as string[]).filter(s => s !== key)\n : [...(selected as string[] || []), key];\n setSelected(ns);\n onChange?.(ns);\n } else {\n setSelected(key);\n setQuery(\"\");\n setOpen(false);\n onChange?.(key);\n }\n };\n\n const removeTag = (key: string) => {\n const ns = (selected as string[]).filter(s => s !== key);\n setSelected(ns);\n onChange?.(ns);\n };\n\n const openDropdown = () => {\n setOpen(true);\n setTimeout(() => inputRef.current?.focus(), 0);\n };\n\n /* ── single-select display value ── */\n const singleDisplayValue = data.find(d => (d.id || d.value) === selected)?.value || \"\";\n\n const selectedTags = multiselection ? (selected as string[]) || [] : [];\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n\n {/* ── trigger ── */}\n <div\n onClick={openDropdown}\n style={{\n display: \"flex\", alignItems: \"center\", flexWrap: multiselection ? \"wrap\" : \"nowrap\",\n border: `1px solid ${open ? T.primary : T.border}`, borderRadius: T.r,\n minHeight: 34, padding: \"4px 8px\", cursor: \"text\", background: T.surface, gap: 4,\n transition: \"border-color .15s\", boxShadow: open ? `0 0 0 3px ${T.primary}22` : \"none\",\n }}>\n\n {/* ── multiselect: chips + inline search ── */}\n {multiselection && (\n <>\n {selectedTags.map(s => (\n <span key={s} style={{\n display: \"inline-flex\", alignItems: \"center\", gap: 4,\n background: T.primary, color: \"#fff\",\n borderRadius: 12, padding: \"2px 10px 2px 8px\", fontSize: 12, lineHeight: 1.5,\n whiteSpace: \"nowrap\",\n }}>\n {data.find(d => (d.id || d.value) === s)?.value || s}\n <span\n onClick={e => { e.stopPropagation(); removeTag(s); }}\n style={{ cursor: \"pointer\", fontSize: 15, lineHeight: 1, opacity: 0.75, marginLeft: 2 }}>×</span>\n </span>\n ))}\n <input\n ref={inputRef}\n value={query}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => setOpen(true)}\n onClick={e => e.stopPropagation()}\n placeholder={selectedTags.length ? \"\" : placeholder}\n style={{ flex: 1, minWidth: 60, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n </>\n )}\n\n {/* ── single select: search input ── */}\n {!multiselection && (\n <input\n ref={inputRef}\n value={open ? query : singleDisplayValue}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => { setOpen(true); setQuery(\"\"); }}\n onClick={e => e.stopPropagation()}\n placeholder={placeholder}\n style={{ flex: 1, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n )}\n\n <Chevron open={open} />\n </div>\n\n {/* ── dropdown ── */}\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{\n position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, right: 0,\n background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r,\n boxShadow: T.shadowLg, zIndex: 100,\n }}>\n <div className=\"dhx-scroll\" style={{ maxHeight: 220, overflowY: \"auto\" }}>\n {filtered.map(item => {\n const key = item.id || item.value;\n const sel = isSelected(key);\n return (\n <div key={key} onClick={() => handleSelect(item)}\n style={{\n padding: \"8px 12px\", cursor: \"pointer\", display: \"flex\",\n alignItems: \"center\", gap: 8, fontSize: 13,\n background: sel ? T.primaryLt : \"transparent\",\n color: sel ? T.primary : T.text,\n }}\n onMouseEnter={e => !sel && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !sel && (e.currentTarget.style.background = \"transparent\")}>\n {multiselection && (\n <span style={{\n width: 14, height: 14, flexShrink: 0,\n border: `2px solid ${sel ? T.primary : T.borderDk}`,\n borderRadius: 3, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n background: sel ? T.primary : \"transparent\",\n }}>\n {sel && <span style={{ color: \"#fff\", fontSize: 9, lineHeight: 1 }}>✓</span>}\n </span>\n )}\n <span style={{ flex: 1 }}>{item.value}</span>\n {!multiselection && sel && (\n <span style={{ color: T.primary, fontSize: 12, fontWeight: 700 }}>✓</span>\n )}\n {item.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({item.count})</span>\n )}\n </div>\n );\n })}\n {filtered.length === 0 && (\n <div style={{ padding: 16, textAlign: \"center\", color: T.textMut, fontSize: 13 }}>No matches</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SliderProps {\n min?: number;\n max?: number;\n step?: number;\n value?: number | [number, number];\n range?: boolean;\n label?: string;\n tick?: boolean;\n disabled?: boolean;\n onChange?: (value: number | [number, number]) => void;\n style?: React.CSSProperties;\n}\n\nexport function Slider({ min = 0, max = 100, step = 1, value: valueProp, range = false, label, tick, disabled = false, onChange, style }: SliderProps) {\n const [value, setValue] = useState<number | [number, number]>(valueProp ?? (range ? [min, max] : min));\n useEffect(injectStyles, []);\n\n const update = (i: number, v: number) => {\n if (disabled) return;\n if (range) {\n const nv = [...(value as [number, number])] as [number, number];\n nv[i] = v; setValue(nv); onChange?.(nv);\n } else { setValue(v); onChange?.(v); }\n };\n\n const pct = (v: number) => ((v - min) / (max - min)) * 100;\n const arr = range ? (value as [number, number]) : [value as number];\n const trackFill: React.CSSProperties = range\n ? { left: `${pct(arr[0])}%`, width: `${pct(arr[1]) - pct(arr[0])}%` }\n : { left: 0, width: `${pct(arr[0])}%` };\n\n const trackColor = disabled ? T.border : T.primary;\n\n return (\n <div className=\"dhx\" style={{ width: \"100%\", opacity: disabled ? 0.5 : 1, ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n <div style={{ position: \"relative\", height: 36, display: \"flex\", alignItems: \"center\" }}>\n <div style={{ position: \"relative\", flex: 1, height: 4, background: T.border, borderRadius: 2 }}>\n <div style={{ position: \"absolute\", ...trackFill, height: \"100%\", background: trackColor, borderRadius: 2 }} />\n {arr.map((v, i) => (\n <input key={i} type=\"range\" min={min} max={max} step={step} value={v} disabled={disabled}\n onChange={e => { const nv = +e.target.value; if (range && i === 0 && nv >= (value as [number,number])[1]) return; if (range && i === 1 && nv <= (value as [number,number])[0]) return; update(i, nv); }}\n style={{ position: \"absolute\", width: \"100%\", height: \"100%\", opacity: 0, cursor: disabled ? \"not-allowed\" : \"pointer\", top: 0, left: 0, margin: 0 }} />\n ))}\n {arr.map((v, i) => (\n <div key={i} style={{ position: \"absolute\", left: `${pct(v)}%`, top: \"50%\", transform: \"translate(-50%, -50%)\", width: 16, height: 16, borderRadius: \"50%\", background: T.surface, border: `2px solid ${trackColor}`, boxShadow: \"0 1px 4px rgba(0,0,0,.2)\", pointerEvents: \"none\" }}>\n <div style={{ position: \"absolute\", bottom: \"calc(100% + 6px)\", left: \"50%\", transform: \"translateX(-50%)\", background: disabled ? T.textMut : T.primaryDk, color: \"#fff\", padding: \"2px 6px\", borderRadius: T.r, fontSize: 11, fontWeight: 700, whiteSpace: \"nowrap\" }}>{v}</div>\n </div>\n ))}\n </div>\n </div>\n {tick && <div style={{ display: \"flex\", justifyContent: \"space-between\", marginTop: 2 }}>{[min, Math.round((max+min)/2), max].map(v => <span key={v} style={{ fontSize: 10, color: T.textMut }}>{v}</span>)}</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\ntype HSL = [number, number, number];\n\nconst PALETTE = [\"#f44336\",\"#e91e63\",\"#9c27b0\",\"#673ab7\",\"#3f51b5\",\"#2196f3\",\"#03a9f4\",\"#00bcd4\",\"#009688\",\"#4caf50\",\"#8bc34a\",\"#cddc39\",\"#ffeb3b\",\"#ffc107\",\"#ff9800\",\"#ff5722\",\"#795548\",\"#607d8b\",\"#9e9e9e\",\"#000000\",\"#ffffff\",\"#0288d1\",\"#01579b\",\"#43a047\",\"#e53935\",\"#f57c00\"];\n\nfunction hexToHsl(hex: string): HSL {\n const r = parseInt(hex.slice(1,3),16)/255, g = parseInt(hex.slice(3,5),16)/255, b = parseInt(hex.slice(5,7),16)/255;\n const max = Math.max(r,g,b), min = Math.min(r,g,b); let h = 0, s = 0; const l = (max+min)/2;\n if (max !== min) { const d = max-min; s = l > .5 ? d/(2-max-min) : d/(max+min); h = max === r ? ((g-b)/d + (g<b?6:0))/6 : max === g ? ((b-r)/d+2)/6 : ((r-g)/d+4)/6; }\n return [Math.round(h*360), Math.round(s*100), Math.round(l*100)];\n}\nfunction hslToHex(h: number, s: number, l: number): string {\n s /= 100; l /= 100;\n const a = s * Math.min(l, 1-l);\n const f = (n: number) => { const k = (n+h/30)%12; const c = l - a*Math.max(Math.min(k-3, 9-k, 1), -1); return Math.round(255*c).toString(16).padStart(2,\"0\"); };\n return \"#\" + f(0) + f(8) + f(4);\n}\n\nexport interface ColorpickerProps {\n value?: string;\n onChange?: (hex: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Colorpicker({ value = \"#0288d1\", onChange, style }: ColorpickerProps) {\n const [hsl, setHsl] = useState<HSL>(() => hexToHsl(value));\n const hex = hslToHex(...hsl);\n useEffect(injectStyles, []);\n const set = (h: HSL) => { setHsl(h); onChange?.(hslToHex(...h)); };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ width: 200, height: 120, borderRadius: T.r, marginBottom: 12, background: `linear-gradient(to bottom, transparent, black), linear-gradient(to right, white, hsl(${hsl[0]},100%,50%))`, cursor: \"crosshair\" }} />\n {([[\"Hue\", 0, 360, hsl[0]], [\"Saturation\", 0, 100, hsl[1]], [\"Lightness\", 0, 100, hsl[2]]] as [string, number, number, number][]).map(([lbl, mn, mx, val], idx) => (\n <div key={lbl} style={{ marginBottom: idx < 2 ? 8 : 12 }}>\n <div className=\"dhx dhx-label\">{lbl}{idx > 0 ? ` (${val}%)` : \"\"}</div>\n <input type=\"range\" min={mn} max={mx} value={val} onChange={e => { const nv = [...hsl] as HSL; nv[idx] = +e.target.value; set(nv); }} style={{ width: \"100%\", accentColor: T.primary }} />\n </div>\n ))}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 12 }}>\n <div style={{ width: 36, height: 36, borderRadius: T.r, background: hex, border: `1px solid ${T.border}`, flexShrink: 0 }} />\n <input className=\"dhx dhx-input\" style={{ flex: 1, fontFamily: \"monospace\", fontSize: 12 }} value={hex}\n onChange={e => { try { set(hexToHsl(e.target.value)); onChange?.(e.target.value); } catch { /* invalid hex */ } }} />\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(13, 1fr)\", gap: 3 }}>\n {PALETTE.map(c => (\n <div key={c} onClick={() => { setHsl(hexToHsl(c)); onChange?.(c); }}\n style={{ width: 14, height: 14, borderRadius: 2, background: c, cursor: \"pointer\", border: hex === c ? `2px solid ${T.text}` : \"1px solid rgba(0,0,0,.15)\", transition: \"transform .1s\" }}\n onMouseEnter={e => (e.currentTarget.style.transform = \"scale(1.3)\")}\n onMouseLeave={e => (e.currentTarget.style.transform = \"scale(1)\")} />\n ))}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport type PopupPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\";\n\nexport interface PopupProps {\n trigger: React.ReactNode;\n children?: React.ReactNode;\n placement?: PopupPlacement;\n style?: React.CSSProperties;\n}\n\nexport function Popup({ trigger, children, placement = \"bottom-start\", style }: PopupProps) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<React.CSSProperties>({ top: \"100%\", left: 0 });\n const ref = useRef<HTMLDivElement>(null);\n const trigRef = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n\n const toggle = () => {\n setOpen(o => {\n if (!o && trigRef.current) {\n const r = trigRef.current.getBoundingClientRect();\n const placements: Record<PopupPlacement, React.CSSProperties> = {\n \"bottom-start\": { top: r.height + 4, left: 0 },\n \"bottom-end\": { top: r.height + 4, right: 0, left: \"auto\" },\n \"top-start\": { bottom: r.height + 4, top: \"auto\", left: 0 },\n };\n setPos(placements[placement] || placements[\"bottom-start\"]);\n }\n return !o;\n });\n };\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\" }}>\n <div ref={trigRef} onClick={toggle}>{trigger}</div>\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", ...pos, zIndex: 200, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, boxShadow: T.shadowLg, ...style }}>\n {children}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useDrag } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface WindowProps {\n title?: string;\n children?: React.ReactNode;\n width?: number | string;\n height?: number | string;\n closable?: boolean;\n movable?: boolean;\n modal?: boolean;\n defaultOpen?: boolean;\n footer?: React.ReactNode;\n onClose?: () => void;\n style?: React.CSSProperties;\n}\n\nexport function Window({ title, children, width = 480, height, closable = true, movable = true, modal = false, defaultOpen = true, footer, onClose, style }: WindowProps) {\n const [open, setOpen] = useState(defaultOpen);\n const [pos, setPos] = useState({ x: 0, y: 0 });\n useEffect(injectStyles, []);\n\n const drag = useDrag(useCallback((x: number, y: number) => movable && setPos({ x, y }), [movable]));\n const handleClose = () => { setOpen(false); onClose?.(); };\n\n if (!open) return null;\n return (\n <>\n {modal && <div style={{ position: \"fixed\", inset: 0, background: \"rgba(0,0,0,.45)\", zIndex: 900 }} onClick={closable ? handleClose : undefined} />}\n <div className=\"dhx\" style={{ position: modal ? \"fixed\" : \"absolute\", left: \"50%\", top: \"50%\", transform: `translate(calc(-50% + ${pos.x}px), calc(-50% + ${pos.y}px))`, width, ...(height ? { height } : {}), background: T.surface, borderRadius: T.rMd, boxShadow: T.shadowLg, zIndex: 901, display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", ...style }}>\n <div onMouseDown={e => drag(e, pos.x, pos.y)} style={{ display: \"flex\", alignItems: \"center\", padding: \"12px 16px\", borderBottom: `1px solid ${T.border}`, cursor: movable ? \"grab\" : \"default\", background: T.bg, gap: 8, userSelect: \"none\" }}>\n <span style={{ flex: 1, fontWeight: 700, fontSize: 15 }}>{title}</span>\n {closable && <button onClick={handleClose} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", width: 28, height: 28, borderRadius: T.r, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 18, color: T.textSec }}\n onMouseEnter={e => (e.currentTarget.style.background = T.border)} onMouseLeave={e => (e.currentTarget.style.background = \"none\")}>×</button>}\n </div>\n <div className=\"dhx-scroll\" style={{ flex: 1, minHeight: 0, padding: 20, overflowY: \"auto\" }}>{children}</div>\n {footer && <div style={{ padding: \"12px 16px\", borderTop: `1px solid ${T.border}`, display: \"flex\", justifyContent: \"flex-end\", gap: 8, background: T.bg }}>{footer}</div>}\n </div>\n </>\n );\n}\n","import { useState, useCallback, useEffect, createContext, useContext } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport type MessageType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface MessageOptions {\n type?: MessageType;\n title?: string;\n text?: string;\n duration?: number;\n confirm?: (ok: boolean) => void;\n}\n\ninterface MessageItem extends MessageOptions { id: number; }\n\ninterface MessageAPI {\n message: (opts: MessageOptions) => number;\n alert: (title: string, opts?: Omit<MessageOptions, \"title\">) => number;\n confirm: (title: string, cb: (ok: boolean) => void, opts?: Omit<MessageOptions, \"title\" | \"confirm\">) => number;\n}\n\nexport const MessageContext = createContext<MessageAPI | null>(null);\n\nconst ICONS: Record<MessageType, string> = { success: \"✓\", error: \"✕\", warning: \"⚠\", info: \"ℹ\" };\nconst COLORS: Record<MessageType, string> = { success: T.success, error: T.danger, warning: T.warning, info: T.primary };\n\nexport function MessageProvider({ children }: { children: React.ReactNode }) {\n const [messages, setMessages] = useState<MessageItem[]>([]);\n useEffect(injectStyles, []);\n\n const remove = useCallback((id: number) => setMessages(m => m.filter(x => x.id !== id)), []);\n const add = useCallback((opts: MessageOptions) => {\n const id = Date.now();\n setMessages(m => [...m, { id, ...opts }]);\n if (opts.duration !== 0) setTimeout(() => remove(id), opts.duration || 4000);\n return id;\n }, [remove]);\n\n const api: MessageAPI = {\n message: add,\n alert: (title, opts) => add({ type: \"info\", title, ...opts }),\n confirm: (title, cb, opts) => add({ type: \"warning\", title, confirm: cb, ...opts }),\n };\n\n return (\n <MessageContext.Provider value={api}>\n {children}\n <div style={{ position: \"fixed\", top: 20, right: 20, zIndex: 9999, display: \"flex\", flexDirection: \"column\", gap: 8, pointerEvents: \"none\" }}>\n {messages.map(m => {\n const type = m.type || \"info\";\n return (\n <div key={m.id} style={{ background: T.surface, border: `1px solid ${T.border}`, borderLeft: `4px solid ${COLORS[type]}`, borderRadius: T.r, boxShadow: T.shadowLg, padding: \"12px 16px\", minWidth: 280, maxWidth: 380, pointerEvents: \"all\", display: \"flex\", gap: 10, alignItems: \"flex-start\", animation: \"dhx-toast .3s ease\" }}>\n <span style={{ fontSize: 18, color: COLORS[type], lineHeight: 1 }}>{ICONS[type]}</span>\n <div style={{ flex: 1 }}>\n {m.title && <div style={{ fontWeight: 600, fontSize: 13, marginBottom: m.text ? 3 : 0 }}>{m.title}</div>}\n {m.text && <div style={{ fontSize: 12, color: T.textSec, lineHeight: 1.5 }}>{m.text}</div>}\n {m.confirm && (\n <div style={{ display: \"flex\", gap: 6, marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(true); remove(m.id); }}>Confirm</button>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(false); remove(m.id); }}>Cancel</button>\n </div>\n )}\n </div>\n <button onClick={() => remove(m.id)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 14, lineHeight: 1, padding: 0 }}>×</button>\n </div>\n );\n })}\n </div>\n </MessageContext.Provider>\n );\n}\n\nexport function useMessage(): MessageAPI {\n const ctx = useContext(MessageContext);\n if (!ctx) throw new Error(\"useMessage must be used inside <MessageProvider>\");\n return ctx;\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface ListItem {\n id?: string | number;\n value?: string;\n [key: string]: unknown;\n}\n\nexport interface ListProps {\n data?: ListItem[];\n template?: (item: ListItem) => string;\n keyNavigation?: boolean;\n multiselection?: boolean;\n editable?: boolean;\n height?: number | string;\n onSelect?: (item: ListItem) => void;\n onEdit?: (item: ListItem, index: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function List({ data = [], template, keyNavigation = true, multiselection = false, editable = false, height = 400, onSelect, onEdit, style }: ListProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [editing, setEditing] = useState<number | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [focused, setFocused] = useState<number | null>(null);\n useEffect(injectStyles, []);\n\n const handleClick = (item: ListItem, i: number) => {\n const id = item.id ?? i;\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n setFocused(i); onSelect?.(item);\n };\n const commitEdit = (item: ListItem, i: number) => { onEdit?.({ ...item, value: editVal }, i); setEditing(null); };\n\n return (\n <div className=\"dhx dhx-scroll\" style={{ height, overflowY: \"auto\", border: `1px solid ${T.border}`, borderRadius: T.r, background: T.surface, ...style }}\n tabIndex={0}\n onKeyDown={e => {\n if (!keyNavigation) return;\n if (e.key === \"ArrowDown\") setFocused(f => Math.min((f ?? -1) + 1, data.length - 1));\n if (e.key === \"ArrowUp\") setFocused(f => Math.max((f ?? 1) - 1, 0));\n }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n const isFoc = focused === i;\n return (\n <div key={String(id)} onClick={() => handleClick(item, i)} onDoubleClick={() => editable && (setEditing(i), setEditVal(String(item.value || \"\")))}\n style={{ display: \"flex\", alignItems: \"center\", padding: \"0 12px\", height: 40, cursor: \"pointer\", fontSize: 13, borderBottom: `1px solid ${T.border}`, background: isSel ? T.primaryLt : isFoc ? T.bg : T.surface, color: isSel ? T.primary : T.text, outline: isFoc ? `2px solid ${T.primary}44` : \"none\", transition: \"background .1s\" }}>\n {editing === i ? (\n <input autoFocus className=\"dhx dhx-input\" style={{ height: 28, flex: 1 }} value={editVal} onChange={e => setEditVal(e.target.value)}\n onBlur={() => commitEdit(item, i)} onKeyDown={e => { if (e.key === \"Enter\") commitEdit(item, i); if (e.key === \"Escape\") setEditing(null); }} onClick={e => e.stopPropagation()} />\n ) : template ? (\n <div dangerouslySetInnerHTML={{ __html: template(item) }} style={{ flex: 1 }} />\n ) : (\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{String(item.value ?? \"\")}</span>\n )}\n </div>\n );\n })}\n {data.length === 0 && <div style={{ padding: 24, textAlign: \"center\", color: T.textMut }}>No items</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface DataViewItem {\n id?: string | number;\n title?: string;\n value?: string;\n subtitle?: string;\n img?: string;\n [key: string]: unknown;\n}\n\nexport interface DataViewProps {\n data?: DataViewItem[];\n template?: (item: DataViewItem) => string;\n itemsInRow?: number;\n gap?: number;\n multiselection?: boolean;\n onSelect?: (item: DataViewItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function DataView({ data = [], template, itemsInRow = 3, gap = 12, multiselection = false, onSelect, style }: DataViewProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n useEffect(injectStyles, []);\n\n const handleClick = (item: DataViewItem) => {\n const id = item.id ?? String(item.title);\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n onSelect?.(item);\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"grid\", gridTemplateColumns: `repeat(${itemsInRow}, 1fr)`, gap, padding: gap, ...style }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n return (\n <div key={String(id)} onClick={() => handleClick(item)}\n style={{ background: T.surface, border: `2px solid ${isSel ? T.primary : T.border}`, borderRadius: T.rMd, overflow: \"hidden\", cursor: \"pointer\", transition: \"all .15s\", boxShadow: isSel ? `0 0 0 3px ${T.primary}33` : T.shadow, transform: isSel ? \"translateY(-2px)\" : \"none\" }}\n onMouseEnter={e => { e.currentTarget.style.boxShadow = T.shadowLg; e.currentTarget.style.transform = \"translateY(-2px)\"; }}\n onMouseLeave={e => { e.currentTarget.style.boxShadow = isSel ? `0 0 0 3px ${T.primary}33` : T.shadow; e.currentTarget.style.transform = isSel ? \"translateY(-2px)\" : \"none\"; }}>\n {template ? <div dangerouslySetInnerHTML={{ __html: template(item) }} /> : (\n <div style={{ padding: 16 }}>\n {item.img && <img src={item.img} alt={item.title || \"\"} style={{ width: \"100%\", borderRadius: T.r, marginBottom: 8, display: \"block\" }} />}\n <div style={{ fontWeight: 600, fontSize: 14, marginBottom: 4 }}>{item.title || item.value}</div>\n {item.subtitle && <div style={{ fontSize: 12, color: T.textSec }}>{item.subtitle}</div>}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TreeNode {\n id: string;\n value?: string;\n count?: number;\n items?: TreeNode[];\n opened?: boolean;\n}\n\nexport interface TreeProps {\n data?: TreeNode[];\n checkbox?: boolean;\n editable?: boolean;\n dragMode?: \"both\" | \"move\" | \"copy\";\n tooltip?: (node: TreeNode) => string;\n onSelect?: (node: TreeNode) => void;\n onCheck?: (id: string, checked: boolean) => void;\n onChange?: (data: TreeNode[]) => void;\n style?: React.CSSProperties;\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────────── */\n\nfunction cloneTree(nodes: TreeNode[]): TreeNode[] {\n return nodes.map(n => ({ ...n, items: n.items ? cloneTree(n.items) : undefined }));\n}\n\nfunction collectExpanded(nodes: TreeNode[], result: Record<string, boolean> = {}): Record<string, boolean> {\n nodes.forEach(n => {\n if (n.opened) result[n.id] = true;\n if (n.items) collectExpanded(n.items, result);\n });\n return result;\n}\n\n/** Remove node by id. Returns [newTree, removedNode]. */\nfunction removeNode(nodes: TreeNode[], id: string): [TreeNode[], TreeNode | null] {\n let removed: TreeNode | null = null;\n const result = nodes\n .filter(n => { if (n.id === id) { removed = n; return false; } return true; })\n .map(n => {\n if (n.items) {\n const [newItems, r] = removeNode(n.items, id);\n if (r) removed = r;\n return { ...n, items: newItems };\n }\n return n;\n });\n return [result, removed];\n}\n\n/** Insert node relative to targetId. */\nfunction insertNode(\n nodes: TreeNode[],\n targetId: string,\n node: TreeNode,\n pos: \"before\" | \"after\" | \"inside\",\n): TreeNode[] {\n if (pos === \"inside\") {\n return nodes.map(n => {\n if (n.id === targetId) return { ...n, items: [...(n.items || []), node] };\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n }\n // Check if target is at this level\n const atThisLevel = nodes.some(n => n.id === targetId);\n if (atThisLevel) {\n const result: TreeNode[] = [];\n for (const n of nodes) {\n if (n.id === targetId) {\n if (pos === \"before\") { result.push(node); result.push(n); }\n else { result.push(n); result.push(node); }\n } else {\n result.push(n);\n }\n }\n return result;\n }\n // Recurse into children\n return nodes.map(n => {\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n}\n\n/** Returns true if ancestorId contains targetId somewhere in its subtree. */\nfunction isAncestor(nodes: TreeNode[], ancestorId: string, targetId: string): boolean {\n function check(n: TreeNode): boolean {\n if (n.id === ancestorId) {\n const hasDesc = (x: TreeNode): boolean => x.id === targetId || (x.items?.some(hasDesc) ?? false);\n return n.items?.some(hasDesc) ?? false;\n }\n return n.items?.some(check) ?? false;\n }\n return nodes.some(check);\n}\n\n/** Update a node's value in the tree. */\nfunction updateValue(nodes: TreeNode[], id: string, value: string): TreeNode[] {\n return nodes.map(n =>\n n.id === id\n ? { ...n, value }\n : { ...n, items: n.items ? updateValue(n.items, id, value) : undefined }\n );\n}\n\n/** Collect child check stats (for indeterminate state). */\nfunction childStats(node: TreeNode, checked: Record<string, boolean>): { total: number; checkedCount: number } {\n let total = 0, checkedCount = 0;\n const visit = (n: TreeNode) => {\n total++;\n if (checked[n.id]) checkedCount++;\n n.items?.forEach(visit);\n };\n node.items?.forEach(visit);\n return { total, checkedCount };\n}\n\n/* ── Component ────────────────────────────────────────────────────────── */\n\nexport function Tree({\n data = [], checkbox = false, editable = false,\n dragMode, tooltip, onSelect, onCheck, onChange, style,\n}: TreeProps) {\n const [nodes, setNodes] = useState<TreeNode[]>(() => cloneTree(data));\n const [expanded, setExpanded] = useState<Record<string, boolean>>(() => collectExpanded(data));\n const [selected, setSelected] = useState<string | null>(null);\n const [checked, setChecked] = useState<Record<string, boolean>>({});\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [dragId, setDragId] = useState<string | null>(null);\n const [dropTarget, setDropTarget] = useState<{ id: string; pos: \"before\" | \"after\" | \"inside\" } | null>(null);\n useEffect(injectStyles, []);\n\n useEffect(() => {\n setNodes(cloneTree(data));\n setExpanded(prev => ({ ...collectExpanded(data), ...prev }));\n }, [data]);\n\n const toggle = (id: string) => setExpanded(e => ({ ...e, [id]: !e[id] }));\n\n const handleCheck = (id: string, val: boolean) => {\n setChecked(c => ({ ...c, [id]: val }));\n onCheck?.(id, val);\n };\n\n const commitEdit = () => {\n if (!editingId) return;\n const id = editingId, val = editVal;\n setEditingId(null);\n setNodes(prev => {\n const updated = updateValue(prev, id, val);\n onChange?.(updated);\n return updated;\n });\n };\n\n /* ── Drag handlers ──────────────────────────────────────────────────── */\n\n const handleDragStart = (e: React.DragEvent, id: string) => {\n e.dataTransfer.effectAllowed = \"move\";\n setDragId(id);\n };\n\n const handleDragOver = (e: React.DragEvent, id: string) => {\n if (!dragId || dragId === id || isAncestor(nodes, dragId, id)) return;\n e.preventDefault();\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const y = e.clientY - rect.top;\n const h = rect.height;\n const pos: \"before\" | \"after\" | \"inside\" = y < h * 0.25 ? \"before\" : y > h * 0.75 ? \"after\" : \"inside\";\n setDropTarget(dt => (dt?.id === id && dt?.pos === pos) ? dt : { id, pos });\n };\n\n const handleDrop = (e: React.DragEvent, targetId: string) => {\n e.preventDefault();\n if (!dragId || !dropTarget || dragId === targetId) { setDropTarget(null); setDragId(null); return; }\n setNodes(prev => {\n const [withoutDrag, dragged] = removeNode(prev, dragId);\n if (!dragged) return prev;\n const result = insertNode(withoutDrag, targetId, dragged, dropTarget.pos);\n onChange?.(result);\n return result;\n });\n if (dropTarget.pos === \"inside\") setExpanded(e => ({ ...e, [targetId]: true }));\n setDropTarget(null);\n setDragId(null);\n };\n\n const handleDragEnd = () => { setDragId(null); setDropTarget(null); };\n\n /* ── Render node ────────────────────────────────────────────────────── */\n\n const renderNode = (node: TreeNode, depth = 0): React.ReactNode => {\n const hasChildren = (node.items?.length ?? 0) > 0;\n const isExp = expanded[node.id];\n const isSel = selected === node.id;\n const isDragging = dragId === node.id;\n const isDrop = dropTarget?.id === node.id;\n\n // Checkbox indeterminate logic\n let isChecked = !!checked[node.id];\n let isIndet = false;\n if (checkbox && hasChildren) {\n const { total, checkedCount } = childStats(node, checked);\n if (checkedCount > 0 && checkedCount < total) { isIndet = true; }\n else if (total > 0 && checkedCount === total) { isChecked = true; }\n }\n\n const dropShadow: React.CSSProperties = isDrop && dropTarget!.pos !== \"inside\"\n ? { boxShadow: dropTarget!.pos === \"before\" ? `inset 0 2px 0 0 ${T.primary}` : `inset 0 -2px 0 0 ${T.primary}` }\n : {};\n\n const rowBg = isDrop && dropTarget!.pos === \"inside\"\n ? T.primaryLt\n : isSel ? T.primaryLt : \"transparent\";\n\n return (\n <div key={node.id} style={{ opacity: isDragging ? 0.4 : 1 }}>\n <div\n draggable={!!dragMode}\n onDragStart={dragMode ? e => handleDragStart(e, node.id) : undefined}\n onDragOver={dragMode ? e => handleDragOver(e, node.id) : undefined}\n onDrop={dragMode ? e => handleDrop(e, node.id) : undefined}\n onDragEnd={dragMode ? handleDragEnd : undefined}\n title={tooltip?.(node)}\n onClick={() => {\n setSelected(node.id);\n onSelect?.(node);\n if (hasChildren) toggle(node.id);\n }}\n onDoubleClick={() => {\n if (editable) { setEditingId(node.id); setEditVal(node.value || \"\"); }\n }}\n style={{\n display: \"flex\", alignItems: \"center\", gap: 4,\n padding: `5px 8px 5px ${12 + depth * 18}px`,\n cursor: dragMode ? \"grab\" : \"pointer\",\n borderRadius: T.r, margin: \"1px 4px\",\n background: rowBg,\n color: isSel ? T.primary : T.text,\n userSelect: \"none\", fontSize: 13,\n ...dropShadow,\n }}\n onMouseEnter={e => !isSel && !isDrop && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSel && !isDrop && (e.currentTarget.style.background = \"transparent\")}\n >\n {/* Expand arrow */}\n <span\n style={{ width: 16, textAlign: \"center\", fontSize: 11, color: T.textMut, flexShrink: 0 }}\n onClick={e => { e.stopPropagation(); if (hasChildren) toggle(node.id); }}\n >\n {hasChildren ? (isExp ? \"▾\" : \"▸\") : \"\"}\n </span>\n\n {/* Folder / file icon */}\n <span style={{ fontSize: 15, flexShrink: 0 }}>\n {hasChildren ? (isExp ? \"📂\" : \"📁\") : \"📄\"}\n </span>\n\n {/* Checkbox */}\n {checkbox && (\n <input\n ref={el => { if (el) el.indeterminate = isIndet; }}\n type=\"checkbox\"\n checked={isChecked}\n onChange={e => { e.stopPropagation(); handleCheck(node.id, e.target.checked); }}\n style={{ cursor: \"pointer\", accentColor: T.primary, flexShrink: 0 }}\n onClick={e => e.stopPropagation()}\n />\n )}\n\n {/* Label or inline editor */}\n {editingId === node.id ? (\n <input\n autoFocus\n className=\"dhx dhx-input\"\n style={{ height: 24, fontSize: 12, flex: 1 }}\n value={editVal}\n onChange={e => setEditVal(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditingId(null); }}\n onClick={e => e.stopPropagation()}\n />\n ) : (\n <span style={{ flex: 1 }}>{node.value}</span>\n )}\n\n {node.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({node.count})</span>\n )}\n </div>\n\n {hasChildren && isExp && (\n <div>{node.items!.map(child => renderNode(child, depth + 1))}</div>\n )}\n </div>\n );\n };\n\n return (\n <div\n className=\"dhx dhx-scroll\"\n style={{ overflowY: \"auto\", ...style }}\n onDragOver={dragMode ? e => e.preventDefault() : undefined}\n onDrop={dragMode ? e => { e.preventDefault(); setDropTarget(null); setDragId(null); } : undefined}\n >\n {nodes.map(n => renderNode(n))}\n </div>\n );\n}\n","import { useState, useMemo, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface PaginationProps {\n total: number;\n pageSize?: number;\n page?: number;\n onChange?: (page: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function Pagination({ total, pageSize = 10, page: pageProp, onChange, style }: PaginationProps) {\n const [page, setPage] = useState(pageProp || 1);\n const totalPages = Math.ceil(total / pageSize);\n useEffect(injectStyles, []);\n\n const goTo = (p: number) => { const np = Math.min(Math.max(1, p), totalPages); setPage(np); onChange?.(np); };\n\n const range = useMemo(() => {\n const pages: (number | \"...\")[] = [];\n const delta = 2;\n for (let i = Math.max(1, page - delta); i <= Math.min(totalPages, page + delta); i++) pages.push(i);\n if ((pages[0] as number) > 1) { if ((pages[0] as number) > 2) pages.unshift(\"...\"); pages.unshift(1); }\n if ((pages[pages.length - 1] as number) < totalPages) { if ((pages[pages.length - 1] as number) < totalPages - 1) pages.push(\"...\"); pages.push(totalPages); }\n return pages;\n }, [page, totalPages]);\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: \"8px 12px\", ...style }}>\n <span style={{ fontSize: 12, color: T.textSec, marginRight: 8 }}>{(page-1)*pageSize+1}–{Math.min(page*pageSize,total)} of {total}</span>\n {([[\"«\", 1], [\"‹\", page - 1]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === 1} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n {range.map((p, i) => (\n <button key={i} onClick={() => typeof p === \"number\" && goTo(p)} className={`dhx dhx-btn ${p === page ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`} style={{ height: 30, minWidth: 30, padding: \"0 8px\", fontSize: 13 }} disabled={p === \"...\"}>{p}</button>\n ))}\n {([[\"›\", page + 1], [\"»\", totalPages]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === totalPages} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { Slider } from \"../Slider\";\nimport { Combobox } from \"../Combobox\";\nimport { Timepicker, TimeValue } from \"../Timepicker\";\nimport T from \"../../tokens\";\n\nexport interface FormFieldOption { value: string; label?: string; }\n\nexport interface FormField {\n type?: \"input\" | \"textarea\" | \"select\" | \"checkbox\" | \"radio\" | \"slider\" | \"combo\" |\n \"datepicker\" | \"timepicker\" | \"fieldset\" | \"spacer\" | \"text\" | \"toggle\" | \"colorpicker\";\n name: string;\n label?: string;\n labelWidth?: number;\n labelPosition?: \"top\" | \"left\";\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n value?: unknown;\n inputType?: string;\n icon?: React.ReactNode;\n offIcon?: React.ReactNode;\n text?: string;\n offText?: string;\n helpMessage?: string;\n options?: FormFieldOption[];\n data?: { id?: string; value: string }[];\n multiselection?: boolean;\n min?: number;\n max?: number;\n step?: number;\n range?: boolean;\n height?: number;\n rows?: FormField[];\n padding?: string | number;\n width?: string | number;\n}\n\nexport interface FormConfig {\n rows?: (FormField | FormField[])[];\n padding?: string | number;\n width?: string | number;\n labelWidth?: number;\n buttons?: boolean;\n buttonAlign?: \"flex-start\" | \"center\" | \"flex-end\";\n submitText?: string;\n resetButton?: boolean;\n resetText?: string;\n}\n\nexport interface FormProps {\n config?: FormConfig;\n defaultValues?: Record<string, unknown>;\n onSubmit?: (values: Record<string, unknown>) => void | Promise<void>;\n style?: React.CSSProperties;\n}\n\nexport function Form({ config = {}, defaultValues = {}, onSubmit, style }: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>(defaultValues);\n const [errors, setErrors] = useState<Record<string, string | null>>({});\n const [openPicker, setOpenPicker] = useState<string | null>(null);\n useEffect(injectStyles, []);\n\n const set = (name: string, val: unknown) => {\n setValues(v => ({ ...v, [name]: val }));\n setErrors(e => ({ ...e, [name]: null }));\n };\n\n const collectFields = (rows: (FormField | FormField[])[]): FormField[] => {\n const out: FormField[] = [];\n rows.flat().forEach(f => {\n if (!f || typeof f !== \"object\" || !(\"name\" in f)) return;\n out.push(f);\n if (f.type === \"fieldset\" && f.rows) out.push(...collectFields(f.rows));\n });\n return out;\n };\n\n const validate = () => {\n const errs: Record<string, string> = {};\n collectFields(config.rows || []).forEach(f => {\n if (f.required && !values[f.name])\n errs[f.name] = `${f.label || f.name} is required`;\n });\n setErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const renderField = (field: FormField): React.ReactNode => {\n const val = (values[field.name] ?? field.value ?? \"\") as string;\n const err = errors[field.name];\n\n // label width: field-level override or config-level default\n const lw = field.labelWidth ?? config.labelWidth;\n const inline = lw !== undefined || field.labelPosition === \"left\";\n\n /* ── fieldset ── */\n if (field.type === \"fieldset\") return (\n <fieldset key={field.name} style={{ border: `1px solid ${T.border}`, borderRadius: T.r, padding: \"12px 16px\", marginBottom: 14 }}>\n <legend style={{ fontSize: 12, fontWeight: 700, color: T.textSec, padding: \"0 6px\" }}>{field.label}</legend>\n {(field.rows || []).map(f => renderField(f))}\n </fieldset>\n );\n\n if (field.type === \"spacer\") return (\n <div key={field.name} style={{ height: field.height || 16 }} />\n );\n\n /* ── shared sub-elements ── */\n const labelStyle: React.CSSProperties = lw\n ? { minWidth: lw, width: lw, flexShrink: 0, paddingTop: 8, boxSizing: \"border-box\" }\n : {};\n const labelEl = field.label\n ? <label key=\"lbl\" className=\"dhx dhx-label\" style={{ display: \"flex\", gap: 4, ...labelStyle }}>\n {field.label}{field.required && <span style={{ color: T.danger }}>*</span>}\n </label>\n : null;\n const errEl = err ? <div style={{ fontSize: 11, color: T.danger, marginTop: 3 }}>{err}</div> : null;\n const helpEl = field.helpMessage\n ? <div style={{ fontSize: 11, color: T.textMut, marginTop: 3 }}>ⓘ {field.helpMessage}</div>\n : null;\n\n const common = { key: field.name, className: \"dhx-form-group\" };\n\n /* wrap(content) handles both inline and stacked layouts */\n const wrap = (content: React.ReactNode) => inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1, minWidth: 0 }}>{content}{errEl}{helpEl}</div>\n </div>\n ) : (\n <div {...common}>\n {labelEl}\n {content}\n {errEl}\n {helpEl}\n </div>\n );\n\n /* ── input ── */\n if (!field.type || field.type === \"input\") return wrap(\n <div className=\"dhx-input-wrap\">\n {field.icon && <span className=\"dhx-input-icon\">{field.icon}</span>}\n <input className={`dhx dhx-input${field.icon ? \" dhx-input--with-icon\" : \"\"}`}\n style={{ borderColor: err ? T.danger : undefined }}\n type={field.inputType || \"text\"} placeholder={field.placeholder}\n value={val} onChange={e => set(field.name, e.target.value)} disabled={field.disabled} />\n </div>\n );\n\n /* ── textarea ── */\n if (field.type === \"textarea\") return wrap(\n <textarea className=\"dhx dhx-input\"\n style={{ height: 80, resize: \"vertical\", padding: \"8px 10px\" }}\n placeholder={field.placeholder} value={val}\n onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── select ── */\n if (field.type === \"select\") return wrap(\n <select className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} style={{ cursor: \"pointer\" }}>\n <option value=\"\">— Select —</option>\n {(field.options || []).map(o => <option key={o.value} value={o.value}>{o.label || o.value}</option>)}\n </select>\n );\n\n /* ── datepicker ── */\n if (field.type === \"datepicker\") return wrap(\n <input type=\"date\" className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── timepicker (popup) ── */\n if (field.type === \"timepicker\") {\n const tv: TimeValue = (values[field.name] as TimeValue) ?? { h: 12, m: 0, ampm: \"AM\" };\n const hasVal = !!(values[field.name]);\n const display = hasVal\n ? `${String(tv.h).padStart(2,\"0\")}:${String(tv.m).padStart(2,\"0\")}${tv.ampm ? \" \" + tv.ampm : \"\"}`\n : (field.placeholder || \"Click to select\");\n const trigger = (\n <div style={{ position: \"relative\" }}>\n <div className=\"dhx dhx-input\"\n style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}\n onClick={() => setOpenPicker(openPicker === field.name ? null : field.name)}>\n <span style={{ color: hasVal ? T.text : T.textMut }}>{display}</span>\n <span style={{ fontSize: 13, color: T.textSec }}>🕐</span>\n </div>\n {openPicker === field.name && (\n <div style={{ position: \"absolute\", zIndex: 100, top: \"calc(100% + 4px)\", left: 0 }}>\n <Timepicker value={tv} controls onChange={v => { set(field.name, v); setOpenPicker(null); }} />\n </div>\n )}\n </div>\n );\n return wrap(trigger);\n }\n\n /* ── colorpicker ── */\n if (field.type === \"colorpicker\") return wrap(\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <input type=\"color\" value={(val as string) || \"#000000\"} onChange={e => set(field.name, e.target.value)}\n style={{ width: 36, height: 36, padding: 2, border: `1px solid ${T.border}`, borderRadius: T.r, cursor: \"pointer\", background: \"none\" }} />\n <span style={{ fontSize: 12, color: T.textSec, fontFamily: \"monospace\" }}>{(val as string) || \"#000000\"}</span>\n </div>\n );\n\n /* ── text (static) ── */\n if (field.type === \"text\") return wrap(\n <p style={{ margin: \"6px 0\", fontSize: 13, color: T.text }}>{field.value as string}</p>\n );\n\n /* ── checkbox ── */\n if (field.type === \"checkbox\") return (\n <div {...common}>\n {inline\n ? <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {/* push checkbox to label-width offset */}\n {lw && <div style={{ width: lw, flexShrink: 0 }} />}\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n </div>\n : <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n }\n {helpEl}\n </div>\n );\n\n /* ── radio ── */\n if (field.type === \"radio\") {\n const options = (field.options || []).map(o => (\n <label key={o.value} style={{ display: \"flex\", alignItems: \"center\", gap: 6, cursor: \"pointer\", fontSize: 13 }}>\n <input type=\"radio\" name={field.name} value={o.value} checked={val === o.value}\n onChange={() => set(field.name, o.value)} style={{ accentColor: T.primary, cursor: \"pointer\" }} />\n {o.label || o.value}\n </label>\n ));\n return wrap(\n <div style={{ display: \"flex\", gap: 16, flexWrap: \"wrap\", paddingTop: 8 }}>{options}</div>\n );\n }\n\n /* ── slider ── */\n if (field.type === \"slider\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Slider min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Slider label={field.label} min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n );\n\n /* ── combo ── */\n if (field.type === \"combo\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Combobox data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Combobox label={field.label} data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n );\n\n /* ── toggle ── */\n if (field.type === \"toggle\") {\n const isOn = !!val;\n const icon = isOn ? field.icon : (field.offIcon || field.icon);\n const txt = isOn ? (field.text || field.label) : (field.offText || field.text || field.label);\n return (\n <div {...common}>\n {inline && lw && <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <div style={{ width: lw, flexShrink: 0 }} />\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>\n </div>}\n {!inline && <label style={{ display: \"flex\", alignItems: \"center\", gap: 10, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>}\n {helpEl}\n </div>\n );\n }\n\n return null;\n };\n\n const renderRows = (rows: (FormField | FormField[])[]) =>\n rows.map((row, i) =>\n Array.isArray(row)\n ? <div key={i} style={{ display: \"flex\", gap: 12, alignItems: \"flex-start\" }}>{row.map(renderField)}</div>\n : renderField(row)\n );\n\n return (\n <div className=\"dhx\" style={{ padding: config.padding || 0, width: config.width || \"100%\", ...style }}>\n {renderRows(config.rows || [])}\n {(config.buttons || onSubmit) && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: config.buttonAlign || \"flex-start\", marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => validate() && onSubmit?.(values)}>\n {config.submitText || \"Submit\"}\n </button>\n {config.resetButton !== false &&\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => { setValues(defaultValues); setErrors({}); }}>\n {config.resetText || \"Reset\"}\n </button>\n }\n </div>\n )}\n </div>\n );\n}\n\nfunction Switch({ on, onClick }: { on: boolean; onClick: () => void }) {\n return (\n <div style={{ position: \"relative\", width: 40, height: 22, flexShrink: 0 }} onClick={onClick}>\n <div style={{ width: 40, height: 22, borderRadius: 11, background: on ? T.primary : T.border, transition: \"background 0.2s\" }} />\n <div style={{ position: \"absolute\", top: 3, left: on ? 21 : 3, width: 16, height: 16, borderRadius: \"50%\", background: \"#fff\", transition: \"left 0.2s\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\" }} />\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport type DHXColor = \"danger\" | \"secondary\" | \"primary\" | \"success\";\nexport type RibbonItemSize = \"auto\" | \"medium\" | \"small\";\n\nexport interface RibbonSubItem {\n id?: string;\n type?: \"button\" | \"navItem\" | \"imageButton\" | \"separator\" | \"sep\"\n | \"spacer\" | \"title\" | \"input\" | \"selectButton\" | \"customHTML\";\n value?: string;\n text?: string; // alias for value (backward compat)\n html?: string; // HTML content alternative to value\n icon?: React.ReactNode;\n src?: string; // imageButton image URL\n size?: RibbonItemSize;\n color?: DHXColor; // button background color variant\n view?: \"flat\" | \"link\";\n circle?: boolean; // circular button shape\n loading?: boolean; // show spinner instead of icon\n active?: boolean;\n twoState?: boolean;\n group?: string;\n disabled?: boolean;\n hidden?: boolean;\n tooltip?: string;\n hotkey?: string; // keyboard shortcut hint shown in tooltip\n label?: string; // prefix label for input fields\n placeholder?: string;\n width?: number;\n count?: number;\n countColor?: DHXColor;\n items?: MenuItem[]; // dropdown menu items\n css?: string | string[];\n onClick?: (item: RibbonSubItem) => void;\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (value: string) => void;\n}\n\nexport interface RibbonBlock {\n type: \"block\";\n id?: string;\n title?: string;\n label?: string; // alias for title (backward compat)\n direction?: \"col\" | \"row\";\n css?: string | string[];\n disabled?: boolean;\n hidden?: boolean;\n items?: (RibbonSubItem | RibbonBlock)[];\n}\n\nexport type RibbonItem = RibbonSubItem | RibbonBlock;\n\nexport interface RibbonProps {\n items?: RibbonItem[];\n css?: string;\n menuCss?: string;\n style?: React.CSSProperties;\n onAction?: (id: string, item: RibbonSubItem) => void;\n onInputChange?: (id: string, value: string) => void;\n onInputBlur?: (id: string, value: string) => void;\n onInputFocus?: (id: string, value: string) => void;\n onOpenMenu?: (id: string) => void;\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────────── */\n\nfunction collectAll(items: (RibbonSubItem | RibbonBlock)[]): RibbonSubItem[] {\n const result: RibbonSubItem[] = [];\n for (const item of items) {\n if (item.type === \"block\") {\n result.push(...collectAll((item as RibbonBlock).items || []));\n } else {\n result.push(item as RibbonSubItem);\n }\n }\n return result;\n}\n\nfunction badgeBg(c?: DHXColor): string {\n if (c === \"primary\") return T.primary;\n if (c === \"success\") return T.success;\n if (c === \"secondary\") return T.borderDk;\n return T.danger; // default\n}\n\nfunction btnColorStyle(color?: DHXColor, isActive?: boolean): React.CSSProperties {\n switch (color) {\n case \"primary\": return { background: T.primary, color: \"#fff\", borderColor: T.primary };\n case \"danger\": return { background: T.danger, color: \"#fff\", borderColor: T.danger };\n case \"success\": return { background: T.success, color: \"#fff\", borderColor: T.success };\n case \"secondary\": return { background: T.bg, color: T.text, borderColor: T.border };\n default: return isActive ? { background: T.primaryLt, color: T.primary } : {};\n }\n}\n\n/* ── Component ─────────────────────────────────────────────────────────── */\n\nexport function Ribbon({\n items = [], css: cssProp, menuCss, style,\n onAction, onInputChange, onInputBlur, onInputFocus, onOpenMenu,\n}: RibbonProps) {\n useEffect(injectStyles, []);\n\n const [activeMap, setActiveMap] = useState<Record<string, boolean>>(() => {\n const map: Record<string, boolean> = {};\n for (const si of collectAll(items)) {\n if (si.id) map[si.id] = !!si.active;\n }\n return map;\n });\n const [openDropdown, setOpenDropdown] = useState<string | null>(null);\n const [selectValues, setSelectValues] = useState<Record<string, string>>(() => {\n const vals: Record<string, string> = {};\n for (const si of collectAll(items)) {\n if ((si.type === \"selectButton\") && si.id && si.value) vals[si.id] = si.value;\n }\n return vals;\n });\n\n const allItems = collectAll(items);\n const ref = useRef<HTMLDivElement>(null);\n useClickOutside(ref as React.RefObject<HTMLDivElement>, useCallback(() => setOpenDropdown(null), []));\n\n const handleClick = (si: RibbonSubItem) => {\n if (si.disabled) return;\n if (si.id) {\n if (si.group) {\n const sameGroup = allItems.filter(s => s.group === si.group && s.id);\n setActiveMap(prev => {\n const next = { ...prev };\n for (const s of sameGroup) next[s.id!] = false;\n next[si.id!] = true;\n return next;\n });\n } else if (si.twoState) {\n setActiveMap(prev => ({ ...prev, [si.id!]: !prev[si.id!] }));\n }\n if (si.items?.length) {\n const key = si.id;\n setOpenDropdown(prev => prev === key ? null : key);\n onOpenMenu?.(si.id);\n return;\n }\n }\n si.onClick?.(si);\n if (si.id) onAction?.(si.id, si);\n };\n\n /* ── Badge ─────────────────────────────────────────────────────────── */\n const Badge = ({ count, color }: { count: number; color?: DHXColor }) => (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 14, height: 14,\n background: badgeBg(color), color: \"#fff\",\n borderRadius: 7, fontSize: 9, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 2px\", pointerEvents: \"none\",\n }}>\n {count > 99 ? \"99+\" : count}\n </span>\n );\n\n /* ── Button / NavItem ──────────────────────────────────────────────── */\n const renderButton = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n const isActive = si.id !== undefined ? (activeMap[si.id] ?? !!si.active) : !!si.active;\n const label = si.value ?? si.text;\n const sizeLevel = si.size ?? \"medium\";\n const isLarge = sizeLevel === \"auto\";\n const isSmall = sizeLevel === \"small\";\n const hasDropdown = !!(si.items?.length);\n const isOpen = si.id !== undefined && openDropdown === si.id;\n const colorStyle = btnColorStyle(si.color, isActive && !si.color);\n\n const h = isLarge ? undefined : isSmall ? 26 : 32;\n const ico = isLarge ? 22 : isSmall ? 13 : 16;\n\n const tooltipText = [si.tooltip, si.hotkey ? `(${si.hotkey})` : \"\"].filter(Boolean).join(\" \");\n\n const circleStyle: React.CSSProperties = si.circle\n ? { borderRadius: \"50%\", padding: isLarge ? \"8px\" : \"0\", aspectRatio: \"1\", justifyContent: \"center\" }\n : {};\n\n const viewStyle: React.CSSProperties = si.view === \"link\"\n ? { background: \"transparent\", border: \"none\", textDecoration: \"underline\", padding: \"0 4px\" }\n : si.view === \"flat\"\n ? { borderRadius: 0 }\n : {};\n\n return (\n <div key={key} style={{ position: \"relative\", display: \"flex\" }}>\n <button\n title={tooltipText || undefined}\n disabled={si.disabled}\n className=\"dhx dhx-btn dhx-btn-ghost\"\n style={{\n flexDirection: isLarge ? \"column\" : \"row\",\n alignSelf: isLarge ? \"stretch\" : \"center\",\n justifyContent: \"center\",\n minHeight: isLarge ? 56 : h,\n height: isLarge ? undefined : h,\n padding: isLarge ? \"6px 10px\" : isSmall ? \"0 6px\" : \"0 8px\",\n gap: isLarge ? 4 : 4,\n position: \"relative\",\n background: isActive && !si.color ? T.primaryLt : \"transparent\",\n color: isActive && !si.color ? T.primary : si.disabled ? T.textMut : T.text,\n opacity: si.disabled ? 0.55 : 1,\n cursor: si.disabled ? \"not-allowed\" : \"pointer\",\n borderColor: isOpen ? T.primary : undefined,\n ...colorStyle,\n ...circleStyle,\n ...viewStyle,\n }}\n onClick={() => handleClick(si)}\n >\n {/* Spinner for loading state */}\n {si.loading ? (\n <span style={{\n fontSize: ico, lineHeight: 1, flexShrink: 0,\n display: \"inline-block\",\n animation: \"dhx-spin 1s linear infinite\",\n }}>⟳</span>\n ) : si.icon && (\n <span style={{ fontSize: ico, lineHeight: 1, flexShrink: 0 }}>{si.icon}</span>\n )}\n\n {/* Label */}\n {label && !si.html && (\n <span style={{\n fontSize: isLarge ? 10 : isSmall ? 11 : 12,\n maxWidth: isLarge ? 64 : undefined,\n textAlign: isLarge ? \"center\" : \"left\",\n lineHeight: isLarge ? 1.2 : 1,\n whiteSpace: isLarge ? \"normal\" : \"nowrap\",\n }}>{label}</span>\n )}\n\n {/* HTML content */}\n {si.html && <span dangerouslySetInnerHTML={{ __html: si.html }} />}\n\n {/* Dropdown arrow */}\n {hasDropdown && (\n <span style={{ fontSize: 8, opacity: 0.6, marginLeft: 1 }}>▼</span>\n )}\n\n {/* Hotkey hint (large buttons only) */}\n {si.hotkey && isLarge && (\n <span style={{ fontSize: 9, color: T.textMut, lineHeight: 1 }}>{si.hotkey}</span>\n )}\n\n {/* Badge */}\n {si.count !== undefined && <Badge count={si.count} color={si.countColor} />}\n </button>\n\n {/* Dropdown */}\n {hasDropdown && isOpen && (\n <MenuDropdown\n items={si.items!}\n onSelect={(mi) => {\n setOpenDropdown(null);\n if (mi.id) onAction?.(String(mi.id), si);\n }}\n style={{ top: \"100%\", left: 0, minWidth: 160 }}\n />\n )}\n </div>\n );\n };\n\n /* ── ImageButton ────────────────────────────────────────────────────── */\n const renderImageButton = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n const sizeLevel = si.size ?? \"medium\";\n const sz = sizeLevel === \"auto\" ? 48 : sizeLevel === \"small\" ? 28 : 36;\n const isActive = si.id !== undefined ? (activeMap[si.id] ?? !!si.active) : !!si.active;\n return (\n <div key={key} style={{ position: \"relative\", display: \"flex\", alignSelf: \"center\" }}>\n <button\n title={si.tooltip}\n disabled={si.disabled}\n style={{\n width: sz, height: sz, padding: 2,\n border: isActive ? `2px solid ${T.primary}` : \"2px solid transparent\",\n borderRadius: \"50%\", overflow: \"hidden\",\n cursor: si.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n opacity: si.disabled ? 0.55 : 1,\n }}\n onClick={() => handleClick(si)}\n >\n {si.src && (\n <img src={si.src} alt={si.value || \"\"}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />\n )}\n {si.count !== undefined && <Badge count={si.count} color={si.countColor} />}\n </button>\n </div>\n );\n };\n\n /* ── SelectButton ───────────────────────────────────────────────────── */\n const renderSelectButton = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n const isOpen = si.id !== undefined && openDropdown === (`sel:${si.id}`);\n const currentVal = (si.id && selectValues[si.id]) ?? si.value ?? si.items?.[0]?.value ?? \"\";\n const menuItems: MenuItem[] = (si.items ?? []).map(o => ({\n id: o.value, value: o.value, icon: o.icon,\n }));\n return (\n <div key={key} style={{ position: \"relative\", alignSelf: \"center\" }}>\n <button\n title={si.tooltip}\n disabled={si.disabled}\n className=\"dhx dhx-btn dhx-btn-ghost\"\n style={{\n height: 28, gap: 4, padding: \"0 8px\",\n opacity: si.disabled ? 0.55 : 1,\n cursor: si.disabled ? \"not-allowed\" : \"pointer\",\n borderColor: isOpen ? T.primary : undefined,\n }}\n onClick={() => {\n if (si.disabled) return;\n if (!si.id) return;\n const k = `sel:${si.id}`;\n setOpenDropdown(prev => prev === k ? null : k);\n }}\n >\n {si.icon && <span style={{ fontSize: 14 }}>{si.icon}</span>}\n <span style={{ fontSize: 12 }}>{currentVal}</span>\n <span style={{ fontSize: 8, opacity: 0.6 }}>▼</span>\n </button>\n {isOpen && (\n <MenuDropdown\n items={menuItems}\n onSelect={(mi) => {\n const val = String(mi.value ?? mi.id ?? \"\");\n if (si.id) setSelectValues(prev => ({ ...prev, [si.id!]: val }));\n setOpenDropdown(null);\n si.onChange?.(val);\n if (si.id) onAction?.(si.id, si);\n }}\n style={{ top: \"100%\", left: 0, minWidth: 100 }}\n />\n )}\n </div>\n );\n };\n\n /* ── Input ──────────────────────────────────────────────────────────── */\n const renderInput = (si: RibbonSubItem, key: string | number): React.ReactNode => (\n <div key={key} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", justifyContent: \"center\", padding: \"2px 4px\", gap: 2 }}>\n {si.label && <span style={{ fontSize: 10, color: T.textMut }}>{si.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {si.icon && (\n <span style={{ position: \"absolute\", left: 6, fontSize: 13, color: T.textMut, pointerEvents: \"none\", zIndex: 1 }}>\n {si.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n disabled={si.disabled}\n style={{ width: si.width || 110, height: 26, fontSize: 12, paddingLeft: si.icon ? 24 : undefined }}\n placeholder={si.placeholder}\n defaultValue={si.value}\n onChange={e => {\n si.onChange?.(e.target.value);\n if (si.id) onInputChange?.(si.id, e.target.value);\n }}\n onBlur={e => {\n si.onBlur?.(e.target.value);\n if (si.id) onInputBlur?.(si.id, e.target.value);\n }}\n onFocus={e => {\n si.onFocus?.(e.target.value);\n if (si.id) onInputFocus?.(si.id, e.target.value);\n }}\n />\n </div>\n </div>\n );\n\n /* ── Title ──────────────────────────────────────────────────────────── */\n const renderTitle = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n if (si.hidden) return null;\n return (\n <div key={key} title={si.tooltip} style={{\n padding: \"2px 6px\", fontSize: 11,\n color: si.disabled ? T.textMut : T.textSec,\n display: \"flex\", alignItems: \"center\", alignSelf: \"center\",\n userSelect: \"none\",\n opacity: si.disabled ? 0.5 : 1,\n }}>\n {si.html\n ? <span dangerouslySetInnerHTML={{ __html: si.html }} />\n : si.value\n }\n </div>\n );\n };\n\n /* ── CustomHTML ─────────────────────────────────────────────────────── */\n const renderCustomHTML = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n if (si.hidden) return null;\n return (\n <div key={key} style={{ display: \"flex\", alignItems: \"center\", alignSelf: \"center\", padding: \"0 4px\" }}\n dangerouslySetInnerHTML={{ __html: si.html ?? \"\" }} />\n );\n };\n\n /* ── Leaf item dispatcher ───────────────────────────────────────────── */\n const renderSubItem = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n if (si.hidden) return null;\n\n if (si.type === \"separator\" || si.type === \"sep\") return (\n <div key={key} style={{ width: 1, background: T.border, margin: \"4px 2px\", alignSelf: \"stretch\" }} />\n );\n if (si.type === \"spacer\") return <div key={key} style={{ flex: 1 }} />;\n if (si.type === \"title\") return renderTitle(si, key);\n if (si.type === \"customHTML\") return renderCustomHTML(si, key);\n if (si.type === \"imageButton\") return renderImageButton(si, key);\n if (si.type === \"input\") return renderInput(si, key);\n if (si.type === \"selectButton\")return renderSelectButton(si, key);\n\n // \"button\" | \"navItem\" | undefined\n return renderButton(si, key);\n };\n\n /* ── Inner layout block ─────────────────────────────────────────────── */\n const renderInnerBlock = (block: RibbonBlock, key: string | number, parentDisabled?: boolean): React.ReactNode => {\n if (block.hidden) return null;\n const isDisabled = parentDisabled || block.disabled;\n return (\n <div key={key} style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"flex-start\" : \"center\",\n gap: 2,\n opacity: block.disabled && !parentDisabled ? 0.55 : 1,\n pointerEvents: isDisabled ? \"none\" : undefined,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, `${key}-${j}`, isDisabled)\n : renderSubItem(sub as RibbonSubItem, `${key}-${j}`)\n )}\n </div>\n );\n };\n\n /* ── Top-level section block ────────────────────────────────────────── */\n const renderSection = (block: RibbonBlock, key: number): React.ReactNode => {\n if (block.hidden) return null;\n const title = block.title || block.label;\n return (\n <div key={key} style={{\n display: \"flex\", flexDirection: \"column\", alignItems: \"stretch\",\n borderRight: `1px solid ${T.border}`,\n padding: \"4px 6px 0\",\n minWidth: 40,\n opacity: block.disabled ? 0.55 : 1,\n pointerEvents: block.disabled ? \"none\" : undefined,\n }}>\n {/* items area */}\n <div style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"stretch\" : \"center\",\n gap: 2,\n flex: 1,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, j, block.disabled)\n : renderSubItem(sub as RibbonSubItem, j)\n )}\n </div>\n\n {/* section title at bottom */}\n {title && (\n <div style={{\n fontSize: 10, color: T.textMut, textAlign: \"center\",\n padding: \"3px 0 4px\", marginTop: 2,\n borderTop: `1px solid ${T.border}`,\n }}>\n {title}\n </div>\n )}\n </div>\n );\n };\n\n const renderItem = (item: RibbonItem, i: number): React.ReactNode => {\n if (item.type === \"block\") return renderSection(item as RibbonBlock, i);\n return renderSubItem(item as RibbonSubItem, i);\n };\n\n return (\n <div\n ref={ref}\n className={[\"dhx\", cssProp].filter(Boolean).join(\" \")}\n style={{\n display: \"flex\", alignItems: \"stretch\",\n background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n overflowX: \"auto\",\n gap: 0,\n minHeight: 72,\n ...style,\n }}\n >\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface NavbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"imageButton\";\n value?: string;\n icon?: React.ReactNode;\n src?: string;\n items?: MenuItem[];\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n count?: number;\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface NavbarProps {\n logo?: React.ReactNode;\n items?: NavbarItem[];\n vertical?: boolean;\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 3, right: 3,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Navbar({ logo, items = [], vertical = false, onAction, style }: NavbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => { if (item.id && item.twoState && item.active) init[item.id] = true; });\n return init;\n });\n const ref = useRef<HTMLElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: NavbarItem, i: number) => {\n if (item.disabled) return;\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: NavbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{\n [vertical ? \"height\" : \"width\"]: 1,\n background: T.border,\n margin: vertical ? \"4px 8px\" : \"0 6px\",\n alignSelf: \"stretch\",\n }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", margin: \"0 4px\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 200, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 36, height: 36, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.twoState && item.id && activeItems[item.id]);\n const hasDropdown = !!(item.items?.length);\n\n const btnStyle: React.CSSProperties = {\n position: \"relative\",\n height: vertical ? 40 : 36,\n gap: 6,\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n ...(vertical ? {\n width: \"100%\", justifyContent: \"flex-start\",\n padding: \"0 16px\", borderRadius: 0,\n } : {}),\n };\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={btnStyle}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16, flexShrink: 0 }}>{item.icon}</span>}\n {item.value && <span style={{ fontSize: 13 }}>{item.value}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={(mi) => {\n setOpenMenu(null);\n if (mi.id) { item.onClick?.(mi.id); onAction?.(mi.id); }\n }}\n style={vertical ? { left: \"100%\", top: 0 } : { top: \"100%\" }}\n />\n )}\n </div>\n );\n };\n\n return (\n <nav\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\",\n flexDirection: vertical ? \"column\" : \"row\",\n alignItems: vertical ? \"stretch\" : \"center\",\n background: T.surface,\n borderBottom: vertical ? \"none\" : `1px solid ${T.border}`,\n borderRight: vertical ? `1px solid ${T.border}` : \"none\",\n padding: vertical ? \"8px 0\" : \"0 12px\",\n minHeight: vertical ? undefined : 48,\n gap: 2,\n ...style,\n }}\n >\n {logo && (\n <div style={{\n color: T.text, fontWeight: 800, fontSize: 16,\n padding: vertical ? \"8px 16px 12px\" : \"0 12px 0 4px\",\n borderBottom: vertical ? `1px solid ${T.border}` : \"none\",\n borderRight: vertical ? \"none\" : `1px solid ${T.border}`,\n marginRight: vertical ? 0 : 8,\n marginBottom: vertical ? 4 : 0,\n flexShrink: 0,\n }}>\n {logo}\n </div>\n )}\n {items.map(renderItem)}\n </nav>\n );\n}\n"],"names":["tokens","STYLE_ID","injectStyles","s","T","SIZE_STYLES","Button","children","variant","size","icon","disabled","onClick","style","className","useEffect","jsxs","useClickOutside","ref","callback","handler","e","useDrag","onDrag","dragging","useRef","origin","useCallback","originX","originY","move","me","x","y","ox","oy","up","MenuDropdown","items","onSelect","hov","setHov","useState","item","i","jsx","isHov","_a","_b","Menu","label","open","setOpen","o","ContextMenu","pos","setPos","Badge","count","Toolbar","onAction","openMenu","setOpenMenu","activeItems","setActiveItems","init","handleClick","ns","it","prev","renderItem","isActive","hasDropdown","badgeBg","c","flatGroupIds","group","ids","visit","initActiveState","r","Sidebar","width","minWidth","header","footer","collapsed","defaultCollapsed","selected","defaultSelected","onCollapse","onExpand","onBeforeCollapse","onBeforeExpand","onToggleItem","isCtrlCollapsed","isCtrlSelected","collapsedState","setCollapsedState","selectedState","setSelectedState","expanded","setExpanded","activeState","setActiveState","isCollapsed","currentSel","w","handleToggle","handleSelect","handleTwoState","newActive","next","gid","renderBadge","mini","bg","txt","depth","idx","key","type","hasChildren","isExp","isTwoActive","isDisabled","pl","child","ci","collapseBtn","LayoutCell","config","setCollapsed","Layout","rows","cols","gap","cells","isRow","cell","Tabbar","views","mode","tabAlign","closable","defaultActive","onBeforeChange","onChange","active","setActive","openTabs","setOpenTabs","v","handleClose","id","t","handleChange","isVertical","visibleViews","tabBar","isDis","activeStyle","activeView","content","B","SortArrows","dir","InlineCellCombobox","options","value","onCommit","onCancel","query","setQuery","h","filtered","formatByType","val","compareValues","a","b","getFilterWidget","col","renderEditor","editValue","setEditValue","commit","cancel","base","et","inputType","Grid","columns","data","height","rowHeight","headerRowHeight","footerRowHeight","sortable","resizable","editable","stripe","autoWidth","keyNavigation","selection","multiselect","leftSplit","sortKey","setSortKey","sortDir","setSortDir","filter","setFilter","setSelected","focusRow","setFocusRow","colWidths","setColWidths","editCell","setEditCell","edits","setEdits","containerRef","containerW","setContainerW","ro","normalizedColumns","useMemo","visibleColumns","widths","total","extra","sorted","row","k","cmp","colStats","f","nums","n","sum","selectOpts","hasFilterRow","hasFooter","totalW","stickyLefts","acc","offsets","lastStickyId","rowKey","ri","handleSort","d","selectRow","rk","commitEdit","colId","handleKeyDown","startResize","startX","startW","ws","cs","align","first","overflow","sticky","h0","hText","hAlign","isStickyCl","widget","isSel","rowBg","isEditing","rawVal","canEdit","cellContent","newVal","stats","COLORS","buildTreemap","valueKey","nameKey","roots","root","Chart","series","scales","legend","xKey","tip","Tooltip","leg","Legend","grid","CartesianGrid","xAxis","XAxis","yAxis","YAxis","_c","_d","_e","_f","margin","_g","common","chart","BarChart","Bar","LineChart","Line","AreaChart","Area","s0","dataKey","colorField","PieChart","Pie","name","percent","Cell","radarKey","_h","RadarChart","PolarGrid","PolarAngleAxis","PolarRadiusAxis","Radar","ScatterChart","_i","_j","_k","_l","_m","_n","_o","_p","xField","yField","pts","Scatter","valKey","treeData","borderColor","borderWidth","Treemap","props","index","fill","ResponsiveContainer","MONTHS","DAYS","Calendar","range","timepicker","today","initDate","view","setView","hovDate","setHovDate","time","setTime","year","month","firstDay","daysInMonth","isToday","isSelected","dv","handleDay","sel","Timepicker","timeFormat","controls","minuteStep","setH","m","setM","ampm","setAmpm","pending","setPending","hours","_","mins","newH","newM","newAmpm","handleCancel","colStyle","cellStyle","Chevron","Combobox","valueProp","placeholder","multiselection","inputRef","removeTag","openDropdown","singleDisplayValue","selectedTags","Fragment","Slider","min","max","step","tick","setValue","update","nv","pct","arr","trackFill","trackColor","PALETTE","hexToHsl","hex","g","l","hslToHex","Colorpicker","hsl","setHsl","set","lbl","mn","mx","Popup","trigger","placement","trigRef","placements","Window","title","movable","modal","defaultOpen","onClose","drag","MessageContext","createContext","ICONS","MessageProvider","messages","setMessages","remove","add","opts","api","cb","useMessage","ctx","useContext","List","template","onEdit","editing","setEditing","editVal","setEditVal","focused","setFocused","isFoc","DataView","itemsInRow","cloneTree","nodes","collectExpanded","result","removeNode","removed","newItems","insertNode","targetId","node","isAncestor","ancestorId","check","hasDesc","updateValue","childStats","checked","checkedCount","Tree","checkbox","dragMode","tooltip","onCheck","setNodes","setChecked","editingId","setEditingId","dragId","setDragId","dropTarget","setDropTarget","toggle","handleCheck","updated","handleDragStart","handleDragOver","rect","dt","handleDrop","withoutDrag","dragged","handleDragEnd","renderNode","isDragging","isDrop","isChecked","isIndet","dropShadow","el","Pagination","pageSize","pageProp","page","setPage","totalPages","goTo","p","np","pages","Form","defaultValues","onSubmit","values","setValues","errors","setErrors","openPicker","setOpenPicker","collectFields","out","validate","errs","renderField","field","err","lw","inline","labelStyle","labelEl","errEl","helpEl","wrap","tv","hasVal","display","isOn","Switch","renderRows","on","collectAll","btnColorStyle","color","Ribbon","cssProp","menuCss","onInputChange","onInputBlur","onInputFocus","onOpenMenu","activeMap","setActiveMap","map","si","setOpenDropdown","selectValues","setSelectValues","vals","allItems","sameGroup","renderButton","sizeLevel","isLarge","isSmall","isOpen","colorStyle","ico","tooltipText","circleStyle","viewStyle","mi","renderImageButton","sz","renderSelectButton","currentVal","menuItems","renderInput","renderTitle","renderCustomHTML","renderSubItem","renderInnerBlock","block","parentDisabled","sub","j","renderSection","Navbar","logo","vertical","btnStyle"],"mappings":"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"}
|