@rebasepro/ui 0.9.1-canary.fd3754b → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Chip.d.ts +2 -10
- package/dist/components/DebouncedTextField.d.ts +1 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +1 -1
- package/dist/index.es.js +5 -5
- package/dist/index.es.js.map +1 -1
- package/dist/util/chip_colors.d.ts +9 -1
- package/package.json +5 -6
- package/src/components/Chip.tsx +2 -10
- package/src/components/CircularProgress.tsx +7 -6
- package/src/components/DebouncedTextField.tsx +1 -1
- package/src/components/SearchBar.tsx +2 -1
- package/src/components/VirtualTable/VirtualTable.tsx +3 -1
- package/src/components/VirtualTable/VirtualTableProps.tsx +1 -1
- package/src/util/chip_colors.ts +11 -1
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","names":[],"sources":["../src/util/cls.ts","../src/util/debounce.ts","../src/util/hash.ts","../src/util/chip_colors.ts","../src/components/common/SelectInputLabel.tsx","../src/styles.ts","../src/hooks/PortalContainerContext.tsx","../src/hooks/useInjectStyles.tsx","../src/hooks/useOutsideAlerter.tsx","../src/hooks/useDebouncedCallback.ts","../src/hooks/useDebounceCallback.tsx","../src/hooks/useDebounceValue.tsx","../src/components/Collapse.tsx","../src/components/Autocomplete.tsx","../src/components/Alert.tsx","../src/components/Avatar.tsx","../src/components/BooleanSwitch.tsx","../src/components/BooleanSwitchWithLabel.tsx","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Container.tsx","../src/components/CenteredView.tsx","../src/components/CircularProgress.tsx","../src/components/Typography.tsx","../src/components/CircularProgressCenter.tsx","../src/icons/Icon.tsx","../src/components/ErrorBoundary.tsx","../src/components/Checkbox.tsx","../src/components/Chip.tsx","../src/components/Tooltip.tsx","../src/components/ColorPicker.tsx","../src/components/IconButton.tsx","../src/components/InputLabel.tsx","../src/components/DateTimeField.tsx","../src/components/Dialog.tsx","../src/components/DialogActions.tsx","../src/components/DialogContent.tsx","../src/components/DialogTitle.tsx","../src/components/ExpandablePanel.tsx","../src/components/FileUpload.tsx","../src/components/FilterChip.tsx","../src/components/InfoLabel.tsx","../src/components/Label.tsx","../src/components/LoadingButton.tsx","../src/components/Markdown.tsx","../src/components/Menu.tsx","../src/components/Menubar.tsx","../src/components/Separator.tsx","../src/components/MultiSelect.tsx","../src/components/Paper.tsx","../src/components/RadioGroup.tsx","../src/components/ResizablePanels.tsx","../src/components/SearchBar.tsx","../src/components/Select.tsx","../src/components/Slider.tsx","../src/components/Sheet.tsx","../src/components/TextareaAutosize.tsx","../src/components/TextField.tsx","../src/components/Tabs.tsx","../src/components/Table.tsx","../src/components/Popover.tsx","../src/components/Badge.tsx","../src/components/DebouncedTextField.tsx","../src/components/Skeleton.tsx","../src/components/ToggleButtonGroup.tsx","../src/components/VirtualTable/VirtualTableHeader.tsx","../src/components/VirtualTable/VirtualTableHeaderRow.tsx","../src/components/VirtualTable/VirtualTableRow.tsx","../src/components/VirtualTable/VirtualTableCell.tsx","../src/components/VirtualTable/VirtualTable.tsx","../src/components/VirtualTable/selection/SelectionStore.ts","../src/components/VirtualTable/selection/SelectionContext.tsx","../src/components/VirtualTable/fields/VirtualTableInput.tsx","../src/components/VirtualTable/fields/VirtualTableNumberInput.tsx","../src/components/VirtualTable/fields/VirtualTableSwitch.tsx","../src/components/VirtualTable/fields/VirtualTableDateField.tsx","../src/components/VirtualTable/fields/VirtualTableSelect.tsx","../src/views/ListView.tsx","../src/views/CardView.tsx","../src/views/Kanban/BoardSortableList.tsx","../src/views/Kanban/BoardColumnTitle.tsx","../src/icons/icon_keys.ts","../src/icons/cool_icon_keys.ts","../src/icons/GitHubIcon.tsx","../src/icons/HandleIcon.tsx","../src/views/Kanban/BoardColumn.tsx","../src/views/Kanban/Board.tsx","../src/views/KanbanView.tsx","../src/views/CollectionView/CollectionViewToolbar.tsx","../src/views/CollectionView/DefaultCellRenderer.tsx","../src/views/CollectionView/utils.ts","../src/views/CollectionView/CollectionTableView.tsx","../src/views/CollectionView/CollectionCardView.tsx","../src/views/CollectionView/CollectionListView.tsx","../src/views/CollectionView/CollectionKanbanView.tsx","../src/views/CollectionView/CollectionView.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cls(...classes: ClassValue[]) {\n return twMerge(clsx(classes));\n}\n\n\n","/**\n * @ignore\n */\n\nexport function debounce<T extends (...args: any[]) => unknown>(func: T, wait = 166) {\n let timeout: ReturnType<typeof setTimeout>;\n\n function debounced(this: unknown, ...args: Parameters<T>) {\n const later = () => {\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n\n return debounced as T & Cancelable;\n}\n\n/**\n * @ignore\n */\nexport interface Cancelable {\n clear(): void;\n}\n","export function hashString(str: string): number {\n let hash = 0;\n let i;\n let chr;\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n","import { ChipColorKey, ChipColorScheme } from \"../components\";\nimport { hashString } from \"./hash\";\n\nexport const CHIP_COLORS: Record<string, ChipColorScheme> = {\n blue: { color: \"#cfdfff\",\ntext: \"#102046\",\ndarkColor: \"#2750ae\",\ndarkText: \"#cfdfff\" },\n teal: { color: \"#c2f5e9\",\ntext: \"#012524\",\ndarkColor: \"#06a09b\",\ndarkText: \"#daf3e9\" },\n yellow: { color: \"#ffeab6\",\ntext: \"#3b2501\",\ndarkColor: \"#b87503\",\ndarkText: \"#ffeab6\" },\n pink: { color: \"#ffdaf6\",\ntext: \"#400832\",\ndarkColor: \"#b2158b\",\ndarkText: \"#ffdaf6\" },\n purple: { color: \"#ede2fe\",\ntext: \"#280b42\",\ndarkColor: \"#6b1cb0\",\ndarkText: \"#ede2fe\" },\n cyan: { color: \"#d0f0fd\",\ntext: \"#04283f\",\ndarkColor: \"#0b76b7\",\ndarkText: \"#d0f0fd\" },\n orange: { color: \"#fee2d5\",\ntext: \"#6b2613\",\ndarkColor: \"#d74d26\",\ndarkText: \"#fee2d5\" },\n green: { color: \"#d1f7c4\",\ntext: \"#0b1d05\",\ndarkColor: \"#338a17\",\ndarkText: \"#d1f7c4\" },\n red: { color: \"#ffdce5\",\ntext: \"#4c0c1c\",\ndarkColor: \"#ba1e45\",\ndarkText: \"#ffdce5\" },\n gray: { color: \"#eee\",\ntext: \"#040404\",\ndarkColor: \"#444\",\ndarkText: \"#eee\" },\n indigo: { color: \"#e0e7ff\",\ntext: \"#312e81\",\ndarkColor: \"#4f46e5\",\ndarkText: \"#e0e7ff\" },\n violet: { color: \"#ede9fe\",\ntext: \"#4c1d95\",\ndarkColor: \"#7c3aed\",\ndarkText: \"#ede9fe\" },\n fuchsia: { color: \"#fae8ff\",\ntext: \"#701a75\",\ndarkColor: \"#c026d3\",\ndarkText: \"#fae8ff\" },\n rose: { color: \"#ffe4e6\",\ntext: \"#881337\",\ndarkColor: \"#e11d48\",\ndarkText: \"#ffe4e6\" },\n emerald: { color: \"#d1fae5\",\ntext: \"#064e3b\",\ndarkColor: \"#059669\",\ndarkText: \"#d1fae5\" }\n};\n\nexport function getColorSchemeForKey(key: ChipColorKey): ChipColorScheme {\n return CHIP_COLORS[key];\n}\n\nexport function getColorSchemeForSeed(seed: string): ChipColorScheme {\n const hash: number = hashString(seed);\n const colorKeys = Object.keys(CHIP_COLORS);\n const index = hash % colorKeys.length;\n return CHIP_COLORS[colorKeys[index]];\n}\n","import React from \"react\";\nimport { cls } from \"../../util\";\n\nexport function SelectInputLabel({ children, error }: { children: React.ReactNode, error?: boolean }) {\n return <div className={cls(\"text-sm font-medium ml-3.5 mb-1\",\n error ? \"text-red-500 dark:text-red-600\" : \"text-surface-accent-500 dark:text-surface-accent-300\")}>\n {children}\n </div>;\n}\n","export const focusedDisabled = \"focus-visible:ring-0 focus-visible:ring-offset-0\";\nexport const focusedInvisibleMixin = \"focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-surface-900 focus:dark:bg-opacity-60 focus:bg-surface-accent-100/70 dark:focus:bg-surface-900/60\";\nexport const focusedClasses = \"z-30 outline-hidden outline-none ring-2 ring-primary ring-opacity-50 ring-primary/50 ring-offset-0 ring-offset-transparent \";\nexport const fieldBackgroundMixin = \"bg-surface-accent-200/50 dark:bg-black/30\";\nexport const fieldBackgroundInvisibleMixin = \"bg-surface-accent-200/0 dark:bg-black/0\";\nexport const fieldBackgroundDisabledMixin = \"bg-surface-accent-200/50 dark:bg-black/20\";\nexport const fieldBackgroundHoverMixin = \"hover:bg-surface-accent-200/70 hover:dark:bg-black/50\";\nexport const defaultBorderMixin = \"border-surface-200 dark:border-surface-700/60 \";\nexport const paperMixin = \"bg-white rounded-lg dark:bg-surface-900 border border-surface-200 dark:border-surface-700\";\nexport const cardMixin = \"bg-white dark:bg-surface-900 rounded-lg border border-surface-200 dark:border-surface-700\";\nexport const cardClickableMixin = \"hover:bg-primary/5 dark:hover:bg-primary/5 cursor-pointer transition-colors duration-150\";\nexport const cardSelectedMixin = \"bg-primary-bg/30 dark:bg-primary-bg/10 ring-1 ring-primary/75\";\n","\"use client\";\nimport React, { createContext, useContext, useMemo } from \"react\";\n\nexport interface PortalContainerContextType {\n container: HTMLElement | null;\n}\n\nconst PortalContainerContext = createContext<PortalContainerContextType | undefined>(undefined);\n\nexport interface PortalContainerProviderProps {\n container: HTMLElement | null;\n children: React.ReactNode;\n}\n\n/**\n * Provider component that sets the portal container for all descendants.\n * This can be used at any level of the tree to specify where portals should be attached.\n *\n * @example\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null);\n *\n * <div ref={containerRef}>\n * <PortalContainerProvider container={containerRef.current}>\n * <YourComponents />\n * </PortalContainerProvider>\n * </div>\n * ```\n */\nexport function PortalContainerProvider({ container, children }: PortalContainerProviderProps) {\n const contextValue = useMemo(() => ({ container }), [container]);\n\n return (\n <PortalContainerContext.Provider value={contextValue}>\n {children}\n </PortalContainerContext.Provider>\n );\n}\n\n/**\n * Hook to access the portal container from context.\n * Returns null if no provider is found in the tree.\n *\n * @returns The portal container element or null\n */\nexport function usePortalContainer(): HTMLElement | null {\n const context = useContext(PortalContainerContext);\n return context?.container ?? null;\n}\n\n","\"use client\";\nimport { useEffect } from \"react\";\nimport { usePortalContainer } from \"./PortalContainerContext\";\n\n/**\n * Use this hook to create a `<style>` element and inject it into the DOM.\n * It checks if the style already exists, and if it does, it does not inject it again.\n * @param key\n * @param styles\n */\nexport function useInjectStyles(key: string, styles: string) {\n\n const portalContainer = usePortalContainer();\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const targetContainer: HTMLElement | null = portalContainer ?? document.head;\n\n // Try to find an existing style element within the target container first\n const existingStyle = (targetContainer as HTMLElement).querySelector?.(`#${key}`) as HTMLStyleElement | null;\n\n if (!existingStyle) {\n const style = document.createElement(\"style\");\n style.id = key;\n style.innerHTML = styles;\n (targetContainer || document.head).appendChild(style);\n }\n }, []);\n\n}\n","\"use client\";\n\nimport { RefObject, useEffect } from \"react\";\n\n/**\n * Hook that alerts clicks outside the passed ref\n */\nexport function useOutsideAlerter(ref: RefObject<HTMLElement | null>, onOutsideClick: () => void, active = true): void {\n useEffect(() => {\n if (!active)\n return;\n\n /**\n * Alert if clicked on outside of element\n */\n function handleClickOutside(event: Event) {\n if (isInPresentationLayer(event.target as Node)) {\n return;\n }\n\n if (ref.current && !ref.current.contains(event.target as Node)) {\n onOutsideClick();\n }\n }\n\n // Bind the event listener\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref, active, onOutsideClick]);\n}\n\n/**\n * Check if any parent of the node is a presentation node\n * @param node\n */\nfunction isInPresentationLayer(node: Node | null): boolean {\n if (node instanceof HTMLElement) {\n if (node.getAttribute(\"role\") === \"presentation\")\n return true;\n return isInPresentationLayer(node.parentNode);\n }\n return false;\n}\n","import React from \"react\";\n\nexport function useDebouncedCallback<T>(value: T, callback: () => void, immediate: boolean, timeoutMs = 300) {\n\n const pendingUpdate = React.useRef(false);\n\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const performUpdate = React.useCallback(() => {\n callbackRef.current();\n pendingUpdate.current = false;\n }, []);\n\n const handlerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n React.useEffect(\n () => {\n if (immediate) {\n clearTimeout(handlerRef.current);\n if (pendingUpdate.current) {\n performUpdate();\n }\n return;\n }\n\n pendingUpdate.current = true;\n clearTimeout(handlerRef.current);\n handlerRef.current = setTimeout(performUpdate, timeoutMs);\n return () => {\n if (immediate)\n performUpdate();\n };\n },\n [immediate, value, performUpdate, timeoutMs]\n );\n}\n","import { useCallback, useRef } from \"react\";\n\n\nexport function useDebounceCallback<T extends (...args: any[]) => unknown>(\n callback?: T,\n delay?: number\n): T {\n const timeoutRef = useRef<number | null>(null);\n\n const debouncedCallback = useCallback((...args: Parameters<T>) => {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n callback?.(...args);\n }, delay ?? 200);\n }, [callback, delay]);\n\n return debouncedCallback as T;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function useDebounceValue<T>(value: T, delay = 300): T {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n return debouncedValue;\n}\n","\"use client\";\nimport React from \"react\";\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\n\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\ninterface CollapseProps {\n children?: React.ReactNode;\n className?: string;\n in?: boolean;\n duration?: number;\n}\n\nexport const Collapse = React.memo(({\n children,\n className,\n in: isOpen = false,\n duration = 220\n }: CollapseProps) => {\n\n useInjectStyles(`Collapse-${duration}`, `\n.CollapseContent-${duration} {\n overflow: hidden;\n}\n.CollapseContent-${duration}[data-state='open'] {\n animation: slideDown ${duration}ms ease-out;\n}\n.CollapseContent-${duration}[data-state='closed'] {\n animation: slideUp ${duration}ms ease-in;\n}\n\n@keyframes slideDown {\n from {\n height: 0;\n }\n to {\n height: var(--radix-collapsible-content-height);\n }\n}\n\n@keyframes slideUp {\n from {\n height: var(--radix-collapsible-content-height);\n }\n to {\n height: 0;\n }\n}\n`);\n\n return (\n <Collapsible.Root\n open={isOpen}\n className={className}>\n\n <Collapsible.Content\n className={cls(`CollapseContent-${duration}`)}\n >\n {children}\n </Collapsible.Content>\n </Collapsible.Root>\n )\n});\n\nCollapse.displayName = \"Collapse\";\n","\"use client\";\nimport React from \"react\";\n\nimport { paperMixin } from \"../styles\";\nimport { Collapse } from \"./Collapse\";\nimport { cls } from \"../util\";\nimport { useOutsideAlerter } from \"../hooks\";\n\nexport type AutocompleteProps = {\n children: React.ReactNode;\n open: boolean;\n setOpen: (open: boolean) => void;\n className?: string;\n}\n\nexport const useAutoComplete = ({ ref }: {\n ref: React.MutableRefObject<HTMLDivElement | null>;\n}) => {\n\n const [autoCompleteOpen, setAutoCompleteOpen] = React.useState(false);\n const [inputFocused, setInputFocused] = React.useState(false);\n\n // if ref is not focused, close autocomplete\n React.useEffect(() => {\n if (ref.current) {\n ref.current.onfocus = () => {\n setAutoCompleteOpen(true);\n setInputFocused(true);\n }\n ref.current.onblur = () => {\n setInputFocused(false);\n }\n }\n }, [ref]);\n\n return {\n inputFocused,\n autoCompleteOpen,\n setAutoCompleteOpen\n };\n}\n\nexport function Autocomplete({\n children,\n open,\n setOpen,\n className\n }: AutocompleteProps) {\n\n const autocompleteRef = React.useRef<HTMLDivElement>(null);\n useOutsideAlerter(autocompleteRef, () => setOpen(false));\n\n return <Collapse\n in={open}\n duration={30}\n className={cls(\n \"absolute top-full left-0 right-0 overflow-visible\",\n open ? \"shadow-2xs\" : \"\",\n \"my-2\",\n \"z-20\",\n \"w-full\")}>\n <div ref={autocompleteRef}\n className={cls(\n open ? paperMixin : \"\",\n \"bg-surface-50 dark:bg-surface-800\",\n className\n )}>\n {children}\n </div>\n </Collapse>;\n\n}\n\nexport type AutocompleteItemProps = {\n children: React.ReactNode,\n onClick?: () => void,\n className?: string\n};\n\nexport const AutocompleteItem = React.memo(function AutocompleteItem({\n children,\n onClick,\n className\n }: AutocompleteItemProps) {\n\n return (\n <div\n className={cls(\"flex w-full items-center h-[48px] cursor-pointer hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800\", className)}\n onClick={onClick}>\n {children}\n </div>\n )\n});\n","import * as React from \"react\";\nimport { cls } from \"../util\";\n\nexport interface AlertProps {\n children: React.ReactNode;\n onDismiss?: () => void;\n color?: \"error\" | \"warning\" | \"info\" | \"success\" | \"base\";\n size?: \"small\" | \"medium\" | \"large\";\n action?: React.ReactNode;\n className?: string;\n outerClassName?: string;\n style?: React.CSSProperties;\n}\n\nconst getSizeClasses = (size: \"small\" | \"medium\" | \"large\") => {\n switch (size) {\n case \"small\":\n return \"px-4 py-1\";\n case \"large\":\n return \"px-4 py-4\";\n case \"medium\":\n default:\n return \"px-4 py-2\";\n }\n}\nconst getColorClasses = (severity: string) => {\n switch (severity) {\n case \"error\":\n return \"bg-red-50 dark:bg-red-800 dark:text-red-100 text-red-900 border-l-[3px] border-l-red-500\";\n case \"warning\":\n return \"bg-amber-50 dark:bg-amber-800 dark:text-amber-100 text-amber-900 border-l-[3px] border-l-amber-500\";\n case \"info\":\n return \"bg-blue-100 dark:bg-blue-800 dark:text-blue-100 text-blue-900 border-l-[3px] border-l-blue-500\";\n case \"success\":\n return \"bg-emerald-50 dark:bg-emerald-800 dark:text-emerald-100 text-emerald-900 border-l-[3px] border-l-emerald-500\";\n case \"base\":\n default:\n return \"bg-surface-accent-50 dark:bg-surface-accent-800 dark:text-white text-surface-accent-900 border-l-[3px] border-l-surface-accent-400\";\n }\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n onDismiss,\n color = \"info\",\n size = \"medium\",\n action,\n outerClassName,\n className,\n style\n }) => {\n const classes = getColorClasses(color);\n\n return (\n <div\n style={style}\n className={cls(\n getSizeClasses(size),\n \"w-full\",\n \"font-medium\",\n \"rounded-lg flex items-center gap-2\",\n classes,\n outerClassName)}>\n <div className={cls(\"grow\", className)}>{children}</div>\n {onDismiss && (\n <button\n className=\"text-surface-accent-400 hover:text-surface-accent-600 dark:text-surface-accent-500 dark:hover:text-surface-accent-400\"\n onClick={onDismiss}>\n ×\n </button>\n )}\n {action}\n </div>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { cls } from \"../util\";\n\nexport interface AvatarProps {\n src?: string;\n alt?: string;\n children?: React.ReactNode;\n className?: string;\n outerClassName?: string;\n hover?: boolean;\n style?: React.CSSProperties;\n}\n\nconst AvatarInner: React.ForwardRefRenderFunction<HTMLButtonElement, AvatarProps> = (\n {\n src,\n alt,\n children,\n className,\n style,\n outerClassName,\n hover = true,\n ...props\n },\n ref\n) => {\n const [isImageError, setIsImageError] = useState(false);\n\n const handleImageError = () => {\n setIsImageError(true);\n };\n\n return (\n <button\n ref={ref}\n style={style}\n {...props}\n className={cls(\n \"rounded-full flex items-center justify-center overflow-hidden\",\n \"p-1 w-12 h-12 min-w-12 min-h-12\",\n hover && \"hover:bg-surface-accent-200 dark:hover:bg-surface-accent-700\",\n outerClassName\n )}\n >\n {src && !isImageError ? (\n <img\n className={cls(\n \"bg-surface-accent-100 dark:bg-surface-accent-800\",\n \"w-full h-full object-cover rounded-full\",\n className\n )}\n src={src}\n alt={alt}\n onError={handleImageError}\n />\n ) : (\n <span\n className={cls(\n \"bg-surface-accent-100 dark:bg-surface-accent-800\",\n \"flex items-center justify-center\",\n \"w-full h-full py-1.5 text-lg font-medium text-surface-accent-900 dark:text-white rounded-full\",\n className\n )}\n >\n {children}\n </span>\n )}\n </button>\n );\n};\n\nexport const Avatar = React.forwardRef(AvatarInner);\n","\"use client\";\nimport React from \"react\";\nimport { cls } from \"../util\";\n\nexport type BooleanSwitchProps = {\n value: boolean | null;\n className?: string;\n disabled?: boolean;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n} & ({\n allowIndeterminate: true;\n onValueChange?: (newValue: boolean | null) => void;\n} | {\n allowIndeterminate?: false;\n onValueChange?: (newValue: boolean) => void;\n});\n\nexport const BooleanSwitch = React.forwardRef(function BooleanSwitch({\n value,\n allowIndeterminate,\n className,\n onValueChange,\n disabled = false,\n size = \"medium\",\n ...props\n }: BooleanSwitchProps, ref: React.Ref<HTMLButtonElement>) {\n return <button\n type=\"button\"\n role=\"switch\"\n aria-checked={allowIndeterminate && (value === null || value === undefined) ? \"mixed\" : !!value}\n aria-disabled={disabled || undefined}\n ref={ref}\n tabIndex={disabled ? -1 : undefined}\n onClick={disabled\n ? (e) => e.preventDefault()\n : (e) => {\n e.preventDefault();\n if (allowIndeterminate) {\n if (value === null || value === undefined) onValueChange?.(true)\n else if (value) onValueChange?.(false)\n else onValueChange?.(null);\n } else {\n onValueChange?.(!value);\n }\n }}\n className={cls(\n size === \"smallest\" ? \"w-[34px] h-[18px] min-w-[34px] min-h-[18px]\" : size === \"small\" ? \"w-[38px] h-[22px] min-w-[38px] min-h-[22px]\" : \"w-[44px] h-[26px] min-w-[44px] min-h-[26px]\",\n \"outline-none outline-hidden rounded-full relative shadow-sm\",\n value ? (disabled\n ? \"bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-950 border-surface-accent-100 dark:border-surface-accent-700 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700\"\n : \"ring-secondary ring-1 bg-secondary dark:bg-secondary\") : \"bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-900 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700\",\n className\n )}\n {...props}\n >\n {allowIndeterminate && (value === null || value === undefined) && <div\n key={\"knob\"}\n className={cls(\n \"block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm\",\n disabled ? \"bg-surface-accent-400 dark:bg-surface-accent-600\" : \"bg-surface-accent-400 dark:bg-surface-accent-600\",\n {\n \"w-[21px] h-[10px]\": size === \"medium\" || size === \"large\",\n \"w-[19px] h-[8px]\": size === \"small\",\n \"w-[16px] h-[6px]\": size === \"smallest\",\n \"translate-x-[10px]\": size === \"medium\" || size === \"large\",\n \"translate-x-[9px]\": size === \"small\",\n \"translate-x-[8px]\": size === \"smallest\"\n }\n )}\n />}\n\n {!(allowIndeterminate && (value === null || value === undefined)) && <div\n key={\"knob\"}\n className={cls(\n \"block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm\",\n disabled ? \"bg-surface-accent-300 dark:bg-surface-700\" : (value ? \"bg-white shadow\" : \"bg-surface-accent-600 dark:bg-surface-accent-400\"),\n {\n \"w-[21px] h-[21px]\": size === \"medium\" || size === \"large\",\n \"w-[19px] h-[19px]\": size === \"small\",\n \"w-[16px] h-[16px]\": size === \"smallest\",\n [value ? \"translate-x-[19px]\" : \"translate-x-[3px]\"]: size === \"medium\" || size === \"large\",\n [value ? \"translate-x-[17px]\" : \"translate-x-[2px]\"]: size === \"small\",\n [value ? \"translate-x-[16px]\" : \"translate-x-[1px]\"]: size === \"smallest\"\n }\n )}\n />}\n </button>;\n }\n) as React.ForwardRefExoticComponent<BooleanSwitchProps & React.RefAttributes<HTMLButtonElement>>;\n","\"use client\";\nimport React from \"react\";\nimport {\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundMixin,\n focusedClasses\n} from \"../styles\";\nimport { BooleanSwitch, BooleanSwitchProps } from \"./BooleanSwitch\";\nimport { cls } from \"../util\";\n\nexport type BooleanSwitchWithLabelProps = BooleanSwitchProps & {\n position?: \"start\" | \"end\",\n invisible?: boolean,\n label?: React.ReactNode,\n error?: boolean,\n autoFocus?: boolean,\n fullWidth?: boolean,\n className?: string,\n inputClassName?: string,\n};\n\n/**\n * Simple boolean switch.\n *\n */\nexport const BooleanSwitchWithLabel = function BooleanSwitchWithLabel({\n value,\n position = \"end\",\n size = \"medium\",\n invisible,\n onValueChange,\n error,\n label,\n autoFocus,\n disabled,\n className,\n fullWidth = true,\n inputClassName,\n ...props\n }: BooleanSwitchWithLabelProps) {\n\n const ref = React.useRef<HTMLDivElement | null>(null);\n const refInput = React.useRef<HTMLButtonElement | null>(null);\n const switchLabelId = React.useId();\n const [_, setFocused] = React.useState(autoFocus)\n const onFocus = () => setFocused(true);\n const onBlur = () => setFocused(false);\n\n React.useEffect(() => {\n if (autoFocus) {\n // refInput.current?.focus();\n }\n }, []);\n\n const focus = document.activeElement === refInput?.current || document.activeElement === ref?.current\n\n return (\n <div\n ref={ref}\n onFocus={onFocus}\n onBlur={onBlur}\n role=\"switch\"\n aria-checked={props.allowIndeterminate && (value === null || value === undefined) ? \"mixed\" : !!value}\n aria-disabled={disabled || undefined}\n aria-labelledby={label ? switchLabelId : undefined}\n tabIndex={-1}\n className={cls(\n !invisible && fieldBackgroundMixin,\n !invisible && (disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin),\n disabled ? \"cursor-default\" : \"cursor-pointer\",\n \"rounded-lg max-w-full justify-between box-border relative inline-flex items-center\",\n !invisible && focus && !disabled ? focusedClasses : \"\",\n error ? \"text-red-500 dark:text-red-600\" : (focus && !disabled ? \"text-primary\" : (!disabled ? \"text-text-primary dark:text-text-primary-dark\" : \"text-text-secondary dark:text-text-secondary-dark\")),\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n size === \"small\" || size === \"smallest\" ? \"pl-2\" : \"pl-4\",\n size === \"small\" || size === \"smallest\" ? \"pr-4\" : \"pr-6\",\n position === \"end\" ? \"flex-row-reverse\" : \"flex-row\",\n fullWidth ? \"w-full\" : \"\",\n className\n )}\n onClick={disabled ? undefined : (e) => {\n if (props.allowIndeterminate) {\n const onChange = onValueChange as ((newValue: boolean | null) => void) | undefined;\n if (value === null || value === undefined) onChange?.(true)\n else if (value) onChange?.(false)\n else onChange?.(null);\n } else {\n onValueChange?.(!value);\n }\n // refInput.current?.focus();\n }}\n >\n\n <BooleanSwitch\n value={value}\n ref={refInput}\n size={size}\n className={cls(invisible && focus ? focusedClasses : \"\", inputClassName)}\n disabled={disabled}\n {...props}\n />\n\n <div id={switchLabelId} className={cls(\n \"grow\",\n position === \"end\" ? \"mr-4\" : \"ml-4\",\n size === \"small\" || size === \"smallest\" ? \"text-sm\" : \"text-base\"\n )}>\n {label}\n </div>\n\n </div>\n\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { cls } from \"../util\";\n\nexport type ButtonProps<C extends React.ElementType = \"button\"> = {\n children?: React.ReactNode;\n variant?: \"filled\" | \"outlined\" | \"text\";\n disabled?: boolean;\n color?: \"primary\" | \"secondary\" | \"text\" | \"error\" | \"neutral\";\n size?: \"small\" | \"medium\" | \"large\" | \"xl\" | \"2xl\";\n startIcon?: React.ReactNode;\n fullWidth?: boolean;\n className?: string;\n component?: C;\n onClick?: React.MouseEventHandler<HTMLElement>;\n} & React.ComponentPropsWithoutRef<C>;\n\nconst ButtonInner = React.memo(React.forwardRef<\n HTMLButtonElement,\n ButtonProps<React.ElementType>\n>(({\n children,\n className,\n variant = \"filled\",\n disabled = false,\n size = \"medium\",\n startIcon = null,\n fullWidth = false,\n component: Component,\n color = \"neutral\",\n ...props\n }: ButtonProps<React.ElementType>, ref) => {\n\n const baseClasses =\n \"typography-button h-fit rounded-lg whitespace-nowrap inline-flex items-center justify-center p-2 px-4 focus:outline-none transition-colors ease-in-out duration-150 gap-2\";\n\n const buttonClasses = cls({\n \"w-full\": fullWidth,\n \"w-fit\": !fullWidth,\n\n // Filled Variants\n \"border border-primary bg-primary focus:ring-primary text-white hover:text-white hover:brightness-105\": variant === \"filled\" && color === \"primary\" && !disabled,\n \"border border-secondary bg-secondary focus:ring-secondary text-white hover:text-white hover:brightness-105\": variant === \"filled\" && color === \"secondary\" && !disabled,\n \"border border-red-500 bg-red-500 hover:bg-red-600 focus:ring-red-500 text-white hover:text-white\": variant === \"filled\" && color === \"error\" && !disabled,\n \"border border-surface-accent-200 bg-surface-accent-200 hover:bg-surface-accent-300 focus:ring-surface-accent-400 text-text-primary hover:text-text-primary dark:border-surface-accent-700 dark:bg-surface-accent-700 dark:hover:bg-surface-accent-600 dark:text-text-primary-dark hover:dark:text-text-primary-dark\": variant === \"filled\" && color === \"text\" && !disabled,\n \"border border-transparent bg-surface-100 hover:bg-surface-accent-200 text-text-primary dark:bg-surface-700 dark:hover:bg-surface-accent-700 dark:text-text-primary-dark hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark\": variant === \"filled\" && color === \"neutral\" && !disabled,\n\n // Text Variants\n \"border border-transparent text-primary hover:text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"primary\" && !disabled,\n \"border border-transparent text-secondary hover:text-secondary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"secondary\" && !disabled,\n \"border border-transparent text-red-500 hover:text-red-500 hover:bg-red-500 hover:bg-opacity-10 hover:bg-red-500/10\": variant === \"text\" && color === \"error\" && !disabled,\n \"border border-transparent text-text-primary hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"text\" && !disabled,\n \"border border-transparent text-text-primary hover:text-text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:text-text-primary-dark dark:hover:text-text-primary-dark dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"neutral\" && !disabled,\n\n // Outlined Variants\n \"border border-primary text-primary hover:text-primary hover:bg-primary-bg hover:bg-primary/10\": variant === \"outlined\" && color === \"primary\" && !disabled,\n \"border border-secondary text-secondary hover:text-secondary hover:bg-secondary-bg\": variant === \"outlined\" && color === \"secondary\" && !disabled,\n \"border border-red-500 text-red-500 hover:text-red-500 hover:bg-red-500 hover:text-white\": variant === \"outlined\" && color === \"error\" && !disabled,\n \"border border-surface-accent-400 text-text-primary hover:text-text-primary dark:text-text-primary-dark dark:border-surface-accent-600 hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"outlined\" && color === \"text\" && !disabled,\n \"border border-surface-300 text-text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:border-surface-600 dark:text-text-primary-dark dark:hover:bg-surface-accent-800\": variant === \"outlined\" && color === \"neutral\" && !disabled,\n\n // Disabled states for all variants\n \"text-text-disabled dark:text-text-disabled-dark\": disabled,\n \"border border-transparent opacity-50\": variant === \"text\" && disabled,\n \"border border-surface-500 opacity-50\": variant === \"outlined\" && disabled,\n \"border border-transparent bg-surface-300 dark:bg-surface-500 opacity-40 bg-surface-300/40 dark:bg-surface-500/40\": variant === \"filled\" && disabled\n });\n\n const sizeClasses = cls(\n {\n \"py-1 px-2\": size === \"small\",\n \"py-2 px-4\": size === \"medium\",\n \"py-2.5 px-5\": size === \"large\",\n \"py-3 px-6\": size === \"xl\",\n \"py-4 px-10\": size === \"2xl\"\n }\n );\n\n const iconColorClass = (color === \"neutral\" || color === \"text\") && !disabled\n ? \"[&>svg]:text-surface-accent-500 dark:[&>svg]:text-surface-accent-300\"\n : \"\";\n\n if (Component) {\n return (\n <Component\n ref={ref}\n onClick={props.onClick}\n className={cls(startIcon ? \"pl-3\" : \"\", baseClasses, buttonClasses, sizeClasses, iconColorClass, className)}\n {...props}>\n {startIcon}\n {children}\n </Component>\n );\n }\n\n return (\n <button ref={ref as React.Ref<HTMLButtonElement>}\n type={props.type ?? \"button\"}\n onClick={props.onClick}\n className={cls(startIcon ? \"pl-3\" : \"\", baseClasses, buttonClasses, sizeClasses, iconColorClass, className)}\n disabled={disabled}\n data-variant={variant}\n data-size={size}\n {...props as React.ButtonHTMLAttributes<HTMLButtonElement>}>\n {startIcon}\n {children}\n </button>\n );\n\n}));\n\nButtonInner.displayName = \"Button\"\n\nexport const Button = ButtonInner as React.FC<ButtonProps<React.ElementType>>;\n","\"use client\";\nimport React, { useCallback } from \"react\";\nimport { cardClickableMixin, cardMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\ntype CardProps = {\n children: React.ReactNode;\n style?: React.CSSProperties;\n onClick?: (e?: React.MouseEvent) => void;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({\n children,\n className,\n onClick,\n style,\n ...props\n}, ref) => {\n const onKeyPress = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n onClick?.();\n }\n }, [onClick]);\n\n return (\n <div\n ref={ref}\n onKeyPress={onKeyPress}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick}\n className={cls(cardMixin, onClick && cardClickableMixin, className)}\n style={style}\n {...props}>\n {children}\n </div>\n );\n});\n\nCard.displayName = \"Card\";\n\nexport { Card };\n","\"use client\";\nimport React, { ForwardRefRenderFunction } from \"react\";\nimport { cls } from \"../util\";\n\nexport type ContainerProps = {\n children: React.ReactNode;\n style?: React.CSSProperties;\n className?: string;\n maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"6xl\" | \"7xl\";\n}\n\nconst containerMaxWidths = {\n xs: \"max-w-xs\",\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n \"2xl\": \"max-w-2xl\",\n \"3xl\": \"max-w-3xl\",\n \"4xl\": \"max-w-4xl\",\n \"5xl\": \"max-w-5xl\",\n \"6xl\": \"max-w-6xl\",\n \"7xl\": \"max-w-7xl\"\n}\n\nconst ContainerInner: ForwardRefRenderFunction<HTMLDivElement, ContainerProps> = (\n {\n children,\n className,\n style,\n maxWidth = \"7xl\"\n },\n ref\n) => {\n\n const classForMaxWidth = maxWidth ? containerMaxWidths[maxWidth] : \"\";\n\n return (\n <div\n ref={ref}\n className={cls(\"mx-auto px-3 md:px-4 lg-px-6\",\n classForMaxWidth,\n className)}\n style={style}>\n {children}\n </div>\n );\n}\n\nexport const Container = React.forwardRef(ContainerInner);\n\n","\"use client\";\nimport React from \"react\";\nimport { Container } from \"./Container\";\nimport { cls } from \"../util\";\n\nexport type CenteredViewProps = {\n children: React.ReactNode;\n maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"6xl\" | \"7xl\";\n outerClassName?: string;\n className?: string;\n fullScreen?: boolean;\n};\n\nexport const CenteredView = React.forwardRef<HTMLDivElement, CenteredViewProps>(({\n children,\n maxWidth,\n outerClassName,\n className,\n fullScreen,\n ...rest\n }, ref) => { // Notice how the ref is now received as the second argument\n\n return (\n <div ref={ref}\n className={cls(\"flex flex-col grow\", fullScreen ? \"h-screen\" : \"h-full\", outerClassName)}\n {...rest}>\n <Container className={cls(\"m-auto\", className)} maxWidth={maxWidth}>\n {children}\n </Container>\n </div>\n );\n\n});\n\nCenteredView.displayName = \"CenteredView\";\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport type CircularProgressProps = {\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\",\n className?: string\n}\n\nexport function CircularProgress({\n size = \"medium\",\n className\n }: CircularProgressProps) {\n\n let sizeClasses = \"\";\n if (size === \"smallest\") {\n sizeClasses = \"w-4 h-4\";\n } else if (size === \"small\") {\n sizeClasses = \"w-6 h-6\";\n } else if (size === \"medium\") {\n sizeClasses = \"w-8 h-8 m-1\";\n } else {\n sizeClasses = \"w-10 h-10 m-1\";\n }\n\n let borderClasses = \"\";\n if (size === \"smallest\") {\n borderClasses = \"border-[3px]\";\n } else if (size === \"small\") {\n borderClasses = \"border-[4px]\";\n } else if (size === \"medium\") {\n borderClasses = \"border-4\";\n } else {\n borderClasses = \"border-[6px]\";\n }\n\n return (\n <div\n className={cls(\n sizeClasses,\n borderClasses,\n \"inline-block animate-spin rounded-full border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]\",\n \"text-primary dark:text-primary\",\n className)}\n role=\"status\">\n <span\n className=\"absolute! -m-px! h-px! w-px! overflow-hidden! whitespace-nowrap! border-0! p-0! [clip:rect(0,0,0,0)]!\"\n >\n Loading...\n </span>\n </div>\n );\n}\n","import React, { ReactEventHandler } from \"react\";\nimport { cls } from \"../util\";\n\nexport type TypographyVariant = keyof typeof typographyVariants;\nexport type TypographyProps<C extends React.ElementType = \"span\"> = {\n align?: \"center\" | \"inherit\" | \"justify\" | \"left\" | \"right\";\n children?: React.ReactNode;\n className?: string;\n component?: C;\n gutterBottom?: boolean;\n noWrap?: boolean;\n paragraph?: boolean;\n variant?: TypographyVariant;\n variantMapping?: { [key: string]: string };\n color?: \"inherit\" | \"initial\" | \"primary\" | \"secondary\" | \"disabled\" | \"error\";\n onClick?: ReactEventHandler<HTMLElement>;\n style?: React.CSSProperties;\n} & React.ComponentPropsWithoutRef<C>;\n\nconst typographyVariants = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n subtitle1: \"h6\",\n subtitle2: \"h6\",\n label: \"label\",\n body1: \"p\",\n body2: \"p\",\n inherit: \"p\",\n caption: \"p\",\n button: \"span\"\n};\n\nconst colorToClasses = {\n inherit: \"text-inherit\",\n initial: \"text-current\",\n primary: \"text-text-primary dark:text-text-primary-dark\",\n secondary: \"text-text-secondary dark:text-text-secondary-dark\",\n disabled: \"text-text-disabled dark:text-text-disabled-dark\",\n error: \"text-red-600 dark:text-red-500\"\n};\n\nconst gutterBottomClasses = {\n h1: \"mb-5\",\n h2: \"mb-4\",\n h3: \"mb-4\",\n h4: \"mb-4\",\n h5: \"mb-3\",\n h6: \"mb-3\",\n subtitle1: \"mb-3\",\n subtitle2: \"mb-3\",\n body1: \"mb-3\",\n body2: \"mb-3\",\n inherit: \"mb-3\",\n caption: \"mb-2\",\n button: \"mb-2\",\n label: \"mb-2\"\n};\n\nconst variantToClasses = {\n h1: \"typography-h1\",\n h2: \"typography-h2\",\n h3: \"typography-h3\",\n h4: \"typography-h4\",\n h5: \"typography-h5\",\n h6: \"typography-h6\",\n subtitle1: \"typography-subtitle1\",\n subtitle2: \"typography-subtitle2\",\n body1: \"typography-body1\",\n body2: \"typography-body2\",\n label: \"typography-label\",\n inherit: \"typography-inherit\",\n caption: \"typography-caption\",\n button: \"typography-button\"\n};\n\nexport function Typography<C extends React.ElementType = \"span\">(\n {\n align = \"inherit\",\n color = \"primary\",\n children,\n className,\n component,\n gutterBottom = false,\n noWrap = false,\n paragraph = false,\n variant = \"body1\",\n variantMapping = typographyVariants,\n style,\n onClick,\n ...other\n }: TypographyProps<C>\n) {\n const Component =\n component ||\n (paragraph ? \"p\" : variantMapping[variant] || typographyVariants[variant]) ||\n \"span\";\n\n const classes = cls(\n variantToClasses[variant],\n color ? colorToClasses[color] : \"\",\n align !== \"inherit\" && `text-${align}`,\n gutterBottom && gutterBottomClasses[variant],\n noWrap && \"truncate\",\n paragraph && \"mb-3\",\n className\n );\n\n return (\n <Component className={classes}\n onClick={onClick}\n style={style}\n {...other}>\n {children}\n </Component>\n );\n}\n","import React from \"react\";\nimport { CircularProgress, CircularProgressProps } from \"./CircularProgress\";\nimport { Typography } from \"./Typography\";\n\n/**\n *\n * @param text\n * @param props\n\n * @ignore\n */\nexport function CircularProgressCenter({ text, ...props }: CircularProgressProps & {\n text?: string\n}) {\n return (\n <div\n className=\"flex w-full h-screen max-h-full max-w-full gap-4\">\n <div className=\"m-auto flex flex-col gap-2 items-center\">\n <CircularProgress {...props}/>\n {text && <Typography\n color={\"secondary\"}\n variant={\"caption\"}\n className=\"text-center\">{text}</Typography>}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nexport type IconColor = \"inherit\" | \"primary\" | \"secondary\" | \"disabled\" | \"error\" | \"success\" | \"warning\";\nexport type IconSize = \"smallest\" | \"small\" | \"medium\" | \"large\";\n\n/**\n * Standardized icon size map in px.\n * Use with direct Lucide imports: `<Database size={iconSize.small} />`\n */\nexport const iconSize = {\n smallest: 16,\n small: 20,\n medium: 24,\n large: 28\n} as const satisfies Record<IconSize, number>;\n\nexport type IconProps = {\n size?: IconSize | number,\n color?: IconColor,\n className?: string,\n onClick?: (e: React.SyntheticEvent) => void,\n style?: React.CSSProperties,\n}\n\nexport const colorClassesMapping: Record<IconColor, string> = {\n inherit: \"\",\n primary: \"text-primary\",\n success: \"text-green-500\",\n warning: \"text-yellow-500\",\n secondary: \"text-secondary\",\n disabled: \"text-text-disabled dark:text-text-disabled-dark\",\n error: \"text-red-500\"\n}\n","\nimport React, { ErrorInfo, PropsWithChildren } from \"react\";\n\nimport { AlertCircleIcon, ShieldAlertIcon, RefreshCwIcon, ArrowLeftIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"./Button\";\nimport { cls } from \"../util\";\n\n/**\n * Checks whether the error message relates to missing permissions or\n * authorization failures. Used to show a friendlier message in fullPage mode.\n */\nfunction isPermissionError(error: Error | null): boolean {\n if (!error) return false;\n const msg = error.message?.toLowerCase() ?? \"\";\n const code = (error as { code?: string }).code?.toLowerCase() ?? \"\";\n return msg.includes(\"permission\")\n || msg.includes(\"insufficient\")\n || msg.includes(\"unauthorized\")\n || msg.includes(\"forbidden\")\n || msg.includes(\"access denied\")\n || code === \"permission_denied\"\n || code === \"insufficient_permissions\"\n || (error as { status?: number }).status === 403;\n}\n\nexport interface ErrorBoundaryProps {\n /**\n * When true, renders a full-page centered error screen instead of the\n * compact inline error. Intended for wrapping top-level app roots or\n * major route sections.\n */\n fullPage?: boolean;\n /**\n * Optional callback invoked when the user clicks \"Try again\". If provided,\n * the boundary resets its error state and calls this handler. If omitted,\n * the \"Try again\" button resets the boundary state, re-mounting children.\n */\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n showDetails: boolean;\n}\n\nexport class ErrorBoundary extends React.Component<PropsWithChildren<ErrorBoundaryProps>, ErrorBoundaryState> {\n constructor(props: PropsWithChildren<ErrorBoundaryProps>) {\n super(props);\n this.state = { error: null,\nshowDetails: false };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, _errorInfo: ErrorInfo) {\n console.error(error);\n }\n\n private handleReset = () => {\n this.setState({ error: null,\nshowDetails: false });\n this.props.onReset?.();\n };\n\n private handleReload = () => {\n window.location.reload();\n };\n\n private toggleDetails = () => {\n this.setState(prev => ({ showDetails: !prev.showDetails }));\n };\n\n render() {\n if (this.state.error) {\n if (this.props.fullPage) {\n return this.renderFullPage();\n }\n return this.renderInline();\n }\n\n return this.props.children;\n }\n\n private renderInline() {\n return (\n <div className=\"flex flex-col m-2\">\n <div className=\"flex items-center m-2\">\n <AlertCircleIcon className={\"text-red-500\"} size={iconSize.small}/>\n <div className=\"ml-4\">Error</div>\n </div>\n <Typography variant={\"caption\"}>\n {this.state.error?.message ?? \"See the error in the console\"}\n </Typography>\n </div>\n );\n }\n\n private renderFullPage() {\n const { error, showDetails } = this.state;\n const isPermission = isPermissionError(error);\n\n const Icon = isPermission ? ShieldAlertIcon : AlertCircleIcon;\n const title = isPermission\n ? \"Access denied\"\n : \"Something went wrong\";\n const description = isPermission\n ? \"You don't have permission to access this resource. Please check your account permissions or contact your administrator.\"\n : \"An unexpected error occurred. You can try reloading the page or going back.\";\n\n return (\n <div className={cls(\n \"flex items-center justify-center min-h-[400px] h-full w-full\",\n \"bg-surface-50 dark:bg-surface-950\"\n )}>\n <div className=\"flex flex-col items-center max-w-md px-6 py-10 text-center\">\n <div className={cls(\n \"flex items-center justify-center w-14 h-14 rounded-2xl mb-6\",\n isPermission\n ? \"bg-amber-100 dark:bg-amber-900/30\"\n : \"bg-red-100 dark:bg-red-900/30\"\n )}>\n <Icon\n size={28}\n className={isPermission\n ? \"text-amber-600 dark:text-amber-400\"\n : \"text-red-500 dark:text-red-400\"}\n />\n </div>\n\n <Typography variant={\"h6\"}\n className=\"text-text-primary dark:text-text-primary-dark mb-2\">\n {title}\n </Typography>\n\n <Typography variant={\"body2\"}\n className=\"text-text-secondary dark:text-text-secondary-dark mb-8\">\n {description}\n </Typography>\n\n <div className=\"flex gap-3\">\n <Button\n variant=\"outlined\"\n color=\"neutral\"\n size=\"medium\"\n onClick={this.handleReset}\n >\n <ArrowLeftIcon size={16}/>\n Try again\n </Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n size=\"medium\"\n onClick={this.handleReload}\n >\n <RefreshCwIcon size={16}/>\n Reload page\n </Button>\n </div>\n\n {error?.message && (\n <div className=\"mt-8 w-full\">\n <button\n onClick={this.toggleDetails}\n className={cls(\n \"flex items-center gap-1 mx-auto text-xs\",\n \"text-text-disabled dark:text-text-disabled-dark\",\n \"hover:text-text-secondary dark:hover:text-text-secondary-dark\",\n \"transition-colors cursor-pointer bg-transparent border-none p-0\"\n )}\n >\n Technical details\n {showDetails\n ? <ChevronUpIcon size={14}/>\n : <ChevronDownIcon size={14}/>}\n </button>\n {showDetails && (\n <div className={cls(\n \"mt-3 p-3 rounded-lg text-left text-xs\",\n \"bg-surface-100 dark:bg-surface-800\",\n \"text-text-secondary dark:text-text-secondary-dark\",\n \"font-mono break-all\"\n )}>\n {error.message}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n","\nimport React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\n\nimport { CheckIcon, MinusIcon } from \"lucide-react\";\nimport { cls } from \"../util\";\n\nexport interface CheckboxProps {\n checked: boolean;\n id?: string;\n disabled?: boolean;\n indeterminate?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n padding?: boolean;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n color?: \"primary\" | \"secondary\";\n \"aria-label\"?: string;\n}\n\nconst sizeClasses = {\n large: \"w-6 h-6 rounded flex items-center justify-center\",\n medium: \"w-5 h-5 rounded flex items-center justify-center\",\n small: \"w-4 h-4 rounded flex items-center justify-center\",\n smallest: \"w-4 h-4 rounded flex items-center justify-center\"\n};\n\nconst outerSizeClasses = {\n medium: \"w-10 h-10\",\n small: \"w-8 h-8\",\n large: \"w-12 h-12 \",\n smallest: \"w-8 h-8\"\n}\nconst paddingClasses = {\n medium: \"p-2\",\n small: \"p-2\",\n large: \"p-2\",\n smallest: \"p-2\"\n}\n\nconst colorClasses = {\n primary: \"bg-primary\",\n secondary: \"bg-secondary\"\n}\n\nexport const Checkbox = React.memo(({\n id,\n checked,\n indeterminate = false,\n padding = true,\n disabled,\n size = \"medium\",\n onCheckedChange,\n color = \"primary\",\n \"aria-label\": ariaLabel\n }: CheckboxProps) => {\n\n const isChecked = indeterminate ? false : checked;\n\n const iconSize = size === \"medium\"\n ? 20\n : size === \"small\"\n ? 16\n : size === \"smallest\"\n ? 14\n : 24;\n return (\n <CheckboxPrimitive.Root\n id={id}\n checked={indeterminate || isChecked}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-checked={indeterminate ? \"mixed\" : isChecked}\n onCheckedChange={disabled ? undefined : onCheckedChange}>\n\n <div className={cls(\n padding ? paddingClasses[size] : \"\",\n outerSizeClasses[size],\n \"inline-flex items-center justify-center text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150\",\n onCheckedChange ? \"rounded-full hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-700 dark:hover:bg-opacity-75 dark:hover:bg-surface-accent-700/75\" : \"\",\n onCheckedChange ? \"cursor-pointer\" : \"cursor-default\"\n )}>\n <div\n className={cls(\n \"border-2 relative transition-colors ease-in-out duration-150\",\n sizeClasses[size],\n disabled\n ? (indeterminate || isChecked ? \"bg-surface-accent-400 dark:bg-surface-accent-600\" : \"bg-surface-accent-400 dark:bg-surface-accent-600\")\n : (indeterminate || isChecked ? colorClasses[color] : \"bg-white dark:bg-surface-900\"),\n (indeterminate || isChecked) ? \"text-surface-accent-100 dark:text-surface-accent-900\" : \"\",\n disabled\n ? \"border-transparent\"\n : (indeterminate || isChecked ? \"border-transparent\" : \"border-surface-accent-800 dark:border-surface-accent-500\")\n )}>\n <CheckboxPrimitive.Indicator asChild>\n {indeterminate\n ? (\n <MinusIcon size={iconSize} className={\"absolute\"}/>\n )\n : (\n <CheckIcon size={iconSize} className={\"absolute\"}/>\n )}\n </CheckboxPrimitive.Indicator>\n </div>\n </div>\n </CheckboxPrimitive.Root>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n","import React from \"react\";\nimport { CHIP_COLORS, cls, getColorSchemeForKey } from \"../util\";\n\nexport type ChipColorScheme = {\n color: string;\n text: string;\n /** Background color override for dark mode */\n darkColor?: string;\n /** Text color override for dark mode */\n darkText?: string;\n}\n\nexport type ChipColorKey = keyof typeof CHIP_COLORS;\n\nexport interface ChipProps {\n className?: string;\n children: React.ReactNode;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n colorScheme?: ChipColorScheme | ChipColorKey;\n error?: boolean;\n outlined?: boolean;\n onClick?: () => void;\n icon?: React.ReactNode;\n style?: React.CSSProperties;\n}\n\nconst sizeClassNames = {\n smallest: \"px-1.5 py-px text-[10px]\",\n small: \"px-2 py-0.5 text-xs\",\n medium: \"px-2.5 py-0.5 text-xs\",\n large: \"px-3 py-1 text-xs\"\n}\n\n/**\n * Detect if the app is currently in dark mode by checking the\n * Tailwind `dark` class on the document root.\n */\nfunction isDarkMode(): boolean {\n return typeof document !== \"undefined\" &&\n document.documentElement.classList.contains(\"dark\");\n}\n\n/**\n * Helper to generate rgba from hex or standard colors.\n */\nfunction getRgba(hex: string, alpha: number): string {\n if (!hex || !hex.startsWith(\"#\")) return hex;\n let color = hex.slice(1);\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n const r = parseInt(color.slice(0, 2), 16);\n const g = parseInt(color.slice(2, 4), 16);\n const b = parseInt(color.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n/**\n * @group Preview components\n */\nexport function Chip({\n children,\n colorScheme,\n error,\n outlined,\n onClick,\n icon,\n size = \"medium\",\n className,\n style\n }: ChipProps) {\n\n const usedColorScheme = typeof colorScheme === \"string\" ? getColorSchemeForKey(colorScheme) : colorScheme;\n const dark = isDarkMode();\n\n const hasScheme = error || usedColorScheme;\n\n let textColor = \"\";\n let bgColor = \"\";\n let border = \"\";\n\n if (error) {\n textColor = dark ? \"#f87171\" : \"#dc2626\";\n } else if (usedColorScheme) {\n textColor = dark && usedColorScheme.darkText ? usedColorScheme.darkText : usedColorScheme.text;\n }\n\n if (hasScheme) {\n if (outlined) {\n bgColor = getRgba(textColor, dark ? 0.1 : 0.06);\n border = `1px solid ${getRgba(textColor, dark ? 0.2 : 0.14)}`;\n } else if (error) {\n bgColor = dark ? \"rgba(220, 38, 38, 0.15)\" : \"rgba(239, 68, 68, 0.1)\";\n border = `1px solid ${dark ? \"rgba(220, 38, 38, 0.3)\" : \"rgba(239, 68, 68, 0.2)\"}`;\n } else if (usedColorScheme) {\n bgColor = dark && usedColorScheme.darkColor ? usedColorScheme.darkColor : usedColorScheme.color;\n }\n }\n\n return (\n <div\n className={cls(\"rounded-lg max-w-full w-max h-fit font-medium inline-flex gap-1\",\n \"text-ellipsis\",\n \"items-center\",\n \"transition-colors duration-150\",\n !hasScheme && \"bg-surface-100 dark:bg-surface-800 text-text-secondary dark:text-text-secondary-dark border border-surface-200 dark:border-surface-700\",\n !hasScheme && outlined && \"bg-transparent dark:bg-transparent\",\n onClick ? \"cursor-pointer hover:bg-primary/5 dark:hover:bg-primary/5\" : \"\",\n sizeClassNames[size],\n className)}\n onClick={onClick}\n style={{\n ...(hasScheme ? {\n backgroundColor: bgColor,\n color: textColor,\n border: border || undefined,\n } : {}),\n overflow: \"hidden\",\n ...style\n }}\n >\n {icon}\n {children}\n </div>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type TooltipProps = {\n open?: boolean,\n defaultOpen?: boolean,\n onOpenChange?: (open: boolean) => void,\n side?: \"top\" | \"bottom\" | \"left\" | \"right\",\n align?: \"start\" | \"center\" | \"end\",\n sideOffset?: number,\n title?: string | React.ReactNode,\n delayDuration?: number;\n asChild?: boolean;\n tooltipClassName?: string,\n tooltipStyle?: React.CSSProperties;\n children: React.ReactNode,\n className?: string,\n container?: HTMLElement,\n style?: React.CSSProperties;\n};\n\nexport const Tooltip = ({\n open,\n defaultOpen,\n side = \"bottom\",\n delayDuration = 200,\n sideOffset,\n align,\n onOpenChange,\n title,\n tooltipClassName,\n tooltipStyle,\n children,\n asChild = false,\n container,\n className,\n style\n }: TooltipProps) => {\n\n useInjectStyles(\"Tooltip\", styles);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (container ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n if (!title)\n return <>{children}</>;\n\n const trigger = asChild\n ? <TooltipPrimitive.Trigger asChild={true}>\n {children}\n </TooltipPrimitive.Trigger>\n : <TooltipPrimitive.Trigger asChild={true}>\n <div style={style} className={className}>\n {children}\n </div>\n </TooltipPrimitive.Trigger>;\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root {...(open !== undefined ? { open,\nonOpenChange } : {})} defaultOpen={defaultOpen}>\n {trigger}\n <TooltipPrimitive.Portal container={finalContainer}>\n <TooltipPrimitive.Content\n className={cls(\"TooltipContent\",\n \"max-w-lg leading-relaxed\",\n \"z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 bg-surface-accent-700/90 dark:bg-surface-accent-800/90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100\",\n tooltipClassName)}\n style={tooltipStyle}\n sideOffset={sideOffset === undefined ? 4 : sideOffset}\n align={align}\n side={side}>\n {title}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n\nconst styles = `\n\n.TooltipContent {\n animation-duration: 220ms;\n animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n will-change: transform, opacity;\n}\n\n.TooltipContent[data-state='delayed-open'][data-side='top'] {\n animation-name: slideDownAndFade;\n}\n.TooltipContent[data-state='delayed-open'][data-side='right'] {\n animation-name: slideLeftAndFade;\n}\n.TooltipContent[data-state='delayed-open'][data-side='bottom'] {\n animation-name: slideUpAndFade;\n}\n.TooltipContent[data-state='delayed-open'][data-side='left'] {\n animation-name: slideRightAndFade;\n}\n\n\n@keyframes slideUpAndFade {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideRightAndFade {\n from {\n opacity: 0;\n transform: translateX(-4px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slideDownAndFade {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideLeftAndFade {\n from {\n opacity: 0;\n transform: translateX(4px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}`;\n","\nimport React from \"react\";\nimport { CHIP_COLORS, cls } from \"../util\";\nimport { ChipColorKey, ChipColorScheme } from \"./Chip\";\nimport { CheckIcon } from \"lucide-react\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport interface ColorPickerProps {\n /**\n * Currently selected color key\n */\n value?: ChipColorKey;\n /**\n * Callback when color selection changes. Passes undefined when \"Auto\" is selected.\n */\n onChange: (colorKey: ChipColorKey | undefined) => void;\n /**\n * Size of the color swatches\n */\n size?: \"small\" | \"medium\";\n /**\n * Whether to show the \"Auto\" option that clears the selection\n */\n allowClear?: boolean;\n /**\n * Whether the picker is disabled\n */\n disabled?: boolean;\n}\n\n// Base colors in display order\nconst BASE_COLORS = [\"blue\", \"indigo\", \"violet\", \"purple\", \"fuchsia\", \"pink\", \"rose\", \"red\", \"orange\", \"yellow\", \"green\", \"emerald\", \"teal\", \"cyan\", \"gray\"] as const;\n\n// Helper to get readable name from color key\nfunction getColorDisplayName(colorKey: ChipColorKey): string {\n return `${colorKey.charAt(0).toUpperCase()}${colorKey.slice(1)}`;\n}\n\n/**\n * A color picker component that displays a grid of predefined CHIP_COLORS.\n * Used for selecting colors for enum values, tags, and other chip-based UI elements.\n *\n * @group Form components\n */\nexport function ColorPicker({\n value,\n onChange,\n size = \"medium\",\n allowClear = true,\n disabled = false\n}: ColorPickerProps) {\n\n const swatchSize = size === \"small\" ? \"w-5 h-5\" : \"w-6 h-6\";\n const checkSize = size === \"small\" ? 12 : 14;\n\n return (\n <div className=\"flex flex-col gap-2\">\n {allowClear && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(undefined)}\n className={cls(\n \"flex items-center gap-2 px-2 py-1 rounded text-sm transition-colors\",\n \"hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800\",\n disabled && \"opacity-50 cursor-not-allowed\",\n !value && \"bg-surface-accent-100 dark:bg-surface-accent-800 font-medium\"\n )}\n >\n <div className={cls(\n swatchSize,\n \"rounded-full border-2 border-dashed border-surface-accent-400 dark:border-surface-accent-600\",\n \"flex items-center justify-center\"\n )}>\n {!value && <CheckIcon size={checkSize}/>}\n </div>\n <span className=\"text-surface-accent-700 dark:text-surface-accent-300\">\n Auto (based on ID)\n </span>\n </button>\n )}\n\n <div className=\"flex flex-wrap gap-1.5\">\n {BASE_COLORS.map((base) => {\n const colorKey = base as ChipColorKey;\n const colorScheme = CHIP_COLORS[colorKey] as ChipColorScheme;\n const isSelected = value === colorKey;\n const displayName = getColorDisplayName(colorKey);\n\n return (\n <Tooltip\n key={colorKey}\n title={displayName}\n delayDuration={300}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(colorKey)}\n className={cls(\n swatchSize,\n \"rounded-full transition-all flex items-center justify-center\",\n \"hover:scale-110 hover:shadow-md\",\n \"focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-1\",\n disabled && \"opacity-50 cursor-not-allowed hover:scale-100\",\n isSelected && \"ring-2 ring-primary ring-offset-1\"\n )}\n style={{\n backgroundColor: colorScheme.color\n }}\n aria-label={displayName}\n aria-pressed={isSelected}\n >\n {isSelected && (\n <CheckIcon\n size={checkSize}\n style={{ color: colorScheme.text }}\n />\n )}\n </button>\n </Tooltip>\n );\n })}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport { cls } from \"../util\";\n\nexport type IconButtonProps<C extends React.ElementType> =\n Omit<(C extends \"button\" ? React.ButtonHTMLAttributes<HTMLButtonElement> : React.ComponentProps<C>), \"onClick\">\n & {\n size?: \"medium\" | \"small\" | \"smallest\" | \"large\";\n variant?: \"ghost\" | \"filled\",\n shape?: \"circular\" | \"square\",\n disabled?: boolean;\n toggled?: boolean;\n component?: C;\n onClick?: React.MouseEventHandler<any>;\n \"aria-label\"?: string;\n}\n\nconst buttonClasses = \"hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800 hover:scale-[1.04] active:scale-95 transition-transform\";\nconst baseClasses = \"inline-flex items-center justify-center p-2 text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150\";\nconst colorClasses = \"text-surface-accent-500 visited:text-surface-accent-500 dark:text-surface-accent-300 dark:visited:text-surface-300\";\nconst sizeClasses = {\n medium: \"w-10 !h-10 min-w-10 min-h-10\",\n small: \"w-8 !h-8 min-w-8 min-h-8\",\n smallest: \"w-7 !h-7 min-w-7 min-h-7\",\n large: \"w-12 !h-12 min-w-12 min-h-12\"\n}\nconst shapeClasses = {\n circular: \"rounded-full\",\n square: \"rounded-md\"\n}\n\nconst IconButtonInner = <C extends React.ElementType = \"button\">({\n children,\n className,\n size = \"medium\",\n variant = \"ghost\",\n shape = \"circular\",\n disabled,\n toggled,\n component,\n ...props\n }: IconButtonProps<C>, ref: React.ForwardedRef<HTMLButtonElement>) => {\n\n const bgClasses = variant === \"ghost\" ? \"bg-transparent\" : \"bg-surface-accent-200 bg-opacity-50 bg-surface-accent-200/50 dark:bg-surface-900 dark:bg-opacity-50 dark:bg-surface-900/50\";\n const Component: React.ElementType<any> = component || \"button\";\n const isNativeButton = Component === \"button\";\n return (\n <Component\n type={isNativeButton ? \"button\" : undefined}\n role={isNativeButton ? undefined : \"button\"}\n ref={ref}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : undefined}\n {...props}\n className={cls(\n disabled ? \"opacity-50 pointer-events-none\" : \"cursor-pointer\",\n toggled ? \"outline outline-2 outline-primary\" : \"\",\n \"text-inherit dark:text-inherit\",\n colorClasses,\n bgClasses,\n baseClasses,\n buttonClasses,\n shapeClasses[shape],\n sizeClasses[size],\n className\n )}>\n {children}\n </Component>\n );\n};\n\nexport const IconButton = React.forwardRef(IconButtonInner as React.ForwardRefRenderFunction<HTMLButtonElement, IconButtonProps<any>>) as React.ComponentType<IconButtonProps<any>>;\n","\"use client\";\nimport * as React from \"react\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\nexport type InputLabelProps = {\n children?: React.ReactNode;\n className?: string;\n shrink?: boolean;\n} & React.LabelHTMLAttributes<HTMLLabelElement>;\n\nconst defaultClasses = {\n root: \"origin-left transition-transform block whitespace-nowrap overflow-hidden text-ellipsis max-w-full\",\n shrink: \"transform translate-y-[2px] scale-75 translate-x-[12px]\",\n expanded: \"translate-x-[16px] top-0 transform translate-y-[16px] scale-100\"\n};\n\nexport const InputLabel = React.forwardRef<HTMLLabelElement, InputLabelProps>(function InputLabel(inProps, ref) {\n const {\n shrink,\n className,\n ...other\n } = inProps;\n\n const computedClassName = cls(defaultClasses.root,\n {\n [defaultClasses.shrink]: shrink,\n [defaultClasses.expanded]: !shrink\n }, className);\n\n return (\n <label\n className={cls(\"text-sm font-medium peer-disabled:cursor-not-allowed\",\n defaultBorderMixin, computedClassName)}\n data-shrink={shrink}\n ref={ref}\n {...other}\n />\n );\n});\n","\n\"use client\";\n\nimport React, { useRef, useState } from \"react\";\nimport { CalendarIcon, XIcon, AlertCircleIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport { IconButton } from \"./IconButton\";\nimport { fieldBackgroundDisabledMixin, fieldBackgroundHoverMixin, fieldBackgroundMixin } from \"../styles\";\nimport { InputLabel } from \"./InputLabel\";\nimport { Typography } from \"./Typography\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\nexport type DateTimeFieldProps = {\n value?: Date | null;\n onChange?: (date: Date | null) => void;\n mode?: \"date\" | \"date_time\";\n disabled?: boolean;\n clearable?: boolean;\n error?: boolean;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n label?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n inputClassName?: string;\n invisible?: boolean;\n locale?: string;\n /**\n * IANA timezone string (e.g., \"America/New_York\", \"Europe/London\").\n * Used to display and input dates in the specified timezone.\n * The value passed to onChange will always be in UTC.\n * If not provided, uses the user's local timezone.\n */\n timezone?: string;\n};\n\nexport const DateTimeField: React.FC<DateTimeFieldProps> = ({\n value,\n label,\n onChange,\n disabled,\n clearable,\n mode = \"date\",\n error,\n size = \"large\",\n className,\n style,\n inputClassName,\n invisible,\n timezone\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState<string>(\"\");\n const [isTyping, setIsTyping] = useState(false);\n const invalidValue = value !== undefined && value !== null && (!(value instanceof Date) || isNaN(value.getTime()));\n\n useInjectStyles(\"DateTimeField\", inputStyles);\n\n const handleClear = (e: React.MouseEvent) => {\n e.preventDefault();\n setInternalValue(\"\");\n setIsTyping(false);\n onChange?.(null);\n };\n\n // Convert UTC Date to display string in the specified timezone\n const valueAsInputValue = (\n dateValue: Date | null,\n mode: \"date\" | \"date_time\"\n ) => {\n if (!dateValue || !(dateValue instanceof Date) || isNaN(dateValue.getTime())) {\n return \"\";\n }\n const pad = (n: number) => n.toString().padStart(2, \"0\");\n\n // Use Intl.DateTimeFormat to get date parts in the target timezone\n const options: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n timeZone: timezone // undefined = local timezone\n };\n\n const formatter = new Intl.DateTimeFormat(\"en-CA\", options);\n const parts = formatter.formatToParts(dateValue);\n\n const getPart = (type: string) => parts.find(p => p.type === type)?.value ?? \"\";\n\n const year = getPart(\"year\");\n const month = getPart(\"month\");\n const day = getPart(\"day\");\n\n if (mode === \"date\") {\n return `${year}-${month}-${day}`;\n } else {\n const hours = getPart(\"hour\");\n const minutes = getPart(\"minute\");\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n }\n };\n\n // Get the UTC offset for a specific date in the target timezone (in minutes)\n const getTimezoneOffsetMinutes = (date: Date, tz?: string): number => {\n if (!tz) {\n // Local timezone: use built-in getTimezoneOffset (returns offset in minutes, inverted sign)\n return -date.getTimezoneOffset();\n }\n // For named timezones, calculate the offset by comparing formatted times\n const utcFormatter = new Intl.DateTimeFormat(\"en-CA\", {\n year: \"numeric\",\nmonth: \"2-digit\",\nday: \"2-digit\",\n hour: \"2-digit\",\nminute: \"2-digit\",\nhour12: false,\n timeZone: \"UTC\"\n });\n const tzFormatter = new Intl.DateTimeFormat(\"en-CA\", {\n year: \"numeric\",\nmonth: \"2-digit\",\nday: \"2-digit\",\n hour: \"2-digit\",\nminute: \"2-digit\",\nhour12: false,\n timeZone: tz\n });\n\n const utcParts = utcFormatter.formatToParts(date);\n const tzParts = tzFormatter.formatToParts(date);\n\n const getPart = (parts: Intl.DateTimeFormatPart[], type: string) =>\n parseInt(parts.find(p => p.type === type)?.value ?? \"0\", 10);\n\n const utcDate = new Date(Date.UTC(\n getPart(utcParts, \"year\"),\n getPart(utcParts, \"month\") - 1,\n getPart(utcParts, \"day\"),\n getPart(utcParts, \"hour\"),\n getPart(utcParts, \"minute\")\n ));\n\n const tzDate = new Date(Date.UTC(\n getPart(tzParts, \"year\"),\n getPart(tzParts, \"month\") - 1,\n getPart(tzParts, \"day\"),\n getPart(tzParts, \"hour\"),\n getPart(tzParts, \"minute\")\n ));\n\n return (tzDate.getTime() - utcDate.getTime()) / 60000;\n };\n\n // Handle input value change - convert from display timezone to UTC\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n setInternalValue(inputValue);\n setIsTyping(true);\n\n if (!inputValue) {\n onChange?.(null);\n return;\n }\n\n try {\n let year: number, month: number, day: number, hours = 0, minutes = 0;\n\n if (mode === \"date\") {\n // Parse date-only input: \"YYYY-MM-DD\"\n [year, month, day] = inputValue.split(\"-\").map(Number);\n } else {\n // Parse datetime-local input: \"YYYY-MM-DDTHH:MM\"\n const [datePart, timePart] = inputValue.split(\"T\");\n [year, month, day] = datePart.split(\"-\").map(Number);\n [hours, minutes] = timePart.split(\":\").map(Number);\n }\n\n let resultDate: Date;\n\n if (!timezone) {\n // No timezone specified: interpret input as local time (backward compatible)\n resultDate = new Date(year, month - 1, day, hours, minutes);\n } else {\n // Timezone specified: interpret input as that timezone and convert to UTC\n // We need to find the UTC equivalent of the entered time in the target timezone\n\n // Create a reference UTC date to calculate the offset for this moment\n const refUtcDate = new Date(Date.UTC(year, month - 1, day, hours, minutes));\n const offsetMinutes = getTimezoneOffsetMinutes(refUtcDate, timezone);\n\n // Convert from target timezone to UTC:\n // If user entered 00:00 in Mexico (UTC-6, offset=-360), we subtract the offset\n // Date.UTC gives us 00:00 UTC, subtracting -360 minutes (= adding 360 min) gives 06:00 UTC\n resultDate = new Date(Date.UTC(year, month - 1, day, hours, minutes) - offsetMinutes * 60000);\n }\n\n if (isNaN(resultDate.getTime())) {\n throw new Error(\"Invalid date\");\n }\n\n onChange?.(resultDate);\n } catch (e) {\n // Don't call onChange with null while typing\n return;\n }\n };\n\n const handleFocus = () => {\n setFocused(true);\n setIsTyping(true);\n setInternalValue(valueAsInputValue(value ?? null, mode));\n };\n\n const handleBlur = () => {\n setFocused(false);\n setIsTyping(false);\n };\n\n return (\n <>\n {/* Inject the styles to hide the calendar icon */}\n <style>{inputStyles}</style>\n <div\n className={cls(\n \"rounded-lg relative max-w-full\",\n !invisible && fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n className\n )}\n style={style}\n onClick={() => {\n if (!disabled) {\n inputRef.current?.focus();\n }\n }}\n >\n {label && (\n <InputLabel\n className={cls(\n \"absolute top-1 pointer-events-none\",\n !error\n ? focused\n ? \"text-primary\"\n : \"text-text-secondary dark:text-text-secondary-dark\"\n : \"text-red-500 dark:text-red-500\",\n disabled ? \"opacity-50\" : \"\"\n )}\n shrink={true}\n // shrink={hasValue || focused}\n >\n {label}\n </InputLabel>\n )}\n\n <input\n ref={inputRef}\n type={mode === \"date_time\" ? \"datetime-local\" : \"date\"}\n value={isTyping ? internalValue : valueAsInputValue(value ?? null, mode)}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n className={cls(\n \"w-full outline-hidden bg-transparent leading-normal text-base px-3\",\n clearable ? \"pr-14\" : \"pr-12\",\n \"rounded-lg\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n label ? \"pt-8 pb-2\" : \"py-2\",\n inputClassName,\n disabled &&\n \"border border-transparent outline-hidden opacity-50 dark:opacity-50 text-surface-accent-600 dark:text-surface-accent-500\"\n )}\n />\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n inputRef.current?.showPicker();\n }}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-surface-accent-500!\"\n >\n <CalendarIcon/>\n </IconButton>\n {clearable && value && (\n <IconButton\n onClick={handleClear}\n className=\"absolute right-14 top-1/2 transform -translate-y-1/2 text-surface-accent-400 \"\n >\n <XIcon/>\n </IconButton>\n )}\n </div>\n {invalidValue && (\n <div className=\"flex items-center m-2\">\n <AlertCircleIcon size={iconSize.small} color={\"error\"}/>\n <div className=\"pl-2\">\n <Typography variant={\"body2\"}>\n Invalid date value for this field\n </Typography>\n <Typography variant={\"body2\"}>\n {`The provided value is: ${JSON.stringify(value)}`}\n </Typography>\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst inputStyles = `\n /* Hide the default calendar icon in Chrome, Safari, Edge, Opera */\n input[type=\"date\"]::-webkit-calendar-picker-indicator,\n input[type=\"datetime-local\"]::-webkit-calendar-picker-indicator {\n display: none;\n -webkit-appearance: none;\n }\n /* Hide default calendar icon in Firefox */\n input[type=\"date\"],\n input[type=\"datetime-local\"] {\n -moz-appearance:textfield;\n }\n `;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type DialogProps = {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n className?: string;\n containerClassName?: string;\n fullWidth?: boolean;\n fullHeight?: boolean;\n fullScreen?: boolean;\n scrollable?: boolean;\n maxWidth?: keyof typeof widthClasses;\n modal?: boolean;\n onOpenAutoFocus?: (e: Event) => void;\n onEscapeKeyDown?: (e: KeyboardEvent) => void;\n onPointerDownOutside?: (e: Event) => void;\n onInteractOutside?: (e: Event) => void;\n /**\n * If `true`, the dialog will not focus the first focusable element when opened.\n */\n disableInitialFocus?: boolean;\n portalContainer?: HTMLElement | null;\n \"aria-describedby\"?: string;\n};\n\nconst widthClasses = {\n xs: \"max-w-xs w-xs\",\n sm: \"max-w-sm w-sm\",\n md: \"max-w-md w-md\",\n lg: \"max-w-lg w-lg\",\n xl: \"max-w-xl w-xl\",\n \"2xl\": \"max-w-2xl w-2xl\",\n \"3xl\": \"max-w-3xl w-3xl\",\n \"4xl\": \"max-w-4xl w-4xl\",\n \"5xl\": \"max-w-5xl w-5xl\",\n \"6xl\": \"max-w-6xl w-6xl\",\n \"7xl\": \"max-w-7xl w-7xl\",\n full: \"max-w-full w-full\"\n};\n\nexport const Dialog = ({\n open,\n onOpenChange,\n children,\n className,\n containerClassName,\n fullWidth = true,\n fullHeight,\n fullScreen,\n scrollable = true,\n maxWidth = \"lg\",\n modal = true,\n onOpenAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onInteractOutside,\n disableInitialFocus = true,\n portalContainer,\n \"aria-describedby\": ariaDescribedby\n }: DialogProps) => {\n const [displayed, setDisplayed] = useState(false);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n useEffect(() => {\n if (!open) {\n const timeout = setTimeout(() => {\n setDisplayed(false);\n }, 100);\n return () => clearTimeout(timeout);\n } else {\n setDisplayed(true);\n return () => {\n };\n }\n }, [open]);\n\n return (\n <DialogPrimitive.Root open={displayed || open}\n modal={modal}\n onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal container={finalContainer}>\n\n <div className={cls(\"fixed inset-0 z-50\", containerClassName)}>\n\n <DialogPrimitive.Overlay\n className={cls(\"fixed inset-0 transition-opacity ease-in-out duration-200 bg-black/50 dark:bg-black/60 backdrop-blur-sm\",\n displayed && open ? \"opacity-100\" : \"opacity-0\",\n \"z-50 fixed top-0 left-0 w-full h-full flex justify-center items-center\"\n )}\n style={{\n pointerEvents: displayed ? \"auto\" : \"none\"\n }}\n />\n\n <DialogPrimitive.Content\n onEscapeKeyDown={onEscapeKeyDown}\n onOpenAutoFocus={(e) => {\n if (disableInitialFocus) {\n e.preventDefault();\n }\n onOpenAutoFocus?.(e);\n }}\n onPointerDownOutside={onPointerDownOutside}\n onInteractOutside={onInteractOutside}\n aria-describedby={ariaDescribedby}\n className={cls(\"relative h-full outline-none flex justify-center items-center z-60 opacity-100 transition-all duration-200 ease-in-out\")}\n >\n <div\n className={cls(paperMixin,\n \"rounded-2xl\",\n \"z-60\",\n \"relative\",\n \"overflow-hidden\",\n \"outline-none focus:outline-none\",\n fullWidth && !fullScreen ? \"w-11/12\" : undefined,\n fullHeight && !fullScreen ? \"h-full\" : undefined,\n \"text-surface-accent-900 dark:text-white\",\n \"justify-center items-center\",\n fullScreen ? \"h-screen w-screen\" : \"max-h-[90vh] shadow-lg\",\n \"ease-in-out duration-200\",\n scrollable && \"overflow-y-auto\",\n displayed && open ? \"opacity-100 scale-100\" : \"opacity-0 scale-[0.97]\",\n maxWidth && !fullScreen ? widthClasses[maxWidth] : undefined,\n className\n )}>\n {children}\n </div>\n\n </DialogPrimitive.Content>\n </div>\n\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","import React from \"react\";\nimport { defaultBorderMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\nexport function DialogActions({\n children,\n position = \"sticky\",\n translucent = true,\n className\n }: {\n children: React.ReactNode,\n position?: \"sticky\" | \"absolute\",\n translucent?: boolean,\n className?: string\n}) {\n\n return <div\n className={cls(\n defaultBorderMixin,\n \"pt-2 pb-4 px-4 border-t flex flex-row items-center justify-end bottom-0 right-0 left-0 text-right z-2 gap-2\",\n position,\n \"bg-white bg-opacity-60 bg-white/60 dark:bg-surface-800 dark:bg-opacity-60 dark:bg-surface-800/60\",\n translucent ? \"backdrop-blur-sm\" : \"\",\n className)}>\n {children}\n </div>;\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport function DialogContent({\n children,\n className,\n fullHeight,\n includeMargin = true\n }: {\n children: React.ReactNode,\n includeMargin?: boolean,\n fullHeight?: boolean,\n className?: string\n}) {\n\n if (fullHeight)\n return <div className={\"flex-grow flex flex-col h-full relative\"}>\n {children}\n </div>;\n\n return <div\n className={cls(\"flex-grow\",\n { \"my-8 mx-8\": includeMargin },\n className)}>\n {children}\n </div>;\n}\n","\"use client\";\n\nimport React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport * as VisuallyHidden from \"@radix-ui/react-visually-hidden\";\nimport { Typography, TypographyProps, TypographyVariant } from \"./Typography\";\nimport { cls } from \"../util\";\n\nexport type DialogContentProps = TypographyProps & {\n children: React.ReactNode,\n hidden?: boolean,\n className?: string,\n includeMargin?: boolean,\n variant?: TypographyVariant\n};\n\nexport function DialogTitle({\n children,\n hidden,\n className,\n variant = \"subtitle2\",\n gutterBottom = true,\n includeMargin = true,\n ...props\n }: DialogContentProps) {\n\n const title = <DialogPrimitive.Title asChild>\n <Typography variant={variant}\n className={cls({ \"mt-8 mx-8\": includeMargin }, className)}\n gutterBottom={gutterBottom}\n {...props}>\n {children}\n </Typography>\n </DialogPrimitive.Title>;\n\n if (hidden) {\n return <VisuallyHidden.Root>{title}</VisuallyHidden.Root>\n }\n\n return title;\n}\n","\n\"use client\";\nimport React, { PropsWithChildren, useEffect, useState } from \"react\";\n\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { defaultBorderMixin, fieldBackgroundMixin } from \"../styles\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\nexport function ExpandablePanel({\n title,\n children,\n invisible = false,\n expanded,\n onExpandedChange,\n initiallyExpanded = true,\n titleClassName,\n asField,\n className,\n innerClassName\n }: PropsWithChildren<{\n title: React.ReactNode,\n invisible?: boolean,\n initiallyExpanded?: boolean;\n expanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void,\n titleClassName?: string,\n asField?: boolean,\n className?: string,\n innerClassName?: string\n}>) {\n\n useInjectStyles(\"ExpandablePanel\", `\n.CollapsibleContent {\n overflow: hidden;\n}\n.CollapsibleContent[data-state='open'] {\n animation: slideDown 220ms ease-out\n}\n.CollapsibleContent[data-state='closed'] {\n animation: slideUp 220ms ease-out;\n}\n\n@keyframes slideDown {\n from {\n height: 0;\n }\n to {\n height: var(--radix-collapsible-content-height);\n }\n}\n\n@keyframes slideUp {\n from {\n height: var(--radix-collapsible-content-height);\n }\n to {\n height: 0;\n }\n}`);\n\n const [open, setOpen] = useState(expanded !== undefined ? expanded : initiallyExpanded);\n const [allowOverflow, setAllowOverflow] = useState(open);\n\n useEffect(() => {\n if (open) {\n setTimeout(() => {\n setAllowOverflow(true);\n }, 220);\n } else {\n setAllowOverflow(false);\n }\n }, [open]);\n\n useEffect(() => {\n if (expanded !== undefined)\n setOpen(expanded);\n }, [expanded]);\n\n return (<>\n <Collapsible.Root\n className={cls(\n !invisible && defaultBorderMixin + \" border\",\n \"rounded-lg\",\n \"w-full\",\n className\n )}\n open={open}\n onOpenChange={(updatedOpen: boolean) => {\n onExpandedChange?.(updatedOpen);\n setOpen(updatedOpen);\n }}>\n\n <Collapsible.Trigger asChild>\n <div\n className={cls(\n \"rounded-t flex items-center justify-between w-full min-h-[52px]\",\n \"hover:bg-surface-accent-200 hover:bg-opacity-40 hover:bg-surface-accent-200/40 dark:hover:bg-surface-800 dark:hover:bg-opacity-40 dark:hover:bg-surface-800/40 active:bg-surface-accent-300/50 dark:active:bg-surface-700/50\",\n invisible ? \"border-b px-2\" : \"p-4\",\n open ? \"py-6\" : \"py-4\",\n \"transition-all duration-200\",\n invisible && defaultBorderMixin,\n asField && fieldBackgroundMixin,\n titleClassName,\n \"cursor-pointer\"\n )}\n role=\"button\"\n tabIndex={0}\n aria-expanded={open}\n >\n {title}\n <ChevronDownIcon className={cls(\"transition\", open ? \"rotate-180\" : \"\")}/>\n </div>\n </Collapsible.Trigger>\n\n <Collapsible.Content\n className={cls(\"CollapsibleContent\")}\n style={{\n overflow: allowOverflow ? \"visible\" : \"hidden\"\n }}\n >\n <div className={innerClassName}>\n {children}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n </>\n )\n}\n","\"use client\";\nimport React from \"react\";\nimport { useDropzone } from \"react-dropzone\";\nimport { fieldBackgroundHoverMixin, fieldBackgroundMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { Typography } from \"./Typography\";\n\nexport interface FileUploadError {\n message: string;\n code: string;\n}\n\nexport type OnFileUploadRejected = (fileRejections: {\n file: File;\n errors: readonly FileUploadError[];\n}[], event: object) => void;\n\nexport type OnFilesUploadAdded = (files: File[]) => void;\n\nexport type FileUploadProps = {\n // e.g. accept={{ \"*/image\": [] }}\n accept?: Record<string, string[]>,\n onFilesAdded: OnFilesUploadAdded,\n onFilesRejected?: OnFileUploadRejected,\n maxSize?: number,\n disabled?: boolean;\n maxFiles?: number;\n title?: React.ReactNode;\n uploadDescription?: React.ReactNode;\n preventDropOnDocument?: boolean;\n size?: \"small\" | \"medium\" | \"large\";\n};\n\nexport function FileUpload({\n accept,\n onFilesAdded,\n onFilesRejected,\n maxSize,\n disabled,\n maxFiles,\n title,\n uploadDescription,\n children,\n preventDropOnDocument = true,\n size\n}: React.PropsWithChildren<FileUploadProps>) {\n\n const {\n getRootProps,\n getInputProps,\n isDragActive,\n isDragAccept,\n isDragReject\n } = useDropzone({\n accept,\n noDragEventsBubbling: true,\n maxSize,\n onDrop: onFilesAdded,\n onDropRejected: onFilesRejected,\n disabled,\n maxFiles,\n preventDropOnDocument\n }\n );\n return <div\n {...getRootProps()}\n role=\"button\"\n aria-label={typeof title === \"string\" ? title : (typeof uploadDescription === \"string\" ? uploadDescription : \"Upload file\")}\n aria-disabled={disabled || undefined}\n className={cls(\n fieldBackgroundMixin,\n \"flex gap-2\",\n \"p-4 box-border relative items-center border-2 border-solid border-transparent outline-hidden rounded-lg duration-200 ease-[cubic-bezier(0.4,0,0.2,1)] focus:border-primary-solid\",\n {\n \"h-44\": size === \"large\",\n \"h-28\": size === \"medium\",\n \"h-16\": size === \"small\",\n \"cursor-pointer\": !disabled,\n [fieldBackgroundHoverMixin]: !isDragActive,\n \"transition-colors duration-200 ease-[cubic-bezier(0,0,0.2,1)] border-red-500\": isDragReject,\n \"transition-colors duration-200 ease-[cubic-bezier(0,0,0.2,1)] border-green-500\": isDragAccept\n })}>\n\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"absolute top-2 left-3.5 cursor-inherit\"}>\n {title}\n </Typography>\n\n <input\n {...getInputProps()}/>\n\n {children}\n\n <div\n className=\"grow h-28 box-border flex flex-col items-center justify-center text-center\">\n <Typography align={\"center\"}\n variant={\"label\"}\n className={\"flex flex-row gap-2 justify-center\"}>\n {uploadDescription}\n </Typography>\n </div>\n\n </div>\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport interface FilterChipProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n /**\n * The text label displayed on the chip.\n */\n children: React.ReactNode;\n /**\n * Whether the chip is currently in an active/selected state.\n */\n active?: boolean;\n /**\n * Optional icon rendered before the label.\n */\n icon?: React.ReactNode;\n /**\n * Size variant.\n * @default \"medium\"\n */\n size?: \"small\" | \"medium\";\n /**\n * Whether the chip is disabled.\n */\n disabled?: boolean;\n}\n\nconst sizeClasses = {\n small: \"px-2 py-0.5 text-xs\",\n medium: \"px-2.5 py-1 text-xs\"\n};\n\n/**\n * A toggle chip used for filter presets and similar multi-select controls.\n *\n * Uses an inset box-shadow for the active ring instead of `border` so the\n * chip size stays stable across states and the ring cannot be clipped by\n * parent `overflow-hidden` containers.\n *\n * @group Interactive components\n */\nexport const FilterChip = React.forwardRef<HTMLButtonElement, FilterChipProps>(function FilterChip({\n children,\n active = false,\n onClick,\n icon,\n size = \"medium\",\n className,\n disabled = false,\n ...rest\n}: FilterChipProps, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cls(\n \"inline-flex items-center gap-1 rounded-full\",\n \"font-medium whitespace-nowrap select-none shrink-0\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50\",\n sizeClasses[size],\n active\n ? \"bg-primary/12 text-primary dark:bg-primary/20 dark:text-primary shadow-[inset_0_0_0_1.5px_var(--color-primary)]\"\n : cls(\n \"bg-surface-accent-100 text-text-secondary dark:bg-surface-accent-800 dark:text-text-secondary-dark\",\n !disabled && \"cursor-pointer hover:bg-primary/5 dark:hover:bg-primary/5\"\n ),\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...rest}\n >\n {icon}\n {children}\n </button>\n );\n});\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nconst colorClasses = {\n info: \"bg-sky-200 dark:bg-teal-900\",\n warn: \"bg-orange-200 dark:bg-yellow-950\"\n}\n\nexport function InfoLabel({\n children,\n mode = \"info\"\n }: {\n children: React.ReactNode,\n mode?: \"info\" | \"warn\"\n}) {\n\n return (\n <div\n className={cls(\"my-3 py-2 px-4 rounded-xs\", colorClasses[mode])}>\n {children}\n </div>\n )\n}\n","\"use client\";\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\ntype LabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & {\n border?: boolean,\n onClick?: React.MouseEventHandler<HTMLLabelElement>\n};\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({\n className,\n border,\n onClick,\n ...props\n }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n onClick={onClick}\n className={cls(\"text-sm font-medium peer-disabled:cursor-not-allowed\",\n border && \"border border-surface-300 dark:border-surface-700 rounded-md px-3 py-1.5\",\n onClick && \"hover:cursor-pointer hover:bg-surface-200 dark:hover:bg-surface-800\",\n defaultBorderMixin, className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import React from \"react\";\nimport { Button, ButtonProps } from \"./Button\";\nimport { CircularProgress } from \"./CircularProgress\";\n\nexport type LoadingButtonProps<P extends React.ElementType> = ButtonProps<P> & {\n startIcon?: React.ReactNode;\n loading?: boolean;\n}\n\nexport function LoadingButton<P extends React.ElementType = \"button\">({\n children,\n loading,\n disabled,\n onClick,\n startIcon,\n ...props\n }: LoadingButtonProps<P>) {\n return (\n <Button\n disabled={loading || disabled}\n onClick={onClick}\n component={props.component as React.ElementType}\n {...props}\n >\n {loading && (\n <CircularProgress size={\"smallest\"}/>\n )}\n {!loading && startIcon}\n {children}\n </Button>\n );\n};\n","\"use client\";\nimport React, { useMemo } from \"react\";\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport MarkdownIt from \"markdown-it\";\nimport { cls } from \"../util\";\n\nexport interface MarkdownProps {\n source: string,\n size?: \"small\" | \"medium\" | \"large\" | \"xl\" | \"2xl\";\n className?: string\n}\n\nconst proseClasses = {\n small: \"prose prose-sm typography-body2\",\n medium: \"prose typography-body1\",\n large: \"prose prose-lg\",\n xl: \"prose prose-xl\",\n \"2xl\": \"prose prose-2xl\"\n};\n\n/**\n * Tailwind typography-plugin weight overrides.\n * The plugin defaults to very heavy weights (h1: 800, h2: 700, h3/h4: 600,\n * strong: 600, code: 600) which clash with the Rebase design-system that uses\n * font-light (300) / font-normal (400) for headings.\n * We reset them here so rendered markdown matches the rest of the UI.\n */\nconst proseWeightOverrides = [\n \"prose-headings:font-normal\",\n \"prose-strong:font-semibold\",\n \"prose-code:font-normal\",\n \"prose-blockquote:font-normal\",\n \"prose-a:font-normal\"\n].join(\" \");\n\nconst md = new MarkdownIt({ html: false });\n/**\n * @group Preview components\n */\nexport const Markdown = React.memo<MarkdownProps>(function Markdown({\n source,\n className,\n size = \"medium\"\n }: MarkdownProps) {\n const html = useMemo(() => {\n return md.render(typeof source === \"string\" ? source : \"\");\n }, [source]);\n\n return <div\n className={cls(proseClasses[size], \"dark:prose-invert prose-headings:font-title\", proseWeightOverrides, className)}\n dangerouslySetInnerHTML={{ __html: html }}\n />;\n }\n , equal) as React.FunctionComponent<MarkdownProps>;\n","\"use client\";\nimport React from \"react\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { focusedDisabled, paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type MenuProps = {\n children: React.ReactNode;\n trigger: React.ReactNode;\n\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n\n portalContainer?: HTMLElement | null;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n\n sideOffset?: number;\n className?: string;\n}\n\nconst Menu = React.forwardRef<\n React.ElementRef<typeof DropdownMenu.Trigger>,\n MenuProps\n>(({\n children,\n trigger,\n open,\n defaultOpen,\n side,\n align,\n onOpenChange,\n portalContainer,\n sideOffset = 4,\n className\n }, ref) => {\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n return (\n <DropdownMenu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger\n ref={ref}\n asChild>\n {trigger}\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal container={finalContainer}>\n <DropdownMenu.Content\n side={side}\n sideOffset={sideOffset}\n align={align}\n className={cls(paperMixin, focusedDisabled, \"py-2 z-30\", className)}>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n})\nMenu.displayName = \"Menu\"\n\nexport { Menu }\n\nexport type MenuItemProps = {\n children: React.ReactNode;\n dense?: boolean;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent) => void;\n className?: string;\n};\n\nexport const MenuItem = React.memo(({\n children,\n dense = false, // Default value is false if not provided\n disabled = false,\n onClick,\n className\n }: MenuItemProps) => {\n // Dynamically adjusting the class based on the \"dense\" prop\n const classNames = cls(\n onClick && !disabled && \"cursor-pointer\",\n disabled && \"opacity-50 cursor-not-allowed\",\n \"rounded-md text-sm font-medium text-surface-accent-700 dark:text-surface-accent-300 flex items-center gap-4\",\n !disabled && \"hover:bg-surface-accent-100 dark:hover:bg-surface-accent-900\",\n dense ? \"px-4 py-1.5\" : \"px-4 py-2\",\n className\n );\n\n return (\n <DropdownMenu.Item\n className={classNames}\n disabled={disabled}\n onClick={disabled ? undefined : onClick}>\n {children}\n </DropdownMenu.Item>\n );\n});\n\nMenuItem.displayName = \"MenuItem\";\n","\nimport * as React from \"react\";\n\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\";\nimport { cls } from \"../util\";\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport function Menubar({\n children,\n onSelect,\n className\n }: {\n children: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n className?: string\n}) {\n return (\n <MenubarPrimitive.Root\n onSelect={onSelect}\n className={cls(\"z-10 flex bg-white dark:bg-surface-900 p-[3px] rounded-sm shadow-sm\", className)}>\n {children}\n </MenubarPrimitive.Root>\n )\n}\n\nexport function MenubarMenu({\n children\n }: { children: React.ReactNode }) {\n return (\n <MenubarPrimitive.Menu>\n {children}\n </MenubarPrimitive.Menu>\n )\n}\n\nexport function MenubarTrigger({\n children,\n onSelect,\n className\n }: {\n children: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n className?: string\n}) {\n return (\n <MenubarPrimitive.Trigger\n onSelect={onSelect}\n className={cls(\"py-2 px-3 outline-none select-none font-medium leading-none rounded text-text-primary dark:text-text-primary-dark text-[13px] flex items-center justify-between gap-[2px] data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-900 hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\",\n className)}>\n {children}\n </MenubarPrimitive.Trigger>\n )\n}\n\nexport function MenubarPortal({\n children,\n portalContainer\n }: {\n children: React.ReactNode;\n portalContainer?: HTMLElement | null;\n}) {\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n return (\n <MenubarPrimitive.Portal container={finalContainer}>\n {children}\n </MenubarPrimitive.Portal>\n )\n}\n\nexport function MenubarContent({\n children,\n className,\n align,\n sideOffset,\n alignOffset,\n onSelect,\n ...rest\n }: {\n children: React.ReactNode,\n className?: string,\n onSelect?: (event: React.SyntheticEvent) => void,\n align?: \"start\" | \"center\" | \"end\",\n sideOffset?: number,\n alignOffset?: number\n}) {\n return (\n <MenubarPrimitive.Content\n onSelect={onSelect}\n className={cls(\"min-w-[220px] bg-white dark:bg-surface-900 rounded-md p-[6px] shadow-[0px_10px_38px_-10px_rgba(22,_23,_24,_0.35),_0px_10px_20px_-15px_rgba(22,_23,_24,_0.2)] [animation-duration:_400ms] [animation-timing-function:_cubic-bezier(0.16,_1,_0.3,_1)] will-change-[transform,opacity]\", className)}\n align={align ?? \"start\"}\n sideOffset={sideOffset ?? 5}\n alignOffset={alignOffset ?? -3}\n {...rest}\n >\n {children}\n </MenubarPrimitive.Content>\n )\n}\n\nexport function MenubarItem({\n children,\n leftPadding,\n className,\n disabled,\n onSelect,\n ...rest\n }: {\n children: React.ReactNode,\n onSelect?: (event: Event) => void;\n leftPadding?: boolean,\n className?: string,\n disabled?: boolean\n}) {\n return (\n <MenubarPrimitive.Item\n onSelect={onSelect}\n className={cls(\"group text-[13px] leading-none rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none outline-none data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-900 data-[state=open]:text-text-primary data-[state=open]:dark:text-text-primary-dark data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n leftPadding ? \"pl-5\" : \"\",\n disabled ? \"pointer-events-none text-text-secondary dark:text-text-secondary-dark\" : \"text-text-primary dark:text-text-primary-dark\",\n className)}\n disabled={disabled}\n {...rest}\n >\n {children}\n </MenubarPrimitive.Item>\n )\n}\n\nexport function MenubarSeparator({\n children,\n className,\n ...rest\n }: {\n children?: React.ReactNode,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.Separator\n className={cls(\"h-[1px] bg-surface-accent-100 dark:bg-surface-900 m-[5px]\", className)}\n {...rest}\n >\n {children}\n </MenubarPrimitive.Separator>\n )\n}\n\nexport function MenubarSub({\n children,\n ...rest\n }: {\n children?: React.ReactNode,\n}) {\n return (\n <MenubarPrimitive.Sub\n {...rest}\n >\n {children}\n </MenubarPrimitive.Sub>\n )\n}\n\nexport function MenubarSubTrigger({\n children,\n className,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n onSelect={onSelect}\n className={cls(\"group text-[13px] leading-none text-text-primary dark:text-text-primary-dark rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none outline-none data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-900 data-[state=open]:text-text-primary data-[state=open]:dark:text-text-primary-dark data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n className)}\n {...rest}\n >\n {children}\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nexport function MenubarSubContent({\n children,\n alignOffset,\n className,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n alignOffset?: number,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.SubContent\n onSelect={onSelect}\n alignOffset={alignOffset ?? -5}\n className={cls(\"min-w-[220px] bg-white dark:bg-surface-900 rounded-md p-[6px] shadow-[0px_10px_38px_-10px_rgba(22,_23,_24,_0.35),_0px_10px_20px_-15px_rgba(22,_23,_24,_0.2)] [animation-duration:_400ms] [animation-timing-function:_cubic-bezier(0.16,_1,_0.3,_1)] will-change-[transform,opacity]\",\n className)}\n {...rest}\n >\n {children}\n </MenubarPrimitive.SubContent>\n )\n}\n\nexport function MenubarCheckboxItem({\n children,\n checked,\n onCheckedChange,\n className,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: Event) => void;\n checked?: boolean,\n onCheckedChange?: () => void,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.CheckboxItem\n onSelect={onSelect}\n className={cls(\"text-[13px] leading-none text-text-primary dark:text-text-primary-dark rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none pl-5 outline-none data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n className)}\n checked={checked}\n onCheckedChange={onCheckedChange}\n {...rest}\n >\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nexport function MenubarItemIndicator({\n children,\n className,\n ...rest\n }: {\n children?: React.ReactNode,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.ItemIndicator\n className={cls(\"absolute left-0 w-4 inline-flex items-center justify-center\", className)}\n {...rest}>\n {children ?? <CheckIcon size={iconSize.smallest}/>}\n </MenubarPrimitive.ItemIndicator>\n )\n}\n\nexport function MenubarRadioGroup({\n children,\n className,\n value,\n onValueChange,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n value?: string,\n onValueChange?: (value: string) => void,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.RadioGroup\n className={cls(className)}\n value={value}\n onValueChange={onValueChange}\n onSelect={onSelect}\n {...rest}>\n {children ?? <CheckIcon size={iconSize.small}/>}\n </MenubarPrimitive.RadioGroup>\n )\n}\n\nexport function MenubarRadioItem({\n children,\n className,\n value,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: Event) => void;\n value: string,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.RadioItem\n onSelect={onSelect}\n className={cls(\"text-[13px] leading-none text-text-primary dark:text-text-primary-dark rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none pl-5 outline-none data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n className)}\n value={value}\n {...rest}>\n {children ?? <CheckIcon size={iconSize.small}/>}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nexport function MenubarShortcut({\n children,\n className,\n ...rest\n }: {\n children?: React.ReactNode,\n className?: string,\n}) {\n return (\n <div\n className={cls(\"ml-auto pl-5 group-data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark\",\n className)}\n {...rest}>\n {children}\n </div>\n )\n}\n\nexport function MenubarSubTriggerIndicator() {\n return (\n <div className=\"ml-auto pl-5 \">\n <ChevronRightIcon size={iconSize.small}/>\n </div>\n )\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cls } from \"../util\";\n\nexport function Separator({\n orientation,\n decorative,\n className\n }: {\n orientation: \"horizontal\" | \"vertical\",\n decorative?: boolean,\n className?: string\n}) {\n if (orientation === \"horizontal\")\n return (\n <SeparatorPrimitive.Root\n decorative={decorative}\n orientation=\"horizontal\"\n className={cls(\"dark:bg-surface-700 bg-surface-200 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-4\", className)}/>\n );\n else\n return (\n <SeparatorPrimitive.Root\n className={cls(\"dark:bg-surface-700 bg-surface-200 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px mx-4\", className)}\n decorative={decorative}\n orientation=\"vertical\"\n />\n );\n}\n","\n\"use client\";\nimport { CheckIcon, ChevronDownIcon, XIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\nimport { ChangeEvent, Children, useEffect, useState } from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { cls } from \"../util\";\n\nimport { Separator } from \"./Separator\";\nimport { Chip } from \"./Chip\";\nimport { SelectInputLabel } from \"./common/SelectInputLabel\";\nimport {\n defaultBorderMixin,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundInvisibleMixin,\n fieldBackgroundMixin,\n focusedDisabled\n} from \"../styles\";\nimport { useInjectStyles } from \"../hooks\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type MultiSelectValue = string | number | boolean;\n\n// Make the context properly generic\ninterface MultiSelectContextProps<T extends MultiSelectValue = string> {\n fieldValue?: T[];\n onItemClick: (v: T) => void;\n}\n\n// Create a proper generic context\nexport const MultiSelectContext = React.createContext<MultiSelectContextProps<MultiSelectValue>>(null! as MultiSelectContextProps<MultiSelectValue>);\n\n/**\n * Props for MultiSelect component\n */\ninterface MultiSelectProps<T extends MultiSelectValue = string> {\n modalPopover?: boolean;\n className?: string;\n open?: boolean,\n name?: string,\n id?: string,\n onOpenChange?: (open: boolean) => void,\n value?: T[],\n inputClassName?: string,\n onChange?: React.EventHandler<ChangeEvent<HTMLSelectElement>>,\n onValueChange?: (updatedValue: T[]) => void,\n placeholder?: React.ReactNode,\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\",\n useChips?: boolean,\n label?: React.ReactNode | string,\n disabled?: boolean,\n error?: boolean,\n position?: \"item-aligned\" | \"popper\",\n endAdornment?: React.ReactNode,\n multiple?: boolean,\n includeSelectAll?: boolean,\n includeClear?: boolean,\n inputRef?: React.Ref<HTMLButtonElement>,\n padding?: boolean,\n invisible?: boolean,\n children: React.ReactNode;\n renderValues?: (values: T[]) => React.ReactNode;\n portalContainer?: HTMLElement | null;\n}\n\n// Use generic type for the forwarded ref\nexport const MultiSelect = React.forwardRef<\n HTMLButtonElement,\n MultiSelectProps\n>(\n (\n {\n value,\n size = \"large\",\n label,\n error,\n onValueChange,\n invisible,\n disabled,\n placeholder,\n modalPopover = true,\n includeClear = true,\n includeSelectAll = true,\n useChips = true,\n className,\n inputClassName,\n inputRef,\n children,\n renderValues,\n open,\n onOpenChange,\n portalContainer\n },\n ref\n ) => {\n const [isMounted, setIsMounted] = useState(false);\n const [isPopoverOpen, setIsPopoverOpen] = useState(open ?? false);\n const [selectedValues, setSelectedValues] = useState<string[]>(value ?? []);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const onPopoverOpenChange = (open: boolean) => {\n setIsPopoverOpen(open);\n onOpenChange?.(open);\n }\n\n useEffect(() => {\n setIsPopoverOpen(open ?? false);\n }, [open]);\n\n const allValues = React.useMemo(() => children\n ?\n Children.map(children, (child) => {\n if (React.isValidElement<MultiSelectItemProps>(child)) {\n return child.props.value;\n }\n return null;\n })?.filter(Boolean) ?? []\n : [], [children]);\n\n const optionsMap = React.useMemo(() => {\n const map = new Map<string, React.ReactNode>();\n Children.forEach(children, (child) => {\n if (React.isValidElement<MultiSelectItemProps>(child)) {\n map.set(String(child.props.value), child.props.children);\n }\n });\n return map;\n }, [children]);\n\n React.useEffect(() => {\n setSelectedValues(value ?? []);\n }, [value]);\n\n const updateValues = React.useCallback((values: string[]) => {\n setSelectedValues(values);\n onValueChange?.(values);\n }, [onValueChange]);\n\n const onItemClick = React.useCallback((newValue: MultiSelectValue) => {\n let newSelectedValues: string[];\n if (selectedValues.some(v => String(v) === String(newValue))) {\n newSelectedValues = selectedValues.filter(v => String(v) !== String(newValue));\n } else {\n newSelectedValues = [...selectedValues, String(newValue)];\n }\n updateValues(newSelectedValues);\n }, [selectedValues, updateValues]);\n\n const handleInputKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (event.key === \"Enter\") {\n onPopoverOpenChange(true);\n } else if (event.key === \"Backspace\" && !event.currentTarget.value) {\n const newSelectedValues = [...selectedValues];\n newSelectedValues.pop();\n updateValues(newSelectedValues);\n }\n };\n\n const toggleOption = (value: string) => {\n const newSelectedValues = selectedValues.some(v => String(v) === String(value))\n ? selectedValues.filter(v => String(v) !== String(value))\n : [...selectedValues, value];\n updateValues(newSelectedValues);\n };\n\n const handleClear = () => {\n updateValues([]);\n };\n\n const handleTogglePopover = () => {\n onPopoverOpenChange(!isPopoverOpen);\n };\n\n const toggleAll = () => {\n if (selectedValues.length === allValues.length) {\n handleClear();\n } else {\n updateValues(allValues);\n }\n onPopoverOpenChange(false);\n };\n\n useInjectStyles(\"MultiSelect\", `\n[cmdk-group] {\n max-height: 45vh;\n overflow-y: auto;\n // width: 400px;\n} `)\n\n const contextValue = React.useMemo(() => ({\n fieldValue: selectedValues,\n onItemClick\n }), [selectedValues, onItemClick]);\n\n return (\n <MultiSelectContext.Provider value={contextValue}>\n\n {typeof label === \"string\" ? <SelectInputLabel error={error}>{label}</SelectInputLabel> : label}\n\n <PopoverPrimitive.Root\n open={isMounted && isPopoverOpen}\n onOpenChange={onPopoverOpenChange}\n modal={modalPopover}\n >\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={inputRef ?? ref}\n onClick={handleTogglePopover}\n className={cls(\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n {\n \"py-1\": size === \"small\" || size === \"smallest\",\n \"py-2\": size === \"medium\" || size === \"large\"\n },\n {\n \"px-2\": size === \"small\" || size === \"smallest\",\n \"px-4\": size === \"medium\" || size === \"large\"\n },\n \"select-none rounded-lg text-sm\",\n \"focus:ring-0 focus-visible:ring-0 outline-none focus:outline-none focus-visible:outline-none\",\n invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n className,\n inputClassName\n )}\n >\n {selectedValues.length > 0 ? (\n <div className=\"flex justify-between items-center w-full\">\n <div className=\"flex flex-wrap items-center gap-1.5 text-start\">\n {renderValues && renderValues(selectedValues)}\n {!renderValues && selectedValues.map((value) => {\n\n const optionChildren = optionsMap.get(String(value));\n if (!useChips) {\n return optionChildren;\n }\n return (\n <Chip\n size={\"medium\"}\n key={String(value)}\n className={cls(\"flex flex-row items-center p-1\")}\n >\n {optionChildren}\n <XIcon\n size={iconSize.smallest}\n onClick={(event) => {\n event.stopPropagation();\n toggleOption(value);\n }}\n />\n </Chip>\n );\n })}\n </div>\n <div className=\"flex items-center justify-between\">\n {includeClear && <XIcon\n className={\"ml-4\"}\n size={iconSize.small}\n onClick={(event) => {\n event.stopPropagation();\n handleClear();\n }}\n />}\n <div className={cls(\"px-2 h-full flex items-center\")}>\n <ChevronDownIcon size={size === \"large\" ? iconSize.medium : iconSize.small}\n className={cls(\"transition\", isPopoverOpen ? \"rotate-180\" : \"\")}/>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-between w-full mx-auto\">\n <span className=\"text-sm\">\n {placeholder}\n </span>\n <div className={cls(\"px-2 h-full flex items-center\")}>\n <ChevronDownIcon size={size === \"large\" ? iconSize.medium : iconSize.small}\n className={cls(\"transition\", isPopoverOpen ? \"rotate-180\" : \"\")}/>\n </div>\n </div>\n )}\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={finalContainer}>\n <PopoverPrimitive.Content\n className={cls(\"z-50 overflow-hidden border bg-white dark:bg-surface-800 rounded-lg w-[400px]\", defaultBorderMixin)}\n align=\"start\"\n sideOffset={8}\n onEscapeKeyDown={() => onPopoverOpenChange(false)}\n >\n <CommandPrimitive>\n <div className={\"flex flex-row items-center\"}>\n <CommandPrimitive.Input\n className={cls(focusedDisabled, \"bg-transparent outline-none flex-1 h-full w-full m-4 flex-grow text-surface-accent-900 dark:text-white\")}\n placeholder=\"Search...\"\n onKeyDown={handleInputKeyDown}\n />\n {selectedValues.length > 0 && (\n <div\n onClick={handleClear}\n className=\"text-sm justify-center cursor-pointer py-3 px-4 text-text-secondary dark:text-text-secondary-dark\">\n Clear\n </div>\n )}\n </div>\n <Separator orientation={\"horizontal\"} className={\"my-0\"}/>\n <CommandPrimitive.List>\n <CommandPrimitive.Empty className={\"px-4 py-2 text-sm text-text-secondary dark:text-text-secondary-dark\"}>\n No results found.\n </CommandPrimitive.Empty>\n <CommandPrimitive.Group>\n {includeSelectAll && <CommandPrimitive.Item\n key=\"all\"\n onSelect={toggleAll}\n className={\n cls(\n \"flex flex-row items-center gap-1.5\",\n \"cursor-pointer\",\n \"m-1\",\n \"ring-offset-transparent\",\n \"p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-primary/75 aria-[selected=true]:ring-offset-2\",\n \"aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\",\n \"cursor-pointer p-2 rounded aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\"\n )\n }\n >\n <InnerCheckBox checked={selectedValues.length === allValues.length}/>\n <span className={\"text-sm text-text-secondary dark:text-text-secondary-dark\"}>(Select All)</span>\n </CommandPrimitive.Item>}\n {children}\n </CommandPrimitive.Group>\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </MultiSelectContext.Provider>\n );\n }\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n\nexport interface MultiSelectItemProps<T extends MultiSelectValue = string> {\n value: T;\n children?: React.ReactNode,\n className?: string;\n}\n\nexport const MultiSelectItem = React.memo(function MultiSelectItem<T extends MultiSelectValue = string>({\n children,\n value,\n className\n}: MultiSelectItemProps<T>) {\n const context = React.useContext(MultiSelectContext);\n if (!context) throw new Error(\"MultiSelectItem must be used inside a MultiSelect\");\n const {\n fieldValue,\n onItemClick\n } = context;\n\n const isSelected = (fieldValue ?? []).some(v => String(v) === String(value));\n\n return <CommandPrimitive.Item\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={(_) => {\n onItemClick(value);\n }}\n className={cls(\n \"flex flex-row items-center gap-1.5\",\n isSelected ? \"bg-surface-accent-200 dark:bg-surface-accent-950\" : \"\",\n \"cursor-pointer\",\n \"m-1\",\n \"ring-offset-transparent\",\n \"p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-primary/75 aria-[selected=true]:ring-offset-2\",\n \"aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\",\n \"cursor-pointer p-2 rounded aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\",\n \"text-surface-accent-700 dark:text-surface-accent-300\",\n className\n )}\n >\n <InnerCheckBox checked={isSelected}/>\n {children}\n </CommandPrimitive.Item>;\n});\n\nconst InnerCheckBox = React.memo(function InnerCheckBox({ checked }: { checked: boolean }) {\n return <div className={cls(\n \"p-2\",\n \"w-8 h-8\",\n \"inline-flex items-center justify-center text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150\"\n )}>\n <div\n className={cls(\n \"border-2 relative transition-colors ease-in-out duration-150\",\n \"w-4 h-4 rounded flex items-center justify-center\",\n (checked ? \"bg-primary\" : \"bg-white dark:bg-surface-accent-900\"),\n (checked) ? \"text-surface-accent-100 dark:text-surface-accent-900\" : \"\",\n (checked ? \"border-transparent\" : \"border-surface-accent-800 dark:border-surface-accent-200\")\n )}>\n {checked && <CheckIcon size={iconSize.smallest} className={\"absolute\"}/>}\n </div>\n </div>\n});\n","import React from \"react\";\n\nimport { paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\nexport function Paper({\n children,\n style,\n className\n }: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n className?: string;\n\n}) {\n return (\n <div\n className={cls(paperMixin, className)}\n style={style}>\n {children}\n </div>\n )\n}\n","\"use client\";\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { cls } from \"../util\";\n\nexport interface RadioGroupProps {\n id?: string;\n children: React.ReactNode;\n name?: string\n required?: boolean;\n disabled?: boolean;\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean;\n defaultValue?: string;\n value?: string;\n\n onValueChange?(value: string): void;\n\n className?: string;\n}\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(({\n className,\n ...props\n }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cls(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nexport interface RadioGroupItemProps {\n id?: string;\n value: string;\n checked?: boolean;\n required?: boolean;\n className?: string;\n disabled?: boolean;\n}\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({\n className,\n ...props\n }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cls(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <div className=\"h-2.5 w-2.5 fill-current text-current bg-primary rounded-lg\"/>\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\nexport type ResizablePanelsProps = {\n firstPanel: React.ReactNode;\n secondPanel: React.ReactNode;\n /** Whether the first panel is visible (e.g. Sidebar) */\n showFirstPanel?: boolean;\n /** Whether the second panel is visible (e.g. Results) */\n showSecondPanel?: boolean;\n /** 0-100 representing the width/height of the first panel */\n panelSizePercent: number;\n onPanelSizeChange: (sizePercent: number) => void;\n minPanelSizePx?: number;\n orientation?: \"horizontal\" | \"vertical\";\n animateLayout?: boolean;\n className?: string;\n stacked?: boolean;\n};\n\nexport function ResizablePanels({\n firstPanel,\n secondPanel,\n showFirstPanel = true,\n showSecondPanel = true,\n panelSizePercent,\n onPanelSizeChange,\n minPanelSizePx = 200,\n orientation = \"horizontal\",\n animateLayout = true,\n className,\n stacked = false\n}: ResizablePanelsProps) {\n\n const containerRef = useRef<HTMLDivElement>(null);\n const isResizingRef = useRef(false);\n\n // For local layout tracking without triggering React rerenders during drag\n const firstPanelRef = useRef<HTMLDivElement>(null);\n const startPosRef = useRef(0);\n const startSizeRef = useRef(0);\n\n const [isResizing, setIsResizing] = useState(false);\n const isHorizontal = orientation === \"horizontal\";\n\n const handleResizeStart = useCallback((e: React.MouseEvent) => {\n if (!showFirstPanel || !showSecondPanel) return;\n\n e.preventDefault();\n isResizingRef.current = true;\n setIsResizing(true);\n\n startPosRef.current = isHorizontal ? e.clientX : e.clientY;\n\n if (firstPanelRef.current) {\n const rect = firstPanelRef.current.getBoundingClientRect();\n startSizeRef.current = isHorizontal ? rect.width : rect.height;\n }\n\n document.body.style.cursor = isHorizontal ? \"col-resize\" : \"row-resize\";\n document.body.style.userSelect = \"none\";\n }, [isHorizontal, showFirstPanel, showSecondPanel]);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isResizingRef.current || !containerRef.current) return;\n\n const currentPos = isHorizontal ? e.clientX : e.clientY;\n const delta = currentPos - startPosRef.current; // Dragging right/down increases first panel size\n\n let newSize = startSizeRef.current + delta;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const containerTotal = isHorizontal ? containerRect.width : containerRect.height;\n\n // Limit the maximum size to prevent pushing the second panel offscreen\n const maxSize = containerTotal - minPanelSizePx;\n\n newSize = Math.max(minPanelSizePx, Math.min(newSize, maxSize));\n\n // Directly update the DOM for performance while dragging\n if (firstPanelRef.current) {\n firstPanelRef.current.style.flexBasis = `${newSize}px`;\n }\n };\n\n const handleMouseUp = () => {\n if (isResizingRef.current && containerRef.current && firstPanelRef.current) {\n // Calculate the final percentage\n const containerRect = containerRef.current.getBoundingClientRect();\n const firstPanelRect = firstPanelRef.current.getBoundingClientRect();\n\n const containerSize = isHorizontal ? containerRect.width : containerRect.height;\n const finalSize = isHorizontal ? firstPanelRect.width : firstPanelRect.height;\n\n // Pre-set the DOM to the exact % value BEFORE re-enabling transitions.\n // This prevents the visual \"snap\" that occurs when switching from px → %\n // with the CSS transition active.\n if (containerSize > 0) {\n const newPercent = (finalSize / containerSize) * 100;\n firstPanelRef.current.style.flexBasis = `${newPercent}%`;\n onPanelSizeChange(Math.max(0, Math.min(100, newPercent)));\n }\n\n isResizingRef.current = false;\n setIsResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n }\n };\n\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [onPanelSizeChange, isHorizontal, minPanelSizePx]);\n\n // Calculate applied size\n const appliedBasis = !showFirstPanel ? \"0%\" : (showSecondPanel ? `${panelSizePercent}%` : \"100%\");\n\n return (\n <div\n ref={containerRef}\n className={cls(\n \"relative w-full h-full flex overflow-hidden\",\n !stacked && (isHorizontal ? \"flex-row\" : \"flex-col\"),\n className\n )}\n >\n {/* First Panel */}\n <div\n ref={firstPanelRef}\n className={cls(\n stacked ? \"absolute inset-0\" : \"relative flex-shrink-0\",\n \"flex flex-col overflow-hidden\",\n !stacked && !isResizing && animateLayout && \"transition-[flex-basis] duration-150 ease-out\",\n !showFirstPanel && \"hidden\"\n )}\n style={stacked ? undefined : {\n flexBasis: appliedBasis,\n minWidth: isHorizontal && showFirstPanel && showSecondPanel ? `${minPanelSizePx}px` : undefined,\n minHeight: !isHorizontal && showFirstPanel && showSecondPanel ? `${minPanelSizePx}px` : undefined,\n maxWidth: showSecondPanel ? undefined : \"100%\",\n maxHeight: showSecondPanel ? undefined : \"100%\"\n }}\n >\n {firstPanel}\n </div>\n\n {/* Divider */}\n {!stacked && showFirstPanel && showSecondPanel && (\n <div\n className={cls(\n \"relative z-10 flex flex-shrink-0 items-center justify-center\",\n defaultBorderMixin,\n isHorizontal ? \"border-l w-px h-full cursor-col-resize\" : \"border-t h-px w-full cursor-row-resize\"\n )}\n onMouseDown={handleResizeStart}\n >\n {/* Transparent Hit Area with Pill inside */}\n <div className={cls(\n \"absolute flex items-center justify-center group\",\n isHorizontal ? \"w-4 h-full cursor-col-resize top-0\" : \"h-4 w-full cursor-row-resize left-0\"\n )}>\n <div className={cls(\n \"bg-primary/60 dark:bg-primary rounded-full opacity-0 group-hover:opacity-100 transition-all duration-200\",\n isHorizontal ? \"w-1 h-8\" : \"h-1 w-8\"\n )}/>\n </div>\n </div>\n )}\n\n {/* Second Panel */}\n <div\n className={cls(\n stacked ? \"absolute inset-0\" : \"flex-grow relative min-w-0 min-h-0\",\n \"flex flex-col overflow-hidden\",\n !showSecondPanel && \"hidden\"\n )}\n >\n {secondPanel}\n </div>\n </div>\n );\n}\n","\n\"use client\";\nimport { SearchIcon, XIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport React, { useCallback, useState } from \"react\";\n\nimport { defaultBorderMixin } from \"../styles\";\nimport { CircularProgress, IconButton } from \"./index\";\n\nimport { cls } from \"../util\";\nimport { useDebounceValue } from \"../hooks\";\n\ninterface SearchBarProps {\n onClick?: () => void;\n onTextSearch?: (searchString?: string) => void;\n placeholder?: string;\n expandable?: boolean;\n /**\n * Size of the search bar.\n * - \"small\": 32px height (matches TextField small)\n * - \"medium\": 44px height (matches TextField medium)\n * @default \"medium\"\n */\n size?: \"smallest\" | \"small\" | \"medium\";\n innerClassName?: string;\n className?: string;\n autoFocus?: boolean;\n disabled?: boolean;\n loading?: boolean;\n inputRef?: React.Ref<HTMLInputElement>;\n /**\n * Optional initial value for the search input, e.g. from URL params.\n */\n initialValue?: string;\n}\n\nexport function SearchBar({\n onClick,\n onTextSearch,\n placeholder = \"Search\",\n expandable = false,\n size = \"medium\",\n innerClassName,\n className,\n autoFocus,\n disabled,\n loading,\n inputRef,\n initialValue\n}: SearchBarProps) {\n\n const [searchText, setSearchText] = useState<string>(initialValue ?? \"\");\n const [active, setActive] = useState<boolean>(false);\n\n const deferredValues = useDebounceValue(searchText, 200);\n\n /**\n * Debounce on SearchIcon text update\n */\n React.useEffect(() => {\n if (!onTextSearch) return;\n if (deferredValues) {\n onTextSearch(deferredValues);\n } else {\n onTextSearch(undefined);\n }\n }, [deferredValues]);\n\n const clearText = useCallback(() => {\n if (!onTextSearch) return;\n setSearchText(\"\");\n onTextSearch(undefined);\n }, [onTextSearch]);\n\n // Height classes matching TextField sizes\n const heightClass = size === \"smallest\" ? \"h-8\" : size === \"small\" ? \"h-[36px]\" : \"h-[44px]\";\n const iconPaddingClass = size === \"smallest\" ? \"px-2\" : size === \"small\" ? \"px-2\" : \"px-4\";\n const inputPaddingClass = size === \"smallest\" ? \"pl-8\" : size === \"small\" ? \"pl-8\" : \"pl-12\";\n\n return (\n <div\n role=\"search\"\n aria-label=\"Search\"\n onClick={onClick}\n className={cls(\"relative transition-all\",\n heightClass,\n \"bg-surface-accent-50 dark:bg-surface-900 border\",\n defaultBorderMixin,\n \"focus-within:ring-1 focus-within:ring-primary/60 focus-within:border-primary focus-within:shadow-[0_0_0_3px_rgba(0,112,244,0.1)]\",\n \"rounded-lg overflow-hidden\",\n className)}>\n <div\n className={cls(\"absolute p-0 h-full pointer-events-none flex items-center justify-center top-0\", iconPaddingClass)}>\n {loading ? <CircularProgress size={\"smallest\"}/> : <SearchIcon className={\"text-text-disabled dark:text-text-disabled-dark\"} size={size === \"smallest\" ? 14 : size === \"small\" ? 18 : 20}/>}\n </div>\n <input\n value={searchText ?? \"\"}\n ref={inputRef}\n onClick={onClick}\n placeholder={placeholder}\n aria-label={placeholder}\n readOnly={!onTextSearch}\n onChange={onTextSearch\n ? (event) => {\n setSearchText(event.target.value);\n }\n : undefined}\n autoFocus={autoFocus}\n onFocus={() => setActive(true)}\n onBlur={() => setActive(false)}\n className={cls(\n (disabled || loading) && \"pointer-events-none\",\n \"placeholder-text-disabled dark:placeholder-text-disabled-dark\",\n \"relative flex items-center transition-all bg-transparent outline-none focus:outline-none focus:ring-0 appearance-none border-none focus:border-transparent\",\n inputPaddingClass, \"h-full w-full text-current\",\n size === \"small\" ? \"text-sm\" : \"\",\n expandable ? (active ? \"w-[220px]\" : \"w-[180px]\") : \"\",\n innerClassName\n )}\n />\n {searchText\n ? <IconButton\n className={`${size === \"small\" ? \"mr-0 top-0\" : \"mr-1 top-0\"} absolute right-0 z-10`}\n size={\"small\"}\n aria-label=\"Clear search\"\n onClick={clearText}>\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n : <div style={{ width: 26 }}/>\n }\n </div>\n );\n}\n","\n\"use client\";\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport React, { ChangeEvent, Children, forwardRef, useCallback, useEffect, useMemo, useState } from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n defaultBorderMixin,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundInvisibleMixin,\n fieldBackgroundMixin,\n focusedDisabled\n} from \"../styles\";\n\nimport { cls } from \"../util\";\nimport { SelectInputLabel } from \"./common/SelectInputLabel\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type SelectValue = string | number | boolean;\n\nexport type SelectProps<T extends SelectValue = string> = {\n open?: boolean,\n name?: string,\n fullWidth?: boolean,\n id?: string,\n onOpenChange?: (open: boolean) => void,\n value?: T,\n className?: string,\n inputClassName?: string,\n viewportClassName?: string,\n onChange?: React.EventHandler<ChangeEvent<HTMLSelectElement>>,\n onValueChange?: (updatedValue: T) => void,\n placeholder?: React.ReactNode,\n renderValue?: (value: T) => React.ReactNode,\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\",\n label?: React.ReactNode | string,\n disabled?: boolean,\n error?: boolean,\n position?: \"item-aligned\" | \"popper\",\n endAdornment?: React.ReactNode,\n inputRef?: React.Ref<HTMLButtonElement>,\n padding?: boolean,\n invisible?: boolean,\n children?: React.ReactNode;\n dataType?: \"string\" | \"number\" | \"boolean\";\n portalContainer?: HTMLElement | null; // Explicitly added to props type if missing\n};\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(({\n inputRef,\n open,\n name,\n fullWidth = false,\n id,\n onOpenChange,\n value,\n onChange,\n onValueChange,\n className,\n inputClassName,\n viewportClassName,\n placeholder,\n renderValue,\n label,\n size = \"large\",\n error,\n disabled,\n padding = true,\n position = \"item-aligned\",\n endAdornment,\n invisible,\n children,\n dataType = \"string\",\n portalContainer: manualContainer, // Rename to avoid confusion\n ...props\n}, ref) => {\n\n const [openInternal, setOpenInternal] = useState(open ?? false);\n\n useEffect(() => {\n setOpenInternal(open ?? false);\n }, [open]);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Resolve final container (Manual Prop > Context Container > Undefined/Body)\n const finalContainer = (manualContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n const onValueChangeInternal = useCallback((newValue: string) => {\n let typedValue: SelectValue = newValue;\n if (dataType === \"boolean\") {\n if (newValue === \"true\") typedValue = true;\n else if (newValue === \"false\") typedValue = false;\n } else if (dataType === \"number\") {\n if (!isNaN(Number(newValue)) && newValue.trim() !== \"\") typedValue = Number(newValue);\n }\n\n onValueChange?.(typedValue as SelectValue & typeof value);\n if (onChange) {\n const event = {\n target: {\n name,\n value: typedValue\n }\n } as ChangeEvent<HTMLSelectElement>;\n onChange(event);\n }\n }, [onChange, onValueChange, name, dataType]);\n\n const hasValue = Array.isArray(value) ? value.length > 0 : (value != null && value !== \"\" && value !== undefined);\n const stringValue = value !== undefined ? String(value) : undefined;\n\n const displayChildren = useMemo(() => {\n if (!hasValue || renderValue) return null;\n\n // Find the child that matches the current value to display its content\n let found: React.ReactNode = null;\n Children.forEach(children, (child) => {\n if (React.isValidElement<SelectItemProps>(child) && String(child.props.value) === String(value)) {\n found = child.props.children;\n }\n });\n return found;\n }, [children, hasValue, renderValue, value]);\n\n return (\n <SelectPrimitive.Root\n name={name}\n value={stringValue}\n open={openInternal}\n disabled={disabled}\n onValueChange={onValueChangeInternal}\n onOpenChange={(open) => {\n onOpenChange?.(open);\n setOpenInternal(open);\n }}\n {...props}>\n {typeof label === \"string\" ? <SelectInputLabel error={error}>{label}</SelectInputLabel> : label}\n <div className={cls(\n \"select-none rounded-lg text-sm\",\n invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n className,\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\",\n \"w-fit\": !fullWidth,\n \"w-full\": fullWidth\n }\n )}>\n <SelectPrimitive.Trigger\n ref={inputRef}\n id={id}\n asChild={false}\n type=\"button\"\n aria-label={typeof label === \"string\" ? label : (typeof renderValue === \"string\" ? renderValue : \"Select an option\")}\n aria-invalid={error || undefined}\n className={cls(\n \"h-full\",\n padding ? {\n \"px-4\": size === \"large\",\n \"px-3\": size === \"medium\",\n \"px-2\": size === \"small\" || size === \"smallest\"\n } : \"\",\n \"outline-hidden focus:outline-hidden\",\n \"outline-none focus:outline-none\",\n \"select-none rounded-lg text-sm\",\n error ? \"text-red-500 dark:text-red-600\" : \"focus:text-text-primary dark:focus:text-text-primary-dark\",\n error ? \"border border-red-500 dark:border-red-600\" : \"\",\n disabled ? \"text-surface-accent-600 dark:text-surface-accent-400\" : \"text-surface-accent-800 dark:text-white\",\n \"relative flex flex-row items-center\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\",\n \"w-full\": fullWidth,\n \"w-fit\": !fullWidth\n },\n inputClassName\n )}\n >\n <div\n ref={ref}\n className={cls(\n \"flex-grow max-w-full flex flex-row gap-2 items-center\",\n \"overflow-visible\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n }\n )}>\n <SelectPrimitive.Value\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n placeholder={placeholder}\n className={\"w-full\"}>\n\n {hasValue && value !== undefined && renderValue\n ? renderValue(value)\n : (displayChildren || placeholder)\n }\n\n </SelectPrimitive.Value>\n </div>\n\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon size={size === \"large\" ? iconSize.medium : iconSize.small}\n className={cls(\"transition\", open ? \"rotate-180\" : \"\", {\n \"px-2\": size === \"large\",\n \"px-1\": size === \"medium\" || size === \"small\"\n })}/>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n\n {endAdornment && (\n <div\n className={cls(\"h-full flex items-center absolute right-0 pr-12\")}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}>\n {endAdornment}\n </div>\n )}\n </div>\n\n {/* Pass the calculated finalContainer */}\n <SelectPrimitive.Portal container={finalContainer}>\n <SelectPrimitive.Content position={position}\n className={cls(focusedDisabled, \"z-50 relative overflow-hidden border bg-white dark:bg-surface-800 p-2 rounded-lg shadow-lg animate-in fade-in-0 zoom-in-95 duration-150\", defaultBorderMixin)}>\n <SelectPrimitive.Viewport className={cls(\"p-1\", viewportClassName)}\n style={{ maxHeight: \"var(--radix-select-content-available-height)\" }}>\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\n\nSelect.displayName = \"Select\";\n\n// ... (SelectItem and SelectGroup remain unchanged)\nexport type SelectItemProps<T extends SelectValue = string> = {\n value: T,\n children?: React.ReactNode,\n disabled?: boolean,\n className?: string,\n};\n\nexport const SelectItem = React.memo(function SelectItem<T extends SelectValue = string>({\n value,\n children,\n disabled,\n className\n}: SelectItemProps<T>) {\n // Convert value to string for Radix UI\n const stringValue = String(value);\n\n return <SelectPrimitive.Item\n key={stringValue}\n value={stringValue}\n disabled={disabled}\n className={cls(\n \"w-full\",\n \"relative flex items-center p-2 rounded-md text-sm text-surface-accent-700 dark:text-surface-accent-300\",\n \"focus:z-10\",\n \"data-[state=checked]:bg-surface-accent-100 data-[state=checked]:dark:bg-surface-accent-800 focus:bg-surface-accent-100 dark:focus:bg-surface-900\",\n \"data-[state=checked]:focus:bg-surface-accent-200 data-[state=checked]:dark:focus:bg-surface-900\",\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n \"[&>*]:w-full\",\n \"overflow-visible\",\n className\n )}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <div\n className=\"absolute left-1 data-[state=checked]:block hidden\">\n <CheckIcon size={iconSize.smallest}/>\n </div>\n </SelectPrimitive.Item>;\n});\n\nexport type SelectGroupProps = {\n label: React.ReactNode,\n children: React.ReactNode,\n className?: string\n};\n\nexport const SelectGroup = React.memo(function SelectGroup({\n label,\n children,\n className\n}: SelectGroupProps) {\n return <>\n <SelectPrimitive.Group\n className={cls(\n \"text-xs text-surface-accent-900 dark:text-white uppercase tracking-wider font-bold mt-6 first:mt-2\",\n \"px-2 py-2\",\n className\n )}>\n {label}\n </SelectPrimitive.Group>\n\n {children}\n </>;\n});\n","\"use client\";\nimport * as React from \"react\";\nimport { cls } from \"../util\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nexport interface SliderProps {\n className?: string;\n name?: string;\n disabled?: boolean;\n orientation?: React.AriaAttributes[\"aria-orientation\"];\n dir?: \"ltr\" | \"rtl\";\n min?: number;\n max?: number;\n step?: number;\n minStepsBetweenThumbs?: number;\n value?: number[];\n defaultValue?: number[];\n onValueChange?: (value: number[]) => void;\n onValueCommit?: (value: number[]) => void;\n inverted?: boolean;\n form?: string;\n size?: \"small\" | \"regular\";\n}\n\nfunction SliderThumb(props: {\n props: Omit<React.PropsWithoutRef<SliderProps>, \"size\" | \"className\">,\n index: number,\n hovered: boolean,\n classes: string\n}) {\n return <TooltipPrimitive.Root open={props.hovered}>\n <TooltipPrimitive.Trigger asChild>\n <SliderPrimitive.Thumb\n className={cls({\n \"border-primary bg-primary outline-none\": !props.props.disabled,\n \"border-surface-accent-300 bg-surface-accent-300 dark:border-surface-700 dark:bg-surface-700\": props.props.disabled\n },\n props.classes,\n \"focus-visible:ring-4 focus-visible:ring-primary focus-visible:ring-opacity-50 focus-visible:ring-primary/50\",\n \"hover:ring-4 hover:ring-primary hover:ring-opacity-25 hover:ring-primary/25\",\n \"block rounded-full transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\")}\n\n />\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Content side=\"top\"\n sideOffset={5}\n className={cls(\n \"TooltipContent\",\n \"max-w-lg leading-relaxed\",\n \"z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 bg-surface-accent-700/90 dark:bg-surface-accent-800/90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100\"\n )}>\n {props.props.value?.[props.index]}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Root>;\n}\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(({\n className,\n size = \"regular\",\n ...props\n }, ref) => {\n const [hovered, setHovered] = React.useState(false);\n\n const thumbSizeClasses =\n size === \"small\"\n ? \"h-4 w-4\" // Smaller size for the thumb\n : \"h-6 w-6\"; // Default size\n\n return (\n <TooltipPrimitive.Provider delayDuration={200}>\n <SliderPrimitive.Root\n ref={ref}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={cls(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n style={{ height: size === \"small\" ? 4 : 8 }}\n className={\"relative w-full grow overflow-hidden rounded-full bg-surface-accent-300 bg-opacity-40 bg-surface-accent-300/40 dark:bg-surface-700 dark:bg-opacity-40 dark:bg-surface-700/40\"}>\n\n <SliderPrimitive.Range\n className={cls(\"absolute h-full\", {\n \"bg-primary\": !props.disabled,\n \"bg-surface-accent-300 dark:bg-surface-700\": props.disabled\n })}\n />\n </SliderPrimitive.Track>\n\n {(props.value ?? [0]).map((_, index) => <SliderThumb\n key={index}\n index={index}\n props={props}\n hovered={hovered}\n classes={thumbSizeClasses}/>)}\n </SliderPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n});\n\nSlider.displayName = \"Slider\";\n\nexport { Slider };\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { usePortalContainer, PortalContainerProvider } from \"../hooks/PortalContainerContext\";\n\ninterface SheetProps {\n children: React.ReactNode;\n open: boolean;\n title?: string;\n modal?: boolean;\n includeBackgroundOverlay?: boolean;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n darkBackground?: boolean;\n transparent?: boolean;\n onOpenChange?: (open: boolean) => void;\n onPointerDownOutside?: (e: Event) => void;\n onInteractOutside?: (e: Event) => void;\n className?: string;\n style?: React.CSSProperties;\n overlayClassName?: string;\n overlayZIndex?: string;\n overlayStyle?: React.CSSProperties;\n portalContainer?: HTMLElement | null;\n}\n\nexport const Sheet: React.FC<SheetProps> = ({\n children,\n side = \"right\",\n title,\n modal = true,\n includeBackgroundOverlay = true,\n open,\n onOpenChange,\n onPointerDownOutside,\n onInteractOutside,\n transparent,\n className,\n style,\n overlayClassName,\n overlayZIndex = \"z-50\",\n overlayStyle,\n portalContainer,\n ...props\n}) => {\n const [displayed, setDisplayed] = useState(false);\n const [contentEl, setContentEl] = useState<HTMLDivElement | null>(null);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n useEffect(() => {\n const raf = requestAnimationFrame(() => {\n setDisplayed(open);\n });\n return () => cancelAnimationFrame(raf);\n }, [open]);\n\n const transformValue: Record<string, string> = {\n top: \"-translate-y-full\",\n bottom: \"translate-y-full\",\n left: \"-translate-x-full\",\n right: \"translate-x-full\"\n };\n\n const borderClass: Record<string, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\"\n };\n\n return (\n <DialogPrimitive.Root open={displayed || open}\n modal={modal}\n onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal container={finalContainer}>\n {includeBackgroundOverlay && <DialogPrimitive.Overlay\n className={cls(\n \"outline-none\",\n \"fixed inset-0 bg-white/80 dark:bg-surface-900/80\",\n \"backdrop-blur-sm transition-all duration-100 data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in\",\n overlayZIndex,\n overlayClassName\n )}\n style={overlayStyle}\n />}\n <DialogPrimitive.Content\n {...props}\n ref={setContentEl}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onPointerDownOutside={onPointerDownOutside}\n onInteractOutside={onInteractOutside}\n className={cls(\n \"outline-none\",\n borderClass[side],\n defaultBorderMixin,\n \"transform-gpu\",\n \"will-change-transform\",\n \"text-surface-accent-900 dark:text-white\",\n \"fixed transform z-50 transition-[transform,opacity] ease-in-out\",\n !displayed ? \"duration-150\" : \"duration-100\",\n \"outline-none focus:outline-none focus-visible:outline-none focus-visible:ring-0 focus:ring-0\",\n transparent ? \"\" : \"shadow-md bg-white dark:bg-surface-900\",\n side === \"top\" || side === \"bottom\" ? \"w-full\" : \"h-full\",\n side === \"left\" || side === \"top\" ? \"left-0 top-0\" : \"right-0 bottom-0\",\n displayed && open ? \"opacity-100\" : \"opacity-50\",\n !displayed || !open ? transformValue[side] : \"\",\n className\n )}\n style={style}\n >\n <DialogPrimitive.Title className=\"sr-only outline-none focus:outline-none focus-visible:outline-none focus-visible:ring-0 focus:ring-0\">\n {title ?? \"Sheet\"}\n </DialogPrimitive.Title>\n <PortalContainerProvider container={contentEl}>\n {children}\n </PortalContainerProvider>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","\"use client\";\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cls, debounce } from \"../util\";\n\ntype State = {\n outerHeightStyle: number;\n overflow?: boolean | undefined;\n};\n\nfunction getStyleValue(value: string) {\n return parseInt(value, 10) || 0;\n}\n\nconst styles: {\n shadow: React.CSSProperties;\n} = {\n shadow: {\n // Visibility needed to hide the extra text area on iPads\n visibility: \"hidden\",\n // Remove from the content flow\n position: \"absolute\",\n // Ignore the scrollbar width\n overflow: \"hidden\",\n height: 0,\n top: 0,\n left: 0,\n // Create a new layer, increase the isolation of the computed values\n transform: \"translateZ(0)\"\n }\n};\n\nfunction isEmpty(obj: State) {\n return (\n obj === undefined ||\n obj === null ||\n Object.keys(obj).length === 0 ||\n (obj.outerHeightStyle === 0 && !obj.overflow)\n );\n}\n\nexport const TextareaAutosize = React.forwardRef(function TextareaAutosize(\n props: TextareaAutosizeProps,\n ref: React.ForwardedRef<Element>\n) {\n const {\n onChange,\n onScroll,\n onResize,\n maxRows,\n minRows = 1,\n style,\n value,\n onFocus,\n onBlur,\n sizeRef,\n ignoreBoxSizing,\n ...other\n } = props;\n\n const { current: isControlled } = React.useRef(value != null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(ref, inputRef);\n const shadowRef = React.useRef<HTMLTextAreaElement>(null);\n const renders = React.useRef(0);\n const [state, setState] = React.useState<State>({\n outerHeightStyle: 0\n });\n\n const getUpdatedState = React.useCallback(() => {\n\n const input = inputRef.current!;\n if (typeof window === \"undefined\") {\n return {\n outerHeightStyle: 0\n };\n }\n\n const containerWindow = window;\n const computedStyle = containerWindow.getComputedStyle(input);\n\n // If input's width is shrunk and it's not visible, don't sync height.\n if (computedStyle.width === \"0px\") {\n return {\n outerHeightStyle: 0\n };\n }\n\n const sizeReferenceElement = sizeRef?.current ?? shadowRef.current!;\n const inputShallow = shadowRef.current!;\n\n sizeReferenceElement.style.width = computedStyle.width;\n inputShallow.value = input.value || props.placeholder || \"x\";\n if (inputShallow.value.slice(-1) === \"\\n\") {\n // Certain fonts which overflow the line height will cause the textarea\n // to report a different scrollHeight depending on whether the last line\n // is empty. Make it non-empty to avoid this issue.\n inputShallow.value += \" \";\n }\n\n const boxSizing = computedStyle.boxSizing;\n const padding =\n getStyleValue(computedStyle.paddingBottom) + getStyleValue(computedStyle.paddingTop);\n const border =\n getStyleValue(computedStyle.borderBottomWidth) + getStyleValue(computedStyle.borderTopWidth);\n const minHeight = getStyleValue(computedStyle.minHeight);\n\n // The height of the inner content\n const innerHeight = sizeReferenceElement.scrollHeight;\n\n // Measure height of a textarea with a single row\n inputShallow.value = \"x\";\n const singleRowHeight = sizeReferenceElement.scrollHeight;\n\n // The height of the outer content\n let outerHeight = innerHeight;\n\n if (minRows) {\n outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);\n }\n if (maxRows) {\n outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n }\n outerHeight = Math.max(outerHeight, singleRowHeight, minHeight);\n\n // Take the box sizing into account for applying this value as a style.\n const outerHeightStyle = outerHeight + (!ignoreBoxSizing && boxSizing === \"border-box\" ? padding + border : 0);\n\n const overflow = Math.abs(outerHeight - innerHeight) <= 1;\n\n return {\n outerHeightStyle,\n overflow\n };\n }, [maxRows, minRows, props.placeholder]);\n\n const updateState = React.useCallback((prevState: State, newState: State) => {\n const {\n outerHeightStyle,\n overflow\n } = newState;\n // Need a large enough difference to update the height.\n // This prevents infinite rendering loop.\n if (\n renders.current < 20 &&\n ((outerHeightStyle > 0 &&\n Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1) ||\n prevState.overflow !== overflow)\n ) {\n renders.current += 1;\n return {\n overflow,\n outerHeightStyle\n };\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (renders.current === 20) {\n console.error(\n [\n \"MUI: Too many re-renders. The layout is unstable.\",\n \"TextareaAutosize limits the number of renders to prevent an infinite loop.\"\n ].join(\"\\n\")\n );\n }\n }\n return prevState;\n }, []);\n\n const syncHeight = React.useCallback(() => {\n const newState = getUpdatedState();\n\n if (isEmpty(newState)) {\n return;\n }\n if (onResize) {\n onResize(newState);\n }\n\n setState((prevState) => {\n return updateState(prevState, newState);\n });\n }, [getUpdatedState, onResize, updateState]);\n\n const syncHeightWithFlushSync = React.useCallback(() => {\n const newState = getUpdatedState();\n\n if (isEmpty(newState)) {\n return;\n }\n\n // In React 18, state updates in a ResizeObserver's callback are happening after the paint which causes flickering\n // when doing some visual updates in it. Using flushSync ensures that the dom will be painted after the states updates happen\n // Related issue - https://github.com/facebook/react/issues/24331\n ReactDOM.flushSync(() => {\n setState((prevState) => {\n return updateState(prevState, newState);\n });\n });\n }, [getUpdatedState, updateState]);\n\n React.useEffect(() => {\n const handleResize = debounce(() => {\n renders.current = 0;\n\n // If the TextareaAutosize component is replaced by Suspense with a fallback, the last\n // ResizeObserver's handler that runs because of the change in the layout is trying to\n // access a dom node that is no longer there (as the fallback component is being shown instead).\n if (inputRef.current) {\n syncHeightWithFlushSync();\n }\n });\n let resizeObserver: ResizeObserver;\n\n const input = inputRef.current!;\n const containerWindow = window;\n if (typeof window === \"undefined\") {\n return;\n }\n\n containerWindow.addEventListener(\"resize\", handleResize);\n\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(handleResize);\n resizeObserver.observe(input);\n }\n\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener(\"resize\", handleResize);\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [syncHeightWithFlushSync]);\n\n useLayoutEffect(() => {\n syncHeight();\n });\n\n React.useEffect(() => {\n renders.current = 0;\n }, [value]);\n\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n renders.current = 0;\n\n if (!isControlled) {\n syncHeight();\n }\n\n if (onChange) {\n onChange(event);\n }\n };\n\n return (\n <React.Fragment>\n <textarea\n value={value}\n onChange={handleChange}\n className={props.className}\n ref={handleRef as React.Ref<HTMLTextAreaElement>}\n onFocus={onFocus}\n onBlur={onBlur}\n // Apply the rows prop to get a \"correct\" first SSR paint\n rows={minRows as number}\n style={{\n height: state.outerHeightStyle,\n // Need a large enough difference to allow scrolling.\n // This prevents infinite rendering loop.\n overflow: state.overflow ? \"hidden\" : undefined,\n ...style\n }}\n onScroll={onScroll}\n {...other}\n />\n <textarea\n aria-hidden\n className={cls(props.className, props.shadowClassName)}\n readOnly\n ref={shadowRef}\n tabIndex={-1}\n style={{\n padding: 0,\n ...styles.shadow,\n ...style\n }}\n />\n </React.Fragment>\n );\n}) as React.FC<TextareaAutosizeProps & { ref?: React.ForwardedRef<Element> }>;\n\nexport type TextareaAutosizeProps = Omit<React.InputHTMLAttributes<HTMLTextAreaElement>, \"onResize\"> & {\n\n className?: string;\n\n shadowClassName?: string;\n\n /**\n * Maximum number of rows to display.\n */\n maxRows?: number | string;\n /**\n * Minimum number of rows to display.\n * @default 1\n */\n minRows?: number | string;\n /**\n * @ignore\n */\n onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n /**\n * @ignore\n */\n placeholder?: string;\n /**\n * @ignore\n */\n style?: object;\n /**\n * @ignore\n */\n value?: string[] | number | string;\n\n sizeRef?: React.RefObject<HTMLDivElement>;\n\n onScroll?: (event: React.UIEvent<HTMLTextAreaElement>) => void;\n\n onResize?: (state: State) => void;\n\n autoFocus?: boolean;\n\n ignoreBoxSizing?: boolean;\n}\n\nfunction useForkRef<Instance>(\n ...refs: Array<React.Ref<Instance> | undefined>\n): React.RefCallback<Instance> | null {\n /**\n * This will create a new function if the refs passed to this hook change and are all defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior.\n */\n return React.useMemo(() => {\n if (refs.every((ref) => ref == null)) {\n return null;\n }\n\n return (instance) => {\n refs.forEach((ref) => {\n setRef(ref, instance);\n });\n };\n\n }, refs);\n}\n\nfunction setRef<T>(\n ref: React.MutableRefObject<T | null> | ((instance: T | null) => void) | null | undefined,\n value: T | null\n): void {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n","\"use client\";\nimport React, { ForwardedRef, forwardRef, useEffect, useId, useRef } from \"react\";\n\nimport {\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundInvisibleMixin,\n fieldBackgroundMixin,\n focusedInvisibleMixin\n} from \"../styles\";\nimport { InputLabel } from \"./InputLabel\";\nimport { cls } from \"../util\";\n\nexport type InputType =\n | \"text\"\n | \"number\"\n | \"phone\"\n | \"email\"\n | \"password\"\n | \"search\"\n | \"url\"\n | \"date\"\n | \"time\"\n | \"datetime-local\"\n | \"month\"\n | \"week\"\n | \"color\";\n\nexport type TextFieldProps<T extends string | number> = {\n type?: InputType;\n value?: T;\n onChange?: (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n label?: React.ReactNode;\n multiline?: boolean;\n disabled?: boolean;\n invisible?: boolean;\n error?: boolean;\n endAdornment?: React.ReactNode;\n autoFocus?: boolean;\n placeholder?: string;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n className?: string;\n style?: React.CSSProperties;\n inputClassName?: string;\n inputStyle?: React.CSSProperties;\n inputRef?: React.ForwardedRef<any>;\n /**\n * Maximum number of rows to display.\n */\n maxRows?: number | string;\n /**\n * Minimum number of rows to display.\n * @default 1\n */\n minRows?: number | string;\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"value\">;\n\nexport const TextField = forwardRef<HTMLDivElement, TextFieldProps<string | number>>(\n <T extends string | number>(\n {\n value,\n onChange,\n label,\n type = \"text\",\n multiline = false,\n invisible,\n maxRows,\n minRows,\n disabled,\n error,\n endAdornment,\n autoFocus,\n placeholder,\n size = \"large\",\n className,\n style,\n inputClassName,\n inputStyle,\n inputRef: inputRefProp,\n ...inputProps\n }: TextFieldProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n ) => {\n\n const fallbackRef = useRef(null);\n const inputRef = inputRefProp ?? fallbackRef;\n const autoId = useId();\n const inputId = inputProps.id ?? autoId;\n const labelId = `${inputId}-label`;\n\n const [focused, setFocused] = React.useState(false);\n const hasValue = value !== undefined && value !== null && value !== \"\";\n\n useEffect(() => {\n const element = inputRef && \"current\" in inputRef ? inputRef.current : null;\n if (element && document.activeElement === element) {\n setFocused(true);\n }\n }, []);\n\n useEffect(() => {\n if (type !== \"number\") return;\n const handleWheel = (event: any) => {\n if (event.target instanceof HTMLElement) event.target.blur();\n };\n\n const element = \"current\" in inputRef ? inputRef.current : inputRef;\n\n element?.addEventListener(\"wheel\", handleWheel);\n\n return () => {\n element?.removeEventListener(\"wheel\", handleWheel);\n };\n }, [inputRef, type]);\n\n const input = multiline ? (\n <textarea\n {...(inputProps as React.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n ref={inputRef}\n id={inputId}\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={error || undefined}\n aria-disabled={disabled || undefined}\n placeholder={focused || hasValue || !label ? placeholder : undefined}\n autoFocus={autoFocus}\n rows={typeof minRows === \"string\" ? parseInt(minRows) : (minRows ?? 3)}\n value={value ?? \"\"}\n onChange={onChange}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={inputStyle}\n className={cls(\n invisible ? focusedInvisibleMixin : \"\",\n \"rounded-lg resize-none w-full outline-none text-base bg-transparent min-h-[64px] px-3\",\n label ? \"pt-8 pb-2\" : \"py-2\",\n disabled && \"outline-none opacity-50 text-surface-accent-600 dark:text-surface-accent-500\",\n inputClassName\n )}\n />\n ) : (\n <input\n {...inputProps}\n ref={inputRef}\n id={inputId}\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={error || undefined}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n style={inputStyle}\n className={cls(\n \"w-full outline-none bg-transparent leading-normal px-3\",\n \"rounded-lg\",\n \"focused:text-text-primary focused:dark:text-text-primary-dark\",\n invisible ? focusedInvisibleMixin : \"\",\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n label\n ? size === \"large\"\n ? \"pt-8 pb-2\"\n : \"pt-4 pb-2\"\n : size === \"smallest\"\n ? \"py-0.5\"\n : size === \"small\"\n ? \"py-1\"\n : \"py-2\",\n endAdornment ? \"pr-12\" : \"pr-3\",\n disabled &&\n \"outline-none opacity-65 dark:opacity-60 text-surface-accent-800 dark:text-white\",\n inputClassName\n )}\n placeholder={focused || hasValue || !label ? placeholder : undefined}\n autoFocus={autoFocus}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n type={type}\n value={type === \"number\" && Number.isNaN(value) ? \"\" : value ?? \"\"}\n onChange={onChange}\n />\n );\n\n return (\n <div\n ref={ref}\n className={cls(\n \"rounded-lg relative max-w-full\",\n invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n error ? \"border border-red-500 dark:border-red-600\" : \"\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n className\n )}\n style={style}\n >\n {label && (\n <InputLabel\n id={labelId}\n htmlFor={inputId}\n className={cls(\n \"pointer-events-none absolute\",\n size === \"large\" ? \"top-1\" : \"top-[-1px]\",\n !error\n ? focused\n ? \"text-primary dark:text-primary\"\n : \"text-text-secondary dark:text-text-secondary-dark\"\n : \"text-red-500 dark:text-red-600\",\n disabled ? \"opacity-50\" : \"\"\n )}\n shrink={hasValue || focused}\n >\n {label}\n </InputLabel>\n )}\n\n {input}\n\n {endAdornment && (\n <div\n className={cls(\n \"flex flex-row justify-center items-center absolute h-full right-0 top-0\",\n {\n \"mr-4\": size === \"large\",\n \"mr-3\": size === \"medium\",\n \"mr-2\": size === \"small\" || size === \"smallest\"\n }\n )}\n >\n {endAdornment}\n </div>\n )}\n </div>\n );\n }\n);\n\nTextField.displayName = \"TextField\";\n","\nimport React, { createContext, useContext, useRef, useState, useEffect, useMemo } from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\nexport type TabVariant = \"standard\" | \"boxy\" | \"pill\";\n\nconst TabsContext = createContext<{ variant: TabVariant }>({ variant: \"standard\" });\nimport { IconButton } from \"./IconButton\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\n\nexport type TabsProps = {\n value: string,\n children: React.ReactNode,\n innerClassName?: string,\n className?: string,\n variant?: TabVariant,\n onValueChange: (value: string) => void\n};\n\nexport function Tabs({\n value,\n onValueChange,\n className,\n innerClassName,\n variant = \"standard\",\n children\n}: TabsProps) {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [showLeftScroll, setShowLeftScroll] = useState(false);\n const [showRightScroll, setShowRightScroll] = useState(false);\n const [isScrollable, setIsScrollable] = useState(false);\n\n const checkScroll = () => {\n if (scrollContainerRef.current) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainerRef.current;\n setShowLeftScroll(scrollLeft > 0);\n setShowRightScroll(Math.ceil(scrollLeft + clientWidth) < scrollWidth);\n setIsScrollable(scrollWidth > clientWidth);\n }\n };\n\n useEffect(() => {\n checkScroll();\n window.addEventListener(\"resize\", checkScroll);\n\n let observer: ResizeObserver;\n if (scrollContainerRef.current) {\n observer = new ResizeObserver(checkScroll);\n observer.observe(scrollContainerRef.current);\n if (scrollContainerRef.current.firstElementChild) {\n observer.observe(scrollContainerRef.current.firstElementChild);\n }\n }\n\n return () => {\n window.removeEventListener(\"resize\", checkScroll);\n observer?.disconnect();\n };\n }, [children]);\n\n const scroll = (direction: \"left\" | \"right\") => {\n if (scrollContainerRef.current) {\n const container = scrollContainerRef.current;\n const scrollAmount = Math.max(container.clientWidth / 2, 200);\n const targetScroll = container.scrollLeft + (direction === \"left\" ? -scrollAmount : scrollAmount);\n\n container.scrollTo({\n left: targetScroll,\n behavior: \"smooth\"\n });\n // checkScroll will be called by onScroll event\n }\n };\n\n const contextValue = useMemo(() => ({ variant }), [variant]);\n\n return <TabsContext.Provider value={contextValue}>\n <TabsPrimitive.Root\n value={value}\n onValueChange={onValueChange}\n className={cls(\"relative flex flex-row items-center min-w-0 w-full\", className)}\n >\n {isScrollable && (\n <button\n type=\"button\"\n disabled={!showLeftScroll}\n aria-label=\"Scroll tabs left\"\n onClick={() => scroll(\"left\")}\n className={cls(\n \"absolute left-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center rounded-md transition-all h-8 w-6\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400\",\n !showLeftScroll ? \"pointer-events-none opacity-0\" : \"text-surface-600 dark:text-surface-400 hover:bg-surface-200 dark:hover:bg-surface-800\",\n \"bg-surface-50 dark:bg-surface-900 border shadow-sm\", defaultBorderMixin\n )}\n >\n <ChevronLeftIcon size={iconSize.smallest}/>\n </button>\n )}\n <div\n ref={scrollContainerRef}\n className=\"flex-1 overflow-x-auto no-scrollbar min-w-0\"\n onScroll={checkScroll}\n style={{ scrollbarWidth: \"none\",\nmsOverflowStyle: \"none\" }}\n >\n <TabsPrimitive.List className={cls(\n variant === \"standard\" && \"inline-flex h-9 items-center justify-start rounded-md bg-surface-50 p-1 text-surface-600 dark:bg-surface-900 dark:text-surface-400 gap-2 border\",\n variant === \"standard\" && defaultBorderMixin,\n variant === \"boxy\" && \"flex items-center h-full\",\n variant === \"pill\" && \"flex items-center gap-0.5\",\n innerClassName)\n }>\n {children}\n </TabsPrimitive.List>\n </div>\n {isScrollable && (\n <button\n type=\"button\"\n disabled={!showRightScroll}\n aria-label=\"Scroll tabs right\"\n onClick={() => scroll(\"right\")}\n className={cls(\n \"absolute right-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center rounded-md transition-all h-8 w-6\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400\",\n !showRightScroll ? \"pointer-events-none opacity-0\" : \"text-surface-600 dark:text-surface-400 hover:bg-surface-200 dark:hover:bg-surface-800\",\n \"bg-surface-50 dark:bg-surface-900 border shadow-sm\", defaultBorderMixin\n )}\n >\n <ChevronRightIcon size={iconSize.smallest}/>\n </button>\n )}\n </TabsPrimitive.Root>\n </TabsContext.Provider>;\n}\n\nexport type TabProps = {\n value: string,\n className?: string,\n innerClassName?: string,\n children: React.ReactNode,\n disabled?: boolean\n};\n\nexport function Tab({\n value,\n className,\n innerClassName,\n children,\n disabled\n}: TabProps) {\n const { variant } = useContext(TabsContext);\n\n return (\n <TabsPrimitive.Trigger\n value={value}\n disabled={disabled}\n className={cls(\n \"inline-flex items-center justify-center whitespace-nowrap text-sm font-medium ring-offset-white transition-all\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400 focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n variant === \"standard\" && \"rounded-sm px-3 py-1 data-[state=active]:bg-white data-[state=active]:text-surface-900 data-[state=active]:shadow-sm dark:data-[state=active]:bg-surface-900 dark:data-[state=active]:text-surface-50\",\n variant === \"boxy\" && cls(\n \"flex-shrink-0 flex items-center gap-1.5 px-3.5 h-9 border-r border-surface-200 dark:border-surface-800 cursor-pointer text-[12px] font-medium transition-colors group relative box-border overflow-hidden\",\n \"border-b-2 border-b-transparent\",\n \"data-[state=active]:bg-surface-50 dark:data-[state=active]:bg-surface-900\",\n \"data-[state=active]:text-text-primary dark:data-[state=active]:text-text-primary-dark\",\n \"data-[state=active]:border-b-primary\",\n \"text-text-secondary dark:text-text-secondary-dark hover:bg-surface-100 dark:hover:bg-surface-800\"\n ),\n variant === \"pill\" && cls(\n \"px-2 py-0.5 rounded text-[10px] font-medium transition-colors\",\n \"data-[state=active]:bg-primary/10 data-[state=active]:text-primary dark:data-[state=active]:bg-primary/20 dark:data-[state=active]:text-blue-400\",\n \"text-text-disabled dark:text-text-disabled-dark hover:text-text-secondary dark:hover:text-text-secondary-dark\"\n ),\n className,\n variant === \"standard\" && innerClassName\n )}\n >\n {children}\n </TabsPrimitive.Trigger>\n );\n}\n","\n\"use client\";\n\nimport { TagIcon } from \"lucide-react\";\nimport React, { useRef } from \"react\";\nimport { defaultBorderMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\nexport type TableProps = {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n} & React.TableHTMLAttributes<HTMLTableElement>;\n\nexport const Table = React.memo(({\n children,\n className,\n style,\n ...rest\n }: TableProps) => (\n <table\n className={cls(\"text-left text-surface-900 dark:text-white rounded-lg overflow-x-auto\", className)}\n style={style}\n {...rest}\n >\n {children}\n </table>\n));\n\nexport type TableBodyProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableBody = React.memo(({\n children,\n className,\n ...rest\n }: TableBodyProps) => (\n <tbody\n className={cls(\"bg-white dark:bg-surface-900 text-sm divide-y divide-surface-100 dark:divide-surface-700 dark:divide-opacity-70 dark:divide-surface-700/70\", className)}\n {...rest}\n >\n {children}\n </tbody>\n));\n\nexport type TableHeaderProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableHeader = React.memo(({\n children,\n className,\n ...rest\n }: TableHeaderProps) => (\n <thead {...rest}>\n <tr\n className={cls(\n defaultBorderMixin,\n \"text-sm font-medium text-surface-700 dark:text-surface-accent-300\",\n \"bg-surface-accent-50 border-b dark:bg-surface-800\",\n className\n )}\n >\n {children}\n </tr>\n </thead>\n));\n\nexport type TableRowProps = {\n children?: React.ReactNode;\n className?: string;\n onClick?: React.MouseEventHandler<any>;\n style?: React.CSSProperties;\n} & React.HTMLAttributes<HTMLTableRowElement>;\n\nexport const TableRow = React.memo(({\n children,\n className,\n onClick,\n style,\n ...rest\n }: TableRowProps) => (\n <tr\n onClick={onClick}\n style={style}\n className={cls(\n \"bg-white dark:bg-surface-900\",\n onClick ? \"hover:bg-primary/5 dark:hover:bg-primary/5 cursor-pointer\" : \"\",\n className\n )}\n {...rest}\n >\n {children}\n </tr>\n));\n\nexport type TableCellProps = {\n children?: React.ReactNode;\n header?: boolean;\n scope?: string;\n className?: string;\n style?: React.CSSProperties;\n align?: \"left\" | \"center\" | \"right\";\n colspan?: number;\n} & React.HTMLAttributes<HTMLTableCellElement>;\n\nexport const TableCell = React.memo(({\n children,\n header = false,\n scope = \"\",\n align,\n className,\n style,\n colspan,\n ...rest\n }: TableCellProps) => {\n const ref = useRef<HTMLTableCellElement>(null);\n const TagIcon = header || getParentName(ref.current) === \"TableHeader\" ? \"th\" : \"td\";\n return (\n <TagIcon\n scope={scope}\n colSpan={colspan}\n ref={ref}\n style={style}\n className={cls(\n \"px-4 py-3 text-clip \",\n align === \"center\" ? \"text-center\" : (align === \"right\" ? \"text-right\" : \"text-left\"),\n className\n )}\n {...rest}\n >\n {children}\n </TagIcon>\n );\n});\n\ninterface ReactFiber {\n return: ReactFiber;\n type: string | Function;\n elementType?: {\n name?: string;\n };\n}\n\n// This is highly experimental and might break in the future\nfunction getParentName(element: HTMLElement | null): string | undefined {\n if (element) {\n const key = Object.keys(element).find((key) => {\n return (\n key.startsWith(\"__reactFiber$\") ||\n key.startsWith(\"__reactInternalInstance$\")\n );\n });\n if (key) {\n const domFiber = (element as unknown as Record<string, ReactFiber>)[key];\n const getComponentFiber = (fiber: ReactFiber): ReactFiber => {\n let parentFiber = fiber.return;\n while (parentFiber && typeof parentFiber.type === \"string\") {\n parentFiber = parentFiber.return;\n }\n return parentFiber;\n };\n let fiber = getComponentFiber(domFiber);\n fiber = getComponentFiber(fiber);\n return fiber?.elementType?.name;\n }\n }\n return undefined;\n}\n\nTable.displayName = \"Table\";\nTableBody.displayName = \"TableBody\";\nTableHeader.displayName = \"TableHeader\";\nTableRow.displayName = \"TableRow\";\nTableCell.displayName = \"TableCell\";\n","\"use client\";\nimport React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type PopoverSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type PopoverAlign = \"start\" | \"center\" | \"end\";\n\nexport interface PopoverProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n side?: PopoverSide;\n sideOffset?: number;\n align?: PopoverAlign;\n alignOffset?: number;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n enabled?: boolean;\n modal?: boolean;\n className?: string;\n portalContainer?: HTMLElement | null;\n onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;\n}\n\nexport function Popover({\n trigger,\n children,\n open,\n onOpenChange,\n side,\n sideOffset = 5,\n align,\n alignOffset,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n enabled = true,\n modal = false,\n portalContainer,\n className,\n onMouseEnter,\n onMouseLeave\n }: PopoverProps) {\n\n useInjectStyles(\"Popover\", popoverStyles);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n if (!enabled)\n return <>{trigger}</>;\n\n return <PopoverPrimitive.Root open={open}\n onOpenChange={onOpenChange}\n modal={modal}>\n\n <PopoverPrimitive.Trigger asChild>\n {trigger}\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal container={finalContainer}>\n <PopoverPrimitive.Content\n className={cls(paperMixin,\n \"PopoverContent z-40\", className)}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n arrowPadding={arrowPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n avoidCollisions={avoidCollisions}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}>\n\n {children}\n <PopoverPrimitive.Arrow className=\"fill-white dark:fill-surface-800\"/>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>;\n}\n\nconst popoverStyles = `\n/* ... (styles remain unchanged) ... */\n.PopoverContent {\n animation-duration: 400ms;\n animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n will-change: transform, opacity;\n}\n.PopoverContent[data-state='open'][data-side='top'] {\n animation-name: slideDownAndFade;\n}\n.PopoverContent[data-state='open'][data-side='right'] {\n animation-name: slideLeftAndFade;\n}\n.PopoverContent[data-state='open'][data-side='bottom'] {\n animation-name: slideUpAndFade;\n}\n.PopoverContent[data-state='open'][data-side='left'] {\n animation-name: slideRightAndFade;\n}\n\n@keyframes slideUpAndFade {\n from {\n opacity: 0;\n transform: translateY(2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideRightAndFade {\n from {\n opacity: 0;\n transform: translateX(-2px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slideDownAndFade {\n from {\n opacity: 0;\n transform: translateY(-2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideLeftAndFade {\n from {\n opacity: 0;\n transform: translateX(2px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n`;\n","import React from \"react\";\n\nexport type BadgeColor = \"primary\" | \"secondary\" | \"warning\" | \"error\";\n\nexport interface BadgeProps {\n color?: BadgeColor;\n children: React.ReactNode;\n invisible?: boolean;\n}\n\nconst getColor = (color: BadgeColor) => {\n switch (color) {\n case \"primary\":\n return \"bg-primary\";\n case \"secondary\":\n return \"bg-secondary\";\n case \"warning\":\n return \"bg-orange-500\";\n case \"error\":\n return \"bg-red-500\";\n default:\n return \"bg-surface-accent-300 dark:bg-surface-accent-700\";\n }\n}\n\nexport const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(({\n color = \"primary\",\n invisible = false,\n children\n }, ref) => {\n return (\n <div ref={ref} className=\"relative inline-block w-fit\">\n {children}\n <span\n className={`absolute top-0.5 right-0.5 transform translate-x-1/2 -translate-y-1/2 rounded-full\n ${getColor(color)}\n transition-all duration-200 ease-out\n ${invisible ? \"w-0 h-0\" : \"w-2 h-2\"}`}\n />\n </div>\n );\n});\n\nBadge.displayName = \"Badge\";\n","\"use client\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { TextField, TextFieldProps } from \"./index\";\n\ntype TextFieldChangeEvent = React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>;\n\nexport function DebouncedTextField<T extends string | number>(props: TextFieldProps<T>) {\n\n const [internalValue, setInternalValue] = useState<T | string>(props.value ?? \"\");\n const lastSentValueRef = useRef<T | string>(props.value ?? \"\");\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Sync state with props.value when it changes externally\n useEffect(() => {\n const externalValue = props.value ?? \"\";\n if (externalValue !== lastSentValueRef.current) {\n setInternalValue(externalValue);\n lastSentValueRef.current = externalValue;\n }\n }, [props.value]);\n\n // Cleanup timer on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n const flushChange = useCallback((value: T | string, event?: TextFieldChangeEvent) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n if (value !== props.value && props.onChange) {\n lastSentValueRef.current = value;\n const e = {\n ...event,\n target: {\n ...event?.target,\n value: value,\n name: props.name\n }\n } as TextFieldChangeEvent;\n props.onChange(e);\n }\n }, [props.value, props.onChange, props.name]);\n\n const internalOnChange = useCallback((event: TextFieldChangeEvent) => {\n const newValue = event.target.value;\n setInternalValue(newValue);\n\n if (timerRef.current) clearTimeout(timerRef.current);\n\n const eventCopy = {\n ...event,\n target: {\n ...event?.target,\n name: event?.target?.name\n }\n };\n\n timerRef.current = setTimeout(() => {\n flushChange(newValue, eventCopy as TextFieldChangeEvent);\n }, 150);\n }, [flushChange]);\n\n const internalOnBlur = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n flushChange(internalValue, event as TextFieldChangeEvent);\n props.onBlur?.(event);\n }, [internalValue, flushChange, props.onBlur]);\n\n return <TextField {...props}\n onChange={internalOnChange}\n onBlur={internalOnBlur}\n value={internalValue as T}/>;\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\nexport type SkeletonProps = {\n width?: number;\n height?: number;\n className?: string;\n}\n\nconst styles = `\n@keyframes shimmer {\n 0% {\n transform: translateX(-150%);\n }\n 100% {\n transform: translateX(150%);\n }\n}\n`;\n\nexport function Skeleton({\n width,\n height,\n className\n }: SkeletonProps) {\n\n useInjectStyles(\"Skeleton\", styles);\n\n return <span\n style={{\n width: width ? `${width}px` : \"100%\",\n height: height ? `${height}px` : \"12px\"\n }}\n className={\n cls(\n \"block relative overflow-hidden\",\n \"bg-surface-accent-50 dark:bg-surface-accent-800 rounded-md\",\n \"max-w-full max-h-full\",\n className)\n }>\n <span\n className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/50 dark:via-white/8 to-transparent\"\n style={{ animation: \"shimmer 1.8s ease-in-out infinite\" }}\n />\n </span>;\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport type ToggleButtonOption<T extends string = string> = {\n value: T;\n label: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport type ToggleButtonGroupProps<T extends string = string> = {\n /**\n * Currently selected value\n */\n value: T;\n /**\n * Callback when value changes\n */\n onValueChange: (value: T) => void;\n /**\n * Options to display\n */\n options: ToggleButtonOption<T>[];\n /**\n * Additional class names for the container\n */\n className?: string;\n}\n\n/**\n * A toggle button group component for selecting one option from a set.\n * Displays options as buttons in a horizontal row with active state styling.\n */\nexport function ToggleButtonGroup<T extends string = string>({\n value,\n onValueChange,\n options,\n className\n}: ToggleButtonGroupProps<T>) {\n return (\n <div role=\"group\" aria-label=\"Toggle options\" className={cls(\"inline-flex flex-row bg-surface-100 dark:bg-surface-900 rounded-lg p-1 gap-1\", className)}>\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n if (!option.disabled) {\n onValueChange(option.value);\n }\n }}\n disabled={option.disabled}\n aria-pressed={value === option.value}\n aria-disabled={option.disabled || undefined}\n className={cls(\n \"flex flex-row items-center justify-center gap-2 py-3 px-4 rounded-md transition-colors\",\n value === option.value\n ? \"bg-white dark:bg-surface-900 text-primary dark:text-primary-300 shadow-sm\"\n : \"text-surface-500 dark:text-surface-400 hover:bg-surface-100 dark:hover:bg-surface-700\",\n option.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {option.icon}\n <span className=\"text-sm font-medium\">{option.label}</span>\n </button>\n ))}\n </div>\n );\n}\n","import { ArrowUpIcon, FilterIcon } from \"lucide-react\";\nimport { iconSize } from \"../../icons/Icon\";\n\nimport React, { RefObject, useCallback, useEffect, useState } from \"react\";\nimport { deepEqual as equal } from \"fast-equals\";\n\nimport { VirtualTableColumn, VirtualTableSort, VirtualTableWhereFilterOp } from \"./VirtualTableProps\";\nimport { ErrorBoundary } from \"../ErrorBoundary\";\nimport { Badge } from \"../Badge\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { Popover } from \"../Popover\";\nimport { defaultBorderMixin } from \"../../styles\";\nimport { cls } from \"../../util/cls\";\ninterface FilterFormProps<T> {\n column: VirtualTableColumn<T>;\n onFilterUpdate: (filter?: [VirtualTableWhereFilterOp, unknown], newOpenFilterState?: boolean) => void;\n filter?: [VirtualTableWhereFilterOp, unknown];\n onHover: boolean,\n createFilterField: (props: FilterFormFieldProps<T>) => React.ReactNode;\n hidden: boolean;\n setHidden: (hidden: boolean) => void;\n}\n\nexport type FilterFormFieldProps<CustomProps> = {\n id: React.Key,\n filterValue: [VirtualTableWhereFilterOp, unknown] | undefined,\n setFilterValue: (filterValue?: [VirtualTableWhereFilterOp, unknown]) => void;\n column: VirtualTableColumn<CustomProps>;\n hidden: boolean;\n setHidden: (hidden: boolean) => void;\n};\n\ntype VirtualTableHeaderProps<M extends Record<string, unknown>> = {\n resizeHandleRef: React.Ref<HTMLDivElement>;\n columnIndex: number;\n isResizingIndex: number;\n column: VirtualTableColumn<unknown>;\n onColumnSort: (key: Extract<keyof M, string>) => void;\n filter?: [VirtualTableWhereFilterOp, unknown];\n sort: VirtualTableSort;\n onFilterUpdate: (column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, unknown]) => void;\n onClickResizeColumn?: (columnIndex: number, column: VirtualTableColumn) => void;\n createFilterField?: (props: FilterFormFieldProps<unknown>) => React.ReactNode;\n AdditionalHeaderWidget?: (props: { onHover: boolean }) => React.ReactNode;\n isDragging?: boolean;\n isDraggable?: boolean;\n};\n\nexport const VirtualTableHeader = React.memo<VirtualTableHeaderProps<Record<string, unknown>>>(\n function VirtualTableHeader<M extends Record<string, unknown>>({\n resizeHandleRef,\n columnIndex,\n isResizingIndex,\n sort,\n onColumnSort,\n onFilterUpdate,\n filter,\n column,\n onClickResizeColumn,\n createFilterField,\n AdditionalHeaderWidget,\n isDragging,\n isDraggable\n }: VirtualTableHeaderProps<M>) {\n\n const [onHover, setOnHover] = useState(false);\n\n const [openFilter, setOpenFilter] = React.useState(false);\n const [hidden, setHidden] = React.useState(false);\n\n const handleSettingsClick = useCallback((_event: React.MouseEvent) => {\n setOpenFilter(true);\n }, []);\n\n const update = useCallback((filterForProperty?: [VirtualTableWhereFilterOp, unknown], newOpenFilterState?: boolean) => {\n onFilterUpdate(column, filterForProperty);\n if (newOpenFilterState !== undefined)\n setOpenFilter(newOpenFilterState);\n }, [column, onFilterUpdate]);\n\n const thisColumnIsResizing = isResizingIndex === columnIndex;\n const anotherColumnIsResizing = isResizingIndex !== columnIndex && isResizingIndex > 0;\n\n const hovered = !anotherColumnIsResizing && (onHover || thisColumnIsResizing);\n\n return (\n <ErrorBoundary>\n <div\n className={cls(\"flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center\",\n isDragging\n ? \"bg-primary-bg dark:bg-primary-bg-dark\"\n : \"bg-surface-50 dark:bg-surface-900\",\n \"text-text-secondary hover:text-text-primary dark:text-text-secondary-dark dark:hover:text-text-primary-dark\",\n !isDragging && \"hover:bg-surface-100 dark:hover:bg-surface-900 hover:bg-opacity-50 hover:bg-surface-100/50 dark:hover:bg-opacity-50 dark:hover:bg-surface-900/50\",\n column.frozen ? \"sticky left-0 z-10\" : \"relative z-0\",\n isDraggable && \"cursor-grab\"\n )}\n style={{\n left: column.frozen ? 0 : undefined,\n minWidth: column.width,\n maxWidth: column.width\n }}\n onMouseEnter={() => setOnHover(true)}\n onMouseMove={() => setOnHover(true)}\n onMouseLeave={() => setOnHover(false)}\n >\n\n <div className=\"overflow-hidden grow\">\n <div\n className={`flex items-center justify-${column.headerAlign} flex-row`}>\n\n {column.icon && (\n <div className=\"flex-shrink-0 flex items-center justify-center mr-1\">\n {React.isValidElement(column.icon) ? (\n React.cloneElement(column.icon as React.ReactElement<any>, {\n size: 14,\n className: cls((column.icon as React.ReactElement<any>).props?.className, \"flex-shrink-0\")\n })\n ) : (\n column.icon\n )}\n </div>\n )}\n\n <div\n className=\"truncate -webkit-box w-full mr-1 overflow-hidden\"\n style={{\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 2,\n justifyContent: column.align\n }}>\n {column.title}\n </div>\n\n </div>\n </div>\n <>\n\n {AdditionalHeaderWidget &&\n <AdditionalHeaderWidget onHover={onHover || openFilter}/>}\n\n {column.sortable && (sort || hovered || openFilter) &&\n <div className=\"flex-shrink-0\">\n <Badge color=\"secondary\"\n invisible={!sort}>\n <IconButton\n size={\"small\"}\n className={onHover || openFilter ? \"bg-white dark:bg-surface-900\" : undefined}\n onClick={() => {\n onColumnSort(column.key as Extract<keyof M, string>);\n }}\n >\n {!sort &&\n <ArrowUpIcon size={14} className=\"flex-shrink-0\" />}\n {sort === \"asc\" &&\n <ArrowUpIcon size={14} className=\"flex-shrink-0\" />}\n {sort === \"desc\" &&\n <ArrowUpIcon size={14} className=\"flex-shrink-0 rotate-180\" />}\n </IconButton>\n </Badge>\n </div>\n }\n </>\n\n {column.filter && createFilterField && <div className=\"flex-shrink-0\">\n <Badge color=\"secondary\"\n invisible={!filter}>\n\n <Popover\n open={openFilter}\n onOpenChange={setOpenFilter}\n className={hidden ? \"hidden\" : undefined}\n modal={true}\n trigger={\n <IconButton\n className={onHover || openFilter ? \"bg-white dark:bg-surface-900\" : undefined}\n size={\"small\"}\n onClick={handleSettingsClick}>\n <FilterIcon size={14} className=\"flex-shrink-0\"/>\n </IconButton>}\n >\n <FilterForm column={column}\n filter={filter}\n onHover={onHover}\n onFilterUpdate={update}\n createFilterField={createFilterField}\n hidden={hidden}\n setHidden={setHidden}/>\n\n </Popover>\n\n </Badge>\n\n </div>}\n\n {column.resizable && <div\n ref={resizeHandleRef as React.Ref<HTMLDivElement>}\n data-no-dnd=\"true\"\n className={cls(\n \"absolute h-full w-[6px] top-0 right-0 cursor-col-resize\",\n hovered && \"bg-surface-300 dark:bg-surface-700\"\n )}\n onPointerDown={(e) => {\n e.stopPropagation();\n if (onClickResizeColumn) {\n onClickResizeColumn(columnIndex, column);\n }\n }}\n />}\n </div>\n\n </ErrorBoundary>\n );\n }, equal) as React.FunctionComponent<VirtualTableHeaderProps<Record<string, unknown>>>;\n\nfunction FilterForm<M>({\n column,\n onFilterUpdate,\n filter,\n onHover,\n createFilterField,\n hidden,\n setHidden\n}: FilterFormProps<M>) {\n\n const id = column.key;\n\n const [filterInternal, setFilterInternal] = useState<[VirtualTableWhereFilterOp, unknown] | undefined>(filter);\n\n useEffect(() => {\n setFilterInternal(filter);\n }, [filter]);\n\n if (!column.filter) return null;\n\n const submit = () => {\n onFilterUpdate(filterInternal, false);\n };\n\n const reset = (_e: React.MouseEvent) => {\n onFilterUpdate(undefined, false);\n };\n\n const filterIsSet = !!filter;\n\n const filterField = createFilterField({\n id,\n filterValue: filterInternal,\n setFilterValue: setFilterInternal,\n column,\n hidden,\n setHidden\n });\n\n if (!filterField) return null;\n return (\n <form noValidate={true}\n onSubmit={(e) => {\n e.stopPropagation();\n e.preventDefault();\n submit();\n }}\n className={\"text-surface-900 dark:text-white\"}>\n <div\n className={cls(defaultBorderMixin, \"py-4 px-6 typography-label border-b\")}>\n {column.title ?? id}\n </div>\n {filterField && <div className=\"m-4 w-[400px]\">\n {filterField}\n </div>}\n <div className=\"flex justify-end m-4\">\n <Button\n className=\"mr-4\"\n disabled={!filterIsSet}\n variant={\"text\"}\n type=\"reset\"\n aria-label=\"filter clear\"\n onClick={reset}>Clear</Button>\n <Button\n type=\"submit\">Filter</Button>\n </div>\n </form>\n );\n\n}\n","import React, { createRef, useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { VirtualTableColumn, VirtualTableWhereFilterOp } from \"./VirtualTableProps\";\nimport { ErrorBoundary } from \"../ErrorBoundary\";\nimport { VirtualTableHeader } from \"./VirtualTableHeader\";\nimport { VirtualTableContextProps } from \"./types\";\nimport { defaultBorderMixin } from \"../../styles\";\nimport { cls } from \"../../util/cls\";import { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\n\n// Sortable column header wrapper\nconst SortableColumnHeader = ({\n column,\n columnIndex,\n columnRefs,\n isResizing,\n onFilterUpdate,\n filter,\n sortByProperty,\n currentSort,\n onColumnSort,\n onClickResizeColumn,\n createFilterField,\n isDragging,\n isDraggable\n}: {\n column: VirtualTableColumn;\n columnIndex: number;\n columnRefs: React.Ref<HTMLDivElement>[];\n isResizing: number;\n onFilterUpdate: (column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, unknown]) => void;\n filter: [VirtualTableWhereFilterOp, unknown] | undefined;\n sortByProperty: string | undefined;\n currentSort: \"asc\" | \"desc\" | undefined;\n onColumnSort: (key: string) => void;\n onClickResizeColumn: (index: number) => void;\n createFilterField: ((props: import(\"./VirtualTableHeader\").FilterFormFieldProps<unknown>) => React.ReactNode) | undefined;\n isDragging: boolean;\n isDraggable: boolean;\n}) => {\n const [isPressing, setIsPressing] = useState(false);\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition\n } = useSortable({\n id: column.key,\n disabled: !isDraggable || column.frozen\n });\n\n const style = {\n // Only use translate, ignore any scale transforms\n transform: transform ? `translateX(${transform.x}px)` : undefined,\n // Don't transition the dragged item - only other items should animate\n transition: isDragging ? undefined : transition,\n minWidth: column.width,\n maxWidth: column.width,\n width: column.width\n };\n\n // Combine our press handlers with dnd-kit listeners\n const combinedListeners = isDraggable ? {\n ...listeners,\n onPointerDown: (e: React.PointerEvent) => {\n setIsPressing(true);\n listeners?.onPointerDown?.(e);\n },\n onPointerUp: () => setIsPressing(false),\n onPointerCancel: () => setIsPressing(false)\n } : {};\n\n // Reset pressing state when drag ends\n React.useEffect(() => {\n if (!isDragging) {\n setIsPressing(false);\n }\n }, [isDragging]);\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cls(\n \"flex-shrink-0 h-full\",\n column.frozen && \"sticky left-0 z-10\"\n )}\n {...attributes}\n {...combinedListeners}\n >\n <VirtualTableHeader\n resizeHandleRef={columnRefs[columnIndex]}\n columnIndex={columnIndex}\n isResizingIndex={isResizing}\n onFilterUpdate={onFilterUpdate}\n filter={filter}\n sort={sortByProperty === column.key ? currentSort : undefined}\n onColumnSort={onColumnSort}\n onClickResizeColumn={onClickResizeColumn}\n column={column}\n createFilterField={createFilterField}\n AdditionalHeaderWidget={column.AdditionalHeaderWidget}\n isDragging={isDragging || isPressing}\n isDraggable={isDraggable}/>\n </div>\n );\n};\n\nexport const VirtualTableHeaderRow = ({\n columns,\n currentSort,\n onColumnSort,\n onFilterUpdate,\n sortByProperty,\n filter,\n onColumnResize,\n onColumnResizeEnd,\n createFilterField,\n AddColumnComponent,\n onColumnsOrderChange,\n data,\n cellRenderer: CellRenderer,\n rowHeight = 54,\n draggingColumnId,\n headerHeight = 48\n}: VirtualTableContextProps<Record<string, unknown>>) => {\n\n const columnRefs = useMemo(() => columns.map(() => createRef<HTMLDivElement>()), [columns.length]);\n const [isResizing, setIsResizing] = useState(-1);\n\n const adjustWidthColumn = useCallback((index: number, width: number, end: boolean) => {\n const column = columns[index];\n const minWidth = 100;\n const maxWidth = 800;\n const newWidth = width > maxWidth ? maxWidth : (width < minWidth ? minWidth : width);\n const params = {\n width: newWidth,\n key: column.key as string,\n column: {\n ...column,\n width: newWidth\n } as VirtualTableColumn\n };\n if (!end)\n onColumnResize(params);\n else\n onColumnResizeEnd(params);\n }, [columns, onColumnResize, onColumnResizeEnd]);\n\n const getEventNewWidth = useCallback((e: MouseEvent) => {\n if (isResizing >= 0) {\n const left = columnRefs[isResizing].current?.parentElement?.getBoundingClientRect().left;\n if (!left) return;\n return e.clientX - left;\n }\n return undefined;\n }, [columnRefs, isResizing]);\n\n const setCursorDocument = useCallback((isResizing: boolean) => {\n document.body.style.cursor = isResizing ? \"col-resize\" : \"auto\";\n }, []);\n\n const handleOnMouseMove = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const newWidth = getEventNewWidth(e);\n if (newWidth)\n adjustWidthColumn(isResizing, newWidth, false);\n }, [adjustWidthColumn, getEventNewWidth, isResizing]);\n\n const handleOnMouseUp = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const newWidth = getEventNewWidth(e);\n if (newWidth)\n adjustWidthColumn(isResizing, newWidth, true);\n setIsResizing(-1);\n setCursorDocument(false);\n }, [adjustWidthColumn, getEventNewWidth, isResizing, setCursorDocument]);\n\n const removeResizingListeners = useCallback(() => {\n document.removeEventListener(\"mousemove\", handleOnMouseMove);\n document.removeEventListener(\"mouseup\", handleOnMouseUp);\n }, [handleOnMouseMove, handleOnMouseUp]);\n\n const attachResizeListeners = useCallback(() => {\n document.addEventListener(\"mousemove\", handleOnMouseMove);\n document.addEventListener(\"mouseup\", handleOnMouseUp);\n }, [handleOnMouseMove, handleOnMouseUp]);\n\n useEffect(() => {\n if (isResizing >= 0) {\n attachResizeListeners();\n } else {\n removeResizingListeners();\n }\n return () => {\n removeResizingListeners();\n };\n }, [attachResizeListeners, isResizing, removeResizingListeners]);\n\n const onClickResizeColumn = useCallback((index: number) => {\n setIsResizing(index);\n setCursorDocument(true);\n }, [setCursorDocument]);\n\n return (\n <>\n <div\n className={cls(defaultBorderMixin, \"z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 border-b bg-surface-50 dark:bg-surface-900\")}\n style={{ height: headerHeight }}>\n {columns.map((column, columnIndex) => {\n const columnFilter = column && filter && filter[column.key] ? filter[column.key] : undefined;\n const filterForThisProperty: [VirtualTableWhereFilterOp, unknown] | undefined =\n columnFilter\n ? (Array.isArray(columnFilter[0]) ? (columnFilter as [VirtualTableWhereFilterOp, unknown][])[0] : (columnFilter as [VirtualTableWhereFilterOp, unknown]))\n : undefined;\n\n const isDraggable = !column.frozen && !!onColumnsOrderChange;\n const isDragging = draggingColumnId === column.key;\n\n return (\n <ErrorBoundary key={\"header_\" + column.key}>\n <SortableColumnHeader\n column={column}\n columnIndex={columnIndex}\n columnRefs={columnRefs}\n isResizing={isResizing}\n onFilterUpdate={onFilterUpdate}\n filter={filterForThisProperty}\n sortByProperty={sortByProperty}\n currentSort={currentSort}\n onColumnSort={onColumnSort}\n onClickResizeColumn={onClickResizeColumn}\n createFilterField={createFilterField}\n isDragging={isDragging}\n isDraggable={isDraggable}\n />\n </ErrorBoundary>\n );\n })}\n\n {AddColumnComponent && <AddColumnComponent/>}\n\n </div>\n </>\n );\n};\n","import React, { useCallback } from \"react\";\n\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { VirtualTableRowProps } from \"./types\";\nimport { cls } from \"../../util/cls\";\nexport const VirtualTableRow = React.memo<VirtualTableRowProps<Record<string, unknown>>>(\n function VirtualTableRow<T extends Record<string, unknown>>({\n rowData,\n rowIndex,\n children,\n onRowClick,\n rowHeight,\n style,\n hoverRow,\n rowClassName\n }: VirtualTableRowProps<T>) {\n\n const onClick = useCallback((event: React.SyntheticEvent) => {\n if (onRowClick)\n onRowClick({\n rowData,\n rowIndex,\n event\n })\n }, [onRowClick, rowData, rowIndex]);\n\n return (\n <div\n className={cls(\n \"flex min-w-full text-sm border-b border-surface-200/60 dark:border-surface-700/60 dark:bg-surface-800\",\n rowClassName ? rowClassName(rowData) : \"\",\n {\n \"hover:!bg-primary/[0.03] dark:hover:!bg-primary/5\": hoverRow,\n \"cursor-pointer \": onRowClick\n }\n )}\n onClick={onClick}\n style={{\n ...(style),\n height: rowHeight,\n width: \"fit-content\"\n }}\n >\n {children}\n </div>\n );\n\n },\n equal\n);\n","import React from \"react\";\n\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { CellRendererParams, VirtualTableColumn } from \"./VirtualTableProps\";\n\ntype VirtualTableCellProps<T> = {\n dataKey: string;\n column: VirtualTableColumn;\n columns: VirtualTableColumn[];\n rowData: T;\n cellData: unknown;\n rowIndex: number;\n columnIndex: number;\n cellRenderer: (props: CellRendererParams<T>) => React.ReactNode;\n // Sortable props\n sortableNodeRef?: (node: HTMLElement | null) => void;\n sortableStyle?: React.CSSProperties;\n sortableAttributes?: Record<string, unknown>;\n isDragging?: boolean;\n isDraggable?: boolean;\n frozen?: boolean;\n extraData?: unknown;\n};\n\nexport const VirtualTableCell = React.memo<VirtualTableCellProps<unknown>>(\n function VirtualTableCell<T>(props: VirtualTableCellProps<T>) {\n return props.rowData ? props.cellRenderer(\n {\n cellData: props.cellData,\n rowData: props.rowData,\n rowIndex: props.rowIndex,\n isScrolling: false,\n column: props.column,\n columns: props.columns,\n columnIndex: props.columnIndex,\n width: props.column.width,\n sortableNodeRef: props.sortableNodeRef,\n sortableStyle: props.sortableStyle,\n sortableAttributes: props.sortableAttributes,\n isDragging: props.isDragging,\n isDraggable: props.isDraggable,\n frozen: props.frozen,\n extraData: props.extraData\n } as CellRendererParams<T>\n ) : null;\n },\n (a, b) => {\n return equal(a.rowData, b.rowData) &&\n equal(a.column, b.column) &&\n equal(a.cellData, b.cellData) &&\n a.rowIndex === b.rowIndex &&\n a.columnIndex === b.columnIndex &&\n a.isDragging === b.isDragging &&\n a.isDraggable === b.isDraggable &&\n a.frozen === b.frozen &&\n equal(a.extraData, b.extraData)\n }\n);\n","\n\nimport React, { createContext, forwardRef, RefObject, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { FixedSizeList as List } from \"react-window\";\nimport useMeasure from \"react-use-measure\";\n\nimport { CircularProgress } from \"../CircularProgress\";\nimport {\n OnVirtualTableColumnResizeParams,\n VirtualTableColumn,\n VirtualTableFilterValues,\n VirtualTableProps,\n VirtualTableWhereFilterOp\n} from \"./VirtualTableProps\";\n\nimport { VirtualTableContextProps } from \"./types\";\nimport { VirtualTableHeaderRow } from \"./VirtualTableHeaderRow\";\nimport { VirtualTableRow } from \"./VirtualTableRow\";\nimport { VirtualTableCell } from \"./VirtualTableCell\";\nimport { CenteredView, cls, Typography } from \"../../index\";\nimport { useDebounceCallback } from \"../../hooks/useDebounceCallback\";\nimport {\n closestCenter,\n DndContext,\n DragEndEvent,\n DragStartEvent,\n PointerSensor,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport { arrayMove, horizontalListSortingStrategy, SortableContext, useSortable } from \"@dnd-kit/sortable\";\n\n\nconst VirtualListContext = createContext<VirtualTableContextProps<Record<string, unknown>>>(null! as VirtualTableContextProps<Record<string, unknown>>);\nVirtualListContext.displayName = \"VirtualListContext\";\n\ntype InnerElementProps = {\n children: React.ReactNode,\n style: React.CSSProperties\n};\n\n// eslint-disable-next-line react/display-name\nconst innerElementType = forwardRef<HTMLDivElement, InnerElementProps>(({\n children,\n ...rest\n}: InnerElementProps, ref) => {\n\n return (\n <VirtualListContext.Consumer>\n {(virtualTableProps) => {\n const customView = virtualTableProps.customView;\n const headerHeight = virtualTableProps.headerHeight ?? 48;\n return (\n <>\n <div\n id={\"virtual-table\"}\n style={{\n position: \"relative\",\n height: \"100%\",\n zIndex: 0\n }}>\n <div\n ref={ref}\n {...rest}\n style={{\n ...rest?.style,\n height: (typeof rest?.style?.height === \"number\" ? rest.style.height : parseFloat((rest?.style?.height as string) || \"0\")) + headerHeight,\n minHeight: \"100%\",\n position: \"relative\"\n }}>\n <div style={{ position: \"sticky\",\ntop: 0,\nzIndex: 20 }}>\n <VirtualTableHeaderRow {...virtualTableProps}/>\n </div>\n {!customView && children}\n </div>\n\n </div>\n\n {customView && <div style={{\n position: \"sticky\",\n top: virtualTableProps.headerHeight ?? 48,\n flexGrow: 1,\n height: `calc(100% - ${virtualTableProps.headerHeight ?? 48}px)`,\n marginTop: `calc(${(virtualTableProps.headerHeight ?? 48)}px - 100vh)`,\n left: 0\n }}>{customView}</div>}\n\n </>\n );\n }}\n </VirtualListContext.Consumer>\n );\n})\n ;\n\n/**\n * This is a Table component that allows displaying arbitrary data, not\n * necessarily related to entities or properties. It is the component\n * that powers the entity collections but has a generic API, so it\n * can be reused.\n *\n * @group Components\n */\nexport const VirtualTable = React.memo<VirtualTableProps<Record<string, unknown>>>(\n function VirtualTable<T extends Record<string, unknown>>({\n data,\n onResetPagination,\n onEndReached,\n endOffset = 600,\n rowHeight = 54,\n headerHeight = 48,\n columns: columnsProp,\n onRowClick,\n onColumnResize,\n onColumnResizeEnd,\n filter: filterInput,\n checkFilterCombination,\n onFilterUpdate,\n sortBy,\n error,\n emptyComponent,\n onSortByUpdate,\n onScroll: onScrollProp,\n loading,\n cellRenderer,\n hoverRow,\n createFilterField,\n rowClassName,\n style,\n className,\n endAdornment,\n AddColumnComponent,\n initialScroll = 0,\n onColumnsOrderChange,\n extraData\n }: VirtualTableProps<T>) {\n\n const sortByProperty: string | undefined = sortBy ? sortBy[0] : undefined;\n const currentSort: \"asc\" | \"desc\" | undefined = sortBy ? sortBy[1] : undefined;\n\n const [columns, setColumns] = useState(columnsProp);\n\n const tableRef = useRef<HTMLDivElement>(null);\n const endReachCallbackThreshold = useRef<number>(0);\n\n const debouncedScroll = useDebounceCallback(onScrollProp, 200);\n\n // Drag and drop state\n const [draggingColumnId, setDraggingColumnId] = useState<string | null>(null);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5\n }\n })\n );\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n setDraggingColumnId(event.active.id as string);\n }, []);\n\n const handleDragEnd = useCallback((event: DragEndEvent) => {\n const {\n active,\n over\n } = event;\n setDraggingColumnId(null);\n\n if (over && active.id !== over.id && onColumnsOrderChange) {\n const oldIndex = columns.findIndex((col) => col.key === active.id);\n const newIndex = columns.findIndex((col) => col.key === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newColumns = arrayMove(columns, oldIndex, newIndex);\n setColumns(newColumns);\n onColumnsOrderChange(newColumns);\n }\n }\n }, [columns, onColumnsOrderChange]);\n\n const handleDragCancel = useCallback(() => {\n setDraggingColumnId(null);\n }, []);\n\n // Set initial scroll position\n useEffect(() => {\n if (tableRef.current && initialScroll) {\n const { scrollLeft } = tableRef.current;\n tableRef.current.scrollTo(scrollLeft, initialScroll);\n }\n }, [tableRef, initialScroll]);\n\n useEffect(() => {\n setColumns(columnsProp);\n }, [columnsProp]);\n\n // Removed redundant ResizeObserver to prevent performance issues and UI flickering.\n\n const [measureRef, bounds] = useMeasure({\n polyfill: ResizeObserver,\n scroll: true,\n // This is important for handling zooming in react-flow\n offsetSize: true\n });\n\n const onColumnResizeInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {\n setColumns(prevColumns =>\n prevColumns.map((column) =>\n column.key === params.column.key ? params.column : column\n )\n );\n }, []);\n\n const onColumnResizeEndInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {\n setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));\n if (onColumnResize) {\n onColumnResize(params);\n }\n if (onColumnResizeEnd) {\n onColumnResizeEnd(params);\n }\n }, [columns, onColumnResize, onColumnResizeEnd]);\n\n // saving the current filter as a ref as a workaround for header closure\n const filterRef = useRef<VirtualTableFilterValues<string> | undefined>(undefined);\n\n useEffect(() => {\n filterRef.current = filterInput;\n }, [filterInput]);\n\n const scrollToTop = useCallback(() => {\n endReachCallbackThreshold.current = 0;\n if (tableRef.current) {\n tableRef.current.scrollTo(tableRef.current?.scrollLeft, 0);\n }\n }, []);\n\n const onColumnSort = useCallback((key: string) => {\n\n const isDesc = sortByProperty === key && currentSort === \"desc\";\n const isAsc = sortByProperty === key && currentSort === \"asc\";\n const newSort = isAsc ? \"desc\" : (isDesc ? undefined : \"asc\");\n const newSortProperty: string | undefined = isDesc ? undefined : key;\n\n const filter = filterRef.current;\n\n const newSortBy: [string, \"asc\" | \"desc\"] | undefined = newSort && newSortProperty ? [newSortProperty, newSort] : undefined;\n if (filter) {\n if (checkFilterCombination && !checkFilterCombination(filter, newSortBy)) {\n if (onFilterUpdate)\n onFilterUpdate(undefined);\n }\n }\n\n if (onResetPagination) {\n onResetPagination();\n }\n\n if (onSortByUpdate) {\n onSortByUpdate(newSortBy);\n }\n\n scrollToTop();\n }, [checkFilterCombination, currentSort, onFilterUpdate, onResetPagination, onSortByUpdate, scrollToTop, sortByProperty]);\n\n const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);\n\n const onEndReachedInternal = useCallback((scrollOffset: number) => {\n if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + endOffset) {\n endReachCallbackThreshold.current = scrollOffset;\n onEndReached();\n }\n }, [data?.length, onEndReached]);\n\n const onScroll = useCallback(({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n }: {\n scrollDirection: \"forward\" | \"backward\",\n scrollOffset: number,\n scrollUpdateWasRequested: boolean;\n }) => {\n if (onScrollProp) {\n debouncedScroll({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n })\n }\n if (!scrollUpdateWasRequested && (scrollOffset >= maxScroll - endOffset))\n onEndReachedInternal(scrollOffset);\n }, [maxScroll, onEndReachedInternal]);\n\n const onFilterUpdateInternal = useCallback((column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, unknown]) => {\n\n endReachCallbackThreshold.current = 0;\n const filter = filterRef.current;\n let newFilterValue: VirtualTableFilterValues<string> = filter ? { ...filter } : {};\n\n if (!filterForProperty) {\n delete newFilterValue[column.key];\n } else {\n newFilterValue[column.key] = filterForProperty;\n }\n const newSortBy: [string, \"asc\" | \"desc\"] | undefined = sortByProperty && currentSort ? [sortByProperty, currentSort] : undefined;\n const isNewFilterCombinationValid = !checkFilterCombination || checkFilterCombination(newFilterValue, newSortBy);\n if (!isNewFilterCombinationValid) {\n newFilterValue = filterForProperty ? { [column.key]: filterForProperty } as VirtualTableFilterValues<Extract<keyof T, string>> : {};\n }\n\n if (onFilterUpdate) onFilterUpdate(newFilterValue);\n }, [checkFilterCombination, currentSort, onFilterUpdate, sortByProperty]);\n\n const empty = !loading && (data?.length ?? 0) === 0;\n const customView = (error && (data?.length ?? 0) === 0)\n ? <CenteredView maxWidth={\"2xl\"}\n className=\"flex flex-col gap-2\">\n\n <Typography variant={\"h6\"}>\n {\"Error\"}\n </Typography>\n\n {error?.message && <SafeLinkRenderer text={error.message}/>}\n\n </CenteredView>\n : (empty\n ? (loading\n ? <div className=\"flex items-center justify-center py-12 px-8\">\n <CircularProgress size=\"small\"/>\n </div>\n : <div\n className=\"flex flex-col overflow-auto items-center justify-center py-12 px-8\">\n {emptyComponent}\n </div>)\n : undefined);\n\n const virtualListController = useMemo(() => ({\n data,\n rowHeight: rowHeight,\n headerHeight: headerHeight,\n cellRenderer,\n columns,\n currentSort,\n onRowClick,\n customView,\n onColumnResize: onColumnResizeInternal,\n onColumnResizeEnd: onColumnResizeEndInternal,\n filter: filterRef.current,\n onColumnSort,\n onFilterUpdate: onFilterUpdateInternal,\n sortByProperty,\n hoverRow: hoverRow ?? false,\n createFilterField,\n rowClassName,\n endAdornment,\n AddColumnComponent,\n onColumnsOrderChange: onColumnsOrderChange ? (newColumns: VirtualTableColumn[]) => {\n setColumns(newColumns);\n onColumnsOrderChange(newColumns);\n } : undefined,\n draggingColumnId,\n extraData\n }), [data, rowHeight, cellRenderer, columns, currentSort, onRowClick, customView, onColumnResizeInternal, onColumnResizeEndInternal, filterInput, onColumnSort, onFilterUpdateInternal, sortByProperty, hoverRow, createFilterField, rowClassName, endAdornment, AddColumnComponent, onColumnsOrderChange, draggingColumnId, extraData]);\n\n // Get sortable column keys (excluding frozen columns)\n const sortableColumnKeys = columns\n .filter(col => !col.frozen)\n .map(col => col.key);\n\n const tableContent = (\n <div\n ref={measureRef}\n style={style}\n className={cls(\n \"h-full w-full\",\n className,\n draggingColumnId && \"overflow-hidden\"\n )}>\n {/* SAFETY: T extends Record<string, any> is structurally assignable to Record<string, unknown> */}\n <VirtualListContext.Provider\n value={virtualListController as VirtualTableContextProps<Record<string, unknown>>}>\n\n <MemoizedList\n outerRef={tableRef}\n key={rowHeight}\n width={bounds.width}\n height={bounds.height}\n itemCount={(data?.length ?? 0) + (endAdornment ? 1 : 0)}\n onScroll={draggingColumnId ? undefined : onScroll}\n includeAddColumn={Boolean(AddColumnComponent)}\n itemSize={rowHeight}/>\n\n </VirtualListContext.Provider>\n </div>\n );\n\n // Wrap with DndContext if column reorder is enabled\n if (onColumnsOrderChange) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n items={sortableColumnKeys}\n strategy={horizontalListSortingStrategy}\n >\n {tableContent}\n </SortableContext>\n </DndContext>\n );\n }\n\n return tableContent;\n },\n equal\n);\n// Wrapper that applies sortable transforms to cells\nconst SortableCellWrapper = ({\n columnKey,\n width,\n isDragging,\n isDraggable,\n frozen,\n children\n}: {\n columnKey: string;\n width: number;\n isDragging: boolean;\n isDraggable: boolean;\n frozen?: boolean;\n children: React.ReactNode;\n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition\n } = useSortable({\n id: columnKey,\n disabled: !isDraggable || frozen\n });\n\n // Remove tabIndex from attributes to avoid capturing focus before cell content\n const { tabIndex: _tabIndex, ...attrsWithoutTabIndex } = attributes;\n\n const style = {\n // Only use translate, ignore any scale transforms\n transform: transform ? `translateX(${transform.x}px)` : undefined,\n // Don't transition the dragged item - only other items should animate\n transition: isDragging ? undefined : transition,\n minWidth: width,\n maxWidth: width,\n width: width\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cls(\n \"flex-shrink-0\",\n frozen && \"sticky left-0 z-10 bg-white dark:bg-surface-900\"\n )}\n {...attrsWithoutTabIndex}\n >\n {children}\n </div>\n );\n};\n\nfunction MemoizedList({\n outerRef,\n width,\n height,\n itemCount,\n onScroll,\n itemSize,\n includeAddColumn\n}: {\n outerRef: RefObject<HTMLDivElement | null>;\n width: number;\n height: number;\n itemCount: number;\n onScroll?: (params: {\n scrollDirection: \"forward\" | \"backward\",\n scrollOffset: number,\n scrollUpdateWasRequested: boolean;\n }) => void;\n itemSize: number;\n includeAddColumn?: boolean;\n}) {\n\n const Row = useCallback(({\n index,\n style\n }: { index: number; style: React.CSSProperties }) => {\n return <VirtualListContext.Consumer>\n {({\n onRowClick,\n data,\n columns,\n rowHeight = 54,\n headerHeight = 48,\n cellRenderer,\n hoverRow,\n rowClassName,\n endAdornment,\n draggingColumnId,\n onColumnsOrderChange,\n extraData\n }) => {\n\n if (endAdornment && index === (data ?? []).length) {\n return <div style={{\n ...style,\n height: \"auto\",\n position: \"sticky\",\n bottom: 0,\n zIndex: 1\n }}>\n {endAdornment}\n </div>;\n }\n\n const rowData = (data ? data[index] : undefined) as Record<string, unknown>;\n return (\n <VirtualTableRow\n key={`row_${index}`}\n rowData={rowData}\n rowIndex={index}\n onRowClick={onRowClick}\n columns={columns}\n hoverRow={hoverRow}\n rowClassName={rowClassName}\n style={{\n ...style,\n top: `calc(${style.top}px + ${headerHeight ?? 48}px)`\n }}\n rowHeight={rowHeight}>\n\n {columns.map((column: VirtualTableColumn, columnIndex: number) => {\n const cellData = rowData && rowData[column.key];\n const isDragging = draggingColumnId === column.key;\n const isDraggable = !column.frozen && !!onColumnsOrderChange;\n\n return onColumnsOrderChange ? (\n <SortableCellWrapper\n key={`cell_wrapper_${column.key}`}\n columnKey={column.key}\n width={column.width}\n isDragging={isDragging}\n isDraggable={isDraggable}\n frozen={column.frozen}\n >\n <VirtualTableCell\n dataKey={column.key}\n // @ts-expect-error -- React.memo<VirtualTableProps<any>> erases the generic T, so cellRenderer's parameter type widens to `any` losing structural compatibility with VirtualTableCell<T>. The types are structurally correct at runtime.\n cellRenderer={cellRenderer}\n column={column}\n columns={columns}\n rowData={rowData}\n cellData={cellData}\n rowIndex={index}\n columnIndex={columnIndex}\n extraData={extraData}/>\n </SortableCellWrapper>\n ) : (\n <div\n key={`cell_wrapper_${column.key}`}\n className={cls(\n \"flex-shrink-0 relative\",\n column.frozen && \"sticky left-0 z-10 bg-white dark:bg-surface-900\"\n )}\n style={{\n minWidth: column.width,\n maxWidth: column.width,\n width: column.width\n }}\n >\n <VirtualTableCell\n dataKey={column.key}\n // @ts-expect-error -- React.memo<VirtualTableProps<any>> erases the generic T, so cellRenderer's parameter type widens to `any` losing structural compatibility with VirtualTableCell<T>. The types are structurally correct at runtime.\n cellRenderer={cellRenderer}\n column={column}\n columns={columns}\n rowData={rowData}\n cellData={cellData}\n rowIndex={index}\n columnIndex={columnIndex}\n extraData={extraData}/>\n </div>\n );\n })}\n\n {includeAddColumn && <div className={\"w-20\"}/>}\n\n </VirtualTableRow>\n );\n }}\n </VirtualListContext.Consumer>;\n }, []);\n\n return <List\n outerRef={outerRef}\n innerElementType={innerElementType}\n width={width}\n height={height}\n overscanCount={4}\n itemCount={itemCount}\n onScroll={onScroll}\n itemSize={itemSize}>\n {Row}\n </List>;\n}\n\nconst SafeLinkRenderer: React.FC<{\n text: string;\n}> = ({ text }) => {\n const urlRegex = /https?:\\/\\/[^\\s]+/g;\n const urls = text.match(urlRegex) || [];\n const parts = text.split(urlRegex);\n\n return (\n <div className={\"break-all\"}>\n {parts.map((part, i) => (\n <React.Fragment key={i}>\n {part}\n {urls[i] && (\n <>\n <a href={urls[i]} className=\"underline\" target=\"_blank\" rel=\"noopener noreferrer\">Link</a>\n <br/>\n </>\n )}\n </React.Fragment>\n ))}\n </div>\n );\n};\n","import { useSyncExternalStore, useCallback, useRef } from \"react\";\n\nexport interface SelectedCell {\n columnKey: string;\n id: string | number;\n cellRect?: DOMRect;\n width?: number;\n height?: number;\n}\n\nexport function createVirtualTableSelectionStore<T extends SelectedCell = SelectedCell>() {\n let selectedCell: T | undefined = undefined;\n const listeners = new Set<() => void>();\n\n function getEntity(): T | undefined {\n return selectedCell;\n }\n\n function subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n function select(cell: T | undefined) {\n selectedCell = cell;\n listeners.forEach(l => l());\n }\n\n return {\n getEntity,\n subscribe,\n select\n };\n}\n\nexport type VirtualTableSelectionStore<T extends SelectedCell = SelectedCell> = ReturnType<typeof createVirtualTableSelectionStore<T>>;\n\nexport function useVirtualTableCellSelected<T extends SelectedCell = SelectedCell>(\n store: VirtualTableSelectionStore<T>,\n columnKey: string,\n id: string | number\n): boolean {\n const selectorRef = useRef({ columnKey, id });\n selectorRef.current = { columnKey, id };\n\n const getEntity = useCallback(() => {\n const cell = store.getEntity();\n if (!cell) return false;\n const s = selectorRef.current;\n return cell.columnKey === s.columnKey && cell.id === s.id;\n }, [store]);\n\n return useSyncExternalStore(store.subscribe, getEntity, getEntity);\n}\n","import React, { createContext, useContext } from \"react\";\nimport { VirtualTableSelectionStore, SelectedCell } from \"./SelectionStore\";\n\nexport interface VirtualTableSelectionContextProps<T extends SelectedCell = SelectedCell> {\n selectionStore: VirtualTableSelectionStore<T>;\n select: (cell: T | undefined) => void;\n}\n\nconst SelectionContext = createContext<VirtualTableSelectionContextProps<any> | null>(null);\n\nexport const VirtualTableSelectionProvider = <T extends SelectedCell = SelectedCell>({\n store,\n children\n}: {\n store: VirtualTableSelectionStore<T>;\n children: React.ReactNode;\n}) => {\n const value = React.useMemo(() => ({\n selectionStore: store,\n select: store.select\n }), [store]);\n\n return (\n <SelectionContext.Provider value={value}>\n {children}\n </SelectionContext.Provider>\n );\n};\n\nexport const useVirtualTableSelection = <T extends SelectedCell = SelectedCell>() => {\n const context = useContext(SelectionContext);\n if (!context) {\n throw new Error(\"useVirtualTableSelection must be used within a VirtualTableSelectionProvider\");\n }\n return context as VirtualTableSelectionContextProps<T>;\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useDebouncedCallback } from \"../../../hooks/useDebouncedCallback\";\nimport { focusedDisabled } from \"../../../styles\";\nimport { TextareaAutosize } from \"../../TextareaAutosize\";\n\nexport function VirtualTableInput(props: {\n error?: Error;\n value: string;\n multiline?: boolean;\n focused: boolean;\n disabled: boolean;\n updateValue: (newValue: (string | null)) => void;\n onBlur?: () => void;\n}) {\n const ref = React.useRef<HTMLTextAreaElement>(null);\n const { disabled, value, multiline = false, updateValue, focused } = props;\n const prevValue = useRef<string | null>(value);\n const [internalValue, setInternalValue] = useState<typeof value>(value);\n const focusedState = useRef<boolean>(false);\n\n useEffect(() => {\n if (prevValue.current !== value && value !== internalValue)\n setInternalValue(value);\n prevValue.current = value;\n }, [value]);\n\n const doUpdate = React.useCallback(() => {\n const emptyInitialValue = !value;\n if (emptyInitialValue && !internalValue) return;\n if (internalValue !== value && internalValue !== prevValue.current) {\n prevValue.current = internalValue;\n updateValue(internalValue);\n }\n }, [internalValue, updateValue, value]);\n\n useDebouncedCallback(internalValue, doUpdate, !focused, 400);\n\n useEffect(() => {\n if (ref.current && focused && !focusedState.current) {\n focusedState.current = true;\n ref.current.focus({ preventScroll: true });\n ref.current.selectionStart = ref.current.value.length;\n ref.current.selectionEnd = ref.current.value.length;\n } else {\n focusedState.current = focused;\n }\n }, [focused, ref]);\n\n return (\n <TextareaAutosize\n className={focusedDisabled}\n ref={ref}\n style={{\n padding: 0,\n margin: 0,\n width: \"100%\",\n color: \"unset\",\n fontWeight: \"unset\",\n fontSize: \"unset\",\n fontFamily: \"unset\",\n background: \"unset\",\n border: \"unset\",\n resize: \"none\",\n outline: \"none\"\n }}\n value={internalValue ?? \"\"}\n onChange={(evt) => {\n const newValue = evt.target.value as string;\n if (multiline || !newValue.endsWith(\"\\n\"))\n setInternalValue(newValue);\n }}\n onFocus={() => {\n focusedState.current = true;\n }}\n onBlur={() => {\n focusedState.current = false;\n doUpdate();\n if (props.onBlur) props.onBlur();\n }}\n />\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useDebouncedCallback } from \"../../../hooks/useDebouncedCallback\";\nimport { cls } from \"../../../util\";\nimport { focusedDisabled } from \"../../../styles\";\nimport { TextField } from \"../../TextField\";\n\nexport function VirtualTableNumberInput(props: {\n error?: Error;\n value: number;\n align?: \"right\" | \"left\" | \"center\";\n updateValue: (newValue: (number | null)) => void;\n focused: boolean;\n disabled: boolean;\n}) {\n const { align = \"left\", value, updateValue, focused } = props;\n const propStringValue = (value && typeof value === \"number\") ? value.toString() : \"\";\n const [internalValue, setInternalValue] = useState<string | null>(propStringValue);\n const prevValue = useRef<number | null>(value);\n\n useEffect(() => {\n if (prevValue.current !== value && String(value) !== internalValue)\n setInternalValue(value ? value.toString() : null);\n prevValue.current = value;\n }, [value]);\n\n const doUpdate = React.useCallback(() => {\n if (internalValue !== propStringValue) {\n if (internalValue !== undefined && internalValue !== null) {\n const numberValue = parseFloat(internalValue);\n if (isNaN(numberValue)) return;\n updateValue(numberValue);\n } else {\n updateValue(null);\n }\n }\n }, [internalValue, value]);\n\n useDebouncedCallback(internalValue, doUpdate, !focused, 400);\n\n useEffect(() => {\n if (!focused && propStringValue !== internalValue)\n setInternalValue(value !== undefined && value !== null ? value.toString() : null);\n }, [value, focused]);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (inputRef.current && focused) {\n inputRef.current.focus({ preventScroll: true });\n }\n }, [focused, inputRef]);\n\n const regexp = /^-?[0-9]+[,.]?[0-9]*$/;\n\n return (\n <TextField\n inputRef={inputRef}\n invisible={true}\n size=\"small\"\n className=\"w-full\"\n inputClassName={cls(\"p-0 m-0 bg-transparent border-none outline-hidden font-normal leading-normal text-unset\", focusedDisabled)}\n inputStyle={{ textAlign: align }}\n value={internalValue ?? \"\"}\n onChange={(evt) => {\n const newValue = evt.target.value.replace(\",\", \".\");\n if (newValue.length === 0) setInternalValue(null);\n if (regexp.test(newValue) || newValue.startsWith(\"-\")) setInternalValue(newValue);\n }}\n />\n );\n}\n","import React, { useEffect } from \"react\";\nimport { BooleanSwitch } from \"../../BooleanSwitch\";\n\nexport function VirtualTableSwitch(props: {\n error?: Error;\n internalValue?: boolean;\n focused: boolean;\n disabled: boolean;\n updateValue: (newValue: (boolean | null)) => void;\n}) {\n const { internalValue, updateValue, focused } = props;\n const ref = React.useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (ref.current && focused) {\n ref.current.focus({ preventScroll: true });\n }\n }, [focused, ref]);\n\n return (\n <BooleanSwitch\n ref={ref}\n size={\"small\"}\n value={Boolean(internalValue)}\n onValueChange={updateValue}\n />\n );\n}\n","import React from \"react\";\nimport { cls } from \"../../../util\";\nimport { focusedDisabled } from \"../../../styles\";\nimport { DateTimeField } from \"../../DateTimeField\";\n\nexport function VirtualTableDateField(props: {\n name?: string;\n error?: Error;\n mode?: \"date\" | \"date_time\";\n timezone?: string;\n internalValue: Date | undefined | null;\n updateValue: (newValue: (Date | null)) => void;\n focused: boolean;\n disabled: boolean;\n locale?: string;\n onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n}) {\n const { disabled, error, mode, timezone, internalValue, updateValue, locale } = props;\n\n return (\n <DateTimeField\n value={internalValue ?? undefined}\n onChange={(dateValue) => updateValue(dateValue ?? null)}\n invisible={true}\n inputClassName={cls(\"w-full h-full\", focusedDisabled)}\n className={cls(\"w-full h-full\", focusedDisabled)}\n mode={mode}\n timezone={timezone}\n locale={locale}\n />\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport { Select, SelectItem } from \"../../Select\";\nimport { MultiSelect, MultiSelectItem } from \"../../MultiSelect\";\nimport { Chip } from \"../../Chip\";\n\nexport interface VirtualTableSelectOption {\n value: string | number;\n label: string;\n color?: string;\n}\n\nexport function VirtualTableSelect(props: {\n options: VirtualTableSelectOption[];\n error?: Error;\n multiple?: boolean;\n disabled: boolean;\n small?: boolean;\n value: string | number | string[] | number[] | undefined;\n updateValue: (newValue: (string | number | string[] | number[] | null)) => void;\n focused: boolean;\n onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n}) {\n const { options, value, disabled, small = false, focused, updateValue, multiple = false } = props;\n const validValue = (Array.isArray(value) && multiple) || (!Array.isArray(value) && !multiple);\n const ref = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (ref.current && focused) {\n ref.current?.focus({ preventScroll: true });\n }\n }, [focused, ref]);\n\n const onChange = useCallback((updatedValue: string | string[]) => {\n if (multiple) {\n const isNumber = options.some(o => typeof o.value === \"number\");\n const newValue = (updatedValue as string[]).map((v) => {\n const opt = options.find(o => String(o.value) === v);\n return typeof opt?.value === \"number\" ? parseFloat(v) : v;\n });\n if (isNumber) {\n updateValue(newValue as number[]);\n } else {\n updateValue(newValue as string[]);\n }\n } else {\n const opt = options.find(o => String(o.value) === updatedValue);\n updateValue(typeof opt?.value === \"number\" ? parseFloat(updatedValue as string) : (updatedValue as string || null));\n }\n }, [multiple, updateValue, options]);\n\n const renderValue = (val?: string | number) => {\n const option = options.find(o => o.value === val);\n return (\n <Chip size={small ? \"small\" : \"medium\"}>\n {option ? option.label : String(val)}\n </Chip>\n );\n };\n\n const handleOpenChange = useCallback((open: boolean) => {\n if (!open && ref.current) {\n setTimeout(() => {\n ref.current?.focus({ preventScroll: true });\n }, 0);\n }\n }, []);\n\n return multiple ? (\n <MultiSelect\n inputRef={ref}\n className=\"w-full h-full p-0 bg-transparent outline-none\"\n position={\"item-aligned\"}\n disabled={disabled}\n includeClear={false}\n useChips={false}\n value={validValue ? (value as (string | number)[]).map(v => String(v)) : []}\n onValueChange={onChange}\n onOpenChange={handleOpenChange}\n >\n {options.map((opt) => (\n <MultiSelectItem key={String(opt.value)} value={String(opt.value)}>\n <Chip size={small ? \"small\" : \"medium\"}>{opt.label}</Chip>\n </MultiSelectItem>\n ))}\n </MultiSelect>\n ) : (\n <Select\n inputRef={ref}\n fullWidth\n className=\"w-full h-full p-0 bg-transparent outline-none [&_button]:ring-0 [&_button]:ring-offset-0\"\n inputClassName=\"ring-0 ring-offset-0 focus:ring-0 focus-visible:ring-0 outline-none focus:outline-none focus-visible:outline-none focus-visible:ring-offset-0\"\n position={\"item-aligned\"}\n disabled={disabled}\n padding={false}\n value={validValue ? String(value) : \"\"}\n onValueChange={onChange}\n onOpenChange={handleOpenChange}\n renderValue={renderValue}\n >\n {options.map((opt) => (\n <SelectItem key={String(opt.value)} value={String(opt.value)}>\n <Chip size={small ? \"small\" : \"medium\"}>{opt.label}</Chip>\n </SelectItem>\n ))}\n </Select>\n );\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n CircularProgress,\n Typography\n} from \"../components\";\nimport { cls } from \"../util\";\n\nexport type CollectionSize = \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\";\n\nexport type ListViewColumnDef<T> = {\n key: string;\n label: string;\n align?: \"left\" | \"center\" | \"right\";\n width?: string;\n renderCell: (item: T) => React.ReactNode;\n isTitle?: boolean;\n};\n\nexport type ListViewProps<T> = {\n data: T[];\n dataLoading?: boolean;\n noMoreToLoad?: boolean;\n dataLoadingError?: Error;\n itemCount?: number;\n setItemCount?: (itemCount: number) => void;\n pageSize?: number;\n paginationEnabled?: boolean;\n\n onItemClick?: (item: T) => void;\n selectedIds?: Set<string | number>;\n highlightedIds?: Set<string | number>;\n selectionEnabled?: boolean;\n onSelectionChange?: (item: T, selected: boolean) => void;\n emptyComponent?: React.ReactNode;\n\n size?: CollectionSize;\n selectedEntityId?: string | number;\n\n renderRow: (params: {\n item: T;\n index: number;\n style: React.CSSProperties;\n className: string;\n selected: boolean;\n highlighted: boolean;\n isLast: boolean;\n onClick: (e: React.MouseEvent) => void;\n onSelectionChange: (selected: boolean) => void;\n }) => React.ReactNode;\n};\n\nfunction getEstimatedRowHeight(size: CollectionSize): number {\n switch (size) {\n case \"xs\": return 44;\n case \"s\": return 52;\n case \"m\": return 64;\n case \"l\": return 76;\n case \"xl\": return 88;\n default: return 64;\n }\n}\n\nconst OVERSCAN_COUNT = 8;\nconst LOAD_MORE_THRESHOLD = 400;\n\nfunction getScrollParent(element: HTMLElement | null): HTMLElement | null {\n let parent = element?.parentElement ?? null;\n while (parent) {\n const style = getComputedStyle(parent);\n if (\n style.overflowY === \"auto\" || style.overflowY === \"scroll\" ||\n style.overflow === \"auto\" || style.overflow === \"scroll\"\n ) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document.documentElement;\n}\n\nexport function ListView<T>({\n data,\n dataLoading = false,\n noMoreToLoad = false,\n dataLoadingError,\n itemCount,\n setItemCount,\n pageSize = 50,\n paginationEnabled = true,\n\n onItemClick,\n selectedIds,\n highlightedIds,\n selectionEnabled = true,\n onSelectionChange,\n emptyComponent,\n\n size = \"m\",\n selectedEntityId,\n renderRow\n}: ListViewProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const isLoadingMore = useRef(false);\n\n // Reset loading gate when loading stops\n useEffect(() => {\n if (!dataLoading) isLoadingMore.current = false;\n }, [dataLoading]);\n\n // Virtualization scroll states\n const estimatedRowHeight = getEstimatedRowHeight(size);\n const [effectiveScrollTop, setEffectiveScrollTop] = useState(0);\n const [viewportHeight, setViewportHeight] = useState(800);\n\n const paginationStateRef = useRef({ paginationEnabled, noMoreToLoad, itemCount, pageSize });\n useEffect(() => {\n paginationStateRef.current = { paginationEnabled, noMoreToLoad, itemCount, pageSize };\n }, [paginationEnabled, noMoreToLoad, itemCount, pageSize]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const scrollEl = getScrollParent(el);\n if (!scrollEl) return;\n\n let rafId: number | null = null;\n\n const update = () => {\n rafId = null;\n const scrollRect = scrollEl.getBoundingClientRect();\n const listRect = el.getBoundingClientRect();\n\n const listTopRelative = listRect.top - scrollRect.top;\n setEffectiveScrollTop(Math.max(0, -listTopRelative));\n setViewportHeight(scrollRect.height);\n\n const { paginationEnabled: pe, noMoreToLoad: nm, itemCount: ic, pageSize: ps } = paginationStateRef.current;\n if (\n pe &&\n !nm &&\n !isLoadingMore.current &&\n scrollEl.scrollHeight - scrollEl.scrollTop - scrollEl.clientHeight < LOAD_MORE_THRESHOLD\n ) {\n isLoadingMore.current = true;\n setItemCount?.((ic ?? ps) + ps);\n }\n };\n\n const onScroll = () => {\n if (rafId === null) rafId = requestAnimationFrame(update);\n };\n\n scrollEl.addEventListener(\"scroll\", onScroll, { passive: true });\n const ro = new ResizeObserver(() => update());\n ro.observe(scrollEl);\n update();\n\n return () => {\n scrollEl.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n if (rafId !== null) cancelAnimationFrame(rafId);\n };\n }, [setItemCount]);\n\n const totalHeight = data.length * estimatedRowHeight;\n const startIndex = Math.max(0, Math.floor(effectiveScrollTop / estimatedRowHeight) - OVERSCAN_COUNT);\n const endIndex = Math.min(\n data.length,\n Math.ceil((effectiveScrollTop + viewportHeight) / estimatedRowHeight) + OVERSCAN_COUNT\n );\n const visibleData = data.slice(startIndex, endIndex);\n const offsetY = startIndex * estimatedRowHeight;\n\n const footerHeight = dataLoading ? 48 : (!dataLoading && noMoreToLoad && data.length > 0) ? 32 : 0;\n\n const isInitialLoading = dataLoading && data.length === 0;\n const isEmpty = !dataLoading && data.length === 0 && !dataLoadingError;\n\n const getItemId = useCallback((item: T): string | number => {\n if (item && typeof item === \"object\" && \"id\" in item) {\n const id = (item as Record<\"id\", unknown>).id;\n return typeof id === \"number\" ? id : String(id);\n }\n return String(item);\n }, []);\n\n const borderMixinClass = \"border-surface-200 dark:border-surface-800\";\n\n return (\n <div\n ref={containerRef}\n className={cls(\n \"w-full\",\n selectedEntityId === undefined && `rounded-lg overflow-hidden border ${borderMixinClass}`\n )}\n >\n {dataLoadingError && data.length === 0 ? (\n <div className=\"flex items-center justify-center p-8\">\n <Typography className=\"text-red-500\">\n Error loading data: {dataLoadingError.message}\n </Typography>\n </div>\n ) : isInitialLoading ? (\n <div className=\"flex items-center justify-center py-12 px-8\">\n <CircularProgress size=\"small\" />\n </div>\n ) : isEmpty ? (\n <div className=\"w-full flex items-center justify-center py-12 px-8\">\n {emptyComponent ?? (\n <Typography variant=\"label\" color=\"secondary\">\n No entries found\n </Typography>\n )}\n </div>\n ) : (\n <div style={{ height: totalHeight + footerHeight, position: \"relative\" }}>\n <div style={{ position: \"absolute\", top: offsetY, left: 0, right: 0 }}>\n {visibleData.map((item, i) => {\n const actualIndex = startIndex + i;\n const isLast = actualIndex === data.length - 1;\n const id = getItemId(item);\n const selected = selectedIds?.has(id) ?? false;\n const highlighted = highlightedIds?.has(id) ?? false;\n\n const handleClick = (e: React.MouseEvent) => {\n if ((e.metaKey || e.ctrlKey) && selectionEnabled) {\n e.preventDefault();\n onSelectionChange?.(item, !selected);\n return;\n }\n onItemClick?.(item);\n };\n\n const handleSelectionChange = (val: boolean) => {\n onSelectionChange?.(item, val);\n };\n\n return (\n <React.Fragment key={id || actualIndex}>\n {renderRow({\n item,\n index: actualIndex,\n style: { height: estimatedRowHeight },\n className: cls(\n !isLast && \"border-b\",\n !isLast && borderMixinClass\n ),\n selected,\n highlighted,\n isLast,\n onClick: handleClick,\n onSelectionChange: handleSelectionChange\n })}\n </React.Fragment>\n );\n })}\n </div>\n\n {dataLoading && (\n <div\n className=\"flex items-center justify-center py-3\"\n style={{ position: \"absolute\", top: totalHeight, left: 0, right: 0 }}\n >\n <CircularProgress size=\"small\" />\n </div>\n )}\n {!dataLoading && noMoreToLoad && data.length > 0 && (\n <div\n className=\"flex items-center justify-center py-2 dark:bg-surface-900\"\n style={{ position: \"absolute\", top: totalHeight, left: 0, right: 0 }}\n >\n <Typography variant=\"caption\" color=\"secondary\">\n All {data.length} entries loaded\n </Typography>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport {\n CircularProgress,\n Typography\n} from \"../components\";\nimport { cls } from \"../util\";\n\nimport { CollectionSize } from \"./ListView\";\n\nexport type CardViewProps<T> = {\n data: T[];\n dataLoading?: boolean;\n noMoreToLoad?: boolean;\n dataLoadingError?: Error;\n itemCount?: number;\n setItemCount?: (itemCount: number) => void;\n pageSize?: number;\n paginationEnabled?: boolean;\n\n onItemClick?: (item: T) => void;\n selectedIds?: Set<string | number>;\n highlightedIds?: Set<string | number>;\n selectionEnabled?: boolean;\n onSelectionChange?: (item: T, selected: boolean) => void;\n\n onScroll?: (props: {\n scrollDirection: \"forward\" | \"backward\";\n scrollOffset: number;\n scrollUpdateWasRequested: boolean;\n }) => void;\n initialScroll?: number;\n\n size?: CollectionSize;\n renderCard: (\n item: T,\n extra: {\n selected: boolean;\n highlighted: boolean;\n onSelectionChange: (selected: boolean) => void;\n onClick: (e: React.MouseEvent) => void;\n }\n ) => React.ReactNode;\n emptyComponent?: React.ReactNode;\n};\n\nfunction getGridColumnsClass(size: CollectionSize): string {\n switch (size) {\n case \"xs\":\n return \"grid-cols-4 sm:grid-cols-5 md:grid-cols-6 lg:grid-cols-8 xl:grid-cols-10\";\n case \"s\":\n return \"grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 xl:grid-cols-8\";\n case \"m\":\n return \"grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6\";\n case \"l\":\n return \"grid-cols-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4\";\n case \"xl\":\n return \"grid-cols-1 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3\";\n default:\n return \"grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6\";\n }\n}\n\nfunction getScrollParent(element: HTMLElement | null): HTMLElement | null {\n if (!element) return null;\n let parent = element.parentElement;\n while (parent) {\n const overflowY = window.getComputedStyle(parent).overflowY;\n if (overflowY === \"auto\" || overflowY === \"scroll\") {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document.documentElement;\n}\n\nexport function CardView<T>({\n data,\n dataLoading = false,\n noMoreToLoad = false,\n dataLoadingError,\n itemCount,\n setItemCount,\n pageSize = 50,\n paginationEnabled = true,\n\n onItemClick,\n selectedIds,\n highlightedIds,\n selectionEnabled = true,\n onSelectionChange,\n\n onScroll,\n initialScroll,\n size = \"m\",\n renderCard,\n emptyComponent\n}: CardViewProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const hasRestoredScroll = useRef(false);\n const isLoadingMore = useRef(false);\n\n // Sync mutable ref with pagination settings to avoid resetting listeners\n const paginationStateRef = useRef({ paginationEnabled, noMoreToLoad, itemCount, pageSize });\n useEffect(() => {\n paginationStateRef.current = { paginationEnabled, noMoreToLoad, itemCount, pageSize };\n }, [paginationEnabled, noMoreToLoad, itemCount, pageSize]);\n\n useEffect(() => {\n if (!dataLoading) isLoadingMore.current = false;\n }, [dataLoading]);\n\n // Infinite scroll and resize observer\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const scrollEl = getScrollParent(el);\n if (!scrollEl) return;\n\n let rafId: number | null = null;\n\n const update = () => {\n rafId = null;\n const { paginationEnabled: pe, noMoreToLoad: nm, itemCount: ic, pageSize: ps } = paginationStateRef.current;\n if (\n pe &&\n !nm &&\n !isLoadingMore.current &&\n scrollEl.scrollHeight - scrollEl.scrollTop - scrollEl.clientHeight < 400\n ) {\n isLoadingMore.current = true;\n setItemCount?.((ic ?? ps) + ps);\n }\n };\n\n const onScrollEvent = () => {\n if (rafId === null) rafId = requestAnimationFrame(update);\n };\n\n scrollEl.addEventListener(\"scroll\", onScrollEvent, { passive: true });\n const ro = new ResizeObserver(() => update());\n ro.observe(scrollEl);\n update();\n\n return () => {\n scrollEl.removeEventListener(\"scroll\", onScrollEvent);\n ro.disconnect();\n if (rafId !== null) cancelAnimationFrame(rafId);\n };\n }, [setItemCount]);\n\n // Scroll restoration\n useEffect(() => {\n if (!containerRef.current || !initialScroll || hasRestoredScroll.current || data.length === 0) return;\n\n const scrollEl = getScrollParent(containerRef.current);\n if (!scrollEl) return;\n\n let attempts = 0;\n const maxAttempts = 5;\n\n const tryRestore = () => {\n if (scrollEl.scrollHeight >= initialScroll || attempts >= maxAttempts) {\n scrollEl.scrollTop = initialScroll;\n hasRestoredScroll.current = true;\n } else {\n attempts++;\n requestAnimationFrame(tryRestore);\n }\n };\n\n requestAnimationFrame(tryRestore);\n }, [initialScroll, data.length]);\n\n // Scroll tracking: call onScroll callback\n const lastScrollOffset = useRef(0);\n useEffect(() => {\n const el = containerRef.current;\n if (!el || !onScroll) return;\n const scrollEl = getScrollParent(el);\n if (!scrollEl) return;\n\n const handleScroll = () => {\n const currentOffset = scrollEl.scrollTop;\n const direction = currentOffset > lastScrollOffset.current ? \"forward\" : \"backward\";\n lastScrollOffset.current = currentOffset;\n onScroll({\n scrollDirection: direction,\n scrollOffset: currentOffset,\n scrollUpdateWasRequested: false\n });\n };\n\n scrollEl.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => scrollEl.removeEventListener(\"scroll\", handleScroll);\n }, [onScroll]);\n\n const getItemId = useCallback((item: T): string | number => {\n if (item && typeof item === \"object\" && \"id\" in item) {\n const id = (item as Record<\"id\", unknown>).id;\n return typeof id === \"number\" ? id : String(id);\n }\n return String(item);\n }, []);\n\n const gridColumnsClass = getGridColumnsClass(size);\n\n const isInitialLoading = dataLoading && data.length === 0 && !dataLoadingError;\n const isEmpty = !dataLoading && data.length === 0 && !dataLoadingError;\n\n return (\n <div\n ref={containerRef}\n className=\"w-full p-4\"\n >\n {dataLoadingError && data.length === 0 ? (\n <div className=\"h-full flex items-center justify-center p-8\">\n <Typography className=\"text-red-500\">\n Error loading data: {dataLoadingError.message}\n </Typography>\n </div>\n ) : isInitialLoading ? (\n <div className=\"flex items-center justify-center py-12 px-8\">\n <CircularProgress size=\"small\"/>\n </div>\n ) : isEmpty ? (\n <div className=\"w-full flex items-center justify-center py-12 px-8\">\n {emptyComponent ?? (\n <Typography variant=\"label\" color=\"secondary\">\n No entries found\n </Typography>\n )}\n </div>\n ) : (\n <div className=\"max-w-7xl mx-auto\">\n <div className={cls(\"grid gap-4\", gridColumnsClass)}>\n {data.map((item, index) => {\n const id = getItemId(item);\n const selected = selectedIds?.has(id) ?? false;\n const highlighted = highlightedIds?.has(id) ?? false;\n\n const handleClick = (e: React.MouseEvent) => {\n if ((e.metaKey || e.ctrlKey) && selectionEnabled) {\n e.preventDefault();\n onSelectionChange?.(item, !selected);\n return;\n }\n onItemClick?.(item);\n };\n\n const handleSelectionChange = (val: boolean) => {\n onSelectionChange?.(item, val);\n };\n\n return (\n <React.Fragment key={id || index}>\n {renderCard(item, {\n selected,\n highlighted,\n onSelectionChange: handleSelectionChange,\n onClick: handleClick\n })}\n </React.Fragment>\n );\n })}\n </div>\n\n <div className=\"flex items-center justify-center py-8\">\n {dataLoading && (\n <CircularProgress size=\"small\"/>\n )}\n {!dataLoading && noMoreToLoad && data.length > 0 && (\n <Typography variant=\"caption\" color=\"secondary\">\n All {data.length} entries loaded\n </Typography>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import React, { memo, useEffect, useMemo, useRef } from \"react\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport { useSortable, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { CircularProgress } from \"../../components\";\nimport { cls } from \"../../util\";\nimport { BoardItem, BoardItemViewProps } from \"./board_types\";\n\ninterface BoardSortableListProps<T> {\n columnId: string;\n items: BoardItem<T>[];\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n isDragging: boolean;\n isDragOverColumn: boolean;\n loading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n}\n\nexport function BoardSortableList<T>({\n columnId,\n items,\n ItemComponent,\n isDragging,\n isDragOverColumn,\n loading = false,\n hasMore = false,\n onLoadMore\n}: BoardSortableListProps<T>) {\n const {\n setNodeRef\n } = useDroppable({\n id: columnId,\n data: { type: \"ITEM-LIST\" }\n });\n\n const sentinelRef = useRef<HTMLDivElement>(null);\n const isLoadingRef = useRef(loading);\n isLoadingRef.current = loading;\n const lastLoadTimeRef = useRef(0);\n\n useEffect(() => {\n if (!sentinelRef.current || !hasMore || !onLoadMore) return;\n\n const sentinel = sentinelRef.current;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const now = Date.now();\n if (\n entries[0].isIntersecting &&\n hasMore &&\n !isLoadingRef.current &&\n now - lastLoadTimeRef.current > 500\n ) {\n lastLoadTimeRef.current = now;\n onLoadMore();\n }\n },\n { threshold: 0.1 }\n );\n\n observer.observe(sentinel);\n\n const rect = sentinel.getBoundingClientRect();\n const containerRect = sentinel.parentElement?.getBoundingClientRect();\n if (containerRect && rect.top < containerRect.bottom && rect.bottom > containerRect.top) {\n const now = Date.now();\n if (hasMore && !isLoadingRef.current && now - lastLoadTimeRef.current > 500) {\n lastLoadTimeRef.current = now;\n onLoadMore();\n }\n }\n\n return () => observer.disconnect();\n }, [hasMore, onLoadMore]);\n\n const containerClassName = useMemo(() => cls(\n \"flex flex-col p-2 transition-opacity duration-100 transition-bg ease-linear w-full overflow-y-auto no-scrollbar flex-1 rounded-md\",\n isDragging && isDragOverColumn\n ? \"bg-surface-accent-200 dark:bg-surface-900\"\n : isDragging\n ? \"bg-surface-50 dark:bg-surface-900 hover:bg-surface-accent-100 dark:hover:bg-surface-800\"\n : \"bg-surface-50 dark:bg-surface-900\"\n ), [isDragging, isDragOverColumn]);\n\n return (\n <div\n ref={setNodeRef}\n className={containerClassName}\n style={{ minHeight: 80 }}\n >\n <SortableContext\n items={items.map(i => i.id)}\n strategy={verticalListSortingStrategy}\n >\n {items.length === 0 && !loading ? (\n <div className=\"flex-1 flex items-center justify-center\">\n <span className=\"text-xs text-surface-400 dark:text-surface-500\">\n No items\n </span>\n </div>\n ) : (\n <>\n {items.map((item, index) => (\n <SortableItem\n key={item.id}\n item={item}\n index={index}\n columnId={columnId}\n ItemComponent={ItemComponent}\n />\n ))}\n {(loading || hasMore) && (\n <div ref={sentinelRef} className=\"flex items-center justify-center py-2 min-h-6\">\n {loading && <CircularProgress size=\"smallest\"/>}\n </div>\n )}\n </>\n )}\n </SortableContext>\n </div>\n );\n}\n\ninterface SortableItemProps<T> {\n item: BoardItem<T>;\n index: number;\n columnId: string;\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n}\n\nconst SortableItem = memo(function SortableItem<T>({\n item,\n index,\n columnId,\n ItemComponent\n}: SortableItemProps<T>) {\n const {\n setNodeRef,\n attributes,\n listeners,\n isDragging: isItemBeingDragged,\n transform,\n transition\n } = useSortable({\n id: item.id,\n data: {\n type: \"ITEM\",\n columnId\n }\n });\n\n const sortableStyle = useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isItemBeingDragged ? 2 : 1,\n opacity: isItemBeingDragged ? 0 : 1\n }), [transform, transition, isItemBeingDragged]);\n\n return (\n <div ref={setNodeRef} style={sortableStyle} {...attributes} {...listeners}>\n <ItemComponent\n item={item}\n isDragging={isItemBeingDragged}\n index={index}\n />\n </div>\n );\n}) as <T>(props: SortableItemProps<T>) => React.ReactElement;\n","import React, { useMemo } from \"react\";\nimport { Typography } from \"../../components\";\nimport { cls, getColorSchemeForKey } from \"../../util\";\n\nexport interface BoardColumnTitleProps {\n children: React.ReactNode;\n className?: string;\n \"aria-label\"?: string;\n color?: any;\n}\n\nexport function BoardColumnTitle({\n children,\n className,\n color,\n ...props\n}: BoardColumnTitleProps) {\n const colorScheme = useMemo(() => {\n if (!color) return undefined;\n if (typeof color === \"string\") {\n return getColorSchemeForKey(color);\n }\n return color;\n }, [color]);\n\n return (\n <Typography\n variant=\"subtitle2\"\n component=\"h4\"\n className={\n cls(\"py-3 px-3 transition-colors duration-200 flex-grow select-none relative outline-none focus:outline focus:outline-2 focus:outline-offset-2 flex items-center gap-3\",\n className)\n }\n {...props}\n >\n {colorScheme && (\n <div\n className=\"w-3 h-3 rounded-full flex-shrink-0\"\n style={{\n backgroundColor: colorScheme.darkColor ?? colorScheme.color\n }}\n />\n )}\n {children}\n </Typography>\n );\n}\n","export const iconKeys = [\n \"AArrowDown\",\n \"AArrowUp\",\n \"ALargeSmall\",\n \"Accessibility\",\n \"Activity\",\n \"ActivitySquare\",\n \"AirVent\",\n \"Airplay\",\n \"AlarmCheck\",\n \"AlarmClock\",\n \"AlarmClockCheck\",\n \"AlarmClockMinus\",\n \"AlarmClockOff\",\n \"AlarmClockPlus\",\n \"AlarmMinus\",\n \"AlarmPlus\",\n \"AlarmSmoke\",\n \"Album\",\n \"AlertCircle\",\n \"AlertOctagon\",\n \"AlertTriangle\",\n \"AlignCenter\",\n \"AlignCenterHorizontal\",\n \"AlignCenterVertical\",\n \"AlignEndHorizontal\",\n \"AlignEndVertical\",\n \"AlignHorizontalDistributeCenter\",\n \"AlignHorizontalDistributeEnd\",\n \"AlignHorizontalDistributeStart\",\n \"AlignHorizontalJustifyCenter\",\n \"AlignHorizontalJustifyEnd\",\n \"AlignHorizontalJustifyStart\",\n \"AlignHorizontalSpaceAround\",\n \"AlignHorizontalSpaceBetween\",\n \"AlignJustify\",\n \"AlignLeft\",\n \"AlignRight\",\n \"AlignStartHorizontal\",\n \"AlignStartVertical\",\n \"AlignVerticalDistributeCenter\",\n \"AlignVerticalDistributeEnd\",\n \"AlignVerticalDistributeStart\",\n \"AlignVerticalJustifyCenter\",\n \"AlignVerticalJustifyEnd\",\n \"AlignVerticalJustifyStart\",\n \"AlignVerticalSpaceAround\",\n \"AlignVerticalSpaceBetween\",\n \"Ambulance\",\n \"Ampersand\",\n \"Ampersands\",\n \"Amphora\",\n \"Anchor\",\n \"Angry\",\n \"Annoyed\",\n \"Antenna\",\n \"Anvil\",\n \"Aperture\",\n \"AppWindow\",\n \"AppWindowMac\",\n \"Apple\",\n \"Archive\",\n \"ArchiveRestore\",\n \"ArchiveX\",\n \"AreaChart\",\n \"Armchair\",\n \"ArrowBigDown\",\n \"ArrowBigDownDash\",\n \"ArrowBigLeft\",\n \"ArrowBigLeftDash\",\n \"ArrowBigRight\",\n \"ArrowBigRightDash\",\n \"ArrowBigUp\",\n \"ArrowBigUpDash\",\n \"ArrowDown\",\n \"ArrowDown01\",\n \"ArrowDown10\",\n \"ArrowDownAZ\",\n \"ArrowDownCircle\",\n \"ArrowDownFromLine\",\n \"ArrowDownLeft\",\n \"ArrowDownLeftFromCircle\",\n \"ArrowDownLeftFromSquare\",\n \"ArrowDownLeftSquare\",\n \"ArrowDownNarrowWide\",\n \"ArrowDownRight\",\n \"ArrowDownRightFromCircle\",\n \"ArrowDownRightFromSquare\",\n \"ArrowDownRightSquare\",\n \"ArrowDownSquare\",\n \"ArrowDownToDot\",\n \"ArrowDownToLine\",\n \"ArrowDownUp\",\n \"ArrowDownWideNarrow\",\n \"ArrowDownZA\",\n \"ArrowLeft\",\n \"ArrowLeftCircle\",\n \"ArrowLeftFromLine\",\n \"ArrowLeftRight\",\n \"ArrowLeftSquare\",\n \"ArrowLeftToLine\",\n \"ArrowRight\",\n \"ArrowRightCircle\",\n \"ArrowRightFromLine\",\n \"ArrowRightLeft\",\n \"ArrowRightSquare\",\n \"ArrowRightToLine\",\n \"ArrowUp\",\n \"ArrowUp01\",\n \"ArrowUp10\",\n \"ArrowUpAZ\",\n \"ArrowUpCircle\",\n \"ArrowUpDown\",\n \"ArrowUpFromDot\",\n \"ArrowUpFromLine\",\n \"ArrowUpLeft\",\n \"ArrowUpLeftFromCircle\",\n \"ArrowUpLeftFromSquare\",\n \"ArrowUpLeftSquare\",\n \"ArrowUpNarrowWide\",\n \"ArrowUpRight\",\n \"ArrowUpRightFromCircle\",\n \"ArrowUpRightFromSquare\",\n \"ArrowUpRightSquare\",\n \"ArrowUpSquare\",\n \"ArrowUpToLine\",\n \"ArrowUpWideNarrow\",\n \"ArrowUpZA\",\n \"ArrowsUpFromLine\",\n \"Asterisk\",\n \"AsteriskSquare\",\n \"Astroid\",\n \"AtSign\",\n \"Atom\",\n \"AudioLines\",\n \"AudioWaveform\",\n \"Award\",\n \"Axe\",\n \"Axis3D\",\n \"Baby\",\n \"Backpack\",\n \"Badge\",\n \"BadgeAlert\",\n \"BadgeCent\",\n \"BadgeCheck\",\n \"BadgeDollarSign\",\n \"BadgeEuro\",\n \"BadgeHelp\",\n \"BadgeIndianRupee\",\n \"BadgeInfo\",\n \"BadgeJapaneseYen\",\n \"BadgeMinus\",\n \"BadgePercent\",\n \"BadgePlus\",\n \"BadgePoundSterling\",\n \"BadgeQuestionMark\",\n \"BadgeRussianRuble\",\n \"BadgeSwissFranc\",\n \"BadgeTurkishLira\",\n \"BadgeX\",\n \"BaggageClaim\",\n \"Balloon\",\n \"Ban\",\n \"Banana\",\n \"Bandage\",\n \"Banknote\",\n \"BanknoteArrowDown\",\n \"BanknoteArrowUp\",\n \"BanknoteX\",\n \"BarChart\",\n \"BarChart2\",\n \"BarChart3\",\n \"BarChart4\",\n \"BarChartBig\",\n \"BarChartHorizontal\",\n \"BarChartHorizontalBig\",\n \"Barcode\",\n \"Barrel\",\n \"Baseline\",\n \"Bath\",\n \"Battery\",\n \"BatteryCharging\",\n \"BatteryFull\",\n \"BatteryLow\",\n \"BatteryMedium\",\n \"BatteryPlus\",\n \"BatteryWarning\",\n \"Beaker\",\n \"Bean\",\n \"BeanOff\",\n \"Bed\",\n \"BedDouble\",\n \"BedSingle\",\n \"Beef\",\n \"BeefOff\",\n \"Beer\",\n \"BeerOff\",\n \"Bell\",\n \"BellCheck\",\n \"BellDot\",\n \"BellElectric\",\n \"BellMinus\",\n \"BellOff\",\n \"BellPlus\",\n \"BellRing\",\n \"BetweenHorizonalEnd\",\n \"BetweenHorizonalStart\",\n \"BetweenHorizontalEnd\",\n \"BetweenHorizontalStart\",\n \"BetweenVerticalEnd\",\n \"BetweenVerticalStart\",\n \"BicepsFlexed\",\n \"Bike\",\n \"Binary\",\n \"Binoculars\",\n \"Biohazard\",\n \"Bird\",\n \"Birdhouse\",\n \"Bitcoin\",\n \"Blend\",\n \"Blinds\",\n \"Blocks\",\n \"Bluetooth\",\n \"BluetoothConnected\",\n \"BluetoothOff\",\n \"BluetoothSearching\",\n \"Bold\",\n \"Bolt\",\n \"Bomb\",\n \"Bone\",\n \"Book\",\n \"BookA\",\n \"BookAlert\",\n \"BookAudio\",\n \"BookCheck\",\n \"BookCopy\",\n \"BookDashed\",\n \"BookDown\",\n \"BookHeadphones\",\n \"BookHeart\",\n \"BookImage\",\n \"BookKey\",\n \"BookLock\",\n \"BookMarked\",\n \"BookMinus\",\n \"BookOpen\",\n \"BookOpenCheck\",\n \"BookOpenText\",\n \"BookPlus\",\n \"BookSearch\",\n \"BookTemplate\",\n \"BookText\",\n \"BookType\",\n \"BookUp\",\n \"BookUp2\",\n \"BookUser\",\n \"BookX\",\n \"Bookmark\",\n \"BookmarkCheck\",\n \"BookmarkMinus\",\n \"BookmarkOff\",\n \"BookmarkPlus\",\n \"BookmarkX\",\n \"BoomBox\",\n \"Bot\",\n \"BotMessageSquare\",\n \"BotOff\",\n \"BottleWine\",\n \"BowArrow\",\n \"Box\",\n \"BoxSelect\",\n \"Boxes\",\n \"Braces\",\n \"Brackets\",\n \"Brain\",\n \"BrainCircuit\",\n \"BrainCog\",\n \"BrickWall\",\n \"BrickWallFire\",\n \"BrickWallShield\",\n \"Briefcase\",\n \"BriefcaseBusiness\",\n \"BriefcaseConveyorBelt\",\n \"BriefcaseMedical\",\n \"BringToFront\",\n \"Brush\",\n \"BrushCleaning\",\n \"Bubbles\",\n \"Bug\",\n \"BugOff\",\n \"BugPlay\",\n \"Building\",\n \"Building2\",\n \"Bus\",\n \"BusFront\",\n \"Cable\",\n \"CableCar\",\n \"Cake\",\n \"CakeSlice\",\n \"Calculator\",\n \"Calendar\",\n \"Calendar1\",\n \"CalendarArrowDown\",\n \"CalendarArrowUp\",\n \"CalendarCheck\",\n \"CalendarCheck2\",\n \"CalendarClock\",\n \"CalendarCog\",\n \"CalendarDays\",\n \"CalendarFold\",\n \"CalendarHeart\",\n \"CalendarMinus\",\n \"CalendarMinus2\",\n \"CalendarOff\",\n \"CalendarPlus\",\n \"CalendarPlus2\",\n \"CalendarRange\",\n \"CalendarSearch\",\n \"CalendarSync\",\n \"CalendarX\",\n \"CalendarX2\",\n \"Calendars\",\n \"Camera\",\n \"CameraOff\",\n \"CandlestickChart\",\n \"Candy\",\n \"CandyCane\",\n \"CandyOff\",\n \"Cannabis\",\n \"CannabisOff\",\n \"Captions\",\n \"CaptionsOff\",\n \"Car\",\n \"CarFront\",\n \"CarTaxiFront\",\n \"Caravan\",\n \"CardSim\",\n \"Carrot\",\n \"CaseLower\",\n \"CaseSensitive\",\n \"CaseUpper\",\n \"CassetteTape\",\n \"Cast\",\n \"Castle\",\n \"Cat\",\n \"Cctv\",\n \"CctvOff\",\n \"ChartArea\",\n \"ChartBar\",\n \"ChartBarBig\",\n \"ChartBarDecreasing\",\n \"ChartBarIncreasing\",\n \"ChartBarStacked\",\n \"ChartCandlestick\",\n \"ChartColumn\",\n \"ChartColumnBig\",\n \"ChartColumnDecreasing\",\n \"ChartColumnIncreasing\",\n \"ChartColumnStacked\",\n \"ChartGantt\",\n \"ChartLine\",\n \"ChartNetwork\",\n \"ChartNoAxesColumn\",\n \"ChartNoAxesColumnDecreasing\",\n \"ChartNoAxesColumnIncreasing\",\n \"ChartNoAxesCombined\",\n \"ChartNoAxesGantt\",\n \"ChartPie\",\n \"ChartScatter\",\n \"ChartSpline\",\n \"Check\",\n \"CheckCheck\",\n \"CheckCircle\",\n \"CheckCircle2\",\n \"CheckLine\",\n \"CheckSquare\",\n \"CheckSquare2\",\n \"ChefHat\",\n \"Cherry\",\n \"ChessBishop\",\n \"ChessKing\",\n \"ChessKnight\",\n \"ChessPawn\",\n \"ChessQueen\",\n \"ChessRook\",\n \"ChevronDown\",\n \"ChevronDownCircle\",\n \"ChevronDownSquare\",\n \"ChevronFirst\",\n \"ChevronLast\",\n \"ChevronLeft\",\n \"ChevronLeftCircle\",\n \"ChevronLeftSquare\",\n \"ChevronRight\",\n \"ChevronRightCircle\",\n \"ChevronRightSquare\",\n \"ChevronUp\",\n \"ChevronUpCircle\",\n \"ChevronUpSquare\",\n \"ChevronsDown\",\n \"ChevronsDownUp\",\n \"ChevronsLeft\",\n \"ChevronsLeftRight\",\n \"ChevronsLeftRightEllipsis\",\n \"ChevronsRight\",\n \"ChevronsRightLeft\",\n \"ChevronsUp\",\n \"ChevronsUpDown\",\n \"Church\",\n \"Cigarette\",\n \"CigaretteOff\",\n \"Circle\",\n \"CircleAlert\",\n \"CircleArrowDown\",\n \"CircleArrowLeft\",\n \"CircleArrowOutDownLeft\",\n \"CircleArrowOutDownRight\",\n \"CircleArrowOutUpLeft\",\n \"CircleArrowOutUpRight\",\n \"CircleArrowRight\",\n \"CircleArrowUp\",\n \"CircleCheck\",\n \"CircleCheckBig\",\n \"CircleChevronDown\",\n \"CircleChevronLeft\",\n \"CircleChevronRight\",\n \"CircleChevronUp\",\n \"CircleDashed\",\n \"CircleDivide\",\n \"CircleDollarSign\",\n \"CircleDot\",\n \"CircleDotDashed\",\n \"CircleEllipsis\",\n \"CircleEqual\",\n \"CircleFadingArrowUp\",\n \"CircleFadingPlus\",\n \"CircleGauge\",\n \"CircleHelp\",\n \"CircleMinus\",\n \"CircleOff\",\n \"CircleParking\",\n \"CircleParkingOff\",\n \"CirclePause\",\n \"CirclePercent\",\n \"CirclePile\",\n \"CirclePlay\",\n \"CirclePlus\",\n \"CirclePoundSterling\",\n \"CirclePower\",\n \"CircleQuestionMark\",\n \"CircleSlash\",\n \"CircleSlash2\",\n \"CircleSlashed\",\n \"CircleSmall\",\n \"CircleStar\",\n \"CircleStop\",\n \"CircleUser\",\n \"CircleUserRound\",\n \"CircleX\",\n \"CircuitBoard\",\n \"Citrus\",\n \"Clapperboard\",\n \"Clipboard\",\n \"ClipboardCheck\",\n \"ClipboardClock\",\n \"ClipboardCopy\",\n \"ClipboardEdit\",\n \"ClipboardList\",\n \"ClipboardMinus\",\n \"ClipboardPaste\",\n \"ClipboardPen\",\n \"ClipboardPenLine\",\n \"ClipboardPlus\",\n \"ClipboardSignature\",\n \"ClipboardType\",\n \"ClipboardX\",\n \"Clock\",\n \"Clock1\",\n \"Clock10\",\n \"Clock11\",\n \"Clock12\",\n \"Clock2\",\n \"Clock3\",\n \"Clock4\",\n \"Clock5\",\n \"Clock6\",\n \"Clock7\",\n \"Clock8\",\n \"Clock9\",\n \"ClockAlert\",\n \"ClockArrowDown\",\n \"ClockArrowUp\",\n \"ClockCheck\",\n \"ClockFading\",\n \"ClockPlus\",\n \"ClosedCaption\",\n \"Cloud\",\n \"CloudAlert\",\n \"CloudBackup\",\n \"CloudCheck\",\n \"CloudCog\",\n \"CloudDownload\",\n \"CloudDrizzle\",\n \"CloudFog\",\n \"CloudHail\",\n \"CloudLightning\",\n \"CloudMoon\",\n \"CloudMoonRain\",\n \"CloudOff\",\n \"CloudRain\",\n \"CloudRainWind\",\n \"CloudSnow\",\n \"CloudSun\",\n \"CloudSunRain\",\n \"CloudSync\",\n \"CloudUpload\",\n \"Cloudy\",\n \"Clover\",\n \"Club\",\n \"Code\",\n \"Code2\",\n \"CodeSquare\",\n \"CodeXml\",\n \"Coffee\",\n \"Cog\",\n \"Coins\",\n \"Columns\",\n \"Columns2\",\n \"Columns3\",\n \"Columns3Cog\",\n \"Columns4\",\n \"ColumnsSettings\",\n \"Combine\",\n \"Command\",\n \"Compass\",\n \"Component\",\n \"Computer\",\n \"ConciergeBell\",\n \"Cone\",\n \"Construction\",\n \"Contact\",\n \"Contact2\",\n \"ContactRound\",\n \"Container\",\n \"Contrast\",\n \"Cookie\",\n \"CookingPot\",\n \"Copy\",\n \"CopyCheck\",\n \"CopyMinus\",\n \"CopyPlus\",\n \"CopySlash\",\n \"CopyX\",\n \"Copyleft\",\n \"Copyright\",\n \"CornerDownLeft\",\n \"CornerDownRight\",\n \"CornerLeftDown\",\n \"CornerLeftUp\",\n \"CornerRightDown\",\n \"CornerRightUp\",\n \"CornerUpLeft\",\n \"CornerUpRight\",\n \"Cpu\",\n \"CreativeCommons\",\n \"CreditCard\",\n \"Croissant\",\n \"Crop\",\n \"Cross\",\n \"Crosshair\",\n \"Crown\",\n \"Cuboid\",\n \"CupSoda\",\n \"CurlyBraces\",\n \"Currency\",\n \"Cylinder\",\n \"Dam\",\n \"Database\",\n \"DatabaseBackup\",\n \"DatabaseSearch\",\n \"DatabaseZap\",\n \"DecimalsArrowLeft\",\n \"DecimalsArrowRight\",\n \"Delete\",\n \"Dessert\",\n \"Diameter\",\n \"Diamond\",\n \"DiamondMinus\",\n \"DiamondPercent\",\n \"DiamondPlus\",\n \"Dice1\",\n \"Dice2\",\n \"Dice3\",\n \"Dice4\",\n \"Dice5\",\n \"Dice6\",\n \"Dices\",\n \"Diff\",\n \"Disc\",\n \"Disc2\",\n \"Disc3\",\n \"DiscAlbum\",\n \"Divide\",\n \"DivideCircle\",\n \"DivideSquare\",\n \"Dna\",\n \"DnaOff\",\n \"Dock\",\n \"Dog\",\n \"DollarSign\",\n \"Donut\",\n \"DoorClosed\",\n \"DoorClosedLocked\",\n \"DoorOpen\",\n \"Dot\",\n \"DotSquare\",\n \"Download\",\n \"DownloadCloud\",\n \"DraftingCompass\",\n \"Drama\",\n \"Drill\",\n \"Drone\",\n \"Droplet\",\n \"DropletOff\",\n \"Droplets\",\n \"Drum\",\n \"Drumstick\",\n \"Dumbbell\",\n \"Ear\",\n \"EarOff\",\n \"Earth\",\n \"EarthLock\",\n \"Eclipse\",\n \"Edit\",\n \"Edit2\",\n \"Edit3\",\n \"Egg\",\n \"EggFried\",\n \"EggOff\",\n \"Ellipse\",\n \"Ellipsis\",\n \"EllipsisVertical\",\n \"Equal\",\n \"EqualApproximately\",\n \"EqualNot\",\n \"EqualSquare\",\n \"Eraser\",\n \"EthernetPort\",\n \"Euro\",\n \"EvCharger\",\n \"Expand\",\n \"ExternalLink\",\n \"Eye\",\n \"EyeClosed\",\n \"EyeOff\",\n \"Factory\",\n \"Fan\",\n \"FastForward\",\n \"Feather\",\n \"Fence\",\n \"FerrisWheel\",\n \"File\",\n \"FileArchive\",\n \"FileAudio\",\n \"FileAudio2\",\n \"FileAxis3D\",\n \"FileBadge\",\n \"FileBadge2\",\n \"FileBarChart\",\n \"FileBarChart2\",\n \"FileBox\",\n \"FileBraces\",\n \"FileBracesCorner\",\n \"FileChartColumn\",\n \"FileChartColumnIncreasing\",\n \"FileChartLine\",\n \"FileChartPie\",\n \"FileCheck\",\n \"FileCheck2\",\n \"FileCheckCorner\",\n \"FileClock\",\n \"FileCode\",\n \"FileCode2\",\n \"FileCodeCorner\",\n \"FileCog\",\n \"FileCog2\",\n \"FileDiff\",\n \"FileDigit\",\n \"FileDown\",\n \"FileEdit\",\n \"FileExclamationPoint\",\n \"FileHeadphone\",\n \"FileHeart\",\n \"FileImage\",\n \"FileInput\",\n \"FileJson\",\n \"FileJson2\",\n \"FileKey\",\n \"FileKey2\",\n \"FileLineChart\",\n \"FileLock\",\n \"FileLock2\",\n \"FileMinus\",\n \"FileMinus2\",\n \"FileMinusCorner\",\n \"FileMusic\",\n \"FileOutput\",\n \"FilePen\",\n \"FilePenLine\",\n \"FilePieChart\",\n \"FilePlay\",\n \"FilePlus\",\n \"FilePlus2\",\n \"FilePlusCorner\",\n \"FileQuestion\",\n \"FileQuestionMark\",\n \"FileScan\",\n \"FileSearch\",\n \"FileSearch2\",\n \"FileSearchCorner\",\n \"FileSignal\",\n \"FileSignature\",\n \"FileSliders\",\n \"FileSpreadsheet\",\n \"FileStack\",\n \"FileSymlink\",\n \"FileTerminal\",\n \"FileText\",\n \"FileType\",\n \"FileType2\",\n \"FileTypeCorner\",\n \"FileUp\",\n \"FileUser\",\n \"FileVideo\",\n \"FileVideo2\",\n \"FileVideoCamera\",\n \"FileVolume\",\n \"FileVolume2\",\n \"FileWarning\",\n \"FileX\",\n \"FileX2\",\n \"FileXCorner\",\n \"Files\",\n \"Film\",\n \"Filter\",\n \"FilterX\",\n \"Fingerprint\",\n \"FingerprintPattern\",\n \"FireExtinguisher\",\n \"Fish\",\n \"FishOff\",\n \"FishSymbol\",\n \"FishingHook\",\n \"FishingRod\",\n \"Flag\",\n \"FlagOff\",\n \"FlagTriangleLeft\",\n \"FlagTriangleRight\",\n \"Flame\",\n \"FlameKindling\",\n \"Flashlight\",\n \"FlashlightOff\",\n \"FlaskConical\",\n \"FlaskConicalOff\",\n \"FlaskRound\",\n \"FlipHorizontal\",\n \"FlipHorizontal2\",\n \"FlipVertical\",\n \"FlipVertical2\",\n \"Flower\",\n \"Flower2\",\n \"Focus\",\n \"FoldHorizontal\",\n \"FoldVertical\",\n \"Folder\",\n \"FolderArchive\",\n \"FolderBookmark\",\n \"FolderCheck\",\n \"FolderClock\",\n \"FolderClosed\",\n \"FolderCode\",\n \"FolderCog\",\n \"FolderCog2\",\n \"FolderDot\",\n \"FolderDown\",\n \"FolderEdit\",\n \"FolderGit\",\n \"FolderGit2\",\n \"FolderHeart\",\n \"FolderInput\",\n \"FolderKanban\",\n \"FolderKey\",\n \"FolderLock\",\n \"FolderMinus\",\n \"FolderOpen\",\n \"FolderOpenDot\",\n \"FolderOutput\",\n \"FolderPen\",\n \"FolderPlus\",\n \"FolderRoot\",\n \"FolderSearch\",\n \"FolderSearch2\",\n \"FolderSymlink\",\n \"FolderSync\",\n \"FolderTree\",\n \"FolderUp\",\n \"FolderX\",\n \"Folders\",\n \"Footprints\",\n \"ForkKnife\",\n \"ForkKnifeCrossed\",\n \"Forklift\",\n \"Form\",\n \"FormInput\",\n \"Forward\",\n \"Frame\",\n \"Frown\",\n \"Fuel\",\n \"Fullscreen\",\n \"FunctionSquare\",\n \"Funnel\",\n \"FunnelPlus\",\n \"FunnelX\",\n \"GalleryHorizontal\",\n \"GalleryHorizontalEnd\",\n \"GalleryThumbnails\",\n \"GalleryVertical\",\n \"GalleryVerticalEnd\",\n \"Gamepad\",\n \"Gamepad2\",\n \"GamepadDirectional\",\n \"GanttChart\",\n \"GanttChartSquare\",\n \"Gauge\",\n \"GaugeCircle\",\n \"Gavel\",\n \"Gem\",\n \"GeorgianLari\",\n \"Ghost\",\n \"Gift\",\n \"GitBranch\",\n \"GitBranchMinus\",\n \"GitBranchPlus\",\n \"GitCommit\",\n \"GitCommitHorizontal\",\n \"GitCommitVertical\",\n \"GitCompare\",\n \"GitCompareArrows\",\n \"GitFork\",\n \"GitGraph\",\n \"GitMerge\",\n \"GitMergeConflict\",\n \"GitPullRequest\",\n \"GitPullRequestArrow\",\n \"GitPullRequestClosed\",\n \"GitPullRequestCreate\",\n \"GitPullRequestCreateArrow\",\n \"GitPullRequestDraft\",\n \"GlassWater\",\n \"Glasses\",\n \"Globe\",\n \"Globe2\",\n \"GlobeLock\",\n \"GlobeOff\",\n \"GlobeX\",\n \"Goal\",\n \"Gpu\",\n \"Grab\",\n \"GraduationCap\",\n \"Grape\",\n \"Grid\",\n \"Grid2X2\",\n \"Grid2X2Check\",\n \"Grid2X2Plus\",\n \"Grid2X2X\",\n \"Grid3X3\",\n \"Grid3x2\",\n \"Grip\",\n \"GripHorizontal\",\n \"GripVertical\",\n \"Group\",\n \"Guitar\",\n \"Ham\",\n \"Hamburger\",\n \"Hammer\",\n \"Hand\",\n \"HandCoins\",\n \"HandFist\",\n \"HandGrab\",\n \"HandHeart\",\n \"HandHelping\",\n \"HandMetal\",\n \"HandPlatter\",\n \"Handbag\",\n \"Handshake\",\n \"HardDrive\",\n \"HardDriveDownload\",\n \"HardDriveUpload\",\n \"HardHat\",\n \"Hash\",\n \"HatGlasses\",\n \"Haze\",\n \"Hd\",\n \"HdmiPort\",\n \"Heading\",\n \"Heading1\",\n \"Heading2\",\n \"Heading3\",\n \"Heading4\",\n \"Heading5\",\n \"Heading6\",\n \"HeadphoneOff\",\n \"Headphones\",\n \"Headset\",\n \"Heart\",\n \"HeartCrack\",\n \"HeartHandshake\",\n \"HeartMinus\",\n \"HeartOff\",\n \"HeartPlus\",\n \"HeartPulse\",\n \"HeartX\",\n \"Heater\",\n \"Helicopter\",\n \"HelpCircle\",\n \"HelpingHand\",\n \"Hexagon\",\n \"Highlighter\",\n \"History\",\n \"Home\",\n \"Hop\",\n \"HopOff\",\n \"Hospital\",\n \"Hotel\",\n \"Hourglass\",\n \"House\",\n \"HouseHeart\",\n \"HousePlug\",\n \"HousePlus\",\n \"HouseWifi\",\n \"IceCream\",\n \"IceCream2\",\n \"IceCreamBowl\",\n \"IceCreamCone\",\n \"IdCard\",\n \"IdCardLanyard\",\n \"Image\",\n \"ImageDown\",\n \"ImageMinus\",\n \"ImageOff\",\n \"ImagePlay\",\n \"ImagePlus\",\n \"ImageUp\",\n \"ImageUpscale\",\n \"Images\",\n \"Import\",\n \"Inbox\",\n \"Indent\",\n \"IndentDecrease\",\n \"IndentIncrease\",\n \"IndianRupee\",\n \"Infinity\",\n \"Info\",\n \"Inspect\",\n \"InspectionPanel\",\n \"Italic\",\n \"IterationCcw\",\n \"IterationCw\",\n \"JapaneseYen\",\n \"Joystick\",\n \"Kanban\",\n \"KanbanSquare\",\n \"KanbanSquareDashed\",\n \"Kayak\",\n \"Key\",\n \"KeyRound\",\n \"KeySquare\",\n \"Keyboard\",\n \"KeyboardMusic\",\n \"KeyboardOff\",\n \"Lamp\",\n \"LampCeiling\",\n \"LampDesk\",\n \"LampFloor\",\n \"LampWallDown\",\n \"LampWallUp\",\n \"LandPlot\",\n \"Landmark\",\n \"Languages\",\n \"Laptop\",\n \"Laptop2\",\n \"LaptopMinimal\",\n \"LaptopMinimalCheck\",\n \"Lasso\",\n \"LassoSelect\",\n \"Laugh\",\n \"Layers\",\n \"Layers2\",\n \"Layers3\",\n \"LayersMinus\",\n \"LayersPlus\",\n \"Layout\",\n \"LayoutDashboard\",\n \"LayoutGrid\",\n \"LayoutList\",\n \"LayoutPanelLeft\",\n \"LayoutPanelTop\",\n \"LayoutTemplate\",\n \"Leaf\",\n \"LeafyGreen\",\n \"Lectern\",\n \"LensConcave\",\n \"LensConvex\",\n \"LetterText\",\n \"Library\",\n \"LibraryBig\",\n \"LibrarySquare\",\n \"LifeBuoy\",\n \"Ligature\",\n \"Lightbulb\",\n \"LightbulbOff\",\n \"LineChart\",\n \"LineDotRightHorizontal\",\n \"LineSquiggle\",\n \"LineStyle\",\n \"Link\",\n \"Link2\",\n \"Link2Off\",\n \"List\",\n \"ListCheck\",\n \"ListChecks\",\n \"ListChevronsDownUp\",\n \"ListChevronsUpDown\",\n \"ListCollapse\",\n \"ListEnd\",\n \"ListFilter\",\n \"ListFilterPlus\",\n \"ListIndentDecrease\",\n \"ListIndentIncrease\",\n \"ListMinus\",\n \"ListMusic\",\n \"ListOrdered\",\n \"ListPlus\",\n \"ListRestart\",\n \"ListStart\",\n \"ListTodo\",\n \"ListTree\",\n \"ListVideo\",\n \"ListX\",\n \"Loader\",\n \"Loader2\",\n \"LoaderCircle\",\n \"LoaderPinwheel\",\n \"Locate\",\n \"LocateFixed\",\n \"LocateOff\",\n \"LocationEdit\",\n \"Lock\",\n \"LockKeyhole\",\n \"LockKeyholeOpen\",\n \"LockOpen\",\n \"LogIn\",\n \"LogOut\",\n \"Logs\",\n \"Lollipop\",\n \"Luggage\",\n \"MSquare\",\n \"Magnet\",\n \"Mail\",\n \"MailCheck\",\n \"MailMinus\",\n \"MailOpen\",\n \"MailPlus\",\n \"MailQuestion\",\n \"MailQuestionMark\",\n \"MailSearch\",\n \"MailWarning\",\n \"MailX\",\n \"Mailbox\",\n \"Mails\",\n \"Map\",\n \"MapMinus\",\n \"MapPin\",\n \"MapPinCheck\",\n \"MapPinCheckInside\",\n \"MapPinHouse\",\n \"MapPinMinus\",\n \"MapPinMinusInside\",\n \"MapPinOff\",\n \"MapPinPen\",\n \"MapPinPlus\",\n \"MapPinPlusInside\",\n \"MapPinSearch\",\n \"MapPinX\",\n \"MapPinXInside\",\n \"MapPinned\",\n \"MapPlus\",\n \"Mars\",\n \"MarsStroke\",\n \"Martini\",\n \"Maximize\",\n \"Maximize2\",\n \"Medal\",\n \"Megaphone\",\n \"MegaphoneOff\",\n \"Meh\",\n \"MemoryStick\",\n \"Menu\",\n \"MenuSquare\",\n \"Merge\",\n \"MessageCircle\",\n \"MessageCircleCheck\",\n \"MessageCircleCode\",\n \"MessageCircleDashed\",\n \"MessageCircleHeart\",\n \"MessageCircleMore\",\n \"MessageCircleOff\",\n \"MessageCirclePlus\",\n \"MessageCircleQuestion\",\n \"MessageCircleQuestionMark\",\n \"MessageCircleReply\",\n \"MessageCircleWarning\",\n \"MessageCircleX\",\n \"MessageSquare\",\n \"MessageSquareCheck\",\n \"MessageSquareCode\",\n \"MessageSquareDashed\",\n \"MessageSquareDiff\",\n \"MessageSquareDot\",\n \"MessageSquareHeart\",\n \"MessageSquareLock\",\n \"MessageSquareMore\",\n \"MessageSquareOff\",\n \"MessageSquarePlus\",\n \"MessageSquareQuote\",\n \"MessageSquareReply\",\n \"MessageSquareShare\",\n \"MessageSquareText\",\n \"MessageSquareWarning\",\n \"MessageSquareX\",\n \"MessagesSquare\",\n \"Metronome\",\n \"Mic\",\n \"Mic2\",\n \"MicOff\",\n \"MicVocal\",\n \"Microchip\",\n \"Microscope\",\n \"Microwave\",\n \"Milestone\",\n \"Milk\",\n \"MilkOff\",\n \"Minimize\",\n \"Minimize2\",\n \"Minus\",\n \"MinusCircle\",\n \"MinusSquare\",\n \"MirrorRectangular\",\n \"MirrorRound\",\n \"Monitor\",\n \"MonitorCheck\",\n \"MonitorCloud\",\n \"MonitorCog\",\n \"MonitorDot\",\n \"MonitorDown\",\n \"MonitorOff\",\n \"MonitorPause\",\n \"MonitorPlay\",\n \"MonitorSmartphone\",\n \"MonitorSpeaker\",\n \"MonitorStop\",\n \"MonitorUp\",\n \"MonitorX\",\n \"Moon\",\n \"MoonStar\",\n \"MoreHorizontal\",\n \"MoreVertical\",\n \"Motorbike\",\n \"Mountain\",\n \"MountainSnow\",\n \"Mouse\",\n \"MouseLeft\",\n \"MouseOff\",\n \"MousePointer\",\n \"MousePointer2\",\n \"MousePointer2Off\",\n \"MousePointerBan\",\n \"MousePointerClick\",\n \"MousePointerSquareDashed\",\n \"MouseRight\",\n \"Move\",\n \"Move3D\",\n \"MoveDiagonal\",\n \"MoveDiagonal2\",\n \"MoveDown\",\n \"MoveDownLeft\",\n \"MoveDownRight\",\n \"MoveHorizontal\",\n \"MoveLeft\",\n \"MoveRight\",\n \"MoveUp\",\n \"MoveUpLeft\",\n \"MoveUpRight\",\n \"MoveVertical\",\n \"Music\",\n \"Music2\",\n \"Music3\",\n \"Music4\",\n \"Navigation\",\n \"Navigation2\",\n \"Navigation2Off\",\n \"NavigationOff\",\n \"Network\",\n \"Newspaper\",\n \"Nfc\",\n \"NonBinary\",\n \"Notebook\",\n \"NotebookPen\",\n \"NotebookTabs\",\n \"NotebookText\",\n \"NotepadText\",\n \"NotepadTextDashed\",\n \"Nut\",\n \"NutOff\",\n \"Octagon\",\n \"OctagonAlert\",\n \"OctagonMinus\",\n \"OctagonPause\",\n \"OctagonX\",\n \"Omega\",\n \"Option\",\n \"Orbit\",\n \"Origami\",\n \"Outdent\",\n \"Package\",\n \"Package2\",\n \"PackageCheck\",\n \"PackageMinus\",\n \"PackageOpen\",\n \"PackagePlus\",\n \"PackageSearch\",\n \"PackageX\",\n \"PaintBucket\",\n \"PaintRoller\",\n \"Paintbrush\",\n \"Paintbrush2\",\n \"PaintbrushVertical\",\n \"Palette\",\n \"Palmtree\",\n \"Panda\",\n \"PanelBottom\",\n \"PanelBottomClose\",\n \"PanelBottomDashed\",\n \"PanelBottomInactive\",\n \"PanelBottomOpen\",\n \"PanelLeft\",\n \"PanelLeftClose\",\n \"PanelLeftDashed\",\n \"PanelLeftInactive\",\n \"PanelLeftOpen\",\n \"PanelLeftRightDashed\",\n \"PanelRight\",\n \"PanelRightClose\",\n \"PanelRightDashed\",\n \"PanelRightInactive\",\n \"PanelRightOpen\",\n \"PanelTop\",\n \"PanelTopBottomDashed\",\n \"PanelTopClose\",\n \"PanelTopDashed\",\n \"PanelTopInactive\",\n \"PanelTopOpen\",\n \"PanelsLeftBottom\",\n \"PanelsLeftRight\",\n \"PanelsRightBottom\",\n \"PanelsTopBottom\",\n \"PanelsTopLeft\",\n \"Paperclip\",\n \"Parentheses\",\n \"ParkingCircle\",\n \"ParkingCircleOff\",\n \"ParkingMeter\",\n \"ParkingSquare\",\n \"ParkingSquareOff\",\n \"PartyPopper\",\n \"Pause\",\n \"PauseCircle\",\n \"PauseOctagon\",\n \"PawPrint\",\n \"PcCase\",\n \"Pen\",\n \"PenBox\",\n \"PenLine\",\n \"PenOff\",\n \"PenSquare\",\n \"PenTool\",\n \"Pencil\",\n \"PencilLine\",\n \"PencilOff\",\n \"PencilRuler\",\n \"Pentagon\",\n \"Percent\",\n \"PercentCircle\",\n \"PercentDiamond\",\n \"PercentSquare\",\n \"PersonStanding\",\n \"PhilippinePeso\",\n \"Phone\",\n \"PhoneCall\",\n \"PhoneForwarded\",\n \"PhoneIncoming\",\n \"PhoneMissed\",\n \"PhoneOff\",\n \"PhoneOutgoing\",\n \"Pi\",\n \"PiSquare\",\n \"Piano\",\n \"Pickaxe\",\n \"PictureInPicture\",\n \"PictureInPicture2\",\n \"PieChart\",\n \"PiggyBank\",\n \"Pilcrow\",\n \"PilcrowLeft\",\n \"PilcrowRight\",\n \"PilcrowSquare\",\n \"Pill\",\n \"PillBottle\",\n \"Pin\",\n \"PinOff\",\n \"Pipette\",\n \"Pizza\",\n \"Plane\",\n \"PlaneLanding\",\n \"PlaneTakeoff\",\n \"Play\",\n \"PlayCircle\",\n \"PlaySquare\",\n \"Plug\",\n \"Plug2\",\n \"PlugZap\",\n \"PlugZap2\",\n \"Plus\",\n \"PlusCircle\",\n \"PlusSquare\",\n \"PocketKnife\",\n \"Podcast\",\n \"Pointer\",\n \"PointerOff\",\n \"Popcorn\",\n \"Popsicle\",\n \"PoundSterling\",\n \"Power\",\n \"PowerCircle\",\n \"PowerOff\",\n \"PowerSquare\",\n \"Presentation\",\n \"Printer\",\n \"PrinterCheck\",\n \"PrinterX\",\n \"Projector\",\n \"Proportions\",\n \"Puzzle\",\n \"Pyramid\",\n \"QrCode\",\n \"Quote\",\n \"Rabbit\",\n \"Radar\",\n \"Radiation\",\n \"Radical\",\n \"Radio\",\n \"RadioOff\",\n \"RadioReceiver\",\n \"RadioTower\",\n \"Radius\",\n \"Rainbow\",\n \"Rat\",\n \"Ratio\",\n \"Receipt\",\n \"ReceiptCent\",\n \"ReceiptEuro\",\n \"ReceiptIndianRupee\",\n \"ReceiptJapaneseYen\",\n \"ReceiptPoundSterling\",\n \"ReceiptRussianRuble\",\n \"ReceiptSwissFranc\",\n \"ReceiptText\",\n \"ReceiptTurkishLira\",\n \"RectangleCircle\",\n \"RectangleEllipsis\",\n \"RectangleGoggles\",\n \"RectangleHorizontal\",\n \"RectangleVertical\",\n \"Recycle\",\n \"Redo\",\n \"Redo2\",\n \"RedoDot\",\n \"RefreshCcw\",\n \"RefreshCcwDot\",\n \"RefreshCw\",\n \"RefreshCwOff\",\n \"Refrigerator\",\n \"Regex\",\n \"RemoveFormatting\",\n \"Repeat\",\n \"Repeat1\",\n \"Repeat2\",\n \"RepeatOff\",\n \"Replace\",\n \"ReplaceAll\",\n \"Reply\",\n \"ReplyAll\",\n \"Rewind\",\n \"Ribbon\",\n \"Road\",\n \"Rocket\",\n \"RockingChair\",\n \"RollerCoaster\",\n \"Rose\",\n \"Rotate3D\",\n \"RotateCcw\",\n \"RotateCcwKey\",\n \"RotateCcwSquare\",\n \"RotateCw\",\n \"RotateCwSquare\",\n \"Route\",\n \"RouteOff\",\n \"Router\",\n \"Rows\",\n \"Rows2\",\n \"Rows3\",\n \"Rows4\",\n \"Rss\",\n \"Ruler\",\n \"RulerDimensionLine\",\n \"RussianRuble\",\n \"Sailboat\",\n \"Salad\",\n \"Sandwich\",\n \"Satellite\",\n \"SatelliteDish\",\n \"SaudiRiyal\",\n \"Save\",\n \"SaveAll\",\n \"SaveOff\",\n \"Scale\",\n \"Scale3D\",\n \"Scaling\",\n \"Scan\",\n \"ScanBarcode\",\n \"ScanEye\",\n \"ScanFace\",\n \"ScanHeart\",\n \"ScanLine\",\n \"ScanQrCode\",\n \"ScanSearch\",\n \"ScanText\",\n \"ScatterChart\",\n \"School\",\n \"School2\",\n \"Scissors\",\n \"ScissorsLineDashed\",\n \"ScissorsSquare\",\n \"ScissorsSquareDashedBottom\",\n \"Scooter\",\n \"ScreenShare\",\n \"ScreenShareOff\",\n \"Scroll\",\n \"ScrollText\",\n \"Search\",\n \"SearchAlert\",\n \"SearchCheck\",\n \"SearchCode\",\n \"SearchSlash\",\n \"SearchX\",\n \"Section\",\n \"Send\",\n \"SendHorizonal\",\n \"SendHorizontal\",\n \"SendToBack\",\n \"SeparatorHorizontal\",\n \"SeparatorVertical\",\n \"Server\",\n \"ServerCog\",\n \"ServerCrash\",\n \"ServerOff\",\n \"Settings\",\n \"Settings2\",\n \"Shapes\",\n \"Share\",\n \"Share2\",\n \"Sheet\",\n \"Shell\",\n \"ShelvingUnit\",\n \"Shield\",\n \"ShieldAlert\",\n \"ShieldBan\",\n \"ShieldCheck\",\n \"ShieldClose\",\n \"ShieldCog\",\n \"ShieldCogCorner\",\n \"ShieldEllipsis\",\n \"ShieldHalf\",\n \"ShieldMinus\",\n \"ShieldOff\",\n \"ShieldPlus\",\n \"ShieldQuestion\",\n \"ShieldQuestionMark\",\n \"ShieldUser\",\n \"ShieldX\",\n \"Ship\",\n \"ShipWheel\",\n \"Shirt\",\n \"ShoppingBag\",\n \"ShoppingBasket\",\n \"ShoppingCart\",\n \"Shovel\",\n \"ShowerHead\",\n \"Shredder\",\n \"Shrimp\",\n \"Shrink\",\n \"Shrub\",\n \"Shuffle\",\n \"Sidebar\",\n \"SidebarClose\",\n \"SidebarOpen\",\n \"Sigma\",\n \"SigmaSquare\",\n \"Signal\",\n \"SignalHigh\",\n \"SignalLow\",\n \"SignalMedium\",\n \"SignalZero\",\n \"Signature\",\n \"Signpost\",\n \"SignpostBig\",\n \"Siren\",\n \"SkipBack\",\n \"SkipForward\",\n \"Skull\",\n \"Slash\",\n \"SlashSquare\",\n \"Slice\",\n \"Sliders\",\n \"SlidersHorizontal\",\n \"SlidersVertical\",\n \"Smartphone\",\n \"SmartphoneCharging\",\n \"SmartphoneNfc\",\n \"Smile\",\n \"SmilePlus\",\n \"Snail\",\n \"Snowflake\",\n \"SoapDispenserDroplet\",\n \"Sofa\",\n \"SolarPanel\",\n \"SortAsc\",\n \"SortDesc\",\n \"Soup\",\n \"Space\",\n \"Spade\",\n \"Sparkle\",\n \"Sparkles\",\n \"Speaker\",\n \"Speech\",\n \"SpellCheck\",\n \"SpellCheck2\",\n \"Spline\",\n \"SplinePointer\",\n \"Split\",\n \"SplitSquareHorizontal\",\n \"SplitSquareVertical\",\n \"Spool\",\n \"SportShoe\",\n \"Spotlight\",\n \"SprayCan\",\n \"Sprout\",\n \"Square\",\n \"SquareActivity\",\n \"SquareArrowDown\",\n \"SquareArrowDownLeft\",\n \"SquareArrowDownRight\",\n \"SquareArrowLeft\",\n \"SquareArrowOutDownLeft\",\n \"SquareArrowOutDownRight\",\n \"SquareArrowOutUpLeft\",\n \"SquareArrowOutUpRight\",\n \"SquareArrowRight\",\n \"SquareArrowRightEnter\",\n \"SquareArrowRightExit\",\n \"SquareArrowUp\",\n \"SquareArrowUpLeft\",\n \"SquareArrowUpRight\",\n \"SquareAsterisk\",\n \"SquareBottomDashedScissors\",\n \"SquareCenterlineDashedHorizontal\",\n \"SquareCenterlineDashedVertical\",\n \"SquareChartGantt\",\n \"SquareCheck\",\n \"SquareCheckBig\",\n \"SquareChevronDown\",\n \"SquareChevronLeft\",\n \"SquareChevronRight\",\n \"SquareChevronUp\",\n \"SquareCode\",\n \"SquareDashed\",\n \"SquareDashedBottom\",\n \"SquareDashedBottomCode\",\n \"SquareDashedKanban\",\n \"SquareDashedMousePointer\",\n \"SquareDashedText\",\n \"SquareDashedTopSolid\",\n \"SquareDivide\",\n \"SquareDot\",\n \"SquareEqual\",\n \"SquareFunction\",\n \"SquareGanttChart\",\n \"SquareKanban\",\n \"SquareLibrary\",\n \"SquareM\",\n \"SquareMenu\",\n \"SquareMinus\",\n \"SquareMousePointer\",\n \"SquareParking\",\n \"SquareParkingOff\",\n \"SquarePause\",\n \"SquarePen\",\n \"SquarePercent\",\n \"SquarePi\",\n \"SquarePilcrow\",\n \"SquarePlay\",\n \"SquarePlus\",\n \"SquarePower\",\n \"SquareRadical\",\n \"SquareRoundCorner\",\n \"SquareScissors\",\n \"SquareSigma\",\n \"SquareSlash\",\n \"SquareSplitHorizontal\",\n \"SquareSplitVertical\",\n \"SquareSquare\",\n \"SquareStack\",\n \"SquareStar\",\n \"SquareStop\",\n \"SquareTerminal\",\n \"SquareUser\",\n \"SquareUserRound\",\n \"SquareX\",\n \"SquaresExclude\",\n \"SquaresIntersect\",\n \"SquaresSubtract\",\n \"SquaresUnite\",\n \"Squircle\",\n \"SquircleDashed\",\n \"Squirrel\",\n \"Stamp\",\n \"Star\",\n \"StarHalf\",\n \"StarOff\",\n \"Stars\",\n \"StepBack\",\n \"StepForward\",\n \"Stethoscope\",\n \"Sticker\",\n \"StickyNote\",\n \"Stone\",\n \"StopCircle\",\n \"Store\",\n \"StretchHorizontal\",\n \"StretchVertical\",\n \"Strikethrough\",\n \"Subscript\",\n \"Subtitles\",\n \"Sun\",\n \"SunDim\",\n \"SunMedium\",\n \"SunMoon\",\n \"SunSnow\",\n \"Sunrise\",\n \"Sunset\",\n \"Superscript\",\n \"SwatchBook\",\n \"SwissFranc\",\n \"SwitchCamera\",\n \"Sword\",\n \"Swords\",\n \"Syringe\",\n \"Table\",\n \"Table2\",\n \"TableCellsMerge\",\n \"TableCellsSplit\",\n \"TableColumnsSplit\",\n \"TableConfig\",\n \"TableOfContents\",\n \"TableProperties\",\n \"TableRowsSplit\",\n \"Tablet\",\n \"TabletSmartphone\",\n \"Tablets\",\n \"Tag\",\n \"Tags\",\n \"Tally1\",\n \"Tally2\",\n \"Tally3\",\n \"Tally4\",\n \"Tally5\",\n \"Tangent\",\n \"Target\",\n \"Telescope\",\n \"Tent\",\n \"TentTree\",\n \"Terminal\",\n \"TerminalSquare\",\n \"TestTube\",\n \"TestTube2\",\n \"TestTubeDiagonal\",\n \"TestTubes\",\n \"Text\",\n \"TextAlignCenter\",\n \"TextAlignEnd\",\n \"TextAlignJustify\",\n \"TextAlignStart\",\n \"TextCursor\",\n \"TextCursorInput\",\n \"TextInitial\",\n \"TextQuote\",\n \"TextSearch\",\n \"TextSelect\",\n \"TextSelection\",\n \"TextWrap\",\n \"Theater\",\n \"Thermometer\",\n \"ThermometerSnowflake\",\n \"ThermometerSun\",\n \"ThumbsDown\",\n \"ThumbsUp\",\n \"Ticket\",\n \"TicketCheck\",\n \"TicketMinus\",\n \"TicketPercent\",\n \"TicketPlus\",\n \"TicketSlash\",\n \"TicketX\",\n \"Tickets\",\n \"TicketsPlane\",\n \"Timeline\",\n \"Timer\",\n \"TimerOff\",\n \"TimerReset\",\n \"ToggleLeft\",\n \"ToggleRight\",\n \"Toilet\",\n \"ToolCase\",\n \"Toolbox\",\n \"Tornado\",\n \"Torus\",\n \"Touchpad\",\n \"TouchpadOff\",\n \"TowelRack\",\n \"TowerControl\",\n \"ToyBrick\",\n \"Tractor\",\n \"TrafficCone\",\n \"Train\",\n \"TrainFront\",\n \"TrainFrontTunnel\",\n \"TrainTrack\",\n \"TramFront\",\n \"Transgender\",\n \"Trash\",\n \"Trash2\",\n \"TreeDeciduous\",\n \"TreePalm\",\n \"TreePine\",\n \"Trees\",\n \"TrendingDown\",\n \"TrendingUp\",\n \"TrendingUpDown\",\n \"Triangle\",\n \"TriangleAlert\",\n \"TriangleDashed\",\n \"TriangleRight\",\n \"Trophy\",\n \"Truck\",\n \"TruckElectric\",\n \"TurkishLira\",\n \"Turntable\",\n \"Turtle\",\n \"Tv\",\n \"Tv2\",\n \"TvMinimal\",\n \"TvMinimalPlay\",\n \"Type\",\n \"TypeOutline\",\n \"Umbrella\",\n \"UmbrellaOff\",\n \"Underline\",\n \"Undo\",\n \"Undo2\",\n \"UndoDot\",\n \"UnfoldHorizontal\",\n \"UnfoldVertical\",\n \"Ungroup\",\n \"University\",\n \"Unlink\",\n \"Unlink2\",\n \"Unlock\",\n \"UnlockKeyhole\",\n \"Unplug\",\n \"Upload\",\n \"UploadCloud\",\n \"Usb\",\n \"User\",\n \"User2\",\n \"UserCheck\",\n \"UserCheck2\",\n \"UserCircle\",\n \"UserCircle2\",\n \"UserCog\",\n \"UserCog2\",\n \"UserKey\",\n \"UserLock\",\n \"UserMinus\",\n \"UserMinus2\",\n \"UserPen\",\n \"UserPlus\",\n \"UserPlus2\",\n \"UserRound\",\n \"UserRoundCheck\",\n \"UserRoundCog\",\n \"UserRoundKey\",\n \"UserRoundMinus\",\n \"UserRoundPen\",\n \"UserRoundPlus\",\n \"UserRoundSearch\",\n \"UserRoundX\",\n \"UserSearch\",\n \"UserSquare\",\n \"UserSquare2\",\n \"UserStar\",\n \"UserX\",\n \"UserX2\",\n \"Users\",\n \"Users2\",\n \"UsersRound\",\n \"Utensils\",\n \"UtensilsCrossed\",\n \"UtilityPole\",\n \"Van\",\n \"Variable\",\n \"Vault\",\n \"VectorSquare\",\n \"Vegan\",\n \"VenetianMask\",\n \"Venus\",\n \"VenusAndMars\",\n \"Verified\",\n \"Vibrate\",\n \"VibrateOff\",\n \"Video\",\n \"VideoOff\",\n \"Videotape\",\n \"View\",\n \"Voicemail\",\n \"Volleyball\",\n \"Volume\",\n \"Volume1\",\n \"Volume2\",\n \"VolumeOff\",\n \"VolumeX\",\n \"Vote\",\n \"Wallet\",\n \"Wallet2\",\n \"WalletCards\",\n \"WalletMinimal\",\n \"Wallpaper\",\n \"Wand\",\n \"Wand2\",\n \"WandSparkles\",\n \"Warehouse\",\n \"WashingMachine\",\n \"Watch\",\n \"Waves\",\n \"WavesArrowDown\",\n \"WavesArrowUp\",\n \"WavesHorizontal\",\n \"WavesLadder\",\n \"WavesVertical\",\n \"Waypoints\",\n \"Webcam\",\n \"Webhook\",\n \"WebhookOff\",\n \"Weight\",\n \"WeightTilde\",\n \"Wheat\",\n \"WheatOff\",\n \"WholeWord\",\n \"Wifi\",\n \"WifiCog\",\n \"WifiHigh\",\n \"WifiLow\",\n \"WifiOff\",\n \"WifiPen\",\n \"WifiSync\",\n \"WifiZero\",\n \"Wind\",\n \"WindArrowDown\",\n \"Wine\",\n \"WineOff\",\n \"Workflow\",\n \"Worm\",\n \"WrapText\",\n \"Wrench\",\n \"X\",\n \"XCircle\",\n \"XLineTop\",\n \"XOctagon\",\n \"XSquare\",\n \"Zap\",\n \"ZapOff\",\n \"ZodiacAquarius\",\n \"ZodiacAries\",\n \"ZodiacCancer\",\n \"ZodiacCapricorn\",\n \"ZodiacGemini\",\n \"ZodiacLeo\",\n \"ZodiacLibra\",\n \"ZodiacOphiuchus\",\n \"ZodiacPisces\",\n \"ZodiacSagittarius\",\n \"ZodiacScorpio\",\n \"ZodiacTaurus\",\n \"ZodiacVirgo\",\n \"ZoomIn\",\n \"ZoomOut\"\n];\n","export const coolIconKeys: string[] = [\n \"Rows4\", \"Video\",\n \"Plane\", \"LayoutDashboard\", \"LayoutGrid\", \"Square\", \"Snowflake\",\n \"CircleDashed\", \"AlignCenterHorizontal\", \"Disc\", \"Infinity\",\n \"Maximize\", \"Play\", \"Sparkles\", \"Music\",\n \"Wallet\", \"Layout\", \"Zap\", \"Circle\", \"Coffee\",\n \"ImageOff\", \"Sun\", \"Cable\", \"CalendarDays\",\n \"Dices\", \"Shapes\", \"Cloud\", \"Palette\",\n \"CreditCard\", \"Headphones\", \"Egg\", \"Disc3\", \"Flag\",\n \"Bandage\", \"Thermometer\", \"Hexagon\", \"Network\", \"Library\", \"Pizza\",\n \"Cpu\", \"Plug\", \"Files\", \"Globe\", \"SignalZero\",\n \"Gamepad2\", \"CloudLightning\", \"ListTree\", \"Command\"];\n","import React from \"react\";\n\nimport { IconProps } from \"./Icon\";\n\nexport function GitHubIcon(props: IconProps) {\n return <svg xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n fill={\"currentColor\"}\n width={props.size ?? 24}\n height={props.size ?? 24}\n viewBox=\"0 0 24 24\">\n <path\n d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"/>\n </svg>;\n}\n","export function HandleIcon() {\n return <svg width=\"24\" height=\"24\" viewBox=\"0 0 100 100\" fill=\"none\">\n <circle cx=\"28\" cy=\"50\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"28\" cy=\"21\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"71\" cy=\"21\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"71\" cy=\"50\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"71\" cy=\"78\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"28\" cy=\"78\" r=\"9\" fill={\"currentColor\"}/>\n </svg>;\n}\n","import React, { memo, useMemo } from \"react\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { BoardSortableList } from \"./BoardSortableList\";\nimport { BoardColumnTitle } from \"./BoardColumnTitle\";\nimport { BoardItem, BoardItemViewProps } from \"./board_types\";\nimport {\n IconButton\n} from \"../../components\";\nimport { cls } from \"../../util\";\nimport { iconSize, PlusIcon } from \"../../icons\";\n\nexport interface BoardColumnProps<T> {\n id: string;\n title: string;\n items: BoardItem<T>[];\n index: number;\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n isDragging: boolean;\n isDragOverColumn: boolean;\n allowReorder?: boolean;\n loading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n onAddItem?: () => void;\n totalCount?: number;\n color?: any;\n style?: React.CSSProperties;\n}\n\nexport const BoardColumn = memo(function BoardColumn<T>({\n id,\n title,\n items,\n ItemComponent,\n isDragging,\n isDragOverColumn,\n allowReorder = false,\n loading = false,\n hasMore = false,\n onLoadMore,\n onAddItem,\n totalCount,\n color,\n style\n}: BoardColumnProps<T>) {\n const {\n setNodeRef,\n attributes,\n listeners,\n isDragging: isColumnBeingDragged,\n transform,\n transition\n } = useSortable({\n id,\n data: { type: \"COLUMN\" },\n disabled: !allowReorder\n });\n\n const combinedStyle = useMemo(() => ({\n ...style,\n transform: CSS.Translate.toString(transform),\n transition,\n zIndex: isColumnBeingDragged ? 2 : 1\n }), [style, transform, transition, isColumnBeingDragged]);\n\n const dragListeners = allowReorder ? listeners : {};\n\n const columnClassName = useMemo(() => cls(\n \"border h-full w-80 min-w-80 mx-2 flex flex-col rounded-md border-surface-200 dark:border-surface-800\",\n isColumnBeingDragged ? \"ring-2 ring-primary\" : \"\"\n ), [isColumnBeingDragged]);\n\n const headerClassName = useMemo(() => cls(\n \"flex items-center justify-between px-2 rounded-t-md transition-colors duration-200 ease-in-out\",\n isColumnBeingDragged\n ? \"bg-surface-100 dark:bg-surface-700\"\n : \"bg-surface-50 hover:bg-surface-100 dark:bg-surface-800 dark:hover:bg-surface-700\",\n allowReorder ? \"cursor-grab\" : \"\"\n ), [isColumnBeingDragged, allowReorder]);\n\n const itemIds = useMemo(() => items.map(i => i.id), [items]);\n\n return (\n <div\n ref={setNodeRef}\n style={combinedStyle}\n {...attributes}\n className={columnClassName}\n >\n <div\n {...dragListeners}\n className={headerClassName}\n >\n <div className=\"flex items-center gap-2\">\n <BoardColumnTitle aria-label={`${title} item list`} color={color}>\n {title}\n </BoardColumnTitle>\n {totalCount !== undefined && (\n <span className=\"text-xs text-surface-500 dark:text-surface-400\">\n {totalCount}\n </span>\n )}\n </div>\n {onAddItem && (\n <IconButton\n size=\"small\"\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onAddItem();\n }}\n className=\"opacity-60 hover:opacity-100\"\n >\n <PlusIcon size={iconSize.small}/>\n </IconButton>\n )}\n </div>\n <SortableContext\n items={itemIds}\n strategy={verticalListSortingStrategy}\n >\n <BoardSortableList\n columnId={id}\n items={items}\n ItemComponent={ItemComponent}\n isDragging={isDragging}\n isDragOverColumn={isDragOverColumn}\n loading={loading}\n hasMore={hasMore}\n onLoadMore={onLoadMore}\n />\n </SortableContext>\n </div>\n );\n}) as <T>(props: BoardColumnProps<T>) => React.ReactElement;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragOverlay,\n DragStartEvent,\n PointerSensor,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext } from \"@dnd-kit/sortable\";\nimport { BoardColumn } from \"./BoardColumn\";\nimport { BoardItem, BoardItemMap, BoardItemViewProps, BoardProps } from \"./board_types\";\nimport { cls } from \"../../util\";\n\nexport function Board<T, COLUMN extends string>({\n data,\n columns: columnsProp,\n columnLabels,\n columnColors,\n className,\n assignColumn,\n allowColumnReorder = false,\n onColumnReorder,\n onItemsReorder,\n ItemComponent,\n columnLoadingState,\n onLoadMoreColumn,\n onAddItemToColumn,\n AddColumnComponent\n}: BoardProps<T, COLUMN>) {\n\n const [activeItem, setActiveItem] = useState<BoardItem<T> | null>(null);\n const [activeColumn, setActiveColumn] = useState<COLUMN | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [dragOverColumnId, setDragOverColumnId] = useState<string | null>(null);\n\n const grabOffsetRef = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n const [overlayPos, setOverlayPos] = useState<{ x: number; y: number } | null>(null);\n\n const handleMouseMove = useCallback((e: MouseEvent) => {\n setOverlayPos({\n x: e.clientX - grabOffsetRef.current.x,\n y: e.clientY - grabOffsetRef.current.y\n });\n }, []);\n\n useEffect(() => {\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"pointermove\", handleMouseMove);\n };\n }, [handleMouseMove]);\n\n const [itemMapState, setItemMapState] = useState<BoardItemMap<T>>(() => {\n const dataColumnMap: Record<string, COLUMN> = data.reduce((prev, item: BoardItem<T>) => ({\n ...prev,\n [item.id]: assignColumn(item)\n }), {});\n return columnsProp.reduce(\n (previous: BoardItemMap<T>, column: COLUMN) => ({\n ...previous,\n [column]: data.filter((item: BoardItem<T>) => dataColumnMap[item.id] === column)\n }),\n {} as BoardItemMap<T>\n );\n });\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5\n }\n })\n );\n\n useEffect(() => {\n if (isDragging) return;\n\n const dataColumnMap: Record<string, COLUMN> = data.reduce((prev, item) => ({\n ...prev,\n [item.id]: assignColumn(item)\n }), {});\n\n const newItemMap = columnsProp.reduce(\n (previous: BoardItemMap<T>, column: COLUMN) => ({\n ...previous,\n [column]: data.filter((item: BoardItem<T>) => dataColumnMap[item.id] === column)\n }),\n {} as BoardItemMap<T>\n );\n\n setItemMapState(prevMap => {\n let changed = false;\n\n for (const col of columnsProp) {\n const prevItems = prevMap[col] ?? [];\n const newItems = newItemMap[col] ?? [];\n\n if (prevItems.length !== newItems.length) {\n changed = true;\n continue;\n }\n for (let i = 0; i < prevItems.length; i++) {\n if (prevItems[i].id !== newItems[i].id || prevItems[i].data !== newItems[i].data) {\n changed = true;\n break;\n }\n }\n }\n\n if (!changed) {\n return prevMap;\n }\n\n const updated: BoardItemMap<T> = {};\n for (const col of columnsProp) {\n const prevItems = prevMap[col] ?? [];\n const newItems = newItemMap[col] ?? [];\n\n const prevById = new Map<string, BoardItem<T>>();\n for (const item of prevItems) {\n prevById.set(item.id, item);\n }\n\n updated[col] = newItems.map(newItem => {\n const prev = prevById.get(newItem.id);\n if (prev && prev.data === newItem.data) {\n return prev;\n }\n return newItem;\n });\n }\n return updated;\n });\n }, [data, columnsProp, assignColumn]);\n\n const findColumnByItemId = (id: string): string | undefined => {\n return Object.keys(itemMapState).find(col => itemMapState[col]?.some(i => i.id === id));\n };\n\n const handleDragStart = (event: DragStartEvent) => {\n setIsDragging(true);\n setDragOverColumnId(null);\n const { active } = event;\n\n const activatorEvt = event.activatorEvent as PointerEvent | MouseEvent;\n if (activatorEvt) {\n const target = activatorEvt.target as HTMLElement;\n const draggableEl = target.closest<HTMLElement>(\"[role='button']\") ?? target;\n const rect = draggableEl.getBoundingClientRect();\n grabOffsetRef.current = {\n x: activatorEvt.clientX - rect.left,\n y: activatorEvt.clientY - rect.top\n };\n setOverlayPos({\n x: rect.left,\n y: rect.top\n });\n }\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"pointermove\", handleMouseMove);\n\n if (active.data.current?.type === \"COLUMN\") {\n const columnId = active.id as string;\n const column = columnsProp.find(col => String(col) === columnId);\n if (column) {\n setActiveColumn(column);\n }\n } else if (active.data.current?.type === \"ITEM\") {\n const columnId = findColumnByItemId(active.id as string);\n if (columnId) {\n const item = itemMapState[columnId]?.find(i => i.id === active.id);\n setActiveItem(item || null);\n }\n }\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n const {\n active,\n over\n } = event;\n\n if (!over) {\n setDragOverColumnId(null);\n return;\n }\n\n let currentHoveredColumnId: string | null = null;\n const overId = over.id as string;\n const overDataType = over.data.current?.type as string | undefined;\n\n if (overDataType === \"ITEM-LIST\" || overDataType === \"COLUMN\") {\n currentHoveredColumnId = overId;\n } else if (overDataType === \"ITEM\") {\n currentHoveredColumnId = findColumnByItemId(overId) || null;\n } else if (columnsProp.includes(overId as COLUMN)) {\n currentHoveredColumnId = overId;\n }\n\n setDragOverColumnId(currentHoveredColumnId);\n\n if (active.data.current?.type !== \"ITEM\") {\n return;\n }\n\n const activeId = active.id as string;\n const activeColumn = findColumnByItemId(activeId);\n let overColumnForMove = findColumnByItemId(overId);\n\n if (!overColumnForMove && overDataType === \"ITEM-LIST\") {\n overColumnForMove = overId;\n }\n if (!overColumnForMove && columnsProp.includes(overId as COLUMN)) {\n overColumnForMove = overId;\n }\n\n if (!activeColumn || !overColumnForMove) return;\n if (activeColumn === overColumnForMove) return;\n\n if (itemMapState[overColumnForMove]?.some(i => i.id === activeId)) {\n return;\n }\n\n setItemMapState(currentMap => {\n const activeItems = [...(currentMap[activeColumn] || [])];\n const overItems = [...(currentMap[overColumnForMove!] || [])];\n const activeIndex = activeItems.findIndex(i => i.id === activeId);\n\n if (activeIndex === -1) return currentMap;\n\n let overIndex;\n if (overDataType === \"ITEM-LIST\" || (columnsProp.includes(overId as COLUMN) && !findColumnByItemId(overId))) {\n overIndex = overItems.length;\n } else {\n overIndex = overItems.findIndex(i => i.id === overId);\n if (overIndex !== -1) {\n const activeTop = active.rect.current.translated?.top ?? 0;\n const activeHeight = active.rect.current.translated?.height ?? 0;\n const activeCenter = activeTop + activeHeight / 2;\n\n const overTop = over?.rect.top ?? 0;\n const overHeight = over?.rect.height ?? 0;\n const overCenter = overTop + overHeight / 2;\n\n const isBelowOverItem = activeCenter > overCenter;\n\n const modifier = isBelowOverItem ? 1 : 0;\n overIndex = overIndex >= 0 ? overIndex + modifier : overItems.length;\n } else {\n overIndex = overItems.length;\n }\n }\n\n const newItemMap = { ...currentMap };\n const [moved] = activeItems.splice(activeIndex, 1);\n overItems.splice(overIndex, 0, moved);\n newItemMap[activeColumn] = activeItems;\n newItemMap[overColumnForMove!] = overItems;\n return newItemMap;\n });\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const {\n active,\n over\n } = event;\n\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"pointermove\", handleMouseMove);\n setOverlayPos(null);\n\n setIsDragging(false);\n setActiveItem(null);\n setActiveColumn(null);\n setDragOverColumnId(null);\n\n if (!over) return;\n\n const activeId = active.id as string;\n const overId = over.id as string;\n\n if (active.data.current?.type === \"COLUMN\") {\n if (activeId !== overId) {\n const oldIndex = columnsProp.indexOf(activeId as COLUMN);\n const newIndex = columnsProp.indexOf(overId as COLUMN);\n if (oldIndex !== -1 && newIndex !== -1) {\n const reordered = arrayMove(columnsProp, oldIndex, newIndex);\n onColumnReorder?.(reordered);\n }\n }\n return;\n }\n\n const activeCol = findColumnByItemId(activeId) as COLUMN | undefined;\n let overCol = findColumnByItemId(overId) as COLUMN | undefined;\n\n if (!overCol) {\n const overDataType = over.data.current?.type;\n if (overDataType === \"ITEM-LIST\" || columnsProp.includes(overId as COLUMN)) {\n overCol = overId as COLUMN;\n }\n }\n\n if (!activeCol || !overCol) return;\n\n const isSameColumn = activeCol === overCol;\n const activeItems = itemMapState[activeCol] || [];\n const overItems = itemMapState[overCol] || [];\n\n const activeIndex = activeItems.findIndex(i => i.id === activeId);\n\n let overIndex;\n if (over.id === overCol) {\n overIndex = overItems.length;\n } else {\n overIndex = overItems.findIndex(i => i.id === overId);\n }\n\n if (activeIndex === -1 || overIndex === -1) return;\n\n let finalItems: BoardItem<T>[] = [];\n\n if (isSameColumn) {\n finalItems = arrayMove(activeItems, activeIndex, overIndex);\n } else {\n const newActiveItems = [...activeItems];\n const newOverItems = [...overItems];\n const [moved] = newActiveItems.splice(activeIndex, 1);\n newOverItems.splice(overIndex, 0, moved);\n finalItems = [...newActiveItems, ...newOverItems];\n }\n\n const fullFlattenedList: BoardItem<T>[] = [];\n columnsProp.forEach(col => {\n if (col === activeCol) {\n if (isSameColumn) {\n fullFlattenedList.push(...finalItems);\n } else {\n fullFlattenedList.push(...activeItems.filter(i => i.id !== activeId));\n }\n } else if (col === overCol) {\n const newOverItems = [...overItems];\n const [moved] = [...activeItems].splice(activeIndex, 1);\n newOverItems.splice(overIndex, 0, moved);\n fullFlattenedList.push(...newOverItems);\n } else {\n fullFlattenedList.push(...(itemMapState[col] || []));\n }\n });\n\n onItemsReorder?.(fullFlattenedList, {\n itemId: activeId,\n sourceColumn: activeCol,\n targetColumn: overCol\n });\n };\n\n return (\n <DndContext\n sensors={sensors}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n <div className={cls(\"flex flex-row h-full w-full overflow-x-auto p-4 select-none items-start\", className)}>\n <SortableContext items={columnsProp}>\n {columnsProp.map((col, index) => {\n const colItems = itemMapState[col] || [];\n const loadingState = columnLoadingState?.[col];\n return (\n <BoardColumn\n key={String(col)}\n id={String(col)}\n title={columnLabels?.[col] ?? String(col)}\n items={colItems}\n index={index}\n ItemComponent={ItemComponent}\n isDragging={isDragging}\n isDragOverColumn={dragOverColumnId === String(col)}\n allowReorder={allowColumnReorder}\n loading={loadingState?.loading}\n hasMore={loadingState?.hasMore}\n totalCount={loadingState?.totalCount}\n color={columnColors?.[col]}\n onLoadMore={onLoadMoreColumn ? () => onLoadMoreColumn(col) : undefined}\n onAddItem={onAddItemToColumn ? () => onAddItemToColumn(col) : undefined}\n />\n );\n })}\n </SortableContext>\n {AddColumnComponent}\n </div>\n\n {typeof document !== \"undefined\" && createPortal(\n <DragOverlay dropAnimation={null}>\n {isDragging && activeItem && (\n <div style={{\n position: \"fixed\",\n left: overlayPos?.x ?? 0,\n top: overlayPos?.y ?? 0,\n pointerEvents: \"none\",\n zIndex: 9999\n }}>\n <ItemComponent\n item={activeItem}\n isDragging={true}\n isClone={true}\n />\n </div>\n )}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n );\n}\n","import React from \"react\";\nimport { Board } from \"./Kanban/Board\";\nimport { BoardItem, BoardItemViewProps, ColumnLoadingState } from \"./Kanban/board_types\";\n\nexport type KanbanViewProps<T, COLUMN extends string> = {\n columns: COLUMN[];\n columnLabels?: Record<COLUMN, string>;\n columnColors?: Record<COLUMN, any>;\n className?: string;\n assignColumn: (item: BoardItem<T>) => COLUMN;\n allowColumnReorder?: boolean;\n onColumnReorder?: (columns: COLUMN[]) => void;\n onItemsReorder?: (\n items: BoardItem<T>[],\n moveInfo?: {\n itemId: string;\n sourceColumn: COLUMN;\n targetColumn: COLUMN;\n }\n ) => void;\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n columnLoadingState?: ColumnLoadingState;\n onLoadMoreColumn?: (column: COLUMN) => void;\n onAddItemToColumn?: (column: COLUMN) => void;\n AddColumnComponent?: React.ReactNode;\n data: BoardItem<T>[];\n};\n\nexport function KanbanView<T, COLUMN extends string>(props: KanbanViewProps<T, COLUMN>) {\n return <Board {...props} />;\n}\nexport type { BoardItem, BoardItemViewProps, ColumnLoadingState };\n","\"use client\";\nimport React, { useCallback, useState } from \"react\";\nimport { LayoutList, Table2, LayoutGrid, Kanban, Settings2 } from \"lucide-react\";\nimport { iconSize } from \"../../icons/Icon\";\nimport { SearchBar } from \"../../components/SearchBar\";\nimport { Popover } from \"../../components/Popover\";\nimport { ToggleButtonGroup } from \"../../components/ToggleButtonGroup\";\nimport type { ToggleButtonOption } from \"../../components/ToggleButtonGroup\";\nimport { Typography } from \"../../components/Typography\";\nimport { Select, SelectItem } from \"../../components/Select\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { cls } from \"../../util\";\nimport type { CollectionViewMode, CollectionViewSize, KanbanPropertyOption } from \"./CollectionViewTypes\";\n\n/**\n * Props for the {@link CollectionViewToolbar} component.\n * @group Collection View\n */\nexport type CollectionViewToolbarProps = {\n viewMode: CollectionViewMode;\n onViewModeChange?: (mode: CollectionViewMode) => void;\n enabledViews?: CollectionViewMode[];\n size?: CollectionViewSize;\n onSizeChange?: (size: CollectionViewSize) => void;\n searchString?: string;\n onSearchChange?: (search?: string) => void;\n loading?: boolean;\n actionsStart?: React.ReactNode;\n actionsEnd?: React.ReactNode;\n compact?: boolean;\n kanbanPropertyOptions?: KanbanPropertyOption[];\n selectedKanbanProperty?: string;\n onKanbanPropertyChange?: (property: string) => void;\n};\n\nconst VIEW_MODE_ICONS: Record<CollectionViewMode, React.ReactNode> = {\n list: <LayoutList size={iconSize.small} />,\n table: <Table2 size={iconSize.small} />,\n cards: <LayoutGrid size={iconSize.small} />,\n kanban: <Kanban size={iconSize.small} />,\n};\n\nconst VIEW_MODE_LABELS: Record<CollectionViewMode, string> = {\n list: \"List\",\n table: \"Table\",\n cards: \"Cards\",\n kanban: \"Board\",\n};\n\nconst SIZE_LABELS: Record<CollectionViewSize, string> = {\n xs: \"Extra Small\",\n s: \"Small\",\n m: \"Medium\",\n l: \"Large\",\n xl: \"Extra Large\",\n};\n\n/**\n * Toolbar for the headless CollectionView.\n *\n * Renders a search bar, view mode toggle (popover with toggle button group),\n * optional size selector, optional kanban property selector, and action slots.\n *\n * @group Collection View\n */\nexport function CollectionViewToolbar({\n viewMode,\n onViewModeChange,\n enabledViews = [\"list\", \"table\", \"cards\", \"kanban\"],\n size = \"m\",\n onSizeChange,\n searchString,\n onSearchChange,\n loading,\n actionsStart,\n actionsEnd,\n compact,\n kanbanPropertyOptions,\n selectedKanbanProperty,\n onKanbanPropertyChange,\n}: CollectionViewToolbarProps) {\n const [popoverOpen, setPopoverOpen] = useState(false);\n\n const viewOptions: ToggleButtonOption<CollectionViewMode>[] = enabledViews.map((mode) => ({\n value: mode,\n label: VIEW_MODE_LABELS[mode],\n icon: VIEW_MODE_ICONS[mode],\n }));\n\n const handleViewModeChange = useCallback(\n (mode: CollectionViewMode) => {\n onViewModeChange?.(mode);\n },\n [onViewModeChange]\n );\n\n const handleSizeChange = useCallback(\n (value: string) => {\n onSizeChange?.(value as CollectionViewSize);\n },\n [onSizeChange]\n );\n\n const handleKanbanPropertyChange = useCallback(\n (value: string) => {\n onKanbanPropertyChange?.(value);\n },\n [onKanbanPropertyChange]\n );\n\n const showViewToggle = onViewModeChange && enabledViews.length > 1;\n const showSizeSelector = onSizeChange && viewMode !== \"kanban\";\n const showKanbanSelector =\n kanbanPropertyOptions &&\n kanbanPropertyOptions.length > 0 &&\n viewMode === \"kanban\" &&\n onKanbanPropertyChange;\n const showPopover = showViewToggle || showSizeSelector || showKanbanSelector;\n\n return (\n <div\n className={cls(\n \"flex items-center gap-2 px-2 flex-shrink-0\",\n \"border-b border-surface-200 dark:border-surface-800\",\n compact ? \"py-0.5 gap-1\" : \"py-1\"\n )}\n >\n {actionsStart}\n\n {onSearchChange && (\n <SearchBar\n onTextSearch={onSearchChange}\n size=\"small\"\n initialValue={searchString}\n loading={loading}\n expandable\n />\n )}\n\n <div className=\"flex-1\" />\n\n {actionsEnd}\n\n {showPopover && (\n <Popover\n open={popoverOpen}\n onOpenChange={setPopoverOpen}\n side=\"bottom\"\n align=\"end\"\n trigger={\n <IconButton\n size=\"small\"\n onClick={() => setPopoverOpen((prev) => !prev)}\n >\n <Settings2 size={iconSize.small} />\n </IconButton>\n }\n >\n <div className=\"p-3 min-w-[200px] flex flex-col gap-3\">\n {showViewToggle && (\n <div className=\"flex flex-col gap-1\">\n <Typography\n variant=\"caption\"\n color=\"secondary\"\n className=\"font-medium uppercase tracking-wider\"\n >\n View\n </Typography>\n <ToggleButtonGroup<CollectionViewMode>\n value={viewMode}\n onValueChange={handleViewModeChange}\n options={viewOptions}\n />\n </div>\n )}\n\n {showSizeSelector && (\n <div className=\"flex flex-col gap-1\">\n <Typography\n variant=\"caption\"\n color=\"secondary\"\n className=\"font-medium uppercase tracking-wider\"\n >\n Size\n </Typography>\n <Select\n value={size}\n onValueChange={handleSizeChange}\n size=\"small\"\n >\n {(Object.keys(SIZE_LABELS) as CollectionViewSize[]).map(\n (sizeKey) => (\n <SelectItem key={sizeKey} value={sizeKey}>\n {SIZE_LABELS[sizeKey]}\n </SelectItem>\n )\n )}\n </Select>\n </div>\n )}\n\n {showKanbanSelector && (\n <div className=\"flex flex-col gap-1\">\n <Typography\n variant=\"caption\"\n color=\"secondary\"\n className=\"font-medium uppercase tracking-wider\"\n >\n Group by\n </Typography>\n <Select\n value={selectedKanbanProperty}\n onValueChange={handleKanbanPropertyChange}\n size=\"small\"\n >\n {kanbanPropertyOptions.map((option) => (\n <SelectItem key={option.key} value={option.key}>\n {option.label}\n </SelectItem>\n ))}\n </Select>\n </div>\n )}\n </div>\n </Popover>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { ImageIcon } from \"lucide-react\";\nimport { cls } from \"../../util\";\nimport { Typography } from \"../../components/Typography\";\nimport { Chip } from \"../../components/Chip\";\nimport { BooleanSwitch } from \"../../components/BooleanSwitch\";\nimport { Markdown } from \"../../components/Markdown\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { iconSize } from \"../../icons\";\nimport type { CellRendererProps, CollectionPropertyConfig, CollectionEnumValueConfig } from \"./CollectionViewTypes\";\n\n// ——— Helpers ———\n\n/**\n * Resolve an enum key to its display label and optional color.\n */\nfunction resolveEnumLabel(\n enumValues: CollectionPropertyConfig[\"enum\"],\n value: unknown\n): { label: string; color?: string } | undefined {\n if (!enumValues) return undefined;\n const key = String(value);\n if (enumValues instanceof Map) {\n const config: CollectionEnumValueConfig | undefined = enumValues.get(value as string | number);\n if (!config) return undefined;\n if (typeof config === \"string\") return { label: config };\n return { label: config.label, color: config.color };\n }\n const config: CollectionEnumValueConfig | undefined = enumValues[key];\n if (!config) return undefined;\n if (typeof config === \"string\") return { label: config };\n return { label: config.label, color: config.color };\n}\n\n/**\n * Format a date value using Intl.DateTimeFormat.\n */\nfunction formatDate(value: unknown, includeTime: boolean): string {\n if (value == null) return \"—\";\n const date = value instanceof Date ? value : new Date(String(value));\n if (isNaN(date.getTime())) return String(value);\n\n const options: Intl.DateTimeFormatOptions = includeTime\n ? { year: \"numeric\", month: \"short\", day: \"numeric\", hour: \"2-digit\", minute: \"2-digit\" }\n : { year: \"numeric\", month: \"short\", day: \"numeric\" };\n\n return new Intl.DateTimeFormat(undefined, options).format(date);\n}\n\n/**\n * Type guard for geopoint-like objects.\n */\nfunction isGeoPoint(value: unknown): value is { lat: number; lng: number } {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n return typeof obj.lat === \"number\" && typeof obj.lng === \"number\";\n}\n\n// ——— Component ———\n\n/**\n * Default cell renderer for the headless CollectionView.\n * Handles all built-in property types without depending on any Rebase core types.\n *\n * @group Preview components\n */\nexport function DefaultCellRenderer({\n row,\n propertyKey,\n property,\n value,\n size,\n width,\n height\n}: CellRendererProps) {\n\n // 1. Null / undefined → em-dash\n if (value === null || value === undefined) {\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n —\n </Typography>\n );\n }\n\n // 2. Custom Preview component override\n if (property.Preview) {\n const PreviewComponent = property.Preview;\n return (\n <PreviewComponent\n row={row}\n propertyKey={propertyKey}\n property={property}\n value={value}\n size={size}\n width={width}\n height={height}\n />\n );\n }\n\n // ——— Type-specific renderers ———\n\n switch (property.type) {\n case \"string\":\n return renderString(property, value);\n\n case \"number\":\n return renderNumber(property, value);\n\n case \"boolean\":\n return renderBoolean(value);\n\n case \"date\":\n return renderDate(property, value);\n\n case \"array\":\n return renderArray(property, value);\n\n case \"map\":\n return renderMap(value);\n\n case \"reference\":\n case \"relation\":\n return renderReference(value);\n\n case \"geopoint\":\n return renderGeopoint(value);\n\n default:\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n noWrap\n className=\"px-1\">\n {JSON.stringify(value)}\n </Typography>\n );\n }\n}\n\n// ——— Per-type render functions ———\n\nfunction renderString(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n const strValue = String(value);\n\n // Enum → Chip\n if (property.enum) {\n const resolved = resolveEnumLabel(property.enum, value);\n return (\n <Chip size=\"small\"\n colorScheme={resolved?.color ? { color: resolved.color, text: \"#fff\" } : undefined}>\n {resolved?.label ?? strValue}\n </Chip>\n );\n }\n\n // Preview as tag → Chip\n if (property.previewAsTag) {\n return (\n <Chip size=\"small\">\n {strValue}\n </Chip>\n );\n }\n\n // URL → clickable link\n if (property.url) {\n const href = typeof property.url === \"string\" ? property.url : strValue;\n return (\n <Typography variant=\"body2\"\n noWrap\n component=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cls(\n \"px-1 text-primary hover:underline cursor-pointer\"\n )}>\n {strValue}\n </Typography>\n );\n }\n\n // Email → mailto link\n if (property.email) {\n return (\n <Typography variant=\"body2\"\n noWrap\n component=\"a\"\n href={`mailto:${strValue}`}\n className={cls(\n \"px-1 text-primary hover:underline cursor-pointer\"\n )}>\n {strValue}\n </Typography>\n );\n }\n\n // Markdown → rendered markdown\n if (property.markdown) {\n return (\n <div className=\"px-1 max-h-[100px] overflow-hidden\">\n <Markdown source={strValue} size=\"small\" />\n </div>\n );\n }\n\n // Storage → image preview with fallback\n if (property.storage) {\n return (\n <div className={cls(\n \"px-1 flex items-center justify-center\",\n \"w-[40px] h-[40px] rounded overflow-hidden\"\n )}>\n {strValue ? (\n <img\n src={strValue}\n alt=\"\"\n className=\"w-full h-full object-cover\"\n onError={(e) => {\n const target = e.currentTarget;\n target.style.display = \"none\";\n const fallback = target.nextElementSibling;\n if (fallback instanceof HTMLElement) {\n fallback.style.display = \"flex\";\n }\n }}\n />\n ) : null}\n <div className={cls(\n \"w-full h-full items-center justify-center rounded\",\n \"bg-surface-100 dark:bg-surface-800 text-text-secondary dark:text-text-secondary-dark\",\n strValue ? \"hidden\" : \"flex\"\n )}>\n <ImageIcon size={iconSize.small} />\n </div>\n </div>\n );\n }\n\n // Default string → truncated text\n return (\n <Tooltip title={strValue.length > 50 ? strValue : undefined}\n side=\"bottom\">\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1\">\n {strValue}\n </Typography>\n </Tooltip>\n );\n}\n\nfunction renderNumber(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n const numStr = String(value);\n\n // Enum → Chip\n if (property.enum) {\n const resolved = resolveEnumLabel(property.enum, value);\n return (\n <Chip size=\"small\"\n colorScheme={resolved?.color ? { color: resolved.color, text: \"#fff\" } : undefined}>\n {resolved?.label ?? numStr}\n </Chip>\n );\n }\n\n // Default → right-aligned\n return (\n <Typography variant=\"body2\"\n noWrap\n align=\"right\"\n className=\"px-1 tabular-nums\">\n {numStr}\n </Typography>\n );\n}\n\nfunction renderBoolean(value: unknown): React.ReactElement {\n return (\n <div className=\"px-1 flex items-center\">\n <BooleanSwitch value={!!value}\n size=\"small\"\n disabled />\n </div>\n );\n}\n\nfunction renderDate(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n const includeTime = property.mode === \"date_time\";\n const formatted = formatDate(value, includeTime);\n\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1 tabular-nums\">\n {formatted}\n </Typography>\n );\n}\n\nfunction renderArray(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n if (!Array.isArray(value)) {\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n —\n </Typography>\n );\n }\n\n // Array of enum values → row of chips\n if (property.of?.enum && value.length > 0) {\n return (\n <div className=\"px-1 flex flex-wrap gap-1 overflow-hidden\">\n {value.map((item, i) => {\n const resolved = resolveEnumLabel(property.of!.enum, item);\n return (\n <Chip key={i}\n size=\"smallest\"\n colorScheme={resolved?.color ? { color: resolved.color, text: \"#fff\" } : undefined}>\n {resolved?.label ?? String(item)}\n </Chip>\n );\n })}\n </div>\n );\n }\n\n // Array of strings → comma-separated\n if (value.length > 0 && value.every((item) => typeof item === \"string\")) {\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1\">\n {(value as string[]).join(\", \")}\n </Typography>\n );\n }\n\n // Generic array → item count\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n {value.length} {value.length === 1 ? \"item\" : \"items\"}\n </Typography>\n );\n}\n\nfunction renderMap(value: unknown): React.ReactElement {\n if (typeof value !== \"object\" || value === null) {\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n —\n </Typography>\n );\n }\n\n const fieldCount = Object.keys(value as Record<string, unknown>).length;\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n {fieldCount} {fieldCount === 1 ? \"field\" : \"fields\"}\n </Typography>\n );\n}\n\nfunction renderReference(value: unknown): React.ReactElement {\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1\">\n {String(value)}\n </Typography>\n );\n}\n\nfunction renderGeopoint(value: unknown): React.ReactElement {\n if (isGeoPoint(value)) {\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1 tabular-nums\">\n {value.lat.toFixed(6)}, {value.lng.toFixed(6)}\n </Typography>\n );\n }\n\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n {String(value)}\n </Typography>\n );\n}\n","/**\n * Traverse an object by dot-separated path.\n * Returns `undefined` if any segment is missing.\n */\nexport function getValueInPath(obj: Record<string, unknown> | undefined, path: string): unknown {\n if (!obj) return undefined;\n const parts = path.split(\".\");\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { VirtualTable } from \"../../components/VirtualTable/VirtualTable\";\nimport type { VirtualTableColumn, CellRendererParams, OnVirtualTableColumnResizeParams } from \"../../components/VirtualTable/VirtualTableProps\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionViewSize,\n CollectionSelectionController,\n CellRendererProps,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\nconst DEFAULT_COLUMN_WIDTHS: Record<string, number> = {\n string: 200,\n number: 140,\n date: 160,\n boolean: 120,\n array: 200,\n map: 200,\n reference: 200,\n relation: 200,\n geopoint: 180,\n};\nconst FALLBACK_COLUMN_WIDTH = 200;\n\nconst SIZE_TO_ROW_HEIGHT: Record<CollectionViewSize, number> = {\n xs: 36,\n s: 44,\n m: 52,\n l: 64,\n xl: 80,\n};\n\nconst SORTABLE_TYPES = new Set([\"string\", \"number\", \"date\"]);\n\ntype RendererSize = \"tiny\" | \"small\" | \"medium\" | \"large\";\n\nconst VIEW_SIZE_TO_RENDERER_SIZE: Record<CollectionViewSize, RendererSize> = {\n xs: \"tiny\",\n s: \"small\",\n m: \"medium\",\n l: \"large\",\n xl: \"large\",\n};\n\n/**\n * Props for the {@link CollectionTableView} component.\n * @group Collection View\n */\nexport type CollectionTableViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n displayedColumnIds?: string[];\n idProperty?: string;\n titleProperty?: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n size?: CollectionViewSize;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n hoverRow?: boolean;\n className?: string;\n onColumnResize?: (params: { key: string; width: number }) => void;\n onColumnsOrderChange?: (keys: string[]) => void;\n};\n\n/**\n * Headless table view that wraps {@link VirtualTable}.\n *\n * Converts property configurations into virtual table columns and wires up\n * sorting, pagination, and cell rendering without coupling to any data layer.\n *\n * @group Collection View\n */\nexport function CollectionTableView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n displayedColumnIds,\n onRowClick,\n cellRenderer,\n size = \"m\",\n emptyComponent,\n hoverRow = true,\n className,\n onColumnResize,\n onColumnsOrderChange,\n}: CollectionTableViewProps<T>) {\n // ── Build columns ────────────────────────────────────────────────\n const columns = useMemo<VirtualTableColumn[]>(() => {\n const order = propertiesOrder ?? Object.keys(properties);\n const filteredKeys = displayedColumnIds\n ? order.filter((key) => displayedColumnIds.includes(key))\n : order.filter((key) => {\n const prop = properties[key];\n return prop && !prop.hideFromCollection;\n });\n\n return filteredKeys\n .map((key): VirtualTableColumn | null => {\n const prop = properties[key];\n if (!prop) return null;\n return {\n key,\n width: prop.columnWidth || DEFAULT_COLUMN_WIDTHS[prop.type] || FALLBACK_COLUMN_WIDTH,\n title: prop.name,\n sortable: SORTABLE_TYPES.has(prop.type),\n resizable: true,\n };\n })\n .filter((col): col is VirtualTableColumn => col !== null);\n }, [properties, propertiesOrder, displayedColumnIds]);\n\n // ── Row height ───────────────────────────────────────────────────\n const rowHeight = SIZE_TO_ROW_HEIGHT[size];\n const rendererSize = VIEW_SIZE_TO_RENDERER_SIZE[size];\n\n // ── Cell renderer ────────────────────────────────────────────────\n const tableCellRenderer = useCallback(\n (params: CellRendererParams<Record<string, unknown>>): React.ReactNode => {\n if (!params.rowData) return null;\n\n const propertyConfig = properties[params.column.key];\n if (!propertyConfig) return null;\n\n const value = getValueInPath(\n params.rowData,\n params.column.key\n );\n\n const cellProps: CellRendererProps<T> = {\n row: params.rowData as T,\n propertyKey: params.column.key,\n property: propertyConfig,\n value,\n size: rendererSize,\n width: params.width,\n };\n\n // Try custom renderer first\n if (cellRenderer) {\n const custom = cellRenderer(cellProps);\n if (custom !== undefined) {\n return (\n <div className=\"flex items-center h-full px-1 overflow-hidden\">\n {custom}\n </div>\n );\n }\n }\n\n return (\n <div className=\"flex items-center h-full px-1 overflow-hidden\">\n <DefaultCellRenderer {...cellProps} />\n </div>\n );\n },\n [properties, cellRenderer, rendererSize]\n );\n\n // ── Row click ────────────────────────────────────────────────────\n const handleRowClick = useCallback(\n ({ rowData }: { rowData: Record<string, unknown> }) => {\n onRowClick?.(rowData as T);\n },\n [onRowClick]\n );\n\n // ── Pagination ──────────────────────────────────────────────────\n const handleEndReached = useCallback(() => {\n if (dataController.paginationEnabled && !dataController.noMoreToLoad) {\n const currentCount = dataController.itemCount ?? dataController.pageSize ?? 50;\n const pageSize = dataController.pageSize ?? 50;\n dataController.setItemCount?.(currentCount + pageSize);\n }\n }, [\n dataController.paginationEnabled,\n dataController.noMoreToLoad,\n dataController.itemCount,\n dataController.pageSize,\n dataController.setItemCount,\n ]);\n\n // ── Column resize ───────────────────────────────────────────────\n const handleColumnResize = useCallback(\n (params: OnVirtualTableColumnResizeParams) => {\n onColumnResize?.({ key: params.key, width: params.width });\n },\n [onColumnResize]\n );\n\n // ── Column reorder ──────────────────────────────────────────────\n const handleColumnsOrderChange = useCallback(\n (newColumns: VirtualTableColumn[]) => {\n onColumnsOrderChange?.(newColumns.map((col) => col.key));\n },\n [onColumnsOrderChange]\n );\n\n return (\n <VirtualTable\n data={dataController.data}\n columns={columns}\n cellRenderer={tableCellRenderer}\n rowHeight={rowHeight}\n sortBy={dataController.sortBy}\n onSortByUpdate={dataController.setSortBy}\n onRowClick={handleRowClick}\n onEndReached={handleEndReached}\n onColumnResize={handleColumnResize}\n onColumnsOrderChange={handleColumnsOrderChange}\n loading={dataController.loading}\n emptyComponent={emptyComponent}\n error={dataController.error}\n hoverRow={hoverRow}\n className={cls(\"h-full\", className)}\n onScroll={dataController.onScroll}\n initialScroll={dataController.initialScroll}\n />\n );\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { CardView } from \"../CardView\";\nimport { Card } from \"../../components/Card\";\nimport { Typography } from \"../../components/Typography\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport { cardSelectedMixin, fieldBackgroundMixin } from \"../../styles\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionViewSize,\n CollectionSelectionController,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\n/**\n * Props for the {@link CollectionCardView} component.\n * @group Collection View\n */\nexport type CollectionCardViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n idProperty?: string;\n titleProperty?: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n size?: CollectionViewSize;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n className?: string;\n};\n\n/**\n * Headless card grid view that wraps {@link CardView}.\n *\n * Renders each item as a card with an optional image, title,\n * preview properties, and selection support.\n *\n * @group Collection View\n */\nexport function CollectionCardView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n idProperty = \"id\",\n titleProperty,\n onRowClick,\n cellRenderer,\n size = \"m\",\n selectionEnabled,\n selectionController,\n highlightedItems,\n emptyComponent,\n className,\n}: CollectionCardViewProps<T>) {\n const order = useMemo(\n () => propertiesOrder ?? Object.keys(properties),\n [propertiesOrder, properties]\n );\n\n // ── Resolve title property ───────────────────────────────────────\n const titlePropertyKey = useMemo(() => {\n if (titleProperty) return titleProperty;\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && !prop.hideFromCollection && !prop.storage) {\n return key;\n }\n }\n return idProperty;\n }, [titleProperty, order, properties, idProperty]);\n\n // ── Resolve image property ───────────────────────────────────────\n const imageProperty = useMemo(() => {\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && prop.storage) {\n return key;\n }\n }\n return undefined;\n }, [order, properties]);\n\n // ── Preview properties (up to 3) ─────────────────────────────────\n const previewProperties = useMemo(() => {\n const result: { key: string; property: CollectionPropertyConfig }[] = [];\n for (const key of order) {\n if (key === titlePropertyKey || key === imageProperty) continue;\n const prop = properties[key];\n if (prop && !prop.hideFromCollection) {\n result.push({ key, property: prop });\n if (result.length >= 3) break;\n }\n }\n return result;\n }, [order, properties, titlePropertyKey, imageProperty]);\n\n // ── Selection IDs ────────────────────────────────────────────────\n const selectedIds = useMemo(() => {\n if (!selectionController?.selectedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of selectionController.selectedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [selectionController?.selectedItems, idProperty]);\n\n // ── Highlighted IDs ──────────────────────────────────────────────\n const highlightedIds = useMemo(() => {\n if (!highlightedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of highlightedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [highlightedItems, idProperty]);\n\n // ── Selection handler ────────────────────────────────────────────\n const handleSelectionChange = useCallback(\n (item: T, selected: boolean) => {\n if (!selectionController) return;\n selectionController.setSelectedItems((prev) => {\n if (selected) {\n return [...prev, item];\n }\n const itemId = getValueInPath(item as Record<string, unknown>, idProperty);\n return prev.filter((existing) => {\n const existingId = getValueInPath(existing as Record<string, unknown>, idProperty);\n return existingId !== itemId;\n });\n });\n },\n [selectionController, idProperty]\n );\n\n // ── Render card ──────────────────────────────────────────────────\n const renderCard = useCallback(\n (\n item: T,\n extra: {\n selected: boolean;\n highlighted: boolean;\n onSelectionChange: (selected: boolean) => void;\n onClick: (e: React.MouseEvent) => void;\n }\n ): React.ReactNode => {\n const titleValue = getValueInPath(item as Record<string, unknown>, titlePropertyKey);\n const imageValue = imageProperty\n ? getValueInPath(item as Record<string, unknown>, imageProperty)\n : undefined;\n const hasImage = typeof imageValue === \"string\" && imageValue.length > 0;\n\n return (\n <Card\n onClick={(e) => { if (e) extra.onClick(e); }}\n className={cls(\n \"overflow-hidden relative\",\n extra.selected && cardSelectedMixin,\n extra.highlighted && !extra.selected && \"ring-1 ring-primary/50\"\n )}\n >\n {/* Image */}\n {imageProperty && (\n hasImage ? (\n <img\n src={imageValue as string}\n alt=\"\"\n className=\"w-full h-32 object-cover rounded-t-lg\"\n />\n ) : (\n <div className={cls(\"h-24 rounded-t-lg\", fieldBackgroundMixin)} />\n )\n )}\n\n {/* Selection checkbox */}\n {selectionEnabled && (\n <div\n className=\"absolute top-2 right-2\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={extra.selected}\n onCheckedChange={extra.onSelectionChange}\n size=\"small\"\n />\n </div>\n )}\n\n {/* Title */}\n <Typography variant=\"subtitle2\" noWrap className=\"px-3 pt-2 pb-1\">\n {String(titleValue ?? \"\")}\n </Typography>\n\n {/* Preview properties */}\n {previewProperties.map(({ key, property }) => {\n const value = getValueInPath(item as Record<string, unknown>, key);\n\n if (cellRenderer) {\n const custom = cellRenderer({\n row: item,\n propertyKey: key,\n property,\n value,\n size: \"small\",\n });\n if (custom !== undefined) {\n return (\n <div key={key} className=\"px-3 py-0.5\">\n {custom}\n </div>\n );\n }\n }\n\n return (\n <div key={key} className=\"px-3 py-0.5\">\n <DefaultCellRenderer\n row={item}\n propertyKey={key}\n property={property}\n value={value}\n size=\"small\"\n />\n </div>\n );\n })}\n\n <div className=\"pb-2\" />\n </Card>\n );\n },\n [titlePropertyKey, imageProperty, previewProperties, cellRenderer, selectionEnabled]\n );\n\n return (\n <div className={cls(\"w-full h-full overflow-auto\", className)}>\n <CardView<T>\n data={dataController.data}\n dataLoading={dataController.loading}\n noMoreToLoad={dataController.noMoreToLoad}\n dataLoadingError={dataController.error}\n itemCount={dataController.itemCount}\n setItemCount={dataController.setItemCount}\n pageSize={dataController.pageSize}\n paginationEnabled={dataController.paginationEnabled}\n onItemClick={onRowClick}\n selectedIds={selectedIds}\n highlightedIds={highlightedIds}\n selectionEnabled={!!selectionEnabled}\n onSelectionChange={handleSelectionChange}\n size={size}\n renderCard={renderCard}\n emptyComponent={emptyComponent}\n />\n </div>\n );\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { ListView } from \"../ListView\";\nimport { Typography } from \"../../components/Typography\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionViewSize,\n CollectionSelectionController,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\n/**\n * Props for the {@link CollectionListView} component.\n * @group Collection View\n */\nexport type CollectionListViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n idProperty?: string;\n titleProperty?: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n size?: CollectionViewSize;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n className?: string;\n};\n\n/**\n * Headless list view that wraps {@link ListView}.\n *\n * Each row displays a title (bold), subtitle with 1–2 secondary property values,\n * and optional selection support.\n *\n * @group Collection View\n */\nexport function CollectionListView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n idProperty = \"id\",\n titleProperty,\n onRowClick,\n cellRenderer,\n size = \"m\",\n selectionEnabled,\n selectionController,\n highlightedItems,\n emptyComponent,\n className,\n}: CollectionListViewProps<T>) {\n const order = useMemo(\n () => propertiesOrder ?? Object.keys(properties),\n [propertiesOrder, properties]\n );\n\n // ── Resolve title property ───────────────────────────────────────\n const titlePropertyKey = useMemo(() => {\n if (titleProperty) return titleProperty;\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && !prop.hideFromCollection && !prop.storage) {\n return key;\n }\n }\n return idProperty;\n }, [titleProperty, order, properties, idProperty]);\n\n // ── Subtitle properties (up to 2) ────────────────────────────────\n const subtitleProperties = useMemo(() => {\n const result: { key: string; property: CollectionPropertyConfig }[] = [];\n for (const key of order) {\n if (key === titlePropertyKey) continue;\n const prop = properties[key];\n if (prop && !prop.hideFromCollection) {\n result.push({ key, property: prop });\n if (result.length >= 2) break;\n }\n }\n return result;\n }, [order, properties, titlePropertyKey]);\n\n // ── Selection IDs ────────────────────────────────────────────────\n const selectedIds = useMemo(() => {\n if (!selectionController?.selectedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of selectionController.selectedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [selectionController?.selectedItems, idProperty]);\n\n // ── Highlighted IDs ──────────────────────────────────────────────\n const highlightedIds = useMemo(() => {\n if (!highlightedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of highlightedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [highlightedItems, idProperty]);\n\n // ── Selection handler ────────────────────────────────────────────\n const handleSelectionChange = useCallback(\n (item: T, selected: boolean) => {\n if (!selectionController) return;\n selectionController.setSelectedItems((prev) => {\n if (selected) {\n return [...prev, item];\n }\n const itemId = getValueInPath(item as Record<string, unknown>, idProperty);\n return prev.filter((existing) => {\n const existingId = getValueInPath(existing as Record<string, unknown>, idProperty);\n return existingId !== itemId;\n });\n });\n },\n [selectionController, idProperty]\n );\n\n // ── Render row ───────────────────────────────────────────────────\n const renderRow = useCallback(\n (params: {\n item: T;\n index: number;\n style: React.CSSProperties;\n className: string;\n selected: boolean;\n highlighted: boolean;\n isLast: boolean;\n onClick: (e: React.MouseEvent) => void;\n onSelectionChange: (selected: boolean) => void;\n }): React.ReactNode => {\n const { item, style, className: rowClassName, selected, highlighted, onClick, onSelectionChange } = params;\n const titleValue = getValueInPath(item as Record<string, unknown>, titlePropertyKey);\n\n return (\n <div\n style={style}\n className={cls(\n \"flex items-center gap-3 px-4 cursor-pointer\",\n \"hover:bg-surface-50 dark:hover:bg-surface-700\",\n \"transition-colors duration-100\",\n selected && \"bg-primary-50 dark:bg-primary-900/20\",\n highlighted && \"bg-surface-100 dark:bg-surface-800\",\n rowClassName\n )}\n onClick={onClick}\n >\n {/* Selection checkbox */}\n {selectionEnabled && (\n <div className=\"flex-shrink-0\" onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={selected}\n onCheckedChange={onSelectionChange}\n size=\"small\"\n />\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0 py-1\">\n {/* Title */}\n <Typography variant=\"subtitle2\" noWrap>\n {String(titleValue ?? \"\")}\n </Typography>\n\n {/* Subtitle properties */}\n {subtitleProperties.length > 0 && (\n <div className=\"flex items-center gap-2\">\n {subtitleProperties.map(({ key, property }) => {\n const value = getValueInPath(item as Record<string, unknown>, key);\n\n if (cellRenderer) {\n const custom = cellRenderer({\n row: item,\n propertyKey: key,\n property,\n value,\n size: \"tiny\",\n });\n if (custom !== undefined) {\n return <React.Fragment key={key}>{custom}</React.Fragment>;\n }\n }\n\n return (\n <React.Fragment key={key}>\n <DefaultCellRenderer\n row={item}\n propertyKey={key}\n property={property}\n value={value}\n size=\"tiny\"\n />\n </React.Fragment>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n },\n [titlePropertyKey, subtitleProperties, cellRenderer, selectionEnabled]\n );\n\n return (\n <div className={cls(\"w-full h-full overflow-auto\", className)}>\n <ListView<T>\n data={dataController.data}\n dataLoading={dataController.loading}\n noMoreToLoad={dataController.noMoreToLoad}\n dataLoadingError={dataController.error}\n itemCount={dataController.itemCount}\n setItemCount={dataController.setItemCount}\n pageSize={dataController.pageSize}\n paginationEnabled={dataController.paginationEnabled}\n onItemClick={onRowClick}\n selectedIds={selectedIds}\n highlightedIds={highlightedIds}\n selectionEnabled={!!selectionEnabled}\n onSelectionChange={handleSelectionChange}\n size={size}\n renderRow={renderRow}\n emptyComponent={emptyComponent}\n />\n </div>\n );\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { KanbanView } from \"../KanbanView\";\nimport type { BoardItem, BoardItemViewProps } from \"../KanbanView\";\nimport { Card } from \"../../components/Card\";\nimport { Typography } from \"../../components/Typography\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport { cardClickableMixin, cardSelectedMixin } from \"../../styles\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionSelectionController,\n CollectionEnumValueConfig,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\nfunction getEnumLabel(enumConfig: CollectionPropertyConfig[\"enum\"], key: string): string {\n if (!enumConfig) return key;\n if (enumConfig instanceof Map) {\n const cfg: CollectionEnumValueConfig | undefined = enumConfig.get(key);\n if (!cfg) return key;\n return typeof cfg === \"string\" ? cfg : cfg.label;\n }\n const cfg: CollectionEnumValueConfig | undefined = enumConfig[key];\n if (!cfg) return key;\n return typeof cfg === \"string\" ? cfg : cfg.label;\n}\n\n/**\n * Props for the {@link CollectionKanbanView} component.\n * @group Collection View\n */\nexport type CollectionKanbanViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n idProperty?: string;\n titleProperty?: string;\n kanbanProperty: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n onRowCreate?: (defaults?: Record<string, unknown>) => void;\n className?: string;\n};\n\n/**\n * Headless kanban view that wraps {@link KanbanView}.\n *\n * Groups data by a kanban property's enum values into columns.\n * Each card displays a title and 1–2 preview properties.\n *\n * @group Collection View\n */\nexport function CollectionKanbanView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n idProperty = \"id\",\n titleProperty,\n kanbanProperty,\n onRowClick,\n cellRenderer,\n emptyComponent,\n onRowCreate,\n className,\n}: CollectionKanbanViewProps<T>) {\n const order = useMemo(\n () => propertiesOrder ?? Object.keys(properties),\n [propertiesOrder, properties]\n );\n\n // ── Resolve kanban columns ───────────────────────────────────────\n const columns = useMemo<string[]>(() => {\n const kanbanConfig = properties[kanbanProperty];\n if (kanbanConfig?.enum) {\n if (kanbanConfig.enum instanceof Map) {\n return Array.from(kanbanConfig.enum.keys()).map(String);\n }\n return Object.keys(kanbanConfig.enum);\n }\n // Deduce from data\n const seen = new Set<string>();\n for (const row of dataController.data) {\n const val = getValueInPath(row as Record<string, unknown>, kanbanProperty);\n if (val !== null && val !== undefined) {\n seen.add(String(val));\n }\n }\n return Array.from(seen);\n }, [properties, kanbanProperty, dataController.data]);\n\n // ── Column labels ────────────────────────────────────────────────\n const columnLabels = useMemo(() => {\n const kanbanConfig = properties[kanbanProperty];\n const labels: Record<string, string> = {};\n for (const col of columns) {\n labels[col] = getEnumLabel(kanbanConfig?.enum, col);\n }\n return labels;\n }, [properties, kanbanProperty, columns]);\n\n // ── Resolve title property ───────────────────────────────────────\n const titlePropertyKey = useMemo(() => {\n if (titleProperty) return titleProperty;\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && !prop.hideFromCollection && !prop.storage) {\n return key;\n }\n }\n return idProperty;\n }, [titleProperty, order, properties, idProperty]);\n\n // ── Preview properties (up to 2) ─────────────────────────────────\n const previewProperties = useMemo(() => {\n const result: { key: string; property: CollectionPropertyConfig }[] = [];\n for (const key of order) {\n if (key === titlePropertyKey || key === kanbanProperty) continue;\n const prop = properties[key];\n if (prop && !prop.hideFromCollection) {\n result.push({ key, property: prop });\n if (result.length >= 2) break;\n }\n }\n return result;\n }, [order, properties, titlePropertyKey, kanbanProperty]);\n\n // ── Convert data to BoardItem<T>[] ───────────────────────────────\n const boardItems = useMemo<BoardItem<T>[]>(() => {\n return dataController.data.map((row, index) => {\n const id = getValueInPath(row as Record<string, unknown>, idProperty);\n return {\n id: id !== null && id !== undefined ? String(id) : String(index),\n data: row,\n };\n });\n }, [dataController.data, idProperty]);\n\n // ── Assign column ────────────────────────────────────────────────\n const assignColumn = useCallback(\n (item: BoardItem<T>): string => {\n const val = getValueInPath(item.data as Record<string, unknown>, kanbanProperty);\n const strVal = val !== null && val !== undefined ? String(val) : \"\";\n if (columns.includes(strVal)) return strVal;\n return columns[0] ?? \"\";\n },\n [kanbanProperty, columns]\n );\n\n // ── Item component ───────────────────────────────────────────────\n const ItemComponent = useMemo(() => {\n function KanbanCard(props: BoardItemViewProps<T>) {\n const { item } = props;\n const titleValue = getValueInPath(\n item.data as Record<string, unknown>,\n titlePropertyKey\n );\n\n return (\n <Card\n onClick={() => onRowClick?.(item.data)}\n className={cls(\n \"p-3\",\n cardClickableMixin,\n props.isDragging && cardSelectedMixin,\n props.isDragging && \"shadow-lg opacity-75\"\n )}\n >\n <Typography variant=\"subtitle2\" noWrap>\n {String(titleValue ?? \"\")}\n </Typography>\n {previewProperties.map(({ key, property }) => {\n const value = getValueInPath(\n item.data as Record<string, unknown>,\n key\n );\n\n if (cellRenderer) {\n const custom = cellRenderer({\n row: item.data,\n propertyKey: key,\n property,\n value,\n size: \"tiny\",\n });\n if (custom !== undefined) {\n return (\n <div key={key} className=\"mt-1\">\n {custom}\n </div>\n );\n }\n }\n\n return (\n <div key={key} className=\"mt-1\">\n <DefaultCellRenderer\n row={item.data}\n propertyKey={key}\n property={property}\n value={value}\n size=\"tiny\"\n />\n </div>\n );\n })}\n </Card>\n );\n }\n return KanbanCard;\n }, [titlePropertyKey, previewProperties, cellRenderer, onRowClick]);\n\n // ── Add item to column ───────────────────────────────────────────\n const handleAddItemToColumn = useCallback(\n (column: string) => {\n onRowCreate?.({ [kanbanProperty]: column });\n },\n [onRowCreate, kanbanProperty]\n );\n\n if (columns.length === 0 && !dataController.loading) {\n return (\n <div className=\"flex items-center justify-center p-8\">\n {emptyComponent ?? (\n <Typography variant=\"body2\" color=\"secondary\">\n No columns available for kanban view.\n </Typography>\n )}\n </div>\n );\n }\n\n return (\n <KanbanView<T, string>\n columns={columns}\n columnLabels={columnLabels as Record<string, string>}\n data={boardItems}\n assignColumn={assignColumn}\n ItemComponent={ItemComponent}\n onAddItemToColumn={onRowCreate ? handleAddItemToColumn : undefined}\n className={className}\n />\n );\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { cls } from \"../../util\";\nimport { Typography } from \"../../components/Typography\";\nimport { CollectionViewToolbar } from \"./CollectionViewToolbar\";\nimport { CollectionTableView } from \"./CollectionTableView\";\nimport { CollectionCardView } from \"./CollectionCardView\";\nimport { CollectionListView } from \"./CollectionListView\";\nimport { CollectionKanbanView } from \"./CollectionKanbanView\";\nimport type {\n CollectionViewMode,\n CollectionViewSize,\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionSelectionController,\n KanbanPropertyOption\n} from \"./CollectionViewTypes\";\n\n/**\n * Props for the headless {@link CollectionView} component.\n *\n * This component is data-agnostic — it renders collection data based on\n * property configurations and callbacks, with ZERO coupling to any entity\n * or data layer.\n *\n * @group Collection View\n */\nexport interface CollectionViewProps<T = Record<string, unknown>> {\n // ── Data ──────────────────────────────────────────────────────────\n\n /**\n * Data controller providing rows, loading state, pagination,\n * filter/sort/search state and setters.\n */\n dataController: CollectionDataController<T>;\n\n /**\n * Property definitions keyed by property key.\n * Drives column rendering, cell formatting, and filter UI.\n */\n properties: Record<string, CollectionPropertyConfig>;\n\n /**\n * Display order of properties. If omitted, uses Object.keys(properties).\n */\n propertiesOrder?: string[];\n\n /**\n * Subset of property keys to actually display as columns.\n * If omitted, all non-hidden properties are shown.\n */\n displayedColumnIds?: string[];\n\n // ── Identity ──────────────────────────────────────────────────────\n\n /** Property key used as row identifier. Default: \"id\" */\n idProperty?: string;\n\n /** Property key used as the display title in card/list views */\n titleProperty?: string;\n\n // ── View configuration ────────────────────────────────────────────\n\n /** Title displayed above the collection. `false` to hide. */\n title?: string | false;\n\n /** Controlled view mode. If omitted, internal state is used. */\n viewMode?: CollectionViewMode;\n\n /** Default view mode when uncontrolled. Default: \"list\" */\n defaultViewMode?: CollectionViewMode;\n\n /** Which view modes are available in the toggle */\n enabledViews?: CollectionViewMode[];\n\n /** Callback when view mode changes */\n onViewModeChange?: (mode: CollectionViewMode) => void;\n\n // ── Size ──────────────────────────────────────────────────────────\n\n /** Controlled size. If omitted, internal state is used. */\n size?: CollectionViewSize;\n\n /** Default size. Default: \"m\" */\n defaultSize?: CollectionViewSize;\n\n /** Callback when size changes */\n onSizeChange?: (size: CollectionViewSize) => void;\n\n // ── Kanban ─────────────────────────────────────────────────────────\n\n /** Property key for kanban column grouping */\n kanbanProperty?: string;\n\n /** Available kanban property options (shown in view toggle) */\n kanbanPropertyOptions?: KanbanPropertyOption[];\n\n /** Callback when kanban column property changes */\n onKanbanPropertyChange?: (property: string) => void;\n\n // ── Interactions ──────────────────────────────────────────────────\n\n /** Called when a row is clicked */\n onRowClick?: (row: T) => void;\n\n /** Called when the \"create\" button is clicked */\n onRowCreate?: (defaults?: Record<string, unknown>) => void;\n\n /** Whether creation is allowed (shows the + button) */\n canCreate?: boolean;\n\n // ── Selection ─────────────────────────────────────────────────────\n\n /** Enable row selection checkboxes */\n selectionEnabled?: boolean;\n\n /** Selection controller */\n selectionController?: CollectionSelectionController<T>;\n\n /** Highlighted items (e.g. recently clicked) */\n highlightedItems?: T[];\n\n /** Callback for bulk delete */\n onMultipleDelete?: (rows: T[]) => void;\n\n // ── Custom rendering ──────────────────────────────────────────────\n\n /**\n * Custom cell renderer override. Return undefined to use default.\n * This is how the connected wrapper injects PropertyPreview.\n */\n cellRenderer?: CellRendererOverride<T>;\n\n /** Custom empty state component */\n emptyComponent?: React.ReactNode;\n\n // ── Toolbar ───────────────────────────────────────────────────────\n\n /** Actions rendered at the start (left) of the toolbar */\n toolbarActionsStart?: React.ReactNode;\n\n /** Actions rendered at the end (right) of the toolbar */\n toolbarActionsEnd?: React.ReactNode;\n\n /** Hide the built-in toolbar entirely */\n hideToolbar?: boolean;\n\n // ── Table-specific ────────────────────────────────────────────────\n\n /** Enable row hover highlight in table view */\n hoverRow?: boolean;\n\n /** Callback when table columns are resized */\n onColumnResize?: (params: { key: string; width: number }) => void;\n\n /** Callback when table columns are reordered */\n onColumnsOrderChange?: (keys: string[]) => void;\n\n // ── Style ─────────────────────────────────────────────────────────\n\n /** CSS class for the outer container */\n className?: string;\n}\n\nconst DEFAULT_ENABLED_VIEWS: CollectionViewMode[] = [\"list\", \"table\", \"cards\", \"kanban\"];\n\n/**\n * A data-agnostic collection view component that orchestrates table, card,\n * list, and kanban views — driven entirely by props.\n *\n * Zero imports from any entity or data layer. This component lives in\n * `@rebasepro/ui` and can be used with any data source.\n *\n * @example\n * ```tsx\n * import { CollectionView } from \"@rebasepro/ui\";\n *\n * <CollectionView\n * dataController={{ data: myRows, loading: false, noMoreToLoad: true }}\n * properties={{\n * name: { type: \"string\", name: \"Name\" },\n * email: { type: \"string\", name: \"Email\" },\n * }}\n * title=\"Contacts\"\n * onRowClick={(row) => openDetail(row.id)}\n * />\n * ```\n *\n * @group Collection View\n */\nexport function CollectionView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n displayedColumnIds,\n idProperty = \"id\",\n titleProperty,\n title,\n viewMode: viewModeProp,\n defaultViewMode = \"list\",\n enabledViews = DEFAULT_ENABLED_VIEWS,\n onViewModeChange: onViewModeChangeProp,\n size: sizeProp,\n defaultSize = \"m\",\n onSizeChange: onSizeChangeProp,\n kanbanProperty: kanbanPropertyProp,\n kanbanPropertyOptions,\n onKanbanPropertyChange: onKanbanPropertyChangeProp,\n onRowClick,\n onRowCreate,\n canCreate = true,\n selectionEnabled,\n selectionController,\n highlightedItems,\n onMultipleDelete,\n cellRenderer,\n emptyComponent,\n toolbarActionsStart,\n toolbarActionsEnd,\n hideToolbar,\n hoverRow = true,\n onColumnResize,\n onColumnsOrderChange,\n className\n}: CollectionViewProps<T>) {\n\n // ── View mode state (uncontrolled with controlled override) ───────\n\n const [internalViewMode, setInternalViewMode] = useState<CollectionViewMode>(defaultViewMode);\n const viewMode = viewModeProp ?? internalViewMode;\n\n const onViewModeChange = useCallback((mode: CollectionViewMode) => {\n setInternalViewMode(mode);\n onViewModeChangeProp?.(mode);\n }, [onViewModeChangeProp]);\n\n // ── Size state (uncontrolled with controlled override) ────────────\n\n const [internalSize, setInternalSize] = useState<CollectionViewSize>(defaultSize);\n const size = sizeProp ?? internalSize;\n\n const onSizeChange = useCallback((s: CollectionViewSize) => {\n setInternalSize(s);\n onSizeChangeProp?.(s);\n }, [onSizeChangeProp]);\n\n // ── Kanban property state ─────────────────────────────────────────\n\n const [internalKanbanProperty, setInternalKanbanProperty] = useState<string | undefined>(kanbanPropertyProp);\n const kanbanProperty = kanbanPropertyProp ?? internalKanbanProperty;\n\n const onKanbanPropertyChange = useCallback((property: string) => {\n setInternalKanbanProperty(property);\n onKanbanPropertyChangeProp?.(property);\n }, [onKanbanPropertyChangeProp]);\n\n // Auto-detect kanban property if not provided\n const resolvedKanbanProperty = useMemo(() => {\n if (kanbanProperty) return kanbanProperty;\n // Find first enum property\n const order = propertiesOrder ?? Object.keys(properties);\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && prop.enum) {\n return key;\n }\n }\n return undefined;\n }, [kanbanProperty, properties, propertiesOrder]);\n\n // Build kanban property options from properties if not provided\n const resolvedKanbanPropertyOptions = useMemo((): KanbanPropertyOption[] => {\n if (kanbanPropertyOptions) return kanbanPropertyOptions;\n const options: KanbanPropertyOption[] = [];\n const order = propertiesOrder ?? Object.keys(properties);\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && prop.enum) {\n options.push({ key, label: prop.name });\n }\n }\n return options;\n }, [kanbanPropertyOptions, properties, propertiesOrder]);\n\n // ── Render ────────────────────────────────────────────────────────\n\n const sharedProps = {\n dataController,\n properties,\n propertiesOrder,\n idProperty,\n titleProperty,\n onRowClick,\n cellRenderer,\n selectionEnabled,\n selectionController,\n highlightedItems,\n emptyComponent,\n };\n\n function renderView() {\n switch (viewMode) {\n case \"table\":\n return (\n <CollectionTableView<T>\n {...sharedProps}\n displayedColumnIds={displayedColumnIds}\n size={size}\n hoverRow={hoverRow}\n onColumnResize={onColumnResize}\n onColumnsOrderChange={onColumnsOrderChange}\n />\n );\n case \"cards\":\n return (\n <CollectionCardView<T>\n {...sharedProps}\n size={size}\n />\n );\n case \"kanban\":\n return resolvedKanbanProperty ? (\n <CollectionKanbanView<T>\n {...sharedProps}\n kanbanProperty={resolvedKanbanProperty}\n onRowCreate={onRowCreate}\n />\n ) : (\n <div className=\"flex items-center justify-center p-8\">\n <Typography variant=\"body2\" color=\"secondary\">\n No enum property available for kanban grouping.\n </Typography>\n </div>\n );\n case \"list\":\n default:\n return (\n <CollectionListView<T>\n {...sharedProps}\n size={size}\n />\n );\n }\n }\n\n return (\n <div\n className={cls(\n \"overflow-hidden h-full w-full rounded-md flex flex-col\",\n \"dark:bg-surface-800\",\n className\n )}\n >\n {/* Error banner */}\n {dataController.error && dataController.data.length > 0 && (\n <div className=\"flex items-center gap-4 px-4 py-2 bg-red-50 dark:bg-red-900/20 border-b border-red-200 dark:border-red-800 flex-shrink-0\">\n <Typography variant=\"body2\" className=\"text-red-700 dark:text-red-300 flex-1\">\n <strong>Warning:</strong> {dataController.error.message || \"Failed to update data.\"}\n </Typography>\n </div>\n )}\n\n {/* Toolbar */}\n {!hideToolbar && (\n <CollectionViewToolbar\n viewMode={viewMode}\n onViewModeChange={enabledViews.length > 1 ? onViewModeChange : undefined}\n enabledViews={enabledViews}\n size={size}\n onSizeChange={onSizeChange}\n searchString={dataController.searchString}\n onSearchChange={dataController.setSearchString}\n loading={dataController.loading}\n actionsStart={toolbarActionsStart}\n actionsEnd={toolbarActionsEnd}\n kanbanPropertyOptions={viewMode === \"kanban\" ? resolvedKanbanPropertyOptions : undefined}\n selectedKanbanProperty={resolvedKanbanProperty}\n onKanbanPropertyChange={onKanbanPropertyChange}\n />\n )}\n\n {/* View */}\n <div className=\"flex-1 overflow-hidden\">\n {renderView()}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,SAAgB,IAAI,GAAG,SAAuB;CAC1C,OAAO,QAAQ,KAAK,OAAO,CAAC;AAChC;;;;;;ACDA,SAAgB,SAAgD,MAAS,OAAO,KAAK;CACjF,IAAI;CAEJ,SAAS,UAAyB,GAAG,MAAqB;EACtD,MAAM,cAAc;GAChB,KAAK,MAAM,MAAM,IAAI;EACzB;EACA,aAAa,OAAO;EACpB,UAAU,WAAW,OAAO,IAAI;CACpC;CAEA,UAAU,cAAc;EACpB,aAAa,OAAO;CACxB;CAEA,OAAO;AACX;;;ACpBA,SAAgB,WAAW,KAAqB;CAC5C,IAAI,OAAO;CACX,IAAI;CACJ,IAAI;CACJ,KAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;EAC7B,MAAM,IAAI,WAAW,CAAC;EACtB,QAAS,QAAQ,KAAK,OAAQ;EAC9B,QAAQ;CACZ;CACA,OAAO,KAAK,IAAI,IAAI;AACxB;;;ACPA,IAAa,cAA+C;CACxD,MAAM;EAAE,OAAO;EACnB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,MAAM;EAAE,OAAO;EACnB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,QAAQ;EAAE,OAAO;EACrB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,MAAM;EAAE,OAAO;EACnB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,QAAQ;EAAE,OAAO;EACrB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,MAAM;EAAE,OAAO;EACnB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,QAAQ;EAAE,OAAO;EACrB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,OAAO;EAAE,OAAO;EACpB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,KAAK;EAAE,OAAO;EAClB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,MAAM;EAAE,OAAO;EACnB,MAAM;EACN,WAAW;EACX,UAAU;CAAO;CACb,QAAQ;EAAE,OAAO;EACrB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,QAAQ;EAAE,OAAO;EACrB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,SAAS;EAAE,OAAO;EACtB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,MAAM;EAAE,OAAO;EACnB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;CAChB,SAAS;EAAE,OAAO;EACtB,MAAM;EACN,WAAW;EACX,UAAU;CAAU;AACpB;AAEA,SAAgB,qBAAqB,KAAoC;CACrE,OAAO,YAAY;AACvB;AAEA,SAAgB,sBAAsB,MAA+B;CACjE,MAAM,OAAe,WAAW,IAAI;CACpC,MAAM,YAAY,OAAO,KAAK,WAAW;CAEzC,OAAO,YAAY,UADL,OAAO,UAAU;AAEnC;;;ACxEA,SAAgB,iBAAiB,EAAE,UAAU,SAAyD;CAClG,OAAO,oBAAC,OAAD;EAAK,WAAW,IAAI,oCACvB,QAAQ,mCAAmC,sDAAsD;EAChG;CACA,CAAA;AACT;;;ACRA,IAAa,kBAAkB;AAC/B,IAAa,wBAAwB;AACrC,IAAa,iBAAiB;AAC9B,IAAa,uBAAuB;AACpC,IAAa,gCAAgC;AAC7C,IAAa,+BAA+B;AAC5C,IAAa,4BAA4B;AACzC,IAAa,qBAAqB;AAClC,IAAa,aAAa;AAC1B,IAAa,YAAY;AACzB,IAAa,qBAAqB;AAClC,IAAa,oBAAoB;;;ACJjC,IAAM,yBAAyB,cAAsD,KAAA,CAAS;;;;;;;;;;;;;;;;AAsB9F,SAAgB,wBAAwB,EAAE,WAAW,YAA0C;CAC3F,MAAM,eAAe,eAAe,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC;CAE/D,OACI,oBAAC,uBAAuB,UAAxB;EAAiC,OAAO;EACnC;CAC4B,CAAA;AAEzC;;;;;;;AAQA,SAAgB,qBAAyC;CAErD,OADgB,WAAW,sBACpB,GAAS,aAAa;AACjC;;;;;;;;;ACtCA,SAAgB,gBAAgB,KAAa,QAAgB;CAEzD,MAAM,kBAAkB,mBAAmB;CAE3C,gBAAgB;EACZ,IAAI,OAAO,aAAa,aAAa;EAErC,MAAM,kBAAsC,mBAAmB,SAAS;EAKxE,IAAI,CAFmB,gBAAgC,gBAAgB,IAAI,KAAK,GAE5D;GAChB,MAAM,QAAQ,SAAS,cAAc,OAAO;GAC5C,MAAM,KAAK;GACX,MAAM,YAAY;GAClB,CAAC,mBAAmB,SAAS,MAAM,YAAY,KAAK;EACxD;CACJ,GAAG,CAAC,CAAC;AAET;;;;;;ACvBA,SAAgB,kBAAkB,KAAoC,gBAA4B,SAAS,MAAY;CACnH,gBAAgB;EACZ,IAAI,CAAC,QACD;;;;EAKJ,SAAS,mBAAmB,OAAc;GACtC,IAAI,sBAAsB,MAAM,MAAc,GAC1C;GAGJ,IAAI,IAAI,WAAW,CAAC,IAAI,QAAQ,SAAS,MAAM,MAAc,GACzD,eAAe;EAEvB;EAGA,SAAS,iBAAiB,aAAa,kBAAkB;EACzD,aAAa;GAET,SAAS,oBAAoB,aAAa,kBAAkB;EAChE;CACJ,GAAG;EAAC;EAAK;EAAQ;CAAc,CAAC;AACpC;;;;;AAMA,SAAS,sBAAsB,MAA4B;CACvD,IAAI,gBAAgB,aAAa;EAC7B,IAAI,KAAK,aAAa,MAAM,MAAM,gBAC9B,OAAO;EACX,OAAO,sBAAsB,KAAK,UAAU;CAChD;CACA,OAAO;AACX;;;AC3CA,SAAgB,qBAAwB,OAAU,UAAsB,WAAoB,YAAY,KAAK;CAEzG,MAAM,gBAAgB,MAAM,OAAO,KAAK;CAExC,MAAM,cAAc,MAAM,OAAO,QAAQ;CACzC,MAAM,gBAAgB;EAClB,YAAY,UAAU;CAC1B,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,gBAAgB,MAAM,kBAAkB;EAC1C,YAAY,QAAQ;EACpB,cAAc,UAAU;CAC5B,GAAG,CAAC,CAAC;CAEL,MAAM,aAAa,MAAM,OAAkD,KAAA,CAAS;CAEpF,MAAM,gBACI;EACF,IAAI,WAAW;GACX,aAAa,WAAW,OAAO;GAC/B,IAAI,cAAc,SACd,cAAc;GAElB;EACJ;EAEA,cAAc,UAAU;EACxB,aAAa,WAAW,OAAO;EAC/B,WAAW,UAAU,WAAW,eAAe,SAAS;EACxD,aAAa;GACT,IAAI,WACA,cAAc;EACtB;CACJ,GACA;EAAC;EAAW;EAAO;EAAe;CAAS,CAC/C;AACJ;;;ACnCA,SAAgB,oBACZ,UACA,OACC;CACD,MAAM,aAAa,OAAsB,IAAI;CAY7C,OAV0B,aAAa,GAAG,SAAwB;EAC9D,IAAI,WAAW,YAAY,MACvB,aAAa,WAAW,OAAO;EAGnC,WAAW,UAAU,OAAO,iBAAiB;GACzC,WAAW,GAAG,IAAI;EACtB,GAAG,SAAS,GAAG;CACnB,GAAG,CAAC,UAAU,KAAK,CAEZ;AACX;;;AChBA,SAAgB,iBAAoB,OAAU,QAAQ,KAAQ;CAE1D,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAC1D,gBACU;EACF,MAAM,UAAU,iBAAiB;GAC7B,kBAAkB,KAAK;EAC3B,GAAG,KAAK;EACR,aAAa;GACT,aAAa,OAAO;EACxB;CACJ,GACA,CAAC,OAAO,KAAK,CACjB;CACA,OAAO;AACX;;;ACLA,IAAa,WAAW,MAAM,MAAM,EACP,UACA,WACA,IAAI,SAAS,OACb,WAAW,UACM;CAE1C,gBAAgB,YAAY,YAAY;mBACzB,SAAS;;;mBAGT,SAAS;yBACH,SAAS;;mBAEf,SAAS;uBACL,SAAS;;;;;;;;;;;;;;;;;;;;CAoB/B;CAEG,OACI,oBAAC,YAAY,MAAb;EACI,MAAM;EACK;YAEX,oBAAC,YAAY,SAAb;GACI,WAAW,IAAI,mBAAmB,UAAU;GAE3C;EACgB,CAAA;CACP,CAAA;AAE1B,CAAC;AAED,SAAS,cAAc;;;AClDvB,IAAa,mBAAmB,EAAE,UAE5B;CAEF,MAAM,CAAC,kBAAkB,uBAAuB,MAAM,SAAS,KAAK;CACpE,MAAM,CAAC,cAAc,mBAAmB,MAAM,SAAS,KAAK;CAG5D,MAAM,gBAAgB;EAClB,IAAI,IAAI,SAAS;GACb,IAAI,QAAQ,gBAAgB;IACxB,oBAAoB,IAAI;IACxB,gBAAgB,IAAI;GACxB;GACA,IAAI,QAAQ,eAAe;IACvB,gBAAgB,KAAK;GACzB;EACJ;CACJ,GAAG,CAAC,GAAG,CAAC;CAER,OAAO;EACH;EACA;EACA;CACJ;AACJ;AAEA,SAAgB,aAAa,EACI,UACA,MACA,SACA,aACkB;CAE/C,MAAM,kBAAkB,MAAM,OAAuB,IAAI;CACzD,kBAAkB,uBAAuB,QAAQ,KAAK,CAAC;CAEvD,OAAO,oBAAC,UAAD;EACH,IAAI;EACJ,UAAU;EACV,WAAW,IACP,qDACA,OAAO,eAAe,IACtB,QACA,QACA,QAAQ;YACZ,oBAAC,OAAD;GAAK,KAAK;GACL,WAAW,IACP,OAAO,aAAa,IACpB,qCACA,SACJ;GACA;EACA,CAAA;CACC,CAAA;AAEd;AAQA,IAAa,mBAAmB,MAAM,KAAK,SAAS,iBAAiB,EAChC,UACA,SACA,aACsB;CAEvD,OACI,oBAAC,OAAD;EACI,WAAW,IAAI,iHAAiH,SAAS;EAChI;EACR;CACA,CAAA;AAEb,CAAC;;;AC9ED,IAAM,kBAAkB,SAAuC;CAC3D,QAAQ,MAAR;EACI,KAAK,SACD,OAAO;EACX,KAAK,SACD,OAAO;EAEX,SACI,OAAO;CACf;AACJ;AACA,IAAM,mBAAmB,aAAqB;CAC1C,QAAQ,UAAR;EACI,KAAK,SACD,OAAO;EACX,KAAK,WACD,OAAO;EACX,KAAK,QACD,OAAO;EACX,KAAK,WACD,OAAO;EAEX,SACI,OAAO;CACf;AACJ;AAEA,IAAa,SAA+B,EACI,UACA,WACA,QAAQ,QACR,OAAO,UACP,QACA,gBACA,WACA,YACE;CAC9C,MAAM,UAAU,gBAAgB,KAAK;CAErC,OACI,qBAAC,OAAD;EACW;EACP,WAAW,IACP,eAAe,IAAI,GACnB,UACA,eACA,sCACA,SACA,cAAc;YARtB;GASI,oBAAC,OAAD;IAAK,WAAW,IAAI,QAAQ,SAAS;IAAI;GAAc,CAAA;GACtD,aACG,oBAAC,UAAD;IACI,WAAU;IACV,SAAS;cAAW;GAEhB,CAAA;GAEX;EACA;;AAEb;;;AC5DA,IAAM,eACF,EACI,KACA,KACA,UACA,WACA,OACA,gBACA,QAAQ,MACR,GAAG,SAEP,QACC;CACD,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CAEtD,MAAM,yBAAyB;EAC3B,gBAAgB,IAAI;CACxB;CAEA,OACI,oBAAC,UAAD;EACS;EACE;EACP,GAAI;EACJ,WAAW,IACP,iEACA,mCACA,SAAS,gEACT,cACJ;YAEC,OAAO,CAAC,eACL,oBAAC,OAAD;GACI,WAAW,IACP,oDACA,2CACA,SACJ;GACK;GACA;GACL,SAAS;EACZ,CAAA,IAED,oBAAC,QAAD;GACI,WAAW,IACP,oDACA,oCACA,iGACA,SACJ;GAET;EACG,CAAA;CAEE,CAAA;AAEhB;AAEA,IAAa,SAAS,MAAM,WAAW,WAAW;;;ACvDlD,IAAa,gBAAgB,MAAM,WAAW,SAAS,cAAc,EACI,OACA,oBACA,WACA,eACA,WAAW,OACX,OAAO,UACP,GAAG,SACgB,KAAmC;CACvH,OAAO,qBAAC,UAAD;EACH,MAAK;EACL,MAAK;EACL,gBAAc,uBAAuB,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,CAAC,CAAC;EAC1F,iBAAe,YAAY,KAAA;EACtB;EACL,UAAU,WAAW,KAAK,KAAA;EAC1B,SAAS,YACF,MAAM,EAAE,eAAe,KACvB,MAAM;GACL,EAAE,eAAe;GACjB,IAAI,oBACA,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAW,gBAAgB,IAAI;QAC1D,IAAI,OAAO,gBAAgB,KAAK;QAChC,gBAAgB,IAAI;QAEzB,gBAAgB,CAAC,KAAK;EAE9B;EACJ,WAAW,IACP,SAAS,aAAa,gDAAgD,SAAS,UAAU,gDAAgD,+CACzI,+DACA,QAAS,WACH,uLACA,yDAA0D,6HAChE,SACJ;EACA,GAAI;YA3BD,CA6BF,uBAAuB,UAAU,QAAQ,UAAU,KAAA,MAAc,oBAAC,OAAD,EAE9D,WAAW,IACP,sGACA,WAAW,qDAAqD,oDAChE;GACI,qBAAqB,SAAS,YAAY,SAAS;GACnD,oBAAoB,SAAS;GAC7B,oBAAoB,SAAS;GAC7B,sBAAsB,SAAS,YAAY,SAAS;GACpD,qBAAqB,SAAS;GAC9B,qBAAqB,SAAS;EAClC,CACJ,EACH,GAbQ,MAaR,GAEA,EAAE,uBAAuB,UAAU,QAAQ,UAAU,KAAA,OAAe,oBAAC,OAAD,EAEjE,WAAW,IACP,sGACA,WAAW,8CAA+C,QAAQ,oBAAoB,oDACtF;GACI,qBAAqB,SAAS,YAAY,SAAS;GACnD,qBAAqB,SAAS;GAC9B,qBAAqB,SAAS;IAC7B,QAAQ,uBAAuB,sBAAsB,SAAS,YAAY,SAAS;IACnF,QAAQ,uBAAuB,sBAAsB,SAAS;IAC9D,QAAQ,uBAAuB,sBAAsB,SAAS;EACnE,CACJ,EACH,GAbQ,MAaR,CACG;;AACZ,CACJ;;;;;;;AC9DA,IAAa,yBAAyB,SAAS,uBAAuB,EACI,OACA,WAAW,OACX,OAAO,UACP,WACA,eACA,OACA,OACA,WACA,UACA,WACA,YAAY,MACZ,gBACA,GAAG,SACyB;CAElG,MAAM,MAAM,MAAM,OAA8B,IAAI;CACpD,MAAM,WAAW,MAAM,OAAiC,IAAI;CAC5D,MAAM,gBAAgB,MAAM,MAAM;CAClC,MAAM,CAAC,GAAG,cAAc,MAAM,SAAS,SAAS;CAChD,MAAM,gBAAgB,WAAW,IAAI;CACrC,MAAM,eAAe,WAAW,KAAK;CAErC,MAAM,gBAAgB;EAClB,IAAI,WAAW,CAEf;CACJ,GAAG,CAAC,CAAC;CAEL,MAAM,QAAQ,SAAS,kBAAkB,UAAU,WAAW,SAAS,kBAAkB,KAAK;CAE9F,OACI,qBAAC,OAAD;EACS;EACI;EACD;EACR,MAAK;EACL,gBAAc,MAAM,uBAAuB,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,CAAC,CAAC;EAChG,iBAAe,YAAY,KAAA;EAC3B,mBAAiB,QAAQ,gBAAgB,KAAA;EACzC,UAAU;EACV,WAAW,IACP,CAAC,aAAA,6CACD,CAAC,cAAc,WAAA,8CAAA,0DACf,WAAW,mBAAmB,kBAC9B,sFACA,CAAC,aAAa,SAAS,CAAC,WAAW,iBAAiB,IACpD,QAAQ,mCAAoC,SAAS,CAAC,WAAW,iBAAkB,CAAC,WAAW,kDAAkD,qDACjJ;GACI,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;EAC7B,GACA,SAAS,WAAW,SAAS,aAAa,SAAS,QACnD,SAAS,WAAW,SAAS,aAAa,SAAS,QACnD,aAAa,QAAQ,qBAAqB,YAC1C,YAAY,WAAW,IACvB,SACJ;EACA,SAAS,WAAW,KAAA,KAAa,MAAM;GACnC,IAAI,MAAM,oBAAoB;IAC1B,MAAM,WAAW;IACjB,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAW,WAAW,IAAI;SACrD,IAAI,OAAO,WAAW,KAAK;SAC3B,WAAW,IAAI;GACxB,OACI,gBAAgB,CAAC,KAAK;EAG9B;YAtCJ,CAyCI,oBAAC,eAAD;GACW;GACP,KAAK;GACC;GACN,WAAW,IAAI,aAAa,QAAQ,iBAAiB,IAAI,cAAc;GAC7D;GACV,GAAI;EACP,CAAA,GAED,oBAAC,OAAD;GAAK,IAAI;GAAe,WAAW,IAC/B,QACA,aAAa,QAAQ,SAAS,QAC9B,SAAS,WAAW,SAAS,aAAa,YAAY,WAC1D;aACK;EACA,CAAA,CAEJ;;AAGb;;;ACtGA,IAAM,cAAc,MAAM,KAAK,MAAM,YAGlC,EACI,UACA,WACA,UAAU,UACV,WAAW,OACX,OAAO,UACP,YAAY,MACZ,YAAY,OACZ,WAAW,WACX,QAAQ,WACR,GAAG,SAC4B,QAAQ;CAE1C,MAAM,cACF;CAEJ,MAAM,gBAAgB,IAAI;EACtB,UAAU;EACV,SAAS,CAAC;EAGV,wGAAwG,YAAY,YAAY,UAAU,aAAa,CAAC;EACxJ,8GAA8G,YAAY,YAAY,UAAU,eAAe,CAAC;EAChK,oGAAoG,YAAY,YAAY,UAAU,WAAW,CAAC;EAClJ,uTAAuT,YAAY,YAAY,UAAU,UAAU,CAAC;EACpW,iQAAiQ,YAAY,YAAY,UAAU,aAAa,CAAC;EAGjT,6KAA6K,YAAY,UAAU,UAAU,aAAa,CAAC;EAC3N,iLAAiL,YAAY,UAAU,UAAU,eAAe,CAAC;EACjO,sHAAsH,YAAY,UAAU,UAAU,WAAW,CAAC;EAClK,qPAAqP,YAAY,UAAU,UAAU,UAAU,CAAC;EAChS,qPAAqP,YAAY,UAAU,UAAU,aAAa,CAAC;EAGnS,iGAAiG,YAAY,cAAc,UAAU,aAAa,CAAC;EACnJ,qFAAqF,YAAY,cAAc,UAAU,eAAe,CAAC;EACzI,2FAA2F,YAAY,cAAc,UAAU,WAAW,CAAC;EAC3I,yPAAyP,YAAY,cAAc,UAAU,UAAU,CAAC;EACxS,mNAAmN,YAAY,cAAc,UAAU,aAAa,CAAC;EAGrQ,mDAAmD;EACnD,wCAAwC,YAAY,UAAU;EAC9D,wCAAwC,YAAY,cAAc;EAClE,oHAAoH,YAAY,YAAY;CAChJ,CAAC;CAED,MAAM,cAAc,IAChB;EACI,aAAa,SAAS;EACtB,aAAa,SAAS;EACtB,eAAe,SAAS;EACxB,aAAa,SAAS;EACtB,cAAc,SAAS;CAC3B,CACJ;CAEA,MAAM,kBAAkB,UAAU,aAAa,UAAU,WAAW,CAAC,WAC/D,yEACA;CAEN,IAAI,WACA,OACI,qBAAC,WAAD;EACS;EACL,SAAS,MAAM;EACf,WAAW,IAAI,YAAY,SAAS,IAAI,aAAa,eAAe,aAAa,gBAAgB,SAAS;EAC1G,GAAI;YAJR,CAKK,WACA,QACM;;CAInB,OACI,qBAAC,UAAD;EAAa;EACL,MAAM,MAAM,QAAQ;EACpB,SAAS,MAAM;EACf,WAAW,IAAI,YAAY,SAAS,IAAI,aAAa,eAAe,aAAa,gBAAgB,SAAS;EAChG;EACV,gBAAc;EACd,aAAW;EACX,GAAI;YAPZ,CAQK,WACA,QACG;;AAGhB,CAAC,CAAC;AAEF,YAAY,cAAc;AAE1B,IAAa,SAAS;;;ACrGtB,IAAM,OAAO,MAAM,YAAuC,EACtD,UACA,WACA,SACA,OACA,GAAG,SACJ,QAAQ;CAOP,OACI,oBAAC,OAAD;EACS;EACO,YATD,aAAa,MAA2C;GACvE,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAC/B,UAAU;EAElB,GAAG,CAAC,OAAO,CAKS;EACZ,MAAM,UAAU,WAAW,KAAA;EAC3B,UAAU,UAAU,IAAI,KAAA;EACf;EACT,WAAW,IAAI,WAAW,WAAA,4FAA+B,SAAS;EAC3D;EACP,GAAI;EACH;CACA,CAAA;AAEb,CAAC;AAED,KAAK,cAAc;;;AC7BnB,IAAM,qBAAqB;CACvB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;AACX;AAEA,IAAM,kBACF,EACI,UACA,WACA,OACA,WAAW,SAEf,QACC;CAID,OACI,oBAAC,OAAD;EACS;EACL,WAAW,IAAI,gCALE,WAAW,mBAAmB,YAAY,IAOvD,SAAS;EACN;EACN;CACA,CAAA;AAEb;AAEA,IAAa,YAAY,MAAM,WAAW,cAAc;;;ACpCxD,IAAa,eAAe,MAAM,YAA+C,EACI,UACA,UACA,gBACA,WACA,YACA,GAAG,QACJ,QAAQ;CAExF,OACI,oBAAC,OAAD;EAAU;EACL,WAAW,IAAI,sBAAsB,aAAa,aAAa,UAAU,cAAc;EACvF,GAAI;YACL,oBAAC,WAAD;GAAW,WAAW,IAAI,UAAU,SAAS;GAAa;GACrD;EACM,CAAA;CACV,CAAA;AAGb,CAAC;AAED,aAAa,cAAc;;;AC1B3B,SAAgB,iBAAiB,EACI,OAAO,UACP,aACsB;CAEvD,IAAI,cAAc;CAClB,IAAI,SAAS,YACT,cAAc;MACX,IAAI,SAAS,SAChB,cAAc;MACX,IAAI,SAAS,UAChB,cAAc;MAEd,cAAc;CAGlB,IAAI,gBAAgB;CACpB,IAAI,SAAS,YACT,gBAAgB;MACb,IAAI,SAAS,SAChB,gBAAgB;MACb,IAAI,SAAS,UAChB,gBAAgB;MAEhB,gBAAgB;CAGpB,OACI,oBAAC,OAAD;EACI,WAAW,IACP,aACA,eACA,8JACA,kCACA,SAAS;EACb,MAAK;YACH,oBAAC,QAAD;GACI,WAAU;aACb;EAEK,CAAA;CACP,CAAA;AAEb;;;AChCA,IAAM,qBAAqB;CACvB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,WAAW;CACX,WAAW;CACX,OAAO;CACP,OAAO;CACP,OAAO;CACP,SAAS;CACT,SAAS;CACT,QAAQ;AACZ;AAEA,IAAM,iBAAiB;CACnB,SAAS;CACT,SAAS;CACT,SAAS;CACT,WAAW;CACX,UAAU;CACV,OAAO;AACX;AAEA,IAAM,sBAAsB;CACxB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,WAAW;CACX,WAAW;CACX,OAAO;CACP,OAAO;CACP,SAAS;CACT,SAAS;CACT,QAAQ;CACR,OAAO;AACX;AAEA,IAAM,mBAAmB;CACrB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,WAAW;CACX,WAAW;CACX,OAAO;CACP,OAAO;CACP,OAAO;CACP,SAAS;CACT,SAAS;CACT,QAAQ;AACZ;AAEA,SAAgB,WACZ,EACI,QAAQ,WACR,QAAQ,WACR,UACA,WACA,WACA,eAAe,OACf,SAAS,OACT,YAAY,OACZ,UAAU,SACV,iBAAiB,oBACjB,OACA,SACA,GAAG,SAET;CAgBE,OACI,oBAfA,cACC,YAAY,MAAM,eAAe,YAAY,mBAAmB,aACjE,QAaA;EAAW,WAXC,IACZ,iBAAiB,UACjB,QAAQ,eAAe,SAAS,IAChC,UAAU,aAAa,QAAQ,SAC/B,gBAAgB,oBAAoB,UACpC,UAAU,YACV,aAAa,QACb,SAIsB;EACF;EACF;EACP,GAAI;EACV;CACM,CAAA;AAEnB;;;;;;;;;;AC5GA,SAAgB,uBAAuB,EAAE,MAAM,GAAG,SAE/C;CACC,OACI,oBAAC,OAAD;EACI,WAAU;YACV,qBAAC,OAAD;GAAK,WAAU;aAAf,CACI,oBAAC,kBAAD,EAAkB,GAAI,MAAO,CAAA,GAC5B,QAAQ,oBAAC,YAAD;IACL,OAAO;IACP,SAAS;IACT,WAAU;cAAe;GAAiB,CAAA,CAC7C;;CACJ,CAAA;AAEb;;;;;;;ACjBA,IAAa,WAAW;CACpB,UAAU;CACV,OAAO;CACP,QAAQ;CACR,OAAO;AACX;AAUA,IAAa,sBAAiD;CAC1D,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,WAAW;CACX,UAAU;CACV,OAAO;AACX;;;;;;;ACnBA,SAAS,kBAAkB,OAA8B;CACrD,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,MAAM,MAAM,SAAS,YAAY,KAAK;CAC5C,MAAM,OAAQ,MAA4B,MAAM,YAAY,KAAK;CACjE,OAAO,IAAI,SAAS,YAAY,KACzB,IAAI,SAAS,cAAc,KAC3B,IAAI,SAAS,cAAc,KAC3B,IAAI,SAAS,WAAW,KACxB,IAAI,SAAS,eAAe,KAC5B,SAAS,uBACT,SAAS,8BACR,MAA8B,WAAW;AACrD;AAsBA,IAAa,gBAAb,cAAmC,MAAM,UAAqE;CAC1G,YAAY,OAA8C;EACtD,MAAM,KAAK;EACX,KAAK,QAAQ;GAAE,OAAO;GAC9B,aAAa;EAAM;CACf;CAEA,OAAO,yBAAyB,OAAc;EAC1C,OAAO,EAAE,MAAM;CACnB;CAEA,kBAAkB,OAAc,YAAuB;EACnD,QAAQ,MAAM,KAAK;CACvB;CAEA,oBAA4B;EACxB,KAAK,SAAS;GAAE,OAAO;GAC/B,aAAa;EAAM,CAAC;EACZ,KAAK,MAAM,UAAU;CACzB;CAEA,qBAA6B;EACzB,OAAO,SAAS,OAAO;CAC3B;CAEA,sBAA8B;EAC1B,KAAK,UAAS,UAAS,EAAE,aAAa,CAAC,KAAK,YAAY,EAAE;CAC9D;CAEA,SAAS;EACL,IAAI,KAAK,MAAM,OAAO;GAClB,IAAI,KAAK,MAAM,UACX,OAAO,KAAK,eAAe;GAE/B,OAAO,KAAK,aAAa;EAC7B;EAEA,OAAO,KAAK,MAAM;CACtB;CAEA,eAAuB;EACnB,OACI,qBAAC,OAAD;GAAK,WAAU;aAAf,CACI,qBAAC,OAAD;IAAK,WAAU;cAAf,CACI,oBAAC,mBAAD;KAAiB,WAAW;KAAgB,MAAM,SAAS;IAAO,CAAA,GAClE,oBAAC,OAAD;KAAK,WAAU;eAAO;IAAU,CAAA,CAC/B;OACL,oBAAC,YAAD;IAAY,SAAS;cAChB,KAAK,MAAM,OAAO,WAAW;GACtB,CAAA,CACX;;CAEb;CAEA,iBAAyB;EACrB,MAAM,EAAE,OAAO,gBAAgB,KAAK;EACpC,MAAM,eAAe,kBAAkB,KAAK;EAE5C,MAAM,OAAO,eAAe,kBAAkB;EAC9C,MAAM,QAAQ,eACR,kBACA;EACN,MAAM,cAAc,eACd,4HACA;EAEN,OACI,oBAAC,OAAD;GAAK,WAAW,IACZ,gEACA,mCACJ;aACI,qBAAC,OAAD;IAAK,WAAU;cAAf;KACI,oBAAC,OAAD;MAAK,WAAW,IACZ,+DACA,eACM,sCACA,+BACV;gBACI,oBAAC,MAAD;OACI,MAAM;OACN,WAAW,eACL,uCACA;MACT,CAAA;KACA,CAAA;KAEL,oBAAC,YAAD;MAAY,SAAS;MACT,WAAU;gBACjB;KACO,CAAA;KAEZ,oBAAC,YAAD;MAAY,SAAS;MACT,WAAU;gBACjB;KACO,CAAA;KAEZ,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACI,qBAAC,QAAD;OACI,SAAQ;OACR,OAAM;OACN,MAAK;OACL,SAAS,KAAK;iBAJlB,CAMI,oBAAC,iBAAD,EAAe,MAAM,GAAI,CAAA,GAAC,WAEtB;UACR,qBAAC,QAAD;OACI,SAAQ;OACR,OAAM;OACN,MAAK;OACL,SAAS,KAAK;iBAJlB,CAMI,oBAAC,iBAAD,EAAe,MAAM,GAAI,CAAA,GAAC,aAEtB;QACP;;KAEJ,OAAO,WACJ,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACI,qBAAC,UAAD;OACI,SAAS,KAAK;OACd,WAAW,IACP,2CACA,mDACA,iEACA,iEACJ;iBAPJ,CAQC,qBAEI,cACK,oBAAC,iBAAD,EAAe,MAAM,GAAI,CAAA,IACzB,oBAAC,mBAAD,EAAiB,MAAM,GAAI,CAAA,CAC7B;UACP,eACG,oBAAC,OAAD;OAAK,WAAW,IACZ,yCACA,sCACA,qDACA,qBACJ;iBACK,MAAM;MACN,CAAA,CAER;;IAER;;EACJ,CAAA;CAEb;AACJ;;;ACjLA,IAAM,gBAAc;CAChB,OAAO;CACP,QAAQ;CACR,OAAO;CACP,UAAU;AACd;AAEA,IAAM,mBAAmB;CACrB,QAAQ;CACR,OAAO;CACP,OAAO;CACP,UAAU;AACd;AACA,IAAM,iBAAiB;CACnB,QAAQ;CACR,OAAO;CACP,OAAO;CACP,UAAU;AACd;AAEA,IAAM,iBAAe;CACjB,SAAS;CACT,WAAW;AACf;AAEA,IAAa,WAAW,MAAM,MAAM,EACP,IACA,SACA,gBAAgB,OAChB,UAAU,MACV,UACA,OAAO,UACP,iBACA,QAAQ,WACR,cAAc,gBACG;CAE1C,MAAM,YAAY,gBAAgB,QAAQ;CAE1C,MAAM,WAAW,SAAS,WACpB,KACA,SAAS,UACL,KACA,SAAS,aACL,KACA;CACd,OACI,oBAAC,kBAAkB,MAAnB;EACQ;EACJ,SAAS,iBAAiB;EAChB;EACV,cAAY;EACZ,gBAAc,gBAAgB,UAAU;EACxC,iBAAiB,WAAW,KAAA,IAAY;YAExC,oBAAC,OAAD;GAAK,WAAW,IACZ,UAAU,eAAe,QAAQ,IACjC,iBAAiB,OACjB,6HACA,kBAAkB,8LAA8L,IAChN,kBAAkB,mBAAmB,gBACzC;aACI,oBAAC,OAAD;IACI,WAAW,IACP,gEACA,cAAY,OACZ,WACO,iBAAiB,YAAY,qDAAqD,qDAClF,iBAAiB,YAAY,eAAa,SAAS,gCACzD,iBAAiB,YAAa,yDAAyD,IACxF,WACM,uBACC,iBAAiB,YAAY,uBAAuB,0DAC/D;cACA,oBAAC,kBAAkB,WAAnB;KAA6B,SAAA;eACxB,gBAEO,oBAAC,aAAD;MAAW,MAAM;MAAU,WAAW;KAAY,CAAA,IAGlD,oBAAC,aAAD;MAAW,MAAM;MAAU,WAAW;KAAY,CAAA;IAEjC,CAAA;GAC5B,CAAA;EACJ,CAAA;CACe,CAAA;AAEhC,CAAC;AAED,SAAS,cAAc;;;AClFvB,IAAM,iBAAiB;CACnB,UAAU;CACV,OAAO;CACP,QAAQ;CACR,OAAO;AACX;;;;;AAMA,SAAS,aAAsB;CAC3B,OAAO,OAAO,aAAa,eACvB,SAAS,gBAAgB,UAAU,SAAS,MAAM;AAC1D;;;;AAKA,SAAS,QAAQ,KAAa,OAAuB;CACjD,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,GAAG,GAAG,OAAO;CACzC,IAAI,QAAQ,IAAI,MAAM,CAAC;CACvB,IAAI,MAAM,WAAW,GACjB,QAAQ,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM;CAKzE,OAAO,QAHG,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG,EAGvB,EAAE,IAFP,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG,EAEjB,EAAE,IADb,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG,EACX,EAAE,IAAI,MAAM;AAC3C;;;;AAKA,SAAgB,KAAK,EACI,UACA,aACA,OACA,UACA,SACA,MACA,OAAO,UACP,WACA,SACU;CAE/B,MAAM,kBAAkB,OAAO,gBAAgB,WAAW,qBAAqB,WAAW,IAAI;CAC9F,MAAM,OAAO,WAAW;CAExB,MAAM,YAAY,SAAS;CAE3B,IAAI,YAAY;CAChB,IAAI,UAAU;CACd,IAAI,SAAS;CAEb,IAAI,OACA,YAAY,OAAO,YAAY;MAC5B,IAAI,iBACP,YAAY,QAAQ,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB;CAG9F,IAAI;MACI,UAAU;GACV,UAAU,QAAQ,WAAW,OAAO,KAAM,GAAI;GAC9C,SAAS,aAAa,QAAQ,WAAW,OAAO,KAAM,GAAI;EAC9D,OAAO,IAAI,OAAO;GACd,UAAU,OAAO,4BAA4B;GAC7C,SAAS,aAAa,OAAO,2BAA2B;EAC5D,OAAO,IAAI,iBACP,UAAU,QAAQ,gBAAgB,YAAY,gBAAgB,YAAY,gBAAgB;CAAA;CAIlG,OACI,qBAAC,OAAD;EACI,WAAW,IAAI,mEACX,iBACA,gBACA,kCACA,CAAC,aAAa,0IACd,CAAC,aAAa,YAAY,sCAC1B,UAAU,8DAA8D,IACxE,eAAe,OACf,SAAS;EACJ;EACT,OAAO;GACH,GAAI,YAAY;IACZ,iBAAiB;IACjB,OAAO;IACP,QAAQ,UAAU,KAAA;GACtB,IAAI,CAAC;GACL,UAAU;GACV,GAAG;EACP;YAnBJ,CAqBK,MACA,QACA;;AAEb;;;ACnGA,IAAa,WAAW,EACI,MACA,aACA,OAAO,UACP,gBAAgB,KAChB,YACA,OACA,cACA,OACA,kBACA,cACA,UACA,UAAU,OACV,WACA,WACA,YACgB;CAExC,gBAAgB,WAAW,QAAM;CAGjC,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,aAAa,oBAAoB,KAAA;CAEzD,IAAI,CAAC,OACD,OAAO,oBAAA,UAAA,EAAG,SAAW,CAAA;CAEzB,MAAM,UAAU,UACV,oBAAC,iBAAiB,SAAlB;EAA0B,SAAS;EAChC;CACqB,CAAA,IACxB,oBAAC,iBAAiB,SAAlB;EAA0B,SAAS;YACjC,oBAAC,OAAD;GAAY;GAAkB;GACzB;EACA,CAAA;CACiB,CAAA;CAE9B,OACI,oBAAC,iBAAiB,UAAlB;EAA0C;YACtC,qBAAC,iBAAiB,MAAlB;GAAuB,GAAK,SAAS,KAAA,IAAY;IAAE;IAC/D;GAAa,IAAI,CAAC;GAAiB;aADvB,CAEK,SACD,oBAAC,iBAAiB,QAAlB;IAAyB,WAAW;cAChC,oBAAC,iBAAiB,SAAlB;KACI,WAAW,IAAI,kBACX,4BACA,0QACA,gBAAgB;KACpB,OAAO;KACP,YAAY,eAAe,KAAA,IAAY,IAAI;KACpC;KACD;eACL;IACqB,CAAA;GACL,CAAA,CACN;;CACA,CAAA;AAEnC;AAEA,IAAM,WAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDf,IAAM,cAAc;CAAC;CAAQ;CAAU;CAAU;CAAU;CAAW;CAAQ;CAAQ;CAAO;CAAU;CAAU;CAAS;CAAW;CAAQ;CAAQ;AAAM;AAG3J,SAAS,oBAAoB,UAAgC;CACzD,OAAO,GAAG,SAAS,OAAO,CAAC,EAAE,YAAY,IAAI,SAAS,MAAM,CAAC;AACjE;;;;;;;AAQA,SAAgB,YAAY,EACxB,OACA,UACA,OAAO,UACP,aAAa,MACb,WAAW,SACM;CAEjB,MAAM,aAAa,SAAS,UAAU,YAAY;CAClD,MAAM,YAAY,SAAS,UAAU,KAAK;CAE1C,OACI,qBAAC,OAAD;EAAK,WAAU;YAAf,CACK,cACG,qBAAC,UAAD;GACI,MAAK;GACK;GACV,eAAe,SAAS,KAAA,CAAS;GACjC,WAAW,IACP,uEACA,gEACA,YAAY,iCACZ,CAAC,SAAS,8DACd;aATJ,CAWI,oBAAC,OAAD;IAAK,WAAW,IACZ,YACA,gGACA,kCACJ;cACK,CAAC,SAAS,oBAAC,aAAD,EAAW,MAAM,UAAW,CAAA;GACtC,CAAA,GACL,oBAAC,QAAD;IAAM,WAAU;cAAuD;GAEjE,CAAA,CACF;MAGZ,oBAAC,OAAD;GAAK,WAAU;aACV,YAAY,KAAK,SAAS;IACvB,MAAM,WAAW;IACjB,MAAM,cAAc,YAAY;IAChC,MAAM,aAAa,UAAU;IAC7B,MAAM,cAAc,oBAAoB,QAAQ;IAEhD,OACI,oBAAC,SAAD;KAEI,OAAO;KACP,eAAe;eAEf,oBAAC,UAAD;MACI,MAAK;MACK;MACV,eAAe,SAAS,QAAQ;MAChC,WAAW,IACP,YACA,gEACA,mCACA,0EACA,YAAY,iDACZ,cAAc,mCAClB;MACA,OAAO,EACH,iBAAiB,YAAY,MACjC;MACA,cAAY;MACZ,gBAAc;gBAEb,cACG,oBAAC,aAAD;OACI,MAAM;OACN,OAAO,EAAE,OAAO,YAAY,KAAK;MACpC,CAAA;KAED,CAAA;IACH,GA7BA,QA6BA;GAEjB,CAAC;EACA,CAAA,CACJ;;AAEb;;;AC7GA,IAAM,gBAAgB;AACtB,IAAM,cAAc;AACpB,IAAM,iBAAe;AACrB,IAAM,gBAAc;CAChB,QAAQ;CACR,OAAO;CACP,UAAU;CACV,OAAO;AACX;AACA,IAAM,eAAe;CACjB,UAAU;CACV,QAAQ;AACZ;AAEA,IAAM,mBAA2D,EACI,UACA,WACA,OAAO,UACP,UAAU,SACV,QAAQ,YACR,UACA,SACA,WACA,GAAG,SACgB,QAA+C;CAEnI,MAAM,YAAY,YAAY,UAAU,mBAAmB;CAC3D,MAAM,YAAoC,aAAa;CACvD,MAAM,iBAAiB,cAAc;CACrC,OACI,oBAAC,WAAD;EACI,MAAM,iBAAiB,WAAW,KAAA;EAClC,MAAM,iBAAiB,KAAA,IAAY;EAC9B;EACL,iBAAe,YAAY,KAAA;EAC3B,UAAU,WAAW,KAAK,KAAA;EAC1B,GAAI;EACJ,WAAW,IACP,WAAW,mCAAmC,kBAC9C,UAAU,sCAAsC,IAChD,kCACA,gBACA,WACA,aACA,eACA,aAAa,QACb,cAAY,OACZ,SACJ;EACC;CACM,CAAA;AAEnB;AAEA,IAAa,aAAa,MAAM,WAAW,eAA0F;;;AC5DrI,IAAM,iBAAiB;CACnB,MAAM;CACN,QAAQ;CACR,UAAU;AACd;AAEA,IAAa,aAAa,QAAM,WAA8C,SAAS,WAAW,SAAS,KAAK;CAC5G,MAAM,EACF,QACA,WACA,GAAG,UACH;CAQJ,OACI,oBAAC,SAAD;EACI,WAAW,IAAI,wDACX,oBATc,IAAI,eAAe,MACzC;IACK,eAAe,SAAS;IACxB,eAAe,WAAW,CAAC;EAChC,GAAG,SAKyB,CAAiB;EACzC,eAAa;EACR;EACL,GAAI;CACP,CAAA;AAET,CAAC;;;ACHD,IAAa,iBAA+C,EACxD,OACA,OACA,UACA,UACA,WACA,OAAO,QACP,OACA,OAAO,SACP,WACA,OACA,gBACA,WACA,eACE;CACF,MAAM,WAAW,OAAyB,IAAI;CAC9C,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,eAAe,oBAAoB,SAAiB,EAAE;CAC7D,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,eAAe,UAAU,KAAA,KAAa,UAAU,SAAS,EAAE,iBAAiB,SAAS,MAAM,MAAM,QAAQ,CAAC;CAEhH,gBAAgB,iBAAiB,WAAW;CAE5C,MAAM,eAAe,MAAwB;EACzC,EAAE,eAAe;EACjB,iBAAiB,EAAE;EACnB,YAAY,KAAK;EACjB,WAAW,IAAI;CACnB;CAGA,MAAM,qBACF,WACA,SACC;EACD,IAAI,CAAC,aAAa,EAAE,qBAAqB,SAAS,MAAM,UAAU,QAAQ,CAAC,GACvE,OAAO;EAKX,MAAM,UAAsC;GACxC,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACd;EAGA,MAAM,QAAQ,IADQ,KAAK,eAAe,SAAS,OACrC,EAAU,cAAc,SAAS;EAE/C,MAAM,WAAW,SAAiB,MAAM,MAAK,MAAK,EAAE,SAAS,IAAI,GAAG,SAAS;EAE7E,MAAM,OAAO,QAAQ,MAAM;EAC3B,MAAM,QAAQ,QAAQ,OAAO;EAC7B,MAAM,MAAM,QAAQ,KAAK;EAEzB,IAAI,SAAS,QACT,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG;OAI3B,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,GAFjB,QAAQ,MAEY,EAAM,GADxB,QAAQ,QACmB;CAEnD;CAGA,MAAM,4BAA4B,MAAY,OAAwB;EAClE,IAAI,CAAC,IAED,OAAO,CAAC,KAAK,kBAAkB;EAGnC,MAAM,eAAe,IAAI,KAAK,eAAe,SAAS;GAClD,MAAM;GAClB,OAAO;GACP,KAAK;GACO,MAAM;GAClB,QAAQ;GACR,QAAQ;GACI,UAAU;EACd,CAAC;EACD,MAAM,cAAc,IAAI,KAAK,eAAe,SAAS;GACjD,MAAM;GAClB,OAAO;GACP,KAAK;GACO,MAAM;GAClB,QAAQ;GACR,QAAQ;GACI,UAAU;EACd,CAAC;EAED,MAAM,WAAW,aAAa,cAAc,IAAI;EAChD,MAAM,UAAU,YAAY,cAAc,IAAI;EAE9C,MAAM,WAAW,OAAkC,SAC/C,SAAS,MAAM,MAAK,MAAK,EAAE,SAAS,IAAI,GAAG,SAAS,KAAK,EAAE;EAE/D,MAAM,UAAU,IAAI,KAAK,KAAK,IAC1B,QAAQ,UAAU,MAAM,GACxB,QAAQ,UAAU,OAAO,IAAI,GAC7B,QAAQ,UAAU,KAAK,GACvB,QAAQ,UAAU,MAAM,GACxB,QAAQ,UAAU,QAAQ,CAC9B,CAAC;EAUD,QAAQ,IARW,KAAK,KAAK,IACzB,QAAQ,SAAS,MAAM,GACvB,QAAQ,SAAS,OAAO,IAAI,GAC5B,QAAQ,SAAS,KAAK,GACtB,QAAQ,SAAS,MAAM,GACvB,QAAQ,SAAS,QAAQ,CAC7B,CAEQ,EAAO,QAAQ,IAAI,QAAQ,QAAQ,KAAK;CACpD;CAGA,MAAM,qBAAqB,MAA2C;EAClE,MAAM,aAAa,EAAE,OAAO;EAC5B,iBAAiB,UAAU;EAC3B,YAAY,IAAI;EAEhB,IAAI,CAAC,YAAY;GACb,WAAW,IAAI;GACf;EACJ;EAEA,IAAI;GACA,IAAI,MAAc,OAAe,KAAa,QAAQ,GAAG,UAAU;GAEnE,IAAI,SAAS,QAET,CAAC,MAAM,OAAO,OAAO,WAAW,MAAM,GAAG,EAAE,IAAI,MAAM;QAClD;IAEH,MAAM,CAAC,UAAU,YAAY,WAAW,MAAM,GAAG;IACjD,CAAC,MAAM,OAAO,OAAO,SAAS,MAAM,GAAG,EAAE,IAAI,MAAM;IACnD,CAAC,OAAO,WAAW,SAAS,MAAM,GAAG,EAAE,IAAI,MAAM;GACrD;GAEA,IAAI;GAEJ,IAAI,CAAC,UAED,aAAa,IAAI,KAAK,MAAM,QAAQ,GAAG,KAAK,OAAO,OAAO;QACvD;IAMH,MAAM,gBAAgB,yBAAyB,IADxB,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,OAAO,OAAO,CAC1B,GAAY,QAAQ;IAKnE,6BAAa,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,OAAO,OAAO,IAAI,gBAAgB,GAAK;GAChG;GAEA,IAAI,MAAM,WAAW,QAAQ,CAAC,GAC1B,MAAM,IAAI,MAAM,cAAc;GAGlC,WAAW,UAAU;EACzB,SAAS,GAAG;GAER;EACJ;CACJ;CAEA,MAAM,oBAAoB;EACtB,WAAW,IAAI;EACf,YAAY,IAAI;EAChB,iBAAiB,kBAAkB,SAAS,MAAM,IAAI,CAAC;CAC3D;CAEA,MAAM,mBAAmB;EACrB,WAAW,KAAK;EAChB,YAAY,KAAK;CACrB;CAEA,OACI,qBAAA,UAAA,EAAA,UAAA;EAEI,oBAAC,SAAD,EAAA,UAAQ,YAAmB,CAAA;EAC3B,qBAAC,OAAD;GACI,WAAW,IACP,kCACA,CAAC,aAAA,6CACD,WAAW,+BAA+B,2BAC1C;IACI,gBAAgB,SAAS;IACzB,gBAAgB,SAAS;IACzB,gBAAgB,SAAS;IACzB,gBAAgB,SAAS;GAC7B,GACA,SACJ;GACO;GACP,eAAe;IACX,IAAI,CAAC,UACD,SAAS,SAAS,MAAM;GAEhC;aAlBJ;IAoBK,SACG,oBAAC,YAAD;KACI,WAAW,IACP,sCACA,CAAC,QACK,UACI,iBACA,sDACJ,kCACN,WAAW,eAAe,EAC9B;KACA,QAAQ;eAGP;IACO,CAAA;IAGhB,oBAAC,SAAD;KACI,KAAK;KACL,MAAM,SAAS,cAAc,mBAAmB;KAChD,OAAO,WAAW,gBAAgB,kBAAkB,SAAS,MAAM,IAAI;KACvE,UAAU;KACV,SAAS;KACT,QAAQ;KACE;KACV,WAAW,IACP,sEACA,YAAY,UAAU,SACtB,cACA;MACI,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;KAC7B,GACA,QAAQ,cAAc,QACtB,gBACA,YACA,0HACJ;IACH,CAAA;IACD,oBAAC,YAAD;KACI,UAAU,MAAM;MACZ,EAAE,gBAAgB;MAClB,SAAS,SAAS,WAAW;KACjC;KACA,WAAU;eAEV,oBAAC,gBAAD,CAAc,CAAA;IACN,CAAA;IACX,aAAa,SACV,oBAAC,YAAD;KACI,SAAS;KACT,WAAU;eAEV,oBAAC,SAAD,CAAO,CAAA;IACC,CAAA;GAEf;;EACJ,gBACG,qBAAC,OAAD;GAAK,WAAU;aAAf,CACI,oBAAC,mBAAD;IAAiB,MAAM,SAAS;IAAO,OAAO;GAAS,CAAA,GACvD,qBAAC,OAAD;IAAK,WAAU;cAAf,CACI,oBAAC,YAAD;KAAY,SAAS;eAAS;IAElB,CAAA,GACZ,oBAAC,YAAD;KAAY,SAAS;eAChB,0BAA0B,KAAK,UAAU,KAAK;IACvC,CAAA,CACX;KACJ;;CAEX,EAAA,CAAA;AAEV;AAEA,IAAM,cAAc;;;;;;;;;;;;;;;ACnSpB,IAAM,eAAe;CACjB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,MAAM;AACV;AAEA,IAAa,UAAU,EACI,MACA,cACA,UACA,WACA,oBACA,YAAY,MACZ,YACA,YACA,aAAa,MACb,WAAW,MACX,QAAQ,MACR,iBACA,iBACA,sBACA,mBACA,sBAAsB,MACtB,iBACA,oBAAoB,sBACL;CACtC,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAGhD,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,mBAAmB,oBAAoB,KAAA;CAE/D,gBAAgB;EACZ,IAAI,CAAC,MAAM;GACP,MAAM,UAAU,iBAAiB;IAC7B,aAAa,KAAK;GACtB,GAAG,GAAG;GACN,aAAa,aAAa,OAAO;EACrC,OAAO;GACH,aAAa,IAAI;GACjB,aAAa,CACb;EACJ;CACJ,GAAG,CAAC,IAAI,CAAC;CAET,OACI,oBAAC,gBAAgB,MAAjB;EAAsB,MAAM,aAAa;EACZ;EACO;YAChC,oBAAC,gBAAgB,QAAjB;GAAwB,WAAW;aAE/B,qBAAC,OAAD;IAAK,WAAW,IAAI,sBAAsB,kBAAkB;cAA5D,CAEI,oBAAC,gBAAgB,SAAjB;KACI,WAAW,IAAI,2GACX,aAAa,OAAO,gBAAgB,aACpC,wEACJ;KACA,OAAO,EACH,eAAe,YAAY,SAAS,OACxC;IACH,CAAA,GAED,oBAAC,gBAAgB,SAAjB;KACqB;KACjB,kBAAkB,MAAM;MACpB,IAAI,qBACA,EAAE,eAAe;MAErB,kBAAkB,CAAC;KACvB;KACsB;KACH;KACnB,oBAAkB;KAClB,WAAW,IAAI,wHAAwH;eAEvI,oBAAC,OAAD;MACI,WAAW,IAAI,YACX,eACA,QACA,YACA,mBACA,mCACA,aAAa,CAAC,aAAa,YAAY,KAAA,GACvC,cAAc,CAAC,aAAa,WAAW,KAAA,GACvC,2CACA,+BACA,aAAa,sBAAsB,0BACnC,4BACA,cAAc,mBACd,aAAa,OAAO,0BAA0B,0BAC9C,YAAY,CAAC,aAAa,aAAa,YAAY,KAAA,GACnD,SACJ;MACC;KACA,CAAA;IAEgB,CAAA,CACxB;;EAEe,CAAA;CACN,CAAA;AAE9B;;;AC7IA,SAAgB,cAAc,EACI,UACA,WAAW,UACX,cAAc,MACd,aAM/B;CAEC,OAAO,oBAAC,OAAD;EACH,WAAW,IACP,oBACA,+GACA,UACA,oGACA,cAAc,qBAAqB,IACnC,SAAS;EACZ;CACA,CAAA;AACT;;;ACvBA,SAAgB,cAAc,EACI,UACA,WACA,YACA,gBAAgB,QAM/C;CAEC,IAAI,YACA,OAAO,oBAAC,OAAD;EAAK,WAAW;EAClB;CACA,CAAA;CAET,OAAO,oBAAC,OAAD;EACH,WAAW,IAAI,aACX,EAAE,aAAa,cAAc,GAC7B,SAAS;EACZ;CACA,CAAA;AACT;;;ACVA,SAAgB,YAAY,EACI,UACA,QACA,WACA,UAAU,aACV,eAAe,MACf,gBAAgB,MAChB,GAAG,SACgB;CAE/C,MAAM,QAAQ,oBAAC,gBAAgB,OAAjB;EAAuB,SAAA;YACjC,oBAAC,YAAD;GAAqB;GACT,WAAW,IAAI,EAAE,aAAa,cAAc,GAAG,SAAS;GAC1C;GACd,GAAI;GACX;EACO,CAAA;CACO,CAAA;CAEvB,IAAI,QACA,OAAO,oBAAC,eAAe,MAAhB,EAAA,UAAsB,MAA2B,CAAA;CAG5D,OAAO;AACX;;;AC9BA,SAAgB,gBAAgB,EACI,OACA,UACA,YAAY,OACZ,UACA,kBACA,oBAAoB,MACpB,gBACA,SACA,WACA,kBAWhC;CAEA,gBAAgB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BrC;CAEE,MAAM,CAAC,MAAM,WAAW,SAAS,aAAa,KAAA,IAAY,WAAW,iBAAiB;CACtF,MAAM,CAAC,eAAe,oBAAoB,SAAS,IAAI;CAEvD,gBAAgB;EACZ,IAAI,MACA,iBAAiB;GACb,iBAAiB,IAAI;EACzB,GAAG,GAAG;OAEN,iBAAiB,KAAK;CAE9B,GAAG,CAAC,IAAI,CAAC;CAET,gBAAgB;EACZ,IAAI,aAAa,KAAA,GACb,QAAQ,QAAQ;CACxB,GAAG,CAAC,QAAQ,CAAC;CAEb,OAAQ,oBAAA,UAAA,EAAA,UACA,qBAAC,YAAY,MAAb;EACI,WAAW,IACP,CAAC,aAAA,yDACD,cACA,UACA,SACJ;EACM;EACN,eAAe,gBAAyB;GACpC,mBAAmB,WAAW;GAC9B,QAAQ,WAAW;EACvB;YAXJ,CAaI,oBAAC,YAAY,SAAb;GAAqB,SAAA;aACjB,qBAAC,OAAD;IACI,WAAW,IACP,mEACA,gOACA,YAAY,kBAAkB,OAC9B,OAAO,SAAS,QAChB,+BACA,aAAA,kDACA,WAAA,6CACA,gBACA,gBACJ;IACA,MAAK;IACL,UAAU;IACV,iBAAe;cAdnB,CAgBK,OACD,oBAAC,mBAAD,EAAiB,WAAW,IAAI,cAAc,OAAO,eAAe,EAAE,EAAG,CAAA,CACxE;;EACY,CAAA,GAErB,oBAAC,YAAY,SAAb;GACI,WAAW,IAAI,oBAAoB;GACnC,OAAO,EACH,UAAU,gBAAgB,YAAY,SAC1C;aAEA,oBAAC,OAAD;IAAK,WAAW;IACX;GACA,CAAA;EACY,CAAA,CACP;IACpB,CAAA;AAEV;;;AChGA,SAAgB,WAAW,EACvB,QACA,cACA,iBACA,SACA,UACA,UACA,OACA,mBACA,UACA,wBAAwB,MACxB,QACyC;CAEzC,MAAM,EACF,cACA,eACA,cACA,cACA,iBACA,YAAY;EACZ;EACA,sBAAsB;EACtB;EACA,QAAQ;EACR,gBAAgB;EAChB;EACA;EACA;CACJ,CACA;CACA,OAAO,qBAAC,OAAD;EACH,GAAI,aAAa;EACjB,MAAK;EACL,cAAY,OAAO,UAAU,WAAW,QAAS,OAAO,sBAAsB,WAAW,oBAAoB;EAC7G,iBAAe,YAAY,KAAA;EAC3B,WAAW,IACP,sBACA,cACA,oLACA;GACI,QAAQ,SAAS;GACjB,QAAQ,SAAS;GACjB,QAAQ,SAAS;GACjB,kBAAkB,CAAC;IAClB,4BAA4B,CAAC;GAC9B,gFAAgF;GAChF,kFAAkF;EACtF,CAAC;YAjBF;GAmBH,oBAAC,YAAD;IAAY,SAAS;IAAW,OAAO;IAAa,WAAW;cAC1D;GACO,CAAA;GAEZ,oBAAC,SAAD,EACI,GAAI,cAAc,EAAG,CAAA;GAExB;GAED,oBAAC,OAAD;IACI,WAAU;cACV,oBAAC,YAAD;KAAY,OAAO;KACf,SAAS;KACT,WAAW;eACV;IACO,CAAA;GACX,CAAA;EAEJ;;AACT;;;AC3EA,IAAM,cAAc;CAChB,OAAO;CACP,QAAQ;AACZ;;;;;;;;;;AAWA,IAAa,aAAa,MAAM,WAA+C,SAAS,WAAW,EAC/F,UACA,SAAS,OACT,SACA,MACA,OAAO,UACP,WACA,WAAW,OACX,GAAG,QACa,KAAK;CACrB,OACI,qBAAC,UAAD;EACS;EACL,MAAK;EACI;EACC;EACV,WAAW,IACP,+CACA,sDACA,kCACA,iFACA,YAAY,OACZ,SACM,oHACA,IACE,sGACA,CAAC,YAAY,2DACjB,GACJ,YAAY,iCACZ,SACJ;EACA,GAAI;YApBR,CAsBK,MACA,QACG;;AAEhB,CAAC;;;AC3ED,IAAM,eAAe;CACjB,MAAM;CACN,MAAM;AACV;AAEA,SAAgB,UAAU,EACI,UACA,OAAO,UAIlC;CAEC,OACI,oBAAC,OAAD;EACI,WAAW,IAAI,6BAA6B,aAAa,KAAK;EAC7D;CACA,CAAA;AAEb;;;ACZA,IAAM,QAAQ,QAAM,YAGjB,EACI,WACA,QACA,SACA,GAAG,SACJ,QACF,oBAAC,eAAe,MAAhB;CACS;CACI;CACT,WAAW,IAAI,wDACX,UAAU,4EACV,WAAW,uEACX,oBAAoB,SAAS;CACjC,GAAI;AACP,CAAA,CACJ;AACD,MAAM,cAAc,eAAe,KAAK;;;ACpBxC,SAAgB,cAAsD,EACI,UACA,SACA,UACA,SACA,WACA,GAAG,SACmB;CAC5F,OACI,qBAAC,QAAD;EACI,UAAU,WAAW;EACZ;EACT,WAAW,MAAM;EACjB,GAAI;YAJR;GAMK,WACG,oBAAC,kBAAD,EAAkB,MAAM,WAAY,CAAA;GAEvC,CAAC,WAAW;GACZ;EACG;;AAEhB;;;AClBA,IAAM,eAAe;CACjB,OAAO;CACP,QAAQ;CACR,OAAO;CACP,IAAI;CACJ,OAAO;AACX;;;;;;;;AASA,IAAM,uBAAuB;CACzB;CACA;CACA;CACA;CACA;AACJ,EAAE,KAAK,GAAG;AAEV,IAAM,KAAK,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC;;;;AAIzC,IAAa,WAAW,MAAM,KAAoB,SAAS,SAAS,EACI,QACA,WACA,OAAO,YACO;CAC9E,MAAM,OAAO,cAAc;EACvB,OAAO,GAAG,OAAO,OAAO,WAAW,WAAW,SAAS,EAAE;CAC7D,GAAG,CAAC,MAAM,CAAC;CAEX,OAAO,oBAAC,OAAD;EACH,WAAW,IAAI,aAAa,OAAO,+CAA+C,sBAAsB,SAAS;EACjH,yBAAyB,EAAE,QAAQ,KAAK;CAC3C,CAAA;AACL,GACE,SAAK;;;AC/BX,IAAM,OAAO,MAAM,YAGhB,EACI,UACA,SACA,MACA,aACA,MACA,OACA,cACA,iBACA,aAAa,GACb,aACD,QAAQ;CAEV,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,mBAAmB,oBAAoB,KAAA;CAE/D,OACI,qBAAC,aAAa,MAAd;EACU;EACO;EACC;YAHlB,CAII,oBAAC,aAAa,SAAd;GACS;GACL,SAAA;aACC;EACiB,CAAA,GACtB,oBAAC,aAAa,QAAd;GAAqB,WAAW;aAC5B,oBAAC,aAAa,SAAd;IACU;IACM;IACL;IACP,WAAW,IAAI,YAAY,iBAAiB,aAAa,SAAS;IACjE;GACiB,CAAA;EACL,CAAA,CACN;;AAE3B,CAAC;AACD,KAAK,cAAc;AAYnB,IAAa,WAAW,MAAM,MAAM,EACI,UACA,QAAQ,OACR,WAAW,OACX,SACA,gBACiB;CAErD,MAAM,aAAa,IACf,WAAW,CAAC,YAAY,kBACxB,YAAY,iCACZ,+GACA,CAAC,YAAY,gEACb,QAAQ,gBAAgB,aACxB,SACJ;CAEA,OACI,oBAAC,aAAa,MAAd;EACI,WAAW;EACD;EACV,SAAS,WAAW,KAAA,IAAY;EAC/B;CACc,CAAA;AAE3B,CAAC;AAED,SAAS,cAAc;;;AChGvB,SAAgB,QAAQ,EACI,UACA,UACA,aAKzB;CACC,OACI,oBAAC,iBAAiB,MAAlB;EACc;EACV,WAAW,IAAI,uEAAuE,SAAS;EAC9F;CACkB,CAAA;AAE/B;AAEA,SAAgB,YAAY,EACI,YAC8B;CAC1D,OACI,oBAAC,iBAAiB,MAAlB,EACK,SACkB,CAAA;AAE/B;AAEA,SAAgB,eAAe,EACI,UACA,UACA,aAKhC;CACC,OACI,oBAAC,iBAAiB,SAAlB;EACc;EACV,WAAW,IAAI,2bACX,SAAS;EACZ;CACqB,CAAA;AAElC;AAEA,SAAgB,cAAc,EACI,UACA,mBAI/B;CAEC,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,mBAAmB,oBAAoB,KAAA;CAE/D,OACI,oBAAC,iBAAiB,QAAlB;EAAyB,WAAW;EAC/B;CACoB,CAAA;AAEjC;AAEA,SAAgB,eAAe,EACI,UACA,WACA,OACA,YACA,aACA,UACA,GAAG,QAQnC;CACC,OACI,oBAAC,iBAAiB,SAAlB;EACc;EACV,WAAW,IAAI,uRAAuR,SAAS;EAC/S,OAAO,SAAS;EAChB,YAAY,cAAc;EAC1B,aAAa,eAAe;EAC5B,GAAI;EAEH;CACqB,CAAA;AAElC;AAEA,SAAgB,YAAY,EACI,UACA,aACA,WACA,UACA,UACA,GAAG,QAOhC;CACC,OACI,oBAAC,iBAAiB,MAAlB;EACc;EACV,WAAW,IAAI,+dACX,cAAc,SAAS,IACvB,WAAW,0EAA0E,iDACrF,SAAS;EACH;EACV,GAAI;EAEH;CACkB,CAAA;AAE/B;AAEA,SAAgB,iBAAiB,EACI,UACA,WACA,GAAG,QAIrC;CACC,OACI,oBAAC,iBAAiB,WAAlB;EACI,WAAW,IAAI,6DAA6D,SAAS;EACrF,GAAI;EAEH;CACuB,CAAA;AAEpC;AAEA,SAAgB,WAAW,EACI,UACA,GAAG,QAG/B;CACC,OACI,oBAAC,iBAAiB,KAAlB;EACI,GAAI;EAEH;CACiB,CAAA;AAE9B;AAEA,SAAgB,kBAAkB,EACI,UACA,WACA,UACA,GAAG,QAKtC;CACC,OACI,oBAAC,iBAAiB,YAAlB;EACc;EACV,WAAW,IAAI,6gBACX,SAAS;EACb,GAAI;EAEH;CACwB,CAAA;AAErC;AAEA,SAAgB,kBAAkB,EACI,UACA,aACA,WACA,UACA,GAAG,QAMtC;CACC,OACI,oBAAC,iBAAiB,YAAlB;EACc;EACV,aAAa,eAAe;EAC5B,WAAW,IAAI,uRACX,SAAS;EACb,GAAI;EAEH;CACwB,CAAA;AAErC;AAEA,SAAgB,oBAAoB,EACI,UACA,SACA,iBACA,WACA,UACA,GAAG,QAOxC;CACC,OACI,oBAAC,iBAAiB,cAAlB;EACc;EACV,WAAW,IAAI,2WACX,SAAS;EACJ;EACQ;EACjB,GAAI;EAEH;CAC0B,CAAA;AAEvC;AAEA,SAAgB,qBAAqB,EACI,UACA,WACA,GAAG,QAIzC;CACC,OACI,oBAAC,iBAAiB,eAAlB;EACI,WAAW,IAAI,+DAA+D,SAAS;EACvF,GAAI;YACH,YAAY,oBAAC,aAAD,EAAW,MAAM,SAAS,SAAU,CAAA;CACrB,CAAA;AAExC;AAEA,SAAgB,kBAAkB,EACI,UACA,WACA,OACA,eACA,UACA,GAAG,QAOtC;CACC,OACI,oBAAC,iBAAiB,YAAlB;EACI,WAAW,IAAI,SAAS;EACjB;EACQ;EACL;EACV,GAAI;YACH,YAAY,oBAAC,aAAD,EAAW,MAAM,SAAS,MAAO,CAAA;CACrB,CAAA;AAErC;AAEA,SAAgB,iBAAiB,EACI,UACA,WACA,OACA,UACA,GAAG,QAMrC;CACC,OACI,oBAAC,iBAAiB,WAAlB;EACc;EACV,WAAW,IAAI,2WACX,SAAS;EACN;EACP,GAAI;YACH,YAAY,oBAAC,aAAD,EAAW,MAAM,SAAS,MAAO,CAAA;CACtB,CAAA;AAEpC;AAEA,SAAgB,gBAAgB,EACI,UACA,WACA,GAAG,QAIpC;CACC,OACI,oBAAC,OAAD;EACI,WAAW,IAAI,sGACX,SAAS;EACb,GAAI;EACH;CACA,CAAA;AAEb;AAEA,SAAgB,6BAA6B;CACzC,OACI,oBAAC,OAAD;EAAK,WAAU;YACX,oBAAC,oBAAD,EAAkB,MAAM,SAAS,MAAO,CAAA;CACvC,CAAA;AAEb;;;AC3UA,SAAgB,UAAU,EACI,aACA,YACA,aAK3B;CACC,IAAI,gBAAgB,cAChB,OACI,oBAAC,mBAAmB,MAApB;EACgB;EACZ,aAAY;EACZ,WAAW,IAAI,uLAAuL,SAAS;CAAG,CAAA;MAG1N,OACI,oBAAC,mBAAmB,MAApB;EACI,WAAW,IAAI,uLAAuL,SAAS;EACnM;EACZ,aAAY;CACf,CAAA;AAEb;;;ACMA,IAAa,qBAAqB,QAAM,cAAyD,IAAkD;AAoCnJ,IAAa,cAAc,QAAM,YAKzB,EACI,OACA,OAAO,SACP,OACA,OACA,eACA,WACA,UACA,aACA,eAAe,MACf,eAAe,MACf,mBAAmB,MACnB,WAAW,MACX,WACA,gBACA,UACA,UACA,cACA,MACA,cACA,mBAEJ,QACC;CACD,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAChD,MAAM,CAAC,eAAe,oBAAoB,SAAS,QAAQ,KAAK;CAChE,MAAM,CAAC,gBAAgB,qBAAqB,SAAmB,SAAS,CAAC,CAAC;CAG1E,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,mBAAmB,oBAAoB,KAAA;CAE/D,gBAAgB;EACZ,aAAa,IAAI;CACrB,GAAG,CAAC,CAAC;CAEL,MAAM,uBAAuB,SAAkB;EAC3C,iBAAiB,IAAI;EACrB,eAAe,IAAI;CACvB;CAEA,gBAAgB;EACZ,iBAAiB,QAAQ,KAAK;CAClC,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,YAAY,QAAM,cAAc,WAElC,SAAS,IAAI,WAAW,UAAU;EAC9B,IAAI,QAAM,eAAqC,KAAK,GAChD,OAAO,MAAM,MAAM;EAEvB,OAAO;CACX,CAAC,GAAG,OAAO,OAAO,KAAK,CAAC,IACtB,CAAC,GAAG,CAAC,QAAQ,CAAC;CAEpB,MAAM,aAAa,QAAM,cAAc;EACnC,MAAM,sBAAM,IAAI,IAA6B;EAC7C,SAAS,QAAQ,WAAW,UAAU;GAClC,IAAI,QAAM,eAAqC,KAAK,GAChD,IAAI,IAAI,OAAO,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,QAAQ;EAE/D,CAAC;EACD,OAAO;CACX,GAAG,CAAC,QAAQ,CAAC;CAEb,QAAM,gBAAgB;EAClB,kBAAkB,SAAS,CAAC,CAAC;CACjC,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,eAAe,QAAM,aAAa,WAAqB;EACzD,kBAAkB,MAAM;EACxB,gBAAgB,MAAM;CAC1B,GAAG,CAAC,aAAa,CAAC;CAElB,MAAM,cAAc,QAAM,aAAa,aAA+B;EAClE,IAAI;EACJ,IAAI,eAAe,MAAK,MAAK,OAAO,CAAC,MAAM,OAAO,QAAQ,CAAC,GACvD,oBAAoB,eAAe,QAAO,MAAK,OAAO,CAAC,MAAM,OAAO,QAAQ,CAAC;OAE7E,oBAAoB,CAAC,GAAG,gBAAgB,OAAO,QAAQ,CAAC;EAE5D,aAAa,iBAAiB;CAClC,GAAG,CAAC,gBAAgB,YAAY,CAAC;CAEjC,MAAM,sBACF,UACC;EACD,IAAI,MAAM,QAAQ,SACd,oBAAoB,IAAI;OACrB,IAAI,MAAM,QAAQ,eAAe,CAAC,MAAM,cAAc,OAAO;GAChE,MAAM,oBAAoB,CAAC,GAAG,cAAc;GAC5C,kBAAkB,IAAI;GACtB,aAAa,iBAAiB;EAClC;CACJ;CAEA,MAAM,gBAAgB,UAAkB;EAIpC,aAH0B,eAAe,MAAK,MAAK,OAAO,CAAC,MAAM,OAAO,KAAK,CAAC,IACxE,eAAe,QAAO,MAAK,OAAO,CAAC,MAAM,OAAO,KAAK,CAAC,IACtD,CAAC,GAAG,gBAAgB,KAAK,CACD;CAClC;CAEA,MAAM,oBAAoB;EACtB,aAAa,CAAC,CAAC;CACnB;CAEA,MAAM,4BAA4B;EAC9B,oBAAoB,CAAC,aAAa;CACtC;CAEA,MAAM,kBAAkB;EACpB,IAAI,eAAe,WAAW,UAAU,QACpC,YAAY;OAEZ,aAAa,SAAS;EAE1B,oBAAoB,KAAK;CAC7B;CAEA,gBAAgB,eAAe;;;;;GAKpC;CAEK,MAAM,eAAe,QAAM,eAAe;EACtC,YAAY;EACZ;CACJ,IAAI,CAAC,gBAAgB,WAAW,CAAC;CAEjC,OACI,qBAAC,mBAAmB,UAApB;EAA6B,OAAO;YAApC,CAEK,OAAO,UAAU,WAAW,oBAAC,kBAAD;GAAyB;aAAQ;EAAwB,CAAA,IAAI,OAE1F,qBAAC,iBAAiB,MAAlB;GACI,MAAM,aAAa;GACnB,cAAc;GACd,OAAO;aAHX,CAKI,oBAAC,iBAAiB,SAAlB;IAA0B,SAAA;cACtB,oBAAC,UAAD;KACI,KAAK,YAAY;KACjB,SAAS;KACT,WAAW,IACP;MACI,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;KAC7B,GACA;MACI,QAAQ,SAAS,WAAW,SAAS;MACrC,QAAQ,SAAS,YAAY,SAAS;KAC1C,GACA;MACI,QAAQ,SAAS,WAAW,SAAS;MACrC,QAAQ,SAAS,YAAY,SAAS;KAC1C,GACA,kCACA,gGACA,YAAY,gCAAgC,sBAC5C,WAAW,+BAA+B,2BAC1C,8BACA,WACA,cACJ;eAEC,eAAe,SAAS,IACrB,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACI,qBAAC,OAAD;OAAK,WAAU;iBAAf,CACK,gBAAgB,aAAa,cAAc,GAC3C,CAAC,gBAAgB,eAAe,KAAK,UAAU;QAE5C,MAAM,iBAAiB,WAAW,IAAI,OAAO,KAAK,CAAC;QACnD,IAAI,CAAC,UACD,OAAO;QAEX,OACI,qBAAC,MAAD;SACI,MAAM;SAEN,WAAW,IAAI,gCAAgC;mBAHnD,CAKK,gBACD,oBAAC,SAAD;UACI,MAAM,SAAS;UACf,UAAU,UAAU;WAChB,MAAM,gBAAgB;WACtB,aAAa,KAAK;UACtB;SACH,CAAA,CACC;WAXG,OAAO,KAAK,CAWf;OAEd,CAAC,CACA;UACL,qBAAC,OAAD;OAAK,WAAU;iBAAf,CACK,gBAAgB,oBAAC,SAAD;QACb,WAAW;QACX,MAAM,SAAS;QACf,UAAU,UAAU;SAChB,MAAM,gBAAgB;SACtB,YAAY;QAChB;OACH,CAAA,GACD,oBAAC,OAAD;QAAK,WAAW,IAAI,+BAA+B;kBAC/C,oBAAC,mBAAD;SAAiB,MAAM,SAAS,UAAU,SAAS,SAAS,SAAS;SACjE,WAAW,IAAI,cAAc,gBAAgB,eAAe,EAAE;QAAG,CAAA;OACpE,CAAA,CACJ;QACJ;UAEL,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACI,oBAAC,QAAD;OAAM,WAAU;iBACX;MACC,CAAA,GACN,oBAAC,OAAD;OAAK,WAAW,IAAI,+BAA+B;iBAC/C,oBAAC,mBAAD;QAAiB,MAAM,SAAS,UAAU,SAAS,SAAS,SAAS;QACjE,WAAW,IAAI,cAAc,gBAAgB,eAAe,EAAE;OAAG,CAAA;MACpE,CAAA,CACJ;;IAEL,CAAA;GACc,CAAA,GAC1B,oBAAC,iBAAiB,QAAlB;IAAyB,WAAW;cAChC,oBAAC,iBAAiB,SAAlB;KACI,WAAW,IAAI,iFAAiF,kBAAkB;KAClH,OAAM;KACN,YAAY;KACZ,uBAAuB,oBAAoB,KAAK;eAEhD,qBAAC,SAAD,EAAA,UAAA;MACI,qBAAC,OAAD;OAAK,WAAW;iBAAhB,CACI,oBAAC,QAAiB,OAAlB;QACI,WAAW,IAAI,iBAAiB,wGAAwG;QACxI,aAAY;QACZ,WAAW;OACd,CAAA,GACA,eAAe,SAAS,KACrB,oBAAC,OAAD;QACI,SAAS;QACT,WAAU;kBAAoG;OAE7G,CAAA,CAER;;MACL,oBAAC,WAAD;OAAW,aAAa;OAAc,WAAW;MAAQ,CAAA;MACzD,qBAAC,QAAiB,MAAlB,EAAA,UAAA,CACI,oBAAC,QAAiB,OAAlB;OAAwB,WAAW;iBAAuE;MAElF,CAAA,GACxB,qBAAC,QAAiB,OAAlB,EAAA,UAAA,CACK,oBAAoB,qBAAC,QAAiB,MAAlB;OAEjB,UAAU;OACV,WACI,IACI,sCACA,kBACA,OACA,2BACA,4NACA,8FACA,uHACJ;iBAZa,CAejB,oBAAC,eAAD,EAAe,SAAS,eAAe,WAAW,UAAU,OAAQ,CAAA,GACpE,oBAAC,QAAD;QAAM,WAAW;kBAA6D;OAAkB,CAAA,CAC7E;SAhBf,KAgBe,GACtB,QACmB,EAAA,CAAA,CACL,EAAA,CAAA;KACT,EAAA,CAAA;IACI,CAAA;GACL,CAAA,CACN;IACE;;AAErC,CACJ;AAEA,YAAY,cAAc;AAQ1B,IAAa,kBAAkB,QAAM,KAAK,SAAS,gBAAqD,EACpG,UACA,OACA,aACwB;CACxB,MAAM,UAAU,QAAM,WAAW,kBAAkB;CACnD,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,mDAAmD;CACjF,MAAM,EACF,YACA,gBACA;CAEJ,MAAM,cAAc,cAAc,CAAC,GAAG,MAAK,MAAK,OAAO,CAAC,MAAM,OAAO,KAAK,CAAC;CAE3E,OAAO,qBAAC,QAAiB,MAAlB;EACH,cAAc,MAAM;GAChB,EAAE,eAAe;GACjB,EAAE,gBAAgB;EACtB;EACA,WAAW,MAAM;GACb,YAAY,KAAK;EACrB;EACA,WAAW,IACP,sCACA,aAAa,qDAAqD,IAClE,kBACA,OACA,2BACA,4NACA,8FACA,yHACA,wDACA,SACJ;YAnBG,CAqBH,oBAAC,eAAD,EAAe,SAAS,WAAY,CAAA,GACnC,QACkB;;AAC3B,CAAC;AAED,IAAM,gBAAgB,QAAM,KAAK,SAAS,cAAc,EAAE,WAAiC;CACvF,OAAO,oBAAC,OAAD;EAAK,WAAW,IACnB,OACA,WACA,2HACJ;YACI,oBAAC,OAAD;GACI,WAAW,IACP,gEACA,oDACC,UAAU,eAAe,uCACzB,UAAW,yDAAyD,IACpE,UAAU,uBAAuB,0DACtC;aACC,WAAW,oBAAC,aAAD;IAAW,MAAM,SAAS;IAAU,WAAW;GAAY,CAAA;EACtE,CAAA;CACJ,CAAA;AACT,CAAC;;;ACpaD,SAAgB,MAAM,EACI,UACA,OACA,aAMvB;CACC,OACI,oBAAC,OAAD;EACI,WAAW,IAAI,YAAY,SAAS;EAC7B;EACN;CACA,CAAA;AAEb;;;ACEA,IAAM,aAAa,QAAM,YAGtB,EACI,WACA,GAAG,SACJ,QAAQ;CACV,OACI,oBAAC,oBAAoB,MAArB;EACI,WAAW,IAAI,cAAc,SAAS;EACtC,GAAI;EACC;CACR,CAAA;AAET,CAAC;AACD,WAAW,cAAc,oBAAoB,KAAK;AAUlD,IAAM,iBAAiB,QAAM,YAG1B,EACI,WACA,GAAG,SACJ,QAAQ;CACV,OACI,oBAAC,oBAAoB,MAArB;EACS;EACL,WAAW,IACP,8OACA,SACJ;EACA,GAAI;YAEJ,oBAAC,oBAAoB,WAArB;GAA+B,WAAU;aACrC,oBAAC,OAAD,EAAK,WAAU,8DAA8D,CAAA;EAClD,CAAA;CACT,CAAA;AAElC,CAAC;AACD,eAAe,cAAc,oBAAoB,KAAK;;;AClDtD,SAAgB,gBAAgB,EAC5B,YACA,aACA,iBAAiB,MACjB,kBAAkB,MAClB,kBACA,mBACA,iBAAiB,KACjB,cAAc,cACd,gBAAgB,MAChB,WACA,UAAU,SACW;CAErB,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,gBAAgB,OAAO,KAAK;CAGlC,MAAM,gBAAgB,OAAuB,IAAI;CACjD,MAAM,cAAc,OAAO,CAAC;CAC5B,MAAM,eAAe,OAAO,CAAC;CAE7B,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,eAAe,gBAAgB;CAErC,MAAM,oBAAoB,aAAa,MAAwB;EAC3D,IAAI,CAAC,kBAAkB,CAAC,iBAAiB;EAEzC,EAAE,eAAe;EACjB,cAAc,UAAU;EACxB,cAAc,IAAI;EAElB,YAAY,UAAU,eAAe,EAAE,UAAU,EAAE;EAEnD,IAAI,cAAc,SAAS;GACvB,MAAM,OAAO,cAAc,QAAQ,sBAAsB;GACzD,aAAa,UAAU,eAAe,KAAK,QAAQ,KAAK;EAC5D;EAEA,SAAS,KAAK,MAAM,SAAS,eAAe,eAAe;EAC3D,SAAS,KAAK,MAAM,aAAa;CACrC,GAAG;EAAC;EAAc;EAAgB;CAAe,CAAC;CAElD,gBAAgB;EACZ,MAAM,mBAAmB,MAAkB;GACvC,IAAI,CAAC,cAAc,WAAW,CAAC,aAAa,SAAS;GAGrD,MAAM,SADa,eAAe,EAAE,UAAU,EAAE,WACrB,YAAY;GAEvC,IAAI,UAAU,aAAa,UAAU;GAErC,MAAM,gBAAgB,aAAa,QAAQ,sBAAsB;GAIjE,MAAM,WAHiB,eAAe,cAAc,QAAQ,cAAc,UAGzC;GAEjC,UAAU,KAAK,IAAI,gBAAgB,KAAK,IAAI,SAAS,OAAO,CAAC;GAG7D,IAAI,cAAc,SACd,cAAc,QAAQ,MAAM,YAAY,GAAG,QAAQ;EAE3D;EAEA,MAAM,sBAAsB;GACxB,IAAI,cAAc,WAAW,aAAa,WAAW,cAAc,SAAS;IAExE,MAAM,gBAAgB,aAAa,QAAQ,sBAAsB;IACjE,MAAM,iBAAiB,cAAc,QAAQ,sBAAsB;IAEnE,MAAM,gBAAgB,eAAe,cAAc,QAAQ,cAAc;IACzE,MAAM,YAAY,eAAe,eAAe,QAAQ,eAAe;IAKvE,IAAI,gBAAgB,GAAG;KACnB,MAAM,aAAc,YAAY,gBAAiB;KACjD,cAAc,QAAQ,MAAM,YAAY,GAAG,WAAW;KACtD,kBAAkB,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,UAAU,CAAC,CAAC;IAC5D;IAEA,cAAc,UAAU;IACxB,cAAc,KAAK;IACnB,SAAS,KAAK,MAAM,SAAS;IAC7B,SAAS,KAAK,MAAM,aAAa;GACrC;EACJ;EAEA,OAAO,iBAAiB,aAAa,eAAe;EACpD,OAAO,iBAAiB,WAAW,aAAa;EAEhD,aAAa;GACT,OAAO,oBAAoB,aAAa,eAAe;GACvD,OAAO,oBAAoB,WAAW,aAAa;EACvD;CACJ,GAAG;EAAC;EAAmB;EAAc;CAAc,CAAC;CAGpD,MAAM,eAAe,CAAC,iBAAiB,OAAQ,kBAAkB,GAAG,iBAAiB,KAAK;CAE1F,OACI,qBAAC,OAAD;EACI,KAAK;EACL,WAAW,IACP,+CACA,CAAC,YAAY,eAAe,aAAa,aACzC,SACJ;YANJ;GASI,oBAAC,OAAD;IACI,KAAK;IACL,WAAW,IACP,UAAU,qBAAqB,0BAC/B,iCACA,CAAC,WAAW,CAAC,cAAc,iBAAiB,iDAC5C,CAAC,kBAAkB,QACvB;IACA,OAAO,UAAU,KAAA,IAAY;KACzB,WAAW;KACX,UAAU,gBAAgB,kBAAkB,kBAAkB,GAAG,eAAe,MAAM,KAAA;KACtF,WAAW,CAAC,gBAAgB,kBAAkB,kBAAkB,GAAG,eAAe,MAAM,KAAA;KACxF,UAAU,kBAAkB,KAAA,IAAY;KACxC,WAAW,kBAAkB,KAAA,IAAY;IAC7C;cAEC;GACA,CAAA;GAGJ,CAAC,WAAW,kBAAkB,mBAC3B,oBAAC,OAAD;IACI,WAAW,IACP,gEAAA,kDAEA,eAAe,2CAA2C,wCAC9D;IACA,aAAa;cAGb,oBAAC,OAAD;KAAK,WAAW,IACZ,mDACA,eAAe,uCAAuC,qCAC1D;eACI,oBAAC,OAAD,EAAK,WAAW,IACZ,4GACA,eAAe,YAAY,SAC/B,EAAG,CAAA;IACF,CAAA;GACJ,CAAA;GAIT,oBAAC,OAAD;IACI,WAAW,IACP,UAAU,qBAAqB,sCAC/B,iCACA,CAAC,mBAAmB,QACxB;cAEC;GACA,CAAA;EACJ;;AAEb;;;ACxJA,SAAgB,UAAU,EACtB,SACA,cACA,cAAc,UACd,aAAa,OACb,OAAO,UACP,gBACA,WACA,WACA,UACA,SACA,UACA,gBACe;CAEf,MAAM,CAAC,YAAY,iBAAiB,SAAiB,gBAAgB,EAAE;CACvE,MAAM,CAAC,QAAQ,aAAa,SAAkB,KAAK;CAEnD,MAAM,iBAAiB,iBAAiB,YAAY,GAAG;;;;CAKvD,MAAM,gBAAgB;EAClB,IAAI,CAAC,cAAc;EACnB,IAAI,gBACA,aAAa,cAAc;OAE3B,aAAa,KAAA,CAAS;CAE9B,GAAG,CAAC,cAAc,CAAC;CAEnB,MAAM,YAAY,kBAAkB;EAChC,IAAI,CAAC,cAAc;EACnB,cAAc,EAAE;EAChB,aAAa,KAAA,CAAS;CAC1B,GAAG,CAAC,YAAY,CAAC;CAGjB,MAAM,cAAc,SAAS,aAAa,QAAQ,SAAS,UAAU,aAAa;CAClF,MAAM,mBAAmB,SAAS,aAAa,SAAS,SAAS,UAAU,SAAS;CACpF,MAAM,oBAAoB,SAAS,aAAa,SAAS,SAAS,UAAU,SAAS;CAErF,OACI,qBAAC,OAAD;EACI,MAAK;EACL,cAAW;EACF;EACT,WAAW,IAAI,2BACX,aACA,mDACA,oBACA,oIACA,8BACA,SAAS;YAVjB;GAWI,oBAAC,OAAD;IACI,WAAW,IAAI,kFAAkF,gBAAgB;cAChH,UAAU,oBAAC,kBAAD,EAAkB,MAAM,WAAY,CAAA,IAAI,oBAAC,cAAD;KAAY,WAAW;KAAmD,MAAM,SAAS,aAAa,KAAK,SAAS,UAAU,KAAK;IAAI,CAAA;GACzL,CAAA;GACL,oBAAC,SAAD;IACI,OAAO,cAAc;IACrB,KAAK;IACI;IACI;IACb,cAAY;IACZ,UAAU,CAAC;IACX,UAAU,gBACH,UAAU;KACT,cAAc,MAAM,OAAO,KAAK;IACpC,IACE,KAAA;IACK;IACX,eAAe,UAAU,IAAI;IAC7B,cAAc,UAAU,KAAK;IAC7B,WAAW,KACN,YAAY,YAAY,uBACzB,iEACA,8JACA,mBAAmB,8BACnB,SAAS,UAAU,YAAY,IAC/B,aAAc,SAAS,cAAc,cAAe,IACpD,cACJ;GACH,CAAA;GACA,aACK,oBAAC,YAAD;IACE,WAAW,GAAG,SAAS,UAAU,eAAe,aAAa;IAC7D,MAAM;IACN,cAAW;IACX,SAAS;cACT,oBAAC,SAAD,EAAO,MAAM,SAAS,SAAU,CAAA;GACxB,CAAA,IACV,oBAAC,OAAD,EAAK,OAAO,EAAE,OAAO,GAAG,EAAG,CAAA;EAEhC;;AAEb;;;ACnFA,IAAa,SAAS,YAAyC,EAC3D,UACA,MACA,MACA,YAAY,OACZ,IACA,cACA,OACA,UACA,eACA,WACA,gBACA,mBACA,aACA,aACA,OACA,OAAO,SACP,OACA,UACA,UAAU,MACV,WAAW,gBACX,cACA,WACA,UACA,WAAW,UACX,iBAAiB,iBACjB,GAAG,SACJ,QAAQ;CAEP,MAAM,CAAC,cAAc,mBAAmB,SAAS,QAAQ,KAAK;CAE9D,gBAAgB;EACZ,gBAAgB,QAAQ,KAAK;CACjC,GAAG,CAAC,IAAI,CAAC;CAGT,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,mBAAmB,oBAAoB,KAAA;CAE/D,MAAM,wBAAwB,aAAa,aAAqB;EAC5D,IAAI,aAA0B;EAC9B,IAAI,aAAa;OACT,aAAa,QAAQ,aAAa;QACjC,IAAI,aAAa,SAAS,aAAa;EAAA,OACzC,IAAI,aAAa;OAChB,CAAC,MAAM,OAAO,QAAQ,CAAC,KAAK,SAAS,KAAK,MAAM,IAAI,aAAa,OAAO,QAAQ;EAAA;EAGxF,gBAAgB,UAAwC;EACxD,IAAI,UAOA,SAAS,EALL,QAAQ;GACJ;GACA,OAAO;EACX,EAEK,CAAK;CAEtB,GAAG;EAAC;EAAU;EAAe;EAAM;CAAQ,CAAC;CAE5C,MAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS,IAAK,SAAS,QAAQ,UAAU,MAAM,UAAU,KAAA;CACvG,MAAM,cAAc,UAAU,KAAA,IAAY,OAAO,KAAK,IAAI,KAAA;CAE1D,MAAM,kBAAkB,cAAc;EAClC,IAAI,CAAC,YAAY,aAAa,OAAO;EAGrC,IAAI,QAAyB;EAC7B,SAAS,QAAQ,WAAW,UAAU;GAClC,IAAI,MAAM,eAAgC,KAAK,KAAK,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO,KAAK,GAC1F,QAAQ,MAAM,MAAM;EAE5B,CAAC;EACD,OAAO;CACX,GAAG;EAAC;EAAU;EAAU;EAAa;CAAK,CAAC;CAE3C,OACI,qBAAC,gBAAgB,MAAjB;EACU;EACN,OAAO;EACP,MAAM;EACI;EACV,eAAe;EACf,eAAe,SAAS;GACpB,eAAe,IAAI;GACnB,gBAAgB,IAAI;EACxB;EACA,GAAI;YAVR;GAWK,OAAO,UAAU,WAAW,oBAAC,kBAAD;IAAyB;cAAQ;GAAwB,CAAA,IAAI;GAC1F,qBAAC,OAAD;IAAK,WAAW,IACZ,kCACA,YAAY,gCAAgC,sBAC5C,WAAW,+BAA+B,2BAC1C,8BACA,WACA;KACI,gBAAgB,SAAS;KACzB,gBAAgB,SAAS;KACzB,gBAAgB,SAAS;KACzB,gBAAgB,SAAS;KACzB,SAAS,CAAC;KACV,UAAU;IACd,CACJ;cAdA,CAeI,qBAAC,gBAAgB,SAAjB;KACI,KAAK;KACD;KACJ,SAAS;KACT,MAAK;KACL,cAAY,OAAO,UAAU,WAAW,QAAS,OAAO,gBAAgB,WAAW,cAAc;KACjG,gBAAc,SAAS,KAAA;KACvB,WAAW,IACP,UACA,UAAU;MACN,QAAQ,SAAS;MACjB,QAAQ,SAAS;MACjB,QAAQ,SAAS,WAAW,SAAS;KACzC,IAAI,IACJ,uCACA,mCACA,kCACA,QAAQ,mCAAmC,6DAC3C,QAAQ,8CAA8C,IACtD,WAAW,yDAAyD,2CACpE,uCACA;MACI,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;MACzB,gBAAgB,SAAS;MACzB,UAAU;MACV,SAAS,CAAC;KACd,GACA,cACJ;eA9BJ,CAgCI,oBAAC,OAAD;MACS;MACL,WAAW,IACP,yDACA,oBACA;OACI,gBAAgB,SAAS;OACzB,gBAAgB,SAAS;OACzB,gBAAgB,SAAS;OACzB,gBAAgB,SAAS;MAC7B,CACJ;gBACA,oBAAC,gBAAgB,OAAjB;OACI,UAAU,MAAM;QACZ,EAAE,eAAe;QACjB,EAAE,gBAAgB;OACtB;OACa;OACb,WAAW;iBAEV,YAAY,UAAU,KAAA,KAAa,cAC9B,YAAY,KAAK,IAChB,mBAAmB;MAGP,CAAA;KACtB,CAAA,GAEL,oBAAC,gBAAgB,MAAjB;MAAsB,SAAA;gBAClB,oBAAC,mBAAD;OAAiB,MAAM,SAAS,UAAU,SAAS,SAAS,SAAS;OACjE,WAAW,IAAI,cAAc,OAAO,eAAe,IAAI;QACnD,QAAQ,SAAS;QACjB,QAAQ,SAAS,YAAY,SAAS;OAC1C,CAAC;MAAG,CAAA;KACU,CAAA,CACD;QAExB,gBACG,oBAAC,OAAD;KACI,WAAW,IAAI,iDAAiD;KAChE,UAAU,MAAM;MACZ,EAAE,eAAe;MACjB,EAAE,gBAAgB;KACtB;eACC;IACA,CAAA,CAER;;GAGL,oBAAC,gBAAgB,QAAjB;IAAwB,WAAW;cAC/B,oBAAC,gBAAgB,SAAjB;KAAmC;KAC/B,WAAW,IAAI,iBAAiB,2IAA2I,kBAAkB;eAC7L,oBAAC,gBAAgB,UAAjB;MAA0B,WAAW,IAAI,OAAO,iBAAiB;MAC7D,OAAO,EAAE,WAAW,+CAA+C;MAClE;KACqB,CAAA;IACL,CAAA;GACL,CAAA;EACN;;AAE9B,CAAC;AAED,OAAO,cAAc;AAUrB,IAAa,aAAa,MAAM,KAAK,SAAS,WAA2C,EACrF,OACA,UACA,UACA,aACmB;CAEnB,MAAM,cAAc,OAAO,KAAK;CAEhC,OAAO,qBAAC,gBAAgB,MAAjB;EAEH,OAAO;EACG;EACV,WAAW,IACP,UACA,0GACA,cACA,oJACA,mGACA,WAAW,kCAAkC,kBAC7C,gBACA,oBACA,SACJ;YAdG,CAeH,oBAAC,gBAAgB,UAAjB,EAA2B,SAAmC,CAAA,GAC9D,oBAAC,OAAD;GACI,WAAU;aACV,oBAAC,aAAD,EAAW,MAAM,SAAS,SAAU,CAAA;EACnC,CAAA,CACa;IAnBb,WAmBa;AAC1B,CAAC;AAQD,IAAa,cAAc,MAAM,KAAK,SAAS,YAAY,EACvD,OACA,UACA,aACiB;CACjB,OAAO,qBAAA,UAAA,EAAA,UAAA,CACH,oBAAC,gBAAgB,OAAjB;EACI,WAAW,IACP,sGACA,aACA,SACJ;YACC;CACkB,CAAA,GAEtB,QACH,EAAA,CAAA;AACN,CAAC;;;AClSD,SAAS,YAAY,OAKlB;CACC,OAAO,qBAAC,iBAAiB,MAAlB;EAAuB,MAAM,MAAM;YAAnC,CACH,oBAAC,iBAAiB,SAAlB;GAA0B,SAAA;aACtB,oBAAC,gBAAgB,OAAjB,EACI,WAAW,IAAI;IACP,0CAA0C,CAAC,MAAM,MAAM;IACvD,+FAA+F,MAAM,MAAM;GAC/G,GACA,MAAM,SACN,+GACA,+EACA,kHAAkH,EAEzH,CAAA;EACqB,CAAA,GAC1B,oBAAC,iBAAiB,SAAlB;GAA0B,MAAK;GACL,YAAY;GACZ,WAAW,IACP,kBACA,4BACA,wQACJ;aACrB,MAAM,MAAM,QAAQ,MAAM;EACL,CAAA,CACP;;AAC3B;AAEA,IAAM,SAAS,QAAM,YAGlB,EACI,WACA,OAAO,WACP,GAAG,SACJ,QAAQ;CACV,MAAM,CAAC,SAAS,cAAc,QAAM,SAAS,KAAK;CAElD,MAAM,mBACF,SAAS,UACH,YACA;CAEV,OACI,oBAAC,iBAAiB,UAAlB;EAA2B,eAAe;YACtC,qBAAC,gBAAgB,MAAjB;GACS;GACL,oBAAoB,WAAW,IAAI;GACnC,oBAAoB,WAAW,KAAK;GACpC,WAAW,IACP,4DACA,SACJ;GACA,GAAI;aARR,CAUI,oBAAC,gBAAgB,OAAjB;IACI,OAAO,EAAE,QAAQ,SAAS,UAAU,IAAI,EAAE;IAC1C,WAAW;cAEX,oBAAC,gBAAgB,OAAjB,EACI,WAAW,IAAI,mBAAmB;KAC9B,cAAc,CAAC,MAAM;KACrB,6CAA6C,MAAM;IACvD,CAAC,EACJ,CAAA;GACkB,CAAA,IAErB,MAAM,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,UAAU,oBAAC,aAAD;IAE7B;IACA;IACE;IACT,SAAS;GAAkB,GAJtB,KAIsB,CAAC,CACd;;CACC,CAAA;AAEnC,CAAC;AAED,OAAO,cAAc;;;AChFrB,IAAa,SAA+B,EACxC,UACA,OAAO,SACP,OACA,QAAQ,MACR,2BAA2B,MAC3B,MACA,cACA,sBACA,mBACA,aACA,WACA,OACA,kBACA,gBAAgB,QAChB,cACA,iBACA,GAAG,YACD;CACF,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAChD,MAAM,CAAC,WAAW,gBAAgB,SAAgC,IAAI;CAGtE,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,mBAAmB,oBAAoB,KAAA;CAE/D,gBAAgB;EACZ,MAAM,MAAM,4BAA4B;GACpC,aAAa,IAAI;EACrB,CAAC;EACD,aAAa,qBAAqB,GAAG;CACzC,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,iBAAyC;EAC3C,KAAK;EACL,QAAQ;EACR,MAAM;EACN,OAAO;CACX;CAEA,MAAM,cAAsC;EACxC,KAAK;EACL,QAAQ;EACR,MAAM;EACN,OAAO;CACX;CAEA,OACI,oBAAC,gBAAgB,MAAjB;EAAsB,MAAM,aAAa;EAC9B;EACO;YACd,qBAAC,gBAAgB,QAAjB;GAAwB,WAAW;aAAnC,CACK,4BAA4B,oBAAC,gBAAgB,SAAjB;IACzB,WAAW,IACP,gBACA,oDACA,uIACA,eACA,gBACJ;IACA,OAAO;GACV,CAAA,GACD,qBAAC,gBAAgB,SAAjB;IACI,GAAI;IACJ,KAAK;IACL,kBAAkB,UAAU,MAAM,eAAe;IAC3B;IACH;IACnB,WAAW,IACP,gBACA,YAAY,OACZ,oBACA,iBACA,yBACA,2CACA,mEACA,CAAC,YAAY,iBAAiB,gBAC9B,gGACA,cAAc,KAAK,0CACnB,SAAS,SAAS,SAAS,WAAW,WAAW,UACjD,SAAS,UAAU,SAAS,QAAQ,iBAAiB,oBACrD,aAAa,OAAO,gBAAgB,cACpC,CAAC,aAAa,CAAC,OAAO,eAAe,QAAQ,IAC7C,SACJ;IACO;cAvBX,CAyBI,oBAAC,gBAAgB,OAAjB;KAAuB,WAAU;eAC5B,SAAS;IACS,CAAA,GACvB,oBAAC,yBAAD;KAAyB,WAAW;KAC/B;IACoB,CAAA,CACJ;KACL;;CACN,CAAA;AAE9B;;;ACnHA,SAAS,cAAc,OAAe;CAClC,OAAO,SAAS,OAAO,EAAE,KAAK;AAClC;AAEA,IAAM,WAEF,EACA,QAAQ;CAEJ,YAAY;CAEZ,UAAU;CAEV,UAAU;CACV,QAAQ;CACR,KAAK;CACL,MAAM;CAEN,WAAW;AACf,EACJ;AAEA,SAAS,QAAQ,KAAY;CACzB,OACI,QAAQ,KAAA,KACR,QAAQ,QACR,OAAO,KAAK,GAAG,EAAE,WAAW,KAC3B,IAAI,qBAAqB,KAAK,CAAC,IAAI;AAE5C;AAEA,IAAa,mBAAmB,QAAM,WAAW,SAAS,iBACtD,OACA,KACF;CACE,MAAM,EACF,UACA,UACA,UACA,SACA,UAAU,GACV,OACA,OACA,SACA,QACA,SACA,iBACA,GAAG,UACH;CAEJ,MAAM,EAAE,SAAS,iBAAiB,QAAM,OAAO,SAAS,IAAI;CAC5D,MAAM,WAAW,QAAM,OAAyB,IAAI;CACpD,MAAM,YAAY,WAAW,KAAK,QAAQ;CAC1C,MAAM,YAAY,QAAM,OAA4B,IAAI;CACxD,MAAM,UAAU,QAAM,OAAO,CAAC;CAC9B,MAAM,CAAC,OAAO,YAAY,QAAM,SAAgB,EAC5C,kBAAkB,EACtB,CAAC;CAED,MAAM,kBAAkB,QAAM,kBAAkB;EAE5C,MAAM,QAAQ,SAAS;EACvB,IAAI,OAAO,WAAW,aAClB,OAAO,EACH,kBAAkB,EACtB;EAIJ,MAAM,gBAAgB,OAAgB,iBAAiB,KAAK;EAG5D,IAAI,cAAc,UAAU,OACxB,OAAO,EACH,kBAAkB,EACtB;EAGJ,MAAM,uBAAuB,SAAS,WAAW,UAAU;EAC3D,MAAM,eAAe,UAAU;EAE/B,qBAAqB,MAAM,QAAQ,cAAc;EACjD,aAAa,QAAQ,MAAM,SAAS,MAAM,eAAe;EACzD,IAAI,aAAa,MAAM,MAAM,EAAE,MAAM,MAIjC,aAAa,SAAS;EAG1B,MAAM,YAAY,cAAc;EAChC,MAAM,UACF,cAAc,cAAc,aAAa,IAAI,cAAc,cAAc,UAAU;EACvF,MAAM,SACF,cAAc,cAAc,iBAAiB,IAAI,cAAc,cAAc,cAAc;EAC/F,MAAM,YAAY,cAAc,cAAc,SAAS;EAGvD,MAAM,cAAc,qBAAqB;EAGzC,aAAa,QAAQ;EACrB,MAAM,kBAAkB,qBAAqB;EAG7C,IAAI,cAAc;EAElB,IAAI,SACA,cAAc,KAAK,IAAI,OAAO,OAAO,IAAI,iBAAiB,WAAW;EAEzE,IAAI,SACA,cAAc,KAAK,IAAI,OAAO,OAAO,IAAI,iBAAiB,WAAW;EAEzE,cAAc,KAAK,IAAI,aAAa,iBAAiB,SAAS;EAO9D,OAAO;GACH,kBALqB,eAAe,CAAC,mBAAmB,cAAc,eAAe,UAAU,SAAS;GAMxG,UAJa,KAAK,IAAI,cAAc,WAAW,KAAK;EAKxD;CACJ,GAAG;EAAC;EAAS;EAAS,MAAM;CAAW,CAAC;CAExC,MAAM,cAAc,QAAM,aAAa,WAAkB,aAAoB;EACzE,MAAM,EACF,kBACA,aACA;EAGJ,IACI,QAAQ,UAAU,OAChB,mBAAmB,KACb,KAAK,KAAK,UAAU,oBAAoB,KAAK,gBAAgB,IAAI,KACrE,UAAU,aAAa,WAC7B;GACE,QAAQ,WAAW;GACnB,OAAO;IACH;IACA;GACJ;EACJ;EACA,IAAA,QAAA,IAAA,aAA6B;OACrB,QAAQ,YAAY,IACpB,QAAQ,MACJ,CACI,qDACA,4EACJ,EAAE,KAAK,IAAI,CACf;EAAA;EAGR,OAAO;CACX,GAAG,CAAC,CAAC;CAEL,MAAM,aAAa,QAAM,kBAAkB;EACvC,MAAM,WAAW,gBAAgB;EAEjC,IAAI,QAAQ,QAAQ,GAChB;EAEJ,IAAI,UACA,SAAS,QAAQ;EAGrB,UAAU,cAAc;GACpB,OAAO,YAAY,WAAW,QAAQ;EAC1C,CAAC;CACL,GAAG;EAAC;EAAiB;EAAU;CAAW,CAAC;CAE3C,MAAM,0BAA0B,QAAM,kBAAkB;EACpD,MAAM,WAAW,gBAAgB;EAEjC,IAAI,QAAQ,QAAQ,GAChB;EAMJ,SAAS,gBAAgB;GACrB,UAAU,cAAc;IACpB,OAAO,YAAY,WAAW,QAAQ;GAC1C,CAAC;EACL,CAAC;CACL,GAAG,CAAC,iBAAiB,WAAW,CAAC;CAEjC,QAAM,gBAAgB;EAClB,MAAM,eAAe,eAAe;GAChC,QAAQ,UAAU;GAKlB,IAAI,SAAS,SACT,wBAAwB;EAEhC,CAAC;EACD,IAAI;EAEJ,MAAM,QAAQ,SAAS;EACvB,MAAM,kBAAkB;EACxB,IAAI,OAAO,WAAW,aAClB;EAGJ,gBAAgB,iBAAiB,UAAU,YAAY;EAEvD,IAAI,OAAO,mBAAmB,aAAa;GACvC,iBAAiB,IAAI,eAAe,YAAY;GAChD,eAAe,QAAQ,KAAK;EAChC;EAEA,aAAa;GACT,aAAa,MAAM;GACnB,gBAAgB,oBAAoB,UAAU,YAAY;GAC1D,IAAI,gBACA,eAAe,WAAW;EAElC;CACJ,GAAG,CAAC,uBAAuB,CAAC;CAE5B,sBAAsB;EAClB,WAAW;CACf,CAAC;CAED,QAAM,gBAAgB;EAClB,QAAQ,UAAU;CACtB,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,gBAAgB,UAAkD;EACpE,QAAQ,UAAU;EAElB,IAAI,CAAC,cACD,WAAW;EAGf,IAAI,UACA,SAAS,KAAK;CAEtB;CAEA,OACI,qBAAC,QAAM,UAAP,EAAA,UAAA,CACI,oBAAC,YAAD;EACW;EACP,UAAU;EACV,WAAW,MAAM;EACjB,KAAK;EACI;EACD;EAER,MAAM;EACN,OAAO;GACH,QAAQ,MAAM;GAGd,UAAU,MAAM,WAAW,WAAW,KAAA;GACtC,GAAG;EACP;EACU;EACV,GAAI;CACP,CAAA,GACD,oBAAC,YAAD;EACI,eAAA;EACA,WAAW,IAAI,MAAM,WAAW,MAAM,eAAe;EACrD,UAAA;EACA,KAAK;EACL,UAAU;EACV,OAAO;GACH,SAAS;GACT,GAAG,SAAO;GACV,GAAG;EACP;CACH,CAAA,CACW,EAAA,CAAA;AAExB,CAAC;AA6CD,SAAS,WACL,GAAG,MAC+B;;;;;;CAMlC,OAAO,QAAM,cAAc;EACvB,IAAI,KAAK,OAAO,QAAQ,OAAO,IAAI,GAC/B,OAAO;EAGX,QAAQ,aAAa;GACjB,KAAK,SAAS,QAAQ;IAClB,OAAO,KAAK,QAAQ;GACxB,CAAC;EACL;CAEJ,GAAG,IAAI;AACX;AAEA,SAAS,OACL,KACA,OACI;CACJ,IAAI,OAAO,QAAQ,YACf,IAAI,KAAK;MACN,IAAI,KACP,IAAI,UAAU;AAEtB;;;ACtTA,IAAa,YAAY,YAEjB,EACI,OACA,UACA,OACA,OAAO,QACP,YAAY,OACZ,WACA,SACA,SACA,UACA,OACA,cACA,WACA,aACA,OAAO,SACP,WACA,OACA,gBACA,YACA,UAAU,cACV,GAAG,cAEP,QACC;CAED,MAAM,cAAc,OAAO,IAAI;CAC/B,MAAM,WAAW,gBAAgB;CACjC,MAAM,SAAS,MAAM;CACrB,MAAM,UAAU,WAAW,MAAM;CACjC,MAAM,UAAU,GAAG,QAAQ;CAE3B,MAAM,CAAC,SAAS,cAAc,MAAM,SAAS,KAAK;CAClD,MAAM,WAAW,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU;CAEpE,gBAAgB;EACZ,MAAM,UAAU,YAAY,aAAa,WAAW,SAAS,UAAU;EACvE,IAAI,WAAW,SAAS,kBAAkB,SACtC,WAAW,IAAI;CAEvB,GAAG,CAAC,CAAC;CAEL,gBAAgB;EACZ,IAAI,SAAS,UAAU;EACvB,MAAM,eAAe,UAAe;GAChC,IAAI,MAAM,kBAAkB,aAAa,MAAM,OAAO,KAAK;EAC/D;EAEA,MAAM,UAAU,aAAa,WAAW,SAAS,UAAU;EAE3D,SAAS,iBAAiB,SAAS,WAAW;EAE9C,aAAa;GACT,SAAS,oBAAoB,SAAS,WAAW;EACrD;CACJ,GAAG,CAAC,UAAU,IAAI,CAAC;CAEnB,MAAM,QAAQ,YACV,oBAAC,YAAD;EACI,GAAK;EACL,KAAK;EACL,IAAI;EACJ,mBAAiB,QAAQ,UAAU,KAAA;EACnC,gBAAc,SAAS,KAAA;EACvB,iBAAe,YAAY,KAAA;EAC3B,aAAa,WAAW,YAAY,CAAC,QAAQ,cAAc,KAAA;EAChD;EACX,MAAM,OAAO,YAAY,WAAW,SAAS,OAAO,IAAK,WAAW;EACpE,OAAO,SAAS;EACN;EACV,eAAe,WAAW,IAAI;EAC9B,cAAc,WAAW,KAAK;EAC9B,OAAO;EACP,WAAW,IACP,YAAY,wBAAwB,IACpC,yFACA,QAAQ,cAAc,QACtB,YAAY,gFACZ,cACJ;CACH,CAAA,IAED,oBAAC,SAAD;EACI,GAAI;EACJ,KAAK;EACL,IAAI;EACJ,mBAAiB,QAAQ,UAAU,KAAA;EACnC,gBAAc,SAAS,KAAA;EACvB,iBAAe,YAAY,KAAA;EACjB;EACV,OAAO;EACP,WAAW,IACP,0DACA,cACA,iEACA,YAAY,wBAAwB,IACpC,WAAW,+BAA+B,2BAC1C;GACI,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;EAC7B,GACA,QACM,SAAS,UACL,cACA,cACJ,SAAS,aACL,WACA,SAAS,UACL,SACA,QACd,eAAe,UAAU,QACzB,YACA,mFACA,cACJ;EACA,aAAa,WAAW,YAAY,CAAC,QAAQ,cAAc,KAAA;EAChD;EACX,eAAe,WAAW,IAAI;EAC9B,cAAc,WAAW,KAAK;EACxB;EACN,OAAO,SAAS,YAAY,OAAO,MAAM,KAAK,IAAI,KAAK,SAAS;EACtD;CACb,CAAA;CAGL,OACI,qBAAC,OAAD;EACS;EACL,WAAW,IACP,kCACA,YAAY,gCAAgC,sBAC5C,WAAW,+BAA+B,2BAC1C,QAAQ,8CAA8C,IACtD;GACI,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;GACzB,gBAAgB,SAAS;EAC7B,GACA,SACJ;EACO;YAfX;GAiBK,SACG,oBAAC,YAAD;IACI,IAAI;IACJ,SAAS;IACT,WAAW,IACP,gCACA,SAAS,UAAU,UAAU,cAC7B,CAAC,QACK,UACI,mCACA,sDACJ,kCACN,WAAW,eAAe,EAC9B;IACA,QAAQ,YAAY;cAEnB;GACO,CAAA;GAGf;GAEA,gBACG,oBAAC,OAAD;IACI,WAAW,IACP,2EACA;KACI,QAAQ,SAAS;KACjB,QAAQ,SAAS;KACjB,QAAQ,SAAS,WAAW,SAAS;IACzC,CACJ;cAEC;GACA,CAAA;EAER;;AAEb,CACJ;AAEA,UAAU,cAAc;;;AC5OxB,IAAM,cAAc,cAAuC,EAAE,SAAS,WAAW,CAAC;AAclF,SAAgB,KAAK,EACjB,OACA,eACA,WACA,gBACA,UAAU,YACV,YACU;CACV,MAAM,qBAAqB,OAAuB,IAAI;CACtD,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAC1D,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,KAAK;CAC5D,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CAEtD,MAAM,oBAAoB;EACtB,IAAI,mBAAmB,SAAS;GAC5B,MAAM,EAAE,YAAY,aAAa,gBAAgB,mBAAmB;GACpE,kBAAkB,aAAa,CAAC;GAChC,mBAAmB,KAAK,KAAK,aAAa,WAAW,IAAI,WAAW;GACpE,gBAAgB,cAAc,WAAW;EAC7C;CACJ;CAEA,gBAAgB;EACZ,YAAY;EACZ,OAAO,iBAAiB,UAAU,WAAW;EAE7C,IAAI;EACJ,IAAI,mBAAmB,SAAS;GAC5B,WAAW,IAAI,eAAe,WAAW;GACzC,SAAS,QAAQ,mBAAmB,OAAO;GAC3C,IAAI,mBAAmB,QAAQ,mBAC3B,SAAS,QAAQ,mBAAmB,QAAQ,iBAAiB;EAErE;EAEA,aAAa;GACT,OAAO,oBAAoB,UAAU,WAAW;GAChD,UAAU,WAAW;EACzB;CACJ,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,UAAU,cAAgC;EAC5C,IAAI,mBAAmB,SAAS;GAC5B,MAAM,YAAY,mBAAmB;GACrC,MAAM,eAAe,KAAK,IAAI,UAAU,cAAc,GAAG,GAAG;GAC5D,MAAM,eAAe,UAAU,cAAc,cAAc,SAAS,CAAC,eAAe;GAEpF,UAAU,SAAS;IACf,MAAM;IACN,UAAU;GACd,CAAC;EAEL;CACJ;CAEA,MAAM,eAAe,eAAe,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC;CAE3D,OAAO,oBAAC,YAAY,UAAb;EAAsB,OAAO;YAChC,qBAAC,cAAc,MAAf;GACW;GACQ;GACf,WAAW,IAAI,sDAAsD,SAAS;aAHlF;IAKK,gBACG,oBAAC,UAAD;KACI,MAAK;KACL,UAAU,CAAC;KACX,cAAW;KACX,eAAe,OAAO,MAAM;KAC5B,WAAW,IACP,oHACA,kFACA,CAAC,iBAAiB,kCAAkC,yFACpD,sDAAA,gDACJ;eAEA,oBAAC,mBAAD,EAAiB,MAAM,SAAS,SAAU,CAAA;IACtC,CAAA;IAEZ,oBAAC,OAAD;KACI,KAAK;KACL,WAAU;KACV,UAAU;KACV,OAAO;MAAE,gBAAgB;MACzC,iBAAiB;KAAO;eAER,oBAAC,cAAc,MAAf;MAAoB,WAAW,IAC3B,YAAY,cAAc,mJAC1B,YAAY,cAAA,kDACZ,YAAY,UAAU,4BACtB,YAAY,UAAU,6BACtB,cAAc;MAEb;KACe,CAAA;IACnB,CAAA;IACJ,gBACG,oBAAC,UAAD;KACI,MAAK;KACL,UAAU,CAAC;KACX,cAAW;KACX,eAAe,OAAO,OAAO;KAC7B,WAAW,IACP,qHACA,kFACA,CAAC,kBAAkB,kCAAkC,yFACrD,sDAAA,gDACJ;eAEA,oBAAC,oBAAD,EAAkB,MAAM,SAAS,SAAU,CAAA;IACvC,CAAA;GAEI;;CACF,CAAA;AAC1B;AAUA,SAAgB,IAAI,EAChB,OACA,WACA,gBACA,UACA,YACS;CACT,MAAM,EAAE,YAAY,WAAW,WAAW;CAE1C,OACI,oBAAC,cAAc,SAAf;EACW;EACG;EACV,WAAW,IACP,kHACA,8GACA,oDACA,YAAY,cAAc,yMAC1B,YAAY,UAAU,IAClB,6MACA,mCACA,6EACA,yFACA,wCACA,kGACJ,GACA,YAAY,UAAU,IAClB,iEACA,oJACA,+GACJ,GACA,WACA,YAAY,cAAc,cAC9B;EAEC;CACkB,CAAA;AAE/B;;;AC1KA,IAAa,QAAQ,MAAM,MAAM,EACP,UACA,WACA,OACA,GAAG,WAEzB,oBAAC,SAAD;CACI,WAAW,IAAI,yEAAyE,SAAS;CAC1F;CACP,GAAI;CAEH;AACE,CAAA,CACV;AAOD,IAAa,YAAY,MAAM,MAAM,EACP,UACA,WACA,GAAG,WAE7B,oBAAC,SAAD;CACI,WAAW,IAAI,8IAA8I,SAAS;CACtK,GAAI;CAEP;AACM,CAAA,CACV;AAOD,IAAa,cAAc,MAAM,MAAM,EACP,UACA,WACA,GAAG,WAE/B,oBAAC,SAAD;CAAO,GAAI;WACX,oBAAC,MAAD;EACI,WAAW,IACP,oBACA,qEACA,qDACA,SACJ;EAEC;CACD,CAAA;AACG,CAAA,CACV;AASD,IAAa,WAAW,MAAM,MAAM,EACP,UACA,WACA,SACA,OACA,GAAG,WAE5B,oBAAC,MAAD;CACa;CACF;CACP,WAAW,IACP,gCACA,UAAU,8DAA8D,IACxE,SACJ;CACA,GAAI;CAEH;AACD,CAAA,CACP;AAYD,IAAa,YAAY,MAAM,MAAM,EACP,UACA,SAAS,OACT,QAAQ,IACR,OACA,WACA,OACA,SACA,GAAG,WACe;CAC5C,MAAM,MAAM,OAA6B,IAAI;CAE7C,OACI,oBAFY,UAAU,cAAc,IAAI,OAAO,MAAM,gBAAgB,OAAO,MAE5E;EACW;EACP,SAAS;EACJ;EACE;EACP,WAAW,IACP,wBACA,UAAU,WAAW,gBAAiB,UAAU,UAAU,eAAe,aACzE,SACJ;EACA,GAAI;EAEH;CACI,CAAA;AAEjB,CAAC;AAWD,SAAS,cAAc,SAAiD;CACpE,IAAI,SAAS;EACT,MAAM,MAAM,OAAO,KAAK,OAAO,EAAE,MAAM,QAAQ;GAC3C,OACI,IAAI,WAAW,eAAe,KAC9B,IAAI,WAAW,0BAA0B;EAEjD,CAAC;EACD,IAAI,KAAK;GACL,MAAM,WAAY,QAAkD;GACpE,MAAM,qBAAqB,UAAkC;IACzD,IAAI,cAAc,MAAM;IACxB,OAAO,eAAe,OAAO,YAAY,SAAS,UAC9C,cAAc,YAAY;IAE9B,OAAO;GACX;GACA,IAAI,QAAQ,kBAAkB,QAAQ;GACtC,QAAQ,kBAAkB,KAAK;GAC/B,OAAO,OAAO,aAAa;EAC/B;CACJ;AAEJ;AAEA,MAAM,cAAc;AACpB,UAAU,cAAc;AACxB,YAAY,cAAc;AAC1B,SAAS,cAAc;AACvB,UAAU,cAAc;;;AChJxB,SAAgB,QAAQ,EACI,SACA,UACA,MACA,cACA,MACA,aAAa,GACb,OACA,aACA,cACA,QACA,kBACA,iBACA,UAAU,MACV,QAAQ,OACR,iBACA,WACA,cACA,gBACa;CAErC,gBAAgB,WAAW,aAAa;CAGxC,MAAM,mBAAmB,mBAAmB;CAG5C,MAAM,iBAAkB,mBAAmB,oBAAoB,KAAA;CAE/D,IAAI,CAAC,SACD,OAAO,oBAAA,UAAA,EAAA,UAAG,QAAU,CAAA;CAExB,OAAO,qBAAC,iBAAiB,MAAlB;EAA6B;EACQ;EACP;YAF9B,CAIH,oBAAC,iBAAiB,SAAlB;GAA0B,SAAA;aACrB;EACqB,CAAA,GAE1B,oBAAC,iBAAiB,QAAlB;GAAyB,WAAW;aAChC,qBAAC,iBAAiB,SAAlB;IACI,WAAW,IAAI,YACX,uBAAuB,SAAS;IAC9B;IACM;IACL;IACM;IACC;IACN;IACU;IACD;IACH;IACA;cAZlB,CAcK,UACD,oBAAC,iBAAiB,OAAlB,EAAwB,WAAU,mCAAmC,CAAA,CAC/C;;EACL,CAAA,CACN;;AAC3B;AAEA,IAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrFtB,IAAM,YAAY,UAAsB;CACpC,QAAQ,OAAR;EACI,KAAK,WACD,OAAO;EACX,KAAK,aACD,OAAO;EACX,KAAK,WACD,OAAO;EACX,KAAK,SACD,OAAO;EACX,SACI,OAAO;CACf;AACJ;AAEA,IAAa,QAAQ,MAAM,YAAwC,EACE,QAAQ,WACR,YAAY,OACZ,YACD,QAAQ;CACxE,OACI,qBAAC,OAAD;EAAU;EAAK,WAAU;YAAzB,CACK,UACD,oBAAC,QAAD,EACI,WAAW;UACjB,SAAS,KAAK,EAAA;;UAEd,YAAY,YAAY,YACrB,CAAA,CACA;;AAEb,CAAC;AAED,MAAM,cAAc;;;ACrCpB,SAAgB,mBAA8C,OAA0B;CAEpF,MAAM,CAAC,eAAe,oBAAoB,SAAqB,MAAM,SAAS,EAAE;CAChF,MAAM,mBAAmB,OAAmB,MAAM,SAAS,EAAE;CAC7D,MAAM,WAAW,OAAkD,KAAA,CAAS;CAG5E,gBAAgB;EACZ,MAAM,gBAAgB,MAAM,SAAS;EACrC,IAAI,kBAAkB,iBAAiB,SAAS;GAC5C,iBAAiB,aAAa;GAC9B,iBAAiB,UAAU;EAC/B;CACJ,GAAG,CAAC,MAAM,KAAK,CAAC;CAGhB,gBAAgB;EACZ,aAAa;GACT,IAAI,SAAS,SAAS,aAAa,SAAS,OAAO;EACvD;CACJ,GAAG,CAAC,CAAC;CAEL,MAAM,cAAc,aAAa,OAAmB,UAAiC;EACjF,IAAI,SAAS,SAAS;GAClB,aAAa,SAAS,OAAO;GAC7B,SAAS,UAAU,KAAA;EACvB;EACA,IAAI,UAAU,MAAM,SAAS,MAAM,UAAU;GACzC,iBAAiB,UAAU;GAC3B,MAAM,IAAI;IACN,GAAG;IACH,QAAQ;KACJ,GAAG,OAAO;KACH;KACP,MAAM,MAAM;IAChB;GACJ;GACA,MAAM,SAAS,CAAC;EACpB;CACJ,GAAG;EAAC,MAAM;EAAO,MAAM;EAAU,MAAM;CAAI,CAAC;CAE5C,MAAM,mBAAmB,aAAa,UAAgC;EAClE,MAAM,WAAW,MAAM,OAAO;EAC9B,iBAAiB,QAAQ;EAEzB,IAAI,SAAS,SAAS,aAAa,SAAS,OAAO;EAEnD,MAAM,YAAY;GACd,GAAG;GACH,QAAQ;IACJ,GAAG,OAAO;IACV,MAAM,OAAO,QAAQ;GACzB;EACJ;EAEA,SAAS,UAAU,iBAAiB;GAChC,YAAY,UAAU,SAAiC;EAC3D,GAAG,GAAG;CACV,GAAG,CAAC,WAAW,CAAC;CAEhB,MAAM,iBAAiB,aAAa,UAA8C;EAC9E,YAAY,eAAe,KAA6B;EACxD,MAAM,SAAS,KAAK;CACxB,GAAG;EAAC;EAAe;EAAa,MAAM;CAAM,CAAC;CAE7C,OAAO,oBAAC,WAAD;EAAW,GAAI;EAClB,UAAU;EACV,QAAQ;EACR,OAAO;CAAoB,CAAA;AACnC;;;ACjEA,IAAM,SAAS;;;;;;;;;;AAWf,SAAgB,SAAS,EACI,OACA,QACA,aACc;CAEvC,gBAAgB,YAAY,MAAM;CAElC,OAAO,oBAAC,QAAD;EACH,OAAO;GACH,OAAO,QAAQ,GAAG,MAAM,MAAM;GAC9B,QAAQ,SAAS,GAAG,OAAO,MAAM;EACrC;EACA,WACA,IACI,kCACA,8DACA,yBACA,SAAS;YAEb,oBAAC,QAAD;GACI,WAAU;GACV,OAAO,EAAE,WAAW,oCAAoC;EAC3D,CAAA;CACC,CAAA;AACV;;;;;;;ACbA,SAAgB,kBAA6C,EACzD,OACA,eACA,SACA,aAC0B;CAC1B,OACI,oBAAC,OAAD;EAAK,MAAK;EAAQ,cAAW;EAAiB,WAAW,IAAI,gFAAgF,SAAS;YACjJ,QAAQ,KAAK,WACV,qBAAC,UAAD;GAEI,MAAK;GACL,UAAU,MAAM;IACZ,EAAE,gBAAgB;IAClB,IAAI,CAAC,OAAO,UACR,cAAc,OAAO,KAAK;GAElC;GACA,UAAU,OAAO;GACjB,gBAAc,UAAU,OAAO;GAC/B,iBAAe,OAAO,YAAY,KAAA;GAClC,WAAW,IACP,0FACA,UAAU,OAAO,QACX,8EACA,yFACN,OAAO,YAAY,+BACvB;aAlBJ,CAoBK,OAAO,MACR,oBAAC,QAAD;IAAM,WAAU;cAAuB,OAAO;GAAY,CAAA,CACtD;KArBC,OAAO,KAqBR,CACX;CACA,CAAA;AAEb;;;ACnBA,IAAa,qBAAqB,MAAM,KACpC,SAAS,mBAAsD,EAC3D,iBACA,aACA,iBACA,MACA,cACA,gBACA,QACA,QACA,qBACA,mBACA,wBACA,YACA,eAC2B;CAE3B,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAE5C,MAAM,CAAC,YAAY,iBAAiB,MAAM,SAAS,KAAK;CACxD,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAS,KAAK;CAEhD,MAAM,sBAAsB,aAAa,WAA6B;EAClE,cAAc,IAAI;CACtB,GAAG,CAAC,CAAC;CAEL,MAAM,SAAS,aAAa,mBAA0D,uBAAiC;EACnH,eAAe,QAAQ,iBAAiB;EACxC,IAAI,uBAAuB,KAAA,GACvB,cAAc,kBAAkB;CACxC,GAAG,CAAC,QAAQ,cAAc,CAAC;CAK3B,MAAM,UAAU,EAFgB,oBAAoB,eAAe,kBAAkB,OAExC,WAHhB,oBAAoB;CAKjD,OACI,oBAAC,eAAD,EAAA,UACI,qBAAC,OAAD;EACI,WAAW,IAAI,2FACX,aACM,0CACA,qCACN,+GACA,CAAC,cAAc,oJACf,OAAO,SAAS,uBAAuB,gBACvC,eAAe,aACnB;EACA,OAAO;GACH,MAAM,OAAO,SAAS,IAAI,KAAA;GAC1B,UAAU,OAAO;GACjB,UAAU,OAAO;EACrB;EACA,oBAAoB,WAAW,IAAI;EACnC,mBAAmB,WAAW,IAAI;EAClC,oBAAoB,WAAW,KAAK;YAjBxC;GAoBI,oBAAC,OAAD;IAAK,WAAU;cACX,qBAAC,OAAD;KACI,WAAW,6BAA6B,OAAO,YAAY;eAD/D,CAGK,OAAO,QACJ,oBAAC,OAAD;MAAK,WAAU;gBACV,MAAM,eAAe,OAAO,IAAI,IAC7B,MAAM,aAAa,OAAO,MAAiC;OACvD,MAAM;OACN,WAAW,IAAK,OAAO,KAAiC,OAAO,WAAW,eAAe;MAC7F,CAAC,IAED,OAAO;KAEV,CAAA,GAGT,oBAAC,OAAD;MACI,WAAU;MACV,OAAO;OACH,iBAAiB;OACjB,iBAAiB;OACjB,gBAAgB,OAAO;MAC3B;gBACC,OAAO;KACP,CAAA,CAEJ;;GACJ,CAAA;GACL,qBAAA,UAAA,EAAA,UAAA,CAEK,0BACG,oBAAC,wBAAD,EAAwB,SAAS,WAAW,WAAY,CAAA,GAE3D,OAAO,aAAa,QAAQ,WAAW,eACpC,oBAAC,OAAD;IAAK,WAAU;cACX,oBAAC,OAAD;KAAO,OAAM;KACT,WAAW,CAAC;eACZ,qBAAC,YAAD;MACI,MAAM;MACN,WAAW,WAAW,aAAa,iCAAiC,KAAA;MACpE,eAAe;OACX,aAAa,OAAO,GAA+B;MACvD;gBALJ;OAOK,CAAC,QACE,oBAAC,aAAD;QAAa,MAAM;QAAI,WAAU;OAAiB,CAAA;OACrD,SAAS,SACN,oBAAC,aAAD;QAAa,MAAM;QAAI,WAAU;OAAiB,CAAA;OACrD,SAAS,UACN,oBAAC,aAAD;QAAa,MAAM;QAAI,WAAU;OAA4B,CAAA;MACzD;;IACT,CAAA;GACN,CAAA,CAEX,EAAA,CAAA;GAED,OAAO,UAAU,qBAAqB,oBAAC,OAAD;IAAK,WAAU;cAClD,oBAAC,OAAD;KAAO,OAAM;KACT,WAAW,CAAC;eAEZ,oBAAC,SAAD;MACI,MAAM;MACN,cAAc;MACd,WAAW,SAAS,WAAW,KAAA;MAC/B,OAAO;MACP,SACI,oBAAC,YAAD;OACI,WAAW,WAAW,aAAa,iCAAiC,KAAA;OACpE,MAAM;OACN,SAAS;iBACT,oBAAC,cAAD;QAAY,MAAM;QAAI,WAAU;OAAgB,CAAA;MACxC,CAAA;gBAEhB,oBAAC,YAAD;OAAoB;OACR;OACC;OACT,gBAAgB;OACG;OACX;OACG;MAAW,CAAA;KAErB,CAAA;IAEN,CAAA;GAEN,CAAA;GAEJ,OAAO,aAAa,oBAAC,OAAD;IACjB,KAAK;IACL,eAAY;IACZ,WAAW,IACP,2DACA,WAAW,oCACf;IACA,gBAAgB,MAAM;KAClB,EAAE,gBAAgB;KAClB,IAAI,qBACA,oBAAoB,aAAa,MAAM;IAE/C;GACH,CAAA;EACA;IAEM,CAAA;AAEvB,GAAG,SAAK;AAEZ,SAAS,WAAc,EACnB,QACA,gBACA,QACA,SACA,mBACA,QACA,aACmB;CAEnB,MAAM,KAAK,OAAO;CAElB,MAAM,CAAC,gBAAgB,qBAAqB,SAA2D,MAAM;CAE7G,gBAAgB;EACZ,kBAAkB,MAAM;CAC5B,GAAG,CAAC,MAAM,CAAC;CAEX,IAAI,CAAC,OAAO,QAAQ,OAAO;CAE3B,MAAM,eAAe;EACjB,eAAe,gBAAgB,KAAK;CACxC;CAEA,MAAM,SAAS,OAAyB;EACpC,eAAe,KAAA,GAAW,KAAK;CACnC;CAEA,MAAM,cAAc,CAAC,CAAC;CAEtB,MAAM,cAAc,kBAAkB;EAClC;EACA,aAAa;EACb,gBAAgB;EAChB;EACA;EACA;CACJ,CAAC;CAED,IAAI,CAAC,aAAa,OAAO;CACzB,OACI,qBAAC,QAAD;EAAM,YAAY;EACd,WAAW,MAAM;GACb,EAAE,gBAAgB;GAClB,EAAE,eAAe;GACjB,OAAO;EACX;EACA,WAAW;YANf;GAOI,oBAAC,OAAD;IACI,WAAW,IAAI,oBAAoB,qCAAqC;cACvE,OAAO,SAAS;GAChB,CAAA;GACJ,eAAe,oBAAC,OAAD;IAAK,WAAU;cAC1B;GACA,CAAA;GACL,qBAAC,OAAD;IAAK,WAAU;cAAf,CACI,oBAAC,QAAD;KACI,WAAU;KACV,UAAU,CAAC;KACX,SAAS;KACT,MAAK;KACL,cAAW;KACX,SAAS;eAAO;IAAa,CAAA,GACjC,oBAAC,QAAD;KACI,MAAK;eAAS;IAAc,CAAA,CAC/B;;EACH;;AAGd;;;AClRA,IAAM,wBAAwB,EAC1B,QACA,aACA,YACA,YACA,gBACA,QACA,gBACA,aACA,cACA,qBACA,mBACA,YACA,kBAeE;CACF,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAElD,MAAM,EACF,YACA,WACA,YACA,WACA,eACA,YAAY;EACZ,IAAI,OAAO;EACX,UAAU,CAAC,eAAe,OAAO;CACrC,CAAC;CAED,MAAM,QAAQ;EAEV,WAAW,YAAY,cAAc,UAAU,EAAE,OAAO,KAAA;EAExD,YAAY,aAAa,KAAA,IAAY;EACrC,UAAU,OAAO;EACjB,UAAU,OAAO;EACjB,OAAO,OAAO;CAClB;CAGA,MAAM,oBAAoB,cAAc;EACpC,GAAG;EACH,gBAAgB,MAA0B;GACtC,cAAc,IAAI;GAClB,WAAW,gBAAgB,CAAC;EAChC;EACA,mBAAmB,cAAc,KAAK;EACtC,uBAAuB,cAAc,KAAK;CAC9C,IAAI,CAAC;CAGL,MAAM,gBAAgB;EAClB,IAAI,CAAC,YACD,cAAc,KAAK;CAE3B,GAAG,CAAC,UAAU,CAAC;CAEf,OACI,oBAAC,OAAD;EACI,KAAK;EACE;EACP,WAAW,IACP,wBACA,OAAO,UAAU,oBACrB;EACA,GAAI;EACJ,GAAI;YAEJ,oBAAC,oBAAD;GACI,iBAAiB,WAAW;GACf;GACb,iBAAiB;GACD;GACR;GACR,MAAM,mBAAmB,OAAO,MAAM,cAAc,KAAA;GACtC;GACO;GACb;GACW;GACnB,wBAAwB,OAAO;GAC/B,YAAY,cAAc;GACb;EAAa,CAAA;CAC7B,CAAA;AAEb;AAEA,IAAa,yBAAyB,EAClC,SACA,aACA,cACA,gBACA,gBACA,QACA,gBACA,mBACA,mBACA,oBACA,sBACA,MACA,cAAc,cACd,YAAY,IACZ,kBACA,eAAe,SACsC;CAErD,MAAM,aAAa,cAAc,QAAQ,UAAU,UAA0B,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC;CACjG,MAAM,CAAC,YAAY,iBAAiB,SAAS,EAAE;CAE/C,MAAM,oBAAoB,aAAa,OAAe,OAAe,QAAiB;EAClF,MAAM,SAAS,QAAQ;EACvB,MAAM,WAAW;EACjB,MAAM,WAAW;EACjB,MAAM,WAAW,QAAQ,WAAW,WAAY,QAAQ,WAAW,WAAW;EAC9E,MAAM,SAAS;GACX,OAAO;GACP,KAAK,OAAO;GACZ,QAAQ;IACJ,GAAG;IACH,OAAO;GACX;EACJ;EACA,IAAI,CAAC,KACD,eAAe,MAAM;OAErB,kBAAkB,MAAM;CAChC,GAAG;EAAC;EAAS;EAAgB;CAAiB,CAAC;CAE/C,MAAM,mBAAmB,aAAa,MAAkB;EACpD,IAAI,cAAc,GAAG;GACjB,MAAM,OAAO,WAAW,YAAY,SAAS,eAAe,sBAAsB,EAAE;GACpF,IAAI,CAAC,MAAM;GACX,OAAO,EAAE,UAAU;EACvB;CAEJ,GAAG,CAAC,YAAY,UAAU,CAAC;CAE3B,MAAM,oBAAoB,aAAa,eAAwB;EAC3D,SAAS,KAAK,MAAM,SAAS,aAAa,eAAe;CAC7D,GAAG,CAAC,CAAC;CAEL,MAAM,oBAAoB,aAAa,MAAkB;EACrD,EAAE,gBAAgB;EAClB,EAAE,eAAe;EACjB,MAAM,WAAW,iBAAiB,CAAC;EACnC,IAAI,UACA,kBAAkB,YAAY,UAAU,KAAK;CACrD,GAAG;EAAC;EAAmB;EAAkB;CAAU,CAAC;CAEpD,MAAM,kBAAkB,aAAa,MAAkB;EACnD,EAAE,gBAAgB;EAClB,EAAE,eAAe;EACjB,MAAM,WAAW,iBAAiB,CAAC;EACnC,IAAI,UACA,kBAAkB,YAAY,UAAU,IAAI;EAChD,cAAc,EAAE;EAChB,kBAAkB,KAAK;CAC3B,GAAG;EAAC;EAAmB;EAAkB;EAAY;CAAiB,CAAC;CAEvE,MAAM,0BAA0B,kBAAkB;EAC9C,SAAS,oBAAoB,aAAa,iBAAiB;EAC3D,SAAS,oBAAoB,WAAW,eAAe;CAC3D,GAAG,CAAC,mBAAmB,eAAe,CAAC;CAEvC,MAAM,wBAAwB,kBAAkB;EAC5C,SAAS,iBAAiB,aAAa,iBAAiB;EACxD,SAAS,iBAAiB,WAAW,eAAe;CACxD,GAAG,CAAC,mBAAmB,eAAe,CAAC;CAEvC,gBAAgB;EACZ,IAAI,cAAc,GACd,sBAAsB;OAEtB,wBAAwB;EAE5B,aAAa;GACT,wBAAwB;EAC5B;CACJ,GAAG;EAAC;EAAuB;EAAY;CAAuB,CAAC;CAE/D,MAAM,sBAAsB,aAAa,UAAkB;EACvD,cAAc,KAAK;EACnB,kBAAkB,IAAI;CAC1B,GAAG,CAAC,iBAAiB,CAAC;CAEtB,OACI,oBAAA,UAAA,EAAA,UACI,qBAAC,OAAD;EACI,WAAW,IAAI,oBAAoB,oGAAoG;EACvI,OAAO,EAAE,QAAQ,aAAa;YAFlC,CAGK,QAAQ,KAAK,QAAQ,gBAAgB;GAClC,MAAM,eAAe,UAAU,UAAU,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAA;GACnF,MAAM,wBACF,eACO,MAAM,QAAQ,aAAa,EAAE,IAAK,aAAwD,KAAM,eACjG,KAAA;GAEV,MAAM,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;GAGxC,OACI,oBAAC,eAAD,EAAA,UACI,oBAAC,sBAAD;IACY;IACK;IACD;IACA;IACI;IAChB,QAAQ;IACQ;IACH;IACC;IACO;IACF;IACP,YAhBL,qBAAqB,OAAO;IAiBtB;GAChB,CAAA,EACU,GAhBK,YAAY,OAAO,GAgBxB;EAEvB,CAAC,GAEA,sBAAsB,oBAAC,oBAAD,CAAoB,CAAA,CAE1C;IACP,CAAA;AAEV;;;ACnPA,IAAa,kBAAkB,MAAM,KACjC,SAAS,gBAAmD,EACxD,SACA,UACA,UACA,YACA,WACA,OACA,UACA,gBACwB;CAExB,MAAM,UAAU,aAAa,UAAgC;EACzD,IAAI,YACA,WAAW;GACP;GACA;GACA;EACJ,CAAC;CACT,GAAG;EAAC;EAAY;EAAS;CAAQ,CAAC;CAElC,OACI,oBAAC,OAAD;EACI,WAAW,IACP,yGACA,eAAe,aAAa,OAAO,IAAI,IACvC;GACI,qDAAqD;GACrD,mBAAmB;EACvB,CACJ;EACS;EACT,OAAO;GACH,GAAI;GACJ,QAAQ;GACR,OAAO;EACX;EAEC;CACA,CAAA;AAGb,GACA,SACJ;;;ACzBA,IAAa,mBAAmB,MAAM,KAClC,SAAS,iBAAoB,OAAiC;CAC1D,OAAO,MAAM,UAAU,MAAM,aACzB;EACI,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,UAAU,MAAM;EAChB,aAAa;EACb,QAAQ,MAAM;EACd,SAAS,MAAM;EACf,aAAa,MAAM;EACnB,OAAO,MAAM,OAAO;EACpB,iBAAiB,MAAM;EACvB,eAAe,MAAM;EACrB,oBAAoB,MAAM;EAC1B,YAAY,MAAM;EAClB,aAAa,MAAM;EACnB,QAAQ,MAAM;EACd,WAAW,MAAM;CACrB,CACJ,IAAI;AACR,IACC,GAAG,MAAM;CACN,OAAO,UAAM,EAAE,SAAS,EAAE,OAAO,KAC7B,UAAM,EAAE,QAAQ,EAAE,MAAM,KACxB,UAAM,EAAE,UAAU,EAAE,QAAQ,KAC5B,EAAE,aAAa,EAAE,YACjB,EAAE,gBAAgB,EAAE,eACpB,EAAE,eAAe,EAAE,cACnB,EAAE,gBAAgB,EAAE,eACpB,EAAE,WAAW,EAAE,UACf,UAAM,EAAE,WAAW,EAAE,SAAS;AACtC,CACJ;;;ACtBA,IAAM,qBAAqB,cAAiE,IAA0D;AACtJ,mBAAmB,cAAc;AAQjC,IAAM,mBAAmB,YAA+C,EACpE,UACA,GAAG,QACe,QAAQ;CAE1B,OACI,oBAAC,mBAAmB,UAApB,EAAA,WACM,sBAAsB;EACpB,MAAM,aAAa,kBAAkB;EACrC,MAAM,eAAe,kBAAkB,gBAAgB;EACvD,OACI,qBAAA,UAAA,EAAA,UAAA,CACI,oBAAC,OAAD;GACI,IAAI;GACJ,OAAO;IACH,UAAU;IACV,QAAQ;IACR,QAAQ;GACZ;aACA,qBAAC,OAAD;IACS;IACL,GAAI;IACJ,OAAO;KACH,GAAG,MAAM;KACT,SAAS,OAAO,MAAM,OAAO,WAAW,WAAW,KAAK,MAAM,SAAS,WAAY,MAAM,OAAO,UAAqB,GAAG,KAAK;KAC7H,WAAW;KACX,UAAU;IACd;cARJ,CASI,oBAAC,OAAD;KAAK,OAAO;MAAE,UAAU;MACxD,KAAK;MACL,QAAQ;KAAG;eACyB,oBAAC,uBAAD,EAAuB,GAAI,kBAAmB,CAAA;IAC7C,CAAA,GACJ,CAAC,cAAc,QACf;;EAEJ,CAAA,GAEJ,cAAc,oBAAC,OAAD;GAAK,OAAO;IACvB,UAAU;IACV,KAAK,kBAAkB,gBAAgB;IACvC,UAAU;IACV,QAAQ,eAAe,kBAAkB,gBAAgB,GAAG;IAC5D,WAAW,QAAS,kBAAkB,gBAAgB,GAAI;IAC1D,MAAM;GACV;aAAI;EAAgB,CAAA,CAEtB,EAAA,CAAA;CAEV,EACyB,CAAA;AAErC,CAAC;;;;;;;;;AAWD,IAAa,eAAe,MAAM,KAC9B,SAAS,aAAgD,EACrD,MACA,mBACA,cACA,YAAY,KACZ,YAAY,IACZ,eAAe,IACf,SAAS,aACT,YACA,gBACA,mBACA,QAAQ,aACR,wBACA,gBACA,QACA,OACA,gBACA,gBACA,UAAU,cACV,SACA,cACA,UACA,mBACA,cACA,OACA,WACA,cACA,oBACA,gBAAgB,GAChB,sBACA,aACqB;CAErB,MAAM,iBAAqC,SAAS,OAAO,KAAK,KAAA;CAChE,MAAM,cAA0C,SAAS,OAAO,KAAK,KAAA;CAErE,MAAM,CAAC,SAAS,cAAc,SAAS,WAAW;CAElD,MAAM,WAAW,OAAuB,IAAI;CAC5C,MAAM,4BAA4B,OAAe,CAAC;CAElD,MAAM,kBAAkB,oBAAoB,cAAc,GAAG;CAG7D,MAAM,CAAC,kBAAkB,uBAAuB,SAAwB,IAAI;CAE5E,MAAM,UAAU,WACZ,UAAU,eAAe,EACrB,sBAAsB,EAClB,UAAU,EACd,EACJ,CAAC,CACL;CAEA,MAAM,kBAAkB,aAAa,UAA0B;EAC3D,oBAAoB,MAAM,OAAO,EAAY;CACjD,GAAG,CAAC,CAAC;CAEL,MAAM,gBAAgB,aAAa,UAAwB;EACvD,MAAM,EACF,QACA,SACA;EACJ,oBAAoB,IAAI;EAExB,IAAI,QAAQ,OAAO,OAAO,KAAK,MAAM,sBAAsB;GACvD,MAAM,WAAW,QAAQ,WAAW,QAAQ,IAAI,QAAQ,OAAO,EAAE;GACjE,MAAM,WAAW,QAAQ,WAAW,QAAQ,IAAI,QAAQ,KAAK,EAAE;GAE/D,IAAI,aAAa,MAAM,aAAa,IAAI;IACpC,MAAM,aAAa,UAAU,SAAS,UAAU,QAAQ;IACxD,WAAW,UAAU;IACrB,qBAAqB,UAAU;GACnC;EACJ;CACJ,GAAG,CAAC,SAAS,oBAAoB,CAAC;CAElC,MAAM,mBAAmB,kBAAkB;EACvC,oBAAoB,IAAI;CAC5B,GAAG,CAAC,CAAC;CAGL,gBAAgB;EACZ,IAAI,SAAS,WAAW,eAAe;GACnC,MAAM,EAAE,eAAe,SAAS;GAChC,SAAS,QAAQ,SAAS,YAAY,aAAa;EACvD;CACJ,GAAG,CAAC,UAAU,aAAa,CAAC;CAE5B,gBAAgB;EACZ,WAAW,WAAW;CAC1B,GAAG,CAAC,WAAW,CAAC;CAIhB,MAAM,CAAC,YAAY,UAAU,WAAW;EACpC,UAAU;EACV,QAAQ;EAER,YAAY;CAChB,CAAC;CAED,MAAM,yBAAyB,aAAa,WAA6C;EACrF,YAAW,gBACP,YAAY,KAAK,WACb,OAAO,QAAQ,OAAO,OAAO,MAAM,OAAO,SAAS,MACvD,CACJ;CACJ,GAAG,CAAC,CAAC;CAEL,MAAM,4BAA4B,aAAa,WAA6C;EACxF,WAAW,QAAQ,KAAK,WAAW,OAAO,QAAQ,OAAO,OAAO,MAAM,OAAO,SAAS,MAAM,CAAC;EAC7F,IAAI,gBACA,eAAe,MAAM;EAEzB,IAAI,mBACA,kBAAkB,MAAM;CAEhC,GAAG;EAAC;EAAS;EAAgB;CAAiB,CAAC;CAG/C,MAAM,YAAY,OAAqD,KAAA,CAAS;CAEhF,gBAAgB;EACZ,UAAU,UAAU;CACxB,GAAG,CAAC,WAAW,CAAC;CAEhB,MAAM,cAAc,kBAAkB;EAClC,0BAA0B,UAAU;EACpC,IAAI,SAAS,SACT,SAAS,QAAQ,SAAS,SAAS,SAAS,YAAY,CAAC;CAEjE,GAAG,CAAC,CAAC;CAEL,MAAM,eAAe,aAAa,QAAgB;EAE9C,MAAM,SAAS,mBAAmB,OAAO,gBAAgB;EAEzD,MAAM,UADQ,mBAAmB,OAAO,gBAAgB,QAChC,SAAU,SAAS,KAAA,IAAY;EACvD,MAAM,kBAAsC,SAAS,KAAA,IAAY;EAEjE,MAAM,SAAS,UAAU;EAEzB,MAAM,YAAkD,WAAW,kBAAkB,CAAC,iBAAiB,OAAO,IAAI,KAAA;EAClH,IAAI;OACI,0BAA0B,CAAC,uBAAuB,QAAQ,SAAS;QAC/D,gBACA,eAAe,KAAA,CAAS;GAAA;EAAA;EAIpC,IAAI,mBACA,kBAAkB;EAGtB,IAAI,gBACA,eAAe,SAAS;EAG5B,YAAY;CAChB,GAAG;EAAC;EAAwB;EAAa;EAAgB;EAAmB;EAAgB;EAAa;CAAc,CAAC;CAExH,MAAM,YAAY,KAAK,KAAK,MAAM,UAAU,KAAK,YAAY,OAAO,QAAQ,CAAC;CAE7E,MAAM,uBAAuB,aAAa,iBAAyB;EAC/D,IAAI,iBAAiB,MAAM,UAAU,KAAK,KAAK,eAAe,0BAA0B,UAAU,WAAW;GACzG,0BAA0B,UAAU;GACpC,aAAa;EACjB;CACJ,GAAG,CAAC,MAAM,QAAQ,YAAY,CAAC;CAE/B,MAAM,WAAW,aAAa,EAC1B,iBACA,cACA,+BAKE;EACF,IAAI,cACA,gBAAgB;GACZ;GACA;GACA;EACJ,CAAC;EAEL,IAAI,CAAC,4BAA6B,gBAAgB,YAAY,WAC1D,qBAAqB,YAAY;CACzC,GAAG,CAAC,WAAW,oBAAoB,CAAC;CAEpC,MAAM,yBAAyB,aAAa,QAA4B,sBAA6D;EAEjI,0BAA0B,UAAU;EACpC,MAAM,SAAS,UAAU;EACzB,IAAI,iBAAmD,SAAS,EAAE,GAAG,OAAO,IAAI,CAAC;EAEjF,IAAI,CAAC,mBACD,OAAO,eAAe,OAAO;OAE7B,eAAe,OAAO,OAAO;EAIjC,IAAI,EADgC,CAAC,0BAA0B,uBAAuB,gBAD9B,kBAAkB,cAAc,CAAC,gBAAgB,WAAW,IAAI,KAAA,CACT,IAE3G,iBAAiB,oBAAoB,GAAG,OAAO,MAAM,kBAAkB,IAA0D,CAAC;EAGtI,IAAI,gBAAgB,eAAe,cAAc;CACrD,GAAG;EAAC;EAAwB;EAAa;EAAgB;CAAc,CAAC;CAExE,MAAM,QAAQ,CAAC,YAAY,MAAM,UAAU,OAAO;CAClD,MAAM,aAAc,UAAU,MAAM,UAAU,OAAO,IAC/C,qBAAC,cAAD;EAAc,UAAU;EACtB,WAAU;YADZ,CAGE,oBAAC,YAAD;GAAY,SAAS;aAChB;EACO,CAAA,GAEX,OAAO,WAAW,oBAAC,kBAAD,EAAkB,MAAM,MAAM,QAAS,CAAA,CAEhD;MACX,QACI,UACG,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,kBAAD,EAAkB,MAAK,QAAQ,CAAA;CAC9B,CAAA,IACH,oBAAC,OAAD;EACE,WAAU;YACT;CACA,CAAA,IACP,KAAA;CAEV,MAAM,wBAAwB,eAAe;EACzC;EACW;EACG;EACd;EACA;EACA;EACA;EACA;EACA,gBAAgB;EAChB,mBAAmB;EACnB,QAAQ,UAAU;EAClB;EACA,gBAAgB;EAChB;EACA,UAAU,YAAY;EACtB;EACA;EACA;EACA;EACA,sBAAsB,wBAAwB,eAAqC;GAC/E,WAAW,UAAU;GACrB,qBAAqB,UAAU;EACnC,IAAI,KAAA;EACJ;EACA;CACJ,IAAI;EAAC;EAAM;EAAW;EAAc;EAAS;EAAa;EAAY;EAAY;EAAwB;EAA2B;EAAa;EAAc;EAAwB;EAAgB;EAAU;EAAmB;EAAc;EAAc;EAAoB;EAAsB;EAAkB;CAAS,CAAC;CAGvU,MAAM,qBAAqB,QACtB,QAAO,QAAO,CAAC,IAAI,MAAM,EACzB,KAAI,QAAO,IAAI,GAAG;CAEvB,MAAM,eACF,oBAAC,OAAD;EACI,KAAK;EACE;EACP,WAAW,IACP,iBACA,WACA,oBAAoB,iBACxB;YAEA,oBAAC,mBAAmB,UAApB;GACI,OAAO;aAEP,oBAAC,cAAD;IACI,UAAU;IAEV,OAAO,OAAO;IACd,QAAQ,OAAO;IACf,YAAY,MAAM,UAAU,MAAM,eAAe,IAAI;IACrD,UAAU,mBAAmB,KAAA,IAAY;IACzC,kBAAkB,QAAQ,kBAAkB;IAC5C,UAAU;GAAW,GANhB,SAMgB;EAEA,CAAA;CAC5B,CAAA;CAIT,IAAI,sBACA,OACI,oBAAC,YAAD;EACa;EACT,oBAAoB;EACpB,aAAa;EACb,WAAW;EACX,cAAc;YAEd,oBAAC,iBAAD;GACI,OAAO;GACP,UAAU;aAET;EACY,CAAA;CACT,CAAA;CAIpB,OAAO;AACX,GACA,SACJ;AAEA,IAAM,uBAAuB,EACzB,WACA,OACA,YACA,aACA,QACA,eAQE;CACF,MAAM,EACF,YACA,WACA,YACA,WACA,eACA,YAAY;EACZ,IAAI;EACJ,UAAU,CAAC,eAAe;CAC9B,CAAC;CAGD,MAAM,EAAE,UAAU,WAAW,GAAG,yBAAyB;CAYzD,OACI,oBAAC,OAAD;EACI,KAAK;EACE,OAAA;GAXX,WAAW,YAAY,cAAc,UAAU,EAAE,OAAO,KAAA;GAExD,YAAY,aAAa,KAAA,IAAY;GACrC,UAAU;GACV,UAAU;GACH;EAMI;EACP,WAAW,IACP,iBACA,UAAU,iDACd;EACA,GAAI;EAEH;CACA,CAAA;AAEb;AAEA,SAAS,aAAa,EAClB,UACA,OACA,QACA,WACA,UACA,UACA,oBAaD;CAgHC,OAAO,oBAAC,eAAD;EACO;EACQ;EACX;EACC;EACR,eAAe;EACJ;EACD;EACA;YAtHF,aAAa,EACrB,OACA,YACiD;GACjD,OAAO,oBAAC,mBAAmB,UAApB,EAAA,WACD,EACE,YACA,MACA,SACA,YAAY,IACZ,eAAe,IACf,cACA,UACA,cACA,cACA,kBACA,sBACA,gBACE;IAEF,IAAI,gBAAgB,WAAW,QAAQ,CAAC,GAAG,QACvC,OAAO,oBAAC,OAAD;KAAK,OAAO;MACf,GAAG;MACH,QAAQ;MACR,UAAU;MACV,QAAQ;MACR,QAAQ;KACZ;eACK;IACA,CAAA;IAGT,MAAM,UAAW,OAAO,KAAK,SAAS,KAAA;IACtC,OACI,qBAAC,iBAAD;KAEa;KACT,UAAU;KACE;KACH;KACC;KACI;KACd,OAAO;MACH,GAAG;MACH,KAAK,QAAQ,MAAM,IAAI,OAAO,gBAAgB,GAAG;KACrD;KACW;eAZf,CAcK,QAAQ,KAAK,QAA4B,gBAAwB;MAC9D,MAAM,WAAW,WAAW,QAAQ,OAAO;MAC3C,MAAM,aAAa,qBAAqB,OAAO;MAC/C,MAAM,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;MAExC,OAAO,uBACH,oBAAC,qBAAD;OAEI,WAAW,OAAO;OAClB,OAAO,OAAO;OACF;OACC;OACb,QAAQ,OAAO;iBAEf,oBAAC,kBAAD;QACI,SAAS,OAAO;QAEF;QACN;QACC;QACA;QACC;QACV,UAAU;QACG;QACF;OAAW,CAAA;MACT,GAlBZ,gBAAgB,OAAO,KAkBX,IAErB,oBAAC,OAAD;OAEI,WAAW,IACP,0BACA,OAAO,UAAU,iDACrB;OACA,OAAO;QACH,UAAU,OAAO;QACjB,UAAU,OAAO;QACjB,OAAO,OAAO;OAClB;iBAEA,oBAAC,kBAAD;QACI,SAAS,OAAO;QAEF;QACN;QACC;QACA;QACC;QACV,UAAU;QACG;QACF;OAAW,CAAA;MACzB,GAtBI,gBAAgB,OAAO,KAsB3B;KAEb,CAAC,GAEA,oBAAoB,oBAAC,OAAD,EAAK,WAAW,OAAQ,CAAA,CAEhC;OArER,OAAO,OAqEC;GAEzB,EACyB,CAAA;EACjC,GAAG,CAAC,CAWC;CACC,CAAA;AACV;AAEA,IAAM,oBAEA,EAAE,WAAW;CACf,MAAM,WAAW;CACjB,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,CAAC;CAGtC,OACI,oBAAC,OAAD;EAAK,WAAW;YAHN,KAAK,MAAM,QAIhB,EAAM,KAAK,MAAM,MACd,qBAAC,MAAM,UAAP,EAAA,UAAA,CACK,MACA,KAAK,MACF,qBAAA,UAAA,EAAA,UAAA,CACI,oBAAC,KAAD;GAAG,MAAM,KAAK;GAAI,WAAU;GAAY,QAAO;GAAS,KAAI;aAAsB;EAAO,CAAA,GACzF,oBAAC,MAAD,CAAI,CAAA,CACN,EAAA,CAAA,CAEM,EAAA,GARK,CAQL,CACnB;CACA,CAAA;AAEb;;;AC/nBA,SAAgB,mCAA0E;CACtF,IAAI,eAA8B,KAAA;CAClC,MAAM,4BAAY,IAAI,IAAgB;CAEtC,SAAS,YAA2B;EAChC,OAAO;CACX;CAEA,SAAS,UAAU,UAAkC;EACjD,UAAU,IAAI,QAAQ;EACtB,aAAa,UAAU,OAAO,QAAQ;CAC1C;CAEA,SAAS,OAAO,MAAqB;EACjC,eAAe;EACf,UAAU,SAAQ,MAAK,EAAE,CAAC;CAC9B;CAEA,OAAO;EACH;EACA;EACA;CACJ;AACJ;AAIA,SAAgB,4BACZ,OACA,WACA,IACO;CACP,MAAM,cAAc,OAAO;EAAE;EAAW;CAAG,CAAC;CAC5C,YAAY,UAAU;EAAE;EAAW;CAAG;CAEtC,MAAM,YAAY,kBAAkB;EAChC,MAAM,OAAO,MAAM,UAAU;EAC7B,IAAI,CAAC,MAAM,OAAO;EAClB,MAAM,IAAI,YAAY;EACtB,OAAO,KAAK,cAAc,EAAE,aAAa,KAAK,OAAO,EAAE;CAC3D,GAAG,CAAC,KAAK,CAAC;CAEV,OAAO,qBAAqB,MAAM,WAAW,WAAW,SAAS;AACrE;;;AC7CA,IAAM,mBAAmB,cAA6D,IAAI;AAE1F,IAAa,iCAAwE,EACjF,OACA,eAIE;CACF,MAAM,QAAQ,MAAM,eAAe;EAC/B,gBAAgB;EAChB,QAAQ,MAAM;CAClB,IAAI,CAAC,KAAK,CAAC;CAEX,OACI,oBAAC,iBAAiB,UAAlB;EAAkC;EAC7B;CACsB,CAAA;AAEnC;AAEA,IAAa,iCAAwE;CACjF,MAAM,UAAU,WAAW,gBAAgB;CAC3C,IAAI,CAAC,SACD,MAAM,IAAI,MAAM,8EAA8E;CAElG,OAAO;AACX;;;AC9BA,SAAgB,kBAAkB,OAQ/B;CACC,MAAM,MAAM,MAAM,OAA4B,IAAI;CAClD,MAAM,EAAE,UAAU,OAAO,YAAY,OAAO,aAAa,YAAY;CACrE,MAAM,YAAY,OAAsB,KAAK;CAC7C,MAAM,CAAC,eAAe,oBAAoB,SAAuB,KAAK;CACtE,MAAM,eAAe,OAAgB,KAAK;CAE1C,gBAAgB;EACZ,IAAI,UAAU,YAAY,SAAS,UAAU,eACzC,iBAAiB,KAAK;EAC1B,UAAU,UAAU;CACxB,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,WAAW,MAAM,kBAAkB;EAErC,IAAI,CADuB,SACF,CAAC,eAAe;EACzC,IAAI,kBAAkB,SAAS,kBAAkB,UAAU,SAAS;GAChE,UAAU,UAAU;GACpB,YAAY,aAAa;EAC7B;CACJ,GAAG;EAAC;EAAe;EAAa;CAAK,CAAC;CAEtC,qBAAqB,eAAe,UAAU,CAAC,SAAS,GAAG;CAE3D,gBAAgB;EACZ,IAAI,IAAI,WAAW,WAAW,CAAC,aAAa,SAAS;GACjD,aAAa,UAAU;GACvB,IAAI,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;GACzC,IAAI,QAAQ,iBAAiB,IAAI,QAAQ,MAAM;GAC/C,IAAI,QAAQ,eAAe,IAAI,QAAQ,MAAM;EACjD,OACI,aAAa,UAAU;CAE/B,GAAG,CAAC,SAAS,GAAG,CAAC;CAEjB,OACI,oBAAC,kBAAD;EACI,WAAW;EACN;EACL,OAAO;GACH,SAAS;GACT,QAAQ;GACR,OAAO;GACP,OAAO;GACP,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,QAAQ;GACR,QAAQ;GACR,SAAS;EACb;EACA,OAAO,iBAAiB;EACxB,WAAW,QAAQ;GACf,MAAM,WAAW,IAAI,OAAO;GAC5B,IAAI,aAAa,CAAC,SAAS,SAAS,IAAI,GACpC,iBAAiB,QAAQ;EACjC;EACA,eAAe;GACX,aAAa,UAAU;EAC3B;EACA,cAAc;GACV,aAAa,UAAU;GACvB,SAAS;GACT,IAAI,MAAM,QAAQ,MAAM,OAAO;EACnC;CACH,CAAA;AAET;;;AC3EA,SAAgB,wBAAwB,OAOrC;CACC,MAAM,EAAE,QAAQ,QAAQ,OAAO,aAAa,YAAY;CACxD,MAAM,kBAAmB,SAAS,OAAO,UAAU,WAAY,MAAM,SAAS,IAAI;CAClF,MAAM,CAAC,eAAe,oBAAoB,SAAwB,eAAe;CACjF,MAAM,YAAY,OAAsB,KAAK;CAE7C,gBAAgB;EACZ,IAAI,UAAU,YAAY,SAAS,OAAO,KAAK,MAAM,eACjD,iBAAiB,QAAQ,MAAM,SAAS,IAAI,IAAI;EACpD,UAAU,UAAU;CACxB,GAAG,CAAC,KAAK,CAAC;CAcV,qBAAqB,eAZJ,MAAM,kBAAkB;EACrC,IAAI,kBAAkB,iBAClB,IAAI,kBAAkB,KAAA,KAAa,kBAAkB,MAAM;GACvD,MAAM,cAAc,WAAW,aAAa;GAC5C,IAAI,MAAM,WAAW,GAAG;GACxB,YAAY,WAAW;EAC3B,OACI,YAAY,IAAI;CAG5B,GAAG,CAAC,eAAe,KAAK,CAEY,GAAU,CAAC,SAAS,GAAG;CAE3D,gBAAgB;EACZ,IAAI,CAAC,WAAW,oBAAoB,eAChC,iBAAiB,UAAU,KAAA,KAAa,UAAU,OAAO,MAAM,SAAS,IAAI,IAAI;CACxF,GAAG,CAAC,OAAO,OAAO,CAAC;CAEnB,MAAM,WAAW,MAAM,OAAyB,IAAI;CAEpD,gBAAgB;EACZ,IAAI,SAAS,WAAW,SACpB,SAAS,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;CAEtD,GAAG,CAAC,SAAS,QAAQ,CAAC;CAEtB,MAAM,SAAS;CAEf,OACI,oBAAC,WAAD;EACc;EACV,WAAW;EACX,MAAK;EACL,WAAU;EACV,gBAAgB,IAAI,2FAA2F,eAAe;EAC9H,YAAY,EAAE,WAAW,MAAM;EAC/B,OAAO,iBAAiB;EACxB,WAAW,QAAQ;GACf,MAAM,WAAW,IAAI,OAAO,MAAM,QAAQ,KAAK,GAAG;GAClD,IAAI,SAAS,WAAW,GAAG,iBAAiB,IAAI;GAChD,IAAI,OAAO,KAAK,QAAQ,KAAK,SAAS,WAAW,GAAG,GAAG,iBAAiB,QAAQ;EACpF;CACH,CAAA;AAET;;;ACnEA,SAAgB,mBAAmB,OAMhC;CACC,MAAM,EAAE,eAAe,aAAa,YAAY;CAChD,MAAM,MAAM,MAAM,OAA0B,IAAI;CAEhD,gBAAgB;EACZ,IAAI,IAAI,WAAW,SACf,IAAI,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;CAEjD,GAAG,CAAC,SAAS,GAAG,CAAC;CAEjB,OACI,oBAAC,eAAD;EACS;EACL,MAAM;EACN,OAAO,QAAQ,aAAa;EAC5B,eAAe;CAClB,CAAA;AAET;;;ACtBA,SAAgB,sBAAsB,OAWnC;CACC,MAAM,EAAE,UAAU,OAAO,MAAM,UAAU,eAAe,aAAa,WAAW;CAEhF,OACI,oBAAC,eAAD;EACI,OAAO,iBAAiB,KAAA;EACxB,WAAW,cAAc,YAAY,aAAa,IAAI;EACtD,WAAW;EACX,gBAAgB,IAAI,iBAAiB,eAAe;EACpD,WAAW,IAAI,iBAAiB,eAAe;EACzC;EACI;EACF;CACX,CAAA;AAET;;;ACpBA,SAAgB,mBAAmB,OAUhC;CACC,MAAM,EAAE,SAAS,OAAO,UAAU,QAAQ,OAAO,SAAS,aAAa,WAAW,UAAU;CAC5F,MAAM,aAAc,MAAM,QAAQ,KAAK,KAAK,YAAc,CAAC,MAAM,QAAQ,KAAK,KAAK,CAAC;CACpF,MAAM,MAAM,OAA0B,IAAI;CAE1C,gBAAgB;EACZ,IAAI,IAAI,WAAW,SACf,IAAI,SAAS,MAAM,EAAE,eAAe,KAAK,CAAC;CAElD,GAAG,CAAC,SAAS,GAAG,CAAC;CAEjB,MAAM,WAAW,aAAa,iBAAoC;EAC9D,IAAI,UAAU;GACV,MAAM,WAAW,QAAQ,MAAK,MAAK,OAAO,EAAE,UAAU,QAAQ;GAC9D,MAAM,WAAY,aAA0B,KAAK,MAAM;IAEnD,OAAO,OADK,QAAQ,MAAK,MAAK,OAAO,EAAE,KAAK,MAAM,CACpC,GAAK,UAAU,WAAW,WAAW,CAAC,IAAI;GAC5D,CAAC;GACD,IAAI,UACA,YAAY,QAAoB;QAEhC,YAAY,QAAoB;EAExC,OAEI,YAAY,OADA,QAAQ,MAAK,MAAK,OAAO,EAAE,KAAK,MAAM,YAC/B,GAAK,UAAU,WAAW,WAAW,YAAsB,IAAK,gBAA0B,IAAK;CAE1H,GAAG;EAAC;EAAU;EAAa;CAAO,CAAC;CAEnC,MAAM,eAAe,QAA0B;EAC3C,MAAM,SAAS,QAAQ,MAAK,MAAK,EAAE,UAAU,GAAG;EAChD,OACI,oBAAC,MAAD;GAAM,MAAM,QAAQ,UAAU;aACzB,SAAS,OAAO,QAAQ,OAAO,GAAG;EACjC,CAAA;CAEd;CAEA,MAAM,mBAAmB,aAAa,SAAkB;EACpD,IAAI,CAAC,QAAQ,IAAI,SACb,iBAAiB;GACb,IAAI,SAAS,MAAM,EAAE,eAAe,KAAK,CAAC;EAC9C,GAAG,CAAC;CAEZ,GAAG,CAAC,CAAC;CAEL,OAAO,WACH,oBAAC,aAAD;EACI,UAAU;EACV,WAAU;EACV,UAAU;EACA;EACV,cAAc;EACd,UAAU;EACV,OAAO,aAAc,MAA8B,KAAI,MAAK,OAAO,CAAC,CAAC,IAAI,CAAC;EAC1E,eAAe;EACf,cAAc;YAEb,QAAQ,KAAK,QACV,oBAAC,iBAAD;GAAyC,OAAO,OAAO,IAAI,KAAK;aAC5D,oBAAC,MAAD;IAAM,MAAM,QAAQ,UAAU;cAAW,IAAI;GAAY,CAAA;EAC5C,GAFK,OAAO,IAAI,KAAK,CAErB,CACpB;CACQ,CAAA,IAEb,oBAAC,QAAD;EACI,UAAU;EACV,WAAA;EACA,WAAU;EACV,gBAAe;EACf,UAAU;EACA;EACV,SAAS;EACT,OAAO,aAAa,OAAO,KAAK,IAAI;EACpC,eAAe;EACf,cAAc;EACD;YAEZ,QAAQ,KAAK,QACV,oBAAC,YAAD;GAAoC,OAAO,OAAO,IAAI,KAAK;aACvD,oBAAC,MAAD;IAAM,MAAM,QAAQ,UAAU;cAAW,IAAI;GAAY,CAAA;EACjD,GAFK,OAAO,IAAI,KAAK,CAErB,CACf;CACG,CAAA;AAEhB;;;ACvDA,SAAS,sBAAsB,MAA8B;CACzD,QAAQ,MAAR;EACI,KAAK,MAAM,OAAO;EAClB,KAAK,KAAK,OAAO;EACjB,KAAK,KAAK,OAAO;EACjB,KAAK,KAAK,OAAO;EACjB,KAAK,MAAM,OAAO;EAClB,SAAS,OAAO;CACpB;AACJ;AAEA,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAE5B,SAAS,kBAAgB,SAAiD;CACtE,IAAI,SAAS,SAAS,iBAAiB;CACvC,OAAO,QAAQ;EACX,MAAM,QAAQ,iBAAiB,MAAM;EACrC,IACI,MAAM,cAAc,UAAU,MAAM,cAAc,YAClD,MAAM,aAAa,UAAU,MAAM,aAAa,UAEhD,OAAO;EAEX,SAAS,OAAO;CACpB;CACA,OAAO,SAAS;AACpB;AAEA,SAAgB,SAAY,EACxB,MACA,cAAc,OACd,eAAe,OACf,kBACA,WACA,cACA,WAAW,IACX,oBAAoB,MAEpB,aACA,aACA,gBACA,mBAAmB,MACnB,mBACA,gBAEA,OAAO,KACP,kBACA,aACiB;CACjB,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,gBAAgB,OAAO,KAAK;CAGlC,gBAAgB;EACZ,IAAI,CAAC,aAAa,cAAc,UAAU;CAC9C,GAAG,CAAC,WAAW,CAAC;CAGhB,MAAM,qBAAqB,sBAAsB,IAAI;CACrD,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,CAAC;CAC9D,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,GAAG;CAExD,MAAM,qBAAqB,OAAO;EAAE;EAAmB;EAAc;EAAW;CAAS,CAAC;CAC1F,gBAAgB;EACZ,mBAAmB,UAAU;GAAE;GAAmB;GAAc;GAAW;EAAS;CACxF,GAAG;EAAC;EAAmB;EAAc;EAAW;CAAQ,CAAC;CAEzD,gBAAgB;EACZ,MAAM,KAAK,aAAa;EACxB,IAAI,CAAC,IAAI;EACT,MAAM,WAAW,kBAAgB,EAAE;EACnC,IAAI,CAAC,UAAU;EAEf,IAAI,QAAuB;EAE3B,MAAM,eAAe;GACjB,QAAQ;GACR,MAAM,aAAa,SAAS,sBAAsB;GAGlD,MAAM,kBAFW,GAAG,sBAEI,EAAS,MAAM,WAAW;GAClD,sBAAsB,KAAK,IAAI,GAAG,CAAC,eAAe,CAAC;GACnD,kBAAkB,WAAW,MAAM;GAEnC,MAAM,EAAE,mBAAmB,IAAI,cAAc,IAAI,WAAW,IAAI,UAAU,OAAO,mBAAmB;GACpG,IACI,MACA,CAAC,MACD,CAAC,cAAc,WACf,SAAS,eAAe,SAAS,YAAY,SAAS,eAAe,qBACvE;IACE,cAAc,UAAU;IACxB,gBAAgB,MAAM,MAAM,EAAE;GAClC;EACJ;EAEA,MAAM,iBAAiB;GACnB,IAAI,UAAU,MAAM,QAAQ,sBAAsB,MAAM;EAC5D;EAEA,SAAS,iBAAiB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAC;EAC/D,MAAM,KAAK,IAAI,qBAAqB,OAAO,CAAC;EAC5C,GAAG,QAAQ,QAAQ;EACnB,OAAO;EAEP,aAAa;GACT,SAAS,oBAAoB,UAAU,QAAQ;GAC/C,GAAG,WAAW;GACd,IAAI,UAAU,MAAM,qBAAqB,KAAK;EAClD;CACJ,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,cAAc,KAAK,SAAS;CAClC,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,MAAM,qBAAqB,kBAAkB,IAAI,cAAc;CACnG,MAAM,WAAW,KAAK,IAClB,KAAK,QACL,KAAK,MAAM,qBAAqB,kBAAkB,kBAAkB,IAAI,cAC5E;CACA,MAAM,cAAc,KAAK,MAAM,YAAY,QAAQ;CACnD,MAAM,UAAU,aAAa;CAE7B,MAAM,eAAe,cAAc,KAAM,CAAC,eAAe,gBAAgB,KAAK,SAAS,IAAK,KAAK;CAEjG,MAAM,mBAAmB,eAAe,KAAK,WAAW;CACxD,MAAM,UAAU,CAAC,eAAe,KAAK,WAAW,KAAK,CAAC;CAEtD,MAAM,YAAY,aAAa,SAA6B;EACxD,IAAI,QAAQ,OAAO,SAAS,YAAY,QAAQ,MAAM;GAClD,MAAM,KAAM,KAA+B;GAC3C,OAAO,OAAO,OAAO,WAAW,KAAK,OAAO,EAAE;EAClD;EACA,OAAO,OAAO,IAAI;CACtB,GAAG,CAAC,CAAC;CAEL,MAAM,mBAAmB;CAEzB,OACI,oBAAC,OAAD;EACI,KAAK;EACL,WAAW,IACP,UACA,qBAAqB,KAAA,KAAa,qCAAqC,kBAC3E;YAEC,oBAAoB,KAAK,WAAW,IACjC,oBAAC,OAAD;GAAK,WAAU;aACX,qBAAC,YAAD;IAAY,WAAU;cAAtB,CAAqC,wBACZ,iBAAiB,OAC9B;;EACX,CAAA,IACL,mBACA,oBAAC,OAAD;GAAK,WAAU;aACX,oBAAC,kBAAD,EAAkB,MAAK,QAAS,CAAA;EAC/B,CAAA,IACL,UACA,oBAAC,OAAD;GAAK,WAAU;aACV,kBACG,oBAAC,YAAD;IAAY,SAAQ;IAAQ,OAAM;cAAY;GAElC,CAAA;EAEf,CAAA,IAEL,qBAAC,OAAD;GAAK,OAAO;IAAE,QAAQ,cAAc;IAAc,UAAU;GAAW;aAAvE;IACI,oBAAC,OAAD;KAAK,OAAO;MAAE,UAAU;MAAY,KAAK;MAAS,MAAM;MAAG,OAAO;KAAE;eAC/D,YAAY,KAAK,MAAM,MAAM;MAC1B,MAAM,cAAc,aAAa;MACjC,MAAM,SAAS,gBAAgB,KAAK,SAAS;MAC7C,MAAM,KAAK,UAAU,IAAI;MACzB,MAAM,WAAW,aAAa,IAAI,EAAE,KAAK;MACzC,MAAM,cAAc,gBAAgB,IAAI,EAAE,KAAK;MAE/C,MAAM,eAAe,MAAwB;OACzC,KAAK,EAAE,WAAW,EAAE,YAAY,kBAAkB;QAC9C,EAAE,eAAe;QACjB,oBAAoB,MAAM,CAAC,QAAQ;QACnC;OACJ;OACA,cAAc,IAAI;MACtB;MAEA,MAAM,yBAAyB,QAAiB;OAC5C,oBAAoB,MAAM,GAAG;MACjC;MAEA,OACI,oBAAC,MAAM,UAAP,EAAA,UACK,UAAU;OACP;OACA,OAAO;OACP,OAAO,EAAE,QAAQ,mBAAmB;OACpC,WAAW,IACP,CAAC,UAAU,YACX,CAAC,UAAU,gBACf;OACA;OACA;OACA;OACA,SAAS;OACT,mBAAmB;MACvB,CAAC,EACW,GAfK,MAAM,WAeX;KAExB,CAAC;IACA,CAAA;IAEJ,eACG,oBAAC,OAAD;KACI,WAAU;KACV,OAAO;MAAE,UAAU;MAAY,KAAK;MAAa,MAAM;MAAG,OAAO;KAAE;eAEnE,oBAAC,kBAAD,EAAkB,MAAK,QAAS,CAAA;IAC/B,CAAA;IAER,CAAC,eAAe,gBAAgB,KAAK,SAAS,KAC3C,oBAAC,OAAD;KACI,WAAU;KACV,OAAO;MAAE,UAAU;MAAY,KAAK;MAAa,MAAM;MAAG,OAAO;KAAE;eAEnE,qBAAC,YAAD;MAAY,SAAQ;MAAU,OAAM;gBAApC;OAAgD;OACvC,KAAK;OAAO;MACT;;IACX,CAAA;GAER;;CAER,CAAA;AAEb;;;AC3OA,SAAS,oBAAoB,MAA8B;CACvD,QAAQ,MAAR;EACI,KAAK,MACD,OAAO;EACX,KAAK,KACD,OAAO;EACX,KAAK,KACD,OAAO;EACX,KAAK,KACD,OAAO;EACX,KAAK,MACD,OAAO;EACX,SACI,OAAO;CACf;AACJ;AAEA,SAAS,gBAAgB,SAAiD;CACtE,IAAI,CAAC,SAAS,OAAO;CACrB,IAAI,SAAS,QAAQ;CACrB,OAAO,QAAQ;EACX,MAAM,YAAY,OAAO,iBAAiB,MAAM,EAAE;EAClD,IAAI,cAAc,UAAU,cAAc,UACtC,OAAO;EAEX,SAAS,OAAO;CACpB;CACA,OAAO,SAAS;AACpB;AAEA,SAAgB,SAAY,EACxB,MACA,cAAc,OACd,eAAe,OACf,kBACA,WACA,cACA,WAAW,IACX,oBAAoB,MAEpB,aACA,aACA,gBACA,mBAAmB,MACnB,mBAEA,UACA,eACA,OAAO,KACP,YACA,kBACiB;CACjB,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,oBAAoB,OAAO,KAAK;CACtC,MAAM,gBAAgB,OAAO,KAAK;CAGlC,MAAM,qBAAqB,OAAO;EAAE;EAAmB;EAAc;EAAW;CAAS,CAAC;CAC1F,gBAAgB;EACZ,mBAAmB,UAAU;GAAE;GAAmB;GAAc;GAAW;EAAS;CACxF,GAAG;EAAC;EAAmB;EAAc;EAAW;CAAQ,CAAC;CAEzD,gBAAgB;EACZ,IAAI,CAAC,aAAa,cAAc,UAAU;CAC9C,GAAG,CAAC,WAAW,CAAC;CAGhB,gBAAgB;EACZ,MAAM,KAAK,aAAa;EACxB,IAAI,CAAC,IAAI;EACT,MAAM,WAAW,gBAAgB,EAAE;EACnC,IAAI,CAAC,UAAU;EAEf,IAAI,QAAuB;EAE3B,MAAM,eAAe;GACjB,QAAQ;GACR,MAAM,EAAE,mBAAmB,IAAI,cAAc,IAAI,WAAW,IAAI,UAAU,OAAO,mBAAmB;GACpG,IACI,MACA,CAAC,MACD,CAAC,cAAc,WACf,SAAS,eAAe,SAAS,YAAY,SAAS,eAAe,KACvE;IACE,cAAc,UAAU;IACxB,gBAAgB,MAAM,MAAM,EAAE;GAClC;EACJ;EAEA,MAAM,sBAAsB;GACxB,IAAI,UAAU,MAAM,QAAQ,sBAAsB,MAAM;EAC5D;EAEA,SAAS,iBAAiB,UAAU,eAAe,EAAE,SAAS,KAAK,CAAC;EACpE,MAAM,KAAK,IAAI,qBAAqB,OAAO,CAAC;EAC5C,GAAG,QAAQ,QAAQ;EACnB,OAAO;EAEP,aAAa;GACT,SAAS,oBAAoB,UAAU,aAAa;GACpD,GAAG,WAAW;GACd,IAAI,UAAU,MAAM,qBAAqB,KAAK;EAClD;CACJ,GAAG,CAAC,YAAY,CAAC;CAGjB,gBAAgB;EACZ,IAAI,CAAC,aAAa,WAAW,CAAC,iBAAiB,kBAAkB,WAAW,KAAK,WAAW,GAAG;EAE/F,MAAM,WAAW,gBAAgB,aAAa,OAAO;EACrD,IAAI,CAAC,UAAU;EAEf,IAAI,WAAW;EACf,MAAM,cAAc;EAEpB,MAAM,mBAAmB;GACrB,IAAI,SAAS,gBAAgB,iBAAiB,YAAY,aAAa;IACnE,SAAS,YAAY;IACrB,kBAAkB,UAAU;GAChC,OAAO;IACH;IACA,sBAAsB,UAAU;GACpC;EACJ;EAEA,sBAAsB,UAAU;CACpC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;CAG/B,MAAM,mBAAmB,OAAO,CAAC;CACjC,gBAAgB;EACZ,MAAM,KAAK,aAAa;EACxB,IAAI,CAAC,MAAM,CAAC,UAAU;EACtB,MAAM,WAAW,gBAAgB,EAAE;EACnC,IAAI,CAAC,UAAU;EAEf,MAAM,qBAAqB;GACvB,MAAM,gBAAgB,SAAS;GAC/B,MAAM,YAAY,gBAAgB,iBAAiB,UAAU,YAAY;GACzE,iBAAiB,UAAU;GAC3B,SAAS;IACL,iBAAiB;IACjB,cAAc;IACd,0BAA0B;GAC9B,CAAC;EACL;EAEA,SAAS,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;EACnE,aAAa,SAAS,oBAAoB,UAAU,YAAY;CACpE,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,YAAY,aAAa,SAA6B;EACxD,IAAI,QAAQ,OAAO,SAAS,YAAY,QAAQ,MAAM;GAClD,MAAM,KAAM,KAA+B;GAC3C,OAAO,OAAO,OAAO,WAAW,KAAK,OAAO,EAAE;EAClD;EACA,OAAO,OAAO,IAAI;CACtB,GAAG,CAAC,CAAC;CAEL,MAAM,mBAAmB,oBAAoB,IAAI;CAEjD,MAAM,mBAAmB,eAAe,KAAK,WAAW,KAAK,CAAC;CAC9D,MAAM,UAAU,CAAC,eAAe,KAAK,WAAW,KAAK,CAAC;CAEtD,OACI,oBAAC,OAAD;EACI,KAAK;EACL,WAAU;YAET,oBAAoB,KAAK,WAAW,IACjC,oBAAC,OAAD;GAAK,WAAU;aACX,qBAAC,YAAD;IAAY,WAAU;cAAtB,CAAqC,wBACZ,iBAAiB,OAC9B;;EACX,CAAA,IACL,mBACA,oBAAC,OAAD;GAAK,WAAU;aACX,oBAAC,kBAAD,EAAkB,MAAK,QAAQ,CAAA;EAC9B,CAAA,IACL,UACA,oBAAC,OAAD;GAAK,WAAU;aACV,kBACG,oBAAC,YAAD;IAAY,SAAQ;IAAQ,OAAM;cAAY;GAElC,CAAA;EAEf,CAAA,IAEL,qBAAC,OAAD;GAAK,WAAU;aAAf,CACI,oBAAC,OAAD;IAAK,WAAW,IAAI,cAAc,gBAAgB;cAC7C,KAAK,KAAK,MAAM,UAAU;KACvB,MAAM,KAAK,UAAU,IAAI;KACzB,MAAM,WAAW,aAAa,IAAI,EAAE,KAAK;KACzC,MAAM,cAAc,gBAAgB,IAAI,EAAE,KAAK;KAE/C,MAAM,eAAe,MAAwB;MACzC,KAAK,EAAE,WAAW,EAAE,YAAY,kBAAkB;OAC9C,EAAE,eAAe;OACjB,oBAAoB,MAAM,CAAC,QAAQ;OACnC;MACJ;MACA,cAAc,IAAI;KACtB;KAEA,MAAM,yBAAyB,QAAiB;MAC5C,oBAAoB,MAAM,GAAG;KACjC;KAEA,OACI,oBAAC,MAAM,UAAP,EAAA,UACK,WAAW,MAAM;MACd;MACA;MACA,mBAAmB;MACnB,SAAS;KACb,CAAC,EACW,GAPK,MAAM,KAOX;IAExB,CAAC;GACA,CAAA,GAEL,qBAAC,OAAD;IAAK,WAAU;cAAf,CACK,eACG,oBAAC,kBAAD,EAAkB,MAAK,QAAQ,CAAA,GAElC,CAAC,eAAe,gBAAgB,KAAK,SAAS,KAC3C,qBAAC,YAAD;KAAY,SAAQ;KAAU,OAAM;eAApC;MAAgD;MACvC,KAAK;MAAO;KACT;MAEf;KACJ;;CAER,CAAA;AAEb;;;ACrQA,SAAgB,kBAAqB,EACjC,UACA,OACA,eACA,YACA,kBACA,UAAU,OACV,UAAU,OACV,cAC0B;CAC1B,MAAM,EACF,eACA,aAAa;EACb,IAAI;EACJ,MAAM,EAAE,MAAM,YAAY;CAC9B,CAAC;CAED,MAAM,cAAc,OAAuB,IAAI;CAC/C,MAAM,eAAe,OAAO,OAAO;CACnC,aAAa,UAAU;CACvB,MAAM,kBAAkB,OAAO,CAAC;CAEhC,gBAAgB;EACZ,IAAI,CAAC,YAAY,WAAW,CAAC,WAAW,CAAC,YAAY;EAErD,MAAM,WAAW,YAAY;EAE7B,MAAM,WAAW,IAAI,sBAChB,YAAY;GACT,MAAM,MAAM,KAAK,IAAI;GACrB,IACI,QAAQ,GAAG,kBACX,WACA,CAAC,aAAa,WACd,MAAM,gBAAgB,UAAU,KAClC;IACE,gBAAgB,UAAU;IAC1B,WAAW;GACf;EACJ,GACA,EAAE,WAAW,GAAI,CACrB;EAEA,SAAS,QAAQ,QAAQ;EAEzB,MAAM,OAAO,SAAS,sBAAsB;EAC5C,MAAM,gBAAgB,SAAS,eAAe,sBAAsB;EACpE,IAAI,iBAAiB,KAAK,MAAM,cAAc,UAAU,KAAK,SAAS,cAAc,KAAK;GACrF,MAAM,MAAM,KAAK,IAAI;GACrB,IAAI,WAAW,CAAC,aAAa,WAAW,MAAM,gBAAgB,UAAU,KAAK;IACzE,gBAAgB,UAAU;IAC1B,WAAW;GACf;EACJ;EAEA,aAAa,SAAS,WAAW;CACrC,GAAG,CAAC,SAAS,UAAU,CAAC;CAWxB,OACI,oBAAC,OAAD;EACI,KAAK;EACL,WAZmB,cAAc,IACrC,qIACA,cAAc,mBACR,8CACA,aACI,4FACA,mCACd,GAAG,CAAC,YAAY,gBAAgB,CAKb;EACX,OAAO,EAAE,WAAW,GAAG;YAEvB,oBAAC,iBAAD;GACI,OAAO,MAAM,KAAI,MAAK,EAAE,EAAE;GAC1B,UAAU;aAET,MAAM,WAAW,KAAK,CAAC,UACpB,oBAAC,OAAD;IAAK,WAAU;cACX,oBAAC,QAAD;KAAM,WAAU;eAAiD;IAE3D,CAAA;GACL,CAAA,IAEL,qBAAA,UAAA,EAAA,UAAA,CACK,MAAM,KAAK,MAAM,UACd,oBAAC,cAAD;IAEU;IACC;IACG;IACK;GAClB,GALQ,KAAK,EAKb,CACJ,IACC,WAAW,YACT,oBAAC,OAAD;IAAK,KAAK;IAAa,WAAU;cAC5B,WAAW,oBAAC,kBAAD,EAAkB,MAAK,WAAW,CAAA;GAC7C,CAAA,CAEX,EAAA,CAAA;EAEO,CAAA;CAChB,CAAA;AAEb;AASA,IAAM,eAAe,KAAK,SAAS,aAAgB,EAC/C,MACA,OACA,UACA,iBACqB;CACrB,MAAM,EACF,YACA,YACA,WACA,YAAY,oBACZ,WACA,eACA,YAAY;EACZ,IAAI,KAAK;EACT,MAAM;GACF,MAAM;GACN;EACJ;CACJ,CAAC;CASD,OACI,oBAAC,OAAD;EAAK,KAAK;EAAY,OARJ,eAAe;GACjC,WAAW,IAAI,UAAU,SAAS,SAAS;GAC3C;GACA,QAAQ,qBAAqB,IAAI;GACjC,SAAS,qBAAqB,IAAI;EACtC,IAAI;GAAC;GAAW;GAAY;EAAkB,CAGb;EAAe,GAAI;EAAY,GAAI;YAC5D,oBAAC,eAAD;GACU;GACN,YAAY;GACL;EACV,CAAA;CACA,CAAA;AAEb,CAAC;;;AC9JD,SAAgB,iBAAiB,EAC7B,UACA,WACA,OACA,GAAG,SACmB;CACtB,MAAM,cAAc,cAAc;EAC9B,IAAI,CAAC,OAAO,OAAO,KAAA;EACnB,IAAI,OAAO,UAAU,UACjB,OAAO,qBAAqB,KAAK;EAErC,OAAO;CACX,GAAG,CAAC,KAAK,CAAC;CAEV,OACI,qBAAC,YAAD;EACI,SAAQ;EACR,WAAU;EACV,WACI,IAAI,qKACA,SAAS;EAEjB,GAAI;YAPR,CASK,eACG,oBAAC,OAAD;GACI,WAAU;GACV,OAAO,EACH,iBAAiB,YAAY,aAAa,YAAY,MAC1D;EACH,CAAA,GAEJ,QACO;;AAEpB;;;AC9CA,IAAa,WAAW;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACJ;;;AC/4DA,IAAa,eAAyB;CAClC;CAAS;CACT;CAAS;CAAmB;CAAc;CAAU;CACpD;CAAgB;CAAyB;CAAQ;CACjD;CAAY;CAAQ;CAAY;CAChC;CAAU;CAAU;CAAO;CAAU;CACrC;CAAY;CAAO;CAAS;CAC5B;CAAS;CAAU;CAAS;CAC5B;CAAc;CAAc;CAAO;CAAS;CAC5C;CAAW;CAAe;CAAW;CAAW;CAAW;CAC3D;CAAO;CAAQ;CAAS;CAAS;CACjC;CAAY;CAAkB;CAAY;AAAS;;;ACPvD,SAAgB,WAAW,OAAkB;CACzC,OAAO,oBAAC,OAAD;EAAK,OAAM;EACN,WAAW,MAAM;EACjB,MAAM;EACN,OAAO,MAAM,QAAQ;EACrB,QA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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","names":[],"sources":["../src/util/cls.ts","../src/util/debounce.ts","../src/util/hash.ts","../src/util/chip_colors.ts","../src/components/common/SelectInputLabel.tsx","../src/styles.ts","../src/hooks/PortalContainerContext.tsx","../src/hooks/useInjectStyles.tsx","../src/hooks/useOutsideAlerter.tsx","../src/hooks/useDebouncedCallback.ts","../src/hooks/useDebounceCallback.tsx","../src/hooks/useDebounceValue.tsx","../src/components/Collapse.tsx","../src/components/Autocomplete.tsx","../src/components/Alert.tsx","../src/components/Avatar.tsx","../src/components/BooleanSwitch.tsx","../src/components/BooleanSwitchWithLabel.tsx","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Container.tsx","../src/components/CenteredView.tsx","../src/components/CircularProgress.tsx","../src/components/Typography.tsx","../src/components/CircularProgressCenter.tsx","../src/icons/Icon.tsx","../src/components/ErrorBoundary.tsx","../src/components/Checkbox.tsx","../src/components/Chip.tsx","../src/components/Tooltip.tsx","../src/components/ColorPicker.tsx","../src/components/IconButton.tsx","../src/components/InputLabel.tsx","../src/components/DateTimeField.tsx","../src/components/Dialog.tsx","../src/components/DialogActions.tsx","../src/components/DialogContent.tsx","../src/components/DialogTitle.tsx","../src/components/ExpandablePanel.tsx","../src/components/FileUpload.tsx","../src/components/FilterChip.tsx","../src/components/InfoLabel.tsx","../src/components/Label.tsx","../src/components/LoadingButton.tsx","../src/components/Markdown.tsx","../src/components/Menu.tsx","../src/components/Menubar.tsx","../src/components/Separator.tsx","../src/components/MultiSelect.tsx","../src/components/Paper.tsx","../src/components/RadioGroup.tsx","../src/components/ResizablePanels.tsx","../src/components/SearchBar.tsx","../src/components/Select.tsx","../src/components/Slider.tsx","../src/components/Sheet.tsx","../src/components/TextareaAutosize.tsx","../src/components/TextField.tsx","../src/components/Tabs.tsx","../src/components/Table.tsx","../src/components/Popover.tsx","../src/components/Badge.tsx","../src/components/DebouncedTextField.tsx","../src/components/Skeleton.tsx","../src/components/ToggleButtonGroup.tsx","../src/components/VirtualTable/VirtualTableHeader.tsx","../src/components/VirtualTable/VirtualTableHeaderRow.tsx","../src/components/VirtualTable/VirtualTableRow.tsx","../src/components/VirtualTable/VirtualTableCell.tsx","../src/components/VirtualTable/VirtualTable.tsx","../src/components/VirtualTable/selection/SelectionStore.ts","../src/components/VirtualTable/selection/SelectionContext.tsx","../src/components/VirtualTable/fields/VirtualTableInput.tsx","../src/components/VirtualTable/fields/VirtualTableNumberInput.tsx","../src/components/VirtualTable/fields/VirtualTableSwitch.tsx","../src/components/VirtualTable/fields/VirtualTableDateField.tsx","../src/components/VirtualTable/fields/VirtualTableSelect.tsx","../src/views/ListView.tsx","../src/views/CardView.tsx","../src/views/Kanban/BoardSortableList.tsx","../src/views/Kanban/BoardColumnTitle.tsx","../src/icons/icon_keys.ts","../src/icons/cool_icon_keys.ts","../src/icons/GitHubIcon.tsx","../src/icons/HandleIcon.tsx","../src/views/Kanban/BoardColumn.tsx","../src/views/Kanban/Board.tsx","../src/views/KanbanView.tsx","../src/views/CollectionView/CollectionViewToolbar.tsx","../src/views/CollectionView/DefaultCellRenderer.tsx","../src/views/CollectionView/utils.ts","../src/views/CollectionView/CollectionTableView.tsx","../src/views/CollectionView/CollectionCardView.tsx","../src/views/CollectionView/CollectionListView.tsx","../src/views/CollectionView/CollectionKanbanView.tsx","../src/views/CollectionView/CollectionView.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cls(...classes: ClassValue[]) {\n return twMerge(clsx(classes));\n}\n\n\n","/**\n * @ignore\n */\n\nexport function debounce<T extends (...args: any[]) => unknown>(func: T, wait = 166) {\n let timeout: ReturnType<typeof setTimeout>;\n\n function debounced(this: unknown, ...args: Parameters<T>) {\n const later = () => {\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n\n return debounced as T & Cancelable;\n}\n\n/**\n * @ignore\n */\nexport interface Cancelable {\n clear(): void;\n}\n","export function hashString(str: string): number {\n let hash = 0;\n let i;\n let chr;\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n","import { hashString } from \"./hash\";\n\nexport type ChipColorScheme = {\n color: string;\n text: string;\n /** Background color override for dark mode */\n darkColor?: string;\n /** Text color override for dark mode */\n darkText?: string;\n}\n\nexport const CHIP_COLORS: Record<string, ChipColorScheme> = {\n blue: { color: \"#cfdfff\",\ntext: \"#102046\",\ndarkColor: \"#2750ae\",\ndarkText: \"#cfdfff\" },\n teal: { color: \"#c2f5e9\",\ntext: \"#012524\",\ndarkColor: \"#06a09b\",\ndarkText: \"#daf3e9\" },\n yellow: { color: \"#ffeab6\",\ntext: \"#3b2501\",\ndarkColor: \"#b87503\",\ndarkText: \"#ffeab6\" },\n pink: { color: \"#ffdaf6\",\ntext: \"#400832\",\ndarkColor: \"#b2158b\",\ndarkText: \"#ffdaf6\" },\n purple: { color: \"#ede2fe\",\ntext: \"#280b42\",\ndarkColor: \"#6b1cb0\",\ndarkText: \"#ede2fe\" },\n cyan: { color: \"#d0f0fd\",\ntext: \"#04283f\",\ndarkColor: \"#0b76b7\",\ndarkText: \"#d0f0fd\" },\n orange: { color: \"#fee2d5\",\ntext: \"#6b2613\",\ndarkColor: \"#d74d26\",\ndarkText: \"#fee2d5\" },\n green: { color: \"#d1f7c4\",\ntext: \"#0b1d05\",\ndarkColor: \"#338a17\",\ndarkText: \"#d1f7c4\" },\n red: { color: \"#ffdce5\",\ntext: \"#4c0c1c\",\ndarkColor: \"#ba1e45\",\ndarkText: \"#ffdce5\" },\n gray: { color: \"#eee\",\ntext: \"#040404\",\ndarkColor: \"#444\",\ndarkText: \"#eee\" },\n indigo: { color: \"#e0e7ff\",\ntext: \"#312e81\",\ndarkColor: \"#4f46e5\",\ndarkText: \"#e0e7ff\" },\n violet: { color: \"#ede9fe\",\ntext: \"#4c1d95\",\ndarkColor: \"#7c3aed\",\ndarkText: \"#ede9fe\" },\n fuchsia: { color: \"#fae8ff\",\ntext: \"#701a75\",\ndarkColor: \"#c026d3\",\ndarkText: \"#fae8ff\" },\n rose: { color: \"#ffe4e6\",\ntext: \"#881337\",\ndarkColor: \"#e11d48\",\ndarkText: \"#ffe4e6\" },\n emerald: { color: \"#d1fae5\",\ntext: \"#064e3b\",\ndarkColor: \"#059669\",\ndarkText: \"#d1fae5\" }\n};\n\nexport type ChipColorKey = keyof typeof CHIP_COLORS;\n\nexport function getColorSchemeForKey(key: ChipColorKey): ChipColorScheme {\n return CHIP_COLORS[key];\n}\n\nexport function getColorSchemeForSeed(seed: string): ChipColorScheme {\n const hash: number = hashString(seed);\n const colorKeys = Object.keys(CHIP_COLORS);\n const index = hash % colorKeys.length;\n return CHIP_COLORS[colorKeys[index]];\n}\n","import React from \"react\";\nimport { cls } from \"../../util\";\n\nexport function SelectInputLabel({ children, error }: { children: React.ReactNode, error?: boolean }) {\n return <div className={cls(\"text-sm font-medium ml-3.5 mb-1\",\n error ? \"text-red-500 dark:text-red-600\" : \"text-surface-accent-500 dark:text-surface-accent-300\")}>\n {children}\n </div>;\n}\n","export const focusedDisabled = \"focus-visible:ring-0 focus-visible:ring-offset-0\";\nexport const focusedInvisibleMixin = \"focus:bg-opacity-70 focus:bg-surface-accent-100 focus:dark:bg-surface-900 focus:dark:bg-opacity-60 focus:bg-surface-accent-100/70 dark:focus:bg-surface-900/60\";\nexport const focusedClasses = \"z-30 outline-hidden outline-none ring-2 ring-primary ring-opacity-50 ring-primary/50 ring-offset-0 ring-offset-transparent \";\nexport const fieldBackgroundMixin = \"bg-surface-accent-200/50 dark:bg-black/30\";\nexport const fieldBackgroundInvisibleMixin = \"bg-surface-accent-200/0 dark:bg-black/0\";\nexport const fieldBackgroundDisabledMixin = \"bg-surface-accent-200/50 dark:bg-black/20\";\nexport const fieldBackgroundHoverMixin = \"hover:bg-surface-accent-200/70 hover:dark:bg-black/50\";\nexport const defaultBorderMixin = \"border-surface-200 dark:border-surface-700/60 \";\nexport const paperMixin = \"bg-white rounded-lg dark:bg-surface-900 border border-surface-200 dark:border-surface-700\";\nexport const cardMixin = \"bg-white dark:bg-surface-900 rounded-lg border border-surface-200 dark:border-surface-700\";\nexport const cardClickableMixin = \"hover:bg-primary/5 dark:hover:bg-primary/5 cursor-pointer transition-colors duration-150\";\nexport const cardSelectedMixin = \"bg-primary-bg/30 dark:bg-primary-bg/10 ring-1 ring-primary/75\";\n","\"use client\";\nimport React, { createContext, useContext, useMemo } from \"react\";\n\nexport interface PortalContainerContextType {\n container: HTMLElement | null;\n}\n\nconst PortalContainerContext = createContext<PortalContainerContextType | undefined>(undefined);\n\nexport interface PortalContainerProviderProps {\n container: HTMLElement | null;\n children: React.ReactNode;\n}\n\n/**\n * Provider component that sets the portal container for all descendants.\n * This can be used at any level of the tree to specify where portals should be attached.\n *\n * @example\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null);\n *\n * <div ref={containerRef}>\n * <PortalContainerProvider container={containerRef.current}>\n * <YourComponents />\n * </PortalContainerProvider>\n * </div>\n * ```\n */\nexport function PortalContainerProvider({ container, children }: PortalContainerProviderProps) {\n const contextValue = useMemo(() => ({ container }), [container]);\n\n return (\n <PortalContainerContext.Provider value={contextValue}>\n {children}\n </PortalContainerContext.Provider>\n );\n}\n\n/**\n * Hook to access the portal container from context.\n * Returns null if no provider is found in the tree.\n *\n * @returns The portal container element or null\n */\nexport function usePortalContainer(): HTMLElement | null {\n const context = useContext(PortalContainerContext);\n return context?.container ?? null;\n}\n\n","\"use client\";\nimport { useEffect } from \"react\";\nimport { usePortalContainer } from \"./PortalContainerContext\";\n\n/**\n * Use this hook to create a `<style>` element and inject it into the DOM.\n * It checks if the style already exists, and if it does, it does not inject it again.\n * @param key\n * @param styles\n */\nexport function useInjectStyles(key: string, styles: string) {\n\n const portalContainer = usePortalContainer();\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const targetContainer: HTMLElement | null = portalContainer ?? document.head;\n\n // Try to find an existing style element within the target container first\n const existingStyle = (targetContainer as HTMLElement).querySelector?.(`#${key}`) as HTMLStyleElement | null;\n\n if (!existingStyle) {\n const style = document.createElement(\"style\");\n style.id = key;\n style.innerHTML = styles;\n (targetContainer || document.head).appendChild(style);\n }\n }, []);\n\n}\n","\"use client\";\n\nimport { RefObject, useEffect } from \"react\";\n\n/**\n * Hook that alerts clicks outside the passed ref\n */\nexport function useOutsideAlerter(ref: RefObject<HTMLElement | null>, onOutsideClick: () => void, active = true): void {\n useEffect(() => {\n if (!active)\n return;\n\n /**\n * Alert if clicked on outside of element\n */\n function handleClickOutside(event: Event) {\n if (isInPresentationLayer(event.target as Node)) {\n return;\n }\n\n if (ref.current && !ref.current.contains(event.target as Node)) {\n onOutsideClick();\n }\n }\n\n // Bind the event listener\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref, active, onOutsideClick]);\n}\n\n/**\n * Check if any parent of the node is a presentation node\n * @param node\n */\nfunction isInPresentationLayer(node: Node | null): boolean {\n if (node instanceof HTMLElement) {\n if (node.getAttribute(\"role\") === \"presentation\")\n return true;\n return isInPresentationLayer(node.parentNode);\n }\n return false;\n}\n","import React from \"react\";\n\nexport function useDebouncedCallback<T>(value: T, callback: () => void, immediate: boolean, timeoutMs = 300) {\n\n const pendingUpdate = React.useRef(false);\n\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const performUpdate = React.useCallback(() => {\n callbackRef.current();\n pendingUpdate.current = false;\n }, []);\n\n const handlerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n React.useEffect(\n () => {\n if (immediate) {\n clearTimeout(handlerRef.current);\n if (pendingUpdate.current) {\n performUpdate();\n }\n return;\n }\n\n pendingUpdate.current = true;\n clearTimeout(handlerRef.current);\n handlerRef.current = setTimeout(performUpdate, timeoutMs);\n return () => {\n if (immediate)\n performUpdate();\n };\n },\n [immediate, value, performUpdate, timeoutMs]\n );\n}\n","import { useCallback, useRef } from \"react\";\n\n\nexport function useDebounceCallback<T extends (...args: any[]) => unknown>(\n callback?: T,\n delay?: number\n): T {\n const timeoutRef = useRef<number | null>(null);\n\n const debouncedCallback = useCallback((...args: Parameters<T>) => {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n callback?.(...args);\n }, delay ?? 200);\n }, [callback, delay]);\n\n return debouncedCallback as T;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function useDebounceValue<T>(value: T, delay = 300): T {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n return debouncedValue;\n}\n","\"use client\";\nimport React from \"react\";\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\n\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\ninterface CollapseProps {\n children?: React.ReactNode;\n className?: string;\n in?: boolean;\n duration?: number;\n}\n\nexport const Collapse = React.memo(({\n children,\n className,\n in: isOpen = false,\n duration = 220\n }: CollapseProps) => {\n\n useInjectStyles(`Collapse-${duration}`, `\n.CollapseContent-${duration} {\n overflow: hidden;\n}\n.CollapseContent-${duration}[data-state='open'] {\n animation: slideDown ${duration}ms ease-out;\n}\n.CollapseContent-${duration}[data-state='closed'] {\n animation: slideUp ${duration}ms ease-in;\n}\n\n@keyframes slideDown {\n from {\n height: 0;\n }\n to {\n height: var(--radix-collapsible-content-height);\n }\n}\n\n@keyframes slideUp {\n from {\n height: var(--radix-collapsible-content-height);\n }\n to {\n height: 0;\n }\n}\n`);\n\n return (\n <Collapsible.Root\n open={isOpen}\n className={className}>\n\n <Collapsible.Content\n className={cls(`CollapseContent-${duration}`)}\n >\n {children}\n </Collapsible.Content>\n </Collapsible.Root>\n )\n});\n\nCollapse.displayName = \"Collapse\";\n","\"use client\";\nimport React from \"react\";\n\nimport { paperMixin } from \"../styles\";\nimport { Collapse } from \"./Collapse\";\nimport { cls } from \"../util\";\nimport { useOutsideAlerter } from \"../hooks\";\n\nexport type AutocompleteProps = {\n children: React.ReactNode;\n open: boolean;\n setOpen: (open: boolean) => void;\n className?: string;\n}\n\nexport const useAutoComplete = ({ ref }: {\n ref: React.MutableRefObject<HTMLDivElement | null>;\n}) => {\n\n const [autoCompleteOpen, setAutoCompleteOpen] = React.useState(false);\n const [inputFocused, setInputFocused] = React.useState(false);\n\n // if ref is not focused, close autocomplete\n React.useEffect(() => {\n if (ref.current) {\n ref.current.onfocus = () => {\n setAutoCompleteOpen(true);\n setInputFocused(true);\n }\n ref.current.onblur = () => {\n setInputFocused(false);\n }\n }\n }, [ref]);\n\n return {\n inputFocused,\n autoCompleteOpen,\n setAutoCompleteOpen\n };\n}\n\nexport function Autocomplete({\n children,\n open,\n setOpen,\n className\n }: AutocompleteProps) {\n\n const autocompleteRef = React.useRef<HTMLDivElement>(null);\n useOutsideAlerter(autocompleteRef, () => setOpen(false));\n\n return <Collapse\n in={open}\n duration={30}\n className={cls(\n \"absolute top-full left-0 right-0 overflow-visible\",\n open ? \"shadow-2xs\" : \"\",\n \"my-2\",\n \"z-20\",\n \"w-full\")}>\n <div ref={autocompleteRef}\n className={cls(\n open ? paperMixin : \"\",\n \"bg-surface-50 dark:bg-surface-800\",\n className\n )}>\n {children}\n </div>\n </Collapse>;\n\n}\n\nexport type AutocompleteItemProps = {\n children: React.ReactNode,\n onClick?: () => void,\n className?: string\n};\n\nexport const AutocompleteItem = React.memo(function AutocompleteItem({\n children,\n onClick,\n className\n }: AutocompleteItemProps) {\n\n return (\n <div\n className={cls(\"flex w-full items-center h-[48px] cursor-pointer hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800\", className)}\n onClick={onClick}>\n {children}\n </div>\n )\n});\n","import * as React from \"react\";\nimport { cls } from \"../util\";\n\nexport interface AlertProps {\n children: React.ReactNode;\n onDismiss?: () => void;\n color?: \"error\" | \"warning\" | \"info\" | \"success\" | \"base\";\n size?: \"small\" | \"medium\" | \"large\";\n action?: React.ReactNode;\n className?: string;\n outerClassName?: string;\n style?: React.CSSProperties;\n}\n\nconst getSizeClasses = (size: \"small\" | \"medium\" | \"large\") => {\n switch (size) {\n case \"small\":\n return \"px-4 py-1\";\n case \"large\":\n return \"px-4 py-4\";\n case \"medium\":\n default:\n return \"px-4 py-2\";\n }\n}\nconst getColorClasses = (severity: string) => {\n switch (severity) {\n case \"error\":\n return \"bg-red-50 dark:bg-red-800 dark:text-red-100 text-red-900 border-l-[3px] border-l-red-500\";\n case \"warning\":\n return \"bg-amber-50 dark:bg-amber-800 dark:text-amber-100 text-amber-900 border-l-[3px] border-l-amber-500\";\n case \"info\":\n return \"bg-blue-100 dark:bg-blue-800 dark:text-blue-100 text-blue-900 border-l-[3px] border-l-blue-500\";\n case \"success\":\n return \"bg-emerald-50 dark:bg-emerald-800 dark:text-emerald-100 text-emerald-900 border-l-[3px] border-l-emerald-500\";\n case \"base\":\n default:\n return \"bg-surface-accent-50 dark:bg-surface-accent-800 dark:text-white text-surface-accent-900 border-l-[3px] border-l-surface-accent-400\";\n }\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n children,\n onDismiss,\n color = \"info\",\n size = \"medium\",\n action,\n outerClassName,\n className,\n style\n }) => {\n const classes = getColorClasses(color);\n\n return (\n <div\n style={style}\n className={cls(\n getSizeClasses(size),\n \"w-full\",\n \"font-medium\",\n \"rounded-lg flex items-center gap-2\",\n classes,\n outerClassName)}>\n <div className={cls(\"grow\", className)}>{children}</div>\n {onDismiss && (\n <button\n className=\"text-surface-accent-400 hover:text-surface-accent-600 dark:text-surface-accent-500 dark:hover:text-surface-accent-400\"\n onClick={onDismiss}>\n ×\n </button>\n )}\n {action}\n </div>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { cls } from \"../util\";\n\nexport interface AvatarProps {\n src?: string;\n alt?: string;\n children?: React.ReactNode;\n className?: string;\n outerClassName?: string;\n hover?: boolean;\n style?: React.CSSProperties;\n}\n\nconst AvatarInner: React.ForwardRefRenderFunction<HTMLButtonElement, AvatarProps> = (\n {\n src,\n alt,\n children,\n className,\n style,\n outerClassName,\n hover = true,\n ...props\n },\n ref\n) => {\n const [isImageError, setIsImageError] = useState(false);\n\n const handleImageError = () => {\n setIsImageError(true);\n };\n\n return (\n <button\n ref={ref}\n style={style}\n {...props}\n className={cls(\n \"rounded-full flex items-center justify-center overflow-hidden\",\n \"p-1 w-12 h-12 min-w-12 min-h-12\",\n hover && \"hover:bg-surface-accent-200 dark:hover:bg-surface-accent-700\",\n outerClassName\n )}\n >\n {src && !isImageError ? (\n <img\n className={cls(\n \"bg-surface-accent-100 dark:bg-surface-accent-800\",\n \"w-full h-full object-cover rounded-full\",\n className\n )}\n src={src}\n alt={alt}\n onError={handleImageError}\n />\n ) : (\n <span\n className={cls(\n \"bg-surface-accent-100 dark:bg-surface-accent-800\",\n \"flex items-center justify-center\",\n \"w-full h-full py-1.5 text-lg font-medium text-surface-accent-900 dark:text-white rounded-full\",\n className\n )}\n >\n {children}\n </span>\n )}\n </button>\n );\n};\n\nexport const Avatar = React.forwardRef(AvatarInner);\n","\"use client\";\nimport React from \"react\";\nimport { cls } from \"../util\";\n\nexport type BooleanSwitchProps = {\n value: boolean | null;\n className?: string;\n disabled?: boolean;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n} & ({\n allowIndeterminate: true;\n onValueChange?: (newValue: boolean | null) => void;\n} | {\n allowIndeterminate?: false;\n onValueChange?: (newValue: boolean) => void;\n});\n\nexport const BooleanSwitch = React.forwardRef(function BooleanSwitch({\n value,\n allowIndeterminate,\n className,\n onValueChange,\n disabled = false,\n size = \"medium\",\n ...props\n }: BooleanSwitchProps, ref: React.Ref<HTMLButtonElement>) {\n return <button\n type=\"button\"\n role=\"switch\"\n aria-checked={allowIndeterminate && (value === null || value === undefined) ? \"mixed\" : !!value}\n aria-disabled={disabled || undefined}\n ref={ref}\n tabIndex={disabled ? -1 : undefined}\n onClick={disabled\n ? (e) => e.preventDefault()\n : (e) => {\n e.preventDefault();\n if (allowIndeterminate) {\n if (value === null || value === undefined) onValueChange?.(true)\n else if (value) onValueChange?.(false)\n else onValueChange?.(null);\n } else {\n onValueChange?.(!value);\n }\n }}\n className={cls(\n size === \"smallest\" ? \"w-[34px] h-[18px] min-w-[34px] min-h-[18px]\" : size === \"small\" ? \"w-[38px] h-[22px] min-w-[38px] min-h-[22px]\" : \"w-[44px] h-[26px] min-w-[44px] min-h-[26px]\",\n \"outline-none outline-hidden rounded-full relative shadow-sm\",\n value ? (disabled\n ? \"bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-950 border-surface-accent-100 dark:border-surface-accent-700 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700\"\n : \"ring-secondary ring-1 bg-secondary dark:bg-secondary\") : \"bg-white bg-opacity-54 bg-white/54 dark:bg-surface-accent-900 ring-1 ring-surface-accent-200 dark:ring-surface-accent-700\",\n className\n )}\n {...props}\n >\n {allowIndeterminate && (value === null || value === undefined) && <div\n key={\"knob\"}\n className={cls(\n \"block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm\",\n disabled ? \"bg-surface-accent-400 dark:bg-surface-accent-600\" : \"bg-surface-accent-400 dark:bg-surface-accent-600\",\n {\n \"w-[21px] h-[10px]\": size === \"medium\" || size === \"large\",\n \"w-[19px] h-[8px]\": size === \"small\",\n \"w-[16px] h-[6px]\": size === \"smallest\",\n \"translate-x-[10px]\": size === \"medium\" || size === \"large\",\n \"translate-x-[9px]\": size === \"small\",\n \"translate-x-[8px]\": size === \"smallest\"\n }\n )}\n />}\n\n {!(allowIndeterminate && (value === null || value === undefined)) && <div\n key={\"knob\"}\n className={cls(\n \"block rounded-full transition-transform duration-100 ease-out transform will-change-auto shadow-sm\",\n disabled ? \"bg-surface-accent-300 dark:bg-surface-700\" : (value ? \"bg-white shadow\" : \"bg-surface-accent-600 dark:bg-surface-accent-400\"),\n {\n \"w-[21px] h-[21px]\": size === \"medium\" || size === \"large\",\n \"w-[19px] h-[19px]\": size === \"small\",\n \"w-[16px] h-[16px]\": size === \"smallest\",\n [value ? \"translate-x-[19px]\" : \"translate-x-[3px]\"]: size === \"medium\" || size === \"large\",\n [value ? \"translate-x-[17px]\" : \"translate-x-[2px]\"]: size === \"small\",\n [value ? \"translate-x-[16px]\" : \"translate-x-[1px]\"]: size === \"smallest\"\n }\n )}\n />}\n </button>;\n }\n) as React.ForwardRefExoticComponent<BooleanSwitchProps & React.RefAttributes<HTMLButtonElement>>;\n","\"use client\";\nimport React from \"react\";\nimport {\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundMixin,\n focusedClasses\n} from \"../styles\";\nimport { BooleanSwitch, BooleanSwitchProps } from \"./BooleanSwitch\";\nimport { cls } from \"../util\";\n\nexport type BooleanSwitchWithLabelProps = BooleanSwitchProps & {\n position?: \"start\" | \"end\",\n invisible?: boolean,\n label?: React.ReactNode,\n error?: boolean,\n autoFocus?: boolean,\n fullWidth?: boolean,\n className?: string,\n inputClassName?: string,\n};\n\n/**\n * Simple boolean switch.\n *\n */\nexport const BooleanSwitchWithLabel = function BooleanSwitchWithLabel({\n value,\n position = \"end\",\n size = \"medium\",\n invisible,\n onValueChange,\n error,\n label,\n autoFocus,\n disabled,\n className,\n fullWidth = true,\n inputClassName,\n ...props\n }: BooleanSwitchWithLabelProps) {\n\n const ref = React.useRef<HTMLDivElement | null>(null);\n const refInput = React.useRef<HTMLButtonElement | null>(null);\n const switchLabelId = React.useId();\n const [_, setFocused] = React.useState(autoFocus)\n const onFocus = () => setFocused(true);\n const onBlur = () => setFocused(false);\n\n React.useEffect(() => {\n if (autoFocus) {\n // refInput.current?.focus();\n }\n }, []);\n\n const focus = document.activeElement === refInput?.current || document.activeElement === ref?.current\n\n return (\n <div\n ref={ref}\n onFocus={onFocus}\n onBlur={onBlur}\n role=\"switch\"\n aria-checked={props.allowIndeterminate && (value === null || value === undefined) ? \"mixed\" : !!value}\n aria-disabled={disabled || undefined}\n aria-labelledby={label ? switchLabelId : undefined}\n tabIndex={-1}\n className={cls(\n !invisible && fieldBackgroundMixin,\n !invisible && (disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin),\n disabled ? \"cursor-default\" : \"cursor-pointer\",\n \"rounded-lg max-w-full justify-between box-border relative inline-flex items-center\",\n !invisible && focus && !disabled ? focusedClasses : \"\",\n error ? \"text-red-500 dark:text-red-600\" : (focus && !disabled ? \"text-primary\" : (!disabled ? \"text-text-primary dark:text-text-primary-dark\" : \"text-text-secondary dark:text-text-secondary-dark\")),\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n size === \"small\" || size === \"smallest\" ? \"pl-2\" : \"pl-4\",\n size === \"small\" || size === \"smallest\" ? \"pr-4\" : \"pr-6\",\n position === \"end\" ? \"flex-row-reverse\" : \"flex-row\",\n fullWidth ? \"w-full\" : \"\",\n className\n )}\n onClick={disabled ? undefined : (e) => {\n if (props.allowIndeterminate) {\n const onChange = onValueChange as ((newValue: boolean | null) => void) | undefined;\n if (value === null || value === undefined) onChange?.(true)\n else if (value) onChange?.(false)\n else onChange?.(null);\n } else {\n onValueChange?.(!value);\n }\n // refInput.current?.focus();\n }}\n >\n\n <BooleanSwitch\n value={value}\n ref={refInput}\n size={size}\n className={cls(invisible && focus ? focusedClasses : \"\", inputClassName)}\n disabled={disabled}\n {...props}\n />\n\n <div id={switchLabelId} className={cls(\n \"grow\",\n position === \"end\" ? \"mr-4\" : \"ml-4\",\n size === \"small\" || size === \"smallest\" ? \"text-sm\" : \"text-base\"\n )}>\n {label}\n </div>\n\n </div>\n\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { cls } from \"../util\";\n\nexport type ButtonProps<C extends React.ElementType = \"button\"> = {\n children?: React.ReactNode;\n variant?: \"filled\" | \"outlined\" | \"text\";\n disabled?: boolean;\n color?: \"primary\" | \"secondary\" | \"text\" | \"error\" | \"neutral\";\n size?: \"small\" | \"medium\" | \"large\" | \"xl\" | \"2xl\";\n startIcon?: React.ReactNode;\n fullWidth?: boolean;\n className?: string;\n component?: C;\n onClick?: React.MouseEventHandler<HTMLElement>;\n} & React.ComponentPropsWithoutRef<C>;\n\nconst ButtonInner = React.memo(React.forwardRef<\n HTMLButtonElement,\n ButtonProps<React.ElementType>\n>(({\n children,\n className,\n variant = \"filled\",\n disabled = false,\n size = \"medium\",\n startIcon = null,\n fullWidth = false,\n component: Component,\n color = \"neutral\",\n ...props\n }: ButtonProps<React.ElementType>, ref) => {\n\n const baseClasses =\n \"typography-button h-fit rounded-lg whitespace-nowrap inline-flex items-center justify-center p-2 px-4 focus:outline-none transition-colors ease-in-out duration-150 gap-2\";\n\n const buttonClasses = cls({\n \"w-full\": fullWidth,\n \"w-fit\": !fullWidth,\n\n // Filled Variants\n \"border border-primary bg-primary focus:ring-primary text-white hover:text-white hover:brightness-105\": variant === \"filled\" && color === \"primary\" && !disabled,\n \"border border-secondary bg-secondary focus:ring-secondary text-white hover:text-white hover:brightness-105\": variant === \"filled\" && color === \"secondary\" && !disabled,\n \"border border-red-500 bg-red-500 hover:bg-red-600 focus:ring-red-500 text-white hover:text-white\": variant === \"filled\" && color === \"error\" && !disabled,\n \"border border-surface-accent-200 bg-surface-accent-200 hover:bg-surface-accent-300 focus:ring-surface-accent-400 text-text-primary hover:text-text-primary dark:border-surface-accent-700 dark:bg-surface-accent-700 dark:hover:bg-surface-accent-600 dark:text-text-primary-dark hover:dark:text-text-primary-dark\": variant === \"filled\" && color === \"text\" && !disabled,\n \"border border-transparent bg-surface-100 hover:bg-surface-accent-200 text-text-primary dark:bg-surface-700 dark:hover:bg-surface-accent-700 dark:text-text-primary-dark hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark\": variant === \"filled\" && color === \"neutral\" && !disabled,\n\n // Text Variants\n \"border border-transparent text-primary hover:text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"primary\" && !disabled,\n \"border border-transparent text-secondary hover:text-secondary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"secondary\" && !disabled,\n \"border border-transparent text-red-500 hover:text-red-500 hover:bg-red-500 hover:bg-opacity-10 hover:bg-red-500/10\": variant === \"text\" && color === \"error\" && !disabled,\n \"border border-transparent text-text-primary hover:text-text-primary dark:text-text-primary-dark hover:dark:text-text-primary-dark hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"text\" && !disabled,\n \"border border-transparent text-text-primary hover:text-text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:text-text-primary-dark dark:hover:text-text-primary-dark dark:hover:bg-surface-accent-800\": variant === \"text\" && color === \"neutral\" && !disabled,\n\n // Outlined Variants\n \"border border-primary text-primary hover:text-primary hover:bg-primary-bg hover:bg-primary/10\": variant === \"outlined\" && color === \"primary\" && !disabled,\n \"border border-secondary text-secondary hover:text-secondary hover:bg-secondary-bg\": variant === \"outlined\" && color === \"secondary\" && !disabled,\n \"border border-red-500 text-red-500 hover:text-red-500 hover:bg-red-500 hover:text-white\": variant === \"outlined\" && color === \"error\" && !disabled,\n \"border border-surface-accent-400 text-text-primary hover:text-text-primary dark:text-text-primary-dark dark:border-surface-accent-600 hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\": variant === \"outlined\" && color === \"text\" && !disabled,\n \"border border-surface-300 text-text-primary hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:border-surface-600 dark:text-text-primary-dark dark:hover:bg-surface-accent-800\": variant === \"outlined\" && color === \"neutral\" && !disabled,\n\n // Disabled states for all variants\n \"text-text-disabled dark:text-text-disabled-dark\": disabled,\n \"border border-transparent opacity-50\": variant === \"text\" && disabled,\n \"border border-surface-500 opacity-50\": variant === \"outlined\" && disabled,\n \"border border-transparent bg-surface-300 dark:bg-surface-500 opacity-40 bg-surface-300/40 dark:bg-surface-500/40\": variant === \"filled\" && disabled\n });\n\n const sizeClasses = cls(\n {\n \"py-1 px-2\": size === \"small\",\n \"py-2 px-4\": size === \"medium\",\n \"py-2.5 px-5\": size === \"large\",\n \"py-3 px-6\": size === \"xl\",\n \"py-4 px-10\": size === \"2xl\"\n }\n );\n\n const iconColorClass = (color === \"neutral\" || color === \"text\") && !disabled\n ? \"[&>svg]:text-surface-accent-500 dark:[&>svg]:text-surface-accent-300\"\n : \"\";\n\n if (Component) {\n return (\n <Component\n ref={ref}\n onClick={props.onClick}\n className={cls(startIcon ? \"pl-3\" : \"\", baseClasses, buttonClasses, sizeClasses, iconColorClass, className)}\n {...props}>\n {startIcon}\n {children}\n </Component>\n );\n }\n\n return (\n <button ref={ref as React.Ref<HTMLButtonElement>}\n type={props.type ?? \"button\"}\n onClick={props.onClick}\n className={cls(startIcon ? \"pl-3\" : \"\", baseClasses, buttonClasses, sizeClasses, iconColorClass, className)}\n disabled={disabled}\n data-variant={variant}\n data-size={size}\n {...props as React.ButtonHTMLAttributes<HTMLButtonElement>}>\n {startIcon}\n {children}\n </button>\n );\n\n}));\n\nButtonInner.displayName = \"Button\"\n\nexport const Button = ButtonInner as React.FC<ButtonProps<React.ElementType>>;\n","\"use client\";\nimport React, { useCallback } from \"react\";\nimport { cardClickableMixin, cardMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\ntype CardProps = {\n children: React.ReactNode;\n style?: React.CSSProperties;\n onClick?: (e?: React.MouseEvent) => void;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({\n children,\n className,\n onClick,\n style,\n ...props\n}, ref) => {\n const onKeyPress = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n onClick?.();\n }\n }, [onClick]);\n\n return (\n <div\n ref={ref}\n onKeyPress={onKeyPress}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick}\n className={cls(cardMixin, onClick && cardClickableMixin, className)}\n style={style}\n {...props}>\n {children}\n </div>\n );\n});\n\nCard.displayName = \"Card\";\n\nexport { Card };\n","\"use client\";\nimport React, { ForwardRefRenderFunction } from \"react\";\nimport { cls } from \"../util\";\n\nexport type ContainerProps = {\n children: React.ReactNode;\n style?: React.CSSProperties;\n className?: string;\n maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"6xl\" | \"7xl\";\n}\n\nconst containerMaxWidths = {\n xs: \"max-w-xs\",\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n \"2xl\": \"max-w-2xl\",\n \"3xl\": \"max-w-3xl\",\n \"4xl\": \"max-w-4xl\",\n \"5xl\": \"max-w-5xl\",\n \"6xl\": \"max-w-6xl\",\n \"7xl\": \"max-w-7xl\"\n}\n\nconst ContainerInner: ForwardRefRenderFunction<HTMLDivElement, ContainerProps> = (\n {\n children,\n className,\n style,\n maxWidth = \"7xl\"\n },\n ref\n) => {\n\n const classForMaxWidth = maxWidth ? containerMaxWidths[maxWidth] : \"\";\n\n return (\n <div\n ref={ref}\n className={cls(\"mx-auto px-3 md:px-4 lg-px-6\",\n classForMaxWidth,\n className)}\n style={style}>\n {children}\n </div>\n );\n}\n\nexport const Container = React.forwardRef(ContainerInner);\n\n","\"use client\";\nimport React from \"react\";\nimport { Container } from \"./Container\";\nimport { cls } from \"../util\";\n\nexport type CenteredViewProps = {\n children: React.ReactNode;\n maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"6xl\" | \"7xl\";\n outerClassName?: string;\n className?: string;\n fullScreen?: boolean;\n};\n\nexport const CenteredView = React.forwardRef<HTMLDivElement, CenteredViewProps>(({\n children,\n maxWidth,\n outerClassName,\n className,\n fullScreen,\n ...rest\n }, ref) => { // Notice how the ref is now received as the second argument\n\n return (\n <div ref={ref}\n className={cls(\"flex flex-col grow\", fullScreen ? \"h-screen\" : \"h-full\", outerClassName)}\n {...rest}>\n <Container className={cls(\"m-auto\", className)} maxWidth={maxWidth}>\n {children}\n </Container>\n </div>\n );\n\n});\n\nCenteredView.displayName = \"CenteredView\";\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport type CircularProgressProps = {\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\",\n className?: string\n}\n\nexport function CircularProgress({\n size = \"medium\",\n className\n }: CircularProgressProps) {\n\n let sizeClasses = \"\";\n if (size === \"smallest\") {\n sizeClasses = \"w-4 h-4\";\n } else if (size === \"small\") {\n sizeClasses = \"w-6 h-6\";\n } else if (size === \"medium\") {\n sizeClasses = \"w-8 h-8 m-1\";\n } else {\n sizeClasses = \"w-10 h-10 m-1\";\n }\n\n let borderClasses = \"\";\n if (size === \"smallest\") {\n borderClasses = \"border-2\";\n } else if (size === \"small\") {\n borderClasses = \"border-2\";\n } else if (size === \"medium\") {\n borderClasses = \"border-[3px]\";\n } else {\n borderClasses = \"border-4\";\n }\n\n return (\n <div\n className={cls(\n sizeClasses,\n borderClasses,\n \"inline-block shrink-0 rounded-full border-solid align-[-0.125em]\",\n \"animate-[spin_0.7s_linear_infinite] motion-reduce:animate-[spin_1.5s_linear_infinite]\",\n \"border-surface-200 dark:border-surface-700 border-t-primary dark:border-t-primary\",\n className)}\n role=\"status\">\n <span\n className=\"absolute! -m-px! h-px! w-px! overflow-hidden! whitespace-nowrap! border-0! p-0! [clip:rect(0,0,0,0)]!\"\n >\n Loading...\n </span>\n </div>\n );\n}\n","import React, { ReactEventHandler } from \"react\";\nimport { cls } from \"../util\";\n\nexport type TypographyVariant = keyof typeof typographyVariants;\nexport type TypographyProps<C extends React.ElementType = \"span\"> = {\n align?: \"center\" | \"inherit\" | \"justify\" | \"left\" | \"right\";\n children?: React.ReactNode;\n className?: string;\n component?: C;\n gutterBottom?: boolean;\n noWrap?: boolean;\n paragraph?: boolean;\n variant?: TypographyVariant;\n variantMapping?: { [key: string]: string };\n color?: \"inherit\" | \"initial\" | \"primary\" | \"secondary\" | \"disabled\" | \"error\";\n onClick?: ReactEventHandler<HTMLElement>;\n style?: React.CSSProperties;\n} & React.ComponentPropsWithoutRef<C>;\n\nconst typographyVariants = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n subtitle1: \"h6\",\n subtitle2: \"h6\",\n label: \"label\",\n body1: \"p\",\n body2: \"p\",\n inherit: \"p\",\n caption: \"p\",\n button: \"span\"\n};\n\nconst colorToClasses = {\n inherit: \"text-inherit\",\n initial: \"text-current\",\n primary: \"text-text-primary dark:text-text-primary-dark\",\n secondary: \"text-text-secondary dark:text-text-secondary-dark\",\n disabled: \"text-text-disabled dark:text-text-disabled-dark\",\n error: \"text-red-600 dark:text-red-500\"\n};\n\nconst gutterBottomClasses = {\n h1: \"mb-5\",\n h2: \"mb-4\",\n h3: \"mb-4\",\n h4: \"mb-4\",\n h5: \"mb-3\",\n h6: \"mb-3\",\n subtitle1: \"mb-3\",\n subtitle2: \"mb-3\",\n body1: \"mb-3\",\n body2: \"mb-3\",\n inherit: \"mb-3\",\n caption: \"mb-2\",\n button: \"mb-2\",\n label: \"mb-2\"\n};\n\nconst variantToClasses = {\n h1: \"typography-h1\",\n h2: \"typography-h2\",\n h3: \"typography-h3\",\n h4: \"typography-h4\",\n h5: \"typography-h5\",\n h6: \"typography-h6\",\n subtitle1: \"typography-subtitle1\",\n subtitle2: \"typography-subtitle2\",\n body1: \"typography-body1\",\n body2: \"typography-body2\",\n label: \"typography-label\",\n inherit: \"typography-inherit\",\n caption: \"typography-caption\",\n button: \"typography-button\"\n};\n\nexport function Typography<C extends React.ElementType = \"span\">(\n {\n align = \"inherit\",\n color = \"primary\",\n children,\n className,\n component,\n gutterBottom = false,\n noWrap = false,\n paragraph = false,\n variant = \"body1\",\n variantMapping = typographyVariants,\n style,\n onClick,\n ...other\n }: TypographyProps<C>\n) {\n const Component =\n component ||\n (paragraph ? \"p\" : variantMapping[variant] || typographyVariants[variant]) ||\n \"span\";\n\n const classes = cls(\n variantToClasses[variant],\n color ? colorToClasses[color] : \"\",\n align !== \"inherit\" && `text-${align}`,\n gutterBottom && gutterBottomClasses[variant],\n noWrap && \"truncate\",\n paragraph && \"mb-3\",\n className\n );\n\n return (\n <Component className={classes}\n onClick={onClick}\n style={style}\n {...other}>\n {children}\n </Component>\n );\n}\n","import React from \"react\";\nimport { CircularProgress, CircularProgressProps } from \"./CircularProgress\";\nimport { Typography } from \"./Typography\";\n\n/**\n *\n * @param text\n * @param props\n\n * @ignore\n */\nexport function CircularProgressCenter({ text, ...props }: CircularProgressProps & {\n text?: string\n}) {\n return (\n <div\n className=\"flex w-full h-screen max-h-full max-w-full gap-4\">\n <div className=\"m-auto flex flex-col gap-2 items-center\">\n <CircularProgress {...props}/>\n {text && <Typography\n color={\"secondary\"}\n variant={\"caption\"}\n className=\"text-center\">{text}</Typography>}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nexport type IconColor = \"inherit\" | \"primary\" | \"secondary\" | \"disabled\" | \"error\" | \"success\" | \"warning\";\nexport type IconSize = \"smallest\" | \"small\" | \"medium\" | \"large\";\n\n/**\n * Standardized icon size map in px.\n * Use with direct Lucide imports: `<Database size={iconSize.small} />`\n */\nexport const iconSize = {\n smallest: 16,\n small: 20,\n medium: 24,\n large: 28\n} as const satisfies Record<IconSize, number>;\n\nexport type IconProps = {\n size?: IconSize | number,\n color?: IconColor,\n className?: string,\n onClick?: (e: React.SyntheticEvent) => void,\n style?: React.CSSProperties,\n}\n\nexport const colorClassesMapping: Record<IconColor, string> = {\n inherit: \"\",\n primary: \"text-primary\",\n success: \"text-green-500\",\n warning: \"text-yellow-500\",\n secondary: \"text-secondary\",\n disabled: \"text-text-disabled dark:text-text-disabled-dark\",\n error: \"text-red-500\"\n}\n","\nimport React, { ErrorInfo, PropsWithChildren } from \"react\";\n\nimport { AlertCircleIcon, ShieldAlertIcon, RefreshCwIcon, ArrowLeftIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport { Typography } from \"./Typography\";\nimport { Button } from \"./Button\";\nimport { cls } from \"../util\";\n\n/**\n * Checks whether the error message relates to missing permissions or\n * authorization failures. Used to show a friendlier message in fullPage mode.\n */\nfunction isPermissionError(error: Error | null): boolean {\n if (!error) return false;\n const msg = error.message?.toLowerCase() ?? \"\";\n const code = (error as { code?: string }).code?.toLowerCase() ?? \"\";\n return msg.includes(\"permission\")\n || msg.includes(\"insufficient\")\n || msg.includes(\"unauthorized\")\n || msg.includes(\"forbidden\")\n || msg.includes(\"access denied\")\n || code === \"permission_denied\"\n || code === \"insufficient_permissions\"\n || (error as { status?: number }).status === 403;\n}\n\nexport interface ErrorBoundaryProps {\n /**\n * When true, renders a full-page centered error screen instead of the\n * compact inline error. Intended for wrapping top-level app roots or\n * major route sections.\n */\n fullPage?: boolean;\n /**\n * Optional callback invoked when the user clicks \"Try again\". If provided,\n * the boundary resets its error state and calls this handler. If omitted,\n * the \"Try again\" button resets the boundary state, re-mounting children.\n */\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n showDetails: boolean;\n}\n\nexport class ErrorBoundary extends React.Component<PropsWithChildren<ErrorBoundaryProps>, ErrorBoundaryState> {\n constructor(props: PropsWithChildren<ErrorBoundaryProps>) {\n super(props);\n this.state = { error: null,\nshowDetails: false };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, _errorInfo: ErrorInfo) {\n console.error(error);\n }\n\n private handleReset = () => {\n this.setState({ error: null,\nshowDetails: false });\n this.props.onReset?.();\n };\n\n private handleReload = () => {\n window.location.reload();\n };\n\n private toggleDetails = () => {\n this.setState(prev => ({ showDetails: !prev.showDetails }));\n };\n\n render() {\n if (this.state.error) {\n if (this.props.fullPage) {\n return this.renderFullPage();\n }\n return this.renderInline();\n }\n\n return this.props.children;\n }\n\n private renderInline() {\n return (\n <div className=\"flex flex-col m-2\">\n <div className=\"flex items-center m-2\">\n <AlertCircleIcon className={\"text-red-500\"} size={iconSize.small}/>\n <div className=\"ml-4\">Error</div>\n </div>\n <Typography variant={\"caption\"}>\n {this.state.error?.message ?? \"See the error in the console\"}\n </Typography>\n </div>\n );\n }\n\n private renderFullPage() {\n const { error, showDetails } = this.state;\n const isPermission = isPermissionError(error);\n\n const Icon = isPermission ? ShieldAlertIcon : AlertCircleIcon;\n const title = isPermission\n ? \"Access denied\"\n : \"Something went wrong\";\n const description = isPermission\n ? \"You don't have permission to access this resource. Please check your account permissions or contact your administrator.\"\n : \"An unexpected error occurred. You can try reloading the page or going back.\";\n\n return (\n <div className={cls(\n \"flex items-center justify-center min-h-[400px] h-full w-full\",\n \"bg-surface-50 dark:bg-surface-950\"\n )}>\n <div className=\"flex flex-col items-center max-w-md px-6 py-10 text-center\">\n <div className={cls(\n \"flex items-center justify-center w-14 h-14 rounded-2xl mb-6\",\n isPermission\n ? \"bg-amber-100 dark:bg-amber-900/30\"\n : \"bg-red-100 dark:bg-red-900/30\"\n )}>\n <Icon\n size={28}\n className={isPermission\n ? \"text-amber-600 dark:text-amber-400\"\n : \"text-red-500 dark:text-red-400\"}\n />\n </div>\n\n <Typography variant={\"h6\"}\n className=\"text-text-primary dark:text-text-primary-dark mb-2\">\n {title}\n </Typography>\n\n <Typography variant={\"body2\"}\n className=\"text-text-secondary dark:text-text-secondary-dark mb-8\">\n {description}\n </Typography>\n\n <div className=\"flex gap-3\">\n <Button\n variant=\"outlined\"\n color=\"neutral\"\n size=\"medium\"\n onClick={this.handleReset}\n >\n <ArrowLeftIcon size={16}/>\n Try again\n </Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n size=\"medium\"\n onClick={this.handleReload}\n >\n <RefreshCwIcon size={16}/>\n Reload page\n </Button>\n </div>\n\n {error?.message && (\n <div className=\"mt-8 w-full\">\n <button\n onClick={this.toggleDetails}\n className={cls(\n \"flex items-center gap-1 mx-auto text-xs\",\n \"text-text-disabled dark:text-text-disabled-dark\",\n \"hover:text-text-secondary dark:hover:text-text-secondary-dark\",\n \"transition-colors cursor-pointer bg-transparent border-none p-0\"\n )}\n >\n Technical details\n {showDetails\n ? <ChevronUpIcon size={14}/>\n : <ChevronDownIcon size={14}/>}\n </button>\n {showDetails && (\n <div className={cls(\n \"mt-3 p-3 rounded-lg text-left text-xs\",\n \"bg-surface-100 dark:bg-surface-800\",\n \"text-text-secondary dark:text-text-secondary-dark\",\n \"font-mono break-all\"\n )}>\n {error.message}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n","\nimport React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\n\nimport { CheckIcon, MinusIcon } from \"lucide-react\";\nimport { cls } from \"../util\";\n\nexport interface CheckboxProps {\n checked: boolean;\n id?: string;\n disabled?: boolean;\n indeterminate?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n padding?: boolean;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n color?: \"primary\" | \"secondary\";\n \"aria-label\"?: string;\n}\n\nconst sizeClasses = {\n large: \"w-6 h-6 rounded flex items-center justify-center\",\n medium: \"w-5 h-5 rounded flex items-center justify-center\",\n small: \"w-4 h-4 rounded flex items-center justify-center\",\n smallest: \"w-4 h-4 rounded flex items-center justify-center\"\n};\n\nconst outerSizeClasses = {\n medium: \"w-10 h-10\",\n small: \"w-8 h-8\",\n large: \"w-12 h-12 \",\n smallest: \"w-8 h-8\"\n}\nconst paddingClasses = {\n medium: \"p-2\",\n small: \"p-2\",\n large: \"p-2\",\n smallest: \"p-2\"\n}\n\nconst colorClasses = {\n primary: \"bg-primary\",\n secondary: \"bg-secondary\"\n}\n\nexport const Checkbox = React.memo(({\n id,\n checked,\n indeterminate = false,\n padding = true,\n disabled,\n size = \"medium\",\n onCheckedChange,\n color = \"primary\",\n \"aria-label\": ariaLabel\n }: CheckboxProps) => {\n\n const isChecked = indeterminate ? false : checked;\n\n const iconSize = size === \"medium\"\n ? 20\n : size === \"small\"\n ? 16\n : size === \"smallest\"\n ? 14\n : 24;\n return (\n <CheckboxPrimitive.Root\n id={id}\n checked={indeterminate || isChecked}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-checked={indeterminate ? \"mixed\" : isChecked}\n onCheckedChange={disabled ? undefined : onCheckedChange}>\n\n <div className={cls(\n padding ? paddingClasses[size] : \"\",\n outerSizeClasses[size],\n \"inline-flex items-center justify-center text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150\",\n onCheckedChange ? \"rounded-full hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-700 dark:hover:bg-opacity-75 dark:hover:bg-surface-accent-700/75\" : \"\",\n onCheckedChange ? \"cursor-pointer\" : \"cursor-default\"\n )}>\n <div\n className={cls(\n \"border-2 relative transition-colors ease-in-out duration-150\",\n sizeClasses[size],\n disabled\n ? (indeterminate || isChecked ? \"bg-surface-accent-400 dark:bg-surface-accent-600\" : \"bg-surface-accent-400 dark:bg-surface-accent-600\")\n : (indeterminate || isChecked ? colorClasses[color] : \"bg-white dark:bg-surface-900\"),\n (indeterminate || isChecked) ? \"text-surface-accent-100 dark:text-surface-accent-900\" : \"\",\n disabled\n ? \"border-transparent\"\n : (indeterminate || isChecked ? \"border-transparent\" : \"border-surface-accent-800 dark:border-surface-accent-500\")\n )}>\n <CheckboxPrimitive.Indicator asChild>\n {indeterminate\n ? (\n <MinusIcon size={iconSize} className={\"absolute\"}/>\n )\n : (\n <CheckIcon size={iconSize} className={\"absolute\"}/>\n )}\n </CheckboxPrimitive.Indicator>\n </div>\n </div>\n </CheckboxPrimitive.Root>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n","import React from \"react\";\nimport { CHIP_COLORS, cls, getColorSchemeForKey } from \"../util\";\nimport type { ChipColorKey, ChipColorScheme } from \"../util/chip_colors\";\n\nexport type { ChipColorKey, ChipColorScheme };\n\nexport interface ChipProps {\n className?: string;\n children: React.ReactNode;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n colorScheme?: ChipColorScheme | ChipColorKey;\n error?: boolean;\n outlined?: boolean;\n onClick?: () => void;\n icon?: React.ReactNode;\n style?: React.CSSProperties;\n}\n\nconst sizeClassNames = {\n smallest: \"px-1.5 py-px text-[10px]\",\n small: \"px-2 py-0.5 text-xs\",\n medium: \"px-2.5 py-0.5 text-xs\",\n large: \"px-3 py-1 text-xs\"\n}\n\n/**\n * Detect if the app is currently in dark mode by checking the\n * Tailwind `dark` class on the document root.\n */\nfunction isDarkMode(): boolean {\n return typeof document !== \"undefined\" &&\n document.documentElement.classList.contains(\"dark\");\n}\n\n/**\n * Helper to generate rgba from hex or standard colors.\n */\nfunction getRgba(hex: string, alpha: number): string {\n if (!hex || !hex.startsWith(\"#\")) return hex;\n let color = hex.slice(1);\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n const r = parseInt(color.slice(0, 2), 16);\n const g = parseInt(color.slice(2, 4), 16);\n const b = parseInt(color.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n/**\n * @group Preview components\n */\nexport function Chip({\n children,\n colorScheme,\n error,\n outlined,\n onClick,\n icon,\n size = \"medium\",\n className,\n style\n }: ChipProps) {\n\n const usedColorScheme = typeof colorScheme === \"string\" ? getColorSchemeForKey(colorScheme) : colorScheme;\n const dark = isDarkMode();\n\n const hasScheme = error || usedColorScheme;\n\n let textColor = \"\";\n let bgColor = \"\";\n let border = \"\";\n\n if (error) {\n textColor = dark ? \"#f87171\" : \"#dc2626\";\n } else if (usedColorScheme) {\n textColor = dark && usedColorScheme.darkText ? usedColorScheme.darkText : usedColorScheme.text;\n }\n\n if (hasScheme) {\n if (outlined) {\n bgColor = getRgba(textColor, dark ? 0.1 : 0.06);\n border = `1px solid ${getRgba(textColor, dark ? 0.2 : 0.14)}`;\n } else if (error) {\n bgColor = dark ? \"rgba(220, 38, 38, 0.15)\" : \"rgba(239, 68, 68, 0.1)\";\n border = `1px solid ${dark ? \"rgba(220, 38, 38, 0.3)\" : \"rgba(239, 68, 68, 0.2)\"}`;\n } else if (usedColorScheme) {\n bgColor = dark && usedColorScheme.darkColor ? usedColorScheme.darkColor : usedColorScheme.color;\n }\n }\n\n return (\n <div\n className={cls(\"rounded-lg max-w-full w-max h-fit font-medium inline-flex gap-1\",\n \"text-ellipsis\",\n \"items-center\",\n \"transition-colors duration-150\",\n !hasScheme && \"bg-surface-100 dark:bg-surface-800 text-text-secondary dark:text-text-secondary-dark border border-surface-200 dark:border-surface-700\",\n !hasScheme && outlined && \"bg-transparent dark:bg-transparent\",\n onClick ? \"cursor-pointer hover:bg-primary/5 dark:hover:bg-primary/5\" : \"\",\n sizeClassNames[size],\n className)}\n onClick={onClick}\n style={{\n ...(hasScheme ? {\n backgroundColor: bgColor,\n color: textColor,\n border: border || undefined,\n } : {}),\n overflow: \"hidden\",\n ...style\n }}\n >\n {icon}\n {children}\n </div>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type TooltipProps = {\n open?: boolean,\n defaultOpen?: boolean,\n onOpenChange?: (open: boolean) => void,\n side?: \"top\" | \"bottom\" | \"left\" | \"right\",\n align?: \"start\" | \"center\" | \"end\",\n sideOffset?: number,\n title?: string | React.ReactNode,\n delayDuration?: number;\n asChild?: boolean;\n tooltipClassName?: string,\n tooltipStyle?: React.CSSProperties;\n children: React.ReactNode,\n className?: string,\n container?: HTMLElement,\n style?: React.CSSProperties;\n};\n\nexport const Tooltip = ({\n open,\n defaultOpen,\n side = \"bottom\",\n delayDuration = 200,\n sideOffset,\n align,\n onOpenChange,\n title,\n tooltipClassName,\n tooltipStyle,\n children,\n asChild = false,\n container,\n className,\n style\n }: TooltipProps) => {\n\n useInjectStyles(\"Tooltip\", styles);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (container ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n if (!title)\n return <>{children}</>;\n\n const trigger = asChild\n ? <TooltipPrimitive.Trigger asChild={true}>\n {children}\n </TooltipPrimitive.Trigger>\n : <TooltipPrimitive.Trigger asChild={true}>\n <div style={style} className={className}>\n {children}\n </div>\n </TooltipPrimitive.Trigger>;\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root {...(open !== undefined ? { open,\nonOpenChange } : {})} defaultOpen={defaultOpen}>\n {trigger}\n <TooltipPrimitive.Portal container={finalContainer}>\n <TooltipPrimitive.Content\n className={cls(\"TooltipContent\",\n \"max-w-lg leading-relaxed\",\n \"z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 bg-surface-accent-700/90 dark:bg-surface-accent-800/90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100\",\n tooltipClassName)}\n style={tooltipStyle}\n sideOffset={sideOffset === undefined ? 4 : sideOffset}\n align={align}\n side={side}>\n {title}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n\nconst styles = `\n\n.TooltipContent {\n animation-duration: 220ms;\n animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n will-change: transform, opacity;\n}\n\n.TooltipContent[data-state='delayed-open'][data-side='top'] {\n animation-name: slideDownAndFade;\n}\n.TooltipContent[data-state='delayed-open'][data-side='right'] {\n animation-name: slideLeftAndFade;\n}\n.TooltipContent[data-state='delayed-open'][data-side='bottom'] {\n animation-name: slideUpAndFade;\n}\n.TooltipContent[data-state='delayed-open'][data-side='left'] {\n animation-name: slideRightAndFade;\n}\n\n\n@keyframes slideUpAndFade {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideRightAndFade {\n from {\n opacity: 0;\n transform: translateX(-4px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slideDownAndFade {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideLeftAndFade {\n from {\n opacity: 0;\n transform: translateX(4px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}`;\n","\nimport React from \"react\";\nimport { CHIP_COLORS, cls } from \"../util\";\nimport { ChipColorKey, ChipColorScheme } from \"./Chip\";\nimport { CheckIcon } from \"lucide-react\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport interface ColorPickerProps {\n /**\n * Currently selected color key\n */\n value?: ChipColorKey;\n /**\n * Callback when color selection changes. Passes undefined when \"Auto\" is selected.\n */\n onChange: (colorKey: ChipColorKey | undefined) => void;\n /**\n * Size of the color swatches\n */\n size?: \"small\" | \"medium\";\n /**\n * Whether to show the \"Auto\" option that clears the selection\n */\n allowClear?: boolean;\n /**\n * Whether the picker is disabled\n */\n disabled?: boolean;\n}\n\n// Base colors in display order\nconst BASE_COLORS = [\"blue\", \"indigo\", \"violet\", \"purple\", \"fuchsia\", \"pink\", \"rose\", \"red\", \"orange\", \"yellow\", \"green\", \"emerald\", \"teal\", \"cyan\", \"gray\"] as const;\n\n// Helper to get readable name from color key\nfunction getColorDisplayName(colorKey: ChipColorKey): string {\n return `${colorKey.charAt(0).toUpperCase()}${colorKey.slice(1)}`;\n}\n\n/**\n * A color picker component that displays a grid of predefined CHIP_COLORS.\n * Used for selecting colors for enum values, tags, and other chip-based UI elements.\n *\n * @group Form components\n */\nexport function ColorPicker({\n value,\n onChange,\n size = \"medium\",\n allowClear = true,\n disabled = false\n}: ColorPickerProps) {\n\n const swatchSize = size === \"small\" ? \"w-5 h-5\" : \"w-6 h-6\";\n const checkSize = size === \"small\" ? 12 : 14;\n\n return (\n <div className=\"flex flex-col gap-2\">\n {allowClear && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(undefined)}\n className={cls(\n \"flex items-center gap-2 px-2 py-1 rounded text-sm transition-colors\",\n \"hover:bg-surface-accent-100 dark:hover:bg-surface-accent-800\",\n disabled && \"opacity-50 cursor-not-allowed\",\n !value && \"bg-surface-accent-100 dark:bg-surface-accent-800 font-medium\"\n )}\n >\n <div className={cls(\n swatchSize,\n \"rounded-full border-2 border-dashed border-surface-accent-400 dark:border-surface-accent-600\",\n \"flex items-center justify-center\"\n )}>\n {!value && <CheckIcon size={checkSize}/>}\n </div>\n <span className=\"text-surface-accent-700 dark:text-surface-accent-300\">\n Auto (based on ID)\n </span>\n </button>\n )}\n\n <div className=\"flex flex-wrap gap-1.5\">\n {BASE_COLORS.map((base) => {\n const colorKey = base as ChipColorKey;\n const colorScheme = CHIP_COLORS[colorKey] as ChipColorScheme;\n const isSelected = value === colorKey;\n const displayName = getColorDisplayName(colorKey);\n\n return (\n <Tooltip\n key={colorKey}\n title={displayName}\n delayDuration={300}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(colorKey)}\n className={cls(\n swatchSize,\n \"rounded-full transition-all flex items-center justify-center\",\n \"hover:scale-110 hover:shadow-md\",\n \"focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-1\",\n disabled && \"opacity-50 cursor-not-allowed hover:scale-100\",\n isSelected && \"ring-2 ring-primary ring-offset-1\"\n )}\n style={{\n backgroundColor: colorScheme.color\n }}\n aria-label={displayName}\n aria-pressed={isSelected}\n >\n {isSelected && (\n <CheckIcon\n size={checkSize}\n style={{ color: colorScheme.text }}\n />\n )}\n </button>\n </Tooltip>\n );\n })}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport { cls } from \"../util\";\n\nexport type IconButtonProps<C extends React.ElementType> =\n Omit<(C extends \"button\" ? React.ButtonHTMLAttributes<HTMLButtonElement> : React.ComponentProps<C>), \"onClick\">\n & {\n size?: \"medium\" | \"small\" | \"smallest\" | \"large\";\n variant?: \"ghost\" | \"filled\",\n shape?: \"circular\" | \"square\",\n disabled?: boolean;\n toggled?: boolean;\n component?: C;\n onClick?: React.MouseEventHandler<any>;\n \"aria-label\"?: string;\n}\n\nconst buttonClasses = \"hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800 hover:scale-[1.04] active:scale-95 transition-transform\";\nconst baseClasses = \"inline-flex items-center justify-center p-2 text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150\";\nconst colorClasses = \"text-surface-accent-500 visited:text-surface-accent-500 dark:text-surface-accent-300 dark:visited:text-surface-300\";\nconst sizeClasses = {\n medium: \"w-10 !h-10 min-w-10 min-h-10\",\n small: \"w-8 !h-8 min-w-8 min-h-8\",\n smallest: \"w-7 !h-7 min-w-7 min-h-7\",\n large: \"w-12 !h-12 min-w-12 min-h-12\"\n}\nconst shapeClasses = {\n circular: \"rounded-full\",\n square: \"rounded-md\"\n}\n\nconst IconButtonInner = <C extends React.ElementType = \"button\">({\n children,\n className,\n size = \"medium\",\n variant = \"ghost\",\n shape = \"circular\",\n disabled,\n toggled,\n component,\n ...props\n }: IconButtonProps<C>, ref: React.ForwardedRef<HTMLButtonElement>) => {\n\n const bgClasses = variant === \"ghost\" ? \"bg-transparent\" : \"bg-surface-accent-200 bg-opacity-50 bg-surface-accent-200/50 dark:bg-surface-900 dark:bg-opacity-50 dark:bg-surface-900/50\";\n const Component: React.ElementType<any> = component || \"button\";\n const isNativeButton = Component === \"button\";\n return (\n <Component\n type={isNativeButton ? \"button\" : undefined}\n role={isNativeButton ? undefined : \"button\"}\n ref={ref}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : undefined}\n {...props}\n className={cls(\n disabled ? \"opacity-50 pointer-events-none\" : \"cursor-pointer\",\n toggled ? \"outline outline-2 outline-primary\" : \"\",\n \"text-inherit dark:text-inherit\",\n colorClasses,\n bgClasses,\n baseClasses,\n buttonClasses,\n shapeClasses[shape],\n sizeClasses[size],\n className\n )}>\n {children}\n </Component>\n );\n};\n\nexport const IconButton = React.forwardRef(IconButtonInner as React.ForwardRefRenderFunction<HTMLButtonElement, IconButtonProps<any>>) as React.ComponentType<IconButtonProps<any>>;\n","\"use client\";\nimport * as React from \"react\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\nexport type InputLabelProps = {\n children?: React.ReactNode;\n className?: string;\n shrink?: boolean;\n} & React.LabelHTMLAttributes<HTMLLabelElement>;\n\nconst defaultClasses = {\n root: \"origin-left transition-transform block whitespace-nowrap overflow-hidden text-ellipsis max-w-full\",\n shrink: \"transform translate-y-[2px] scale-75 translate-x-[12px]\",\n expanded: \"translate-x-[16px] top-0 transform translate-y-[16px] scale-100\"\n};\n\nexport const InputLabel = React.forwardRef<HTMLLabelElement, InputLabelProps>(function InputLabel(inProps, ref) {\n const {\n shrink,\n className,\n ...other\n } = inProps;\n\n const computedClassName = cls(defaultClasses.root,\n {\n [defaultClasses.shrink]: shrink,\n [defaultClasses.expanded]: !shrink\n }, className);\n\n return (\n <label\n className={cls(\"text-sm font-medium peer-disabled:cursor-not-allowed\",\n defaultBorderMixin, computedClassName)}\n data-shrink={shrink}\n ref={ref}\n {...other}\n />\n );\n});\n","\n\"use client\";\n\nimport React, { useRef, useState } from \"react\";\nimport { CalendarIcon, XIcon, AlertCircleIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport { IconButton } from \"./IconButton\";\nimport { fieldBackgroundDisabledMixin, fieldBackgroundHoverMixin, fieldBackgroundMixin } from \"../styles\";\nimport { InputLabel } from \"./InputLabel\";\nimport { Typography } from \"./Typography\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\nexport type DateTimeFieldProps = {\n value?: Date | null;\n onChange?: (date: Date | null) => void;\n mode?: \"date\" | \"date_time\";\n disabled?: boolean;\n clearable?: boolean;\n error?: boolean;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n label?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n inputClassName?: string;\n invisible?: boolean;\n locale?: string;\n /**\n * IANA timezone string (e.g., \"America/New_York\", \"Europe/London\").\n * Used to display and input dates in the specified timezone.\n * The value passed to onChange will always be in UTC.\n * If not provided, uses the user's local timezone.\n */\n timezone?: string;\n};\n\nexport const DateTimeField: React.FC<DateTimeFieldProps> = ({\n value,\n label,\n onChange,\n disabled,\n clearable,\n mode = \"date\",\n error,\n size = \"large\",\n className,\n style,\n inputClassName,\n invisible,\n timezone\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState<string>(\"\");\n const [isTyping, setIsTyping] = useState(false);\n const invalidValue = value !== undefined && value !== null && (!(value instanceof Date) || isNaN(value.getTime()));\n\n useInjectStyles(\"DateTimeField\", inputStyles);\n\n const handleClear = (e: React.MouseEvent) => {\n e.preventDefault();\n setInternalValue(\"\");\n setIsTyping(false);\n onChange?.(null);\n };\n\n // Convert UTC Date to display string in the specified timezone\n const valueAsInputValue = (\n dateValue: Date | null,\n mode: \"date\" | \"date_time\"\n ) => {\n if (!dateValue || !(dateValue instanceof Date) || isNaN(dateValue.getTime())) {\n return \"\";\n }\n const pad = (n: number) => n.toString().padStart(2, \"0\");\n\n // Use Intl.DateTimeFormat to get date parts in the target timezone\n const options: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n timeZone: timezone // undefined = local timezone\n };\n\n const formatter = new Intl.DateTimeFormat(\"en-CA\", options);\n const parts = formatter.formatToParts(dateValue);\n\n const getPart = (type: string) => parts.find(p => p.type === type)?.value ?? \"\";\n\n const year = getPart(\"year\");\n const month = getPart(\"month\");\n const day = getPart(\"day\");\n\n if (mode === \"date\") {\n return `${year}-${month}-${day}`;\n } else {\n const hours = getPart(\"hour\");\n const minutes = getPart(\"minute\");\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n }\n };\n\n // Get the UTC offset for a specific date in the target timezone (in minutes)\n const getTimezoneOffsetMinutes = (date: Date, tz?: string): number => {\n if (!tz) {\n // Local timezone: use built-in getTimezoneOffset (returns offset in minutes, inverted sign)\n return -date.getTimezoneOffset();\n }\n // For named timezones, calculate the offset by comparing formatted times\n const utcFormatter = new Intl.DateTimeFormat(\"en-CA\", {\n year: \"numeric\",\nmonth: \"2-digit\",\nday: \"2-digit\",\n hour: \"2-digit\",\nminute: \"2-digit\",\nhour12: false,\n timeZone: \"UTC\"\n });\n const tzFormatter = new Intl.DateTimeFormat(\"en-CA\", {\n year: \"numeric\",\nmonth: \"2-digit\",\nday: \"2-digit\",\n hour: \"2-digit\",\nminute: \"2-digit\",\nhour12: false,\n timeZone: tz\n });\n\n const utcParts = utcFormatter.formatToParts(date);\n const tzParts = tzFormatter.formatToParts(date);\n\n const getPart = (parts: Intl.DateTimeFormatPart[], type: string) =>\n parseInt(parts.find(p => p.type === type)?.value ?? \"0\", 10);\n\n const utcDate = new Date(Date.UTC(\n getPart(utcParts, \"year\"),\n getPart(utcParts, \"month\") - 1,\n getPart(utcParts, \"day\"),\n getPart(utcParts, \"hour\"),\n getPart(utcParts, \"minute\")\n ));\n\n const tzDate = new Date(Date.UTC(\n getPart(tzParts, \"year\"),\n getPart(tzParts, \"month\") - 1,\n getPart(tzParts, \"day\"),\n getPart(tzParts, \"hour\"),\n getPart(tzParts, \"minute\")\n ));\n\n return (tzDate.getTime() - utcDate.getTime()) / 60000;\n };\n\n // Handle input value change - convert from display timezone to UTC\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n setInternalValue(inputValue);\n setIsTyping(true);\n\n if (!inputValue) {\n onChange?.(null);\n return;\n }\n\n try {\n let year: number, month: number, day: number, hours = 0, minutes = 0;\n\n if (mode === \"date\") {\n // Parse date-only input: \"YYYY-MM-DD\"\n [year, month, day] = inputValue.split(\"-\").map(Number);\n } else {\n // Parse datetime-local input: \"YYYY-MM-DDTHH:MM\"\n const [datePart, timePart] = inputValue.split(\"T\");\n [year, month, day] = datePart.split(\"-\").map(Number);\n [hours, minutes] = timePart.split(\":\").map(Number);\n }\n\n let resultDate: Date;\n\n if (!timezone) {\n // No timezone specified: interpret input as local time (backward compatible)\n resultDate = new Date(year, month - 1, day, hours, minutes);\n } else {\n // Timezone specified: interpret input as that timezone and convert to UTC\n // We need to find the UTC equivalent of the entered time in the target timezone\n\n // Create a reference UTC date to calculate the offset for this moment\n const refUtcDate = new Date(Date.UTC(year, month - 1, day, hours, minutes));\n const offsetMinutes = getTimezoneOffsetMinutes(refUtcDate, timezone);\n\n // Convert from target timezone to UTC:\n // If user entered 00:00 in Mexico (UTC-6, offset=-360), we subtract the offset\n // Date.UTC gives us 00:00 UTC, subtracting -360 minutes (= adding 360 min) gives 06:00 UTC\n resultDate = new Date(Date.UTC(year, month - 1, day, hours, minutes) - offsetMinutes * 60000);\n }\n\n if (isNaN(resultDate.getTime())) {\n throw new Error(\"Invalid date\");\n }\n\n onChange?.(resultDate);\n } catch (e) {\n // Don't call onChange with null while typing\n return;\n }\n };\n\n const handleFocus = () => {\n setFocused(true);\n setIsTyping(true);\n setInternalValue(valueAsInputValue(value ?? null, mode));\n };\n\n const handleBlur = () => {\n setFocused(false);\n setIsTyping(false);\n };\n\n return (\n <>\n {/* Inject the styles to hide the calendar icon */}\n <style>{inputStyles}</style>\n <div\n className={cls(\n \"rounded-lg relative max-w-full\",\n !invisible && fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n className\n )}\n style={style}\n onClick={() => {\n if (!disabled) {\n inputRef.current?.focus();\n }\n }}\n >\n {label && (\n <InputLabel\n className={cls(\n \"absolute top-1 pointer-events-none\",\n !error\n ? focused\n ? \"text-primary\"\n : \"text-text-secondary dark:text-text-secondary-dark\"\n : \"text-red-500 dark:text-red-500\",\n disabled ? \"opacity-50\" : \"\"\n )}\n shrink={true}\n // shrink={hasValue || focused}\n >\n {label}\n </InputLabel>\n )}\n\n <input\n ref={inputRef}\n type={mode === \"date_time\" ? \"datetime-local\" : \"date\"}\n value={isTyping ? internalValue : valueAsInputValue(value ?? null, mode)}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n className={cls(\n \"w-full outline-hidden bg-transparent leading-normal text-base px-3\",\n clearable ? \"pr-14\" : \"pr-12\",\n \"rounded-lg\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n label ? \"pt-8 pb-2\" : \"py-2\",\n inputClassName,\n disabled &&\n \"border border-transparent outline-hidden opacity-50 dark:opacity-50 text-surface-accent-600 dark:text-surface-accent-500\"\n )}\n />\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n inputRef.current?.showPicker();\n }}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-surface-accent-500!\"\n >\n <CalendarIcon/>\n </IconButton>\n {clearable && value && (\n <IconButton\n onClick={handleClear}\n className=\"absolute right-14 top-1/2 transform -translate-y-1/2 text-surface-accent-400 \"\n >\n <XIcon/>\n </IconButton>\n )}\n </div>\n {invalidValue && (\n <div className=\"flex items-center m-2\">\n <AlertCircleIcon size={iconSize.small} color={\"error\"}/>\n <div className=\"pl-2\">\n <Typography variant={\"body2\"}>\n Invalid date value for this field\n </Typography>\n <Typography variant={\"body2\"}>\n {`The provided value is: ${JSON.stringify(value)}`}\n </Typography>\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst inputStyles = `\n /* Hide the default calendar icon in Chrome, Safari, Edge, Opera */\n input[type=\"date\"]::-webkit-calendar-picker-indicator,\n input[type=\"datetime-local\"]::-webkit-calendar-picker-indicator {\n display: none;\n -webkit-appearance: none;\n }\n /* Hide default calendar icon in Firefox */\n input[type=\"date\"],\n input[type=\"datetime-local\"] {\n -moz-appearance:textfield;\n }\n `;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type DialogProps = {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n className?: string;\n containerClassName?: string;\n fullWidth?: boolean;\n fullHeight?: boolean;\n fullScreen?: boolean;\n scrollable?: boolean;\n maxWidth?: keyof typeof widthClasses;\n modal?: boolean;\n onOpenAutoFocus?: (e: Event) => void;\n onEscapeKeyDown?: (e: KeyboardEvent) => void;\n onPointerDownOutside?: (e: Event) => void;\n onInteractOutside?: (e: Event) => void;\n /**\n * If `true`, the dialog will not focus the first focusable element when opened.\n */\n disableInitialFocus?: boolean;\n portalContainer?: HTMLElement | null;\n \"aria-describedby\"?: string;\n};\n\nconst widthClasses = {\n xs: \"max-w-xs w-xs\",\n sm: \"max-w-sm w-sm\",\n md: \"max-w-md w-md\",\n lg: \"max-w-lg w-lg\",\n xl: \"max-w-xl w-xl\",\n \"2xl\": \"max-w-2xl w-2xl\",\n \"3xl\": \"max-w-3xl w-3xl\",\n \"4xl\": \"max-w-4xl w-4xl\",\n \"5xl\": \"max-w-5xl w-5xl\",\n \"6xl\": \"max-w-6xl w-6xl\",\n \"7xl\": \"max-w-7xl w-7xl\",\n full: \"max-w-full w-full\"\n};\n\nexport const Dialog = ({\n open,\n onOpenChange,\n children,\n className,\n containerClassName,\n fullWidth = true,\n fullHeight,\n fullScreen,\n scrollable = true,\n maxWidth = \"lg\",\n modal = true,\n onOpenAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onInteractOutside,\n disableInitialFocus = true,\n portalContainer,\n \"aria-describedby\": ariaDescribedby\n }: DialogProps) => {\n const [displayed, setDisplayed] = useState(false);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n useEffect(() => {\n if (!open) {\n const timeout = setTimeout(() => {\n setDisplayed(false);\n }, 100);\n return () => clearTimeout(timeout);\n } else {\n setDisplayed(true);\n return () => {\n };\n }\n }, [open]);\n\n return (\n <DialogPrimitive.Root open={displayed || open}\n modal={modal}\n onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal container={finalContainer}>\n\n <div className={cls(\"fixed inset-0 z-50\", containerClassName)}>\n\n <DialogPrimitive.Overlay\n className={cls(\"fixed inset-0 transition-opacity ease-in-out duration-200 bg-black/50 dark:bg-black/60 backdrop-blur-sm\",\n displayed && open ? \"opacity-100\" : \"opacity-0\",\n \"z-50 fixed top-0 left-0 w-full h-full flex justify-center items-center\"\n )}\n style={{\n pointerEvents: displayed ? \"auto\" : \"none\"\n }}\n />\n\n <DialogPrimitive.Content\n onEscapeKeyDown={onEscapeKeyDown}\n onOpenAutoFocus={(e) => {\n if (disableInitialFocus) {\n e.preventDefault();\n }\n onOpenAutoFocus?.(e);\n }}\n onPointerDownOutside={onPointerDownOutside}\n onInteractOutside={onInteractOutside}\n aria-describedby={ariaDescribedby}\n className={cls(\"relative h-full outline-none flex justify-center items-center z-60 opacity-100 transition-all duration-200 ease-in-out\")}\n >\n <div\n className={cls(paperMixin,\n \"rounded-2xl\",\n \"z-60\",\n \"relative\",\n \"overflow-hidden\",\n \"outline-none focus:outline-none\",\n fullWidth && !fullScreen ? \"w-11/12\" : undefined,\n fullHeight && !fullScreen ? \"h-full\" : undefined,\n \"text-surface-accent-900 dark:text-white\",\n \"justify-center items-center\",\n fullScreen ? \"h-screen w-screen\" : \"max-h-[90vh] shadow-lg\",\n \"ease-in-out duration-200\",\n scrollable && \"overflow-y-auto\",\n displayed && open ? \"opacity-100 scale-100\" : \"opacity-0 scale-[0.97]\",\n maxWidth && !fullScreen ? widthClasses[maxWidth] : undefined,\n className\n )}>\n {children}\n </div>\n\n </DialogPrimitive.Content>\n </div>\n\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","import React from \"react\";\nimport { defaultBorderMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\nexport function DialogActions({\n children,\n position = \"sticky\",\n translucent = true,\n className\n }: {\n children: React.ReactNode,\n position?: \"sticky\" | \"absolute\",\n translucent?: boolean,\n className?: string\n}) {\n\n return <div\n className={cls(\n defaultBorderMixin,\n \"pt-2 pb-4 px-4 border-t flex flex-row items-center justify-end bottom-0 right-0 left-0 text-right z-2 gap-2\",\n position,\n \"bg-white bg-opacity-60 bg-white/60 dark:bg-surface-800 dark:bg-opacity-60 dark:bg-surface-800/60\",\n translucent ? \"backdrop-blur-sm\" : \"\",\n className)}>\n {children}\n </div>;\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport function DialogContent({\n children,\n className,\n fullHeight,\n includeMargin = true\n }: {\n children: React.ReactNode,\n includeMargin?: boolean,\n fullHeight?: boolean,\n className?: string\n}) {\n\n if (fullHeight)\n return <div className={\"flex-grow flex flex-col h-full relative\"}>\n {children}\n </div>;\n\n return <div\n className={cls(\"flex-grow\",\n { \"my-8 mx-8\": includeMargin },\n className)}>\n {children}\n </div>;\n}\n","\"use client\";\n\nimport React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport * as VisuallyHidden from \"@radix-ui/react-visually-hidden\";\nimport { Typography, TypographyProps, TypographyVariant } from \"./Typography\";\nimport { cls } from \"../util\";\n\nexport type DialogContentProps = TypographyProps & {\n children: React.ReactNode,\n hidden?: boolean,\n className?: string,\n includeMargin?: boolean,\n variant?: TypographyVariant\n};\n\nexport function DialogTitle({\n children,\n hidden,\n className,\n variant = \"subtitle2\",\n gutterBottom = true,\n includeMargin = true,\n ...props\n }: DialogContentProps) {\n\n const title = <DialogPrimitive.Title asChild>\n <Typography variant={variant}\n className={cls({ \"mt-8 mx-8\": includeMargin }, className)}\n gutterBottom={gutterBottom}\n {...props}>\n {children}\n </Typography>\n </DialogPrimitive.Title>;\n\n if (hidden) {\n return <VisuallyHidden.Root>{title}</VisuallyHidden.Root>\n }\n\n return title;\n}\n","\n\"use client\";\nimport React, { PropsWithChildren, useEffect, useState } from \"react\";\n\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { defaultBorderMixin, fieldBackgroundMixin } from \"../styles\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\nexport function ExpandablePanel({\n title,\n children,\n invisible = false,\n expanded,\n onExpandedChange,\n initiallyExpanded = true,\n titleClassName,\n asField,\n className,\n innerClassName\n }: PropsWithChildren<{\n title: React.ReactNode,\n invisible?: boolean,\n initiallyExpanded?: boolean;\n expanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void,\n titleClassName?: string,\n asField?: boolean,\n className?: string,\n innerClassName?: string\n}>) {\n\n useInjectStyles(\"ExpandablePanel\", `\n.CollapsibleContent {\n overflow: hidden;\n}\n.CollapsibleContent[data-state='open'] {\n animation: slideDown 220ms ease-out\n}\n.CollapsibleContent[data-state='closed'] {\n animation: slideUp 220ms ease-out;\n}\n\n@keyframes slideDown {\n from {\n height: 0;\n }\n to {\n height: var(--radix-collapsible-content-height);\n }\n}\n\n@keyframes slideUp {\n from {\n height: var(--radix-collapsible-content-height);\n }\n to {\n height: 0;\n }\n}`);\n\n const [open, setOpen] = useState(expanded !== undefined ? expanded : initiallyExpanded);\n const [allowOverflow, setAllowOverflow] = useState(open);\n\n useEffect(() => {\n if (open) {\n setTimeout(() => {\n setAllowOverflow(true);\n }, 220);\n } else {\n setAllowOverflow(false);\n }\n }, [open]);\n\n useEffect(() => {\n if (expanded !== undefined)\n setOpen(expanded);\n }, [expanded]);\n\n return (<>\n <Collapsible.Root\n className={cls(\n !invisible && defaultBorderMixin + \" border\",\n \"rounded-lg\",\n \"w-full\",\n className\n )}\n open={open}\n onOpenChange={(updatedOpen: boolean) => {\n onExpandedChange?.(updatedOpen);\n setOpen(updatedOpen);\n }}>\n\n <Collapsible.Trigger asChild>\n <div\n className={cls(\n \"rounded-t flex items-center justify-between w-full min-h-[52px]\",\n \"hover:bg-surface-accent-200 hover:bg-opacity-40 hover:bg-surface-accent-200/40 dark:hover:bg-surface-800 dark:hover:bg-opacity-40 dark:hover:bg-surface-800/40 active:bg-surface-accent-300/50 dark:active:bg-surface-700/50\",\n invisible ? \"border-b px-2\" : \"p-4\",\n open ? \"py-6\" : \"py-4\",\n \"transition-all duration-200\",\n invisible && defaultBorderMixin,\n asField && fieldBackgroundMixin,\n titleClassName,\n \"cursor-pointer\"\n )}\n role=\"button\"\n tabIndex={0}\n aria-expanded={open}\n >\n {title}\n <ChevronDownIcon className={cls(\"transition\", open ? \"rotate-180\" : \"\")}/>\n </div>\n </Collapsible.Trigger>\n\n <Collapsible.Content\n className={cls(\"CollapsibleContent\")}\n style={{\n overflow: allowOverflow ? \"visible\" : \"hidden\"\n }}\n >\n <div className={innerClassName}>\n {children}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n </>\n )\n}\n","\"use client\";\nimport React from \"react\";\nimport { useDropzone } from \"react-dropzone\";\nimport { fieldBackgroundHoverMixin, fieldBackgroundMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { Typography } from \"./Typography\";\n\nexport interface FileUploadError {\n message: string;\n code: string;\n}\n\nexport type OnFileUploadRejected = (fileRejections: {\n file: File;\n errors: readonly FileUploadError[];\n}[], event: object) => void;\n\nexport type OnFilesUploadAdded = (files: File[]) => void;\n\nexport type FileUploadProps = {\n // e.g. accept={{ \"*/image\": [] }}\n accept?: Record<string, string[]>,\n onFilesAdded: OnFilesUploadAdded,\n onFilesRejected?: OnFileUploadRejected,\n maxSize?: number,\n disabled?: boolean;\n maxFiles?: number;\n title?: React.ReactNode;\n uploadDescription?: React.ReactNode;\n preventDropOnDocument?: boolean;\n size?: \"small\" | \"medium\" | \"large\";\n};\n\nexport function FileUpload({\n accept,\n onFilesAdded,\n onFilesRejected,\n maxSize,\n disabled,\n maxFiles,\n title,\n uploadDescription,\n children,\n preventDropOnDocument = true,\n size\n}: React.PropsWithChildren<FileUploadProps>) {\n\n const {\n getRootProps,\n getInputProps,\n isDragActive,\n isDragAccept,\n isDragReject\n } = useDropzone({\n accept,\n noDragEventsBubbling: true,\n maxSize,\n onDrop: onFilesAdded,\n onDropRejected: onFilesRejected,\n disabled,\n maxFiles,\n preventDropOnDocument\n }\n );\n return <div\n {...getRootProps()}\n role=\"button\"\n aria-label={typeof title === \"string\" ? title : (typeof uploadDescription === \"string\" ? uploadDescription : \"Upload file\")}\n aria-disabled={disabled || undefined}\n className={cls(\n fieldBackgroundMixin,\n \"flex gap-2\",\n \"p-4 box-border relative items-center border-2 border-solid border-transparent outline-hidden rounded-lg duration-200 ease-[cubic-bezier(0.4,0,0.2,1)] focus:border-primary-solid\",\n {\n \"h-44\": size === \"large\",\n \"h-28\": size === \"medium\",\n \"h-16\": size === \"small\",\n \"cursor-pointer\": !disabled,\n [fieldBackgroundHoverMixin]: !isDragActive,\n \"transition-colors duration-200 ease-[cubic-bezier(0,0,0.2,1)] border-red-500\": isDragReject,\n \"transition-colors duration-200 ease-[cubic-bezier(0,0,0.2,1)] border-green-500\": isDragAccept\n })}>\n\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"absolute top-2 left-3.5 cursor-inherit\"}>\n {title}\n </Typography>\n\n <input\n {...getInputProps()}/>\n\n {children}\n\n <div\n className=\"grow h-28 box-border flex flex-col items-center justify-center text-center\">\n <Typography align={\"center\"}\n variant={\"label\"}\n className={\"flex flex-row gap-2 justify-center\"}>\n {uploadDescription}\n </Typography>\n </div>\n\n </div>\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport interface FilterChipProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n /**\n * The text label displayed on the chip.\n */\n children: React.ReactNode;\n /**\n * Whether the chip is currently in an active/selected state.\n */\n active?: boolean;\n /**\n * Optional icon rendered before the label.\n */\n icon?: React.ReactNode;\n /**\n * Size variant.\n * @default \"medium\"\n */\n size?: \"small\" | \"medium\";\n /**\n * Whether the chip is disabled.\n */\n disabled?: boolean;\n}\n\nconst sizeClasses = {\n small: \"px-2 py-0.5 text-xs\",\n medium: \"px-2.5 py-1 text-xs\"\n};\n\n/**\n * A toggle chip used for filter presets and similar multi-select controls.\n *\n * Uses an inset box-shadow for the active ring instead of `border` so the\n * chip size stays stable across states and the ring cannot be clipped by\n * parent `overflow-hidden` containers.\n *\n * @group Interactive components\n */\nexport const FilterChip = React.forwardRef<HTMLButtonElement, FilterChipProps>(function FilterChip({\n children,\n active = false,\n onClick,\n icon,\n size = \"medium\",\n className,\n disabled = false,\n ...rest\n}: FilterChipProps, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cls(\n \"inline-flex items-center gap-1 rounded-full\",\n \"font-medium whitespace-nowrap select-none shrink-0\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50\",\n sizeClasses[size],\n active\n ? \"bg-primary/12 text-primary dark:bg-primary/20 dark:text-primary shadow-[inset_0_0_0_1.5px_var(--color-primary)]\"\n : cls(\n \"bg-surface-accent-100 text-text-secondary dark:bg-surface-accent-800 dark:text-text-secondary-dark\",\n !disabled && \"cursor-pointer hover:bg-primary/5 dark:hover:bg-primary/5\"\n ),\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...rest}\n >\n {icon}\n {children}\n </button>\n );\n});\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nconst colorClasses = {\n info: \"bg-sky-200 dark:bg-teal-900\",\n warn: \"bg-orange-200 dark:bg-yellow-950\"\n}\n\nexport function InfoLabel({\n children,\n mode = \"info\"\n }: {\n children: React.ReactNode,\n mode?: \"info\" | \"warn\"\n}) {\n\n return (\n <div\n className={cls(\"my-3 py-2 px-4 rounded-xs\", colorClasses[mode])}>\n {children}\n </div>\n )\n}\n","\"use client\";\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\ntype LabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & {\n border?: boolean,\n onClick?: React.MouseEventHandler<HTMLLabelElement>\n};\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({\n className,\n border,\n onClick,\n ...props\n }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n onClick={onClick}\n className={cls(\"text-sm font-medium peer-disabled:cursor-not-allowed\",\n border && \"border border-surface-300 dark:border-surface-700 rounded-md px-3 py-1.5\",\n onClick && \"hover:cursor-pointer hover:bg-surface-200 dark:hover:bg-surface-800\",\n defaultBorderMixin, className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import React from \"react\";\nimport { Button, ButtonProps } from \"./Button\";\nimport { CircularProgress } from \"./CircularProgress\";\n\nexport type LoadingButtonProps<P extends React.ElementType> = ButtonProps<P> & {\n startIcon?: React.ReactNode;\n loading?: boolean;\n}\n\nexport function LoadingButton<P extends React.ElementType = \"button\">({\n children,\n loading,\n disabled,\n onClick,\n startIcon,\n ...props\n }: LoadingButtonProps<P>) {\n return (\n <Button\n disabled={loading || disabled}\n onClick={onClick}\n component={props.component as React.ElementType}\n {...props}\n >\n {loading && (\n <CircularProgress size={\"smallest\"}/>\n )}\n {!loading && startIcon}\n {children}\n </Button>\n );\n};\n","\"use client\";\nimport React, { useMemo } from \"react\";\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport MarkdownIt from \"markdown-it\";\nimport { cls } from \"../util\";\n\nexport interface MarkdownProps {\n source: string,\n size?: \"small\" | \"medium\" | \"large\" | \"xl\" | \"2xl\";\n className?: string\n}\n\nconst proseClasses = {\n small: \"prose prose-sm typography-body2\",\n medium: \"prose typography-body1\",\n large: \"prose prose-lg\",\n xl: \"prose prose-xl\",\n \"2xl\": \"prose prose-2xl\"\n};\n\n/**\n * Tailwind typography-plugin weight overrides.\n * The plugin defaults to very heavy weights (h1: 800, h2: 700, h3/h4: 600,\n * strong: 600, code: 600) which clash with the Rebase design-system that uses\n * font-light (300) / font-normal (400) for headings.\n * We reset them here so rendered markdown matches the rest of the UI.\n */\nconst proseWeightOverrides = [\n \"prose-headings:font-normal\",\n \"prose-strong:font-semibold\",\n \"prose-code:font-normal\",\n \"prose-blockquote:font-normal\",\n \"prose-a:font-normal\"\n].join(\" \");\n\nconst md = new MarkdownIt({ html: false });\n/**\n * @group Preview components\n */\nexport const Markdown = React.memo<MarkdownProps>(function Markdown({\n source,\n className,\n size = \"medium\"\n }: MarkdownProps) {\n const html = useMemo(() => {\n return md.render(typeof source === \"string\" ? source : \"\");\n }, [source]);\n\n return <div\n className={cls(proseClasses[size], \"dark:prose-invert prose-headings:font-title\", proseWeightOverrides, className)}\n dangerouslySetInnerHTML={{ __html: html }}\n />;\n }\n , equal) as React.FunctionComponent<MarkdownProps>;\n","\"use client\";\nimport React from \"react\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { focusedDisabled, paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type MenuProps = {\n children: React.ReactNode;\n trigger: React.ReactNode;\n\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n\n portalContainer?: HTMLElement | null;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n\n sideOffset?: number;\n className?: string;\n}\n\nconst Menu = React.forwardRef<\n React.ElementRef<typeof DropdownMenu.Trigger>,\n MenuProps\n>(({\n children,\n trigger,\n open,\n defaultOpen,\n side,\n align,\n onOpenChange,\n portalContainer,\n sideOffset = 4,\n className\n }, ref) => {\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n return (\n <DropdownMenu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger\n ref={ref}\n asChild>\n {trigger}\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal container={finalContainer}>\n <DropdownMenu.Content\n side={side}\n sideOffset={sideOffset}\n align={align}\n className={cls(paperMixin, focusedDisabled, \"py-2 z-30\", className)}>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n})\nMenu.displayName = \"Menu\"\n\nexport { Menu }\n\nexport type MenuItemProps = {\n children: React.ReactNode;\n dense?: boolean;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent) => void;\n className?: string;\n};\n\nexport const MenuItem = React.memo(({\n children,\n dense = false, // Default value is false if not provided\n disabled = false,\n onClick,\n className\n }: MenuItemProps) => {\n // Dynamically adjusting the class based on the \"dense\" prop\n const classNames = cls(\n onClick && !disabled && \"cursor-pointer\",\n disabled && \"opacity-50 cursor-not-allowed\",\n \"rounded-md text-sm font-medium text-surface-accent-700 dark:text-surface-accent-300 flex items-center gap-4\",\n !disabled && \"hover:bg-surface-accent-100 dark:hover:bg-surface-accent-900\",\n dense ? \"px-4 py-1.5\" : \"px-4 py-2\",\n className\n );\n\n return (\n <DropdownMenu.Item\n className={classNames}\n disabled={disabled}\n onClick={disabled ? undefined : onClick}>\n {children}\n </DropdownMenu.Item>\n );\n});\n\nMenuItem.displayName = \"MenuItem\";\n","\nimport * as React from \"react\";\n\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\";\nimport { cls } from \"../util\";\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport function Menubar({\n children,\n onSelect,\n className\n }: {\n children: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n className?: string\n}) {\n return (\n <MenubarPrimitive.Root\n onSelect={onSelect}\n className={cls(\"z-10 flex bg-white dark:bg-surface-900 p-[3px] rounded-sm shadow-sm\", className)}>\n {children}\n </MenubarPrimitive.Root>\n )\n}\n\nexport function MenubarMenu({\n children\n }: { children: React.ReactNode }) {\n return (\n <MenubarPrimitive.Menu>\n {children}\n </MenubarPrimitive.Menu>\n )\n}\n\nexport function MenubarTrigger({\n children,\n onSelect,\n className\n }: {\n children: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n className?: string\n}) {\n return (\n <MenubarPrimitive.Trigger\n onSelect={onSelect}\n className={cls(\"py-2 px-3 outline-none select-none font-medium leading-none rounded text-text-primary dark:text-text-primary-dark text-[13px] flex items-center justify-between gap-[2px] data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-900 hover:bg-surface-accent-200 hover:bg-opacity-75 hover:bg-surface-accent-200/75 dark:hover:bg-surface-accent-800\",\n className)}>\n {children}\n </MenubarPrimitive.Trigger>\n )\n}\n\nexport function MenubarPortal({\n children,\n portalContainer\n }: {\n children: React.ReactNode;\n portalContainer?: HTMLElement | null;\n}) {\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n return (\n <MenubarPrimitive.Portal container={finalContainer}>\n {children}\n </MenubarPrimitive.Portal>\n )\n}\n\nexport function MenubarContent({\n children,\n className,\n align,\n sideOffset,\n alignOffset,\n onSelect,\n ...rest\n }: {\n children: React.ReactNode,\n className?: string,\n onSelect?: (event: React.SyntheticEvent) => void,\n align?: \"start\" | \"center\" | \"end\",\n sideOffset?: number,\n alignOffset?: number\n}) {\n return (\n <MenubarPrimitive.Content\n onSelect={onSelect}\n className={cls(\"min-w-[220px] bg-white dark:bg-surface-900 rounded-md p-[6px] shadow-[0px_10px_38px_-10px_rgba(22,_23,_24,_0.35),_0px_10px_20px_-15px_rgba(22,_23,_24,_0.2)] [animation-duration:_400ms] [animation-timing-function:_cubic-bezier(0.16,_1,_0.3,_1)] will-change-[transform,opacity]\", className)}\n align={align ?? \"start\"}\n sideOffset={sideOffset ?? 5}\n alignOffset={alignOffset ?? -3}\n {...rest}\n >\n {children}\n </MenubarPrimitive.Content>\n )\n}\n\nexport function MenubarItem({\n children,\n leftPadding,\n className,\n disabled,\n onSelect,\n ...rest\n }: {\n children: React.ReactNode,\n onSelect?: (event: Event) => void;\n leftPadding?: boolean,\n className?: string,\n disabled?: boolean\n}) {\n return (\n <MenubarPrimitive.Item\n onSelect={onSelect}\n className={cls(\"group text-[13px] leading-none rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none outline-none data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-900 data-[state=open]:text-text-primary data-[state=open]:dark:text-text-primary-dark data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n leftPadding ? \"pl-5\" : \"\",\n disabled ? \"pointer-events-none text-text-secondary dark:text-text-secondary-dark\" : \"text-text-primary dark:text-text-primary-dark\",\n className)}\n disabled={disabled}\n {...rest}\n >\n {children}\n </MenubarPrimitive.Item>\n )\n}\n\nexport function MenubarSeparator({\n children,\n className,\n ...rest\n }: {\n children?: React.ReactNode,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.Separator\n className={cls(\"h-[1px] bg-surface-accent-100 dark:bg-surface-900 m-[5px]\", className)}\n {...rest}\n >\n {children}\n </MenubarPrimitive.Separator>\n )\n}\n\nexport function MenubarSub({\n children,\n ...rest\n }: {\n children?: React.ReactNode,\n}) {\n return (\n <MenubarPrimitive.Sub\n {...rest}\n >\n {children}\n </MenubarPrimitive.Sub>\n )\n}\n\nexport function MenubarSubTrigger({\n children,\n className,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n onSelect={onSelect}\n className={cls(\"group text-[13px] leading-none text-text-primary dark:text-text-primary-dark rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none outline-none data-[state=open]:bg-surface-accent-100 data-[state=open]:dark:bg-surface-900 data-[state=open]:text-text-primary data-[state=open]:dark:text-text-primary-dark data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n className)}\n {...rest}\n >\n {children}\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nexport function MenubarSubContent({\n children,\n alignOffset,\n className,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n alignOffset?: number,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.SubContent\n onSelect={onSelect}\n alignOffset={alignOffset ?? -5}\n className={cls(\"min-w-[220px] bg-white dark:bg-surface-900 rounded-md p-[6px] shadow-[0px_10px_38px_-10px_rgba(22,_23,_24,_0.35),_0px_10px_20px_-15px_rgba(22,_23,_24,_0.2)] [animation-duration:_400ms] [animation-timing-function:_cubic-bezier(0.16,_1,_0.3,_1)] will-change-[transform,opacity]\",\n className)}\n {...rest}\n >\n {children}\n </MenubarPrimitive.SubContent>\n )\n}\n\nexport function MenubarCheckboxItem({\n children,\n checked,\n onCheckedChange,\n className,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: Event) => void;\n checked?: boolean,\n onCheckedChange?: () => void,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.CheckboxItem\n onSelect={onSelect}\n className={cls(\"text-[13px] leading-none text-text-primary dark:text-text-primary-dark rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none pl-5 outline-none data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n className)}\n checked={checked}\n onCheckedChange={onCheckedChange}\n {...rest}\n >\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nexport function MenubarItemIndicator({\n children,\n className,\n ...rest\n }: {\n children?: React.ReactNode,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.ItemIndicator\n className={cls(\"absolute left-0 w-4 inline-flex items-center justify-center\", className)}\n {...rest}>\n {children ?? <CheckIcon size={iconSize.smallest}/>}\n </MenubarPrimitive.ItemIndicator>\n )\n}\n\nexport function MenubarRadioGroup({\n children,\n className,\n value,\n onValueChange,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: React.SyntheticEvent) => void,\n value?: string,\n onValueChange?: (value: string) => void,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.RadioGroup\n className={cls(className)}\n value={value}\n onValueChange={onValueChange}\n onSelect={onSelect}\n {...rest}>\n {children ?? <CheckIcon size={iconSize.small}/>}\n </MenubarPrimitive.RadioGroup>\n )\n}\n\nexport function MenubarRadioItem({\n children,\n className,\n value,\n onSelect,\n ...rest\n }: {\n children?: React.ReactNode,\n onSelect?: (event: Event) => void;\n value: string,\n className?: string,\n}) {\n return (\n <MenubarPrimitive.RadioItem\n onSelect={onSelect}\n className={cls(\"text-[13px] leading-none text-text-primary dark:text-text-primary-dark rounded flex items-center h-[32px] px-[10px] py-[2px] relative select-none pl-5 outline-none data-[highlighted]:bg-surface-accent-100 data-[highlighted]:dark:bg-surface-900 data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark data-[disabled]:pointer-events-none\",\n className)}\n value={value}\n {...rest}>\n {children ?? <CheckIcon size={iconSize.small}/>}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nexport function MenubarShortcut({\n children,\n className,\n ...rest\n }: {\n children?: React.ReactNode,\n className?: string,\n}) {\n return (\n <div\n className={cls(\"ml-auto pl-5 group-data-[disabled]:text-text-disabled data-[disabled]:dark:text-text-disabled-dark\",\n className)}\n {...rest}>\n {children}\n </div>\n )\n}\n\nexport function MenubarSubTriggerIndicator() {\n return (\n <div className=\"ml-auto pl-5 \">\n <ChevronRightIcon size={iconSize.small}/>\n </div>\n )\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cls } from \"../util\";\n\nexport function Separator({\n orientation,\n decorative,\n className\n }: {\n orientation: \"horizontal\" | \"vertical\",\n decorative?: boolean,\n className?: string\n}) {\n if (orientation === \"horizontal\")\n return (\n <SeparatorPrimitive.Root\n decorative={decorative}\n orientation=\"horizontal\"\n className={cls(\"dark:bg-surface-700 bg-surface-200 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-4\", className)}/>\n );\n else\n return (\n <SeparatorPrimitive.Root\n className={cls(\"dark:bg-surface-700 bg-surface-200 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px mx-4\", className)}\n decorative={decorative}\n orientation=\"vertical\"\n />\n );\n}\n","\n\"use client\";\nimport { CheckIcon, ChevronDownIcon, XIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\nimport { ChangeEvent, Children, useEffect, useState } from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { cls } from \"../util\";\n\nimport { Separator } from \"./Separator\";\nimport { Chip } from \"./Chip\";\nimport { SelectInputLabel } from \"./common/SelectInputLabel\";\nimport {\n defaultBorderMixin,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundInvisibleMixin,\n fieldBackgroundMixin,\n focusedDisabled\n} from \"../styles\";\nimport { useInjectStyles } from \"../hooks\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type MultiSelectValue = string | number | boolean;\n\n// Make the context properly generic\ninterface MultiSelectContextProps<T extends MultiSelectValue = string> {\n fieldValue?: T[];\n onItemClick: (v: T) => void;\n}\n\n// Create a proper generic context\nexport const MultiSelectContext = React.createContext<MultiSelectContextProps<MultiSelectValue>>(null! as MultiSelectContextProps<MultiSelectValue>);\n\n/**\n * Props for MultiSelect component\n */\ninterface MultiSelectProps<T extends MultiSelectValue = string> {\n modalPopover?: boolean;\n className?: string;\n open?: boolean,\n name?: string,\n id?: string,\n onOpenChange?: (open: boolean) => void,\n value?: T[],\n inputClassName?: string,\n onChange?: React.EventHandler<ChangeEvent<HTMLSelectElement>>,\n onValueChange?: (updatedValue: T[]) => void,\n placeholder?: React.ReactNode,\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\",\n useChips?: boolean,\n label?: React.ReactNode | string,\n disabled?: boolean,\n error?: boolean,\n position?: \"item-aligned\" | \"popper\",\n endAdornment?: React.ReactNode,\n multiple?: boolean,\n includeSelectAll?: boolean,\n includeClear?: boolean,\n inputRef?: React.Ref<HTMLButtonElement>,\n padding?: boolean,\n invisible?: boolean,\n children: React.ReactNode;\n renderValues?: (values: T[]) => React.ReactNode;\n portalContainer?: HTMLElement | null;\n}\n\n// Use generic type for the forwarded ref\nexport const MultiSelect = React.forwardRef<\n HTMLButtonElement,\n MultiSelectProps\n>(\n (\n {\n value,\n size = \"large\",\n label,\n error,\n onValueChange,\n invisible,\n disabled,\n placeholder,\n modalPopover = true,\n includeClear = true,\n includeSelectAll = true,\n useChips = true,\n className,\n inputClassName,\n inputRef,\n children,\n renderValues,\n open,\n onOpenChange,\n portalContainer\n },\n ref\n ) => {\n const [isMounted, setIsMounted] = useState(false);\n const [isPopoverOpen, setIsPopoverOpen] = useState(open ?? false);\n const [selectedValues, setSelectedValues] = useState<string[]>(value ?? []);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const onPopoverOpenChange = (open: boolean) => {\n setIsPopoverOpen(open);\n onOpenChange?.(open);\n }\n\n useEffect(() => {\n setIsPopoverOpen(open ?? false);\n }, [open]);\n\n const allValues = React.useMemo(() => children\n ?\n Children.map(children, (child) => {\n if (React.isValidElement<MultiSelectItemProps>(child)) {\n return child.props.value;\n }\n return null;\n })?.filter(Boolean) ?? []\n : [], [children]);\n\n const optionsMap = React.useMemo(() => {\n const map = new Map<string, React.ReactNode>();\n Children.forEach(children, (child) => {\n if (React.isValidElement<MultiSelectItemProps>(child)) {\n map.set(String(child.props.value), child.props.children);\n }\n });\n return map;\n }, [children]);\n\n React.useEffect(() => {\n setSelectedValues(value ?? []);\n }, [value]);\n\n const updateValues = React.useCallback((values: string[]) => {\n setSelectedValues(values);\n onValueChange?.(values);\n }, [onValueChange]);\n\n const onItemClick = React.useCallback((newValue: MultiSelectValue) => {\n let newSelectedValues: string[];\n if (selectedValues.some(v => String(v) === String(newValue))) {\n newSelectedValues = selectedValues.filter(v => String(v) !== String(newValue));\n } else {\n newSelectedValues = [...selectedValues, String(newValue)];\n }\n updateValues(newSelectedValues);\n }, [selectedValues, updateValues]);\n\n const handleInputKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (event.key === \"Enter\") {\n onPopoverOpenChange(true);\n } else if (event.key === \"Backspace\" && !event.currentTarget.value) {\n const newSelectedValues = [...selectedValues];\n newSelectedValues.pop();\n updateValues(newSelectedValues);\n }\n };\n\n const toggleOption = (value: string) => {\n const newSelectedValues = selectedValues.some(v => String(v) === String(value))\n ? selectedValues.filter(v => String(v) !== String(value))\n : [...selectedValues, value];\n updateValues(newSelectedValues);\n };\n\n const handleClear = () => {\n updateValues([]);\n };\n\n const handleTogglePopover = () => {\n onPopoverOpenChange(!isPopoverOpen);\n };\n\n const toggleAll = () => {\n if (selectedValues.length === allValues.length) {\n handleClear();\n } else {\n updateValues(allValues);\n }\n onPopoverOpenChange(false);\n };\n\n useInjectStyles(\"MultiSelect\", `\n[cmdk-group] {\n max-height: 45vh;\n overflow-y: auto;\n // width: 400px;\n} `)\n\n const contextValue = React.useMemo(() => ({\n fieldValue: selectedValues,\n onItemClick\n }), [selectedValues, onItemClick]);\n\n return (\n <MultiSelectContext.Provider value={contextValue}>\n\n {typeof label === \"string\" ? <SelectInputLabel error={error}>{label}</SelectInputLabel> : label}\n\n <PopoverPrimitive.Root\n open={isMounted && isPopoverOpen}\n onOpenChange={onPopoverOpenChange}\n modal={modalPopover}\n >\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={inputRef ?? ref}\n onClick={handleTogglePopover}\n className={cls(\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n {\n \"py-1\": size === \"small\" || size === \"smallest\",\n \"py-2\": size === \"medium\" || size === \"large\"\n },\n {\n \"px-2\": size === \"small\" || size === \"smallest\",\n \"px-4\": size === \"medium\" || size === \"large\"\n },\n \"select-none rounded-lg text-sm\",\n \"focus:ring-0 focus-visible:ring-0 outline-none focus:outline-none focus-visible:outline-none\",\n invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n className,\n inputClassName\n )}\n >\n {selectedValues.length > 0 ? (\n <div className=\"flex justify-between items-center w-full\">\n <div className=\"flex flex-wrap items-center gap-1.5 text-start\">\n {renderValues && renderValues(selectedValues)}\n {!renderValues && selectedValues.map((value) => {\n\n const optionChildren = optionsMap.get(String(value));\n if (!useChips) {\n return optionChildren;\n }\n return (\n <Chip\n size={\"medium\"}\n key={String(value)}\n className={cls(\"flex flex-row items-center p-1\")}\n >\n {optionChildren}\n <XIcon\n size={iconSize.smallest}\n onClick={(event) => {\n event.stopPropagation();\n toggleOption(value);\n }}\n />\n </Chip>\n );\n })}\n </div>\n <div className=\"flex items-center justify-between\">\n {includeClear && <XIcon\n className={\"ml-4\"}\n size={iconSize.small}\n onClick={(event) => {\n event.stopPropagation();\n handleClear();\n }}\n />}\n <div className={cls(\"px-2 h-full flex items-center\")}>\n <ChevronDownIcon size={size === \"large\" ? iconSize.medium : iconSize.small}\n className={cls(\"transition\", isPopoverOpen ? \"rotate-180\" : \"\")}/>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-between w-full mx-auto\">\n <span className=\"text-sm\">\n {placeholder}\n </span>\n <div className={cls(\"px-2 h-full flex items-center\")}>\n <ChevronDownIcon size={size === \"large\" ? iconSize.medium : iconSize.small}\n className={cls(\"transition\", isPopoverOpen ? \"rotate-180\" : \"\")}/>\n </div>\n </div>\n )}\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={finalContainer}>\n <PopoverPrimitive.Content\n className={cls(\"z-50 overflow-hidden border bg-white dark:bg-surface-800 rounded-lg w-[400px]\", defaultBorderMixin)}\n align=\"start\"\n sideOffset={8}\n onEscapeKeyDown={() => onPopoverOpenChange(false)}\n >\n <CommandPrimitive>\n <div className={\"flex flex-row items-center\"}>\n <CommandPrimitive.Input\n className={cls(focusedDisabled, \"bg-transparent outline-none flex-1 h-full w-full m-4 flex-grow text-surface-accent-900 dark:text-white\")}\n placeholder=\"Search...\"\n onKeyDown={handleInputKeyDown}\n />\n {selectedValues.length > 0 && (\n <div\n onClick={handleClear}\n className=\"text-sm justify-center cursor-pointer py-3 px-4 text-text-secondary dark:text-text-secondary-dark\">\n Clear\n </div>\n )}\n </div>\n <Separator orientation={\"horizontal\"} className={\"my-0\"}/>\n <CommandPrimitive.List>\n <CommandPrimitive.Empty className={\"px-4 py-2 text-sm text-text-secondary dark:text-text-secondary-dark\"}>\n No results found.\n </CommandPrimitive.Empty>\n <CommandPrimitive.Group>\n {includeSelectAll && <CommandPrimitive.Item\n key=\"all\"\n onSelect={toggleAll}\n className={\n cls(\n \"flex flex-row items-center gap-1.5\",\n \"cursor-pointer\",\n \"m-1\",\n \"ring-offset-transparent\",\n \"p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-primary/75 aria-[selected=true]:ring-offset-2\",\n \"aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\",\n \"cursor-pointer p-2 rounded aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\"\n )\n }\n >\n <InnerCheckBox checked={selectedValues.length === allValues.length}/>\n <span className={\"text-sm text-text-secondary dark:text-text-secondary-dark\"}>(Select All)</span>\n </CommandPrimitive.Item>}\n {children}\n </CommandPrimitive.Group>\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </MultiSelectContext.Provider>\n );\n }\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n\nexport interface MultiSelectItemProps<T extends MultiSelectValue = string> {\n value: T;\n children?: React.ReactNode,\n className?: string;\n}\n\nexport const MultiSelectItem = React.memo(function MultiSelectItem<T extends MultiSelectValue = string>({\n children,\n value,\n className\n}: MultiSelectItemProps<T>) {\n const context = React.useContext(MultiSelectContext);\n if (!context) throw new Error(\"MultiSelectItem must be used inside a MultiSelect\");\n const {\n fieldValue,\n onItemClick\n } = context;\n\n const isSelected = (fieldValue ?? []).some(v => String(v) === String(value));\n\n return <CommandPrimitive.Item\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={(_) => {\n onItemClick(value);\n }}\n className={cls(\n \"flex flex-row items-center gap-1.5\",\n isSelected ? \"bg-surface-accent-200 dark:bg-surface-accent-950\" : \"\",\n \"cursor-pointer\",\n \"m-1\",\n \"ring-offset-transparent\",\n \"p-1 rounded aria-[selected=true]:outline-none aria-[selected=true]:ring-2 aria-[selected=true]:ring-primary aria-[selected=true]:ring-opacity-75 aria-[selected=true]:ring-primary/75 aria-[selected=true]:ring-offset-2\",\n \"aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\",\n \"cursor-pointer p-2 rounded aria-[selected=true]:bg-surface-accent-100 aria-[selected=true]:dark:bg-surface-accent-900\",\n \"text-surface-accent-700 dark:text-surface-accent-300\",\n className\n )}\n >\n <InnerCheckBox checked={isSelected}/>\n {children}\n </CommandPrimitive.Item>;\n});\n\nconst InnerCheckBox = React.memo(function InnerCheckBox({ checked }: { checked: boolean }) {\n return <div className={cls(\n \"p-2\",\n \"w-8 h-8\",\n \"inline-flex items-center justify-center text-sm font-medium focus:outline-none transition-colors ease-in-out duration-150\"\n )}>\n <div\n className={cls(\n \"border-2 relative transition-colors ease-in-out duration-150\",\n \"w-4 h-4 rounded flex items-center justify-center\",\n (checked ? \"bg-primary\" : \"bg-white dark:bg-surface-accent-900\"),\n (checked) ? \"text-surface-accent-100 dark:text-surface-accent-900\" : \"\",\n (checked ? \"border-transparent\" : \"border-surface-accent-800 dark:border-surface-accent-200\")\n )}>\n {checked && <CheckIcon size={iconSize.smallest} className={\"absolute\"}/>}\n </div>\n </div>\n});\n","import React from \"react\";\n\nimport { paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\nexport function Paper({\n children,\n style,\n className\n }: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n className?: string;\n\n}) {\n return (\n <div\n className={cls(paperMixin, className)}\n style={style}>\n {children}\n </div>\n )\n}\n","\"use client\";\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { cls } from \"../util\";\n\nexport interface RadioGroupProps {\n id?: string;\n children: React.ReactNode;\n name?: string\n required?: boolean;\n disabled?: boolean;\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean;\n defaultValue?: string;\n value?: string;\n\n onValueChange?(value: string): void;\n\n className?: string;\n}\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(({\n className,\n ...props\n }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cls(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nexport interface RadioGroupItemProps {\n id?: string;\n value: string;\n checked?: boolean;\n required?: boolean;\n className?: string;\n disabled?: boolean;\n}\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({\n className,\n ...props\n }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cls(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <div className=\"h-2.5 w-2.5 fill-current text-current bg-primary rounded-lg\"/>\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\nexport type ResizablePanelsProps = {\n firstPanel: React.ReactNode;\n secondPanel: React.ReactNode;\n /** Whether the first panel is visible (e.g. Sidebar) */\n showFirstPanel?: boolean;\n /** Whether the second panel is visible (e.g. Results) */\n showSecondPanel?: boolean;\n /** 0-100 representing the width/height of the first panel */\n panelSizePercent: number;\n onPanelSizeChange: (sizePercent: number) => void;\n minPanelSizePx?: number;\n orientation?: \"horizontal\" | \"vertical\";\n animateLayout?: boolean;\n className?: string;\n stacked?: boolean;\n};\n\nexport function ResizablePanels({\n firstPanel,\n secondPanel,\n showFirstPanel = true,\n showSecondPanel = true,\n panelSizePercent,\n onPanelSizeChange,\n minPanelSizePx = 200,\n orientation = \"horizontal\",\n animateLayout = true,\n className,\n stacked = false\n}: ResizablePanelsProps) {\n\n const containerRef = useRef<HTMLDivElement>(null);\n const isResizingRef = useRef(false);\n\n // For local layout tracking without triggering React rerenders during drag\n const firstPanelRef = useRef<HTMLDivElement>(null);\n const startPosRef = useRef(0);\n const startSizeRef = useRef(0);\n\n const [isResizing, setIsResizing] = useState(false);\n const isHorizontal = orientation === \"horizontal\";\n\n const handleResizeStart = useCallback((e: React.MouseEvent) => {\n if (!showFirstPanel || !showSecondPanel) return;\n\n e.preventDefault();\n isResizingRef.current = true;\n setIsResizing(true);\n\n startPosRef.current = isHorizontal ? e.clientX : e.clientY;\n\n if (firstPanelRef.current) {\n const rect = firstPanelRef.current.getBoundingClientRect();\n startSizeRef.current = isHorizontal ? rect.width : rect.height;\n }\n\n document.body.style.cursor = isHorizontal ? \"col-resize\" : \"row-resize\";\n document.body.style.userSelect = \"none\";\n }, [isHorizontal, showFirstPanel, showSecondPanel]);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isResizingRef.current || !containerRef.current) return;\n\n const currentPos = isHorizontal ? e.clientX : e.clientY;\n const delta = currentPos - startPosRef.current; // Dragging right/down increases first panel size\n\n let newSize = startSizeRef.current + delta;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const containerTotal = isHorizontal ? containerRect.width : containerRect.height;\n\n // Limit the maximum size to prevent pushing the second panel offscreen\n const maxSize = containerTotal - minPanelSizePx;\n\n newSize = Math.max(minPanelSizePx, Math.min(newSize, maxSize));\n\n // Directly update the DOM for performance while dragging\n if (firstPanelRef.current) {\n firstPanelRef.current.style.flexBasis = `${newSize}px`;\n }\n };\n\n const handleMouseUp = () => {\n if (isResizingRef.current && containerRef.current && firstPanelRef.current) {\n // Calculate the final percentage\n const containerRect = containerRef.current.getBoundingClientRect();\n const firstPanelRect = firstPanelRef.current.getBoundingClientRect();\n\n const containerSize = isHorizontal ? containerRect.width : containerRect.height;\n const finalSize = isHorizontal ? firstPanelRect.width : firstPanelRect.height;\n\n // Pre-set the DOM to the exact % value BEFORE re-enabling transitions.\n // This prevents the visual \"snap\" that occurs when switching from px → %\n // with the CSS transition active.\n if (containerSize > 0) {\n const newPercent = (finalSize / containerSize) * 100;\n firstPanelRef.current.style.flexBasis = `${newPercent}%`;\n onPanelSizeChange(Math.max(0, Math.min(100, newPercent)));\n }\n\n isResizingRef.current = false;\n setIsResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n }\n };\n\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [onPanelSizeChange, isHorizontal, minPanelSizePx]);\n\n // Calculate applied size\n const appliedBasis = !showFirstPanel ? \"0%\" : (showSecondPanel ? `${panelSizePercent}%` : \"100%\");\n\n return (\n <div\n ref={containerRef}\n className={cls(\n \"relative w-full h-full flex overflow-hidden\",\n !stacked && (isHorizontal ? \"flex-row\" : \"flex-col\"),\n className\n )}\n >\n {/* First Panel */}\n <div\n ref={firstPanelRef}\n className={cls(\n stacked ? \"absolute inset-0\" : \"relative flex-shrink-0\",\n \"flex flex-col overflow-hidden\",\n !stacked && !isResizing && animateLayout && \"transition-[flex-basis] duration-150 ease-out\",\n !showFirstPanel && \"hidden\"\n )}\n style={stacked ? undefined : {\n flexBasis: appliedBasis,\n minWidth: isHorizontal && showFirstPanel && showSecondPanel ? `${minPanelSizePx}px` : undefined,\n minHeight: !isHorizontal && showFirstPanel && showSecondPanel ? `${minPanelSizePx}px` : undefined,\n maxWidth: showSecondPanel ? undefined : \"100%\",\n maxHeight: showSecondPanel ? undefined : \"100%\"\n }}\n >\n {firstPanel}\n </div>\n\n {/* Divider */}\n {!stacked && showFirstPanel && showSecondPanel && (\n <div\n className={cls(\n \"relative z-10 flex flex-shrink-0 items-center justify-center\",\n defaultBorderMixin,\n isHorizontal ? \"border-l w-px h-full cursor-col-resize\" : \"border-t h-px w-full cursor-row-resize\"\n )}\n onMouseDown={handleResizeStart}\n >\n {/* Transparent Hit Area with Pill inside */}\n <div className={cls(\n \"absolute flex items-center justify-center group\",\n isHorizontal ? \"w-4 h-full cursor-col-resize top-0\" : \"h-4 w-full cursor-row-resize left-0\"\n )}>\n <div className={cls(\n \"bg-primary/60 dark:bg-primary rounded-full opacity-0 group-hover:opacity-100 transition-all duration-200\",\n isHorizontal ? \"w-1 h-8\" : \"h-1 w-8\"\n )}/>\n </div>\n </div>\n )}\n\n {/* Second Panel */}\n <div\n className={cls(\n stacked ? \"absolute inset-0\" : \"flex-grow relative min-w-0 min-h-0\",\n \"flex flex-col overflow-hidden\",\n !showSecondPanel && \"hidden\"\n )}\n >\n {secondPanel}\n </div>\n </div>\n );\n}\n","\n\"use client\";\nimport { SearchIcon, XIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport React, { useCallback, useState } from \"react\";\n\nimport { defaultBorderMixin } from \"../styles\";\nimport { CircularProgress } from \"./CircularProgress\";\nimport { IconButton } from \"./IconButton\";\n\nimport { cls } from \"../util\";\nimport { useDebounceValue } from \"../hooks\";\n\ninterface SearchBarProps {\n onClick?: () => void;\n onTextSearch?: (searchString?: string) => void;\n placeholder?: string;\n expandable?: boolean;\n /**\n * Size of the search bar.\n * - \"small\": 32px height (matches TextField small)\n * - \"medium\": 44px height (matches TextField medium)\n * @default \"medium\"\n */\n size?: \"smallest\" | \"small\" | \"medium\";\n innerClassName?: string;\n className?: string;\n autoFocus?: boolean;\n disabled?: boolean;\n loading?: boolean;\n inputRef?: React.Ref<HTMLInputElement>;\n /**\n * Optional initial value for the search input, e.g. from URL params.\n */\n initialValue?: string;\n}\n\nexport function SearchBar({\n onClick,\n onTextSearch,\n placeholder = \"Search\",\n expandable = false,\n size = \"medium\",\n innerClassName,\n className,\n autoFocus,\n disabled,\n loading,\n inputRef,\n initialValue\n}: SearchBarProps) {\n\n const [searchText, setSearchText] = useState<string>(initialValue ?? \"\");\n const [active, setActive] = useState<boolean>(false);\n\n const deferredValues = useDebounceValue(searchText, 200);\n\n /**\n * Debounce on SearchIcon text update\n */\n React.useEffect(() => {\n if (!onTextSearch) return;\n if (deferredValues) {\n onTextSearch(deferredValues);\n } else {\n onTextSearch(undefined);\n }\n }, [deferredValues]);\n\n const clearText = useCallback(() => {\n if (!onTextSearch) return;\n setSearchText(\"\");\n onTextSearch(undefined);\n }, [onTextSearch]);\n\n // Height classes matching TextField sizes\n const heightClass = size === \"smallest\" ? \"h-8\" : size === \"small\" ? \"h-[36px]\" : \"h-[44px]\";\n const iconPaddingClass = size === \"smallest\" ? \"px-2\" : size === \"small\" ? \"px-2\" : \"px-4\";\n const inputPaddingClass = size === \"smallest\" ? \"pl-8\" : size === \"small\" ? \"pl-8\" : \"pl-12\";\n\n return (\n <div\n role=\"search\"\n aria-label=\"Search\"\n onClick={onClick}\n className={cls(\"relative transition-all\",\n heightClass,\n \"bg-surface-accent-50 dark:bg-surface-900 border\",\n defaultBorderMixin,\n \"focus-within:ring-1 focus-within:ring-primary/60 focus-within:border-primary focus-within:shadow-[0_0_0_3px_rgba(0,112,244,0.1)]\",\n \"rounded-lg overflow-hidden\",\n className)}>\n <div\n className={cls(\"absolute p-0 h-full pointer-events-none flex items-center justify-center top-0\", iconPaddingClass)}>\n {loading ? <CircularProgress size={\"smallest\"}/> : <SearchIcon className={\"text-text-disabled dark:text-text-disabled-dark\"} size={size === \"smallest\" ? 14 : size === \"small\" ? 18 : 20}/>}\n </div>\n <input\n value={searchText ?? \"\"}\n ref={inputRef}\n onClick={onClick}\n placeholder={placeholder}\n aria-label={placeholder}\n readOnly={!onTextSearch}\n onChange={onTextSearch\n ? (event) => {\n setSearchText(event.target.value);\n }\n : undefined}\n autoFocus={autoFocus}\n onFocus={() => setActive(true)}\n onBlur={() => setActive(false)}\n className={cls(\n (disabled || loading) && \"pointer-events-none\",\n \"placeholder-text-disabled dark:placeholder-text-disabled-dark\",\n \"relative flex items-center transition-all bg-transparent outline-none focus:outline-none focus:ring-0 appearance-none border-none focus:border-transparent\",\n inputPaddingClass, \"h-full w-full text-current\",\n size === \"small\" ? \"text-sm\" : \"\",\n expandable ? (active ? \"w-[220px]\" : \"w-[180px]\") : \"\",\n innerClassName\n )}\n />\n {searchText\n ? <IconButton\n className={`${size === \"small\" ? \"mr-0 top-0\" : \"mr-1 top-0\"} absolute right-0 z-10`}\n size={\"small\"}\n aria-label=\"Clear search\"\n onClick={clearText}>\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n : <div style={{ width: 26 }}/>\n }\n </div>\n );\n}\n","\n\"use client\";\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\nimport React, { ChangeEvent, Children, forwardRef, useCallback, useEffect, useMemo, useState } from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n defaultBorderMixin,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundInvisibleMixin,\n fieldBackgroundMixin,\n focusedDisabled\n} from \"../styles\";\n\nimport { cls } from \"../util\";\nimport { SelectInputLabel } from \"./common/SelectInputLabel\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type SelectValue = string | number | boolean;\n\nexport type SelectProps<T extends SelectValue = string> = {\n open?: boolean,\n name?: string,\n fullWidth?: boolean,\n id?: string,\n onOpenChange?: (open: boolean) => void,\n value?: T,\n className?: string,\n inputClassName?: string,\n viewportClassName?: string,\n onChange?: React.EventHandler<ChangeEvent<HTMLSelectElement>>,\n onValueChange?: (updatedValue: T) => void,\n placeholder?: React.ReactNode,\n renderValue?: (value: T) => React.ReactNode,\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\",\n label?: React.ReactNode | string,\n disabled?: boolean,\n error?: boolean,\n position?: \"item-aligned\" | \"popper\",\n endAdornment?: React.ReactNode,\n inputRef?: React.Ref<HTMLButtonElement>,\n padding?: boolean,\n invisible?: boolean,\n children?: React.ReactNode;\n dataType?: \"string\" | \"number\" | \"boolean\";\n portalContainer?: HTMLElement | null; // Explicitly added to props type if missing\n};\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(({\n inputRef,\n open,\n name,\n fullWidth = false,\n id,\n onOpenChange,\n value,\n onChange,\n onValueChange,\n className,\n inputClassName,\n viewportClassName,\n placeholder,\n renderValue,\n label,\n size = \"large\",\n error,\n disabled,\n padding = true,\n position = \"item-aligned\",\n endAdornment,\n invisible,\n children,\n dataType = \"string\",\n portalContainer: manualContainer, // Rename to avoid confusion\n ...props\n}, ref) => {\n\n const [openInternal, setOpenInternal] = useState(open ?? false);\n\n useEffect(() => {\n setOpenInternal(open ?? false);\n }, [open]);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Resolve final container (Manual Prop > Context Container > Undefined/Body)\n const finalContainer = (manualContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n const onValueChangeInternal = useCallback((newValue: string) => {\n let typedValue: SelectValue = newValue;\n if (dataType === \"boolean\") {\n if (newValue === \"true\") typedValue = true;\n else if (newValue === \"false\") typedValue = false;\n } else if (dataType === \"number\") {\n if (!isNaN(Number(newValue)) && newValue.trim() !== \"\") typedValue = Number(newValue);\n }\n\n onValueChange?.(typedValue as SelectValue & typeof value);\n if (onChange) {\n const event = {\n target: {\n name,\n value: typedValue\n }\n } as ChangeEvent<HTMLSelectElement>;\n onChange(event);\n }\n }, [onChange, onValueChange, name, dataType]);\n\n const hasValue = Array.isArray(value) ? value.length > 0 : (value != null && value !== \"\" && value !== undefined);\n const stringValue = value !== undefined ? String(value) : undefined;\n\n const displayChildren = useMemo(() => {\n if (!hasValue || renderValue) return null;\n\n // Find the child that matches the current value to display its content\n let found: React.ReactNode = null;\n Children.forEach(children, (child) => {\n if (React.isValidElement<SelectItemProps>(child) && String(child.props.value) === String(value)) {\n found = child.props.children;\n }\n });\n return found;\n }, [children, hasValue, renderValue, value]);\n\n return (\n <SelectPrimitive.Root\n name={name}\n value={stringValue}\n open={openInternal}\n disabled={disabled}\n onValueChange={onValueChangeInternal}\n onOpenChange={(open) => {\n onOpenChange?.(open);\n setOpenInternal(open);\n }}\n {...props}>\n {typeof label === \"string\" ? <SelectInputLabel error={error}>{label}</SelectInputLabel> : label}\n <div className={cls(\n \"select-none rounded-lg text-sm\",\n invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n className,\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\",\n \"w-fit\": !fullWidth,\n \"w-full\": fullWidth\n }\n )}>\n <SelectPrimitive.Trigger\n ref={inputRef}\n id={id}\n asChild={false}\n type=\"button\"\n aria-label={typeof label === \"string\" ? label : (typeof renderValue === \"string\" ? renderValue : \"Select an option\")}\n aria-invalid={error || undefined}\n className={cls(\n \"h-full\",\n padding ? {\n \"px-4\": size === \"large\",\n \"px-3\": size === \"medium\",\n \"px-2\": size === \"small\" || size === \"smallest\"\n } : \"\",\n \"outline-hidden focus:outline-hidden\",\n \"outline-none focus:outline-none\",\n \"select-none rounded-lg text-sm\",\n error ? \"text-red-500 dark:text-red-600\" : \"focus:text-text-primary dark:focus:text-text-primary-dark\",\n error ? \"border border-red-500 dark:border-red-600\" : \"\",\n disabled ? \"text-surface-accent-600 dark:text-surface-accent-400\" : \"text-surface-accent-800 dark:text-white\",\n \"relative flex flex-row items-center\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\",\n \"w-full\": fullWidth,\n \"w-fit\": !fullWidth\n },\n inputClassName\n )}\n >\n <div\n ref={ref}\n className={cls(\n \"flex-grow max-w-full flex flex-row gap-2 items-center\",\n \"overflow-visible\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n }\n )}>\n <SelectPrimitive.Value\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n placeholder={placeholder}\n className={\"w-full\"}>\n\n {hasValue && value !== undefined && renderValue\n ? renderValue(value)\n : (displayChildren || placeholder)\n }\n\n </SelectPrimitive.Value>\n </div>\n\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon size={size === \"large\" ? iconSize.medium : iconSize.small}\n className={cls(\"transition\", open ? \"rotate-180\" : \"\", {\n \"px-2\": size === \"large\",\n \"px-1\": size === \"medium\" || size === \"small\"\n })}/>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n\n {endAdornment && (\n <div\n className={cls(\"h-full flex items-center absolute right-0 pr-12\")}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}>\n {endAdornment}\n </div>\n )}\n </div>\n\n {/* Pass the calculated finalContainer */}\n <SelectPrimitive.Portal container={finalContainer}>\n <SelectPrimitive.Content position={position}\n className={cls(focusedDisabled, \"z-50 relative overflow-hidden border bg-white dark:bg-surface-800 p-2 rounded-lg shadow-lg animate-in fade-in-0 zoom-in-95 duration-150\", defaultBorderMixin)}>\n <SelectPrimitive.Viewport className={cls(\"p-1\", viewportClassName)}\n style={{ maxHeight: \"var(--radix-select-content-available-height)\" }}>\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\n\nSelect.displayName = \"Select\";\n\n// ... (SelectItem and SelectGroup remain unchanged)\nexport type SelectItemProps<T extends SelectValue = string> = {\n value: T,\n children?: React.ReactNode,\n disabled?: boolean,\n className?: string,\n};\n\nexport const SelectItem = React.memo(function SelectItem<T extends SelectValue = string>({\n value,\n children,\n disabled,\n className\n}: SelectItemProps<T>) {\n // Convert value to string for Radix UI\n const stringValue = String(value);\n\n return <SelectPrimitive.Item\n key={stringValue}\n value={stringValue}\n disabled={disabled}\n className={cls(\n \"w-full\",\n \"relative flex items-center p-2 rounded-md text-sm text-surface-accent-700 dark:text-surface-accent-300\",\n \"focus:z-10\",\n \"data-[state=checked]:bg-surface-accent-100 data-[state=checked]:dark:bg-surface-accent-800 focus:bg-surface-accent-100 dark:focus:bg-surface-900\",\n \"data-[state=checked]:focus:bg-surface-accent-200 data-[state=checked]:dark:focus:bg-surface-900\",\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n \"[&>*]:w-full\",\n \"overflow-visible\",\n className\n )}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <div\n className=\"absolute left-1 data-[state=checked]:block hidden\">\n <CheckIcon size={iconSize.smallest}/>\n </div>\n </SelectPrimitive.Item>;\n});\n\nexport type SelectGroupProps = {\n label: React.ReactNode,\n children: React.ReactNode,\n className?: string\n};\n\nexport const SelectGroup = React.memo(function SelectGroup({\n label,\n children,\n className\n}: SelectGroupProps) {\n return <>\n <SelectPrimitive.Group\n className={cls(\n \"text-xs text-surface-accent-900 dark:text-white uppercase tracking-wider font-bold mt-6 first:mt-2\",\n \"px-2 py-2\",\n className\n )}>\n {label}\n </SelectPrimitive.Group>\n\n {children}\n </>;\n});\n","\"use client\";\nimport * as React from \"react\";\nimport { cls } from \"../util\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nexport interface SliderProps {\n className?: string;\n name?: string;\n disabled?: boolean;\n orientation?: React.AriaAttributes[\"aria-orientation\"];\n dir?: \"ltr\" | \"rtl\";\n min?: number;\n max?: number;\n step?: number;\n minStepsBetweenThumbs?: number;\n value?: number[];\n defaultValue?: number[];\n onValueChange?: (value: number[]) => void;\n onValueCommit?: (value: number[]) => void;\n inverted?: boolean;\n form?: string;\n size?: \"small\" | \"regular\";\n}\n\nfunction SliderThumb(props: {\n props: Omit<React.PropsWithoutRef<SliderProps>, \"size\" | \"className\">,\n index: number,\n hovered: boolean,\n classes: string\n}) {\n return <TooltipPrimitive.Root open={props.hovered}>\n <TooltipPrimitive.Trigger asChild>\n <SliderPrimitive.Thumb\n className={cls({\n \"border-primary bg-primary outline-none\": !props.props.disabled,\n \"border-surface-accent-300 bg-surface-accent-300 dark:border-surface-700 dark:bg-surface-700\": props.props.disabled\n },\n props.classes,\n \"focus-visible:ring-4 focus-visible:ring-primary focus-visible:ring-opacity-50 focus-visible:ring-primary/50\",\n \"hover:ring-4 hover:ring-primary hover:ring-opacity-25 hover:ring-primary/25\",\n \"block rounded-full transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\")}\n\n />\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Content side=\"top\"\n sideOffset={5}\n className={cls(\n \"TooltipContent\",\n \"max-w-lg leading-relaxed\",\n \"z-50 rounded px-3 py-2 text-xs leading-none bg-surface-accent-700 dark:bg-surface-accent-800 bg-opacity-90 bg-surface-accent-700/90 dark:bg-surface-accent-800/90 font-medium text-surface-accent-50 shadow-2xl select-none duration-400 ease-in transform opacity-100\"\n )}>\n {props.props.value?.[props.index]}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Root>;\n}\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(({\n className,\n size = \"regular\",\n ...props\n }, ref) => {\n const [hovered, setHovered] = React.useState(false);\n\n const thumbSizeClasses =\n size === \"small\"\n ? \"h-4 w-4\" // Smaller size for the thumb\n : \"h-6 w-6\"; // Default size\n\n return (\n <TooltipPrimitive.Provider delayDuration={200}>\n <SliderPrimitive.Root\n ref={ref}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={cls(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n style={{ height: size === \"small\" ? 4 : 8 }}\n className={\"relative w-full grow overflow-hidden rounded-full bg-surface-accent-300 bg-opacity-40 bg-surface-accent-300/40 dark:bg-surface-700 dark:bg-opacity-40 dark:bg-surface-700/40\"}>\n\n <SliderPrimitive.Range\n className={cls(\"absolute h-full\", {\n \"bg-primary\": !props.disabled,\n \"bg-surface-accent-300 dark:bg-surface-700\": props.disabled\n })}\n />\n </SliderPrimitive.Track>\n\n {(props.value ?? [0]).map((_, index) => <SliderThumb\n key={index}\n index={index}\n props={props}\n hovered={hovered}\n classes={thumbSizeClasses}/>)}\n </SliderPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n});\n\nSlider.displayName = \"Slider\";\n\nexport { Slider };\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { usePortalContainer, PortalContainerProvider } from \"../hooks/PortalContainerContext\";\n\ninterface SheetProps {\n children: React.ReactNode;\n open: boolean;\n title?: string;\n modal?: boolean;\n includeBackgroundOverlay?: boolean;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n darkBackground?: boolean;\n transparent?: boolean;\n onOpenChange?: (open: boolean) => void;\n onPointerDownOutside?: (e: Event) => void;\n onInteractOutside?: (e: Event) => void;\n className?: string;\n style?: React.CSSProperties;\n overlayClassName?: string;\n overlayZIndex?: string;\n overlayStyle?: React.CSSProperties;\n portalContainer?: HTMLElement | null;\n}\n\nexport const Sheet: React.FC<SheetProps> = ({\n children,\n side = \"right\",\n title,\n modal = true,\n includeBackgroundOverlay = true,\n open,\n onOpenChange,\n onPointerDownOutside,\n onInteractOutside,\n transparent,\n className,\n style,\n overlayClassName,\n overlayZIndex = \"z-50\",\n overlayStyle,\n portalContainer,\n ...props\n}) => {\n const [displayed, setDisplayed] = useState(false);\n const [contentEl, setContentEl] = useState<HTMLDivElement | null>(null);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n useEffect(() => {\n const raf = requestAnimationFrame(() => {\n setDisplayed(open);\n });\n return () => cancelAnimationFrame(raf);\n }, [open]);\n\n const transformValue: Record<string, string> = {\n top: \"-translate-y-full\",\n bottom: \"translate-y-full\",\n left: \"-translate-x-full\",\n right: \"translate-x-full\"\n };\n\n const borderClass: Record<string, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\"\n };\n\n return (\n <DialogPrimitive.Root open={displayed || open}\n modal={modal}\n onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal container={finalContainer}>\n {includeBackgroundOverlay && <DialogPrimitive.Overlay\n className={cls(\n \"outline-none\",\n \"fixed inset-0 bg-white/80 dark:bg-surface-900/80\",\n \"backdrop-blur-sm transition-all duration-100 data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in\",\n overlayZIndex,\n overlayClassName\n )}\n style={overlayStyle}\n />}\n <DialogPrimitive.Content\n {...props}\n ref={setContentEl}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onPointerDownOutside={onPointerDownOutside}\n onInteractOutside={onInteractOutside}\n className={cls(\n \"outline-none\",\n borderClass[side],\n defaultBorderMixin,\n \"transform-gpu\",\n \"will-change-transform\",\n \"text-surface-accent-900 dark:text-white\",\n \"fixed transform z-50 transition-[transform,opacity] ease-in-out\",\n !displayed ? \"duration-150\" : \"duration-100\",\n \"outline-none focus:outline-none focus-visible:outline-none focus-visible:ring-0 focus:ring-0\",\n transparent ? \"\" : \"shadow-md bg-white dark:bg-surface-900\",\n side === \"top\" || side === \"bottom\" ? \"w-full\" : \"h-full\",\n side === \"left\" || side === \"top\" ? \"left-0 top-0\" : \"right-0 bottom-0\",\n displayed && open ? \"opacity-100\" : \"opacity-50\",\n !displayed || !open ? transformValue[side] : \"\",\n className\n )}\n style={style}\n >\n <DialogPrimitive.Title className=\"sr-only outline-none focus:outline-none focus-visible:outline-none focus-visible:ring-0 focus:ring-0\">\n {title ?? \"Sheet\"}\n </DialogPrimitive.Title>\n <PortalContainerProvider container={contentEl}>\n {children}\n </PortalContainerProvider>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","\"use client\";\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cls, debounce } from \"../util\";\n\ntype State = {\n outerHeightStyle: number;\n overflow?: boolean | undefined;\n};\n\nfunction getStyleValue(value: string) {\n return parseInt(value, 10) || 0;\n}\n\nconst styles: {\n shadow: React.CSSProperties;\n} = {\n shadow: {\n // Visibility needed to hide the extra text area on iPads\n visibility: \"hidden\",\n // Remove from the content flow\n position: \"absolute\",\n // Ignore the scrollbar width\n overflow: \"hidden\",\n height: 0,\n top: 0,\n left: 0,\n // Create a new layer, increase the isolation of the computed values\n transform: \"translateZ(0)\"\n }\n};\n\nfunction isEmpty(obj: State) {\n return (\n obj === undefined ||\n obj === null ||\n Object.keys(obj).length === 0 ||\n (obj.outerHeightStyle === 0 && !obj.overflow)\n );\n}\n\nexport const TextareaAutosize = React.forwardRef(function TextareaAutosize(\n props: TextareaAutosizeProps,\n ref: React.ForwardedRef<Element>\n) {\n const {\n onChange,\n onScroll,\n onResize,\n maxRows,\n minRows = 1,\n style,\n value,\n onFocus,\n onBlur,\n sizeRef,\n ignoreBoxSizing,\n ...other\n } = props;\n\n const { current: isControlled } = React.useRef(value != null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(ref, inputRef);\n const shadowRef = React.useRef<HTMLTextAreaElement>(null);\n const renders = React.useRef(0);\n const [state, setState] = React.useState<State>({\n outerHeightStyle: 0\n });\n\n const getUpdatedState = React.useCallback(() => {\n\n const input = inputRef.current!;\n if (typeof window === \"undefined\") {\n return {\n outerHeightStyle: 0\n };\n }\n\n const containerWindow = window;\n const computedStyle = containerWindow.getComputedStyle(input);\n\n // If input's width is shrunk and it's not visible, don't sync height.\n if (computedStyle.width === \"0px\") {\n return {\n outerHeightStyle: 0\n };\n }\n\n const sizeReferenceElement = sizeRef?.current ?? shadowRef.current!;\n const inputShallow = shadowRef.current!;\n\n sizeReferenceElement.style.width = computedStyle.width;\n inputShallow.value = input.value || props.placeholder || \"x\";\n if (inputShallow.value.slice(-1) === \"\\n\") {\n // Certain fonts which overflow the line height will cause the textarea\n // to report a different scrollHeight depending on whether the last line\n // is empty. Make it non-empty to avoid this issue.\n inputShallow.value += \" \";\n }\n\n const boxSizing = computedStyle.boxSizing;\n const padding =\n getStyleValue(computedStyle.paddingBottom) + getStyleValue(computedStyle.paddingTop);\n const border =\n getStyleValue(computedStyle.borderBottomWidth) + getStyleValue(computedStyle.borderTopWidth);\n const minHeight = getStyleValue(computedStyle.minHeight);\n\n // The height of the inner content\n const innerHeight = sizeReferenceElement.scrollHeight;\n\n // Measure height of a textarea with a single row\n inputShallow.value = \"x\";\n const singleRowHeight = sizeReferenceElement.scrollHeight;\n\n // The height of the outer content\n let outerHeight = innerHeight;\n\n if (minRows) {\n outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);\n }\n if (maxRows) {\n outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n }\n outerHeight = Math.max(outerHeight, singleRowHeight, minHeight);\n\n // Take the box sizing into account for applying this value as a style.\n const outerHeightStyle = outerHeight + (!ignoreBoxSizing && boxSizing === \"border-box\" ? padding + border : 0);\n\n const overflow = Math.abs(outerHeight - innerHeight) <= 1;\n\n return {\n outerHeightStyle,\n overflow\n };\n }, [maxRows, minRows, props.placeholder]);\n\n const updateState = React.useCallback((prevState: State, newState: State) => {\n const {\n outerHeightStyle,\n overflow\n } = newState;\n // Need a large enough difference to update the height.\n // This prevents infinite rendering loop.\n if (\n renders.current < 20 &&\n ((outerHeightStyle > 0 &&\n Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1) ||\n prevState.overflow !== overflow)\n ) {\n renders.current += 1;\n return {\n overflow,\n outerHeightStyle\n };\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (renders.current === 20) {\n console.error(\n [\n \"MUI: Too many re-renders. The layout is unstable.\",\n \"TextareaAutosize limits the number of renders to prevent an infinite loop.\"\n ].join(\"\\n\")\n );\n }\n }\n return prevState;\n }, []);\n\n const syncHeight = React.useCallback(() => {\n const newState = getUpdatedState();\n\n if (isEmpty(newState)) {\n return;\n }\n if (onResize) {\n onResize(newState);\n }\n\n setState((prevState) => {\n return updateState(prevState, newState);\n });\n }, [getUpdatedState, onResize, updateState]);\n\n const syncHeightWithFlushSync = React.useCallback(() => {\n const newState = getUpdatedState();\n\n if (isEmpty(newState)) {\n return;\n }\n\n // In React 18, state updates in a ResizeObserver's callback are happening after the paint which causes flickering\n // when doing some visual updates in it. Using flushSync ensures that the dom will be painted after the states updates happen\n // Related issue - https://github.com/facebook/react/issues/24331\n ReactDOM.flushSync(() => {\n setState((prevState) => {\n return updateState(prevState, newState);\n });\n });\n }, [getUpdatedState, updateState]);\n\n React.useEffect(() => {\n const handleResize = debounce(() => {\n renders.current = 0;\n\n // If the TextareaAutosize component is replaced by Suspense with a fallback, the last\n // ResizeObserver's handler that runs because of the change in the layout is trying to\n // access a dom node that is no longer there (as the fallback component is being shown instead).\n if (inputRef.current) {\n syncHeightWithFlushSync();\n }\n });\n let resizeObserver: ResizeObserver;\n\n const input = inputRef.current!;\n const containerWindow = window;\n if (typeof window === \"undefined\") {\n return;\n }\n\n containerWindow.addEventListener(\"resize\", handleResize);\n\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(handleResize);\n resizeObserver.observe(input);\n }\n\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener(\"resize\", handleResize);\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [syncHeightWithFlushSync]);\n\n useLayoutEffect(() => {\n syncHeight();\n });\n\n React.useEffect(() => {\n renders.current = 0;\n }, [value]);\n\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n renders.current = 0;\n\n if (!isControlled) {\n syncHeight();\n }\n\n if (onChange) {\n onChange(event);\n }\n };\n\n return (\n <React.Fragment>\n <textarea\n value={value}\n onChange={handleChange}\n className={props.className}\n ref={handleRef as React.Ref<HTMLTextAreaElement>}\n onFocus={onFocus}\n onBlur={onBlur}\n // Apply the rows prop to get a \"correct\" first SSR paint\n rows={minRows as number}\n style={{\n height: state.outerHeightStyle,\n // Need a large enough difference to allow scrolling.\n // This prevents infinite rendering loop.\n overflow: state.overflow ? \"hidden\" : undefined,\n ...style\n }}\n onScroll={onScroll}\n {...other}\n />\n <textarea\n aria-hidden\n className={cls(props.className, props.shadowClassName)}\n readOnly\n ref={shadowRef}\n tabIndex={-1}\n style={{\n padding: 0,\n ...styles.shadow,\n ...style\n }}\n />\n </React.Fragment>\n );\n}) as React.FC<TextareaAutosizeProps & { ref?: React.ForwardedRef<Element> }>;\n\nexport type TextareaAutosizeProps = Omit<React.InputHTMLAttributes<HTMLTextAreaElement>, \"onResize\"> & {\n\n className?: string;\n\n shadowClassName?: string;\n\n /**\n * Maximum number of rows to display.\n */\n maxRows?: number | string;\n /**\n * Minimum number of rows to display.\n * @default 1\n */\n minRows?: number | string;\n /**\n * @ignore\n */\n onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n /**\n * @ignore\n */\n placeholder?: string;\n /**\n * @ignore\n */\n style?: object;\n /**\n * @ignore\n */\n value?: string[] | number | string;\n\n sizeRef?: React.RefObject<HTMLDivElement>;\n\n onScroll?: (event: React.UIEvent<HTMLTextAreaElement>) => void;\n\n onResize?: (state: State) => void;\n\n autoFocus?: boolean;\n\n ignoreBoxSizing?: boolean;\n}\n\nfunction useForkRef<Instance>(\n ...refs: Array<React.Ref<Instance> | undefined>\n): React.RefCallback<Instance> | null {\n /**\n * This will create a new function if the refs passed to this hook change and are all defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior.\n */\n return React.useMemo(() => {\n if (refs.every((ref) => ref == null)) {\n return null;\n }\n\n return (instance) => {\n refs.forEach((ref) => {\n setRef(ref, instance);\n });\n };\n\n }, refs);\n}\n\nfunction setRef<T>(\n ref: React.MutableRefObject<T | null> | ((instance: T | null) => void) | null | undefined,\n value: T | null\n): void {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n","\"use client\";\nimport React, { ForwardedRef, forwardRef, useEffect, useId, useRef } from \"react\";\n\nimport {\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundInvisibleMixin,\n fieldBackgroundMixin,\n focusedInvisibleMixin\n} from \"../styles\";\nimport { InputLabel } from \"./InputLabel\";\nimport { cls } from \"../util\";\n\nexport type InputType =\n | \"text\"\n | \"number\"\n | \"phone\"\n | \"email\"\n | \"password\"\n | \"search\"\n | \"url\"\n | \"date\"\n | \"time\"\n | \"datetime-local\"\n | \"month\"\n | \"week\"\n | \"color\";\n\nexport type TextFieldProps<T extends string | number> = {\n type?: InputType;\n value?: T;\n onChange?: (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n label?: React.ReactNode;\n multiline?: boolean;\n disabled?: boolean;\n invisible?: boolean;\n error?: boolean;\n endAdornment?: React.ReactNode;\n autoFocus?: boolean;\n placeholder?: string;\n size?: \"smallest\" | \"small\" | \"medium\" | \"large\";\n className?: string;\n style?: React.CSSProperties;\n inputClassName?: string;\n inputStyle?: React.CSSProperties;\n inputRef?: React.ForwardedRef<any>;\n /**\n * Maximum number of rows to display.\n */\n maxRows?: number | string;\n /**\n * Minimum number of rows to display.\n * @default 1\n */\n minRows?: number | string;\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"value\">;\n\nexport const TextField = forwardRef<HTMLDivElement, TextFieldProps<string | number>>(\n <T extends string | number>(\n {\n value,\n onChange,\n label,\n type = \"text\",\n multiline = false,\n invisible,\n maxRows,\n minRows,\n disabled,\n error,\n endAdornment,\n autoFocus,\n placeholder,\n size = \"large\",\n className,\n style,\n inputClassName,\n inputStyle,\n inputRef: inputRefProp,\n ...inputProps\n }: TextFieldProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n ) => {\n\n const fallbackRef = useRef(null);\n const inputRef = inputRefProp ?? fallbackRef;\n const autoId = useId();\n const inputId = inputProps.id ?? autoId;\n const labelId = `${inputId}-label`;\n\n const [focused, setFocused] = React.useState(false);\n const hasValue = value !== undefined && value !== null && value !== \"\";\n\n useEffect(() => {\n const element = inputRef && \"current\" in inputRef ? inputRef.current : null;\n if (element && document.activeElement === element) {\n setFocused(true);\n }\n }, []);\n\n useEffect(() => {\n if (type !== \"number\") return;\n const handleWheel = (event: any) => {\n if (event.target instanceof HTMLElement) event.target.blur();\n };\n\n const element = \"current\" in inputRef ? inputRef.current : inputRef;\n\n element?.addEventListener(\"wheel\", handleWheel);\n\n return () => {\n element?.removeEventListener(\"wheel\", handleWheel);\n };\n }, [inputRef, type]);\n\n const input = multiline ? (\n <textarea\n {...(inputProps as React.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n ref={inputRef}\n id={inputId}\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={error || undefined}\n aria-disabled={disabled || undefined}\n placeholder={focused || hasValue || !label ? placeholder : undefined}\n autoFocus={autoFocus}\n rows={typeof minRows === \"string\" ? parseInt(minRows) : (minRows ?? 3)}\n value={value ?? \"\"}\n onChange={onChange}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={inputStyle}\n className={cls(\n invisible ? focusedInvisibleMixin : \"\",\n \"rounded-lg resize-none w-full outline-none text-base bg-transparent min-h-[64px] px-3\",\n label ? \"pt-8 pb-2\" : \"py-2\",\n disabled && \"outline-none opacity-50 text-surface-accent-600 dark:text-surface-accent-500\",\n inputClassName\n )}\n />\n ) : (\n <input\n {...inputProps}\n ref={inputRef}\n id={inputId}\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={error || undefined}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n style={inputStyle}\n className={cls(\n \"w-full outline-none bg-transparent leading-normal px-3\",\n \"rounded-lg\",\n \"focused:text-text-primary focused:dark:text-text-primary-dark\",\n invisible ? focusedInvisibleMixin : \"\",\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n label\n ? size === \"large\"\n ? \"pt-8 pb-2\"\n : \"pt-4 pb-2\"\n : size === \"smallest\"\n ? \"py-0.5\"\n : size === \"small\"\n ? \"py-1\"\n : \"py-2\",\n endAdornment ? \"pr-12\" : \"pr-3\",\n disabled &&\n \"outline-none opacity-65 dark:opacity-60 text-surface-accent-800 dark:text-white\",\n inputClassName\n )}\n placeholder={focused || hasValue || !label ? placeholder : undefined}\n autoFocus={autoFocus}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n type={type}\n value={type === \"number\" && Number.isNaN(value) ? \"\" : value ?? \"\"}\n onChange={onChange}\n />\n );\n\n return (\n <div\n ref={ref}\n className={cls(\n \"rounded-lg relative max-w-full\",\n invisible ? fieldBackgroundInvisibleMixin : fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n error ? \"border border-red-500 dark:border-red-600\" : \"\",\n {\n \"min-h-[28px]\": size === \"smallest\",\n \"min-h-[32px]\": size === \"small\",\n \"min-h-[44px]\": size === \"medium\",\n \"min-h-[64px]\": size === \"large\"\n },\n className\n )}\n style={style}\n >\n {label && (\n <InputLabel\n id={labelId}\n htmlFor={inputId}\n className={cls(\n \"pointer-events-none absolute\",\n size === \"large\" ? \"top-1\" : \"top-[-1px]\",\n !error\n ? focused\n ? \"text-primary dark:text-primary\"\n : \"text-text-secondary dark:text-text-secondary-dark\"\n : \"text-red-500 dark:text-red-600\",\n disabled ? \"opacity-50\" : \"\"\n )}\n shrink={hasValue || focused}\n >\n {label}\n </InputLabel>\n )}\n\n {input}\n\n {endAdornment && (\n <div\n className={cls(\n \"flex flex-row justify-center items-center absolute h-full right-0 top-0\",\n {\n \"mr-4\": size === \"large\",\n \"mr-3\": size === \"medium\",\n \"mr-2\": size === \"small\" || size === \"smallest\"\n }\n )}\n >\n {endAdornment}\n </div>\n )}\n </div>\n );\n }\n);\n\nTextField.displayName = \"TextField\";\n","\nimport React, { createContext, useContext, useRef, useState, useEffect, useMemo } from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cls } from \"../util\";\nimport { defaultBorderMixin } from \"../styles\";\n\nexport type TabVariant = \"standard\" | \"boxy\" | \"pill\";\n\nconst TabsContext = createContext<{ variant: TabVariant }>({ variant: \"standard\" });\nimport { IconButton } from \"./IconButton\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport { iconSize } from \"../icons/Icon\";\n\nexport type TabsProps = {\n value: string,\n children: React.ReactNode,\n innerClassName?: string,\n className?: string,\n variant?: TabVariant,\n onValueChange: (value: string) => void\n};\n\nexport function Tabs({\n value,\n onValueChange,\n className,\n innerClassName,\n variant = \"standard\",\n children\n}: TabsProps) {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const [showLeftScroll, setShowLeftScroll] = useState(false);\n const [showRightScroll, setShowRightScroll] = useState(false);\n const [isScrollable, setIsScrollable] = useState(false);\n\n const checkScroll = () => {\n if (scrollContainerRef.current) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainerRef.current;\n setShowLeftScroll(scrollLeft > 0);\n setShowRightScroll(Math.ceil(scrollLeft + clientWidth) < scrollWidth);\n setIsScrollable(scrollWidth > clientWidth);\n }\n };\n\n useEffect(() => {\n checkScroll();\n window.addEventListener(\"resize\", checkScroll);\n\n let observer: ResizeObserver;\n if (scrollContainerRef.current) {\n observer = new ResizeObserver(checkScroll);\n observer.observe(scrollContainerRef.current);\n if (scrollContainerRef.current.firstElementChild) {\n observer.observe(scrollContainerRef.current.firstElementChild);\n }\n }\n\n return () => {\n window.removeEventListener(\"resize\", checkScroll);\n observer?.disconnect();\n };\n }, [children]);\n\n const scroll = (direction: \"left\" | \"right\") => {\n if (scrollContainerRef.current) {\n const container = scrollContainerRef.current;\n const scrollAmount = Math.max(container.clientWidth / 2, 200);\n const targetScroll = container.scrollLeft + (direction === \"left\" ? -scrollAmount : scrollAmount);\n\n container.scrollTo({\n left: targetScroll,\n behavior: \"smooth\"\n });\n // checkScroll will be called by onScroll event\n }\n };\n\n const contextValue = useMemo(() => ({ variant }), [variant]);\n\n return <TabsContext.Provider value={contextValue}>\n <TabsPrimitive.Root\n value={value}\n onValueChange={onValueChange}\n className={cls(\"relative flex flex-row items-center min-w-0 w-full\", className)}\n >\n {isScrollable && (\n <button\n type=\"button\"\n disabled={!showLeftScroll}\n aria-label=\"Scroll tabs left\"\n onClick={() => scroll(\"left\")}\n className={cls(\n \"absolute left-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center rounded-md transition-all h-8 w-6\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400\",\n !showLeftScroll ? \"pointer-events-none opacity-0\" : \"text-surface-600 dark:text-surface-400 hover:bg-surface-200 dark:hover:bg-surface-800\",\n \"bg-surface-50 dark:bg-surface-900 border shadow-sm\", defaultBorderMixin\n )}\n >\n <ChevronLeftIcon size={iconSize.smallest}/>\n </button>\n )}\n <div\n ref={scrollContainerRef}\n className=\"flex-1 overflow-x-auto no-scrollbar min-w-0\"\n onScroll={checkScroll}\n style={{ scrollbarWidth: \"none\",\nmsOverflowStyle: \"none\" }}\n >\n <TabsPrimitive.List className={cls(\n variant === \"standard\" && \"inline-flex h-9 items-center justify-start rounded-md bg-surface-50 p-1 text-surface-600 dark:bg-surface-900 dark:text-surface-400 gap-2 border\",\n variant === \"standard\" && defaultBorderMixin,\n variant === \"boxy\" && \"flex items-center h-full\",\n variant === \"pill\" && \"flex items-center gap-0.5\",\n innerClassName)\n }>\n {children}\n </TabsPrimitive.List>\n </div>\n {isScrollable && (\n <button\n type=\"button\"\n disabled={!showRightScroll}\n aria-label=\"Scroll tabs right\"\n onClick={() => scroll(\"right\")}\n className={cls(\n \"absolute right-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center rounded-md transition-all h-8 w-6\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400\",\n !showRightScroll ? \"pointer-events-none opacity-0\" : \"text-surface-600 dark:text-surface-400 hover:bg-surface-200 dark:hover:bg-surface-800\",\n \"bg-surface-50 dark:bg-surface-900 border shadow-sm\", defaultBorderMixin\n )}\n >\n <ChevronRightIcon size={iconSize.smallest}/>\n </button>\n )}\n </TabsPrimitive.Root>\n </TabsContext.Provider>;\n}\n\nexport type TabProps = {\n value: string,\n className?: string,\n innerClassName?: string,\n children: React.ReactNode,\n disabled?: boolean\n};\n\nexport function Tab({\n value,\n className,\n innerClassName,\n children,\n disabled\n}: TabProps) {\n const { variant } = useContext(TabsContext);\n\n return (\n <TabsPrimitive.Trigger\n value={value}\n disabled={disabled}\n className={cls(\n \"inline-flex items-center justify-center whitespace-nowrap text-sm font-medium ring-offset-white transition-all\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400 focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n variant === \"standard\" && \"rounded-sm px-3 py-1 data-[state=active]:bg-white data-[state=active]:text-surface-900 data-[state=active]:shadow-sm dark:data-[state=active]:bg-surface-900 dark:data-[state=active]:text-surface-50\",\n variant === \"boxy\" && cls(\n \"flex-shrink-0 flex items-center gap-1.5 px-3.5 h-9 border-r border-surface-200 dark:border-surface-800 cursor-pointer text-[12px] font-medium transition-colors group relative box-border overflow-hidden\",\n \"border-b-2 border-b-transparent\",\n \"data-[state=active]:bg-surface-50 dark:data-[state=active]:bg-surface-900\",\n \"data-[state=active]:text-text-primary dark:data-[state=active]:text-text-primary-dark\",\n \"data-[state=active]:border-b-primary\",\n \"text-text-secondary dark:text-text-secondary-dark hover:bg-surface-100 dark:hover:bg-surface-800\"\n ),\n variant === \"pill\" && cls(\n \"px-2 py-0.5 rounded text-[10px] font-medium transition-colors\",\n \"data-[state=active]:bg-primary/10 data-[state=active]:text-primary dark:data-[state=active]:bg-primary/20 dark:data-[state=active]:text-blue-400\",\n \"text-text-disabled dark:text-text-disabled-dark hover:text-text-secondary dark:hover:text-text-secondary-dark\"\n ),\n className,\n variant === \"standard\" && innerClassName\n )}\n >\n {children}\n </TabsPrimitive.Trigger>\n );\n}\n","\n\"use client\";\n\nimport { TagIcon } from \"lucide-react\";\nimport React, { useRef } from \"react\";\nimport { defaultBorderMixin } from \"../styles\";\nimport { cls } from \"../util\";\n\nexport type TableProps = {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n} & React.TableHTMLAttributes<HTMLTableElement>;\n\nexport const Table = React.memo(({\n children,\n className,\n style,\n ...rest\n }: TableProps) => (\n <table\n className={cls(\"text-left text-surface-900 dark:text-white rounded-lg overflow-x-auto\", className)}\n style={style}\n {...rest}\n >\n {children}\n </table>\n));\n\nexport type TableBodyProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableBody = React.memo(({\n children,\n className,\n ...rest\n }: TableBodyProps) => (\n <tbody\n className={cls(\"bg-white dark:bg-surface-900 text-sm divide-y divide-surface-100 dark:divide-surface-700 dark:divide-opacity-70 dark:divide-surface-700/70\", className)}\n {...rest}\n >\n {children}\n </tbody>\n));\n\nexport type TableHeaderProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableHeader = React.memo(({\n children,\n className,\n ...rest\n }: TableHeaderProps) => (\n <thead {...rest}>\n <tr\n className={cls(\n defaultBorderMixin,\n \"text-sm font-medium text-surface-700 dark:text-surface-accent-300\",\n \"bg-surface-accent-50 border-b dark:bg-surface-800\",\n className\n )}\n >\n {children}\n </tr>\n </thead>\n));\n\nexport type TableRowProps = {\n children?: React.ReactNode;\n className?: string;\n onClick?: React.MouseEventHandler<any>;\n style?: React.CSSProperties;\n} & React.HTMLAttributes<HTMLTableRowElement>;\n\nexport const TableRow = React.memo(({\n children,\n className,\n onClick,\n style,\n ...rest\n }: TableRowProps) => (\n <tr\n onClick={onClick}\n style={style}\n className={cls(\n \"bg-white dark:bg-surface-900\",\n onClick ? \"hover:bg-primary/5 dark:hover:bg-primary/5 cursor-pointer\" : \"\",\n className\n )}\n {...rest}\n >\n {children}\n </tr>\n));\n\nexport type TableCellProps = {\n children?: React.ReactNode;\n header?: boolean;\n scope?: string;\n className?: string;\n style?: React.CSSProperties;\n align?: \"left\" | \"center\" | \"right\";\n colspan?: number;\n} & React.HTMLAttributes<HTMLTableCellElement>;\n\nexport const TableCell = React.memo(({\n children,\n header = false,\n scope = \"\",\n align,\n className,\n style,\n colspan,\n ...rest\n }: TableCellProps) => {\n const ref = useRef<HTMLTableCellElement>(null);\n const TagIcon = header || getParentName(ref.current) === \"TableHeader\" ? \"th\" : \"td\";\n return (\n <TagIcon\n scope={scope}\n colSpan={colspan}\n ref={ref}\n style={style}\n className={cls(\n \"px-4 py-3 text-clip \",\n align === \"center\" ? \"text-center\" : (align === \"right\" ? \"text-right\" : \"text-left\"),\n className\n )}\n {...rest}\n >\n {children}\n </TagIcon>\n );\n});\n\ninterface ReactFiber {\n return: ReactFiber;\n type: string | Function;\n elementType?: {\n name?: string;\n };\n}\n\n// This is highly experimental and might break in the future\nfunction getParentName(element: HTMLElement | null): string | undefined {\n if (element) {\n const key = Object.keys(element).find((key) => {\n return (\n key.startsWith(\"__reactFiber$\") ||\n key.startsWith(\"__reactInternalInstance$\")\n );\n });\n if (key) {\n const domFiber = (element as unknown as Record<string, ReactFiber>)[key];\n const getComponentFiber = (fiber: ReactFiber): ReactFiber => {\n let parentFiber = fiber.return;\n while (parentFiber && typeof parentFiber.type === \"string\") {\n parentFiber = parentFiber.return;\n }\n return parentFiber;\n };\n let fiber = getComponentFiber(domFiber);\n fiber = getComponentFiber(fiber);\n return fiber?.elementType?.name;\n }\n }\n return undefined;\n}\n\nTable.displayName = \"Table\";\nTableBody.displayName = \"TableBody\";\nTableHeader.displayName = \"TableHeader\";\nTableRow.displayName = \"TableRow\";\nTableCell.displayName = \"TableCell\";\n","\"use client\";\nimport React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { paperMixin } from \"../styles\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\nimport { usePortalContainer } from \"../hooks/PortalContainerContext\";\n\nexport type PopoverSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type PopoverAlign = \"start\" | \"center\" | \"end\";\n\nexport interface PopoverProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n side?: PopoverSide;\n sideOffset?: number;\n align?: PopoverAlign;\n alignOffset?: number;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n enabled?: boolean;\n modal?: boolean;\n className?: string;\n portalContainer?: HTMLElement | null;\n onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;\n}\n\nexport function Popover({\n trigger,\n children,\n open,\n onOpenChange,\n side,\n sideOffset = 5,\n align,\n alignOffset,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n enabled = true,\n modal = false,\n portalContainer,\n className,\n onMouseEnter,\n onMouseLeave\n }: PopoverProps) {\n\n useInjectStyles(\"Popover\", popoverStyles);\n\n // Get the portal container from context\n const contextContainer = usePortalContainer();\n\n // Prioritize manual prop, fallback to context container\n const finalContainer = (portalContainer ?? contextContainer ?? undefined) as HTMLElement | undefined;\n\n if (!enabled)\n return <>{trigger}</>;\n\n return <PopoverPrimitive.Root open={open}\n onOpenChange={onOpenChange}\n modal={modal}>\n\n <PopoverPrimitive.Trigger asChild>\n {trigger}\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal container={finalContainer}>\n <PopoverPrimitive.Content\n className={cls(paperMixin,\n \"PopoverContent z-40\", className)}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n arrowPadding={arrowPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n avoidCollisions={avoidCollisions}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}>\n\n {children}\n <PopoverPrimitive.Arrow className=\"fill-white dark:fill-surface-800\"/>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>;\n}\n\nconst popoverStyles = `\n/* ... (styles remain unchanged) ... */\n.PopoverContent {\n animation-duration: 400ms;\n animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n will-change: transform, opacity;\n}\n.PopoverContent[data-state='open'][data-side='top'] {\n animation-name: slideDownAndFade;\n}\n.PopoverContent[data-state='open'][data-side='right'] {\n animation-name: slideLeftAndFade;\n}\n.PopoverContent[data-state='open'][data-side='bottom'] {\n animation-name: slideUpAndFade;\n}\n.PopoverContent[data-state='open'][data-side='left'] {\n animation-name: slideRightAndFade;\n}\n\n@keyframes slideUpAndFade {\n from {\n opacity: 0;\n transform: translateY(2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideRightAndFade {\n from {\n opacity: 0;\n transform: translateX(-2px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slideDownAndFade {\n from {\n opacity: 0;\n transform: translateY(-2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideLeftAndFade {\n from {\n opacity: 0;\n transform: translateX(2px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n`;\n","import React from \"react\";\n\nexport type BadgeColor = \"primary\" | \"secondary\" | \"warning\" | \"error\";\n\nexport interface BadgeProps {\n color?: BadgeColor;\n children: React.ReactNode;\n invisible?: boolean;\n}\n\nconst getColor = (color: BadgeColor) => {\n switch (color) {\n case \"primary\":\n return \"bg-primary\";\n case \"secondary\":\n return \"bg-secondary\";\n case \"warning\":\n return \"bg-orange-500\";\n case \"error\":\n return \"bg-red-500\";\n default:\n return \"bg-surface-accent-300 dark:bg-surface-accent-700\";\n }\n}\n\nexport const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(({\n color = \"primary\",\n invisible = false,\n children\n }, ref) => {\n return (\n <div ref={ref} className=\"relative inline-block w-fit\">\n {children}\n <span\n className={`absolute top-0.5 right-0.5 transform translate-x-1/2 -translate-y-1/2 rounded-full\n ${getColor(color)}\n transition-all duration-200 ease-out\n ${invisible ? \"w-0 h-0\" : \"w-2 h-2\"}`}\n />\n </div>\n );\n});\n\nBadge.displayName = \"Badge\";\n","\"use client\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { TextField, TextFieldProps } from \"./TextField\";\n\ntype TextFieldChangeEvent = React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>;\n\nexport function DebouncedTextField<T extends string | number>(props: TextFieldProps<T>) {\n\n const [internalValue, setInternalValue] = useState<T | string>(props.value ?? \"\");\n const lastSentValueRef = useRef<T | string>(props.value ?? \"\");\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Sync state with props.value when it changes externally\n useEffect(() => {\n const externalValue = props.value ?? \"\";\n if (externalValue !== lastSentValueRef.current) {\n setInternalValue(externalValue);\n lastSentValueRef.current = externalValue;\n }\n }, [props.value]);\n\n // Cleanup timer on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n const flushChange = useCallback((value: T | string, event?: TextFieldChangeEvent) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n if (value !== props.value && props.onChange) {\n lastSentValueRef.current = value;\n const e = {\n ...event,\n target: {\n ...event?.target,\n value: value,\n name: props.name\n }\n } as TextFieldChangeEvent;\n props.onChange(e);\n }\n }, [props.value, props.onChange, props.name]);\n\n const internalOnChange = useCallback((event: TextFieldChangeEvent) => {\n const newValue = event.target.value;\n setInternalValue(newValue);\n\n if (timerRef.current) clearTimeout(timerRef.current);\n\n const eventCopy = {\n ...event,\n target: {\n ...event?.target,\n name: event?.target?.name\n }\n };\n\n timerRef.current = setTimeout(() => {\n flushChange(newValue, eventCopy as TextFieldChangeEvent);\n }, 150);\n }, [flushChange]);\n\n const internalOnBlur = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n flushChange(internalValue, event as TextFieldChangeEvent);\n props.onBlur?.(event);\n }, [internalValue, flushChange, props.onBlur]);\n\n return <TextField {...props}\n onChange={internalOnChange}\n onBlur={internalOnBlur}\n value={internalValue as T}/>;\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\nimport { useInjectStyles } from \"../hooks\";\n\nexport type SkeletonProps = {\n width?: number;\n height?: number;\n className?: string;\n}\n\nconst styles = `\n@keyframes shimmer {\n 0% {\n transform: translateX(-150%);\n }\n 100% {\n transform: translateX(150%);\n }\n}\n`;\n\nexport function Skeleton({\n width,\n height,\n className\n }: SkeletonProps) {\n\n useInjectStyles(\"Skeleton\", styles);\n\n return <span\n style={{\n width: width ? `${width}px` : \"100%\",\n height: height ? `${height}px` : \"12px\"\n }}\n className={\n cls(\n \"block relative overflow-hidden\",\n \"bg-surface-accent-50 dark:bg-surface-accent-800 rounded-md\",\n \"max-w-full max-h-full\",\n className)\n }>\n <span\n className=\"absolute inset-0 bg-gradient-to-r from-transparent via-white/50 dark:via-white/8 to-transparent\"\n style={{ animation: \"shimmer 1.8s ease-in-out infinite\" }}\n />\n </span>;\n}\n","import React from \"react\";\nimport { cls } from \"../util\";\n\nexport type ToggleButtonOption<T extends string = string> = {\n value: T;\n label: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport type ToggleButtonGroupProps<T extends string = string> = {\n /**\n * Currently selected value\n */\n value: T;\n /**\n * Callback when value changes\n */\n onValueChange: (value: T) => void;\n /**\n * Options to display\n */\n options: ToggleButtonOption<T>[];\n /**\n * Additional class names for the container\n */\n className?: string;\n}\n\n/**\n * A toggle button group component for selecting one option from a set.\n * Displays options as buttons in a horizontal row with active state styling.\n */\nexport function ToggleButtonGroup<T extends string = string>({\n value,\n onValueChange,\n options,\n className\n}: ToggleButtonGroupProps<T>) {\n return (\n <div role=\"group\" aria-label=\"Toggle options\" className={cls(\"inline-flex flex-row bg-surface-100 dark:bg-surface-900 rounded-lg p-1 gap-1\", className)}>\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n if (!option.disabled) {\n onValueChange(option.value);\n }\n }}\n disabled={option.disabled}\n aria-pressed={value === option.value}\n aria-disabled={option.disabled || undefined}\n className={cls(\n \"flex flex-row items-center justify-center gap-2 py-3 px-4 rounded-md transition-colors\",\n value === option.value\n ? \"bg-white dark:bg-surface-900 text-primary dark:text-primary-300 shadow-sm\"\n : \"text-surface-500 dark:text-surface-400 hover:bg-surface-100 dark:hover:bg-surface-700\",\n option.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {option.icon}\n <span className=\"text-sm font-medium\">{option.label}</span>\n </button>\n ))}\n </div>\n );\n}\n","import { ArrowUpIcon, FilterIcon } from \"lucide-react\";\nimport { iconSize } from \"../../icons/Icon\";\n\nimport React, { RefObject, useCallback, useEffect, useState } from \"react\";\nimport { deepEqual as equal } from \"fast-equals\";\n\nimport { VirtualTableColumn, VirtualTableSort, VirtualTableWhereFilterOp } from \"./VirtualTableProps\";\nimport { ErrorBoundary } from \"../ErrorBoundary\";\nimport { Badge } from \"../Badge\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { Popover } from \"../Popover\";\nimport { defaultBorderMixin } from \"../../styles\";\nimport { cls } from \"../../util/cls\";\ninterface FilterFormProps<T> {\n column: VirtualTableColumn<T>;\n onFilterUpdate: (filter?: [VirtualTableWhereFilterOp, unknown], newOpenFilterState?: boolean) => void;\n filter?: [VirtualTableWhereFilterOp, unknown];\n onHover: boolean,\n createFilterField: (props: FilterFormFieldProps<T>) => React.ReactNode;\n hidden: boolean;\n setHidden: (hidden: boolean) => void;\n}\n\nexport type FilterFormFieldProps<CustomProps> = {\n id: React.Key,\n filterValue: [VirtualTableWhereFilterOp, unknown] | undefined,\n setFilterValue: (filterValue?: [VirtualTableWhereFilterOp, unknown]) => void;\n column: VirtualTableColumn<CustomProps>;\n hidden: boolean;\n setHidden: (hidden: boolean) => void;\n};\n\ntype VirtualTableHeaderProps<M extends Record<string, unknown>> = {\n resizeHandleRef: React.Ref<HTMLDivElement>;\n columnIndex: number;\n isResizingIndex: number;\n column: VirtualTableColumn<unknown>;\n onColumnSort: (key: Extract<keyof M, string>) => void;\n filter?: [VirtualTableWhereFilterOp, unknown];\n sort: VirtualTableSort;\n onFilterUpdate: (column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, unknown]) => void;\n onClickResizeColumn?: (columnIndex: number, column: VirtualTableColumn) => void;\n createFilterField?: (props: FilterFormFieldProps<unknown>) => React.ReactNode;\n AdditionalHeaderWidget?: (props: { onHover: boolean }) => React.ReactNode;\n isDragging?: boolean;\n isDraggable?: boolean;\n};\n\nexport const VirtualTableHeader = React.memo<VirtualTableHeaderProps<Record<string, unknown>>>(\n function VirtualTableHeader<M extends Record<string, unknown>>({\n resizeHandleRef,\n columnIndex,\n isResizingIndex,\n sort,\n onColumnSort,\n onFilterUpdate,\n filter,\n column,\n onClickResizeColumn,\n createFilterField,\n AdditionalHeaderWidget,\n isDragging,\n isDraggable\n }: VirtualTableHeaderProps<M>) {\n\n const [onHover, setOnHover] = useState(false);\n\n const [openFilter, setOpenFilter] = React.useState(false);\n const [hidden, setHidden] = React.useState(false);\n\n const handleSettingsClick = useCallback((_event: React.MouseEvent) => {\n setOpenFilter(true);\n }, []);\n\n const update = useCallback((filterForProperty?: [VirtualTableWhereFilterOp, unknown], newOpenFilterState?: boolean) => {\n onFilterUpdate(column, filterForProperty);\n if (newOpenFilterState !== undefined)\n setOpenFilter(newOpenFilterState);\n }, [column, onFilterUpdate]);\n\n const thisColumnIsResizing = isResizingIndex === columnIndex;\n const anotherColumnIsResizing = isResizingIndex !== columnIndex && isResizingIndex > 0;\n\n const hovered = !anotherColumnIsResizing && (onHover || thisColumnIsResizing);\n\n return (\n <ErrorBoundary>\n <div\n className={cls(\"flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center\",\n isDragging\n ? \"bg-primary-bg dark:bg-primary-bg-dark\"\n : \"bg-surface-50 dark:bg-surface-900\",\n \"text-text-secondary hover:text-text-primary dark:text-text-secondary-dark dark:hover:text-text-primary-dark\",\n !isDragging && \"hover:bg-surface-100 dark:hover:bg-surface-900 hover:bg-opacity-50 hover:bg-surface-100/50 dark:hover:bg-opacity-50 dark:hover:bg-surface-900/50\",\n column.frozen ? \"sticky left-0 z-10\" : \"relative z-0\",\n isDraggable && \"cursor-grab\"\n )}\n style={{\n left: column.frozen ? 0 : undefined,\n minWidth: column.width,\n maxWidth: column.width\n }}\n onMouseEnter={() => setOnHover(true)}\n onMouseMove={() => setOnHover(true)}\n onMouseLeave={() => setOnHover(false)}\n >\n\n <div className=\"overflow-hidden grow\">\n <div\n className={`flex items-center justify-${column.headerAlign} flex-row`}>\n\n {column.icon && (\n <div className=\"flex-shrink-0 flex items-center justify-center mr-1\">\n {React.isValidElement(column.icon) ? (\n React.cloneElement(column.icon as React.ReactElement<any>, {\n size: 14,\n className: cls((column.icon as React.ReactElement<any>).props?.className, \"flex-shrink-0\")\n })\n ) : (\n column.icon\n )}\n </div>\n )}\n\n <div\n className=\"truncate -webkit-box w-full mr-1 overflow-hidden\"\n style={{\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 2,\n justifyContent: column.align\n }}>\n {column.title}\n </div>\n\n </div>\n </div>\n <>\n\n {AdditionalHeaderWidget &&\n <AdditionalHeaderWidget onHover={onHover || openFilter}/>}\n\n {column.sortable && (sort || hovered || openFilter) &&\n <div className=\"flex-shrink-0\">\n <Badge color=\"secondary\"\n invisible={!sort}>\n <IconButton\n size={\"small\"}\n className={onHover || openFilter ? \"bg-white dark:bg-surface-900\" : undefined}\n onClick={() => {\n onColumnSort(column.key as Extract<keyof M, string>);\n }}\n >\n {!sort &&\n <ArrowUpIcon size={14} className=\"flex-shrink-0\" />}\n {sort === \"asc\" &&\n <ArrowUpIcon size={14} className=\"flex-shrink-0\" />}\n {sort === \"desc\" &&\n <ArrowUpIcon size={14} className=\"flex-shrink-0 rotate-180\" />}\n </IconButton>\n </Badge>\n </div>\n }\n </>\n\n {column.filter && createFilterField && <div className=\"flex-shrink-0\">\n <Badge color=\"secondary\"\n invisible={!filter}>\n\n <Popover\n open={openFilter}\n onOpenChange={setOpenFilter}\n className={hidden ? \"hidden\" : undefined}\n modal={true}\n trigger={\n <IconButton\n className={onHover || openFilter ? \"bg-white dark:bg-surface-900\" : undefined}\n size={\"small\"}\n onClick={handleSettingsClick}>\n <FilterIcon size={14} className=\"flex-shrink-0\"/>\n </IconButton>}\n >\n <FilterForm column={column}\n filter={filter}\n onHover={onHover}\n onFilterUpdate={update}\n createFilterField={createFilterField}\n hidden={hidden}\n setHidden={setHidden}/>\n\n </Popover>\n\n </Badge>\n\n </div>}\n\n {column.resizable && <div\n ref={resizeHandleRef as React.Ref<HTMLDivElement>}\n data-no-dnd=\"true\"\n className={cls(\n \"absolute h-full w-[6px] top-0 right-0 cursor-col-resize\",\n hovered && \"bg-surface-300 dark:bg-surface-700\"\n )}\n onPointerDown={(e) => {\n e.stopPropagation();\n if (onClickResizeColumn) {\n onClickResizeColumn(columnIndex, column);\n }\n }}\n />}\n </div>\n\n </ErrorBoundary>\n );\n }, equal) as React.FunctionComponent<VirtualTableHeaderProps<Record<string, unknown>>>;\n\nfunction FilterForm<M>({\n column,\n onFilterUpdate,\n filter,\n onHover,\n createFilterField,\n hidden,\n setHidden\n}: FilterFormProps<M>) {\n\n const id = column.key;\n\n const [filterInternal, setFilterInternal] = useState<[VirtualTableWhereFilterOp, unknown] | undefined>(filter);\n\n useEffect(() => {\n setFilterInternal(filter);\n }, [filter]);\n\n if (!column.filter) return null;\n\n const submit = () => {\n onFilterUpdate(filterInternal, false);\n };\n\n const reset = (_e: React.MouseEvent) => {\n onFilterUpdate(undefined, false);\n };\n\n const filterIsSet = !!filter;\n\n const filterField = createFilterField({\n id,\n filterValue: filterInternal,\n setFilterValue: setFilterInternal,\n column,\n hidden,\n setHidden\n });\n\n if (!filterField) return null;\n return (\n <form noValidate={true}\n onSubmit={(e) => {\n e.stopPropagation();\n e.preventDefault();\n submit();\n }}\n className={\"text-surface-900 dark:text-white\"}>\n <div\n className={cls(defaultBorderMixin, \"py-4 px-6 typography-label border-b\")}>\n {column.title ?? id}\n </div>\n {filterField && <div className=\"m-4 w-[400px]\">\n {filterField}\n </div>}\n <div className=\"flex justify-end m-4\">\n <Button\n className=\"mr-4\"\n disabled={!filterIsSet}\n variant={\"text\"}\n type=\"reset\"\n aria-label=\"filter clear\"\n onClick={reset}>Clear</Button>\n <Button\n type=\"submit\">Filter</Button>\n </div>\n </form>\n );\n\n}\n","import React, { createRef, useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { VirtualTableColumn, VirtualTableWhereFilterOp } from \"./VirtualTableProps\";\nimport { ErrorBoundary } from \"../ErrorBoundary\";\nimport { VirtualTableHeader } from \"./VirtualTableHeader\";\nimport { VirtualTableContextProps } from \"./types\";\nimport { defaultBorderMixin } from \"../../styles\";\nimport { cls } from \"../../util/cls\";import { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\n\n// Sortable column header wrapper\nconst SortableColumnHeader = ({\n column,\n columnIndex,\n columnRefs,\n isResizing,\n onFilterUpdate,\n filter,\n sortByProperty,\n currentSort,\n onColumnSort,\n onClickResizeColumn,\n createFilterField,\n isDragging,\n isDraggable\n}: {\n column: VirtualTableColumn;\n columnIndex: number;\n columnRefs: React.Ref<HTMLDivElement>[];\n isResizing: number;\n onFilterUpdate: (column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, unknown]) => void;\n filter: [VirtualTableWhereFilterOp, unknown] | undefined;\n sortByProperty: string | undefined;\n currentSort: \"asc\" | \"desc\" | undefined;\n onColumnSort: (key: string) => void;\n onClickResizeColumn: (index: number) => void;\n createFilterField: ((props: import(\"./VirtualTableHeader\").FilterFormFieldProps<unknown>) => React.ReactNode) | undefined;\n isDragging: boolean;\n isDraggable: boolean;\n}) => {\n const [isPressing, setIsPressing] = useState(false);\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition\n } = useSortable({\n id: column.key,\n disabled: !isDraggable || column.frozen\n });\n\n const style = {\n // Only use translate, ignore any scale transforms\n transform: transform ? `translateX(${transform.x}px)` : undefined,\n // Don't transition the dragged item - only other items should animate\n transition: isDragging ? undefined : transition,\n minWidth: column.width,\n maxWidth: column.width,\n width: column.width\n };\n\n // Combine our press handlers with dnd-kit listeners\n const combinedListeners = isDraggable ? {\n ...listeners,\n onPointerDown: (e: React.PointerEvent) => {\n setIsPressing(true);\n listeners?.onPointerDown?.(e);\n },\n onPointerUp: () => setIsPressing(false),\n onPointerCancel: () => setIsPressing(false)\n } : {};\n\n // Reset pressing state when drag ends\n React.useEffect(() => {\n if (!isDragging) {\n setIsPressing(false);\n }\n }, [isDragging]);\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cls(\n \"flex-shrink-0 h-full\",\n column.frozen && \"sticky left-0 z-10\"\n )}\n {...attributes}\n {...combinedListeners}\n >\n <VirtualTableHeader\n resizeHandleRef={columnRefs[columnIndex]}\n columnIndex={columnIndex}\n isResizingIndex={isResizing}\n onFilterUpdate={onFilterUpdate}\n filter={filter}\n sort={sortByProperty === column.key ? currentSort : undefined}\n onColumnSort={onColumnSort}\n onClickResizeColumn={onClickResizeColumn}\n column={column}\n createFilterField={createFilterField}\n AdditionalHeaderWidget={column.AdditionalHeaderWidget}\n isDragging={isDragging || isPressing}\n isDraggable={isDraggable}/>\n </div>\n );\n};\n\nexport const VirtualTableHeaderRow = ({\n columns,\n currentSort,\n onColumnSort,\n onFilterUpdate,\n sortByProperty,\n filter,\n onColumnResize,\n onColumnResizeEnd,\n createFilterField,\n AddColumnComponent,\n onColumnsOrderChange,\n data,\n cellRenderer: CellRenderer,\n rowHeight = 54,\n draggingColumnId,\n headerHeight = 48\n}: VirtualTableContextProps<Record<string, unknown>>) => {\n\n const columnRefs = useMemo(() => columns.map(() => createRef<HTMLDivElement>()), [columns.length]);\n const [isResizing, setIsResizing] = useState(-1);\n\n const adjustWidthColumn = useCallback((index: number, width: number, end: boolean) => {\n const column = columns[index];\n const minWidth = 100;\n const maxWidth = 800;\n const newWidth = width > maxWidth ? maxWidth : (width < minWidth ? minWidth : width);\n const params = {\n width: newWidth,\n key: column.key as string,\n column: {\n ...column,\n width: newWidth\n } as VirtualTableColumn\n };\n if (!end)\n onColumnResize(params);\n else\n onColumnResizeEnd(params);\n }, [columns, onColumnResize, onColumnResizeEnd]);\n\n const getEventNewWidth = useCallback((e: MouseEvent) => {\n if (isResizing >= 0) {\n const left = columnRefs[isResizing].current?.parentElement?.getBoundingClientRect().left;\n if (!left) return;\n return e.clientX - left;\n }\n return undefined;\n }, [columnRefs, isResizing]);\n\n const setCursorDocument = useCallback((isResizing: boolean) => {\n document.body.style.cursor = isResizing ? \"col-resize\" : \"auto\";\n }, []);\n\n const handleOnMouseMove = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const newWidth = getEventNewWidth(e);\n if (newWidth)\n adjustWidthColumn(isResizing, newWidth, false);\n }, [adjustWidthColumn, getEventNewWidth, isResizing]);\n\n const handleOnMouseUp = useCallback((e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const newWidth = getEventNewWidth(e);\n if (newWidth)\n adjustWidthColumn(isResizing, newWidth, true);\n setIsResizing(-1);\n setCursorDocument(false);\n }, [adjustWidthColumn, getEventNewWidth, isResizing, setCursorDocument]);\n\n const removeResizingListeners = useCallback(() => {\n document.removeEventListener(\"mousemove\", handleOnMouseMove);\n document.removeEventListener(\"mouseup\", handleOnMouseUp);\n }, [handleOnMouseMove, handleOnMouseUp]);\n\n const attachResizeListeners = useCallback(() => {\n document.addEventListener(\"mousemove\", handleOnMouseMove);\n document.addEventListener(\"mouseup\", handleOnMouseUp);\n }, [handleOnMouseMove, handleOnMouseUp]);\n\n useEffect(() => {\n if (isResizing >= 0) {\n attachResizeListeners();\n } else {\n removeResizingListeners();\n }\n return () => {\n removeResizingListeners();\n };\n }, [attachResizeListeners, isResizing, removeResizingListeners]);\n\n const onClickResizeColumn = useCallback((index: number) => {\n setIsResizing(index);\n setCursorDocument(true);\n }, [setCursorDocument]);\n\n return (\n <>\n <div\n className={cls(defaultBorderMixin, \"z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 border-b bg-surface-50 dark:bg-surface-900\")}\n style={{ height: headerHeight }}>\n {columns.map((column, columnIndex) => {\n const columnFilter = column && filter && filter[column.key] ? filter[column.key] : undefined;\n const filterForThisProperty: [VirtualTableWhereFilterOp, unknown] | undefined =\n columnFilter\n ? (Array.isArray(columnFilter[0]) ? (columnFilter as [VirtualTableWhereFilterOp, unknown][])[0] : (columnFilter as [VirtualTableWhereFilterOp, unknown]))\n : undefined;\n\n const isDraggable = !column.frozen && !!onColumnsOrderChange;\n const isDragging = draggingColumnId === column.key;\n\n return (\n <ErrorBoundary key={\"header_\" + column.key}>\n <SortableColumnHeader\n column={column}\n columnIndex={columnIndex}\n columnRefs={columnRefs}\n isResizing={isResizing}\n onFilterUpdate={onFilterUpdate}\n filter={filterForThisProperty}\n sortByProperty={sortByProperty}\n currentSort={currentSort}\n onColumnSort={onColumnSort}\n onClickResizeColumn={onClickResizeColumn}\n createFilterField={createFilterField}\n isDragging={isDragging}\n isDraggable={isDraggable}\n />\n </ErrorBoundary>\n );\n })}\n\n {AddColumnComponent && <AddColumnComponent/>}\n\n </div>\n </>\n );\n};\n","import React, { useCallback } from \"react\";\n\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { VirtualTableRowProps } from \"./types\";\nimport { cls } from \"../../util/cls\";\nexport const VirtualTableRow = React.memo<VirtualTableRowProps<Record<string, unknown>>>(\n function VirtualTableRow<T extends Record<string, unknown>>({\n rowData,\n rowIndex,\n children,\n onRowClick,\n rowHeight,\n style,\n hoverRow,\n rowClassName\n }: VirtualTableRowProps<T>) {\n\n const onClick = useCallback((event: React.SyntheticEvent) => {\n if (onRowClick)\n onRowClick({\n rowData,\n rowIndex,\n event\n })\n }, [onRowClick, rowData, rowIndex]);\n\n return (\n <div\n className={cls(\n \"flex min-w-full text-sm border-b border-surface-200/60 dark:border-surface-700/60 dark:bg-surface-800\",\n rowClassName ? rowClassName(rowData) : \"\",\n {\n \"hover:!bg-primary/[0.03] dark:hover:!bg-primary/5\": hoverRow,\n \"cursor-pointer \": onRowClick\n }\n )}\n onClick={onClick}\n style={{\n ...(style),\n height: rowHeight,\n width: \"fit-content\"\n }}\n >\n {children}\n </div>\n );\n\n },\n equal\n);\n","import React from \"react\";\n\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { CellRendererParams, VirtualTableColumn } from \"./VirtualTableProps\";\n\ntype VirtualTableCellProps<T> = {\n dataKey: string;\n column: VirtualTableColumn;\n columns: VirtualTableColumn[];\n rowData: T;\n cellData: unknown;\n rowIndex: number;\n columnIndex: number;\n cellRenderer: (props: CellRendererParams<T>) => React.ReactNode;\n // Sortable props\n sortableNodeRef?: (node: HTMLElement | null) => void;\n sortableStyle?: React.CSSProperties;\n sortableAttributes?: Record<string, unknown>;\n isDragging?: boolean;\n isDraggable?: boolean;\n frozen?: boolean;\n extraData?: unknown;\n};\n\nexport const VirtualTableCell = React.memo<VirtualTableCellProps<unknown>>(\n function VirtualTableCell<T>(props: VirtualTableCellProps<T>) {\n return props.rowData ? props.cellRenderer(\n {\n cellData: props.cellData,\n rowData: props.rowData,\n rowIndex: props.rowIndex,\n isScrolling: false,\n column: props.column,\n columns: props.columns,\n columnIndex: props.columnIndex,\n width: props.column.width,\n sortableNodeRef: props.sortableNodeRef,\n sortableStyle: props.sortableStyle,\n sortableAttributes: props.sortableAttributes,\n isDragging: props.isDragging,\n isDraggable: props.isDraggable,\n frozen: props.frozen,\n extraData: props.extraData\n } as CellRendererParams<T>\n ) : null;\n },\n (a, b) => {\n return equal(a.rowData, b.rowData) &&\n equal(a.column, b.column) &&\n equal(a.cellData, b.cellData) &&\n a.rowIndex === b.rowIndex &&\n a.columnIndex === b.columnIndex &&\n a.isDragging === b.isDragging &&\n a.isDraggable === b.isDraggable &&\n a.frozen === b.frozen &&\n equal(a.extraData, b.extraData)\n }\n);\n","\n\nimport React, { createContext, forwardRef, RefObject, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { FixedSizeList as List } from \"react-window\";\nimport useMeasure from \"react-use-measure\";\n\nimport { CircularProgress } from \"../CircularProgress\";\nimport {\n OnVirtualTableColumnResizeParams,\n VirtualTableColumn,\n VirtualTableFilterValues,\n VirtualTableProps,\n VirtualTableWhereFilterOp\n} from \"./VirtualTableProps\";\n\nimport { VirtualTableContextProps } from \"./types\";\nimport { VirtualTableHeaderRow } from \"./VirtualTableHeaderRow\";\nimport { VirtualTableRow } from \"./VirtualTableRow\";\nimport { VirtualTableCell } from \"./VirtualTableCell\";\nimport { CenteredView } from \"../CenteredView\";\nimport { Typography } from \"../Typography\";\nimport { cls } from \"../../util/cls\";\nimport { useDebounceCallback } from \"../../hooks/useDebounceCallback\";\nimport {\n closestCenter,\n DndContext,\n DragEndEvent,\n DragStartEvent,\n PointerSensor,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport { arrayMove, horizontalListSortingStrategy, SortableContext, useSortable } from \"@dnd-kit/sortable\";\n\n\nconst VirtualListContext = createContext<VirtualTableContextProps<Record<string, unknown>>>(null! as VirtualTableContextProps<Record<string, unknown>>);\nVirtualListContext.displayName = \"VirtualListContext\";\n\ntype InnerElementProps = {\n children: React.ReactNode,\n style: React.CSSProperties\n};\n\n// eslint-disable-next-line react/display-name\nconst innerElementType = forwardRef<HTMLDivElement, InnerElementProps>(({\n children,\n ...rest\n}: InnerElementProps, ref) => {\n\n return (\n <VirtualListContext.Consumer>\n {(virtualTableProps) => {\n const customView = virtualTableProps.customView;\n const headerHeight = virtualTableProps.headerHeight ?? 48;\n return (\n <>\n <div\n id={\"virtual-table\"}\n style={{\n position: \"relative\",\n height: \"100%\",\n zIndex: 0\n }}>\n <div\n ref={ref}\n {...rest}\n style={{\n ...rest?.style,\n height: (typeof rest?.style?.height === \"number\" ? rest.style.height : parseFloat((rest?.style?.height as string) || \"0\")) + headerHeight,\n minHeight: \"100%\",\n position: \"relative\"\n }}>\n <div style={{ position: \"sticky\",\ntop: 0,\nzIndex: 20 }}>\n <VirtualTableHeaderRow {...virtualTableProps}/>\n </div>\n {!customView && children}\n </div>\n\n </div>\n\n {customView && <div style={{\n position: \"sticky\",\n top: virtualTableProps.headerHeight ?? 48,\n flexGrow: 1,\n height: `calc(100% - ${virtualTableProps.headerHeight ?? 48}px)`,\n marginTop: `calc(${(virtualTableProps.headerHeight ?? 48)}px - 100vh)`,\n left: 0\n }}>{customView}</div>}\n\n </>\n );\n }}\n </VirtualListContext.Consumer>\n );\n})\n ;\n\n/**\n * This is a Table component that allows displaying arbitrary data, not\n * necessarily related to entities or properties. It is the component\n * that powers the entity collections but has a generic API, so it\n * can be reused.\n *\n * @group Components\n */\nexport const VirtualTable = React.memo<VirtualTableProps<Record<string, unknown>>>(\n function VirtualTable<T extends Record<string, unknown>>({\n data,\n onResetPagination,\n onEndReached,\n endOffset = 600,\n rowHeight = 54,\n headerHeight = 48,\n columns: columnsProp,\n onRowClick,\n onColumnResize,\n onColumnResizeEnd,\n filter: filterInput,\n checkFilterCombination,\n onFilterUpdate,\n sortBy,\n error,\n emptyComponent,\n onSortByUpdate,\n onScroll: onScrollProp,\n loading,\n cellRenderer,\n hoverRow,\n createFilterField,\n rowClassName,\n style,\n className,\n endAdornment,\n AddColumnComponent,\n initialScroll = 0,\n onColumnsOrderChange,\n extraData\n }: VirtualTableProps<T>) {\n\n const sortByProperty: string | undefined = sortBy ? sortBy[0] : undefined;\n const currentSort: \"asc\" | \"desc\" | undefined = sortBy ? sortBy[1] : undefined;\n\n const [columns, setColumns] = useState(columnsProp);\n\n const tableRef = useRef<HTMLDivElement>(null);\n const endReachCallbackThreshold = useRef<number>(0);\n\n const debouncedScroll = useDebounceCallback(onScrollProp, 200);\n\n // Drag and drop state\n const [draggingColumnId, setDraggingColumnId] = useState<string | null>(null);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5\n }\n })\n );\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n setDraggingColumnId(event.active.id as string);\n }, []);\n\n const handleDragEnd = useCallback((event: DragEndEvent) => {\n const {\n active,\n over\n } = event;\n setDraggingColumnId(null);\n\n if (over && active.id !== over.id && onColumnsOrderChange) {\n const oldIndex = columns.findIndex((col) => col.key === active.id);\n const newIndex = columns.findIndex((col) => col.key === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newColumns = arrayMove(columns, oldIndex, newIndex);\n setColumns(newColumns);\n onColumnsOrderChange(newColumns);\n }\n }\n }, [columns, onColumnsOrderChange]);\n\n const handleDragCancel = useCallback(() => {\n setDraggingColumnId(null);\n }, []);\n\n // Set initial scroll position\n useEffect(() => {\n if (tableRef.current && initialScroll) {\n const { scrollLeft } = tableRef.current;\n tableRef.current.scrollTo(scrollLeft, initialScroll);\n }\n }, [tableRef, initialScroll]);\n\n useEffect(() => {\n setColumns(columnsProp);\n }, [columnsProp]);\n\n // Removed redundant ResizeObserver to prevent performance issues and UI flickering.\n\n const [measureRef, bounds] = useMeasure({\n polyfill: ResizeObserver,\n scroll: true,\n // This is important for handling zooming in react-flow\n offsetSize: true\n });\n\n const onColumnResizeInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {\n setColumns(prevColumns =>\n prevColumns.map((column) =>\n column.key === params.column.key ? params.column : column\n )\n );\n }, []);\n\n const onColumnResizeEndInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {\n setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));\n if (onColumnResize) {\n onColumnResize(params);\n }\n if (onColumnResizeEnd) {\n onColumnResizeEnd(params);\n }\n }, [columns, onColumnResize, onColumnResizeEnd]);\n\n // saving the current filter as a ref as a workaround for header closure\n const filterRef = useRef<VirtualTableFilterValues<string> | undefined>(undefined);\n\n useEffect(() => {\n filterRef.current = filterInput;\n }, [filterInput]);\n\n const scrollToTop = useCallback(() => {\n endReachCallbackThreshold.current = 0;\n if (tableRef.current) {\n tableRef.current.scrollTo(tableRef.current?.scrollLeft, 0);\n }\n }, []);\n\n const onColumnSort = useCallback((key: string) => {\n\n const isDesc = sortByProperty === key && currentSort === \"desc\";\n const isAsc = sortByProperty === key && currentSort === \"asc\";\n const newSort = isAsc ? \"desc\" : (isDesc ? undefined : \"asc\");\n const newSortProperty: string | undefined = isDesc ? undefined : key;\n\n const filter = filterRef.current;\n\n const newSortBy: [string, \"asc\" | \"desc\"] | undefined = newSort && newSortProperty ? [newSortProperty, newSort] : undefined;\n if (filter) {\n if (checkFilterCombination && !checkFilterCombination(filter, newSortBy)) {\n if (onFilterUpdate)\n onFilterUpdate(undefined);\n }\n }\n\n if (onResetPagination) {\n onResetPagination();\n }\n\n if (onSortByUpdate) {\n onSortByUpdate(newSortBy);\n }\n\n scrollToTop();\n }, [checkFilterCombination, currentSort, onFilterUpdate, onResetPagination, onSortByUpdate, scrollToTop, sortByProperty]);\n\n const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);\n\n const onEndReachedInternal = useCallback((scrollOffset: number) => {\n if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + endOffset) {\n endReachCallbackThreshold.current = scrollOffset;\n onEndReached();\n }\n }, [data?.length, onEndReached]);\n\n const onScroll = useCallback(({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n }: {\n scrollDirection: \"forward\" | \"backward\",\n scrollOffset: number,\n scrollUpdateWasRequested: boolean;\n }) => {\n if (onScrollProp) {\n debouncedScroll({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n })\n }\n if (!scrollUpdateWasRequested && (scrollOffset >= maxScroll - endOffset))\n onEndReachedInternal(scrollOffset);\n }, [maxScroll, onEndReachedInternal]);\n\n const onFilterUpdateInternal = useCallback((column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, unknown]) => {\n\n endReachCallbackThreshold.current = 0;\n const filter = filterRef.current;\n let newFilterValue: VirtualTableFilterValues<string> = filter ? { ...filter } : {};\n\n if (!filterForProperty) {\n delete newFilterValue[column.key];\n } else {\n newFilterValue[column.key] = filterForProperty;\n }\n const newSortBy: [string, \"asc\" | \"desc\"] | undefined = sortByProperty && currentSort ? [sortByProperty, currentSort] : undefined;\n const isNewFilterCombinationValid = !checkFilterCombination || checkFilterCombination(newFilterValue, newSortBy);\n if (!isNewFilterCombinationValid) {\n newFilterValue = filterForProperty ? { [column.key]: filterForProperty } as VirtualTableFilterValues<Extract<keyof T, string>> : {};\n }\n\n if (onFilterUpdate) onFilterUpdate(newFilterValue);\n }, [checkFilterCombination, currentSort, onFilterUpdate, sortByProperty]);\n\n const empty = !loading && (data?.length ?? 0) === 0;\n const customView = (error && (data?.length ?? 0) === 0)\n ? <CenteredView maxWidth={\"2xl\"}\n className=\"flex flex-col gap-2\">\n\n <Typography variant={\"h6\"}>\n {\"Error\"}\n </Typography>\n\n {error?.message && <SafeLinkRenderer text={error.message}/>}\n\n </CenteredView>\n : (empty\n ? (loading\n ? <div className=\"flex items-center justify-center py-12 px-8\">\n <CircularProgress size=\"small\"/>\n </div>\n : <div\n className=\"flex flex-col overflow-auto items-center justify-center py-12 px-8\">\n {emptyComponent}\n </div>)\n : undefined);\n\n const virtualListController = useMemo(() => ({\n data,\n rowHeight: rowHeight,\n headerHeight: headerHeight,\n cellRenderer,\n columns,\n currentSort,\n onRowClick,\n customView,\n onColumnResize: onColumnResizeInternal,\n onColumnResizeEnd: onColumnResizeEndInternal,\n filter: filterRef.current,\n onColumnSort,\n onFilterUpdate: onFilterUpdateInternal,\n sortByProperty,\n hoverRow: hoverRow ?? false,\n createFilterField,\n rowClassName,\n endAdornment,\n AddColumnComponent,\n onColumnsOrderChange: onColumnsOrderChange ? (newColumns: VirtualTableColumn[]) => {\n setColumns(newColumns);\n onColumnsOrderChange(newColumns);\n } : undefined,\n draggingColumnId,\n extraData\n }), [data, rowHeight, cellRenderer, columns, currentSort, onRowClick, customView, onColumnResizeInternal, onColumnResizeEndInternal, filterInput, onColumnSort, onFilterUpdateInternal, sortByProperty, hoverRow, createFilterField, rowClassName, endAdornment, AddColumnComponent, onColumnsOrderChange, draggingColumnId, extraData]);\n\n // Get sortable column keys (excluding frozen columns)\n const sortableColumnKeys = columns\n .filter(col => !col.frozen)\n .map(col => col.key);\n\n const tableContent = (\n <div\n ref={measureRef}\n style={style}\n className={cls(\n \"h-full w-full\",\n className,\n draggingColumnId && \"overflow-hidden\"\n )}>\n {/* SAFETY: T extends Record<string, any> is structurally assignable to Record<string, unknown> */}\n <VirtualListContext.Provider\n value={virtualListController as VirtualTableContextProps<Record<string, unknown>>}>\n\n <MemoizedList\n outerRef={tableRef}\n key={rowHeight}\n width={bounds.width}\n height={bounds.height}\n itemCount={(data?.length ?? 0) + (endAdornment ? 1 : 0)}\n onScroll={draggingColumnId ? undefined : onScroll}\n includeAddColumn={Boolean(AddColumnComponent)}\n itemSize={rowHeight}/>\n\n </VirtualListContext.Provider>\n </div>\n );\n\n // Wrap with DndContext if column reorder is enabled\n if (onColumnsOrderChange) {\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n items={sortableColumnKeys}\n strategy={horizontalListSortingStrategy}\n >\n {tableContent}\n </SortableContext>\n </DndContext>\n );\n }\n\n return tableContent;\n },\n equal\n);\n// Wrapper that applies sortable transforms to cells\nconst SortableCellWrapper = ({\n columnKey,\n width,\n isDragging,\n isDraggable,\n frozen,\n children\n}: {\n columnKey: string;\n width: number;\n isDragging: boolean;\n isDraggable: boolean;\n frozen?: boolean;\n children: React.ReactNode;\n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition\n } = useSortable({\n id: columnKey,\n disabled: !isDraggable || frozen\n });\n\n // Remove tabIndex from attributes to avoid capturing focus before cell content\n const { tabIndex: _tabIndex, ...attrsWithoutTabIndex } = attributes;\n\n const style = {\n // Only use translate, ignore any scale transforms\n transform: transform ? `translateX(${transform.x}px)` : undefined,\n // Don't transition the dragged item - only other items should animate\n transition: isDragging ? undefined : transition,\n minWidth: width,\n maxWidth: width,\n width: width\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cls(\n \"flex-shrink-0\",\n frozen && \"sticky left-0 z-10 bg-white dark:bg-surface-900\"\n )}\n {...attrsWithoutTabIndex}\n >\n {children}\n </div>\n );\n};\n\nfunction MemoizedList({\n outerRef,\n width,\n height,\n itemCount,\n onScroll,\n itemSize,\n includeAddColumn\n}: {\n outerRef: RefObject<HTMLDivElement | null>;\n width: number;\n height: number;\n itemCount: number;\n onScroll?: (params: {\n scrollDirection: \"forward\" | \"backward\",\n scrollOffset: number,\n scrollUpdateWasRequested: boolean;\n }) => void;\n itemSize: number;\n includeAddColumn?: boolean;\n}) {\n\n const Row = useCallback(({\n index,\n style\n }: { index: number; style: React.CSSProperties }) => {\n return <VirtualListContext.Consumer>\n {({\n onRowClick,\n data,\n columns,\n rowHeight = 54,\n headerHeight = 48,\n cellRenderer,\n hoverRow,\n rowClassName,\n endAdornment,\n draggingColumnId,\n onColumnsOrderChange,\n extraData\n }) => {\n\n if (endAdornment && index === (data ?? []).length) {\n return <div style={{\n ...style,\n height: \"auto\",\n position: \"sticky\",\n bottom: 0,\n zIndex: 1\n }}>\n {endAdornment}\n </div>;\n }\n\n const rowData = (data ? data[index] : undefined) as Record<string, unknown>;\n return (\n <VirtualTableRow\n key={`row_${index}`}\n rowData={rowData}\n rowIndex={index}\n onRowClick={onRowClick}\n columns={columns}\n hoverRow={hoverRow}\n rowClassName={rowClassName}\n style={{\n ...style,\n top: `calc(${style.top}px + ${headerHeight ?? 48}px)`\n }}\n rowHeight={rowHeight}>\n\n {columns.map((column: VirtualTableColumn, columnIndex: number) => {\n const cellData = rowData && rowData[column.key];\n const isDragging = draggingColumnId === column.key;\n const isDraggable = !column.frozen && !!onColumnsOrderChange;\n\n return onColumnsOrderChange ? (\n <SortableCellWrapper\n key={`cell_wrapper_${column.key}`}\n columnKey={column.key}\n width={column.width}\n isDragging={isDragging}\n isDraggable={isDraggable}\n frozen={column.frozen}\n >\n <VirtualTableCell\n dataKey={column.key}\n // @ts-expect-error -- React.memo<VirtualTableProps<any>> erases the generic T, so cellRenderer's parameter type widens to `any` losing structural compatibility with VirtualTableCell<T>. The types are structurally correct at runtime.\n cellRenderer={cellRenderer}\n column={column}\n columns={columns}\n rowData={rowData}\n cellData={cellData}\n rowIndex={index}\n columnIndex={columnIndex}\n extraData={extraData}/>\n </SortableCellWrapper>\n ) : (\n <div\n key={`cell_wrapper_${column.key}`}\n className={cls(\n \"flex-shrink-0 relative\",\n column.frozen && \"sticky left-0 z-10 bg-white dark:bg-surface-900\"\n )}\n style={{\n minWidth: column.width,\n maxWidth: column.width,\n width: column.width\n }}\n >\n <VirtualTableCell\n dataKey={column.key}\n // @ts-expect-error -- React.memo<VirtualTableProps<any>> erases the generic T, so cellRenderer's parameter type widens to `any` losing structural compatibility with VirtualTableCell<T>. The types are structurally correct at runtime.\n cellRenderer={cellRenderer}\n column={column}\n columns={columns}\n rowData={rowData}\n cellData={cellData}\n rowIndex={index}\n columnIndex={columnIndex}\n extraData={extraData}/>\n </div>\n );\n })}\n\n {includeAddColumn && <div className={\"w-20\"}/>}\n\n </VirtualTableRow>\n );\n }}\n </VirtualListContext.Consumer>;\n }, []);\n\n return <List\n outerRef={outerRef}\n innerElementType={innerElementType}\n width={width}\n height={height}\n overscanCount={4}\n itemCount={itemCount}\n onScroll={onScroll}\n itemSize={itemSize}>\n {Row}\n </List>;\n}\n\nconst SafeLinkRenderer: React.FC<{\n text: string;\n}> = ({ text }) => {\n const urlRegex = /https?:\\/\\/[^\\s]+/g;\n const urls = text.match(urlRegex) || [];\n const parts = text.split(urlRegex);\n\n return (\n <div className={\"break-all\"}>\n {parts.map((part, i) => (\n <React.Fragment key={i}>\n {part}\n {urls[i] && (\n <>\n <a href={urls[i]} className=\"underline\" target=\"_blank\" rel=\"noopener noreferrer\">Link</a>\n <br/>\n </>\n )}\n </React.Fragment>\n ))}\n </div>\n );\n};\n","import { useSyncExternalStore, useCallback, useRef } from \"react\";\n\nexport interface SelectedCell {\n columnKey: string;\n id: string | number;\n cellRect?: DOMRect;\n width?: number;\n height?: number;\n}\n\nexport function createVirtualTableSelectionStore<T extends SelectedCell = SelectedCell>() {\n let selectedCell: T | undefined = undefined;\n const listeners = new Set<() => void>();\n\n function getEntity(): T | undefined {\n return selectedCell;\n }\n\n function subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n function select(cell: T | undefined) {\n selectedCell = cell;\n listeners.forEach(l => l());\n }\n\n return {\n getEntity,\n subscribe,\n select\n };\n}\n\nexport type VirtualTableSelectionStore<T extends SelectedCell = SelectedCell> = ReturnType<typeof createVirtualTableSelectionStore<T>>;\n\nexport function useVirtualTableCellSelected<T extends SelectedCell = SelectedCell>(\n store: VirtualTableSelectionStore<T>,\n columnKey: string,\n id: string | number\n): boolean {\n const selectorRef = useRef({ columnKey, id });\n selectorRef.current = { columnKey, id };\n\n const getEntity = useCallback(() => {\n const cell = store.getEntity();\n if (!cell) return false;\n const s = selectorRef.current;\n return cell.columnKey === s.columnKey && cell.id === s.id;\n }, [store]);\n\n return useSyncExternalStore(store.subscribe, getEntity, getEntity);\n}\n","import React, { createContext, useContext } from \"react\";\nimport { VirtualTableSelectionStore, SelectedCell } from \"./SelectionStore\";\n\nexport interface VirtualTableSelectionContextProps<T extends SelectedCell = SelectedCell> {\n selectionStore: VirtualTableSelectionStore<T>;\n select: (cell: T | undefined) => void;\n}\n\nconst SelectionContext = createContext<VirtualTableSelectionContextProps<any> | null>(null);\n\nexport const VirtualTableSelectionProvider = <T extends SelectedCell = SelectedCell>({\n store,\n children\n}: {\n store: VirtualTableSelectionStore<T>;\n children: React.ReactNode;\n}) => {\n const value = React.useMemo(() => ({\n selectionStore: store,\n select: store.select\n }), [store]);\n\n return (\n <SelectionContext.Provider value={value}>\n {children}\n </SelectionContext.Provider>\n );\n};\n\nexport const useVirtualTableSelection = <T extends SelectedCell = SelectedCell>() => {\n const context = useContext(SelectionContext);\n if (!context) {\n throw new Error(\"useVirtualTableSelection must be used within a VirtualTableSelectionProvider\");\n }\n return context as VirtualTableSelectionContextProps<T>;\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useDebouncedCallback } from \"../../../hooks/useDebouncedCallback\";\nimport { focusedDisabled } from \"../../../styles\";\nimport { TextareaAutosize } from \"../../TextareaAutosize\";\n\nexport function VirtualTableInput(props: {\n error?: Error;\n value: string;\n multiline?: boolean;\n focused: boolean;\n disabled: boolean;\n updateValue: (newValue: (string | null)) => void;\n onBlur?: () => void;\n}) {\n const ref = React.useRef<HTMLTextAreaElement>(null);\n const { disabled, value, multiline = false, updateValue, focused } = props;\n const prevValue = useRef<string | null>(value);\n const [internalValue, setInternalValue] = useState<typeof value>(value);\n const focusedState = useRef<boolean>(false);\n\n useEffect(() => {\n if (prevValue.current !== value && value !== internalValue)\n setInternalValue(value);\n prevValue.current = value;\n }, [value]);\n\n const doUpdate = React.useCallback(() => {\n const emptyInitialValue = !value;\n if (emptyInitialValue && !internalValue) return;\n if (internalValue !== value && internalValue !== prevValue.current) {\n prevValue.current = internalValue;\n updateValue(internalValue);\n }\n }, [internalValue, updateValue, value]);\n\n useDebouncedCallback(internalValue, doUpdate, !focused, 400);\n\n useEffect(() => {\n if (ref.current && focused && !focusedState.current) {\n focusedState.current = true;\n ref.current.focus({ preventScroll: true });\n ref.current.selectionStart = ref.current.value.length;\n ref.current.selectionEnd = ref.current.value.length;\n } else {\n focusedState.current = focused;\n }\n }, [focused, ref]);\n\n return (\n <TextareaAutosize\n className={focusedDisabled}\n ref={ref}\n style={{\n padding: 0,\n margin: 0,\n width: \"100%\",\n color: \"unset\",\n fontWeight: \"unset\",\n fontSize: \"unset\",\n fontFamily: \"unset\",\n background: \"unset\",\n border: \"unset\",\n resize: \"none\",\n outline: \"none\"\n }}\n value={internalValue ?? \"\"}\n onChange={(evt) => {\n const newValue = evt.target.value as string;\n if (multiline || !newValue.endsWith(\"\\n\"))\n setInternalValue(newValue);\n }}\n onFocus={() => {\n focusedState.current = true;\n }}\n onBlur={() => {\n focusedState.current = false;\n doUpdate();\n if (props.onBlur) props.onBlur();\n }}\n />\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useDebouncedCallback } from \"../../../hooks/useDebouncedCallback\";\nimport { cls } from \"../../../util\";\nimport { focusedDisabled } from \"../../../styles\";\nimport { TextField } from \"../../TextField\";\n\nexport function VirtualTableNumberInput(props: {\n error?: Error;\n value: number;\n align?: \"right\" | \"left\" | \"center\";\n updateValue: (newValue: (number | null)) => void;\n focused: boolean;\n disabled: boolean;\n}) {\n const { align = \"left\", value, updateValue, focused } = props;\n const propStringValue = (value && typeof value === \"number\") ? value.toString() : \"\";\n const [internalValue, setInternalValue] = useState<string | null>(propStringValue);\n const prevValue = useRef<number | null>(value);\n\n useEffect(() => {\n if (prevValue.current !== value && String(value) !== internalValue)\n setInternalValue(value ? value.toString() : null);\n prevValue.current = value;\n }, [value]);\n\n const doUpdate = React.useCallback(() => {\n if (internalValue !== propStringValue) {\n if (internalValue !== undefined && internalValue !== null) {\n const numberValue = parseFloat(internalValue);\n if (isNaN(numberValue)) return;\n updateValue(numberValue);\n } else {\n updateValue(null);\n }\n }\n }, [internalValue, value]);\n\n useDebouncedCallback(internalValue, doUpdate, !focused, 400);\n\n useEffect(() => {\n if (!focused && propStringValue !== internalValue)\n setInternalValue(value !== undefined && value !== null ? value.toString() : null);\n }, [value, focused]);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (inputRef.current && focused) {\n inputRef.current.focus({ preventScroll: true });\n }\n }, [focused, inputRef]);\n\n const regexp = /^-?[0-9]+[,.]?[0-9]*$/;\n\n return (\n <TextField\n inputRef={inputRef}\n invisible={true}\n size=\"small\"\n className=\"w-full\"\n inputClassName={cls(\"p-0 m-0 bg-transparent border-none outline-hidden font-normal leading-normal text-unset\", focusedDisabled)}\n inputStyle={{ textAlign: align }}\n value={internalValue ?? \"\"}\n onChange={(evt) => {\n const newValue = evt.target.value.replace(\",\", \".\");\n if (newValue.length === 0) setInternalValue(null);\n if (regexp.test(newValue) || newValue.startsWith(\"-\")) setInternalValue(newValue);\n }}\n />\n );\n}\n","import React, { useEffect } from \"react\";\nimport { BooleanSwitch } from \"../../BooleanSwitch\";\n\nexport function VirtualTableSwitch(props: {\n error?: Error;\n internalValue?: boolean;\n focused: boolean;\n disabled: boolean;\n updateValue: (newValue: (boolean | null)) => void;\n}) {\n const { internalValue, updateValue, focused } = props;\n const ref = React.useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (ref.current && focused) {\n ref.current.focus({ preventScroll: true });\n }\n }, [focused, ref]);\n\n return (\n <BooleanSwitch\n ref={ref}\n size={\"small\"}\n value={Boolean(internalValue)}\n onValueChange={updateValue}\n />\n );\n}\n","import React from \"react\";\nimport { cls } from \"../../../util\";\nimport { focusedDisabled } from \"../../../styles\";\nimport { DateTimeField } from \"../../DateTimeField\";\n\nexport function VirtualTableDateField(props: {\n name?: string;\n error?: Error;\n mode?: \"date\" | \"date_time\";\n timezone?: string;\n internalValue: Date | undefined | null;\n updateValue: (newValue: (Date | null)) => void;\n focused: boolean;\n disabled: boolean;\n locale?: string;\n onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n}) {\n const { disabled, error, mode, timezone, internalValue, updateValue, locale } = props;\n\n return (\n <DateTimeField\n value={internalValue ?? undefined}\n onChange={(dateValue) => updateValue(dateValue ?? null)}\n invisible={true}\n inputClassName={cls(\"w-full h-full\", focusedDisabled)}\n className={cls(\"w-full h-full\", focusedDisabled)}\n mode={mode}\n timezone={timezone}\n locale={locale}\n />\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport { Select, SelectItem } from \"../../Select\";\nimport { MultiSelect, MultiSelectItem } from \"../../MultiSelect\";\nimport { Chip } from \"../../Chip\";\n\nexport interface VirtualTableSelectOption {\n value: string | number;\n label: string;\n color?: string;\n}\n\nexport function VirtualTableSelect(props: {\n options: VirtualTableSelectOption[];\n error?: Error;\n multiple?: boolean;\n disabled: boolean;\n small?: boolean;\n value: string | number | string[] | number[] | undefined;\n updateValue: (newValue: (string | number | string[] | number[] | null)) => void;\n focused: boolean;\n onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n}) {\n const { options, value, disabled, small = false, focused, updateValue, multiple = false } = props;\n const validValue = (Array.isArray(value) && multiple) || (!Array.isArray(value) && !multiple);\n const ref = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (ref.current && focused) {\n ref.current?.focus({ preventScroll: true });\n }\n }, [focused, ref]);\n\n const onChange = useCallback((updatedValue: string | string[]) => {\n if (multiple) {\n const isNumber = options.some(o => typeof o.value === \"number\");\n const newValue = (updatedValue as string[]).map((v) => {\n const opt = options.find(o => String(o.value) === v);\n return typeof opt?.value === \"number\" ? parseFloat(v) : v;\n });\n if (isNumber) {\n updateValue(newValue as number[]);\n } else {\n updateValue(newValue as string[]);\n }\n } else {\n const opt = options.find(o => String(o.value) === updatedValue);\n updateValue(typeof opt?.value === \"number\" ? parseFloat(updatedValue as string) : (updatedValue as string || null));\n }\n }, [multiple, updateValue, options]);\n\n const renderValue = (val?: string | number) => {\n const option = options.find(o => o.value === val);\n return (\n <Chip size={small ? \"small\" : \"medium\"}>\n {option ? option.label : String(val)}\n </Chip>\n );\n };\n\n const handleOpenChange = useCallback((open: boolean) => {\n if (!open && ref.current) {\n setTimeout(() => {\n ref.current?.focus({ preventScroll: true });\n }, 0);\n }\n }, []);\n\n return multiple ? (\n <MultiSelect\n inputRef={ref}\n className=\"w-full h-full p-0 bg-transparent outline-none\"\n position={\"item-aligned\"}\n disabled={disabled}\n includeClear={false}\n useChips={false}\n value={validValue ? (value as (string | number)[]).map(v => String(v)) : []}\n onValueChange={onChange}\n onOpenChange={handleOpenChange}\n >\n {options.map((opt) => (\n <MultiSelectItem key={String(opt.value)} value={String(opt.value)}>\n <Chip size={small ? \"small\" : \"medium\"}>{opt.label}</Chip>\n </MultiSelectItem>\n ))}\n </MultiSelect>\n ) : (\n <Select\n inputRef={ref}\n fullWidth\n className=\"w-full h-full p-0 bg-transparent outline-none [&_button]:ring-0 [&_button]:ring-offset-0\"\n inputClassName=\"ring-0 ring-offset-0 focus:ring-0 focus-visible:ring-0 outline-none focus:outline-none focus-visible:outline-none focus-visible:ring-offset-0\"\n position={\"item-aligned\"}\n disabled={disabled}\n padding={false}\n value={validValue ? String(value) : \"\"}\n onValueChange={onChange}\n onOpenChange={handleOpenChange}\n renderValue={renderValue}\n >\n {options.map((opt) => (\n <SelectItem key={String(opt.value)} value={String(opt.value)}>\n <Chip size={small ? \"small\" : \"medium\"}>{opt.label}</Chip>\n </SelectItem>\n ))}\n </Select>\n );\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n CircularProgress,\n Typography\n} from \"../components\";\nimport { cls } from \"../util\";\n\nexport type CollectionSize = \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\";\n\nexport type ListViewColumnDef<T> = {\n key: string;\n label: string;\n align?: \"left\" | \"center\" | \"right\";\n width?: string;\n renderCell: (item: T) => React.ReactNode;\n isTitle?: boolean;\n};\n\nexport type ListViewProps<T> = {\n data: T[];\n dataLoading?: boolean;\n noMoreToLoad?: boolean;\n dataLoadingError?: Error;\n itemCount?: number;\n setItemCount?: (itemCount: number) => void;\n pageSize?: number;\n paginationEnabled?: boolean;\n\n onItemClick?: (item: T) => void;\n selectedIds?: Set<string | number>;\n highlightedIds?: Set<string | number>;\n selectionEnabled?: boolean;\n onSelectionChange?: (item: T, selected: boolean) => void;\n emptyComponent?: React.ReactNode;\n\n size?: CollectionSize;\n selectedEntityId?: string | number;\n\n renderRow: (params: {\n item: T;\n index: number;\n style: React.CSSProperties;\n className: string;\n selected: boolean;\n highlighted: boolean;\n isLast: boolean;\n onClick: (e: React.MouseEvent) => void;\n onSelectionChange: (selected: boolean) => void;\n }) => React.ReactNode;\n};\n\nfunction getEstimatedRowHeight(size: CollectionSize): number {\n switch (size) {\n case \"xs\": return 44;\n case \"s\": return 52;\n case \"m\": return 64;\n case \"l\": return 76;\n case \"xl\": return 88;\n default: return 64;\n }\n}\n\nconst OVERSCAN_COUNT = 8;\nconst LOAD_MORE_THRESHOLD = 400;\n\nfunction getScrollParent(element: HTMLElement | null): HTMLElement | null {\n let parent = element?.parentElement ?? null;\n while (parent) {\n const style = getComputedStyle(parent);\n if (\n style.overflowY === \"auto\" || style.overflowY === \"scroll\" ||\n style.overflow === \"auto\" || style.overflow === \"scroll\"\n ) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document.documentElement;\n}\n\nexport function ListView<T>({\n data,\n dataLoading = false,\n noMoreToLoad = false,\n dataLoadingError,\n itemCount,\n setItemCount,\n pageSize = 50,\n paginationEnabled = true,\n\n onItemClick,\n selectedIds,\n highlightedIds,\n selectionEnabled = true,\n onSelectionChange,\n emptyComponent,\n\n size = \"m\",\n selectedEntityId,\n renderRow\n}: ListViewProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const isLoadingMore = useRef(false);\n\n // Reset loading gate when loading stops\n useEffect(() => {\n if (!dataLoading) isLoadingMore.current = false;\n }, [dataLoading]);\n\n // Virtualization scroll states\n const estimatedRowHeight = getEstimatedRowHeight(size);\n const [effectiveScrollTop, setEffectiveScrollTop] = useState(0);\n const [viewportHeight, setViewportHeight] = useState(800);\n\n const paginationStateRef = useRef({ paginationEnabled, noMoreToLoad, itemCount, pageSize });\n useEffect(() => {\n paginationStateRef.current = { paginationEnabled, noMoreToLoad, itemCount, pageSize };\n }, [paginationEnabled, noMoreToLoad, itemCount, pageSize]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const scrollEl = getScrollParent(el);\n if (!scrollEl) return;\n\n let rafId: number | null = null;\n\n const update = () => {\n rafId = null;\n const scrollRect = scrollEl.getBoundingClientRect();\n const listRect = el.getBoundingClientRect();\n\n const listTopRelative = listRect.top - scrollRect.top;\n setEffectiveScrollTop(Math.max(0, -listTopRelative));\n setViewportHeight(scrollRect.height);\n\n const { paginationEnabled: pe, noMoreToLoad: nm, itemCount: ic, pageSize: ps } = paginationStateRef.current;\n if (\n pe &&\n !nm &&\n !isLoadingMore.current &&\n scrollEl.scrollHeight - scrollEl.scrollTop - scrollEl.clientHeight < LOAD_MORE_THRESHOLD\n ) {\n isLoadingMore.current = true;\n setItemCount?.((ic ?? ps) + ps);\n }\n };\n\n const onScroll = () => {\n if (rafId === null) rafId = requestAnimationFrame(update);\n };\n\n scrollEl.addEventListener(\"scroll\", onScroll, { passive: true });\n const ro = new ResizeObserver(() => update());\n ro.observe(scrollEl);\n update();\n\n return () => {\n scrollEl.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n if (rafId !== null) cancelAnimationFrame(rafId);\n };\n }, [setItemCount]);\n\n const totalHeight = data.length * estimatedRowHeight;\n const startIndex = Math.max(0, Math.floor(effectiveScrollTop / estimatedRowHeight) - OVERSCAN_COUNT);\n const endIndex = Math.min(\n data.length,\n Math.ceil((effectiveScrollTop + viewportHeight) / estimatedRowHeight) + OVERSCAN_COUNT\n );\n const visibleData = data.slice(startIndex, endIndex);\n const offsetY = startIndex * estimatedRowHeight;\n\n const footerHeight = dataLoading ? 48 : (!dataLoading && noMoreToLoad && data.length > 0) ? 32 : 0;\n\n const isInitialLoading = dataLoading && data.length === 0;\n const isEmpty = !dataLoading && data.length === 0 && !dataLoadingError;\n\n const getItemId = useCallback((item: T): string | number => {\n if (item && typeof item === \"object\" && \"id\" in item) {\n const id = (item as Record<\"id\", unknown>).id;\n return typeof id === \"number\" ? id : String(id);\n }\n return String(item);\n }, []);\n\n const borderMixinClass = \"border-surface-200 dark:border-surface-800\";\n\n return (\n <div\n ref={containerRef}\n className={cls(\n \"w-full\",\n selectedEntityId === undefined && `rounded-lg overflow-hidden border ${borderMixinClass}`\n )}\n >\n {dataLoadingError && data.length === 0 ? (\n <div className=\"flex items-center justify-center p-8\">\n <Typography className=\"text-red-500\">\n Error loading data: {dataLoadingError.message}\n </Typography>\n </div>\n ) : isInitialLoading ? (\n <div className=\"flex items-center justify-center py-12 px-8\">\n <CircularProgress size=\"small\" />\n </div>\n ) : isEmpty ? (\n <div className=\"w-full flex items-center justify-center py-12 px-8\">\n {emptyComponent ?? (\n <Typography variant=\"label\" color=\"secondary\">\n No entries found\n </Typography>\n )}\n </div>\n ) : (\n <div style={{ height: totalHeight + footerHeight, position: \"relative\" }}>\n <div style={{ position: \"absolute\", top: offsetY, left: 0, right: 0 }}>\n {visibleData.map((item, i) => {\n const actualIndex = startIndex + i;\n const isLast = actualIndex === data.length - 1;\n const id = getItemId(item);\n const selected = selectedIds?.has(id) ?? false;\n const highlighted = highlightedIds?.has(id) ?? false;\n\n const handleClick = (e: React.MouseEvent) => {\n if ((e.metaKey || e.ctrlKey) && selectionEnabled) {\n e.preventDefault();\n onSelectionChange?.(item, !selected);\n return;\n }\n onItemClick?.(item);\n };\n\n const handleSelectionChange = (val: boolean) => {\n onSelectionChange?.(item, val);\n };\n\n return (\n <React.Fragment key={id || actualIndex}>\n {renderRow({\n item,\n index: actualIndex,\n style: { height: estimatedRowHeight },\n className: cls(\n !isLast && \"border-b\",\n !isLast && borderMixinClass\n ),\n selected,\n highlighted,\n isLast,\n onClick: handleClick,\n onSelectionChange: handleSelectionChange\n })}\n </React.Fragment>\n );\n })}\n </div>\n\n {dataLoading && (\n <div\n className=\"flex items-center justify-center py-3\"\n style={{ position: \"absolute\", top: totalHeight, left: 0, right: 0 }}\n >\n <CircularProgress size=\"small\" />\n </div>\n )}\n {!dataLoading && noMoreToLoad && data.length > 0 && (\n <div\n className=\"flex items-center justify-center py-2 dark:bg-surface-900\"\n style={{ position: \"absolute\", top: totalHeight, left: 0, right: 0 }}\n >\n <Typography variant=\"caption\" color=\"secondary\">\n All {data.length} entries loaded\n </Typography>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef } from \"react\";\nimport {\n CircularProgress,\n Typography\n} from \"../components\";\nimport { cls } from \"../util\";\n\nimport { CollectionSize } from \"./ListView\";\n\nexport type CardViewProps<T> = {\n data: T[];\n dataLoading?: boolean;\n noMoreToLoad?: boolean;\n dataLoadingError?: Error;\n itemCount?: number;\n setItemCount?: (itemCount: number) => void;\n pageSize?: number;\n paginationEnabled?: boolean;\n\n onItemClick?: (item: T) => void;\n selectedIds?: Set<string | number>;\n highlightedIds?: Set<string | number>;\n selectionEnabled?: boolean;\n onSelectionChange?: (item: T, selected: boolean) => void;\n\n onScroll?: (props: {\n scrollDirection: \"forward\" | \"backward\";\n scrollOffset: number;\n scrollUpdateWasRequested: boolean;\n }) => void;\n initialScroll?: number;\n\n size?: CollectionSize;\n renderCard: (\n item: T,\n extra: {\n selected: boolean;\n highlighted: boolean;\n onSelectionChange: (selected: boolean) => void;\n onClick: (e: React.MouseEvent) => void;\n }\n ) => React.ReactNode;\n emptyComponent?: React.ReactNode;\n};\n\nfunction getGridColumnsClass(size: CollectionSize): string {\n switch (size) {\n case \"xs\":\n return \"grid-cols-4 sm:grid-cols-5 md:grid-cols-6 lg:grid-cols-8 xl:grid-cols-10\";\n case \"s\":\n return \"grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 xl:grid-cols-8\";\n case \"m\":\n return \"grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6\";\n case \"l\":\n return \"grid-cols-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4\";\n case \"xl\":\n return \"grid-cols-1 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3\";\n default:\n return \"grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6\";\n }\n}\n\nfunction getScrollParent(element: HTMLElement | null): HTMLElement | null {\n if (!element) return null;\n let parent = element.parentElement;\n while (parent) {\n const overflowY = window.getComputedStyle(parent).overflowY;\n if (overflowY === \"auto\" || overflowY === \"scroll\") {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document.documentElement;\n}\n\nexport function CardView<T>({\n data,\n dataLoading = false,\n noMoreToLoad = false,\n dataLoadingError,\n itemCount,\n setItemCount,\n pageSize = 50,\n paginationEnabled = true,\n\n onItemClick,\n selectedIds,\n highlightedIds,\n selectionEnabled = true,\n onSelectionChange,\n\n onScroll,\n initialScroll,\n size = \"m\",\n renderCard,\n emptyComponent\n}: CardViewProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const hasRestoredScroll = useRef(false);\n const isLoadingMore = useRef(false);\n\n // Sync mutable ref with pagination settings to avoid resetting listeners\n const paginationStateRef = useRef({ paginationEnabled, noMoreToLoad, itemCount, pageSize });\n useEffect(() => {\n paginationStateRef.current = { paginationEnabled, noMoreToLoad, itemCount, pageSize };\n }, [paginationEnabled, noMoreToLoad, itemCount, pageSize]);\n\n useEffect(() => {\n if (!dataLoading) isLoadingMore.current = false;\n }, [dataLoading]);\n\n // Infinite scroll and resize observer\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const scrollEl = getScrollParent(el);\n if (!scrollEl) return;\n\n let rafId: number | null = null;\n\n const update = () => {\n rafId = null;\n const { paginationEnabled: pe, noMoreToLoad: nm, itemCount: ic, pageSize: ps } = paginationStateRef.current;\n if (\n pe &&\n !nm &&\n !isLoadingMore.current &&\n scrollEl.scrollHeight - scrollEl.scrollTop - scrollEl.clientHeight < 400\n ) {\n isLoadingMore.current = true;\n setItemCount?.((ic ?? ps) + ps);\n }\n };\n\n const onScrollEvent = () => {\n if (rafId === null) rafId = requestAnimationFrame(update);\n };\n\n scrollEl.addEventListener(\"scroll\", onScrollEvent, { passive: true });\n const ro = new ResizeObserver(() => update());\n ro.observe(scrollEl);\n update();\n\n return () => {\n scrollEl.removeEventListener(\"scroll\", onScrollEvent);\n ro.disconnect();\n if (rafId !== null) cancelAnimationFrame(rafId);\n };\n }, [setItemCount]);\n\n // Scroll restoration\n useEffect(() => {\n if (!containerRef.current || !initialScroll || hasRestoredScroll.current || data.length === 0) return;\n\n const scrollEl = getScrollParent(containerRef.current);\n if (!scrollEl) return;\n\n let attempts = 0;\n const maxAttempts = 5;\n\n const tryRestore = () => {\n if (scrollEl.scrollHeight >= initialScroll || attempts >= maxAttempts) {\n scrollEl.scrollTop = initialScroll;\n hasRestoredScroll.current = true;\n } else {\n attempts++;\n requestAnimationFrame(tryRestore);\n }\n };\n\n requestAnimationFrame(tryRestore);\n }, [initialScroll, data.length]);\n\n // Scroll tracking: call onScroll callback\n const lastScrollOffset = useRef(0);\n useEffect(() => {\n const el = containerRef.current;\n if (!el || !onScroll) return;\n const scrollEl = getScrollParent(el);\n if (!scrollEl) return;\n\n const handleScroll = () => {\n const currentOffset = scrollEl.scrollTop;\n const direction = currentOffset > lastScrollOffset.current ? \"forward\" : \"backward\";\n lastScrollOffset.current = currentOffset;\n onScroll({\n scrollDirection: direction,\n scrollOffset: currentOffset,\n scrollUpdateWasRequested: false\n });\n };\n\n scrollEl.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => scrollEl.removeEventListener(\"scroll\", handleScroll);\n }, [onScroll]);\n\n const getItemId = useCallback((item: T): string | number => {\n if (item && typeof item === \"object\" && \"id\" in item) {\n const id = (item as Record<\"id\", unknown>).id;\n return typeof id === \"number\" ? id : String(id);\n }\n return String(item);\n }, []);\n\n const gridColumnsClass = getGridColumnsClass(size);\n\n const isInitialLoading = dataLoading && data.length === 0 && !dataLoadingError;\n const isEmpty = !dataLoading && data.length === 0 && !dataLoadingError;\n\n return (\n <div\n ref={containerRef}\n className=\"w-full p-4\"\n >\n {dataLoadingError && data.length === 0 ? (\n <div className=\"h-full flex items-center justify-center p-8\">\n <Typography className=\"text-red-500\">\n Error loading data: {dataLoadingError.message}\n </Typography>\n </div>\n ) : isInitialLoading ? (\n <div className=\"flex items-center justify-center py-12 px-8\">\n <CircularProgress size=\"small\"/>\n </div>\n ) : isEmpty ? (\n <div className=\"w-full flex items-center justify-center py-12 px-8\">\n {emptyComponent ?? (\n <Typography variant=\"label\" color=\"secondary\">\n No entries found\n </Typography>\n )}\n </div>\n ) : (\n <div className=\"max-w-7xl mx-auto\">\n <div className={cls(\"grid gap-4\", gridColumnsClass)}>\n {data.map((item, index) => {\n const id = getItemId(item);\n const selected = selectedIds?.has(id) ?? false;\n const highlighted = highlightedIds?.has(id) ?? false;\n\n const handleClick = (e: React.MouseEvent) => {\n if ((e.metaKey || e.ctrlKey) && selectionEnabled) {\n e.preventDefault();\n onSelectionChange?.(item, !selected);\n return;\n }\n onItemClick?.(item);\n };\n\n const handleSelectionChange = (val: boolean) => {\n onSelectionChange?.(item, val);\n };\n\n return (\n <React.Fragment key={id || index}>\n {renderCard(item, {\n selected,\n highlighted,\n onSelectionChange: handleSelectionChange,\n onClick: handleClick\n })}\n </React.Fragment>\n );\n })}\n </div>\n\n <div className=\"flex items-center justify-center py-8\">\n {dataLoading && (\n <CircularProgress size=\"small\"/>\n )}\n {!dataLoading && noMoreToLoad && data.length > 0 && (\n <Typography variant=\"caption\" color=\"secondary\">\n All {data.length} entries loaded\n </Typography>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import React, { memo, useEffect, useMemo, useRef } from \"react\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport { useSortable, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { CircularProgress } from \"../../components\";\nimport { cls } from \"../../util\";\nimport { BoardItem, BoardItemViewProps } from \"./board_types\";\n\ninterface BoardSortableListProps<T> {\n columnId: string;\n items: BoardItem<T>[];\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n isDragging: boolean;\n isDragOverColumn: boolean;\n loading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n}\n\nexport function BoardSortableList<T>({\n columnId,\n items,\n ItemComponent,\n isDragging,\n isDragOverColumn,\n loading = false,\n hasMore = false,\n onLoadMore\n}: BoardSortableListProps<T>) {\n const {\n setNodeRef\n } = useDroppable({\n id: columnId,\n data: { type: \"ITEM-LIST\" }\n });\n\n const sentinelRef = useRef<HTMLDivElement>(null);\n const isLoadingRef = useRef(loading);\n isLoadingRef.current = loading;\n const lastLoadTimeRef = useRef(0);\n\n useEffect(() => {\n if (!sentinelRef.current || !hasMore || !onLoadMore) return;\n\n const sentinel = sentinelRef.current;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const now = Date.now();\n if (\n entries[0].isIntersecting &&\n hasMore &&\n !isLoadingRef.current &&\n now - lastLoadTimeRef.current > 500\n ) {\n lastLoadTimeRef.current = now;\n onLoadMore();\n }\n },\n { threshold: 0.1 }\n );\n\n observer.observe(sentinel);\n\n const rect = sentinel.getBoundingClientRect();\n const containerRect = sentinel.parentElement?.getBoundingClientRect();\n if (containerRect && rect.top < containerRect.bottom && rect.bottom > containerRect.top) {\n const now = Date.now();\n if (hasMore && !isLoadingRef.current && now - lastLoadTimeRef.current > 500) {\n lastLoadTimeRef.current = now;\n onLoadMore();\n }\n }\n\n return () => observer.disconnect();\n }, [hasMore, onLoadMore]);\n\n const containerClassName = useMemo(() => cls(\n \"flex flex-col p-2 transition-opacity duration-100 transition-bg ease-linear w-full overflow-y-auto no-scrollbar flex-1 rounded-md\",\n isDragging && isDragOverColumn\n ? \"bg-surface-accent-200 dark:bg-surface-900\"\n : isDragging\n ? \"bg-surface-50 dark:bg-surface-900 hover:bg-surface-accent-100 dark:hover:bg-surface-800\"\n : \"bg-surface-50 dark:bg-surface-900\"\n ), [isDragging, isDragOverColumn]);\n\n return (\n <div\n ref={setNodeRef}\n className={containerClassName}\n style={{ minHeight: 80 }}\n >\n <SortableContext\n items={items.map(i => i.id)}\n strategy={verticalListSortingStrategy}\n >\n {items.length === 0 && !loading ? (\n <div className=\"flex-1 flex items-center justify-center\">\n <span className=\"text-xs text-surface-400 dark:text-surface-500\">\n No items\n </span>\n </div>\n ) : (\n <>\n {items.map((item, index) => (\n <SortableItem\n key={item.id}\n item={item}\n index={index}\n columnId={columnId}\n ItemComponent={ItemComponent}\n />\n ))}\n {(loading || hasMore) && (\n <div ref={sentinelRef} className=\"flex items-center justify-center py-2 min-h-6\">\n {loading && <CircularProgress size=\"smallest\"/>}\n </div>\n )}\n </>\n )}\n </SortableContext>\n </div>\n );\n}\n\ninterface SortableItemProps<T> {\n item: BoardItem<T>;\n index: number;\n columnId: string;\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n}\n\nconst SortableItem = memo(function SortableItem<T>({\n item,\n index,\n columnId,\n ItemComponent\n}: SortableItemProps<T>) {\n const {\n setNodeRef,\n attributes,\n listeners,\n isDragging: isItemBeingDragged,\n transform,\n transition\n } = useSortable({\n id: item.id,\n data: {\n type: \"ITEM\",\n columnId\n }\n });\n\n const sortableStyle = useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isItemBeingDragged ? 2 : 1,\n opacity: isItemBeingDragged ? 0 : 1\n }), [transform, transition, isItemBeingDragged]);\n\n return (\n <div ref={setNodeRef} style={sortableStyle} {...attributes} {...listeners}>\n <ItemComponent\n item={item}\n isDragging={isItemBeingDragged}\n index={index}\n />\n </div>\n );\n}) as <T>(props: SortableItemProps<T>) => React.ReactElement;\n","import React, { useMemo } from \"react\";\nimport { Typography } from \"../../components\";\nimport { cls, getColorSchemeForKey } from \"../../util\";\n\nexport interface BoardColumnTitleProps {\n children: React.ReactNode;\n className?: string;\n \"aria-label\"?: string;\n color?: any;\n}\n\nexport function BoardColumnTitle({\n children,\n className,\n color,\n ...props\n}: BoardColumnTitleProps) {\n const colorScheme = useMemo(() => {\n if (!color) return undefined;\n if (typeof color === \"string\") {\n return getColorSchemeForKey(color);\n }\n return color;\n }, [color]);\n\n return (\n <Typography\n variant=\"subtitle2\"\n component=\"h4\"\n className={\n cls(\"py-3 px-3 transition-colors duration-200 flex-grow select-none relative outline-none focus:outline focus:outline-2 focus:outline-offset-2 flex items-center gap-3\",\n className)\n }\n {...props}\n >\n {colorScheme && (\n <div\n className=\"w-3 h-3 rounded-full flex-shrink-0\"\n style={{\n backgroundColor: colorScheme.darkColor ?? colorScheme.color\n }}\n />\n )}\n {children}\n </Typography>\n );\n}\n","export const iconKeys = [\n \"AArrowDown\",\n \"AArrowUp\",\n \"ALargeSmall\",\n \"Accessibility\",\n \"Activity\",\n \"ActivitySquare\",\n \"AirVent\",\n \"Airplay\",\n \"AlarmCheck\",\n \"AlarmClock\",\n \"AlarmClockCheck\",\n \"AlarmClockMinus\",\n \"AlarmClockOff\",\n \"AlarmClockPlus\",\n \"AlarmMinus\",\n \"AlarmPlus\",\n \"AlarmSmoke\",\n \"Album\",\n \"AlertCircle\",\n \"AlertOctagon\",\n \"AlertTriangle\",\n \"AlignCenter\",\n \"AlignCenterHorizontal\",\n \"AlignCenterVertical\",\n \"AlignEndHorizontal\",\n \"AlignEndVertical\",\n \"AlignHorizontalDistributeCenter\",\n \"AlignHorizontalDistributeEnd\",\n \"AlignHorizontalDistributeStart\",\n \"AlignHorizontalJustifyCenter\",\n \"AlignHorizontalJustifyEnd\",\n \"AlignHorizontalJustifyStart\",\n \"AlignHorizontalSpaceAround\",\n \"AlignHorizontalSpaceBetween\",\n \"AlignJustify\",\n \"AlignLeft\",\n \"AlignRight\",\n \"AlignStartHorizontal\",\n \"AlignStartVertical\",\n \"AlignVerticalDistributeCenter\",\n \"AlignVerticalDistributeEnd\",\n \"AlignVerticalDistributeStart\",\n \"AlignVerticalJustifyCenter\",\n \"AlignVerticalJustifyEnd\",\n \"AlignVerticalJustifyStart\",\n \"AlignVerticalSpaceAround\",\n \"AlignVerticalSpaceBetween\",\n \"Ambulance\",\n \"Ampersand\",\n \"Ampersands\",\n \"Amphora\",\n \"Anchor\",\n \"Angry\",\n \"Annoyed\",\n \"Antenna\",\n \"Anvil\",\n \"Aperture\",\n \"AppWindow\",\n \"AppWindowMac\",\n \"Apple\",\n \"Archive\",\n \"ArchiveRestore\",\n \"ArchiveX\",\n \"AreaChart\",\n \"Armchair\",\n \"ArrowBigDown\",\n \"ArrowBigDownDash\",\n \"ArrowBigLeft\",\n \"ArrowBigLeftDash\",\n \"ArrowBigRight\",\n \"ArrowBigRightDash\",\n \"ArrowBigUp\",\n \"ArrowBigUpDash\",\n \"ArrowDown\",\n \"ArrowDown01\",\n \"ArrowDown10\",\n \"ArrowDownAZ\",\n \"ArrowDownCircle\",\n \"ArrowDownFromLine\",\n \"ArrowDownLeft\",\n \"ArrowDownLeftFromCircle\",\n \"ArrowDownLeftFromSquare\",\n \"ArrowDownLeftSquare\",\n \"ArrowDownNarrowWide\",\n \"ArrowDownRight\",\n \"ArrowDownRightFromCircle\",\n \"ArrowDownRightFromSquare\",\n \"ArrowDownRightSquare\",\n \"ArrowDownSquare\",\n \"ArrowDownToDot\",\n \"ArrowDownToLine\",\n \"ArrowDownUp\",\n \"ArrowDownWideNarrow\",\n \"ArrowDownZA\",\n \"ArrowLeft\",\n \"ArrowLeftCircle\",\n \"ArrowLeftFromLine\",\n \"ArrowLeftRight\",\n \"ArrowLeftSquare\",\n \"ArrowLeftToLine\",\n \"ArrowRight\",\n \"ArrowRightCircle\",\n \"ArrowRightFromLine\",\n \"ArrowRightLeft\",\n \"ArrowRightSquare\",\n \"ArrowRightToLine\",\n \"ArrowUp\",\n \"ArrowUp01\",\n \"ArrowUp10\",\n \"ArrowUpAZ\",\n \"ArrowUpCircle\",\n \"ArrowUpDown\",\n \"ArrowUpFromDot\",\n \"ArrowUpFromLine\",\n \"ArrowUpLeft\",\n \"ArrowUpLeftFromCircle\",\n \"ArrowUpLeftFromSquare\",\n \"ArrowUpLeftSquare\",\n \"ArrowUpNarrowWide\",\n \"ArrowUpRight\",\n \"ArrowUpRightFromCircle\",\n \"ArrowUpRightFromSquare\",\n \"ArrowUpRightSquare\",\n \"ArrowUpSquare\",\n \"ArrowUpToLine\",\n \"ArrowUpWideNarrow\",\n \"ArrowUpZA\",\n \"ArrowsUpFromLine\",\n \"Asterisk\",\n \"AsteriskSquare\",\n \"Astroid\",\n \"AtSign\",\n \"Atom\",\n \"AudioLines\",\n \"AudioWaveform\",\n \"Award\",\n \"Axe\",\n \"Axis3D\",\n \"Baby\",\n \"Backpack\",\n \"Badge\",\n \"BadgeAlert\",\n \"BadgeCent\",\n \"BadgeCheck\",\n \"BadgeDollarSign\",\n \"BadgeEuro\",\n \"BadgeHelp\",\n \"BadgeIndianRupee\",\n \"BadgeInfo\",\n \"BadgeJapaneseYen\",\n \"BadgeMinus\",\n \"BadgePercent\",\n \"BadgePlus\",\n \"BadgePoundSterling\",\n \"BadgeQuestionMark\",\n \"BadgeRussianRuble\",\n \"BadgeSwissFranc\",\n \"BadgeTurkishLira\",\n \"BadgeX\",\n \"BaggageClaim\",\n \"Balloon\",\n \"Ban\",\n \"Banana\",\n \"Bandage\",\n \"Banknote\",\n \"BanknoteArrowDown\",\n \"BanknoteArrowUp\",\n \"BanknoteX\",\n \"BarChart\",\n \"BarChart2\",\n \"BarChart3\",\n \"BarChart4\",\n \"BarChartBig\",\n \"BarChartHorizontal\",\n \"BarChartHorizontalBig\",\n \"Barcode\",\n \"Barrel\",\n \"Baseline\",\n \"Bath\",\n \"Battery\",\n \"BatteryCharging\",\n \"BatteryFull\",\n \"BatteryLow\",\n \"BatteryMedium\",\n \"BatteryPlus\",\n \"BatteryWarning\",\n \"Beaker\",\n \"Bean\",\n \"BeanOff\",\n \"Bed\",\n \"BedDouble\",\n \"BedSingle\",\n \"Beef\",\n \"BeefOff\",\n \"Beer\",\n \"BeerOff\",\n \"Bell\",\n \"BellCheck\",\n \"BellDot\",\n \"BellElectric\",\n \"BellMinus\",\n \"BellOff\",\n \"BellPlus\",\n \"BellRing\",\n \"BetweenHorizonalEnd\",\n \"BetweenHorizonalStart\",\n \"BetweenHorizontalEnd\",\n \"BetweenHorizontalStart\",\n \"BetweenVerticalEnd\",\n \"BetweenVerticalStart\",\n \"BicepsFlexed\",\n \"Bike\",\n \"Binary\",\n \"Binoculars\",\n \"Biohazard\",\n \"Bird\",\n \"Birdhouse\",\n \"Bitcoin\",\n \"Blend\",\n \"Blinds\",\n \"Blocks\",\n \"Bluetooth\",\n \"BluetoothConnected\",\n \"BluetoothOff\",\n \"BluetoothSearching\",\n \"Bold\",\n \"Bolt\",\n \"Bomb\",\n \"Bone\",\n \"Book\",\n \"BookA\",\n \"BookAlert\",\n \"BookAudio\",\n \"BookCheck\",\n \"BookCopy\",\n \"BookDashed\",\n \"BookDown\",\n \"BookHeadphones\",\n \"BookHeart\",\n \"BookImage\",\n \"BookKey\",\n \"BookLock\",\n \"BookMarked\",\n \"BookMinus\",\n \"BookOpen\",\n \"BookOpenCheck\",\n \"BookOpenText\",\n \"BookPlus\",\n \"BookSearch\",\n \"BookTemplate\",\n \"BookText\",\n \"BookType\",\n \"BookUp\",\n \"BookUp2\",\n \"BookUser\",\n \"BookX\",\n \"Bookmark\",\n \"BookmarkCheck\",\n \"BookmarkMinus\",\n \"BookmarkOff\",\n \"BookmarkPlus\",\n \"BookmarkX\",\n \"BoomBox\",\n \"Bot\",\n \"BotMessageSquare\",\n \"BotOff\",\n \"BottleWine\",\n \"BowArrow\",\n \"Box\",\n \"BoxSelect\",\n \"Boxes\",\n \"Braces\",\n \"Brackets\",\n \"Brain\",\n \"BrainCircuit\",\n \"BrainCog\",\n \"BrickWall\",\n \"BrickWallFire\",\n \"BrickWallShield\",\n \"Briefcase\",\n \"BriefcaseBusiness\",\n \"BriefcaseConveyorBelt\",\n \"BriefcaseMedical\",\n \"BringToFront\",\n \"Brush\",\n \"BrushCleaning\",\n \"Bubbles\",\n \"Bug\",\n \"BugOff\",\n \"BugPlay\",\n \"Building\",\n \"Building2\",\n \"Bus\",\n \"BusFront\",\n \"Cable\",\n \"CableCar\",\n \"Cake\",\n \"CakeSlice\",\n \"Calculator\",\n \"Calendar\",\n \"Calendar1\",\n \"CalendarArrowDown\",\n \"CalendarArrowUp\",\n \"CalendarCheck\",\n \"CalendarCheck2\",\n \"CalendarClock\",\n \"CalendarCog\",\n \"CalendarDays\",\n \"CalendarFold\",\n \"CalendarHeart\",\n \"CalendarMinus\",\n \"CalendarMinus2\",\n \"CalendarOff\",\n \"CalendarPlus\",\n \"CalendarPlus2\",\n \"CalendarRange\",\n \"CalendarSearch\",\n \"CalendarSync\",\n \"CalendarX\",\n \"CalendarX2\",\n \"Calendars\",\n \"Camera\",\n \"CameraOff\",\n \"CandlestickChart\",\n \"Candy\",\n \"CandyCane\",\n \"CandyOff\",\n \"Cannabis\",\n \"CannabisOff\",\n \"Captions\",\n \"CaptionsOff\",\n \"Car\",\n \"CarFront\",\n \"CarTaxiFront\",\n \"Caravan\",\n \"CardSim\",\n \"Carrot\",\n \"CaseLower\",\n \"CaseSensitive\",\n \"CaseUpper\",\n \"CassetteTape\",\n \"Cast\",\n \"Castle\",\n \"Cat\",\n \"Cctv\",\n \"CctvOff\",\n \"ChartArea\",\n \"ChartBar\",\n \"ChartBarBig\",\n \"ChartBarDecreasing\",\n \"ChartBarIncreasing\",\n \"ChartBarStacked\",\n \"ChartCandlestick\",\n \"ChartColumn\",\n \"ChartColumnBig\",\n \"ChartColumnDecreasing\",\n \"ChartColumnIncreasing\",\n \"ChartColumnStacked\",\n \"ChartGantt\",\n \"ChartLine\",\n \"ChartNetwork\",\n \"ChartNoAxesColumn\",\n \"ChartNoAxesColumnDecreasing\",\n \"ChartNoAxesColumnIncreasing\",\n \"ChartNoAxesCombined\",\n \"ChartNoAxesGantt\",\n \"ChartPie\",\n \"ChartScatter\",\n \"ChartSpline\",\n \"Check\",\n \"CheckCheck\",\n \"CheckCircle\",\n \"CheckCircle2\",\n \"CheckLine\",\n \"CheckSquare\",\n \"CheckSquare2\",\n \"ChefHat\",\n \"Cherry\",\n \"ChessBishop\",\n \"ChessKing\",\n \"ChessKnight\",\n \"ChessPawn\",\n \"ChessQueen\",\n \"ChessRook\",\n \"ChevronDown\",\n \"ChevronDownCircle\",\n \"ChevronDownSquare\",\n \"ChevronFirst\",\n \"ChevronLast\",\n \"ChevronLeft\",\n \"ChevronLeftCircle\",\n \"ChevronLeftSquare\",\n \"ChevronRight\",\n \"ChevronRightCircle\",\n \"ChevronRightSquare\",\n \"ChevronUp\",\n \"ChevronUpCircle\",\n \"ChevronUpSquare\",\n \"ChevronsDown\",\n \"ChevronsDownUp\",\n \"ChevronsLeft\",\n \"ChevronsLeftRight\",\n \"ChevronsLeftRightEllipsis\",\n \"ChevronsRight\",\n \"ChevronsRightLeft\",\n \"ChevronsUp\",\n \"ChevronsUpDown\",\n \"Church\",\n \"Cigarette\",\n \"CigaretteOff\",\n \"Circle\",\n \"CircleAlert\",\n \"CircleArrowDown\",\n \"CircleArrowLeft\",\n \"CircleArrowOutDownLeft\",\n \"CircleArrowOutDownRight\",\n \"CircleArrowOutUpLeft\",\n \"CircleArrowOutUpRight\",\n \"CircleArrowRight\",\n \"CircleArrowUp\",\n \"CircleCheck\",\n \"CircleCheckBig\",\n \"CircleChevronDown\",\n \"CircleChevronLeft\",\n \"CircleChevronRight\",\n \"CircleChevronUp\",\n \"CircleDashed\",\n \"CircleDivide\",\n \"CircleDollarSign\",\n \"CircleDot\",\n \"CircleDotDashed\",\n \"CircleEllipsis\",\n \"CircleEqual\",\n \"CircleFadingArrowUp\",\n \"CircleFadingPlus\",\n \"CircleGauge\",\n \"CircleHelp\",\n \"CircleMinus\",\n \"CircleOff\",\n \"CircleParking\",\n \"CircleParkingOff\",\n \"CirclePause\",\n \"CirclePercent\",\n \"CirclePile\",\n \"CirclePlay\",\n \"CirclePlus\",\n \"CirclePoundSterling\",\n \"CirclePower\",\n \"CircleQuestionMark\",\n \"CircleSlash\",\n \"CircleSlash2\",\n \"CircleSlashed\",\n \"CircleSmall\",\n \"CircleStar\",\n \"CircleStop\",\n \"CircleUser\",\n \"CircleUserRound\",\n \"CircleX\",\n \"CircuitBoard\",\n \"Citrus\",\n \"Clapperboard\",\n \"Clipboard\",\n \"ClipboardCheck\",\n \"ClipboardClock\",\n \"ClipboardCopy\",\n \"ClipboardEdit\",\n \"ClipboardList\",\n \"ClipboardMinus\",\n \"ClipboardPaste\",\n \"ClipboardPen\",\n \"ClipboardPenLine\",\n \"ClipboardPlus\",\n \"ClipboardSignature\",\n \"ClipboardType\",\n \"ClipboardX\",\n \"Clock\",\n \"Clock1\",\n \"Clock10\",\n \"Clock11\",\n \"Clock12\",\n \"Clock2\",\n \"Clock3\",\n \"Clock4\",\n \"Clock5\",\n \"Clock6\",\n \"Clock7\",\n \"Clock8\",\n \"Clock9\",\n \"ClockAlert\",\n \"ClockArrowDown\",\n \"ClockArrowUp\",\n \"ClockCheck\",\n \"ClockFading\",\n \"ClockPlus\",\n \"ClosedCaption\",\n \"Cloud\",\n \"CloudAlert\",\n \"CloudBackup\",\n \"CloudCheck\",\n \"CloudCog\",\n \"CloudDownload\",\n \"CloudDrizzle\",\n \"CloudFog\",\n \"CloudHail\",\n \"CloudLightning\",\n \"CloudMoon\",\n \"CloudMoonRain\",\n \"CloudOff\",\n \"CloudRain\",\n \"CloudRainWind\",\n \"CloudSnow\",\n \"CloudSun\",\n \"CloudSunRain\",\n \"CloudSync\",\n \"CloudUpload\",\n \"Cloudy\",\n \"Clover\",\n \"Club\",\n \"Code\",\n \"Code2\",\n \"CodeSquare\",\n \"CodeXml\",\n \"Coffee\",\n \"Cog\",\n \"Coins\",\n \"Columns\",\n \"Columns2\",\n \"Columns3\",\n \"Columns3Cog\",\n \"Columns4\",\n \"ColumnsSettings\",\n \"Combine\",\n \"Command\",\n \"Compass\",\n \"Component\",\n \"Computer\",\n \"ConciergeBell\",\n \"Cone\",\n \"Construction\",\n \"Contact\",\n \"Contact2\",\n \"ContactRound\",\n \"Container\",\n \"Contrast\",\n \"Cookie\",\n \"CookingPot\",\n \"Copy\",\n \"CopyCheck\",\n \"CopyMinus\",\n \"CopyPlus\",\n \"CopySlash\",\n \"CopyX\",\n \"Copyleft\",\n \"Copyright\",\n \"CornerDownLeft\",\n \"CornerDownRight\",\n \"CornerLeftDown\",\n \"CornerLeftUp\",\n \"CornerRightDown\",\n \"CornerRightUp\",\n \"CornerUpLeft\",\n \"CornerUpRight\",\n \"Cpu\",\n \"CreativeCommons\",\n \"CreditCard\",\n \"Croissant\",\n \"Crop\",\n \"Cross\",\n \"Crosshair\",\n \"Crown\",\n \"Cuboid\",\n \"CupSoda\",\n \"CurlyBraces\",\n \"Currency\",\n \"Cylinder\",\n \"Dam\",\n \"Database\",\n \"DatabaseBackup\",\n \"DatabaseSearch\",\n \"DatabaseZap\",\n \"DecimalsArrowLeft\",\n \"DecimalsArrowRight\",\n \"Delete\",\n \"Dessert\",\n \"Diameter\",\n \"Diamond\",\n \"DiamondMinus\",\n \"DiamondPercent\",\n \"DiamondPlus\",\n \"Dice1\",\n \"Dice2\",\n \"Dice3\",\n \"Dice4\",\n \"Dice5\",\n \"Dice6\",\n \"Dices\",\n \"Diff\",\n \"Disc\",\n \"Disc2\",\n \"Disc3\",\n \"DiscAlbum\",\n \"Divide\",\n \"DivideCircle\",\n \"DivideSquare\",\n \"Dna\",\n \"DnaOff\",\n \"Dock\",\n \"Dog\",\n \"DollarSign\",\n \"Donut\",\n \"DoorClosed\",\n \"DoorClosedLocked\",\n \"DoorOpen\",\n \"Dot\",\n \"DotSquare\",\n \"Download\",\n \"DownloadCloud\",\n \"DraftingCompass\",\n \"Drama\",\n \"Drill\",\n \"Drone\",\n \"Droplet\",\n \"DropletOff\",\n \"Droplets\",\n \"Drum\",\n \"Drumstick\",\n \"Dumbbell\",\n \"Ear\",\n \"EarOff\",\n \"Earth\",\n \"EarthLock\",\n \"Eclipse\",\n \"Edit\",\n \"Edit2\",\n \"Edit3\",\n \"Egg\",\n \"EggFried\",\n \"EggOff\",\n \"Ellipse\",\n \"Ellipsis\",\n \"EllipsisVertical\",\n \"Equal\",\n \"EqualApproximately\",\n \"EqualNot\",\n \"EqualSquare\",\n \"Eraser\",\n \"EthernetPort\",\n \"Euro\",\n \"EvCharger\",\n \"Expand\",\n \"ExternalLink\",\n \"Eye\",\n \"EyeClosed\",\n \"EyeOff\",\n \"Factory\",\n \"Fan\",\n \"FastForward\",\n \"Feather\",\n \"Fence\",\n \"FerrisWheel\",\n \"File\",\n \"FileArchive\",\n \"FileAudio\",\n \"FileAudio2\",\n \"FileAxis3D\",\n \"FileBadge\",\n \"FileBadge2\",\n \"FileBarChart\",\n \"FileBarChart2\",\n \"FileBox\",\n \"FileBraces\",\n \"FileBracesCorner\",\n \"FileChartColumn\",\n \"FileChartColumnIncreasing\",\n \"FileChartLine\",\n \"FileChartPie\",\n \"FileCheck\",\n \"FileCheck2\",\n \"FileCheckCorner\",\n \"FileClock\",\n \"FileCode\",\n \"FileCode2\",\n \"FileCodeCorner\",\n \"FileCog\",\n \"FileCog2\",\n \"FileDiff\",\n \"FileDigit\",\n \"FileDown\",\n \"FileEdit\",\n \"FileExclamationPoint\",\n \"FileHeadphone\",\n \"FileHeart\",\n \"FileImage\",\n \"FileInput\",\n \"FileJson\",\n \"FileJson2\",\n \"FileKey\",\n \"FileKey2\",\n \"FileLineChart\",\n \"FileLock\",\n \"FileLock2\",\n \"FileMinus\",\n \"FileMinus2\",\n \"FileMinusCorner\",\n \"FileMusic\",\n \"FileOutput\",\n \"FilePen\",\n \"FilePenLine\",\n \"FilePieChart\",\n \"FilePlay\",\n \"FilePlus\",\n \"FilePlus2\",\n \"FilePlusCorner\",\n \"FileQuestion\",\n \"FileQuestionMark\",\n \"FileScan\",\n \"FileSearch\",\n \"FileSearch2\",\n \"FileSearchCorner\",\n \"FileSignal\",\n \"FileSignature\",\n \"FileSliders\",\n \"FileSpreadsheet\",\n \"FileStack\",\n \"FileSymlink\",\n \"FileTerminal\",\n \"FileText\",\n \"FileType\",\n \"FileType2\",\n \"FileTypeCorner\",\n \"FileUp\",\n \"FileUser\",\n \"FileVideo\",\n \"FileVideo2\",\n \"FileVideoCamera\",\n \"FileVolume\",\n \"FileVolume2\",\n \"FileWarning\",\n \"FileX\",\n \"FileX2\",\n \"FileXCorner\",\n \"Files\",\n \"Film\",\n \"Filter\",\n \"FilterX\",\n \"Fingerprint\",\n \"FingerprintPattern\",\n \"FireExtinguisher\",\n \"Fish\",\n \"FishOff\",\n \"FishSymbol\",\n \"FishingHook\",\n \"FishingRod\",\n \"Flag\",\n \"FlagOff\",\n \"FlagTriangleLeft\",\n \"FlagTriangleRight\",\n \"Flame\",\n \"FlameKindling\",\n \"Flashlight\",\n \"FlashlightOff\",\n \"FlaskConical\",\n \"FlaskConicalOff\",\n \"FlaskRound\",\n \"FlipHorizontal\",\n \"FlipHorizontal2\",\n \"FlipVertical\",\n \"FlipVertical2\",\n \"Flower\",\n \"Flower2\",\n \"Focus\",\n \"FoldHorizontal\",\n \"FoldVertical\",\n \"Folder\",\n \"FolderArchive\",\n \"FolderBookmark\",\n \"FolderCheck\",\n \"FolderClock\",\n \"FolderClosed\",\n \"FolderCode\",\n \"FolderCog\",\n \"FolderCog2\",\n \"FolderDot\",\n \"FolderDown\",\n \"FolderEdit\",\n \"FolderGit\",\n \"FolderGit2\",\n \"FolderHeart\",\n \"FolderInput\",\n \"FolderKanban\",\n \"FolderKey\",\n \"FolderLock\",\n \"FolderMinus\",\n \"FolderOpen\",\n \"FolderOpenDot\",\n \"FolderOutput\",\n \"FolderPen\",\n \"FolderPlus\",\n \"FolderRoot\",\n \"FolderSearch\",\n \"FolderSearch2\",\n \"FolderSymlink\",\n \"FolderSync\",\n \"FolderTree\",\n \"FolderUp\",\n \"FolderX\",\n \"Folders\",\n \"Footprints\",\n \"ForkKnife\",\n \"ForkKnifeCrossed\",\n \"Forklift\",\n \"Form\",\n \"FormInput\",\n \"Forward\",\n \"Frame\",\n \"Frown\",\n \"Fuel\",\n \"Fullscreen\",\n \"FunctionSquare\",\n \"Funnel\",\n \"FunnelPlus\",\n \"FunnelX\",\n \"GalleryHorizontal\",\n \"GalleryHorizontalEnd\",\n \"GalleryThumbnails\",\n \"GalleryVertical\",\n \"GalleryVerticalEnd\",\n \"Gamepad\",\n \"Gamepad2\",\n \"GamepadDirectional\",\n \"GanttChart\",\n \"GanttChartSquare\",\n \"Gauge\",\n \"GaugeCircle\",\n \"Gavel\",\n \"Gem\",\n \"GeorgianLari\",\n \"Ghost\",\n \"Gift\",\n \"GitBranch\",\n \"GitBranchMinus\",\n \"GitBranchPlus\",\n \"GitCommit\",\n \"GitCommitHorizontal\",\n \"GitCommitVertical\",\n \"GitCompare\",\n \"GitCompareArrows\",\n \"GitFork\",\n \"GitGraph\",\n \"GitMerge\",\n \"GitMergeConflict\",\n \"GitPullRequest\",\n \"GitPullRequestArrow\",\n \"GitPullRequestClosed\",\n \"GitPullRequestCreate\",\n \"GitPullRequestCreateArrow\",\n \"GitPullRequestDraft\",\n \"GlassWater\",\n \"Glasses\",\n \"Globe\",\n \"Globe2\",\n \"GlobeLock\",\n \"GlobeOff\",\n \"GlobeX\",\n \"Goal\",\n \"Gpu\",\n \"Grab\",\n \"GraduationCap\",\n \"Grape\",\n \"Grid\",\n \"Grid2X2\",\n \"Grid2X2Check\",\n \"Grid2X2Plus\",\n \"Grid2X2X\",\n \"Grid3X3\",\n \"Grid3x2\",\n \"Grip\",\n \"GripHorizontal\",\n \"GripVertical\",\n \"Group\",\n \"Guitar\",\n \"Ham\",\n \"Hamburger\",\n \"Hammer\",\n \"Hand\",\n \"HandCoins\",\n \"HandFist\",\n \"HandGrab\",\n \"HandHeart\",\n \"HandHelping\",\n \"HandMetal\",\n \"HandPlatter\",\n \"Handbag\",\n \"Handshake\",\n \"HardDrive\",\n \"HardDriveDownload\",\n \"HardDriveUpload\",\n \"HardHat\",\n \"Hash\",\n \"HatGlasses\",\n \"Haze\",\n \"Hd\",\n \"HdmiPort\",\n \"Heading\",\n \"Heading1\",\n \"Heading2\",\n \"Heading3\",\n \"Heading4\",\n \"Heading5\",\n \"Heading6\",\n \"HeadphoneOff\",\n \"Headphones\",\n \"Headset\",\n \"Heart\",\n \"HeartCrack\",\n \"HeartHandshake\",\n \"HeartMinus\",\n \"HeartOff\",\n \"HeartPlus\",\n \"HeartPulse\",\n \"HeartX\",\n \"Heater\",\n \"Helicopter\",\n \"HelpCircle\",\n \"HelpingHand\",\n \"Hexagon\",\n \"Highlighter\",\n \"History\",\n \"Home\",\n \"Hop\",\n \"HopOff\",\n \"Hospital\",\n \"Hotel\",\n \"Hourglass\",\n \"House\",\n \"HouseHeart\",\n \"HousePlug\",\n \"HousePlus\",\n \"HouseWifi\",\n \"IceCream\",\n \"IceCream2\",\n \"IceCreamBowl\",\n \"IceCreamCone\",\n \"IdCard\",\n \"IdCardLanyard\",\n \"Image\",\n \"ImageDown\",\n \"ImageMinus\",\n \"ImageOff\",\n \"ImagePlay\",\n \"ImagePlus\",\n \"ImageUp\",\n \"ImageUpscale\",\n \"Images\",\n \"Import\",\n \"Inbox\",\n \"Indent\",\n \"IndentDecrease\",\n \"IndentIncrease\",\n \"IndianRupee\",\n \"Infinity\",\n \"Info\",\n \"Inspect\",\n \"InspectionPanel\",\n \"Italic\",\n \"IterationCcw\",\n \"IterationCw\",\n \"JapaneseYen\",\n \"Joystick\",\n \"Kanban\",\n \"KanbanSquare\",\n \"KanbanSquareDashed\",\n \"Kayak\",\n \"Key\",\n \"KeyRound\",\n \"KeySquare\",\n \"Keyboard\",\n \"KeyboardMusic\",\n \"KeyboardOff\",\n \"Lamp\",\n \"LampCeiling\",\n \"LampDesk\",\n \"LampFloor\",\n \"LampWallDown\",\n \"LampWallUp\",\n \"LandPlot\",\n \"Landmark\",\n \"Languages\",\n \"Laptop\",\n \"Laptop2\",\n \"LaptopMinimal\",\n \"LaptopMinimalCheck\",\n \"Lasso\",\n \"LassoSelect\",\n \"Laugh\",\n \"Layers\",\n \"Layers2\",\n \"Layers3\",\n \"LayersMinus\",\n \"LayersPlus\",\n \"Layout\",\n \"LayoutDashboard\",\n \"LayoutGrid\",\n \"LayoutList\",\n \"LayoutPanelLeft\",\n \"LayoutPanelTop\",\n \"LayoutTemplate\",\n \"Leaf\",\n \"LeafyGreen\",\n \"Lectern\",\n \"LensConcave\",\n \"LensConvex\",\n \"LetterText\",\n \"Library\",\n \"LibraryBig\",\n \"LibrarySquare\",\n \"LifeBuoy\",\n \"Ligature\",\n \"Lightbulb\",\n \"LightbulbOff\",\n \"LineChart\",\n \"LineDotRightHorizontal\",\n \"LineSquiggle\",\n \"LineStyle\",\n \"Link\",\n \"Link2\",\n \"Link2Off\",\n \"List\",\n \"ListCheck\",\n \"ListChecks\",\n \"ListChevronsDownUp\",\n \"ListChevronsUpDown\",\n \"ListCollapse\",\n \"ListEnd\",\n \"ListFilter\",\n \"ListFilterPlus\",\n \"ListIndentDecrease\",\n \"ListIndentIncrease\",\n \"ListMinus\",\n \"ListMusic\",\n \"ListOrdered\",\n \"ListPlus\",\n \"ListRestart\",\n \"ListStart\",\n \"ListTodo\",\n \"ListTree\",\n \"ListVideo\",\n \"ListX\",\n \"Loader\",\n \"Loader2\",\n \"LoaderCircle\",\n \"LoaderPinwheel\",\n \"Locate\",\n \"LocateFixed\",\n \"LocateOff\",\n \"LocationEdit\",\n \"Lock\",\n \"LockKeyhole\",\n \"LockKeyholeOpen\",\n \"LockOpen\",\n \"LogIn\",\n \"LogOut\",\n \"Logs\",\n \"Lollipop\",\n \"Luggage\",\n \"MSquare\",\n \"Magnet\",\n \"Mail\",\n \"MailCheck\",\n \"MailMinus\",\n \"MailOpen\",\n \"MailPlus\",\n \"MailQuestion\",\n \"MailQuestionMark\",\n \"MailSearch\",\n \"MailWarning\",\n \"MailX\",\n \"Mailbox\",\n \"Mails\",\n \"Map\",\n \"MapMinus\",\n \"MapPin\",\n \"MapPinCheck\",\n \"MapPinCheckInside\",\n \"MapPinHouse\",\n \"MapPinMinus\",\n \"MapPinMinusInside\",\n \"MapPinOff\",\n \"MapPinPen\",\n \"MapPinPlus\",\n \"MapPinPlusInside\",\n \"MapPinSearch\",\n \"MapPinX\",\n \"MapPinXInside\",\n \"MapPinned\",\n \"MapPlus\",\n \"Mars\",\n \"MarsStroke\",\n \"Martini\",\n \"Maximize\",\n \"Maximize2\",\n \"Medal\",\n \"Megaphone\",\n \"MegaphoneOff\",\n \"Meh\",\n \"MemoryStick\",\n \"Menu\",\n \"MenuSquare\",\n \"Merge\",\n \"MessageCircle\",\n \"MessageCircleCheck\",\n \"MessageCircleCode\",\n \"MessageCircleDashed\",\n \"MessageCircleHeart\",\n \"MessageCircleMore\",\n \"MessageCircleOff\",\n \"MessageCirclePlus\",\n \"MessageCircleQuestion\",\n \"MessageCircleQuestionMark\",\n \"MessageCircleReply\",\n \"MessageCircleWarning\",\n \"MessageCircleX\",\n \"MessageSquare\",\n \"MessageSquareCheck\",\n \"MessageSquareCode\",\n \"MessageSquareDashed\",\n \"MessageSquareDiff\",\n \"MessageSquareDot\",\n \"MessageSquareHeart\",\n \"MessageSquareLock\",\n \"MessageSquareMore\",\n \"MessageSquareOff\",\n \"MessageSquarePlus\",\n \"MessageSquareQuote\",\n \"MessageSquareReply\",\n \"MessageSquareShare\",\n \"MessageSquareText\",\n \"MessageSquareWarning\",\n \"MessageSquareX\",\n \"MessagesSquare\",\n \"Metronome\",\n \"Mic\",\n \"Mic2\",\n \"MicOff\",\n \"MicVocal\",\n \"Microchip\",\n \"Microscope\",\n \"Microwave\",\n \"Milestone\",\n \"Milk\",\n \"MilkOff\",\n \"Minimize\",\n \"Minimize2\",\n \"Minus\",\n \"MinusCircle\",\n \"MinusSquare\",\n \"MirrorRectangular\",\n \"MirrorRound\",\n \"Monitor\",\n \"MonitorCheck\",\n \"MonitorCloud\",\n \"MonitorCog\",\n \"MonitorDot\",\n \"MonitorDown\",\n \"MonitorOff\",\n \"MonitorPause\",\n \"MonitorPlay\",\n \"MonitorSmartphone\",\n \"MonitorSpeaker\",\n \"MonitorStop\",\n \"MonitorUp\",\n \"MonitorX\",\n \"Moon\",\n \"MoonStar\",\n \"MoreHorizontal\",\n \"MoreVertical\",\n \"Motorbike\",\n \"Mountain\",\n \"MountainSnow\",\n \"Mouse\",\n \"MouseLeft\",\n \"MouseOff\",\n \"MousePointer\",\n \"MousePointer2\",\n \"MousePointer2Off\",\n \"MousePointerBan\",\n \"MousePointerClick\",\n \"MousePointerSquareDashed\",\n \"MouseRight\",\n \"Move\",\n \"Move3D\",\n \"MoveDiagonal\",\n \"MoveDiagonal2\",\n \"MoveDown\",\n \"MoveDownLeft\",\n \"MoveDownRight\",\n \"MoveHorizontal\",\n \"MoveLeft\",\n \"MoveRight\",\n \"MoveUp\",\n \"MoveUpLeft\",\n \"MoveUpRight\",\n \"MoveVertical\",\n \"Music\",\n \"Music2\",\n \"Music3\",\n \"Music4\",\n \"Navigation\",\n \"Navigation2\",\n \"Navigation2Off\",\n \"NavigationOff\",\n \"Network\",\n \"Newspaper\",\n \"Nfc\",\n \"NonBinary\",\n \"Notebook\",\n \"NotebookPen\",\n \"NotebookTabs\",\n \"NotebookText\",\n \"NotepadText\",\n \"NotepadTextDashed\",\n \"Nut\",\n \"NutOff\",\n \"Octagon\",\n \"OctagonAlert\",\n \"OctagonMinus\",\n \"OctagonPause\",\n \"OctagonX\",\n \"Omega\",\n \"Option\",\n \"Orbit\",\n \"Origami\",\n \"Outdent\",\n \"Package\",\n \"Package2\",\n \"PackageCheck\",\n \"PackageMinus\",\n \"PackageOpen\",\n \"PackagePlus\",\n \"PackageSearch\",\n \"PackageX\",\n \"PaintBucket\",\n \"PaintRoller\",\n \"Paintbrush\",\n \"Paintbrush2\",\n \"PaintbrushVertical\",\n \"Palette\",\n \"Palmtree\",\n \"Panda\",\n \"PanelBottom\",\n \"PanelBottomClose\",\n \"PanelBottomDashed\",\n \"PanelBottomInactive\",\n \"PanelBottomOpen\",\n \"PanelLeft\",\n \"PanelLeftClose\",\n \"PanelLeftDashed\",\n \"PanelLeftInactive\",\n \"PanelLeftOpen\",\n \"PanelLeftRightDashed\",\n \"PanelRight\",\n \"PanelRightClose\",\n \"PanelRightDashed\",\n \"PanelRightInactive\",\n \"PanelRightOpen\",\n \"PanelTop\",\n \"PanelTopBottomDashed\",\n \"PanelTopClose\",\n \"PanelTopDashed\",\n \"PanelTopInactive\",\n \"PanelTopOpen\",\n \"PanelsLeftBottom\",\n \"PanelsLeftRight\",\n \"PanelsRightBottom\",\n \"PanelsTopBottom\",\n \"PanelsTopLeft\",\n \"Paperclip\",\n \"Parentheses\",\n \"ParkingCircle\",\n \"ParkingCircleOff\",\n \"ParkingMeter\",\n \"ParkingSquare\",\n \"ParkingSquareOff\",\n \"PartyPopper\",\n \"Pause\",\n \"PauseCircle\",\n \"PauseOctagon\",\n \"PawPrint\",\n \"PcCase\",\n \"Pen\",\n \"PenBox\",\n \"PenLine\",\n \"PenOff\",\n \"PenSquare\",\n \"PenTool\",\n \"Pencil\",\n \"PencilLine\",\n \"PencilOff\",\n \"PencilRuler\",\n \"Pentagon\",\n \"Percent\",\n \"PercentCircle\",\n \"PercentDiamond\",\n \"PercentSquare\",\n \"PersonStanding\",\n \"PhilippinePeso\",\n \"Phone\",\n \"PhoneCall\",\n \"PhoneForwarded\",\n \"PhoneIncoming\",\n \"PhoneMissed\",\n \"PhoneOff\",\n \"PhoneOutgoing\",\n \"Pi\",\n \"PiSquare\",\n \"Piano\",\n \"Pickaxe\",\n \"PictureInPicture\",\n \"PictureInPicture2\",\n \"PieChart\",\n \"PiggyBank\",\n \"Pilcrow\",\n \"PilcrowLeft\",\n \"PilcrowRight\",\n \"PilcrowSquare\",\n \"Pill\",\n \"PillBottle\",\n \"Pin\",\n \"PinOff\",\n \"Pipette\",\n \"Pizza\",\n \"Plane\",\n \"PlaneLanding\",\n \"PlaneTakeoff\",\n \"Play\",\n \"PlayCircle\",\n \"PlaySquare\",\n \"Plug\",\n \"Plug2\",\n \"PlugZap\",\n \"PlugZap2\",\n \"Plus\",\n \"PlusCircle\",\n \"PlusSquare\",\n \"PocketKnife\",\n \"Podcast\",\n \"Pointer\",\n \"PointerOff\",\n \"Popcorn\",\n \"Popsicle\",\n \"PoundSterling\",\n \"Power\",\n \"PowerCircle\",\n \"PowerOff\",\n \"PowerSquare\",\n \"Presentation\",\n \"Printer\",\n \"PrinterCheck\",\n \"PrinterX\",\n \"Projector\",\n \"Proportions\",\n \"Puzzle\",\n \"Pyramid\",\n \"QrCode\",\n \"Quote\",\n \"Rabbit\",\n \"Radar\",\n \"Radiation\",\n \"Radical\",\n \"Radio\",\n \"RadioOff\",\n \"RadioReceiver\",\n \"RadioTower\",\n \"Radius\",\n \"Rainbow\",\n \"Rat\",\n \"Ratio\",\n \"Receipt\",\n \"ReceiptCent\",\n \"ReceiptEuro\",\n \"ReceiptIndianRupee\",\n \"ReceiptJapaneseYen\",\n \"ReceiptPoundSterling\",\n \"ReceiptRussianRuble\",\n \"ReceiptSwissFranc\",\n \"ReceiptText\",\n \"ReceiptTurkishLira\",\n \"RectangleCircle\",\n \"RectangleEllipsis\",\n \"RectangleGoggles\",\n \"RectangleHorizontal\",\n \"RectangleVertical\",\n \"Recycle\",\n \"Redo\",\n \"Redo2\",\n \"RedoDot\",\n \"RefreshCcw\",\n \"RefreshCcwDot\",\n \"RefreshCw\",\n \"RefreshCwOff\",\n \"Refrigerator\",\n \"Regex\",\n \"RemoveFormatting\",\n \"Repeat\",\n \"Repeat1\",\n \"Repeat2\",\n \"RepeatOff\",\n \"Replace\",\n \"ReplaceAll\",\n \"Reply\",\n \"ReplyAll\",\n \"Rewind\",\n \"Ribbon\",\n \"Road\",\n \"Rocket\",\n \"RockingChair\",\n \"RollerCoaster\",\n \"Rose\",\n \"Rotate3D\",\n \"RotateCcw\",\n \"RotateCcwKey\",\n \"RotateCcwSquare\",\n \"RotateCw\",\n \"RotateCwSquare\",\n \"Route\",\n \"RouteOff\",\n \"Router\",\n \"Rows\",\n \"Rows2\",\n \"Rows3\",\n \"Rows4\",\n \"Rss\",\n \"Ruler\",\n \"RulerDimensionLine\",\n \"RussianRuble\",\n \"Sailboat\",\n \"Salad\",\n \"Sandwich\",\n \"Satellite\",\n \"SatelliteDish\",\n \"SaudiRiyal\",\n \"Save\",\n \"SaveAll\",\n \"SaveOff\",\n \"Scale\",\n \"Scale3D\",\n \"Scaling\",\n \"Scan\",\n \"ScanBarcode\",\n \"ScanEye\",\n \"ScanFace\",\n \"ScanHeart\",\n \"ScanLine\",\n \"ScanQrCode\",\n \"ScanSearch\",\n \"ScanText\",\n \"ScatterChart\",\n \"School\",\n \"School2\",\n \"Scissors\",\n \"ScissorsLineDashed\",\n \"ScissorsSquare\",\n \"ScissorsSquareDashedBottom\",\n \"Scooter\",\n \"ScreenShare\",\n \"ScreenShareOff\",\n \"Scroll\",\n \"ScrollText\",\n \"Search\",\n \"SearchAlert\",\n \"SearchCheck\",\n \"SearchCode\",\n \"SearchSlash\",\n \"SearchX\",\n \"Section\",\n \"Send\",\n \"SendHorizonal\",\n \"SendHorizontal\",\n \"SendToBack\",\n \"SeparatorHorizontal\",\n \"SeparatorVertical\",\n \"Server\",\n \"ServerCog\",\n \"ServerCrash\",\n \"ServerOff\",\n \"Settings\",\n \"Settings2\",\n \"Shapes\",\n \"Share\",\n \"Share2\",\n \"Sheet\",\n \"Shell\",\n \"ShelvingUnit\",\n \"Shield\",\n \"ShieldAlert\",\n \"ShieldBan\",\n \"ShieldCheck\",\n \"ShieldClose\",\n \"ShieldCog\",\n \"ShieldCogCorner\",\n \"ShieldEllipsis\",\n \"ShieldHalf\",\n \"ShieldMinus\",\n \"ShieldOff\",\n \"ShieldPlus\",\n \"ShieldQuestion\",\n \"ShieldQuestionMark\",\n \"ShieldUser\",\n \"ShieldX\",\n \"Ship\",\n \"ShipWheel\",\n \"Shirt\",\n \"ShoppingBag\",\n \"ShoppingBasket\",\n \"ShoppingCart\",\n \"Shovel\",\n \"ShowerHead\",\n \"Shredder\",\n \"Shrimp\",\n \"Shrink\",\n \"Shrub\",\n \"Shuffle\",\n \"Sidebar\",\n \"SidebarClose\",\n \"SidebarOpen\",\n \"Sigma\",\n \"SigmaSquare\",\n \"Signal\",\n \"SignalHigh\",\n \"SignalLow\",\n \"SignalMedium\",\n \"SignalZero\",\n \"Signature\",\n \"Signpost\",\n \"SignpostBig\",\n \"Siren\",\n \"SkipBack\",\n \"SkipForward\",\n \"Skull\",\n \"Slash\",\n \"SlashSquare\",\n \"Slice\",\n \"Sliders\",\n \"SlidersHorizontal\",\n \"SlidersVertical\",\n \"Smartphone\",\n \"SmartphoneCharging\",\n \"SmartphoneNfc\",\n \"Smile\",\n \"SmilePlus\",\n \"Snail\",\n \"Snowflake\",\n \"SoapDispenserDroplet\",\n \"Sofa\",\n \"SolarPanel\",\n \"SortAsc\",\n \"SortDesc\",\n \"Soup\",\n \"Space\",\n \"Spade\",\n \"Sparkle\",\n \"Sparkles\",\n \"Speaker\",\n \"Speech\",\n \"SpellCheck\",\n \"SpellCheck2\",\n \"Spline\",\n \"SplinePointer\",\n \"Split\",\n \"SplitSquareHorizontal\",\n \"SplitSquareVertical\",\n \"Spool\",\n \"SportShoe\",\n \"Spotlight\",\n \"SprayCan\",\n \"Sprout\",\n \"Square\",\n \"SquareActivity\",\n \"SquareArrowDown\",\n \"SquareArrowDownLeft\",\n \"SquareArrowDownRight\",\n \"SquareArrowLeft\",\n \"SquareArrowOutDownLeft\",\n \"SquareArrowOutDownRight\",\n \"SquareArrowOutUpLeft\",\n \"SquareArrowOutUpRight\",\n \"SquareArrowRight\",\n \"SquareArrowRightEnter\",\n \"SquareArrowRightExit\",\n \"SquareArrowUp\",\n \"SquareArrowUpLeft\",\n \"SquareArrowUpRight\",\n \"SquareAsterisk\",\n \"SquareBottomDashedScissors\",\n \"SquareCenterlineDashedHorizontal\",\n \"SquareCenterlineDashedVertical\",\n \"SquareChartGantt\",\n \"SquareCheck\",\n \"SquareCheckBig\",\n \"SquareChevronDown\",\n \"SquareChevronLeft\",\n \"SquareChevronRight\",\n \"SquareChevronUp\",\n \"SquareCode\",\n \"SquareDashed\",\n \"SquareDashedBottom\",\n \"SquareDashedBottomCode\",\n \"SquareDashedKanban\",\n \"SquareDashedMousePointer\",\n \"SquareDashedText\",\n \"SquareDashedTopSolid\",\n \"SquareDivide\",\n \"SquareDot\",\n \"SquareEqual\",\n \"SquareFunction\",\n \"SquareGanttChart\",\n \"SquareKanban\",\n \"SquareLibrary\",\n \"SquareM\",\n \"SquareMenu\",\n \"SquareMinus\",\n \"SquareMousePointer\",\n \"SquareParking\",\n \"SquareParkingOff\",\n \"SquarePause\",\n \"SquarePen\",\n \"SquarePercent\",\n \"SquarePi\",\n \"SquarePilcrow\",\n \"SquarePlay\",\n \"SquarePlus\",\n \"SquarePower\",\n \"SquareRadical\",\n \"SquareRoundCorner\",\n \"SquareScissors\",\n \"SquareSigma\",\n \"SquareSlash\",\n \"SquareSplitHorizontal\",\n \"SquareSplitVertical\",\n \"SquareSquare\",\n \"SquareStack\",\n \"SquareStar\",\n \"SquareStop\",\n \"SquareTerminal\",\n \"SquareUser\",\n \"SquareUserRound\",\n \"SquareX\",\n \"SquaresExclude\",\n \"SquaresIntersect\",\n \"SquaresSubtract\",\n \"SquaresUnite\",\n \"Squircle\",\n \"SquircleDashed\",\n \"Squirrel\",\n \"Stamp\",\n \"Star\",\n \"StarHalf\",\n \"StarOff\",\n \"Stars\",\n \"StepBack\",\n \"StepForward\",\n \"Stethoscope\",\n \"Sticker\",\n \"StickyNote\",\n \"Stone\",\n \"StopCircle\",\n \"Store\",\n \"StretchHorizontal\",\n \"StretchVertical\",\n \"Strikethrough\",\n \"Subscript\",\n \"Subtitles\",\n \"Sun\",\n \"SunDim\",\n \"SunMedium\",\n \"SunMoon\",\n \"SunSnow\",\n \"Sunrise\",\n \"Sunset\",\n \"Superscript\",\n \"SwatchBook\",\n \"SwissFranc\",\n \"SwitchCamera\",\n \"Sword\",\n \"Swords\",\n \"Syringe\",\n \"Table\",\n \"Table2\",\n \"TableCellsMerge\",\n \"TableCellsSplit\",\n \"TableColumnsSplit\",\n \"TableConfig\",\n \"TableOfContents\",\n \"TableProperties\",\n \"TableRowsSplit\",\n \"Tablet\",\n \"TabletSmartphone\",\n \"Tablets\",\n \"Tag\",\n \"Tags\",\n \"Tally1\",\n \"Tally2\",\n \"Tally3\",\n \"Tally4\",\n \"Tally5\",\n \"Tangent\",\n \"Target\",\n \"Telescope\",\n \"Tent\",\n \"TentTree\",\n \"Terminal\",\n \"TerminalSquare\",\n \"TestTube\",\n \"TestTube2\",\n \"TestTubeDiagonal\",\n \"TestTubes\",\n \"Text\",\n \"TextAlignCenter\",\n \"TextAlignEnd\",\n \"TextAlignJustify\",\n \"TextAlignStart\",\n \"TextCursor\",\n \"TextCursorInput\",\n \"TextInitial\",\n \"TextQuote\",\n \"TextSearch\",\n \"TextSelect\",\n \"TextSelection\",\n \"TextWrap\",\n \"Theater\",\n \"Thermometer\",\n \"ThermometerSnowflake\",\n \"ThermometerSun\",\n \"ThumbsDown\",\n \"ThumbsUp\",\n \"Ticket\",\n \"TicketCheck\",\n \"TicketMinus\",\n \"TicketPercent\",\n \"TicketPlus\",\n \"TicketSlash\",\n \"TicketX\",\n \"Tickets\",\n \"TicketsPlane\",\n \"Timeline\",\n \"Timer\",\n \"TimerOff\",\n \"TimerReset\",\n \"ToggleLeft\",\n \"ToggleRight\",\n \"Toilet\",\n \"ToolCase\",\n \"Toolbox\",\n \"Tornado\",\n \"Torus\",\n \"Touchpad\",\n \"TouchpadOff\",\n \"TowelRack\",\n \"TowerControl\",\n \"ToyBrick\",\n \"Tractor\",\n \"TrafficCone\",\n \"Train\",\n \"TrainFront\",\n \"TrainFrontTunnel\",\n \"TrainTrack\",\n \"TramFront\",\n \"Transgender\",\n \"Trash\",\n \"Trash2\",\n \"TreeDeciduous\",\n \"TreePalm\",\n \"TreePine\",\n \"Trees\",\n \"TrendingDown\",\n \"TrendingUp\",\n \"TrendingUpDown\",\n \"Triangle\",\n \"TriangleAlert\",\n \"TriangleDashed\",\n \"TriangleRight\",\n \"Trophy\",\n \"Truck\",\n \"TruckElectric\",\n \"TurkishLira\",\n \"Turntable\",\n \"Turtle\",\n \"Tv\",\n \"Tv2\",\n \"TvMinimal\",\n \"TvMinimalPlay\",\n \"Type\",\n \"TypeOutline\",\n \"Umbrella\",\n \"UmbrellaOff\",\n \"Underline\",\n \"Undo\",\n \"Undo2\",\n \"UndoDot\",\n \"UnfoldHorizontal\",\n \"UnfoldVertical\",\n \"Ungroup\",\n \"University\",\n \"Unlink\",\n \"Unlink2\",\n \"Unlock\",\n \"UnlockKeyhole\",\n \"Unplug\",\n \"Upload\",\n \"UploadCloud\",\n \"Usb\",\n \"User\",\n \"User2\",\n \"UserCheck\",\n \"UserCheck2\",\n \"UserCircle\",\n \"UserCircle2\",\n \"UserCog\",\n \"UserCog2\",\n \"UserKey\",\n \"UserLock\",\n \"UserMinus\",\n \"UserMinus2\",\n \"UserPen\",\n \"UserPlus\",\n \"UserPlus2\",\n \"UserRound\",\n \"UserRoundCheck\",\n \"UserRoundCog\",\n \"UserRoundKey\",\n \"UserRoundMinus\",\n \"UserRoundPen\",\n \"UserRoundPlus\",\n \"UserRoundSearch\",\n \"UserRoundX\",\n \"UserSearch\",\n \"UserSquare\",\n \"UserSquare2\",\n \"UserStar\",\n \"UserX\",\n \"UserX2\",\n \"Users\",\n \"Users2\",\n \"UsersRound\",\n \"Utensils\",\n \"UtensilsCrossed\",\n \"UtilityPole\",\n \"Van\",\n \"Variable\",\n \"Vault\",\n \"VectorSquare\",\n \"Vegan\",\n \"VenetianMask\",\n \"Venus\",\n \"VenusAndMars\",\n \"Verified\",\n \"Vibrate\",\n \"VibrateOff\",\n \"Video\",\n \"VideoOff\",\n \"Videotape\",\n \"View\",\n \"Voicemail\",\n \"Volleyball\",\n \"Volume\",\n \"Volume1\",\n \"Volume2\",\n \"VolumeOff\",\n \"VolumeX\",\n \"Vote\",\n \"Wallet\",\n \"Wallet2\",\n \"WalletCards\",\n \"WalletMinimal\",\n \"Wallpaper\",\n \"Wand\",\n \"Wand2\",\n \"WandSparkles\",\n \"Warehouse\",\n \"WashingMachine\",\n \"Watch\",\n \"Waves\",\n \"WavesArrowDown\",\n \"WavesArrowUp\",\n \"WavesHorizontal\",\n \"WavesLadder\",\n \"WavesVertical\",\n \"Waypoints\",\n \"Webcam\",\n \"Webhook\",\n \"WebhookOff\",\n \"Weight\",\n \"WeightTilde\",\n \"Wheat\",\n \"WheatOff\",\n \"WholeWord\",\n \"Wifi\",\n \"WifiCog\",\n \"WifiHigh\",\n \"WifiLow\",\n \"WifiOff\",\n \"WifiPen\",\n \"WifiSync\",\n \"WifiZero\",\n \"Wind\",\n \"WindArrowDown\",\n \"Wine\",\n \"WineOff\",\n \"Workflow\",\n \"Worm\",\n \"WrapText\",\n \"Wrench\",\n \"X\",\n \"XCircle\",\n \"XLineTop\",\n \"XOctagon\",\n \"XSquare\",\n \"Zap\",\n \"ZapOff\",\n \"ZodiacAquarius\",\n \"ZodiacAries\",\n \"ZodiacCancer\",\n \"ZodiacCapricorn\",\n \"ZodiacGemini\",\n \"ZodiacLeo\",\n \"ZodiacLibra\",\n \"ZodiacOphiuchus\",\n \"ZodiacPisces\",\n \"ZodiacSagittarius\",\n \"ZodiacScorpio\",\n \"ZodiacTaurus\",\n \"ZodiacVirgo\",\n \"ZoomIn\",\n \"ZoomOut\"\n];\n","export const coolIconKeys: string[] = [\n \"Rows4\", \"Video\",\n \"Plane\", \"LayoutDashboard\", \"LayoutGrid\", \"Square\", \"Snowflake\",\n \"CircleDashed\", \"AlignCenterHorizontal\", \"Disc\", \"Infinity\",\n \"Maximize\", \"Play\", \"Sparkles\", \"Music\",\n \"Wallet\", \"Layout\", \"Zap\", \"Circle\", \"Coffee\",\n \"ImageOff\", \"Sun\", \"Cable\", \"CalendarDays\",\n \"Dices\", \"Shapes\", \"Cloud\", \"Palette\",\n \"CreditCard\", \"Headphones\", \"Egg\", \"Disc3\", \"Flag\",\n \"Bandage\", \"Thermometer\", \"Hexagon\", \"Network\", \"Library\", \"Pizza\",\n \"Cpu\", \"Plug\", \"Files\", \"Globe\", \"SignalZero\",\n \"Gamepad2\", \"CloudLightning\", \"ListTree\", \"Command\"];\n","import React from \"react\";\n\nimport { IconProps } from \"./Icon\";\n\nexport function GitHubIcon(props: IconProps) {\n return <svg xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n fill={\"currentColor\"}\n width={props.size ?? 24}\n height={props.size ?? 24}\n viewBox=\"0 0 24 24\">\n <path\n d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"/>\n </svg>;\n}\n","export function HandleIcon() {\n return <svg width=\"24\" height=\"24\" viewBox=\"0 0 100 100\" fill=\"none\">\n <circle cx=\"28\" cy=\"50\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"28\" cy=\"21\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"71\" cy=\"21\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"71\" cy=\"50\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"71\" cy=\"78\" r=\"9\" fill={\"currentColor\"}/>\n <circle cx=\"28\" cy=\"78\" r=\"9\" fill={\"currentColor\"}/>\n </svg>;\n}\n","import React, { memo, useMemo } from \"react\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { BoardSortableList } from \"./BoardSortableList\";\nimport { BoardColumnTitle } from \"./BoardColumnTitle\";\nimport { BoardItem, BoardItemViewProps } from \"./board_types\";\nimport {\n IconButton\n} from \"../../components\";\nimport { cls } from \"../../util\";\nimport { iconSize, PlusIcon } from \"../../icons\";\n\nexport interface BoardColumnProps<T> {\n id: string;\n title: string;\n items: BoardItem<T>[];\n index: number;\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n isDragging: boolean;\n isDragOverColumn: boolean;\n allowReorder?: boolean;\n loading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n onAddItem?: () => void;\n totalCount?: number;\n color?: any;\n style?: React.CSSProperties;\n}\n\nexport const BoardColumn = memo(function BoardColumn<T>({\n id,\n title,\n items,\n ItemComponent,\n isDragging,\n isDragOverColumn,\n allowReorder = false,\n loading = false,\n hasMore = false,\n onLoadMore,\n onAddItem,\n totalCount,\n color,\n style\n}: BoardColumnProps<T>) {\n const {\n setNodeRef,\n attributes,\n listeners,\n isDragging: isColumnBeingDragged,\n transform,\n transition\n } = useSortable({\n id,\n data: { type: \"COLUMN\" },\n disabled: !allowReorder\n });\n\n const combinedStyle = useMemo(() => ({\n ...style,\n transform: CSS.Translate.toString(transform),\n transition,\n zIndex: isColumnBeingDragged ? 2 : 1\n }), [style, transform, transition, isColumnBeingDragged]);\n\n const dragListeners = allowReorder ? listeners : {};\n\n const columnClassName = useMemo(() => cls(\n \"border h-full w-80 min-w-80 mx-2 flex flex-col rounded-md border-surface-200 dark:border-surface-800\",\n isColumnBeingDragged ? \"ring-2 ring-primary\" : \"\"\n ), [isColumnBeingDragged]);\n\n const headerClassName = useMemo(() => cls(\n \"flex items-center justify-between px-2 rounded-t-md transition-colors duration-200 ease-in-out\",\n isColumnBeingDragged\n ? \"bg-surface-100 dark:bg-surface-700\"\n : \"bg-surface-50 hover:bg-surface-100 dark:bg-surface-800 dark:hover:bg-surface-700\",\n allowReorder ? \"cursor-grab\" : \"\"\n ), [isColumnBeingDragged, allowReorder]);\n\n const itemIds = useMemo(() => items.map(i => i.id), [items]);\n\n return (\n <div\n ref={setNodeRef}\n style={combinedStyle}\n {...attributes}\n className={columnClassName}\n >\n <div\n {...dragListeners}\n className={headerClassName}\n >\n <div className=\"flex items-center gap-2\">\n <BoardColumnTitle aria-label={`${title} item list`} color={color}>\n {title}\n </BoardColumnTitle>\n {totalCount !== undefined && (\n <span className=\"text-xs text-surface-500 dark:text-surface-400\">\n {totalCount}\n </span>\n )}\n </div>\n {onAddItem && (\n <IconButton\n size=\"small\"\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onAddItem();\n }}\n className=\"opacity-60 hover:opacity-100\"\n >\n <PlusIcon size={iconSize.small}/>\n </IconButton>\n )}\n </div>\n <SortableContext\n items={itemIds}\n strategy={verticalListSortingStrategy}\n >\n <BoardSortableList\n columnId={id}\n items={items}\n ItemComponent={ItemComponent}\n isDragging={isDragging}\n isDragOverColumn={isDragOverColumn}\n loading={loading}\n hasMore={hasMore}\n onLoadMore={onLoadMore}\n />\n </SortableContext>\n </div>\n );\n}) as <T>(props: BoardColumnProps<T>) => React.ReactElement;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragOverlay,\n DragStartEvent,\n PointerSensor,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext } from \"@dnd-kit/sortable\";\nimport { BoardColumn } from \"./BoardColumn\";\nimport { BoardItem, BoardItemMap, BoardItemViewProps, BoardProps } from \"./board_types\";\nimport { cls } from \"../../util\";\n\nexport function Board<T, COLUMN extends string>({\n data,\n columns: columnsProp,\n columnLabels,\n columnColors,\n className,\n assignColumn,\n allowColumnReorder = false,\n onColumnReorder,\n onItemsReorder,\n ItemComponent,\n columnLoadingState,\n onLoadMoreColumn,\n onAddItemToColumn,\n AddColumnComponent\n}: BoardProps<T, COLUMN>) {\n\n const [activeItem, setActiveItem] = useState<BoardItem<T> | null>(null);\n const [activeColumn, setActiveColumn] = useState<COLUMN | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [dragOverColumnId, setDragOverColumnId] = useState<string | null>(null);\n\n const grabOffsetRef = useRef<{ x: number; y: number }>({ x: 0, y: 0 });\n const [overlayPos, setOverlayPos] = useState<{ x: number; y: number } | null>(null);\n\n const handleMouseMove = useCallback((e: MouseEvent) => {\n setOverlayPos({\n x: e.clientX - grabOffsetRef.current.x,\n y: e.clientY - grabOffsetRef.current.y\n });\n }, []);\n\n useEffect(() => {\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"pointermove\", handleMouseMove);\n };\n }, [handleMouseMove]);\n\n const [itemMapState, setItemMapState] = useState<BoardItemMap<T>>(() => {\n const dataColumnMap: Record<string, COLUMN> = data.reduce((prev, item: BoardItem<T>) => ({\n ...prev,\n [item.id]: assignColumn(item)\n }), {});\n return columnsProp.reduce(\n (previous: BoardItemMap<T>, column: COLUMN) => ({\n ...previous,\n [column]: data.filter((item: BoardItem<T>) => dataColumnMap[item.id] === column)\n }),\n {} as BoardItemMap<T>\n );\n });\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5\n }\n })\n );\n\n useEffect(() => {\n if (isDragging) return;\n\n const dataColumnMap: Record<string, COLUMN> = data.reduce((prev, item) => ({\n ...prev,\n [item.id]: assignColumn(item)\n }), {});\n\n const newItemMap = columnsProp.reduce(\n (previous: BoardItemMap<T>, column: COLUMN) => ({\n ...previous,\n [column]: data.filter((item: BoardItem<T>) => dataColumnMap[item.id] === column)\n }),\n {} as BoardItemMap<T>\n );\n\n setItemMapState(prevMap => {\n let changed = false;\n\n for (const col of columnsProp) {\n const prevItems = prevMap[col] ?? [];\n const newItems = newItemMap[col] ?? [];\n\n if (prevItems.length !== newItems.length) {\n changed = true;\n continue;\n }\n for (let i = 0; i < prevItems.length; i++) {\n if (prevItems[i].id !== newItems[i].id || prevItems[i].data !== newItems[i].data) {\n changed = true;\n break;\n }\n }\n }\n\n if (!changed) {\n return prevMap;\n }\n\n const updated: BoardItemMap<T> = {};\n for (const col of columnsProp) {\n const prevItems = prevMap[col] ?? [];\n const newItems = newItemMap[col] ?? [];\n\n const prevById = new Map<string, BoardItem<T>>();\n for (const item of prevItems) {\n prevById.set(item.id, item);\n }\n\n updated[col] = newItems.map(newItem => {\n const prev = prevById.get(newItem.id);\n if (prev && prev.data === newItem.data) {\n return prev;\n }\n return newItem;\n });\n }\n return updated;\n });\n }, [data, columnsProp, assignColumn]);\n\n const findColumnByItemId = (id: string): string | undefined => {\n return Object.keys(itemMapState).find(col => itemMapState[col]?.some(i => i.id === id));\n };\n\n const handleDragStart = (event: DragStartEvent) => {\n setIsDragging(true);\n setDragOverColumnId(null);\n const { active } = event;\n\n const activatorEvt = event.activatorEvent as PointerEvent | MouseEvent;\n if (activatorEvt) {\n const target = activatorEvt.target as HTMLElement;\n const draggableEl = target.closest<HTMLElement>(\"[role='button']\") ?? target;\n const rect = draggableEl.getBoundingClientRect();\n grabOffsetRef.current = {\n x: activatorEvt.clientX - rect.left,\n y: activatorEvt.clientY - rect.top\n };\n setOverlayPos({\n x: rect.left,\n y: rect.top\n });\n }\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"pointermove\", handleMouseMove);\n\n if (active.data.current?.type === \"COLUMN\") {\n const columnId = active.id as string;\n const column = columnsProp.find(col => String(col) === columnId);\n if (column) {\n setActiveColumn(column);\n }\n } else if (active.data.current?.type === \"ITEM\") {\n const columnId = findColumnByItemId(active.id as string);\n if (columnId) {\n const item = itemMapState[columnId]?.find(i => i.id === active.id);\n setActiveItem(item || null);\n }\n }\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n const {\n active,\n over\n } = event;\n\n if (!over) {\n setDragOverColumnId(null);\n return;\n }\n\n let currentHoveredColumnId: string | null = null;\n const overId = over.id as string;\n const overDataType = over.data.current?.type as string | undefined;\n\n if (overDataType === \"ITEM-LIST\" || overDataType === \"COLUMN\") {\n currentHoveredColumnId = overId;\n } else if (overDataType === \"ITEM\") {\n currentHoveredColumnId = findColumnByItemId(overId) || null;\n } else if (columnsProp.includes(overId as COLUMN)) {\n currentHoveredColumnId = overId;\n }\n\n setDragOverColumnId(currentHoveredColumnId);\n\n if (active.data.current?.type !== \"ITEM\") {\n return;\n }\n\n const activeId = active.id as string;\n const activeColumn = findColumnByItemId(activeId);\n let overColumnForMove = findColumnByItemId(overId);\n\n if (!overColumnForMove && overDataType === \"ITEM-LIST\") {\n overColumnForMove = overId;\n }\n if (!overColumnForMove && columnsProp.includes(overId as COLUMN)) {\n overColumnForMove = overId;\n }\n\n if (!activeColumn || !overColumnForMove) return;\n if (activeColumn === overColumnForMove) return;\n\n if (itemMapState[overColumnForMove]?.some(i => i.id === activeId)) {\n return;\n }\n\n setItemMapState(currentMap => {\n const activeItems = [...(currentMap[activeColumn] || [])];\n const overItems = [...(currentMap[overColumnForMove!] || [])];\n const activeIndex = activeItems.findIndex(i => i.id === activeId);\n\n if (activeIndex === -1) return currentMap;\n\n let overIndex;\n if (overDataType === \"ITEM-LIST\" || (columnsProp.includes(overId as COLUMN) && !findColumnByItemId(overId))) {\n overIndex = overItems.length;\n } else {\n overIndex = overItems.findIndex(i => i.id === overId);\n if (overIndex !== -1) {\n const activeTop = active.rect.current.translated?.top ?? 0;\n const activeHeight = active.rect.current.translated?.height ?? 0;\n const activeCenter = activeTop + activeHeight / 2;\n\n const overTop = over?.rect.top ?? 0;\n const overHeight = over?.rect.height ?? 0;\n const overCenter = overTop + overHeight / 2;\n\n const isBelowOverItem = activeCenter > overCenter;\n\n const modifier = isBelowOverItem ? 1 : 0;\n overIndex = overIndex >= 0 ? overIndex + modifier : overItems.length;\n } else {\n overIndex = overItems.length;\n }\n }\n\n const newItemMap = { ...currentMap };\n const [moved] = activeItems.splice(activeIndex, 1);\n overItems.splice(overIndex, 0, moved);\n newItemMap[activeColumn] = activeItems;\n newItemMap[overColumnForMove!] = overItems;\n return newItemMap;\n });\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const {\n active,\n over\n } = event;\n\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"pointermove\", handleMouseMove);\n setOverlayPos(null);\n\n setIsDragging(false);\n setActiveItem(null);\n setActiveColumn(null);\n setDragOverColumnId(null);\n\n if (!over) return;\n\n const activeId = active.id as string;\n const overId = over.id as string;\n\n if (active.data.current?.type === \"COLUMN\") {\n if (activeId !== overId) {\n const oldIndex = columnsProp.indexOf(activeId as COLUMN);\n const newIndex = columnsProp.indexOf(overId as COLUMN);\n if (oldIndex !== -1 && newIndex !== -1) {\n const reordered = arrayMove(columnsProp, oldIndex, newIndex);\n onColumnReorder?.(reordered);\n }\n }\n return;\n }\n\n const activeCol = findColumnByItemId(activeId) as COLUMN | undefined;\n let overCol = findColumnByItemId(overId) as COLUMN | undefined;\n\n if (!overCol) {\n const overDataType = over.data.current?.type;\n if (overDataType === \"ITEM-LIST\" || columnsProp.includes(overId as COLUMN)) {\n overCol = overId as COLUMN;\n }\n }\n\n if (!activeCol || !overCol) return;\n\n const isSameColumn = activeCol === overCol;\n const activeItems = itemMapState[activeCol] || [];\n const overItems = itemMapState[overCol] || [];\n\n const activeIndex = activeItems.findIndex(i => i.id === activeId);\n\n let overIndex;\n if (over.id === overCol) {\n overIndex = overItems.length;\n } else {\n overIndex = overItems.findIndex(i => i.id === overId);\n }\n\n if (activeIndex === -1 || overIndex === -1) return;\n\n let finalItems: BoardItem<T>[] = [];\n\n if (isSameColumn) {\n finalItems = arrayMove(activeItems, activeIndex, overIndex);\n } else {\n const newActiveItems = [...activeItems];\n const newOverItems = [...overItems];\n const [moved] = newActiveItems.splice(activeIndex, 1);\n newOverItems.splice(overIndex, 0, moved);\n finalItems = [...newActiveItems, ...newOverItems];\n }\n\n const fullFlattenedList: BoardItem<T>[] = [];\n columnsProp.forEach(col => {\n if (col === activeCol) {\n if (isSameColumn) {\n fullFlattenedList.push(...finalItems);\n } else {\n fullFlattenedList.push(...activeItems.filter(i => i.id !== activeId));\n }\n } else if (col === overCol) {\n const newOverItems = [...overItems];\n const [moved] = [...activeItems].splice(activeIndex, 1);\n newOverItems.splice(overIndex, 0, moved);\n fullFlattenedList.push(...newOverItems);\n } else {\n fullFlattenedList.push(...(itemMapState[col] || []));\n }\n });\n\n onItemsReorder?.(fullFlattenedList, {\n itemId: activeId,\n sourceColumn: activeCol,\n targetColumn: overCol\n });\n };\n\n return (\n <DndContext\n sensors={sensors}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n <div className={cls(\"flex flex-row h-full w-full overflow-x-auto p-4 select-none items-start\", className)}>\n <SortableContext items={columnsProp}>\n {columnsProp.map((col, index) => {\n const colItems = itemMapState[col] || [];\n const loadingState = columnLoadingState?.[col];\n return (\n <BoardColumn\n key={String(col)}\n id={String(col)}\n title={columnLabels?.[col] ?? String(col)}\n items={colItems}\n index={index}\n ItemComponent={ItemComponent}\n isDragging={isDragging}\n isDragOverColumn={dragOverColumnId === String(col)}\n allowReorder={allowColumnReorder}\n loading={loadingState?.loading}\n hasMore={loadingState?.hasMore}\n totalCount={loadingState?.totalCount}\n color={columnColors?.[col]}\n onLoadMore={onLoadMoreColumn ? () => onLoadMoreColumn(col) : undefined}\n onAddItem={onAddItemToColumn ? () => onAddItemToColumn(col) : undefined}\n />\n );\n })}\n </SortableContext>\n {AddColumnComponent}\n </div>\n\n {typeof document !== \"undefined\" && createPortal(\n <DragOverlay dropAnimation={null}>\n {isDragging && activeItem && (\n <div style={{\n position: \"fixed\",\n left: overlayPos?.x ?? 0,\n top: overlayPos?.y ?? 0,\n pointerEvents: \"none\",\n zIndex: 9999\n }}>\n <ItemComponent\n item={activeItem}\n isDragging={true}\n isClone={true}\n />\n </div>\n )}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n );\n}\n","import React from \"react\";\nimport { Board } from \"./Kanban/Board\";\nimport { BoardItem, BoardItemViewProps, ColumnLoadingState } from \"./Kanban/board_types\";\n\nexport type KanbanViewProps<T, COLUMN extends string> = {\n columns: COLUMN[];\n columnLabels?: Record<COLUMN, string>;\n columnColors?: Record<COLUMN, any>;\n className?: string;\n assignColumn: (item: BoardItem<T>) => COLUMN;\n allowColumnReorder?: boolean;\n onColumnReorder?: (columns: COLUMN[]) => void;\n onItemsReorder?: (\n items: BoardItem<T>[],\n moveInfo?: {\n itemId: string;\n sourceColumn: COLUMN;\n targetColumn: COLUMN;\n }\n ) => void;\n ItemComponent: React.ComponentType<BoardItemViewProps<T>>;\n columnLoadingState?: ColumnLoadingState;\n onLoadMoreColumn?: (column: COLUMN) => void;\n onAddItemToColumn?: (column: COLUMN) => void;\n AddColumnComponent?: React.ReactNode;\n data: BoardItem<T>[];\n};\n\nexport function KanbanView<T, COLUMN extends string>(props: KanbanViewProps<T, COLUMN>) {\n return <Board {...props} />;\n}\nexport type { BoardItem, BoardItemViewProps, ColumnLoadingState };\n","\"use client\";\nimport React, { useCallback, useState } from \"react\";\nimport { LayoutList, Table2, LayoutGrid, Kanban, Settings2 } from \"lucide-react\";\nimport { iconSize } from \"../../icons/Icon\";\nimport { SearchBar } from \"../../components/SearchBar\";\nimport { Popover } from \"../../components/Popover\";\nimport { ToggleButtonGroup } from \"../../components/ToggleButtonGroup\";\nimport type { ToggleButtonOption } from \"../../components/ToggleButtonGroup\";\nimport { Typography } from \"../../components/Typography\";\nimport { Select, SelectItem } from \"../../components/Select\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { cls } from \"../../util\";\nimport type { CollectionViewMode, CollectionViewSize, KanbanPropertyOption } from \"./CollectionViewTypes\";\n\n/**\n * Props for the {@link CollectionViewToolbar} component.\n * @group Collection View\n */\nexport type CollectionViewToolbarProps = {\n viewMode: CollectionViewMode;\n onViewModeChange?: (mode: CollectionViewMode) => void;\n enabledViews?: CollectionViewMode[];\n size?: CollectionViewSize;\n onSizeChange?: (size: CollectionViewSize) => void;\n searchString?: string;\n onSearchChange?: (search?: string) => void;\n loading?: boolean;\n actionsStart?: React.ReactNode;\n actionsEnd?: React.ReactNode;\n compact?: boolean;\n kanbanPropertyOptions?: KanbanPropertyOption[];\n selectedKanbanProperty?: string;\n onKanbanPropertyChange?: (property: string) => void;\n};\n\nconst VIEW_MODE_ICONS: Record<CollectionViewMode, React.ReactNode> = {\n list: <LayoutList size={iconSize.small} />,\n table: <Table2 size={iconSize.small} />,\n cards: <LayoutGrid size={iconSize.small} />,\n kanban: <Kanban size={iconSize.small} />,\n};\n\nconst VIEW_MODE_LABELS: Record<CollectionViewMode, string> = {\n list: \"List\",\n table: \"Table\",\n cards: \"Cards\",\n kanban: \"Board\",\n};\n\nconst SIZE_LABELS: Record<CollectionViewSize, string> = {\n xs: \"Extra Small\",\n s: \"Small\",\n m: \"Medium\",\n l: \"Large\",\n xl: \"Extra Large\",\n};\n\n/**\n * Toolbar for the headless CollectionView.\n *\n * Renders a search bar, view mode toggle (popover with toggle button group),\n * optional size selector, optional kanban property selector, and action slots.\n *\n * @group Collection View\n */\nexport function CollectionViewToolbar({\n viewMode,\n onViewModeChange,\n enabledViews = [\"list\", \"table\", \"cards\", \"kanban\"],\n size = \"m\",\n onSizeChange,\n searchString,\n onSearchChange,\n loading,\n actionsStart,\n actionsEnd,\n compact,\n kanbanPropertyOptions,\n selectedKanbanProperty,\n onKanbanPropertyChange,\n}: CollectionViewToolbarProps) {\n const [popoverOpen, setPopoverOpen] = useState(false);\n\n const viewOptions: ToggleButtonOption<CollectionViewMode>[] = enabledViews.map((mode) => ({\n value: mode,\n label: VIEW_MODE_LABELS[mode],\n icon: VIEW_MODE_ICONS[mode],\n }));\n\n const handleViewModeChange = useCallback(\n (mode: CollectionViewMode) => {\n onViewModeChange?.(mode);\n },\n [onViewModeChange]\n );\n\n const handleSizeChange = useCallback(\n (value: string) => {\n onSizeChange?.(value as CollectionViewSize);\n },\n [onSizeChange]\n );\n\n const handleKanbanPropertyChange = useCallback(\n (value: string) => {\n onKanbanPropertyChange?.(value);\n },\n [onKanbanPropertyChange]\n );\n\n const showViewToggle = onViewModeChange && enabledViews.length > 1;\n const showSizeSelector = onSizeChange && viewMode !== \"kanban\";\n const showKanbanSelector =\n kanbanPropertyOptions &&\n kanbanPropertyOptions.length > 0 &&\n viewMode === \"kanban\" &&\n onKanbanPropertyChange;\n const showPopover = showViewToggle || showSizeSelector || showKanbanSelector;\n\n return (\n <div\n className={cls(\n \"flex items-center gap-2 px-2 flex-shrink-0\",\n \"border-b border-surface-200 dark:border-surface-800\",\n compact ? \"py-0.5 gap-1\" : \"py-1\"\n )}\n >\n {actionsStart}\n\n {onSearchChange && (\n <SearchBar\n onTextSearch={onSearchChange}\n size=\"small\"\n initialValue={searchString}\n loading={loading}\n expandable\n />\n )}\n\n <div className=\"flex-1\" />\n\n {actionsEnd}\n\n {showPopover && (\n <Popover\n open={popoverOpen}\n onOpenChange={setPopoverOpen}\n side=\"bottom\"\n align=\"end\"\n trigger={\n <IconButton\n size=\"small\"\n onClick={() => setPopoverOpen((prev) => !prev)}\n >\n <Settings2 size={iconSize.small} />\n </IconButton>\n }\n >\n <div className=\"p-3 min-w-[200px] flex flex-col gap-3\">\n {showViewToggle && (\n <div className=\"flex flex-col gap-1\">\n <Typography\n variant=\"caption\"\n color=\"secondary\"\n className=\"font-medium uppercase tracking-wider\"\n >\n View\n </Typography>\n <ToggleButtonGroup<CollectionViewMode>\n value={viewMode}\n onValueChange={handleViewModeChange}\n options={viewOptions}\n />\n </div>\n )}\n\n {showSizeSelector && (\n <div className=\"flex flex-col gap-1\">\n <Typography\n variant=\"caption\"\n color=\"secondary\"\n className=\"font-medium uppercase tracking-wider\"\n >\n Size\n </Typography>\n <Select\n value={size}\n onValueChange={handleSizeChange}\n size=\"small\"\n >\n {(Object.keys(SIZE_LABELS) as CollectionViewSize[]).map(\n (sizeKey) => (\n <SelectItem key={sizeKey} value={sizeKey}>\n {SIZE_LABELS[sizeKey]}\n </SelectItem>\n )\n )}\n </Select>\n </div>\n )}\n\n {showKanbanSelector && (\n <div className=\"flex flex-col gap-1\">\n <Typography\n variant=\"caption\"\n color=\"secondary\"\n className=\"font-medium uppercase tracking-wider\"\n >\n Group by\n </Typography>\n <Select\n value={selectedKanbanProperty}\n onValueChange={handleKanbanPropertyChange}\n size=\"small\"\n >\n {kanbanPropertyOptions.map((option) => (\n <SelectItem key={option.key} value={option.key}>\n {option.label}\n </SelectItem>\n ))}\n </Select>\n </div>\n )}\n </div>\n </Popover>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { ImageIcon } from \"lucide-react\";\nimport { cls } from \"../../util\";\nimport { Typography } from \"../../components/Typography\";\nimport { Chip } from \"../../components/Chip\";\nimport { BooleanSwitch } from \"../../components/BooleanSwitch\";\nimport { Markdown } from \"../../components/Markdown\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { iconSize } from \"../../icons\";\nimport type { CellRendererProps, CollectionPropertyConfig, CollectionEnumValueConfig } from \"./CollectionViewTypes\";\n\n// ——— Helpers ———\n\n/**\n * Resolve an enum key to its display label and optional color.\n */\nfunction resolveEnumLabel(\n enumValues: CollectionPropertyConfig[\"enum\"],\n value: unknown\n): { label: string; color?: string } | undefined {\n if (!enumValues) return undefined;\n const key = String(value);\n if (enumValues instanceof Map) {\n const config: CollectionEnumValueConfig | undefined = enumValues.get(value as string | number);\n if (!config) return undefined;\n if (typeof config === \"string\") return { label: config };\n return { label: config.label, color: config.color };\n }\n const config: CollectionEnumValueConfig | undefined = enumValues[key];\n if (!config) return undefined;\n if (typeof config === \"string\") return { label: config };\n return { label: config.label, color: config.color };\n}\n\n/**\n * Format a date value using Intl.DateTimeFormat.\n */\nfunction formatDate(value: unknown, includeTime: boolean): string {\n if (value == null) return \"—\";\n const date = value instanceof Date ? value : new Date(String(value));\n if (isNaN(date.getTime())) return String(value);\n\n const options: Intl.DateTimeFormatOptions = includeTime\n ? { year: \"numeric\", month: \"short\", day: \"numeric\", hour: \"2-digit\", minute: \"2-digit\" }\n : { year: \"numeric\", month: \"short\", day: \"numeric\" };\n\n return new Intl.DateTimeFormat(undefined, options).format(date);\n}\n\n/**\n * Type guard for geopoint-like objects.\n */\nfunction isGeoPoint(value: unknown): value is { lat: number; lng: number } {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n return typeof obj.lat === \"number\" && typeof obj.lng === \"number\";\n}\n\n// ——— Component ———\n\n/**\n * Default cell renderer for the headless CollectionView.\n * Handles all built-in property types without depending on any Rebase core types.\n *\n * @group Preview components\n */\nexport function DefaultCellRenderer({\n row,\n propertyKey,\n property,\n value,\n size,\n width,\n height\n}: CellRendererProps) {\n\n // 1. Null / undefined → em-dash\n if (value === null || value === undefined) {\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n —\n </Typography>\n );\n }\n\n // 2. Custom Preview component override\n if (property.Preview) {\n const PreviewComponent = property.Preview;\n return (\n <PreviewComponent\n row={row}\n propertyKey={propertyKey}\n property={property}\n value={value}\n size={size}\n width={width}\n height={height}\n />\n );\n }\n\n // ——— Type-specific renderers ———\n\n switch (property.type) {\n case \"string\":\n return renderString(property, value);\n\n case \"number\":\n return renderNumber(property, value);\n\n case \"boolean\":\n return renderBoolean(value);\n\n case \"date\":\n return renderDate(property, value);\n\n case \"array\":\n return renderArray(property, value);\n\n case \"map\":\n return renderMap(value);\n\n case \"reference\":\n case \"relation\":\n return renderReference(value);\n\n case \"geopoint\":\n return renderGeopoint(value);\n\n default:\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n noWrap\n className=\"px-1\">\n {JSON.stringify(value)}\n </Typography>\n );\n }\n}\n\n// ——— Per-type render functions ———\n\nfunction renderString(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n const strValue = String(value);\n\n // Enum → Chip\n if (property.enum) {\n const resolved = resolveEnumLabel(property.enum, value);\n return (\n <Chip size=\"small\"\n colorScheme={resolved?.color ? { color: resolved.color, text: \"#fff\" } : undefined}>\n {resolved?.label ?? strValue}\n </Chip>\n );\n }\n\n // Preview as tag → Chip\n if (property.previewAsTag) {\n return (\n <Chip size=\"small\">\n {strValue}\n </Chip>\n );\n }\n\n // URL → clickable link\n if (property.url) {\n const href = typeof property.url === \"string\" ? property.url : strValue;\n return (\n <Typography variant=\"body2\"\n noWrap\n component=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cls(\n \"px-1 text-primary hover:underline cursor-pointer\"\n )}>\n {strValue}\n </Typography>\n );\n }\n\n // Email → mailto link\n if (property.email) {\n return (\n <Typography variant=\"body2\"\n noWrap\n component=\"a\"\n href={`mailto:${strValue}`}\n className={cls(\n \"px-1 text-primary hover:underline cursor-pointer\"\n )}>\n {strValue}\n </Typography>\n );\n }\n\n // Markdown → rendered markdown\n if (property.markdown) {\n return (\n <div className=\"px-1 max-h-[100px] overflow-hidden\">\n <Markdown source={strValue} size=\"small\" />\n </div>\n );\n }\n\n // Storage → image preview with fallback\n if (property.storage) {\n return (\n <div className={cls(\n \"px-1 flex items-center justify-center\",\n \"w-[40px] h-[40px] rounded overflow-hidden\"\n )}>\n {strValue ? (\n <img\n src={strValue}\n alt=\"\"\n className=\"w-full h-full object-cover\"\n onError={(e) => {\n const target = e.currentTarget;\n target.style.display = \"none\";\n const fallback = target.nextElementSibling;\n if (fallback instanceof HTMLElement) {\n fallback.style.display = \"flex\";\n }\n }}\n />\n ) : null}\n <div className={cls(\n \"w-full h-full items-center justify-center rounded\",\n \"bg-surface-100 dark:bg-surface-800 text-text-secondary dark:text-text-secondary-dark\",\n strValue ? \"hidden\" : \"flex\"\n )}>\n <ImageIcon size={iconSize.small} />\n </div>\n </div>\n );\n }\n\n // Default string → truncated text\n return (\n <Tooltip title={strValue.length > 50 ? strValue : undefined}\n side=\"bottom\">\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1\">\n {strValue}\n </Typography>\n </Tooltip>\n );\n}\n\nfunction renderNumber(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n const numStr = String(value);\n\n // Enum → Chip\n if (property.enum) {\n const resolved = resolveEnumLabel(property.enum, value);\n return (\n <Chip size=\"small\"\n colorScheme={resolved?.color ? { color: resolved.color, text: \"#fff\" } : undefined}>\n {resolved?.label ?? numStr}\n </Chip>\n );\n }\n\n // Default → right-aligned\n return (\n <Typography variant=\"body2\"\n noWrap\n align=\"right\"\n className=\"px-1 tabular-nums\">\n {numStr}\n </Typography>\n );\n}\n\nfunction renderBoolean(value: unknown): React.ReactElement {\n return (\n <div className=\"px-1 flex items-center\">\n <BooleanSwitch value={!!value}\n size=\"small\"\n disabled />\n </div>\n );\n}\n\nfunction renderDate(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n const includeTime = property.mode === \"date_time\";\n const formatted = formatDate(value, includeTime);\n\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1 tabular-nums\">\n {formatted}\n </Typography>\n );\n}\n\nfunction renderArray(property: CollectionPropertyConfig, value: unknown): React.ReactElement {\n if (!Array.isArray(value)) {\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n —\n </Typography>\n );\n }\n\n // Array of enum values → row of chips\n if (property.of?.enum && value.length > 0) {\n return (\n <div className=\"px-1 flex flex-wrap gap-1 overflow-hidden\">\n {value.map((item, i) => {\n const resolved = resolveEnumLabel(property.of!.enum, item);\n return (\n <Chip key={i}\n size=\"smallest\"\n colorScheme={resolved?.color ? { color: resolved.color, text: \"#fff\" } : undefined}>\n {resolved?.label ?? String(item)}\n </Chip>\n );\n })}\n </div>\n );\n }\n\n // Array of strings → comma-separated\n if (value.length > 0 && value.every((item) => typeof item === \"string\")) {\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1\">\n {(value as string[]).join(\", \")}\n </Typography>\n );\n }\n\n // Generic array → item count\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n {value.length} {value.length === 1 ? \"item\" : \"items\"}\n </Typography>\n );\n}\n\nfunction renderMap(value: unknown): React.ReactElement {\n if (typeof value !== \"object\" || value === null) {\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n —\n </Typography>\n );\n }\n\n const fieldCount = Object.keys(value as Record<string, unknown>).length;\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n {fieldCount} {fieldCount === 1 ? \"field\" : \"fields\"}\n </Typography>\n );\n}\n\nfunction renderReference(value: unknown): React.ReactElement {\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1\">\n {String(value)}\n </Typography>\n );\n}\n\nfunction renderGeopoint(value: unknown): React.ReactElement {\n if (isGeoPoint(value)) {\n return (\n <Typography variant=\"body2\"\n noWrap\n className=\"px-1 tabular-nums\">\n {value.lat.toFixed(6)}, {value.lng.toFixed(6)}\n </Typography>\n );\n }\n\n return (\n <Typography variant=\"body2\"\n color=\"secondary\"\n className=\"px-1\">\n {String(value)}\n </Typography>\n );\n}\n","/**\n * Traverse an object by dot-separated path.\n * Returns `undefined` if any segment is missing.\n */\nexport function getValueInPath(obj: Record<string, unknown> | undefined, path: string): unknown {\n if (!obj) return undefined;\n const parts = path.split(\".\");\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { VirtualTable } from \"../../components/VirtualTable/VirtualTable\";\nimport type { VirtualTableColumn, CellRendererParams, OnVirtualTableColumnResizeParams } from \"../../components/VirtualTable/VirtualTableProps\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionViewSize,\n CollectionSelectionController,\n CellRendererProps,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\nconst DEFAULT_COLUMN_WIDTHS: Record<string, number> = {\n string: 200,\n number: 140,\n date: 160,\n boolean: 120,\n array: 200,\n map: 200,\n reference: 200,\n relation: 200,\n geopoint: 180,\n};\nconst FALLBACK_COLUMN_WIDTH = 200;\n\nconst SIZE_TO_ROW_HEIGHT: Record<CollectionViewSize, number> = {\n xs: 36,\n s: 44,\n m: 52,\n l: 64,\n xl: 80,\n};\n\nconst SORTABLE_TYPES = new Set([\"string\", \"number\", \"date\"]);\n\ntype RendererSize = \"tiny\" | \"small\" | \"medium\" | \"large\";\n\nconst VIEW_SIZE_TO_RENDERER_SIZE: Record<CollectionViewSize, RendererSize> = {\n xs: \"tiny\",\n s: \"small\",\n m: \"medium\",\n l: \"large\",\n xl: \"large\",\n};\n\n/**\n * Props for the {@link CollectionTableView} component.\n * @group Collection View\n */\nexport type CollectionTableViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n displayedColumnIds?: string[];\n idProperty?: string;\n titleProperty?: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n size?: CollectionViewSize;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n hoverRow?: boolean;\n className?: string;\n onColumnResize?: (params: { key: string; width: number }) => void;\n onColumnsOrderChange?: (keys: string[]) => void;\n};\n\n/**\n * Headless table view that wraps {@link VirtualTable}.\n *\n * Converts property configurations into virtual table columns and wires up\n * sorting, pagination, and cell rendering without coupling to any data layer.\n *\n * @group Collection View\n */\nexport function CollectionTableView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n displayedColumnIds,\n onRowClick,\n cellRenderer,\n size = \"m\",\n emptyComponent,\n hoverRow = true,\n className,\n onColumnResize,\n onColumnsOrderChange,\n}: CollectionTableViewProps<T>) {\n // ── Build columns ────────────────────────────────────────────────\n const columns = useMemo<VirtualTableColumn[]>(() => {\n const order = propertiesOrder ?? Object.keys(properties);\n const filteredKeys = displayedColumnIds\n ? order.filter((key) => displayedColumnIds.includes(key))\n : order.filter((key) => {\n const prop = properties[key];\n return prop && !prop.hideFromCollection;\n });\n\n return filteredKeys\n .map((key): VirtualTableColumn | null => {\n const prop = properties[key];\n if (!prop) return null;\n return {\n key,\n width: prop.columnWidth || DEFAULT_COLUMN_WIDTHS[prop.type] || FALLBACK_COLUMN_WIDTH,\n title: prop.name,\n sortable: SORTABLE_TYPES.has(prop.type),\n resizable: true,\n };\n })\n .filter((col): col is VirtualTableColumn => col !== null);\n }, [properties, propertiesOrder, displayedColumnIds]);\n\n // ── Row height ───────────────────────────────────────────────────\n const rowHeight = SIZE_TO_ROW_HEIGHT[size];\n const rendererSize = VIEW_SIZE_TO_RENDERER_SIZE[size];\n\n // ── Cell renderer ────────────────────────────────────────────────\n const tableCellRenderer = useCallback(\n (params: CellRendererParams<Record<string, unknown>>): React.ReactNode => {\n if (!params.rowData) return null;\n\n const propertyConfig = properties[params.column.key];\n if (!propertyConfig) return null;\n\n const value = getValueInPath(\n params.rowData,\n params.column.key\n );\n\n const cellProps: CellRendererProps<T> = {\n row: params.rowData as T,\n propertyKey: params.column.key,\n property: propertyConfig,\n value,\n size: rendererSize,\n width: params.width,\n };\n\n // Try custom renderer first\n if (cellRenderer) {\n const custom = cellRenderer(cellProps);\n if (custom !== undefined) {\n return (\n <div className=\"flex items-center h-full px-1 overflow-hidden\">\n {custom}\n </div>\n );\n }\n }\n\n return (\n <div className=\"flex items-center h-full px-1 overflow-hidden\">\n <DefaultCellRenderer {...cellProps} />\n </div>\n );\n },\n [properties, cellRenderer, rendererSize]\n );\n\n // ── Row click ────────────────────────────────────────────────────\n const handleRowClick = useCallback(\n ({ rowData }: { rowData: Record<string, unknown> }) => {\n onRowClick?.(rowData as T);\n },\n [onRowClick]\n );\n\n // ── Pagination ──────────────────────────────────────────────────\n const handleEndReached = useCallback(() => {\n if (dataController.paginationEnabled && !dataController.noMoreToLoad) {\n const currentCount = dataController.itemCount ?? dataController.pageSize ?? 50;\n const pageSize = dataController.pageSize ?? 50;\n dataController.setItemCount?.(currentCount + pageSize);\n }\n }, [\n dataController.paginationEnabled,\n dataController.noMoreToLoad,\n dataController.itemCount,\n dataController.pageSize,\n dataController.setItemCount,\n ]);\n\n // ── Column resize ───────────────────────────────────────────────\n const handleColumnResize = useCallback(\n (params: OnVirtualTableColumnResizeParams) => {\n onColumnResize?.({ key: params.key, width: params.width });\n },\n [onColumnResize]\n );\n\n // ── Column reorder ──────────────────────────────────────────────\n const handleColumnsOrderChange = useCallback(\n (newColumns: VirtualTableColumn[]) => {\n onColumnsOrderChange?.(newColumns.map((col) => col.key));\n },\n [onColumnsOrderChange]\n );\n\n return (\n <VirtualTable\n data={dataController.data}\n columns={columns}\n cellRenderer={tableCellRenderer}\n rowHeight={rowHeight}\n sortBy={dataController.sortBy}\n onSortByUpdate={dataController.setSortBy}\n onRowClick={handleRowClick}\n onEndReached={handleEndReached}\n onColumnResize={handleColumnResize}\n onColumnsOrderChange={handleColumnsOrderChange}\n loading={dataController.loading}\n emptyComponent={emptyComponent}\n error={dataController.error}\n hoverRow={hoverRow}\n className={cls(\"h-full\", className)}\n onScroll={dataController.onScroll}\n initialScroll={dataController.initialScroll}\n />\n );\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { CardView } from \"../CardView\";\nimport { Card } from \"../../components/Card\";\nimport { Typography } from \"../../components/Typography\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport { cardSelectedMixin, fieldBackgroundMixin } from \"../../styles\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionViewSize,\n CollectionSelectionController,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\n/**\n * Props for the {@link CollectionCardView} component.\n * @group Collection View\n */\nexport type CollectionCardViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n idProperty?: string;\n titleProperty?: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n size?: CollectionViewSize;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n className?: string;\n};\n\n/**\n * Headless card grid view that wraps {@link CardView}.\n *\n * Renders each item as a card with an optional image, title,\n * preview properties, and selection support.\n *\n * @group Collection View\n */\nexport function CollectionCardView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n idProperty = \"id\",\n titleProperty,\n onRowClick,\n cellRenderer,\n size = \"m\",\n selectionEnabled,\n selectionController,\n highlightedItems,\n emptyComponent,\n className,\n}: CollectionCardViewProps<T>) {\n const order = useMemo(\n () => propertiesOrder ?? Object.keys(properties),\n [propertiesOrder, properties]\n );\n\n // ── Resolve title property ───────────────────────────────────────\n const titlePropertyKey = useMemo(() => {\n if (titleProperty) return titleProperty;\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && !prop.hideFromCollection && !prop.storage) {\n return key;\n }\n }\n return idProperty;\n }, [titleProperty, order, properties, idProperty]);\n\n // ── Resolve image property ───────────────────────────────────────\n const imageProperty = useMemo(() => {\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && prop.storage) {\n return key;\n }\n }\n return undefined;\n }, [order, properties]);\n\n // ── Preview properties (up to 3) ─────────────────────────────────\n const previewProperties = useMemo(() => {\n const result: { key: string; property: CollectionPropertyConfig }[] = [];\n for (const key of order) {\n if (key === titlePropertyKey || key === imageProperty) continue;\n const prop = properties[key];\n if (prop && !prop.hideFromCollection) {\n result.push({ key, property: prop });\n if (result.length >= 3) break;\n }\n }\n return result;\n }, [order, properties, titlePropertyKey, imageProperty]);\n\n // ── Selection IDs ────────────────────────────────────────────────\n const selectedIds = useMemo(() => {\n if (!selectionController?.selectedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of selectionController.selectedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [selectionController?.selectedItems, idProperty]);\n\n // ── Highlighted IDs ──────────────────────────────────────────────\n const highlightedIds = useMemo(() => {\n if (!highlightedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of highlightedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [highlightedItems, idProperty]);\n\n // ── Selection handler ────────────────────────────────────────────\n const handleSelectionChange = useCallback(\n (item: T, selected: boolean) => {\n if (!selectionController) return;\n selectionController.setSelectedItems((prev) => {\n if (selected) {\n return [...prev, item];\n }\n const itemId = getValueInPath(item as Record<string, unknown>, idProperty);\n return prev.filter((existing) => {\n const existingId = getValueInPath(existing as Record<string, unknown>, idProperty);\n return existingId !== itemId;\n });\n });\n },\n [selectionController, idProperty]\n );\n\n // ── Render card ──────────────────────────────────────────────────\n const renderCard = useCallback(\n (\n item: T,\n extra: {\n selected: boolean;\n highlighted: boolean;\n onSelectionChange: (selected: boolean) => void;\n onClick: (e: React.MouseEvent) => void;\n }\n ): React.ReactNode => {\n const titleValue = getValueInPath(item as Record<string, unknown>, titlePropertyKey);\n const imageValue = imageProperty\n ? getValueInPath(item as Record<string, unknown>, imageProperty)\n : undefined;\n const hasImage = typeof imageValue === \"string\" && imageValue.length > 0;\n\n return (\n <Card\n onClick={(e) => { if (e) extra.onClick(e); }}\n className={cls(\n \"overflow-hidden relative\",\n extra.selected && cardSelectedMixin,\n extra.highlighted && !extra.selected && \"ring-1 ring-primary/50\"\n )}\n >\n {/* Image */}\n {imageProperty && (\n hasImage ? (\n <img\n src={imageValue as string}\n alt=\"\"\n className=\"w-full h-32 object-cover rounded-t-lg\"\n />\n ) : (\n <div className={cls(\"h-24 rounded-t-lg\", fieldBackgroundMixin)} />\n )\n )}\n\n {/* Selection checkbox */}\n {selectionEnabled && (\n <div\n className=\"absolute top-2 right-2\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={extra.selected}\n onCheckedChange={extra.onSelectionChange}\n size=\"small\"\n />\n </div>\n )}\n\n {/* Title */}\n <Typography variant=\"subtitle2\" noWrap className=\"px-3 pt-2 pb-1\">\n {String(titleValue ?? \"\")}\n </Typography>\n\n {/* Preview properties */}\n {previewProperties.map(({ key, property }) => {\n const value = getValueInPath(item as Record<string, unknown>, key);\n\n if (cellRenderer) {\n const custom = cellRenderer({\n row: item,\n propertyKey: key,\n property,\n value,\n size: \"small\",\n });\n if (custom !== undefined) {\n return (\n <div key={key} className=\"px-3 py-0.5\">\n {custom}\n </div>\n );\n }\n }\n\n return (\n <div key={key} className=\"px-3 py-0.5\">\n <DefaultCellRenderer\n row={item}\n propertyKey={key}\n property={property}\n value={value}\n size=\"small\"\n />\n </div>\n );\n })}\n\n <div className=\"pb-2\" />\n </Card>\n );\n },\n [titlePropertyKey, imageProperty, previewProperties, cellRenderer, selectionEnabled]\n );\n\n return (\n <div className={cls(\"w-full h-full overflow-auto\", className)}>\n <CardView<T>\n data={dataController.data}\n dataLoading={dataController.loading}\n noMoreToLoad={dataController.noMoreToLoad}\n dataLoadingError={dataController.error}\n itemCount={dataController.itemCount}\n setItemCount={dataController.setItemCount}\n pageSize={dataController.pageSize}\n paginationEnabled={dataController.paginationEnabled}\n onItemClick={onRowClick}\n selectedIds={selectedIds}\n highlightedIds={highlightedIds}\n selectionEnabled={!!selectionEnabled}\n onSelectionChange={handleSelectionChange}\n size={size}\n renderCard={renderCard}\n emptyComponent={emptyComponent}\n />\n </div>\n );\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { ListView } from \"../ListView\";\nimport { Typography } from \"../../components/Typography\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionViewSize,\n CollectionSelectionController,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\n/**\n * Props for the {@link CollectionListView} component.\n * @group Collection View\n */\nexport type CollectionListViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n idProperty?: string;\n titleProperty?: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n size?: CollectionViewSize;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n className?: string;\n};\n\n/**\n * Headless list view that wraps {@link ListView}.\n *\n * Each row displays a title (bold), subtitle with 1–2 secondary property values,\n * and optional selection support.\n *\n * @group Collection View\n */\nexport function CollectionListView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n idProperty = \"id\",\n titleProperty,\n onRowClick,\n cellRenderer,\n size = \"m\",\n selectionEnabled,\n selectionController,\n highlightedItems,\n emptyComponent,\n className,\n}: CollectionListViewProps<T>) {\n const order = useMemo(\n () => propertiesOrder ?? Object.keys(properties),\n [propertiesOrder, properties]\n );\n\n // ── Resolve title property ───────────────────────────────────────\n const titlePropertyKey = useMemo(() => {\n if (titleProperty) return titleProperty;\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && !prop.hideFromCollection && !prop.storage) {\n return key;\n }\n }\n return idProperty;\n }, [titleProperty, order, properties, idProperty]);\n\n // ── Subtitle properties (up to 2) ────────────────────────────────\n const subtitleProperties = useMemo(() => {\n const result: { key: string; property: CollectionPropertyConfig }[] = [];\n for (const key of order) {\n if (key === titlePropertyKey) continue;\n const prop = properties[key];\n if (prop && !prop.hideFromCollection) {\n result.push({ key, property: prop });\n if (result.length >= 2) break;\n }\n }\n return result;\n }, [order, properties, titlePropertyKey]);\n\n // ── Selection IDs ────────────────────────────────────────────────\n const selectedIds = useMemo(() => {\n if (!selectionController?.selectedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of selectionController.selectedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [selectionController?.selectedItems, idProperty]);\n\n // ── Highlighted IDs ──────────────────────────────────────────────\n const highlightedIds = useMemo(() => {\n if (!highlightedItems) return undefined;\n const ids = new Set<string | number>();\n for (const item of highlightedItems) {\n const id = getValueInPath(item as Record<string, unknown>, idProperty);\n if (id !== undefined && id !== null) {\n ids.add(id as string | number);\n }\n }\n return ids;\n }, [highlightedItems, idProperty]);\n\n // ── Selection handler ────────────────────────────────────────────\n const handleSelectionChange = useCallback(\n (item: T, selected: boolean) => {\n if (!selectionController) return;\n selectionController.setSelectedItems((prev) => {\n if (selected) {\n return [...prev, item];\n }\n const itemId = getValueInPath(item as Record<string, unknown>, idProperty);\n return prev.filter((existing) => {\n const existingId = getValueInPath(existing as Record<string, unknown>, idProperty);\n return existingId !== itemId;\n });\n });\n },\n [selectionController, idProperty]\n );\n\n // ── Render row ───────────────────────────────────────────────────\n const renderRow = useCallback(\n (params: {\n item: T;\n index: number;\n style: React.CSSProperties;\n className: string;\n selected: boolean;\n highlighted: boolean;\n isLast: boolean;\n onClick: (e: React.MouseEvent) => void;\n onSelectionChange: (selected: boolean) => void;\n }): React.ReactNode => {\n const { item, style, className: rowClassName, selected, highlighted, onClick, onSelectionChange } = params;\n const titleValue = getValueInPath(item as Record<string, unknown>, titlePropertyKey);\n\n return (\n <div\n style={style}\n className={cls(\n \"flex items-center gap-3 px-4 cursor-pointer\",\n \"hover:bg-surface-50 dark:hover:bg-surface-700\",\n \"transition-colors duration-100\",\n selected && \"bg-primary-50 dark:bg-primary-900/20\",\n highlighted && \"bg-surface-100 dark:bg-surface-800\",\n rowClassName\n )}\n onClick={onClick}\n >\n {/* Selection checkbox */}\n {selectionEnabled && (\n <div className=\"flex-shrink-0\" onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={selected}\n onCheckedChange={onSelectionChange}\n size=\"small\"\n />\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0 py-1\">\n {/* Title */}\n <Typography variant=\"subtitle2\" noWrap>\n {String(titleValue ?? \"\")}\n </Typography>\n\n {/* Subtitle properties */}\n {subtitleProperties.length > 0 && (\n <div className=\"flex items-center gap-2\">\n {subtitleProperties.map(({ key, property }) => {\n const value = getValueInPath(item as Record<string, unknown>, key);\n\n if (cellRenderer) {\n const custom = cellRenderer({\n row: item,\n propertyKey: key,\n property,\n value,\n size: \"tiny\",\n });\n if (custom !== undefined) {\n return <React.Fragment key={key}>{custom}</React.Fragment>;\n }\n }\n\n return (\n <React.Fragment key={key}>\n <DefaultCellRenderer\n row={item}\n propertyKey={key}\n property={property}\n value={value}\n size=\"tiny\"\n />\n </React.Fragment>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n },\n [titlePropertyKey, subtitleProperties, cellRenderer, selectionEnabled]\n );\n\n return (\n <div className={cls(\"w-full h-full overflow-auto\", className)}>\n <ListView<T>\n data={dataController.data}\n dataLoading={dataController.loading}\n noMoreToLoad={dataController.noMoreToLoad}\n dataLoadingError={dataController.error}\n itemCount={dataController.itemCount}\n setItemCount={dataController.setItemCount}\n pageSize={dataController.pageSize}\n paginationEnabled={dataController.paginationEnabled}\n onItemClick={onRowClick}\n selectedIds={selectedIds}\n highlightedIds={highlightedIds}\n selectionEnabled={!!selectionEnabled}\n onSelectionChange={handleSelectionChange}\n size={size}\n renderRow={renderRow}\n emptyComponent={emptyComponent}\n />\n </div>\n );\n}\n","\"use client\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { KanbanView } from \"../KanbanView\";\nimport type { BoardItem, BoardItemViewProps } from \"../KanbanView\";\nimport { Card } from \"../../components/Card\";\nimport { Typography } from \"../../components/Typography\";\nimport { DefaultCellRenderer } from \"./DefaultCellRenderer\";\nimport { cls } from \"../../util\";\nimport { cardClickableMixin, cardSelectedMixin } from \"../../styles\";\nimport type {\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionSelectionController,\n CollectionEnumValueConfig,\n} from \"./CollectionViewTypes\";\n\nimport { getValueInPath } from \"./utils\";\n\nfunction getEnumLabel(enumConfig: CollectionPropertyConfig[\"enum\"], key: string): string {\n if (!enumConfig) return key;\n if (enumConfig instanceof Map) {\n const cfg: CollectionEnumValueConfig | undefined = enumConfig.get(key);\n if (!cfg) return key;\n return typeof cfg === \"string\" ? cfg : cfg.label;\n }\n const cfg: CollectionEnumValueConfig | undefined = enumConfig[key];\n if (!cfg) return key;\n return typeof cfg === \"string\" ? cfg : cfg.label;\n}\n\n/**\n * Props for the {@link CollectionKanbanView} component.\n * @group Collection View\n */\nexport type CollectionKanbanViewProps<T = Record<string, unknown>> = {\n dataController: CollectionDataController<T>;\n properties: Record<string, CollectionPropertyConfig>;\n propertiesOrder?: string[];\n idProperty?: string;\n titleProperty?: string;\n kanbanProperty: string;\n onRowClick?: (row: T) => void;\n cellRenderer?: CellRendererOverride<T>;\n selectionEnabled?: boolean;\n selectionController?: CollectionSelectionController<T>;\n highlightedItems?: T[];\n emptyComponent?: React.ReactNode;\n onRowCreate?: (defaults?: Record<string, unknown>) => void;\n className?: string;\n};\n\n/**\n * Headless kanban view that wraps {@link KanbanView}.\n *\n * Groups data by a kanban property's enum values into columns.\n * Each card displays a title and 1–2 preview properties.\n *\n * @group Collection View\n */\nexport function CollectionKanbanView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n idProperty = \"id\",\n titleProperty,\n kanbanProperty,\n onRowClick,\n cellRenderer,\n emptyComponent,\n onRowCreate,\n className,\n}: CollectionKanbanViewProps<T>) {\n const order = useMemo(\n () => propertiesOrder ?? Object.keys(properties),\n [propertiesOrder, properties]\n );\n\n // ── Resolve kanban columns ───────────────────────────────────────\n const columns = useMemo<string[]>(() => {\n const kanbanConfig = properties[kanbanProperty];\n if (kanbanConfig?.enum) {\n if (kanbanConfig.enum instanceof Map) {\n return Array.from(kanbanConfig.enum.keys()).map(String);\n }\n return Object.keys(kanbanConfig.enum);\n }\n // Deduce from data\n const seen = new Set<string>();\n for (const row of dataController.data) {\n const val = getValueInPath(row as Record<string, unknown>, kanbanProperty);\n if (val !== null && val !== undefined) {\n seen.add(String(val));\n }\n }\n return Array.from(seen);\n }, [properties, kanbanProperty, dataController.data]);\n\n // ── Column labels ────────────────────────────────────────────────\n const columnLabels = useMemo(() => {\n const kanbanConfig = properties[kanbanProperty];\n const labels: Record<string, string> = {};\n for (const col of columns) {\n labels[col] = getEnumLabel(kanbanConfig?.enum, col);\n }\n return labels;\n }, [properties, kanbanProperty, columns]);\n\n // ── Resolve title property ───────────────────────────────────────\n const titlePropertyKey = useMemo(() => {\n if (titleProperty) return titleProperty;\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && !prop.hideFromCollection && !prop.storage) {\n return key;\n }\n }\n return idProperty;\n }, [titleProperty, order, properties, idProperty]);\n\n // ── Preview properties (up to 2) ─────────────────────────────────\n const previewProperties = useMemo(() => {\n const result: { key: string; property: CollectionPropertyConfig }[] = [];\n for (const key of order) {\n if (key === titlePropertyKey || key === kanbanProperty) continue;\n const prop = properties[key];\n if (prop && !prop.hideFromCollection) {\n result.push({ key, property: prop });\n if (result.length >= 2) break;\n }\n }\n return result;\n }, [order, properties, titlePropertyKey, kanbanProperty]);\n\n // ── Convert data to BoardItem<T>[] ───────────────────────────────\n const boardItems = useMemo<BoardItem<T>[]>(() => {\n return dataController.data.map((row, index) => {\n const id = getValueInPath(row as Record<string, unknown>, idProperty);\n return {\n id: id !== null && id !== undefined ? String(id) : String(index),\n data: row,\n };\n });\n }, [dataController.data, idProperty]);\n\n // ── Assign column ────────────────────────────────────────────────\n const assignColumn = useCallback(\n (item: BoardItem<T>): string => {\n const val = getValueInPath(item.data as Record<string, unknown>, kanbanProperty);\n const strVal = val !== null && val !== undefined ? String(val) : \"\";\n if (columns.includes(strVal)) return strVal;\n return columns[0] ?? \"\";\n },\n [kanbanProperty, columns]\n );\n\n // ── Item component ───────────────────────────────────────────────\n const ItemComponent = useMemo(() => {\n function KanbanCard(props: BoardItemViewProps<T>) {\n const { item } = props;\n const titleValue = getValueInPath(\n item.data as Record<string, unknown>,\n titlePropertyKey\n );\n\n return (\n <Card\n onClick={() => onRowClick?.(item.data)}\n className={cls(\n \"p-3\",\n cardClickableMixin,\n props.isDragging && cardSelectedMixin,\n props.isDragging && \"shadow-lg opacity-75\"\n )}\n >\n <Typography variant=\"subtitle2\" noWrap>\n {String(titleValue ?? \"\")}\n </Typography>\n {previewProperties.map(({ key, property }) => {\n const value = getValueInPath(\n item.data as Record<string, unknown>,\n key\n );\n\n if (cellRenderer) {\n const custom = cellRenderer({\n row: item.data,\n propertyKey: key,\n property,\n value,\n size: \"tiny\",\n });\n if (custom !== undefined) {\n return (\n <div key={key} className=\"mt-1\">\n {custom}\n </div>\n );\n }\n }\n\n return (\n <div key={key} className=\"mt-1\">\n <DefaultCellRenderer\n row={item.data}\n propertyKey={key}\n property={property}\n value={value}\n size=\"tiny\"\n />\n </div>\n );\n })}\n </Card>\n );\n }\n return KanbanCard;\n }, [titlePropertyKey, previewProperties, cellRenderer, onRowClick]);\n\n // ── Add item to column ───────────────────────────────────────────\n const handleAddItemToColumn = useCallback(\n (column: string) => {\n onRowCreate?.({ [kanbanProperty]: column });\n },\n [onRowCreate, kanbanProperty]\n );\n\n if (columns.length === 0 && !dataController.loading) {\n return (\n <div className=\"flex items-center justify-center p-8\">\n {emptyComponent ?? (\n <Typography variant=\"body2\" color=\"secondary\">\n No columns available for kanban view.\n </Typography>\n )}\n </div>\n );\n }\n\n return (\n <KanbanView<T, string>\n columns={columns}\n columnLabels={columnLabels as Record<string, string>}\n data={boardItems}\n assignColumn={assignColumn}\n ItemComponent={ItemComponent}\n onAddItemToColumn={onRowCreate ? handleAddItemToColumn : undefined}\n className={className}\n />\n );\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { cls } from \"../../util\";\nimport { Typography } from \"../../components/Typography\";\nimport { CollectionViewToolbar } from \"./CollectionViewToolbar\";\nimport { CollectionTableView } from \"./CollectionTableView\";\nimport { CollectionCardView } from \"./CollectionCardView\";\nimport { CollectionListView } from \"./CollectionListView\";\nimport { CollectionKanbanView } from \"./CollectionKanbanView\";\nimport type {\n CollectionViewMode,\n CollectionViewSize,\n CollectionPropertyConfig,\n CollectionDataController,\n CellRendererOverride,\n CollectionSelectionController,\n KanbanPropertyOption\n} from \"./CollectionViewTypes\";\n\n/**\n * Props for the headless {@link CollectionView} component.\n *\n * This component is data-agnostic — it renders collection data based on\n * property configurations and callbacks, with ZERO coupling to any entity\n * or data layer.\n *\n * @group Collection View\n */\nexport interface CollectionViewProps<T = Record<string, unknown>> {\n // ── Data ──────────────────────────────────────────────────────────\n\n /**\n * Data controller providing rows, loading state, pagination,\n * filter/sort/search state and setters.\n */\n dataController: CollectionDataController<T>;\n\n /**\n * Property definitions keyed by property key.\n * Drives column rendering, cell formatting, and filter UI.\n */\n properties: Record<string, CollectionPropertyConfig>;\n\n /**\n * Display order of properties. If omitted, uses Object.keys(properties).\n */\n propertiesOrder?: string[];\n\n /**\n * Subset of property keys to actually display as columns.\n * If omitted, all non-hidden properties are shown.\n */\n displayedColumnIds?: string[];\n\n // ── Identity ──────────────────────────────────────────────────────\n\n /** Property key used as row identifier. Default: \"id\" */\n idProperty?: string;\n\n /** Property key used as the display title in card/list views */\n titleProperty?: string;\n\n // ── View configuration ────────────────────────────────────────────\n\n /** Title displayed above the collection. `false` to hide. */\n title?: string | false;\n\n /** Controlled view mode. If omitted, internal state is used. */\n viewMode?: CollectionViewMode;\n\n /** Default view mode when uncontrolled. Default: \"list\" */\n defaultViewMode?: CollectionViewMode;\n\n /** Which view modes are available in the toggle */\n enabledViews?: CollectionViewMode[];\n\n /** Callback when view mode changes */\n onViewModeChange?: (mode: CollectionViewMode) => void;\n\n // ── Size ──────────────────────────────────────────────────────────\n\n /** Controlled size. If omitted, internal state is used. */\n size?: CollectionViewSize;\n\n /** Default size. Default: \"m\" */\n defaultSize?: CollectionViewSize;\n\n /** Callback when size changes */\n onSizeChange?: (size: CollectionViewSize) => void;\n\n // ── Kanban ─────────────────────────────────────────────────────────\n\n /** Property key for kanban column grouping */\n kanbanProperty?: string;\n\n /** Available kanban property options (shown in view toggle) */\n kanbanPropertyOptions?: KanbanPropertyOption[];\n\n /** Callback when kanban column property changes */\n onKanbanPropertyChange?: (property: string) => void;\n\n // ── Interactions ──────────────────────────────────────────────────\n\n /** Called when a row is clicked */\n onRowClick?: (row: T) => void;\n\n /** Called when the \"create\" button is clicked */\n onRowCreate?: (defaults?: Record<string, unknown>) => void;\n\n /** Whether creation is allowed (shows the + button) */\n canCreate?: boolean;\n\n // ── Selection ─────────────────────────────────────────────────────\n\n /** Enable row selection checkboxes */\n selectionEnabled?: boolean;\n\n /** Selection controller */\n selectionController?: CollectionSelectionController<T>;\n\n /** Highlighted items (e.g. recently clicked) */\n highlightedItems?: T[];\n\n /** Callback for bulk delete */\n onMultipleDelete?: (rows: T[]) => void;\n\n // ── Custom rendering ──────────────────────────────────────────────\n\n /**\n * Custom cell renderer override. Return undefined to use default.\n * This is how the connected wrapper injects PropertyPreview.\n */\n cellRenderer?: CellRendererOverride<T>;\n\n /** Custom empty state component */\n emptyComponent?: React.ReactNode;\n\n // ── Toolbar ───────────────────────────────────────────────────────\n\n /** Actions rendered at the start (left) of the toolbar */\n toolbarActionsStart?: React.ReactNode;\n\n /** Actions rendered at the end (right) of the toolbar */\n toolbarActionsEnd?: React.ReactNode;\n\n /** Hide the built-in toolbar entirely */\n hideToolbar?: boolean;\n\n // ── Table-specific ────────────────────────────────────────────────\n\n /** Enable row hover highlight in table view */\n hoverRow?: boolean;\n\n /** Callback when table columns are resized */\n onColumnResize?: (params: { key: string; width: number }) => void;\n\n /** Callback when table columns are reordered */\n onColumnsOrderChange?: (keys: string[]) => void;\n\n // ── Style ─────────────────────────────────────────────────────────\n\n /** CSS class for the outer container */\n className?: string;\n}\n\nconst DEFAULT_ENABLED_VIEWS: CollectionViewMode[] = [\"list\", \"table\", \"cards\", \"kanban\"];\n\n/**\n * A data-agnostic collection view component that orchestrates table, card,\n * list, and kanban views — driven entirely by props.\n *\n * Zero imports from any entity or data layer. This component lives in\n * `@rebasepro/ui` and can be used with any data source.\n *\n * @example\n * ```tsx\n * import { CollectionView } from \"@rebasepro/ui\";\n *\n * <CollectionView\n * dataController={{ data: myRows, loading: false, noMoreToLoad: true }}\n * properties={{\n * name: { type: \"string\", name: \"Name\" },\n * email: { type: \"string\", name: \"Email\" },\n * }}\n * title=\"Contacts\"\n * onRowClick={(row) => openDetail(row.id)}\n * />\n * ```\n *\n * @group Collection View\n */\nexport function CollectionView<T extends Record<string, unknown> = Record<string, unknown>>({\n dataController,\n properties,\n propertiesOrder,\n displayedColumnIds,\n idProperty = \"id\",\n titleProperty,\n title,\n viewMode: viewModeProp,\n defaultViewMode = \"list\",\n enabledViews = DEFAULT_ENABLED_VIEWS,\n onViewModeChange: onViewModeChangeProp,\n size: sizeProp,\n defaultSize = \"m\",\n onSizeChange: onSizeChangeProp,\n kanbanProperty: kanbanPropertyProp,\n kanbanPropertyOptions,\n onKanbanPropertyChange: onKanbanPropertyChangeProp,\n onRowClick,\n onRowCreate,\n canCreate = true,\n selectionEnabled,\n selectionController,\n highlightedItems,\n onMultipleDelete,\n cellRenderer,\n emptyComponent,\n toolbarActionsStart,\n toolbarActionsEnd,\n hideToolbar,\n hoverRow = true,\n onColumnResize,\n onColumnsOrderChange,\n className\n}: CollectionViewProps<T>) {\n\n // ── View mode state (uncontrolled with controlled override) ───────\n\n const [internalViewMode, setInternalViewMode] = useState<CollectionViewMode>(defaultViewMode);\n const viewMode = viewModeProp ?? internalViewMode;\n\n const onViewModeChange = useCallback((mode: CollectionViewMode) => {\n setInternalViewMode(mode);\n onViewModeChangeProp?.(mode);\n }, [onViewModeChangeProp]);\n\n // ── Size state (uncontrolled with controlled override) ────────────\n\n const [internalSize, setInternalSize] = useState<CollectionViewSize>(defaultSize);\n const size = sizeProp ?? internalSize;\n\n const onSizeChange = useCallback((s: CollectionViewSize) => {\n setInternalSize(s);\n onSizeChangeProp?.(s);\n }, [onSizeChangeProp]);\n\n // ── Kanban property state ─────────────────────────────────────────\n\n const [internalKanbanProperty, setInternalKanbanProperty] = useState<string | undefined>(kanbanPropertyProp);\n const kanbanProperty = kanbanPropertyProp ?? internalKanbanProperty;\n\n const onKanbanPropertyChange = useCallback((property: string) => {\n setInternalKanbanProperty(property);\n onKanbanPropertyChangeProp?.(property);\n }, [onKanbanPropertyChangeProp]);\n\n // Auto-detect kanban property if not provided\n const resolvedKanbanProperty = useMemo(() => {\n if (kanbanProperty) return kanbanProperty;\n // Find first enum property\n const order = propertiesOrder ?? Object.keys(properties);\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && prop.enum) {\n return key;\n }\n }\n return undefined;\n }, [kanbanProperty, properties, propertiesOrder]);\n\n // Build kanban property options from properties if not provided\n const resolvedKanbanPropertyOptions = useMemo((): KanbanPropertyOption[] => {\n if (kanbanPropertyOptions) return kanbanPropertyOptions;\n const options: KanbanPropertyOption[] = [];\n const order = propertiesOrder ?? Object.keys(properties);\n for (const key of order) {\n const prop = properties[key];\n if (prop && prop.type === \"string\" && prop.enum) {\n options.push({ key, label: prop.name });\n }\n }\n return options;\n }, [kanbanPropertyOptions, properties, propertiesOrder]);\n\n // ── Render ────────────────────────────────────────────────────────\n\n const sharedProps = {\n dataController,\n properties,\n propertiesOrder,\n idProperty,\n titleProperty,\n onRowClick,\n cellRenderer,\n selectionEnabled,\n selectionController,\n highlightedItems,\n emptyComponent,\n };\n\n function renderView() {\n switch (viewMode) {\n case \"table\":\n return (\n <CollectionTableView<T>\n {...sharedProps}\n displayedColumnIds={displayedColumnIds}\n size={size}\n hoverRow={hoverRow}\n onColumnResize={onColumnResize}\n onColumnsOrderChange={onColumnsOrderChange}\n />\n );\n case \"cards\":\n return (\n <CollectionCardView<T>\n {...sharedProps}\n size={size}\n />\n );\n case \"kanban\":\n return resolvedKanbanProperty ? (\n <CollectionKanbanView<T>\n {...sharedProps}\n kanbanProperty={resolvedKanbanProperty}\n onRowCreate={onRowCreate}\n />\n ) : (\n <div className=\"flex items-center justify-center p-8\">\n <Typography variant=\"body2\" color=\"secondary\">\n No enum property available for kanban grouping.\n </Typography>\n </div>\n );\n case \"list\":\n default:\n return (\n <CollectionListView<T>\n {...sharedProps}\n size={size}\n />\n );\n }\n }\n\n return (\n <div\n className={cls(\n \"overflow-hidden h-full w-full rounded-md flex flex-col\",\n \"dark:bg-surface-800\",\n className\n )}\n >\n {/* Error banner */}\n {dataController.error && dataController.data.length > 0 && (\n <div className=\"flex items-center gap-4 px-4 py-2 bg-red-50 dark:bg-red-900/20 border-b border-red-200 dark:border-red-800 flex-shrink-0\">\n <Typography variant=\"body2\" className=\"text-red-700 dark:text-red-300 flex-1\">\n <strong>Warning:</strong> {dataController.error.message || \"Failed to update data.\"}\n </Typography>\n </div>\n )}\n\n {/* Toolbar */}\n {!hideToolbar && (\n <CollectionViewToolbar\n viewMode={viewMode}\n onViewModeChange={enabledViews.length > 1 ? onViewModeChange : undefined}\n enabledViews={enabledViews}\n size={size}\n onSizeChange={onSizeChange}\n searchString={dataController.searchString}\n onSearchChange={dataController.setSearchString}\n loading={dataController.loading}\n actionsStart={toolbarActionsStart}\n actionsEnd={toolbarActionsEnd}\n kanbanPropertyOptions={viewMode === \"kanban\" ? resolvedKanbanPropertyOptions : undefined}\n selectedKanbanProperty={resolvedKanbanProperty}\n onKanbanPropertyChange={onKanbanPropertyChange}\n />\n )}\n\n {/* View */}\n <div className=\"flex-1 overflow-hidden\">\n {renderView()}\n </div>\n </div>\n );\n}\n"],"mappings":"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EACF,YACA,YACA,WACA,YAAY,oBACZ,WACA,eACA,YAAY;EACZ,IAAI,KAAK;EACT,MAAM;GACF,MAAM;GACN;EACJ;CACJ,CAAC;CASD,OACI,oBAAC,OAAD;EAAK,KAAK;EAAY,OARJ,eAAe;GACjC,WAAW,IAAI,UAAU,SAAS,SAAS;GAC3C;GACA,QAAQ,qBAAqB,IAAI;GACjC,SAAS,qBAAqB,IAAI;EACtC,IAAI;GAAC;GAAW;GAAY;EAAkB,CAGb;EAAe,GAAI;EAAY,GAAI;YAC5D,oBAAC,eAAD;GACU;GACN,YAAY;GACL;EACV,CAAA;CACA,CAAA;AAEb,CAAC;;;AC9JD,SAAgB,iBAAiB,EAC7B,UACA,WACA,OACA,GAAG,SACmB;CACtB,MAAM,cAAc,cAAc;EAC9B,IAAI,CAAC,OAAO,OAAO,KAAA;EACnB,IAAI,OAAO,UAAU,UACjB,OAAO,qBAAqB,KAAK;EAErC,OAAO;CACX,GAAG,CAAC,KAAK,CAAC;CAEV,OACI,qBAAC,YAAD;EACI,SAAQ;EACR,WAAU;EACV,WACI,IAAI,qKACA,SAAS;EAEjB,GAAI;YAPR,CASK,eACG,oBAAC,OAAD;GACI,WAAU;GACV,OAAO,EACH,iBAAiB,YAAY,aAAa,YAAY,MAC1D;EACH,CAAA,GAEJ,QACO;;AAEpB;;;AC9CA,IAAa,WAAW;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACJ;;;AC/4DA,IAAa,eAAyB;CAClC;CAAS;CACT;CAAS;CAAmB;CAAc;CAAU;CACpD;CAAgB;CAAyB;CAAQ;CACjD;CAAY;CAAQ;CAAY;CAChC;CAAU;CAAU;CAAO;CAAU;CACrC;CAAY;CAAO;CAAS;CAC5B;CAAS;CAAU;CAAS;CAC5B;CAAc;CAAc;CAAO;CAAS;CAC5C;CAAW;CAAe;CAAW;CAAW;CAAW;CAC3D;CAAO;CAAQ;CAAS;CAAS;CACjC;CAAY;CAAkB;CAAY;AAAS;;;ACPvD,SAAgB,WAAW,OAAkB;CACzC,OAAO,oBAAC,OAAD;EAAK,OAAM;EACN,WAAW,MAAM;EACjB,MAAM;EACN,OAAO,MAAM,QAAQ;EA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"}
|