dhx-react-suite 1.1.5 → 1.1.6
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.
|
@@ -1 +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/hooks/useClickOutside.ts","../src/hooks/useDrag.ts","../src/components/Menu/Menu.tsx","../src/components/Toolbar/Toolbar.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Layout/Layout.tsx","../src/components/Tabbar/Tabbar.tsx","../src/components/Grid/Grid.tsx","../src/components/Chart/Chart.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Timepicker/Timepicker.tsx","../src/components/Combobox/Combobox.tsx","../src/components/Slider/Slider.tsx","../src/components/Colorpicker/Colorpicker.tsx","../src/components/Popup/Popup.tsx","../src/components/Window/Window.tsx","../src/components/Message/Message.tsx","../src/components/List/List.tsx","../src/components/DataView/DataView.tsx","../src/components/Tree/Tree.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Form/Form.tsx","../src/components/Ribbon/Ribbon.tsx","../src/components/Navbar/Navbar.tsx"],"sourcesContent":["/**\n * Design Tokens — single source of truth for colours, spacing and typography.\n *\n * @example Override for a dark/custom theme:\n * import { tokens } from \"dhx-react-suite\";\n * tokens.primary = \"#7c3aed\";\n */\nconst tokens = {\n primary: \"#0288d1\",\n primaryDk: \"#01579b\",\n primaryLt: \"#e1f5fe\",\n success: \"#43a047\",\n danger: \"#e53935\",\n warning: \"#fb8c00\",\n bg: \"#f5f7fa\",\n surface: \"#ffffff\",\n border: \"#dde3ea\",\n borderDk: \"#b0bec5\",\n text: \"#3d4a5c\",\n textSec: \"#6b7a8d\",\n textMut: \"#9aa5b1\",\n shadow: \"0 2px 8px rgba(0,0,0,.10)\",\n shadowLg: \"0 8px 28px rgba(0,0,0,.14)\",\n r: \"4px\",\n rMd: \"8px\",\n font: \"'Segoe UI', system-ui, -apple-system, sans-serif\",\n};\n\nexport type Tokens = typeof tokens;\nexport default tokens;\n","import T from \"../tokens\";\n\nconst STYLE_ID = \"dhx-react-styles\";\n\n/** Injects a single <style> tag into <head>. Safe to call multiple times. */\nexport function injectStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const s = document.createElement(\"style\");\n s.id = STYLE_ID;\n s.textContent = `\n *,*::before,*::after{box-sizing:border-box}\n .dhx{font-family:${T.font};font-size:14px;color:${T.text}}\n .dhx *{box-sizing:border-box}\n .dhx-scroll::-webkit-scrollbar{width:6px;height:6px}\n .dhx-scroll::-webkit-scrollbar-track{background:${T.bg}}\n .dhx-scroll::-webkit-scrollbar-thumb{background:${T.borderDk};border-radius:3px}\n .dhx-scroll::-webkit-scrollbar-thumb:hover{background:${T.textMut}}\n @keyframes dhx-fade{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n @keyframes dhx-spin{to{transform:rotate(360deg)}}\n @keyframes dhx-toast{from{opacity:0;transform:translateX(110%)}to{opacity:1;transform:translateX(0)}}\n @keyframes dhx-pulse{0%,100%{opacity:1}50%{opacity:.5}}\n .dhx-anim-fade{animation:dhx-fade .15s ease}\n .dhx-btn{display:inline-flex;align-items:center;gap:5px;padding:0 12px;height:32px;border-radius:${T.r};border:1px solid transparent;cursor:pointer;font-size:13px;font-family:inherit;font-weight:500;transition:all .15s ease;outline:none;white-space:nowrap;user-select:none}\n .dhx-btn:focus-visible{box-shadow:0 0 0 3px ${T.primary}33}\n .dhx-btn-primary{background:${T.primary};color:#fff;border-color:${T.primary}}\n .dhx-btn-primary:hover{background:${T.primaryDk};border-color:${T.primaryDk}}\n .dhx-btn-secondary{background:${T.surface};color:${T.text};border-color:${T.border}}\n .dhx-btn-secondary:hover{background:${T.bg};border-color:${T.borderDk}}\n .dhx-btn-ghost{background:transparent;color:${T.textSec};border-color:transparent}\n .dhx-btn-ghost:hover{background:${T.bg};color:${T.text}}\n .dhx-btn-danger{background:${T.danger};color:#fff;border-color:${T.danger}}\n .dhx-btn-danger:hover{background:#c62828;border-color:#c62828}\n .dhx-btn:disabled{opacity:.45;cursor:not-allowed}\n .dhx-input{width:100%;height:32px;padding:0 10px;border:1px solid ${T.border};border-radius:${T.r};font-size:13px;font-family:inherit;color:${T.text};background:${T.surface};outline:none;transition:border-color .15s}\n .dhx-input:focus{border-color:${T.primary};box-shadow:0 0 0 3px ${T.primary}22}\n .dhx-input:disabled{background:${T.bg};color:${T.textMut};cursor:not-allowed}\n .dhx-input-wrap{position:relative;width:100%}\n .dhx-input-wrap .dhx-input-icon{position:absolute;left:9px;top:50%;transform:translateY(-50%);color:${T.textMut};pointer-events:none}\n .dhx-input-wrap .dhx-input--with-icon{padding-left:30px}\n .dhx-label{display:block;font-size:12px;font-weight:600;color:${T.textSec};margin-bottom:5px;letter-spacing:.02em}\n .dhx-form-group{margin-bottom:14px}\n .dhx-card{background:${T.surface};border:1px solid ${T.border};border-radius:${T.rMd};box-shadow:${T.shadow}}\n .dhx-card-padded{padding:16px}\n .dhx-divider{border:none;border-top:1px solid ${T.border};margin:0}\n .dhx-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600}\n .dhx-tag-primary{background:${T.primaryLt};color:${T.primaryDk}}\n .dhx-tag-success{background:#e8f5e9;color:#1b5e20}\n .dhx-tag-danger{background:#ffebee;color:#b71c1c}\n .dhx-tag-warning{background:#fff3e0;color:#e65100}\n `;\n document.head.appendChild(s);\n}\n","import { useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Leading icon element */\n icon?: React.ReactNode;\n disabled?: boolean;\n onClick?: () => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, React.CSSProperties> = {\n sm: { height: 24, padding: \"0 8px\", fontSize: 12 },\n md: {},\n lg: { height: 38, padding: \"0 18px\", fontSize: 14 },\n};\n\nexport function Button({\n children, variant = \"primary\", size = \"md\",\n icon, disabled, onClick, style, className = \"\",\n}: ButtonProps) {\n useEffect(injectStyles, []);\n return (\n <button\n className={`dhx dhx-btn dhx-btn-${variant} ${className}`}\n style={{ ...SIZE_STYLES[size], ...style }}\n disabled={disabled}\n onClick={onClick}\n >\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {children}\n </button>\n );\n}\n","import { useEffect, RefObject } from \"react\";\n\nexport function useClickOutside(\n ref: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n): void {\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) callback(e);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [ref, callback]);\n}\n","import { useRef, useCallback } from \"react\";\nimport React from \"react\";\n\nexport function useDrag(\n onDrag: (x: number, y: number) => void,\n): (e: React.MouseEvent, originX?: number, originY?: number) => void {\n const dragging = useRef(false);\n const origin = useRef({ x: 0, y: 0, ox: 0, oy: 0 });\n\n return useCallback(\n (e: React.MouseEvent, originX = 0, originY = 0) => {\n dragging.current = true;\n origin.current = { x: e.clientX, y: e.clientY, ox: originX, oy: originY };\n const move = (me: MouseEvent) => {\n if (!dragging.current) return;\n const { x, y, ox, oy } = origin.current;\n onDrag(ox + me.clientX - x, oy + me.clientY - y);\n };\n const up = () => {\n dragging.current = false;\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n e.preventDefault();\n },\n [onDrag],\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface MenuItem {\n id?: string;\n value?: string;\n icon?: React.ReactNode;\n hotkey?: string;\n disabled?: boolean;\n type?: \"separator\";\n items?: MenuItem[];\n}\n\ninterface MenuDropdownProps {\n items: MenuItem[];\n onSelect: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function MenuDropdown({ items, onSelect, style }: MenuDropdownProps) {\n const [hov, setHov] = useState<number | null>(null);\n return (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, minWidth: 180, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, boxShadow: T.shadowLg, zIndex: 200, padding: \"4px 0\", ...style }}>\n {items.map((item, i) => {\n if (item.type === \"separator\") return <div key={i} style={{ height: 1, background: T.border, margin: \"4px 0\" }} />;\n const isHov = hov === i;\n return (\n <div key={item.id || i} style={{ position: \"relative\" }} onMouseEnter={() => setHov(i)} onMouseLeave={() => setHov(null)}>\n <div onClick={() => !item.disabled && !item.items?.length && onSelect(item)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"8px 14px\", cursor: item.disabled ? \"not-allowed\" : \"pointer\", fontSize: 13, color: item.disabled ? T.textMut : T.text, background: isHov && !item.disabled ? T.bg : \"transparent\", opacity: item.disabled ? .5 : 1 }}>\n {item.icon && <span style={{ fontSize: 15, width: 18, textAlign: \"center\" }}>{item.icon}</span>}\n <span style={{ flex: 1 }}>{item.value || item.id}</span>\n {item.hotkey && <span style={{ fontSize: 11, color: T.textMut }}>{item.hotkey}</span>}\n {item.items?.length ? <span style={{ fontSize: 10, color: T.textMut }}>▶</span> : null}\n </div>\n {isHov && item.items?.length ? <MenuDropdown items={item.items} onSelect={onSelect} style={{ position: \"absolute\", left: \"100%\", top: -4 }} /> : null}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface MenuProps {\n items?: MenuItem[];\n label?: string;\n onSelect?: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Menu({ items = [], label = \"Menu\", onSelect, style }: MenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\", ...style }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => setOpen(o => !o)}>\n {label} <span style={{ fontSize: 10 }}>{open ? \"▲\" : \"▼\"}</span>\n </button>\n {open && <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setOpen(false); }} />}\n </div>\n );\n}\n\nexport interface ContextMenuProps {\n items?: MenuItem[];\n onSelect?: (item: MenuItem) => void;\n children: React.ReactNode;\n}\n\nexport function ContextMenu({ items = [], onSelect, children }: ContextMenuProps) {\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setPos(null), []));\n const show = (e: React.MouseEvent) => { e.preventDefault(); setPos({ x: e.clientX, y: e.clientY }); };\n return (\n <div ref={ref} onContextMenu={show} style={{ position: \"relative\", display: \"contents\" }}>\n {children}\n {pos && (\n <div style={{ position: \"fixed\", left: pos.x, top: pos.y, zIndex: 9999 }}>\n <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setPos(null); }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface ToolbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"select\" | \"imageButton\";\n value?: string;\n text?: string; // alias for value (backward compat)\n icon?: React.ReactNode;\n src?: string; // imageButton avatar\n items?: MenuItem[]; // dropdown\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n group?: string; // radio-group id\n disabled?: boolean;\n hidden?: boolean;\n count?: number; // notification badge\n label?: string; // prefix label for input/select\n options?: { value: string; label: string }[];\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface ToolbarProps {\n items?: ToolbarItem[];\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Toolbar({ items = [], onAction, style }: ToolbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => {\n if (item.id && (item.twoState || item.group) && item.active) init[item.id] = true;\n });\n return init;\n });\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLDivElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: ToolbarItem, i: number) => {\n if (item.disabled) return;\n\n // twoState toggle\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n\n // radio group\n if (item.group && item.id) {\n setActiveItems(s => {\n const ns = { ...s };\n items.forEach(it => { if (it.group === item.group && it.id) ns[it.id] = false; });\n ns[item.id!] = true;\n return ns;\n });\n }\n\n // dropdown\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: ToolbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{ width: 1, background: T.border, margin: \"6px 4px\", alignSelf: \"stretch\" }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 140, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n </div>\n );\n\n /* ── select ── */\n if (item.type === \"select\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <select\n className=\"dhx dhx-input\"\n style={{ width: item.width || 100, height: 28, cursor: \"pointer\" }}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n >\n {item.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 32, height: 32, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.id && activeItems[item.id]);\n const label = item.value ?? item.text;\n const hasDropdown = !!(item.items?.length);\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n height: 32, gap: 4,\n position: \"relative\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16 }}>{item.icon}</span>}\n {label && <span style={{ fontSize: 13 }}>{label}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={() => setOpenMenu(null)}\n style={{ top: \"100%\", left: 0 }}\n />\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\", alignItems: \"center\", gap: 2,\n padding: \"4px 8px\", background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n minHeight: 44, flexWrap: \"wrap\",\n ...style,\n }}\n >\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SidebarItem {\n id: string;\n value?: string;\n icon?: React.ReactNode;\n count?: number;\n type?: \"separator\" | \"customHTML\";\n html?: string;\n items?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items?: SidebarItem[];\n width?: number;\n collapsed?: boolean;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n onSelect?: (item: SidebarItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Sidebar({ items = [], width = 240, collapsed: collapsedProp, onSelect, header, footer, style }: SidebarProps) {\n const [collapsed, setCollapsed] = useState(collapsedProp ?? false);\n const [selected, setSelected] = useState<string | null>(null);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n useEffect(injectStyles, []);\n\n const w = collapsed ? 56 : width;\n const handleSelect = (item: SidebarItem) => { setSelected(item.id); onSelect?.(item); };\n\n const renderItem = (item: SidebarItem, depth = 0): React.ReactNode => {\n if (item.type === \"separator\") return <div key={item.id} style={{ height: 1, background: T.border, margin: \"6px 8px\" }} />;\n if (item.type === \"customHTML\") return <div key={item.id} style={{ padding: \"8px 12px\" }} dangerouslySetInnerHTML={{ __html: item.html || \"\" }} />;\n const hasChildren = (item.items?.length ?? 0) > 0;\n const isExpanded = expanded[item.id];\n const isSelected = selected === item.id;\n return (\n <div key={item.id}>\n <div onClick={() => { if (hasChildren) setExpanded(x => ({ ...x, [item.id]: !x[item.id] })); handleSelect(item); }}\n style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: `8px ${collapsed ? \"0px\" : `${12 + depth * 16}px`}`, cursor: \"pointer\", borderRadius: T.r, margin: \"1px 6px\", justifyContent: collapsed ? \"center\" : \"flex-start\", transition: \"all .15s\", background: isSelected ? T.primaryLt : \"transparent\", color: isSelected ? T.primary : T.text, userSelect: \"none\" }}\n onMouseEnter={e => !isSelected && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSelected && (e.currentTarget.style.background = \"transparent\")}>\n {item.icon && <span style={{ fontSize: 18, minWidth: 22, textAlign: \"center\" }}>{item.icon}</span>}\n {!collapsed && <span style={{ flex: 1, fontSize: 13, fontWeight: isSelected ? 600 : 400 }}>{item.value}</span>}\n {!collapsed && item.count !== undefined && <span style={{ background: T.primary, color: \"#fff\", borderRadius: 10, padding: \"1px 6px\", fontSize: 11, fontWeight: 700 }}>{item.count}</span>}\n {!collapsed && hasChildren && <span style={{ fontSize: 12, color: T.textMut, transition: \"transform .15s\", transform: isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\" }}>▶</span>}\n </div>\n {hasChildren && isExpanded && !collapsed && item.items!.map(child => renderItem(child, depth + 1))}\n </div>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ width: w, minWidth: w, background: T.surface, borderRight: `1px solid ${T.border}`, display: \"flex\", flexDirection: \"column\", transition: \"width .2s ease\", overflow: \"hidden\", ...style }}>\n {header && !collapsed && <div style={{ padding: \"12px 14px\", borderBottom: `1px solid ${T.border}`, fontWeight: 700, fontSize: 15 }}>{header}</div>}\n <button onClick={() => setCollapsed(c => !c)} style={{ margin: \"8px 6px\", background: \"transparent\", border: \"none\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: collapsed ? \"center\" : \"flex-end\", padding: \"4px 6px\", borderRadius: T.r, color: T.textSec }}>\n <span style={{ fontSize: 18 }}>{collapsed ? \"☰\" : \"✕\"}</span>\n </button>\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", overflowX: \"hidden\" }}>{items.map(item => renderItem(item))}</div>\n {footer && !collapsed && <div style={{ padding: \"10px 14px\", borderTop: `1px solid ${T.border}` }}>{footer}</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface LayoutCellConfig {\n id?: string;\n width?: string | number;\n height?: string | number;\n header?: string;\n collapsable?: boolean;\n padding?: string | number;\n html?: string;\n content?: React.ReactNode;\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n}\n\nexport interface LayoutProps {\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n type?: \"line\" | \"space\" | \"wide\";\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction LayoutCell({ config }: { config: LayoutCellConfig }) {\n const [collapsed, setCollapsed] = useState(false);\n const style: React.CSSProperties = {\n position: \"relative\", background: T.surface,\n border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\",\n ...(config.width ? { width: config.width, minWidth: config.width } : { flex: 1 }),\n ...(config.height ? { height: config.height, minHeight: config.height } : { minHeight: 40 }),\n ...(collapsed ? { flex: \"0 0 auto\" } : {}),\n };\n return (\n <div style={style}>\n {config.header && (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", padding: \"6px 12px\", background: T.bg, borderBottom: `1px solid ${T.border}`, fontSize: 12, fontWeight: 600, color: T.textSec, userSelect: \"none\" }}>\n <span>{config.header}</span>\n {config.collapsable && <button onClick={() => setCollapsed(c => !c)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 16, lineHeight: 1 }}>{collapsed ? \"▼\" : \"▲\"}</button>}\n </div>\n )}\n {!collapsed && (\n <div style={{ padding: config.padding || 0, height: config.header ? \"calc(100% - 33px)\" : \"100%\", overflow: \"auto\" }}>\n {config.html ? <div dangerouslySetInnerHTML={{ __html: config.html }} /> : config.content}\n {(config.rows || config.cols) && <Layout rows={config.rows} cols={config.cols} style={{ height: \"100%\" }} />}\n </div>\n )}\n </div>\n );\n}\n\nexport function Layout({ rows, cols, type = \"line\", style, children }: LayoutProps) {\n useEffect(injectStyles, []);\n const gap = type === \"space\" ? 12 : type === \"wide\" ? 8 : 1;\n const cells = rows || cols;\n const isRow = !!rows;\n if (!cells) return <div className=\"dhx\" style={{ width: \"100%\", height: \"100%\", ...style }}>{children}</div>;\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: isRow ? \"column\" : \"row\", gap, width: \"100%\", height: \"100%\", ...style }}>\n {cells.map((cell, i) => <LayoutCell key={cell.id || i} config={cell} />)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TabView {\n id: string;\n tab: string;\n icon?: React.ReactNode;\n content?: React.ReactNode;\n html?: string;\n}\n\nexport interface TabbarProps {\n views?: TabView[];\n mode?: \"top\" | \"bottom\" | \"left\" | \"right\";\n tabAlign?: \"left\" | \"center\" | \"right\";\n closable?: string[];\n disabled?: string[];\n defaultActive?: string;\n onBeforeChange?: (id: string) => boolean | void;\n onChange?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Tabbar({ views = [], mode = \"top\", tabAlign = \"left\", closable = [], disabled = [], defaultActive, onBeforeChange, onChange, style }: TabbarProps) {\n const [active, setActive] = useState(defaultActive || views[0]?.id);\n const [openTabs, setOpenTabs] = useState(views.map(v => v.id));\n useEffect(injectStyles, []);\n\n const handleClose = (e: React.MouseEvent, id: string) => {\n e.stopPropagation();\n setOpenTabs(t => t.filter(x => x !== id));\n if (active === id) setActive(openTabs.find(t => t !== id) ?? \"\");\n };\n const handleChange = (id: string) => {\n if (disabled.includes(id)) return;\n if (onBeforeChange && onBeforeChange(id) === false) return;\n setActive(id); onChange?.(id);\n };\n\n const isVertical = mode === \"left\" || mode === \"right\";\n const visibleViews = views.filter(v => openTabs.includes(v.id));\n\n const tabBar = (\n <div style={{ display: \"flex\", flexDirection: isVertical ? \"column\" : \"row\", justifyContent: tabAlign === \"center\" ? \"center\" : tabAlign === \"right\" ? \"flex-end\" : \"flex-start\", background: T.surface, borderBottom: !isVertical && mode !== \"bottom\" ? `2px solid ${T.border}` : \"none\", borderTop: mode === \"bottom\" ? `2px solid ${T.border}` : \"none\", borderRight: mode === \"left\" ? `2px solid ${T.border}` : \"none\", borderLeft: mode === \"right\" ? `2px solid ${T.border}` : \"none\", overflowX: \"auto\", flexShrink: 0 }}>\n {visibleViews.map(v => {\n const isActive = active === v.id;\n const isDis = disabled.includes(v.id);\n const activeStyle: React.CSSProperties = mode === \"bottom\"\n ? { borderTop: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 }\n : isVertical\n ? { color: T.primary, fontWeight: 600, background: T.primaryLt, [mode === \"left\" ? \"borderRight\" : \"borderLeft\"]: `2px solid ${T.primary}` }\n : { borderBottom: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 };\n return (\n <div key={v.id} onClick={() => handleChange(v.id)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 6, padding: \"10px 16px\", cursor: isDis ? \"not-allowed\" : \"pointer\", whiteSpace: \"nowrap\", fontSize: 13, transition: \"color .15s\", userSelect: \"none\", minWidth: isVertical ? 120 : \"auto\", ...(isActive ? activeStyle : { color: isDis ? T.textMut : T.textSec }) }}>\n {v.icon && <span style={{ fontSize: 16 }}>{v.icon}</span>}\n <span>{v.tab}</span>\n {closable.includes(v.id) && <span onClick={e => handleClose(e, v.id)} style={{ marginLeft: 4, opacity: .6, fontSize: 12, cursor: \"pointer\" }}>✕</span>}\n </div>\n );\n })}\n </div>\n );\n\n const activeView = visibleViews.find(v => v.id === active);\n const content = (\n <div className=\"dhx-scroll\" style={{ flex: 1, overflow: \"auto\" }}>\n {activeView?.content}\n {activeView?.html && <div dangerouslySetInnerHTML={{ __html: activeView.html }} style={{ padding: 16 }} />}\n </div>\n );\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: mode === \"top\" ? \"column\" : mode === \"bottom\" ? \"column-reverse\" : mode === \"left\" ? \"row\" : \"row-reverse\", width: \"100%\", height: \"100%\", background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\", ...style }}>\n {tabBar}\n {content}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface GridColumnFooter {\n text?: string | ((s: { sum: number; avg: number; count: number; min: number; max: number }) => string);\n summary?: \"sum\" | \"avg\" | \"count\" | \"min\" | \"max\";\n}\n\nexport interface GridColumn {\n id: string;\n header?: { text: string; align?: \"left\" | \"center\" | \"right\" }[] | string;\n footer?: GridColumnFooter[];\n width?: number;\n minWidth?: number;\n sortable?: boolean;\n filterable?: boolean;\n filterType?: \"input\" | \"select\";\n resizable?: boolean;\n editable?: boolean;\n align?: \"left\" | \"center\" | \"right\";\n template?: (value: unknown, row: Record<string, unknown>) => React.ReactNode;\n}\n\nexport interface GridProps {\n columns: GridColumn[];\n data?: Record<string, unknown>[];\n height?: string | number;\n rowHeight?: number;\n sortable?: boolean;\n resizable?: boolean;\n editable?: boolean;\n stripe?: boolean;\n autoWidth?: boolean;\n keyNavigation?: boolean;\n selection?: \"row\" | \"cell\";\n multiselect?: boolean;\n onSelect?: (row: Record<string, unknown>) => void;\n onChange?: (row: Record<string, unknown>, colId: string, value: unknown) => void;\n style?: React.CSSProperties;\n}\n\nconst B = `1px solid ${T.border}`;\n\nfunction SortArrows({ active, dir }: { active: boolean; dir: \"asc\" | \"desc\" }) {\n return (\n <span style={{ display: \"inline-flex\", flexDirection: \"column\", gap: 1, flexShrink: 0, marginLeft: 4 }}>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 0L7 4H0z\" fill={active && dir === \"asc\" ? T.primary : T.borderDk} />\n </svg>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 4L0 0H7z\" fill={active && dir === \"desc\" ? T.primary : T.borderDk} />\n </svg>\n </span>\n );\n}\n\nexport function Grid({\n columns, data = [], height = 400, rowHeight = 40,\n sortable = true, resizable = true, editable = false,\n stripe = false, autoWidth = false, keyNavigation = false,\n selection, multiselect, onSelect, onChange, style,\n}: GridProps) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n const [filter, setFilter] = useState<Record<string, string>>({});\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [focusRow, setFocusRow] = useState(-1);\n const [colWidths, setColWidths] = useState(() => columns.map(c => c.width ?? c.minWidth ?? 150));\n const [editCell, setEditCell] = useState<{ key: string | number; colId: string } | null>(null);\n const [editValue, setEditValue] = useState(\"\");\n const [edits, setEdits] = useState<Record<string, Record<string, unknown>>>({});\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerW, setContainerW] = useState(0);\n useEffect(injectStyles, []);\n\n /* auto-width: observe container */\n useEffect(() => {\n if (!autoWidth || !containerRef.current) return;\n const ro = new ResizeObserver(() => setContainerW(containerRef.current?.offsetWidth ?? 0));\n ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, [autoWidth]);\n\n /* effective widths (autoWidth distributes leftover space) */\n const widths = useMemo(() => {\n if (!autoWidth || containerW === 0) return colWidths;\n const total = colWidths.reduce((a, b) => a + b, 0);\n if (containerW <= total) return colWidths;\n const extra = (containerW - total) / columns.length;\n return colWidths.map(w => w + extra);\n }, [autoWidth, containerW, colWidths, columns.length]);\n\n /* sorted + filtered rows (with inline edits applied) */\n const sorted = useMemo(() => {\n let rows = data\n .map((row, i) => {\n const key = String((row.id as string | number) ?? i);\n return edits[key] ? { ...row, ...edits[key] } : row;\n })\n .filter(row =>\n Object.entries(filter).every(([k, v]) => !v || String(row[k] ?? \"\").toLowerCase().includes(v.toLowerCase()))\n );\n if (sortKey) {\n rows = [...rows].sort((a, b) => {\n const av = a[sortKey], bv = b[sortKey];\n if (av == null) return 1;\n if (bv == null) return -1;\n const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, sortKey, sortDir, filter, edits]);\n\n /* footer aggregation stats */\n const colStats = useMemo(() => {\n const s: Record<string, { sum: number; avg: number; count: number; min: number; max: number }> = {};\n columns.forEach(col => {\n if (col.footer?.some(f => f.summary)) {\n const nums = sorted.map(r => Number(r[col.id])).filter(n => !isNaN(n));\n const sum = nums.reduce((a, b) => a + b, 0);\n s[col.id] = { sum, avg: nums.length ? sum / nums.length : 0, count: sorted.length, min: nums.length ? Math.min(...nums) : 0, max: nums.length ? Math.max(...nums) : 0 };\n }\n });\n return s;\n }, [sorted, columns]);\n\n /* select filter options */\n const selectOpts = useMemo(() => {\n const o: Record<string, string[]> = {};\n columns.filter(c => c.filterType === \"select\").forEach(col => {\n o[col.id] = [...new Set(data.map(r => String(r[col.id] ?? \"\")))].sort();\n });\n return o;\n }, [data, columns]);\n\n const hasFilters = columns.some(c => c.filterable);\n const hasFooter = columns.some(c => c.footer?.length);\n const totalW = widths.reduce((a, b) => a + b, 0);\n\n const rowKey = (row: Record<string, unknown>, ri: number): string | number =>\n (row.id as string | number) ?? ri;\n\n /* sort */\n const handleSort = (col: GridColumn) => {\n if (!sortable || col.sortable === false) return;\n setSortDir(d => sortKey === col.id ? (d === \"asc\" ? \"desc\" : \"asc\") : \"asc\");\n setSortKey(col.id);\n };\n\n /* selection */\n const selectRow = (row: Record<string, unknown>, ri: number) => {\n if (!selection) return;\n const rk = rowKey(row, ri);\n setFocusRow(ri);\n setSelected(s => {\n const ns = multiselect ? new Set(s) : new Set<string | number>();\n ns.has(rk) ? ns.delete(rk) : ns.add(rk);\n return ns;\n });\n onSelect?.(row);\n };\n\n /* edit commit */\n const commitEdit = () => {\n if (!editCell) return;\n const { key, colId } = editCell;\n setEdits(e => ({ ...e, [String(key)]: { ...(e[String(key)] || {}), [colId]: editValue } }));\n const row = sorted.find((r, i) => rowKey(r, i) === key);\n if (row) onChange?.(row, colId, editValue);\n setEditCell(null);\n };\n\n /* keyboard navigation */\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (editCell && e.key === \"Escape\") { setEditCell(null); return; }\n if (!keyNavigation || !selection) return;\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = Math.min(focusRow + 1, sorted.length - 1);\n if (next >= 0) { selectRow(sorted[next], next); }\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prev = Math.max(focusRow - 1, 0);\n if (prev >= 0) { selectRow(sorted[prev], prev); }\n }\n };\n\n /* column resize */\n const startResize = (e: React.MouseEvent, ci: number) => {\n e.preventDefault();\n e.stopPropagation();\n const startX = e.clientX, startW = colWidths[ci];\n const move = (me: MouseEvent) => setColWidths(ws => {\n const nw = [...ws];\n nw[ci] = Math.max(columns[ci].minWidth || 50, startW + me.clientX - startX);\n return nw;\n });\n const up = () => { document.removeEventListener(\"mousemove\", move); document.removeEventListener(\"mouseup\", up); };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n };\n\n /* shared cell style */\n const cs = (wi: number, col: GridColumn, first: boolean, height: number): React.CSSProperties => ({\n width: wi, minWidth: wi, flexShrink: 0, boxSizing: \"border-box\",\n padding: \"0 12px\", height, display: \"flex\", alignItems: \"center\",\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n fontSize: 13, textAlign: col.align,\n justifyContent: col.align === \"center\" ? \"center\" : col.align === \"right\" ? \"flex-end\" : \"flex-start\",\n borderLeft: first ? \"none\" : B,\n });\n\n return (\n <div\n ref={containerRef}\n className=\"dhx\"\n tabIndex={keyNavigation ? 0 : undefined}\n onKeyDown={handleKeyDown}\n style={{ width: \"100%\", height, display: \"flex\", flexDirection: \"column\", border: B, borderRadius: T.r, overflow: \"hidden\", outline: \"none\", ...style }}>\n\n <div style={{ overflowX: \"auto\", flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <div style={{ minWidth: totalW, display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\n\n {/* ── Header ── */}\n <div style={{ display: \"flex\", background: T.bg, borderBottom: B, flexShrink: 0, position: \"sticky\", top: 0, zIndex: 2 }}>\n {columns.map((col, i) => (\n <div key={col.id}\n onClick={() => handleSort(col)}\n style={{\n ...cs(widths[i], col, i === 0, 40),\n position: \"relative\",\n fontWeight: 500, color: T.text,\n cursor: sortable && col.sortable !== false ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}>\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {Array.isArray(col.header) ? col.header[0]?.text : (col.header || col.id)}\n </span>\n {sortable && col.sortable !== false && (\n <SortArrows active={sortKey === col.id} dir={sortDir} />\n )}\n {resizable && col.resizable !== false && i < columns.length - 1 && (\n <div\n onMouseDown={e => startResize(e, i)}\n onClick={e => e.stopPropagation()}\n style={{ position: \"absolute\", right: 0, top: 0, bottom: 0, width: 4, cursor: \"col-resize\", zIndex: 1 }}\n onMouseEnter={e => (e.currentTarget.style.background = T.primary + \"55\")}\n onMouseLeave={e => (e.currentTarget.style.background = \"transparent\")} />\n )}\n </div>\n ))}\n </div>\n\n {/* ── Filter row ── */}\n {hasFilters && (\n <div style={{ display: \"flex\", borderBottom: B, background: T.surface, flexShrink: 0 }}>\n {columns.map((col, i) => (\n <div key={col.id} style={{ width: widths[i], minWidth: widths[i], flexShrink: 0, padding: \"4px 6px\", boxSizing: \"border-box\", borderLeft: i === 0 ? \"none\" : B }}>\n {col.filterable && col.filterType === \"select\" ? (\n <select className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12, padding: \"0 4px\" }}\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))}>\n <option value=\"\">All</option>\n {(selectOpts[col.id] || []).map(v => <option key={v} value={v}>{v}</option>)}\n </select>\n ) : col.filterable ? (\n <input className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12 }}\n placeholder=\"Filter...\"\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))} />\n ) : null}\n </div>\n ))}\n </div>\n )}\n\n {/* ── Body ── */}\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {sorted.map((row, ri) => {\n const rk = rowKey(row, ri);\n const isSel = selected.has(rk);\n const rowBg = isSel ? T.primaryLt : (stripe && ri % 2 !== 0) ? T.bg : T.surface;\n return (\n <div key={String(rk)}\n style={{ display: \"flex\", height: rowHeight, borderBottom: B, flexShrink: 0, background: rowBg, transition: \"background .1s\", cursor: selection ? \"pointer\" : \"default\" }}\n onMouseEnter={e => !isSel && (e.currentTarget.style.background = T.primaryLt + \"80\")}\n onMouseLeave={e => !isSel && (e.currentTarget.style.background = rowBg)}>\n {columns.map((col, ci) => {\n const isEditing = editCell?.key === rk && editCell?.colId === col.id;\n const rawVal = row[col.id];\n const display = col.template ? col.template(rawVal, row) : String(rawVal ?? \"\");\n return (\n <div key={col.id}\n onClick={() => {\n selectRow(row, ri);\n if (editable && col.editable !== false) {\n setEditCell({ key: rk, colId: col.id });\n setEditValue(String(rawVal ?? \"\"));\n }\n }}\n style={cs(widths[ci], col, ci === 0, rowHeight)}>\n {isEditing ? (\n <input\n autoFocus\n value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditCell(null); }}\n onClick={e => e.stopPropagation()}\n style={{ width: \"100%\", border: \"none\", outline: `2px solid ${T.primary}`, borderRadius: 2, fontSize: 13, padding: \"2px 4px\", background: T.surface, color: T.text }} />\n ) : display}\n </div>\n );\n })}\n </div>\n );\n })}\n {sorted.length === 0 && (\n <div style={{ textAlign: \"center\", padding: 40, color: T.textMut, fontSize: 13 }}>No data</div>\n )}\n </div>\n\n {/* ── Footer ── */}\n {hasFooter && (\n <div style={{ display: \"flex\", borderTop: B, background: T.bg, flexShrink: 0 }}>\n {columns.map((col, i) => {\n const f = col.footer?.[0];\n const stats = colStats[col.id] ?? { sum: 0, avg: 0, count: 0, min: 0, max: 0 };\n let content: React.ReactNode = \"\";\n if (f) {\n if (typeof f.text === \"function\") content = f.text(stats);\n else if (f.text) content = f.text;\n else if (f.summary) content = String(Math.round(stats[f.summary] * 100) / 100);\n }\n return (\n <div key={col.id} style={{ ...cs(widths[i], col, i === 0, 40), fontWeight: 600, color: T.text }}>\n {content}\n </div>\n );\n })}\n </div>\n )}\n\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport {\n BarChart, Bar, LineChart, Line, AreaChart, Area,\n PieChart, Pie, Cell, RadarChart, Radar, PolarGrid, PolarAngleAxis, PolarRadiusAxis,\n ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n ResponsiveContainer, Treemap,\n} from \"recharts\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nconst COLORS = [\"#0288d1\",\"#43a047\",\"#f57c00\",\"#e53935\",\"#8e24aa\",\"#00838f\",\"#ef6c00\",\"#2e7d32\"];\n\nexport interface ChartSeries {\n id?: string;\n value?: string; // data field for value / X axis for scatter\n valueY?: string; // data field for Y axis (scatter)\n label?: string; // legend label\n color?: string; // line/stroke color OR field name for per-item color (pie/donut)\n fill?: string; // explicit fill override (bar/area)\n strokeWidth?: number;\n text?: string; // field name for display label (pie/donut)\n stroke?: string; // border color (pie/donut slices)\n pointColor?: string; // point color alias (radar)\n data?: Record<string, unknown>[];\n tooltipTemplate?:(item: unknown[]) => string;\n direction?: \"asc\" | \"desc\";\n}\n\nexport interface ChartScales {\n bottom?: { text?: string; title?: string; min?: number; max?: number };\n left?: { min?: number; max?: number; maxTicks?: number; title?: string };\n radial?: { value?: string; maxTicks?: number };\n}\n\nexport interface ChartLegend {\n halign?: \"left\" | \"center\" | \"right\";\n valign?: \"top\" | \"middle\" | \"bottom\";\n series?: string[];\n values?: { id?: string; text?: string; color?: string };\n}\n\nexport type ChartType = \"bar\" | \"line\" | \"area\" | \"pie\" | \"donut\" | \"radar\" | \"scatter\" | \"treeMap\";\n\nexport interface ChartProps {\n type?: ChartType;\n data?: Record<string, unknown>[];\n series?: ChartSeries[];\n scales?: ChartScales;\n legend?: ChartLegend;\n height?: number | string;\n style?: React.CSSProperties;\n}\n\n/* build nested tree from flat data with { id, parent } refs */\nfunction buildTreemap(\n data: Record<string, unknown>[],\n valueKey: string,\n nameKey: string,\n): { name: string; children?: { name: string; value: number }[] }[] {\n const roots = data.filter(d => !d.parent);\n const children = data.filter(d => !!d.parent);\n return roots.map(root => ({\n name: root[nameKey] as string,\n children: children\n .filter(c => c.parent === root.id)\n .map(c => ({ name: c[nameKey] as string, value: Number(c[valueKey] ?? 0) })),\n }));\n}\n\nexport function Chart({\n type = \"bar\", data = [], series = [], scales = {}, legend, height = 280, style,\n}: ChartProps) {\n useEffect(injectStyles, []);\n\n const xKey = scales.bottom?.text || (data[0] && Object.keys(data[0])[0]) || \"x\";\n\n const tip = (\n <Tooltip\n contentStyle={{ fontSize: 12, borderRadius: T.r, border: `1px solid ${T.border}` }}\n />\n );\n const leg = legend ? (\n <Legend\n iconSize={10}\n wrapperStyle={{ fontSize: 12 }}\n verticalAlign={legend.valign === \"bottom\" ? \"bottom\" : legend.valign === \"middle\" ? \"middle\" : \"top\"}\n align={legend.halign ?? \"center\"}\n />\n ) : null;\n const grid = <CartesianGrid strokeDasharray=\"3 3\" stroke={T.border} />;\n const xAxis = (\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={{ stroke: T.border }}\n tickLine={false}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n );\n const yAxis = (\n <YAxis\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={false}\n tickLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n tickCount={scales.left?.maxTicks}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n );\n const margin = {\n top: 10, right: 20, left: 0,\n bottom: scales.bottom?.title ? 20 : 0,\n };\n const common = { data, margin };\n\n let chart: React.ReactNode;\n\n /* ── bar ── */\n if (type === \"bar\") {\n chart = (\n <BarChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => (\n <Bar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n fill={s.fill || s.color || COLORS[i % COLORS.length]}\n radius={[3, 3, 0, 0]}\n />\n ))}\n </BarChart>\n );\n\n /* ── line ── */\n } else if (type === \"line\") {\n chart = (\n <LineChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Line\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n strokeWidth={s.strokeWidth ?? 2}\n dot={{ r: 3, fill: c }}\n />\n );\n })}\n </LineChart>\n );\n\n /* ── area ── */\n } else if (type === \"area\") {\n chart = (\n <AreaChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Area\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={(s.fill || c) + \"33\"}\n strokeWidth={s.strokeWidth ?? 2}\n />\n );\n })}\n </AreaChart>\n );\n\n /* ── pie / donut ── */\n } else if (type === \"pie\" || type === \"donut\") {\n const s0 = series[0] || {};\n const dataKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n // s0.color may be a field name in the data (per-item color) or undefined/direct color\n const colorField = s0.color && data[0] && s0.color in data[0] ? s0.color : null;\n chart = (\n <PieChart>\n <Pie\n data={data}\n cx=\"50%\" cy=\"50%\"\n outerRadius={type === \"donut\" ? \"70%\" : \"80%\"}\n innerRadius={type === \"donut\" ? \"40%\" : 0}\n dataKey={dataKey}\n nameKey={nameKey}\n stroke={s0.stroke || \"none\"}\n strokeWidth={s0.strokeWidth ?? 0}\n label={({ name, percent }: { name?: string; percent?: number }) =>\n `${name ?? \"\"} ${((percent ?? 0) * 100).toFixed(0)}%`}\n labelLine\n paddingAngle={2}\n >\n {data.map((row, i) => (\n <Cell\n key={i}\n fill={colorField ? (row[colorField] as string) : COLORS[i % COLORS.length]}\n />\n ))}\n </Pie>\n {tip}{leg}\n </PieChart>\n );\n\n /* ── radar ── */\n } else if (type === \"radar\") {\n const radarKey = scales.radial?.value || xKey;\n chart = (\n <RadarChart {...common} cx=\"50%\" cy=\"50%\">\n <PolarGrid />\n <PolarAngleAxis dataKey={radarKey} tick={{ fontSize: 11 }} />\n <PolarRadiusAxis tick={{ fontSize: 9, fill: T.textMut }} axisLine={false} />\n {series.map((s, i) => {\n const c = s.color || s.pointColor || COLORS[i % COLORS.length];\n return (\n <Radar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={c + \"44\"}\n />\n );\n })}\n {tip}{leg}\n </RadarChart>\n );\n\n /* ── scatter ── */\n } else if (type === \"scatter\") {\n chart = (\n <ScatterChart margin={margin}>\n {grid}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={scales.bottom?.title || \"x\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n domain={[scales.bottom?.min ?? \"auto\", scales.bottom?.max ?? \"auto\"]}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={scales.left?.title || \"y\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n axisLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n {tip}{leg}\n {series.map((s, i) => {\n const xField = s.value || \"x\";\n const yField = s.valueY || \"y\";\n const pts = (s.data || data).map(row => ({\n x: row[xField],\n y: row[yField],\n })) as never[];\n return (\n <Scatter\n key={s.id ?? i}\n data={pts}\n name={s.label || s.id}\n fill={s.color || COLORS[i % COLORS.length]}\n />\n );\n })}\n </ScatterChart>\n );\n\n /* ── treeMap ── */\n } else if (type === \"treeMap\") {\n const s0 = series[0] || {};\n const valKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n const treeData = buildTreemap(data, valKey, nameKey);\n const borderColor = s0.stroke || T.surface;\n const borderWidth = s0.strokeWidth ?? 2;\n chart = (\n <Treemap\n data={treeData}\n dataKey=\"value\"\n aspectRatio={4 / 3}\n stroke={borderColor}\n content={((props: Record<string, unknown>) => {\n const { x, y, width, height: h, depth, index, name } = props as {\n x: number; y: number; width: number; height: number;\n depth: number; index: number; name: string;\n };\n if (depth === 0) return null;\n const fill = COLORS[index % COLORS.length];\n return (\n <g>\n <rect\n x={x} y={y} width={width} height={h}\n fill={fill} stroke={borderColor} strokeWidth={borderWidth}\n style={{ borderRadius: 3 }}\n />\n {width > 40 && h > 20 && (\n <text\n x={x + width / 2} y={y + h / 2}\n textAnchor=\"middle\" dominantBaseline=\"middle\"\n fill=\"#fff\" fontSize={11} pointerEvents=\"none\"\n >\n {name}\n </text>\n )}\n </g>\n );\n }) as never}\n />\n );\n }\n\n return (\n <div\n className=\"dhx\"\n style={{ width: \"100%\", height, padding: 12, background: T.surface, borderRadius: T.rMd, ...style }}\n >\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {chart as React.ReactElement}\n </ResponsiveContainer>\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface CalendarProps {\n value?: Date | [Date, Date] | null;\n range?: boolean;\n timepicker?: boolean;\n onChange?: (value: Date | [Date, Date]) => void;\n style?: React.CSSProperties;\n}\n\nconst MONTHS = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\nconst DAYS = [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"];\n\nexport function Calendar({ value, range = false, timepicker = false, onChange, style }: CalendarProps) {\n const today = new Date();\n const initDate = value ? new Date(Array.isArray(value) ? value[0] : value) : today;\n const [view, setView] = useState(initDate);\n const [selected, setSelected] = useState<Date | [Date | null, Date | null] | null>(value ?? (range ? [null, null] : null));\n const [hovDate, setHovDate] = useState<Date | null>(null);\n const [time, setTime] = useState({ h: 0, m: 0 });\n useEffect(injectStyles, []);\n\n const year = view.getFullYear(); const month = view.getMonth();\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n const cells: (Date | null)[] = [];\n for (let i = 0; i < firstDay; i++) cells.push(null);\n for (let d = 1; d <= daysInMonth; d++) cells.push(new Date(year, month, d));\n\n const isToday = (d: Date) => d.toDateString() === today.toDateString();\n const isSelected = (d: Date) => {\n if (!selected) return false;\n if (range && Array.isArray(selected)) {\n const [s, e] = selected as [Date | null, Date | null];\n if (!s) return false;\n const dv = d.getTime();\n if (!e) return d.toDateString() === s.toDateString();\n return dv >= s.getTime() && dv <= e.getTime();\n }\n return d.toDateString() === (selected as Date).toDateString();\n };\n\n const handleDay = (d: Date) => {\n if (range) {\n const [s, e] = Array.isArray(selected) ? (selected as [Date | null, Date | null]) : [null, null];\n if (!s || e) { setSelected([d, null]); }\n else {\n const sorted: [Date, Date] = d < s ? [d, s] : [s, d];\n setSelected(sorted); onChange?.(sorted);\n }\n } else { setSelected(d); onChange?.(d); }\n };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() - 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>‹</button>\n <div style={{ fontWeight: 700, fontSize: 14 }}>{MONTHS[month]} {year}</div>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() + 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>›</button>\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 32px)\", gap: 2 }}>\n {DAYS.map(d => <div key={d} style={{ textAlign: \"center\", fontSize: 11, fontWeight: 600, color: T.textMut, paddingBottom: 4 }}>{d}</div>)}\n {cells.map((d, i) => {\n const sel = d ? isSelected(d) : false;\n const isHov = d && hovDate && d.toDateString() === hovDate.toDateString();\n return (\n <div key={i} onClick={() => d && handleDay(d)} onMouseEnter={() => d && setHovDate(d)} onMouseLeave={() => setHovDate(null)}\n style={{ width: 32, height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", borderRadius: T.r, cursor: d ? \"pointer\" : \"default\", fontSize: 12, fontWeight: d && isToday(d) ? 700 : 400, background: sel ? T.primary : isHov ? T.bg : \"transparent\", color: sel ? \"#fff\" : d && isToday(d) ? T.primary : d ? T.text : \"transparent\", border: d && isToday(d) && !sel ? `1px solid ${T.primary}` : \"1px solid transparent\", transition: \"all .1s\" }}>\n {d?.getDate()}\n </div>\n );\n })}\n </div>\n {timepicker && (\n <div style={{ borderTop: `1px solid ${T.border}`, marginTop: 12, paddingTop: 12, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 8 }}>\n <input type=\"number\" min={0} max={23} value={time.h} onChange={e => setTime(t => ({ ...t, h: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n <span style={{ fontWeight: 700, color: T.textSec }}>:</span>\n <input type=\"number\" min={0} max={59} value={time.m} onChange={e => setTime(t => ({ ...t, m: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TimeValue { h: number; m: number; ampm?: \"AM\" | \"PM\"; }\n\nexport interface TimepickerProps {\n value?: TimeValue;\n onChange?: (value: TimeValue) => void;\n timeFormat?: 12 | 24;\n controls?: boolean;\n minuteStep?: number;\n style?: React.CSSProperties;\n}\n\nexport function Timepicker({ value, onChange, timeFormat = 12, controls = false, minuteStep = 5, style }: TimepickerProps) {\n const [h, setH] = useState(value?.h ?? (timeFormat === 24 ? 0 : 12));\n const [m, setM] = useState(value?.m ?? 0);\n const [ampm, setAmpm] = useState<\"AM\" | \"PM\">(value?.ampm ?? \"AM\");\n const [pending, setPending] = useState<TimeValue | null>(null);\n useEffect(injectStyles, []);\n\n const hours = timeFormat === 24\n ? Array.from({ length: 24 }, (_, i) => i)\n : Array.from({ length: 12 }, (_, i) => i + 1);\n const mins = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => i * minuteStep);\n\n const handleChange = (newH: number, newM: number, newAmpm: \"AM\" | \"PM\") => {\n const val: TimeValue = timeFormat === 24 ? { h: newH, m: newM } : { h: newH, m: newM, ampm: newAmpm };\n if (controls) setPending(val);\n else onChange?.(val);\n };\n\n const handleCancel = () => {\n setPending(null);\n setH(value?.h ?? (timeFormat === 24 ? 0 : 12));\n setM(value?.m ?? 0);\n setAmpm(value?.ampm ?? \"AM\");\n };\n\n const colStyle = { display: \"flex\", flexDirection: \"column\" as const, alignItems: \"center\" as const, gap: 4 };\n const cellStyle = (active: boolean): React.CSSProperties => ({\n height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n cursor: \"pointer\", fontSize: 13,\n fontWeight: active ? 700 : 400,\n background: active ? T.primaryLt : \"transparent\",\n color: active ? T.primary : T.text,\n });\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"stretch\" }}>\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Hours</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {hours.map(v => (\n <div key={v} onClick={() => { setH(v); handleChange(v, m, ampm); }}\n style={cellStyle(h === v)}\n onMouseEnter={e => h !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => h !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Minutes</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {mins.map(v => (\n <div key={v} onClick={() => { setM(v); handleChange(h, v, ampm); }}\n style={cellStyle(m === v)}\n onMouseEnter={e => m !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => m !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n {timeFormat === 12 && (\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>AM/PM</span>\n <div style={{ display: \"flex\", flexDirection: \"column\", border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\" }}>\n {([\"AM\", \"PM\"] as const).map(v => (\n <div key={v} onClick={() => { setAmpm(v); handleChange(h, m, v); }}\n style={{ height: 40, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", cursor: \"pointer\", padding: \"0 12px\", fontSize: 13, fontWeight: ampm === v ? 700 : 400, background: ampm === v ? T.primary : T.surface, color: ampm === v ? \"#fff\" : T.text }}>\n {v}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <div style={{ textAlign: \"center\", marginTop: 12, fontSize: 22, fontWeight: 700, color: T.primary, letterSpacing: 2 }}>\n {String(h).padStart(2, \"0\")}:{String(m).padStart(2, \"0\")}{timeFormat === 12 ? ` ${ampm}` : \"\"}\n </div>\n\n {controls && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: \"flex-end\", marginTop: 12 }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={handleCancel}>Cancel</button>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => pending && onChange?.(pending)}>Apply</button>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface ComboboxItem {\n id?: string;\n value: string;\n count?: number;\n}\n\nexport interface ComboboxProps {\n data?: ComboboxItem[];\n value?: string | string[] | null;\n placeholder?: string;\n multiselection?: boolean;\n label?: string;\n onChange?: (value: string | string[]) => void;\n style?: React.CSSProperties;\n}\n\nconst Chevron = ({ open }: { open: boolean }) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" style={{ flexShrink: 0, transition: \"transform .15s\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}>\n <path d=\"M2 4l4 4 4-4\" stroke={T.textMut} strokeWidth=\"1.5\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport function Combobox({ data = [], value: valueProp, placeholder = \"Select or type...\", multiselection = false, label, onChange, style }: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selected, setSelected] = useState<string | string[] | null>(\n multiselection\n ? (valueProp ? ([] as string[]).concat(valueProp as string) : [])\n : (valueProp || null)\n );\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => { setOpen(false); setQuery(\"\"); }, []));\n\n const filtered = useMemo(\n () => data.filter(d => !query || d.value.toLowerCase().includes(query.toLowerCase())),\n [data, query]\n );\n const isSelected = (id: string) =>\n multiselection ? (selected as string[] || []).includes(id) : selected === id;\n\n const handleSelect = (item: ComboboxItem) => {\n const key = item.id || item.value;\n if (multiselection) {\n const ns = isSelected(key)\n ? (selected as string[]).filter(s => s !== key)\n : [...(selected as string[] || []), key];\n setSelected(ns);\n onChange?.(ns);\n } else {\n setSelected(key);\n setQuery(\"\");\n setOpen(false);\n onChange?.(key);\n }\n };\n\n const removeTag = (key: string) => {\n const ns = (selected as string[]).filter(s => s !== key);\n setSelected(ns);\n onChange?.(ns);\n };\n\n const openDropdown = () => {\n setOpen(true);\n setTimeout(() => inputRef.current?.focus(), 0);\n };\n\n /* ── single-select display value ── */\n const singleDisplayValue = data.find(d => (d.id || d.value) === selected)?.value || \"\";\n\n const selectedTags = multiselection ? (selected as string[]) || [] : [];\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n\n {/* ── trigger ── */}\n <div\n onClick={openDropdown}\n style={{\n display: \"flex\", alignItems: \"center\", flexWrap: multiselection ? \"wrap\" : \"nowrap\",\n border: `1px solid ${open ? T.primary : T.border}`, borderRadius: T.r,\n minHeight: 34, padding: \"4px 8px\", cursor: \"text\", background: T.surface, gap: 4,\n transition: \"border-color .15s\", boxShadow: open ? `0 0 0 3px ${T.primary}22` : \"none\",\n }}>\n\n {/* ── multiselect: chips + inline search ── */}\n {multiselection && (\n <>\n {selectedTags.map(s => (\n <span key={s} style={{\n display: \"inline-flex\", alignItems: \"center\", gap: 4,\n background: T.primary, color: \"#fff\",\n borderRadius: 12, padding: \"2px 10px 2px 8px\", fontSize: 12, lineHeight: 1.5,\n whiteSpace: \"nowrap\",\n }}>\n {data.find(d => (d.id || d.value) === s)?.value || s}\n <span\n onClick={e => { e.stopPropagation(); removeTag(s); }}\n style={{ cursor: \"pointer\", fontSize: 15, lineHeight: 1, opacity: 0.75, marginLeft: 2 }}>×</span>\n </span>\n ))}\n <input\n ref={inputRef}\n value={query}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => setOpen(true)}\n onClick={e => e.stopPropagation()}\n placeholder={selectedTags.length ? \"\" : placeholder}\n style={{ flex: 1, minWidth: 60, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n </>\n )}\n\n {/* ── single select: search input ── */}\n {!multiselection && (\n <input\n ref={inputRef}\n value={open ? query : singleDisplayValue}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => { setOpen(true); setQuery(\"\"); }}\n onClick={e => e.stopPropagation()}\n placeholder={placeholder}\n style={{ flex: 1, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n )}\n\n <Chevron open={open} />\n </div>\n\n {/* ── dropdown ── */}\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{\n position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, right: 0,\n background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r,\n boxShadow: T.shadowLg, zIndex: 100,\n }}>\n <div className=\"dhx-scroll\" style={{ maxHeight: 220, overflowY: \"auto\" }}>\n {filtered.map(item => {\n const key = item.id || item.value;\n const sel = isSelected(key);\n return (\n <div key={key} onClick={() => handleSelect(item)}\n style={{\n padding: \"8px 12px\", cursor: \"pointer\", display: \"flex\",\n alignItems: \"center\", gap: 8, fontSize: 13,\n background: sel ? T.primaryLt : \"transparent\",\n color: sel ? T.primary : T.text,\n }}\n onMouseEnter={e => !sel && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !sel && (e.currentTarget.style.background = \"transparent\")}>\n {multiselection && (\n <span style={{\n width: 14, height: 14, flexShrink: 0,\n border: `2px solid ${sel ? T.primary : T.borderDk}`,\n borderRadius: 3, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n background: sel ? T.primary : \"transparent\",\n }}>\n {sel && <span style={{ color: \"#fff\", fontSize: 9, lineHeight: 1 }}>✓</span>}\n </span>\n )}\n <span style={{ flex: 1 }}>{item.value}</span>\n {!multiselection && sel && (\n <span style={{ color: T.primary, fontSize: 12, fontWeight: 700 }}>✓</span>\n )}\n {item.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({item.count})</span>\n )}\n </div>\n );\n })}\n {filtered.length === 0 && (\n <div style={{ padding: 16, textAlign: \"center\", color: T.textMut, fontSize: 13 }}>No matches</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SliderProps {\n min?: number;\n max?: number;\n step?: number;\n value?: number | [number, number];\n range?: boolean;\n label?: string;\n tick?: boolean;\n disabled?: boolean;\n onChange?: (value: number | [number, number]) => void;\n style?: React.CSSProperties;\n}\n\nexport function Slider({ min = 0, max = 100, step = 1, value: valueProp, range = false, label, tick, disabled = false, onChange, style }: SliderProps) {\n const [value, setValue] = useState<number | [number, number]>(valueProp ?? (range ? [min, max] : min));\n useEffect(injectStyles, []);\n\n const update = (i: number, v: number) => {\n if (disabled) return;\n if (range) {\n const nv = [...(value as [number, number])] as [number, number];\n nv[i] = v; setValue(nv); onChange?.(nv);\n } else { setValue(v); onChange?.(v); }\n };\n\n const pct = (v: number) => ((v - min) / (max - min)) * 100;\n const arr = range ? (value as [number, number]) : [value as number];\n const trackFill: React.CSSProperties = range\n ? { left: `${pct(arr[0])}%`, width: `${pct(arr[1]) - pct(arr[0])}%` }\n : { left: 0, width: `${pct(arr[0])}%` };\n\n const trackColor = disabled ? T.border : T.primary;\n\n return (\n <div className=\"dhx\" style={{ width: \"100%\", opacity: disabled ? 0.5 : 1, ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n <div style={{ position: \"relative\", height: 36, display: \"flex\", alignItems: \"center\" }}>\n <div style={{ position: \"relative\", flex: 1, height: 4, background: T.border, borderRadius: 2 }}>\n <div style={{ position: \"absolute\", ...trackFill, height: \"100%\", background: trackColor, borderRadius: 2 }} />\n {arr.map((v, i) => (\n <input key={i} type=\"range\" min={min} max={max} step={step} value={v} disabled={disabled}\n onChange={e => { const nv = +e.target.value; if (range && i === 0 && nv >= (value as [number,number])[1]) return; if (range && i === 1 && nv <= (value as [number,number])[0]) return; update(i, nv); }}\n style={{ position: \"absolute\", width: \"100%\", height: \"100%\", opacity: 0, cursor: disabled ? \"not-allowed\" : \"pointer\", top: 0, left: 0, margin: 0 }} />\n ))}\n {arr.map((v, i) => (\n <div key={i} style={{ position: \"absolute\", left: `${pct(v)}%`, top: \"50%\", transform: \"translate(-50%, -50%)\", width: 16, height: 16, borderRadius: \"50%\", background: T.surface, border: `2px solid ${trackColor}`, boxShadow: \"0 1px 4px rgba(0,0,0,.2)\", pointerEvents: \"none\" }}>\n <div style={{ position: \"absolute\", bottom: \"calc(100% + 6px)\", left: \"50%\", transform: \"translateX(-50%)\", background: disabled ? T.textMut : T.primaryDk, color: \"#fff\", padding: \"2px 6px\", borderRadius: T.r, fontSize: 11, fontWeight: 700, whiteSpace: \"nowrap\" }}>{v}</div>\n </div>\n ))}\n </div>\n </div>\n {tick && <div style={{ display: \"flex\", justifyContent: \"space-between\", marginTop: 2 }}>{[min, Math.round((max+min)/2), max].map(v => <span key={v} style={{ fontSize: 10, color: T.textMut }}>{v}</span>)}</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\ntype HSL = [number, number, number];\n\nconst PALETTE = [\"#f44336\",\"#e91e63\",\"#9c27b0\",\"#673ab7\",\"#3f51b5\",\"#2196f3\",\"#03a9f4\",\"#00bcd4\",\"#009688\",\"#4caf50\",\"#8bc34a\",\"#cddc39\",\"#ffeb3b\",\"#ffc107\",\"#ff9800\",\"#ff5722\",\"#795548\",\"#607d8b\",\"#9e9e9e\",\"#000000\",\"#ffffff\",\"#0288d1\",\"#01579b\",\"#43a047\",\"#e53935\",\"#f57c00\"];\n\nfunction hexToHsl(hex: string): HSL {\n const r = parseInt(hex.slice(1,3),16)/255, g = parseInt(hex.slice(3,5),16)/255, b = parseInt(hex.slice(5,7),16)/255;\n const max = Math.max(r,g,b), min = Math.min(r,g,b); let h = 0, s = 0; const l = (max+min)/2;\n if (max !== min) { const d = max-min; s = l > .5 ? d/(2-max-min) : d/(max+min); h = max === r ? ((g-b)/d + (g<b?6:0))/6 : max === g ? ((b-r)/d+2)/6 : ((r-g)/d+4)/6; }\n return [Math.round(h*360), Math.round(s*100), Math.round(l*100)];\n}\nfunction hslToHex(h: number, s: number, l: number): string {\n s /= 100; l /= 100;\n const a = s * Math.min(l, 1-l);\n const f = (n: number) => { const k = (n+h/30)%12; const c = l - a*Math.max(Math.min(k-3, 9-k, 1), -1); return Math.round(255*c).toString(16).padStart(2,\"0\"); };\n return \"#\" + f(0) + f(8) + f(4);\n}\n\nexport interface ColorpickerProps {\n value?: string;\n onChange?: (hex: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Colorpicker({ value = \"#0288d1\", onChange, style }: ColorpickerProps) {\n const [hsl, setHsl] = useState<HSL>(() => hexToHsl(value));\n const hex = hslToHex(...hsl);\n useEffect(injectStyles, []);\n const set = (h: HSL) => { setHsl(h); onChange?.(hslToHex(...h)); };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ width: 200, height: 120, borderRadius: T.r, marginBottom: 12, background: `linear-gradient(to bottom, transparent, black), linear-gradient(to right, white, hsl(${hsl[0]},100%,50%))`, cursor: \"crosshair\" }} />\n {([[\"Hue\", 0, 360, hsl[0]], [\"Saturation\", 0, 100, hsl[1]], [\"Lightness\", 0, 100, hsl[2]]] as [string, number, number, number][]).map(([lbl, mn, mx, val], idx) => (\n <div key={lbl} style={{ marginBottom: idx < 2 ? 8 : 12 }}>\n <div className=\"dhx dhx-label\">{lbl}{idx > 0 ? ` (${val}%)` : \"\"}</div>\n <input type=\"range\" min={mn} max={mx} value={val} onChange={e => { const nv = [...hsl] as HSL; nv[idx] = +e.target.value; set(nv); }} style={{ width: \"100%\", accentColor: T.primary }} />\n </div>\n ))}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 12 }}>\n <div style={{ width: 36, height: 36, borderRadius: T.r, background: hex, border: `1px solid ${T.border}`, flexShrink: 0 }} />\n <input className=\"dhx dhx-input\" style={{ flex: 1, fontFamily: \"monospace\", fontSize: 12 }} value={hex}\n onChange={e => { try { set(hexToHsl(e.target.value)); onChange?.(e.target.value); } catch { /* invalid hex */ } }} />\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(13, 1fr)\", gap: 3 }}>\n {PALETTE.map(c => (\n <div key={c} onClick={() => { setHsl(hexToHsl(c)); onChange?.(c); }}\n style={{ width: 14, height: 14, borderRadius: 2, background: c, cursor: \"pointer\", border: hex === c ? `2px solid ${T.text}` : \"1px solid rgba(0,0,0,.15)\", transition: \"transform .1s\" }}\n onMouseEnter={e => (e.currentTarget.style.transform = \"scale(1.3)\")}\n onMouseLeave={e => (e.currentTarget.style.transform = \"scale(1)\")} />\n ))}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport type PopupPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\";\n\nexport interface PopupProps {\n trigger: React.ReactNode;\n children?: React.ReactNode;\n placement?: PopupPlacement;\n style?: React.CSSProperties;\n}\n\nexport function Popup({ trigger, children, placement = \"bottom-start\", style }: PopupProps) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<React.CSSProperties>({ top: \"100%\", left: 0 });\n const ref = useRef<HTMLDivElement>(null);\n const trigRef = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n\n const toggle = () => {\n setOpen(o => {\n if (!o && trigRef.current) {\n const r = trigRef.current.getBoundingClientRect();\n const placements: Record<PopupPlacement, React.CSSProperties> = {\n \"bottom-start\": { top: r.height + 4, left: 0 },\n \"bottom-end\": { top: r.height + 4, right: 0, left: \"auto\" },\n \"top-start\": { bottom: r.height + 4, top: \"auto\", left: 0 },\n };\n setPos(placements[placement] || placements[\"bottom-start\"]);\n }\n return !o;\n });\n };\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\" }}>\n <div ref={trigRef} onClick={toggle}>{trigger}</div>\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", ...pos, zIndex: 200, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, boxShadow: T.shadowLg, ...style }}>\n {children}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useDrag } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface WindowProps {\n title?: string;\n children?: React.ReactNode;\n width?: number | string;\n height?: number | string;\n closable?: boolean;\n movable?: boolean;\n modal?: boolean;\n defaultOpen?: boolean;\n footer?: React.ReactNode;\n onClose?: () => void;\n style?: React.CSSProperties;\n}\n\nexport function Window({ title, children, width = 480, height, closable = true, movable = true, modal = false, defaultOpen = true, footer, onClose, style }: WindowProps) {\n const [open, setOpen] = useState(defaultOpen);\n const [pos, setPos] = useState({ x: 0, y: 0 });\n useEffect(injectStyles, []);\n\n const drag = useDrag(useCallback((x: number, y: number) => movable && setPos({ x, y }), [movable]));\n const handleClose = () => { setOpen(false); onClose?.(); };\n\n if (!open) return null;\n return (\n <>\n {modal && <div style={{ position: \"fixed\", inset: 0, background: \"rgba(0,0,0,.45)\", zIndex: 900 }} onClick={closable ? handleClose : undefined} />}\n <div className=\"dhx\" style={{ position: modal ? \"fixed\" : \"absolute\", left: \"50%\", top: \"50%\", transform: `translate(calc(-50% + ${pos.x}px), calc(-50% + ${pos.y}px))`, width, ...(height ? { height } : {}), background: T.surface, borderRadius: T.rMd, boxShadow: T.shadowLg, zIndex: 901, display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", ...style }}>\n <div onMouseDown={e => drag(e, pos.x, pos.y)} style={{ display: \"flex\", alignItems: \"center\", padding: \"12px 16px\", borderBottom: `1px solid ${T.border}`, cursor: movable ? \"grab\" : \"default\", background: T.bg, gap: 8, userSelect: \"none\" }}>\n <span style={{ flex: 1, fontWeight: 700, fontSize: 15 }}>{title}</span>\n {closable && <button onClick={handleClose} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", width: 28, height: 28, borderRadius: T.r, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 18, color: T.textSec }}\n onMouseEnter={e => (e.currentTarget.style.background = T.border)} onMouseLeave={e => (e.currentTarget.style.background = \"none\")}>×</button>}\n </div>\n <div className=\"dhx-scroll\" style={{ flex: 1, minHeight: 0, padding: 20, overflowY: \"auto\" }}>{children}</div>\n {footer && <div style={{ padding: \"12px 16px\", borderTop: `1px solid ${T.border}`, display: \"flex\", justifyContent: \"flex-end\", gap: 8, background: T.bg }}>{footer}</div>}\n </div>\n </>\n );\n}\n","import { useState, useCallback, useEffect, createContext, useContext } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport type MessageType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface MessageOptions {\n type?: MessageType;\n title?: string;\n text?: string;\n duration?: number;\n confirm?: (ok: boolean) => void;\n}\n\ninterface MessageItem extends MessageOptions { id: number; }\n\ninterface MessageAPI {\n message: (opts: MessageOptions) => number;\n alert: (title: string, opts?: Omit<MessageOptions, \"title\">) => number;\n confirm: (title: string, cb: (ok: boolean) => void, opts?: Omit<MessageOptions, \"title\" | \"confirm\">) => number;\n}\n\nexport const MessageContext = createContext<MessageAPI | null>(null);\n\nconst ICONS: Record<MessageType, string> = { success: \"✓\", error: \"✕\", warning: \"⚠\", info: \"ℹ\" };\nconst COLORS: Record<MessageType, string> = { success: T.success, error: T.danger, warning: T.warning, info: T.primary };\n\nexport function MessageProvider({ children }: { children: React.ReactNode }) {\n const [messages, setMessages] = useState<MessageItem[]>([]);\n useEffect(injectStyles, []);\n\n const remove = useCallback((id: number) => setMessages(m => m.filter(x => x.id !== id)), []);\n const add = useCallback((opts: MessageOptions) => {\n const id = Date.now();\n setMessages(m => [...m, { id, ...opts }]);\n if (opts.duration !== 0) setTimeout(() => remove(id), opts.duration || 4000);\n return id;\n }, [remove]);\n\n const api: MessageAPI = {\n message: add,\n alert: (title, opts) => add({ type: \"info\", title, ...opts }),\n confirm: (title, cb, opts) => add({ type: \"warning\", title, confirm: cb, ...opts }),\n };\n\n return (\n <MessageContext.Provider value={api}>\n {children}\n <div style={{ position: \"fixed\", top: 20, right: 20, zIndex: 9999, display: \"flex\", flexDirection: \"column\", gap: 8, pointerEvents: \"none\" }}>\n {messages.map(m => {\n const type = m.type || \"info\";\n return (\n <div key={m.id} style={{ background: T.surface, border: `1px solid ${T.border}`, borderLeft: `4px solid ${COLORS[type]}`, borderRadius: T.r, boxShadow: T.shadowLg, padding: \"12px 16px\", minWidth: 280, maxWidth: 380, pointerEvents: \"all\", display: \"flex\", gap: 10, alignItems: \"flex-start\", animation: \"dhx-toast .3s ease\" }}>\n <span style={{ fontSize: 18, color: COLORS[type], lineHeight: 1 }}>{ICONS[type]}</span>\n <div style={{ flex: 1 }}>\n {m.title && <div style={{ fontWeight: 600, fontSize: 13, marginBottom: m.text ? 3 : 0 }}>{m.title}</div>}\n {m.text && <div style={{ fontSize: 12, color: T.textSec, lineHeight: 1.5 }}>{m.text}</div>}\n {m.confirm && (\n <div style={{ display: \"flex\", gap: 6, marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(true); remove(m.id); }}>Confirm</button>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(false); remove(m.id); }}>Cancel</button>\n </div>\n )}\n </div>\n <button onClick={() => remove(m.id)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 14, lineHeight: 1, padding: 0 }}>×</button>\n </div>\n );\n })}\n </div>\n </MessageContext.Provider>\n );\n}\n\nexport function useMessage(): MessageAPI {\n const ctx = useContext(MessageContext);\n if (!ctx) throw new Error(\"useMessage must be used inside <MessageProvider>\");\n return ctx;\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface ListItem {\n id?: string | number;\n value?: string;\n [key: string]: unknown;\n}\n\nexport interface ListProps {\n data?: ListItem[];\n template?: (item: ListItem) => string;\n keyNavigation?: boolean;\n multiselection?: boolean;\n editable?: boolean;\n height?: number | string;\n onSelect?: (item: ListItem) => void;\n onEdit?: (item: ListItem, index: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function List({ data = [], template, keyNavigation = true, multiselection = false, editable = false, height = 400, onSelect, onEdit, style }: ListProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [editing, setEditing] = useState<number | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [focused, setFocused] = useState<number | null>(null);\n useEffect(injectStyles, []);\n\n const handleClick = (item: ListItem, i: number) => {\n const id = item.id ?? i;\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n setFocused(i); onSelect?.(item);\n };\n const commitEdit = (item: ListItem, i: number) => { onEdit?.({ ...item, value: editVal }, i); setEditing(null); };\n\n return (\n <div className=\"dhx dhx-scroll\" style={{ height, overflowY: \"auto\", border: `1px solid ${T.border}`, borderRadius: T.r, background: T.surface, ...style }}\n tabIndex={0}\n onKeyDown={e => {\n if (!keyNavigation) return;\n if (e.key === \"ArrowDown\") setFocused(f => Math.min((f ?? -1) + 1, data.length - 1));\n if (e.key === \"ArrowUp\") setFocused(f => Math.max((f ?? 1) - 1, 0));\n }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n const isFoc = focused === i;\n return (\n <div key={String(id)} onClick={() => handleClick(item, i)} onDoubleClick={() => editable && (setEditing(i), setEditVal(String(item.value || \"\")))}\n style={{ display: \"flex\", alignItems: \"center\", padding: \"0 12px\", height: 40, cursor: \"pointer\", fontSize: 13, borderBottom: `1px solid ${T.border}`, background: isSel ? T.primaryLt : isFoc ? T.bg : T.surface, color: isSel ? T.primary : T.text, outline: isFoc ? `2px solid ${T.primary}44` : \"none\", transition: \"background .1s\" }}>\n {editing === i ? (\n <input autoFocus className=\"dhx dhx-input\" style={{ height: 28, flex: 1 }} value={editVal} onChange={e => setEditVal(e.target.value)}\n onBlur={() => commitEdit(item, i)} onKeyDown={e => { if (e.key === \"Enter\") commitEdit(item, i); if (e.key === \"Escape\") setEditing(null); }} onClick={e => e.stopPropagation()} />\n ) : template ? (\n <div dangerouslySetInnerHTML={{ __html: template(item) }} style={{ flex: 1 }} />\n ) : (\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{String(item.value ?? \"\")}</span>\n )}\n </div>\n );\n })}\n {data.length === 0 && <div style={{ padding: 24, textAlign: \"center\", color: T.textMut }}>No items</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface DataViewItem {\n id?: string | number;\n title?: string;\n value?: string;\n subtitle?: string;\n img?: string;\n [key: string]: unknown;\n}\n\nexport interface DataViewProps {\n data?: DataViewItem[];\n template?: (item: DataViewItem) => string;\n itemsInRow?: number;\n gap?: number;\n multiselection?: boolean;\n onSelect?: (item: DataViewItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function DataView({ data = [], template, itemsInRow = 3, gap = 12, multiselection = false, onSelect, style }: DataViewProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n useEffect(injectStyles, []);\n\n const handleClick = (item: DataViewItem) => {\n const id = item.id ?? String(item.title);\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n onSelect?.(item);\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"grid\", gridTemplateColumns: `repeat(${itemsInRow}, 1fr)`, gap, padding: gap, ...style }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n return (\n <div key={String(id)} onClick={() => handleClick(item)}\n style={{ background: T.surface, border: `2px solid ${isSel ? T.primary : T.border}`, borderRadius: T.rMd, overflow: \"hidden\", cursor: \"pointer\", transition: \"all .15s\", boxShadow: isSel ? `0 0 0 3px ${T.primary}33` : T.shadow, transform: isSel ? \"translateY(-2px)\" : \"none\" }}\n onMouseEnter={e => { e.currentTarget.style.boxShadow = T.shadowLg; e.currentTarget.style.transform = \"translateY(-2px)\"; }}\n onMouseLeave={e => { e.currentTarget.style.boxShadow = isSel ? `0 0 0 3px ${T.primary}33` : T.shadow; e.currentTarget.style.transform = isSel ? \"translateY(-2px)\" : \"none\"; }}>\n {template ? <div dangerouslySetInnerHTML={{ __html: template(item) }} /> : (\n <div style={{ padding: 16 }}>\n {item.img && <img src={item.img} alt={item.title || \"\"} style={{ width: \"100%\", borderRadius: T.r, marginBottom: 8, display: \"block\" }} />}\n <div style={{ fontWeight: 600, fontSize: 14, marginBottom: 4 }}>{item.title || item.value}</div>\n {item.subtitle && <div style={{ fontSize: 12, color: T.textSec }}>{item.subtitle}</div>}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TreeNode {\n id: string;\n value?: string;\n count?: number;\n items?: TreeNode[];\n opened?: boolean;\n}\n\nexport interface TreeProps {\n data?: TreeNode[];\n checkbox?: boolean;\n editable?: boolean;\n dragMode?: \"both\" | \"move\" | \"copy\";\n tooltip?: (node: TreeNode) => string;\n onSelect?: (node: TreeNode) => void;\n onCheck?: (id: string, checked: boolean) => void;\n onChange?: (data: TreeNode[]) => void;\n style?: React.CSSProperties;\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────────── */\n\nfunction cloneTree(nodes: TreeNode[]): TreeNode[] {\n return nodes.map(n => ({ ...n, items: n.items ? cloneTree(n.items) : undefined }));\n}\n\nfunction collectExpanded(nodes: TreeNode[], result: Record<string, boolean> = {}): Record<string, boolean> {\n nodes.forEach(n => {\n if (n.opened) result[n.id] = true;\n if (n.items) collectExpanded(n.items, result);\n });\n return result;\n}\n\n/** Remove node by id. Returns [newTree, removedNode]. */\nfunction removeNode(nodes: TreeNode[], id: string): [TreeNode[], TreeNode | null] {\n let removed: TreeNode | null = null;\n const result = nodes\n .filter(n => { if (n.id === id) { removed = n; return false; } return true; })\n .map(n => {\n if (n.items) {\n const [newItems, r] = removeNode(n.items, id);\n if (r) removed = r;\n return { ...n, items: newItems };\n }\n return n;\n });\n return [result, removed];\n}\n\n/** Insert node relative to targetId. */\nfunction insertNode(\n nodes: TreeNode[],\n targetId: string,\n node: TreeNode,\n pos: \"before\" | \"after\" | \"inside\",\n): TreeNode[] {\n if (pos === \"inside\") {\n return nodes.map(n => {\n if (n.id === targetId) return { ...n, items: [...(n.items || []), node] };\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n }\n // Check if target is at this level\n const atThisLevel = nodes.some(n => n.id === targetId);\n if (atThisLevel) {\n const result: TreeNode[] = [];\n for (const n of nodes) {\n if (n.id === targetId) {\n if (pos === \"before\") { result.push(node); result.push(n); }\n else { result.push(n); result.push(node); }\n } else {\n result.push(n);\n }\n }\n return result;\n }\n // Recurse into children\n return nodes.map(n => {\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n}\n\n/** Returns true if ancestorId contains targetId somewhere in its subtree. */\nfunction isAncestor(nodes: TreeNode[], ancestorId: string, targetId: string): boolean {\n function check(n: TreeNode): boolean {\n if (n.id === ancestorId) {\n const hasDesc = (x: TreeNode): boolean => x.id === targetId || (x.items?.some(hasDesc) ?? false);\n return n.items?.some(hasDesc) ?? false;\n }\n return n.items?.some(check) ?? false;\n }\n return nodes.some(check);\n}\n\n/** Update a node's value in the tree. */\nfunction updateValue(nodes: TreeNode[], id: string, value: string): TreeNode[] {\n return nodes.map(n =>\n n.id === id\n ? { ...n, value }\n : { ...n, items: n.items ? updateValue(n.items, id, value) : undefined }\n );\n}\n\n/** Collect child check stats (for indeterminate state). */\nfunction childStats(node: TreeNode, checked: Record<string, boolean>): { total: number; checkedCount: number } {\n let total = 0, checkedCount = 0;\n const visit = (n: TreeNode) => {\n total++;\n if (checked[n.id]) checkedCount++;\n n.items?.forEach(visit);\n };\n node.items?.forEach(visit);\n return { total, checkedCount };\n}\n\n/* ── Component ────────────────────────────────────────────────────────── */\n\nexport function Tree({\n data = [], checkbox = false, editable = false,\n dragMode, tooltip, onSelect, onCheck, onChange, style,\n}: TreeProps) {\n const [nodes, setNodes] = useState<TreeNode[]>(() => cloneTree(data));\n const [expanded, setExpanded] = useState<Record<string, boolean>>(() => collectExpanded(data));\n const [selected, setSelected] = useState<string | null>(null);\n const [checked, setChecked] = useState<Record<string, boolean>>({});\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [dragId, setDragId] = useState<string | null>(null);\n const [dropTarget, setDropTarget] = useState<{ id: string; pos: \"before\" | \"after\" | \"inside\" } | null>(null);\n useEffect(injectStyles, []);\n\n useEffect(() => {\n setNodes(cloneTree(data));\n setExpanded(prev => ({ ...collectExpanded(data), ...prev }));\n }, [data]);\n\n const toggle = (id: string) => setExpanded(e => ({ ...e, [id]: !e[id] }));\n\n const handleCheck = (id: string, val: boolean) => {\n setChecked(c => ({ ...c, [id]: val }));\n onCheck?.(id, val);\n };\n\n const commitEdit = () => {\n if (!editingId) return;\n const id = editingId, val = editVal;\n setEditingId(null);\n setNodes(prev => {\n const updated = updateValue(prev, id, val);\n onChange?.(updated);\n return updated;\n });\n };\n\n /* ── Drag handlers ──────────────────────────────────────────────────── */\n\n const handleDragStart = (e: React.DragEvent, id: string) => {\n e.dataTransfer.effectAllowed = \"move\";\n setDragId(id);\n };\n\n const handleDragOver = (e: React.DragEvent, id: string) => {\n if (!dragId || dragId === id || isAncestor(nodes, dragId, id)) return;\n e.preventDefault();\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const y = e.clientY - rect.top;\n const h = rect.height;\n const pos: \"before\" | \"after\" | \"inside\" = y < h * 0.25 ? \"before\" : y > h * 0.75 ? \"after\" : \"inside\";\n setDropTarget(dt => (dt?.id === id && dt?.pos === pos) ? dt : { id, pos });\n };\n\n const handleDrop = (e: React.DragEvent, targetId: string) => {\n e.preventDefault();\n if (!dragId || !dropTarget || dragId === targetId) { setDropTarget(null); setDragId(null); return; }\n setNodes(prev => {\n const [withoutDrag, dragged] = removeNode(prev, dragId);\n if (!dragged) return prev;\n const result = insertNode(withoutDrag, targetId, dragged, dropTarget.pos);\n onChange?.(result);\n return result;\n });\n if (dropTarget.pos === \"inside\") setExpanded(e => ({ ...e, [targetId]: true }));\n setDropTarget(null);\n setDragId(null);\n };\n\n const handleDragEnd = () => { setDragId(null); setDropTarget(null); };\n\n /* ── Render node ────────────────────────────────────────────────────── */\n\n const renderNode = (node: TreeNode, depth = 0): React.ReactNode => {\n const hasChildren = (node.items?.length ?? 0) > 0;\n const isExp = expanded[node.id];\n const isSel = selected === node.id;\n const isDragging = dragId === node.id;\n const isDrop = dropTarget?.id === node.id;\n\n // Checkbox indeterminate logic\n let isChecked = !!checked[node.id];\n let isIndet = false;\n if (checkbox && hasChildren) {\n const { total, checkedCount } = childStats(node, checked);\n if (checkedCount > 0 && checkedCount < total) { isIndet = true; }\n else if (total > 0 && checkedCount === total) { isChecked = true; }\n }\n\n const dropShadow: React.CSSProperties = isDrop && dropTarget!.pos !== \"inside\"\n ? { boxShadow: dropTarget!.pos === \"before\" ? `inset 0 2px 0 0 ${T.primary}` : `inset 0 -2px 0 0 ${T.primary}` }\n : {};\n\n const rowBg = isDrop && dropTarget!.pos === \"inside\"\n ? T.primaryLt\n : isSel ? T.primaryLt : \"transparent\";\n\n return (\n <div key={node.id} style={{ opacity: isDragging ? 0.4 : 1 }}>\n <div\n draggable={!!dragMode}\n onDragStart={dragMode ? e => handleDragStart(e, node.id) : undefined}\n onDragOver={dragMode ? e => handleDragOver(e, node.id) : undefined}\n onDrop={dragMode ? e => handleDrop(e, node.id) : undefined}\n onDragEnd={dragMode ? handleDragEnd : undefined}\n title={tooltip?.(node)}\n onClick={() => {\n setSelected(node.id);\n onSelect?.(node);\n if (hasChildren) toggle(node.id);\n }}\n onDoubleClick={() => {\n if (editable) { setEditingId(node.id); setEditVal(node.value || \"\"); }\n }}\n style={{\n display: \"flex\", alignItems: \"center\", gap: 4,\n padding: `5px 8px 5px ${12 + depth * 18}px`,\n cursor: dragMode ? \"grab\" : \"pointer\",\n borderRadius: T.r, margin: \"1px 4px\",\n background: rowBg,\n color: isSel ? T.primary : T.text,\n userSelect: \"none\", fontSize: 13,\n ...dropShadow,\n }}\n onMouseEnter={e => !isSel && !isDrop && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSel && !isDrop && (e.currentTarget.style.background = \"transparent\")}\n >\n {/* Expand arrow */}\n <span\n style={{ width: 16, textAlign: \"center\", fontSize: 11, color: T.textMut, flexShrink: 0 }}\n onClick={e => { e.stopPropagation(); if (hasChildren) toggle(node.id); }}\n >\n {hasChildren ? (isExp ? \"▾\" : \"▸\") : \"\"}\n </span>\n\n {/* Folder / file icon */}\n <span style={{ fontSize: 15, flexShrink: 0 }}>\n {hasChildren ? (isExp ? \"📂\" : \"📁\") : \"📄\"}\n </span>\n\n {/* Checkbox */}\n {checkbox && (\n <input\n ref={el => { if (el) el.indeterminate = isIndet; }}\n type=\"checkbox\"\n checked={isChecked}\n onChange={e => { e.stopPropagation(); handleCheck(node.id, e.target.checked); }}\n style={{ cursor: \"pointer\", accentColor: T.primary, flexShrink: 0 }}\n onClick={e => e.stopPropagation()}\n />\n )}\n\n {/* Label or inline editor */}\n {editingId === node.id ? (\n <input\n autoFocus\n className=\"dhx dhx-input\"\n style={{ height: 24, fontSize: 12, flex: 1 }}\n value={editVal}\n onChange={e => setEditVal(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditingId(null); }}\n onClick={e => e.stopPropagation()}\n />\n ) : (\n <span style={{ flex: 1 }}>{node.value}</span>\n )}\n\n {node.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({node.count})</span>\n )}\n </div>\n\n {hasChildren && isExp && (\n <div>{node.items!.map(child => renderNode(child, depth + 1))}</div>\n )}\n </div>\n );\n };\n\n return (\n <div\n className=\"dhx dhx-scroll\"\n style={{ overflowY: \"auto\", ...style }}\n onDragOver={dragMode ? e => e.preventDefault() : undefined}\n onDrop={dragMode ? e => { e.preventDefault(); setDropTarget(null); setDragId(null); } : undefined}\n >\n {nodes.map(n => renderNode(n))}\n </div>\n );\n}\n","import { useState, useMemo, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface PaginationProps {\n total: number;\n pageSize?: number;\n page?: number;\n onChange?: (page: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function Pagination({ total, pageSize = 10, page: pageProp, onChange, style }: PaginationProps) {\n const [page, setPage] = useState(pageProp || 1);\n const totalPages = Math.ceil(total / pageSize);\n useEffect(injectStyles, []);\n\n const goTo = (p: number) => { const np = Math.min(Math.max(1, p), totalPages); setPage(np); onChange?.(np); };\n\n const range = useMemo(() => {\n const pages: (number | \"...\")[] = [];\n const delta = 2;\n for (let i = Math.max(1, page - delta); i <= Math.min(totalPages, page + delta); i++) pages.push(i);\n if ((pages[0] as number) > 1) { if ((pages[0] as number) > 2) pages.unshift(\"...\"); pages.unshift(1); }\n if ((pages[pages.length - 1] as number) < totalPages) { if ((pages[pages.length - 1] as number) < totalPages - 1) pages.push(\"...\"); pages.push(totalPages); }\n return pages;\n }, [page, totalPages]);\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: \"8px 12px\", ...style }}>\n <span style={{ fontSize: 12, color: T.textSec, marginRight: 8 }}>{(page-1)*pageSize+1}–{Math.min(page*pageSize,total)} of {total}</span>\n {([[\"«\", 1], [\"‹\", page - 1]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === 1} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n {range.map((p, i) => (\n <button key={i} onClick={() => typeof p === \"number\" && goTo(p)} className={`dhx dhx-btn ${p === page ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`} style={{ height: 30, minWidth: 30, padding: \"0 8px\", fontSize: 13 }} disabled={p === \"...\"}>{p}</button>\n ))}\n {([[\"›\", page + 1], [\"»\", totalPages]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === totalPages} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { Slider } from \"../Slider\";\nimport { Combobox } from \"../Combobox\";\nimport { Timepicker, TimeValue } from \"../Timepicker\";\nimport T from \"../../tokens\";\n\nexport interface FormFieldOption { value: string; label?: string; }\n\nexport interface FormField {\n type?: \"input\" | \"textarea\" | \"select\" | \"checkbox\" | \"radio\" | \"slider\" | \"combo\" |\n \"datepicker\" | \"timepicker\" | \"fieldset\" | \"spacer\" | \"text\" | \"toggle\" | \"colorpicker\";\n name: string;\n label?: string;\n labelWidth?: number;\n labelPosition?: \"top\" | \"left\";\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n value?: unknown;\n inputType?: string;\n icon?: React.ReactNode;\n offIcon?: React.ReactNode;\n text?: string;\n offText?: string;\n helpMessage?: string;\n options?: FormFieldOption[];\n data?: { id?: string; value: string }[];\n multiselection?: boolean;\n min?: number;\n max?: number;\n step?: number;\n range?: boolean;\n height?: number;\n rows?: FormField[];\n padding?: string | number;\n width?: string | number;\n}\n\nexport interface FormConfig {\n rows?: (FormField | FormField[])[];\n padding?: string | number;\n width?: string | number;\n labelWidth?: number;\n buttons?: boolean;\n buttonAlign?: \"flex-start\" | \"center\" | \"flex-end\";\n submitText?: string;\n resetButton?: boolean;\n resetText?: string;\n}\n\nexport interface FormProps {\n config?: FormConfig;\n defaultValues?: Record<string, unknown>;\n onSubmit?: (values: Record<string, unknown>) => void | Promise<void>;\n style?: React.CSSProperties;\n}\n\nexport function Form({ config = {}, defaultValues = {}, onSubmit, style }: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>(defaultValues);\n const [errors, setErrors] = useState<Record<string, string | null>>({});\n const [openPicker, setOpenPicker] = useState<string | null>(null);\n useEffect(injectStyles, []);\n\n const set = (name: string, val: unknown) => {\n setValues(v => ({ ...v, [name]: val }));\n setErrors(e => ({ ...e, [name]: null }));\n };\n\n const validate = () => {\n const errs: Record<string, string> = {};\n (config.rows || []).flat().forEach(f => {\n if (f && typeof f === \"object\" && \"name\" in f && f.required && !values[f.name])\n errs[f.name] = `${f.label || f.name} is required`;\n });\n setErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const renderField = (field: FormField): React.ReactNode => {\n const val = (values[field.name] ?? field.value ?? \"\") as string;\n const err = errors[field.name];\n\n // label width: field-level override or config-level default\n const lw = field.labelWidth ?? config.labelWidth;\n const inline = lw !== undefined || field.labelPosition === \"left\";\n\n /* ── fieldset ── */\n if (field.type === \"fieldset\") return (\n <fieldset key={field.name} style={{ border: `1px solid ${T.border}`, borderRadius: T.r, padding: \"12px 16px\", marginBottom: 14 }}>\n <legend style={{ fontSize: 12, fontWeight: 700, color: T.textSec, padding: \"0 6px\" }}>{field.label}</legend>\n {(field.rows || []).map(f => renderField(f))}\n </fieldset>\n );\n\n if (field.type === \"spacer\") return (\n <div key={field.name} style={{ height: field.height || 16 }} />\n );\n\n /* ── shared sub-elements ── */\n const labelStyle: React.CSSProperties = lw\n ? { minWidth: lw, width: lw, flexShrink: 0, paddingTop: 8, boxSizing: \"border-box\" }\n : {};\n const labelEl = field.label\n ? <label key=\"lbl\" className=\"dhx dhx-label\" style={{ display: \"flex\", gap: 4, ...labelStyle }}>\n {field.label}{field.required && <span style={{ color: T.danger }}>*</span>}\n </label>\n : null;\n const errEl = err ? <div style={{ fontSize: 11, color: T.danger, marginTop: 3 }}>{err}</div> : null;\n const helpEl = field.helpMessage\n ? <div style={{ fontSize: 11, color: T.textMut, marginTop: 3 }}>ⓘ {field.helpMessage}</div>\n : null;\n\n const common = { key: field.name, className: \"dhx-form-group\" };\n\n /* wrap(content) handles both inline and stacked layouts */\n const wrap = (content: React.ReactNode) => inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1, minWidth: 0 }}>{content}{errEl}{helpEl}</div>\n </div>\n ) : (\n <div {...common}>\n {labelEl}\n {content}\n {errEl}\n {helpEl}\n </div>\n );\n\n /* ── input ── */\n if (!field.type || field.type === \"input\") return wrap(\n <div className=\"dhx-input-wrap\">\n {field.icon && <span className=\"dhx-input-icon\">{field.icon}</span>}\n <input className={`dhx dhx-input${field.icon ? \" dhx-input--with-icon\" : \"\"}`}\n style={{ borderColor: err ? T.danger : undefined }}\n type={field.inputType || \"text\"} placeholder={field.placeholder}\n value={val} onChange={e => set(field.name, e.target.value)} disabled={field.disabled} />\n </div>\n );\n\n /* ── textarea ── */\n if (field.type === \"textarea\") return wrap(\n <textarea className=\"dhx dhx-input\"\n style={{ height: 80, resize: \"vertical\", padding: \"8px 10px\" }}\n placeholder={field.placeholder} value={val}\n onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── select ── */\n if (field.type === \"select\") return wrap(\n <select className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} style={{ cursor: \"pointer\" }}>\n <option value=\"\">— Select —</option>\n {(field.options || []).map(o => <option key={o.value} value={o.value}>{o.label || o.value}</option>)}\n </select>\n );\n\n /* ── datepicker ── */\n if (field.type === \"datepicker\") return wrap(\n <input type=\"date\" className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── timepicker (popup) ── */\n if (field.type === \"timepicker\") {\n const tv: TimeValue = (values[field.name] as TimeValue) ?? { h: 12, m: 0, ampm: \"AM\" };\n const hasVal = !!(values[field.name]);\n const display = hasVal\n ? `${String(tv.h).padStart(2,\"0\")}:${String(tv.m).padStart(2,\"0\")}${tv.ampm ? \" \" + tv.ampm : \"\"}`\n : (field.placeholder || \"Click to select\");\n const trigger = (\n <div style={{ position: \"relative\" }}>\n <div className=\"dhx dhx-input\"\n style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}\n onClick={() => setOpenPicker(openPicker === field.name ? null : field.name)}>\n <span style={{ color: hasVal ? T.text : T.textMut }}>{display}</span>\n <span style={{ fontSize: 13, color: T.textSec }}>🕐</span>\n </div>\n {openPicker === field.name && (\n <div style={{ position: \"absolute\", zIndex: 100, top: \"calc(100% + 4px)\", left: 0 }}>\n <Timepicker value={tv} controls onChange={v => { set(field.name, v); setOpenPicker(null); }} />\n </div>\n )}\n </div>\n );\n return wrap(trigger);\n }\n\n /* ── colorpicker ── */\n if (field.type === \"colorpicker\") return wrap(\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <input type=\"color\" value={(val as string) || \"#000000\"} onChange={e => set(field.name, e.target.value)}\n style={{ width: 36, height: 36, padding: 2, border: `1px solid ${T.border}`, borderRadius: T.r, cursor: \"pointer\", background: \"none\" }} />\n <span style={{ fontSize: 12, color: T.textSec, fontFamily: \"monospace\" }}>{(val as string) || \"#000000\"}</span>\n </div>\n );\n\n /* ── text (static) ── */\n if (field.type === \"text\") return wrap(\n <p style={{ margin: \"6px 0\", fontSize: 13, color: T.text }}>{field.value as string}</p>\n );\n\n /* ── checkbox ── */\n if (field.type === \"checkbox\") return (\n <div {...common}>\n {inline\n ? <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {/* push checkbox to label-width offset */}\n {lw && <div style={{ width: lw, flexShrink: 0 }} />}\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n </div>\n : <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n }\n {helpEl}\n </div>\n );\n\n /* ── radio ── */\n if (field.type === \"radio\") {\n const options = (field.options || []).map(o => (\n <label key={o.value} style={{ display: \"flex\", alignItems: \"center\", gap: 6, cursor: \"pointer\", fontSize: 13 }}>\n <input type=\"radio\" name={field.name} value={o.value} checked={val === o.value}\n onChange={() => set(field.name, o.value)} style={{ accentColor: T.primary, cursor: \"pointer\" }} />\n {o.label || o.value}\n </label>\n ));\n return wrap(\n <div style={{ display: \"flex\", gap: 16, flexWrap: \"wrap\", paddingTop: 8 }}>{options}</div>\n );\n }\n\n /* ── slider ── */\n if (field.type === \"slider\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Slider min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Slider label={field.label} min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n );\n\n /* ── combo ── */\n if (field.type === \"combo\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Combobox data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Combobox label={field.label} data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n );\n\n /* ── toggle ── */\n if (field.type === \"toggle\") {\n const isOn = !!val;\n const icon = isOn ? field.icon : (field.offIcon || field.icon);\n const txt = isOn ? (field.text || field.label) : (field.offText || field.text || field.label);\n return (\n <div {...common}>\n {inline && lw && <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <div style={{ width: lw, flexShrink: 0 }} />\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>\n </div>}\n {!inline && <label style={{ display: \"flex\", alignItems: \"center\", gap: 10, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>}\n {helpEl}\n </div>\n );\n }\n\n return null;\n };\n\n const renderRows = (rows: (FormField | FormField[])[]) =>\n rows.map((row, i) =>\n Array.isArray(row)\n ? <div key={i} style={{ display: \"flex\", gap: 12, alignItems: \"flex-start\" }}>{row.map(renderField)}</div>\n : renderField(row)\n );\n\n return (\n <div className=\"dhx\" style={{ padding: config.padding || 0, width: config.width || \"100%\", ...style }}>\n {renderRows(config.rows || [])}\n {(config.buttons || onSubmit) && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: config.buttonAlign || \"flex-start\", marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => validate() && onSubmit?.(values)}>\n {config.submitText || \"Submit\"}\n </button>\n {config.resetButton !== false &&\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => { setValues(defaultValues); setErrors({}); }}>\n {config.resetText || \"Reset\"}\n </button>\n }\n </div>\n )}\n </div>\n );\n}\n\nfunction Switch({ on, onClick }: { on: boolean; onClick: () => void }) {\n return (\n <div style={{ position: \"relative\", width: 40, height: 22, flexShrink: 0 }} onClick={onClick}>\n <div style={{ width: 40, height: 22, borderRadius: 11, background: on ? T.primary : T.border, transition: \"background 0.2s\" }} />\n <div style={{ position: \"absolute\", top: 3, left: on ? 21 : 3, width: 16, height: 16, borderRadius: \"50%\", background: \"#fff\", transition: \"left 0.2s\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\" }} />\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface RibbonSubItem {\n id?: string;\n type?: \"separator\" | \"sep\" | \"input\" | \"selectButton\";\n value?: string; // primary text label\n text?: string; // alias for value (backward compat)\n icon?: React.ReactNode;\n active?: boolean;\n twoState?: boolean;\n group?: string;\n disabled?: boolean;\n hidden?: boolean;\n tooltip?: string;\n label?: string; // prefix label for input fields\n size?: \"auto\" | \"small\"; // \"auto\" = tall button, \"small\" = compact\n placeholder?: string;\n width?: number;\n count?: number;\n items?: { value: string; hotkey?: string }[];\n onClick?: (item: RibbonSubItem) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface RibbonBlock {\n type: \"block\";\n title?: string; // section label shown at bottom (primary)\n label?: string; // alias for title (backward compat)\n direction?: \"col\" | \"row\";\n items?: (RibbonSubItem | RibbonBlock)[];\n}\n\nexport type RibbonItem = RibbonSubItem | RibbonBlock;\n\nexport interface RibbonProps {\n items?: RibbonItem[];\n onAction?: (id: string, item: RibbonSubItem) => void;\n style?: React.CSSProperties;\n}\n\n/* ── Flatten all leaf subitems (for twoState/group state init) ── */\nfunction collectAll(items: (RibbonSubItem | RibbonBlock)[]): RibbonSubItem[] {\n const result: RibbonSubItem[] = [];\n for (const item of items) {\n if (item.type === \"block\") {\n result.push(...collectAll((item as RibbonBlock).items || []));\n } else {\n result.push(item as RibbonSubItem);\n }\n }\n return result;\n}\n\nexport function Ribbon({ items = [], onAction, style }: RibbonProps) {\n useEffect(injectStyles, []);\n\n const [activeMap, setActiveMap] = useState<Record<string, boolean>>(() => {\n const map: Record<string, boolean> = {};\n for (const si of collectAll(items)) {\n if (si.id) map[si.id] = !!si.active;\n }\n return map;\n });\n\n const allItems = collectAll(items);\n\n const handleClick = (si: RibbonSubItem) => {\n if (si.disabled) return;\n if (si.id) {\n if (si.group) {\n const sameGroup = allItems.filter(s => s.group === si.group && s.id);\n setActiveMap(prev => {\n const next = { ...prev };\n for (const s of sameGroup) next[s.id!] = false;\n next[si.id!] = true;\n return next;\n });\n } else if (si.twoState) {\n setActiveMap(prev => ({ ...prev, [si.id!]: !prev[si.id!] }));\n }\n }\n si.onClick?.(si);\n if (si.id) onAction?.(si.id, si);\n };\n\n /* ── Render a leaf subitem ── */\n const renderSubItem = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n if (si.hidden) return null;\n\n const label = si.value ?? si.text;\n const isLarge = si.size === \"auto\";\n const isActive = si.id !== undefined ? (activeMap[si.id] ?? !!si.active) : !!si.active;\n\n if (si.type === \"separator\" || si.type === \"sep\") return (\n <div key={key} style={{ width: 1, background: T.border, margin: \"4px 2px\", alignSelf: \"stretch\" }} />\n );\n\n if (si.type === \"input\") return (\n <div key={key} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", justifyContent: \"center\", padding: \"2px 4px\", gap: 2 }}>\n {si.label && <span style={{ fontSize: 10, color: T.textMut }}>{si.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {si.icon && (\n <span style={{ position: \"absolute\", left: 6, fontSize: 13, color: T.textMut, pointerEvents: \"none\", zIndex: 1 }}>\n {si.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: si.width || 110, height: 26, fontSize: 12, paddingLeft: si.icon ? 24 : undefined }}\n placeholder={si.placeholder}\n defaultValue={si.value}\n onChange={e => si.onChange?.(e.target.value)}\n />\n </div>\n </div>\n );\n\n if (si.type === \"selectButton\") return (\n <select\n key={key}\n className=\"dhx dhx-input\"\n style={{ height: 26, fontSize: 12, cursor: \"pointer\", margin: 2, width: si.width }}\n defaultValue={si.value}\n onChange={e => si.onChange?.(e.target.value)}\n >\n {si.items?.map(o => <option key={o.value} value={o.value}>{o.value}</option>)}\n </select>\n );\n\n return (\n <button\n key={key}\n title={si.tooltip}\n disabled={si.disabled}\n className=\"dhx dhx-btn dhx-btn-ghost\"\n style={{\n flexDirection: isLarge ? \"column\" : \"row\",\n alignSelf: isLarge ? \"stretch\" : \"center\",\n justifyContent: \"center\",\n minHeight: isLarge ? 48 : 26,\n padding: isLarge ? \"6px 10px\" : \"0 8px\",\n gap: isLarge ? 4 : 5,\n position: \"relative\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : si.disabled ? T.textMut : T.text,\n opacity: si.disabled ? 0.55 : 1,\n cursor: si.disabled ? \"not-allowed\" : \"pointer\",\n }}\n onClick={() => handleClick(si)}\n >\n {si.icon && (\n <span style={{ fontSize: isLarge ? 22 : 15, lineHeight: 1, flexShrink: 0 }}>{si.icon}</span>\n )}\n {label && (\n <span style={{\n fontSize: 10,\n maxWidth: isLarge ? 64 : undefined,\n textAlign: isLarge ? \"center\" : \"left\",\n lineHeight: 1.2,\n whiteSpace: isLarge ? \"normal\" : \"nowrap\",\n }}>\n {label}\n </span>\n )}\n {si.count !== undefined && (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 14, height: 14,\n background: T.danger, color: \"#fff\",\n borderRadius: 7, fontSize: 9, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 2px\", pointerEvents: \"none\",\n }}>\n {si.count}\n </span>\n )}\n </button>\n );\n };\n\n /* ── Render an inner block (layout group, no section styling) ── */\n const renderInnerBlock = (block: RibbonBlock, key: string | number): React.ReactNode => (\n <div key={key} style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"flex-start\" : \"center\",\n gap: 2,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, `${key}-${j}`)\n : renderSubItem(sub as RibbonSubItem, `${key}-${j}`)\n )}\n </div>\n );\n\n /* ── Render a top-level section block ── */\n const renderSection = (block: RibbonBlock, key: number): React.ReactNode => {\n const title = block.title || block.label;\n return (\n <div key={key} style={{\n display: \"flex\", flexDirection: \"column\", alignItems: \"stretch\",\n borderRight: `1px solid ${T.border}`,\n padding: \"4px 6px 0\",\n minWidth: 40,\n }}>\n {/* items area */}\n <div style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"stretch\" : \"center\",\n gap: 2,\n flex: 1,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, j)\n : renderSubItem(sub as RibbonSubItem, j)\n )}\n </div>\n\n {/* section title at bottom */}\n {title && (\n <div style={{\n fontSize: 10, color: T.textMut, textAlign: \"center\",\n padding: \"3px 0 4px\", marginTop: 2,\n borderTop: `1px solid ${T.border}`,\n }}>\n {title}\n </div>\n )}\n </div>\n );\n };\n\n const renderItem = (item: RibbonItem, i: number): React.ReactNode => {\n if (item.type === \"block\") return renderSection(item as RibbonBlock, i);\n return renderSubItem(item as RibbonSubItem, i);\n };\n\n return (\n <div className=\"dhx\" style={{\n display: \"flex\", alignItems: \"stretch\",\n background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n overflowX: \"auto\",\n gap: 0,\n minHeight: 72,\n ...style,\n }}>\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface NavbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"imageButton\";\n value?: string;\n icon?: React.ReactNode;\n src?: string;\n items?: MenuItem[];\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n count?: number;\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface NavbarProps {\n logo?: React.ReactNode;\n items?: NavbarItem[];\n vertical?: boolean;\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 3, right: 3,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Navbar({ logo, items = [], vertical = false, onAction, style }: NavbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => { if (item.id && item.twoState && item.active) init[item.id] = true; });\n return init;\n });\n const ref = useRef<HTMLElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: NavbarItem, i: number) => {\n if (item.disabled) return;\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: NavbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{\n [vertical ? \"height\" : \"width\"]: 1,\n background: T.border,\n margin: vertical ? \"4px 8px\" : \"0 6px\",\n alignSelf: \"stretch\",\n }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", margin: \"0 4px\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 200, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 36, height: 36, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.twoState && item.id && activeItems[item.id]);\n const hasDropdown = !!(item.items?.length);\n\n const btnStyle: React.CSSProperties = {\n position: \"relative\",\n height: vertical ? 40 : 36,\n gap: 6,\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n ...(vertical ? {\n width: \"100%\", justifyContent: \"flex-start\",\n padding: \"0 16px\", borderRadius: 0,\n } : {}),\n };\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={btnStyle}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16, flexShrink: 0 }}>{item.icon}</span>}\n {item.value && <span style={{ fontSize: 13 }}>{item.value}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={() => setOpenMenu(null)}\n style={vertical ? { left: \"100%\", top: 0 } : { top: \"100%\" }}\n />\n )}\n </div>\n );\n };\n\n return (\n <nav\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\",\n flexDirection: vertical ? \"column\" : \"row\",\n alignItems: vertical ? \"stretch\" : \"center\",\n background: T.surface,\n borderBottom: vertical ? \"none\" : `1px solid ${T.border}`,\n borderRight: vertical ? `1px solid ${T.border}` : \"none\",\n padding: vertical ? \"8px 0\" : \"0 12px\",\n minHeight: vertical ? undefined : 48,\n gap: 2,\n ...style,\n }}\n >\n {logo && (\n <div style={{\n color: T.text, fontWeight: 800, fontSize: 16,\n padding: vertical ? \"8px 16px 12px\" : \"0 12px 0 4px\",\n borderBottom: vertical ? `1px solid ${T.border}` : \"none\",\n borderRight: vertical ? \"none\" : `1px solid ${T.border}`,\n marginRight: vertical ? 0 : 8,\n marginBottom: vertical ? 4 : 0,\n flexShrink: 0,\n }}>\n {logo}\n </div>\n )}\n {items.map(renderItem)}\n </nav>\n );\n}\n"],"names":["tokens","STYLE_ID","injectStyles","s","T","SIZE_STYLES","Button","children","variant","size","icon","disabled","onClick","style","className","useEffect","jsxs","useClickOutside","ref","callback","handler","e","useDrag","onDrag","dragging","useRef","origin","useCallback","originX","originY","move","me","x","y","ox","oy","up","MenuDropdown","items","onSelect","hov","setHov","useState","item","i","jsx","isHov","_a","_b","Menu","label","open","setOpen","o","ContextMenu","pos","setPos","show","Badge","count","Toolbar","onAction","openMenu","setOpenMenu","activeItems","setActiveItems","init","handleClick","ns","it","prev","renderItem","isActive","hasDropdown","Sidebar","width","collapsedProp","header","footer","collapsed","setCollapsed","selected","setSelected","expanded","setExpanded","w","handleSelect","depth","hasChildren","isExpanded","isSelected","child","c","LayoutCell","config","Layout","rows","cols","type","gap","cells","isRow","cell","Tabbar","views","mode","tabAlign","closable","defaultActive","onBeforeChange","onChange","active","setActive","openTabs","setOpenTabs","v","handleClose","id","t","handleChange","isVertical","visibleViews","tabBar","isDis","activeStyle","activeView","content","B","SortArrows","dir","Grid","columns","data","height","rowHeight","sortable","resizable","editable","stripe","autoWidth","keyNavigation","selection","multiselect","sortKey","setSortKey","sortDir","setSortDir","filter","setFilter","focusRow","setFocusRow","colWidths","setColWidths","editCell","setEditCell","editValue","setEditValue","edits","setEdits","containerRef","containerW","setContainerW","ro","widths","useMemo","total","a","b","extra","sorted","row","key","k","av","bv","cmp","colStats","col","f","nums","r","n","sum","selectOpts","hasFilters","hasFooter","totalW","rowKey","ri","handleSort","d","selectRow","rk","commitEdit","colId","handleKeyDown","next","startResize","ci","startX","startW","ws","nw","cs","wi","first","isSel","rowBg","isEditing","rawVal","display","stats","COLORS","buildTreemap","valueKey","nameKey","roots","root","Chart","series","scales","legend","xKey","tip","Tooltip","leg","Legend","grid","CartesianGrid","xAxis","XAxis","yAxis","YAxis","_c","_d","_e","_f","margin","_g","common","chart","BarChart","Bar","LineChart","Line","AreaChart","Area","s0","dataKey","colorField","PieChart","Pie","name","percent","Cell","radarKey","_h","RadarChart","PolarGrid","PolarAngleAxis","PolarRadiusAxis","Radar","ScatterChart","_i","_j","_k","_l","_m","_n","_o","_p","xField","yField","pts","Scatter","valKey","treeData","borderColor","borderWidth","Treemap","props","h","index","fill","ResponsiveContainer","MONTHS","DAYS","Calendar","value","range","timepicker","today","initDate","view","setView","hovDate","setHovDate","time","setTime","year","month","firstDay","daysInMonth","isToday","dv","handleDay","sel","Timepicker","timeFormat","controls","minuteStep","setH","m","setM","ampm","setAmpm","pending","setPending","hours","_","mins","newH","newM","newAmpm","val","handleCancel","colStyle","cellStyle","Chevron","Combobox","valueProp","placeholder","multiselection","query","setQuery","inputRef","filtered","removeTag","openDropdown","singleDisplayValue","selectedTags","Fragment","Slider","min","max","step","tick","setValue","update","nv","pct","arr","trackFill","trackColor","PALETTE","hexToHsl","hex","g","l","hslToHex","Colorpicker","hsl","setHsl","set","lbl","mn","mx","idx","Popup","trigger","placement","trigRef","toggle","placements","Window","title","movable","modal","defaultOpen","onClose","drag","MessageContext","createContext","ICONS","MessageProvider","messages","setMessages","remove","add","opts","api","cb","useMessage","ctx","useContext","List","template","onEdit","editing","setEditing","editVal","setEditVal","focused","setFocused","isFoc","DataView","itemsInRow","cloneTree","nodes","collectExpanded","result","removeNode","removed","newItems","insertNode","targetId","node","isAncestor","ancestorId","check","hasDesc","updateValue","childStats","checked","checkedCount","visit","Tree","checkbox","dragMode","tooltip","onCheck","setNodes","setChecked","editingId","setEditingId","dragId","setDragId","dropTarget","setDropTarget","handleCheck","updated","handleDragStart","handleDragOver","rect","dt","handleDrop","withoutDrag","dragged","handleDragEnd","renderNode","isExp","isDragging","isDrop","isChecked","isIndet","dropShadow","el","Pagination","pageSize","pageProp","page","setPage","totalPages","goTo","p","np","pages","Form","defaultValues","onSubmit","values","setValues","errors","setErrors","openPicker","setOpenPicker","validate","errs","renderField","field","err","lw","inline","labelStyle","labelEl","errEl","helpEl","wrap","tv","hasVal","options","isOn","txt","Switch","renderRows","on","collectAll","Ribbon","activeMap","setActiveMap","map","si","allItems","sameGroup","renderSubItem","isLarge","renderInnerBlock","block","sub","j","renderSection","Navbar","logo","vertical","btnStyle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dhx-react-suite.umd.cjs","sources":["../src/tokens/index.ts","../src/styles/index.ts","../src/components/Button/Button.tsx","../src/hooks/useClickOutside.ts","../src/hooks/useDrag.ts","../src/components/Menu/Menu.tsx","../src/components/Toolbar/Toolbar.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Layout/Layout.tsx","../src/components/Tabbar/Tabbar.tsx","../src/components/Grid/Grid.tsx","../src/components/Chart/Chart.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Timepicker/Timepicker.tsx","../src/components/Combobox/Combobox.tsx","../src/components/Slider/Slider.tsx","../src/components/Colorpicker/Colorpicker.tsx","../src/components/Popup/Popup.tsx","../src/components/Window/Window.tsx","../src/components/Message/Message.tsx","../src/components/List/List.tsx","../src/components/DataView/DataView.tsx","../src/components/Tree/Tree.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Form/Form.tsx","../src/components/Ribbon/Ribbon.tsx","../src/components/Navbar/Navbar.tsx"],"sourcesContent":["/**\n * Design Tokens — single source of truth for colours, spacing and typography.\n *\n * @example Override for a dark/custom theme:\n * import { tokens } from \"dhx-react-suite\";\n * tokens.primary = \"#7c3aed\";\n */\nconst tokens = {\n primary: \"#0288d1\",\n primaryDk: \"#01579b\",\n primaryLt: \"#e1f5fe\",\n success: \"#43a047\",\n danger: \"#e53935\",\n warning: \"#fb8c00\",\n bg: \"#f5f7fa\",\n surface: \"#ffffff\",\n border: \"#dde3ea\",\n borderDk: \"#b0bec5\",\n text: \"#3d4a5c\",\n textSec: \"#6b7a8d\",\n textMut: \"#9aa5b1\",\n shadow: \"0 2px 8px rgba(0,0,0,.10)\",\n shadowLg: \"0 8px 28px rgba(0,0,0,.14)\",\n r: \"4px\",\n rMd: \"8px\",\n font: \"'Segoe UI', system-ui, -apple-system, sans-serif\",\n};\n\nexport type Tokens = typeof tokens;\nexport default tokens;\n","import T from \"../tokens\";\n\nconst STYLE_ID = \"dhx-react-styles\";\n\n/** Injects a single <style> tag into <head>. Safe to call multiple times. */\nexport function injectStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const s = document.createElement(\"style\");\n s.id = STYLE_ID;\n s.textContent = `\n *,*::before,*::after{box-sizing:border-box}\n .dhx{font-family:${T.font};font-size:14px;color:${T.text}}\n .dhx *{box-sizing:border-box}\n .dhx-scroll::-webkit-scrollbar{width:6px;height:6px}\n .dhx-scroll::-webkit-scrollbar-track{background:${T.bg}}\n .dhx-scroll::-webkit-scrollbar-thumb{background:${T.borderDk};border-radius:3px}\n .dhx-scroll::-webkit-scrollbar-thumb:hover{background:${T.textMut}}\n @keyframes dhx-fade{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n @keyframes dhx-spin{to{transform:rotate(360deg)}}\n @keyframes dhx-toast{from{opacity:0;transform:translateX(110%)}to{opacity:1;transform:translateX(0)}}\n @keyframes dhx-pulse{0%,100%{opacity:1}50%{opacity:.5}}\n .dhx-anim-fade{animation:dhx-fade .15s ease}\n .dhx-btn{display:inline-flex;align-items:center;gap:5px;padding:0 12px;height:32px;border-radius:${T.r};border:1px solid transparent;cursor:pointer;font-size:13px;font-family:inherit;font-weight:500;transition:all .15s ease;outline:none;white-space:nowrap;user-select:none}\n .dhx-btn:focus-visible{box-shadow:0 0 0 3px ${T.primary}33}\n .dhx-btn-primary{background:${T.primary};color:#fff;border-color:${T.primary}}\n .dhx-btn-primary:hover{background:${T.primaryDk};border-color:${T.primaryDk}}\n .dhx-btn-secondary{background:${T.surface};color:${T.text};border-color:${T.border}}\n .dhx-btn-secondary:hover{background:${T.bg};border-color:${T.borderDk}}\n .dhx-btn-ghost{background:transparent;color:${T.textSec};border-color:transparent}\n .dhx-btn-ghost:hover{background:${T.bg};color:${T.text}}\n .dhx-btn-danger{background:${T.danger};color:#fff;border-color:${T.danger}}\n .dhx-btn-danger:hover{background:#c62828;border-color:#c62828}\n .dhx-btn:disabled{opacity:.45;cursor:not-allowed}\n .dhx-input{width:100%;height:32px;padding:0 10px;border:1px solid ${T.border};border-radius:${T.r};font-size:13px;font-family:inherit;color:${T.text};background:${T.surface};outline:none;transition:border-color .15s}\n .dhx-input:focus{border-color:${T.primary};box-shadow:0 0 0 3px ${T.primary}22}\n .dhx-input:disabled{background:${T.bg};color:${T.textMut};cursor:not-allowed}\n .dhx-input-wrap{position:relative;width:100%}\n .dhx-input-wrap .dhx-input-icon{position:absolute;left:9px;top:50%;transform:translateY(-50%);color:${T.textMut};pointer-events:none}\n .dhx-input-wrap .dhx-input--with-icon{padding-left:30px}\n .dhx-label{display:block;font-size:12px;font-weight:600;color:${T.textSec};margin-bottom:5px;letter-spacing:.02em}\n .dhx-form-group{margin-bottom:14px}\n .dhx-card{background:${T.surface};border:1px solid ${T.border};border-radius:${T.rMd};box-shadow:${T.shadow}}\n .dhx-card-padded{padding:16px}\n .dhx-divider{border:none;border-top:1px solid ${T.border};margin:0}\n .dhx-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600}\n .dhx-tag-primary{background:${T.primaryLt};color:${T.primaryDk}}\n .dhx-tag-success{background:#e8f5e9;color:#1b5e20}\n .dhx-tag-danger{background:#ffebee;color:#b71c1c}\n .dhx-tag-warning{background:#fff3e0;color:#e65100}\n `;\n document.head.appendChild(s);\n}\n","import { useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Leading icon element */\n icon?: React.ReactNode;\n disabled?: boolean;\n onClick?: () => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nconst SIZE_STYLES: Record<ButtonSize, React.CSSProperties> = {\n sm: { height: 24, padding: \"0 8px\", fontSize: 12 },\n md: {},\n lg: { height: 38, padding: \"0 18px\", fontSize: 14 },\n};\n\nexport function Button({\n children, variant = \"primary\", size = \"md\",\n icon, disabled, onClick, style, className = \"\",\n}: ButtonProps) {\n useEffect(injectStyles, []);\n return (\n <button\n className={`dhx dhx-btn dhx-btn-${variant} ${className}`}\n style={{ ...SIZE_STYLES[size], ...style }}\n disabled={disabled}\n onClick={onClick}\n >\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {children}\n </button>\n );\n}\n","import { useEffect, RefObject } from \"react\";\n\nexport function useClickOutside(\n ref: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n): void {\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) callback(e);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [ref, callback]);\n}\n","import { useRef, useCallback } from \"react\";\nimport React from \"react\";\n\nexport function useDrag(\n onDrag: (x: number, y: number) => void,\n): (e: React.MouseEvent, originX?: number, originY?: number) => void {\n const dragging = useRef(false);\n const origin = useRef({ x: 0, y: 0, ox: 0, oy: 0 });\n\n return useCallback(\n (e: React.MouseEvent, originX = 0, originY = 0) => {\n dragging.current = true;\n origin.current = { x: e.clientX, y: e.clientY, ox: originX, oy: originY };\n const move = (me: MouseEvent) => {\n if (!dragging.current) return;\n const { x, y, ox, oy } = origin.current;\n onDrag(ox + me.clientX - x, oy + me.clientY - y);\n };\n const up = () => {\n dragging.current = false;\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n e.preventDefault();\n },\n [onDrag],\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface MenuItem {\n id?: string;\n value?: string;\n icon?: React.ReactNode;\n hotkey?: string;\n disabled?: boolean;\n type?: \"separator\";\n items?: MenuItem[];\n}\n\ninterface MenuDropdownProps {\n items: MenuItem[];\n onSelect: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function MenuDropdown({ items, onSelect, style }: MenuDropdownProps) {\n const [hov, setHov] = useState<number | null>(null);\n return (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, minWidth: 180, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, boxShadow: T.shadowLg, zIndex: 200, padding: \"4px 0\", ...style }}>\n {items.map((item, i) => {\n if (item.type === \"separator\") return <div key={i} style={{ height: 1, background: T.border, margin: \"4px 0\" }} />;\n const isHov = hov === i;\n return (\n <div key={item.id || i} style={{ position: \"relative\" }} onMouseEnter={() => setHov(i)} onMouseLeave={() => setHov(null)}>\n <div onClick={() => !item.disabled && !item.items?.length && onSelect(item)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"8px 14px\", cursor: item.disabled ? \"not-allowed\" : \"pointer\", fontSize: 13, color: item.disabled ? T.textMut : T.text, background: isHov && !item.disabled ? T.bg : \"transparent\", opacity: item.disabled ? .5 : 1 }}>\n {item.icon && <span style={{ fontSize: 15, width: 18, textAlign: \"center\" }}>{item.icon}</span>}\n <span style={{ flex: 1 }}>{item.value || item.id}</span>\n {item.hotkey && <span style={{ fontSize: 11, color: T.textMut }}>{item.hotkey}</span>}\n {item.items?.length ? <span style={{ fontSize: 10, color: T.textMut }}>▶</span> : null}\n </div>\n {isHov && item.items?.length ? <MenuDropdown items={item.items} onSelect={onSelect} style={{ position: \"absolute\", left: \"100%\", top: -4 }} /> : null}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface MenuProps {\n items?: MenuItem[];\n label?: string;\n onSelect?: (item: MenuItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Menu({ items = [], label = \"Menu\", onSelect, style }: MenuProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\", ...style }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => setOpen(o => !o)}>\n {label} <span style={{ fontSize: 10 }}>{open ? \"▲\" : \"▼\"}</span>\n </button>\n {open && <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setOpen(false); }} />}\n </div>\n );\n}\n\nexport interface ContextMenuProps {\n items?: MenuItem[];\n onSelect?: (item: MenuItem) => void;\n children: React.ReactNode;\n}\n\nexport function ContextMenu({ items = [], onSelect, children }: ContextMenuProps) {\n const [pos, setPos] = useState<{ x: number; y: number } | null>(null);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setPos(null), []));\n const show = (e: React.MouseEvent) => { e.preventDefault(); setPos({ x: e.clientX, y: e.clientY }); };\n return (\n <div ref={ref} onContextMenu={show} style={{ position: \"relative\", display: \"contents\" }}>\n {children}\n {pos && (\n <div style={{ position: \"fixed\", left: pos.x, top: pos.y, zIndex: 9999 }}>\n <MenuDropdown items={items} onSelect={(item) => { onSelect?.(item); setPos(null); }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface ToolbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"select\" | \"imageButton\";\n value?: string;\n text?: string; // alias for value (backward compat)\n icon?: React.ReactNode;\n src?: string; // imageButton avatar\n items?: MenuItem[]; // dropdown\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n group?: string; // radio-group id\n disabled?: boolean;\n hidden?: boolean;\n count?: number; // notification badge\n label?: string; // prefix label for input/select\n options?: { value: string; label: string }[];\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface ToolbarProps {\n items?: ToolbarItem[];\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Toolbar({ items = [], onAction, style }: ToolbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => {\n if (item.id && (item.twoState || item.group) && item.active) init[item.id] = true;\n });\n return init;\n });\n const ref = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLDivElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: ToolbarItem, i: number) => {\n if (item.disabled) return;\n\n // twoState toggle\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n\n // radio group\n if (item.group && item.id) {\n setActiveItems(s => {\n const ns = { ...s };\n items.forEach(it => { if (it.group === item.group && it.id) ns[it.id] = false; });\n ns[item.id!] = true;\n return ns;\n });\n }\n\n // dropdown\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: ToolbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{ width: 1, background: T.border, margin: \"6px 4px\", alignSelf: \"stretch\" }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 140, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n </div>\n );\n\n /* ── select ── */\n if (item.type === \"select\") return (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {item.label && <span style={{ fontSize: 12, color: T.textSec, fontWeight: 500 }}>{item.label}</span>}\n <select\n className=\"dhx dhx-input\"\n style={{ width: item.width || 100, height: 28, cursor: \"pointer\" }}\n defaultValue={item.value}\n onChange={e => item.onChange?.(e.target.value)}\n >\n {item.options?.map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 32, height: 32, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.id && activeItems[item.id]);\n const label = item.value ?? item.text;\n const hasDropdown = !!(item.items?.length);\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n height: 32, gap: 4,\n position: \"relative\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16 }}>{item.icon}</span>}\n {label && <span style={{ fontSize: 13 }}>{label}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={() => setOpenMenu(null)}\n style={{ top: \"100%\", left: 0 }}\n />\n )}\n </div>\n );\n };\n\n return (\n <div\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\", alignItems: \"center\", gap: 2,\n padding: \"4px 8px\", background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n minHeight: 44, flexWrap: \"wrap\",\n ...style,\n }}\n >\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SidebarItem {\n id: string;\n value?: string;\n icon?: React.ReactNode;\n count?: number;\n type?: \"separator\" | \"customHTML\";\n html?: string;\n items?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items?: SidebarItem[];\n width?: number;\n collapsed?: boolean;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n onSelect?: (item: SidebarItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function Sidebar({ items = [], width = 240, collapsed: collapsedProp, onSelect, header, footer, style }: SidebarProps) {\n const [collapsed, setCollapsed] = useState(collapsedProp ?? false);\n const [selected, setSelected] = useState<string | null>(null);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n useEffect(injectStyles, []);\n\n const w = collapsed ? 56 : width;\n const handleSelect = (item: SidebarItem) => { setSelected(item.id); onSelect?.(item); };\n\n const renderItem = (item: SidebarItem, depth = 0): React.ReactNode => {\n if (item.type === \"separator\") return <div key={item.id} style={{ height: 1, background: T.border, margin: \"6px 8px\" }} />;\n if (item.type === \"customHTML\") return <div key={item.id} style={{ padding: \"8px 12px\" }} dangerouslySetInnerHTML={{ __html: item.html || \"\" }} />;\n const hasChildren = (item.items?.length ?? 0) > 0;\n const isExpanded = expanded[item.id];\n const isSelected = selected === item.id;\n return (\n <div key={item.id}>\n <div onClick={() => { if (hasChildren) setExpanded(x => ({ ...x, [item.id]: !x[item.id] })); handleSelect(item); }}\n style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: `8px ${collapsed ? \"0px\" : `${12 + depth * 16}px`}`, cursor: \"pointer\", borderRadius: T.r, margin: \"1px 6px\", justifyContent: collapsed ? \"center\" : \"flex-start\", transition: \"all .15s\", background: isSelected ? T.primaryLt : \"transparent\", color: isSelected ? T.primary : T.text, userSelect: \"none\" }}\n onMouseEnter={e => !isSelected && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSelected && (e.currentTarget.style.background = \"transparent\")}>\n {item.icon && <span style={{ fontSize: 18, minWidth: 22, textAlign: \"center\" }}>{item.icon}</span>}\n {!collapsed && <span style={{ flex: 1, fontSize: 13, fontWeight: isSelected ? 600 : 400 }}>{item.value}</span>}\n {!collapsed && item.count !== undefined && <span style={{ background: T.primary, color: \"#fff\", borderRadius: 10, padding: \"1px 6px\", fontSize: 11, fontWeight: 700 }}>{item.count}</span>}\n {!collapsed && hasChildren && <span style={{ fontSize: 12, color: T.textMut, transition: \"transform .15s\", transform: isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\" }}>▶</span>}\n </div>\n {hasChildren && isExpanded && !collapsed && item.items!.map(child => renderItem(child, depth + 1))}\n </div>\n );\n };\n\n return (\n <div className=\"dhx\" style={{ width: w, minWidth: w, background: T.surface, borderRight: `1px solid ${T.border}`, display: \"flex\", flexDirection: \"column\", transition: \"width .2s ease\", overflow: \"hidden\", ...style }}>\n {header && !collapsed && <div style={{ padding: \"12px 14px\", borderBottom: `1px solid ${T.border}`, fontWeight: 700, fontSize: 15 }}>{header}</div>}\n <button onClick={() => setCollapsed(c => !c)} style={{ margin: \"8px 6px\", background: \"transparent\", border: \"none\", cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: collapsed ? \"center\" : \"flex-end\", padding: \"4px 6px\", borderRadius: T.r, color: T.textSec }}>\n <span style={{ fontSize: 18 }}>{collapsed ? \"☰\" : \"✕\"}</span>\n </button>\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", overflowX: \"hidden\" }}>{items.map(item => renderItem(item))}</div>\n {footer && !collapsed && <div style={{ padding: \"10px 14px\", borderTop: `1px solid ${T.border}` }}>{footer}</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface LayoutCellConfig {\n id?: string;\n width?: string | number;\n height?: string | number;\n header?: string;\n collapsable?: boolean;\n padding?: string | number;\n html?: string;\n content?: React.ReactNode;\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n}\n\nexport interface LayoutProps {\n rows?: LayoutCellConfig[];\n cols?: LayoutCellConfig[];\n type?: \"line\" | \"space\" | \"wide\";\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction LayoutCell({ config }: { config: LayoutCellConfig }) {\n const [collapsed, setCollapsed] = useState(false);\n const style: React.CSSProperties = {\n position: \"relative\", background: T.surface,\n border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\",\n ...(config.width ? { width: config.width, minWidth: config.width } : { flex: 1 }),\n ...(config.height ? { height: config.height, minHeight: config.height } : { minHeight: 40 }),\n ...(collapsed ? { flex: \"0 0 auto\" } : {}),\n };\n return (\n <div style={style}>\n {config.header && (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", padding: \"6px 12px\", background: T.bg, borderBottom: `1px solid ${T.border}`, fontSize: 12, fontWeight: 600, color: T.textSec, userSelect: \"none\" }}>\n <span>{config.header}</span>\n {config.collapsable && <button onClick={() => setCollapsed(c => !c)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 16, lineHeight: 1 }}>{collapsed ? \"▼\" : \"▲\"}</button>}\n </div>\n )}\n {!collapsed && (\n <div style={{ padding: config.padding || 0, height: config.header ? \"calc(100% - 33px)\" : \"100%\", overflow: \"auto\" }}>\n {config.html ? <div dangerouslySetInnerHTML={{ __html: config.html }} /> : config.content}\n {(config.rows || config.cols) && <Layout rows={config.rows} cols={config.cols} style={{ height: \"100%\" }} />}\n </div>\n )}\n </div>\n );\n}\n\nexport function Layout({ rows, cols, type = \"line\", style, children }: LayoutProps) {\n useEffect(injectStyles, []);\n const gap = type === \"space\" ? 12 : type === \"wide\" ? 8 : 1;\n const cells = rows || cols;\n const isRow = !!rows;\n if (!cells) return <div className=\"dhx\" style={{ width: \"100%\", height: \"100%\", ...style }}>{children}</div>;\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: isRow ? \"column\" : \"row\", gap, width: \"100%\", height: \"100%\", ...style }}>\n {cells.map((cell, i) => <LayoutCell key={cell.id || i} config={cell} />)}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TabView {\n id: string;\n tab: string;\n icon?: React.ReactNode;\n content?: React.ReactNode;\n html?: string;\n}\n\nexport interface TabbarProps {\n views?: TabView[];\n mode?: \"top\" | \"bottom\" | \"left\" | \"right\";\n tabAlign?: \"left\" | \"center\" | \"right\";\n closable?: string[];\n disabled?: string[];\n defaultActive?: string;\n onBeforeChange?: (id: string) => boolean | void;\n onChange?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Tabbar({ views = [], mode = \"top\", tabAlign = \"left\", closable = [], disabled = [], defaultActive, onBeforeChange, onChange, style }: TabbarProps) {\n const [active, setActive] = useState(defaultActive || views[0]?.id);\n const [openTabs, setOpenTabs] = useState(views.map(v => v.id));\n useEffect(injectStyles, []);\n\n const handleClose = (e: React.MouseEvent, id: string) => {\n e.stopPropagation();\n setOpenTabs(t => t.filter(x => x !== id));\n if (active === id) setActive(openTabs.find(t => t !== id) ?? \"\");\n };\n const handleChange = (id: string) => {\n if (disabled.includes(id)) return;\n if (onBeforeChange && onBeforeChange(id) === false) return;\n setActive(id); onChange?.(id);\n };\n\n const isVertical = mode === \"left\" || mode === \"right\";\n const visibleViews = views.filter(v => openTabs.includes(v.id));\n\n const tabBar = (\n <div style={{ display: \"flex\", flexDirection: isVertical ? \"column\" : \"row\", justifyContent: tabAlign === \"center\" ? \"center\" : tabAlign === \"right\" ? \"flex-end\" : \"flex-start\", background: T.surface, borderBottom: !isVertical && mode !== \"bottom\" ? `2px solid ${T.border}` : \"none\", borderTop: mode === \"bottom\" ? `2px solid ${T.border}` : \"none\", borderRight: mode === \"left\" ? `2px solid ${T.border}` : \"none\", borderLeft: mode === \"right\" ? `2px solid ${T.border}` : \"none\", overflowX: \"auto\", flexShrink: 0 }}>\n {visibleViews.map(v => {\n const isActive = active === v.id;\n const isDis = disabled.includes(v.id);\n const activeStyle: React.CSSProperties = mode === \"bottom\"\n ? { borderTop: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 }\n : isVertical\n ? { color: T.primary, fontWeight: 600, background: T.primaryLt, [mode === \"left\" ? \"borderRight\" : \"borderLeft\"]: `2px solid ${T.primary}` }\n : { borderBottom: `2px solid ${T.primary}`, color: T.primary, fontWeight: 600 };\n return (\n <div key={v.id} onClick={() => handleChange(v.id)}\n style={{ display: \"flex\", alignItems: \"center\", gap: 6, padding: \"10px 16px\", cursor: isDis ? \"not-allowed\" : \"pointer\", whiteSpace: \"nowrap\", fontSize: 13, transition: \"color .15s\", userSelect: \"none\", minWidth: isVertical ? 120 : \"auto\", ...(isActive ? activeStyle : { color: isDis ? T.textMut : T.textSec }) }}>\n {v.icon && <span style={{ fontSize: 16 }}>{v.icon}</span>}\n <span>{v.tab}</span>\n {closable.includes(v.id) && <span onClick={e => handleClose(e, v.id)} style={{ marginLeft: 4, opacity: .6, fontSize: 12, cursor: \"pointer\" }}>✕</span>}\n </div>\n );\n })}\n </div>\n );\n\n const activeView = visibleViews.find(v => v.id === active);\n const content = (\n <div className=\"dhx-scroll\" style={{ flex: 1, overflow: \"auto\" }}>\n {activeView?.content}\n {activeView?.html && <div dangerouslySetInnerHTML={{ __html: activeView.html }} style={{ padding: 16 }} />}\n </div>\n );\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", flexDirection: mode === \"top\" ? \"column\" : mode === \"bottom\" ? \"column-reverse\" : mode === \"left\" ? \"row\" : \"row-reverse\", width: \"100%\", height: \"100%\", background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\", ...style }}>\n {tabBar}\n {content}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface GridColumnFooter {\n text?: string | ((s: { sum: number; avg: number; count: number; min: number; max: number }) => string);\n summary?: \"sum\" | \"avg\" | \"count\" | \"min\" | \"max\";\n}\n\nexport interface GridColumn {\n id: string;\n header?: { text: string; align?: \"left\" | \"center\" | \"right\" }[] | string;\n footer?: GridColumnFooter[];\n width?: number;\n minWidth?: number;\n sortable?: boolean;\n filterable?: boolean;\n filterType?: \"input\" | \"select\";\n resizable?: boolean;\n editable?: boolean;\n align?: \"left\" | \"center\" | \"right\";\n template?: (value: unknown, row: Record<string, unknown>) => React.ReactNode;\n}\n\nexport interface GridProps {\n columns: GridColumn[];\n data?: Record<string, unknown>[];\n height?: string | number;\n rowHeight?: number;\n sortable?: boolean;\n resizable?: boolean;\n editable?: boolean;\n stripe?: boolean;\n autoWidth?: boolean;\n keyNavigation?: boolean;\n selection?: \"row\" | \"cell\";\n multiselect?: boolean;\n onSelect?: (row: Record<string, unknown>) => void;\n onChange?: (row: Record<string, unknown>, colId: string, value: unknown) => void;\n style?: React.CSSProperties;\n}\n\nconst B = `1px solid ${T.border}`;\n\nfunction SortArrows({ active, dir }: { active: boolean; dir: \"asc\" | \"desc\" }) {\n return (\n <span style={{ display: \"inline-flex\", flexDirection: \"column\", gap: 1, flexShrink: 0, marginLeft: 4 }}>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 0L7 4H0z\" fill={active && dir === \"asc\" ? T.primary : T.borderDk} />\n </svg>\n <svg width=\"7\" height=\"4\" viewBox=\"0 0 7 4\">\n <path d=\"M3.5 4L0 0H7z\" fill={active && dir === \"desc\" ? T.primary : T.borderDk} />\n </svg>\n </span>\n );\n}\n\nexport function Grid({\n columns, data = [], height = 400, rowHeight = 40,\n sortable = true, resizable = true, editable = false,\n stripe = false, autoWidth = false, keyNavigation = false,\n selection, multiselect, onSelect, onChange, style,\n}: GridProps) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n const [filter, setFilter] = useState<Record<string, string>>({});\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [focusRow, setFocusRow] = useState(-1);\n const [colWidths, setColWidths] = useState(() => columns.map(c => c.width ?? c.minWidth ?? 150));\n const [editCell, setEditCell] = useState<{ key: string | number; colId: string } | null>(null);\n const [editValue, setEditValue] = useState(\"\");\n const [edits, setEdits] = useState<Record<string, Record<string, unknown>>>({});\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerW, setContainerW] = useState(0);\n useEffect(injectStyles, []);\n\n /* auto-width: observe container */\n useEffect(() => {\n if (!autoWidth || !containerRef.current) return;\n const ro = new ResizeObserver(() => setContainerW(containerRef.current?.offsetWidth ?? 0));\n ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, [autoWidth]);\n\n /* effective widths (autoWidth distributes leftover space) */\n const widths = useMemo(() => {\n if (!autoWidth || containerW === 0) return colWidths;\n const total = colWidths.reduce((a, b) => a + b, 0);\n if (containerW <= total) return colWidths;\n const extra = (containerW - total) / columns.length;\n return colWidths.map(w => w + extra);\n }, [autoWidth, containerW, colWidths, columns.length]);\n\n /* sorted + filtered rows (with inline edits applied) */\n const sorted = useMemo(() => {\n let rows = data\n .map((row, i) => {\n const key = String((row.id as string | number) ?? i);\n return edits[key] ? { ...row, ...edits[key] } : row;\n })\n .filter(row =>\n Object.entries(filter).every(([k, v]) => !v || String(row[k] ?? \"\").toLowerCase().includes(v.toLowerCase()))\n );\n if (sortKey) {\n rows = [...rows].sort((a, b) => {\n const av = a[sortKey], bv = b[sortKey];\n if (av == null) return 1;\n if (bv == null) return -1;\n const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, sortKey, sortDir, filter, edits]);\n\n /* footer aggregation stats */\n const colStats = useMemo(() => {\n const s: Record<string, { sum: number; avg: number; count: number; min: number; max: number }> = {};\n columns.forEach(col => {\n if (col.footer?.some(f => f.summary)) {\n const nums = sorted.map(r => Number(r[col.id])).filter(n => !isNaN(n));\n const sum = nums.reduce((a, b) => a + b, 0);\n s[col.id] = { sum, avg: nums.length ? sum / nums.length : 0, count: sorted.length, min: nums.length ? Math.min(...nums) : 0, max: nums.length ? Math.max(...nums) : 0 };\n }\n });\n return s;\n }, [sorted, columns]);\n\n /* select filter options */\n const selectOpts = useMemo(() => {\n const o: Record<string, string[]> = {};\n columns.filter(c => c.filterType === \"select\").forEach(col => {\n o[col.id] = [...new Set(data.map(r => String(r[col.id] ?? \"\")))].sort();\n });\n return o;\n }, [data, columns]);\n\n const hasFilters = columns.some(c => c.filterable);\n const hasFooter = columns.some(c => c.footer?.length);\n const totalW = widths.reduce((a, b) => a + b, 0);\n\n const rowKey = (row: Record<string, unknown>, ri: number): string | number =>\n (row.id as string | number) ?? ri;\n\n /* sort */\n const handleSort = (col: GridColumn) => {\n if (!sortable || col.sortable === false) return;\n setSortDir(d => sortKey === col.id ? (d === \"asc\" ? \"desc\" : \"asc\") : \"asc\");\n setSortKey(col.id);\n };\n\n /* selection */\n const selectRow = (row: Record<string, unknown>, ri: number) => {\n if (!selection) return;\n const rk = rowKey(row, ri);\n setFocusRow(ri);\n setSelected(s => {\n const ns = multiselect ? new Set(s) : new Set<string | number>();\n ns.has(rk) ? ns.delete(rk) : ns.add(rk);\n return ns;\n });\n onSelect?.(row);\n };\n\n /* edit commit */\n const commitEdit = () => {\n if (!editCell) return;\n const { key, colId } = editCell;\n setEdits(e => ({ ...e, [String(key)]: { ...(e[String(key)] || {}), [colId]: editValue } }));\n const row = sorted.find((r, i) => rowKey(r, i) === key);\n if (row) onChange?.(row, colId, editValue);\n setEditCell(null);\n };\n\n /* keyboard navigation */\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (editCell && e.key === \"Escape\") { setEditCell(null); return; }\n if (!keyNavigation || !selection) return;\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = Math.min(focusRow + 1, sorted.length - 1);\n if (next >= 0) { selectRow(sorted[next], next); }\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prev = Math.max(focusRow - 1, 0);\n if (prev >= 0) { selectRow(sorted[prev], prev); }\n }\n };\n\n /* column resize */\n const startResize = (e: React.MouseEvent, ci: number) => {\n e.preventDefault();\n e.stopPropagation();\n const startX = e.clientX, startW = colWidths[ci];\n const move = (me: MouseEvent) => setColWidths(ws => {\n const nw = [...ws];\n nw[ci] = Math.max(columns[ci].minWidth || 50, startW + me.clientX - startX);\n return nw;\n });\n const up = () => { document.removeEventListener(\"mousemove\", move); document.removeEventListener(\"mouseup\", up); };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n };\n\n /* shared cell style */\n const cs = (wi: number, col: GridColumn, first: boolean, height: number): React.CSSProperties => ({\n width: wi, minWidth: wi, flexShrink: 0, boxSizing: \"border-box\",\n padding: \"0 12px\", height, display: \"flex\", alignItems: \"center\",\n overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\n fontSize: 13, textAlign: col.align,\n justifyContent: col.align === \"center\" ? \"center\" : col.align === \"right\" ? \"flex-end\" : \"flex-start\",\n borderLeft: first ? \"none\" : B,\n });\n\n return (\n <div\n ref={containerRef}\n className=\"dhx\"\n tabIndex={keyNavigation ? 0 : undefined}\n onKeyDown={handleKeyDown}\n style={{ width: \"100%\", height, display: \"flex\", flexDirection: \"column\", border: B, borderRadius: T.r, overflow: \"hidden\", outline: \"none\", ...style }}>\n\n <div style={{ overflowX: \"auto\", flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <div style={{ minWidth: totalW, display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\n\n {/* ── Header ── */}\n <div style={{ display: \"flex\", background: T.bg, borderBottom: B, flexShrink: 0, position: \"sticky\", top: 0, zIndex: 2 }}>\n {columns.map((col, i) => (\n <div key={col.id}\n onClick={() => handleSort(col)}\n style={{\n ...cs(widths[i], col, i === 0, 40),\n position: \"relative\",\n fontWeight: 500, color: T.text,\n cursor: sortable && col.sortable !== false ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}>\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {Array.isArray(col.header) ? col.header[0]?.text : (col.header || col.id)}\n </span>\n {sortable && col.sortable !== false && (\n <SortArrows active={sortKey === col.id} dir={sortDir} />\n )}\n {resizable && col.resizable !== false && i < columns.length - 1 && (\n <div\n onMouseDown={e => startResize(e, i)}\n onClick={e => e.stopPropagation()}\n style={{ position: \"absolute\", right: 0, top: 0, bottom: 0, width: 4, cursor: \"col-resize\", zIndex: 1 }}\n onMouseEnter={e => (e.currentTarget.style.background = T.primary + \"55\")}\n onMouseLeave={e => (e.currentTarget.style.background = \"transparent\")} />\n )}\n </div>\n ))}\n </div>\n\n {/* ── Filter row ── */}\n {hasFilters && (\n <div style={{ display: \"flex\", borderBottom: B, background: T.surface, flexShrink: 0 }}>\n {columns.map((col, i) => (\n <div key={col.id} style={{ width: widths[i], minWidth: widths[i], flexShrink: 0, padding: \"4px 6px\", boxSizing: \"border-box\", borderLeft: i === 0 ? \"none\" : B }}>\n {col.filterable && col.filterType === \"select\" ? (\n <select className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12, padding: \"0 4px\" }}\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))}>\n <option value=\"\">All</option>\n {(selectOpts[col.id] || []).map(v => <option key={v} value={v}>{v}</option>)}\n </select>\n ) : col.filterable ? (\n <input className=\"dhx dhx-input\" style={{ height: 26, fontSize: 12 }}\n placeholder=\"Filter...\"\n value={filter[col.id] || \"\"}\n onChange={e => setFilter(f => ({ ...f, [col.id]: e.target.value }))} />\n ) : null}\n </div>\n ))}\n </div>\n )}\n\n {/* ── Body ── */}\n <div className=\"dhx-scroll\" style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {sorted.map((row, ri) => {\n const rk = rowKey(row, ri);\n const isSel = selected.has(rk);\n const rowBg = isSel ? T.primaryLt : (stripe && ri % 2 !== 0) ? T.bg : T.surface;\n return (\n <div key={String(rk)}\n style={{ display: \"flex\", height: rowHeight, borderBottom: B, flexShrink: 0, background: rowBg, transition: \"background .1s\", cursor: selection ? \"pointer\" : \"default\" }}\n onMouseEnter={e => !isSel && (e.currentTarget.style.background = T.primaryLt + \"80\")}\n onMouseLeave={e => !isSel && (e.currentTarget.style.background = rowBg)}>\n {columns.map((col, ci) => {\n const isEditing = editCell?.key === rk && editCell?.colId === col.id;\n const rawVal = row[col.id];\n const display = col.template ? col.template(rawVal, row) : String(rawVal ?? \"\");\n return (\n <div key={col.id}\n onClick={() => {\n selectRow(row, ri);\n if (editable && col.editable !== false) {\n setEditCell({ key: rk, colId: col.id });\n setEditValue(String(rawVal ?? \"\"));\n }\n }}\n style={cs(widths[ci], col, ci === 0, rowHeight)}>\n {isEditing ? (\n <input\n autoFocus\n value={editValue}\n onChange={e => setEditValue(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditCell(null); }}\n onClick={e => e.stopPropagation()}\n style={{ width: \"100%\", border: \"none\", outline: `2px solid ${T.primary}`, borderRadius: 2, fontSize: 13, padding: \"2px 4px\", background: T.surface, color: T.text }} />\n ) : display}\n </div>\n );\n })}\n </div>\n );\n })}\n {sorted.length === 0 && (\n <div style={{ textAlign: \"center\", padding: 40, color: T.textMut, fontSize: 13 }}>No data</div>\n )}\n </div>\n\n {/* ── Footer ── */}\n {hasFooter && (\n <div style={{ display: \"flex\", borderTop: B, background: T.bg, flexShrink: 0 }}>\n {columns.map((col, i) => {\n const f = col.footer?.[0];\n const stats = colStats[col.id] ?? { sum: 0, avg: 0, count: 0, min: 0, max: 0 };\n let content: React.ReactNode = \"\";\n if (f) {\n if (typeof f.text === \"function\") content = f.text(stats);\n else if (f.text) content = f.text;\n else if (f.summary) content = String(Math.round(stats[f.summary] * 100) / 100);\n }\n return (\n <div key={col.id} style={{ ...cs(widths[i], col, i === 0, 40), fontWeight: 600, color: T.text }}>\n {content}\n </div>\n );\n })}\n </div>\n )}\n\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport {\n BarChart, Bar, LineChart, Line, AreaChart, Area,\n PieChart, Pie, Cell, RadarChart, Radar, PolarGrid, PolarAngleAxis, PolarRadiusAxis,\n ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n ResponsiveContainer, Treemap,\n} from \"recharts\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nconst COLORS = [\"#0288d1\",\"#43a047\",\"#f57c00\",\"#e53935\",\"#8e24aa\",\"#00838f\",\"#ef6c00\",\"#2e7d32\"];\n\nexport interface ChartSeries {\n id?: string;\n value?: string; // data field for value / X axis for scatter\n valueY?: string; // data field for Y axis (scatter)\n label?: string; // legend label\n color?: string; // line/stroke color OR field name for per-item color (pie/donut)\n fill?: string; // explicit fill override (bar/area)\n strokeWidth?: number;\n text?: string; // field name for display label (pie/donut)\n stroke?: string; // border color (pie/donut slices)\n pointColor?: string; // point color alias (radar)\n data?: Record<string, unknown>[];\n tooltipTemplate?:(item: unknown[]) => string;\n direction?: \"asc\" | \"desc\";\n}\n\nexport interface ChartScales {\n bottom?: { text?: string; title?: string; min?: number; max?: number };\n left?: { min?: number; max?: number; maxTicks?: number; title?: string };\n radial?: { value?: string; maxTicks?: number };\n}\n\nexport interface ChartLegend {\n halign?: \"left\" | \"center\" | \"right\";\n valign?: \"top\" | \"middle\" | \"bottom\";\n series?: string[];\n values?: { id?: string; text?: string; color?: string };\n}\n\nexport type ChartType = \"bar\" | \"line\" | \"area\" | \"pie\" | \"donut\" | \"radar\" | \"scatter\" | \"treeMap\";\n\nexport interface ChartProps {\n type?: ChartType;\n data?: Record<string, unknown>[];\n series?: ChartSeries[];\n scales?: ChartScales;\n legend?: ChartLegend;\n height?: number | string;\n style?: React.CSSProperties;\n}\n\n/* build nested tree from flat data with { id, parent } refs */\nfunction buildTreemap(\n data: Record<string, unknown>[],\n valueKey: string,\n nameKey: string,\n): { name: string; children?: { name: string; value: number }[] }[] {\n const roots = data.filter(d => !d.parent);\n const children = data.filter(d => !!d.parent);\n return roots.map(root => ({\n name: root[nameKey] as string,\n children: children\n .filter(c => c.parent === root.id)\n .map(c => ({ name: c[nameKey] as string, value: Number(c[valueKey] ?? 0) })),\n }));\n}\n\nexport function Chart({\n type = \"bar\", data = [], series = [], scales = {}, legend, height = 280, style,\n}: ChartProps) {\n useEffect(injectStyles, []);\n\n const xKey = scales.bottom?.text || (data[0] && Object.keys(data[0])[0]) || \"x\";\n\n const tip = (\n <Tooltip\n contentStyle={{ fontSize: 12, borderRadius: T.r, border: `1px solid ${T.border}` }}\n />\n );\n const leg = legend ? (\n <Legend\n iconSize={10}\n wrapperStyle={{ fontSize: 12 }}\n verticalAlign={legend.valign === \"bottom\" ? \"bottom\" : legend.valign === \"middle\" ? \"middle\" : \"top\"}\n align={legend.halign ?? \"center\"}\n />\n ) : null;\n const grid = <CartesianGrid strokeDasharray=\"3 3\" stroke={T.border} />;\n const xAxis = (\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={{ stroke: T.border }}\n tickLine={false}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n );\n const yAxis = (\n <YAxis\n tick={{ fontSize: 11, fill: T.textSec }}\n axisLine={false}\n tickLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n tickCount={scales.left?.maxTicks}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n );\n const margin = {\n top: 10, right: 20, left: 0,\n bottom: scales.bottom?.title ? 20 : 0,\n };\n const common = { data, margin };\n\n let chart: React.ReactNode;\n\n /* ── bar ── */\n if (type === \"bar\") {\n chart = (\n <BarChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => (\n <Bar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n fill={s.fill || s.color || COLORS[i % COLORS.length]}\n radius={[3, 3, 0, 0]}\n />\n ))}\n </BarChart>\n );\n\n /* ── line ── */\n } else if (type === \"line\") {\n chart = (\n <LineChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Line\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n strokeWidth={s.strokeWidth ?? 2}\n dot={{ r: 3, fill: c }}\n />\n );\n })}\n </LineChart>\n );\n\n /* ── area ── */\n } else if (type === \"area\") {\n chart = (\n <AreaChart {...common}>\n {grid}{xAxis}{yAxis}{tip}{leg}\n {series.map((s, i) => {\n const c = s.color || COLORS[i % COLORS.length];\n return (\n <Area\n key={s.id ?? i}\n type=\"monotone\"\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={(s.fill || c) + \"33\"}\n strokeWidth={s.strokeWidth ?? 2}\n />\n );\n })}\n </AreaChart>\n );\n\n /* ── pie / donut ── */\n } else if (type === \"pie\" || type === \"donut\") {\n const s0 = series[0] || {};\n const dataKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n // s0.color may be a field name in the data (per-item color) or undefined/direct color\n const colorField = s0.color && data[0] && s0.color in data[0] ? s0.color : null;\n chart = (\n <PieChart>\n <Pie\n data={data}\n cx=\"50%\" cy=\"50%\"\n outerRadius={type === \"donut\" ? \"70%\" : \"80%\"}\n innerRadius={type === \"donut\" ? \"40%\" : 0}\n dataKey={dataKey}\n nameKey={nameKey}\n stroke={s0.stroke || \"none\"}\n strokeWidth={s0.strokeWidth ?? 0}\n label={({ name, percent }: { name?: string; percent?: number }) =>\n `${name ?? \"\"} ${((percent ?? 0) * 100).toFixed(0)}%`}\n labelLine\n paddingAngle={2}\n >\n {data.map((row, i) => (\n <Cell\n key={i}\n fill={colorField ? (row[colorField] as string) : COLORS[i % COLORS.length]}\n />\n ))}\n </Pie>\n {tip}{leg}\n </PieChart>\n );\n\n /* ── radar ── */\n } else if (type === \"radar\") {\n const radarKey = scales.radial?.value || xKey;\n chart = (\n <RadarChart {...common} cx=\"50%\" cy=\"50%\">\n <PolarGrid />\n <PolarAngleAxis dataKey={radarKey} tick={{ fontSize: 11 }} />\n <PolarRadiusAxis tick={{ fontSize: 9, fill: T.textMut }} axisLine={false} />\n {series.map((s, i) => {\n const c = s.color || s.pointColor || COLORS[i % COLORS.length];\n return (\n <Radar\n key={s.id ?? i}\n dataKey={s.value || s.id || \"\"}\n name={s.label || s.id}\n stroke={c}\n fill={c + \"44\"}\n />\n );\n })}\n {tip}{leg}\n </RadarChart>\n );\n\n /* ── scatter ── */\n } else if (type === \"scatter\") {\n chart = (\n <ScatterChart margin={margin}>\n {grid}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={scales.bottom?.title || \"x\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n domain={[scales.bottom?.min ?? \"auto\", scales.bottom?.max ?? \"auto\"]}\n label={scales.bottom?.title\n ? { value: scales.bottom.title, position: \"insideBottom\", offset: -4, fontSize: 11 }\n : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={scales.left?.title || \"y\"}\n tick={{ fontSize: 11, fill: T.textSec }}\n tickLine={false}\n axisLine={false}\n domain={[scales.left?.min ?? \"auto\", scales.left?.max ?? \"auto\"]}\n label={scales.left?.title\n ? { value: scales.left.title, angle: -90, position: \"insideLeft\", fontSize: 11 }\n : undefined}\n />\n {tip}{leg}\n {series.map((s, i) => {\n const xField = s.value || \"x\";\n const yField = s.valueY || \"y\";\n const pts = (s.data || data).map(row => ({\n x: row[xField],\n y: row[yField],\n })) as never[];\n return (\n <Scatter\n key={s.id ?? i}\n data={pts}\n name={s.label || s.id}\n fill={s.color || COLORS[i % COLORS.length]}\n />\n );\n })}\n </ScatterChart>\n );\n\n /* ── treeMap ── */\n } else if (type === \"treeMap\") {\n const s0 = series[0] || {};\n const valKey = s0.value || \"value\";\n const nameKey = s0.text || \"name\";\n const treeData = buildTreemap(data, valKey, nameKey);\n const borderColor = s0.stroke || T.surface;\n const borderWidth = s0.strokeWidth ?? 2;\n chart = (\n <Treemap\n data={treeData}\n dataKey=\"value\"\n aspectRatio={4 / 3}\n stroke={borderColor}\n content={((props: Record<string, unknown>) => {\n const { x, y, width, height: h, depth, index, name } = props as {\n x: number; y: number; width: number; height: number;\n depth: number; index: number; name: string;\n };\n if (depth === 0) return null;\n const fill = COLORS[index % COLORS.length];\n return (\n <g>\n <rect\n x={x} y={y} width={width} height={h}\n fill={fill} stroke={borderColor} strokeWidth={borderWidth}\n style={{ borderRadius: 3 }}\n />\n {width > 40 && h > 20 && (\n <text\n x={x + width / 2} y={y + h / 2}\n textAnchor=\"middle\" dominantBaseline=\"middle\"\n fill=\"#fff\" fontSize={11} pointerEvents=\"none\"\n >\n {name}\n </text>\n )}\n </g>\n );\n }) as never}\n />\n );\n }\n\n return (\n <div\n className=\"dhx\"\n style={{ width: \"100%\", height, padding: 12, background: T.surface, borderRadius: T.rMd, ...style }}\n >\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {chart as React.ReactElement}\n </ResponsiveContainer>\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface CalendarProps {\n value?: Date | [Date, Date] | null;\n range?: boolean;\n timepicker?: boolean;\n onChange?: (value: Date | [Date, Date]) => void;\n style?: React.CSSProperties;\n}\n\nconst MONTHS = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\nconst DAYS = [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"];\n\nexport function Calendar({ value, range = false, timepicker = false, onChange, style }: CalendarProps) {\n const today = new Date();\n const initDate = value ? new Date(Array.isArray(value) ? value[0] : value) : today;\n const [view, setView] = useState(initDate);\n const [selected, setSelected] = useState<Date | [Date | null, Date | null] | null>(value ?? (range ? [null, null] : null));\n const [hovDate, setHovDate] = useState<Date | null>(null);\n const [time, setTime] = useState({ h: 0, m: 0 });\n useEffect(injectStyles, []);\n\n const year = view.getFullYear(); const month = view.getMonth();\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n const cells: (Date | null)[] = [];\n for (let i = 0; i < firstDay; i++) cells.push(null);\n for (let d = 1; d <= daysInMonth; d++) cells.push(new Date(year, month, d));\n\n const isToday = (d: Date) => d.toDateString() === today.toDateString();\n const isSelected = (d: Date) => {\n if (!selected) return false;\n if (range && Array.isArray(selected)) {\n const [s, e] = selected as [Date | null, Date | null];\n if (!s) return false;\n const dv = d.getTime();\n if (!e) return d.toDateString() === s.toDateString();\n return dv >= s.getTime() && dv <= e.getTime();\n }\n return d.toDateString() === (selected as Date).toDateString();\n };\n\n const handleDay = (d: Date) => {\n if (range) {\n const [s, e] = Array.isArray(selected) ? (selected as [Date | null, Date | null]) : [null, null];\n if (!s || e) { setSelected([d, null]); }\n else {\n const sorted: [Date, Date] = d < s ? [d, s] : [s, d];\n setSelected(sorted); onChange?.(sorted);\n }\n } else { setSelected(d); onChange?.(d); }\n };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() - 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>‹</button>\n <div style={{ fontWeight: 700, fontSize: 14 }}>{MONTHS[month]} {year}</div>\n <button onClick={() => setView(v => new Date(v.getFullYear(), v.getMonth() + 1, 1))} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 28, padding: \"0 8px\", fontSize: 16 }}>›</button>\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 32px)\", gap: 2 }}>\n {DAYS.map(d => <div key={d} style={{ textAlign: \"center\", fontSize: 11, fontWeight: 600, color: T.textMut, paddingBottom: 4 }}>{d}</div>)}\n {cells.map((d, i) => {\n const sel = d ? isSelected(d) : false;\n const isHov = d && hovDate && d.toDateString() === hovDate.toDateString();\n return (\n <div key={i} onClick={() => d && handleDay(d)} onMouseEnter={() => d && setHovDate(d)} onMouseLeave={() => setHovDate(null)}\n style={{ width: 32, height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", borderRadius: T.r, cursor: d ? \"pointer\" : \"default\", fontSize: 12, fontWeight: d && isToday(d) ? 700 : 400, background: sel ? T.primary : isHov ? T.bg : \"transparent\", color: sel ? \"#fff\" : d && isToday(d) ? T.primary : d ? T.text : \"transparent\", border: d && isToday(d) && !sel ? `1px solid ${T.primary}` : \"1px solid transparent\", transition: \"all .1s\" }}>\n {d?.getDate()}\n </div>\n );\n })}\n </div>\n {timepicker && (\n <div style={{ borderTop: `1px solid ${T.border}`, marginTop: 12, paddingTop: 12, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 8 }}>\n <input type=\"number\" min={0} max={23} value={time.h} onChange={e => setTime(t => ({ ...t, h: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n <span style={{ fontWeight: 700, color: T.textSec }}>:</span>\n <input type=\"number\" min={0} max={59} value={time.m} onChange={e => setTime(t => ({ ...t, m: +e.target.value }))} className=\"dhx dhx-input\" style={{ width: 50, textAlign: \"center\" }} />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TimeValue { h: number; m: number; ampm?: \"AM\" | \"PM\"; }\n\nexport interface TimepickerProps {\n value?: TimeValue;\n onChange?: (value: TimeValue) => void;\n timeFormat?: 12 | 24;\n controls?: boolean;\n minuteStep?: number;\n style?: React.CSSProperties;\n}\n\nexport function Timepicker({ value, onChange, timeFormat = 12, controls = false, minuteStep = 5, style }: TimepickerProps) {\n const [h, setH] = useState(value?.h ?? (timeFormat === 24 ? 0 : 12));\n const [m, setM] = useState(value?.m ?? 0);\n const [ampm, setAmpm] = useState<\"AM\" | \"PM\">(value?.ampm ?? \"AM\");\n const [pending, setPending] = useState<TimeValue | null>(null);\n useEffect(injectStyles, []);\n\n const hours = timeFormat === 24\n ? Array.from({ length: 24 }, (_, i) => i)\n : Array.from({ length: 12 }, (_, i) => i + 1);\n const mins = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => i * minuteStep);\n\n const handleChange = (newH: number, newM: number, newAmpm: \"AM\" | \"PM\") => {\n const val: TimeValue = timeFormat === 24 ? { h: newH, m: newM } : { h: newH, m: newM, ampm: newAmpm };\n if (controls) setPending(val);\n else onChange?.(val);\n };\n\n const handleCancel = () => {\n setPending(null);\n setH(value?.h ?? (timeFormat === 24 ? 0 : 12));\n setM(value?.m ?? 0);\n setAmpm(value?.ampm ?? \"AM\");\n };\n\n const colStyle = { display: \"flex\", flexDirection: \"column\" as const, alignItems: \"center\" as const, gap: 4 };\n const cellStyle = (active: boolean): React.CSSProperties => ({\n height: 32, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n cursor: \"pointer\", fontSize: 13,\n fontWeight: active ? 700 : 400,\n background: active ? T.primaryLt : \"transparent\",\n color: active ? T.primary : T.text,\n });\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"stretch\" }}>\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Hours</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {hours.map(v => (\n <div key={v} onClick={() => { setH(v); handleChange(v, m, ampm); }}\n style={cellStyle(h === v)}\n onMouseEnter={e => h !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => h !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>Minutes</span>\n <div className=\"dhx-scroll\" style={{ height: 160, overflowY: \"auto\", width: 48, border: `1px solid ${T.border}`, borderRadius: T.r }}>\n {mins.map(v => (\n <div key={v} onClick={() => { setM(v); handleChange(h, v, ampm); }}\n style={cellStyle(m === v)}\n onMouseEnter={e => m !== v && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => m !== v && (e.currentTarget.style.background = \"transparent\")}>\n {String(v).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n </div>\n\n {timeFormat === 12 && (\n <div style={colStyle}>\n <span style={{ fontSize: 11, fontWeight: 600, color: T.textMut }}>AM/PM</span>\n <div style={{ display: \"flex\", flexDirection: \"column\", border: `1px solid ${T.border}`, borderRadius: T.r, overflow: \"hidden\" }}>\n {([\"AM\", \"PM\"] as const).map(v => (\n <div key={v} onClick={() => { setAmpm(v); handleChange(h, m, v); }}\n style={{ height: 40, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", cursor: \"pointer\", padding: \"0 12px\", fontSize: 13, fontWeight: ampm === v ? 700 : 400, background: ampm === v ? T.primary : T.surface, color: ampm === v ? \"#fff\" : T.text }}>\n {v}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <div style={{ textAlign: \"center\", marginTop: 12, fontSize: 22, fontWeight: 700, color: T.primary, letterSpacing: 2 }}>\n {String(h).padStart(2, \"0\")}:{String(m).padStart(2, \"0\")}{timeFormat === 12 ? ` ${ampm}` : \"\"}\n </div>\n\n {controls && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: \"flex-end\", marginTop: 12 }}>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={handleCancel}>Cancel</button>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => {\n const val = pending ?? (timeFormat === 24 ? { h, m } : { h, m, ampm });\n onChange?.(val);\n }}>Apply</button>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useRef, useMemo, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface ComboboxItem {\n id?: string;\n value: string;\n count?: number;\n}\n\nexport interface ComboboxProps {\n data?: ComboboxItem[];\n value?: string | string[] | null;\n placeholder?: string;\n multiselection?: boolean;\n label?: string;\n onChange?: (value: string | string[]) => void;\n style?: React.CSSProperties;\n}\n\nconst Chevron = ({ open }: { open: boolean }) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" style={{ flexShrink: 0, transition: \"transform .15s\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}>\n <path d=\"M2 4l4 4 4-4\" stroke={T.textMut} strokeWidth=\"1.5\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport function Combobox({ data = [], value: valueProp, placeholder = \"Select or type...\", multiselection = false, label, onChange, style }: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selected, setSelected] = useState<string | string[] | null>(\n multiselection\n ? (valueProp ? ([] as string[]).concat(valueProp as string) : [])\n : (valueProp || null)\n );\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => { setOpen(false); setQuery(\"\"); }, []));\n\n const filtered = useMemo(\n () => data.filter(d => !query || d.value.toLowerCase().includes(query.toLowerCase())),\n [data, query]\n );\n const isSelected = (id: string) =>\n multiselection ? (selected as string[] || []).includes(id) : selected === id;\n\n const handleSelect = (item: ComboboxItem) => {\n const key = item.id || item.value;\n if (multiselection) {\n const ns = isSelected(key)\n ? (selected as string[]).filter(s => s !== key)\n : [...(selected as string[] || []), key];\n setSelected(ns);\n onChange?.(ns);\n } else {\n setSelected(key);\n setQuery(\"\");\n setOpen(false);\n onChange?.(key);\n }\n };\n\n const removeTag = (key: string) => {\n const ns = (selected as string[]).filter(s => s !== key);\n setSelected(ns);\n onChange?.(ns);\n };\n\n const openDropdown = () => {\n setOpen(true);\n setTimeout(() => inputRef.current?.focus(), 0);\n };\n\n /* ── single-select display value ── */\n const singleDisplayValue = data.find(d => (d.id || d.value) === selected)?.value || \"\";\n\n const selectedTags = multiselection ? (selected as string[]) || [] : [];\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n\n {/* ── trigger ── */}\n <div\n onClick={openDropdown}\n style={{\n display: \"flex\", alignItems: \"center\", flexWrap: multiselection ? \"wrap\" : \"nowrap\",\n border: `1px solid ${open ? T.primary : T.border}`, borderRadius: T.r,\n minHeight: 34, padding: \"4px 8px\", cursor: \"text\", background: T.surface, gap: 4,\n transition: \"border-color .15s\", boxShadow: open ? `0 0 0 3px ${T.primary}22` : \"none\",\n }}>\n\n {/* ── multiselect: chips + inline search ── */}\n {multiselection && (\n <>\n {selectedTags.map(s => (\n <span key={s} style={{\n display: \"inline-flex\", alignItems: \"center\", gap: 4,\n background: T.primary, color: \"#fff\",\n borderRadius: 12, padding: \"2px 10px 2px 8px\", fontSize: 12, lineHeight: 1.5,\n whiteSpace: \"nowrap\",\n }}>\n {data.find(d => (d.id || d.value) === s)?.value || s}\n <span\n onClick={e => { e.stopPropagation(); removeTag(s); }}\n style={{ cursor: \"pointer\", fontSize: 15, lineHeight: 1, opacity: 0.75, marginLeft: 2 }}>×</span>\n </span>\n ))}\n <input\n ref={inputRef}\n value={query}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => setOpen(true)}\n onClick={e => e.stopPropagation()}\n placeholder={selectedTags.length ? \"\" : placeholder}\n style={{ flex: 1, minWidth: 60, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n </>\n )}\n\n {/* ── single select: search input ── */}\n {!multiselection && (\n <input\n ref={inputRef}\n value={open ? query : singleDisplayValue}\n onChange={e => { setQuery(e.target.value); setOpen(true); }}\n onFocus={() => { setOpen(true); setQuery(\"\"); }}\n onClick={e => e.stopPropagation()}\n placeholder={placeholder}\n style={{ flex: 1, border: \"none\", outline: \"none\", fontSize: 13, background: \"transparent\", color: T.text, padding: 0 }}\n />\n )}\n\n <Chevron open={open} />\n </div>\n\n {/* ── dropdown ── */}\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{\n position: \"absolute\", top: \"calc(100% + 4px)\", left: 0, right: 0,\n background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.r,\n boxShadow: T.shadowLg, zIndex: 100,\n }}>\n <div className=\"dhx-scroll\" style={{ maxHeight: 220, overflowY: \"auto\" }}>\n {filtered.map(item => {\n const key = item.id || item.value;\n const sel = isSelected(key);\n return (\n <div key={key} onClick={() => handleSelect(item)}\n style={{\n padding: \"8px 12px\", cursor: \"pointer\", display: \"flex\",\n alignItems: \"center\", gap: 8, fontSize: 13,\n background: sel ? T.primaryLt : \"transparent\",\n color: sel ? T.primary : T.text,\n }}\n onMouseEnter={e => !sel && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !sel && (e.currentTarget.style.background = \"transparent\")}>\n {multiselection && (\n <span style={{\n width: 14, height: 14, flexShrink: 0,\n border: `2px solid ${sel ? T.primary : T.borderDk}`,\n borderRadius: 3, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n background: sel ? T.primary : \"transparent\",\n }}>\n {sel && <span style={{ color: \"#fff\", fontSize: 9, lineHeight: 1 }}>✓</span>}\n </span>\n )}\n <span style={{ flex: 1 }}>{item.value}</span>\n {!multiselection && sel && (\n <span style={{ color: T.primary, fontSize: 12, fontWeight: 700 }}>✓</span>\n )}\n {item.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({item.count})</span>\n )}\n </div>\n );\n })}\n {filtered.length === 0 && (\n <div style={{ padding: 16, textAlign: \"center\", color: T.textMut, fontSize: 13 }}>No matches</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface SliderProps {\n min?: number;\n max?: number;\n step?: number;\n value?: number | [number, number];\n range?: boolean;\n label?: string;\n tick?: boolean;\n disabled?: boolean;\n onChange?: (value: number | [number, number]) => void;\n style?: React.CSSProperties;\n}\n\nexport function Slider({ min = 0, max = 100, step = 1, value: valueProp, range = false, label, tick, disabled = false, onChange, style }: SliderProps) {\n const [value, setValue] = useState<number | [number, number]>(valueProp ?? (range ? [min, max] : min));\n useEffect(injectStyles, []);\n\n const update = (i: number, v: number) => {\n if (disabled) return;\n if (range) {\n const nv = [...(value as [number, number])] as [number, number];\n nv[i] = v; setValue(nv); onChange?.(nv);\n } else { setValue(v); onChange?.(v); }\n };\n\n const pct = (v: number) => ((v - min) / (max - min)) * 100;\n const arr = range ? (value as [number, number]) : [value as number];\n const trackFill: React.CSSProperties = range\n ? { left: `${pct(arr[0])}%`, width: `${pct(arr[1]) - pct(arr[0])}%` }\n : { left: 0, width: `${pct(arr[0])}%` };\n\n const trackColor = disabled ? T.border : T.primary;\n\n return (\n <div className=\"dhx\" style={{ width: \"100%\", opacity: disabled ? 0.5 : 1, ...style }}>\n {label && <label className=\"dhx dhx-label\">{label}</label>}\n <div style={{ position: \"relative\", height: 36, display: \"flex\", alignItems: \"center\" }}>\n <div style={{ position: \"relative\", flex: 1, height: 4, background: T.border, borderRadius: 2 }}>\n <div style={{ position: \"absolute\", ...trackFill, height: \"100%\", background: trackColor, borderRadius: 2 }} />\n {arr.map((v, i) => (\n <input key={i} type=\"range\" min={min} max={max} step={step} value={v} disabled={disabled}\n onChange={e => { const nv = +e.target.value; if (range && i === 0 && nv >= (value as [number,number])[1]) return; if (range && i === 1 && nv <= (value as [number,number])[0]) return; update(i, nv); }}\n style={{ position: \"absolute\", width: \"100%\", height: \"100%\", opacity: 0, cursor: disabled ? \"not-allowed\" : \"pointer\", top: 0, left: 0, margin: 0 }} />\n ))}\n {arr.map((v, i) => (\n <div key={i} style={{ position: \"absolute\", left: `${pct(v)}%`, top: \"50%\", transform: \"translate(-50%, -50%)\", width: 16, height: 16, borderRadius: \"50%\", background: T.surface, border: `2px solid ${trackColor}`, boxShadow: \"0 1px 4px rgba(0,0,0,.2)\", pointerEvents: \"none\" }}>\n <div style={{ position: \"absolute\", bottom: \"calc(100% + 6px)\", left: \"50%\", transform: \"translateX(-50%)\", background: disabled ? T.textMut : T.primaryDk, color: \"#fff\", padding: \"2px 6px\", borderRadius: T.r, fontSize: 11, fontWeight: 700, whiteSpace: \"nowrap\" }}>{v}</div>\n </div>\n ))}\n </div>\n </div>\n {tick && <div style={{ display: \"flex\", justifyContent: \"space-between\", marginTop: 2 }}>{[min, Math.round((max+min)/2), max].map(v => <span key={v} style={{ fontSize: 10, color: T.textMut }}>{v}</span>)}</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\ntype HSL = [number, number, number];\n\nconst PALETTE = [\"#f44336\",\"#e91e63\",\"#9c27b0\",\"#673ab7\",\"#3f51b5\",\"#2196f3\",\"#03a9f4\",\"#00bcd4\",\"#009688\",\"#4caf50\",\"#8bc34a\",\"#cddc39\",\"#ffeb3b\",\"#ffc107\",\"#ff9800\",\"#ff5722\",\"#795548\",\"#607d8b\",\"#9e9e9e\",\"#000000\",\"#ffffff\",\"#0288d1\",\"#01579b\",\"#43a047\",\"#e53935\",\"#f57c00\"];\n\nfunction hexToHsl(hex: string): HSL {\n const r = parseInt(hex.slice(1,3),16)/255, g = parseInt(hex.slice(3,5),16)/255, b = parseInt(hex.slice(5,7),16)/255;\n const max = Math.max(r,g,b), min = Math.min(r,g,b); let h = 0, s = 0; const l = (max+min)/2;\n if (max !== min) { const d = max-min; s = l > .5 ? d/(2-max-min) : d/(max+min); h = max === r ? ((g-b)/d + (g<b?6:0))/6 : max === g ? ((b-r)/d+2)/6 : ((r-g)/d+4)/6; }\n return [Math.round(h*360), Math.round(s*100), Math.round(l*100)];\n}\nfunction hslToHex(h: number, s: number, l: number): string {\n s /= 100; l /= 100;\n const a = s * Math.min(l, 1-l);\n const f = (n: number) => { const k = (n+h/30)%12; const c = l - a*Math.max(Math.min(k-3, 9-k, 1), -1); return Math.round(255*c).toString(16).padStart(2,\"0\"); };\n return \"#\" + f(0) + f(8) + f(4);\n}\n\nexport interface ColorpickerProps {\n value?: string;\n onChange?: (hex: string) => void;\n style?: React.CSSProperties;\n}\n\nexport function Colorpicker({ value = \"#0288d1\", onChange, style }: ColorpickerProps) {\n const [hsl, setHsl] = useState<HSL>(() => hexToHsl(value));\n const hex = hslToHex(...hsl);\n useEffect(injectStyles, []);\n const set = (h: HSL) => { setHsl(h); onChange?.(hslToHex(...h)); };\n\n return (\n <div className=\"dhx\" style={{ background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, padding: 16, display: \"inline-block\", boxShadow: T.shadow, ...style }}>\n <div style={{ width: 200, height: 120, borderRadius: T.r, marginBottom: 12, background: `linear-gradient(to bottom, transparent, black), linear-gradient(to right, white, hsl(${hsl[0]},100%,50%))`, cursor: \"crosshair\" }} />\n {([[\"Hue\", 0, 360, hsl[0]], [\"Saturation\", 0, 100, hsl[1]], [\"Lightness\", 0, 100, hsl[2]]] as [string, number, number, number][]).map(([lbl, mn, mx, val], idx) => (\n <div key={lbl} style={{ marginBottom: idx < 2 ? 8 : 12 }}>\n <div className=\"dhx dhx-label\">{lbl}{idx > 0 ? ` (${val}%)` : \"\"}</div>\n <input type=\"range\" min={mn} max={mx} value={val} onChange={e => { const nv = [...hsl] as HSL; nv[idx] = +e.target.value; set(nv); }} style={{ width: \"100%\", accentColor: T.primary }} />\n </div>\n ))}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 12 }}>\n <div style={{ width: 36, height: 36, borderRadius: T.r, background: hex, border: `1px solid ${T.border}`, flexShrink: 0 }} />\n <input className=\"dhx dhx-input\" style={{ flex: 1, fontFamily: \"monospace\", fontSize: 12 }} value={hex}\n onChange={e => { try { set(hexToHsl(e.target.value)); onChange?.(e.target.value); } catch { /* invalid hex */ } }} />\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(13, 1fr)\", gap: 3 }}>\n {PALETTE.map(c => (\n <div key={c} onClick={() => { setHsl(hexToHsl(c)); onChange?.(c); }}\n style={{ width: 14, height: 14, borderRadius: 2, background: c, cursor: \"pointer\", border: hex === c ? `2px solid ${T.text}` : \"1px solid rgba(0,0,0,.15)\", transition: \"transform .1s\" }}\n onMouseEnter={e => (e.currentTarget.style.transform = \"scale(1.3)\")}\n onMouseLeave={e => (e.currentTarget.style.transform = \"scale(1)\")} />\n ))}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport type PopupPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\";\n\nexport interface PopupProps {\n trigger: React.ReactNode;\n children?: React.ReactNode;\n placement?: PopupPlacement;\n style?: React.CSSProperties;\n}\n\nexport function Popup({ trigger, children, placement = \"bottom-start\", style }: PopupProps) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<React.CSSProperties>({ top: \"100%\", left: 0 });\n const ref = useRef<HTMLDivElement>(null);\n const trigRef = useRef<HTMLDivElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref, useCallback(() => setOpen(false), []));\n\n const toggle = () => {\n setOpen(o => {\n if (!o && trigRef.current) {\n const r = trigRef.current.getBoundingClientRect();\n const placements: Record<PopupPlacement, React.CSSProperties> = {\n \"bottom-start\": { top: r.height + 4, left: 0 },\n \"bottom-end\": { top: r.height + 4, right: 0, left: \"auto\" },\n \"top-start\": { bottom: r.height + 4, top: \"auto\", left: 0 },\n };\n setPos(placements[placement] || placements[\"bottom-start\"]);\n }\n return !o;\n });\n };\n\n return (\n <div ref={ref} className=\"dhx\" style={{ position: \"relative\", display: \"inline-block\" }}>\n <div ref={trigRef} onClick={toggle}>{trigger}</div>\n {open && (\n <div className=\"dhx dhx-anim-fade\" style={{ position: \"absolute\", ...pos, zIndex: 200, background: T.surface, border: `1px solid ${T.border}`, borderRadius: T.rMd, boxShadow: T.shadowLg, ...style }}>\n {children}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useDrag } from \"../../hooks\";\nimport T from \"../../tokens\";\n\nexport interface WindowProps {\n title?: string;\n children?: React.ReactNode;\n width?: number | string;\n height?: number | string;\n closable?: boolean;\n movable?: boolean;\n modal?: boolean;\n defaultOpen?: boolean;\n footer?: React.ReactNode;\n onClose?: () => void;\n style?: React.CSSProperties;\n}\n\nexport function Window({ title, children, width = 480, height, closable = true, movable = true, modal = false, defaultOpen = true, footer, onClose, style }: WindowProps) {\n const [open, setOpen] = useState(defaultOpen);\n const [pos, setPos] = useState({ x: 0, y: 0 });\n useEffect(injectStyles, []);\n\n const drag = useDrag(useCallback((x: number, y: number) => movable && setPos({ x, y }), [movable]));\n const handleClose = () => { setOpen(false); onClose?.(); };\n\n if (!open) return null;\n return (\n <>\n {modal && <div style={{ position: \"fixed\", inset: 0, background: \"rgba(0,0,0,.45)\", zIndex: 900 }} onClick={closable ? handleClose : undefined} />}\n <div className=\"dhx\" style={{ position: modal ? \"fixed\" : \"absolute\", left: \"50%\", top: \"50%\", transform: `translate(calc(-50% + ${pos.x}px), calc(-50% + ${pos.y}px))`, width, ...(height ? { height } : {}), background: T.surface, borderRadius: T.rMd, boxShadow: T.shadowLg, zIndex: 901, display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", ...style }}>\n <div onMouseDown={e => drag(e, pos.x, pos.y)} style={{ display: \"flex\", alignItems: \"center\", padding: \"12px 16px\", borderBottom: `1px solid ${T.border}`, cursor: movable ? \"grab\" : \"default\", background: T.bg, gap: 8, userSelect: \"none\" }}>\n <span style={{ flex: 1, fontWeight: 700, fontSize: 15 }}>{title}</span>\n {closable && <button onClick={handleClose} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", width: 28, height: 28, borderRadius: T.r, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 18, color: T.textSec }}\n onMouseEnter={e => (e.currentTarget.style.background = T.border)} onMouseLeave={e => (e.currentTarget.style.background = \"none\")}>×</button>}\n </div>\n <div className=\"dhx-scroll\" style={{ flex: 1, minHeight: 0, padding: 20, overflowY: \"auto\" }}>{children}</div>\n {footer && <div style={{ padding: \"12px 16px\", borderTop: `1px solid ${T.border}`, display: \"flex\", justifyContent: \"flex-end\", gap: 8, background: T.bg }}>{footer}</div>}\n </div>\n </>\n );\n}\n","import { useState, useCallback, useEffect, createContext, useContext } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport type MessageType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface MessageOptions {\n type?: MessageType;\n title?: string;\n text?: string;\n duration?: number;\n confirm?: (ok: boolean) => void;\n}\n\ninterface MessageItem extends MessageOptions { id: number; }\n\ninterface MessageAPI {\n message: (opts: MessageOptions) => number;\n alert: (title: string, opts?: Omit<MessageOptions, \"title\">) => number;\n confirm: (title: string, cb: (ok: boolean) => void, opts?: Omit<MessageOptions, \"title\" | \"confirm\">) => number;\n}\n\nexport const MessageContext = createContext<MessageAPI | null>(null);\n\nconst ICONS: Record<MessageType, string> = { success: \"✓\", error: \"✕\", warning: \"⚠\", info: \"ℹ\" };\nconst COLORS: Record<MessageType, string> = { success: T.success, error: T.danger, warning: T.warning, info: T.primary };\n\nexport function MessageProvider({ children }: { children: React.ReactNode }) {\n const [messages, setMessages] = useState<MessageItem[]>([]);\n useEffect(injectStyles, []);\n\n const remove = useCallback((id: number) => setMessages(m => m.filter(x => x.id !== id)), []);\n const add = useCallback((opts: MessageOptions) => {\n const id = Date.now();\n setMessages(m => [...m, { id, ...opts }]);\n if (opts.duration !== 0) setTimeout(() => remove(id), opts.duration || 4000);\n return id;\n }, [remove]);\n\n const api: MessageAPI = {\n message: add,\n alert: (title, opts) => add({ type: \"info\", title, ...opts }),\n confirm: (title, cb, opts) => add({ type: \"warning\", title, confirm: cb, ...opts }),\n };\n\n return (\n <MessageContext.Provider value={api}>\n {children}\n <div style={{ position: \"fixed\", top: 20, right: 20, zIndex: 9999, display: \"flex\", flexDirection: \"column\", gap: 8, pointerEvents: \"none\" }}>\n {messages.map(m => {\n const type = m.type || \"info\";\n return (\n <div key={m.id} style={{ background: T.surface, border: `1px solid ${T.border}`, borderLeft: `4px solid ${COLORS[type]}`, borderRadius: T.r, boxShadow: T.shadowLg, padding: \"12px 16px\", minWidth: 280, maxWidth: 380, pointerEvents: \"all\", display: \"flex\", gap: 10, alignItems: \"flex-start\", animation: \"dhx-toast .3s ease\" }}>\n <span style={{ fontSize: 18, color: COLORS[type], lineHeight: 1 }}>{ICONS[type]}</span>\n <div style={{ flex: 1 }}>\n {m.title && <div style={{ fontWeight: 600, fontSize: 13, marginBottom: m.text ? 3 : 0 }}>{m.title}</div>}\n {m.text && <div style={{ fontSize: 12, color: T.textSec, lineHeight: 1.5 }}>{m.text}</div>}\n {m.confirm && (\n <div style={{ display: \"flex\", gap: 6, marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(true); remove(m.id); }}>Confirm</button>\n <button className=\"dhx dhx-btn dhx-btn-secondary\" style={{ height: 26, fontSize: 12 }} onClick={() => { m.confirm!(false); remove(m.id); }}>Cancel</button>\n </div>\n )}\n </div>\n <button onClick={() => remove(m.id)} style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: T.textMut, fontSize: 14, lineHeight: 1, padding: 0 }}>×</button>\n </div>\n );\n })}\n </div>\n </MessageContext.Provider>\n );\n}\n\nexport function useMessage(): MessageAPI {\n const ctx = useContext(MessageContext);\n if (!ctx) throw new Error(\"useMessage must be used inside <MessageProvider>\");\n return ctx;\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface ListItem {\n id?: string | number;\n value?: string;\n [key: string]: unknown;\n}\n\nexport interface ListProps {\n data?: ListItem[];\n template?: (item: ListItem) => string;\n keyNavigation?: boolean;\n multiselection?: boolean;\n editable?: boolean;\n height?: number | string;\n onSelect?: (item: ListItem) => void;\n onEdit?: (item: ListItem, index: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function List({ data = [], template, keyNavigation = true, multiselection = false, editable = false, height = 400, onSelect, onEdit, style }: ListProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n const [editing, setEditing] = useState<number | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [focused, setFocused] = useState<number | null>(null);\n useEffect(injectStyles, []);\n\n const handleClick = (item: ListItem, i: number) => {\n const id = item.id ?? i;\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n setFocused(i); onSelect?.(item);\n };\n const commitEdit = (item: ListItem, i: number) => { onEdit?.({ ...item, value: editVal }, i); setEditing(null); };\n\n return (\n <div className=\"dhx dhx-scroll\" style={{ height, overflowY: \"auto\", border: `1px solid ${T.border}`, borderRadius: T.r, background: T.surface, ...style }}\n tabIndex={0}\n onKeyDown={e => {\n if (!keyNavigation) return;\n if (e.key === \"ArrowDown\") setFocused(f => Math.min((f ?? -1) + 1, data.length - 1));\n if (e.key === \"ArrowUp\") setFocused(f => Math.max((f ?? 1) - 1, 0));\n }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n const isFoc = focused === i;\n return (\n <div key={String(id)} onClick={() => handleClick(item, i)} onDoubleClick={() => editable && (setEditing(i), setEditVal(String(item.value || \"\")))}\n style={{ display: \"flex\", alignItems: \"center\", padding: \"0 12px\", height: 40, cursor: \"pointer\", fontSize: 13, borderBottom: `1px solid ${T.border}`, background: isSel ? T.primaryLt : isFoc ? T.bg : T.surface, color: isSel ? T.primary : T.text, outline: isFoc ? `2px solid ${T.primary}44` : \"none\", transition: \"background .1s\" }}>\n {editing === i ? (\n <input autoFocus className=\"dhx dhx-input\" style={{ height: 28, flex: 1 }} value={editVal} onChange={e => setEditVal(e.target.value)}\n onBlur={() => commitEdit(item, i)} onKeyDown={e => { if (e.key === \"Enter\") commitEdit(item, i); if (e.key === \"Escape\") setEditing(null); }} onClick={e => e.stopPropagation()} />\n ) : template ? (\n <div dangerouslySetInnerHTML={{ __html: template(item) }} style={{ flex: 1 }} />\n ) : (\n <span style={{ flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{String(item.value ?? \"\")}</span>\n )}\n </div>\n );\n })}\n {data.length === 0 && <div style={{ padding: 24, textAlign: \"center\", color: T.textMut }}>No items</div>}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface DataViewItem {\n id?: string | number;\n title?: string;\n value?: string;\n subtitle?: string;\n img?: string;\n [key: string]: unknown;\n}\n\nexport interface DataViewProps {\n data?: DataViewItem[];\n template?: (item: DataViewItem) => string;\n itemsInRow?: number;\n gap?: number;\n multiselection?: boolean;\n onSelect?: (item: DataViewItem) => void;\n style?: React.CSSProperties;\n}\n\nexport function DataView({ data = [], template, itemsInRow = 3, gap = 12, multiselection = false, onSelect, style }: DataViewProps) {\n const [selected, setSelected] = useState<Set<string | number>>(new Set());\n useEffect(injectStyles, []);\n\n const handleClick = (item: DataViewItem) => {\n const id = item.id ?? String(item.title);\n setSelected(s => { const ns = multiselection ? new Set(s) : new Set<string | number>(); ns.has(id) ? ns.delete(id) : ns.add(id); return ns; });\n onSelect?.(item);\n };\n\n return (\n <div className=\"dhx\" style={{ display: \"grid\", gridTemplateColumns: `repeat(${itemsInRow}, 1fr)`, gap, padding: gap, ...style }}>\n {data.map((item, i) => {\n const id = item.id ?? i;\n const isSel = selected.has(id);\n return (\n <div key={String(id)} onClick={() => handleClick(item)}\n style={{ background: T.surface, border: `2px solid ${isSel ? T.primary : T.border}`, borderRadius: T.rMd, overflow: \"hidden\", cursor: \"pointer\", transition: \"all .15s\", boxShadow: isSel ? `0 0 0 3px ${T.primary}33` : T.shadow, transform: isSel ? \"translateY(-2px)\" : \"none\" }}\n onMouseEnter={e => { e.currentTarget.style.boxShadow = T.shadowLg; e.currentTarget.style.transform = \"translateY(-2px)\"; }}\n onMouseLeave={e => { e.currentTarget.style.boxShadow = isSel ? `0 0 0 3px ${T.primary}33` : T.shadow; e.currentTarget.style.transform = isSel ? \"translateY(-2px)\" : \"none\"; }}>\n {template ? <div dangerouslySetInnerHTML={{ __html: template(item) }} /> : (\n <div style={{ padding: 16 }}>\n {item.img && <img src={item.img} alt={item.title || \"\"} style={{ width: \"100%\", borderRadius: T.r, marginBottom: 8, display: \"block\" }} />}\n <div style={{ fontWeight: 600, fontSize: 14, marginBottom: 4 }}>{item.title || item.value}</div>\n {item.subtitle && <div style={{ fontSize: 12, color: T.textSec }}>{item.subtitle}</div>}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface TreeNode {\n id: string;\n value?: string;\n count?: number;\n items?: TreeNode[];\n opened?: boolean;\n}\n\nexport interface TreeProps {\n data?: TreeNode[];\n checkbox?: boolean;\n editable?: boolean;\n dragMode?: \"both\" | \"move\" | \"copy\";\n tooltip?: (node: TreeNode) => string;\n onSelect?: (node: TreeNode) => void;\n onCheck?: (id: string, checked: boolean) => void;\n onChange?: (data: TreeNode[]) => void;\n style?: React.CSSProperties;\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────────── */\n\nfunction cloneTree(nodes: TreeNode[]): TreeNode[] {\n return nodes.map(n => ({ ...n, items: n.items ? cloneTree(n.items) : undefined }));\n}\n\nfunction collectExpanded(nodes: TreeNode[], result: Record<string, boolean> = {}): Record<string, boolean> {\n nodes.forEach(n => {\n if (n.opened) result[n.id] = true;\n if (n.items) collectExpanded(n.items, result);\n });\n return result;\n}\n\n/** Remove node by id. Returns [newTree, removedNode]. */\nfunction removeNode(nodes: TreeNode[], id: string): [TreeNode[], TreeNode | null] {\n let removed: TreeNode | null = null;\n const result = nodes\n .filter(n => { if (n.id === id) { removed = n; return false; } return true; })\n .map(n => {\n if (n.items) {\n const [newItems, r] = removeNode(n.items, id);\n if (r) removed = r;\n return { ...n, items: newItems };\n }\n return n;\n });\n return [result, removed];\n}\n\n/** Insert node relative to targetId. */\nfunction insertNode(\n nodes: TreeNode[],\n targetId: string,\n node: TreeNode,\n pos: \"before\" | \"after\" | \"inside\",\n): TreeNode[] {\n if (pos === \"inside\") {\n return nodes.map(n => {\n if (n.id === targetId) return { ...n, items: [...(n.items || []), node] };\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n }\n // Check if target is at this level\n const atThisLevel = nodes.some(n => n.id === targetId);\n if (atThisLevel) {\n const result: TreeNode[] = [];\n for (const n of nodes) {\n if (n.id === targetId) {\n if (pos === \"before\") { result.push(node); result.push(n); }\n else { result.push(n); result.push(node); }\n } else {\n result.push(n);\n }\n }\n return result;\n }\n // Recurse into children\n return nodes.map(n => {\n if (n.items) return { ...n, items: insertNode(n.items, targetId, node, pos) };\n return n;\n });\n}\n\n/** Returns true if ancestorId contains targetId somewhere in its subtree. */\nfunction isAncestor(nodes: TreeNode[], ancestorId: string, targetId: string): boolean {\n function check(n: TreeNode): boolean {\n if (n.id === ancestorId) {\n const hasDesc = (x: TreeNode): boolean => x.id === targetId || (x.items?.some(hasDesc) ?? false);\n return n.items?.some(hasDesc) ?? false;\n }\n return n.items?.some(check) ?? false;\n }\n return nodes.some(check);\n}\n\n/** Update a node's value in the tree. */\nfunction updateValue(nodes: TreeNode[], id: string, value: string): TreeNode[] {\n return nodes.map(n =>\n n.id === id\n ? { ...n, value }\n : { ...n, items: n.items ? updateValue(n.items, id, value) : undefined }\n );\n}\n\n/** Collect child check stats (for indeterminate state). */\nfunction childStats(node: TreeNode, checked: Record<string, boolean>): { total: number; checkedCount: number } {\n let total = 0, checkedCount = 0;\n const visit = (n: TreeNode) => {\n total++;\n if (checked[n.id]) checkedCount++;\n n.items?.forEach(visit);\n };\n node.items?.forEach(visit);\n return { total, checkedCount };\n}\n\n/* ── Component ────────────────────────────────────────────────────────── */\n\nexport function Tree({\n data = [], checkbox = false, editable = false,\n dragMode, tooltip, onSelect, onCheck, onChange, style,\n}: TreeProps) {\n const [nodes, setNodes] = useState<TreeNode[]>(() => cloneTree(data));\n const [expanded, setExpanded] = useState<Record<string, boolean>>(() => collectExpanded(data));\n const [selected, setSelected] = useState<string | null>(null);\n const [checked, setChecked] = useState<Record<string, boolean>>({});\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editVal, setEditVal] = useState(\"\");\n const [dragId, setDragId] = useState<string | null>(null);\n const [dropTarget, setDropTarget] = useState<{ id: string; pos: \"before\" | \"after\" | \"inside\" } | null>(null);\n useEffect(injectStyles, []);\n\n useEffect(() => {\n setNodes(cloneTree(data));\n setExpanded(prev => ({ ...collectExpanded(data), ...prev }));\n }, [data]);\n\n const toggle = (id: string) => setExpanded(e => ({ ...e, [id]: !e[id] }));\n\n const handleCheck = (id: string, val: boolean) => {\n setChecked(c => ({ ...c, [id]: val }));\n onCheck?.(id, val);\n };\n\n const commitEdit = () => {\n if (!editingId) return;\n const id = editingId, val = editVal;\n setEditingId(null);\n setNodes(prev => {\n const updated = updateValue(prev, id, val);\n onChange?.(updated);\n return updated;\n });\n };\n\n /* ── Drag handlers ──────────────────────────────────────────────────── */\n\n const handleDragStart = (e: React.DragEvent, id: string) => {\n e.dataTransfer.effectAllowed = \"move\";\n setDragId(id);\n };\n\n const handleDragOver = (e: React.DragEvent, id: string) => {\n if (!dragId || dragId === id || isAncestor(nodes, dragId, id)) return;\n e.preventDefault();\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const y = e.clientY - rect.top;\n const h = rect.height;\n const pos: \"before\" | \"after\" | \"inside\" = y < h * 0.25 ? \"before\" : y > h * 0.75 ? \"after\" : \"inside\";\n setDropTarget(dt => (dt?.id === id && dt?.pos === pos) ? dt : { id, pos });\n };\n\n const handleDrop = (e: React.DragEvent, targetId: string) => {\n e.preventDefault();\n if (!dragId || !dropTarget || dragId === targetId) { setDropTarget(null); setDragId(null); return; }\n setNodes(prev => {\n const [withoutDrag, dragged] = removeNode(prev, dragId);\n if (!dragged) return prev;\n const result = insertNode(withoutDrag, targetId, dragged, dropTarget.pos);\n onChange?.(result);\n return result;\n });\n if (dropTarget.pos === \"inside\") setExpanded(e => ({ ...e, [targetId]: true }));\n setDropTarget(null);\n setDragId(null);\n };\n\n const handleDragEnd = () => { setDragId(null); setDropTarget(null); };\n\n /* ── Render node ────────────────────────────────────────────────────── */\n\n const renderNode = (node: TreeNode, depth = 0): React.ReactNode => {\n const hasChildren = (node.items?.length ?? 0) > 0;\n const isExp = expanded[node.id];\n const isSel = selected === node.id;\n const isDragging = dragId === node.id;\n const isDrop = dropTarget?.id === node.id;\n\n // Checkbox indeterminate logic\n let isChecked = !!checked[node.id];\n let isIndet = false;\n if (checkbox && hasChildren) {\n const { total, checkedCount } = childStats(node, checked);\n if (checkedCount > 0 && checkedCount < total) { isIndet = true; }\n else if (total > 0 && checkedCount === total) { isChecked = true; }\n }\n\n const dropShadow: React.CSSProperties = isDrop && dropTarget!.pos !== \"inside\"\n ? { boxShadow: dropTarget!.pos === \"before\" ? `inset 0 2px 0 0 ${T.primary}` : `inset 0 -2px 0 0 ${T.primary}` }\n : {};\n\n const rowBg = isDrop && dropTarget!.pos === \"inside\"\n ? T.primaryLt\n : isSel ? T.primaryLt : \"transparent\";\n\n return (\n <div key={node.id} style={{ opacity: isDragging ? 0.4 : 1 }}>\n <div\n draggable={!!dragMode}\n onDragStart={dragMode ? e => handleDragStart(e, node.id) : undefined}\n onDragOver={dragMode ? e => handleDragOver(e, node.id) : undefined}\n onDrop={dragMode ? e => handleDrop(e, node.id) : undefined}\n onDragEnd={dragMode ? handleDragEnd : undefined}\n title={tooltip?.(node)}\n onClick={() => {\n setSelected(node.id);\n onSelect?.(node);\n if (hasChildren) toggle(node.id);\n }}\n onDoubleClick={() => {\n if (editable) { setEditingId(node.id); setEditVal(node.value || \"\"); }\n }}\n style={{\n display: \"flex\", alignItems: \"center\", gap: 4,\n padding: `5px 8px 5px ${12 + depth * 18}px`,\n cursor: dragMode ? \"grab\" : \"pointer\",\n borderRadius: T.r, margin: \"1px 4px\",\n background: rowBg,\n color: isSel ? T.primary : T.text,\n userSelect: \"none\", fontSize: 13,\n ...dropShadow,\n }}\n onMouseEnter={e => !isSel && !isDrop && (e.currentTarget.style.background = T.bg)}\n onMouseLeave={e => !isSel && !isDrop && (e.currentTarget.style.background = \"transparent\")}\n >\n {/* Expand arrow */}\n <span\n style={{ width: 16, textAlign: \"center\", fontSize: 11, color: T.textMut, flexShrink: 0 }}\n onClick={e => { e.stopPropagation(); if (hasChildren) toggle(node.id); }}\n >\n {hasChildren ? (isExp ? \"▾\" : \"▸\") : \"\"}\n </span>\n\n {/* Folder / file icon */}\n <span style={{ fontSize: 15, flexShrink: 0 }}>\n {hasChildren ? (isExp ? \"📂\" : \"📁\") : \"📄\"}\n </span>\n\n {/* Checkbox */}\n {checkbox && (\n <input\n ref={el => { if (el) el.indeterminate = isIndet; }}\n type=\"checkbox\"\n checked={isChecked}\n onChange={e => { e.stopPropagation(); handleCheck(node.id, e.target.checked); }}\n style={{ cursor: \"pointer\", accentColor: T.primary, flexShrink: 0 }}\n onClick={e => e.stopPropagation()}\n />\n )}\n\n {/* Label or inline editor */}\n {editingId === node.id ? (\n <input\n autoFocus\n className=\"dhx dhx-input\"\n style={{ height: 24, fontSize: 12, flex: 1 }}\n value={editVal}\n onChange={e => setEditVal(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={e => { if (e.key === \"Enter\") commitEdit(); if (e.key === \"Escape\") setEditingId(null); }}\n onClick={e => e.stopPropagation()}\n />\n ) : (\n <span style={{ flex: 1 }}>{node.value}</span>\n )}\n\n {node.count !== undefined && (\n <span style={{ fontSize: 11, color: T.textMut }}>({node.count})</span>\n )}\n </div>\n\n {hasChildren && isExp && (\n <div>{node.items!.map(child => renderNode(child, depth + 1))}</div>\n )}\n </div>\n );\n };\n\n return (\n <div\n className=\"dhx dhx-scroll\"\n style={{ overflowY: \"auto\", ...style }}\n onDragOver={dragMode ? e => e.preventDefault() : undefined}\n onDrop={dragMode ? e => { e.preventDefault(); setDropTarget(null); setDragId(null); } : undefined}\n >\n {nodes.map(n => renderNode(n))}\n </div>\n );\n}\n","import { useState, useMemo, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface PaginationProps {\n total: number;\n pageSize?: number;\n page?: number;\n onChange?: (page: number) => void;\n style?: React.CSSProperties;\n}\n\nexport function Pagination({ total, pageSize = 10, page: pageProp, onChange, style }: PaginationProps) {\n const [page, setPage] = useState(pageProp || 1);\n const totalPages = Math.ceil(total / pageSize);\n useEffect(injectStyles, []);\n\n const goTo = (p: number) => { const np = Math.min(Math.max(1, p), totalPages); setPage(np); onChange?.(np); };\n\n const range = useMemo(() => {\n const pages: (number | \"...\")[] = [];\n const delta = 2;\n for (let i = Math.max(1, page - delta); i <= Math.min(totalPages, page + delta); i++) pages.push(i);\n if ((pages[0] as number) > 1) { if ((pages[0] as number) > 2) pages.unshift(\"...\"); pages.unshift(1); }\n if ((pages[pages.length - 1] as number) < totalPages) { if ((pages[pages.length - 1] as number) < totalPages - 1) pages.push(\"...\"); pages.push(totalPages); }\n return pages;\n }, [page, totalPages]);\n\n return (\n <div className=\"dhx\" style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: \"8px 12px\", ...style }}>\n <span style={{ fontSize: 12, color: T.textSec, marginRight: 8 }}>{(page-1)*pageSize+1}–{Math.min(page*pageSize,total)} of {total}</span>\n {([[\"«\", 1], [\"‹\", page - 1]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === 1} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n {range.map((p, i) => (\n <button key={i} onClick={() => typeof p === \"number\" && goTo(p)} className={`dhx dhx-btn ${p === page ? \"dhx-btn-primary\" : \"dhx-btn-ghost\"}`} style={{ height: 30, minWidth: 30, padding: \"0 8px\", fontSize: 13 }} disabled={p === \"...\"}>{p}</button>\n ))}\n {([[\"›\", page + 1], [\"»\", totalPages]] as [string, number][]).map(([lbl, p]) => (\n <button key={lbl} className=\"dhx dhx-btn dhx-btn-ghost\" style={{ height: 30, padding: \"0 8px\", fontSize: 14 }} disabled={page === totalPages} onClick={() => goTo(p)}>{lbl}</button>\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { Slider } from \"../Slider\";\nimport { Combobox } from \"../Combobox\";\nimport { Timepicker, TimeValue } from \"../Timepicker\";\nimport T from \"../../tokens\";\n\nexport interface FormFieldOption { value: string; label?: string; }\n\nexport interface FormField {\n type?: \"input\" | \"textarea\" | \"select\" | \"checkbox\" | \"radio\" | \"slider\" | \"combo\" |\n \"datepicker\" | \"timepicker\" | \"fieldset\" | \"spacer\" | \"text\" | \"toggle\" | \"colorpicker\";\n name: string;\n label?: string;\n labelWidth?: number;\n labelPosition?: \"top\" | \"left\";\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n value?: unknown;\n inputType?: string;\n icon?: React.ReactNode;\n offIcon?: React.ReactNode;\n text?: string;\n offText?: string;\n helpMessage?: string;\n options?: FormFieldOption[];\n data?: { id?: string; value: string }[];\n multiselection?: boolean;\n min?: number;\n max?: number;\n step?: number;\n range?: boolean;\n height?: number;\n rows?: FormField[];\n padding?: string | number;\n width?: string | number;\n}\n\nexport interface FormConfig {\n rows?: (FormField | FormField[])[];\n padding?: string | number;\n width?: string | number;\n labelWidth?: number;\n buttons?: boolean;\n buttonAlign?: \"flex-start\" | \"center\" | \"flex-end\";\n submitText?: string;\n resetButton?: boolean;\n resetText?: string;\n}\n\nexport interface FormProps {\n config?: FormConfig;\n defaultValues?: Record<string, unknown>;\n onSubmit?: (values: Record<string, unknown>) => void | Promise<void>;\n style?: React.CSSProperties;\n}\n\nexport function Form({ config = {}, defaultValues = {}, onSubmit, style }: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>(defaultValues);\n const [errors, setErrors] = useState<Record<string, string | null>>({});\n const [openPicker, setOpenPicker] = useState<string | null>(null);\n useEffect(injectStyles, []);\n\n const set = (name: string, val: unknown) => {\n setValues(v => ({ ...v, [name]: val }));\n setErrors(e => ({ ...e, [name]: null }));\n };\n\n const collectFields = (rows: (FormField | FormField[])[]): FormField[] => {\n const out: FormField[] = [];\n rows.flat().forEach(f => {\n if (!f || typeof f !== \"object\" || !(\"name\" in f)) return;\n out.push(f);\n if (f.type === \"fieldset\" && f.rows) out.push(...collectFields(f.rows));\n });\n return out;\n };\n\n const validate = () => {\n const errs: Record<string, string> = {};\n collectFields(config.rows || []).forEach(f => {\n if (f.required && !values[f.name])\n errs[f.name] = `${f.label || f.name} is required`;\n });\n setErrors(errs);\n return Object.keys(errs).length === 0;\n };\n\n const renderField = (field: FormField): React.ReactNode => {\n const val = (values[field.name] ?? field.value ?? \"\") as string;\n const err = errors[field.name];\n\n // label width: field-level override or config-level default\n const lw = field.labelWidth ?? config.labelWidth;\n const inline = lw !== undefined || field.labelPosition === \"left\";\n\n /* ── fieldset ── */\n if (field.type === \"fieldset\") return (\n <fieldset key={field.name} style={{ border: `1px solid ${T.border}`, borderRadius: T.r, padding: \"12px 16px\", marginBottom: 14 }}>\n <legend style={{ fontSize: 12, fontWeight: 700, color: T.textSec, padding: \"0 6px\" }}>{field.label}</legend>\n {(field.rows || []).map(f => renderField(f))}\n </fieldset>\n );\n\n if (field.type === \"spacer\") return (\n <div key={field.name} style={{ height: field.height || 16 }} />\n );\n\n /* ── shared sub-elements ── */\n const labelStyle: React.CSSProperties = lw\n ? { minWidth: lw, width: lw, flexShrink: 0, paddingTop: 8, boxSizing: \"border-box\" }\n : {};\n const labelEl = field.label\n ? <label key=\"lbl\" className=\"dhx dhx-label\" style={{ display: \"flex\", gap: 4, ...labelStyle }}>\n {field.label}{field.required && <span style={{ color: T.danger }}>*</span>}\n </label>\n : null;\n const errEl = err ? <div style={{ fontSize: 11, color: T.danger, marginTop: 3 }}>{err}</div> : null;\n const helpEl = field.helpMessage\n ? <div style={{ fontSize: 11, color: T.textMut, marginTop: 3 }}>ⓘ {field.helpMessage}</div>\n : null;\n\n const common = { key: field.name, className: \"dhx-form-group\" };\n\n /* wrap(content) handles both inline and stacked layouts */\n const wrap = (content: React.ReactNode) => inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1, minWidth: 0 }}>{content}{errEl}{helpEl}</div>\n </div>\n ) : (\n <div {...common}>\n {labelEl}\n {content}\n {errEl}\n {helpEl}\n </div>\n );\n\n /* ── input ── */\n if (!field.type || field.type === \"input\") return wrap(\n <div className=\"dhx-input-wrap\">\n {field.icon && <span className=\"dhx-input-icon\">{field.icon}</span>}\n <input className={`dhx dhx-input${field.icon ? \" dhx-input--with-icon\" : \"\"}`}\n style={{ borderColor: err ? T.danger : undefined }}\n type={field.inputType || \"text\"} placeholder={field.placeholder}\n value={val} onChange={e => set(field.name, e.target.value)} disabled={field.disabled} />\n </div>\n );\n\n /* ── textarea ── */\n if (field.type === \"textarea\") return wrap(\n <textarea className=\"dhx dhx-input\"\n style={{ height: 80, resize: \"vertical\", padding: \"8px 10px\" }}\n placeholder={field.placeholder} value={val}\n onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── select ── */\n if (field.type === \"select\") return wrap(\n <select className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} style={{ cursor: \"pointer\" }}>\n <option value=\"\">— Select —</option>\n {(field.options || []).map(o => <option key={o.value} value={o.value}>{o.label || o.value}</option>)}\n </select>\n );\n\n /* ── datepicker ── */\n if (field.type === \"datepicker\") return wrap(\n <input type=\"date\" className=\"dhx dhx-input\" value={val} onChange={e => set(field.name, e.target.value)} />\n );\n\n /* ── timepicker (popup) ── */\n if (field.type === \"timepicker\") {\n const tv: TimeValue = (values[field.name] as TimeValue) ?? { h: 12, m: 0, ampm: \"AM\" };\n const hasVal = !!(values[field.name]);\n const display = hasVal\n ? `${String(tv.h).padStart(2,\"0\")}:${String(tv.m).padStart(2,\"0\")}${tv.ampm ? \" \" + tv.ampm : \"\"}`\n : (field.placeholder || \"Click to select\");\n const trigger = (\n <div style={{ position: \"relative\" }}>\n <div className=\"dhx dhx-input\"\n style={{ cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}\n onClick={() => setOpenPicker(openPicker === field.name ? null : field.name)}>\n <span style={{ color: hasVal ? T.text : T.textMut }}>{display}</span>\n <span style={{ fontSize: 13, color: T.textSec }}>🕐</span>\n </div>\n {openPicker === field.name && (\n <div style={{ position: \"absolute\", zIndex: 100, top: \"calc(100% + 4px)\", left: 0 }}>\n <Timepicker value={tv} controls onChange={v => { set(field.name, v); setOpenPicker(null); }} />\n </div>\n )}\n </div>\n );\n return wrap(trigger);\n }\n\n /* ── colorpicker ── */\n if (field.type === \"colorpicker\") return wrap(\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <input type=\"color\" value={(val as string) || \"#000000\"} onChange={e => set(field.name, e.target.value)}\n style={{ width: 36, height: 36, padding: 2, border: `1px solid ${T.border}`, borderRadius: T.r, cursor: \"pointer\", background: \"none\" }} />\n <span style={{ fontSize: 12, color: T.textSec, fontFamily: \"monospace\" }}>{(val as string) || \"#000000\"}</span>\n </div>\n );\n\n /* ── text (static) ── */\n if (field.type === \"text\") return wrap(\n <p style={{ margin: \"6px 0\", fontSize: 13, color: T.text }}>{field.value as string}</p>\n );\n\n /* ── checkbox ── */\n if (field.type === \"checkbox\") return (\n <div {...common}>\n {inline\n ? <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {/* push checkbox to label-width offset */}\n {lw && <div style={{ width: lw, flexShrink: 0 }} />}\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n </div>\n : <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={!!val} onChange={e => set(field.name, e.target.checked)} style={{ width: 16, height: 16, accentColor: T.primary, cursor: \"pointer\" }} />\n <span style={{ fontSize: 13 }}>{field.label}</span>\n </label>\n }\n {helpEl}\n </div>\n );\n\n /* ── radio ── */\n if (field.type === \"radio\") {\n const options = (field.options || []).map(o => (\n <label key={o.value} style={{ display: \"flex\", alignItems: \"center\", gap: 6, cursor: \"pointer\", fontSize: 13 }}>\n <input type=\"radio\" name={field.name} value={o.value} checked={val === o.value}\n onChange={() => set(field.name, o.value)} style={{ accentColor: T.primary, cursor: \"pointer\" }} />\n {o.label || o.value}\n </label>\n ));\n return wrap(\n <div style={{ display: \"flex\", gap: 16, flexWrap: \"wrap\", paddingTop: 8 }}>{options}</div>\n );\n }\n\n /* ── slider ── */\n if (field.type === \"slider\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Slider min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Slider label={field.label} min={field.min} max={field.max} step={field.step}\n value={(val as unknown as number) || field.min} range={field.range}\n onChange={v => set(field.name, v)} />\n {helpEl}\n </div>\n );\n\n /* ── combo ── */\n if (field.type === \"combo\") return inline ? (\n <div {...common} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n {labelEl}\n <div style={{ flex: 1 }}>\n <Combobox data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n </div>\n ) : (\n <div {...common}>\n <Combobox label={field.label} data={field.data || []} multiselection={field.multiselection}\n placeholder={field.placeholder || \"Select...\"}\n value={(val as string) || (field.multiselection ? [] : null)}\n onChange={v => set(field.name, v)} />\n {errEl}{helpEl}\n </div>\n );\n\n /* ── toggle ── */\n if (field.type === \"toggle\") {\n const isOn = !!val;\n const icon = isOn ? field.icon : (field.offIcon || field.icon);\n const txt = isOn ? (field.text || field.label) : (field.offText || field.text || field.label);\n return (\n <div {...common}>\n {inline && lw && <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <div style={{ width: lw, flexShrink: 0 }} />\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>\n </div>}\n {!inline && <label style={{ display: \"flex\", alignItems: \"center\", gap: 10, cursor: \"pointer\" }}>\n <Switch on={isOn} onClick={() => set(field.name, !val)} />\n {icon && <span style={{ fontSize: 16 }}>{icon}</span>}\n {txt && <span style={{ fontSize: 13 }}>{txt}</span>}\n </label>}\n {helpEl}\n </div>\n );\n }\n\n return null;\n };\n\n const renderRows = (rows: (FormField | FormField[])[]) =>\n rows.map((row, i) =>\n Array.isArray(row)\n ? <div key={i} style={{ display: \"flex\", gap: 12, alignItems: \"flex-start\" }}>{row.map(renderField)}</div>\n : renderField(row)\n );\n\n return (\n <div className=\"dhx\" style={{ padding: config.padding || 0, width: config.width || \"100%\", ...style }}>\n {renderRows(config.rows || [])}\n {(config.buttons || onSubmit) && (\n <div style={{ display: \"flex\", gap: 8, justifyContent: config.buttonAlign || \"flex-start\", marginTop: 8 }}>\n <button className=\"dhx dhx-btn dhx-btn-primary\" onClick={() => validate() && onSubmit?.(values)}>\n {config.submitText || \"Submit\"}\n </button>\n {config.resetButton !== false &&\n <button className=\"dhx dhx-btn dhx-btn-secondary\" onClick={() => { setValues(defaultValues); setErrors({}); }}>\n {config.resetText || \"Reset\"}\n </button>\n }\n </div>\n )}\n </div>\n );\n}\n\nfunction Switch({ on, onClick }: { on: boolean; onClick: () => void }) {\n return (\n <div style={{ position: \"relative\", width: 40, height: 22, flexShrink: 0 }} onClick={onClick}>\n <div style={{ width: 40, height: 22, borderRadius: 11, background: on ? T.primary : T.border, transition: \"background 0.2s\" }} />\n <div style={{ position: \"absolute\", top: 3, left: on ? 21 : 3, width: 16, height: 16, borderRadius: \"50%\", background: \"#fff\", transition: \"left 0.2s\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\" }} />\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport T from \"../../tokens\";\n\nexport interface RibbonSubItem {\n id?: string;\n type?: \"separator\" | \"sep\" | \"input\" | \"selectButton\";\n value?: string; // primary text label\n text?: string; // alias for value (backward compat)\n icon?: React.ReactNode;\n active?: boolean;\n twoState?: boolean;\n group?: string;\n disabled?: boolean;\n hidden?: boolean;\n tooltip?: string;\n label?: string; // prefix label for input fields\n size?: \"auto\" | \"small\"; // \"auto\" = tall button, \"small\" = compact\n placeholder?: string;\n width?: number;\n count?: number;\n items?: { value: string; hotkey?: string }[];\n onClick?: (item: RibbonSubItem) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface RibbonBlock {\n type: \"block\";\n title?: string; // section label shown at bottom (primary)\n label?: string; // alias for title (backward compat)\n direction?: \"col\" | \"row\";\n items?: (RibbonSubItem | RibbonBlock)[];\n}\n\nexport type RibbonItem = RibbonSubItem | RibbonBlock;\n\nexport interface RibbonProps {\n items?: RibbonItem[];\n onAction?: (id: string, item: RibbonSubItem) => void;\n style?: React.CSSProperties;\n}\n\n/* ── Flatten all leaf subitems (for twoState/group state init) ── */\nfunction collectAll(items: (RibbonSubItem | RibbonBlock)[]): RibbonSubItem[] {\n const result: RibbonSubItem[] = [];\n for (const item of items) {\n if (item.type === \"block\") {\n result.push(...collectAll((item as RibbonBlock).items || []));\n } else {\n result.push(item as RibbonSubItem);\n }\n }\n return result;\n}\n\nexport function Ribbon({ items = [], onAction, style }: RibbonProps) {\n useEffect(injectStyles, []);\n\n const [activeMap, setActiveMap] = useState<Record<string, boolean>>(() => {\n const map: Record<string, boolean> = {};\n for (const si of collectAll(items)) {\n if (si.id) map[si.id] = !!si.active;\n }\n return map;\n });\n\n const allItems = collectAll(items);\n\n const handleClick = (si: RibbonSubItem) => {\n if (si.disabled) return;\n if (si.id) {\n if (si.group) {\n const sameGroup = allItems.filter(s => s.group === si.group && s.id);\n setActiveMap(prev => {\n const next = { ...prev };\n for (const s of sameGroup) next[s.id!] = false;\n next[si.id!] = true;\n return next;\n });\n } else if (si.twoState) {\n setActiveMap(prev => ({ ...prev, [si.id!]: !prev[si.id!] }));\n }\n }\n si.onClick?.(si);\n if (si.id) onAction?.(si.id, si);\n };\n\n /* ── Render a leaf subitem ── */\n const renderSubItem = (si: RibbonSubItem, key: string | number): React.ReactNode => {\n if (si.hidden) return null;\n\n const label = si.value ?? si.text;\n const isLarge = si.size === \"auto\";\n const isActive = si.id !== undefined ? (activeMap[si.id] ?? !!si.active) : !!si.active;\n\n if (si.type === \"separator\" || si.type === \"sep\") return (\n <div key={key} style={{ width: 1, background: T.border, margin: \"4px 2px\", alignSelf: \"stretch\" }} />\n );\n\n if (si.type === \"input\") return (\n <div key={key} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", justifyContent: \"center\", padding: \"2px 4px\", gap: 2 }}>\n {si.label && <span style={{ fontSize: 10, color: T.textMut }}>{si.label}</span>}\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {si.icon && (\n <span style={{ position: \"absolute\", left: 6, fontSize: 13, color: T.textMut, pointerEvents: \"none\", zIndex: 1 }}>\n {si.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: si.width || 110, height: 26, fontSize: 12, paddingLeft: si.icon ? 24 : undefined }}\n placeholder={si.placeholder}\n defaultValue={si.value}\n onChange={e => si.onChange?.(e.target.value)}\n />\n </div>\n </div>\n );\n\n if (si.type === \"selectButton\") return (\n <select\n key={key}\n className=\"dhx dhx-input\"\n style={{ height: 26, fontSize: 12, cursor: \"pointer\", margin: 2, width: si.width }}\n defaultValue={si.value}\n onChange={e => si.onChange?.(e.target.value)}\n >\n {si.items?.map(o => <option key={o.value} value={o.value}>{o.value}</option>)}\n </select>\n );\n\n return (\n <button\n key={key}\n title={si.tooltip}\n disabled={si.disabled}\n className=\"dhx dhx-btn dhx-btn-ghost\"\n style={{\n flexDirection: isLarge ? \"column\" : \"row\",\n alignSelf: isLarge ? \"stretch\" : \"center\",\n justifyContent: \"center\",\n minHeight: isLarge ? 48 : 26,\n padding: isLarge ? \"6px 10px\" : \"0 8px\",\n gap: isLarge ? 4 : 5,\n position: \"relative\",\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : si.disabled ? T.textMut : T.text,\n opacity: si.disabled ? 0.55 : 1,\n cursor: si.disabled ? \"not-allowed\" : \"pointer\",\n }}\n onClick={() => handleClick(si)}\n >\n {si.icon && (\n <span style={{ fontSize: isLarge ? 22 : 15, lineHeight: 1, flexShrink: 0 }}>{si.icon}</span>\n )}\n {label && (\n <span style={{\n fontSize: 10,\n maxWidth: isLarge ? 64 : undefined,\n textAlign: isLarge ? \"center\" : \"left\",\n lineHeight: 1.2,\n whiteSpace: isLarge ? \"normal\" : \"nowrap\",\n }}>\n {label}\n </span>\n )}\n {si.count !== undefined && (\n <span style={{\n position: \"absolute\", top: 2, right: 2,\n minWidth: 14, height: 14,\n background: T.danger, color: \"#fff\",\n borderRadius: 7, fontSize: 9, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 2px\", pointerEvents: \"none\",\n }}>\n {si.count}\n </span>\n )}\n </button>\n );\n };\n\n /* ── Render an inner block (layout group, no section styling) ── */\n const renderInnerBlock = (block: RibbonBlock, key: string | number): React.ReactNode => (\n <div key={key} style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"flex-start\" : \"center\",\n gap: 2,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, `${key}-${j}`)\n : renderSubItem(sub as RibbonSubItem, `${key}-${j}`)\n )}\n </div>\n );\n\n /* ── Render a top-level section block ── */\n const renderSection = (block: RibbonBlock, key: number): React.ReactNode => {\n const title = block.title || block.label;\n return (\n <div key={key} style={{\n display: \"flex\", flexDirection: \"column\", alignItems: \"stretch\",\n borderRight: `1px solid ${T.border}`,\n padding: \"4px 6px 0\",\n minWidth: 40,\n }}>\n {/* items area */}\n <div style={{\n display: \"flex\",\n flexDirection: block.direction === \"col\" ? \"column\" : \"row\",\n alignItems: block.direction === \"col\" ? \"stretch\" : \"center\",\n gap: 2,\n flex: 1,\n }}>\n {block.items?.map((sub, j) =>\n sub.type === \"block\"\n ? renderInnerBlock(sub as RibbonBlock, j)\n : renderSubItem(sub as RibbonSubItem, j)\n )}\n </div>\n\n {/* section title at bottom */}\n {title && (\n <div style={{\n fontSize: 10, color: T.textMut, textAlign: \"center\",\n padding: \"3px 0 4px\", marginTop: 2,\n borderTop: `1px solid ${T.border}`,\n }}>\n {title}\n </div>\n )}\n </div>\n );\n };\n\n const renderItem = (item: RibbonItem, i: number): React.ReactNode => {\n if (item.type === \"block\") return renderSection(item as RibbonBlock, i);\n return renderSubItem(item as RibbonSubItem, i);\n };\n\n return (\n <div className=\"dhx\" style={{\n display: \"flex\", alignItems: \"stretch\",\n background: T.surface,\n borderBottom: `1px solid ${T.border}`,\n overflowX: \"auto\",\n gap: 0,\n minHeight: 72,\n ...style,\n }}>\n {items.map(renderItem)}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { injectStyles } from \"../../styles\";\nimport { useClickOutside } from \"../../hooks\";\nimport { MenuDropdown, MenuItem } from \"../Menu\";\nimport T from \"../../tokens\";\n\nexport interface NavbarItem {\n id?: string;\n type?: \"navItem\" | \"separator\" | \"spacer\" | \"input\" | \"imageButton\";\n value?: string;\n icon?: React.ReactNode;\n src?: string;\n items?: MenuItem[];\n width?: number;\n placeholder?: string;\n tooltip?: string;\n twoState?: boolean;\n active?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n count?: number;\n onClick?: (id: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport interface NavbarProps {\n logo?: React.ReactNode;\n items?: NavbarItem[];\n vertical?: boolean;\n onAction?: (id: string) => void;\n style?: React.CSSProperties;\n}\n\nfunction Badge({ count }: { count: number }) {\n return (\n <span style={{\n position: \"absolute\", top: 3, right: 3,\n minWidth: 16, height: 16,\n background: T.danger, color: \"#fff\",\n borderRadius: 8, fontSize: 10, fontWeight: 700,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n padding: \"0 3px\", lineHeight: 1, pointerEvents: \"none\",\n }}>\n {count}\n </span>\n );\n}\n\nexport function Navbar({ logo, items = [], vertical = false, onAction, style }: NavbarProps) {\n const [openMenu, setOpenMenu] = useState<number | null>(null);\n const [activeItems, setActiveItems] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n items.forEach(item => { if (item.id && item.twoState && item.active) init[item.id] = true; });\n return init;\n });\n const ref = useRef<HTMLElement>(null);\n useEffect(injectStyles, []);\n useClickOutside(ref as React.RefObject<HTMLElement>, useCallback(() => setOpenMenu(null), []));\n\n const handleClick = (item: NavbarItem, i: number) => {\n if (item.disabled) return;\n if (item.twoState && item.id) {\n setActiveItems(s => ({ ...s, [item.id!]: !s[item.id!] }));\n }\n if (item.items?.length) {\n setOpenMenu(prev => prev === i ? null : i);\n return;\n }\n item.onClick?.(item.id || \"\");\n onAction?.(item.id || \"\");\n };\n\n const renderItem = (item: NavbarItem, i: number): React.ReactNode => {\n if (item.hidden) return null;\n\n /* ── separator ── */\n if (item.type === \"separator\") return (\n <div key={i} style={{\n [vertical ? \"height\" : \"width\"]: 1,\n background: T.border,\n margin: vertical ? \"4px 8px\" : \"0 6px\",\n alignSelf: \"stretch\",\n }} />\n );\n\n /* ── spacer ── */\n if (item.type === \"spacer\") return <div key={i} style={{ flex: 1 }} />;\n\n /* ── input ── */\n if (item.type === \"input\") return (\n <div key={i} style={{ position: \"relative\", display: \"flex\", alignItems: \"center\", margin: \"0 4px\" }}>\n {item.icon && (\n <span style={{ position: \"absolute\", left: 8, color: T.textMut, fontSize: 15, pointerEvents: \"none\", zIndex: 1 }}>\n {item.icon}\n </span>\n )}\n <input\n className=\"dhx dhx-input\"\n style={{ width: item.width || 200, height: 28, paddingLeft: item.icon ? 30 : undefined }}\n placeholder={item.placeholder}\n onChange={e => item.onChange?.(e.target.value)}\n />\n </div>\n );\n\n /* ── imageButton ── */\n if (item.type === \"imageButton\") return (\n <button\n key={i}\n title={item.tooltip}\n disabled={item.disabled}\n style={{\n position: \"relative\", width: 36, height: 36, padding: 2,\n border: \"none\", borderRadius: \"50%\", overflow: \"hidden\",\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n background: \"transparent\", flexShrink: 0,\n }}\n onClick={() => handleClick(item, i)}\n >\n {item.src && <img src={item.src} alt={item.value || \"\"} style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", borderRadius: \"50%\" }} />}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n );\n\n /* ── navItem (default) ── */\n const isActive = !!(item.twoState && item.id && activeItems[item.id]);\n const hasDropdown = !!(item.items?.length);\n\n const btnStyle: React.CSSProperties = {\n position: \"relative\",\n height: vertical ? 40 : 36,\n gap: 6,\n background: isActive ? T.primaryLt : \"transparent\",\n color: isActive ? T.primary : item.disabled ? T.textMut : T.text,\n opacity: item.disabled ? 0.55 : 1,\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n ...(vertical ? {\n width: \"100%\", justifyContent: \"flex-start\",\n padding: \"0 16px\", borderRadius: 0,\n } : {}),\n };\n\n return (\n <div key={i} style={{ position: \"relative\" }}>\n <button\n className=\"dhx dhx-btn dhx-btn-ghost\"\n title={item.tooltip}\n disabled={item.disabled}\n style={btnStyle}\n onClick={() => handleClick(item, i)}\n >\n {item.icon && <span style={{ fontSize: 16, flexShrink: 0 }}>{item.icon}</span>}\n {item.value && <span style={{ fontSize: 13 }}>{item.value}</span>}\n {hasDropdown && <span style={{ fontSize: 9, opacity: 0.55, marginLeft: 2 }}>▼</span>}\n {item.count !== undefined && <Badge count={item.count} />}\n </button>\n\n {hasDropdown && openMenu === i && (\n <MenuDropdown\n items={item.items!}\n onSelect={(mi) => {\n setOpenMenu(null);\n if (mi.id) { item.onClick?.(mi.id); onAction?.(mi.id); }\n }}\n style={vertical ? { left: \"100%\", top: 0 } : { top: \"100%\" }}\n />\n )}\n </div>\n );\n };\n\n return (\n <nav\n ref={ref}\n className=\"dhx\"\n style={{\n display: \"flex\",\n flexDirection: vertical ? \"column\" : \"row\",\n alignItems: vertical ? \"stretch\" : \"center\",\n background: T.surface,\n borderBottom: vertical ? \"none\" : `1px solid ${T.border}`,\n borderRight: vertical ? `1px solid ${T.border}` : \"none\",\n padding: vertical ? \"8px 0\" : \"0 12px\",\n minHeight: vertical ? undefined : 48,\n gap: 2,\n ...style,\n }}\n >\n {logo && (\n <div style={{\n color: T.text, fontWeight: 800, fontSize: 16,\n padding: vertical ? \"8px 16px 12px\" : \"0 12px 0 4px\",\n borderBottom: vertical ? `1px solid ${T.border}` : \"none\",\n borderRight: vertical ? \"none\" : `1px solid ${T.border}`,\n marginRight: vertical ? 0 : 8,\n marginBottom: vertical ? 4 : 0,\n flexShrink: 0,\n }}>\n {logo}\n </div>\n )}\n {items.map(renderItem)}\n </nav>\n );\n}\n"],"names":["tokens","STYLE_ID","injectStyles","s","T","SIZE_STYLES","Button","children","variant","size","icon","disabled","onClick","style","className","useEffect","jsxs","useClickOutside","ref","callback","handler","e","useDrag","onDrag","dragging","useRef","origin","useCallback","originX","originY","move","me","x","y","ox","oy","up","MenuDropdown","items","onSelect","hov","setHov","useState","item","i","jsx","isHov","_a","_b","Menu","label","open","setOpen","o","ContextMenu","pos","setPos","show","Badge","count","Toolbar","onAction","openMenu","setOpenMenu","activeItems","setActiveItems","init","handleClick","ns","it","prev","renderItem","isActive","hasDropdown","Sidebar","width","collapsedProp","header","footer","collapsed","setCollapsed","selected","setSelected","expanded","setExpanded","w","handleSelect","depth","hasChildren","isExpanded","isSelected","child","c","LayoutCell","config","Layout","rows","cols","type","gap","cells","isRow","cell","Tabbar","views","mode","tabAlign","closable","defaultActive","onBeforeChange","onChange","active","setActive","openTabs","setOpenTabs","v","handleClose","id","t","handleChange","isVertical","visibleViews","tabBar","isDis","activeStyle","activeView","content","B","SortArrows","dir","Grid","columns","data","height","rowHeight","sortable","resizable","editable","stripe","autoWidth","keyNavigation","selection","multiselect","sortKey","setSortKey","sortDir","setSortDir","filter","setFilter","focusRow","setFocusRow","colWidths","setColWidths","editCell","setEditCell","editValue","setEditValue","edits","setEdits","containerRef","containerW","setContainerW","ro","widths","useMemo","total","a","b","extra","sorted","row","key","k","av","bv","cmp","colStats","col","f","nums","r","n","sum","selectOpts","hasFilters","hasFooter","totalW","rowKey","ri","handleSort","d","selectRow","rk","commitEdit","colId","handleKeyDown","next","startResize","ci","startX","startW","ws","nw","cs","wi","first","isSel","rowBg","isEditing","rawVal","display","stats","COLORS","buildTreemap","valueKey","nameKey","roots","root","Chart","series","scales","legend","xKey","tip","Tooltip","leg","Legend","grid","CartesianGrid","xAxis","XAxis","yAxis","YAxis","_c","_d","_e","_f","margin","_g","common","chart","BarChart","Bar","LineChart","Line","AreaChart","Area","s0","dataKey","colorField","PieChart","Pie","name","percent","Cell","radarKey","_h","RadarChart","PolarGrid","PolarAngleAxis","PolarRadiusAxis","Radar","ScatterChart","_i","_j","_k","_l","_m","_n","_o","_p","xField","yField","pts","Scatter","valKey","treeData","borderColor","borderWidth","Treemap","props","h","index","fill","ResponsiveContainer","MONTHS","DAYS","Calendar","value","range","timepicker","today","initDate","view","setView","hovDate","setHovDate","time","setTime","year","month","firstDay","daysInMonth","isToday","dv","handleDay","sel","Timepicker","timeFormat","controls","minuteStep","setH","m","setM","ampm","setAmpm","pending","setPending","hours","_","mins","newH","newM","newAmpm","val","handleCancel","colStyle","cellStyle","Chevron","Combobox","valueProp","placeholder","multiselection","query","setQuery","inputRef","filtered","removeTag","openDropdown","singleDisplayValue","selectedTags","Fragment","Slider","min","max","step","tick","setValue","update","nv","pct","arr","trackFill","trackColor","PALETTE","hexToHsl","hex","g","l","hslToHex","Colorpicker","hsl","setHsl","set","lbl","mn","mx","idx","Popup","trigger","placement","trigRef","toggle","placements","Window","title","movable","modal","defaultOpen","onClose","drag","MessageContext","createContext","ICONS","MessageProvider","messages","setMessages","remove","add","opts","api","cb","useMessage","ctx","useContext","List","template","onEdit","editing","setEditing","editVal","setEditVal","focused","setFocused","isFoc","DataView","itemsInRow","cloneTree","nodes","collectExpanded","result","removeNode","removed","newItems","insertNode","targetId","node","isAncestor","ancestorId","check","hasDesc","updateValue","childStats","checked","checkedCount","visit","Tree","checkbox","dragMode","tooltip","onCheck","setNodes","setChecked","editingId","setEditingId","dragId","setDragId","dropTarget","setDropTarget","handleCheck","updated","handleDragStart","handleDragOver","rect","dt","handleDrop","withoutDrag","dragged","handleDragEnd","renderNode","isExp","isDragging","isDrop","isChecked","isIndet","dropShadow","el","Pagination","pageSize","pageProp","page","setPage","totalPages","goTo","p","np","pages","Form","defaultValues","onSubmit","values","setValues","errors","setErrors","openPicker","setOpenPicker","collectFields","out","validate","errs","renderField","field","err","lw","inline","labelStyle","labelEl","errEl","helpEl","wrap","tv","hasVal","options","isOn","txt","Switch","renderRows","on","collectAll","Ribbon","activeMap","setActiveMap","map","si","allItems","sameGroup","renderSubItem","isLarge","renderInnerBlock","block","sub","j","renderSection","Navbar","logo","vertical","btnStyle","mi"],"mappings":"yXAOA,MAAMA,EAAS,CACb,QAAW,UACX,UAAW,UACX,UAAW,UACX,QAAW,UACX,OAAW,UACX,QAAW,UACX,GAAW,UACX,QAAW,UACX,OAAW,UACX,SAAW,UACX,KAAW,UACX,QAAW,UACX,QAAW,UACX,OAAW,4BACX,SAAW,6BACX,EAAW,MACX,IAAW,MACX,KAAW,kDACb,ECxBMC,GAAW,mBAGV,SAASC,GAAqB,CAEnC,GADI,OAAO,SAAa,KACpB,SAAS,eAAeD,EAAQ,EAAG,OACvC,MAAME,EAAI,SAAS,cAAc,OAAO,EACxCA,EAAE,GAAKF,GACPE,EAAE,YAAc;AAAA;AAAA,uBAEKC,EAAE,IAAI,yBAAyBA,EAAE,IAAI;AAAA;AAAA;AAAA,sDAGNA,EAAE,EAAE;AAAA,sDACJA,EAAE,QAAQ;AAAA,4DACJA,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uGAMkCA,EAAE,CAAC;AAAA,kDACxDA,EAAE,OAAO;AAAA,kCACzBA,EAAE,OAAO,4BAA4BA,EAAE,OAAO;AAAA,wCACxCA,EAAE,SAAS,iBAAiBA,EAAE,SAAS;AAAA,oCAC3CA,EAAE,OAAO,UAAUA,EAAE,IAAI,iBAAiBA,EAAE,MAAM;AAAA,0CAC5CA,EAAE,EAAE,iBAAiBA,EAAE,QAAQ;AAAA,kDACvBA,EAAE,OAAO;AAAA,sCACrBA,EAAE,EAAE,UAAUA,EAAE,IAAI;AAAA,iCACzBA,EAAE,MAAM,4BAA4BA,EAAE,MAAM;AAAA;AAAA;AAAA,wEAGLA,EAAE,MAAM,kBAAkBA,EAAE,CAAC,6CAA6CA,EAAE,IAAI,eAAeA,EAAE,OAAO;AAAA,oCAC5IA,EAAE,OAAO,yBAAyBA,EAAE,OAAO;AAAA,qCAC1CA,EAAE,EAAE,UAAUA,EAAE,OAAO;AAAA;AAAA,0GAE8CA,EAAE,OAAO;AAAA;AAAA,oEAE/CA,EAAE,OAAO;AAAA;AAAA,2BAElDA,EAAE,OAAO,qBAAqBA,EAAE,MAAM,kBAAkBA,EAAE,GAAG,eAAeA,EAAE,MAAM;AAAA;AAAA,oDAE3DA,EAAE,MAAM;AAAA;AAAA,kCAE1BA,EAAE,SAAS,UAAUA,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,IAKhE,SAAS,KAAK,YAAYD,CAAC,CAC7B,CClCA,MAAME,GAAuD,CAC3D,GAAI,CAAE,OAAQ,GAAI,QAAS,QAAU,SAAU,EAAA,EAC/C,GAAI,CAAA,EACJ,GAAI,CAAE,OAAQ,GAAI,QAAS,SAAU,SAAU,EAAA,CACjD,EAEO,SAASC,GAAO,CACrB,SAAAC,EAAU,QAAAC,EAAU,UAAW,KAAAC,EAAO,KACtC,KAAAC,EAAM,SAAAC,EAAU,QAAAC,EAAS,MAAAC,EAAO,UAAAC,EAAY,EAC9C,EAAgB,CACdC,OAAAA,EAAAA,UAAUb,EAAc,EAAE,EAExBc,EAAAA,KAAC,SAAA,CACC,UAAW,uBAAuBR,CAAO,IAAIM,CAAS,GACtD,MAAO,CAAE,GAAGT,GAAYI,CAAI,EAAG,GAAGI,CAAA,EAClC,SAAAF,EACA,QAAAC,EAEC,SAAA,CAAAF,SAAS,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,EAAK,EAC7CH,CAAA,CAAA,CAAA,CAGP,CCtCO,SAASU,GACdC,EACAC,EACM,CACNJ,EAAAA,UAAU,IAAM,CACd,MAAMK,EAAWC,GAAkB,CAC7BH,EAAI,SAAW,CAACA,EAAI,QAAQ,SAASG,EAAE,MAAc,GAAGF,EAASE,CAAC,CACxE,EACA,gBAAS,iBAAiB,YAAaD,CAAO,EACvC,IAAM,SAAS,oBAAoB,YAAaA,CAAO,CAChE,EAAG,CAACF,EAAKC,CAAQ,CAAC,CACpB,CCVO,SAASG,GACdC,EACmE,CACnE,MAAMC,EAAWC,EAAAA,OAAO,EAAK,EACvBC,EAAWD,EAAAA,OAAO,CAAE,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAA,CAAG,EAEpD,OAAOE,EAAAA,YACL,CAACN,EAAqBO,EAAU,EAAGC,EAAU,IAAM,CACjDL,EAAS,QAAU,GACnBE,EAAO,QAAY,CAAE,EAAGL,EAAE,QAAS,EAAGA,EAAE,QAAS,GAAIO,EAAS,GAAIC,CAAA,EAClE,MAAMC,EAAQC,GAAmB,CAC/B,GAAI,CAACP,EAAS,QAAS,OACvB,KAAM,CAAE,EAAAQ,EAAG,EAAAC,EAAG,GAAAC,EAAI,GAAAC,CAAA,EAAOT,EAAO,QAChCH,EAAOW,EAAKH,EAAG,QAAUC,EAAGG,EAAKJ,EAAG,QAAUE,CAAC,CACjD,EACMG,EAAK,IAAM,CACfZ,EAAS,QAAU,GACnB,SAAS,oBAAoB,YAAaM,CAAI,EAC9C,SAAS,oBAAoB,UAAWM,CAAE,CAC5C,EACA,SAAS,iBAAiB,YAAaN,CAAI,EAC3C,SAAS,iBAAiB,UAAWM,CAAE,EACvCf,EAAE,eAAA,CACJ,EACA,CAACE,CAAM,CAAA,CAEX,CCRO,SAASc,GAAa,CAAE,MAAAC,EAAO,SAAAC,EAAU,MAAA1B,GAA4B,CAC1E,KAAM,CAAC2B,EAAKC,CAAM,EAAIC,EAAAA,SAAwB,IAAI,EAClD,aACG,MAAA,CAAI,UAAU,oBAAoB,MAAO,CAAE,SAAU,WAAY,IAAK,mBAAoB,KAAM,EAAG,SAAU,IAAK,WAAYtC,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,EAAG,UAAWA,EAAE,SAAU,OAAQ,IAAK,QAAS,QAAS,GAAGS,GACpP,WAAM,IAAI,CAAC8B,EAAMC,IAAM,SACtB,GAAID,EAAK,OAAS,YAAa,OAAOE,EAAAA,IAAC,OAAY,MAAO,CAAE,OAAQ,EAAG,WAAYzC,EAAE,OAAQ,OAAQ,OAAA,GAArDwC,CAAgE,EAChH,MAAME,EAAQN,IAAQI,EACtB,cACG,MAAA,CAAuB,MAAO,CAAE,SAAU,YAAc,aAAc,IAAMH,EAAOG,CAAC,EAAG,aAAc,IAAMH,EAAO,IAAI,EACrH,SAAA,CAAAzB,EAAAA,KAAC,MAAA,CAAI,QAAS,IAAA,OAAM,OAAC2B,EAAK,UAAY,GAACI,EAAAJ,EAAK,QAAL,MAAAI,EAAY,SAAUR,EAASI,CAAI,GACxE,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,QAAS,WAAY,OAAQA,EAAK,SAAW,cAAgB,UAAW,SAAU,GAAI,MAAOA,EAAK,SAAWvC,EAAE,QAAUA,EAAE,KAAM,WAAY0C,GAAS,CAACH,EAAK,SAAWvC,EAAE,GAAK,cAAe,QAASuC,EAAK,SAAW,GAAK,CAAA,EAClR,SAAA,CAAAA,EAAK,MAAQE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAO,GAAI,UAAW,QAAA,EAAa,WAAK,KAAK,EACxFA,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,KAAM,GAAM,SAAAF,EAAK,OAASA,EAAK,EAAA,CAAG,EAChDA,EAAK,QAAUE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,OAAA,EAAY,WAAK,OAAO,GAC7E2C,EAAAJ,EAAK,QAAL,MAAAI,EAAY,OAASF,EAAAA,IAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,OAAA,EAAW,aAAC,EAAU,IAAA,CAAA,CAAA,EAEnF0C,KAASE,EAAAL,EAAK,QAAL,MAAAK,EAAY,QAASH,EAAAA,IAACR,GAAA,CAAa,MAAOM,EAAK,MAAO,SAAAJ,EAAoB,MAAO,CAAE,SAAU,WAAY,KAAM,OAAQ,IAAK,EAAA,EAAM,EAAK,IAAA,GARzII,EAAK,IAAMC,CASrB,CAEJ,CAAC,CAAA,CACH,CAEJ,CASO,SAASK,GAAK,CAAE,MAAAX,EAAQ,CAAA,EAAI,MAAAY,EAAQ,OAAQ,SAAAX,EAAU,MAAA1B,GAAoB,CAC/E,KAAM,CAACsC,EAAMC,CAAO,EAAIV,EAAAA,SAAS,EAAK,EAChCxB,EAAMO,EAAAA,OAAuB,IAAI,EACvCV,OAAAA,EAAAA,UAAUb,EAAc,EAAE,EAC1Be,GAAgBC,EAAKS,cAAY,IAAMyB,EAAQ,EAAK,EAAG,CAAA,CAAE,CAAC,EAExDpC,EAAAA,KAAC,MAAA,CAAI,IAAAE,EAAU,UAAU,MAAM,MAAO,CAAE,SAAU,WAAY,QAAS,eAAgB,GAAGL,GACxF,SAAA,CAAAG,EAAAA,KAAC,SAAA,CAAO,UAAU,gCAAgC,QAAS,IAAMoC,EAAQC,GAAK,CAACA,CAAC,EAC7E,SAAA,CAAAH,EAAM,IAACL,EAAAA,IAAC,QAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAM,EAAO,IAAM,GAAA,CAAI,CAAA,EAC3D,EACCA,GAAQN,EAAAA,IAACR,GAAA,CAAa,MAAAC,EAAc,SAAWK,GAAS,CAAEJ,GAAA,MAAAA,EAAWI,GAAOS,EAAQ,EAAK,CAAG,CAAA,CAAG,CAAA,EAClG,CAEJ,CAQO,SAASE,GAAY,CAAE,MAAAhB,EAAQ,CAAA,EAAI,SAAAC,EAAU,SAAAhC,GAA8B,CAChF,KAAM,CAACgD,EAAKC,CAAM,EAAId,EAAAA,SAA0C,IAAI,EAC9DxB,EAAMO,EAAAA,OAAuB,IAAI,EACvCV,EAAAA,UAAUb,EAAc,EAAE,EAC1Be,GAAgBC,EAAKS,cAAY,IAAM6B,EAAO,IAAI,EAAG,CAAA,CAAE,CAAC,EACxD,MAAMC,EAAQpC,GAAwB,CAAEA,EAAE,eAAA,EAAkBmC,EAAO,CAAE,EAAGnC,EAAE,QAAS,EAAGA,EAAE,QAAS,CAAG,EACpG,OACEL,EAAAA,KAAC,MAAA,CAAI,IAAAE,EAAU,cAAeuC,EAAM,MAAO,CAAE,SAAU,WAAY,QAAS,UAAA,EACzE,SAAA,CAAAlD,EACAgD,SACE,MAAA,CAAI,MAAO,CAAE,SAAU,QAAS,KAAMA,EAAI,EAAG,IAAKA,EAAI,EAAG,OAAQ,IAAA,EAChE,eAAClB,GAAA,CAAa,MAAAC,EAAc,SAAWK,GAAS,CAAEJ,GAAA,MAAAA,EAAWI,GAAOa,EAAO,IAAI,CAAG,EAAG,CAAA,CACvF,CAAA,EAEJ,CAEJ,CCtDA,SAASE,GAAM,CAAE,MAAAC,GAA4B,CAC3C,OACEd,EAAAA,IAAC,QAAK,MAAO,CACX,SAAU,WAAY,IAAK,EAAG,MAAO,EACrC,SAAU,GAAI,OAAQ,GACtB,WAAYzC,EAAE,OAAQ,MAAO,OAC7B,aAAc,EAAG,SAAU,GAAI,WAAY,IAC3C,QAAS,OAAQ,WAAY,SAAU,eAAgB,SACvD,QAAS,QAAS,WAAY,EAAG,cAAe,MAAA,EAE/C,SAAAuD,EACH,CAEJ,CAEO,SAASC,GAAQ,CAAE,MAAAtB,EAAQ,CAAA,EAAI,SAAAuB,EAAU,MAAAhD,GAAuB,CACrE,KAAM,CAACiD,EAAaC,CAAW,EAAOrB,EAAAA,SAAwB,IAAI,EAC5D,CAACsB,EAAaC,CAAc,EAAIvB,EAAAA,SAAkC,IAAM,CAC5E,MAAMwB,EAAgC,CAAA,EACtC,OAAA5B,EAAM,QAAQK,GAAQ,CAChBA,EAAK,KAAOA,EAAK,UAAYA,EAAK,QAAUA,EAAK,SAAQuB,EAAKvB,EAAK,EAAE,EAAI,GAC/E,CAAC,EACMuB,CACT,CAAC,EACKhD,EAAMO,EAAAA,OAAuB,IAAI,EACvCV,EAAAA,UAAUb,EAAc,EAAE,EAC1Be,GAAgBC,EAAwCS,cAAY,IAAMoC,EAAY,IAAI,EAAG,CAAA,CAAE,CAAC,EAEhG,MAAMI,EAAc,CAACxB,EAAmBC,IAAc,SACpD,GAAI,CAAAD,EAAK,SAkBT,IAfIA,EAAK,UAAYA,EAAK,IACxBsB,EAAe9D,IAAM,CAAE,GAAGA,EAAG,CAACwC,EAAK,EAAG,EAAG,CAACxC,EAAEwC,EAAK,EAAG,GAAI,EAItDA,EAAK,OAASA,EAAK,IACrBsB,EAAe9D,GAAK,CAClB,MAAMiE,EAAK,CAAE,GAAGjE,CAAA,EAChB,OAAAmC,EAAM,QAAQ+B,GAAM,CAAMA,EAAG,QAAU1B,EAAK,OAAS0B,EAAG,KAAID,EAAGC,EAAG,EAAE,EAAI,GAAO,CAAC,EAChFD,EAAGzB,EAAK,EAAG,EAAI,GACRyB,CACT,CAAC,GAICrB,EAAAJ,EAAK,QAAL,MAAAI,EAAY,OAAQ,CACtBgB,EAAYO,GAAQA,IAAS1B,EAAI,KAAOA,CAAC,EACzC,MACF,EAEAI,EAAAL,EAAK,UAAL,MAAAK,EAAA,KAAAL,EAAeA,EAAK,IAAM,IAC1BkB,GAAA,MAAAA,EAAWlB,EAAK,IAAM,IACxB,EAEM4B,EAAa,CAAC5B,EAAmBC,IAA+B,SACpE,GAAID,EAAK,OAAQ,OAAO,KAGxB,GAAIA,EAAK,OAAS,mBAChBE,EAAAA,IAAC,MAAA,CAAY,MAAO,CAAE,MAAO,EAAG,WAAYzC,EAAE,OAAQ,OAAQ,UAAW,UAAW,YAA1EwC,CAAuF,EAInG,GAAID,EAAK,OAAS,SAAU,OAAOE,EAAAA,IAAC,MAAA,CAAY,MAAO,CAAE,KAAM,CAAA,CAAE,EAApBD,CAAuB,EAGpE,GAAID,EAAK,OAAS,QAAS,cACxB,MAAA,CAAY,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAC/D,SAAA,CAAAA,EAAK,OAASE,MAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,QAAS,WAAY,GAAA,EAAQ,WAAK,MAAM,EAC7FY,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,QAAS,OAAQ,WAAY,QAAA,EAC9D,SAAA,CAAA2B,EAAK,YACH,OAAA,CAAK,MAAO,CAAE,SAAU,WAAY,KAAM,EAAG,MAAOvC,EAAE,QAAS,SAAU,GAAI,cAAe,OAAQ,OAAQ,GAC1G,WAAK,IAAA,CACR,EAEFyC,EAAAA,IAAC,QAAA,CACC,UAAU,gBACV,MAAO,CAAE,MAAOF,EAAK,OAAS,IAAK,OAAQ,GAAI,YAAaA,EAAK,KAAO,GAAK,MAAA,EAC7E,YAAaA,EAAK,YAClB,aAAcA,EAAK,MACnB,SAAUtB,GAAA,OAAK,OAAA0B,EAAAJ,EAAK,WAAL,YAAAI,EAAA,KAAAJ,EAAgBtB,EAAE,OAAO,OAAK,CAAA,CAC/C,CAAA,CACF,CAAA,CAAA,EAfQuB,CAgBV,EAIF,GAAID,EAAK,OAAS,SAAU,cACzB,MAAA,CAAY,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAC/D,SAAA,CAAAA,EAAK,OAASE,MAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,QAAS,WAAY,GAAA,EAAQ,WAAK,MAAM,EAC7FyC,EAAAA,IAAC,SAAA,CACC,UAAU,gBACV,MAAO,CAAE,MAAOF,EAAK,OAAS,IAAK,OAAQ,GAAI,OAAQ,SAAA,EACvD,aAAcA,EAAK,MACnB,SAAUtB,UAAK,OAAA0B,EAAAJ,EAAK,WAAL,YAAAI,EAAA,KAAAJ,EAAgBtB,EAAE,OAAO,QAEvC,UAAA0B,EAAAJ,EAAK,UAAL,YAAAI,EAAc,IAAIM,GAAKR,EAAAA,IAAC,SAAA,CAAqB,MAAOQ,EAAE,MAAQ,SAAAA,EAAE,KAAA,EAA5BA,EAAE,KAAgC,EAAS,CAAA,CAClF,CAAA,EATQT,CAUV,EAIF,GAAID,EAAK,OAAS,cAAe,OAC/B3B,EAAAA,KAAC,SAAA,CAEC,MAAO2B,EAAK,QACZ,SAAUA,EAAK,SACf,MAAO,CACL,SAAU,WAAY,MAAO,GAAI,OAAQ,GAAI,QAAS,EACtD,OAAQ,OAAQ,aAAc,MAAO,SAAU,SAC/C,OAAQA,EAAK,SAAW,cAAgB,UACxC,WAAY,cAAe,WAAY,CAAA,EAEzC,QAAS,IAAMwB,EAAYxB,EAAMC,CAAC,EAEjC,SAAA,CAAAD,EAAK,WAAQ,MAAA,CAAI,IAAKA,EAAK,IAAK,IAAKA,EAAK,OAAS,GAAI,MAAO,CAAE,MAAO,OAAQ,OAAQ,OAAQ,UAAW,QAAS,aAAc,OAAS,EAC1IA,EAAK,QAAU,cAAce,GAAA,CAAM,MAAOf,EAAK,KAAA,CAAO,CAAA,CAAA,EAZlDC,CAAA,EAiBT,MAAM4B,EAAa,CAAC,EAAE7B,EAAK,IAAMqB,EAAYrB,EAAK,EAAE,GAC9CO,EAAaP,EAAK,OAASA,EAAK,KAChC8B,EAAc,CAAC,GAAEzB,EAAAL,EAAK,QAAL,MAAAK,EAAY,QAEnC,cACG,MAAA,CAAY,MAAO,CAAE,SAAU,YAC9B,SAAA,CAAAhC,EAAAA,KAAC,SAAA,CACC,UAAU,4BACV,MAAO2B,EAAK,QACZ,SAAUA,EAAK,SACf,MAAO,CACL,OAAQ,GAAI,IAAK,EACjB,SAAU,WACV,WAAY6B,EAAWpE,EAAE,UAAY,cACrC,MAAOoE,EAAWpE,EAAE,QAAUuC,EAAK,SAAWvC,EAAE,QAAUA,EAAE,KAC5D,QAASuC,EAAK,SAAW,IAAO,EAChC,OAAQA,EAAK,SAAW,cAAgB,SAAA,EAE1C,QAAS,IAAMwB,EAAYxB,EAAMC,CAAC,EAEjC,SAAA,CAAAD,EAAK,YAAS,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,EAAK,IAAA,CAAK,EACvDO,SAAU,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,EAAM,EAC/CuB,GAAe5B,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,EAAG,QAAS,IAAM,WAAY,CAAA,EAAK,SAAA,GAAA,CAAC,EAC5EF,EAAK,QAAU,cAAce,GAAA,CAAM,MAAOf,EAAK,KAAA,CAAO,CAAA,CAAA,CAAA,EAGxD8B,GAAeX,IAAalB,GAC3BC,EAAAA,IAACR,GAAA,CACC,MAAOM,EAAK,MACZ,SAAU,IAAMoB,EAAY,IAAI,EAChC,MAAO,CAAE,IAAK,OAAQ,KAAM,CAAA,CAAE,CAAA,CAChC,CAAA,EA1BMnB,CA4BV,CAEJ,EAEA,OACEC,EAAAA,IAAC,MAAA,CACC,IAAA3B,EACA,UAAU,MACV,MAAO,CACL,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,QAAS,UAAW,WAAYd,EAAE,QAClC,aAAc,aAAaA,EAAE,MAAM,GACnC,UAAW,GAAI,SAAU,OACzB,GAAGS,CAAA,EAGJ,SAAAyB,EAAM,IAAIiC,CAAU,CAAA,CAAA,CAG3B,CC1LO,SAASG,GAAQ,CAAE,MAAApC,EAAQ,CAAA,EAAI,MAAAqC,EAAQ,IAAK,UAAWC,EAAe,SAAArC,EAAU,OAAAsC,EAAQ,OAAAC,EAAQ,MAAAjE,GAAuB,CAC5H,KAAM,CAACkE,EAAWC,CAAY,EAAItC,EAAAA,SAASkC,GAAiB,EAAK,EAC3D,CAACK,EAAWC,CAAW,EAAKxC,EAAAA,SAAwB,IAAI,EACxD,CAACyC,EAAWC,CAAW,EAAK1C,EAAAA,SAAkC,CAAA,CAAE,EACtE3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAMmF,EAAIN,EAAY,GAAKJ,EACrBW,EAAgB3C,GAAsB,CAAEuC,EAAYvC,EAAK,EAAE,EAAGJ,GAAA,MAAAA,EAAWI,EAAO,EAEhF4B,EAAa,CAAC5B,EAAmB4C,EAAQ,IAAuB,OACpE,GAAI5C,EAAK,OAAS,YAAa,OAAOE,EAAAA,IAAC,OAAkB,MAAO,CAAE,OAAQ,EAAG,WAAYzC,EAAE,OAAQ,OAAQ,UAAU,EAArEuC,EAAK,EAAmE,EACxH,GAAIA,EAAK,OAAS,oBAAqBE,EAAAA,IAAC,MAAA,CAAkB,MAAO,CAAE,QAAS,YAAc,wBAAyB,CAAE,OAAQF,EAAK,MAAQ,EAAA,CAAG,EAA5FA,EAAK,EAA0F,EAChJ,MAAM6C,KAAezC,EAAAJ,EAAK,QAAL,YAAAI,EAAY,SAAU,GAAK,EAC1C0C,EAAcN,EAASxC,EAAK,EAAE,EAC9B+C,EAAcT,IAAatC,EAAK,GACtC,cACG,MAAA,CACC,SAAA,CAAA3B,EAAAA,KAAC,MAAA,CAAI,QAAS,IAAM,CAAMwE,GAAaJ,EAAYpD,IAAM,CAAE,GAAGA,EAAG,CAACW,EAAK,EAAE,EAAG,CAACX,EAAEW,EAAK,EAAE,GAAI,EAAG2C,EAAa3C,CAAI,CAAG,EAC/G,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,QAAS,OAAOoC,EAAY,MAAQ,GAAG,GAAKQ,EAAQ,EAAE,IAAI,GAAI,OAAQ,UAAW,aAAcnF,EAAE,EAAG,OAAQ,UAAW,eAAgB2E,EAAY,SAAW,aAAc,WAAY,WAAY,WAAYW,EAAatF,EAAE,UAAY,cAAe,MAAOsF,EAAatF,EAAE,QAAUA,EAAE,KAAM,WAAY,MAAA,EACvW,gBAAmB,CAACsF,IAAerE,EAAE,cAAc,MAAM,WAAajB,EAAE,IACxE,aAAciB,GAAK,CAACqE,IAAerE,EAAE,cAAc,MAAM,WAAa,eACrE,SAAA,CAAAsB,EAAK,MAAQE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,SAAU,GAAI,UAAW,QAAA,EAAa,WAAK,KAAK,EAC1F,CAACkC,GAAalC,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,KAAM,EAAG,SAAU,GAAI,WAAY6C,EAAa,IAAM,GAAA,EAAQ,WAAK,MAAM,EACtG,CAACX,GAAapC,EAAK,QAAU,cAAc,OAAA,CAAK,MAAO,CAAE,WAAYvC,EAAE,QAAS,MAAO,OAAQ,aAAc,GAAI,QAAS,UAAW,SAAU,GAAI,WAAY,GAAA,EAAQ,SAAAuC,EAAK,KAAA,CAAM,EAClL,CAACoC,GAAaS,SAAgB,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOpF,EAAE,QAAS,WAAY,iBAAkB,UAAWqF,EAAa,gBAAkB,cAAA,EAAkB,SAAA,GAAA,CAAC,CAAA,CAAA,CAAA,EAEzKD,GAAeC,GAAc,CAACV,GAAapC,EAAK,MAAO,IAAIgD,GAASpB,EAAWoB,EAAOJ,EAAQ,CAAC,CAAC,CAAA,CAAA,EAVzF5C,EAAK,EAWf,CAEJ,EAEA,OACE3B,EAAAA,KAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,MAAOqE,EAAG,SAAUA,EAAG,WAAYjF,EAAE,QAAS,YAAa,aAAaA,EAAE,MAAM,GAAI,QAAS,OAAQ,cAAe,SAAU,WAAY,iBAAkB,SAAU,SAAU,GAAGS,CAAA,EAC9M,SAAA,CAAAgE,GAAU,CAACE,GAAalC,EAAAA,IAAC,OAAI,MAAO,CAAE,QAAS,YAAa,aAAc,aAAazC,EAAE,MAAM,GAAI,WAAY,IAAK,SAAU,EAAA,EAAO,SAAAyE,EAAO,EAC7IhC,EAAAA,IAAC,UAAO,QAAS,IAAMmC,EAAaY,GAAK,CAACA,CAAC,EAAG,MAAO,CAAE,OAAQ,UAAW,WAAY,cAAe,OAAQ,OAAQ,OAAQ,UAAW,QAAS,OAAQ,WAAY,SAAU,eAAgBb,EAAY,SAAW,WAAY,QAAS,UAAW,aAAc3E,EAAE,EAAG,MAAOA,EAAE,OAAA,EAChR,SAAAyC,MAAC,OAAA,CAAK,MAAO,CAAE,SAAU,IAAO,SAAAkC,EAAY,IAAM,GAAA,CAAI,CAAA,CACxD,QACC,MAAA,CAAI,UAAU,aAAa,MAAO,CAAE,KAAM,EAAG,UAAW,OAAQ,UAAW,QAAA,EAAa,SAAAzC,EAAM,OAAYiC,EAAW5B,CAAI,CAAC,EAAE,EAC5HmC,GAAU,CAACC,GAAalC,EAAAA,IAAC,OAAI,MAAO,CAAE,QAAS,YAAa,UAAW,aAAazC,EAAE,MAAM,EAAA,EAAO,SAAA0E,CAAA,CAAO,CAAA,EAC7G,CAEJ,CCxCA,SAASe,GAAW,CAAE,OAAAC,GAAwC,CAC5D,KAAM,CAACf,EAAWC,CAAY,EAAItC,EAAAA,SAAS,EAAK,EAC1C7B,EAA6B,CACjC,SAAU,WAAY,WAAYT,EAAE,QACpC,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,EAAG,SAAU,SAC9D,GAAI0F,EAAO,MAAQ,CAAE,MAAOA,EAAO,MAAO,SAAUA,EAAO,KAAA,EAAU,CAAE,KAAM,CAAA,EAC7E,GAAIA,EAAO,OAAS,CAAE,OAAQA,EAAO,OAAQ,UAAWA,EAAO,MAAA,EAAW,CAAE,UAAW,EAAA,EACvF,GAAIf,EAAY,CAAE,KAAM,YAAe,CAAA,CAAC,EAE1C,OACE/D,OAAC,OAAI,MAAAH,EACF,SAAA,CAAAiF,EAAO,QACN9E,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,QAAS,WAAY,WAAYZ,EAAE,GAAI,aAAc,aAAaA,EAAE,MAAM,GAAI,SAAU,GAAI,WAAY,IAAK,MAAOA,EAAE,QAAS,WAAY,QAC/N,SAAA,CAAAyC,EAAAA,IAAC,OAAA,CAAM,WAAO,MAAA,CAAO,EACpBiD,EAAO,aAAejD,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMmC,EAAaY,GAAK,CAACA,CAAC,EAAG,MAAO,CAAE,WAAY,OAAQ,OAAQ,OAAQ,OAAQ,UAAW,MAAOxF,EAAE,QAAS,SAAU,GAAI,WAAY,CAAA,EAAM,SAAA2E,EAAY,IAAM,GAAA,CAAI,CAAA,EAC/M,EAED,CAACA,GACA/D,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS8E,EAAO,SAAW,EAAG,OAAQA,EAAO,OAAS,oBAAsB,OAAQ,SAAU,QACzG,SAAA,CAAAA,EAAO,KAAOjD,MAAC,MAAA,CAAI,wBAAyB,CAAE,OAAQiD,EAAO,IAAA,EAAQ,EAAKA,EAAO,SAChFA,EAAO,MAAQA,EAAO,OAASjD,EAAAA,IAACkD,IAAO,KAAMD,EAAO,KAAM,KAAMA,EAAO,KAAM,MAAO,CAAE,OAAQ,OAAO,CAAG,CAAA,CAAA,CAC5G,CAAA,EAEJ,CAEJ,CAEO,SAASC,GAAO,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,EAAO,OAAQ,MAAArF,EAAO,SAAAN,GAAyB,CAClFQ,EAAAA,UAAUb,EAAc,EAAE,EAC1B,MAAMiG,EAAQD,IAAS,QAAU,GAAKA,IAAS,OAAS,EAAI,EACtDE,EAAQJ,GAAQC,EAChBI,EAAQ,CAAC,CAACL,EAChB,OAAKI,EAEHvD,EAAAA,IAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,QAAS,OAAQ,cAAewD,EAAQ,SAAW,MAAO,IAAAF,EAAK,MAAO,OAAQ,OAAQ,OAAQ,GAAGtF,CAAA,EAC5H,SAAAuF,EAAM,IAAI,CAACE,EAAM1D,IAAMC,EAAAA,IAACgD,GAAA,CAA8B,OAAQS,GAAtBA,EAAK,IAAM1D,CAAiB,CAAE,EACzE,EAJiBC,EAAAA,IAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,MAAO,OAAQ,OAAQ,OAAQ,GAAGhC,CAAA,EAAU,SAAAN,EAAS,CAMxG,CCvCO,SAASgG,GAAO,CAAE,MAAAC,EAAQ,CAAA,EAAI,KAAAC,EAAO,MAAO,SAAAC,EAAW,OAAQ,SAAAC,EAAW,CAAA,EAAI,SAAAhG,EAAW,GAAI,cAAAiG,EAAe,eAAAC,EAAgB,SAAAC,EAAU,MAAAjG,GAAsB,OACjK,KAAM,CAACkG,EAAWC,CAAS,EAAOtE,EAAAA,SAASkE,KAAiB7D,EAAAyD,EAAM,CAAC,IAAP,YAAAzD,EAAU,GAAE,EAClE,CAACkE,EAAWC,CAAW,EAAKxE,WAAS8D,EAAM,IAAIW,GAAKA,EAAE,EAAE,CAAC,EAC/DpG,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAMkH,EAAc,CAAC/F,EAAqBgG,IAAe,CACvDhG,EAAE,gBAAA,EACF6F,KAAiBI,EAAE,OAAOtF,GAAKA,IAAMqF,CAAE,CAAC,EACpCN,IAAWM,GAAIL,EAAUC,EAAS,KAAKK,GAAKA,IAAMD,CAAE,GAAK,EAAE,CACjE,EACME,EAAgBF,GAAe,CAC/B1G,EAAS,SAAS0G,CAAE,GACpBR,GAAkBA,EAAeQ,CAAE,IAAM,KAC7CL,EAAUK,CAAE,EAAGP,GAAA,MAAAA,EAAWO,GAC5B,EAEMG,EAAef,IAAS,QAAUA,IAAS,QAC3CgB,EAAejB,EAAM,OAAOW,GAAKF,EAAS,SAASE,EAAE,EAAE,CAAC,EAExDO,EACJ7E,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,cAAe2E,EAAa,SAAW,MAAO,eAAgBd,IAAa,SAAW,SAAWA,IAAa,QAAU,WAAa,aAAc,WAAYtG,EAAE,QAAS,aAAc,CAACoH,GAAcf,IAAS,SAAW,aAAarG,EAAE,MAAM,GAAK,OAAQ,UAAWqG,IAAS,SAAW,aAAarG,EAAE,MAAM,GAAK,OAAQ,YAAaqG,IAAS,OAAS,aAAarG,EAAE,MAAM,GAAK,OAAQ,WAAYqG,IAAS,QAAU,aAAarG,EAAE,MAAM,GAAK,OAAQ,UAAW,OAAQ,WAAY,GAC3f,SAAAqH,EAAa,IAAIN,GAAK,CACrB,MAAM3C,EAAWuC,IAAWI,EAAE,GACxBQ,EAAWhH,EAAS,SAASwG,EAAE,EAAE,EACjCS,EAAmCnB,IAAS,SAC9C,CAAE,UAAW,aAAarG,EAAE,OAAO,GAAI,MAAOA,EAAE,QAAS,WAAY,KACrEoH,EACA,CAAE,MAAOpH,EAAE,QAAS,WAAY,IAAK,WAAYA,EAAE,UAAW,CAACqG,IAAS,OAAS,cAAgB,YAAY,EAAG,aAAarG,EAAE,OAAO,EAAA,EACtI,CAAE,aAAc,aAAaA,EAAE,OAAO,GAAI,MAAOA,EAAE,QAAS,WAAY,GAAA,EAC5E,OACEY,EAAAA,KAAC,MAAA,CAAe,QAAS,IAAMuG,EAAaJ,EAAE,EAAE,EAC9C,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,QAAS,YAAa,OAAQQ,EAAQ,cAAgB,UAAW,WAAY,SAAU,SAAU,GAAI,WAAY,aAAc,WAAY,OAAQ,SAAUH,EAAa,IAAM,OAAQ,GAAIhD,EAAWoD,EAAc,CAAE,MAAOD,EAAQvH,EAAE,QAAUA,EAAE,QAAQ,EACnT,SAAA,CAAA+G,EAAE,YAAS,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,EAAE,IAAA,CAAK,EAClDtE,EAAAA,IAAC,OAAA,CAAM,SAAAsE,EAAE,GAAA,CAAI,EACZR,EAAS,SAASQ,EAAE,EAAE,SAAM,OAAA,CAAK,QAAS9F,GAAK+F,EAAY/F,EAAG8F,EAAE,EAAE,EAAG,MAAO,CAAE,WAAY,EAAG,QAAS,GAAI,SAAU,GAAI,OAAQ,WAAa,SAAA,GAAA,CAAC,CAAA,CAAA,EAJvIA,EAAE,EAAA,CAOhB,CAAC,CAAA,CACH,EAGIU,EAAaJ,EAAa,KAAKN,GAAKA,EAAE,KAAOJ,CAAM,EACnDe,EACJ9G,EAAAA,KAAC,MAAA,CAAI,UAAU,aAAa,MAAO,CAAE,KAAM,EAAG,SAAU,MAAA,EACrD,SAAA,CAAA6G,GAAA,YAAAA,EAAY,SACZA,GAAA,YAAAA,EAAY,OAAQhF,EAAAA,IAAC,MAAA,CAAI,wBAAyB,CAAE,OAAQgF,EAAW,IAAA,EAAQ,MAAO,CAAE,QAAS,GAAG,CAAG,CAAA,EAC1G,EAGF,cACG,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,QAAS,OAAQ,cAAepB,IAAS,MAAQ,SAAWA,IAAS,SAAW,iBAAmBA,IAAS,OAAS,MAAQ,cAAe,MAAO,OAAQ,OAAQ,OAAQ,WAAYrG,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,EAAG,SAAU,SAAU,GAAGS,GACxS,SAAA,CAAA6G,EACAI,CAAA,EACH,CAEJ,CCrCA,MAAMC,GAAI,aAAa3H,EAAE,MAAM,GAE/B,SAAS4H,GAAW,CAAE,OAAAjB,EAAQ,IAAAkB,GAAiD,CAC7E,OACEjH,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,QAAS,cAAe,cAAe,SAAU,IAAK,EAAG,WAAY,EAAG,WAAY,GACjG,SAAA,CAAA6B,EAAAA,IAAC,OAAI,MAAM,IAAI,OAAO,IAAI,QAAQ,UAChC,SAAAA,EAAAA,IAAC,OAAA,CAAK,EAAE,gBAAgB,KAAMkE,GAAUkB,IAAQ,MAAQ7H,EAAE,QAAUA,EAAE,SAAU,CAAA,CAClF,EACAyC,EAAAA,IAAC,OAAI,MAAM,IAAI,OAAO,IAAI,QAAQ,UAChC,SAAAA,MAAC,OAAA,CAAK,EAAE,gBAAgB,KAAMkE,GAAUkB,IAAQ,OAAS7H,EAAE,QAAUA,EAAE,SAAU,CAAA,CACnF,CAAA,EACF,CAEJ,CAEO,SAAS8H,GAAK,CACnB,QAAAC,EAAS,KAAAC,EAAO,CAAA,EAAI,OAAAC,EAAS,IAAK,UAAAC,EAAY,GAC9C,SAAAC,EAAW,GAAM,UAAAC,EAAY,GAAM,SAAAC,EAAW,GAC9C,OAAAC,EAAS,GAAO,UAAAC,EAAY,GAAO,cAAAC,EAAgB,GACnD,UAAAC,EAAW,YAAAC,EAAa,SAAAvG,EAAU,SAAAuE,EAAU,MAAAjG,CAC9C,EAAc,CACZ,KAAM,CAACkI,EAAYC,CAAU,EAAMtG,EAAAA,SAAwB,IAAI,EACzD,CAACuG,EAAYC,CAAU,EAAMxG,EAAAA,SAAyB,KAAK,EAC3D,CAACyG,EAAYC,CAAS,EAAO1G,EAAAA,SAAiC,CAAA,CAAE,EAChE,CAACuC,EAAYC,CAAW,EAAKxC,EAAAA,SAA+B,IAAI,GAAK,EACrE,CAAC2G,EAAYC,CAAW,EAAK5G,EAAAA,SAAS,EAAE,EACxC,CAAC6G,EAAYC,CAAY,EAAI9G,EAAAA,SAAS,IAAMyF,EAAQ,IAAIvC,GAAKA,EAAE,OAASA,EAAE,UAAY,GAAG,CAAC,EAC1F,CAAC6D,EAAYC,CAAW,EAAKhH,EAAAA,SAAyD,IAAI,EAC1F,CAACiH,EAAYC,CAAY,EAAIlH,EAAAA,SAAS,EAAE,EACxC,CAACmH,EAAYC,CAAQ,EAAQpH,EAAAA,SAAkD,CAAA,CAAE,EACjFqH,EAAetI,EAAAA,OAAuB,IAAI,EAC1C,CAACuI,EAAYC,CAAa,EAAIvH,EAAAA,SAAS,CAAC,EAC9C3B,EAAAA,UAAUb,EAAc,EAAE,EAG1Ba,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC4H,GAAa,CAACoB,EAAa,QAAS,OACzC,MAAMG,EAAK,IAAI,eAAe,IAAA,OAAM,OAAAD,IAAclH,EAAAgH,EAAa,UAAb,YAAAhH,EAAsB,cAAe,CAAC,EAAC,EACzF,OAAAmH,EAAG,QAAQH,EAAa,OAAO,EACxB,IAAMG,EAAG,WAAA,CAClB,EAAG,CAACvB,CAAS,CAAC,EAGd,MAAMwB,EAASC,EAAAA,QAAQ,IAAM,CAC3B,GAAI,CAACzB,GAAaqB,IAAe,EAAG,OAAOT,EAC3C,MAAMc,EAAQd,EAAU,OAAO,CAACe,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EACjD,GAAIP,GAAcK,EAAO,OAAOd,EAChC,MAAMiB,GAASR,EAAaK,GAASlC,EAAQ,OAC7C,OAAOoB,EAAU,IAAIlE,GAAKA,EAAImF,CAAK,CACrC,EAAG,CAAC7B,EAAWqB,EAAYT,EAAWpB,EAAQ,MAAM,CAAC,EAG/CsC,EAASL,EAAAA,QAAQ,IAAM,CAC3B,IAAIpE,EAAOoC,EACR,IAAI,CAACsC,EAAK9H,IAAM,CACf,MAAM+H,EAAM,OAAQD,EAAI,IAA0B9H,CAAC,EACnD,OAAOiH,EAAMc,CAAG,EAAI,CAAE,GAAGD,EAAK,GAAGb,EAAMc,CAAG,CAAA,EAAMD,CAClD,CAAC,EACA,OAAOA,GACN,OAAO,QAAQvB,CAAM,EAAE,MAAM,CAAC,CAACyB,EAAGzD,CAAC,IAAM,CAACA,GAAK,OAAOuD,EAAIE,CAAC,GAAK,EAAE,EAAE,YAAA,EAAc,SAASzD,EAAE,aAAa,CAAC,CAAA,EAE/G,OAAI4B,IACF/C,EAAO,CAAC,GAAGA,CAAI,EAAE,KAAK,CAACsE,EAAGC,IAAM,CAC9B,MAAMM,EAAKP,EAAEvB,CAAO,EAAG+B,EAAKP,EAAExB,CAAO,EACrC,GAAI8B,GAAM,KAAM,MAAO,GACvB,GAAIC,GAAM,KAAM,MAAO,GACvB,MAAMC,EAAMF,EAAKC,EAAK,GAAKD,EAAKC,EAAK,EAAI,EACzC,OAAO7B,IAAY,MAAQ8B,EAAM,CAACA,CACpC,CAAC,GAEI/E,CACT,EAAG,CAACoC,EAAMW,EAASE,EAASE,EAAQU,CAAK,CAAC,EAGpCmB,EAAWZ,EAAAA,QAAQ,IAAM,CAC7B,MAAMjK,EAA2F,CAAA,EACjG,OAAAgI,EAAQ,QAAQ8C,GAAO,OACrB,IAAIlI,EAAAkI,EAAI,SAAJ,MAAAlI,EAAY,KAAKmI,GAAKA,EAAE,SAAU,CACpC,MAAMC,EAAOV,EAAO,IAAIW,GAAK,OAAOA,EAAEH,EAAI,EAAE,CAAC,CAAC,EAAE,OAAOI,GAAK,CAAC,MAAMA,CAAC,CAAC,EAC/DC,EAAMH,EAAK,OAAO,CAACb,EAAGC,KAAMD,EAAIC,GAAG,CAAC,EAC1CpK,EAAE8K,EAAI,EAAE,EAAI,CAAE,IAAAK,EAAK,IAAKH,EAAK,OAASG,EAAMH,EAAK,OAAS,EAAG,MAAOV,EAAO,OAAQ,IAAKU,EAAK,OAAS,KAAK,IAAI,GAAGA,CAAI,EAAI,EAAG,IAAKA,EAAK,OAAS,KAAK,IAAI,GAAGA,CAAI,EAAI,CAAA,CACtK,CACF,CAAC,EACMhL,CACT,EAAG,CAACsK,EAAQtC,CAAO,CAAC,EAGdoD,EAAanB,EAAAA,QAAQ,IAAM,CAC/B,MAAM/G,EAA8B,CAAA,EACpC,OAAA8E,EAAQ,OAAOvC,GAAKA,EAAE,aAAe,QAAQ,EAAE,QAAQqF,GAAO,CAC5D5H,EAAE4H,EAAI,EAAE,EAAI,CAAC,GAAG,IAAI,IAAI7C,EAAK,IAAIgD,GAAK,OAAOA,EAAEH,EAAI,EAAE,GAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAA,CACnE,CAAC,EACM5H,CACT,EAAG,CAAC+E,EAAMD,CAAO,CAAC,EAEZqD,GAAarD,EAAQ,KAAKvC,GAAKA,EAAE,UAAU,EAC3C6F,GAAatD,EAAQ,KAAKvC,UAAK,OAAA7C,EAAA6C,EAAE,SAAF,YAAA7C,EAAU,OAAM,EAC/C2I,GAAavB,EAAO,OAAO,CAACG,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EAE7CoB,GAAS,CAACjB,EAA8BkB,IAC3ClB,EAAI,IAA0BkB,EAG3BC,GAAcZ,GAAoB,CAClC,CAAC1C,GAAY0C,EAAI,WAAa,KAClC/B,EAAW4C,GAAK/C,IAAYkC,EAAI,IAAMa,IAAM,MAAQ,OAAkB,KAAK,EAC3E9C,EAAWiC,EAAI,EAAE,EACnB,EAGMc,EAAY,CAACrB,EAA8BkB,IAAe,CAC9D,GAAI,CAAC/C,EAAW,OAChB,MAAMmD,EAAKL,GAAOjB,EAAKkB,CAAE,EACzBtC,EAAYsC,CAAE,EACd1G,EAAY/E,GAAK,CACf,MAAMiE,EAAK0E,EAAc,IAAI,IAAI3I,CAAC,MAAQ,IAC1C,OAAAiE,EAAG,IAAI4H,CAAE,EAAI5H,EAAG,OAAO4H,CAAE,EAAI5H,EAAG,IAAI4H,CAAE,EAC/B5H,CACT,CAAC,EACD7B,GAAA,MAAAA,EAAWmI,EACb,EAGMuB,GAAa,IAAM,CACvB,GAAI,CAACxC,EAAU,OACf,KAAM,CAAE,IAAAkB,EAAK,MAAAuB,CAAA,EAAUzC,EACvBK,EAASzI,IAAM,CAAE,GAAGA,EAAG,CAAC,OAAOsJ,CAAG,CAAC,EAAG,CAAE,GAAItJ,EAAE,OAAOsJ,CAAG,CAAC,GAAK,CAAA,EAAK,CAACuB,CAAK,EAAGvC,CAAA,CAAU,EAAI,EAC1F,MAAMe,EAAMD,EAAO,KAAK,CAACW,EAAGxI,IAAM+I,GAAOP,EAAGxI,CAAC,IAAM+H,CAAG,EAClDD,IAAK5D,GAAA,MAAAA,EAAW4D,EAAKwB,EAAOvC,IAChCD,EAAY,IAAI,CAClB,EAGMyC,GAAiB9K,GAA2B,CAChD,GAAIoI,GAAYpI,EAAE,MAAQ,SAAU,CAAEqI,EAAY,IAAI,EAAG,MAAQ,CACjE,GAAI,GAACd,GAAiB,CAACC,IACvB,GAAIxH,EAAE,MAAQ,YAAa,CACzBA,EAAE,eAAA,EACF,MAAM+K,EAAO,KAAK,IAAI/C,EAAW,EAAGoB,EAAO,OAAS,CAAC,EACjD2B,GAAQ,GAAKL,EAAUtB,EAAO2B,CAAI,EAAGA,CAAI,CAC/C,SAAW/K,EAAE,MAAQ,UAAW,CAC9BA,EAAE,eAAA,EACF,MAAMiD,EAAO,KAAK,IAAI+E,EAAW,EAAG,CAAC,EACjC/E,GAAQ,GAAKyH,EAAUtB,EAAOnG,CAAI,EAAGA,CAAI,CAC/C,EACF,EAGM+H,GAAc,CAAChL,EAAqBiL,IAAe,CACvDjL,EAAE,eAAA,EACFA,EAAE,gBAAA,EACF,MAAMkL,EAASlL,EAAE,QAASmL,EAASjD,EAAU+C,CAAE,EACzCxK,EAAQC,IAAmByH,EAAaiD,IAAM,CAClD,MAAMC,GAAK,CAAC,GAAGD,EAAE,EACjB,OAAAC,GAAGJ,CAAE,EAAI,KAAK,IAAInE,EAAQmE,CAAE,EAAE,UAAY,GAAIE,EAASzK,GAAG,QAAUwK,CAAM,EACnEG,EACT,CAAC,EACKtK,EAAK,IAAM,CAAE,SAAS,oBAAoB,YAAaN,CAAI,EAAG,SAAS,oBAAoB,UAAWM,CAAE,CAAG,EACjH,SAAS,iBAAiB,YAAaN,CAAI,EAC3C,SAAS,iBAAiB,UAAWM,CAAE,CACzC,EAGMuK,GAAK,CAACC,EAAY3B,EAAiB4B,EAAgBxE,KAAyC,CAChG,MAAOuE,EAAI,SAAUA,EAAI,WAAY,EAAG,UAAW,aACnD,QAAS,SAAU,OAAAvE,EAAQ,QAAS,OAAQ,WAAY,SACxD,SAAU,SAAU,aAAc,WAAY,WAAY,SAC1D,SAAU,GAAI,UAAW4C,EAAI,MAC7B,eAAgBA,EAAI,QAAU,SAAW,SAAWA,EAAI,QAAU,QAAU,WAAa,aACzF,WAAY4B,EAAQ,OAAS9E,EAAA,GAG/B,OACElF,EAAAA,IAAC,MAAA,CACC,IAAKkH,EACL,UAAU,MACV,SAAUnB,EAAgB,EAAI,OAC9B,UAAWuD,GACX,MAAO,CAAE,MAAO,OAAQ,OAAA9D,EAAQ,QAAS,OAAQ,cAAe,SAAU,OAAQN,GAAG,aAAc3H,EAAE,EAAG,SAAU,SAAU,QAAS,OAAQ,GAAGS,CAAA,EAEhJ,SAAAgC,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,UAAW,OAAQ,KAAM,EAAG,QAAS,OAAQ,cAAe,SAAU,UAAW,CAAA,EAC7F,SAAA7B,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,SAAU0K,GAAQ,QAAS,OAAQ,cAAe,SAAU,OAAQ,MAAA,EAGhF,SAAA,CAAA7I,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAYzC,EAAE,GAAI,aAAc2H,GAAG,WAAY,EAAG,SAAU,SAAU,IAAK,EAAG,OAAQ,CAAA,EAClH,SAAAI,EAAQ,IAAI,CAAC8C,EAAKrI,IAAA,OACjB5B,OAAAA,EAAAA,KAAC,MAAA,CACC,QAAS,IAAM6K,GAAWZ,CAAG,EAC7B,MAAO,CACL,GAAG0B,GAAGxC,EAAOvH,CAAC,EAAGqI,EAAKrI,IAAM,EAAG,EAAE,EACjC,SAAU,WACV,WAAY,IAAK,MAAOxC,EAAE,KAC1B,OAAQmI,GAAY0C,EAAI,WAAa,GAAQ,UAAY,UACzD,WAAY,MAAA,EAEd,SAAA,CAAApI,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,KAAM,EAAG,SAAU,SAAU,aAAc,WAAY,WAAY,QAAA,EAC/E,eAAM,QAAQoI,EAAI,MAAM,GAAIlI,EAAAkI,EAAI,OAAO,CAAC,IAAZ,YAAAlI,EAAe,KAAQkI,EAAI,QAAUA,EAAI,EAAA,CACxE,EACC1C,GAAY0C,EAAI,WAAa,IAC5BpI,EAAAA,IAACmF,GAAA,CAAW,OAAQe,IAAYkC,EAAI,GAAI,IAAKhC,CAAA,CAAS,EAEvDT,GAAayC,EAAI,YAAc,IAASrI,EAAIuF,EAAQ,OAAS,GAC5DtF,EAAAA,IAAC,MAAA,CACC,YAAaxB,GAAKgL,GAAYhL,EAAGuB,CAAC,EAClC,QAASvB,GAAKA,EAAE,gBAAA,EAChB,MAAO,CAAE,SAAU,WAAY,MAAO,EAAG,IAAK,EAAG,OAAQ,EAAG,MAAO,EAAG,OAAQ,aAAc,OAAQ,CAAA,EACpG,aAAcA,GAAMA,EAAE,cAAc,MAAM,WAAajB,EAAE,QAAU,KACnE,aAAciB,GAAMA,EAAE,cAAc,MAAM,WAAa,aAAA,CAAA,CAAgB,CAAA,EArBnE4J,EAAI,EAAA,EAwBf,EACH,EAGCO,UACE,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,aAAczD,GAAG,WAAY3H,EAAE,QAAS,WAAY,CAAA,EAChF,SAAA+H,EAAQ,IAAI,CAAC8C,EAAKrI,IACjBC,EAAAA,IAAC,MAAA,CAAiB,MAAO,CAAE,MAAOsH,EAAOvH,CAAC,EAAG,SAAUuH,EAAOvH,CAAC,EAAG,WAAY,EAAG,QAAS,UAAW,UAAW,aAAc,WAAYA,IAAM,EAAI,OAASmF,EAAA,EAC1J,SAAAkD,EAAI,YAAcA,EAAI,aAAe,SACpCjK,EAAAA,KAAC,SAAA,CAAO,UAAU,gBAAgB,MAAO,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,OAAA,EAC5E,MAAOmI,EAAO8B,EAAI,EAAE,GAAK,GACzB,SAAU5J,GAAK+H,EAAU8B,IAAM,CAAE,GAAGA,EAAG,CAACD,EAAI,EAAE,EAAG5J,EAAE,OAAO,OAAQ,EAClE,SAAA,CAAAwB,EAAAA,IAAC,SAAA,CAAO,MAAM,GAAG,SAAA,MAAG,GAClB0I,EAAWN,EAAI,EAAE,GAAK,CAAA,GAAI,IAAI9D,GAAKtE,EAAAA,IAAC,SAAA,CAAe,MAAOsE,EAAI,SAAAA,CAAA,EAAdA,CAAgB,CAAS,CAAA,CAAA,CAAA,EAE3E8D,EAAI,WACNpI,EAAAA,IAAC,QAAA,CAAM,UAAU,gBAAgB,MAAO,CAAE,OAAQ,GAAI,SAAU,EAAA,EAC9D,YAAY,YACZ,MAAOsG,EAAO8B,EAAI,EAAE,GAAK,GACzB,SAAU5J,GAAK+H,EAAU8B,IAAM,CAAE,GAAGA,EAAG,CAACD,EAAI,EAAE,EAAG5J,EAAE,OAAO,OAAQ,CAAA,CAAA,EAClE,IAAA,EAbI4J,EAAI,EAcd,CACD,CAAA,CACH,EAIFjK,EAAAA,KAAC,MAAA,CAAI,UAAU,aAAa,MAAO,CAAE,KAAM,EAAG,UAAW,OAAQ,UAAW,CAAA,EACzE,SAAA,CAAAyJ,EAAO,IAAI,CAACC,EAAKkB,IAAO,CACvB,MAAMI,EAAKL,GAAOjB,EAAKkB,CAAE,EACnBkB,EAAQ7H,EAAS,IAAI+G,CAAE,EACvBe,EAAQD,EAAQ1M,EAAE,UAAasI,GAAUkD,EAAK,IAAM,EAAKxL,EAAE,GAAKA,EAAE,QACxE,OACEyC,EAAAA,IAAC,MAAA,CACC,MAAO,CAAE,QAAS,OAAQ,OAAQyF,EAAW,aAAcP,GAAG,WAAY,EAAG,WAAYgF,EAAO,WAAY,iBAAkB,OAAQlE,EAAY,UAAY,SAAA,EAC9J,gBAAmB,CAACiE,IAAUzL,EAAE,cAAc,MAAM,WAAajB,EAAE,UAAY,MAC/E,aAAciB,GAAK,CAACyL,IAAUzL,EAAE,cAAc,MAAM,WAAa0L,GAChE,SAAA5E,EAAQ,IAAI,CAAC8C,EAAKqB,KAAO,CACxB,MAAMU,IAAYvD,GAAA,YAAAA,EAAU,OAAQuC,IAAMvC,GAAA,YAAAA,EAAU,SAAUwB,EAAI,GAC5DgC,GAASvC,EAAIO,EAAI,EAAE,EACnBiC,GAAUjC,EAAI,SAAWA,EAAI,SAASgC,GAAQvC,CAAG,EAAI,OAAOuC,IAAU,EAAE,EAC9E,OACEpK,EAAAA,IAAC,MAAA,CACC,QAAS,IAAM,CACbkJ,EAAUrB,EAAKkB,CAAE,EACbnD,GAAYwC,EAAI,WAAa,KAC/BvB,EAAY,CAAE,IAAKsC,EAAI,MAAOf,EAAI,GAAI,EACtCrB,EAAa,OAAOqD,IAAU,EAAE,CAAC,EAErC,EACA,MAAON,GAAGxC,EAAOmC,EAAE,EAAGrB,EAAKqB,KAAO,EAAGhE,CAAS,EAC7C,SAAA0E,GACCnK,EAAAA,IAAC,QAAA,CACC,UAAS,GACT,MAAO8G,EACP,SAAUtI,IAAKuI,EAAavI,GAAE,OAAO,KAAK,EAC1C,OAAQ4K,GACR,UAAW5K,IAAK,CAAMA,GAAE,MAAQ,SAAS4K,GAAA,EAAkB5K,GAAE,MAAQ,UAAUqI,EAAY,IAAI,CAAG,EAClG,QAASrI,IAAKA,GAAE,gBAAA,EAChB,MAAO,CAAE,MAAO,OAAQ,OAAQ,OAAQ,QAAS,aAAajB,EAAE,OAAO,GAAI,aAAc,EAAG,SAAU,GAAI,QAAS,UAAW,WAAYA,EAAE,QAAS,MAAOA,EAAE,IAAA,CAAK,CAAA,EACnK8M,EAAA,EAlBIjC,EAAI,EAAA,CAqBlB,CAAC,CAAA,EA9BO,OAAOe,CAAE,CAAA,CAiCvB,CAAC,EACAvB,EAAO,SAAW,GACjB5H,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,UAAW,SAAU,QAAS,GAAI,MAAOzC,EAAE,QAAS,SAAU,EAAA,EAAM,SAAA,SAAA,CAAO,CAAA,EAE7F,EAGCqL,IACC5I,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,UAAWkF,GAAG,WAAY3H,EAAE,GAAI,WAAY,GACxE,WAAQ,IAAI,CAAC6K,EAAKrI,IAAM,OACvB,MAAMsI,GAAInI,EAAAkI,EAAI,SAAJ,YAAAlI,EAAa,GACjBoK,EAAQnC,EAASC,EAAI,EAAE,GAAK,CAAE,IAAK,EAAG,IAAK,EAAG,MAAO,EAAG,IAAK,EAAG,IAAK,CAAA,EAC3E,IAAInD,EAA2B,GAC/B,OAAIoD,IACE,OAAOA,EAAE,MAAS,WAAYpD,EAAUoD,EAAE,KAAKiC,CAAK,EAC/CjC,EAAE,KAAMpD,EAAUoD,EAAE,KACpBA,EAAE,UAASpD,EAAU,OAAO,KAAK,MAAMqF,EAAMjC,EAAE,OAAO,EAAI,GAAG,EAAI,GAAG,IAG7ErI,MAAC,OAAiB,MAAO,CAAE,GAAG8J,GAAGxC,EAAOvH,CAAC,EAAGqI,EAAKrI,IAAM,EAAG,EAAE,EAAG,WAAY,IAAK,MAAOxC,EAAE,IAAA,EACtF,SAAA0H,GADOmD,EAAI,EAEd,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CAGJ,CAAA,CACF,CAAA,CAAA,CAGN,CCnVA,MAAMmC,EAAS,CAAC,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,EA4C/F,SAASC,GACPjF,EACAkF,EACAC,EACkE,CAClE,MAAMC,EAAWpF,EAAK,OAAO0D,GAAK,CAACA,EAAE,MAAM,EACrCvL,EAAW6H,EAAK,UAAY,CAAC,CAAC0D,EAAE,MAAM,EAC5C,OAAO0B,EAAM,IAAIC,IAAS,CACxB,KAAMA,EAAKF,CAAO,EAClB,SAAUhN,EACP,OAAOqF,GAAKA,EAAE,SAAW6H,EAAK,EAAE,EAChC,IAAI7H,IAAM,CAAE,KAAMA,EAAE2H,CAAO,EAAa,MAAO,OAAO3H,EAAE0H,CAAQ,GAAK,CAAC,GAAI,CAAA,EAC7E,CACJ,CAEO,SAASI,GAAM,CACpB,KAAAxH,EAAO,MAAO,KAAAkC,EAAO,CAAA,EAAI,OAAAuF,EAAS,CAAA,EAAI,OAAAC,EAAS,CAAA,EAAI,OAAAC,EAAQ,OAAAxF,EAAS,IAAK,MAAAxH,CAC3E,EAAe,qCACbE,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAM4N,IAAO/K,EAAA6K,EAAO,SAAP,YAAA7K,EAAe,OAASqF,EAAK,CAAC,GAAK,OAAO,KAAKA,EAAK,CAAC,CAAC,EAAE,CAAC,GAAM,IAEtE2F,EACJlL,EAAAA,IAACmL,EAAAA,QAAA,CACC,aAAc,CAAE,SAAU,GAAI,aAAc5N,EAAE,EAAG,OAAQ,aAAaA,EAAE,MAAM,EAAA,CAAG,CAAA,EAG/E6N,EAAMJ,EACVhL,EAAAA,IAACqL,EAAAA,OAAA,CACC,SAAU,GACV,aAAc,CAAE,SAAU,EAAA,EAC1B,cAAeL,EAAO,SAAW,SAAW,SAAWA,EAAO,SAAW,SAAW,SAAW,MAC/F,MAAOA,EAAO,QAAU,QAAA,CAAA,EAExB,KACEM,EAAQtL,MAACuL,EAAAA,cAAA,CAAc,gBAAgB,MAAM,OAAQhO,EAAE,OAAQ,EAC/DiO,EACJxL,EAAAA,IAACyL,EAAAA,MAAA,CACC,QAASR,EACT,KAAM,CAAE,SAAU,GAAI,KAAM1N,EAAE,OAAA,EAC9B,SAAU,CAAE,OAAQA,EAAE,MAAA,EACtB,SAAU,GACV,OAAO4C,EAAA4K,EAAO,SAAP,MAAA5K,EAAe,MAClB,CAAE,MAAO4K,EAAO,OAAO,MAAO,SAAU,eAAgB,OAAQ,GAAI,SAAU,IAC9E,MAAA,CAAA,EAGFW,EACJ1L,EAAAA,IAAC2L,EAAAA,MAAA,CACC,KAAM,CAAE,SAAU,GAAI,KAAMpO,EAAE,OAAA,EAC9B,SAAU,GACV,SAAU,GACV,OAAQ,GAACqO,EAAAb,EAAO,OAAP,YAAAa,EAAa,MAAO,SAAQC,EAAAd,EAAO,OAAP,YAAAc,EAAa,MAAO,MAAM,EAC/D,WAAWC,EAAAf,EAAO,OAAP,YAAAe,EAAa,SACxB,OAAOC,EAAAhB,EAAO,OAAP,MAAAgB,EAAa,MAChB,CAAE,MAAOhB,EAAO,KAAK,MAAO,MAAO,IAAK,SAAU,aAAc,SAAU,IAC1E,MAAA,CAAA,EAGFiB,EAAS,CACb,IAAK,GAAI,MAAO,GAAI,KAAM,EAC1B,QAAQC,EAAAlB,EAAO,SAAP,MAAAkB,EAAe,MAAQ,GAAK,CAAA,EAEhCC,EAAS,CAAE,KAAA3G,EAAM,OAAAyG,CAAA,EAEvB,IAAIG,EAGJ,GAAI9I,IAAS,MACX8I,EACEhO,EAAAA,KAACiO,EAAAA,SAAA,CAAU,GAAGF,EACX,SAAA,CAAAZ,EAAME,EAAOE,EAAOR,EAAKE,EACzBN,EAAO,IAAI,CAACxN,EAAGyC,IACdC,EAAAA,IAACqM,EAAAA,IAAA,CAEC,QAAS/O,EAAE,OAASA,EAAE,IAAM,GAC5B,KAAMA,EAAE,OAASA,EAAE,GACnB,KAAMA,EAAE,MAAQA,EAAE,OAASiN,EAAOxK,EAAIwK,EAAO,MAAM,EACnD,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,CAAA,EAJdjN,EAAE,IAAMyC,CAAA,CAMhB,CAAA,EACH,UAIOsD,IAAS,OAClB8I,EACEhO,EAAAA,KAACmO,EAAAA,UAAA,CAAW,GAAGJ,EACZ,SAAA,CAAAZ,EAAME,EAAOE,EAAOR,EAAKE,EACzBN,EAAO,IAAI,CAACxN,EAAGyC,IAAM,CACpB,MAAMgD,EAAIzF,EAAE,OAASiN,EAAOxK,EAAIwK,EAAO,MAAM,EAC7C,OACEvK,EAAAA,IAACuM,EAAAA,KAAA,CAEC,KAAK,WACL,QAASjP,EAAE,OAASA,EAAE,IAAM,GAC5B,KAAMA,EAAE,OAASA,EAAE,GACnB,OAAQyF,EACR,YAAazF,EAAE,aAAe,EAC9B,IAAK,CAAE,EAAG,EAAG,KAAMyF,CAAA,CAAE,EANhBzF,EAAE,IAAMyC,CAAA,CASnB,CAAC,CAAA,EACH,UAIOsD,IAAS,OAClB8I,EACEhO,EAAAA,KAACqO,EAAAA,UAAA,CAAW,GAAGN,EACZ,SAAA,CAAAZ,EAAME,EAAOE,EAAOR,EAAKE,EACzBN,EAAO,IAAI,CAACxN,EAAGyC,IAAM,CACpB,MAAMgD,EAAIzF,EAAE,OAASiN,EAAOxK,EAAIwK,EAAO,MAAM,EAC7C,OACEvK,EAAAA,IAACyM,EAAAA,KAAA,CAEC,KAAK,WACL,QAASnP,EAAE,OAASA,EAAE,IAAM,GAC5B,KAAMA,EAAE,OAASA,EAAE,GACnB,OAAQyF,EACR,MAAOzF,EAAE,MAAQyF,GAAK,KACtB,YAAazF,EAAE,aAAe,CAAA,EANzBA,EAAE,IAAMyC,CAAA,CASnB,CAAC,CAAA,EACH,UAIOsD,IAAS,OAASA,IAAS,QAAS,CAC7C,MAAMqJ,EAAU5B,EAAO,CAAC,GAAK,CAAA,EACvB6B,EAAUD,EAAG,OAAS,QACtBhC,EAAUgC,EAAG,MAAS,OAEtBE,EAAaF,EAAG,OAASnH,EAAK,CAAC,GAAKmH,EAAG,SAASnH,EAAK,CAAC,EAAImH,EAAG,MAAQ,KAC3EP,SACGU,WAAA,CACC,SAAA,CAAA7M,EAAAA,IAAC8M,EAAAA,IAAA,CACC,KAAAvH,EACA,GAAG,MAAM,GAAG,MACZ,YAAalC,IAAS,QAAU,MAAQ,MACxC,YAAaA,IAAS,QAAU,MAAQ,EACxC,QAAAsJ,EACA,QAAAjC,EACA,OAAQgC,EAAG,QAAU,OACrB,YAAaA,EAAG,aAAe,EAC/B,MAAO,CAAC,CAAE,KAAAK,EAAM,QAAAC,KACd,GAAGD,GAAQ,EAAE,MAAMC,GAAW,GAAK,KAAK,QAAQ,CAAC,CAAC,IACpD,UAAS,GACT,aAAc,EAEb,SAAAzH,EAAK,IAAI,CAACsC,EAAK9H,IACdC,EAAAA,IAACiN,EAAAA,KAAA,CAEC,KAAML,EAAc/E,EAAI+E,CAAU,EAAerC,EAAOxK,EAAIwK,EAAO,MAAM,CAAA,EADpExK,CAAA,CAGR,CAAA,CAAA,EAEFmL,EAAKE,CAAA,EACR,CAIJ,SAAW/H,IAAS,QAAS,CAC3B,MAAM6J,IAAWC,EAAApC,EAAO,SAAP,YAAAoC,EAAe,QAASlC,EACzCkB,SACGiB,EAAAA,WAAA,CAAY,GAAGlB,EAAQ,GAAG,MAAM,GAAG,MAClC,SAAA,CAAAlM,EAAAA,IAACqN,EAAAA,UAAA,EAAU,EACXrN,MAACsN,EAAAA,gBAAe,QAASJ,EAAU,KAAM,CAAE,SAAU,IAAM,EAC3DlN,EAAAA,IAACuN,EAAAA,gBAAA,CAAgB,KAAM,CAAE,SAAU,EAAG,KAAMhQ,EAAE,OAAA,EAAW,SAAU,EAAA,CAAO,EACzEuN,EAAO,IAAI,CAACxN,EAAGyC,IAAM,CACpB,MAAMgD,EAAIzF,EAAE,OAASA,EAAE,YAAciN,EAAOxK,EAAIwK,EAAO,MAAM,EAC7D,OACEvK,EAAAA,IAACwN,EAAAA,MAAA,CAEC,QAASlQ,EAAE,OAASA,EAAE,IAAM,GAC5B,KAAMA,EAAE,OAASA,EAAE,GACnB,OAAQyF,EACR,KAAMA,EAAI,IAAA,EAJLzF,EAAE,IAAMyC,CAAA,CAOnB,CAAC,EACAmL,EAAKE,CAAA,EACR,CAIJ,SAAW/H,IAAS,UAClB8I,EACEhO,EAAAA,KAACsP,EAAAA,cAAa,OAAAzB,EACX,SAAA,CAAAV,EACDtL,EAAAA,IAACyL,EAAAA,MAAA,CACC,KAAK,SACL,QAAQ,IACR,OAAMiC,EAAA3C,EAAO,SAAP,YAAA2C,EAAe,QAAS,IAC9B,KAAM,CAAE,SAAU,GAAI,KAAMnQ,EAAE,OAAA,EAC9B,SAAU,GACV,OAAQ,GAACoQ,EAAA5C,EAAO,SAAP,YAAA4C,EAAe,MAAO,SAAQC,EAAA7C,EAAO,SAAP,YAAA6C,EAAe,MAAO,MAAM,EACnE,OAAOC,EAAA9C,EAAO,SAAP,MAAA8C,EAAe,MAClB,CAAE,MAAO9C,EAAO,OAAO,MAAO,SAAU,eAAgB,OAAQ,GAAI,SAAU,IAC9E,MAAA,CAAA,EAEN/K,EAAAA,IAAC2L,EAAAA,MAAA,CACC,KAAK,SACL,QAAQ,IACR,OAAMmC,EAAA/C,EAAO,OAAP,YAAA+C,EAAa,QAAS,IAC5B,KAAM,CAAE,SAAU,GAAI,KAAMvQ,EAAE,OAAA,EAC9B,SAAU,GACV,SAAU,GACV,OAAQ,GAACwQ,EAAAhD,EAAO,OAAP,YAAAgD,EAAa,MAAO,SAAQC,EAAAjD,EAAO,OAAP,YAAAiD,EAAa,MAAO,MAAM,EAC/D,OAAOC,EAAAlD,EAAO,OAAP,MAAAkD,EAAa,MAChB,CAAE,MAAOlD,EAAO,KAAK,MAAO,MAAO,IAAK,SAAU,aAAc,SAAU,IAC1E,MAAA,CAAA,EAELG,EAAKE,EACLN,EAAO,IAAI,CAACxN,EAAGyC,IAAM,CACpB,MAAMmO,EAAS5Q,EAAE,OAAU,IACrB6Q,EAAS7Q,EAAE,QAAU,IACrB8Q,GAAO9Q,EAAE,MAAQiI,GAAM,IAAIsC,IAAQ,CACvC,EAAGA,EAAIqG,CAAM,EACb,EAAGrG,EAAIsG,CAAM,CAAA,EACb,EACF,OACEnO,EAAAA,IAACqO,EAAAA,QAAA,CAEC,KAAMD,EACN,KAAM9Q,EAAE,OAASA,EAAE,GACnB,KAAMA,EAAE,OAASiN,EAAOxK,EAAIwK,EAAO,MAAM,CAAA,EAHpCjN,EAAE,IAAMyC,CAAA,CAMnB,CAAC,CAAA,EACH,UAIOsD,IAAS,UAAW,CAC7B,MAAMqJ,EAAU5B,EAAO,CAAC,GAAK,CAAA,EACvBwD,EAAU5B,EAAG,OAAS,QACtBhC,EAAUgC,EAAG,MAAS,OACtB6B,EAAW/D,GAAajF,EAAM+I,EAAQ5D,CAAO,EAC7C8D,EAAe9B,EAAG,QAAenP,EAAE,QACnCkR,EAAe/B,EAAG,aAAe,EACvCP,EACEnM,EAAAA,IAAC0O,EAAAA,QAAA,CACC,KAAMH,EACN,QAAQ,QACR,YAAa,EAAI,EACjB,OAAQC,EACR,QAAWG,GAAmC,CAC5C,KAAM,CAAE,EAAAxP,EAAG,EAAAC,GAAG,MAAA0C,GAAO,OAAQ8M,GAAG,MAAAlM,GAAO,MAAAmM,GAAO,KAAA9B,CAAA,EAAS4B,EAIvD,GAAIjM,KAAU,EAAG,OAAO,KACxB,MAAMoM,GAAOvE,EAAOsE,GAAQtE,EAAO,MAAM,EACzC,cACG,IAAA,CACC,SAAA,CAAAvK,EAAAA,IAAC,OAAA,CACC,EAAAb,EAAM,EAAAC,GAAM,MAAA0C,GAAc,OAAQ8M,GAClC,KAAAE,GAAY,OAAQN,EAAa,YAAaC,EAC9C,MAAO,CAAE,aAAc,CAAA,CAAE,CAAA,EAE1B3M,GAAQ,IAAM8M,GAAI,IACjB5O,EAAAA,IAAC,OAAA,CACC,EAAGb,EAAI2C,GAAQ,EAAG,EAAG1C,GAAIwP,GAAI,EAC7B,WAAW,SAAS,iBAAiB,SACrC,KAAK,OAAO,SAAU,GAAI,cAAc,OAEvC,SAAA7B,CAAA,CAAA,CACH,EAEJ,CAEJ,CAAA,CAAA,CAGN,CAEA,OACE/M,EAAAA,IAAC,MAAA,CACC,UAAU,MACV,MAAO,CAAE,MAAO,OAAQ,OAAAwF,EAAQ,QAAS,GAAI,WAAYjI,EAAE,QAAS,aAAcA,EAAE,IAAK,GAAGS,CAAA,EAE5F,eAAC+Q,EAAAA,oBAAA,CAAoB,MAAM,OAAO,OAAO,OACtC,SAAA5C,CAAA,CACH,CAAA,CAAA,CAGN,CC1UA,MAAM6C,GAAS,CAAC,UAAU,WAAW,QAAQ,QAAQ,MAAM,OAAO,OAAO,SAAS,YAAY,UAAU,WAAW,UAAU,EACvHC,GAAS,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,EAE3C,SAASC,GAAS,CAAE,MAAAC,EAAO,MAAAC,EAAQ,GAAO,WAAAC,EAAa,GAAO,SAAApL,EAAU,MAAAjG,GAAwB,CACrG,MAAMsR,MAAc,KACdC,EAAWJ,EAAQ,IAAI,KAAK,MAAM,QAAQA,CAAK,EAAIA,EAAM,CAAC,EAAIA,CAAK,EAAIG,EACvE,CAACE,EAAUC,CAAO,EAAQ5P,EAAAA,SAAS0P,CAAQ,EAC3C,CAACnN,EAAUC,CAAW,EAAIxC,WAAmDsP,IAAUC,EAAQ,CAAC,KAAM,IAAI,EAAI,KAAK,EACnH,CAACM,EAAUC,CAAU,EAAK9P,EAAAA,SAAsB,IAAI,EACpD,CAAC+P,EAAUC,CAAO,EAAQhQ,EAAAA,SAAS,CAAE,EAAG,EAAG,EAAG,EAAG,EACvD3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAMyS,EAAON,EAAK,YAAA,EAAqBO,EAAQP,EAAK,SAAA,EAC9CQ,EAAW,IAAI,KAAKF,EAAMC,EAAO,CAAC,EAAE,OAAA,EACpCE,EAAc,IAAI,KAAKH,EAAMC,EAAQ,EAAG,CAAC,EAAE,QAAA,EAE3CxM,EAAyB,CAAA,EAC/B,QAASxD,EAAI,EAAGA,EAAIiQ,EAAUjQ,IAAKwD,EAAM,KAAK,IAAI,EAClD,QAAS0F,EAAI,EAAGA,GAAKgH,EAAahH,IAAK1F,EAAM,KAAK,IAAI,KAAKuM,EAAMC,EAAO9G,CAAC,CAAC,EAE1E,MAAMiH,EAAcjH,GAAYA,EAAE,aAAA,IAAmBqG,EAAM,aAAA,EACrDzM,EAAcoG,GAAY,CAC9B,GAAI,CAAC7G,EAAU,MAAO,GACtB,GAAIgN,GAAS,MAAM,QAAQhN,CAAQ,EAAG,CACpC,KAAM,CAAC9E,EAAGkB,CAAC,EAAI4D,EACf,GAAI,CAAC9E,EAAG,MAAO,GACf,MAAM6S,EAAKlH,EAAE,QAAA,EACb,OAAKzK,EACE2R,GAAM7S,EAAE,QAAA,GAAa6S,GAAM3R,EAAE,QAAA,EADrByK,EAAE,aAAA,IAAmB3L,EAAE,aAAA,CAExC,CACA,OAAO2L,EAAE,iBAAoB7G,EAAkB,aAAA,CACjD,EAEMgO,EAAanH,GAAY,CAC7B,GAAImG,EAAO,CACT,KAAM,CAAC9R,EAAGkB,CAAC,EAAI,MAAM,QAAQ4D,CAAQ,EAAKA,EAA0C,CAAC,KAAM,IAAI,EAC/F,GAAI,CAAC9E,GAAKkB,EAAK6D,EAAY,CAAC4G,EAAG,IAAI,CAAC,MAC/B,CACH,MAAMrB,EAAuBqB,EAAI3L,EAAI,CAAC2L,EAAG3L,CAAC,EAAI,CAACA,EAAG2L,CAAC,EACnD5G,EAAYuF,CAAM,EAAG3D,GAAA,MAAAA,EAAW2D,EAClC,CACF,MAASvF,EAAY4G,CAAC,EAAGhF,GAAA,MAAAA,EAAWgF,EACtC,EAEA,OACE9K,EAAAA,KAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,WAAYZ,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,IAAK,QAAS,GAAI,QAAS,eAAgB,UAAWA,EAAE,OAAQ,GAAGS,CAAA,EACvK,SAAA,CAAAG,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,aAAc,EAAA,EAClG,SAAA,CAAA6B,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMyP,EAAQnL,GAAK,IAAI,KAAKA,EAAE,YAAA,EAAeA,EAAE,SAAA,EAAa,EAAG,CAAC,CAAC,EAAG,UAAU,4BAA4B,MAAO,CAAE,OAAQ,GAAI,QAAS,QAAS,SAAU,EAAA,EAAM,SAAA,GAAA,CAAC,EACnLnG,OAAC,OAAI,MAAO,CAAE,WAAY,IAAK,SAAU,IAAO,SAAA,CAAA6Q,GAAOe,CAAK,EAAE,IAAED,CAAA,EAAK,EACrE9P,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMyP,EAAQnL,GAAK,IAAI,KAAKA,EAAE,YAAA,EAAeA,EAAE,SAAA,EAAa,EAAG,CAAC,CAAC,EAAG,UAAU,4BAA4B,MAAO,CAAE,OAAQ,GAAI,QAAS,QAAS,SAAU,EAAA,EAAM,SAAA,GAAA,CAAC,CAAA,EACrL,EACAnG,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,kBAAmB,IAAK,CAAA,EACzE,SAAA,CAAA8Q,GAAK,OAASjP,MAAC,MAAA,CAAY,MAAO,CAAE,UAAW,SAAU,SAAU,GAAI,WAAY,IAAK,MAAOzC,EAAE,QAAS,cAAe,GAAM,SAAA0L,CAAA,EAAvGA,CAAyG,CAAM,EACvI1F,EAAM,IAAI,CAAC0F,EAAGlJ,IAAM,CACnB,MAAMsQ,EAAOpH,EAAIpG,EAAWoG,CAAC,EAAI,GAC3BhJ,EAAQgJ,GAAKyG,GAAWzG,EAAE,aAAA,IAAmByG,EAAQ,aAAA,EAC3D,OACE1P,EAAAA,IAAC,MAAA,CAAY,QAAS,IAAMiJ,GAAKmH,EAAUnH,CAAC,EAAG,aAAc,IAAMA,GAAK0G,EAAW1G,CAAC,EAAG,aAAc,IAAM0G,EAAW,IAAI,EACxH,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,aAAcpS,EAAE,EAAG,OAAQ0L,EAAI,UAAY,UAAW,SAAU,GAAI,WAAYA,GAAKiH,EAAQjH,CAAC,EAAI,IAAM,IAAK,WAAYoH,EAAM9S,EAAE,QAAU0C,EAAQ1C,EAAE,GAAK,cAAe,MAAO8S,EAAM,OAASpH,GAAKiH,EAAQjH,CAAC,EAAI1L,EAAE,QAAU0L,EAAI1L,EAAE,KAAO,cAAe,OAAQ0L,GAAKiH,EAAQjH,CAAC,GAAK,CAACoH,EAAM,aAAa9S,EAAE,OAAO,GAAK,wBAAyB,WAAY,SAAA,EAC3b,0BAAG,SAAQ,EAFJwC,CAAA,CAKd,CAAC,CAAA,EACH,EACCsP,UACE,MAAA,CAAI,MAAO,CAAE,UAAW,aAAa9R,EAAE,MAAM,GAAI,UAAW,GAAI,WAAY,GAAI,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,IAAK,CAAA,EACrJ,SAAA,CAAAyC,EAAAA,IAAC,QAAA,CAAM,KAAK,SAAS,IAAK,EAAG,IAAK,GAAI,MAAO4P,EAAK,EAAG,SAAUpR,GAAKqR,MAAc,CAAE,GAAGpL,EAAG,EAAG,CAACjG,EAAE,OAAO,KAAA,EAAQ,EAAG,UAAU,gBAAgB,MAAO,CAAE,MAAO,GAAI,UAAW,UAAY,EACvLwB,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,WAAY,IAAK,MAAOzC,EAAE,OAAA,EAAW,SAAA,GAAA,CAAC,EACrDyC,EAAAA,IAAC,QAAA,CAAM,KAAK,SAAS,IAAK,EAAG,IAAK,GAAI,MAAO4P,EAAK,EAAG,SAAUpR,GAAKqR,EAAQpL,IAAM,CAAE,GAAGA,EAAG,EAAG,CAACjG,EAAE,OAAO,OAAQ,EAAG,UAAU,gBAAgB,MAAO,CAAE,MAAO,GAAI,UAAW,SAAS,CAAG,CAAA,CAAA,CACzL,CAAA,EAEJ,CAEJ,CCtEO,SAAS8R,GAAW,CAAE,MAAAnB,EAAO,SAAAlL,EAAU,WAAAsM,EAAa,GAAI,SAAAC,EAAW,GAAO,WAAAC,EAAa,EAAG,MAAAzS,CAAA,EAA0B,CACzH,KAAM,CAAC4Q,EAAS8B,CAAI,EAAU7Q,YAASsP,GAAA,YAAAA,EAAO,KAAMoB,IAAe,GAAK,EAAI,GAAG,EACzE,CAACI,EAASC,CAAI,EAAU/Q,EAAAA,UAASsP,GAAA,YAAAA,EAAO,IAAK,CAAC,EAC9C,CAAC0B,EAASC,CAAO,EAAOjR,EAAAA,UAAsBsP,GAAA,YAAAA,EAAO,OAAQ,IAAI,EACjE,CAAC4B,EAASC,CAAU,EAAInR,EAAAA,SAA2B,IAAI,EAC7D3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAM4T,EAAQV,IAAe,GACzB,MAAM,KAAK,CAAE,OAAQ,IAAM,CAACW,EAAGnR,IAAMA,CAAC,EACtC,MAAM,KAAK,CAAE,OAAQ,IAAM,CAACmR,EAAGnR,IAAMA,EAAI,CAAC,EACxCoR,EAAO,MAAM,KAAK,CAAE,OAAQ,KAAK,KAAK,GAAKV,CAAU,GAAK,CAACS,EAAGnR,IAAMA,EAAI0Q,CAAU,EAElF/L,EAAe,CAAC0M,EAAcC,EAAcC,IAAyB,CACzE,MAAMC,EAAiBhB,IAAe,GAAK,CAAE,EAAGa,EAAM,EAAGC,CAAA,EAAS,CAAE,EAAGD,EAAM,EAAGC,EAAM,KAAMC,CAAA,EACxFd,IAAqBe,CAAG,aACZA,EAClB,EAEMC,EAAe,IAAM,CACzBR,EAAW,IAAI,EACfN,GAAKvB,GAAA,YAAAA,EAAO,KAAMoB,IAAe,GAAK,EAAI,GAAG,EAC7CK,GAAKzB,GAAA,YAAAA,EAAO,IAAK,CAAC,EAClB2B,GAAQ3B,GAAA,YAAAA,EAAO,OAAQ,IAAI,CAC7B,EAEMsC,EAAW,CAAE,QAAS,OAAQ,cAAe,SAAmB,WAAY,SAAmB,IAAK,CAAA,EACpGC,EAAaxN,IAA0C,CAC3D,OAAQ,GAAI,QAAS,OAAQ,WAAY,SAAU,eAAgB,SACnE,OAAQ,UAAW,SAAU,GAC7B,WAAYA,EAAS,IAAM,IAC3B,WAAYA,EAAS3G,EAAE,UAAY,cACnC,MAAO2G,EAAS3G,EAAE,QAAUA,EAAE,IAAA,GAGhC,OACEY,EAAAA,KAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,WAAYZ,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,IAAK,QAAS,GAAI,QAAS,eAAgB,UAAWA,EAAE,OAAQ,GAAGS,CAAA,EACvK,SAAA,CAAAG,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,WAAY,SAAA,EACjD,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,MAAOsT,EACV,SAAA,CAAAzR,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAOzC,EAAE,OAAA,EAAW,SAAA,OAAA,CAAK,EACvEyC,EAAAA,IAAC,OAAI,UAAU,aAAa,MAAO,CAAE,OAAQ,IAAK,UAAW,OAAQ,MAAO,GAAI,OAAQ,aAAazC,EAAE,MAAM,GAAI,aAAcA,EAAE,CAAA,EAC9H,SAAA0T,EAAM,IAAI,GACTjR,EAAAA,IAAC,MAAA,CAAY,QAAS,IAAM,CAAE0Q,EAAK,CAAC,EAAGhM,EAAa,EAAGiM,EAAGE,CAAI,CAAG,EAC/D,MAAOa,EAAU9C,IAAM,CAAC,EACxB,gBAAmBA,IAAM,IAAMpQ,EAAE,cAAc,MAAM,WAAajB,EAAE,IACpE,aAAciB,GAAKoQ,IAAM,IAAMpQ,EAAE,cAAc,MAAM,WAAa,eACjE,SAAA,OAAO,CAAC,EAAE,SAAS,EAAG,GAAG,CAAA,EAJlB,CAAA,CAMX,CAAA,CACH,CAAA,EACF,EAEAL,EAAAA,KAAC,MAAA,CAAI,MAAOsT,EACV,SAAA,CAAAzR,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAOzC,EAAE,OAAA,EAAW,SAAA,SAAA,CAAO,EACzEyC,EAAAA,IAAC,OAAI,UAAU,aAAa,MAAO,CAAE,OAAQ,IAAK,UAAW,OAAQ,MAAO,GAAI,OAAQ,aAAazC,EAAE,MAAM,GAAI,aAAcA,EAAE,CAAA,EAC9H,SAAA4T,EAAK,IAAI,GACRnR,EAAAA,IAAC,MAAA,CAAY,QAAS,IAAM,CAAE4Q,EAAK,CAAC,EAAGlM,EAAakK,EAAG,EAAGiC,CAAI,CAAG,EAC/D,MAAOa,EAAUf,IAAM,CAAC,EACxB,gBAAmBA,IAAM,IAAMnS,EAAE,cAAc,MAAM,WAAajB,EAAE,IACpE,aAAciB,GAAKmS,IAAM,IAAMnS,EAAE,cAAc,MAAM,WAAa,eACjE,SAAA,OAAO,CAAC,EAAE,SAAS,EAAG,GAAG,CAAA,EAJlB,CAAA,CAMX,CAAA,CACH,CAAA,EACF,EAEC+R,IAAe,IACdpS,OAAC,MAAA,CAAI,MAAOsT,EACV,SAAA,CAAAzR,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAOzC,EAAE,OAAA,EAAW,SAAA,OAAA,CAAK,EACvEyC,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,OAAQ,aAAazC,EAAE,MAAM,GAAI,aAAcA,EAAE,EAAG,SAAU,QAAA,EAClH,UAAC,KAAM,IAAI,EAAY,IAAI,GAC3ByC,EAAAA,IAAC,MAAA,CAAY,QAAS,IAAM,CAAE8Q,EAAQ,CAAC,EAAGpM,EAAakK,EAAG+B,EAAG,CAAC,CAAG,EAC/D,MAAO,CAAE,OAAQ,GAAI,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,OAAQ,UAAW,QAAS,SAAU,SAAU,GAAI,WAAYE,IAAS,EAAI,IAAM,IAAK,WAAYA,IAAS,EAAItT,EAAE,QAAUA,EAAE,QAAS,MAAOsT,IAAS,EAAI,OAAStT,EAAE,IAAA,EAC5P,SAAA,CAAA,EAFO,CAAA,CAIX,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EAEJ,SAEC,MAAA,CAAI,MAAO,CAAE,UAAW,SAAU,UAAW,GAAI,SAAU,GAAI,WAAY,IAAK,MAAOA,EAAE,QAAS,cAAe,GAC/G,SAAA,CAAA,OAAOqR,CAAC,EAAE,SAAS,EAAG,GAAG,EAAE,IAAE,OAAO+B,CAAC,EAAE,SAAS,EAAG,GAAG,EAAGJ,IAAe,GAAK,IAAIM,CAAI,GAAK,EAAA,EAC7F,EAECL,GACCrS,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,eAAgB,WAAY,UAAW,IAC5E,SAAA,CAAA6B,MAAC,SAAA,CAAO,UAAU,gCAAgC,QAASwR,EAAc,SAAA,SAAM,EAC/ExR,EAAAA,IAAC,SAAA,CAAO,UAAU,8BAA8B,QAAS,IAAM,CAC7D,MAAMuR,EAAMR,IAAYR,IAAe,GAAK,CAAE,EAAA3B,EAAG,EAAA+B,CAAA,EAAM,CAAE,EAAA/B,EAAG,EAAA+B,EAAG,KAAAE,CAAA,GAC/D5M,GAAA,MAAAA,EAAWsN,EACb,EAAG,SAAA,OAAA,CAAK,CAAA,CAAA,CACV,CAAA,EAEJ,CAEJ,CCzFA,MAAMI,GAAU,CAAC,CAAE,KAAArR,WAChB,MAAA,CAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,MAAO,CAAE,WAAY,EAAG,WAAY,iBAAkB,UAAWA,EAAO,iBAAmB,cAAA,EACzI,eAAC,OAAA,CAAK,EAAE,eAAe,OAAQ/C,EAAE,QAAS,YAAY,MAAM,KAAK,OAAO,cAAc,QAAQ,eAAe,QAAQ,EACvH,EAGK,SAASqU,GAAS,CAAE,KAAArM,EAAO,GAAI,MAAOsM,EAAW,YAAAC,EAAc,oBAAqB,eAAAC,EAAiB,GAAO,MAAA1R,EAAO,SAAA4D,EAAU,MAAAjG,GAAwB,OAC1J,KAAM,CAACsC,EAAUC,CAAO,EAAQV,EAAAA,SAAS,EAAK,EACxC,CAACmS,EAAUC,CAAQ,EAAOpS,EAAAA,SAAS,EAAE,EACrC,CAACuC,EAAUC,CAAW,EAAIxC,EAAAA,SAC9BkS,EACKF,EAAa,GAAgB,OAAOA,CAAmB,EAAI,CAAA,EAC3DA,GAAa,IAAA,EAEdxT,EAAWO,EAAAA,OAAuB,IAAI,EACtCsT,EAAWtT,EAAAA,OAAyB,IAAI,EAC9CV,EAAAA,UAAUb,EAAc,EAAE,EAC1Be,GAAgBC,EAAKS,EAAAA,YAAY,IAAM,CAAEyB,EAAQ,EAAK,EAAG0R,EAAS,EAAE,CAAG,EAAG,CAAA,CAAE,CAAC,EAE7E,MAAME,EAAW5K,EAAAA,QACf,IAAMhC,EAAK,OAAO0D,GAAK,CAAC+I,GAAS/I,EAAE,MAAM,YAAA,EAAc,SAAS+I,EAAM,YAAA,CAAa,CAAC,EACpF,CAACzM,EAAMyM,CAAK,CAAA,EAERnP,EAAc2B,GAClBuN,GAAkB3P,GAAwB,CAAA,GAAI,SAASoC,CAAE,EAAIpC,IAAaoC,EAEtE/B,EAAgB3C,GAAuB,CAC3C,MAAMgI,EAAMhI,EAAK,IAAMA,EAAK,MAC5B,GAAIiS,EAAgB,CAClB,MAAMxQ,EAAKsB,EAAWiF,CAAG,EACpB1F,EAAsB,OAAO9E,GAAKA,IAAMwK,CAAG,EAC5C,CAAC,GAAI1F,GAAwB,CAAA,EAAK0F,CAAG,EACzCzF,EAAYd,CAAE,EACd0C,GAAA,MAAAA,EAAW1C,EACb,MACEc,EAAYyF,CAAG,EACfmK,EAAS,EAAE,EACX1R,EAAQ,EAAK,EACb0D,GAAA,MAAAA,EAAW6D,EAEf,EAEMsK,EAAatK,GAAgB,CACjC,MAAMvG,EAAMa,EAAsB,OAAO9E,GAAKA,IAAMwK,CAAG,EACvDzF,EAAYd,CAAE,EACd0C,GAAA,MAAAA,EAAW1C,EACb,EAEM8Q,EAAe,IAAM,CACzB9R,EAAQ,EAAI,EACZ,WAAW,IAAA,OAAM,OAAAL,EAAAgS,EAAS,UAAT,YAAAhS,EAAkB,SAAS,CAAC,CAC/C,EAGMoS,IAAqBpS,EAAAqF,EAAK,KAAK0D,IAAMA,EAAE,IAAMA,EAAE,SAAW7G,CAAQ,IAA7C,YAAAlC,EAAgD,QAAS,GAE9EqS,EAAeR,EAAkB3P,GAAyB,CAAA,EAAK,CAAA,EAErE,OACEjE,EAAAA,KAAC,MAAA,CAAI,IAAAE,EAAU,UAAU,MAAM,MAAO,CAAE,SAAU,WAAY,GAAGL,CAAA,EAC9D,SAAA,CAAAqC,GAASL,EAAAA,IAAC,QAAA,CAAM,UAAU,gBAAiB,SAAAK,EAAM,EAGlDlC,EAAAA,KAAC,MAAA,CACC,QAASkU,EACT,MAAO,CACL,QAAS,OAAQ,WAAY,SAAU,SAAUN,EAAiB,OAAS,SAC3E,OAAQ,aAAazR,EAAO/C,EAAE,QAAUA,EAAE,MAAM,GAAI,aAAcA,EAAE,EACpE,UAAW,GAAI,QAAS,UAAW,OAAQ,OAAQ,WAAYA,EAAE,QAAS,IAAK,EAC/E,WAAY,oBAAqB,UAAW+C,EAAO,aAAa/C,EAAE,OAAO,KAAO,MAAA,EAIjF,SAAA,CAAAwU,GACC5T,EAAAA,KAAAqU,WAAA,CACG,SAAA,CAAAD,EAAa,IAAIjV,GAAA,OAChBa,OAAAA,EAAAA,KAAC,OAAA,CAAa,MAAO,CACnB,QAAS,cAAe,WAAY,SAAU,IAAK,EACnD,WAAYZ,EAAE,QAAS,MAAO,OAC9B,aAAc,GAAI,QAAS,mBAAoB,SAAU,GAAI,WAAY,IACzE,WAAY,QAAA,EAEX,SAAA,GAAA2C,EAAAqF,EAAK,SAAW0D,EAAE,IAAMA,EAAE,SAAW3L,CAAC,IAAtC,YAAA4C,EAAyC,QAAS5C,EACnD0C,EAAAA,IAAC,OAAA,CACC,QAASxB,GAAK,CAAEA,EAAE,gBAAA,EAAmB4T,EAAU9U,CAAC,CAAG,EACnD,MAAO,CAAE,OAAQ,UAAW,SAAU,GAAI,WAAY,EAAG,QAAS,IAAM,WAAY,CAAA,EAAK,SAAA,GAAA,CAAA,CAAC,CAAA,EATnFA,CAUX,EACD,EACD0C,EAAAA,IAAC,QAAA,CACC,IAAKkS,EACL,MAAOF,EACP,SAAUxT,GAAK,CAAEyT,EAASzT,EAAE,OAAO,KAAK,EAAG+B,EAAQ,EAAI,CAAG,EAC1D,QAAS,IAAMA,EAAQ,EAAI,EAC3B,QAAS/B,GAAKA,EAAE,gBAAA,EAChB,YAAa+T,EAAa,OAAS,GAAKT,EACxC,MAAO,CAAE,KAAM,EAAG,SAAU,GAAI,OAAQ,OAAQ,QAAS,OAAQ,SAAU,GAAI,WAAY,cAAe,MAAOvU,EAAE,KAAM,QAAS,CAAA,CAAE,CAAA,CACtI,EACF,EAID,CAACwU,GACA/R,EAAAA,IAAC,QAAA,CACC,IAAKkS,EACL,MAAO5R,EAAO0R,EAAQM,EACtB,SAAU9T,GAAK,CAAEyT,EAASzT,EAAE,OAAO,KAAK,EAAG+B,EAAQ,EAAI,CAAG,EAC1D,QAAS,IAAM,CAAEA,EAAQ,EAAI,EAAG0R,EAAS,EAAE,CAAG,EAC9C,QAASzT,GAAKA,EAAE,gBAAA,EAChB,YAAAsT,EACA,MAAO,CAAE,KAAM,EAAG,OAAQ,OAAQ,QAAS,OAAQ,SAAU,GAAI,WAAY,cAAe,MAAOvU,EAAE,KAAM,QAAS,CAAA,CAAE,CAAA,EAI1HyC,MAAC2R,IAAQ,KAAArR,CAAA,CAAY,CAAA,CAAA,CAAA,EAItBA,GACCN,EAAAA,IAAC,MAAA,CAAI,UAAU,oBAAoB,MAAO,CACxC,SAAU,WAAY,IAAK,mBAAoB,KAAM,EAAG,MAAO,EAC/D,WAAYzC,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,EACxE,UAAWA,EAAE,SAAU,OAAQ,GAAA,EAE/B,SAAAY,EAAAA,KAAC,MAAA,CAAI,UAAU,aAAa,MAAO,CAAE,UAAW,IAAK,UAAW,MAAA,EAC7D,SAAA,CAAAgU,EAAS,IAAIrS,GAAQ,CACpB,MAAMgI,EAAMhI,EAAK,IAAMA,EAAK,MACtBuQ,EAAMxN,EAAWiF,CAAG,EAC1B,OACE3J,EAAAA,KAAC,MAAA,CAAc,QAAS,IAAMsE,EAAa3C,CAAI,EAC7C,MAAO,CACL,QAAS,WAAY,OAAQ,UAAW,QAAS,OACjD,WAAY,SAAU,IAAK,EAAG,SAAU,GACxC,WAAYuQ,EAAM9S,EAAE,UAAY,cAChC,MAAO8S,EAAM9S,EAAE,QAAUA,EAAE,IAAA,EAE7B,gBAAmB,CAAC8S,IAAQ7R,EAAE,cAAc,MAAM,WAAajB,EAAE,IACjE,aAAciB,GAAK,CAAC6R,IAAQ7R,EAAE,cAAc,MAAM,WAAa,eAC9D,SAAA,CAAAuT,GACC/R,EAAAA,IAAC,QAAK,MAAO,CACX,MAAO,GAAI,OAAQ,GAAI,WAAY,EACnC,OAAQ,aAAaqQ,EAAM9S,EAAE,QAAUA,EAAE,QAAQ,GACjD,aAAc,EAAG,QAAS,OAAQ,WAAY,SAAU,eAAgB,SACxE,WAAY8S,EAAM9S,EAAE,QAAU,aAAA,EAE7B,SAAA8S,GAAOrQ,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,MAAO,OAAQ,SAAU,EAAG,WAAY,CAAA,EAAK,aAAC,EACvE,EAEFA,MAAC,QAAK,MAAO,CAAE,KAAM,CAAA,EAAM,WAAK,MAAM,EACrC,CAAC+R,GAAkB1B,GAClBrQ,EAAAA,IAAC,QAAK,MAAO,CAAE,MAAOzC,EAAE,QAAS,SAAU,GAAI,WAAY,GAAA,EAAO,SAAA,IAAC,EAEpEuC,EAAK,QAAU,QACd3B,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOZ,EAAE,OAAA,EAAW,SAAA,CAAA,IAAEuC,EAAK,MAAM,GAAA,CAAA,CAAC,CAAA,CAAA,EAxBzDgI,CAAA,CA4Bd,CAAC,EACAqK,EAAS,SAAW,GACnBnS,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,GAAI,UAAW,SAAU,MAAOzC,EAAE,QAAS,SAAU,EAAA,EAAM,SAAA,YAAA,CAAU,CAAA,CAAA,CAEhG,CAAA,CACF,CAAA,EAEJ,CAEJ,CCzKO,SAASkV,GAAO,CAAE,IAAAC,EAAM,EAAG,IAAAC,EAAM,IAAK,KAAAC,EAAO,EAAG,MAAOf,EAAW,MAAAzC,EAAQ,GAAO,MAAA/O,EAAO,KAAAwS,EAAM,SAAA/U,EAAW,GAAO,SAAAmG,EAAU,MAAAjG,GAAsB,CACrJ,KAAM,CAACmR,EAAO2D,CAAQ,EAAIjT,WAAoCgS,IAAczC,EAAQ,CAACsD,EAAKC,CAAG,EAAID,EAAI,EACrGxU,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAM0V,EAAS,CAAChT,EAAWuE,IAAc,CACvC,GAAI,CAAAxG,EACJ,GAAIsR,EAAO,CACT,MAAM4D,EAAK,CAAC,GAAI7D,CAA0B,EAC1C6D,EAAGjT,CAAC,EAAIuE,EAAGwO,EAASE,CAAE,EAAG/O,GAAA,MAAAA,EAAW+O,EACtC,MAASF,EAASxO,CAAC,EAAGL,GAAA,MAAAA,EAAWK,EACnC,EAEM2O,EAAO3O,IAAgBA,EAAIoO,IAAQC,EAAMD,GAAQ,IACjDQ,EAAO9D,EAASD,EAA6B,CAACA,CAAe,EAC7DgE,EAAiC/D,EACnC,CAAE,KAAM,GAAG6D,EAAIC,EAAI,CAAC,CAAC,CAAC,IAAK,MAAO,GAAGD,EAAIC,EAAI,CAAC,CAAC,EAAID,EAAIC,EAAI,CAAC,CAAC,CAAC,GAAA,EAC9D,CAAE,KAAM,EAAG,MAAO,GAAGD,EAAIC,EAAI,CAAC,CAAC,CAAC,GAAA,EAE9BE,EAAatV,EAAWP,EAAE,OAASA,EAAE,QAE3C,OACEY,EAAAA,KAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,MAAO,OAAQ,QAASL,EAAW,GAAM,EAAG,GAAGE,GAC1E,SAAA,CAAAqC,GAASL,EAAAA,IAAC,QAAA,CAAM,UAAU,gBAAiB,SAAAK,EAAM,EAClDL,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,OAAQ,GAAI,QAAS,OAAQ,WAAY,QAAA,EAC3E,SAAA7B,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,KAAM,EAAG,OAAQ,EAAG,WAAYZ,EAAE,OAAQ,aAAc,CAAA,EAC1F,SAAA,CAAAyC,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,GAAGmT,EAAW,OAAQ,OAAQ,WAAYC,EAAY,aAAc,EAAE,CAAG,EAC5GF,EAAI,IAAI,CAAC5O,EAAGvE,IACXC,EAAAA,IAAC,QAAA,CAAc,KAAK,QAAQ,IAAA0S,EAAU,IAAAC,EAAU,KAAAC,EAAY,MAAOtO,EAAG,SAAAxG,EACpE,SAAUU,GAAK,CAAE,MAAMwU,EAAK,CAACxU,EAAE,OAAO,MAAW4Q,GAASrP,IAAM,GAAKiT,GAAO7D,EAA0B,CAAC,GAAeC,GAASrP,IAAM,GAAKiT,GAAO7D,EAA0B,CAAC,GAAW4D,EAAOhT,EAAGiT,CAAE,CAAG,EACtM,MAAO,CAAE,SAAU,WAAY,MAAO,OAAQ,OAAQ,OAAQ,QAAS,EAAG,OAAQlV,EAAW,cAAgB,UAAW,IAAK,EAAG,KAAM,EAAG,OAAQ,CAAA,CAAE,EAFzIiC,CAAA,CAGb,EACAmT,EAAI,IAAI,CAAC5O,EAAGvE,IACXC,MAAC,MAAA,CAAY,MAAO,CAAE,SAAU,WAAY,KAAM,GAAGiT,EAAI3O,CAAC,CAAC,IAAK,IAAK,MAAO,UAAW,wBAAyB,MAAO,GAAI,OAAQ,GAAI,aAAc,MAAO,WAAY/G,EAAE,QAAS,OAAQ,aAAa6V,CAAU,GAAI,UAAW,2BAA4B,cAAe,MAAA,EAC1Q,SAAApT,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,OAAQ,mBAAoB,KAAM,MAAO,UAAW,mBAAoB,WAAYlC,EAAWP,EAAE,QAAUA,EAAE,UAAW,MAAO,OAAQ,QAAS,UAAW,aAAcA,EAAE,EAAG,SAAU,GAAI,WAAY,IAAK,WAAY,QAAA,EAAa,SAAA+G,CAAA,CAAE,CAAA,EADpQvE,CAEV,CACD,CAAA,CAAA,CACH,CAAA,CACF,EACC8S,GAAQ7S,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,eAAgB,gBAAiB,UAAW,GAAM,SAAA,CAAC0S,EAAK,KAAK,OAAOC,EAAID,GAAK,CAAC,EAAGC,CAAG,EAAE,IAAIrO,GAAKtE,EAAAA,IAAC,QAAa,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,OAAA,EAAY,SAAA+G,CAAA,EAA/CA,CAAiD,CAAO,CAAA,CAAE,CAAA,EAC9M,CAEJ,CCpDA,MAAM+O,GAAU,CAAC,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,EAEpR,SAASC,GAASC,EAAkB,CAClC,MAAMhL,EAAI,SAASgL,EAAI,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAKC,EAAI,SAASD,EAAI,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAK7L,EAAI,SAAS6L,EAAI,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAC1GZ,EAAM,KAAK,IAAIpK,EAAEiL,EAAE9L,CAAC,EAAGgL,EAAM,KAAK,IAAInK,EAAEiL,EAAE9L,CAAC,EAAG,IAAIkH,EAAI,EAAGtR,EAAI,EAAG,MAAMmW,GAAKd,EAAID,GAAK,EAC1F,GAAIC,IAAQD,EAAK,CAAE,MAAMzJ,EAAI0J,EAAID,EAAKpV,EAAImW,EAAI,GAAKxK,GAAG,EAAE0J,EAAID,GAAOzJ,GAAG0J,EAAID,GAAM9D,EAAI+D,IAAQpK,IAAMiL,EAAE9L,GAAGuB,GAAKuK,EAAE9L,EAAE,EAAE,IAAI,EAAIiL,IAAQa,IAAM9L,EAAEa,GAAGU,EAAE,GAAG,IAAMV,EAAEiL,GAAGvK,EAAE,GAAG,CAAG,CACrK,MAAO,CAAC,KAAK,MAAM2F,EAAE,GAAG,EAAG,KAAK,MAAMtR,EAAE,GAAG,EAAG,KAAK,MAAMmW,EAAE,GAAG,CAAC,CACjE,CACA,SAASC,GAAS9E,EAAW,EAAW6E,EAAmB,CACzD,GAAK,IAAKA,GAAK,IACf,MAAMhM,EAAI,EAAI,KAAK,IAAIgM,EAAG,EAAEA,CAAC,EACvBpL,EAAKG,GAAc,CAAE,MAAMT,GAAKS,EAAEoG,EAAE,IAAI,GAAU7L,EAAI0Q,EAAIhM,EAAE,KAAK,IAAI,KAAK,IAAIM,EAAE,EAAG,EAAEA,EAAG,CAAC,EAAG,EAAE,EAAG,OAAO,KAAK,MAAM,IAAIhF,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,GAAG,CAAG,EAC9J,MAAO,IAAMsF,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAIA,EAAE,CAAC,CAChC,CAQO,SAASsL,GAAY,CAAE,MAAAxE,EAAQ,UAAW,SAAAlL,EAAU,MAAAjG,GAA2B,CACpF,KAAM,CAAC4V,EAAKC,CAAM,EAAIhU,EAAAA,SAAc,IAAMyT,GAASnE,CAAK,CAAC,EACnDoE,EAAMG,GAAS,GAAGE,CAAG,EAC3B1V,EAAAA,UAAUb,EAAc,EAAE,EAC1B,MAAMyW,EAAOlF,GAAW,CAAEiF,EAAOjF,CAAC,EAAG3K,GAAA,MAAAA,EAAWyP,GAAS,GAAG9E,CAAC,EAAI,EAEjE,OACEzQ,EAAAA,KAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,WAAYZ,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,IAAK,QAAS,GAAI,QAAS,eAAgB,UAAWA,EAAE,OAAQ,GAAGS,CAAA,EACvK,SAAA,CAAAgC,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,MAAO,IAAK,OAAQ,IAAK,aAAczC,EAAE,EAAG,aAAc,GAAI,WAAY,wFAAwFqW,EAAI,CAAC,CAAC,cAAe,OAAQ,aAAe,EAC1N,CAAC,CAAC,MAAO,EAAG,IAAKA,EAAI,CAAC,CAAC,EAAG,CAAC,aAAc,EAAG,IAAKA,EAAI,CAAC,CAAC,EAAG,CAAC,YAAa,EAAG,IAAKA,EAAI,CAAC,CAAC,CAAC,EAAyC,IAAI,CAAC,CAACG,EAAKC,EAAIC,EAAI1C,CAAG,EAAG2C,IACzJ/V,EAAAA,KAAC,MAAA,CAAc,MAAO,CAAE,aAAc+V,EAAM,EAAI,EAAI,IAClD,SAAA,CAAA/V,EAAAA,KAAC,MAAA,CAAI,UAAU,gBAAiB,SAAA,CAAA4V,EAAKG,EAAM,EAAI,KAAK3C,CAAG,KAAO,EAAA,EAAG,EACjEvR,EAAAA,IAAC,QAAA,CAAM,KAAK,QAAQ,IAAKgU,EAAI,IAAKC,EAAI,MAAO1C,EAAK,SAAU/S,GAAK,CAAE,MAAMwU,EAAK,CAAC,GAAGY,CAAG,EAAUZ,EAAGkB,CAAG,EAAI,CAAC1V,EAAE,OAAO,MAAOsV,EAAId,CAAE,CAAG,EAAG,MAAO,CAAE,MAAO,OAAQ,YAAazV,EAAE,QAAQ,CAAG,CAAA,CAAA,EAFhLwW,CAGV,CACD,EACD5V,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,aAAc,EAAA,EACzE,SAAA,CAAA6B,MAAC,OAAI,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,aAAczC,EAAE,EAAG,WAAYgW,EAAK,OAAQ,aAAahW,EAAE,MAAM,GAAI,WAAY,GAAK,EAC3HyC,EAAAA,IAAC,QAAA,CAAM,UAAU,gBAAgB,MAAO,CAAE,KAAM,EAAG,WAAY,YAAa,SAAU,EAAA,EAAM,MAAOuT,EACjG,SAAU/U,GAAK,CAAE,GAAI,CAAEsV,EAAIR,GAAS9U,EAAE,OAAO,KAAK,CAAC,EAAGyF,GAAA,MAAAA,EAAWzF,EAAE,OAAO,MAAQ,MAAQ,CAAoB,CAAE,CAAA,CAAA,CAAG,EACvH,EACAwB,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,kBAAmB,IAAK,CAAA,EACzE,SAAAqT,GAAQ,IAAItQ,GACX/C,EAAAA,IAAC,MAAA,CAAY,QAAS,IAAM,CAAE6T,EAAOP,GAASvQ,CAAC,CAAC,EAAGkB,GAAA,MAAAA,EAAWlB,EAAI,EAChE,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,aAAc,EAAG,WAAYA,EAAG,OAAQ,UAAW,OAAQwQ,IAAQxQ,EAAI,aAAaxF,EAAE,IAAI,GAAK,4BAA6B,WAAY,eAAA,EACxK,aAAciB,GAAMA,EAAE,cAAc,MAAM,UAAY,aACtD,aAAcA,GAAMA,EAAE,cAAc,MAAM,UAAY,UAAA,EAH9CuE,CAAA,CAIX,CAAA,CACH,CAAA,EACF,CAEJ,CC3CO,SAASoR,GAAM,CAAE,QAAAC,EAAS,SAAA1W,EAAU,UAAA2W,EAAY,eAAgB,MAAArW,GAAqB,CAC1F,KAAM,CAACsC,EAAMC,CAAO,EAAMV,EAAAA,SAAS,EAAK,EAClC,CAACa,EAAMC,CAAM,EAAOd,EAAAA,SAA8B,CAAE,IAAK,OAAQ,KAAM,EAAG,EAC1ExB,EAAUO,EAAAA,OAAuB,IAAI,EACrC0V,EAAU1V,EAAAA,OAAuB,IAAI,EAC3CV,EAAAA,UAAUb,EAAc,EAAE,EAC1Be,GAAgBC,EAAKS,cAAY,IAAMyB,EAAQ,EAAK,EAAG,CAAA,CAAE,CAAC,EAE1D,MAAMgU,EAAS,IAAM,CACnBhU,EAAQC,GAAK,CACX,GAAI,CAACA,GAAK8T,EAAQ,QAAS,CACzB,MAAM/L,EAAI+L,EAAQ,QAAQ,sBAAA,EACpBE,EAA0D,CAC9D,eAAgB,CAAE,IAAKjM,EAAE,OAAS,EAAG,KAAM,CAAA,EAC3C,aAAgB,CAAE,IAAKA,EAAE,OAAS,EAAG,MAAO,EAAG,KAAM,MAAA,EACrD,YAAgB,CAAE,OAAQA,EAAE,OAAS,EAAG,IAAK,OAAQ,KAAM,CAAA,CAAE,EAE/D5H,EAAO6T,EAAWH,CAAS,GAAKG,EAAW,cAAc,CAAC,CAC5D,CACA,MAAO,CAAChU,CACV,CAAC,CACH,EAEA,OACErC,EAAAA,KAAC,MAAA,CAAI,IAAAE,EAAU,UAAU,MAAM,MAAO,CAAE,SAAU,WAAY,QAAS,cAAA,EACrE,SAAA,CAAA2B,MAAC,MAAA,CAAI,IAAKsU,EAAS,QAASC,EAAS,SAAAH,EAAQ,EAC5C9T,GACCN,EAAAA,IAAC,MAAA,CAAI,UAAU,oBAAoB,MAAO,CAAE,SAAU,WAAY,GAAGU,EAAK,OAAQ,IAAK,WAAYnD,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,aAAcA,EAAE,IAAK,UAAWA,EAAE,SAAU,GAAGS,CAAA,EAC3L,SAAAN,CAAA,CACH,CAAA,EAEJ,CAEJ,CC5BO,SAAS+W,GAAO,CAAE,MAAAC,EAAO,SAAAhX,EAAU,MAAAoE,EAAQ,IAAK,OAAA0D,EAAQ,SAAA1B,EAAW,GAAM,QAAA6Q,EAAU,GAAM,MAAAC,EAAQ,GAAO,YAAAC,EAAc,GAAM,OAAA5S,EAAQ,QAAA6S,EAAS,MAAA9W,GAAsB,CACxK,KAAM,CAACsC,EAAMC,CAAO,EAAIV,EAAAA,SAASgV,CAAW,EACtC,CAACnU,EAAMC,CAAM,EAAKd,EAAAA,SAAS,CAAE,EAAG,EAAG,EAAG,EAAG,EAC/C3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAM0X,EAAOtW,GAAQK,EAAAA,YAAY,CAACK,EAAWC,IAAcuV,GAAWhU,EAAO,CAAE,EAAAxB,EAAG,EAAAC,EAAG,EAAG,CAACuV,CAAO,CAAC,CAAC,EAC5FpQ,EAAc,IAAM,CAAEhE,EAAQ,EAAK,EAAGuU,GAAA,MAAAA,GAAa,EAEzD,OAAKxU,EAEHnC,EAAAA,KAAAqU,WAAA,CACG,SAAA,CAAAoC,SAAU,MAAA,CAAI,MAAO,CAAE,SAAU,QAAS,MAAO,EAAG,WAAY,kBAAmB,OAAQ,GAAA,EAAO,QAAS9Q,EAAWS,EAAc,OAAW,EAChJpG,EAAAA,KAAC,OAAI,UAAU,MAAM,MAAO,CAAE,SAAUyW,EAAQ,QAAU,WAAY,KAAM,MAAO,IAAK,MAAO,UAAW,yBAAyBlU,EAAI,CAAC,oBAAoBA,EAAI,CAAC,OAAQ,MAAAoB,EAAO,GAAI0D,EAAS,CAAE,OAAAA,CAAA,EAAW,CAAA,EAAK,WAAYjI,EAAE,QAAS,aAAcA,EAAE,IAAK,UAAWA,EAAE,SAAU,OAAQ,IAAK,QAAS,OAAQ,cAAe,SAAU,SAAU,SAAU,GAAGS,CAAA,EAC9V,SAAA,CAAAG,EAAAA,KAAC,MAAA,CAAI,YAAaK,GAAKuW,EAAKvW,EAAGkC,EAAI,EAAGA,EAAI,CAAC,EAAG,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,QAAS,YAAa,aAAc,aAAanD,EAAE,MAAM,GAAI,OAAQoX,EAAU,OAAS,UAAW,WAAYpX,EAAE,GAAI,IAAK,EAAG,WAAY,QACrO,SAAA,CAAAyC,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,KAAM,EAAG,WAAY,IAAK,SAAU,EAAA,EAAO,SAAA0U,CAAA,CAAM,EAC/D5Q,GAAY9D,EAAAA,IAAC,SAAA,CAAO,QAASuE,EAAa,MAAO,CAAE,WAAY,OAAQ,OAAQ,OAAQ,OAAQ,UAAW,MAAO,GAAI,OAAQ,GAAI,aAAchH,EAAE,EAAG,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,SAAU,GAAI,MAAOA,EAAE,OAAA,EAC3O,aAAciB,GAAMA,EAAE,cAAc,MAAM,WAAajB,EAAE,OAAS,aAAciB,GAAMA,EAAE,cAAc,MAAM,WAAa,OAAS,SAAA,GAAA,CAAA,CAAC,EACvI,EACAwB,EAAAA,IAAC,MAAA,CAAI,UAAU,aAAa,MAAO,CAAE,KAAM,EAAG,UAAW,EAAG,QAAS,GAAI,UAAW,MAAA,EAAW,SAAAtC,EAAS,EACvGuE,SAAW,MAAA,CAAI,MAAO,CAAE,QAAS,YAAa,UAAW,aAAa1E,EAAE,MAAM,GAAI,QAAS,OAAQ,eAAgB,WAAY,IAAK,EAAG,WAAYA,EAAE,IAAO,SAAA0E,CAAA,CAAO,CAAA,CAAA,CACtK,CAAA,EACF,EAbgB,IAepB,CCpBO,MAAM+S,GAAiBC,EAAAA,cAAiC,IAAI,EAE7DC,GAAsC,CAAE,QAAS,IAAK,MAAO,IAAK,QAAS,IAAK,KAAM,GAAA,EACtF3K,GAAsC,CAAE,QAAShN,EAAE,QAAS,MAAOA,EAAE,OAAQ,QAASA,EAAE,QAAS,KAAMA,EAAE,OAAA,EAExG,SAAS4X,GAAgB,CAAE,SAAAzX,GAA2C,CAC3E,KAAM,CAAC0X,EAAUC,CAAW,EAAIxV,EAAAA,SAAwB,CAAA,CAAE,EAC1D3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAMiY,EAASxW,EAAAA,YAAa0F,GAAe6Q,EAAY1E,GAAKA,EAAE,OAAOxR,GAAKA,EAAE,KAAOqF,CAAE,CAAC,EAAG,EAAE,EACrF+Q,EAASzW,cAAa0W,GAAyB,CACnD,MAAMhR,EAAK,KAAK,IAAA,EAChB,OAAA6Q,EAAY1E,GAAK,CAAC,GAAGA,EAAG,CAAE,GAAAnM,EAAI,GAAGgR,CAAA,CAAM,CAAC,EACpCA,EAAK,WAAa,GAAG,WAAW,IAAMF,EAAO9Q,CAAE,EAAGgR,EAAK,UAAY,GAAI,EACpEhR,CACT,EAAG,CAAC8Q,CAAM,CAAC,EAELG,EAAkB,CACtB,QAASF,EACT,MAAS,CAACb,EAAOc,IAASD,EAAI,CAAE,KAAM,OAAQ,MAAAb,EAAO,GAAGc,EAAM,EAC9D,QAAS,CAACd,EAAOgB,EAAIF,IAASD,EAAI,CAAE,KAAM,UAAW,MAAAb,EAAO,QAASgB,EAAI,GAAGF,EAAM,CAAA,EAGpF,OACErX,EAAAA,KAAC6W,GAAe,SAAf,CAAwB,MAAOS,EAC7B,SAAA,CAAA/X,EACDsC,EAAAA,IAAC,OAAI,MAAO,CAAE,SAAU,QAAS,IAAK,GAAI,MAAO,GAAI,OAAQ,KAAM,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,cAAe,MAAA,EACjI,SAAAoV,EAAS,IAAIzE,GAAK,CACjB,MAAMtN,EAAOsN,EAAE,MAAQ,OACvB,cACG,MAAA,CAAe,MAAO,CAAE,WAAYpT,EAAE,QAAS,OAAQ,aAAaA,EAAE,MAAM,GAAI,WAAY,aAAagN,GAAOlH,CAAI,CAAC,GAAI,aAAc9F,EAAE,EAAG,UAAWA,EAAE,SAAU,QAAS,YAAa,SAAU,IAAK,SAAU,IAAK,cAAe,MAAO,QAAS,OAAQ,IAAK,GAAI,WAAY,aAAc,UAAW,sBAC3S,SAAA,CAAAyC,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOuK,GAAOlH,CAAI,EAAG,WAAY,CAAA,EAAM,SAAA6R,GAAM7R,CAAI,EAAE,SAC/E,MAAA,CAAI,MAAO,CAAE,KAAM,GACjB,SAAA,CAAAsN,EAAE,OAAS3Q,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,WAAY,IAAK,SAAU,GAAI,aAAc2Q,EAAE,KAAO,EAAI,CAAA,EAAM,WAAE,MAAM,EACjGA,EAAE,MAAS3Q,MAAC,MAAA,CAAI,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,QAAS,WAAY,GAAA,EAAQ,WAAE,KAAK,EACpFoT,EAAE,SACDxS,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,UAAW,CAAA,EAChD,SAAA,CAAA6B,EAAAA,IAAC,SAAA,CAAO,UAAU,8BAA8B,MAAO,CAAE,OAAQ,GAAI,SAAU,EAAA,EAAM,QAAS,IAAM,CAAE2Q,EAAE,QAAS,EAAI,EAAG2E,EAAO3E,EAAE,EAAE,CAAG,EAAG,SAAA,UAAO,EAChJ3Q,EAAAA,IAAC,SAAA,CAAO,UAAU,gCAAgC,MAAO,CAAE,OAAQ,GAAI,SAAU,EAAA,EAAM,QAAS,IAAM,CAAE2Q,EAAE,QAAS,EAAK,EAAG2E,EAAO3E,EAAE,EAAE,CAAG,EAAG,SAAA,QAAA,CAAM,CAAA,CAAA,CACpJ,CAAA,EAEJ,EACA3Q,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMsV,EAAO3E,EAAE,EAAE,EAAG,MAAO,CAAE,WAAY,OAAQ,OAAQ,OAAQ,OAAQ,UAAW,MAAOpT,EAAE,QAAS,SAAU,GAAI,WAAY,EAAG,QAAS,GAAK,SAAA,GAAA,CAAC,CAAA,CAAA,EAZ3JoT,EAAE,EAaZ,CAEJ,CAAC,CAAA,CACH,CAAA,EACF,CAEJ,CAEO,SAASgF,IAAyB,CACvC,MAAMC,EAAMC,EAAAA,WAAWb,EAAc,EACrC,GAAI,CAACY,EAAK,MAAM,IAAI,MAAM,kDAAkD,EAC5E,OAAOA,CACT,CCvDO,SAASE,GAAK,CAAE,KAAAvQ,EAAO,CAAA,EAAI,SAAAwQ,EAAU,cAAAhQ,EAAgB,GAAM,eAAAgM,EAAiB,GAAO,SAAAnM,EAAW,GAAO,OAAAJ,EAAS,IAAK,SAAA9F,EAAU,OAAAsW,EAAQ,MAAAhY,GAAoB,CAC9J,KAAM,CAACoE,EAAUC,CAAW,EAAIxC,EAAAA,SAA+B,IAAI,GAAK,EAClE,CAACoW,EAAUC,CAAU,EAAKrW,EAAAA,SAAwB,IAAI,EACtD,CAACsW,EAAUC,CAAU,EAAKvW,EAAAA,SAAS,EAAE,EACrC,CAACwW,EAAUC,CAAU,EAAKzW,EAAAA,SAAwB,IAAI,EAC5D3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAMiE,EAAc,CAACxB,EAAgBC,IAAc,CACjD,MAAMyE,EAAK1E,EAAK,IAAMC,EACtBsC,EAAY/E,GAAK,CAAE,MAAMiE,EAAKwQ,EAAiB,IAAI,IAAIzU,CAAC,MAAQ,IAAwB,OAAAiE,EAAG,IAAIiD,CAAE,EAAIjD,EAAG,OAAOiD,CAAE,EAAIjD,EAAG,IAAIiD,CAAE,EAAUjD,CAAI,CAAC,EAC7I+U,EAAWvW,CAAC,EAAGL,GAAA,MAAAA,EAAWI,EAC5B,EACMsJ,EAAa,CAACtJ,EAAgBC,IAAc,CAAEiW,GAAA,MAAAA,EAAS,CAAE,GAAGlW,EAAM,MAAOqW,CAAA,EAAWpW,GAAImW,EAAW,IAAI,CAAG,EAEhH,OACE/X,EAAAA,KAAC,MAAA,CAAI,UAAU,iBAAiB,MAAO,CAAE,OAAAqH,EAAQ,UAAW,OAAQ,OAAQ,aAAajI,EAAE,MAAM,GAAI,aAAcA,EAAE,EAAG,WAAYA,EAAE,QAAS,GAAGS,CAAA,EAChJ,SAAU,EACV,UAAWQ,GAAK,CACTuH,IACDvH,EAAE,MAAQ,aAAa8X,EAAWjO,GAAK,KAAK,KAAKA,GAAK,IAAM,EAAG9C,EAAK,OAAS,CAAC,CAAC,EAC/E/G,EAAE,MAAQ,WAAa8X,EAAWjO,GAAK,KAAK,KAAKA,GAAK,GAAK,EAAG,CAAC,CAAC,EACtE,EACC,SAAA,CAAA9C,EAAK,IAAI,CAACzF,EAAMC,IAAM,CACrB,MAAMyE,EAAQ1E,EAAK,IAAMC,EACnBkK,EAAQ7H,EAAS,IAAIoC,CAAE,EACvB+R,EAAQF,IAAYtW,EAC1B,OACEC,EAAAA,IAAC,MAAA,CAAqB,QAAS,IAAMsB,EAAYxB,EAAMC,CAAC,EAAG,cAAe,IAAM6F,IAAasQ,EAAWnW,CAAC,EAAGqW,EAAW,OAAOtW,EAAK,OAAS,EAAE,CAAC,GAC7I,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,QAAS,SAAU,OAAQ,GAAI,OAAQ,UAAW,SAAU,GAAI,aAAc,aAAavC,EAAE,MAAM,GAAI,WAAY0M,EAAQ1M,EAAE,UAAYgZ,EAAQhZ,EAAE,GAAKA,EAAE,QAAS,MAAO0M,EAAQ1M,EAAE,QAAUA,EAAE,KAAM,QAASgZ,EAAQ,aAAahZ,EAAE,OAAO,KAAO,OAAQ,WAAY,gBAAA,EACvT,aAAYwC,EACXC,EAAAA,IAAC,QAAA,CAAM,UAAS,GAAC,UAAU,gBAAgB,MAAO,CAAE,OAAQ,GAAI,KAAM,CAAA,EAAK,MAAOmW,EAAS,SAAU3X,GAAK4X,EAAW5X,EAAE,OAAO,KAAK,EACjI,OAAQ,IAAM4K,EAAWtJ,EAAMC,CAAC,EAAG,UAAWvB,GAAK,CAAMA,EAAE,MAAQ,SAAS4K,EAAWtJ,EAAMC,CAAC,EAAOvB,EAAE,MAAQ,UAAU0X,EAAW,IAAI,CAAG,EAAG,QAAS1X,GAAKA,EAAE,gBAAA,CAAgB,CAAA,EAC9KuX,EACF/V,EAAAA,IAAC,MAAA,CAAI,wBAAyB,CAAE,OAAQ+V,EAASjW,CAAI,GAAK,MAAO,CAAE,KAAM,EAAE,CAAG,EAE9EE,MAAC,OAAA,CAAK,MAAO,CAAE,KAAM,EAAG,SAAU,SAAU,aAAc,WAAY,WAAY,UAAa,SAAA,OAAOF,EAAK,OAAS,EAAE,CAAA,CAAE,CAAA,EARlH,OAAO0E,CAAE,CAAA,CAYvB,CAAC,EACAe,EAAK,SAAW,GAAKvF,EAAAA,IAAC,OAAI,MAAO,CAAE,QAAS,GAAI,UAAW,SAAU,MAAOzC,EAAE,OAAA,EAAW,SAAA,UAAA,CAAQ,CAAA,CAAA,CAAA,CAGxG,CC1CO,SAASiZ,GAAS,CAAE,KAAAjR,EAAO,GAAI,SAAAwQ,EAAU,WAAAU,EAAa,EAAG,IAAAnT,EAAM,GAAI,eAAAyO,EAAiB,GAAO,SAAArS,EAAU,MAAA1B,GAAwB,CAClI,KAAM,CAACoE,EAAUC,CAAW,EAAIxC,EAAAA,SAA+B,IAAI,GAAK,EACxE3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAMiE,EAAexB,GAAuB,CAC1C,MAAM0E,EAAK1E,EAAK,IAAM,OAAOA,EAAK,KAAK,EACvCuC,EAAY/E,GAAK,CAAE,MAAMiE,EAAKwQ,EAAiB,IAAI,IAAIzU,CAAC,MAAQ,IAAwB,OAAAiE,EAAG,IAAIiD,CAAE,EAAIjD,EAAG,OAAOiD,CAAE,EAAIjD,EAAG,IAAIiD,CAAE,EAAUjD,CAAI,CAAC,EAC7I7B,GAAA,MAAAA,EAAWI,EACb,EAEA,OACEE,MAAC,OAAI,UAAU,MAAM,MAAO,CAAE,QAAS,OAAQ,oBAAqB,UAAUyW,CAAU,SAAU,IAAAnT,EAAK,QAASA,EAAK,GAAGtF,CAAA,EACrH,SAAAuH,EAAK,IAAI,CAACzF,EAAMC,IAAM,CACrB,MAAMyE,EAAQ1E,EAAK,IAAMC,EACnBkK,EAAQ7H,EAAS,IAAIoC,CAAE,EAC7B,OACExE,EAAAA,IAAC,MAAA,CAAqB,QAAS,IAAMsB,EAAYxB,CAAI,EACnD,MAAO,CAAE,WAAYvC,EAAE,QAAS,OAAQ,aAAa0M,EAAQ1M,EAAE,QAAUA,EAAE,MAAM,GAAI,aAAcA,EAAE,IAAK,SAAU,SAAU,OAAQ,UAAW,WAAY,WAAY,UAAW0M,EAAQ,aAAa1M,EAAE,OAAO,KAAOA,EAAE,OAAQ,UAAW0M,EAAQ,mBAAqB,MAAA,EAC3Q,aAAczL,GAAK,CAAEA,EAAE,cAAc,MAAM,UAAYjB,EAAE,SAAUiB,EAAE,cAAc,MAAM,UAAY,kBAAoB,EACzH,aAAcA,GAAK,CAAEA,EAAE,cAAc,MAAM,UAAYyL,EAAQ,aAAa1M,EAAE,OAAO,KAAOA,EAAE,OAAQiB,EAAE,cAAc,MAAM,UAAYyL,EAAQ,mBAAqB,MAAQ,EAC5K,WAAWjK,EAAAA,IAAC,MAAA,CAAI,wBAAyB,CAAE,OAAQ+V,EAASjW,CAAI,CAAA,CAAE,CAAG,EACpE3B,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,IACpB,SAAA,CAAA2B,EAAK,WAAQ,MAAA,CAAI,IAAKA,EAAK,IAAK,IAAKA,EAAK,OAAS,GAAI,MAAO,CAAE,MAAO,OAAQ,aAAcvC,EAAE,EAAG,aAAc,EAAG,QAAS,OAAA,CAAQ,CAAG,EACxIyC,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,WAAY,IAAK,SAAU,GAAI,aAAc,CAAA,EAAM,SAAAF,EAAK,OAASA,EAAK,MAAM,EACzFA,EAAK,UAAYE,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,OAAA,EAAY,WAAK,QAAA,CAAS,CAAA,CAAA,CACnF,CAAA,EATM,OAAOiH,CAAE,CAAA,CAavB,CAAC,CAAA,CACH,CAEJ,CC7BA,SAASkS,GAAUC,EAA+B,CAChD,OAAOA,EAAM,IAAInO,IAAM,CAAE,GAAGA,EAAG,MAAOA,EAAE,MAAQkO,GAAUlO,EAAE,KAAK,EAAI,QAAY,CACnF,CAEA,SAASoO,GAAgBD,EAAmBE,EAAkC,GAA6B,CACzG,OAAAF,EAAM,QAAQnO,GAAK,CACbA,EAAE,SAAQqO,EAAOrO,EAAE,EAAE,EAAI,IACzBA,EAAE,OAAOoO,GAAgBpO,EAAE,MAAOqO,CAAM,CAC9C,CAAC,EACMA,CACT,CAGA,SAASC,GAAWH,EAAmBnS,EAA2C,CAChF,IAAIuS,EAA2B,KAW/B,MAAO,CAVQJ,EACZ,OAAOnO,GAAWA,EAAE,KAAOhE,GAAMuS,EAAUvO,EAAU,IAAgB,EAAO,EAC5E,IAAIA,GAAK,CACR,GAAIA,EAAE,MAAO,CACX,KAAM,CAACwO,EAAUzO,CAAC,EAAIuO,GAAWtO,EAAE,MAAOhE,CAAE,EAC5C,OAAI+D,IAAGwO,EAAUxO,GACV,CAAE,GAAGC,EAAG,MAAOwO,CAAA,CACxB,CACA,OAAOxO,CACT,CAAC,EACauO,CAAO,CACzB,CAGA,SAASE,GACPN,EACAO,EACAC,EACAzW,EACY,CACZ,GAAIA,IAAQ,SACV,OAAOiW,EAAM,IAAInO,GACXA,EAAE,KAAO0O,EAAiB,CAAE,GAAG1O,EAAG,MAAO,CAAC,GAAIA,EAAE,OAAS,CAAA,EAAK2O,CAAI,CAAA,EAClE3O,EAAE,MAAc,CAAE,GAAGA,EAAG,MAAOyO,GAAWzO,EAAE,MAAO0O,EAAUC,EAAMzW,CAAG,CAAA,EACnE8H,CACR,EAIH,GADoBmO,EAAM,KAAKnO,GAAKA,EAAE,KAAO0O,CAAQ,EACpC,CACf,MAAML,EAAqB,CAAA,EAC3B,UAAWrO,KAAKmO,EACVnO,EAAE,KAAO0O,EACPxW,IAAQ,UAAYmW,EAAO,KAAKM,CAAI,EAAGN,EAAO,KAAKrO,CAAC,IAChCqO,EAAO,KAAKrO,CAAC,EAAMqO,EAAO,KAAKM,CAAI,GAE3DN,EAAO,KAAKrO,CAAC,EAGjB,OAAOqO,CACT,CAEA,OAAOF,EAAM,IAAInO,GACXA,EAAE,MAAc,CAAE,GAAGA,EAAG,MAAOyO,GAAWzO,EAAE,MAAO0O,EAAUC,EAAMzW,CAAG,CAAA,EACnE8H,CACR,CACH,CAGA,SAAS4O,GAAWT,EAAmBU,EAAoBH,EAA2B,CACpF,SAASI,EAAM9O,EAAsB,SACnC,GAAIA,EAAE,KAAO6O,EAAY,CACvB,MAAME,EAAWpY,GAAA,OAAyB,OAAAA,EAAE,KAAO+X,MAAahX,EAAAf,EAAE,QAAF,YAAAe,EAAS,KAAKqX,KAAY,KAC1F,QAAOrX,EAAAsI,EAAE,QAAF,YAAAtI,EAAS,KAAKqX,KAAY,EACnC,CACA,QAAOpX,EAAAqI,EAAE,QAAF,YAAArI,EAAS,KAAKmX,KAAU,EACjC,CACA,OAAOX,EAAM,KAAKW,CAAK,CACzB,CAGA,SAASE,GAAYb,EAAmBnS,EAAY2K,EAA2B,CAC7E,OAAOwH,EAAM,IAAInO,GACfA,EAAE,KAAOhE,EACL,CAAE,GAAGgE,EAAG,MAAA2G,GACR,CAAE,GAAG3G,EAAG,MAAOA,EAAE,MAAQgP,GAAYhP,EAAE,MAAOhE,EAAI2K,CAAK,EAAI,MAAA,CAAU,CAE7E,CAGA,SAASsI,GAAWN,EAAgBO,EAA2E,OAC7G,IAAIlQ,EAAQ,EAAGmQ,EAAe,EAC9B,MAAMC,EAASpP,GAAgB,OAC7BhB,IACIkQ,EAAQlP,EAAE,EAAE,GAAGmP,KACnBzX,EAAAsI,EAAE,QAAF,MAAAtI,EAAS,QAAQ0X,EACnB,EACA,OAAA1X,EAAAiX,EAAK,QAAL,MAAAjX,EAAY,QAAQ0X,GACb,CAAE,MAAApQ,EAAO,aAAAmQ,CAAA,CAClB,CAIO,SAASE,GAAK,CACnB,KAAAtS,EAAO,CAAA,EAAI,SAAAuS,EAAW,GAAO,SAAAlS,EAAW,GACxC,SAAAmS,EAAU,QAAAC,EAAS,SAAAtY,EAAU,QAAAuY,EAAS,SAAAhU,EAAU,MAAAjG,CAClD,EAAc,CACZ,KAAM,CAAC2Y,EAAYuB,CAAQ,EAAQrY,EAAAA,SAAqB,IAAM6W,GAAUnR,CAAI,CAAC,EACvE,CAACjD,EAAYC,CAAW,EAAK1C,EAAAA,SAAkC,IAAM+W,GAAgBrR,CAAI,CAAC,EAC1F,CAACnD,EAAYC,CAAW,EAAKxC,EAAAA,SAAwB,IAAI,EACzD,CAAC6X,EAAYS,CAAU,EAAMtY,EAAAA,SAAkC,CAAA,CAAE,EACjE,CAACuY,EAAYC,CAAY,EAAIxY,EAAAA,SAAwB,IAAI,EACzD,CAACsW,EAAYC,CAAU,EAAMvW,EAAAA,SAAS,EAAE,EACxC,CAACyY,EAAYC,CAAS,EAAO1Y,EAAAA,SAAwB,IAAI,EACzD,CAAC2Y,EAAYC,CAAa,EAAI5Y,EAAAA,SAAoE,IAAI,EAC5G3B,EAAAA,UAAUb,EAAc,EAAE,EAE1Ba,EAAAA,UAAU,IAAM,CACdga,EAASxB,GAAUnR,CAAI,CAAC,EACxBhD,EAAYd,IAAS,CAAE,GAAGmV,GAAgBrR,CAAI,EAAG,GAAG9D,GAAO,CAC7D,EAAG,CAAC8D,CAAI,CAAC,EAET,MAAMgP,EAAU/P,GAAejC,MAAkB,CAAE,GAAG/D,EAAG,CAACgG,CAAE,EAAG,CAAChG,EAAEgG,CAAE,GAAI,EAElEkU,EAAc,CAAClU,EAAY+M,IAAiB,CAChD4G,EAAWpV,IAAM,CAAE,GAAGA,EAAG,CAACyB,CAAE,EAAG+M,GAAM,EACrC0G,GAAA,MAAAA,EAAUzT,EAAI+M,EAChB,EAEMnI,EAAa,IAAM,CACvB,GAAI,CAACgP,EAAW,OAChB,MAAM5T,EAAK4T,EAAW7G,EAAM4E,EAC5BkC,EAAa,IAAI,EACjBH,EAASzW,GAAQ,CACf,MAAMkX,EAAUnB,GAAY/V,EAAM+C,EAAI+M,CAAG,EACzC,OAAAtN,GAAA,MAAAA,EAAW0U,GACJA,CACT,CAAC,CACH,EAIMC,EAAkB,CAACpa,EAAoBgG,IAAe,CAC1DhG,EAAE,aAAa,cAAgB,OAC/B+Z,EAAU/T,CAAE,CACd,EAEMqU,EAAiB,CAACra,EAAoBgG,IAAe,CACzD,GAAI,CAAC8T,GAAUA,IAAW9T,GAAM4S,GAAWT,EAAO2B,EAAQ9T,CAAE,EAAG,OAC/DhG,EAAE,eAAA,EACF,MAAMsa,EAAQta,EAAE,cAA8B,sBAAA,EACxCY,EAAOZ,EAAE,QAAUsa,EAAK,IACxBlK,EAAOkK,EAAK,OACZpY,EAAqCtB,EAAIwP,EAAI,IAAO,SAAWxP,EAAIwP,EAAI,IAAO,QAAU,SAC9F6J,EAAcM,IAAOA,GAAA,YAAAA,EAAI,MAAOvU,IAAMuU,GAAA,YAAAA,EAAI,OAAQrY,EAAOqY,EAAK,CAAE,GAAAvU,EAAI,IAAA9D,CAAA,CAAK,CAC3E,EAEMsY,EAAa,CAACxa,EAAoB0Y,IAAqB,CAE3D,GADA1Y,EAAE,eAAA,EACE,CAAC8Z,GAAU,CAACE,GAAcF,IAAWpB,EAAU,CAAEuB,EAAc,IAAI,EAAGF,EAAU,IAAI,EAAG,MAAQ,CACnGL,EAASzW,GAAQ,CACf,KAAM,CAACwX,EAAaC,CAAO,EAAIpC,GAAWrV,EAAM6W,CAAM,EACtD,GAAI,CAACY,EAAS,OAAOzX,EACrB,MAAMoV,EAASI,GAAWgC,EAAa/B,EAAUgC,EAASV,EAAW,GAAG,EACxE,OAAAvU,GAAA,MAAAA,EAAW4S,GACJA,CACT,CAAC,EACG2B,EAAW,MAAQ,UAAUjW,EAAY/D,IAAM,CAAE,GAAGA,EAAG,CAAC0Y,CAAQ,EAAG,IAAO,EAC9EuB,EAAc,IAAI,EAClBF,EAAU,IAAI,CAChB,EAEMY,EAAgB,IAAM,CAAEZ,EAAU,IAAI,EAAGE,EAAc,IAAI,CAAG,EAI9DW,EAAa,CAACjC,EAAgBzU,EAAQ,IAAuB,QACjE,MAAMC,KAAezC,GAAAiX,EAAK,QAAL,YAAAjX,GAAY,SAAU,GAAK,EAC1CmZ,EAAc/W,EAAS6U,EAAK,EAAE,EAC9BlN,EAAc7H,IAAa+U,EAAK,GAChCmC,EAAchB,IAAWnB,EAAK,GAC9BoC,GAAcf,GAAA,YAAAA,EAAY,MAAOrB,EAAK,GAG5C,IAAIqC,GAAY,CAAC,CAAC9B,EAAQP,EAAK,EAAE,EAC7BsC,GAAY,GAChB,GAAI3B,GAAYnV,EAAa,CAC3B,KAAM,CAAE,MAAA6E,EAAO,aAAAmQ,EAAA,EAAiBF,GAAWN,EAAMO,CAAO,EACpDC,GAAe,GAAKA,GAAenQ,EAASiS,GAAU,GACjDjS,EAAQ,GAAKmQ,KAAiBnQ,IAASgS,GAAY,GAC9D,CAEA,MAAME,GAAkCH,GAAUf,EAAY,MAAQ,SAClE,CAAE,UAAWA,EAAY,MAAQ,SAAW,mBAAmBjb,EAAE,OAAO,GAAK,oBAAoBA,EAAE,OAAO,EAAA,EAC1G,CAAA,EAEE2M,GAAQqP,GAAUf,EAAY,MAAQ,UAExCvO,EADA1M,EAAE,UACoB,cAE1B,OACEY,EAAAA,KAAC,OAAkB,MAAO,CAAE,QAASmb,EAAa,GAAM,GACtD,SAAA,CAAAnb,EAAAA,KAAC,MAAA,CACC,UAAW,CAAC,CAAC4Z,EACb,YAAaA,EAAWvZ,GAAKoa,EAAgBpa,EAAG2Y,EAAK,EAAE,EAAI,OAC3D,WAAYY,EAAYvZ,GAAKqa,EAAera,EAAG2Y,EAAK,EAAE,EAAK,OAC3D,OAAQY,EAAgBvZ,GAAKwa,EAAWxa,EAAG2Y,EAAK,EAAE,EAAS,OAC3D,UAAWY,EAAaoB,EAAoC,OAC5D,MAAOnB,GAAA,YAAAA,EAAUb,GACjB,QAAS,IAAM,CACb9U,EAAY8U,EAAK,EAAE,EACnBzX,GAAA,MAAAA,EAAWyX,GACPxU,GAAa4R,EAAO4C,EAAK,EAAE,CACjC,EACA,cAAe,IAAM,CACfvR,IAAYyS,EAAalB,EAAK,EAAE,EAAGf,EAAWe,EAAK,OAAS,EAAE,EACpE,EACA,MAAO,CACL,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,QAAS,eAAe,GAAKzU,EAAQ,EAAE,KACvC,OAAQqV,EAAW,OAAS,UAC5B,aAAcxa,EAAE,EAAG,OAAQ,UAC3B,WAAY2M,GACZ,MAAOD,EAAQ1M,EAAE,QAAUA,EAAE,KAC7B,WAAY,OAAQ,SAAU,GAC9B,GAAGmc,EAAA,EAEL,aAAclb,GAAK,CAACyL,GAAS,CAACsP,IAAW/a,EAAE,cAAc,MAAM,WAAajB,EAAE,IAC9E,gBAAmB,CAAC0M,GAAS,CAACsP,IAAW/a,EAAE,cAAc,MAAM,WAAa,eAG5E,SAAA,CAAAwB,EAAAA,IAAC,OAAA,CACC,MAAO,CAAE,MAAO,GAAI,UAAW,SAAU,SAAU,GAAI,MAAOzC,EAAE,QAAS,WAAY,CAAA,EACrF,QAASiB,GAAK,CAAEA,EAAE,gBAAA,EAAuBmE,GAAa4R,EAAO4C,EAAK,EAAE,CAAG,EAEtE,SAAAxU,EAAe0W,EAAQ,IAAM,IAAO,EAAA,CAAA,EAIvCrZ,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,WAAY,CAAA,EACtC,SAAA2C,EAAe0W,EAAQ,KAAO,KAAQ,KACzC,EAGCvB,GACC9X,EAAAA,IAAC,QAAA,CACC,IAAK2Z,GAAM,CAAMA,MAAO,cAAgBF,GAAS,EACjD,KAAK,WACL,QAASD,GACT,SAAUhb,GAAK,CAAEA,EAAE,gBAAA,EAAmBka,EAAYvB,EAAK,GAAI3Y,EAAE,OAAO,OAAO,CAAG,EAC9E,MAAO,CAAE,OAAQ,UAAW,YAAajB,EAAE,QAAS,WAAY,CAAA,EAChE,QAASiB,GAAKA,EAAE,gBAAA,CAAgB,CAAA,EAKnC4Z,IAAcjB,EAAK,GAClBnX,EAAAA,IAAC,QAAA,CACC,UAAS,GACT,UAAU,gBACV,MAAO,CAAE,OAAQ,GAAI,SAAU,GAAI,KAAM,CAAA,EACzC,MAAOmW,EACP,SAAU3X,GAAK4X,EAAW5X,EAAE,OAAO,KAAK,EACxC,OAAQ4K,EACR,UAAW5K,GAAK,CAAMA,EAAE,MAAQ,SAAS4K,EAAA,EAAkB5K,EAAE,MAAQ,UAAU6Z,EAAa,IAAI,CAAG,EACnG,QAAS7Z,GAAKA,EAAE,gBAAA,CAAgB,CAAA,QAGjC,OAAA,CAAK,MAAO,CAAE,KAAM,CAAA,EAAM,SAAA2Y,EAAK,MAAM,EAGvCA,EAAK,QAAU,QACdhZ,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOZ,EAAE,OAAA,EAAW,SAAA,CAAA,IAAE4Z,EAAK,MAAM,GAAA,CAAA,CAAC,CAAA,CAAA,CAAA,EAIlExU,GAAe0W,GACdrZ,EAAAA,IAAC,MAAA,CAAK,SAAAmX,EAAK,MAAO,IAAIrU,GAASsW,EAAWtW,EAAOJ,EAAQ,CAAC,CAAC,CAAA,CAAE,CAAA,CAAA,EA5EvDyU,EAAK,EA8Ef,CAEJ,EAEA,OACEnX,EAAAA,IAAC,MAAA,CACC,UAAU,iBACV,MAAO,CAAE,UAAW,OAAQ,GAAGhC,CAAA,EAC/B,WAAY+Z,EAAWvZ,GAAKA,EAAE,iBAAmB,OACjD,OAAQuZ,EAAWvZ,GAAK,CAAEA,EAAE,eAAA,EAAkBia,EAAc,IAAI,EAAGF,EAAU,IAAI,CAAG,EAAI,OAEvF,SAAA5B,EAAM,IAAInO,GAAK4Q,EAAW5Q,CAAC,CAAC,CAAA,CAAA,CAGnC,CC9SO,SAASoR,GAAW,CAAE,MAAApS,EAAO,SAAAqS,EAAW,GAAI,KAAMC,EAAU,SAAA7V,EAAU,MAAAjG,GAA0B,CACrG,KAAM,CAAC+b,EAAMC,CAAO,EAAIna,EAAAA,SAASia,GAAY,CAAC,EACxCG,EAAa,KAAK,KAAKzS,EAAQqS,CAAQ,EAC7C3b,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAM6c,EAAQC,GAAc,CAAE,MAAMC,EAAK,KAAK,IAAI,KAAK,IAAI,EAAGD,CAAC,EAAGF,CAAU,EAAGD,EAAQI,CAAE,EAAGnW,GAAA,MAAAA,EAAWmW,EAAK,EAEtGhL,EAAQ7H,EAAAA,QAAQ,IAAM,CAC1B,MAAM8S,EAA4B,CAAA,EAElC,QAASta,EAAI,KAAK,IAAI,EAAGga,EAAO,CAAK,EAAGha,GAAK,KAAK,IAAIka,EAAYF,EAAO,CAAK,EAAGha,IAAKsa,EAAM,KAAKta,CAAC,EAClG,OAAKsa,EAAM,CAAC,EAAe,IAAUA,EAAM,CAAC,EAAe,GAAGA,EAAM,QAAQ,KAAK,EAAGA,EAAM,QAAQ,CAAC,GAC9FA,EAAMA,EAAM,OAAS,CAAC,EAAeJ,IAAmBI,EAAMA,EAAM,OAAS,CAAC,EAAeJ,EAAa,GAAGI,EAAM,KAAK,KAAK,EAAGA,EAAM,KAAKJ,CAAU,GACnJI,CACT,EAAG,CAACN,EAAME,CAAU,CAAC,EAErB,cACG,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,QAAS,WAAY,GAAGjc,GACnG,SAAA,CAAAG,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOZ,EAAE,QAAS,YAAa,CAAA,EAAO,SAAA,EAAAwc,EAAK,GAAGF,EAAS,EAAE,IAAE,KAAK,IAAIE,EAAKF,EAASrS,CAAK,EAAE,OAAKA,CAAA,EAAM,EAC/H,CAAC,CAAC,IAAK,CAAC,EAAG,CAAC,IAAKuS,EAAO,CAAC,CAAC,EAAyB,IAAI,CAAC,CAAChG,EAAKoG,CAAC,UAC9D,SAAA,CAAiB,UAAU,4BAA4B,MAAO,CAAE,OAAQ,GAAI,QAAS,QAAS,SAAU,IAAM,SAAUJ,IAAS,EAAG,QAAS,IAAMG,EAAKC,CAAC,EAAI,SAAApG,CAAA,EAAjJA,CAAqJ,CACnK,EACA3E,EAAM,IAAI,CAAC+K,EAAGpa,UACZ,SAAA,CAAe,QAAS,IAAM,OAAOoa,GAAM,UAAYD,EAAKC,CAAC,EAAG,UAAW,eAAeA,IAAMJ,EAAO,kBAAoB,eAAe,GAAI,MAAO,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,QAAS,SAAU,IAAM,SAAUI,IAAM,MAAQ,SAAAA,CAAA,EAA/Npa,CAAiO,CAC/O,EACC,CAAC,CAAC,IAAKga,EAAO,CAAC,EAAG,CAAC,IAAKE,CAAU,CAAC,EAAyB,IAAI,CAAC,CAAClG,EAAKoG,CAAC,UACvE,SAAA,CAAiB,UAAU,4BAA4B,MAAO,CAAE,OAAQ,GAAI,QAAS,QAAS,SAAU,IAAM,SAAUJ,IAASE,EAAY,QAAS,IAAMC,EAAKC,CAAC,EAAI,SAAApG,CAAA,EAA1JA,CAA8J,CAC5K,CAAA,EACH,CAEJ,CCgBO,SAASuG,GAAK,CAAE,OAAArX,EAAS,CAAA,EAAI,cAAAsX,EAAgB,GAAI,SAAAC,EAAU,MAAAxc,GAAoB,CACpF,KAAM,CAACyc,EAAaC,CAAS,EAAS7a,EAAAA,SAAkC0a,CAAa,EAC/E,CAACI,EAAaC,CAAS,EAAS/a,EAAAA,SAAwC,CAAA,CAAE,EAC1E,CAACgb,EAAaC,CAAa,EAAKjb,EAAAA,SAAwB,IAAI,EAClE3B,EAAAA,UAAUb,EAAc,EAAE,EAE1B,MAAMyW,EAAM,CAAC/G,EAAcwE,IAAiB,CAC1CmJ,EAAUpW,IAAM,CAAE,GAAGA,EAAG,CAACyI,CAAI,EAAGwE,GAAM,EACtCqJ,EAAUpc,IAAM,CAAE,GAAGA,EAAG,CAACuO,CAAI,EAAG,MAAO,CACzC,EAEMgO,EAAiB5X,GAAmD,CACxE,MAAM6X,EAAmB,CAAA,EACzB,OAAA7X,EAAK,KAAA,EAAO,QAAQkF,GAAK,CACnB,CAACA,GAAK,OAAOA,GAAM,UAAY,EAAE,SAAUA,KAC/C2S,EAAI,KAAK3S,CAAC,EACNA,EAAE,OAAS,YAAcA,EAAE,MAAM2S,EAAI,KAAK,GAAGD,EAAc1S,EAAE,IAAI,CAAC,EACxE,CAAC,EACM2S,CACT,EAEMC,EAAW,IAAM,CACrB,MAAMC,EAA+B,CAAA,EACrC,OAAAH,EAAc9X,EAAO,MAAQ,CAAA,CAAE,EAAE,QAAQoF,GAAK,CACxCA,EAAE,UAAY,CAACoS,EAAOpS,EAAE,IAAI,IAC9B6S,EAAK7S,EAAE,IAAI,EAAI,GAAGA,EAAE,OAASA,EAAE,IAAI,eACvC,CAAC,EACDuS,EAAUM,CAAI,EACP,OAAO,KAAKA,CAAI,EAAE,SAAW,CACtC,EAEMC,EAAeC,GAAsC,CACzD,MAAM7J,EAAOkJ,EAAOW,EAAM,IAAI,GAAKA,EAAM,OAAS,GAC5CC,EAAMV,EAAOS,EAAM,IAAI,EAGvBE,EAASF,EAAM,YAAcnY,EAAO,WACpCsY,EAASD,IAAO,QAAaF,EAAM,gBAAkB,OAG3D,GAAIA,EAAM,OAAS,WAAY,cAC5B,WAAA,CAA0B,MAAO,CAAE,OAAQ,aAAa7d,EAAE,MAAM,GAAI,aAAcA,EAAE,EAAG,QAAS,YAAa,aAAc,IAC1H,SAAA,CAAAyC,EAAAA,IAAC,SAAA,CAAO,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAOzC,EAAE,QAAS,QAAS,OAAA,EAAY,WAAM,MAAM,GACjG6d,EAAM,MAAQ,CAAA,GAAI,IAAI/S,GAAK8S,EAAY9S,CAAC,CAAC,CAAA,CAAA,EAF9B+S,EAAM,IAGrB,EAGF,GAAIA,EAAM,OAAS,SAAU,aAC1B,MAAA,CAAqB,MAAO,CAAE,OAAQA,EAAM,QAAU,EAAA,CAAG,EAAhDA,EAAM,IAA6C,EAI/D,MAAMI,EAAkCF,EACpC,CAAE,SAAUA,EAAI,MAAOA,EAAI,WAAY,EAAG,WAAY,EAAG,UAAW,YAAA,EACpE,CAAA,EACEG,EAAUL,EAAM,MAClBjd,EAAAA,KAAC,SAAgB,UAAU,gBAAgB,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,GAAGqd,GAC7E,SAAA,CAAAJ,EAAM,MAAOA,EAAM,UAAYpb,MAAC,OAAA,CAAK,MAAO,CAAE,MAAOzC,EAAE,QAAU,SAAA,GAAA,CAAC,CAAA,CAAA,EAD1D,KAEX,EACA,KACEme,EAASL,EAAOrb,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,OAAQ,UAAW,CAAA,EAAM,WAAI,EAAS,KAC3Foe,EAASP,EAAM,YACjBjd,EAAAA,KAAC,OAAI,MAAO,CAAE,SAAU,GAAI,MAAOZ,EAAE,QAAS,UAAW,GAAK,SAAA,CAAA,KAAG6d,EAAM,WAAA,CAAA,CAAY,EACnF,KAEElP,EAAS,CAAE,IAAKkP,EAAM,KAAM,UAAW,gBAAA,EAGvCQ,EAAQ3W,GAA6BsW,EACzCpd,EAAAA,KAAC,OAAK,GAAG+N,EAAQ,MAAO,CAAE,QAAS,OAAQ,WAAY,aAAc,IAAK,GACvE,SAAA,CAAAuP,EACDtd,OAAC,OAAI,MAAO,CAAE,KAAM,EAAG,SAAU,GAAM,SAAA,CAAA8G,EAASyW,EAAOC,CAAA,CAAA,CAAO,CAAA,CAAA,CAChE,EAEAxd,EAAAA,KAAC,MAAA,CAAK,GAAG+N,EACN,SAAA,CAAAuP,EACAxW,EACAyW,EACAC,CAAA,EACH,EAIF,GAAI,CAACP,EAAM,MAAQA,EAAM,OAAS,QAAS,OAAOQ,EAChDzd,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACZ,SAAA,CAAAid,EAAM,MAAQpb,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,WAAM,KAAK,EAC5DA,EAAAA,IAAC,QAAA,CAAM,UAAW,gBAAgBob,EAAM,KAAO,wBAA0B,EAAE,GACzE,MAAO,CAAE,YAAaC,EAAM9d,EAAE,OAAS,MAAA,EACvC,KAAM6d,EAAM,WAAa,OAAQ,YAAaA,EAAM,YACpD,MAAO7J,EAAK,SAAU/S,GAAKsV,EAAIsH,EAAM,KAAM5c,EAAE,OAAO,KAAK,EAAG,SAAU4c,EAAM,QAAA,CAAA,CAAU,CAAA,CAC1F,CAAA,EAIF,GAAIA,EAAM,OAAS,WAAY,OAAOQ,EACpC5b,EAAAA,IAAC,WAAA,CAAS,UAAU,gBAClB,MAAO,CAAE,OAAQ,GAAI,OAAQ,WAAY,QAAS,UAAA,EAClD,YAAaob,EAAM,YAAa,MAAO7J,EACvC,SAAU/S,GAAKsV,EAAIsH,EAAM,KAAM5c,EAAE,OAAO,KAAK,CAAA,CAAA,CAAG,EAIpD,GAAI4c,EAAM,OAAS,SAAU,OAAOQ,SACjC,SAAA,CAAO,UAAU,gBAAgB,MAAOrK,EAAK,SAAU/S,GAAKsV,EAAIsH,EAAM,KAAM5c,EAAE,OAAO,KAAK,EAAG,MAAO,CAAE,OAAQ,WAC7G,SAAA,CAAAwB,EAAAA,IAAC,SAAA,CAAO,MAAM,GAAG,SAAA,aAAU,GACzBob,EAAM,SAAW,IAAI,OAASpb,EAAAA,IAAC,SAAA,CAAqB,MAAOQ,EAAE,MAAQ,SAAAA,EAAE,OAASA,EAAE,KAAA,EAAvCA,EAAE,KAA2C,CAAS,CAAA,CAAA,CACrG,CAAA,EAIF,GAAI4a,EAAM,OAAS,aAAc,OAAOQ,QACrC,QAAA,CAAM,KAAK,OAAO,UAAU,gBAAgB,MAAOrK,EAAK,SAAU/S,GAAKsV,EAAIsH,EAAM,KAAM5c,EAAE,OAAO,KAAK,CAAA,CAAG,CAAA,EAI3G,GAAI4c,EAAM,OAAS,aAAc,CAC/B,MAAMS,EAAiBpB,EAAOW,EAAM,IAAI,GAAmB,CAAE,EAAG,GAAI,EAAG,EAAG,KAAM,IAAA,EAC1EU,EAAS,CAAC,CAAErB,EAAOW,EAAM,IAAI,EAC7B/Q,EAAUyR,EACZ,GAAG,OAAOD,EAAG,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,OAAOA,EAAG,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAGA,EAAG,KAAO,IAAMA,EAAG,KAAO,EAAE,GAC7FT,EAAM,aAAe,kBACpBhH,EACJjW,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,SAAU,YACtB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,MAAO,CAAE,OAAQ,UAAW,QAAS,OAAQ,WAAY,SAAU,eAAgB,eAAA,EACnF,QAAS,IAAM2c,EAAcD,IAAeO,EAAM,KAAO,KAAOA,EAAM,IAAI,EAC1E,SAAA,CAAApb,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,MAAO8b,EAASve,EAAE,KAAOA,EAAE,OAAA,EAAY,SAAA8M,CAAA,CAAQ,EAC9DrK,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,SAAW,SAAA,IAAA,CAAE,CAAA,CAAA,CAAA,EAEpDsd,IAAeO,EAAM,MACpBpb,EAAAA,IAAC,OAAI,MAAO,CAAE,SAAU,WAAY,OAAQ,IAAK,IAAK,mBAAoB,KAAM,CAAA,EAC9E,SAAAA,EAAAA,IAACsQ,GAAA,CAAW,MAAOuL,EAAI,SAAQ,GAAC,SAAUvX,GAAK,CAAEwP,EAAIsH,EAAM,KAAM9W,CAAC,EAAGwW,EAAc,IAAI,CAAG,EAAG,CAAA,CAC/F,CAAA,EAEJ,EAEF,OAAOc,EAAKxH,CAAO,CACrB,CAGA,GAAIgH,EAAM,OAAS,cAAe,OAAOQ,EACvCzd,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAA,EACxD,SAAA,CAAA6B,EAAAA,IAAC,QAAA,CAAM,KAAK,QAAQ,MAAQuR,GAAkB,UAAW,SAAU/S,GAAKsV,EAAIsH,EAAM,KAAM5c,EAAE,OAAO,KAAK,EACpG,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,EAAG,OAAQ,aAAajB,EAAE,MAAM,GAAI,aAAcA,EAAE,EAAG,OAAQ,UAAW,WAAY,MAAA,CAAO,CAAA,EACxIyC,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,QAAS,WAAY,WAAA,EAAiB,YAAkB,SAAA,CAAU,CAAA,CAAA,CAC1G,CAAA,EAIF,GAAI6d,EAAM,OAAS,OAAQ,OAAOQ,EAChC5b,EAAAA,IAAC,IAAA,CAAE,MAAO,CAAE,OAAQ,QAAS,SAAU,GAAI,MAAOzC,EAAE,IAAA,EAAS,WAAM,KAAA,CAAgB,CAAA,EAIrF,GAAI6d,EAAM,OAAS,kBACjBjd,EAAAA,KAAC,MAAA,CAAK,GAAG+N,EACN,SAAA,CAAAqP,EACGpd,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAA,EAEvD,SAAA,CAAAmd,GAAMtb,EAAAA,IAAC,OAAI,MAAO,CAAE,MAAOsb,EAAI,WAAY,GAAK,EACjDnd,EAAAA,KAAC,QAAA,CAAM,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,OAAQ,SAAA,EACrE,SAAA,CAAA6B,EAAAA,IAAC,QAAA,CAAM,KAAK,WAAW,QAAS,CAAC,CAACuR,EAAK,SAAU/S,GAAKsV,EAAIsH,EAAM,KAAM5c,EAAE,OAAO,OAAO,EAAG,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,YAAajB,EAAE,QAAS,OAAQ,SAAA,CAAU,CAAG,EACtKyC,MAAC,QAAK,MAAO,CAAE,SAAU,IAAO,WAAM,KAAA,CAAM,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,EACA7B,EAAAA,KAAC,QAAA,CAAM,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,OAAQ,WACrE,SAAA,CAAA6B,EAAAA,IAAC,QAAA,CAAM,KAAK,WAAW,QAAS,CAAC,CAACuR,EAAK,SAAU/S,GAAKsV,EAAIsH,EAAM,KAAM5c,EAAE,OAAO,OAAO,EAAG,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,YAAajB,EAAE,QAAS,OAAQ,SAAA,CAAU,CAAG,EACtKyC,MAAC,QAAK,MAAO,CAAE,SAAU,IAAO,WAAM,KAAA,CAAM,CAAA,EAC9C,EAEH2b,CAAA,EACH,EAIF,GAAIP,EAAM,OAAS,QAAS,CAC1B,MAAMW,GAAWX,EAAM,SAAW,CAAA,GAAI,IAAI5a,UACvC,QAAA,CAAoB,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,OAAQ,UAAW,SAAU,EAAA,EACxG,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,KAAK,QAAQ,KAAMob,EAAM,KAAM,MAAO5a,EAAE,MAAO,QAAS+Q,IAAQ/Q,EAAE,MACvE,SAAU,IAAMsT,EAAIsH,EAAM,KAAM5a,EAAE,KAAK,EAAG,MAAO,CAAE,YAAajD,EAAE,QAAS,OAAQ,SAAA,CAAU,CAAA,EAC9FiD,EAAE,OAASA,EAAE,KAAA,GAHJA,EAAE,KAId,CACD,EACD,OAAOob,EACL5b,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,GAAI,SAAU,OAAQ,WAAY,CAAA,EAAM,SAAA+b,CAAA,CAAQ,CAAA,CAExF,CAGA,GAAIX,EAAM,OAAS,SAAU,OAAOG,SACjC,MAAA,CAAK,GAAGrP,EAAQ,MAAO,CAAE,QAAS,OAAQ,WAAY,aAAc,IAAK,GACvE,SAAA,CAAAuP,SACA,MAAA,CAAI,MAAO,CAAE,KAAM,GAClB,SAAA,CAAAzb,EAAAA,IAACyS,GAAA,CAAO,IAAK2I,EAAM,IAAK,IAAKA,EAAM,IAAK,KAAMA,EAAM,KAClD,MAAQ7J,GAA6B6J,EAAM,IAAK,MAAOA,EAAM,MAC7D,SAAU9W,GAAKwP,EAAIsH,EAAM,KAAM9W,CAAC,CAAA,CAAA,EACjCqX,CAAA,CAAA,CACH,CAAA,CAAA,CACF,EAEAxd,EAAAA,KAAC,MAAA,CAAK,GAAG+N,EACP,SAAA,CAAAlM,EAAAA,IAACyS,GAAA,CAAO,MAAO2I,EAAM,MAAO,IAAKA,EAAM,IAAK,IAAKA,EAAM,IAAK,KAAMA,EAAM,KACtE,MAAQ7J,GAA6B6J,EAAM,IAAK,MAAOA,EAAM,MAC7D,SAAU9W,GAAKwP,EAAIsH,EAAM,KAAM9W,CAAC,CAAA,CAAA,EACjCqX,CAAA,EACH,EAIF,GAAIP,EAAM,OAAS,QAAS,OAAOG,SAChC,MAAA,CAAK,GAAGrP,EAAQ,MAAO,CAAE,QAAS,OAAQ,WAAY,aAAc,IAAK,GACvE,SAAA,CAAAuP,SACA,MAAA,CAAI,MAAO,CAAE,KAAM,GAClB,SAAA,CAAAzb,EAAAA,IAAC4R,GAAA,CAAS,KAAMwJ,EAAM,MAAQ,CAAA,EAAI,eAAgBA,EAAM,eACtD,YAAaA,EAAM,aAAe,YAClC,MAAQ7J,IAAmB6J,EAAM,eAAiB,CAAA,EAAK,MACvD,SAAU9W,GAAKwP,EAAIsH,EAAM,KAAM9W,CAAC,CAAA,CAAA,EACjCoX,EAAOC,CAAA,CAAA,CACV,CAAA,CAAA,CACF,EAEAxd,EAAAA,KAAC,MAAA,CAAK,GAAG+N,EACP,SAAA,CAAAlM,EAAAA,IAAC4R,GAAA,CAAS,MAAOwJ,EAAM,MAAO,KAAMA,EAAM,MAAQ,CAAA,EAAI,eAAgBA,EAAM,eAC1E,YAAaA,EAAM,aAAe,YAClC,MAAQ7J,IAAmB6J,EAAM,eAAiB,CAAA,EAAK,MACvD,SAAU9W,GAAKwP,EAAIsH,EAAM,KAAM9W,CAAC,CAAA,CAAA,EACjCoX,EAAOC,CAAA,EACV,EAIF,GAAIP,EAAM,OAAS,SAAU,CAC3B,MAAMY,EAAO,CAAC,CAACzK,EACT1T,EAAUme,EAAOZ,EAAM,KAAWA,EAAM,SAAYA,EAAM,KAC1Da,EAAUD,EAAQZ,EAAM,MAAQA,EAAM,MAAUA,EAAM,SAAWA,EAAM,MAAQA,EAAM,MAC3F,OACEjd,EAAAA,KAAC,MAAA,CAAK,GAAG+N,EACN,SAAA,CAAAqP,GAAUD,GAAMnd,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAA,EACzE,SAAA,CAAA6B,MAAC,OAAI,MAAO,CAAE,MAAOsb,EAAI,WAAY,GAAK,EAC1Cnd,EAAAA,KAAC,QAAA,CAAM,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,OAAQ,SAAA,EACrE,SAAA,CAAA6B,EAAAA,IAACkc,GAAA,CAAO,GAAIF,EAAM,QAAS,IAAMlI,EAAIsH,EAAM,KAAM,CAAC7J,CAAG,CAAA,CAAG,EACvD1T,SAAS,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,EAAK,EAC7Coe,SAAQ,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,CAAA,CAAI,CAAA,CAAA,CAC9C,CAAA,EACF,EACC,CAACV,GAAUpd,EAAAA,KAAC,QAAA,CAAM,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,OAAQ,WAClF,SAAA,CAAA6B,EAAAA,IAACkc,GAAA,CAAO,GAAIF,EAAM,QAAS,IAAMlI,EAAIsH,EAAM,KAAM,CAAC7J,CAAG,CAAA,CAAG,EACvD1T,SAAS,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,EAAK,EAC7Coe,SAAQ,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAA,CAAA,CAAI,CAAA,EAC9C,EACCN,CAAA,EACH,CAEJ,CAEA,OAAO,IACT,EAEMQ,EAAchZ,GAClBA,EAAK,IAAI,CAAC0E,EAAK9H,IACb,MAAM,QAAQ8H,CAAG,EACb7H,EAAAA,IAAC,MAAA,CAAY,MAAO,CAAE,QAAS,OAAQ,IAAK,GAAI,WAAY,YAAA,EAAiB,SAAA6H,EAAI,IAAIsT,CAAW,CAAA,EAAtFpb,CAAwF,EAClGob,EAAYtT,CAAG,CAAA,EAGvB,cACG,MAAA,CAAI,UAAU,MAAM,MAAO,CAAE,QAAS5E,EAAO,SAAW,EAAG,MAAOA,EAAO,OAAS,OAAQ,GAAGjF,GAC3F,SAAA,CAAAme,EAAWlZ,EAAO,MAAQ,EAAE,GAC3BA,EAAO,SAAWuX,IAClBrc,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,eAAgB8E,EAAO,aAAe,aAAc,UAAW,GACpG,SAAA,CAAAjD,EAAAA,IAAC,SAAA,CAAO,UAAU,8BAA8B,QAAS,IAAMib,EAAA,IAAcT,GAAA,YAAAA,EAAWC,IACrF,SAAAxX,EAAO,YAAc,QAAA,CACxB,EACCA,EAAO,cAAgB,IACtBjD,EAAAA,IAAC,UAAO,UAAU,gCAAgC,QAAS,IAAM,CAAE0a,EAAUH,CAAa,EAAGK,EAAU,CAAA,CAAE,CAAG,EACzG,SAAA3X,EAAO,WAAa,OAAA,CACvB,CAAA,CAAA,CAEJ,CAAA,EAEJ,CAEJ,CAEA,SAASiZ,GAAO,CAAE,GAAAE,EAAI,QAAAre,GAAiD,CACrE,OACEI,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,MAAO,GAAI,OAAQ,GAAI,WAAY,CAAA,EAAK,QAAAJ,EAC1E,SAAA,CAAAiC,MAAC,OAAI,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,aAAc,GAAI,WAAYoc,EAAK7e,EAAE,QAAUA,EAAE,OAAQ,WAAY,mBAAqB,EAC/HyC,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,IAAK,EAAG,KAAMoc,EAAK,GAAK,EAAG,MAAO,GAAI,OAAQ,GAAI,aAAc,MAAO,WAAY,OAAQ,WAAY,YAAa,UAAW,0BAAA,CAA2B,CAAG,CAAA,EACnM,CAEJ,CClTA,SAASC,GAAW5c,EAAyD,CAC3E,MAAMoX,EAA0B,CAAA,EAChC,UAAW/W,KAAQL,EACbK,EAAK,OAAS,QAChB+W,EAAO,KAAK,GAAGwF,GAAYvc,EAAqB,OAAS,CAAA,CAAE,CAAC,EAE5D+W,EAAO,KAAK/W,CAAqB,EAGrC,OAAO+W,CACT,CAEO,SAASyF,GAAO,CAAE,MAAA7c,EAAQ,CAAA,EAAI,SAAAuB,EAAU,MAAAhD,GAAsB,CACnEE,EAAAA,UAAUb,EAAc,EAAE,EAE1B,KAAM,CAACkf,EAAWC,CAAY,EAAI3c,EAAAA,SAAkC,IAAM,CACxE,MAAM4c,EAA+B,CAAA,EACrC,UAAWC,KAAML,GAAW5c,CAAK,EAC3Bid,EAAG,KAAID,EAAIC,EAAG,EAAE,EAAI,CAAC,CAACA,EAAG,QAE/B,OAAOD,CACT,CAAC,EAEKE,EAAWN,GAAW5c,CAAK,EAE3B6B,EAAeob,GAAsB,OACzC,GAAI,CAAAA,EAAG,SACP,IAAIA,EAAG,GACL,GAAIA,EAAG,MAAO,CACZ,MAAME,EAAYD,EAAS,OAAOrf,GAAKA,EAAE,QAAUof,EAAG,OAASpf,EAAE,EAAE,EACnEkf,EAAa/a,GAAQ,CACnB,MAAM8H,EAAO,CAAE,GAAG9H,CAAA,EAClB,UAAWnE,KAAKsf,EAAWrT,EAAKjM,EAAE,EAAG,EAAI,GACzC,OAAAiM,EAAKmT,EAAG,EAAG,EAAI,GACRnT,CACT,CAAC,CACH,MAAWmT,EAAG,UACZF,EAAa/a,IAAS,CAAE,GAAGA,EAAM,CAACib,EAAG,EAAG,EAAG,CAACjb,EAAKib,EAAG,EAAG,GAAI,GAG/Dxc,EAAAwc,EAAG,UAAH,MAAAxc,EAAA,KAAAwc,EAAaA,GACTA,EAAG,KAAI1b,GAAA,MAAAA,EAAW0b,EAAG,GAAIA,IAC/B,EAGMG,EAAgB,CAACH,EAAmB5U,IAA0C,OAClF,GAAI4U,EAAG,OAAQ,OAAO,KAEtB,MAAMrc,EAAWqc,EAAG,OAASA,EAAG,KAC1BI,EAAWJ,EAAG,OAAS,OACvB/a,EAAW+a,EAAG,KAAO,OAAaH,EAAUG,EAAG,EAAE,GAAK,CAAC,CAACA,EAAG,OAAU,CAAC,CAACA,EAAG,OAEhF,OAAIA,EAAG,OAAS,aAAeA,EAAG,OAAS,YACxC,MAAA,CAAc,MAAO,CAAE,MAAO,EAAG,WAAYnf,EAAE,OAAQ,OAAQ,UAAW,UAAW,UAAU,EAAtFuK,CAAyF,EAGjG4U,EAAG,OAAS,eACb,MAAA,CAAc,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,WAAY,aAAc,eAAgB,SAAU,QAAS,UAAW,IAAK,GAC5I,SAAA,CAAAA,EAAG,OAAS1c,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,MAAOzC,EAAE,OAAA,EAAY,SAAAmf,EAAG,MAAM,EACxEve,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,SAAU,WAAY,QAAS,OAAQ,WAAY,QAAA,EAC9D,SAAA,CAAAue,EAAG,YACD,OAAA,CAAK,MAAO,CAAE,SAAU,WAAY,KAAM,EAAG,SAAU,GAAI,MAAOnf,EAAE,QAAS,cAAe,OAAQ,OAAQ,GAC1G,WAAG,IAAA,CACN,EAEFyC,EAAAA,IAAC,QAAA,CACC,UAAU,gBACV,MAAO,CAAE,MAAO0c,EAAG,OAAS,IAAK,OAAQ,GAAI,SAAU,GAAI,YAAaA,EAAG,KAAO,GAAK,MAAA,EACvF,YAAaA,EAAG,YAChB,aAAcA,EAAG,MACjB,SAAUle,GAAA,OAAK,OAAA0B,EAAAwc,EAAG,WAAH,YAAAxc,EAAA,KAAAwc,EAAcle,EAAE,OAAO,OAAK,CAAA,CAC7C,CAAA,CACF,CAAA,CAAA,EAfQsJ,CAgBV,EAGE4U,EAAG,OAAS,eACd1c,EAAAA,IAAC,SAAA,CAEC,UAAU,gBACV,MAAO,CAAE,OAAQ,GAAI,SAAU,GAAI,OAAQ,UAAW,OAAQ,EAAG,MAAO0c,EAAG,KAAA,EAC3E,aAAcA,EAAG,MACjB,SAAUle,UAAK,OAAA0B,EAAAwc,EAAG,WAAH,YAAAxc,EAAA,KAAAwc,EAAcle,EAAE,OAAO,QAErC,UAAA0B,EAAAwc,EAAG,QAAH,YAAAxc,EAAU,IAAIM,GAAKR,EAAAA,IAAC,SAAA,CAAqB,MAAOQ,EAAE,MAAQ,SAAAA,EAAE,KAAA,EAA5BA,EAAE,KAAgC,EAAS,EANvEsH,CAAA,EAWP3J,EAAAA,KAAC,SAAA,CAEC,MAAOue,EAAG,QACV,SAAUA,EAAG,SACb,UAAU,4BACV,MAAO,CACL,cAAgBI,EAAU,SAAW,MACrC,UAAgBA,EAAU,UAAY,SACtC,eAAgB,SAChB,UAAgBA,EAAU,GAAK,GAC/B,QAAgBA,EAAU,WAAa,QACvC,IAAgBA,EAAU,EAAI,EAC9B,SAAU,WACV,WAAYnb,EAAWpE,EAAE,UAAY,cACrC,MAAYoE,EAAWpE,EAAE,QAAUmf,EAAG,SAAWnf,EAAE,QAAUA,EAAE,KAC/D,QAAYmf,EAAG,SAAW,IAAO,EACjC,OAAYA,EAAG,SAAW,cAAgB,SAAA,EAE5C,QAAS,IAAMpb,EAAYob,CAAE,EAE5B,SAAA,CAAAA,EAAG,MACF1c,MAAC,OAAA,CAAK,MAAO,CAAE,SAAU8c,EAAU,GAAK,GAAI,WAAY,EAAG,WAAY,CAAA,EAAM,WAAG,KAAK,EAEtFzc,GACCL,EAAAA,IAAC,OAAA,CAAK,MAAO,CACX,SAAY,GACZ,SAAY8c,EAAU,GAAK,OAC3B,UAAYA,EAAU,SAAW,OACjC,WAAY,IACZ,WAAYA,EAAU,SAAW,QAAA,EAEhC,SAAAzc,EACH,EAEDqc,EAAG,QAAU,QACZ1c,EAAAA,IAAC,QAAK,MAAO,CACX,SAAU,WAAY,IAAK,EAAG,MAAO,EACrC,SAAU,GAAI,OAAQ,GACtB,WAAYzC,EAAE,OAAQ,MAAO,OAC7B,aAAc,EAAG,SAAU,EAAG,WAAY,IAC1C,QAAS,OAAQ,WAAY,SAAU,eAAgB,SACvD,QAAS,QAAS,cAAe,MAAA,EAEhC,WAAG,KAAA,CACN,CAAA,CAAA,EA3CGuK,CAAA,CA+CX,EAGMiV,EAAmB,CAACC,EAAoBlV,IAAA,OAC5C9H,OAAAA,EAAAA,IAAC,OAAc,MAAO,CACpB,QAAS,OACT,cAAegd,EAAM,YAAc,MAAQ,SAAW,MACtD,WAAeA,EAAM,YAAc,MAAQ,aAAe,SAC1D,IAAK,CAAA,EAEJ,cAAM,sBAAO,IAAI,CAACC,EAAKC,IACtBD,EAAI,OAAS,QACTF,EAAiBE,EAAoB,GAAGnV,CAAG,IAAIoV,CAAC,EAAE,EAClDL,EAAcI,EAAsB,GAAGnV,CAAG,IAAIoV,CAAC,EAAE,IAT/CpV,CAWV,GAIIqV,EAAgB,CAACH,EAAoBlV,IAAiC,OAC1E,MAAM4M,EAAQsI,EAAM,OAASA,EAAM,MACnC,OACE7e,EAAAA,KAAC,OAAc,MAAO,CACpB,QAAS,OAAQ,cAAe,SAAU,WAAY,UACtD,YAAa,aAAaZ,EAAE,MAAM,GAClC,QAAS,YACT,SAAU,EAAA,EAGV,SAAA,CAAAyC,MAAC,OAAI,MAAO,CACV,QAAS,OACT,cAAegd,EAAM,YAAc,MAAQ,SAAW,MACtD,WAAeA,EAAM,YAAc,MAAQ,UAAY,SACvD,IAAK,EACL,KAAM,CAAA,EAEL,cAAM,sBAAO,IAAI,CAACC,EAAKC,IACtBD,EAAI,OAAS,QACTF,EAAiBE,EAAoBC,CAAC,EACtCL,EAAcI,EAAsBC,CAAC,GAE7C,EAGCxI,GACC1U,EAAAA,IAAC,MAAA,CAAI,MAAO,CACV,SAAU,GAAI,MAAOzC,EAAE,QAAS,UAAW,SAC3C,QAAS,YAAa,UAAW,EACjC,UAAW,aAAaA,EAAE,MAAM,EAAA,EAE/B,SAAAmX,CAAA,CACH,CAAA,CAAA,EA7BM5M,CA+BV,CAEJ,EAEMpG,EAAa,CAAC5B,EAAkBC,IAChCD,EAAK,OAAS,QAAgBqd,EAAcrd,EAAqBC,CAAC,EAC/D8c,EAAc/c,EAAuBC,CAAC,EAG/C,OACEC,EAAAA,IAAC,MAAA,CAAI,UAAU,MAAM,MAAO,CAC1B,QAAS,OAAQ,WAAY,UAC7B,WAAYzC,EAAE,QACd,aAAc,aAAaA,EAAE,MAAM,GACnC,UAAW,OACX,IAAK,EACL,UAAW,GACX,GAAGS,CAAA,EAEF,SAAAyB,EAAM,IAAIiC,CAAU,CAAA,CACvB,CAEJ,CC9NA,SAASb,GAAM,CAAE,MAAAC,GAA4B,CAC3C,OACEd,EAAAA,IAAC,QAAK,MAAO,CACX,SAAU,WAAY,IAAK,EAAG,MAAO,EACrC,SAAU,GAAI,OAAQ,GACtB,WAAYzC,EAAE,OAAQ,MAAO,OAC7B,aAAc,EAAG,SAAU,GAAI,WAAY,IAC3C,QAAS,OAAQ,WAAY,SAAU,eAAgB,SACvD,QAAS,QAAS,WAAY,EAAG,cAAe,MAAA,EAE/C,SAAAuD,EACH,CAEJ,CAEO,SAASsc,GAAO,CAAE,KAAAC,EAAM,MAAA5d,EAAQ,CAAA,EAAI,SAAA6d,EAAW,GAAO,SAAAtc,EAAU,MAAAhD,GAAsB,CAC3F,KAAM,CAACiD,EAAaC,CAAW,EAAOrB,EAAAA,SAAwB,IAAI,EAC5D,CAACsB,EAAaC,CAAc,EAAIvB,EAAAA,SAAkC,IAAM,CAC5E,MAAMwB,EAAgC,CAAA,EACtC,OAAA5B,EAAM,QAAQK,GAAQ,CAAMA,EAAK,IAAMA,EAAK,UAAYA,EAAK,SAAQuB,EAAKvB,EAAK,EAAE,EAAI,GAAM,CAAC,EACrFuB,CACT,CAAC,EACKhD,EAAMO,EAAAA,OAAoB,IAAI,EACpCV,EAAAA,UAAUb,EAAc,EAAE,EAC1Be,GAAgBC,EAAqCS,cAAY,IAAMoC,EAAY,IAAI,EAAG,CAAA,CAAE,CAAC,EAE7F,MAAMI,EAAc,CAACxB,EAAkBC,IAAc,SACnD,GAAI,CAAAD,EAAK,SAIT,IAHIA,EAAK,UAAYA,EAAK,IACxBsB,EAAe9D,IAAM,CAAE,GAAGA,EAAG,CAACwC,EAAK,EAAG,EAAG,CAACxC,EAAEwC,EAAK,EAAG,GAAI,GAEtDI,EAAAJ,EAAK,QAAL,MAAAI,EAAY,OAAQ,CACtBgB,EAAYO,GAAQA,IAAS1B,EAAI,KAAOA,CAAC,EACzC,MACF,EACAI,EAAAL,EAAK,UAAL,MAAAK,EAAA,KAAAL,EAAeA,EAAK,IAAM,IAC1BkB,GAAA,MAAAA,EAAWlB,EAAK,IAAM,IACxB,EAEM4B,EAAa,CAAC5B,EAAkBC,IAA+B,OACnE,GAAID,EAAK,OAAQ,OAAO,KAGxB,GAAIA,EAAK,OAAS,YAAa,OAC7BE,EAAAA,IAAC,OAAY,MAAO,CAClB,CAACsd,EAAW,SAAW,OAAO,EAAG,EACjC,WAAY/f,EAAE,OACd,OAAQ+f,EAAW,UAAY,QAC/B,UAAW,SAAA,GAJHvd,CAKP,EAIL,GAAID,EAAK,OAAS,SAAU,OAAOE,EAAAA,IAAC,MAAA,CAAY,MAAO,CAAE,KAAM,CAAA,CAAE,EAApBD,CAAuB,EAGpE,GAAID,EAAK,OAAS,QAAS,OACzB3B,EAAAA,KAAC,OAAY,MAAO,CAAE,SAAU,WAAY,QAAS,OAAQ,WAAY,SAAU,OAAQ,SACxF,SAAA,CAAA2B,EAAK,YACH,OAAA,CAAK,MAAO,CAAE,SAAU,WAAY,KAAM,EAAG,MAAOvC,EAAE,QAAS,SAAU,GAAI,cAAe,OAAQ,OAAQ,GAC1G,WAAK,IAAA,CACR,EAEFyC,EAAAA,IAAC,QAAA,CACC,UAAU,gBACV,MAAO,CAAE,MAAOF,EAAK,OAAS,IAAK,OAAQ,GAAI,YAAaA,EAAK,KAAO,GAAK,MAAA,EAC7E,YAAaA,EAAK,YAClB,SAAUtB,GAAA,OAAK,OAAA0B,EAAAJ,EAAK,WAAL,YAAAI,EAAA,KAAAJ,EAAgBtB,EAAE,OAAO,OAAK,CAAA,CAC/C,CAAA,EAXQuB,CAYV,EAIF,GAAID,EAAK,OAAS,cAAe,OAC/B3B,EAAAA,KAAC,SAAA,CAEC,MAAO2B,EAAK,QACZ,SAAUA,EAAK,SACf,MAAO,CACL,SAAU,WAAY,MAAO,GAAI,OAAQ,GAAI,QAAS,EACtD,OAAQ,OAAQ,aAAc,MAAO,SAAU,SAC/C,OAAQA,EAAK,SAAW,cAAgB,UACxC,WAAY,cAAe,WAAY,CAAA,EAEzC,QAAS,IAAMwB,EAAYxB,EAAMC,CAAC,EAEjC,SAAA,CAAAD,EAAK,WAAQ,MAAA,CAAI,IAAKA,EAAK,IAAK,IAAKA,EAAK,OAAS,GAAI,MAAO,CAAE,MAAO,OAAQ,OAAQ,OAAQ,UAAW,QAAS,aAAc,OAAS,EAC1IA,EAAK,QAAU,cAAce,GAAA,CAAM,MAAOf,EAAK,KAAA,CAAO,CAAA,CAAA,EAZlDC,CAAA,EAiBT,MAAM4B,EAAa,CAAC,EAAE7B,EAAK,UAAYA,EAAK,IAAMqB,EAAYrB,EAAK,EAAE,GAC/D8B,EAAc,CAAC,GAAE1B,EAAAJ,EAAK,QAAL,MAAAI,EAAY,QAE7Bqd,EAAgC,CACpC,SAAU,WACV,OAAQD,EAAW,GAAK,GACxB,IAAK,EACL,WAAY3b,EAAWpE,EAAE,UAAY,cACrC,MAAOoE,EAAWpE,EAAE,QAAUuC,EAAK,SAAWvC,EAAE,QAAUA,EAAE,KAC5D,QAASuC,EAAK,SAAW,IAAO,EAChC,OAAQA,EAAK,SAAW,cAAgB,UACxC,GAAIwd,EAAW,CACb,MAAO,OAAQ,eAAgB,aAC/B,QAAS,SAAU,aAAc,CAAA,EAC/B,CAAA,CAAC,EAGP,cACG,MAAA,CAAY,MAAO,CAAE,SAAU,YAC9B,SAAA,CAAAnf,EAAAA,KAAC,SAAA,CACC,UAAU,4BACV,MAAO2B,EAAK,QACZ,SAAUA,EAAK,SACf,MAAOyd,EACP,QAAS,IAAMjc,EAAYxB,EAAMC,CAAC,EAEjC,SAAA,CAAAD,EAAK,MAAQE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,GAAI,WAAY,CAAA,EAAM,SAAAF,EAAK,IAAA,CAAK,EACtEA,EAAK,OAASE,MAAC,OAAA,CAAK,MAAO,CAAE,SAAU,EAAA,EAAO,SAAAF,EAAK,KAAA,CAAM,EACzD8B,GAAe5B,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,EAAG,QAAS,IAAM,WAAY,CAAA,EAAK,SAAA,GAAA,CAAC,EAC5EF,EAAK,QAAU,cAAce,GAAA,CAAM,MAAOf,EAAK,KAAA,CAAO,CAAA,CAAA,CAAA,EAGxD8B,GAAeX,IAAalB,GAC3BC,EAAAA,IAACR,GAAA,CACC,MAAOM,EAAK,MACZ,SAAW0d,GAAO,OAChBtc,EAAY,IAAI,EACZsc,EAAG,MAAMtd,EAAAJ,EAAK,UAAL,MAAAI,EAAA,KAAAJ,EAAe0d,EAAG,IAAKxc,GAAA,MAAAA,EAAWwc,EAAG,IACpD,EACA,MAAOF,EAAW,CAAE,KAAM,OAAQ,IAAK,CAAA,EAAM,CAAE,IAAK,MAAA,CAAO,CAAA,CAC7D,CAAA,EAtBMvd,CAwBV,CAEJ,EAEA,OACE5B,EAAAA,KAAC,MAAA,CACC,IAAAE,EACA,UAAU,MACV,MAAO,CACL,QAAS,OACT,cAAeif,EAAW,SAAW,MACrC,WAAYA,EAAW,UAAY,SACnC,WAAY/f,EAAE,QACd,aAAc+f,EAAW,OAAS,aAAa/f,EAAE,MAAM,GACvD,YAAa+f,EAAW,aAAa/f,EAAE,MAAM,GAAK,OAClD,QAAS+f,EAAW,QAAU,SAC9B,UAAWA,EAAW,OAAY,GAClC,IAAK,EACL,GAAGtf,CAAA,EAGJ,SAAA,CAAAqf,GACCrd,EAAAA,IAAC,OAAI,MAAO,CACV,MAAOzC,EAAE,KAAM,WAAY,IAAK,SAAU,GAC1C,QAAS+f,EAAW,gBAAkB,eACtC,aAAcA,EAAW,aAAa/f,EAAE,MAAM,GAAK,OACnD,YAAa+f,EAAW,OAAS,aAAa/f,EAAE,MAAM,GACtD,YAAa+f,EAAW,EAAI,EAC5B,aAAcA,EAAW,EAAI,EAC7B,WAAY,CAAA,EAEX,SAAAD,EACH,EAED5d,EAAM,IAAIiC,CAAU,CAAA,CAAA,CAAA,CAG3B"}
|