dhx-react-suite 1.0.6 → 1.0.8
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 +1250 -946
- 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 +17 -4
- 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/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/hooks/useClickOutside.ts","../src/hooks/useDrag.ts","../src/components/Combobox/Combobox.tsx","../src/components/Slider/Slider.tsx","../src/components/Colorpicker/Colorpicker.tsx","../src/components/Menu/Menu.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 } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface ToolbarItem {\n id?: string;\n type?: \"separator\" | \"spacer\" | \"input\" | \"select\";\n text?: string;\n icon?: React.ReactNode;\n active?: boolean;\n twoState?: boolean;\n disabled?: boolean;\n label?: string;\n placeholder?: string;\n value?: string;\n width?: number;\n options?: { value: string; label: string }[];\n onClick?: (item: ToolbarItem) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface ToolbarProps {\n items?: ToolbarItem[];\n style?: React.CSSProperties;\n}\n\nexport function Toolbar({ items = [], style }: ToolbarProps) {\n useEffect(injectStyles, []);\n\n const renderItem = (item: ToolbarItem, i: number) => {\n if (item.type === \"separator\")\n return <div key={i} style={{ width: 1, background: T.border, margin: \"6px 4px\", alignSelf: \"stretch\" }} />;\n if (item.type === \"spacer\")\n return <div key={i} style={{ flex: 1 }} />;\n if (item.type === \"input\")\n 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 <input className=\"dhx dhx-input\" style={{ width: item.width || 140, height: 28 }}\n placeholder={item.placeholder} defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)} />\n </div>\n );\n if (item.type === \"select\")\n return (\n <select key={i} className=\"dhx dhx-input\" style={{ width: item.width || 100, height: 28, cursor: \"pointer\" }}\n defaultValue={item.value} onChange={e => item.onChange?.(e.target.value)}>\n {item.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n );\n const active = item.active;\n return (\n <button key={i} className={`dhx dhx-btn ${active ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`}\n style={{ height: 32, gap: 4, ...(item.twoState && active ? { background: T.primaryLt, color: T.primary, borderColor: `${T.primary}66` } : {}) }}\n disabled={item.disabled} onClick={() => item.onClick?.(item)}>\n {item.icon && <span style={{ fontSize: 16 }}>{item.icon}</span>}\n {item.text && <span>{item.text}</span>}\n </button>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"center\", gap: 2, padding: \"4px 8px\", background: T.surface, borderBottom: `1px solid ${T.border}`, minHeight: 44, flexWrap: \"wrap\", ...style }}>\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SidebarItem {\n id: string;\n value?: string;\n icon?: React.ReactNode;\n count?: number;\n type?: \"separator\" | \"customHTML\";\n html?: string;\n items?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items?: SidebarItem[];\n width?: number;\n collapsed?: boolean;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n onSelect?: (item: SidebarItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Sidebar({ items = [], width = 240, collapsed: collapsedProp, onSelect, header, footer, style }: SidebarProps) {\n const [collapsed, setCollapsed] = useState(collapsedProp ?? false);\n const [selected, setSelected] = useState<string | null>(null);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n useEffect(injectStyles, []);\n\n const w = collapsed ? 56 : width;\n const handleSelect = (item: SidebarItem) => { setSelected(item.id); onSelect?.(item); };\n\n const renderItem = (item: SidebarItem, depth = 0): React.ReactNode => {\n if (item.type === \"separator\") return <div key={item.id} style={{ height: 1, background: T.border, margin: \"6px 8px\" }} />;\n if (item.type === \"customHTML\") return <div key={item.id} style={{ padding: \"8px 12px\" }} dangerouslySetInnerHTML={{ __html: item.html || \"\" }} />;\n const hasChildren = (item.items?.length ?? 0) > 0;\n const isExpanded = expanded[item.id];\n const isSelected = selected === item.id;\n return (\n <div key={item.id}>\n <div onClick={() => { if (hasChildren) setExpanded(x => ({ ...x, [item.id]: !x[item.id] })); handleSelect(item); }}\n style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: `8px ${collapsed ? \"0px\" : `${12 + depth * 16}px`}`, cursor: \"pointer\", borderRadius: T.r, margin: \"1px 6px\", justifyContent: collapsed ? \"center\" : \"flex-start\", transition: \"all .15s\", background: isSelected ? T.primaryLt : \"transparent\", color: isSelected ? T.primary : T.text, userSelect: \"none\" }}\n onMouseEnter={e => !isSelected && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSelected && (e.currentTarget.style.background = \"transparent\")}>\n {item.icon && <span style={{ fontSize: 18, minWidth: 22, textAlign: \"center\" }}>{item.icon}</span>}\n {!collapsed && <span style={{ flex: 1, fontSize: 13, fontWeight: isSelected ? 600 : 400 }}>{item.value}</span>}\n {!collapsed && item.count !== undefined && <span style={{ background: T.primary, color: \"#fff\", borderRadius: 10, padding: \"1px 6px\", fontSize: 11, fontWeight: 700 }}>{item.count}</span>}\n {!collapsed && hasChildren && <span style={{ fontSize: 12, color: T.textMut, transition: \"transform .15s\", transform: isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\" }}>▶</span>}\n </div>\n {hasChildren && isExpanded && !collapsed && item.items!.map(child => renderItem(child, depth + 1))}\n </div>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ width: w, minWidth: w, background: T.surface, borderRight: `1px solid ${T.border}`, display: \"flex\", flexDirection: \"column\", transition: \"width .2s ease\", overflow: \"hidden\", ...style }}>\n {header && !collapsed && <div style={{ padding: \"12px 14px\", borderBottom: `1px solid ${T.border}`, fontWeight: 700, fontSize: 15 }}>{header}</div>}\n <button onClick={() => setCollapsed(c => !c)} style={{ margin: \"8px 6px\", background: \"transparent\", border: \"none\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: collapsed ? \"center\" : \"flex-end\", padding: \"4px 6px\", borderRadius: T.r, color: T.textSec }}>\n <span style={{ fontSize: 18 }}>{collapsed ? \"☰\" : \"✕\"}</span>\n </button>\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", overflowX: \"hidden\" }}>{items.map(item => renderItem(item))}</div>\n {footer && !collapsed && <div style={{ padding: \"10px 14px\", borderTop: `1px solid ${T.border}` }}>{footer}</div>}\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 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?: { text: string; align?: \"left\" | \"center\" | \"right\" }[] | 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 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 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 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\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\nexport function Grid({\n columns, data = [], height = 400, rowHeight = 40,\n sortable = true, resizable = true, editable = false,\n stripe = false, autoWidth = false, keyNavigation = false,\n selection, multiselect, 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(() => columns.map(c => c.width ?? c.minWidth ?? 150));\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 /* auto-width: observe container */\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 /* effective widths (autoWidth distributes leftover space) */\n const widths = useMemo(() => {\n if (!autoWidth || containerW === 0) return colWidths;\n const total = colWidths.reduce((a, b) => a + b, 0);\n if (containerW <= total) return colWidths;\n const extra = (containerW - total) / columns.length;\n return colWidths.map(w => w + extra);\n }, [autoWidth, containerW, colWidths, columns.length]);\n\n /* sorted + filtered rows (with inline edits applied) */\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]) => !v || String(row[k] ?? \"\").toLowerCase().includes(v.toLowerCase()))\n );\n if (sortKey) {\n rows = [...rows].sort((a, b) => {\n const av = a[sortKey], bv = b[sortKey];\n if (av == null) return 1;\n if (bv == null) return -1;\n const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, sortKey, sortDir, filter, edits]);\n\n /* footer aggregation stats */\n const colStats = useMemo(() => {\n const s: Record<string, { sum: number; avg: number; count: number; min: number; max: number }> = {};\n columns.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, columns]);\n\n /* select filter options */\n const selectOpts = useMemo(() => {\n const o: Record<string, string[]> = {};\n columns.filter(c => c.filterType === \"select\").forEach(col => {\n o[col.id] = [...new Set(data.map(r => String(r[col.id] ?? \"\")))].sort();\n });\n return o;\n }, [data, columns]);\n\n const hasFilters = columns.some(c => c.filterable);\n const hasFooter = columns.some(c => c.footer?.length);\n const totalW = widths.reduce((a, b) => a + b, 0);\n\n const rowKey = (row: Record<string, unknown>, ri: number): string | number =>\n (row.id as string | number) ?? ri;\n\n /* sort */\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 /* selection */\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 /* edit commit */\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 /* keyboard navigation */\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 /* column resize */\n const startResize = (e: React.MouseEvent, ci: number) => {\n e.preventDefault();\n e.stopPropagation();\n const startX = e.clientX, startW = colWidths[ci];\n const move = (me: MouseEvent) => setColWidths(ws => {\n const nw = [...ws];\n nw[ci] = Math.max(columns[ci].minWidth || 50, startW + me.clientX - startX);\n return nw;\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 /* shared cell style */\n const cs = (wi: number, col: GridColumn, first: boolean, height: number): React.CSSProperties => ({\n width: wi, minWidth: wi, flexShrink: 0, boxSizing: \"border-box\",\n padding: \"0 12px\", height, display: \"flex\", alignItems: \"center\",\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n fontSize: 13, textAlign: col.align,\n justifyContent: col.align === \"center\" ? \"center\" : col.align === \"right\" ? \"flex-end\" : \"flex-start\",\n borderLeft: first ? \"none\" : B,\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 style={{ overflowX: \"auto\", flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <div style={{ minWidth: totalW, display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\n\n {/* ── Header ── */}\n <div style={{ display: \"flex\", background: T.bg, borderBottom: B, flexShrink: 0, position: \"sticky\", top: 0, zIndex: 2 }}>\n {columns.map((col, i) => (\n <div key={col.id}\n onClick={() => handleSort(col)}\n style={{\n ...cs(widths[i], col, i === 0, 40),\n position: \"relative\",\n fontWeight: 500, color: T.text,\n cursor: sortable && col.sortable !== false ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}>\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {Array.isArray(col.header) ? col.header[0]?.text : (col.header || col.id)}\n </span>\n {sortable && col.sortable !== false && (\n <SortArrows active={sortKey === col.id} dir={sortDir} />\n )}\n {resizable && col.resizable !== false && i < columns.length - 1 && (\n <div\n onMouseDown={e => startResize(e, i)}\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 </div>\n ))}\n </div>\n\n {/* ── Filter row ── */}\n {hasFilters && (\n <div style={{ display: \"flex\", borderBottom: B, background: T.surface, flexShrink: 0 }}>\n {columns.map((col, i) => (\n <div key={col.id} style={{ width: widths[i], minWidth: widths[i], flexShrink: 0, padding: \"4px 6px\", boxSizing: \"border-box\", borderLeft: i === 0 ? \"none\" : B }}>\n {col.filterable && col.filterType === \"select\" ? (\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 ) : col.filterable ? (\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 </div>\n )}\n\n {/* ── Body ── */}\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\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 {columns.map((col, ci) => {\n const isEditing = editCell?.key === rk && editCell?.colId === col.id;\n const rawVal = row[col.id];\n const display = col.template ? col.template(rawVal, row) : String(rawVal ?? \"\");\n return (\n <div key={col.id}\n onClick={() => {\n selectRow(row, ri);\n if (editable && col.editable !== false) {\n setEditCell({ key: rk, colId: col.id });\n setEditValue(String(rawVal ?? \"\"));\n }\n }}\n style={cs(widths[ci], col, ci === 0, rowHeight)}>\n {isEditing ? (\n <input\n autoFocus\n value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditCell(null); }}\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 ) : display}\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 }}>\n {columns.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 return (\n <div key={col.id} style={{ ...cs(widths[i], col, i === 0, 40), fontWeight: 600, color: T.text }}>\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,\n ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n ResponsiveContainer,\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;\n label?: string;\n color?: string;\n fill?: string;\n data?: Record<string, unknown>[];\n xValue?: string;\n yValue?: string;\n}\n\nexport interface ChartScales {\n bottom?: { text?: string };\n left?: { min?: number; max?: number };\n}\n\nexport interface ChartLegend {\n halign?: \"left\" | \"center\" | \"right\";\n valign?: \"top\" | \"middle\" | \"bottom\";\n}\n\nexport type ChartType = \"bar\" | \"line\" | \"area\" | \"pie\" | \"donut\" | \"radar\" | \"scatter\";\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\nexport function Chart({ type = \"bar\", data = [], series = [], scales = {}, legend, height = 280, style }: ChartProps) {\n useEffect(injectStyles, []);\n\n const xKey = scales.bottom?.text || (data[0] && Object.keys(data[0])[0]) || \"x\";\n const tip = <Tooltip contentStyle={{ fontSize: 12, borderRadius: T.r, border: `1px solid ${T.border}` }} />;\n const leg = legend ? <Legend iconSize={10} wrapperStyle={{ fontSize: 12 }} verticalAlign={legend.valign} align={legend.halign} /> : null;\n const grid = <CartesianGrid strokeDasharray=\"3 3\" stroke={T.border} />;\n const xAxis = <XAxis dataKey={xKey} tick={{ fontSize: 11, fill: T.textSec }} axisLine={{ stroke: T.border }} tickLine={false} />;\n const yAxis = <YAxis tick={{ fontSize: 11, fill: T.textSec }} axisLine={false} tickLine={false} domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]} />;\n const common = { data, margin: { top: 10, right: 20, left: 0, bottom: 0 } };\n\n let chart: React.ReactNode;\n\n if (type === \"bar\") {\n chart = <BarChart {...common}>{grid}{xAxis}{yAxis}{tip}{leg}{series.map((s, i) => <Bar key={s.id} dataKey={s.value || s.id} name={s.label || s.id} fill={s.fill || COLORS[i % COLORS.length]} radius={[3,3,0,0]} />)}</BarChart>;\n } else if (type === \"line\") {\n chart = <LineChart {...common}>{grid}{xAxis}{yAxis}{tip}{leg}{series.map((s, i) => <Line key={s.id} type=\"monotone\" dataKey={s.value || s.id} name={s.label || s.id} stroke={s.color || COLORS[i % COLORS.length]} strokeWidth={2} dot={{ r: 3, fill: s.color || COLORS[i % COLORS.length] }} />)}</LineChart>;\n } else if (type === \"area\") {\n chart = <AreaChart {...common}>{grid}{xAxis}{yAxis}{tip}{leg}{series.map((s, i) => <Area key={s.id} type=\"monotone\" dataKey={s.value || s.id} name={s.label || s.id} stroke={s.color || COLORS[i % COLORS.length]} fill={(s.fill || COLORS[i % COLORS.length]) + \"33\"} strokeWidth={2} />)}</AreaChart>;\n } else if (type === \"pie\" || type === \"donut\") {\n const firstRow = data[0] || {};\n const pieDataKey = Object.keys(firstRow).find(k => typeof firstRow[k] === \"number\") || \"value\";\n const pieNameKey = Object.keys(firstRow).find(k => typeof firstRow[k] === \"string\") || \"x\";\n chart = (\n <PieChart>\n <Pie data={data} cx=\"50%\" cy=\"50%\"\n outerRadius={type === \"donut\" ? \"70%\" : \"80%\"}\n innerRadius={type === \"donut\" ? \"40%\" : 0}\n dataKey={pieDataKey} nameKey={pieNameKey}\n label={({ name, percent }: { name?: string; percent?: number }) => `${name ?? \"\"} ${((percent ?? 0) * 100).toFixed(0)}%`}\n labelLine paddingAngle={2}>\n {data.map((_, i) => <Cell key={i} fill={COLORS[i % COLORS.length]} />)}\n </Pie>\n {tip}{leg}\n </PieChart>\n );\n } else if (type === \"radar\") {\n chart = <RadarChart {...common} cx=\"50%\" cy=\"50%\"><PolarGrid /><PolarAngleAxis dataKey={xKey} tick={{ fontSize: 11 }} />{series.map((s, i) => <Radar key={s.id} dataKey={s.value || s.id} name={s.label || s.id} stroke={s.color || COLORS[i]} fill={(s.fill || COLORS[i]) + \"44\"} />)}{tip}{leg}</RadarChart>;\n } else if (type === \"scatter\") {\n chart = <ScatterChart {...common}>{grid}<XAxis dataKey={series[0]?.xValue || \"x\"} type=\"number\" tick={{ fontSize: 11, fill: T.textSec }} /><YAxis dataKey={series[0]?.yValue || \"y\"} tick={{ fontSize: 11, fill: T.textSec }} />{tip}{series.map((s, i) => <Scatter key={s.id} data={(s.data as never[] | undefined) || data as never[]} name={s.label || s.id} fill={s.color || COLORS[i]} />)}</ScatterChart>;\n }\n\n return (\n <div className=\"dhx\" style={{ width: \"100%\", height, padding: 12, background: T.surface, borderRadius: T.rMd, ...style }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">{chart as React.ReactElement}</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={() => pending && onChange?.(pending)}>Apply</button>\n </div>\n )}\n </div>\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, 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 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 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: modal ? \"50%\" : `calc(50% + ${pos.x}px)`, top: modal ? \"50%\" : `calc(50% + ${pos.y}px)`, 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}\n\nexport interface TreeProps {\n data?: TreeNode[];\n checkbox?: boolean;\n editable?: boolean;\n onSelect?: (node: TreeNode) => void;\n onCheck?: (id: string, checked: boolean) => void;\n style?: React.CSSProperties;\n}\n\nexport function Tree({ data = [], checkbox = false, editable = false, onSelect, onCheck, style }: TreeProps) {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\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 useEffect(injectStyles, []);\n\n const toggle = (id: string) => setExpanded(e => ({ ...e, [id]: !e[id] }));\n const handleCheck = (id: string, val: boolean) => { setChecked(c => ({ ...c, [id]: val })); onCheck?.(id, val); };\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 return (\n <div key={node.id}>\n <div onClick={() => { setSelected(node.id); onSelect?.(node); if (hasChildren) toggle(node.id); }}\n onDoubleClick={() => { if (editable) { setEditingId(node.id); setEditVal(node.value || \"\"); } }}\n style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: `5px 8px 5px ${12 + depth * 18}px`, cursor: \"pointer\", borderRadius: T.r, margin: \"1px 4px\", background: isSel ? T.primaryLt : \"transparent\", color: isSel ? T.primary : T.text, userSelect: \"none\", fontSize: 13 }}\n onMouseEnter={e => !isSel && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSel && (e.currentTarget.style.background = \"transparent\")}>\n <span style={{ width: 16, textAlign: \"center\", fontSize: 11, color: T.textMut, flexShrink: 0 }}>{hasChildren ? (isExp ? \"▾\" : \"▸\") : \"\"}</span>\n <span style={{ fontSize: 15, flexShrink: 0 }}>{hasChildren ? (isExp ? \"📂\" : \"📁\") : \"📄\"}</span>\n {checkbox && <input type=\"checkbox\" checked={!!checked[node.id]} onChange={e => { e.stopPropagation(); handleCheck(node.id, e.target.checked); }} style={{ cursor: \"pointer\", accentColor: T.primary }} onClick={e => e.stopPropagation()} />}\n {editingId === node.id ? (\n <input autoFocus className=\"dhx dhx-input\" style={{ height: 24, fontSize: 12, flex: 1 }} value={editVal} onChange={e => setEditVal(e.target.value)} onBlur={() => setEditingId(null)} onKeyDown={e => e.key === \"Enter\" && setEditingId(null)} onClick={e => e.stopPropagation()} />\n ) : <span style={{ flex: 1 }}>{node.value}</span>}\n {node.count !== undefined && <span style={{ fontSize: 11, color: T.textMut }}>({node.count})</span>}\n </div>\n {hasChildren && isExp && <div>{node.items!.map(child => renderNode(child, depth + 1))}</div>}\n </div>\n );\n };\n\n return <div className=\"dhx dhx-scroll\" style={{ overflowY: \"auto\", ...style }}>{data.map(n => renderNode(n))}</div>;\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;\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 validate = () => {\n const errs: Record<string, string> = {};\n (config.rows || []).flat().forEach(f => {\n if (f && typeof f === \"object\" && \"name\" in f && 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 text?: string;\n icon?: React.ReactNode;\n active?: boolean;\n twoState?: boolean;\n group?: string;\n disabled?: boolean;\n tooltip?: string;\n label?: string;\n size?: \"large\" | \"auto\";\n placeholder?: string;\n value?: string;\n width?: number;\n items?: { value: string }[];\n onClick?: (item: RibbonSubItem) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface RibbonBlock {\n type: \"block\";\n label?: string;\n direction?: \"col\" | \"row\";\n items?: RibbonSubItem[];\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\nfunction collectSubItems(items: RibbonItem[]): RibbonSubItem[] {\n const result: RibbonSubItem[] = [];\n for (const item of items) {\n if (\"type\" in item && item.type === \"block\") {\n result.push(...((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 collectSubItems(items)) {\n if (si.id) map[si.id] = !!si.active;\n }\n return map;\n });\n\n const handleClick = (si: RibbonSubItem) => {\n if (si.id) {\n if (si.group) {\n const sameGroup = collectSubItems(items).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 const renderItem = (item: RibbonItem, i: number): React.ReactNode => {\n if (\"type\" in item && (item.type === \"separator\" || item.type === \"sep\"))\n return <div key={i} style={{ width: 1, background: T.border, margin: \"8px 4px\", alignSelf: \"stretch\" }} />;\n\n if (\"type\" in item && item.type === \"input\") {\n const si = item as RibbonSubItem;\n return (\n <div key={i} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", padding: \"4px 6px\", gap: 4 }}>\n {si.label && <span style={{ fontSize: 10, color: T.textMut }}>{si.label}</span>}\n <input className=\"dhx dhx-input\" style={{ width: si.width || 110, height: 26, fontSize: 12 }} placeholder={si.placeholder} defaultValue={si.value} onChange={e => si.onChange?.(e.target.value)} />\n </div>\n );\n }\n\n if (\"type\" in item && item.type === \"block\") {\n const block = item as RibbonBlock;\n return (\n <div key={i} style={{ display: \"flex\", flexDirection: block.direction === \"col\" ? \"column\" : \"row\", alignItems: \"center\", gap: 4, padding: \"4px 8px\", borderRight: `1px solid ${T.border}`, minHeight: 64 }}>\n <div style={{ display: \"flex\", gap: 2 }}>{block.items?.map((sub, j) => renderItem(sub, j))}</div>\n {block.label && <span style={{ fontSize: 10, color: T.textMut, marginTop: 2 }}>{block.label}</span>}\n </div>\n );\n }\n\n if (\"type\" in item && item.type === \"selectButton\") {\n const si = item as RibbonSubItem;\n return (\n <select key={i} className=\"dhx dhx-input\" style={{ height: 28, fontSize: 12, cursor: \"pointer\", margin: 2 }} defaultValue={si.value} onChange={e => si.onChange?.(e.target.value)}>\n {si.items?.map(o => <option key={o.value} value={o.value}>{o.value}</option>)}\n </select>\n );\n }\n\n const si = item as RibbonSubItem;\n const isActive = si.id !== undefined ? (activeMap[si.id] ?? !!si.active) : !!si.active;\n return (\n <button key={i} title={si.tooltip} className={`dhx dhx-btn ${isActive ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`}\n style={{ flexDirection: \"column\", minHeight: 48, padding: \"4px 8px\", gap: 4, fontSize: 12 }}\n disabled={si.disabled} onClick={() => handleClick(si)}>\n {si.icon && <span style={{ fontSize: si.size === \"large\" ? 24 : 18 }}>{si.icon}</span>}\n {si.text && <span style={{ fontSize: 10, maxWidth: 60, textAlign: \"center\", lineHeight: 1.2, whiteSpace: \"normal\" }}>{si.text}</span>}\n </button>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"stretch\", background: T.bg, borderBottom: `1px solid ${T.border}`, padding: \"4px 0\", overflowX: \"auto\", gap: 0, ...style }}>\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?: \"separator\" | \"spacer\" | \"input\" | \"menuItem\";\n value?: string;\n icon?: React.ReactNode;\n items?: MenuItem[];\n width?: number;\n placeholder?: string;\n onClick?: () => void;\n}\n\nexport interface NavbarProps {\n logo?: React.ReactNode;\n items?: NavbarItem[];\n vertical?: boolean;\n style?: React.CSSProperties;\n}\n\nexport function Navbar({ logo, items = [], vertical = false, style }: NavbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const ref = useRef<HTMLElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLElement>, useCallback(() => setOpenMenu(null), []));\n\n const renderItem = (item: NavbarItem, i: number): React.ReactNode => {\n if (item.type === \"separator\") return <div key={i} style={{ [vertical ? \"height\" : \"width\"]: 1, background: T.border, margin: vertical ? \"4px 8px\" : \"0 6px\", alignSelf: \"stretch\" }} />;\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n if (item.type === \"input\") return <input key={i} className=\"dhx dhx-input\" style={{ width: item.width || 200, height: 28, margin: \"0 4px\" }} placeholder={item.placeholder} />;\n if (item.type === \"menuItem\" && item.items?.length) return (\n <div key={i} style={{ position: \"relative\" }}>\n <button className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 36, color: T.text }} onClick={() => setOpenMenu(openMenu === i ? null : i)}>\n {item.icon && <span>{item.icon}</span>}{item.value} <span style={{ fontSize: 9 }}>▼</span>\n </button>\n {openMenu === i && <MenuDropdown items={item.items} onSelect={() => setOpenMenu(null)} style={{ top: \"100%\" }} />}\n </div>\n );\n return (\n <button key={i} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 36, gap: 6, color: T.text }} onClick={() => item.onClick?.()}>\n {item.icon && <span style={{ fontSize: 16 }}>{item.icon}</span>}\n {item.value && <span style={{ fontSize: 13 }}>{item.value}</span>}\n </button>\n );\n };\n\n return (\n <nav ref={ref} className=\"dhx\" style={{ display: \"flex\", flexDirection: vertical ? \"column\" : \"row\", alignItems: vertical ? \"stretch\" : \"center\", background: T.surface, borderBottom: vertical ? \"none\" : `1px solid ${T.border}`, borderRight: vertical ? `1px solid ${T.border}` : \"none\", padding: vertical ? \"12px 0\" : \"0 12px\", minHeight: vertical ? undefined : 48, gap: 2, ...style }}>\n {logo && <div style={{ color: T.text, fontWeight: 800, fontSize: 16, padding: vertical ? \"8px 16px\" : \"0 12px 0 4px\", borderRight: vertical ? \"none\" : `1px solid ${T.border}`, marginRight: vertical ? 0 : 8 }}>{logo}</div>}\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","Toolbar","items","renderItem","item","i","jsx","e","_a","o","active","Sidebar","width","collapsedProp","onSelect","header","footer","collapsed","setCollapsed","useState","selected","setSelected","expanded","setExpanded","w","handleSelect","depth","hasChildren","isExpanded","isSelected","x","child","c","LayoutCell","config","Layout","rows","cols","type","gap","cells","isRow","cell","Tabbar","views","mode","tabAlign","closable","defaultActive","onBeforeChange","onChange","setActive","openTabs","setOpenTabs","v","handleClose","id","t","handleChange","isVertical","visibleViews","tabBar","isActive","isDis","activeStyle","activeView","content","B","SortArrows","dir","Grid","columns","data","height","rowHeight","sortable","resizable","editable","stripe","autoWidth","keyNavigation","selection","multiselect","sortKey","setSortKey","sortDir","setSortDir","filter","setFilter","focusRow","setFocusRow","colWidths","setColWidths","editCell","setEditCell","editValue","setEditValue","edits","setEdits","containerRef","useRef","containerW","setContainerW","ro","widths","useMemo","total","a","b","extra","sorted","row","key","k","av","bv","cmp","colStats","col","f","nums","r","n","sum","selectOpts","hasFilters","hasFooter","totalW","rowKey","ri","handleSort","d","selectRow","rk","ns","commitEdit","colId","handleKeyDown","next","prev","startResize","ci","startX","startW","move","me","ws","nw","up","cs","wi","first","isSel","rowBg","isEditing","rawVal","display","stats","COLORS","Chart","series","scales","legend","xKey","tip","Tooltip","leg","Legend","grid","CartesianGrid","xAxis","XAxis","yAxis","YAxis","_b","_c","common","chart","BarChart","Bar","LineChart","Line","AreaChart","Area","firstRow","pieDataKey","pieNameKey","PieChart","Pie","name","percent","_","Cell","RadarChart","PolarGrid","PolarAngleAxis","Radar","ScatterChart","_d","_e","Scatter","ResponsiveContainer","MONTHS","DAYS","Calendar","value","range","timepicker","today","initDate","view","setView","hovDate","setHovDate","time","setTime","year","month","firstDay","daysInMonth","isToday","dv","handleDay","sel","isHov","Timepicker","timeFormat","controls","minuteStep","h","setH","m","setM","ampm","setAmpm","pending","setPending","hours","mins","newH","newM","newAmpm","val","handleCancel","colStyle","cellStyle","useClickOutside","ref","callback","handler","useDrag","onDrag","dragging","origin","useCallback","originX","originY","y","ox","oy","Chevron","open","Combobox","valueProp","placeholder","multiselection","label","setOpen","query","setQuery","inputRef","filtered","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","idx","MenuDropdown","hov","setHov","Menu","ContextMenu","pos","setPos","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","handleClick","isFoc","DataView","itemsInRow","Tree","checkbox","onCheck","checked","setChecked","editingId","setEditingId","toggle","handleCheck","renderNode","node","isExp","Pagination","pageSize","pageProp","page","setPage","totalPages","goTo","p","np","pages","Form","defaultValues","onSubmit","values","setValues","errors","setErrors","openPicker","setOpenPicker","validate","errs","renderField","field","err","lw","inline","labelStyle","labelEl","errEl","helpEl","wrap","tv","hasVal","options","isOn","txt","Switch","renderRows","on","collectSubItems","result","Ribbon","onAction","activeMap","setActiveMap","map","si","sameGroup","block","sub","j","Navbar","logo","vertical","openMenu","setOpenMenu"],"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/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/hooks/useClickOutside.ts","../src/hooks/useDrag.ts","../src/components/Combobox/Combobox.tsx","../src/components/Slider/Slider.tsx","../src/components/Colorpicker/Colorpicker.tsx","../src/components/Menu/Menu.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 } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface ToolbarItem {\n id?: string;\n type?: \"separator\" | \"spacer\" | \"input\" | \"select\";\n text?: string;\n icon?: React.ReactNode;\n active?: boolean;\n twoState?: boolean;\n disabled?: boolean;\n label?: string;\n placeholder?: string;\n value?: string;\n width?: number;\n options?: { value: string; label: string }[];\n onClick?: (item: ToolbarItem) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface ToolbarProps {\n items?: ToolbarItem[];\n style?: React.CSSProperties;\n}\n\nexport function Toolbar({ items = [], style }: ToolbarProps) {\n useEffect(injectStyles, []);\n\n const renderItem = (item: ToolbarItem, i: number) => {\n if (item.type === \"separator\")\n return <div key={i} style={{ width: 1, background: T.border, margin: \"6px 4px\", alignSelf: \"stretch\" }} />;\n if (item.type === \"spacer\")\n return <div key={i} style={{ flex: 1 }} />;\n if (item.type === \"input\")\n 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 <input className=\"dhx dhx-input\" style={{ width: item.width || 140, height: 28 }}\n placeholder={item.placeholder} defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)} />\n </div>\n );\n if (item.type === \"select\")\n return (\n <select key={i} className=\"dhx dhx-input\" style={{ width: item.width || 100, height: 28, cursor: \"pointer\" }}\n defaultValue={item.value} onChange={e => item.onChange?.(e.target.value)}>\n {item.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n );\n const active = item.active;\n return (\n <button key={i} className={`dhx dhx-btn ${active ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`}\n style={{ height: 32, gap: 4, ...(item.twoState && active ? { background: T.primaryLt, color: T.primary, borderColor: `${T.primary}66` } : {}) }}\n disabled={item.disabled} onClick={() => item.onClick?.(item)}>\n {item.icon && <span style={{ fontSize: 16 }}>{item.icon}</span>}\n {item.text && <span>{item.text}</span>}\n </button>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"center\", gap: 2, padding: \"4px 8px\", background: T.surface, borderBottom: `1px solid ${T.border}`, minHeight: 44, flexWrap: \"wrap\", ...style }}>\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SidebarItem {\n id: string;\n value?: string;\n icon?: React.ReactNode;\n count?: number;\n type?: \"separator\" | \"customHTML\";\n html?: string;\n items?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items?: SidebarItem[];\n width?: number;\n collapsed?: boolean;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n onSelect?: (item: SidebarItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Sidebar({ items = [], width = 240, collapsed: collapsedProp, onSelect, header, footer, style }: SidebarProps) {\n const [collapsed, setCollapsed] = useState(collapsedProp ?? false);\n const [selected, setSelected] = useState<string | null>(null);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n useEffect(injectStyles, []);\n\n const w = collapsed ? 56 : width;\n const handleSelect = (item: SidebarItem) => { setSelected(item.id); onSelect?.(item); };\n\n const renderItem = (item: SidebarItem, depth = 0): React.ReactNode => {\n if (item.type === \"separator\") return <div key={item.id} style={{ height: 1, background: T.border, margin: \"6px 8px\" }} />;\n if (item.type === \"customHTML\") return <div key={item.id} style={{ padding: \"8px 12px\" }} dangerouslySetInnerHTML={{ __html: item.html || \"\" }} />;\n const hasChildren = (item.items?.length ?? 0) > 0;\n const isExpanded = expanded[item.id];\n const isSelected = selected === item.id;\n return (\n <div key={item.id}>\n <div onClick={() => { if (hasChildren) setExpanded(x => ({ ...x, [item.id]: !x[item.id] })); handleSelect(item); }}\n style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: `8px ${collapsed ? \"0px\" : `${12 + depth * 16}px`}`, cursor: \"pointer\", borderRadius: T.r, margin: \"1px 6px\", justifyContent: collapsed ? \"center\" : \"flex-start\", transition: \"all .15s\", background: isSelected ? T.primaryLt : \"transparent\", color: isSelected ? T.primary : T.text, userSelect: \"none\" }}\n onMouseEnter={e => !isSelected && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSelected && (e.currentTarget.style.background = \"transparent\")}>\n {item.icon && <span style={{ fontSize: 18, minWidth: 22, textAlign: \"center\" }}>{item.icon}</span>}\n {!collapsed && <span style={{ flex: 1, fontSize: 13, fontWeight: isSelected ? 600 : 400 }}>{item.value}</span>}\n {!collapsed && item.count !== undefined && <span style={{ background: T.primary, color: \"#fff\", borderRadius: 10, padding: \"1px 6px\", fontSize: 11, fontWeight: 700 }}>{item.count}</span>}\n {!collapsed && hasChildren && <span style={{ fontSize: 12, color: T.textMut, transition: \"transform .15s\", transform: isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\" }}>▶</span>}\n </div>\n {hasChildren && isExpanded && !collapsed && item.items!.map(child => renderItem(child, depth + 1))}\n </div>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ width: w, minWidth: w, background: T.surface, borderRight: `1px solid ${T.border}`, display: \"flex\", flexDirection: \"column\", transition: \"width .2s ease\", overflow: \"hidden\", ...style }}>\n {header && !collapsed && <div style={{ padding: \"12px 14px\", borderBottom: `1px solid ${T.border}`, fontWeight: 700, fontSize: 15 }}>{header}</div>}\n <button onClick={() => setCollapsed(c => !c)} style={{ margin: \"8px 6px\", background: \"transparent\", border: \"none\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: collapsed ? \"center\" : \"flex-end\", padding: \"4px 6px\", borderRadius: T.r, color: T.textSec }}>\n <span style={{ fontSize: 18 }}>{collapsed ? \"☰\" : \"✕\"}</span>\n </button>\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", overflowX: \"hidden\" }}>{items.map(item => renderItem(item))}</div>\n {footer && !collapsed && <div style={{ padding: \"10px 14px\", borderTop: `1px solid ${T.border}` }}>{footer}</div>}\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 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?: { text: string; align?: \"left\" | \"center\" | \"right\" }[] | 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 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 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 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\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\nexport function Grid({\n columns, data = [], height = 400, rowHeight = 40,\n sortable = true, resizable = true, editable = false,\n stripe = false, autoWidth = false, keyNavigation = false,\n selection, multiselect, 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(() => columns.map(c => c.width ?? c.minWidth ?? 150));\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 /* auto-width: observe container */\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 /* effective widths (autoWidth distributes leftover space) */\n const widths = useMemo(() => {\n if (!autoWidth || containerW === 0) return colWidths;\n const total = colWidths.reduce((a, b) => a + b, 0);\n if (containerW <= total) return colWidths;\n const extra = (containerW - total) / columns.length;\n return colWidths.map(w => w + extra);\n }, [autoWidth, containerW, colWidths, columns.length]);\n\n /* sorted + filtered rows (with inline edits applied) */\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]) => !v || String(row[k] ?? \"\").toLowerCase().includes(v.toLowerCase()))\n );\n if (sortKey) {\n rows = [...rows].sort((a, b) => {\n const av = a[sortKey], bv = b[sortKey];\n if (av == null) return 1;\n if (bv == null) return -1;\n const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, sortKey, sortDir, filter, edits]);\n\n /* footer aggregation stats */\n const colStats = useMemo(() => {\n const s: Record<string, { sum: number; avg: number; count: number; min: number; max: number }> = {};\n columns.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, columns]);\n\n /* select filter options */\n const selectOpts = useMemo(() => {\n const o: Record<string, string[]> = {};\n columns.filter(c => c.filterType === \"select\").forEach(col => {\n o[col.id] = [...new Set(data.map(r => String(r[col.id] ?? \"\")))].sort();\n });\n return o;\n }, [data, columns]);\n\n const hasFilters = columns.some(c => c.filterable);\n const hasFooter = columns.some(c => c.footer?.length);\n const totalW = widths.reduce((a, b) => a + b, 0);\n\n const rowKey = (row: Record<string, unknown>, ri: number): string | number =>\n (row.id as string | number) ?? ri;\n\n /* sort */\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 /* selection */\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 /* edit commit */\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 /* keyboard navigation */\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 /* column resize */\n const startResize = (e: React.MouseEvent, ci: number) => {\n e.preventDefault();\n e.stopPropagation();\n const startX = e.clientX, startW = colWidths[ci];\n const move = (me: MouseEvent) => setColWidths(ws => {\n const nw = [...ws];\n nw[ci] = Math.max(columns[ci].minWidth || 50, startW + me.clientX - startX);\n return nw;\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 /* shared cell style */\n const cs = (wi: number, col: GridColumn, first: boolean, height: number): React.CSSProperties => ({\n width: wi, minWidth: wi, flexShrink: 0, boxSizing: \"border-box\",\n padding: \"0 12px\", height, display: \"flex\", alignItems: \"center\",\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n fontSize: 13, textAlign: col.align,\n justifyContent: col.align === \"center\" ? \"center\" : col.align === \"right\" ? \"flex-end\" : \"flex-start\",\n borderLeft: first ? \"none\" : B,\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 style={{ overflowX: \"auto\", flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <div style={{ minWidth: totalW, display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\n\n {/* ── Header ── */}\n <div style={{ display: \"flex\", background: T.bg, borderBottom: B, flexShrink: 0, position: \"sticky\", top: 0, zIndex: 2 }}>\n {columns.map((col, i) => (\n <div key={col.id}\n onClick={() => handleSort(col)}\n style={{\n ...cs(widths[i], col, i === 0, 40),\n position: \"relative\",\n fontWeight: 500, color: T.text,\n cursor: sortable && col.sortable !== false ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}>\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {Array.isArray(col.header) ? col.header[0]?.text : (col.header || col.id)}\n </span>\n {sortable && col.sortable !== false && (\n <SortArrows active={sortKey === col.id} dir={sortDir} />\n )}\n {resizable && col.resizable !== false && i < columns.length - 1 && (\n <div\n onMouseDown={e => startResize(e, i)}\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 </div>\n ))}\n </div>\n\n {/* ── Filter row ── */}\n {hasFilters && (\n <div style={{ display: \"flex\", borderBottom: B, background: T.surface, flexShrink: 0 }}>\n {columns.map((col, i) => (\n <div key={col.id} style={{ width: widths[i], minWidth: widths[i], flexShrink: 0, padding: \"4px 6px\", boxSizing: \"border-box\", borderLeft: i === 0 ? \"none\" : B }}>\n {col.filterable && col.filterType === \"select\" ? (\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 ) : col.filterable ? (\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 </div>\n )}\n\n {/* ── Body ── */}\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\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 {columns.map((col, ci) => {\n const isEditing = editCell?.key === rk && editCell?.colId === col.id;\n const rawVal = row[col.id];\n const display = col.template ? col.template(rawVal, row) : String(rawVal ?? \"\");\n return (\n <div key={col.id}\n onClick={() => {\n selectRow(row, ri);\n if (editable && col.editable !== false) {\n setEditCell({ key: rk, colId: col.id });\n setEditValue(String(rawVal ?? \"\"));\n }\n }}\n style={cs(widths[ci], col, ci === 0, rowHeight)}>\n {isEditing ? (\n <input\n autoFocus\n value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditCell(null); }}\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 ) : display}\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 }}>\n {columns.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 return (\n <div key={col.id} style={{ ...cs(widths[i], col, i === 0, 40), fontWeight: 600, color: T.text }}>\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,\n ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n ResponsiveContainer,\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;\n label?: string;\n color?: string;\n fill?: string;\n data?: Record<string, unknown>[];\n xValue?: string;\n yValue?: string;\n}\n\nexport interface ChartScales {\n bottom?: { text?: string };\n left?: { min?: number; max?: number };\n}\n\nexport interface ChartLegend {\n halign?: \"left\" | \"center\" | \"right\";\n valign?: \"top\" | \"middle\" | \"bottom\";\n}\n\nexport type ChartType = \"bar\" | \"line\" | \"area\" | \"pie\" | \"donut\" | \"radar\" | \"scatter\";\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\nexport function Chart({ type = \"bar\", data = [], series = [], scales = {}, legend, height = 280, style }: ChartProps) {\n useEffect(injectStyles, []);\n\n const xKey = scales.bottom?.text || (data[0] && Object.keys(data[0])[0]) || \"x\";\n const tip = <Tooltip contentStyle={{ fontSize: 12, borderRadius: T.r, border: `1px solid ${T.border}` }} />;\n const leg = legend ? <Legend iconSize={10} wrapperStyle={{ fontSize: 12 }} verticalAlign={legend.valign} align={legend.halign} /> : null;\n const grid = <CartesianGrid strokeDasharray=\"3 3\" stroke={T.border} />;\n const xAxis = <XAxis dataKey={xKey} tick={{ fontSize: 11, fill: T.textSec }} axisLine={{ stroke: T.border }} tickLine={false} />;\n const yAxis = <YAxis tick={{ fontSize: 11, fill: T.textSec }} axisLine={false} tickLine={false} domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]} />;\n const common = { data, margin: { top: 10, right: 20, left: 0, bottom: 0 } };\n\n let chart: React.ReactNode;\n\n if (type === \"bar\") {\n chart = <BarChart {...common}>{grid}{xAxis}{yAxis}{tip}{leg}{series.map((s, i) => <Bar key={s.id} dataKey={s.value || s.id} name={s.label || s.id} fill={s.fill || COLORS[i % COLORS.length]} radius={[3,3,0,0]} />)}</BarChart>;\n } else if (type === \"line\") {\n chart = <LineChart {...common}>{grid}{xAxis}{yAxis}{tip}{leg}{series.map((s, i) => <Line key={s.id} type=\"monotone\" dataKey={s.value || s.id} name={s.label || s.id} stroke={s.color || COLORS[i % COLORS.length]} strokeWidth={2} dot={{ r: 3, fill: s.color || COLORS[i % COLORS.length] }} />)}</LineChart>;\n } else if (type === \"area\") {\n chart = <AreaChart {...common}>{grid}{xAxis}{yAxis}{tip}{leg}{series.map((s, i) => <Area key={s.id} type=\"monotone\" dataKey={s.value || s.id} name={s.label || s.id} stroke={s.color || COLORS[i % COLORS.length]} fill={(s.fill || COLORS[i % COLORS.length]) + \"33\"} strokeWidth={2} />)}</AreaChart>;\n } else if (type === \"pie\" || type === \"donut\") {\n const firstRow = data[0] || {};\n const pieDataKey = Object.keys(firstRow).find(k => typeof firstRow[k] === \"number\") || \"value\";\n const pieNameKey = Object.keys(firstRow).find(k => typeof firstRow[k] === \"string\") || \"x\";\n chart = (\n <PieChart>\n <Pie data={data} cx=\"50%\" cy=\"50%\"\n outerRadius={type === \"donut\" ? \"70%\" : \"80%\"}\n innerRadius={type === \"donut\" ? \"40%\" : 0}\n dataKey={pieDataKey} nameKey={pieNameKey}\n label={({ name, percent }: { name?: string; percent?: number }) => `${name ?? \"\"} ${((percent ?? 0) * 100).toFixed(0)}%`}\n labelLine paddingAngle={2}>\n {data.map((_, i) => <Cell key={i} fill={COLORS[i % COLORS.length]} />)}\n </Pie>\n {tip}{leg}\n </PieChart>\n );\n } else if (type === \"radar\") {\n chart = <RadarChart {...common} cx=\"50%\" cy=\"50%\"><PolarGrid /><PolarAngleAxis dataKey={xKey} tick={{ fontSize: 11 }} />{series.map((s, i) => <Radar key={s.id} dataKey={s.value || s.id} name={s.label || s.id} stroke={s.color || COLORS[i]} fill={(s.fill || COLORS[i]) + \"44\"} />)}{tip}{leg}</RadarChart>;\n } else if (type === \"scatter\") {\n chart = <ScatterChart {...common}>{grid}<XAxis dataKey={series[0]?.xValue || \"x\"} type=\"number\" tick={{ fontSize: 11, fill: T.textSec }} /><YAxis dataKey={series[0]?.yValue || \"y\"} tick={{ fontSize: 11, fill: T.textSec }} />{tip}{series.map((s, i) => <Scatter key={s.id} data={(s.data as never[] | undefined) || data as never[]} name={s.label || s.id} fill={s.color || COLORS[i]} />)}</ScatterChart>;\n }\n\n return (\n <div className=\"dhx\" style={{ width: \"100%\", height, padding: 12, background: T.surface, borderRadius: T.rMd, ...style }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">{chart as React.ReactElement}</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={() => pending && onChange?.(pending)}>Apply</button>\n </div>\n )}\n </div>\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, 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 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 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: modal ? \"50%\" : `calc(50% + ${pos.x}px)`, top: modal ? \"50%\" : `calc(50% + ${pos.y}px)`, 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;\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 validate = () => {\n const errs: Record<string, string> = {};\n (config.rows || []).flat().forEach(f => {\n if (f && typeof f === \"object\" && \"name\" in f && 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 text?: string;\n icon?: React.ReactNode;\n active?: boolean;\n twoState?: boolean;\n group?: string;\n disabled?: boolean;\n tooltip?: string;\n label?: string;\n size?: \"large\" | \"auto\";\n placeholder?: string;\n value?: string;\n width?: number;\n items?: { value: string }[];\n onClick?: (item: RibbonSubItem) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface RibbonBlock {\n type: \"block\";\n label?: string;\n direction?: \"col\" | \"row\";\n items?: RibbonSubItem[];\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\nfunction collectSubItems(items: RibbonItem[]): RibbonSubItem[] {\n const result: RibbonSubItem[] = [];\n for (const item of items) {\n if (\"type\" in item && item.type === \"block\") {\n result.push(...((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 collectSubItems(items)) {\n if (si.id) map[si.id] = !!si.active;\n }\n return map;\n });\n\n const handleClick = (si: RibbonSubItem) => {\n if (si.id) {\n if (si.group) {\n const sameGroup = collectSubItems(items).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 const renderItem = (item: RibbonItem, i: number): React.ReactNode => {\n if (\"type\" in item && (item.type === \"separator\" || item.type === \"sep\"))\n return <div key={i} style={{ width: 1, background: T.border, margin: \"8px 4px\", alignSelf: \"stretch\" }} />;\n\n if (\"type\" in item && item.type === \"input\") {\n const si = item as RibbonSubItem;\n return (\n <div key={i} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", padding: \"4px 6px\", gap: 4 }}>\n {si.label && <span style={{ fontSize: 10, color: T.textMut }}>{si.label}</span>}\n <input className=\"dhx dhx-input\" style={{ width: si.width || 110, height: 26, fontSize: 12 }} placeholder={si.placeholder} defaultValue={si.value} onChange={e => si.onChange?.(e.target.value)} />\n </div>\n );\n }\n\n if (\"type\" in item && item.type === \"block\") {\n const block = item as RibbonBlock;\n return (\n <div key={i} style={{ display: \"flex\", flexDirection: block.direction === \"col\" ? \"column\" : \"row\", alignItems: \"center\", gap: 4, padding: \"4px 8px\", borderRight: `1px solid ${T.border}`, minHeight: 64 }}>\n <div style={{ display: \"flex\", gap: 2 }}>{block.items?.map((sub, j) => renderItem(sub, j))}</div>\n {block.label && <span style={{ fontSize: 10, color: T.textMut, marginTop: 2 }}>{block.label}</span>}\n </div>\n );\n }\n\n if (\"type\" in item && item.type === \"selectButton\") {\n const si = item as RibbonSubItem;\n return (\n <select key={i} className=\"dhx dhx-input\" style={{ height: 28, fontSize: 12, cursor: \"pointer\", margin: 2 }} defaultValue={si.value} onChange={e => si.onChange?.(e.target.value)}>\n {si.items?.map(o => <option key={o.value} value={o.value}>{o.value}</option>)}\n </select>\n );\n }\n\n const si = item as RibbonSubItem;\n const isActive = si.id !== undefined ? (activeMap[si.id] ?? !!si.active) : !!si.active;\n return (\n <button key={i} title={si.tooltip} className={`dhx dhx-btn ${isActive ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`}\n style={{ flexDirection: \"column\", minHeight: 48, padding: \"4px 8px\", gap: 4, fontSize: 12 }}\n disabled={si.disabled} onClick={() => handleClick(si)}>\n {si.icon && <span style={{ fontSize: si.size === \"large\" ? 24 : 18 }}>{si.icon}</span>}\n {si.text && <span style={{ fontSize: 10, maxWidth: 60, textAlign: \"center\", lineHeight: 1.2, whiteSpace: \"normal\" }}>{si.text}</span>}\n </button>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"stretch\", background: T.bg, borderBottom: `1px solid ${T.border}`, padding: \"4px 0\", overflowX: \"auto\", gap: 0, ...style }}>\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={() => setOpenMenu(null)}\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","Toolbar","items","renderItem","item","i","jsx","e","_a","o","active","Sidebar","width","collapsedProp","onSelect","header","footer","collapsed","setCollapsed","useState","selected","setSelected","expanded","setExpanded","w","handleSelect","depth","hasChildren","isExpanded","isSelected","x","child","c","LayoutCell","config","Layout","rows","cols","type","gap","cells","isRow","cell","Tabbar","views","mode","tabAlign","closable","defaultActive","onBeforeChange","onChange","setActive","openTabs","setOpenTabs","v","handleClose","id","t","handleChange","isVertical","visibleViews","tabBar","isActive","isDis","activeStyle","activeView","content","B","SortArrows","dir","Grid","columns","data","height","rowHeight","sortable","resizable","editable","stripe","autoWidth","keyNavigation","selection","multiselect","sortKey","setSortKey","sortDir","setSortDir","filter","setFilter","focusRow","setFocusRow","colWidths","setColWidths","editCell","setEditCell","editValue","setEditValue","edits","setEdits","containerRef","useRef","containerW","setContainerW","ro","widths","useMemo","total","a","b","extra","sorted","row","key","k","av","bv","cmp","colStats","col","f","nums","r","n","sum","selectOpts","hasFilters","hasFooter","totalW","rowKey","ri","handleSort","d","selectRow","rk","ns","commitEdit","colId","handleKeyDown","next","prev","startResize","ci","startX","startW","move","me","ws","nw","up","cs","wi","first","isSel","rowBg","isEditing","rawVal","display","stats","COLORS","Chart","series","scales","legend","xKey","tip","Tooltip","leg","Legend","grid","CartesianGrid","xAxis","XAxis","yAxis","YAxis","_b","_c","common","chart","BarChart","Bar","LineChart","Line","AreaChart","Area","firstRow","pieDataKey","pieNameKey","PieChart","Pie","name","percent","_","Cell","RadarChart","PolarGrid","PolarAngleAxis","Radar","ScatterChart","_d","_e","Scatter","ResponsiveContainer","MONTHS","DAYS","Calendar","value","range","timepicker","today","initDate","view","setView","hovDate","setHovDate","time","setTime","year","month","firstDay","daysInMonth","isToday","dv","handleDay","sel","isHov","Timepicker","timeFormat","controls","minuteStep","h","setH","m","setM","ampm","setAmpm","pending","setPending","hours","mins","newH","newM","newAmpm","val","handleCancel","colStyle","cellStyle","useClickOutside","ref","callback","handler","useDrag","onDrag","dragging","origin","useCallback","originX","originY","y","ox","oy","Chevron","open","Combobox","valueProp","placeholder","multiselection","label","setOpen","query","setQuery","inputRef","filtered","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","idx","MenuDropdown","hov","setHov","Menu","ContextMenu","pos","setPos","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","handleClick","isFoc","DataView","itemsInRow","cloneTree","nodes","collectExpanded","result","removeNode","removed","newItems","insertNode","targetId","node","isAncestor","ancestorId","check","hasDesc","updateValue","childStats","checked","checkedCount","visit","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","isExp","isDragging","isDrop","isChecked","isIndet","dropShadow","el","Pagination","pageSize","pageProp","page","setPage","totalPages","goTo","np","pages","p","Form","defaultValues","onSubmit","values","setValues","errors","setErrors","openPicker","setOpenPicker","validate","errs","renderField","field","err","lw","inline","labelStyle","labelEl","errEl","helpEl","wrap","tv","hasVal","options","isOn","txt","Switch","renderRows","on","collectSubItems","Ribbon","onAction","activeMap","setActiveMap","map","si","sameGroup","block","sub","j","Badge","count","Navbar","logo","vertical","openMenu","setOpenMenu","activeItems","setActiveItems","init","hasDropdown","btnStyle"],"mappings":"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"}
|