dhx-react-suite 1.0.0
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/README.md +143 -0
- package/dist/dhx-react-suite.js +1171 -0
- package/dist/dhx-react-suite.js.map +1 -0
- package/dist/dhx-react-suite.umd.cjs +42 -0
- package/dist/dhx-react-suite.umd.cjs.map +1 -0
- package/dist/index.d.ts +551 -0
- package/package.json +75 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dhx-react-suite.umd.cjs","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 GridColumn {\n id: string;\n header?: { text: string }[] | string;\n width?: number;\n minWidth?: number;\n sortable?: boolean;\n filterable?: boolean;\n resizable?: 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 selection?: \"row\" | \"cell\";\n multiselect?: boolean;\n onSelect?: (row: Record<string, unknown>) => void;\n style?: React.CSSProperties;\n}\n\nexport function Grid({ columns, data = [], height = 400, rowHeight = 40, sortable = true, resizable = true, selection, multiselect, onSelect, style }: 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 [colWidths, setColWidths] = useState(columns.map(c => c.width || c.minWidth || 140));\n useEffect(injectStyles, []);\n\n const sorted = useMemo(() => {\n let rows = data.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; if (bv == null) return -1;\n return sortDir === \"asc\" ? (av < bv ? -1 : av > bv ? 1 : 0) : (av > bv ? -1 : av < bv ? 1 : 0);\n });\n }\n return rows;\n }, [data, sortKey, sortDir, filter]);\n\n const handleSort = (col: GridColumn) => {\n if (!sortable || col.sortable === false) return;\n setSortDir(d => sortKey === col.id ? (d === \"asc\" ? \"desc\" : \"asc\") : \"asc\");\n setSortKey(col.id);\n };\n\n const handleRowClick = (row: Record<string, unknown>, ri: number) => {\n if (!selection) return;\n const id = (row.id as string | number) ?? ri;\n setSelected(s => {\n const ns = multiselect ? new Set(s) : new Set<string | number>();\n ns.has(id) ? ns.delete(id) : ns.add(id);\n return ns;\n });\n onSelect?.(row);\n };\n\n const startResize = (e: React.MouseEvent, colIdx: number) => {\n const startX = e.clientX;\n const startW = colWidths[colIdx];\n const move = (me: MouseEvent) => setColWidths(ws => { const nw = [...ws]; nw[colIdx] = Math.max(60, startW + me.clientX - startX); return nw; });\n const up = () => { document.removeEventListener(\"mousemove\", move); document.removeEventListener(\"mouseup\", up); };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n e.preventDefault();\n };\n\n const hasFilters = columns.some(c => c.filterable !== false);\n\n return (\n <div className=\"dhx\" style={{ width: \"100%\", height, display: \"flex\", flexDirection: \"column\", border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\", ...style }}>\n <div style={{ overflowX: \"auto\", flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n <div style={{ minWidth: colWidths.reduce((a, b) => a + b, 0) + \"px\", display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\n {/* Header */}\n <div style={{ display: \"flex\", background: T.bg, borderBottom: `1px solid ${T.border}`, position: \"sticky\", top: 0, zIndex: 2 }}>\n {columns.map((col, i) => (\n <div key={col.id} style={{ width: colWidths[i], minWidth: colWidths[i], position: \"relative\", padding: \"0 10px\", height: 40, display: \"flex\", alignItems: \"center\", fontSize: 12, fontWeight: 600, color: T.textSec, cursor: sortable && col.sortable !== false ? \"pointer\" : \"default\", userSelect: \"none\", gap: 4 }}\n onClick={() => handleSort(col)}>\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 && <span style={{ opacity: sortKey === col.id ? 1 : .25, fontSize: 10 }}>{sortKey === col.id ? (sortDir === \"asc\" ? \"▲\" : \"▼\") : \"⇅\"}</span>}\n {resizable && i < columns.length - 1 && (\n <div onMouseDown={e => startResize(e, i)} style={{ position: \"absolute\", right: 0, top: 4, bottom: 4, width: 4, cursor: \"col-resize\", background: \"transparent\" }}\n onMouseEnter={e => (e.currentTarget.style.background = T.border)}\n onMouseLeave={e => (e.currentTarget.style.background = \"transparent\")} />\n )}\n </div>\n ))}\n </div>\n {/* Filter row */}\n {hasFilters && (\n <div style={{ display: \"flex\", borderBottom: `1px solid ${T.border}`, background: T.surface }}>\n {columns.map((col, i) => (\n <div key={col.id} style={{ width: colWidths[i], minWidth: colWidths[i], padding: \"4px 6px\" }}>\n {col.filterable !== false && <input className=\"dhx dhx-input\" style={{ height: 24, fontSize: 12 }} placeholder=\"🔍\" value={filter[col.id] || \"\"} onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))} />}\n </div>\n ))}\n </div>\n )}\n {/* Body */}\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\" }}>\n {sorted.map((row, ri) => {\n const rowId = (row.id as string | number) ?? ri;\n const isSel = selected.has(rowId);\n return (\n <div key={String(rowId)} onClick={() => handleRowClick(row, ri)}\n style={{ display: \"flex\", height: rowHeight, alignItems: \"center\", borderBottom: `1px solid ${T.border}`, cursor: selection ? \"pointer\" : \"default\", background: isSel ? T.primaryLt : ri % 2 === 0 ? T.surface : T.bg, transition: \"background .1s\" }}\n onMouseEnter={e => !isSel && (e.currentTarget.style.background = \"#f0f8ff\")}\n onMouseLeave={e => !isSel && (e.currentTarget.style.background = ri % 2 === 0 ? T.surface : T.bg)}>\n {columns.map((col, ci) => (\n <div key={col.id} style={{ width: colWidths[ci], minWidth: colWidths[ci], padding: \"0 10px\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\", fontSize: 13, textAlign: col.align || \"left\" }}>\n {col.template ? col.template(row[col.id], row) : String(row[col.id] ?? \"\")}\n </div>\n ))}\n </div>\n );\n })}\n {sorted.length === 0 && <div style={{ textAlign: \"center\", padding: 40, color: T.textMut }}>No data</div>}\n </div>\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 style?: React.CSSProperties;\n}\n\nexport function Timepicker({ value, onChange, style }: TimepickerProps) {\n const [h, setH] = useState(value?.h ?? 12);\n const [m, setM] = useState(value?.m ?? 0);\n const [ampm, setAmpm] = useState<\"AM\" | \"PM\">(value?.ampm ?? \"AM\");\n useEffect(injectStyles, []);\n\n const hours = Array.from({ length: 12 }, (_, i) => i + 1);\n const mins = Array.from({ length: 12 }, (_, i) => i * 5);\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 {([{ label: \"Hours\", values: hours, val: h, setFn: setH }, { label: \"Minutes\", values: mins, val: m, setFn: setM }] as const).map(({ label, values, val, setFn }) => (\n <div key={label} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: 4 }}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>{label}</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {values.map(v => (\n <div key={v} onClick={() => { setFn(v); onChange?.({ h: label === \"Hours\" ? v : h, m: label === \"Minutes\" ? v : m, ampm }); }}\n style={{ height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", cursor: \"pointer\", fontSize: 13, fontWeight: val === v ? 700 : 400, background: val === v ? T.primaryLt : \"transparent\", color: val === v ? T.primary : T.text }}\n onMouseEnter={e => val !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => val !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n ))}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\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); onChange?.({ h, m, ampm: 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 </div>\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\")} {ampm}\n </div>\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\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>(multiselection ? (valueProp ? ([] as string[]).concat(valueProp as string) : []) : (valueProp || null));\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n\n const filtered = useMemo(() => data.filter(d => !query || d.value.toLowerCase().includes(query.toLowerCase())), [data, query]);\n const isSelected = (id: string) => 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) ? (selected as string[]).filter(s => s !== key) : [...(selected as string[] || []), key];\n setSelected(ns); onChange?.(ns);\n } else { setSelected(key); setQuery(\"\"); setOpen(false); onChange?.(key); }\n };\n\n const displayValue = multiselection\n ? ((selected as string[])?.length ? `${(selected as string[]).length} selected` : \"\")\n : (data.find(d => (d.id || d.value) === selected)?.value || \"\");\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n <div onClick={() => setOpen(o => !o)} style={{ display: \"flex\", alignItems: \"center\", border: `1px solid ${open ? T.primary : T.border}`, borderRadius: T.r, height: 32, padding: \"0 10px\", cursor: \"pointer\", background: T.surface, gap: 6, transition: \"border-color .15s\", boxShadow: open ? `0 0 0 3px ${T.primary}22` : \"none\" }}>\n {multiselection && (selected as string[])?.length > 0 && (\n <div style={{ display: \"flex\", gap: 3, flex: 1, flexWrap: \"wrap\", overflow: \"hidden\" }}>\n {(selected as string[]).slice(0, 3).map(s => (\n <span key={s} className=\"dhx dhx-tag dhx-tag-primary\" style={{ fontSize: 10, padding: \"0 5px\" }}>\n {data.find(d => (d.id || d.value) === s)?.value || s}\n <span onClick={e => { e.stopPropagation(); handleSelect({ value: s }); }} style={{ cursor: \"pointer\", marginLeft: 3 }}>×</span>\n </span>\n ))}\n {(selected as string[]).length > 3 && <span className=\"dhx dhx-tag dhx-tag-primary\" style={{ fontSize: 10, padding: \"0 5px\" }}>+{(selected as string[]).length - 3}</span>}\n </div>\n )}\n {!multiselection && <input value={open ? query : displayValue} onChange={e => { setQuery(e.target.value); setOpen(true); }} onFocus={() => setOpen(true)} onClick={e => e.stopPropagation()} placeholder={placeholder} style={{ flex: 1, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text }} />}\n {multiselection && !(selected as string[])?.length && <span style={{ flex: 1, color: T.textMut, fontSize: 13 }}>{placeholder}</span>}\n <span style={{ color: T.textMut, fontSize: 12, marginLeft: \"auto\" }}>{open ? \"▲\" : \"▼\"}</span>\n </div>\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, right: 0, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, boxShadow: T.shadowLg, zIndex: 100, maxHeight: 220 }}>\n {multiselection && <div style={{ padding: \"6px 10px\", borderBottom: `1px solid ${T.border}` }}><input autoFocus className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12 }} placeholder=\"Search...\" value={query} onChange={e => setQuery(e.target.value)} /></div>}\n <div className=\"dhx-scroll\" style={{ maxHeight: 180, overflowY: \"auto\" }}>\n {filtered.map(item => (\n <div key={item.id || item.value} onClick={() => handleSelect(item)}\n style={{ padding: \"8px 12px\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: 8, fontSize: 13, background: isSelected(item.id || item.value) ? T.primaryLt : \"transparent\", color: isSelected(item.id || item.value) ? T.primary : T.text }}\n onMouseEnter={e => !isSelected(item.id || item.value) && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSelected(item.id || item.value) && (e.currentTarget.style.background = \"transparent\")}>\n {multiselection && <span style={{ width: 14, height: 14, border: `2px solid ${isSelected(item.id || item.value) ? T.primary : T.borderDk}`, borderRadius: 2, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", background: isSelected(item.id || item.value) ? T.primary : \"transparent\" }}>{isSelected(item.id || item.value) && <span style={{ color: \"#fff\", fontSize: 9 }}>✓</span>}</span>}\n {item.value}\n {item.count !== undefined && <span style={{ marginLeft: \"auto\", fontSize: 11, color: T.textMut }}>({item.count})</span>}\n </div>\n ))}\n {filtered.length === 0 && <div style={{ padding: 16, textAlign: \"center\", color: T.textMut, fontSize: 13 }}>No matches</div>}\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 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, 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 (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 return (\n <div className=\"dhx\" style={{ width: \"100%\", ...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: T.primary, borderRadius: 2 }} />\n {arr.map((v, i) => (\n <input key={i} type=\"range\" min={min} max={max} step={step} value={v}\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: \"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 ${T.primary}`, 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: 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, 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 T from \"../../tokens\";\n\nexport interface FormFieldOption { value: string; label?: string; }\n\nexport interface FormField {\n type?: \"input\" | \"textarea\" | \"select\" | \"checkbox\" | \"radio\" | \"slider\" | \"combo\" | \"datepicker\" | \"timepicker\" | \"fieldset\" | \"spacer\";\n name: string;\n label?: string;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n value?: unknown;\n inputType?: string;\n icon?: React.ReactNode;\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 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 useEffect(injectStyles, []);\n\n const set = (name: string, val: unknown) => { setValues(v => ({ ...v, [name]: val })); setErrors(e => ({ ...e, [name]: null })); };\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 });\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 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 const common = { key: field.name, className: \"dhx-form-group\" };\n const labelEl = field.label && <label className=\"dhx dhx-label\" style={{ display: \"flex\", gap: 4 }}>{field.label}{field.required && <span style={{ color: T.danger }}>*</span>}</label>;\n const errEl = err && <div style={{ fontSize: 11, color: T.danger, marginTop: 3 }}>{err}</div>;\n\n if (!field.type || field.type === \"input\") return (\n <div {...common}>\n {labelEl}\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\" : \"\"}`} style={{ borderColor: err ? T.danger : undefined }} type={field.inputType || \"text\"} placeholder={field.placeholder} value={val} onChange={e => set(field.name, e.target.value)} disabled={field.disabled} />\n </div>\n {field.helpMessage && <div style={{ fontSize: 11, color: T.textMut, marginTop: 3 }}>ⓘ {field.helpMessage}</div>}\n {errEl}\n </div>\n );\n\n if (field.type === \"textarea\") return (\n <div {...common}>{labelEl}<textarea className=\"dhx dhx-input\" style={{ height: 80, resize: \"vertical\", padding: \"8px 10px\" }} placeholder={field.placeholder} value={val} onChange={e => set(field.name, e.target.value)} />{errEl}</div>\n );\n\n if (field.type === \"select\") return (\n <div {...common}>{labelEl}\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>{errEl}\n </div>\n );\n\n if (field.type === \"checkbox\") return (\n <div {...common}><label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}><input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} /><span style={{ fontSize: 13 }}>{field.label}</span></label></div>\n );\n\n if (field.type === \"radio\") return (\n <div {...common}>{labelEl}\n <div style={{ display: \"flex\", gap: 16, flexWrap: \"wrap\" }}>\n {(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} onChange={() => set(field.name, o.value)} style={{ accentColor: T.primary, cursor: \"pointer\" }} />{o.label || o.value}\n </label>\n ))}\n </div>\n </div>\n );\n\n if (field.type === \"slider\") return (\n <div {...common}><Slider label={field.label} min={field.min} max={field.max} step={field.step} value={(val as unknown as number) || field.min} range={field.range} onChange={v => set(field.name, v)} /></div>\n );\n\n if (field.type === \"combo\") return (\n <div {...common}><Combobox label={field.label} data={field.data || []} multiselection={field.multiselection} placeholder={field.placeholder || \"Select...\"} value={(val as string) || (field.multiselection ? [] : null)} onChange={v => set(field.name, v)} />{errEl}</div>\n );\n\n if (field.type === \"datepicker\") return (\n <div {...common}>{labelEl}<input type=\"date\" className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} />{errEl}</div>\n );\n\n if (field.type === \"timepicker\") return (\n <div {...common}>{labelEl}<input type=\"time\" className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} /></div>\n );\n\n if (field.type === \"spacer\") return <div key={field.name} style={{ height: field.height || 16 }} />;\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)}>{config.submitText || \"Submit\"}</button>\n {config.resetButton !== false && <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => { setValues(defaultValues); setErrors({}); }}>{config.resetText || \"Reset\"}</button>}\n </div>\n )}\n </div>\n );\n}\n","import { 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 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\nexport function Ribbon({ items = [], onAction, style }: RibbonProps) {\n useEffect(injectStyles, []);\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 return (\n <div key={i} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", padding: \"4px 6px\", gap: 4 }}>\n {(item as RibbonSubItem).label && <span style={{ fontSize: 10, color: T.textMut }}>{(item as RibbonSubItem).label}</span>}\n <input className=\"dhx dhx-input\" style={{ width: (item as RibbonSubItem).width || 110, height: 26, fontSize: 12 }} placeholder={(item as RibbonSubItem).placeholder} defaultValue={(item as RibbonSubItem).value} onChange={e => (item as RibbonSubItem).onChange?.(e.target.value)} />\n </div>\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.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={() => { si.onClick?.(si); si.id && onAction?.(si.id, 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: \"rgba(255,255,255,.25)\", 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: \"#fff\" }} 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: \"#fff\" }} 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.primary, padding: vertical ? \"12px 0\" : \"0 12px\", minHeight: vertical ? undefined : 48, gap: 2, ...style }}>\n {logo && <div style={{ color: \"#fff\", fontWeight: 800, fontSize: 16, padding: vertical ? \"8px 16px\" : \"0 12px 0 4px\", borderRight: vertical ? \"none\" : \"1px solid rgba(255,255,255,.25)\", 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","Grid","columns","data","height","rowHeight","sortable","resizable","selection","multiselect","sortKey","setSortKey","sortDir","setSortDir","filter","setFilter","colWidths","setColWidths","sorted","useMemo","row","k","a","b","av","bv","handleSort","col","d","handleRowClick","ri","ns","startResize","colIdx","startX","startW","move","me","ws","nw","up","hasFilters","f","rowId","isSel","ci","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","h","setH","m","setM","ampm","setAmpm","hours","mins","label","values","val","setFn","useClickOutside","ref","callback","handler","useDrag","onDrag","dragging","useRef","origin","useCallback","originX","originY","y","ox","oy","Combobox","valueProp","placeholder","multiselection","open","setOpen","query","setQuery","filtered","key","displayValue","Slider","min","max","step","tick","setValue","update","nv","pct","arr","trackFill","PALETTE","hexToHsl","hex","r","l","hslToHex","n","Colorpicker","hsl","setHsl","set","lbl","mn","mx","idx","MenuDropdown","hov","setHov","Menu","ContextMenu","pos","setPos","show","Popup","trigger","placement","trigRef","toggle","placements","Window","title","movable","modal","defaultOpen","onClose","drag","Fragment","MessageContext","createContext","ICONS","MessageProvider","messages","setMessages","remove","add","opts","api","cb","useMessage","ctx","useContext","List","template","keyNavigation","editable","onEdit","editing","setEditing","editVal","setEditVal","focused","setFocused","handleClick","commitEdit","isFoc","DataView","itemsInRow","Tree","checkbox","onCheck","checked","setChecked","editingId","setEditingId","handleCheck","renderNode","node","isExp","Pagination","total","pageSize","pageProp","page","setPage","totalPages","goTo","p","np","pages","Form","defaultValues","onSubmit","setValues","errors","setErrors","validate","errs","renderField","field","err","labelEl","errEl","renderRows","Ribbon","onAction","block","sub","j","si","Navbar","logo","vertical","openMenu","setOpenMenu"],"mappings":"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"}
|