@vertesia/ui 0.79.3 → 0.79.4
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/lib/esm/core/components/MenuList.js +2 -5
- package/lib/esm/core/components/MenuList.js.map +1 -1
- package/lib/esm/core/components/shadcn/dialog.js +16 -2
- package/lib/esm/core/components/shadcn/dialog.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js +6 -9
- package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filterBar.js +1 -1
- package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/esm/core/components/shadcn/selectBox.js +1 -1
- package/lib/esm/core/components/shadcn/selectBox.js.map +1 -1
- package/lib/esm/env/index.js +4 -1
- package/lib/esm/env/index.js.map +1 -1
- package/lib/esm/features/facets/CollectionsFacetsNav.js +5 -1
- package/lib/esm/features/facets/CollectionsFacetsNav.js.map +1 -1
- package/lib/esm/features/layout/GenericPageNavHeader.js +5 -2
- package/lib/esm/features/layout/GenericPageNavHeader.js.map +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentSearchResults.js +2 -1
- package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/esm/router/HistoryNavigator.js +22 -2
- package/lib/esm/router/HistoryNavigator.js.map +1 -1
- package/lib/esm/shell/login/UserInfo.js +2 -1
- package/lib/esm/shell/login/UserInfo.js.map +1 -1
- package/lib/esm/shell/login/UserSessionMenu.js +7 -1
- package/lib/esm/shell/login/UserSessionMenu.js.map +1 -1
- package/lib/esm/widgets/form/Form.js +5 -1
- package/lib/esm/widgets/form/Form.js.map +1 -1
- package/lib/esm/widgets/schema-editor/ManagedSchema.js +0 -3
- package/lib/esm/widgets/schema-editor/ManagedSchema.js.map +1 -1
- package/lib/esm/widgets/schema-editor/json-schema4-utils.js +1 -1
- package/lib/esm/widgets/schema-editor/json-schema4-utils.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/components/shadcn/dialog.d.ts +2 -1
- package/lib/types/core/components/shadcn/dialog.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/selectBox.d.ts.map +1 -1
- package/lib/types/env/index.d.ts +3 -1
- package/lib/types/env/index.d.ts.map +1 -1
- package/lib/types/features/facets/CollectionsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/layout/GenericPageNavHeader.d.ts.map +1 -1
- package/lib/types/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
- package/lib/types/router/HistoryNavigator.d.ts +3 -0
- package/lib/types/router/HistoryNavigator.d.ts.map +1 -1
- package/lib/types/shell/login/UserInfo.d.ts.map +1 -1
- package/lib/types/shell/login/UserSessionMenu.d.ts.map +1 -1
- package/lib/types/widgets/form/Form.d.ts.map +1 -1
- package/lib/types/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-env.js +1 -1
- package/lib/vertesia-ui-env.js.map +1 -1
- package/lib/vertesia-ui-features.js +1 -1
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-router.js +1 -1
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-shell.js +1 -1
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/package.json +7 -7
- package/src/core/components/MenuList.tsx +3 -6
- package/src/core/components/shadcn/dialog.tsx +19 -1
- package/src/core/components/shadcn/filters/filter/SelectFilter.tsx +31 -31
- package/src/core/components/shadcn/filters/filterBar.tsx +1 -0
- package/src/core/components/shadcn/selectBox.tsx +1 -0
- package/src/env/index.ts +7 -2
- package/src/features/facets/CollectionsFacetsNav.tsx +5 -1
- package/src/features/layout/GenericPageNavHeader.tsx +5 -2
- package/src/features/store/collections/EditCollectionView.tsx +2 -2
- package/src/features/store/objects/DocumentSearchResults.tsx +2 -1
- package/src/router/HistoryNavigator.ts +30 -2
- package/src/shell/login/UserInfo.tsx +2 -0
- package/src/shell/login/UserSessionMenu.tsx +12 -1
- package/src/widgets/form/Form.tsx +6 -1
- package/src/widgets/schema-editor/ManagedSchema.ts +0 -3
- package/src/widgets/schema-editor/json-schema4-utils.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertesia-ui-core.js","sources":["esm/core/components/Avatar.js","esm/core/components/libs/utils.js","esm/core/components/Badge.js","esm/core/components/Center.js","esm/core/components/popup/position.js","esm/core/components/popup/utils.js","esm/core/components/popup/PopupController.js","esm/core/components/popup/Popup.js","esm/core/components/ComboBox.js","esm/core/components/shadcn/button.js","esm/core/components/shadcn/theme/ThemeProvider.js","esm/core/components/shadcn/theme/ThemeSwitcher.js","esm/core/components/shadcn/card.js","esm/core/components/libs/visuallyHidden.js","esm/core/components/shadcn/dialog.js","esm/core/components/shadcn/input.js","esm/core/components/shadcn/separator.js","esm/core/components/shadcn/popover.js","esm/core/components/shadcn/command.js","esm/core/components/shadcn/selectBox.js","esm/core/components/shadcn/tabs.js","esm/core/components/shadcn/tooltip.js","esm/core/components/shadcn/label.js","esm/core/components/shadcn/breadcrumb.js","esm/core/components/shadcn/filters/animateChangeInHeight.js","esm/core/components/shadcn/checkbox.js","esm/core/components/shadcn/filters/DynamicLabel.js","esm/core/components/shadcn/filters/comboBox/SelectCombobox.js","esm/core/components/shadcn/filters/filter-styles.js","esm/core/components/shadcn/filters/comboBox/DateCombobox.js","esm/core/components/shadcn/filters/comboBox/TextCombobox.js","esm/core/components/shadcn/filters/comboBox/StringListCombobox.js","esm/core/components/shadcn/filters/filters.js","esm/core/components/shadcn/filters/filter/TextFilter.js","esm/core/components/shadcn/filters/filter/dateFilter.js","esm/core/components/shadcn/filters/filter/SelectFilter.js","esm/core/components/shadcn/filters/filter/StringListFilter.js","esm/core/components/shadcn/filters/filterBar.js","esm/core/components/shadcn/filters/types.js","esm/core/components/shadcn/heading.js","esm/core/components/shadcn/text.js","esm/core/components/shadcn/resizeable.js","esm/core/components/shadcn/textarea.js","esm/core/components/ConfirmModal.js","esm/core/components/toast/ToastContext.js","esm/core/components/Portal.js","esm/core/components/toast/NotificationPanel.js","esm/core/components/toast/ToastProvider.js","esm/core/components/DeleteModal.js","esm/core/components/Divider.js","esm/core/components/Dropdown.js","esm/core/components/DropdownList.js","esm/core/components/EmptyCollection.js","esm/core/components/FileUpload.js","esm/core/components/FormItem.js","esm/core/components/styles.js","esm/core/components/InputList.js","esm/core/components/Link.js","esm/core/components/MenuList.js","esm/core/components/MessageBox.js","esm/core/components/Modal.js","esm/core/components/NumberInput.js","esm/core/components/Spinner.js","esm/core/components/Button.js","esm/core/components/Overlay.js","esm/core/components/RadioGroup.js","esm/core/components/SelectBox.js","esm/core/components/SelectList.js","esm/core/components/SelectStack.js","esm/core/components/SidePanel.js","esm/core/components/Panel.js","esm/core/components/Switch.js","esm/core/components/table/index.js","esm/core/components/tabs/TabsContext.js","esm/core/components/tabs/Tabs.js","esm/core/hooks/CompositeState.js","esm/core/hooks/PortalContainerProvider.js","esm/core/hooks/SharedState.js","esm/core/hooks/useClickOutside.js","esm/core/hooks/useCopyToClipboard.js","esm/core/hooks/useDarkMode.js","esm/core/hooks/useDebounce.js","esm/core/hooks/useEventSource.js","esm/core/hooks/useFetch.js","esm/core/hooks/useFlag.js","esm/core/hooks/useIntersectionObserver.js","esm/core/hooks/useIsFistRendering.js","esm/core/hooks/useSafeLayoutEffect.js","esm/core/hooks/useScrollableSearch.js","esm/core/hooks/useSharedValue.js","esm/core/utils/cn.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nfunction getRealSize(size) {\n switch (size) {\n case 'xs': return 'size-4';\n case 'sm': return 'size-6';\n case 'md': return 'size-8';\n case 'lg': return 'size-10';\n case 'xl': return 'size-12';\n case '2xl': return 'size-14';\n default: throw new Error('Unexpected size: ' + size);\n }\n}\nexport function Avatar({ size, src, name, shape = \"circle\", color = 'bg-gray-500', className }) {\n const rounded = shape === 'circle' ? 'rounded-full' : 'rounded-md';\n const sizeClass = getRealSize(size || 'md');\n if (src) {\n return (_jsx(\"img\", { className: `inline-block ${sizeClass} ${rounded} ${color} ${className}`, src: src, alt: name || src, title: name }));\n }\n if (name) {\n const [first, second] = name.split(' ');\n let text = second ? `${first[0]}${second[0]}` : `${first[0]}${first[1]}`;\n return (_jsx(\"span\", { className: `inline-flex ${sizeClass} items-center justify-center ${rounded} ${color} ${className}`, title: name, children: _jsx(\"span\", { className: `${(size != 'xs') ? 'text-xs' : 'text-[0.6rem]'} font-medium leading-none text-white`, children: text }) }));\n }\n return (_jsx(\"span\", { className: `inline-block ${sizeClass} overflow-hidden ${rounded} ${color}`, children: _jsx(\"svg\", { className: \"h-full w-full text-gray-300\", fill: \"currentColor\", viewBox: \"0 0 24 24\", children: _jsx(\"path\", { d: \"M24 20.993V24H0v-2.996A14.977 14.977 0 0112.004 15c4.904 0 9.26 2.354 11.996 5.993zM16.002 8.999a4 4 0 11-8 0 4 4 0 018 0z\" }) }) }));\n}\nexport function SvgAvatar({ size, shape = \"circle\", color = 'bg-gray-500', className, children }) {\n const rounded = shape === 'circle' ? 'rounded-full' : 'rounded-md';\n const sizeClass = getRealSize(size || 'md');\n return (_jsx(\"span\", { className: `inline-block ${sizeClass} overflow-hidden ${rounded} ${color} ${className}`, children: children }));\n}\n//# sourceMappingURL=Avatar.js.map","import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nexport function cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n//# sourceMappingURL=utils.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"./libs/utils\";\n// Base badge variants\nconst badgeVariants = cva(\"inline-flex items-center rounded-md px-2 py-1 text-xs font-medium\", {\n variants: {\n variant: {\n default: \"text-foreground bg-muted\",\n secondary: \"bg-secondary text-primary\",\n destructive: \"bg-destructive text-destructive\",\n attention: \"bg-attention text-attention\",\n success: \"bg-success text-success\",\n info: \"bg-info text-info\",\n done: \"bg-done text-done\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n// Base Badge component\nexport function Badge({ className, variant, children, onClick, ...props }) {\n return (_jsx(\"span\", { className: cn(badgeVariants({ variant }), className), onClick: onClick, ...props, children: children }));\n}\nconst dotBadgeVariants = cva(\n// Base styles\n\"inline-flex items-center gap-x-1.5 rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-border\", {\n variants: {\n variant: {\n default: \"\",\n success: \"\",\n destructive: \"\",\n attention: \"\",\n done: \"\",\n info: \"\",\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n});\n// Separate dot variants to allow className overrides\nconst dotVariants = cva(\"h-1.5 w-1.5\", {\n variants: {\n variant: {\n default: \"fill-foreground\",\n success: \"fill-success\",\n destructive: \"fill-destructive\",\n attention: \"fill-attention\",\n done: \"fill-done\",\n info: \"fill-info\",\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n});\nexport function DotBadge({ variant, className, dotClassName, // New prop for dot-specific classes\nchildren, ...props }) {\n return (_jsxs(\"span\", { className: cn(dotBadgeVariants({ variant }), className), ...props, children: [_jsx(\"div\", { className: \"flex-shrink-0\", children: _jsx(\"svg\", { className: cn(dotVariants({ variant }), dotClassName), viewBox: \"0 0 6 6\", \"aria-hidden\": \"true\", children: _jsx(\"circle\", { cx: 3, cy: 3, r: 3 }) }) }), _jsx(\"span\", { className: \"truncate\", children: children })] }));\n}\n//# sourceMappingURL=Badge.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nexport function Center({ className, children }) {\n return (_jsx(\"div\", { className: clsx('flex items-center justify-center', className), children: children }));\n}\n//# sourceMappingURL=Center.js.map","function flipPos(position) {\n switch (position) {\n case \"top\": return \"bottom\";\n case \"bottom\": return \"top\";\n case \"left\": return \"right\";\n case \"right\": return \"left\";\n case \"ne\": return \"sw\";\n case \"nw\": return \"se\";\n case \"se\": return \"nw\";\n case \"sw\": return \"ne\";\n default: return position;\n }\n}\nfunction flipAlign(align) {\n switch (align) {\n case \"start\": return \"end\";\n case \"end\": return \"start\";\n default: return align;\n }\n}\nclass PositionResolver {\n /**\n * The computed left coordinate (i.e. x)\n */\n left;\n /**\n * The computed top coordinate (i.e. y)\n */\n top;\n /**\n * The computed width constraint. If undefined it means that the width is not constrained.\n */\n width;\n /**\n * The computed height constraint. If undefined it means that the height is not constrained.\n */\n height;\n /**\n * Alignment axis. The axis is computed from the position constraints.\n * If no axis is found - no alignment will be done\n */\n alignAxis;\n /**\n * A gap size between the anchor element and the target element.\n */\n gap;\n constructor(gap = 0) {\n this.gap = gap;\n }\n position(pos, anchorRect, elemRect) {\n switch (pos) {\n case \"top\": {\n this.top = anchorRect.top - elemRect.height - this.gap;\n this.alignAxis = 'x';\n break;\n }\n case \"bottom\": {\n this.top = anchorRect.bottom + this.gap;\n this.alignAxis = 'x';\n break;\n }\n case \"left\": {\n this.left = anchorRect.left - elemRect.width - this.gap;\n this.alignAxis = 'y';\n break;\n }\n case \"right\": {\n this.left = anchorRect.right + this.gap;\n this.alignAxis = 'y';\n break;\n }\n case \"ne\": {\n this.top = anchorRect.top - elemRect.height - this.gap;\n this.left = anchorRect.right + this.gap;\n break;\n }\n case \"nw\": {\n this.top = anchorRect.top - elemRect.height - this.gap;\n this.left = anchorRect.left - elemRect.width - this.gap;\n break;\n }\n case \"se\": {\n this.top = anchorRect.bottom + this.gap;\n this.left = anchorRect.right + this.gap;\n break;\n }\n case \"sw\": {\n this.top = anchorRect.bottom + this.gap;\n this.left = anchorRect.left - elemRect.width - this.gap;\n break;\n }\n }\n }\n align(align, anchorRect, elemRect) {\n if (!this.alignAxis)\n return; // no alignment axis\n switch (align) {\n case 'start': {\n if (this.alignAxis === 'x') {\n this.left = anchorRect.left;\n }\n else {\n this.top = anchorRect.top;\n }\n break;\n }\n case 'end': {\n if (this.alignAxis === 'x') {\n this.left = anchorRect.right - elemRect.width;\n }\n else {\n this.top = anchorRect.bottom - elemRect.height;\n }\n break;\n }\n case 'center': {\n // centering depend on the final value of the width / height\n if (this.alignAxis === 'x') {\n this.left = anchorRect.left + anchorRect.width / 2 - elemRect.width / 2;\n }\n else {\n this.top = anchorRect.top + anchorRect.height / 2 - elemRect.height / 2;\n }\n break;\n }\n case 'fill': {\n if (this.alignAxis === 'x') {\n this.left = anchorRect.left;\n this.width = anchorRect.right - anchorRect.left;\n }\n else {\n this.top = anchorRect.top;\n this.height = anchorRect.bottom - anchorRect.top;\n }\n break;\n }\n }\n }\n computePosition(constraints, elemRect, anchorRect) {\n this.position(constraints.position, anchorRect, elemRect);\n constraints.align && this.align(constraints.align, anchorRect, elemRect);\n if (!this.left && !this.top) {\n throw new Error(\"Invalid position. Cannot compute x,y coordinates\");\n }\n const constrainWidth = this.width != null;\n const constrainHeight = this.height != null;\n const width = constrainWidth ? this.width : elemRect.width;\n const height = constrainHeight ? this.height : elemRect.height;\n return {\n rect: new DOMRect(this.left, this.top, width, height),\n constrainWidth,\n constrainHeight,\n position: constraints.position,\n align: constraints.align\n };\n }\n flipAxis(constraints, axis) {\n if (this.alignAxis === axis) { // flip alignment\n if (constraints.align) {\n const newAlign = flipAlign(constraints.align);\n if (newAlign !== constraints.align) {\n return { ...constraints, align: newAlign };\n }\n }\n }\n else { // flip positioning\n const newPos = flipPos(constraints.position);\n if (newPos !== constraints.position) {\n return { ...constraints, position: newPos };\n }\n }\n return null; // nothing to do\n }\n}\nfunction isElementVisible(elemRect, clientRect) {\n return elemRect.left >= clientRect.left && elemRect.right <= clientRect.right\n &&\n elemRect.top >= clientRect.top && elemRect.bottom <= clientRect.bottom;\n}\nfunction isElementVisibleOnAxis(elemRect, clientRect, axis) {\n if (axis === 'x') {\n return elemRect.left >= clientRect.left && elemRect.right <= clientRect.right;\n }\n else {\n return elemRect.top >= clientRect.top && elemRect.bottom <= clientRect.bottom;\n }\n}\n/**\n * Compute the position by trying to adjust the constraints until the computed position fits into the client area.\n * Returns the best position that fits the constraints.\n * @param constraints\n * @param elemRect\n * @param anchorRect\n * @param clientRect\n * @returns null if the element cannot be positioned otherwise returns a position object\n */\nexport function computePosition(constraints, elemRect, anchorRect, clientRect) {\n const resolver = new PositionResolver(constraints.gap);\n let computedPos = resolver.computePosition(constraints, elemRect, anchorRect);\n const isVisibleOnXAxis = isElementVisibleOnAxis(computedPos.rect, clientRect, 'x');\n const isVisibleOnYAxis = isElementVisibleOnAxis(computedPos.rect, clientRect, 'y');\n if (isVisibleOnXAxis && isVisibleOnYAxis) {\n return computedPos; // the element is visible on both axis\n }\n let newConstraints = null;\n if (!isVisibleOnXAxis) {\n newConstraints = resolver.flipAxis(constraints, 'x');\n }\n if (!isVisibleOnYAxis) {\n newConstraints = resolver.flipAxis(newConstraints || constraints, 'y');\n }\n if (!newConstraints) {\n return null; // cannot find a better position\n }\n computedPos = new PositionResolver(resolver.gap).computePosition(newConstraints, elemRect, anchorRect);\n if (isElementVisible(computedPos.rect, clientRect)) {\n return computedPos;\n }\n return null; // cannot find a better position\n}\n//# sourceMappingURL=position.js.map","/**\n * Compute the intersection of the two given rects.\n * @param rect1\n * @param rect2\n * @returns\n */\nexport function intersectRects(rect1, rect2) {\n const x1 = Math.max(rect1.left, rect2.left);\n const y1 = Math.max(rect1.top, rect2.top);\n const x2 = Math.min(rect1.right, rect2.right);\n const y2 = Math.min(rect1.bottom, rect2.bottom);\n if (x2 <= x1 || y2 <= y1) {\n return null; // No intersection\n }\n return new DOMRect(x1, y1, x2 - x1, y2 - y1);\n}\n/**\n * Compute the visible rectangle of the scrollable parents.\n * @param scrollableParents\n * @returns\n */\nexport function computeVisibleClientRect(scrollableParents) {\n if (scrollableParents.length === 0)\n return null;\n // Initialize the rect as the bounding rect of the first scrollable parent\n let rect = scrollableParents[0].getBoundingClientRect();\n // Iterate over the remaining scrollable parents to compute the intersection\n for (let i = 1, l = scrollableParents.length; i < l; i++) {\n const parentRect = scrollableParents[i].getBoundingClientRect();\n rect = intersectRects(parentRect, rect);\n // If there is no intersection, exit early\n if (!rect) {\n return null;\n }\n }\n return rect;\n}\n/**\n * Tests whether the given element is scrollable in any direction.\n * @param element\n * @returns\n */\nexport function isScrollable(element) {\n const hasScrollY = element.scrollHeight > element.clientHeight;\n const hasScrollX = element.scrollWidth > element.clientWidth;\n if (hasScrollY || hasScrollX) {\n const style = getComputedStyle(element);\n if ((hasScrollY && style.overflowY !== 'visible') || (hasScrollX && style.overflowX !== 'visible')) {\n return true;\n }\n }\n return false;\n}\n/**\n * Get the list of scrollable parents of the given element. The list always include the root parent at the end.\n * The root parent is either the document.documentElement or the given root element.\n * To iterate the list from top to down you need to iterate from the end to the start of the list,\n * since the root parent is always the last element and the nearest scrollable parent is the first element.\n * @param element\n * @param root\n * @returns\n */\nexport function getScrollableParents(element, root = document.documentElement) {\n const parents = [];\n let parent = element.parentElement;\n while (parent && parent !== root) {\n isScrollable(parent) && parents.push(parent);\n parent = parent.parentElement;\n }\n // Always push the root element\n parents.push(root);\n return parents;\n}\n//# sourceMappingURL=utils.js.map","import { computePosition } from \"./position\";\nimport { computeVisibleClientRect, getScrollableParents } from \"./utils\";\nexport class PopupController {\n options;\n root;\n scrollableParents;\n visibleClientRect;\n context;\n constructor(options) {\n this.options = options;\n this.root = options.root || document.documentElement;\n this.scrollableParents = getScrollableParents(this.anchor, this.root);\n this.visibleClientRect = computeVisibleClientRect(this.scrollableParents);\n }\n get anchor() {\n return this.options.anchor;\n }\n registerListeners(element) {\n const parents = this.scrollableParents;\n const updateHandler = () => {\n this.update();\n };\n // add a window resize listener\n window.addEventListener('resize', updateHandler);\n //TODO do we add scroll listeners to the window?\n // add scroll listeners to all scrollable parents\n for (const parent of parents) {\n parent.addEventListener('scroll', updateHandler);\n }\n let closeOnClick;\n if (this.options.closeOnClick) {\n closeOnClick = (ev) => {\n if (!element.contains(ev.target)) {\n this.tryClose();\n }\n };\n // register in the next event loop cycle since the current one\n // is may be triggered by a click event\n window.setTimeout(function () {\n closeOnClick && document.addEventListener('click', closeOnClick);\n }, 0);\n }\n let closeOnEsc;\n if (this.options.closeOnEsc) {\n closeOnEsc = (ev) => {\n if (ev.key === 'Escape') {\n this.tryClose();\n }\n };\n window.setTimeout(function () {\n closeOnEsc && document.addEventListener('keydown', closeOnEsc);\n }, 0);\n }\n const blockPageScroll = this.options.blockPageScroll;\n if (blockPageScroll) {\n document.body.style.overflow = \"hidden\";\n document.body.style.height = \"100%\";\n }\n return () => {\n window.removeEventListener('resize', updateHandler);\n for (const parent of parents) {\n parent.removeEventListener('scroll', updateHandler);\n }\n closeOnClick && document.removeEventListener('click', closeOnClick);\n closeOnEsc && document.removeEventListener('keydown', closeOnEsc);\n if (blockPageScroll) {\n document.body.style.overflow = \"\";\n document.body.style.height = \"\";\n }\n };\n }\n open(element, constraints) {\n if (this.context) {\n throw new Error(\"The popup controller is already bound to an element\");\n }\n this.tryOpen(element, constraints);\n }\n tryOpen(element, constraints) {\n if (this.context) {\n return; // do nothing if the popup is already open\n }\n this.context = {\n element,\n constraints,\n cleanup: this.registerListeners(element)\n };\n element.style.display = \"\";\n element.style.visibility = \"hidden\";\n // update the popup position\n this.update();\n this.options.onOpen && this.options.onOpen(this);\n }\n close() {\n if (!this.context) {\n throw new Error(\"The popup controller is not bound to an element\");\n }\n this.tryClose();\n }\n tryClose() {\n if (!this.context) {\n return; // do nothing if the popup is not open\n }\n this.options.onClose && this.options.onClose(this);\n this.context.cleanup();\n //TODO\n this.context.element.style.display = \"none\";\n this.context = undefined;\n }\n get isOpen() {\n return !!this.context;\n }\n update() {\n if (!this.context)\n return; // do nothing if the popup is not open\n // update the position of the popup\n const element = this.context.element;\n const constraints = this.context.constraints;\n const elemRect = element.getBoundingClientRect();\n const anchorRect = this.anchor.getBoundingClientRect();\n const clientRect = this.visibleClientRect;\n if (!clientRect) {\n // the popup is not visible\n return;\n }\n const position = computePosition(constraints, elemRect, anchorRect, clientRect);\n this.context.position = position || undefined;\n if (position) {\n if (position.constrainHeight) {\n element.style.height = position.rect.height + 'px';\n }\n if (position.constrainWidth) {\n element.style.width = position.rect.width + 'px';\n }\n element.style.left = position.rect.left + 'px';\n element.style.top = position.rect.top + 'px';\n element.style.visibility = \"visible\";\n }\n }\n createPopupElement() {\n const popup = document.createElement('div');\n popup.style.margin = \"0\";\n popup.style.padding = \"0\";\n popup.style.border = \"none\";\n popup.style.background = \"transparent\";\n popup.className = \"composable-Popup\";\n return popup;\n }\n}\n//# sourceMappingURL=PopupController.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { PopupController } from \"./PopupController\";\nconst PopupContext = createContext(undefined);\nexport function usePopupController() {\n const ctrl = useContext(PopupContext);\n if (!ctrl)\n throw new Error(\"usePopupController must be used inside a Popup component\");\n return ctrl;\n}\nexport function DOMPopup({ ctrlRef, id, constraints, isOpen, children, className, onClose, zIndex, position, ...props }) {\n const popupRef = useRef(null);\n const [ctrl, setCtrl] = useState();\n useEffect(() => {\n if (!props.anchor)\n throw new Error(\"Anchor element is required\");\n const _ctrl = new PopupController({\n ...props,\n onClose\n });\n setCtrl(_ctrl);\n return () => {\n _ctrl.tryClose();\n };\n }, []);\n useEffect(() => {\n if (ctrlRef) {\n ctrlRef.current = ctrl;\n }\n }, [ctrl]);\n // effect to open / close the popup\n useEffect(() => {\n if (ctrl && popupRef.current) {\n if (ctrl.isOpen !== isOpen) {\n if (isOpen) {\n ctrl.open(popupRef.current, constraints);\n }\n else {\n ctrl.close();\n }\n }\n }\n else if (ctrl?.isOpen && !isOpen) {\n // close the popup - happens when isOpen becomes false but the ctrl is still open\n // and the popupRef was destroyed by the isOpen && below\n ctrl.close();\n }\n }, [isOpen, ctrl, popupRef.current]);\n return (_jsx(PopupContext.Provider, { value: ctrl, children: isOpen && createPortal(_jsx(\"div\", { id: id, style: {\n //display: isOpen ? 'block' : 'none',\n visibility: 'hidden',\n position: position || 'absolute',\n zIndex: zIndex || 100,\n }, ref: popupRef, className: className, children: children }), document.body) }));\n}\nexport function Popup({ anchor, root, children, ...others }) {\n return anchor.current && (!root || root.current) ? (_jsx(DOMPopup, { anchor: anchor.current, root: root?.current || undefined, ...others, children: children })) : null;\n}\n//# sourceMappingURL=Popup.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport clsx from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Popup } from \"./popup/index\";\nconst INPUT_UNSTYLED = \"block m-0 p-0 border-0 focus:outline-none focus:ring-0 bg-transparent\";\nconst INPUT_NO_PADDING = \"block sm:text-sm sm:leading-6 rounded-md border-0 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-slate-600 dark:text-slate-50 dark:bg-slate-800 placeholder:text-gray-400 dark:placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 dark:focus:ring-indigo-800\";\nconst INPUT = INPUT_NO_PADDING + \" py-1.5\";\nconst COMBOBOX_POPUP = \"combobox-popup\";\nfunction genComboboxPopupId() {\n return `combobox-popup-${Math.floor(Math.random() * 1000000)}`;\n}\nexport class OptionAdapter {\n filter(items, text) {\n const lcText = text.toLowerCase();\n return items.filter((item) => this.valueOf(item).toLowerCase().includes(lcText));\n }\n renderOption(item) {\n return this.valueOf(item);\n }\n findById(items, id) {\n return items.find(item => this.idOf(item) === id);\n }\n // override to support creating new items\n createItem(_value) {\n return null; // default is no new item\n }\n}\nexport class StringOptionAdapter extends OptionAdapter {\n valueOf(item) {\n return String(item);\n }\n idOf(item) {\n return String(item);\n }\n static instance = new StringOptionAdapter();\n}\nexport class StringOptionAdapterWithCreate extends StringOptionAdapter {\n createItem(value) {\n return value;\n }\n static instance = new StringOptionAdapterWithCreate();\n}\nexport function getDefaultComboBoxLayout(fullWidth, unstyledInput) {\n return {\n buttonRight: 4,\n buttonWidth: 24,\n maxMenuHeight: 240,\n menuClass: \"w-72 bg-white mt-1 shadow-md border border-gray-200 overflow-auto p-0 z-10\",\n inputClass: clsx(unstyledInput ? INPUT_UNSTYLED : INPUT, fullWidth ? \"w-full\" : \"!w-auto\"),\n optionClass: \"py-2 px-3 shadow-sm flex flex-col [&.option-selected]:font-semibold [&.option-highlighted]:bg-blue-300\",\n Input: (ComboInput),\n Menu: (ComboMenu),\n Toggle: (ComboToggle),\n };\n}\nexport function ComboBox({ menuAlign = \"fill\", menuGap, focusOnMount, onSelect, value, zIndex, unstyledInput, fullWidth, api, layout: layoutOpts, adapter, items, placeholder }) {\n const [popupId] = useState(genComboboxPopupId());\n const popupCtrl = useRef(undefined);\n const inputRef = useRef(null);\n const layout = layoutOpts ? Object.assign(getDefaultComboBoxLayout(fullWidth, unstyledInput), layoutOpts) : getDefaultComboBoxLayout(fullWidth, unstyledInput);\n const inputBoxRef = React.useRef(null);\n const ctrl = useComboboxCtrl({\n adapter,\n items,\n value,\n popupId\n });\n useEffect(() => {\n if (inputRef.current) {\n focusOnMount && inputRef.current.focus();\n }\n }, [inputRef.current]);\n // the onSelect callback may change so we need to refresh it.\n useEffect(() => {\n ctrl.onSelect = onSelect;\n ctrl.popupCtrl = popupCtrl.current;\n }, [onSelect, popupCtrl.current]);\n useEffect(() => {\n if (api && ctrl && inputRef.current) {\n api.current = {\n open: () => ctrl.openMenu(),\n close: () => ctrl.closeMenu(),\n toggle: () => ctrl.toggleMenu(),\n setInputValue: (value) => ctrl.inputText = value,\n inputValue: ctrl.inputText || '',\n selectedItem: ctrl.selectedItem,\n focus: () => inputRef.current?.focus()\n };\n return () => {\n api.current = null;\n };\n }\n }, [api, ctrl, inputRef.current]);\n const showMenu = ctrl.isMenuOpen && ctrl.filteredItems.length > 0;\n return (_jsxs(_Fragment, { children: [_jsx(layout.Input, { boxRef: inputBoxRef, inputRef: inputRef, ctrl: ctrl, layout: layout, placeholder: placeholder }), _jsx(Popup, { id: popupId, ctrlRef: popupCtrl, className: COMBOBOX_POPUP, closeOnClick: true, closeOnEsc: true, onClose: () => ctrl.closeMenu(), isOpen: showMenu, anchor: inputBoxRef, zIndex: zIndex, constraints: {\n position: \"bottom\",\n align: menuAlign,\n gap: menuGap != null ? menuGap : 4\n }, children: _jsx(layout.Menu, { fillWidth: menuAlign === \"fill\", items: ctrl.filteredItems, ctrl: ctrl, layout: layout, adapter: adapter }) })] }));\n}\nfunction ComboInput({ inputRef, placeholder, boxRef, ctrl, layout }) {\n const buttonWidth = layout.buttonWidth;\n const style = buttonWidth > 0 ? { paddingRight: `${buttonWidth}px` } : undefined;\n const Toggle = layout.Toggle;\n return (_jsxs(\"div\", { className: \"relative\", ref: boxRef, children: [_jsx(\"input\", { ref: inputRef, placeholder: placeholder, ...ctrl.getInputProps(), style: style, className: layout.inputClass }), Toggle &&\n _jsx(\"button\", { style: {\n top: 0, bottom: 0, right: `${layout.buttonRight}px`, width: `${buttonWidth}px`,\n position: \"absolute\",\n border: \"none\",\n padding: 0,\n margin: 0,\n backgroundColor: \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n }, ...ctrl.getToggleButtonProps(), children: _jsx(Toggle, { ctrl: ctrl, layout: layout }) })] }));\n}\nfunction ComboToggle({ ctrl }) {\n return ctrl.isMenuOpen ? _jsx(ChevronUpIcon, { className: \"w-4 h-4\" }) : _jsx(ChevronDownIcon, { className: \"w-4 h-4\" });\n}\nfunction ComboMenu({ fillWidth, items, layout, ctrl, adapter }) {\n const { highlightedIndex, selectedItem } = ctrl;\n return (_jsx(\"ul\", { style: { width: fillWidth ? \"100%\" : undefined, maxHeight: layout.maxMenuHeight ? `${layout.maxMenuHeight}px` : '240px' }, className: layout.menuClass, ...ctrl.getMenuProps(), children: items.map((item, index) => (_jsx(\"li\", { \"data-index\": index, className: clsx(layout.optionClass, highlightedIndex === index && \"option-highlighted\", selectedItem === item && \"option-selected\"), ...ctrl.getItemProps(item, index), children: adapter.renderOption(item) }, adapter.idOf(item)))) }));\n}\nexport function useComboboxCtrl(props) {\n const [ctrl, setCtrl] = useState(new ComboboxController(props));\n useEffect(() => {\n ctrl?.withState(setCtrl);\n }, []);\n return ctrl;\n}\nclass ComboboxController {\n popupId;\n items;\n adapter;\n onSelect;\n setState;\n _selectedItem = null;\n _filteredItems;\n _inputText = \"\";\n _highlightedIndex = null;\n _isMenuOpen = false;\n popupCtrl;\n constructor({ adapter, items, value, popupId }) {\n this.adapter = adapter;\n this.items = items;\n this.popupId = popupId;\n if (typeof value === \"string\") {\n this._inputText = value;\n }\n else if (value) {\n this._selectedItem = adapter.findById(items, adapter.idOf(value)) || null;\n if (this._selectedItem) {\n this._inputText = adapter.valueOf(value);\n }\n }\n if (this._inputText) {\n this._filteredItems = this.adapter.filter(this.items, this._inputText);\n }\n else {\n this._filteredItems = this.items;\n }\n }\n withState(setState) {\n this.setState = setState;\n return this;\n }\n clone() {\n const clone = new ComboboxController({ adapter: this.adapter, items: this.items, popupId: this.popupId });\n clone.setState = this.setState;\n clone.onSelect = this.onSelect;\n clone._inputText = this._inputText;\n clone._highlightedIndex = this._highlightedIndex;\n clone._selectedItem = this._selectedItem;\n clone._isMenuOpen = this._isMenuOpen;\n clone._filteredItems = this._filteredItems;\n clone.popupCtrl = this.popupCtrl;\n return clone;\n }\n updateState() {\n this.setState?.(this.clone());\n }\n get filteredItems() {\n if (this._inputText) {\n return this.adapter.filter(this.items, this._inputText);\n }\n else {\n return this.items;\n }\n }\n get selectedItem() {\n return this._selectedItem;\n }\n set selectedItem(item) {\n this._selectedItem = item;\n this._inputText = item ? this.adapter.valueOf(item) : \"\";\n this._filteredItems = this._inputText ?\n this.adapter.filter(this.items, this._inputText)\n : this.items;\n this.updateState();\n this.onSelect?.(item);\n }\n get isMenuOpen() {\n return this._isMenuOpen;\n }\n set inputText(inputText) {\n this._inputText = inputText;\n if (inputText) {\n this._filteredItems = this.adapter.filter(this.items, inputText);\n }\n else {\n this._filteredItems = this.items;\n }\n this._highlightedIndex = null;\n this._selectedItem = null;\n this.updateState();\n // TODO -- experimental - it works but it's not perfect\n // we need to update if the popup is on top and the filtered items changed\n if (this.isMenuOpen && this.popupCtrl) {\n const popupCtrl = this.popupCtrl;\n const popupPosition = popupCtrl.context?.position?.position;\n if (popupPosition && popupPosition === \"top\") {\n window.setTimeout(() => {\n popupCtrl.update();\n }, 100);\n }\n }\n }\n get inputText() {\n return this._inputText;\n }\n set highlightedIndex(index) {\n this._highlightedIndex = index;\n this.updateState();\n }\n get highlightedIndex() {\n return this._highlightedIndex;\n }\n openMenu() {\n if (this._filteredItems.length > 0) {\n this._isMenuOpen = true;\n //this._highlightedIndex = 0;\n this.updateState();\n }\n else {\n // TODO nothing to show.\n // display a create value option?\n }\n }\n closeMenu(_item) {\n if (this._isMenuOpen) {\n this._highlightedIndex = null;\n this._isMenuOpen = false;\n this.updateState();\n }\n }\n toggleMenu() {\n if (this._isMenuOpen) {\n this.closeMenu();\n }\n else {\n this.openMenu();\n }\n }\n highlightIndex(index, navigateToTop = false) {\n this.highlightedIndex = index;\n const popup = document.getElementById(this.popupId);\n if (popup) {\n popup.querySelector(`li[data-index=\"${index}\"]`)?.scrollIntoView(navigateToTop);\n }\n }\n getMenuProps() {\n return {};\n }\n getToggleButtonProps() {\n return {\n onClick: () => {\n this._isMenuOpen = !this._isMenuOpen;\n this.updateState();\n }\n };\n }\n getItemProps(item, index) {\n return {\n \"aria-selected\": this._highlightedIndex === index,\n onClick: () => {\n this.selectedItem = item;\n this.closeMenu();\n },\n onMouseEnter: () => {\n if (this.highlightedIndex !== index) {\n this.highlightedIndex = index;\n }\n },\n onMouseLeave: () => {\n if (this.highlightedIndex === index) {\n this.highlightedIndex = null;\n }\n }\n };\n }\n getInputProps() {\n const items = this._filteredItems;\n return {\n onClick: () => {\n this.openMenu();\n },\n onChange: (ev) => {\n const value = ev.target.value;\n this.inputText = value;\n this.openMenu();\n },\n value: this.inputText,\n onKeyDown: (ev) => {\n const key = ev.key;\n if (key === \"Enter\") {\n if (this.highlightedIndex != null) {\n this.selectedItem = items[this.highlightedIndex || 0];\n }\n else {\n // create new value?\n if (this.inputText) {\n const item = this.adapter.createItem(this.inputText);\n if (item) {\n this.items.push(item);\n this.selectedItem = item;\n }\n }\n }\n this.closeMenu();\n }\n else if (key === \"ArrowDown\") {\n if (this.isMenuOpen) {\n this.highlightIndex(this.highlightedIndex === null ? 0 : incrModulo(this.highlightedIndex, items.length), false);\n }\n else {\n this.openMenu();\n }\n }\n else if (key === \"ArrowUp\") {\n if (this.isMenuOpen) {\n this.highlightIndex(this.highlightedIndex === null ? 0 : decrModulo(this.highlightedIndex, items.length), true);\n }\n }\n }\n };\n }\n}\nfunction incrModulo(value, max) {\n return (value + 1) % max;\n}\nfunction decrModulo(value, max) {\n return (value - 1 + max) % max;\n}\n//# sourceMappingURL=ComboBox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport { VTooltip } from \"@vertesia/ui/core\";\nimport { cn } from \"../libs/utils\";\nimport { Check, CopyIcon, Loader2 } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nconst buttonVariants = cva(\"hover:cursor-pointer inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", {\n variants: {\n variant: {\n destructive: \"bg-destructive dark:bg-destructive/10 text-destructive ring-1 ring-inset ring-destructive-muted/50 dark:ring-destructive-muted/50 shadow-xs hover:bg-destructive/50\",\n outline: \"border border-input bg-background shadow-xs hover:bg-muted ring-inset\",\n secondary: \"bg-primary/5 dark:bg-primary/10 text-primary shadow-xs hover:bg-primary/10 dark:hover:bg-primary/20 ring-inset\",\n ghost: \"hover:bg-muted/50 dark:hover:bg-muted/20 ring-inset\",\n link: \"text-foreground underline-offset-4 hover:underline ring-inset\",\n primary: \"bg-primary text-white shadow-xs hover:bg-primary/90 ring-inset\",\n unstyled: \"\"\n },\n size: {\n xs: 'h-7 rounded px-2 py-1 text-xs gap-x-1',\n sm: \"h-8 rounded px-3 text-xs\",\n md: \"h-9 rounded-md px-4 py-2\",\n lg: \"h-10 rounded-md px-3\",\n xl: 'rounded-md px-3.5 py-2.5 text-sm gap-x-2',\n icon: \"p-0 m-0 rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n});\nconst Button = React.forwardRef(({ className, variant, size, asChild = false, alt, isDisabled, isLoading, title, onClick, type, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonElement = (_jsxs(Comp, { className: clsx(cn(buttonVariants({ variant, size })), className), disabled: isDisabled || isLoading || props.disabled, ref: ref, onClick: onClick, type: type, autoFocus: false, ...props, children: [isLoading && _jsx(Loader2, { className: \"animate-spin\" }), props.children] }));\n if (alt || title) {\n return (_jsx(VTooltip, { description: alt || title, asChild: true, className: \"cursor-pointer\", size: \"xs\", placement: \"top\", children: buttonElement }));\n }\n return buttonElement;\n});\nButton.displayName = \"Button\";\nconst CopyButton = React.forwardRef(({ size, content, toast, className, alt, ...props }, ref) => {\n const [isCopied, setIsCopied] = useState(false);\n const handleCopy = (e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(content).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n if (!toast || !toast.toast) {\n return;\n }\n toast.toast({\n status: \"success\",\n title: toast.message || \"Copied to clipboard\",\n duration: 2000,\n });\n }).catch((err) => {\n console.error(\"Failed to copy text: \", err);\n if (toast && toast.toast)\n toast.toast({\n status: \"error\",\n title: \"Failed to copy\",\n duration: 2000,\n });\n });\n };\n return (_jsx(Button, { ref: ref, className: cn(className), variant: \"unstyled\", size: size || \"sm\", onClick: handleCopy, ...props, alt: alt ?? \"Copy\", children: isCopied ?\n _jsx(Check, { className: \"text-success\" })\n :\n _jsx(CopyIcon, { className: \"size-4\" }) }));\n});\nCopyButton.displayName = \"CopyButton\";\nexport { Button, CopyButton, buttonVariants };\n//# sourceMappingURL=button.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext, useEffect, useState } from \"react\";\nconst initialState = {\n theme: \"system\",\n setTheme: () => null,\n};\nconst ThemeProviderContext = createContext(initialState);\nexport { ThemeProviderContext };\nexport function ThemeProvider({ children, defaultTheme = \"system\", storageKey = \"vite-ui-theme\", ...props }) {\n const [theme, setTheme] = useState(() => localStorage.getItem(storageKey) || defaultTheme);\n useEffect(() => {\n const root = window.document.documentElement;\n root.classList.remove(\"light\", \"dark\");\n if (theme === \"system\") {\n const systemTheme = window.matchMedia(\"(prefers-color-scheme: dark)\")\n .matches\n ? \"dark\"\n : \"light\";\n root.classList.add(systemTheme);\n return;\n }\n root.classList.add(theme);\n }, [theme]);\n const value = {\n theme,\n setTheme: (theme) => {\n localStorage.setItem(storageKey, theme);\n setTheme(theme);\n },\n };\n return (_jsx(ThemeProviderContext.Provider, { ...props, value: value, children: children }));\n}\nexport const useTheme = () => {\n const context = useContext(ThemeProviderContext);\n if (context === undefined)\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n return context;\n};\n//# sourceMappingURL=ThemeProvider.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Computer, Moon, Sun } from \"lucide-react\";\nimport { Button } from \"../button\";\nimport { useTheme } from \"./ThemeProvider\";\nexport function ModeOption({ option, current, setTheme, icon }) {\n return (_jsx(Button, { variant: current === option ? \"secondary\" : \"outline\", size: \"sm\", onClick: () => setTheme(option), alt: option, children: icon }));\n}\nexport default function ModeToggle() {\n const { setTheme } = useTheme();\n const theme = useTheme().theme;\n return (_jsxs(\"div\", { className: \"flex justify-between px-2 items-center\", children: [_jsx(\"p\", { className: \"text-sm font-semibold\", children: \"Theme\" }), _jsxs(\"div\", { className: \"flex gap-2\", children: [_jsx(ModeOption, { current: theme, option: \"system\", setTheme: setTheme, icon: _jsx(Computer, { className: \"text-muted\" }) }), _jsx(ModeOption, { current: theme, option: \"light\", setTheme: setTheme, icon: _jsx(Sun, { className: \"text-muted\" }) }), _jsx(ModeOption, { current: theme, option: \"dark\", setTheme: setTheme, icon: _jsx(Moon, { className: \"text-muted\" }) })] })] }));\n}\n//# sourceMappingURL=ThemeSwitcher.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { cn } from \"../libs/utils\";\nconst Card = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"rounded-xl border bg-card text-card-foreground shadow\", className), ...props })));\nCard.displayName = \"Card\";\nconst CardHeader = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"flex flex-col p-6\", className), ...props })));\nCardHeader.displayName = \"CardHeader\";\nconst CardTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"font-semibold leading-none tracking-tight\", className), ...props })));\nCardTitle.displayName = \"CardTitle\";\nconst CardDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"text-sm text-muted-foreground\", className), ...props })));\nCardDescription.displayName = \"CardDescription\";\nconst CardContent = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"p-6 pt-0\", className), ...props })));\nCardContent.displayName = \"CardContent\";\nconst CardFooter = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"flex items-center p-6 pt-0\", className), ...props })));\nCardFooter.displayName = \"CardFooter\";\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n//# sourceMappingURL=card.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function VisuallyHidden({ children }) {\n return (_jsx(\"span\", { style: {\n border: 0,\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n }, children: children }));\n}\n//# sourceMappingURL=visuallyHidden.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cn } from \"../libs/utils\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { VisuallyHidden } from \"../libs/visuallyHidden\";\nimport { createContext, useContext } from \"react\";\nconst ModalContext = createContext(false);\nexport function useIsInModal() {\n return !!useContext(ModalContext);\n}\nexport function ModalContextProvider({ children }) {\n return _jsx(ModalContext.Provider, { value: true, children: children });\n}\nexport function VModal({ className, children, isOpen, onClose, description = \"Modal Description\", noCloseButton = false, allowOverflow = false, disableCloseOnClickOutside = false, }) {\n const handleOpenChange = (open) => {\n if (!open) {\n onClose();\n }\n };\n return (_jsxs(Dialog, { open: isOpen, onOpenChange: (open) => {\n if (!disableCloseOnClickOutside || open) {\n handleOpenChange(open);\n }\n }, children: [allowOverflow && _jsx(DialogOverlay, { className: \"z-50 fixed inset-0 bg-black/80\" }), _jsx(VisuallyHidden, { children: _jsx(DialogDescription, { children: description }) }), _jsxs(DialogContent, { className: cn(\"min-h-20 p-4\", \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border bg-background shadow-lg duration-200 sm:rounded-lg\", className), children: [!noCloseButton && (_jsx(DialogClose, { onClick: () => handleOpenChange(false), asChild: true, autoFocus: false, children: _jsx(Button, { variant: \"outline\", alt: \"Close\", className: \"top-4 right-4 absolute data-[state=open]:bg-accent opacity-70 hover:opacity-100 rounded-sm focus:outline-none focus:ring-2 focus:ring-ring ring-offset-background focus:ring-offset-2 data-[state=open]:text-muted-foreground transition-opacity disabled:pointer-events-none\", children: _jsx(X, { className: \"w-4 h-4\" }) }) })), _jsx(ModalContextProvider, { children: children })] })] }));\n}\nexport const VModalTitle = ({ children, show = true, className, description, ...props }) => {\n if (!show) {\n return (_jsxs(VisuallyHidden, { children: [_jsx(DialogTitle, { children: children }), description && _jsx(DialogDescription, { children: description })] }));\n }\n return (_jsx(_Fragment, { children: _jsxs(DialogTitle, { className: cn(\"text-lg font-semibold leading-6 tracking-tight\", { 'py-2': !description }, className), ...props, children: [children, description && (_jsx(DialogDescription, { className: \"text-sm !font-normal text-muted-foreground pb-2\", children: description }))] }) }));\n};\nexport const VModalBody = ({ children, className, ...props }) => {\n return (_jsx(\"div\", { className: cn(\"text-sm max-h-[80vh] overflow-y-auto\", className), ...props, children: children }));\n};\nexport const VModalFooter = ({ align = \"right\", children, className, ...props }) => {\n const alignClass = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n };\n return (_jsx(\"div\", { className: cn(\"w-full flex py-3 sm:py-2 sm:flex sm:flex-row-reverse sm:flex-row sm:justify-end sm:space-x-2\", alignClass[align], className), ...props, children: children }));\n};\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\nconst DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: cn(\"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className), ...props })));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\nconst DialogContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(DialogPortal, { children: [_jsx(DialogOverlay, {}), _jsx(DialogPrimitive.Content, { ref: ref, autoFocus: false, onOpenAutoFocus: (event) => {\n event.preventDefault();\n }, className: cn(\"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\", className), ...props, children: children })] })));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\nconst DialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, className: cn(\"text-sm text-muted\", className), ...props })));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\nconst DialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, className: cn(\"text-lg font-semibold leading-none tracking-tight\", className), ...props })));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\nexport { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogTitle, DialogDescription, };\n//# sourceMappingURL=dialog.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../libs/utils\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"@vertesia/ui/core\";\nconst variants = cva(\"\", {\n variants: {\n size: {\n xs: \"rounded py-1 text-xs rounded-xs\",\n sm: \"rounded text-xs rounded-sm\",\n md: \"rounded-md py-2 text-sm\",\n lg: \"rounded-md text-base\",\n xl: \"rounded-md py-2.5 text-lg\",\n },\n variant: {\n default: \"flex w-full rounded-md border border-input bg-background ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n unstyled: \"block m-0 p-0 w-full border-0 focus:outline-hidden focus:ring-0 bg-transparent\",\n noPadding: \"block rounded-md border-0 bg-background shadow-2xs ring-1 ring-inset ring-ring placeholder:text-muted-foreground focus:ring-2 focus:ring-inset focus:ring-ring ring-offset-background\",\n legacy: \"py-1.5 block rounded-md border-0 bg-background shadow-2xs ring-1 ring-inset ring-ring placeholder:text-muted-foreground focus:ring-2 focus:ring-inset focus:ring-ring ring-offset-background\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n});\nconst Input = React.forwardRef(({ className, type, size = \"md\", variant = \"default\", clearable = true, onChange, value, ...props }, ref) => {\n const _onClear = () => {\n onChange && onChange('');\n };\n const _onChange = (ev) => {\n onChange && onChange(ev.target.value);\n };\n return (_jsxs(\"div\", { className: \"w-full relative inline-block [&:hover_.clear-button]:opacity-100\", children: [_jsx(\"input\", { type: type, className: cn(variants({ size, variant }), className, clearable && value ? \"pr-8\" : \"\"), ref: ref, value: value == null ? '' : value, onChange: _onChange, ...props }), clearable && value && !props.readOnly && !props.disabled && (_jsx(Button, { variant: \"link\", size: \"icon\", type: \"button\", onClick: _onClear, className: `clear-button opacity-0 transition-opacity duration-200\n absolute top-1/2 -translate-y-1/2 text-muted !hover:text-destructive cursor-pointer\n flex items-center justify-center size-6 rounded right-2`, alt: \"Clear input\", children: _jsx(X, { size: 16 }) }))] }));\n});\nInput.displayName = \"Input\";\nexport { Input, };\n//# sourceMappingURL=input.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../libs/utils\";\nconst Separator = React.forwardRef(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (_jsx(SeparatorPrimitive.Root, { ref: ref, decorative: decorative, orientation: orientation, className: cn(\"shrink-0 bg-border\", orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\", className), ...props })));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\nexport { Separator };\n//# sourceMappingURL=separator.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../libs/utils\";\nimport { useIsInModal } from \"./dialog\";\nconst PopoverContext = React.createContext(null);\nconst Popover = ({ hover = false, click = false, children, _open, onOpenChange }) => {\n const [open, setOpen] = React.useState(_open || false);\n const insideModal = useIsInModal();\n const handleOpenChange = (open) => {\n setOpen(open);\n if (onOpenChange) {\n onOpenChange(open);\n }\n };\n return (_jsx(PopoverContext.Provider, { value: { open, setOpen, hover, click }, children: _jsx(PopoverPrimitive.Root, { open: open, onOpenChange: handleOpenChange, modal: insideModal, children: children }) }));\n};\nfunction handleHover(hover = false, setOpen = () => { }, type) {\n if (hover) {\n setOpen(type === \"enter\");\n }\n}\nconst PopoverTrigger = React.forwardRef(({ children, ...props }, ref) => {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"PopoverTrigger must be used within a Popover\");\n }\n const { setOpen, hover, click } = context;\n return (_jsx(PopoverPrimitive.Trigger, { ref: ref, asChild: true, onMouseEnter: () => handleHover(hover, setOpen, \"enter\"), onMouseLeave: () => handleHover(hover, setOpen, \"leave\"), onClick: () => {\n if (click)\n setOpen((prev) => !prev);\n }, ...props, children: children }));\n});\nPopoverTrigger.displayName = PopoverPrimitive.Trigger.displayName;\nconst PopoverAnchor = PopoverPrimitive.Anchor;\nconst PopoverContent = React.forwardRef(({ className, align = \"center\", side = \"bottom\", ...props }, ref) => {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"PopoverContent must be used within a Popover\");\n }\n const { setOpen, hover } = context;\n return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, side: side, onMouseEnter: () => handleHover(hover, setOpen, \"enter\"), onMouseLeave: () => handleHover(hover, setOpen, \"leave\"), \n // onClick={() => {setOpen(false)}}\n className: cn(\"z-50 w-72 rounded-md border-popover bg-popover text-popover-foreground ring-1 ring-gray-200 dark:ring-slate-700 shadow-md focus:outline-none animate-in\", \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className), ...props }) }));\n});\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\nconst PopoverClose = PopoverPrimitive.Close;\nPopoverClose.displayName = PopoverPrimitive.Close.displayName;\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose };\n//# sourceMappingURL=popover.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\nimport { cn } from \"../libs/utils\";\nimport { Dialog, DialogContent } from \"./dialog\";\nconst Command = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive, { ref: ref, className: cn(\"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\", className), ...props })));\nCommand.displayName = CommandPrimitive.displayName;\nconst CommandDialog = ({ children, ...props }) => {\n return (_jsx(Dialog, { ...props, children: _jsx(DialogContent, { className: \"shadow-lg p-0 overflow-hidden\", children: _jsx(Command, { className: \"[&_[cmdk-group]]:px-2 [&_[cmdk-item]]:px-2 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]_svg]:w-5 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\", children: children }) }) }));\n};\nconst CommandInput = React.forwardRef(({ className, ...props }, ref) => (_jsxs(\"div\", { className: \"flex items-center px-3 border-b\", \"cmdk-input-wrapper\": \"\", children: [_jsx(Search, { className: \"opacity-50 size-4 shrink-0\" }), _jsx(CommandPrimitive.Input, { ref: ref, className: cn(\"focus:ring-0\", \"border-0 flex h-8 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\", className), ...props })] })));\nCommandInput.displayName = CommandPrimitive.Input.displayName;\nconst CommandList = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.List, { ref: ref, className: cn(\"overflow-y-auto overflow-x-hidden\", className), ...props })));\nCommandList.displayName = CommandPrimitive.List.displayName;\nconst CommandEmpty = React.forwardRef((props, ref) => (_jsx(CommandPrimitive.Empty, { ref: ref, className: \"py-2 text-sm text-center\", ...props })));\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\nconst CommandGroup = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.Group, { ref: ref, className: cn(\"overflow-y-auto overflow-x-hidden p-1 text-foreground\", \"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\", className), ...props })));\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\nconst CommandSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.Separator, { ref: ref, className: cn(\"-mx-1 h-px bg-border\", className), ...props })));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\nconst CommandItem = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.Item, { ref: ref, className: cn(\"hover:bg-muted cursor-pointer relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", className), ...props })));\nCommandItem.displayName = CommandPrimitive.Item.displayName;\nconst CommandShortcut = ({ className, ...props }) => {\n return (_jsx(\"span\", { className: cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className), ...props }));\n};\nCommandShortcut.displayName = \"CommandShortcut\";\nexport { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };\n//# sourceMappingURL=command.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { isEqual } from 'lodash-es';\nimport { Check, ChevronsUpDown, SearchIcon, SquarePlus, X } from 'lucide-react';\nimport { useState, useEffect, useRef } from 'react';\nimport { Popover, PopoverContent, PopoverTrigger, PopoverClose } from './popover';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from './command';\nimport { Input } from './input';\nimport { Button } from '@vertesia/ui/core';\nexport function VSelectBox({ options, optionLabel, value, onChange, addNew, addNewLabel, disabled, filterBy, label, placeholder, className, popupClass, isClearable, border = true, multiple = false, by, inline = false }) {\n const triggerRef = useRef(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n const [filterValue, setFilterValue] = useState('');\n useEffect(() => {\n const element = triggerRef.current;\n if (!element) {\n return;\n }\n const updateWidth = () => {\n const contentWidth = element.getBoundingClientRect().width;\n setWidth(contentWidth);\n };\n const resizeObserver = new ResizeObserver(() => {\n updateWidth();\n });\n updateWidth();\n resizeObserver.observe(element);\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n const handleTriggerClick = (e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n setOpen(!open);\n };\n const _onClick = (opt) => {\n if (multiple) {\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = isOptionSelected(opt, currentValues);\n if (isSelected) {\n // Remove from selection\n const newValues = currentValues.filter(v => !isOptionsEqual(v, opt));\n onChange(newValues);\n }\n else {\n // Add to selection\n onChange([...currentValues, opt]);\n }\n // Don't close the popover in multiple mode\n }\n else {\n setOpen(false);\n onChange(opt);\n }\n };\n // Helper function to check if an option is selected\n const isOptionSelected = (option, selectedValues) => {\n if (!selectedValues || selectedValues.length === 0)\n return false;\n return selectedValues.some(v => isOptionsEqual(v, option));\n };\n // Helper function to compare options for equality\n const isOptionsEqual = (a, b) => {\n // Handle null/undefined values\n if (a == null || b == null) {\n return a === b;\n }\n if (typeof by === 'string') {\n return a[by] === b[by];\n }\n else if (typeof by === 'function') {\n return by(a, b);\n }\n else {\n return isEqual(a, b);\n }\n };\n let filteredOptions = options || [];\n function getFilterByFn(filterBy) {\n if (!filterBy) {\n return (o) => String(o).toLowerCase();\n }\n else if (typeof filterBy === 'string') {\n return (o) => String(o[filterBy]).toLowerCase();\n }\n else {\n return filterBy;\n }\n }\n const filterLc = filterValue.toLowerCase();\n const filterFn = getFilterByFn(filterBy);\n filteredOptions = filteredOptions.filter(o => filterFn(o).includes(filterLc));\n const renderSingleValue = () => {\n if (!value || (Array.isArray(value) && value.length === 0)) {\n return _jsx(\"span\", { className: \"text-muted\", children: placeholder });\n }\n const singleValue = Array.isArray(value) ? value[0] : value;\n return optionLabel ? optionLabel(singleValue) : singleValue;\n };\n const renderMultipleValue = () => {\n const arrayValue = Array.isArray(value) ? value : (value ? [value] : []);\n if (arrayValue.length === 0) {\n return _jsx(\"span\", { className: \"text-muted\", children: placeholder });\n }\n if (arrayValue.length === 1) {\n return optionLabel ? optionLabel(arrayValue[0]) : arrayValue[0];\n }\n return (_jsxs(\"div\", { className: \"flex flex-wrap gap-1\", children: [arrayValue.slice(0, 1).map((item, index) => (_jsx(\"span\", { className: \"inline-flex items-center gap-1 px-2 py-1 text-xs bg-muted rounded\", children: optionLabel ? optionLabel(item) : item }, index))), arrayValue.length > 1 && (_jsxs(\"span\", { className: \"inline-flex items-center px-2 py-1 text-xs bg-muted rounded\", children: [\"+\", arrayValue.length - 1, \" more\"] }))] }));\n };\n // Render the options list content\n const renderOptionsContent = () => (_jsxs(_Fragment, { children: [filterBy && (_jsxs(\"div\", { className: 'flex justify-start items-center mb-1', children: [_jsx(\"div\", { className: 'mx-2', children: _jsx(SearchIcon, { className: \"size-4\" }) }), _jsx(Input, { variant: 'unstyled', value: filterValue, onChange: setFilterValue, className: \"w-full p-1 rounded-md\", placeholder: \"Search...\" })] })), _jsx(Command, { className: \"overflow-hidden\", children: _jsxs(CommandList, { className: inline ? \"max-h-full overflow-y-auto\" : \"max-h-[200px] overflow-y-auto\", children: [_jsx(CommandEmpty, { children: \"No result found.\" }), _jsx(CommandGroup, { className: \"overflow-visible\", children: filteredOptions?.map((opt, index) => {\n const isSelected = multiple\n ? isOptionSelected(opt, Array.isArray(value) ? value : [])\n : value != null ? isOptionsEqual(value, opt) : false;\n return (_jsx(CommandItem, { onSelect: () => _onClick(opt), className: \"w-full\", children: multiple || inline ? (_jsxs(\"div\", { className: 'w-full flex justify-between items-center cursor-pointer', children: [_jsx(\"div\", { className: 'w-full truncate text-left', children: optionLabel ? optionLabel(opt) : opt }), isSelected && _jsx(Check, { className: \"size-4\" })] })) : (_jsxs(PopoverClose, { className: 'w-full flex justify-between items-center', children: [_jsx(\"div\", { className: 'w-full truncate text-left', children: optionLabel ? optionLabel(opt) : opt }), isSelected && _jsx(Check, { className: \"size-4\" })] })) }, index));\n }) })] }) }), addNew && (_jsx(\"div\", { className: 'p-1', children: _jsxs(\"a\", { onClick: addNew, className: clsx('gap-x-2 px-2 py-1.5 truncate group flex rounded-md items-center text-sm cursor-pointer hover:bg-accent'), children: [_jsx(SquarePlus, { size: 16, strokeWidth: 1.25, absoluteStrokeWidth: true }), addNewLabel] }) }))] }));\n if (inline) {\n return (_jsx(\"div\", { className: clsx(className, border && 'border border-border rounded-md', \"bg-popover p-1\", popupClass), children: renderOptionsContent() }));\n }\n return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(\"div\", { ref: triggerRef, onClick: handleTriggerClick, className: clsx(className, border && 'border border-border', 'flex flex-row gap-2 items-center justify-between p-2 rounded-md group relative [&:hover_.clear-button]:opacity-100', !disabled ? \"cursor-pointer hover:bg-muted\" : \"cursor-not-allowed text-muted\"), children: [_jsxs(\"div\", { className: clsx(\"flex flex-col w-full rounded-md text-sm items-center justify-center truncate\", !disabled && \"\", isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && \"pr-6\"), children: [label && _jsx(\"div\", { className: 'w-full text-left text-xs font-semibold', children: label }), _jsx(\"div\", { className: clsx('w-full text-left', !disabled && ''), children: multiple ? renderMultipleValue() : renderSingleValue() })] }), _jsxs(\"div\", { className: \"flex items-center gap-1 group\", children: [isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && (_jsx(Button, { variant: \"link\", size: \"icon\", alt: \"Clear selection\", onClick: (e) => {\n e.stopPropagation();\n if (multiple) {\n onChange([]);\n }\n else {\n onChange(undefined);\n }\n }, className: \"cursor-pointer hover:bg-muted/20 clear-button opacity-0 transition-opacity duration-200 rounded p-1\", children: _jsx(X, { className: \"size-4\" }) })), !disabled && (_jsx(ChevronsUpDown, { className: \"size-4 opacity-50\" }))] })] }) }), _jsx(PopoverContent, { style: { width: `${width}px`, zIndex: 1000000 }, className: clsx(\"min-w-[8rem] w-64 bg-popover p-1 border shadow\", \"divide-y divide-border\", popupClass), children: renderOptionsContent() })] }));\n}\n//# sourceMappingURL=selectBox.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../libs/utils\";\nimport { VSelectBox } from \"./selectBox\";\nconst TabsContext = React.createContext({\n size: undefined,\n tabs: undefined,\n current: undefined,\n setTab: undefined,\n responsive: false,\n variant: \"tabs\",\n updateHash: true\n});\nconst VTabs = ({ tabs, defaultValue, current, className, fullWidth, children, onTabChange, responsive = false, variant = \"tabs\", updateHash = true }) => {\n // Initialize value\n const [value, setValue] = React.useState(() => {\n // First check if current is provided\n const currentValue = typeof current === 'function' ? current() : current;\n if (currentValue) {\n return currentValue;\n }\n // Then check hash\n const hash = window.location.hash;\n const currentTab = hash ? hash.substring(1) : undefined;\n // Check if the tab from hash exists in tabs\n if (currentTab && tabs.some(tab => tab.name === currentTab)) {\n return currentTab;\n }\n // Fall back to default or first tab\n return defaultValue || tabs[0]?.name;\n });\n // Update when current prop changes (but don't create a loop)\n React.useEffect(() => {\n const currentValue = typeof current === 'function' ? current() : current;\n if (currentValue && currentValue !== value) {\n setValue(currentValue);\n }\n }, [current]);\n // Listen to hash changes only when there's no current prop being controlled externally\n React.useEffect(() => {\n if (current)\n return; // Skip hash handling if controlled by parent\n const handleHashChange = () => {\n const hash = window.location.hash;\n const currentTab = hash ? hash.substring(1) : undefined;\n // Only update if the tab exists in tabs\n if (currentTab && tabs.some(tab => tab.name === currentTab)) {\n setValue(currentTab);\n }\n else if (!hash && defaultValue) {\n // If no hash, fall back to default\n setValue(defaultValue);\n }\n };\n // Check initial hash\n handleHashChange();\n window.addEventListener('hashchange', handleHashChange);\n return () => window.removeEventListener('hashchange', handleHashChange);\n }, [current, tabs, defaultValue]);\n const handleValueChange = (newValue) => {\n setValue(newValue);\n // Update the URL hash when tab changes (only if updateHash is true and not controlled by parent)\n if (updateHash && !current) {\n // Preserve existing history state when changing hash\n const currentState = window.history.state;\n const newUrl = window.location.pathname + window.location.search + '#' + newValue;\n window.history.pushState(currentState, '', newUrl);\n }\n if (onTabChange) {\n onTabChange(newValue);\n }\n };\n const setTab = React.useCallback((tabName) => {\n handleValueChange(tabName);\n }, [handleValueChange]);\n return (_jsx(TabsContext.Provider, { value: { tabs, size: fullWidth ? tabs.length : 0, current: value, setTab, responsive: responsive, variant, updateHash }, children: _jsx(TabsPrimitive.Root, { defaultValue: value || tabs[0]?.name, value: value, onValueChange: handleValueChange, className: className, children: children }) }));\n};\nconst VTabsBar = ({ className }) => {\n const { tabs, size, current, setTab, responsive, variant, updateHash } = React.useContext(TabsContext);\n const fullWidth = size !== 0;\n const handleTabChange = React.useCallback((tabName) => {\n if (!tabs || !setTab)\n return;\n const tab = tabs.find(t => t.name === tabName);\n if (tab?.href && updateHash) {\n // Preserve existing history state when changing tabs\n const currentState = window.history.state;\n window.history.pushState(currentState, '', tab.href);\n }\n setTab(tabName);\n }, [tabs, setTab, updateHash]);\n if (!tabs || !setTab) {\n console.warn(\"TabsBar: No tabs provided or setTab not available\");\n return null;\n }\n return (_jsxs(_Fragment, { children: [responsive && (_jsx(\"div\", { className: \"px-2 block lg:hidden\", children: _jsx(VSelectBox, { label: \"Tab\", className: (className), options: tabs, optionLabel: (tab) => typeof tab.label === 'string' ? tab.label : String(tab.label), value: tabs.find(tab => tab.name === current), onChange: (tab) => {\n handleTabChange(tab.name);\n } }) })), _jsx(TabsList, { size: size, variant: variant, className: cn((fullWidth ? \"w-full\" : \"\"), className, (responsive ? \"hidden lg:flex\" : \"\")), children: tabs.map((tab) => (_jsx(TabsTrigger, { value: tab.name, disabled: tab.disabled, href: tab.href, variant: variant, onClick: () => handleTabChange(tab.name), children: tab.label }, tab.name))) })] }));\n};\nconst VTabsPanel = () => {\n const { tabs } = React.useContext(TabsContext);\n if (!tabs)\n return null;\n return (_jsx(_Fragment, { children: tabs.map((tab) => (_jsx(TabsContent, { value: tab.name, children: tab.content }, tab.name))) }));\n};\nconst TabsList = React.forwardRef(({ className, size, variant = \"tabs\", ...props }, ref) => (_jsx(TabsContext.Provider, { value: { size, variant }, children: _jsx(TabsPrimitive.List, { ref: ref, className: cn(variant === \"tabs\"\n ? \"border-b -mb-px flex space-x-4\"\n : \"flex space-x-2 p-1 rounded-md\", className), ...props }) })));\nTabsList.displayName = TabsPrimitive.List.displayName;\nconst TabsTrigger = React.forwardRef(({ className, href, variant = \"tabs\", ...props }, ref) => {\n const { size } = React.useContext(TabsContext);\n const handleClick = React.useCallback((event) => {\n if (href) {\n event.preventDefault();\n // Preserve existing history state when changing tabs\n const currentState = window.history.state;\n window.history.pushState(currentState, '', href);\n }\n if (props.onClick) {\n props.onClick(event);\n }\n }, [href, props.onClick]);\n return (_jsx(TabsPrimitive.Trigger, { ref: ref, className: cn(variant === \"tabs\"\n ? cn(\"border-b-2 px-2 py-1.5 text-sm font-medium whitespace-nowrap cursor-pointer\", \"border-transparent text-muted-foreground hover:border-border hover:text-foreground\", \"data-[state=active]:border-primary data-[state=active]:text-primary\", \"disabled:pointer-events-none disabled:opacity-50\")\n : cn(\"px-3 py-1.5 text-sm font-medium whitespace-nowrap cursor-pointer rounded-sm transition-colors\", \"tborder border-input bg-muted shadow-xs hover:bg-muted ring-inset\", \"data-[state=active]:bg-primary data-[state=active]:text-white data-[state=active]:shadow-sm\", \"disabled:pointer-events-none disabled:opacity-50\"), className, size ? `w-1/${size}` : \"\"), onClick: handleClick, ...props }));\n});\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\nconst TabsContent = React.forwardRef(({ className, ...props }, ref) => (_jsx(TabsPrimitive.Content, { ref: ref, className: cn(\"focus-visible:outline-none\", className), ...props })));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\nexport { VTabs, VTabsBar, VTabsPanel, TabsList, TabsTrigger, TabsContent };\n//# sourceMappingURL=tabs.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../libs/utils\";\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipContent = React.forwardRef(({ className, sideOffset = 4, side = \"top\", ...props }, ref) => (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Content, { ref: ref, sideOffset: sideOffset, side: side, style: { zIndex: 100 }, className: cn(\"max-w-[90vw]\", \"z-50 overflow-hidden rounded-md bg-tooltips border px-3 py-1.5 text-xs animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className), ...props }) })));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\nexport function VTooltip({ description, children, size = 'sm', placement = 'top', className, asChild }) {\n return (_jsx(TooltipProvider, { delayDuration: 0, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { className: \"cursor-pointer\", asChild: asChild, children: children }), _jsx(TooltipContent, { side: placement, className: `px-3 py-1.5 max-w-${size} text-${size} px-3 ${className}`, children: description })] }) }));\n}\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n//# sourceMappingURL=tooltip.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../libs/utils\";\nconst labelVariants = cva(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\nconst Label = React.forwardRef(({ className, required, ...props }, ref) => (_jsxs(LabelPrimitive.Root, { ref: ref, className: cn(labelVariants(), className), ...props, children: [props.children, required && _jsx(\"span\", { className: \"text-destructive-foreground ml-1\", children: \"*\" })] })));\nLabel.displayName = LabelPrimitive.Root.displayName;\nexport { Label };\n//# sourceMappingURL=label.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"../libs/utils\";\nexport function Breadcrumbs({ path, maxItems = 3, className, separator }) {\n const items = path || [];\n const renderBreadcrumbItem = (item) => {\n if (item.onClick) {\n return _jsx(BreadcrumbButton, { onClick: item.onClick, href: item.href, children: item.label });\n }\n else if (item.href) {\n return _jsx(BreadcrumbButton, { href: item.href, children: item.label });\n }\n else {\n return _jsx(BreadcrumbPage, { children: item.label });\n }\n };\n if (items.length <= maxItems) {\n return (_jsx(Breadcrumb, { className: cn(\"w-full\", className), children: _jsx(BreadcrumbList, { children: items.map((item, index) => (_jsxs(React.Fragment, { children: [_jsx(BreadcrumbItem, { children: renderBreadcrumbItem(item) }), index < items.length - 1 &&\n _jsx(BreadcrumbSeparator, { children: separator ?? _jsx(ChevronRight, {}) })] }, index))) }) }));\n }\n const lastThreeItems = items.slice(-(maxItems - 1));\n return (_jsx(Breadcrumb, { className: cn(\"w-full\", className), children: _jsxs(BreadcrumbList, { children: [_jsx(BreadcrumbItem, { children: _jsx(BreadcrumbEllipsis, {}) }), _jsx(BreadcrumbSeparator, { children: separator ?? _jsx(ChevronRight, {}) }), lastThreeItems.map((item, index) => (_jsxs(React.Fragment, { children: [_jsx(BreadcrumbItem, { children: renderBreadcrumbItem(item) }), index < lastThreeItems.length - 1 && _jsx(BreadcrumbSeparator, { children: separator ?? _jsx(ChevronRight, {}) })] }, index)))] }) }));\n}\nconst Breadcrumb = React.forwardRef(({ ...props }, ref) => _jsx(\"nav\", { ref: ref, \"aria-label\": \"breadcrumb\", ...props }));\nBreadcrumb.displayName = \"Breadcrumb\";\nconst BreadcrumbList = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"ol\", { ref: ref, className: cn(\"flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5\", className), ...props })));\nBreadcrumbList.displayName = \"BreadcrumbList\";\nconst BreadcrumbItem = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"li\", { ref: ref, className: cn(\"inline-flex items-center gap-1.5 text-muted\", className), ...props })));\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\nconst BreadcrumbLink = React.forwardRef(({ asChild, className, ...props }, ref) => {\n return (_jsx(\"a\", { ref: ref, className: cn(\"transition-colors hover:text-muted\", className), ...props }));\n});\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\nconst BreadcrumbButton = React.forwardRef(({ className, href, onClick, ...props }, ref) => {\n const handleClick = (e) => {\n e.preventDefault();\n if (onClick) {\n onClick(e);\n }\n };\n return (_jsx(\"button\", { ref: ref, className: cn(\"transition-colors hover:text-foreground cursor-pointer\", className), onClick: handleClick, ...props }));\n});\nBreadcrumbButton.displayName = \"BreadcrumbButton\";\nconst BreadcrumbPage = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"span\", { ref: ref, role: \"link\", \"aria-disabled\": \"true\", \"aria-current\": \"page\", className: cn(\"font-normal text-foreground\", className), ...props })));\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\nconst BreadcrumbSeparator = ({ children, className, ...props }) => (_jsx(\"li\", { role: \"presentation\", \"aria-hidden\": \"true\", className: cn(\"[&>svg]:w-3.5 [&>svg]:h-3.5\", className), ...props, children: children ?? _jsx(ChevronRight, {}) }));\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\nconst BreadcrumbEllipsis = ({ className, ...props }) => (_jsxs(\"span\", { role: \"presentation\", \"aria-hidden\": \"true\", className: cn(\"flex h-9 w-9 items-center justify-center\", className), ...props, children: [_jsx(MoreHorizontal, { className: \"h-4 w-4\" }), _jsx(\"span\", { className: \"sr-only\", children: \"More\" })] }));\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n//# sourceMappingURL=breadcrumb.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../../libs/utils\";\nimport { useEffect, useRef, useState } from \"react\";\nexport const AnimateChangeInHeight = ({ children, className, }) => {\n const containerRef = useRef(null);\n const [height, setHeight] = useState(\"auto\");\n useEffect(() => {\n if (containerRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n // We only have one entry, so we can use entries[0].\n const observedHeight = entries[0].contentRect.height;\n setHeight(observedHeight);\n });\n resizeObserver.observe(containerRef.current);\n return () => {\n // Cleanup the observer when the component is unmounted\n resizeObserver.disconnect();\n };\n }\n }, []);\n return (_jsx(\"div\", { className: cn(className, \"overflow-hidden transition-all duration-100 ease-in\"), style: { height }, children: _jsx(\"div\", { ref: containerRef, children: children }) }));\n};\n//# sourceMappingURL=animateChangeInHeight.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../libs/utils\";\nconst Checkbox = React.forwardRef(({ className, ...props }, ref) => (_jsx(CheckboxPrimitive.Root, { ref: ref, className: cn(\"peer size-4 shrink-0 rounded-sm border border-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-white\", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { className: cn(\"flex items-center justify-center text-current\"), children: _jsx(Check, { className: \"size-4\" }) }) })));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\nexport { Checkbox };\n//# sourceMappingURL=checkbox.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useEffect, useState } from 'react';\nexport function DynamicLabel({ value, labelRenderer, fallbackLabel }) {\n const [label, setLabel] = useState(fallbackLabel || value);\n const [isLoading, setIsLoading] = useState(false);\n useEffect(() => {\n if (!labelRenderer) {\n setLabel(fallbackLabel || value);\n return;\n }\n const renderLabel = async () => {\n setIsLoading(true);\n try {\n const result = labelRenderer(value);\n if (result instanceof Promise) {\n const resolvedLabel = await result;\n setLabel(resolvedLabel);\n }\n else {\n setLabel(result);\n }\n }\n catch (error) {\n console.error('Error rendering label:', error);\n setLabel(fallbackLabel || value);\n }\n finally {\n setIsLoading(false);\n }\n };\n renderLabel();\n }, [value, labelRenderer, fallbackLabel]);\n if (isLoading) {\n return _jsx(\"span\", { className: \"text-muted-foreground\", children: \"Loading...\" });\n }\n return _jsx(_Fragment, { children: label });\n}\n//# sourceMappingURL=DynamicLabel.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useRef, useState } from \"react\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from \"../../command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nimport { AnimateChangeInHeight } from \"../animateChangeInHeight\";\nimport { DynamicLabel } from \"../DynamicLabel\";\nexport const SelectionCombobox = ({ filterType, filterValues, setFilterValues, options, labelRenderer, }) => {\n const [open, setOpen] = useState(false);\n const [commandInput, setCommandInput] = useState(\"\");\n const commandInputRef = useRef(null);\n const nonSelectedFilterValues = options?.filter((option) => !filterValues.some(filter => filter.value === option.value));\n return (_jsxs(Popover, { _open: open, onOpenChange: (open) => {\n setOpen(open);\n if (!open) {\n setTimeout(() => {\n setCommandInput(\"\");\n }, 200);\n }\n }, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 transition text-muted hover:text-primary shrink-0\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center\", children: filterValues?.length === 1 ? ((() => {\n const option = filterValues[0];\n return (_jsx(DynamicLabel, { value: option.value || '', labelRenderer: labelRenderer, fallbackLabel: option.label }));\n })()) : (`${filterValues?.length} selected`) }) }), _jsx(PopoverContent, { className: \"w-[300px] p-0\", children: _jsx(AnimateChangeInHeight, { children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: filterType, className: \"h-9\", value: commandInput, onInputCapture: (e) => {\n setCommandInput(e.currentTarget.value);\n }, ref: commandInputRef }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: \"No results found.\" }), _jsx(CommandGroup, { children: filterValues.map((value) => {\n return (_jsxs(CommandItem, { className: \"group flex gap-2 items-center\", onSelect: () => {\n setFilterValues(filterValues.filter((v) => v.value !== value.value));\n setTimeout(() => {\n setCommandInput(\"\");\n }, 200);\n setOpen(false);\n }, children: [_jsx(\"input\", { type: \"checkbox\", checked: true, onChange: () => { } }), _jsx(DynamicLabel, { value: value.value || '', labelRenderer: labelRenderer, fallbackLabel: value.label })] }, value.value));\n }) }), nonSelectedFilterValues?.length > 0 && (_jsxs(_Fragment, { children: [_jsx(CommandSeparator, {}), _jsx(CommandGroup, { children: nonSelectedFilterValues\n .filter(option => String(option.label || option.value).toLowerCase().includes(commandInput.toLowerCase()))\n .map((filter) => (_jsxs(CommandItem, { className: \"group flex gap-2 items-center\", value: String(filter.label || filter.value), onSelect: () => {\n setFilterValues([...filterValues, {\n value: filter.value,\n label: filter.label\n }]);\n setTimeout(() => {\n setCommandInput(\"\");\n }, 200);\n setOpen(false);\n }, children: [_jsx(Checkbox, { checked: false, className: \"opacity-0 group-data-[selected=true]:opacity-100\" }), _jsx(\"span\", { className: \"text-muted\", children: _jsx(DynamicLabel, { value: filter.value || '', labelRenderer: filter.labelRenderer || labelRenderer, fallbackLabel: filter.label }) })] }, filter.value))) })] }))] })] }) }) })] }));\n};\n//# sourceMappingURL=SelectCombobox.js.map","export const calendarStyles = `\n.calendar-wrapper .react-calendar__navigation {\n display: flex !important;\n justify-content: space-between !important;\n align-items: center !important;\n gap: 8px !important;\n padding: 8px !important;\n}\n\n.calendar-wrapper .react-calendar__navigation__label {\n flex: 1 !important;\n text-align: center !important;\n font-weight: 500 !important;\n}\n\n.calendar-wrapper .react-calendar__navigation__arrow {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n min-width: 32px !important;\n height: 32px !important;\n border-radius: 4px !important;\n border: 1px solid hsl(var(--border)) !important;\n background: hsl(var(--background)) !important;\n color: hsl(var(--foreground)) !important;\n}\n\n.calendar-wrapper .react-calendar__navigation__arrow:hover {\n background: oklch(var(--muted)) !important;\n}\n\n.calendar-wrapper .react-calendar__tile {\n cursor: pointer !important;\n width: 0.5rem !important;\n font-size: 0.875rem !important;\n}\n\n.calendar-wrapper .react-calendar__tile:hover,\n.calendar-wrapper .react-calendar__month-view__days__day:hover,\n.calendar-wrapper .react-calendar__decade-view__years__year:hover,\n.calendar-wrapper .react-calendar__year-view__months__month:hover {\n background: #b5b5b580 !important;\n}\n\n.calendar-wrapper .react-calendar__tile:not(.react-calendar__tile--active):hover {\n background: #b5b5b580 !important;\n}\n\n.calendar-wrapper .react-calendar__tile--hover {\n background: #b5b5b580 !important;\n}\n\n.calendar-wrapper .react-calendar__tile--disabled,\n.calendar-wrapper .react-calendar__tile:disabled,\n.calendar-wrapper .react-calendar__month-view__days__day--disabled,\n.calendar-wrapper .react-calendar__month-view__days__day:disabled,\n.calendar-wrapper .react-calendar__year-view__months__month--disabled,\n.calendar-wrapper .react-calendar__year-view__months__month:disabled,\n.calendar-wrapper .react-calendar__decade-view__years__year--disabled,\n.calendar-wrapper .react-calendar__decade-view__years__year:disabled {\n cursor: not-allowed !important;\n color: #9ca3af !important;\n}\n\n.calendar-wrapper .react-calendar__tile--disabled:hover,\n.calendar-wrapper .react-calendar__tile:disabled:hover,\n.calendar-wrapper .react-calendar__month-view__days__day--disabled:hover,\n.calendar-wrapper .react-calendar__month-view__days__day:disabled:hover,\n.calendar-wrapper .react-calendar__year-view__months__month--disabled:hover,\n.calendar-wrapper .react-calendar__year-view__months__month:disabled:hover,\n.calendar-wrapper .react-calendar__decade-view__years__year--disabled:hover,\n.calendar-wrapper .react-calendar__decade-view__years__year:disabled:hover {\n background: transparent !important;\n}\n\n\n.calendar-wrapper .react-calendar__month-view__weekdays {\n font-size: 0.75rem !important;\n}\n\n.calendar-wrapper .react-calendar__month-view__weekdays__weekday {\n width: 0.75rem !important;\n font-size: 0.75rem !important;\n text-align: center !important;\n}\n \n`;\n//# sourceMappingURL=filter-styles.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useState, useEffect } from \"react\";\nimport dayjs from \"dayjs\";\nimport ReactCalendar from \"react-calendar\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nimport { calendarStyles } from \"../filter-styles\";\nexport const DateCombobox = ({ filterValues, setFilterValues, isRange = false, }) => {\n const [open, setOpen] = useState(false);\n const [localDateRange, setLocalDateRange] = useState([null, null]);\n // For single date\n const selectedDate = filterValues[0] ? new Date(filterValues[0]) : undefined;\n // For date range - use local state for immediate feedback, fall back to filter values\n const dateRange = isRange ? [\n localDateRange[0] || (filterValues[0] ? new Date(filterValues[0]) : null),\n localDateRange[1] || (filterValues[1] ? new Date(filterValues[1]) : null)\n ] : [null, null];\n // Update local state when filter values change\n useEffect(() => {\n if (isRange) {\n setLocalDateRange([\n filterValues[0] ? new Date(filterValues[0]) : null,\n filterValues[1] ? new Date(filterValues[1]) : null\n ]);\n }\n }, [filterValues, isRange]);\n const getDisplayText = () => {\n if (isRange) {\n if (dateRange[0] && dateRange[1]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-1.5\", children: [_jsx(\"span\", { className: \"font-medium\", children: dayjs(dateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted-foreground\", children: \"-\" }), _jsx(\"span\", { className: \"font-medium\", children: dayjs(dateRange[1]).format(\"MMMM DD, YYYY\") })] }));\n }\n else if (dateRange[0]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-1.5\", children: [_jsx(\"span\", { className: \"font-medium\", children: dayjs(dateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted-foreground\", children: \"- Select end\" })] }));\n }\n else {\n return _jsx(\"span\", { className: \"text-muted-foreground\", children: \"Select range\" });\n }\n }\n else {\n return selectedDate ? dayjs(selectedDate).format(\"MMMM DD, YYYY\") : \"Pick a date\";\n }\n };\n const handleDateChange = (date) => {\n if (isRange) {\n // Update local state immediately for visual feedback\n if (Array.isArray(date)) {\n setLocalDateRange([date[0], date[1]]);\n // Update filter values\n if (date[0] && date[1]) {\n setFilterValues([\n dayjs(date[0]).format(\"YYYY-MM-DD\"),\n dayjs(date[1]).format(\"YYYY-MM-DD\")\n ]);\n }\n else if (date[0]) {\n setFilterValues([dayjs(date[0]).format(\"YYYY-MM-DD\")]);\n }\n }\n }\n else {\n if (date) {\n const actualDate = Array.isArray(date) ? date[0] : date;\n if (actualDate) {\n setFilterValues([dayjs(actualDate).format(\"YYYY-MM-DD\")]);\n setOpen(false);\n }\n }\n }\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center min-h-[20px]\", children: getDisplayText() }) }), _jsx(PopoverContent, { className: \"w-auto p-0\", align: \"start\", side: \"bottom\", alignOffset: -4, sideOffset: 6, children: _jsx(\"div\", { className: \"p-2\", children: isRange ? (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(ReactCalendar, { value: dateRange, onChange: handleDateChange, selectRange: true, returnValue: \"range\", maxDate: (() => {\n const maxDate = new Date();\n maxDate.setHours(23, 59, 59, 999);\n return maxDate;\n })(), className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (dateRange[0]) {\n const startDate = dateRange[0].getTime();\n if (dateRange[1]) {\n // Both dates selected\n const endDate = dateRange[1].getTime();\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-l-md font-semibold';\n }\n if (currentDate === endDate) {\n return 'bg-primary text-primary-foreground rounded-r-md font-semibold';\n }\n if (currentDate > startDate && currentDate < endDate) {\n return 'bg-primary/20 text-primary font-medium';\n }\n }\n else {\n // Only start date selected\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n }\n }\n return '';\n } })] }), dateRange[0] && dateRange[1] && (_jsx(\"div\", { className: \"border-t pt-2\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: () => setOpen(false), children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: () => setOpen(false), children: \"Apply\" })] }) }))] })) : (_jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(ReactCalendar, { value: selectedDate, onChange: handleDateChange, selectRange: false, maxDate: (() => {\n const maxDate = new Date();\n maxDate.setHours(23, 59, 59, 999);\n return maxDate;\n })(), className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (selectedDate && currentDate === selectedDate.getTime()) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n return '';\n } })] })) }) })] }));\n};\n//# sourceMappingURL=DateCombobox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { Button } from \"../../button\";\nimport { Input } from \"../../input\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nexport const TextCombobox = ({ filterType, filterValue, setFilterValue, }) => {\n const [open, setOpen] = useState(false);\n const [inputValue, setInputValue] = useState(filterValue);\n const handleKeyDown = (event) => {\n if (event.key === \"Enter\") {\n setFilterValue(inputValue);\n setOpen(false);\n }\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: (open) => {\n setOpen(open);\n if (!open && inputValue !== filterValue) {\n setInputValue(filterValue);\n }\n }, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center\", children: filterValue || \"Enter text...\" }) }), _jsx(PopoverContent, { className: \"w-[300px] p-3\", children: _jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted\", children: _jsx(\"span\", { children: filterType }) }), _jsx(Input, { autoFocus: true, type: \"text\", size: \"sm\", value: inputValue, onChange: setInputValue, onKeyDown: handleKeyDown, placeholder: \"Enter text...\" }), _jsx(\"div\", { className: \"mt-2 p-2 border-t\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: () => {\n setInputValue(filterValue);\n setOpen(false);\n }, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: () => {\n setFilterValue(inputValue);\n setOpen(false);\n }, children: \"Apply\" })] }) })] }) })] }));\n};\n//# sourceMappingURL=TextCombobox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nimport { InputList } from \"../../../index\";\nexport const StringListCombobox = ({ filterType, filterValues, setFilterValues, }) => {\n const [open, setOpen] = useState(false);\n const [tags, setTags] = useState(filterValues);\n const handleApply = () => {\n setFilterValues(tags);\n setOpen(false);\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: (open) => {\n setOpen(open);\n if (!open && JSON.stringify(tags) !== JSON.stringify(filterValues)) {\n setTags(filterValues);\n }\n }, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center\", children: filterValues.length > 0 ? (filterValues.length === 1 ? filterValues[0] : `${filterValues.length} tags`) : (\"Add tags...\") }) }), _jsx(PopoverContent, { className: \"w-[300px] p-3\", children: _jsxs(\"div\", { className: \"flex flex-col gap-3\", children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted\", children: _jsx(\"span\", { children: filterType }) }), _jsx(InputList, { value: tags, onChange: setTags, placeholder: `Add ${filterType.toLowerCase()}...` }), _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { size: \"sm\", variant: \"ghost\", onClick: () => {\n setTags(filterValues);\n setOpen(false);\n }, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApply, children: \"Apply\" })] })] }) })] }));\n};\n//# sourceMappingURL=StringListCombobox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../button\";\nimport { DateCombobox, SelectionCombobox, TextCombobox, StringListCombobox } from \"./comboBox/comboBox\";\nimport dayjs from \"dayjs\";\nfunction generateComboboxOptions(filter, setFilters, filterGroups) {\n switch (filter.type) {\n case \"date\":\n return (_jsx(DateCombobox, { filterValues: Array.isArray(filter.value) && typeof filter.value[0] === 'object' ? filter.value.map((v) => v.value || '') : [], isRange: filter.multiple, setFilterValues: (filterValues) => {\n setFilters((prev) => prev.map((f) => f === filter ? {\n ...f,\n value: filterValues.length > 0 ?\n filterValues.map(dateValue => ({\n value: dateValue,\n label: dayjs(dateValue).format(\"LLL dd, y\"),\n })) : []\n } : f));\n } }));\n case \"text\":\n return (_jsx(TextCombobox, { filterType: filter.placeholder || filter.name, filterValue: Array.isArray(filter.value) && filter.value[0] && typeof filter.value[0] === 'object' ? filter.value[0].value || \"\" : \"\", setFilterValue: (textValue) => {\n setFilters((prev) => prev.map((f) => f === filter\n ? {\n ...f,\n value: [\n {\n value: textValue,\n label: textValue,\n },\n ],\n }\n : f));\n } }));\n case \"stringList\":\n return (_jsx(StringListCombobox, { filterType: filter.placeholder || filter.name, filterValues: Array.isArray(filter.value) && typeof filter.value[0] === 'string' ? filter.value : [], setFilterValues: (values) => {\n setFilters((prev) => prev.map((f) => f === filter\n ? { ...f, value: values }\n : f));\n } }));\n case 'select':\n default: {\n const filterGroup = filterGroups.find(group => group.name === filter.name);\n return (_jsx(SelectionCombobox, { filterType: filter.placeholder || filter.name, filterValues: Array.isArray(filter.value) && typeof filter.value[0] === 'object' ? filter.value : [], setFilterValues: (filterValues) => {\n setFilters((prev) => prev.map((f) => f === filter\n ? { ...f, value: filterValues }\n : f));\n }, options: filterGroup?.options || [], labelRenderer: filterGroup?.labelRenderer }));\n }\n }\n}\nexport default function Filters({ filters, setFilters, filterGroups, }) {\n return (_jsx(\"div\", { className: \"flex gap-2 flex-wrap justify-start\", children: filters\n .filter((filter) => filter.value?.length > 0)\n .map((filter) => (_jsxs(\"div\", { className: \"flex gap-[1px] items-center text-sm\", children: [_jsx(\"div\", { className: \"flex gap-1.5 shrink-0 rounded-l bg-muted p-1.5 h-8 items-center\", children: filter.placeholder || filter.name }), generateComboboxOptions(filter, setFilters, filterGroups), _jsx(Button, { variant: \"ghost\", size: \"icon\", onClick: () => {\n setFilters((prev) => prev.filter((f) => f !== filter));\n }, className: \"bg-muted rounded-l-none rounded-r-sm size-8 hover:text-primary hover:bg-muted/50 transition shrink-0\", children: _jsx(X, { className: \"size-6\" }) })] }, filter.name + '-' + (filter.type == 'date' ? 'date' : filter.type === 'stringList' && typeof filter.value[0] === 'string' ? filter.value.join(',') : Array.isArray(filter.value) ? filter.value.map((v) => v.value).join(',') : '')))) }));\n}\n//# sourceMappingURL=filters.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from \"../../button\";\nimport { Input } from \"../../input\";\nexport default function TextFilter({ selectedView, textValue, setTextValue, setFilters, handleClose, filterGroups, }) {\n const handleTextFilterAdd = () => {\n setFilters((prev) => {\n return [\n ...prev,\n {\n name: selectedView || \"\",\n placeholder: filterGroups.find(group => group.name === selectedView)?.placeholder,\n value: [{ value: textValue, label: textValue }],\n type: \"text\",\n }\n ];\n });\n handleClose();\n };\n return (_jsxs(\"div\", { className: \"p-2 flex flex-col gap-1\", children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted\", children: _jsx(\"span\", { children: filterGroups.find(group => group.name === selectedView)?.placeholder }) }), _jsx(Input, { autoFocus: true, type: \"text\", size: \"sm\", value: textValue, onChange: setTextValue, onKeyDown: (e) => e.key === \"Enter\" && handleTextFilterAdd(), placeholder: \"Enter text...\" }), _jsx(\"div\", { className: \"mt-2 p-2 border-t\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleTextFilterAdd, disabled: !textValue.trim(), children: \"Apply\" })] }) })] }));\n}\n//# sourceMappingURL=TextFilter.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport dayjs from \"dayjs\";\nimport { useState } from \"react\";\nimport Calendar from \"react-calendar\";\nimport { Button } from \"../../button\";\nimport { calendarStyles } from \"../filter-styles\";\nexport default function DateFilter({ selectedView, selectedDate, setSelectedDate, setFilters, filters, handleClose, filterGroups, }) {\n const [dateRange, setDateRange] = useState([null, null]);\n const [localDateRange, setLocalDateRange] = useState([null, null]);\n const selectedGroup = filterGroups.find(g => g.name === selectedView);\n const isDateRange = selectedGroup?.multiple;\n // Create maxDate set to end of today to ensure today is selectable\n const maxDate = new Date();\n maxDate.setHours(23, 59, 59, 999);\n // Use local state for immediate feedback, fall back to dateRange\n const effectiveDateRange = [\n localDateRange[0] || dateRange[0],\n localDateRange[1] || dateRange[1]\n ];\n const handleDateChange = (value) => {\n if (isDateRange) {\n // Handle date range selection\n if (Array.isArray(value)) {\n // Update local state immediately for visual feedback\n setLocalDateRange([value[0], value[1]]);\n // Also update the main dateRange state\n setDateRange([value[0], value[1]]);\n }\n else {\n // Single date in range mode\n setLocalDateRange([value, null]);\n setDateRange([value, null]);\n }\n }\n else {\n // Handle single date selection\n const date = Array.isArray(value) ? value[0] : value;\n setSelectedDate(date || undefined);\n if (date) {\n // Set date to start of day (00:00)\n const selectedDateStart = new Date(date);\n selectedDateStart.setHours(0, 0, 0, 0);\n setFilters([\n ...filters,\n {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder,\n value: [\n {\n value: selectedDateStart.toISOString(),\n label: dayjs(selectedDateStart).format(\"LLL dd, y\"),\n }\n ],\n type: selectedGroup?.type || \"date\",\n multiple: selectedGroup?.multiple || false,\n },\n ]);\n handleClose();\n }\n }\n };\n const handleApplyDateRange = () => {\n if (dateRange[0]) {\n const startDate = new Date(dateRange[0]);\n const endDate = dateRange[1] ? new Date(dateRange[1]) : new Date(dateRange[0]);\n // Set start date to beginning of day\n startDate.setHours(0, 0, 0, 0);\n // Set end date to end of day\n endDate.setHours(23, 59, 59, 999);\n const filterValue = [];\n filterValue.push({\n value: startDate.toISOString(),\n label: dayjs(startDate).format(\"LLL dd, y\"),\n });\n if (dateRange[1] && dateRange[0].getTime() !== dateRange[1].getTime()) {\n filterValue.push({\n value: endDate.toISOString(),\n label: dayjs(endDate).format(\"LLL dd, y\"),\n });\n }\n setFilters([\n ...filters,\n {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder,\n value: filterValue,\n type: selectedGroup?.type || \"date\",\n multiple: selectedGroup?.multiple || false,\n },\n ]);\n handleClose();\n }\n };\n const getDisplayText = () => {\n if (isDateRange) {\n if (effectiveDateRange[0] && effectiveDateRange[1]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-2\", children: [_jsx(\"span\", { className: \"text-xs text-muted\", children: \"From:\" }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted\", children: \"To:\" }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[1]).format(\"MMMM DD, YYYY\") })] }));\n }\n else if (effectiveDateRange[0]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-2\", children: [_jsx(\"span\", { className: \"text-xs text-muted\", children: \"From:\" }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted\", children: \"\\u2192 Select end date\" })] }));\n }\n else {\n return _jsx(\"span\", { className: \"text-muted text-xs\", children: selectedGroup?.placeholder || selectedGroup?.name || selectedView || \"Select date range\" });\n }\n }\n else {\n return selectedDate ? dayjs(selectedDate).format(\"MMMM DD, YYYY\") : \"Pick a date\";\n }\n };\n return (_jsx(\"div\", { className: \"p-2\", children: isDateRange ? (_jsxs(_Fragment, { children: [_jsx(\"div\", { children: getDisplayText() }), _jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(Calendar, { value: effectiveDateRange, onChange: handleDateChange, selectRange: true, returnValue: \"range\", maxDate: maxDate, className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (effectiveDateRange[0]) {\n const startDate = effectiveDateRange[0].getTime();\n if (effectiveDateRange[1]) {\n // Both dates selected\n const endDate = effectiveDateRange[1].getTime();\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-l-md font-semibold';\n }\n if (currentDate === endDate) {\n return 'bg-primary text-primary-foreground rounded-r-md font-semibold';\n }\n if (currentDate > startDate && currentDate < endDate) {\n return 'bg-primary/20 text-primary font-medium';\n }\n }\n else {\n // Only start date selected\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n }\n }\n return '';\n } }, `${effectiveDateRange[0]?.getTime()}-${effectiveDateRange[1]?.getTime()}`)] }), _jsx(\"div\", { className: \"border-t pt-2\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApplyDateRange, disabled: !effectiveDateRange[0], children: \"Apply\" })] }) })] })) : (_jsx(_Fragment, { children: _jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(Calendar, { value: selectedDate, onChange: handleDateChange, selectRange: false, maxDate: maxDate, className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (selectedDate && currentDate === selectedDate.getTime()) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n return '';\n } })] }) })) }));\n}\n//# sourceMappingURL=dateFilter.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { CommandItem, CommandEmpty } from \"../../command\";\nimport { Button } from \"../../button\";\nimport { DynamicLabel } from \"../DynamicLabel\";\nexport default function SelectFilter({ selectedView, commandInput, setFilters, handleClose, filterGroups, }) {\n const [selectedOptions, setSelectedOptions] = useState([]);\n const getFilteredOptions = (groupName) => {\n const group = filterGroups.find(g => g.name === groupName);\n if (!group) {\n return [];\n }\n let filteredOptions = group.options || [];\n if (!commandInput.trim()) {\n return filteredOptions;\n }\n if (group.filterBy) {\n const filterLc = commandInput.toLowerCase();\n const results = filteredOptions.filter(option => {\n if (option.value === undefined)\n return false;\n return group.filterBy(option.value, filterLc);\n });\n return results;\n }\n const filterLc = commandInput.toLowerCase();\n return filteredOptions.filter(option => {\n const optionValue = String(option.value || '').toLowerCase();\n return optionValue.includes(filterLc);\n });\n };\n if (!selectedView) {\n return null;\n }\n const options = getFilteredOptions(selectedView);\n const selectedGroup = filterGroups.find(g => g.name === selectedView);\n if (options.length === 0) {\n return _jsx(CommandEmpty, { children: \"No matching options\" });\n }\n const groupTitle = selectedGroup?.placeholder || selectedGroup?.name;\n const handleApply = () => {\n if (selectedOptions.length > 0) {\n setFilters(prev => [\n ...prev.filter(f => f.name !== selectedView),\n {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder || \"\",\n value: selectedOptions,\n type: selectedGroup?.type || \"select\",\n multiple: selectedGroup?.multiple || false,\n }\n ]);\n }\n handleClose();\n };\n const handleOptionToggle = (option) => {\n const filterOption = {\n value: option.value,\n label: option.label\n };\n if (selectedGroup?.multiple) {\n // For multiple selection, toggle the option\n const isSelected = selectedOptions.some(opt => opt.value === option.value);\n if (isSelected) {\n setSelectedOptions(prev => prev.filter(opt => opt.value !== option.value));\n }\n else {\n setSelectedOptions(prev => [...prev, filterOption]);\n }\n }\n else {\n // For single selection, apply immediately\n setFilters((prev) => {\n const existingFilterIndex = prev.findIndex(f => f.name === selectedView);\n if (existingFilterIndex >= 0) {\n const updatedFilters = [...prev];\n updatedFilters[existingFilterIndex] = {\n ...updatedFilters[existingFilterIndex],\n value: [filterOption]\n };\n return updatedFilters;\n }\n else {\n return [...prev, {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder || \"\",\n value: [filterOption],\n type: selectedGroup?.type || \"select\",\n multiple: selectedGroup?.multiple || false,\n }];\n }\n });\n handleClose();\n }\n };\n return (_jsxs(_Fragment, { children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted\", children: _jsx(\"span\", { children: groupTitle }) }), _jsx(\"div\", { className: \"max-h-50 overflow-y-auto\", children: options.map((option) => {\n const isSelected = selectedOptions.some(opt => opt.value === option.value);\n return (_jsxs(CommandItem, { className: `group flex gap-2 items-center w-full hover:bg-muted ${selectedGroup?.multiple && isSelected ? 'bg-muted' : ''}`, onSelect: () => handleOptionToggle(option), children: [_jsx(DynamicLabel, { value: option.value || '', labelRenderer: option.labelRenderer || selectedGroup?.labelRenderer, fallbackLabel: option.label }), selectedGroup?.multiple && isSelected && (_jsx(\"span\", { className: \"ml-auto text-xs text-success\", children: \"\\u2713\" }))] }, option.value || `option-${Math.random()}`));\n }) }), selectedGroup?.multiple && (_jsx(\"div\", { className: \"p-2 border-t\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApply, disabled: selectedOptions.length === 0, children: \"Apply\" })] }) }))] }));\n}\n//# sourceMappingURL=SelectFilter.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { InputList } from \"../../../index\";\nimport { Button } from \"../../button\";\nexport default function StringListFilter({ selectedView, setFilters, handleClose, filterGroups, }) {\n const [tags, setTags] = useState([]);\n const selectedGroup = filterGroups.find(g => g.name === selectedView);\n const handleApply = () => {\n if (tags.length > 0) {\n setFilters(prev => [\n ...prev.filter(f => f.name !== selectedView),\n {\n name: selectedView,\n placeholder: selectedGroup?.placeholder,\n value: tags,\n type: \"stringList\"\n }\n ]);\n }\n handleClose();\n };\n return (_jsxs(\"div\", { className: \"p-2 space-y-3\", children: [_jsx(\"div\", { className: \"space-y-2\", children: _jsx(InputList, { value: tags, onChange: setTags, placeholder: selectedGroup?.placeholder || `Add ${selectedView}...`, autoFocus: true }) }), _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApply, disabled: tags.length === 0, children: \"Apply\" })] })] }));\n}\n//# sourceMappingURL=StringListFilter.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useEffect } from \"react\";\nimport { cn } from \"../../libs/utils\";\nimport { Button } from \"../button\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"../popover\";\nimport { Command, CommandInput, CommandList, CommandGroup, CommandItem, CommandEmpty } from \"../command\";\nimport { ListFilter } from \"lucide-react\";\nimport Filters from \"./filters\";\nimport TextFilter from \"./filter/TextFilter\";\nimport DateFilter from \"./filter/dateFilter\";\nimport SelectFilter from \"./filter/SelectFilter\";\nimport StringListFilter from \"./filter/StringListFilter\";\nconst FilterContext = React.createContext({});\nconst FilterProvider = ({ filters, setFilters, filterGroups, children }) => {\n const url = new URL(window.location.href);\n const searchParams = url.searchParams;\n const [hasInitialized, setHasInitialized] = React.useState(false);\n useEffect(() => {\n try {\n const params = new URLSearchParams(searchParams.toString());\n if (filters.length > 0) {\n // Convert filters to format with array indicators: filterName:value,value;filterName2:value\n // Arrays are prefixed with []: filterName:[value1,value2]\n const filterString = filters.map(filter => {\n let values;\n if (filter.type === 'stringList' && Array.isArray(filter.value) && typeof filter.value[0] === 'string') {\n // Handle stringList with direct string array - always array format\n values = `[${filter.value.map(item => encodeURIComponent(item)).join(',')}]`;\n }\n else if (Array.isArray(filter.value)) {\n if (filter.multiple) {\n // Handle multiple filters - always use array format for multiple=true\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else if (filter.value.length > 1) {\n // Handle multiple values for non-multiple filters\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else {\n // Single value in array for non-multiple filter - don't use array format\n const firstValue = filter.value[0];\n if (typeof firstValue === 'string') {\n values = encodeURIComponent(firstValue);\n }\n else if (typeof firstValue === 'object' && firstValue?.value !== undefined) {\n // Handle FilterOption object\n values = encodeURIComponent(String(firstValue.value));\n }\n else {\n values = encodeURIComponent(String(firstValue || ''));\n }\n }\n }\n else {\n values = encodeURIComponent(filter.value || '');\n }\n return `${encodeURIComponent(filter.name)}:${values}`;\n }).join(';');\n params.set('filters', filterString);\n }\n else {\n params.delete('filters');\n }\n const newUrl = `${window.location.pathname}?${params.toString()}${window.location.hash}`;\n window.history.replaceState(window.history.state || {}, '', newUrl);\n }\n catch (error) {\n console.error(\"Failed to update URL with filters:\", error);\n }\n }, [filters]);\n useEffect(() => {\n const filtersParam = searchParams.get('filters');\n if (filtersParam && filterGroups.length > 0 && !hasInitialized) {\n try {\n // Parse format with array indicators: filterName:value or filterName:[value1,value2]\n const filterPairs = filtersParam.split(';');\n const parsedFilters = filterPairs.map(pair => {\n const [encodedName, valuesString] = pair.split(':');\n const name = decodeURIComponent(encodedName);\n let values;\n // Check if it's an array format [value1,value2]\n if (valuesString.startsWith('[') && valuesString.endsWith(']')) {\n // Array format - remove brackets and split by comma\n const arrayContent = valuesString.slice(1, -1); // Remove [ and ]\n values = arrayContent ? arrayContent.split(',').map(encodedValue => decodeURIComponent(encodedValue)) : [];\n }\n else {\n // Single value format\n values = [decodeURIComponent(valuesString)];\n }\n const group = filterGroups.find(g => g.name === name);\n let filterValue;\n if (group?.type === 'stringList') {\n // For stringList, return direct string array\n filterValue = values;\n }\n else if (group?.type === 'text') {\n // For text, return FilterOption array (single value for text inputs)\n filterValue = values.length === 1 ? [{ value: values[0], label: values[0] }] :\n values.map(value => ({ value, label: value }));\n }\n else {\n // For other types, find options with labels\n filterValue = values.map(value => {\n const matchingOption = group?.options?.find(opt => opt.value === value);\n let label = value;\n if (matchingOption?.label) {\n label = String(matchingOption.label);\n }\n else if (matchingOption?.labelRenderer) {\n label = String(matchingOption.labelRenderer(value));\n }\n else if (group?.labelRenderer) {\n label = String(group.labelRenderer(value));\n }\n return {\n value,\n label\n };\n });\n }\n if (group?.multiple && !valuesString.startsWith('[') && !valuesString.endsWith(']')) {\n if (group.type === 'stringList') {\n filterValue = values;\n }\n else {\n if (!Array.isArray(filterValue)) {\n filterValue = [filterValue];\n }\n }\n }\n // Fallback: if group not found but we detected array format, assume it should be multiple\n const shouldBeMultiple = group?.multiple || (!group && valuesString.startsWith('[') && valuesString.endsWith(']'));\n const filter = {\n name,\n type: group?.type || 'select',\n placeholder: group?.placeholder,\n value: filterValue,\n multiple: shouldBeMultiple\n };\n return filter;\n });\n setFilters(parsedFilters);\n setHasInitialized(true);\n }\n catch (error) {\n setHasInitialized(true);\n }\n }\n else if (filterGroups.length > 0 && !hasInitialized) {\n // No URL params but we have groups - mark as initialized\n setHasInitialized(true);\n }\n }, [filterGroups, hasInitialized]);\n return (_jsx(FilterContext.Provider, { value: { filters, setFilters, filterGroups }, children: children }));\n};\nconst FilterBtn = ({ className }) => {\n const { filters, setFilters, filterGroups } = React.useContext(FilterContext);\n const [open, setOpen] = React.useState(false);\n const [selectedView, setSelectedView] = React.useState(null);\n const [commandInput, setCommandInput] = React.useState(\"\");\n const commandInputRef = React.useRef(null);\n const [selectedDate, setSelectedDate] = React.useState();\n const [textValue, setTextValue] = React.useState(\"\");\n const handleSelect = (groupName) => {\n setSelectedView(groupName);\n setCommandInput(\"\");\n commandInputRef.current?.focus();\n };\n const getAvailableFilterGroups = () => {\n let options = filterGroups.map(group => ({\n ...group,\n options: (group.options ?? []).filter(option => !filters.some(filter => {\n if (filter.type === \"date\") {\n return filter.name === group.name;\n }\n return filter.name === group.name &&\n (Array.isArray(filter.value) && typeof filter.value[0] === 'string'\n ? filter.value.some(val => val === option.value)\n : filter.value.some(val => val.value === option.value));\n }))\n })).filter(group => ((group.options ?? []).length > 0) ||\n (group.type === \"date\" && !filters.some(filter => filter.name === group.name)) ||\n (group.type === \"text\" && !filters.some(filter => filter.name === group.name)) ||\n (group.type === \"stringList\" && !filters.some(filter => filter.name === group.name)));\n if (options.length === 0) {\n return _jsx(CommandEmpty, { children: \"No available filters\" });\n }\n return options.map((group, index) => (_jsx(CommandItem, { onSelect: () => handleSelect(group.name), className: \"group flex gap-2 items-center hover:bg-muted\", children: _jsx(\"span\", { children: group.placeholder ?? group.name }) }, index)));\n };\n const handleClose = () => {\n setOpen(false);\n setTimeout(() => {\n setSelectedView(null);\n setCommandInput(\"\");\n setSelectedDate(undefined);\n }, 200);\n };\n const handleOpen = (open) => {\n setOpen(open);\n if (!open) {\n setTimeout(() => {\n setSelectedView(null);\n setCommandInput(\"\");\n setTextValue(\"\");\n }, 200);\n }\n };\n const renderFilterOptions = () => {\n if (!selectedView) {\n return null;\n }\n const selectedGroupType = filterGroups.find(g => g.name === selectedView)?.type;\n switch (selectedGroupType) {\n case \"date\":\n return (_jsx(DateFilter, { selectedView: selectedView, selectedDate: selectedDate, setSelectedDate: setSelectedDate, setFilters: setFilters, filters: filters, handleClose: handleClose, filterGroups: filterGroups }));\n case \"text\":\n return (_jsx(TextFilter, { selectedView: selectedView, textValue: textValue, setTextValue: setTextValue, setFilters: setFilters, handleClose: handleClose, filterGroups: filterGroups }));\n case \"stringList\":\n return (_jsx(StringListFilter, { selectedView: selectedView, setFilters: setFilters, handleClose: handleClose, filterGroups: filterGroups }));\n default:\n return (_jsx(SelectFilter, { selectedView: selectedView, commandInput: commandInput, setFilters: setFilters, handleClose: handleClose, filterGroups: filterGroups }));\n }\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: handleOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: \"outline\", role: \"combobox\", \"aria-expanded\": open, size: \"md\", className: cn(\"transition group flex gap-1.5\", className), children: [_jsx(ListFilter, { className: \"size-4 shrink-0 transition-all text-muted\" }), \"Filter\"] }) }), _jsx(PopoverContent, { className: \"w-[300px] p-0\", align: \"start\", sideOffset: 4, children: _jsxs(Command, { children: [filterGroups.find(group => group.name === selectedView)?.type === \"select\" && (_jsx(CommandInput, { placeholder: selectedView ? `Filter by ${selectedView}` : \"Filter...\", className: \"h-9 ring-0\", value: commandInput, onValueChange: (value) => {\n setCommandInput(value);\n }, ref: commandInputRef, autoFocus: true })), _jsx(CommandList, { children: _jsx(CommandGroup, { children: !selectedView ? getAvailableFilterGroups() : renderFilterOptions() }) })] }) })] }));\n};\nconst FilterBar = ({ className }) => {\n const { filters, setFilters, filterGroups } = React.useContext(FilterContext);\n return (_jsx(\"div\", { className: cn(className), children: _jsx(Filters, { filters: filters, setFilters: setFilters, filterGroups: filterGroups }) }));\n};\nconst FilterClear = ({ className }) => {\n const { filters, setFilters } = React.useContext(FilterContext);\n const hasActiveFilters = filters.filter((filter) => filter.value?.length > 0).length > 0;\n if (!hasActiveFilters) {\n return null;\n }\n return (_jsx(Button, { variant: \"outline\", size: \"xs\", className: cn(\"transition group\", className), onClick: () => setFilters([]), children: \"Clear All\" }));\n};\nexport { FilterProvider, FilterBtn, FilterBar, FilterClear };\n//# sourceMappingURL=filterBar.js.map","export var FilterOperator;\n(function (FilterOperator) {\n FilterOperator[\"IS\"] = \"is\";\n FilterOperator[\"IS_NOT\"] = \"is_not\";\n FilterOperator[\"CONTAINS\"] = \"contains\";\n FilterOperator[\"BEFORE\"] = \"before\";\n FilterOperator[\"AFTER\"] = \"after\";\n FilterOperator[\"IS_ANY_OF\"] = \"is_any_of\";\n})(FilterOperator || (FilterOperator = {}));\n//# sourceMappingURL=types.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../libs/utils\";\nimport { forwardRef } from \"react\";\nexport const Heading = forwardRef(({ className, level = 3, ...props }, ref) => {\n const Component = `h${level}`;\n const styles = {\n h1: \"text-2xl font-medium tracking-tight\",\n h2: \"text-xl font-medium tracking-tight\",\n h3: \"text-lg font-medium\",\n h4: \"text-base font-medium\",\n h5: \"text-sm font-medium\",\n h6: \"text-xs font-medium\",\n };\n return _jsx(Component, { ref: ref, className: cn(styles[`h${level}`], 'mb-2', className), ...props });\n});\nHeading.displayName = \"Heading\";\n//# sourceMappingURL=heading.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../libs/utils\";\nimport { cva } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n// Update the text variants to match the new sizing requirements\nconst textVariants = cva(\"text-foreground\", {\n variants: {\n size: {\n xl: \"text-base md:text-lg leading-relaxed\",\n lg: \"text-base leading-relaxed\",\n default: \"text-sm leading-normal\",\n sm: \"text-sm leading-normal\",\n xs: \"text-xs leading-normal\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n },\n defaultVariants: {\n size: \"default\",\n weight: \"normal\",\n },\n});\nexport const Text = forwardRef(({ className, size, weight, ...props }, ref) => {\n return _jsx(\"p\", { ref: ref, className: cn(textVariants({ size, weight, className })), ...props });\n});\nText.displayName = \"Text\";\n//# sourceMappingURL=text.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Minus } from \"lucide-react\";\nimport * as ResizablePrimitive from \"react-resizable-panels\";\nimport { cn } from \"../libs/utils\";\nfunction ResizablePanelGroup({ className, ...props }) {\n return (_jsx(ResizablePrimitive.PanelGroup, { \"data-slot\": \"resizable-panel-group\", className: cn(\"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\", className), ...props }));\n}\nfunction ResizablePanel({ ...props }) {\n return _jsx(ResizablePrimitive.Panel, { \"data-slot\": \"resizable-panel\", ...props });\n}\nfunction ResizableHandle({ withHandle, className, ...props }) {\n return (_jsx(ResizablePrimitive.PanelResizeHandle, { \"data-slot\": \"resizable-handle\", className: cn(\"bg-muted focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\", className), ...props, children: withHandle && (_jsx(\"div\", { className: \"z-10 flex size-4 items-center justify-center rounded-xs font-semibold\", children: _jsx(Minus, { className: \"size-4 rotate-90\" }) })) }));\n}\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle };\n//# sourceMappingURL=resizeable.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../libs/utils\";\nfunction Textarea({ className, ...props }) {\n return (_jsx(\"textarea\", { \"data-slot\": \"textarea\", className: cn(\"py-2 text-sm\", \"flex w-full rounded-md border border-input bg-background ring-offset-background\", \"placeholder:text-muted focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring\", \"disabled:cursor-not-allowed disabled:opacity-50\", className), ...props }));\n}\nexport { Textarea };\n//# sourceMappingURL=textarea.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { TriangleAlert } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { VModal, VModalTitle, VModalFooter } from \"./shadcn\";\nimport { Button } from \"./shadcn/button\";\nexport function ConfirmModal({ title, content, onConfirm, onCancel, isOpen }) {\n const cancelButtonRef = useRef(null);\n return (_jsxs(VModal, { isOpen: isOpen, onClose: onCancel, description: \"Confirm Modal\", children: [_jsxs(\"div\", { className: \"sm:flex sm:items-start p-2\", children: [_jsx(\"div\", { className: \"mx-auto flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\", children: _jsx(TriangleAlert, { className: \"size-6 text-red-600\", \"aria-hidden\": \"true\" }) }), _jsxs(\"div\", { className: \"mt-3 text-center sm:ml-4 sm:mt-0 sm:text-left\", children: [_jsx(VModalTitle, { className: \"leading-6\", show: true, children: title }), _jsx(\"div\", { className: \"mt-2\", children: _jsx(\"div\", { className: \"prose text-sm text-gray-500\", children: content }) })] })] }), _jsxs(VModalFooter, { align: \"right\", children: [_jsx(Button, { variant: \"destructive\", onClick: onConfirm, children: \"Confirm\" }), _jsx(Button, { variant: \"outline\", onClick: onCancel, ref: cancelButtonRef, children: \"Cancel\" })] })] }));\n}\n//# sourceMappingURL=ConfirmModal.js.map","import { createContext, useContext } from \"react\";\nexport function useToast() {\n return useContext(ToastContext);\n}\nconst ToastContext = createContext(() => { });\nexport { ToastContext };\n//# sourceMappingURL=ToastContext.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nconst PORTAL_ID = '--tailwind-portal';\nexport function Portal({ children }) {\n const tempNode = useRef(null);\n const [portalEl, setPortalEl] = useState(null);\n // hack to have the Portal not generating hydration errors (content mismatch) on SSR / CSR\n useEffect(() => {\n if (tempNode.current) { // we are on the browser -> we an use the portal\n const doc = tempNode.current.ownerDocument;\n let portalEl = doc.getElementById(PORTAL_ID);\n if (!portalEl) {\n portalEl = doc.createElement('DIV');\n portalEl.id = PORTAL_ID;\n doc.body.appendChild(portalEl);\n }\n setPortalEl(portalEl);\n }\n }, [tempNode.current]);\n if (portalEl) {\n return createPortal(children, portalEl);\n }\n else {\n return _jsx(\"span\", { ref: tempNode });\n }\n}\n//# sourceMappingURL=Portal.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Transition } from \"@headlessui/react\";\nimport { CircleCheck, AlertTriangle, Info, CircleX, X } from \"lucide-react\";\nimport { Fragment, useEffect, useState, useRef } from \"react\";\nconst icons = {\n success: CircleCheck,\n error: CircleX,\n warning: AlertTriangle,\n info: Info\n};\nconst colors = {\n success: 'text-success',\n error: 'text-destructive',\n warning: 'text-attention',\n info: 'text-info'\n};\nexport function NotificationPanel({ data, onClose }) {\n const [show, setShow] = useState(true);\n const timeoutRef = useRef(null);\n const resetTimeout = () => {\n if (timeoutRef.current) {\n globalThis.clearTimeout(timeoutRef.current);\n }\n if (data.duration) {\n timeoutRef.current = setTimeout(() => setShow(false), data.duration);\n }\n };\n const clearCurrentTimeout = () => {\n if (timeoutRef.current) {\n globalThis.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n useEffect(() => {\n resetTimeout();\n return clearCurrentTimeout;\n }, [data.duration]);\n const Icon = icons[data.status] || Info;\n const color = colors[data.status] || 'text-info';\n // Global notification live region, render this permanently at the end of the document\n return (_jsx(\"div\", { \"aria-live\": \"assertive\", className: \"pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6 z-100\", children: _jsx(\"div\", { className: \"flex w-full flex-col items-center space-y-4 sm:items-end\", children: _jsx(Transition, { appear: true, show: show, as: Fragment, afterLeave: onClose, enter: \"transform ease-out duration-700 transition\", enterFrom: \"translate-y-0 opacity-0 sm:translate-y-0 sm:translate-x-2\", enterTo: \"translate-y-2 opacity-100 sm:translate-x-0\", leave: \"transition ease-in duration-300\", leaveFrom: \"opacity-100\", leaveTo: \"opacity-0\", children: _jsx(\"div\", { className: \"pointer-events-auto w-full max-w-md overflow-hidden rounded-lg bg-muted shadow-lg ring-1 ring-border\", onMouseEnter: clearCurrentTimeout, onMouseLeave: resetTimeout, children: _jsx(\"div\", { className: \"p-5\", children: _jsxs(\"div\", { className: \"flex items-start\", children: [_jsx(\"div\", { className: \"shrink-0\", children: _jsx(Icon, { className: `size-6 ${color}`, \"aria-hidden\": \"true\" }) }), _jsxs(\"div\", { className: \"ml-3 flex-1 pt-0.5 min-w-0\", children: [_jsx(\"p\", { className: \"text-sm font-semibold text-foreground break-words\", children: data.title }), data.description && (_jsx(\"p\", { className: \"mt-2 text-sm text-muted break-words whitespace-pre-wrap leading-relaxed\", children: data.description }))] }), _jsx(\"div\", { className: \"ml-4 flex shrink-0\", children: _jsxs(\"button\", { type: \"button\", className: \"inline-flex rounded-md bg-muted text-muted hover:text-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\", onClick: () => setShow(false), children: [_jsx(\"span\", { className: \"sr-only\", children: \"Close\" }), _jsx(X, { className: \"size-5\", \"aria-hidden\": \"true\" })] }) })] }) }) }) }) }) }));\n}\n//# sourceMappingURL=NotificationPanel.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { Portal } from \"../Portal.js\";\nimport { NotificationPanel } from \"./NotificationPanel.js\";\nimport { ToastContext } from \"./ToastContext.js\";\nexport function ToastProvider({ children }) {\n const [data, setData] = useState(null);\n const toast = (data) => {\n setData(data);\n };\n return (_jsxs(_Fragment, { children: [_jsx(ToastContext.Provider, { value: toast, children: children }), data && _jsx(Portal, { children: _jsx(NotificationPanel, { data: data, onClose: () => toast(null) }) })] }));\n}\n//# sourceMappingURL=ToastProvider.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { useToast } from \"./toast/index.js\";\nexport function DeleteModal({ idToDelete, title, content, setIdToDelete, deleteApi }) {\n const toast = useToast();\n const doDelete = async () => {\n if (!idToDelete) {\n return;\n }\n return deleteApi(idToDelete)\n .then(() => {\n toast({\n title: 'Delete succeeded',\n status: 'success'\n });\n }).catch((err) => {\n toast({\n title: 'Failed to delete',\n description: err.message ?? 'An error occurred while deleting the object',\n status: 'error'\n });\n }).finally(() => {\n setIdToDelete(undefined);\n });\n };\n return (_jsx(ConfirmModal, { title: title, content: content, isOpen: !!idToDelete, onConfirm: doDelete, onCancel: () => { setIdToDelete(undefined); } }));\n}\n//# sourceMappingURL=DeleteModal.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nexport function Divider({ className }) {\n return (_jsx(\"hr\", { className: clsx(\"w-full h-0.5 border-t-0 bg-border\", className) }));\n}\n//# sourceMappingURL=Divider.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Menu, MenuButton, MenuItems, MenuItem as _MenuItem, Transition } from '@headlessui/react';\nimport clsx from 'clsx';\nimport { Fragment } from 'react';\nexport function Dropdown({ trigger, children }) {\n return (_jsxs(Menu, { as: \"div\", className: \"relative\", children: [_jsx(MenuButton, { as: \"span\", className: \"-m-1.5 flex items-center p-1.5\", children: trigger }), _jsx(Transition, { as: Fragment, enter: \"transition ease-out duration-100\", enterFrom: \"transform opacity-0 scale-95\", enterTo: \"transform opacity-100 scale-100\", leave: \"transition ease-in duration-75\", leaveFrom: \"transform opacity-100 scale-100\", leaveTo: \"transform opacity-0 scale-95\", children: _jsx(MenuItems, { className: \"absolute right-0 z-10 mt-2.5 w-48 origin-top-right rounded-md bg-white dark:bg-slate-900 dark:border-slate-800 dark:border py-2 shadow-lg ring-1 ring-gray-900/5 dark:ring-slate-200/5 focus:outline-hidden\", children: children }) })] }));\n}\nexport function MenuItem({ children, href = '#', onClick, closeOnClick = true, isDisabled = false }) {\n return (_jsx(_MenuItem, { disabled: isDisabled, children: ({ active, close }) => (_jsx(\"a\", { href: href, onClick: (e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick && onClick(e);\n closeOnClick && close();\n }, className: clsx(active ? 'bg-gray-50 dark:bg-slate-800' : '', isDisabled ? 'opacity-50 cursor-not-allowed' : '', 'block px-3 py-1 text-sm leading-6 text-gray-900 dark:text-gray-200'), children: children })) }));\n}\n//# sourceMappingURL=Dropdown.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Listbox, ListboxButton, ListboxOption, ListboxOptions, Transition } from \"@headlessui/react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { Fragment } from \"react\";\nexport function DropdownList({ items, value, onChange }) {\n return (_jsx(Listbox, { value: value, onChange: onChange, children: ({ open }) => (_jsxs(\"div\", { className: \"relative\", children: [_jsxs(\"div\", { className: \"inline-flex divide-x divide-indigo-700 rounded-md shadow-2xs\", children: [_jsxs(\"div\", { className: \"inline-flex items-center gap-x-1.5 rounded-l-md bg-indigo-600 px-3 py-2 text-white shadow-2xs\", children: [value.name && _jsx(Check, { className: \"-ml-0.5 size-5\", \"aria-hidden\": \"true\" }), _jsx(\"p\", { className: \"text-sm font-semibold\", children: value.name || \"\" })] }), _jsxs(ListboxButton, { className: \"inline-flex items-center rounded-l-none rounded-r-md bg-indigo-600 p-2 hover:bg-indigo-700 focus:outline-hidden focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2 focus:ring-offset-gray-50\", children: [_jsx(\"span\", { className: \"sr-only\", children: \"Change selection\" }), _jsx(ChevronDown, { className: \"size-5 text-white\", \"aria-hidden\": \"true\" })] })] }), _jsx(Transition, { show: open, as: Fragment, leave: \"transition ease-in duration-100\", leaveFrom: \"opacity-100\", leaveTo: \"opacity-0\", children: _jsx(ListboxOptions, { className: \"absolute right-0 z-10 mt-2 w-72 origin-top-right divide-y divide-gray-200 overflow-hidden rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-hidden\", children: items.map((option) => (_jsx(ListboxOption, { className: ({ active }) => clsx(active ? 'bg-indigo-600 text-white' : 'text-gray-900', 'cursor-default select-none p-4 text-sm'), value: option, children: ({ selected, active }) => (_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsxs(\"div\", { className: \"flex justify-between\", children: [_jsx(\"p\", { className: selected ? 'font-semibold' : 'font-normal', children: option.name }), selected ? (_jsx(\"span\", { className: active ? 'text-white' : 'text-indigo-600', children: _jsx(Check, { className: \"size-5\", \"aria-hidden\": \"true\" }) })) : null] }), _jsx(\"p\", { className: clsx(active ? 'text-indigo-200' : 'text-gray-500', 'mt-2'), children: option.description })] })) }, option.id))) }) })] })) }));\n}\n//# sourceMappingURL=DropdownList.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Plus } from \"lucide-react\";\nimport { Button } from \"@vertesia/ui/core\";\nexport function EmptyCollection({ buttonLabel, title, children, onClick }) {\n return (_jsx(\"div\", { className: \"flex items-center justify-center h-full text-center\", children: _jsxs(\"div\", { className: \"py-12\", children: [_jsx(\"svg\", { className: \"mx-auto size-12\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", \"aria-hidden\": \"true\", children: _jsx(\"path\", { vectorEffect: \"non-scaling-stroke\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" }) }), _jsx(\"h3\", { className: \"mt-2 text-sm font-semibold\", children: title }), _jsx(\"p\", { className: \"mt-1 text-sm text-muted\", children: children }), _jsx(\"div\", { className: \"mt-6\", children: _jsxs(Button, { onClick: onClick, children: [_jsx(Plus, { className: \"-ml-0.5 mr-1.5 size-5\", \"aria-hidden\": \"true\" }), buttonLabel] }) })] }) }));\n}\n//# sourceMappingURL=EmptyCollection.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef } from \"react\";\n/**\n * TODO: TS complains that:\n * Type 'FileList' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher.\n * So as a quick fix aI use a for loop to convert FileList to File[]\n * @param files\n * @returns\n */\nfunction fileListToArray(files) {\n const ar = [];\n for (let i = 0, l = files.length; i < l; i++) {\n ar.push(files[i]);\n }\n return ar;\n}\nexport function FileUploadInput({ children, onUpload }) {\n const inputRef = useRef(null);\n const _onUpload = () => {\n if (inputRef.current?.files) {\n onUpload(fileListToArray(inputRef.current.files));\n }\n };\n return (_jsxs(\"label\", { style: { cursor: \"pointer\" }, children: [children, _jsx(\"input\", { ref: inputRef, type: \"file\", style: { display: \"none\" }, onChange: _onUpload })] }));\n}\n//TODO implement using tailwind\nexport function DropZone({ onUpload }) {\n const dropZoneProps = useDropZone({ onUpload });\n return (_jsx(\"div\", { ...dropZoneProps, className: \"flex items-center justify-center w-full h-64 border-2 border-dashed rounded-lg cursor-pointer bg-gray-50 dark:hover:bg-bray-800 dark:bg-gray-700 hover:bg-gray-100 dark:border-gray-600 dark:hover:border-gray-500 dark:hover:bg-gray-600\", children: _jsxs(\"label\", { htmlFor: \"dropzone-file\", className: \"flex flex-col items-center justify-center w-full h-full\", children: [_jsxs(\"div\", { className: \"flex flex-col items-center justify-center pt-5 pb-6\", children: [_jsx(\"svg\", { className: \"w-8 h-8 mb-4 text-gray-500 dark:text-gray-400\", \"aria-hidden\": \"true\", xmlns: \"http://www.w3.org/2000/svg\", fill: \"none\", viewBox: \"0 0 20 16\", children: _jsx(\"path\", { stroke: \"currentColor\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\", \"stroke-width\": \"2\", d: \"M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2\" }) }), _jsxs(\"p\", { className: \"mb-2 text-sm text-gray-500 dark:text-gray-400\", children: [_jsx(\"span\", { className: \"font-semibold\", children: \"Click to upload\" }), \" or drag and drop\"] }), _jsx(\"p\", { className: \"text-xs text-gray-500 dark:text-gray-400\", children: \"SVG, PNG, JPG or GIF (MAX. 800x400px)\" })] }), _jsx(\"input\", { id: \"dropzone-file\", type: \"file\", className: \"hidden\" })] }) }));\n}\nfunction _onDragEnter(el) {\n let cnt = el.__dragOver_cnt__ || 0;\n el.__dragOver_cnt__ = cnt + 1;\n return !cnt; // true if first drag o ver false if dragover already recorded\n}\nfunction _onDragLeave(el) {\n let cnt = el.__dragOver_cnt__;\n if (!cnt)\n return false;\n el.__dragOver_cnt__ = cnt - 1;\n return cnt === 1; // true if leave false if not\n}\nfunction _onDrop(el) {\n delete el.__dragOver_cnt__;\n}\nexport function useDropZone({ onUpload, dragOverClass = \"is-drag-over-on\", dropEffect = \"copy\", }) {\n const ref = useRef(null);\n const onDrop = (ev) => {\n ev.preventDefault();\n _onDrop(ref.current);\n ref.current?.classList.remove(dragOverClass);\n const items = ev.dataTransfer.items;\n if (items) {\n const promises = [];\n const traverseFileTree = (item, path = \"\") => {\n return new Promise((resolve) => {\n if (item.isFile) {\n item.file((file) => {\n Object.defineProperty(file, \"webkitRelativePath\", { value: path + file.name });\n resolve([file]);\n });\n }\n else if (item.isDirectory) {\n const dirReader = item.createReader();\n const entries = [];\n const readEntries = () => {\n dirReader.readEntries((results) => {\n if (!results.length) {\n Promise.all(entries).then((filesArrays) => resolve(filesArrays.flat()));\n }\n else {\n for (const entry of results) {\n entries.push(traverseFileTree(entry, path + item.name + \"/\"));\n }\n readEntries();\n }\n });\n };\n readEntries();\n }\n });\n };\n for (let i = 0; i < items.length; i++) {\n const entry = items[i].webkitGetAsEntry();\n if (entry) {\n promises.push(traverseFileTree(entry));\n }\n }\n Promise.all(promises).then((filesArrays) => {\n const allFiles = filesArrays.flat();\n if (allFiles.length) {\n onUpload(allFiles);\n }\n });\n }\n };\n const onDragOver = (ev) => {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = dropEffect;\n };\n const onDragEnter = () => {\n if (_onDragEnter(ref.current)) {\n ref.current?.classList.add(dragOverClass);\n }\n };\n const onDragLeave = () => {\n if (_onDragLeave(ref.current)) {\n ref.current?.classList.remove(dragOverClass);\n }\n };\n return {\n onDrop,\n onDragOver,\n onDragEnter,\n onDragLeave,\n ref,\n };\n}\n//# sourceMappingURL=FileUpload.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { VTooltip } from './shadcn/tooltip';\nimport { Info } from 'lucide-react';\nexport function FormItem({ description, required, label, className, direction = \"column\", children, disabled = false }) {\n return (_jsxs(\"div\", { className: clsx(\"flex w-full space-y-1\", className, direction === \"row\" ? \"flex-row justify-between items-center gap-2\" : \"flex-col\"), children: [_jsxs(\"div\", { className: 'flex items-center gap-1', children: [_jsxs(\"label\", { className: `text-sm font-medium mb-1 ${disabled ? \"text-muted\" : \"\"}`, children: [label, required ? _jsx(\"span\", { className: 'text-destructive -mt-4 ml-1', children: \"*\" }) : \"\"] }), description &&\n _jsx(\"div\", { className: 'mx-2 flex w-4 items-center', children: _jsx(VTooltip, { description: description, children: _jsx(Info, { className: \"size-3 text-muted\" }) }) })] }), children] }));\n}\n//# sourceMappingURL=FormItem.js.map","const INPUT_UNSTYLED = \"block m-0 p-0 w-full border-0 focus:outline-hidden focus:ring-0 bg-transparent\";\nconst INPUT_NO_PADDING = \"rounded-md text-sm flex w-full rounded-md border border-input bg-background ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\";\nconst INPUT = INPUT_NO_PADDING + \" py-1.5\";\nconst Styles = {\n INPUT_UNSTYLED,\n INPUT_NO_PADDING,\n INPUT\n};\nexport { Styles };\n//# sourceMappingURL=styles.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { Badge } from './Badge';\nimport { Input } from './shadcn/input';\nimport { Styles } from './styles';\nexport function InputList({ value = [], onChange, className, delimiters = \", \", placeholder, autoFocus }) {\n const [text, setText] = useState('');\n const onBlur = (ev) => {\n const v = ev.target.value;\n if (v && v.trim()) {\n onChange([...value, v.trim()]);\n setText('');\n }\n };\n const onKeyDown = (ev) => {\n const v = ev.target.value;\n const isEmpty = !v.trim();\n const key = ev.key;\n if (key === 'Enter' || delimiters.indexOf(key) > -1) {\n ev.preventDefault();\n if (value && !isEmpty) {\n onChange([...value, v.trim()]);\n setText('');\n }\n }\n else if (key === 'Backspace' && isEmpty) {\n if (value && value.length > 0) {\n value.pop();\n onChange([...value]);\n }\n }\n };\n const _onClick = (index) => {\n if (value && value.length > 0) {\n value.splice(index, 1);\n onChange([...value]);\n }\n };\n return (_jsxs(\"div\", { className: clsx(className, 'w-full flex flex-wrap items-center gap-1 p-2', Styles.INPUT), children: [value && value.length > 0 &&\n (value.map((v, index) => _jsx(Badge, { variant: \"secondary\", onClick: () => _onClick(index), className: 'cursor-pointer', title: v, children: _jsx(\"span\", { className: 'break-all', children: v }) }, index))), _jsx(Input, { clearable: false, className: 'placeholder:text-muted-foreground px-1 min-w-0 flex-shrink-0 min-w-[120px]', variant: 'unstyled', type: 'text', value: text, onBlur: onBlur, onKeyDown: onKeyDown, onChange: setText, placeholder: !value || value.length === 0 ? placeholder : '', autoFocus: autoFocus })] }));\n}\n//# sourceMappingURL=InputList.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nexport function Link({ underline = 'always', className, children, ...others }) {\n let underlineClass;\n if (underline === 'always') {\n underlineClass = 'underline';\n }\n else if (underline === 'hover') {\n underlineClass = 'hover:underline';\n }\n return _jsx(\"a\", { className: clsx(\"text-indigo-800 dark:text-indigo-300\", className, underlineClass), ...others, children: children });\n}\n//# sourceMappingURL=Link.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nexport function MenuList({ className, children }) {\n return (_jsx(\"ul\", { className: `${className} space-y-1 flex flex-col items-start dark:px-2`, children: children }));\n}\nconst MenuListItem = forwardRef(function _MenuListItem(props, ref) {\n const { current, children, className, href = '#', onClick, ...others } = props;\n return (_jsx(\"li\", { className: clsx(className, current ?\n 'bg-gray-50 text-indigo-600'\n :\n 'text-gray-700 dark:dark:text-slate-300 hover:text-indigo-600 hover:bg-gray-50 dark:hover:bg-slate-800 dark:hover:text-slate-50 dark:border dark:border-transparent dark:hover:border-slate-50', 'w-full rounded-md p-2 pl-3 text-sm leading-6 font-semibold'), children: _jsx(\"a\", { ref: ref, href: href, onClick: (e) => {\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n else if (href === '#') {\n e.preventDefault();\n }\n }, className: 'w-full flex items-center gap-x-3', ...others, children: children }) }));\n});\nMenuList.Item = MenuListItem;\n//# sourceMappingURL=MenuList.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { CircleX, CircleCheck, AlertTriangle, Info } from 'lucide-react';\nexport function MessageBox({ icon, status, title, children, className }) {\n let defaultIcon, titleColor, textColor, bgColor;\n switch (status) {\n case 'error': {\n defaultIcon = _jsx(CircleX, { className: \"size-5 text-destructive\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-destructive border border-destructive\";\n break;\n }\n case 'warning': {\n defaultIcon = _jsx(AlertTriangle, { className: \"size-5 text-attention\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-attention border border-attention\";\n break;\n }\n case 'success': {\n defaultIcon = _jsx(CircleCheck, { className: \"size-5 text-success\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-success border border-success\";\n break;\n }\n case 'info': {\n defaultIcon = _jsx(Info, { className: \"size-5 text-info\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-info border border-info\";\n break;\n }\n case 'default': {\n defaultIcon = _jsx(Info, { className: \"size-5 text-muted\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-muted border border-muted\";\n break;\n }\n case 'done': {\n defaultIcon = _jsx(Info, { className: \"size-5 text-done\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-done border border-done\";\n break;\n }\n }\n return (_jsx(\"div\", { className: `rounded-md p-4 ${bgColor} ${className}`, children: _jsxs(\"div\", { className: \"flex\", children: [_jsx(\"div\", { className: \"shrink-0\", children: icon ?? defaultIcon }), _jsxs(\"div\", { className: \"w-full ml-2 px-1\", children: [title && _jsx(\"h3\", { className: `text-sm font-medium mb-2 ${titleColor}`, children: title }), _jsx(\"div\", { className: `text-sm ${textColor} break-words`, children: children })] })] }) }));\n}\nexport function ErrorBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"error\", title: title, className: className, children: _jsx(\"pre\", { children: children }) });\n}\nexport function InfoBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"info\", title: title, className: className, children: children });\n}\nexport function WarningBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"warning\", title: title, className: className, children: children });\n}\nexport function SuccessBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"success\", title: title, className: className, children: children });\n}\nexport function DefaultBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"default\", title: title, className: className, children: children });\n}\n//# sourceMappingURL=MessageBox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport { Fragment } from \"react\";\nimport { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild } from \"@headlessui/react\";\nimport { X } from \"lucide-react\";\nexport function Modal({ className, children, isOpen, onClose, noCloseButton = false, allowOverflow = false, disableCloseOnClickOutside = false, }) {\n const setOpen = (open) => {\n if (!open) {\n onClose();\n }\n };\n return (_jsx(Transition, { show: isOpen, as: Fragment, children: _jsxs(Dialog, { style: { zIndex: 50 }, as: \"div\", className: \"relative\", onClose: disableCloseOnClickOutside ? () => { } : setOpen, children: [_jsx(TransitionChild, { as: Fragment, enter: \"ease-out duration-300\", enterFrom: \"opacity-0\", enterTo: \"opacity-100\", leave: \"ease-in duration-200\", leaveFrom: \"opacity-100\", leaveTo: \"opacity-0\", unmount: true, children: _jsx(\"div\", { className: \"fixed inset-0 bg-gray-500 dark:bg-slate-800 dark:opacity-75 opacity-75 transition-opacity\" }) }), _jsx(\"div\", { className: \"fixed inset-0 z-10 w-screen overflow-y-auto\", children: _jsx(\"div\", { className: \"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\", children: _jsx(TransitionChild, { as: Fragment, enter: \"ease-out duration-300\", enterFrom: \"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\", enterTo: \"opacity-100 translate-y-0 sm:scale-100\", leave: \"ease-in duration-200\", leaveFrom: \"opacity-100 translate-y-0 sm:scale-100\", leaveTo: \"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\", children: _jsxs(DialogPanel, { className: clsx(\"p-0! relative transform rounded-lg bg-white dark:bg-slate-900 text-left dark:text-slate-100 shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-md sm:p-6\", allowOverflow ? \"overflow-visible\" : \"overflow-hidden\", className), children: [!noCloseButton && _jsx(ModalCloseButton, { onClose: onClose }), children] }) }) }) })] }) }));\n}\nfunction ModalCloseButton({ onClose }) {\n return (_jsx(\"div\", { className: \"absolute right-0 top-0 hidden pr-4 pt-4 sm:block\", children: _jsxs(\"button\", { tabIndex: -1, type: \"button\", className: \"rounded-md bg-white text-gray-400 dark:text-slate-200 dark:bg-slate-800 hover:brightness-95 focus:outline-hidden focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 hover:cursor-pointer\", onClick: onClose, children: [_jsx(\"span\", { className: \"sr-only\", children: \"Close\" }), _jsx(X, { className: \"size-6\", \"aria-hidden\": \"true\" })] }) }));\n}\nexport function ModalTitle({ children, showDivider = false }) {\n return (_jsx(\"div\", { className: showDivider ? \"border-b-solid border-b border-b-1\" : \"\", children: _jsx(DialogTitle, { as: \"h3\", className: \"py-4 pl-4 pr-8 text-base font-semibold leading-6 text-gray-900 dark:text-slate-50\", children: children }) }));\n}\nexport function ModalFooter({ children, className = \"justify-end\", fill = false }) {\n return (_jsx(\"div\", { className: clsx(\"w-full flex space-x-2 p-4 border-t-solid border-t-gray-100 dark:border-t-gray-800 border-t\", className || \"justify-end\", fill ? \"bg-gray-100 dark:bg-slate-800\" : \"\"), children: children }));\n}\nexport function ModalBody({ children, className = \"\" }) {\n return _jsx(\"div\", { className: clsx(\"p-4\", className), children: children });\n}\n//# sourceMappingURL=Modal.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport React, { useEffect } from \"react\";\nimport { Styles } from \"./styles.js\";\nfunction numberToString(value) {\n if (value == null || isNaN(value)) {\n return '';\n }\n else {\n return value.toString();\n }\n}\n/**\n * The value of this input is always a number. It can be undefined or NaN. If NaN the input value will not be updated with the NaN one.\n * If undefined the input will be updated to be empty.\n * The onChange callback is called whenever the value changes. If the input cannot be parsed as a number\n * it will be returned as NaN.\n */\nconst NumberInput = React.forwardRef(({ value, onChange, className, noScroll = false, noSpinners = false, ...others }, ref) => {\n // we need to store the state here in string\n const [textValue, setTextValue] = React.useState(numberToString(value));\n const _onChange = (ev) => {\n const value = ev.target.value;\n setTextValue(value);\n if (value === '') {\n onChange && onChange(undefined, value);\n }\n else {\n const num = parseFloat(value);\n onChange && onChange(num, value);\n }\n };\n useEffect(() => {\n // we do not update if not empty and NaN\n if (value == null || !isNaN(value)) {\n const text = numberToString(value);\n setTextValue(text);\n }\n }, [value]);\n return (_jsx(\"input\", { onWheel: noScroll ? event => { event.target.blur(); } : others.onWheel, type: 'number', value: textValue, onChange: _onChange, className: clsx(className, Styles.INPUT, { \"no-spinners\": noSpinners }, noSpinners && \"[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"), ref: ref, ...others }));\n});\nexport { NumberInput };\n//# sourceMappingURL=NumberInput.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nfunction getRealSize(size) {\n switch (size) {\n case 'xs': return 'size-2';\n case 'sm': return 'size-3';\n case 'md': return 'size-4';\n case 'lg': return 'size-5';\n case 'xl': return 'size-7';\n case '2xl': return 'size-10';\n default: throw new Error('Unexpected size: ' + size);\n }\n}\nexport function Spinner({ size, className }) {\n const sizeClass = getRealSize(size || 'md');\n return (_jsx(_Fragment, { children: _jsxs(\"svg\", { className: clsx(\"animate-[spin_0.8s_linear_infinite] text-indigo-500\", sizeClass, className), xmlns: \"http://www.w3.org/2000/svg\", fill: \"none\", viewBox: \"0 0 24 24\", children: [_jsx(\"circle\", { className: \"opacity-25\", cx: \"12\", cy: \"12\", r: \"10\", stroke: \"currentColor\", strokeWidth: \"4\" }), _jsx(\"path\", { className: \"opacity-75\", fill: \"currentColor\", d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" })] }) }));\n}\n//# sourceMappingURL=Spinner.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { Spinner } from \"./Spinner.js\";\nfunction getRealSize(size) {\n switch (size) {\n case 'xs': return 'rounded-xs px-2 py-1 text-xs gap-x-1';\n case 'sm': return 'rounded-xs px-2 py-1 text-sm gap-x-1';\n case 'md': return 'rounded-md px-2.5 py-1.5 text-sm gap-x-1.5';\n case 'lg': return 'rounded-md px-3 py-2 text-sm gap-x-1.5';\n case 'xl': return 'rounded-md px-3.5 py-2.5 text-sm gap-x-2';\n default: throw new Error('Unexpected size: ' + size);\n }\n}\nconst Variants = {\n primary: \"shadow-2xs bg-indigo-600 text-white hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\",\n secondary: \"shadow-2xs bg-white text-gray-900 hover:bg-gray-50 ring-1 ring-inset ring-gray-300\",\n soft: \"shadow-2xs bg-indigo-50 text-indigo-600 hover:bg-indigo-100\",\n ghost: \"text-indigo-600 hover:bg-indigo-100 dark:text-indigo-400 dark:hover:bg-indigo-900\",\n unstyled: \"\"\n};\nconst SpinnerVariants = {\n primary: \"text-white\",\n secondary: \"text-indigo-500\",\n soft: \"text-indigo-600\",\n ghost: \"text-indigo-600\",\n unstyled: \"text-gray-600\"\n};\nexport function Button({ title, className, type = 'button', children, size, onClick, variant = \"primary\", isLoading = false, isDisabled = false }) {\n const sizeClass = getRealSize(size || 'md');\n return (_jsxs(\"button\", { title: title, disabled: isDisabled || isLoading, onClick: onClick, type: type, className: clsx(\"whitespace-nowrap inline-flex items-center justify-center font-semibold hover:cursor-pointer\", Variants[variant], sizeClass, isDisabled && \"cursor-not-allowed text-gray-300!\", className), children: [isLoading && _jsx(Spinner, { className: SpinnerVariants[variant], size: size }), children] }));\n}\n//# sourceMappingURL=Button.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"./Button\";\nexport function Overlay({ children, overlayContent, className = \"\", overlayClassName = \"\", position = 'right', width, height, showCloseButton = true, onOpen, onClose, triggerClassName = \"\", backdropClassName = \"\", animationConfig = { type: \"spring\", stiffness: 300, damping: 30 } }) {\n const [isOpen, setIsOpen] = useState(false);\n const handleOpen = () => {\n setIsOpen(true);\n onOpen?.();\n };\n const handleClose = () => {\n setIsOpen(false);\n onClose?.();\n };\n const animationProps = getAnimationProps(position);\n const positionClasses = getPositionClasses(position, width, height);\n return (_jsxs(\"div\", { className: `flex items-center justify-center w-full ${className}`, children: [_jsx(\"div\", { onClick: handleOpen, className: `w-full align-left cursor-pointer ${triggerClassName}`, children: children }), isOpen && (_jsx(\"div\", { className: `z-45 fixed inset-0 bg-black bg-opacity-50 ${backdropClassName}`, children: _jsxs(motion.div, { ...animationProps, transition: animationConfig, className: `${positionClasses} ${overlayClassName}`, children: [showCloseButton && (_jsx(\"div\", { className: \"absolute top-2 right-2 z-10\", children: _jsx(Button, { onClick: handleClose, variant: \"primary\", children: _jsx(X, {}) }) })), _jsx(\"div\", { className: showCloseButton ? \"mt-8\" : \"\", children: overlayContent })] }) }))] }));\n}\nfunction getAnimationProps(position) {\n switch (position) {\n case 'left':\n return { initial: { x: \"-100%\" }, animate: { x: 0 }, exit: { x: \"-100%\" } };\n case 'right':\n return { initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" } };\n case 'top':\n return { initial: { y: \"-100%\" }, animate: { y: 0 }, exit: { y: \"-100%\" } };\n case 'bottom':\n return { initial: { y: \"100%\" }, animate: { y: 0 }, exit: { y: \"100%\" } };\n case 'center':\n return {\n initial: { opacity: 0, scale: 0.8 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.8 }\n };\n default:\n return { initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" } };\n }\n}\nfunction getPositionClasses(position, width, height) {\n const baseClasses = \"fixed bg-white shadow-lg p-4 relative\";\n switch (position) {\n case 'left':\n return `${baseClasses} left-0 top-[var(--header-height)] h-full ${width || 'w-80'}`;\n case 'right':\n return `${baseClasses} right-0 top-[var(--header-height)] h-full ${width || 'w-80'}`;\n case 'top':\n return `${baseClasses} top-[var(--header-height)] left-0 right-0 ${height || 'h-80'}`;\n case 'bottom':\n return `${baseClasses} bottom-0 left-0 right-0 ${height || 'h-80'}`;\n case 'center':\n return `${baseClasses} top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 ${width || 'w-96'} ${height || 'max-h-96'}`;\n default:\n return `${baseClasses} right-0 top-[var(--header-height)] h-full ${width || 'w-80'}`;\n }\n}\n//# sourceMappingURL=Overlay.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nexport class RadioOptionAdapter {\n renderOption(item) {\n return this.labelOf(item);\n }\n findById(items, id) {\n return items.find(item => this.idOf(item) === id);\n }\n}\nexport function RadioGroup({ checkColor, cols = \"grid-cols-1\", gap = \"gap-2\", value, onChange, options, checkIcon: CheckIcon = DefaultCheckIcon, adapter }) {\n const [selected, setSelected] = useState(value);\n const onSelect = (option) => {\n setSelected(option);\n onChange(option);\n };\n const selectedId = selected ? adapter.idOf(selected) : undefined;\n return (_jsx(\"div\", { className: clsx(\"grid\", cols, gap), children: options.map(option => {\n const key = adapter.idOf(option);\n return (_jsx(RadioOption, { checkColor: checkColor, isSelected: key === selectedId, option: option, adapter: adapter, onSelect: onSelect, CheckIcon: CheckIcon }, key));\n }) }));\n}\nfunction RadioOption({ checkColor, CheckIcon, adapter, isSelected, option, onSelect }) {\n const [isHighlighted, setIsHighlighted] = useState(false);\n return (_jsxs(\"div\", { className: \"flex gap-1 cursor-pointer items-center\", onClick: () => onSelect(option), onMouseEnter: () => setIsHighlighted(true), onMouseLeave: () => setIsHighlighted(false), children: [_jsx(\"div\", { className: \"\", children: _jsx(CheckIcon, { size: 24, isChecked: isSelected, isHighlighted: isHighlighted, color: checkColor }) }), _jsx(\"div\", { children: adapter.renderOption(option) })] }));\n}\nfunction DefaultCheckIcon({ size, isChecked, isHighlighted, color = \"currentColor\" }) {\n //https://www.svgrepo.com/svg/309414/checkbox-checked\n //https://www.svgrepo.com/svg/309415/checkbox-unchecked\n const opacity = isHighlighted ? 1 : 0.6;\n return isChecked ? (_jsx(\"svg\", { width: `${size}px`, height: `${size}px`, viewBox: \"0 0 24 24\", version: \"1.1\", children: _jsx(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\", children: _jsx(\"g\", { id: \"ic_fluent_checkbox_checked_24_regular\", fill: color, fillRule: \"nonzero\", opacity: opacity, children: _jsx(\"path\", { d: \"M18.25,3 C19.7687831,3 21,4.23121694 21,5.75 L21,18.25 C21,19.7687831 19.7687831,21 18.25,21 L5.75,21 C4.23121694,21 3,19.7687831 3,18.25 L3,5.75 C3,4.23121694 4.23121694,3 5.75,3 L18.25,3 Z M18.25,4.5 L5.75,4.5 C5.05964406,4.5 4.5,5.05964406 4.5,5.75 L4.5,18.25 C4.5,18.9403559 5.05964406,19.5 5.75,19.5 L18.25,19.5 C18.9403559,19.5 19.5,18.9403559 19.5,18.25 L19.5,5.75 C19.5,5.05964406 18.9403559,4.5 18.25,4.5 Z M10,14.4393398 L16.4696699,7.96966991 C16.7625631,7.6767767 17.2374369,7.6767767 17.5303301,7.96966991 C17.7965966,8.23593648 17.8208027,8.65260016 17.6029482,8.94621165 L17.5303301,9.03033009 L10.5303301,16.0303301 C10.2640635,16.2965966 9.84739984,16.3208027 9.55378835,16.1029482 L9.46966991,16.0303301 L6.46966991,13.0303301 C6.1767767,12.7374369 6.1767767,12.2625631 6.46966991,11.9696699 C6.73593648,11.7034034 7.15260016,11.6791973 7.44621165,11.8970518 L7.53033009,11.9696699 L10,14.4393398 L16.4696699,7.96966991 L10,14.4393398 Z\" }) }) }) })) : (_jsx(\"svg\", { width: `${size}px`, height: `${size}px`, viewBox: \"0 0 24 24\", version: \"1.1\", children: _jsx(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\", children: _jsx(\"g\", { id: \"ic_fluent_checkbox_unchecked_24_regular\", fill: color, fillRule: \"nonzero\", opacity: opacity, children: _jsx(\"path\", { d: \"M5.75,3 L18.25,3 C19.7687831,3 21,4.23121694 21,5.75 L21,18.25 C21,19.7687831 19.7687831,21 18.25,21 L5.75,21 C4.23121694,21 3,19.7687831 3,18.25 L3,5.75 C3,4.23121694 4.23121694,3 5.75,3 Z M5.75,4.5 C5.05964406,4.5 4.5,5.05964406 4.5,5.75 L4.5,18.25 C4.5,18.9403559 5.05964406,19.5 5.75,19.5 L18.25,19.5 C18.9403559,19.5 19.5,18.9403559 19.5,18.25 L19.5,5.75 C19.5,5.05964406 18.9403559,4.5 18.25,4.5 L5.75,4.5 Z\" }) }) }) }));\n}\n//# sourceMappingURL=RadioGroup.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Listbox, ListboxButton, ListboxOption, ListboxOptions } from \"@headlessui/react\";\nimport { X, Check, ChevronsUpDownIcon } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { useState, useEffect, useRef } from \"react\";\nimport { Button } from \"./Button\";\nimport { Center } from \"./Center\";\nfunction getFilterByFn(filterBy) {\n if (!filterBy) {\n return (o) => String(o).toLowerCase();\n }\n else if (typeof filterBy === 'string') {\n return (o) => String(o[filterBy]).toLowerCase();\n }\n else {\n return filterBy;\n }\n}\nexport function SelectBox({ clearTitle, ClearIcon = X, showFilter, filterBy, isClearable, disabled, by, options, value, onChange, className, addNew, addNewLabel, placeholder, optionLabel = (option) => String(option), label }) {\n const [filter, setFilter] = useState();\n const buttonRef = useRef(null);\n const [buttonWidth, setButtonWidth] = useState();\n useEffect(() => {\n if (buttonRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n setButtonWidth(entries[0].contentRect.width);\n });\n resizeObserver.observe(buttonRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n const onClear = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (isClearable) {\n onChange(undefined);\n }\n };\n const onFilterChange = (e) => {\n setFilter(e.target.value);\n };\n let filteredOptions = options || [];\n if (showFilter === undefined) {\n showFilter = filteredOptions?.length >= 10;\n }\n if (showFilter && filter) {\n const filterLc = filter.toLowerCase();\n const filterFn = getFilterByFn(filterBy);\n filteredOptions = filteredOptions.filter(o => filterFn(o).includes(filterLc));\n }\n const onFilterKeyDown = (e) => {\n if (e.key !== \"Escape\"\n && e.key !== \"Enter\"\n && e.key !== \"ArrowDown\"\n && e.key !== \"ArrowUp\") {\n e.stopPropagation();\n }\n };\n return (_jsx(Listbox, { value: value || null, onChange: onChange, by: by, disabled: disabled, children: () => (_jsx(\"div\", { className: 'overflow-y-visible ' + className, children: _jsxs(\"div\", { className: \"relative\", children: [_jsxs(ListboxButton, { ref: buttonRef, className: \"relative w-full cursor-default rounded-md bg-white py-1.5 text-left text-gray-900 shadow-2xs ring-1 ring-inset ring-gray-300 focus:outline-hidden focus:ring-2 focus:ring-indigo-600 dark:ring-slate-600 dark:text-slate-50 dark:bg-slate-800 sm:text-sm sm:leading-6 hover:cursor-pointer\", children: [label && _jsx(\"div\", { className: 'w-full text-gray-500 text-left px-2', children: label }), _jsx(\"span\", { className: \"block truncate pl-3 pr-14\", children: value ? optionLabel(value) : placeholder }), isClearable && value != null && _jsx(\"span\", { className: \"absolute inset-y-0 right-0 mr-5 flex items-center pr-2\", onClick: onClear, children: _jsx(ClearIcon, { title: clearTitle, className: \"size-5 text-gray-400 hover:text-red-500 cursor-pointer\", \"aria-hidden\": \"true\" }) }), !disabled &&\n _jsx(\"span\", { className: \"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\", children: _jsx(ChevronsUpDownIcon, { className: \"size-5 text-gray-400\", \"aria-hidden\": \"true\" }) })] }), _jsxs(ListboxOptions, { anchor: \"bottom\", style: { width: buttonWidth, zIndex: 100000000 }, className: \"absolute z-10 mt-1 overflow-auto rounded-md bg-white dark:ring-slate-600 dark:text-slate-50 dark:bg-slate-800 py-1 text-base shadow-lg ring-1 ring-gray-300 ring-opacity-5 focus:outline-hidden sm:text-sm\", children: [showFilter &&\n _jsx(\"div\", { className: \"p-1\", children: _jsx(\"input\", { type: \"text\", value: filter || '', onKeyDown: onFilterKeyDown, onChange: onFilterChange, className: \"w-full p-1 border border-gray-300 rounded-md dark:bg-slate-700 dark:text-slate-50\", placeholder: \"Filter...\" }) }), _jsx(\"div\", { className: \"overflow-y-auto max-h-60\", children: filteredOptions.map((option, i) => _jsx(ListOption, { option: option, optionLabel: optionLabel, className: \"hover:cursor-pointer\" }, i)) }), addNew &&\n _jsx(Center, { className: \"font-semibold py-2 border-t\", children: _jsx(Button, { variant: 'secondary', onClick: addNew, children: addNewLabel }) })] })] }) })) }));\n}\nexport function ListOption({ option, optionLabel, onClick, className }) {\n return (_jsx(ListboxOption, { className: ({ active }) => clsx(active ? 'bg-indigo-600 text-white dark:bg-indigo-800 dark:text-white' : 'text-gray-900 dark:text-slate-50', 'relative cursor-default select-none py-2 pl-3 pr-9', className), value: option, onClick: onClick, children: ({ selected, active }) => (_jsxs(_Fragment, { children: [_jsx(\"div\", { className: clsx(selected ? 'font-semibold' : 'font-inherit', 'block truncate'), children: optionLabel(option) }), selected ? (_jsx(\"div\", { className: clsx(active ? 'text-white' : 'text-indigo-600', 'absolute inset-y-0 right-0 flex items-center pr-4'), children: _jsx(Check, { className: \"size-5\", \"aria-hidden\": \"true\" }) })) : null] })) }));\n}\n//# sourceMappingURL=SelectBox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Check } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { useMemo, useState } from \"react\";\nimport { Input } from \"./shadcn\";\nconst Default_Option_Style = \"flex-1 px-2 py-2 hover:bg-accent nowrap\";\nfunction defaultOptionLayout(option, isSelected) {\n return {\n label: String(option),\n check: isSelected ? _jsx(Check, { className: 'size-4' }) : _jsx(\"div\", { className: \"size-4\" }),\n reverse: false,\n className: Default_Option_Style,\n };\n}\nexport function SelectList({ value, options, onChange, className, optionLayout, by, noCheck, filterBy }) {\n const [selected, setSelected] = useState(value);\n const [filterValue, setFilterValue] = useState(\"\");\n const onSelect = (option) => {\n setSelected(option);\n onChange(option);\n };\n const optionEquals = useMemo(() => {\n if (typeof by === 'string') {\n return (o1, o2) => o1[by] === o2[by];\n }\n else if (!by) {\n return (o1, o2) => o1 === o2;\n }\n else {\n return by;\n }\n }, [by]);\n return (_jsxs(\"div\", { className: clsx(\"\", className), children: [filterBy && (_jsx(Input, { type: \"text\", placeholder: \"Filter...\", value: filterValue, onChange: (value) => setFilterValue(value) })), options.map((option, i) => {\n if (filterBy && !filterBy(filterValue)(option)) {\n return null;\n }\n const isSelected = selected ? optionEquals(selected, option) : false;\n let layout;\n if (optionLayout) {\n layout = optionLayout(option, isSelected);\n layout = Object.assign(defaultOptionLayout(option, isSelected), layout);\n }\n else {\n layout = defaultOptionLayout(option, isSelected);\n }\n return (_jsx(SelectListOption, { option: option, onSelect: onSelect, layout: layout, noCheck: noCheck }, i));\n })] }));\n}\nfunction SelectListOption({ option, onSelect, layout, noCheck }) {\n return (_jsxs(\"div\", { className: clsx('group flex items-center cursor-pointer gap-x-2 hover:bg-muted', layout.reverse && 'flex-row-reverse', layout.className), onClick: () => onSelect(option), children: [noCheck ? null : _jsx(\"div\", { className: \"\", children: layout.check }), _jsx(\"div\", { className: 'flex-1', children: layout.label })] }));\n}\n//# sourceMappingURL=SelectList.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { RadioGroup } from '@headlessui/react';\nimport clsx from 'clsx';\nexport function SelectStack({ onSelect, selected, options }) {\n return (_jsxs(RadioGroup, { value: selected, onChange: onSelect, children: [_jsx(RadioGroup.Label, { className: \"sr-only\", children: \"Server size\" }), _jsx(\"div\", { className: \"space-y-4\", children: options.map((option) => (_jsx(RadioGroup.Option, { value: option, className: ({ active }) => clsx(active ? 'border-border ring-2 ring-ring' : 'border-border', 'relative block cursor-pointer rounded-lg border bg-accent px-6 py-4 shadow-2xs focus:outline-hidden sm:flex sm:justify-between'), children: ({ active, checked }) => (_jsxs(_Fragment, { children: [_jsx(\"span\", { className: \"flex items-center\", children: _jsxs(\"span\", { className: \"flex flex-col text-sm\", children: [_jsx(RadioGroup.Label, { as: \"span\", className: \"font-medium text-text\", children: option.label }), option.description &&\n _jsx(RadioGroup.Description, { as: \"span\", className: \"text-muted-foreground\", children: option.description })] }) }), _jsx(\"span\", { className: clsx(active ? 'border' : 'border-2', checked ? 'border-accent-foreground' : 'border-transparent', 'pointer-events-none absolute -inset-px rounded-lg'), \"aria-hidden\": \"true\" })] })) }, option.id))) })] }));\n}\n//# sourceMappingURL=SelectStack.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Minus, X } from 'lucide-react';\nimport { Button } from './shadcn/button';\nexport function SidePanel({ isOpen, title, onClose, children, panelWidth = 768, backdrop = false }) {\n const [_panelWidth, setPanelWidth] = useState(panelWidth);\n const handleDragStart = (e) => {\n e.preventDefault();\n let isDragging = true;\n const startX = e.pageX;\n const startWidth = _panelWidth;\n const handleMouseMove = (e) => {\n if (isDragging) {\n const deltaX = startX - e.pageX;\n const newWidth = Math.max(startWidth + deltaX, 480);\n setPanelWidth(newWidth);\n }\n };\n const handleMouseUp = () => {\n isDragging = false;\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n };\n return (_jsx(AnimatePresence, { children: isOpen && (_jsxs(\"div\", { className: \"relative z-20\", children: [backdrop && (_jsx(motion.div, { className: \"fixed inset-0 bg-black/70\", initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: onClose })), _jsx(\"div\", { className: \"fixed inset-y-0 right-0 overflow-hidden\", children: _jsx(\"div\", { className: \"absolute inset-0 overflow-hidden\", children: _jsx(\"div\", { className: \"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10 sm:pl-16\", children: _jsx(motion.div, { className: \"pointer-events-auto border-l\", style: { width: `${_panelWidth}px` }, initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" }, transition: { type: \"spring\", stiffness: 300, damping: 30 }, children: _jsxs(\"div\", { className: \"relative flex h-full\", children: [_jsx(\"div\", { className: \"absolute -left-1 top-0 bottom-0 w-3 cursor-ew-resize hover:bg-indigo-500 transition-colors flex items-center justify-center\", onMouseDown: handleDragStart, children: _jsx(Minus, { className: \"rotate-90 font-semibold\", strokeWidth: 4 }) }), _jsxs(\"div\", { className: \"flex-1 flex flex-col overflow-y-scroll gap-4 bg-background py-2 shadow-xl\", children: [title && (_jsx(\"div\", { className: \"px-2 sm:px-4\", children: _jsxs(\"div\", { className: \"flex items-start justify-between\", children: [_jsx(\"h2\", { className: \"w-full text-base font-semibold leading-6\", children: _jsx(\"div\", { className: \"text-2xl\", children: title ?? \"\" }) }), _jsx(\"div\", { className: \"ml-3 flex h-7 items-center\", children: _jsx(CloseButton, { onClose: onClose }) })] }) })), _jsx(\"div\", { className: \"px-2 sm:px-4\", children: children })] })] }) }) }) }) })] })) }));\n}\nfunction CloseButton({ onClose }) {\n return (_jsx(Button, { alt: \"Close panel\", variant: \"ghost\", onClick: onClose, children: _jsx(X, { className: \"size-6\", \"aria-hidden\": \"true\" }) }));\n}\n//# sourceMappingURL=SidePanel.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { VTooltip } from \"./shadcn/tooltip\";\nimport { Info } from \"lucide-react\";\nexport function Panel({ children, action, title, description, footer, className }) {\n return (_jsxs(\"div\", { className: `p-4 flex flex-col gap-2 rounded-sm border bg-card ${className}`, children: [_jsxs(\"div\", { className: \"flex items-center justify-between\", children: [_jsxs(\"div\", { className: \"flex items-center gap-2\", children: [_jsx(\"div\", { className: \"font-semibold text-lg\", children: title }), description && _jsx(VTooltip, { description: description, children: _jsx(Info, { className: \"size-4 text-muted\" }) })] }), action] }), children, footer &&\n _jsx(\"div\", { className: \"border-t border-muted flex flex-col-2 text-sm pt-4\", children: footer })] }));\n}\n//# sourceMappingURL=Panel.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Switch as UISwitch } from \"@headlessui/react\";\nconst sizes = {\n 'sm': ['h-5 w-8', 'size-3', 'translate-x-4'],\n 'md': ['h-6 w-11', 'size-4', 'translate-x-6'],\n 'lg': ['h-8 w-16', 'size-6', 'translate-x-9'],\n};\nexport function Switch({ value, onChange, size = 'md', children, className, disabled }) {\n const sizeClass = sizes[size];\n return (_jsxs(UISwitch, { checked: value, onChange: () => onChange(!value), className: `flex items-center ${className} ${disabled ? 'cursor-not-allowed opacity-50' : 'hover:cursor-pointer'}`, children: [_jsx(\"div\", { className: `${value ? 'bg-primary' : 'bg-muted/50'} relative inline-flex ${sizeClass[0]} items-center rounded-full border-1`, children: _jsx(\"span\", { className: `${value ? sizeClass[2] : 'translate-x-1'} inline-block ${sizeClass[1]} transform rounded-full bg-white transition` }) }), children && _jsx(\"span\", { className: \"px-2\", children: children })] }));\n}\n//# sourceMappingURL=Switch.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nconst defaultTableCass = `\ndivide-y divide-border\n[&>tbody]:divide-y [&>tbody]:divide-border\n[&_th]:text-left [&_th]:px-3 [&_th]:py-3.5 [&_th]:text-sm [&_th]:font-normal [&_th]:text-muted-foreground\n[&_td]:px-3 [&_td]:py-4 [&_td]:text-sm\n`;\nexport function Table({ className, children, ...others }) {\n return (_jsx(\"table\", { className: clsx(defaultTableCass, className), ...others, children: children }));\n}\nexport function RowSkeleton({ columns }) {\n return (_jsx(\"tr\", { className: \"hover:bg-muted\", children: Array(columns).fill(0).map((_, index) => _jsx(\"td\", { children: _jsx(\"div\", { className: \"animate-pulse rounded-xs h-5 bg-muted\" }) }, index)) }));\n}\nexport function TBody({ isLoading = false, columns, rows = 3, children }) {\n return (_jsx(\"tbody\", { children: isLoading ?\n Array(rows).fill(0).map((_, index) => _jsx(RowSkeleton, { columns: columns }, index))\n : children }));\n}\nexport function TR({ className, children, ...others }) {\n return (_jsx(\"tr\", { className: clsx(\"hover:bg-muted hover:cursor-pointer\", className), ...others, children: children }));\n}\n//# sourceMappingURL=index.js.map","import { createContext, useContext } from \"react\";\nexport function useTabs() {\n return useContext(TabsContext);\n}\nconst TabsContext = createContext({});\nexport { TabsContext };\n//# sourceMappingURL=TabsContext.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { isValidElement, useEffect, useState } from 'react';\nimport { TabsContext, useTabs } from './TabsContext.js';\nfunction applyCurrentTab(tabs, current) {\n const name = typeof current === 'function' ? current() : current;\n let currentTab = null;\n const newTabs = [];\n for (const tab of tabs) {\n const newTab = { ...tab };\n newTab.current = false;\n newTabs.push(newTab);\n if (newTab.name === name) {\n currentTab = newTab;\n }\n }\n if (!currentTab) {\n currentTab = newTabs[0];\n }\n currentTab.current = true;\n return newTabs;\n}\nexport function Tabs({ current, onSelect, tabs, children, navigate }) {\n const [_tabs, _setTabs] = useState([]);\n useEffect(() => {\n _setTabs(applyCurrentTab(tabs, current));\n }, [current, tabs]);\n const context = {\n tabs: _tabs,\n select: (tab) => {\n if (onSelect) {\n if (onSelect(tab) === false) {\n return;\n }\n }\n if (tab.href) {\n if (navigate) {\n navigate(tab.href);\n }\n else {\n window.location.href = tab.href;\n }\n }\n else {\n _setTabs([...applyCurrentTab(_tabs, tab.name)]);\n }\n }\n };\n return (_jsx(TabsContext.Provider, { value: context, children: _jsx(\"div\", { className: \"flex flex-col h-full\", children: children }) }));\n}\nexport function TabsBar({ actions, className }) {\n const { tabs, select } = useTabs();\n const _onClick = (e, tab) => {\n e.preventDefault();\n e.stopPropagation();\n // ignore if disabled\n !tab.disabled && select(tab);\n };\n return (_jsxs(\"div\", { className: \"border-b flex items-start justify-between\", children: [_jsx(\"nav\", { className: \"flex space-x-4 px-4\", \"aria-label\": \"Tabs\", children: tabs.map((tab) => {\n const cursor = tab.disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n return (_jsx(\"a\", { href: tab.href || '#' + tab.name, onClick: (e) => _onClick(e, tab), className: clsx(tab.current\n ? 'border-indigo-500 text-indigo-600 dark:border-indigo-400 dark:text-indigo-50'\n : 'border-transparent text-gray-500 dark:text-slate-300 hover:border-slate-400 hover:text-gray-700 dark:hover:border-slate-200 dark:hover:text-gray-200 ', className, 'whitespace-nowrap border-b-2 py-2 px-1 text-sm font-medium', cursor), \"aria-current\": tab.current ? 'page' : undefined, children: tab.label }, tab.name));\n }) }), _jsx(\"div\", { className: \"flex gap-x-1\", children: actions })] }));\n}\nexport function TabsPanel({}) {\n const { tabs } = useTabs();\n const content = tabs.find((t) => t.current)?.content;\n if (!content) {\n return null;\n }\n if (isValidElement(content)) {\n return _jsx(\"div\", { className: \"h-full overflow-y-auto flex-1\", children: content });\n }\n const Component = content;\n return (_jsx(\"div\", { className: \"h-full overflow-y-auto flex-1\", children: _jsx(Component, {}) }));\n}\n//# sourceMappingURL=Tabs.js.map","import React, { useContext, useEffect, useState } from \"react\";\n//type KeysOfType<T, V> = { [K in keyof T]-?: T[K] extends V ? K : never }[keyof T];\n//type KeysNotOfType<T, V> = { [K in keyof T]-?: T[K] extends V ? never : K }[keyof T];\nexport class Property {\n _value;\n watchers = [];\n constructor(value) {\n this._value = value;\n }\n get value() {\n return this._value;\n }\n set value(value) {\n if (value !== this._value) {\n this._value = value;\n for (const watcher of this.watchers) {\n watcher(value);\n }\n }\n }\n watch(watcher) {\n this.watchers.push(watcher);\n return () => {\n this.watchers = this.watchers.filter(w => w !== watcher);\n };\n }\n}\nexport function createCompositeStateProvider(StateClass) {\n const context = React.createContext(undefined);\n StateClass.Context = context;\n return context.Provider;\n}\nexport class Slot {\n consume = undefined;\n _current;\n constructor(content) {\n this._current = content;\n }\n set current(content) {\n if (content !== this._current) {\n this._current = content;\n this.consume?.(content);\n }\n }\n get current() {\n return this._current;\n }\n withConsumer(consume) {\n this.consume = consume;\n consume && consume(this.current);\n return this;\n }\n}\nexport function useCompositeState(StateClass) {\n const context = StateClass.Context;\n if (!context) {\n throw new Error(\"Context not defined for \" + StateClass.name);\n }\n return useContext(context);\n}\nexport function useGetCompositeStateProperty(property) {\n const [value, setValue] = useState(property.value);\n useEffect(() => {\n return property.watch((value) => {\n if (typeof value === 'function') {\n setValue(() => value); // cannot directly store functions\n }\n else {\n setValue(value);\n }\n });\n }, [property]);\n return value;\n}\n// use memo on value to avoid re-computations if needed\nexport function useSetCompositeStateProperty(property, value) {\n useEffect(() => {\n property.value = value;\n return () => {\n property.value = undefined;\n };\n }, [property, value]);\n return value;\n}\n// use memo on watcher to avoid re-computations if needed\nexport function useWatchCompositeStateProperty(property, watcher) {\n useEffect(() => {\n return property.watch(watcher);\n }, [property, watcher]);\n}\nexport function useSlot(slot) {\n const [value, setValue] = useState(slot.current);\n useEffect(() => {\n slot.withConsumer(setValue);\n return () => {\n slot.withConsumer(undefined);\n };\n }, [slot]);\n return value;\n}\nexport function useWatchSlot(slot, watcher) {\n useEffect(() => {\n slot.withConsumer(watcher);\n return () => {\n slot.withConsumer(undefined);\n };\n }, [slot, watcher]);\n}\n// use memo for value if needed\nexport function useDefineSlot(slot, value) {\n useEffect(() => {\n slot.current = value;\n return () => {\n slot.current = undefined;\n };\n }, [slot, value]);\n}\n//# sourceMappingURL=CompositeState.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nconst PortalContainerContext = React.createContext(undefined);\nfunction findOrCreatePortalContainer(root, id = \"plugin-portal-container\") {\n // look only at direct children\n for (const child of Array.from(root.children)) {\n if (child instanceof HTMLElement && child.id === id) {\n return child;\n }\n }\n // not found → create\n const container = document.createElement(\"div\");\n container.id = id;\n root.appendChild(container);\n return container;\n}\nexport function PortalContainerProvider({ children, id = \"plugin-portal-container\", }) {\n const ref = React.useRef(null);\n const [container, setContainer] = React.useState(undefined);\n React.useEffect(() => {\n if (ref.current) {\n const root = ref.current.getRootNode();\n if (root instanceof ShadowRoot || root instanceof Document) {\n const container = findOrCreatePortalContainer(root, id);\n setContainer(container);\n }\n else {\n setContainer(null);\n }\n }\n }, [id]);\n // If container not discovered yet → render hidden marker only\n if (container === undefined) {\n return _jsx(\"div\", { ref: ref, style: { display: \"none\" } });\n }\n // Once container is resolved (null or HTMLElement) → provide it\n return (_jsx(PortalContainerContext.Provider, { value: container || undefined, children: children }));\n}\nexport function usePortalContainer() {\n return React.useContext(PortalContainerContext);\n}\n//# sourceMappingURL=PortalContainerProvider.js.map","import { useEffect, useState } from \"react\";\nexport class SharedState {\n _value;\n watchers = [];\n constructor(value) {\n this._value = value;\n }\n get value() {\n return this._value;\n }\n set value(value) {\n if (value !== this._value) {\n this._value = value;\n for (const watcher of this.watchers) {\n watcher(value);\n }\n }\n }\n addWatcher(watcher) {\n this.watchers.push(watcher);\n return () => {\n this.watchers = this.watchers.filter(w => w !== watcher);\n };\n }\n}\nexport function useWatchSharedState(state) {\n const [value, setValue] = useState(state.value);\n useEffect(() => {\n return state.addWatcher((value) => {\n if (typeof value === 'function') {\n setValue(() => value); // cannot directly store functions\n }\n else {\n setValue(value);\n }\n });\n }, [state]);\n return value;\n}\n// export function createSharedStateContext<T>(initialValue: T) {\n// const Context = React.createContext<SharedState<T>>(undefined as any);\n// function SharedStateProvider({ value = initialValue, children }: {\n// value?: T,\n// children: React.ReactNode\n// }) {\n// const state = useMemo(() => {\n// return new SharedState(value);\n// }, []);\n// return <Context.Provider value={state}>{children}</Context.Provider>\n// }\n// const useSharedState = () => {\n// return React.useContext(Context);\n// }\n// return {\n// Context,\n// Provider: SharedStateProvider,\n// useSharedState,\n// useWatchSharedState: () => {\n// const state = useSharedState();\n// return state ? useWatchSharedState(state) : undefined;\n// }\n// }\n// }\n//# sourceMappingURL=SharedState.js.map","import { useEffect, useRef } from \"react\";\n/**\n *\n * @param callback\n * @param skipFn an optional function to skip the callback if the event matches some condition. Return true to skip\n * @returns\n */\nexport function useClickOutside(callback, skipFn) {\n const ref = useRef(null);\n useEffect(() => {\n const handleClick = (e) => {\n if (ref.current && !ref.current.contains(e.target)) {\n if (!skipFn || !skipFn(e)) {\n callback(e);\n }\n }\n };\n // add te listener just after the render to avoid the callback to be called on the current click\n // if you are in a click context\n window.setTimeout(() => {\n document.addEventListener('click', handleClick);\n }, 0);\n return () => {\n document.removeEventListener('click', handleClick);\n };\n }, []);\n return ref;\n}\n//# sourceMappingURL=useClickOutside.js.map","import { useState } from 'react';\nexport function useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = async (text) => {\n if (!navigator?.clipboard) {\n console.warn('Clipboard not supported');\n return false;\n }\n // Try to save to clipboard then save it in the state if worked\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n }\n catch (error) {\n console.warn('Copy failed', error);\n setCopiedText(null);\n return false;\n }\n };\n return [copiedText, copy];\n}\n//# sourceMappingURL=useCopyToClipboard.js.map","import { useEffect } from \"react\";\nexport function useDarkMode(cb) {\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const _cb = (e) => cb(e.matches);\n mediaQuery.addEventListener('change', _cb);\n cb(mediaQuery.matches);\n return () => mediaQuery.removeEventListener('change', _cb);\n }, []);\n}\n//# sourceMappingURL=useDarkMode.js.map","import { useEffect, useState } from \"react\";\nexport function useDebounce(value, delay) {\n const [debounceValue, setDebounceValue] = useState(value);\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebounceValue(value);\n }, delay);\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n return debounceValue;\n}\n//# sourceMappingURL=useDebounce.js.map","import { useEffect } from \"react\";\nfunction startSse(url, onMessage, onCompleted) {\n const chunks = [];\n const sse = new EventSource(url);\n sse.addEventListener(\"message\", ev => {\n const data = JSON.parse(ev.data);\n if (data) {\n chunks.push(data);\n onMessage(chunks.join(''));\n }\n });\n sse.addEventListener(\"close\", (ev) => {\n sse.close();\n const msg = JSON.parse(ev.data);\n onCompleted(msg);\n });\n return () => {\n sse.close();\n };\n}\nexport function useEventSource(url, onMessage, onCompleted) {\n useEffect(() => {\n if (typeof url === 'function') {\n url().then(url => startSse(url, onMessage, onCompleted));\n }\n else {\n startSse(url, onMessage, onCompleted);\n }\n }, [url]);\n}\n//# sourceMappingURL=useEventSource.js.map","import { useEffect, useState } from \"react\";\nexport function useFetch(fetcher, opts) {\n if (Array.isArray(opts)) {\n opts = { deps: opts };\n }\n const options = (opts || {});\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [data, setData] = useState(options.defaultValue);\n const fetch = () => {\n options.start && options.start();\n setIsLoading(true);\n return fetcher().then((result) => {\n setData(result);\n options.onSuccess && options.onSuccess(result);\n }).catch(error => {\n setError(error);\n options.onError && options.onError(error);\n }).finally(() => {\n setIsLoading(false);\n options.end && options.end();\n });\n };\n useEffect(() => {\n if (!options.condition || options.condition()) {\n fetch();\n }\n }, options.deps);\n return { data, isLoading, error, setData, refetch: fetch };\n}\nexport function useFetchOnce(fetcher, opts) {\n if (!opts || Array.isArray(opts)) {\n opts = { deps: [] };\n }\n else if (opts) {\n opts.deps = [];\n }\n return useFetch(fetcher, opts);\n}\n//# sourceMappingURL=useFetch.js.map","import { useState } from \"react\";\nexport function useFlag(isOn = false) {\n const [state, setState] = useState(isOn);\n return {\n isOn: state,\n isOff: !state,\n set: (value) => setState(value),\n on: () => setState(true),\n off: () => setState(false),\n toggle: () => setState(!state)\n };\n}\n//# sourceMappingURL=useFlag.js.map","import { useEffect } from \"react\";\n/**\n * if leave option is true then callback will be called when the target leaves the viewport\n * otherwise when it enters the viewport\n * @param target\n * @param cb\n * @param opts\n */\nexport function useIntersectionObserver(target, cb, opts = {}) {\n useEffect(() => {\n const observer = new IntersectionObserver(entries => {\n const isEntering = entries[0].isIntersecting;\n if (opts.leave) {\n if (!isEntering) {\n cb(entries[0]);\n }\n }\n else {\n if (isEntering) {\n cb(entries[0]);\n }\n }\n }, { threshold: opts.threshold || 1 });\n if (target.current) {\n observer.observe(target.current);\n }\n return () => {\n if (target.current) {\n observer.unobserve(target.current);\n }\n };\n }, opts.deps ? opts.deps.concat(target) : [target]);\n}\n//# sourceMappingURL=useIntersectionObserver.js.map","import { useEffect, useRef } from \"react\";\nexport function useIsFirstRendering() {\n const isFirstRender = useRef(true);\n useEffect((cb) => {\n if (cb && isFirstRender.current) {\n cb();\n }\n isFirstRender.current = false;\n // ---> StrictMode: The following is REQUIRED to reset/cleanup:\n return () => { isFirstRender.current = true; };\n }, []);\n return isFirstRender.current;\n}\n//# sourceMappingURL=useIsFistRendering.js.map","import { useEffect, useLayoutEffect } from \"react\";\nconst useSafeLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\nexport { useSafeLayoutEffect };\n//# sourceMappingURL=useSafeLayoutEffect.js.map","import { useIntersectionObserver } from \"@vertesia/ui/core\";\nimport { useEffect, useRef, useState } from \"react\";\n/**\n * A hook that provides paginated search functionality with infinite scrolling support.\n */\nexport function useScrollableSearch(opts, dependencies = []) {\n const pageSize = opts.pageSize || 50;\n const [page, setPage] = useState(null);\n const [lastPayload, setLastPayload] = useState(opts.payload);\n const [error, setError] = useState(null);\n const [results, setResults] = useState([]);\n const [nextPage, setNextPage] = useState(null);\n const [isSearching, setIsSearching] = useState(false);\n // Track current request to prevent stale results\n const requestIdRef = useRef(0);\n const search = (payload) => {\n setPage(null);\n setResults([]); // Clear old results immediately\n setNextPage(null);\n setLastPayload(payload);\n };\n const searchMore = () => {\n if (nextPage !== null) {\n setPage(nextPage);\n }\n };\n useEffect(() => {\n // Increment request ID to mark previous requests as stale\n requestIdRef.current += 1;\n const currentRequestId = requestIdRef.current;\n setIsSearching(true);\n opts.search(lastPayload, page, pageSize).then(r => {\n // Only update state if this is still the current request\n if (currentRequestId !== requestIdRef.current) {\n return; // Stale request, ignore results\n }\n // If page is null, it's a new search - replace results\n // Otherwise, it's loading more - append results\n if (page === null) {\n setResults(r.result);\n }\n else {\n setResults(prev => [...prev, ...r.result]);\n }\n setNextPage(r.nextPage);\n setError(null);\n }).catch(error => {\n // Only update error if this is still the current request\n if (currentRequestId !== requestIdRef.current) {\n return; // Stale request, ignore error\n }\n setError(error);\n }).finally(() => {\n // Only update isSearching if this is still the current request\n if (currentRequestId === requestIdRef.current) {\n setIsSearching(false);\n }\n });\n }, [...dependencies, lastPayload, page]);\n // Intersection observer for infinite scrolling\n useIntersectionObserver(opts.nextPageTrigger, () => {\n if (!isSearching && nextPage) {\n searchMore();\n }\n }, { threshold: 0.1, deps: [nextPage, isSearching] });\n return {\n search,\n refresh: () => search(lastPayload),\n searchMore,\n result: results,\n page,\n hasMore: nextPage !== null,\n error,\n isSearching,\n };\n}\nexport function useDefaultScrollableSearch(opts, dependencies = []) {\n const actualOpts = {\n ...opts,\n async search(payload, page, pageSize) {\n const currentPage = page ?? 0;\n const offset = currentPage * pageSize;\n const result = await opts.search(payload, offset, pageSize);\n return {\n result,\n nextPage: result.length === 0 ? null : currentPage + 1\n };\n }\n };\n return useScrollableSearch(actualOpts, dependencies);\n}\n//# sourceMappingURL=useScrollableSearch.js.map","import { useState } from \"react\";\nexport class SharedValue {\n state;\n constructor(state) {\n this.state = state;\n }\n get() {\n return this.state[0];\n }\n set(value) {\n this.state[1](value);\n }\n}\n/**\n * Share a stateful value\n */\nexport function useSharedValue(initialValue) {\n const state = useState(initialValue);\n return new SharedValue(state);\n}\n//# sourceMappingURL=useSharedValue.js.map","import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nexport function cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n//# sourceMappingURL=cn.js.map"],"names":["getRealSize","size","Error","Avatar","src","name","shape","color","className","rounded","sizeClass","_jsx","alt","title","first","second","split","text","children","fill","viewBox","d","SvgAvatar","cn","inputs","twMerge","clsx","badgeVariants","cva","variants","variant","default","secondary","destructive","attention","success","info","done","defaultVariants","Badge","onClick","props","dotBadgeVariants","dotVariants","DotBadge","dotClassName","_jsxs","cx","cy","r","Center","PositionResolver","left","top","width","height","alignAxis","gap","constructor","this","position","pos","anchorRect","elemRect","bottom","right","align","computePosition","constraints","constrainWidth","constrainHeight","rect","DOMRect","flipAxis","axis","newAlign","flipAlign","newPos","flipPos","isElementVisibleOnAxis","clientRect","resolver","computedPos","isVisibleOnXAxis","isVisibleOnYAxis","newConstraints","isElementVisible","intersectRects","rect1","rect2","x1","Math","max","y1","x2","min","y2","isScrollable","element","hasScrollY","scrollHeight","clientHeight","hasScrollX","scrollWidth","clientWidth","style","getComputedStyle","overflowY","overflowX","PopupController","options","root","scrollableParents","visibleClientRect","context","document","documentElement","parents","parent","parentElement","push","getScrollableParents","anchor","length","getBoundingClientRect","i","l","computeVisibleClientRect","registerListeners","updateHandler","update","window","addEventListener","closeOnClick","closeOnEsc","ev","contains","target","tryClose","setTimeout","key","blockPageScroll","body","overflow","removeEventListener","open","tryOpen","cleanup","display","visibility","onOpen","close","onClose","undefined","isOpen","createPopupElement","popup","createElement","margin","padding","border","background","PopupContext","createContext","usePopupController","ctrl","useContext","DOMPopup","ctrlRef","id","zIndex","popupRef","useRef","setCtrl","useState","useEffect","_ctrl","current","Provider","value","createPortal","ref","Popup","others","OptionAdapter","filter","items","lcText","toLowerCase","item","valueOf","includes","renderOption","findById","find","idOf","createItem","_value","StringOptionAdapter","String","static","StringOptionAdapterWithCreate","getDefaultComboBoxLayout","fullWidth","unstyledInput","buttonRight","buttonWidth","maxMenuHeight","menuClass","inputClass","INPUT_NO_PADDING","optionClass","Input","Menu","Toggle","ComboBox","menuAlign","menuGap","focusOnMount","onSelect","api","layout","layoutOpts","adapter","placeholder","popupId","floor","random","popupCtrl","inputRef","Object","assign","inputBoxRef","React","useComboboxCtrl","focus","openMenu","closeMenu","toggle","toggleMenu","setInputValue","inputText","inputValue","selectedItem","showMenu","isMenuOpen","filteredItems","_Fragment","boxRef","fillWidth","ComboInput","paddingRight","getInputProps","backgroundColor","alignItems","justifyContent","getToggleButtonProps","ComboToggle","ChevronUpIcon","ChevronDownIcon","ComboMenu","highlightedIndex","maxHeight","getMenuProps","map","index","getItemProps","ComboboxController","withState","setState","_selectedItem","_filteredItems","_inputText","_highlightedIndex","_isMenuOpen","clone","updateState","popupPosition","_item","highlightIndex","navigateToTop","getElementById","querySelector","scrollIntoView","onMouseEnter","onMouseLeave","onChange","onKeyDown","decrModulo","buttonVariants","outline","ghost","link","primary","unstyled","xs","sm","md","lg","xl","icon","Button","forwardRef","asChild","isDisabled","isLoading","type","buttonElement","Slot","disabled","autoFocus","Loader2","VTooltip","description","placement","displayName","CopyButton","content","toast","isCopied","setIsCopied","e","stopPropagation","navigator","clipboard","writeText","then","status","message","duration","catch","err","console","error","Check","CopyIcon","ThemeProviderContext","theme","setTheme","ThemeProvider","defaultTheme","storageKey","localStorage","getItem","classList","remove","add","systemTheme","matchMedia","matches","setItem","useTheme","ModeOption","option","ModeToggle","Computer","Sun","Moon","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","VisuallyHidden","clip","whiteSpace","wordWrap","ModalContext","useIsInModal","ModalContextProvider","VModal","noCloseButton","allowOverflow","disableCloseOnClickOutside","handleOpenChange","Dialog","onOpenChange","DialogOverlay","DialogDescription","DialogContent","DialogClose","X","VModalTitle","show","DialogTitle","VModalBody","VModalFooter","center","DialogPrimitive","Root","DialogTrigger","Trigger","DialogPortal","Portal","Close","Overlay","Content","onOpenAutoFocus","event","preventDefault","Description","Title","noPadding","legacy","clearable","readOnly","Separator","orientation","decorative","SeparatorPrimitive","PopoverContext","Popover","hover","click","_open","setOpen","insideModal","PopoverPrimitive","modal","handleHover","PopoverTrigger","prev","PopoverAnchor","Anchor","PopoverContent","side","PopoverClose","Command","CommandPrimitive","CommandDialog","CommandInput","Search","CommandList","List","CommandEmpty","Empty","CommandGroup","Group","CommandSeparator","CommandItem","Item","CommandShortcut","VSelectBox","optionLabel","addNew","addNewLabel","filterBy","label","popupClass","isClearable","multiple","by","inline","triggerRef","setWidth","filterValue","setFilterValue","updateWidth","contentWidth","resizeObserver","ResizeObserver","observe","disconnect","isOptionSelected","selectedValues","some","v","isOptionsEqual","a","b","isEqual","filteredOptions","filterLc","filterFn","o","getFilterByFn","renderOptionsContent","SearchIcon","opt","isSelected","Array","isArray","currentValues","newValues","_onClick","SquarePlus","strokeWidth","absoluteStrokeWidth","arrayValue","slice","renderMultipleValue","singleValue","renderSingleValue","ChevronsUpDown","TabsContext","tabs","setTab","responsive","updateHash","VTabs","defaultValue","onTabChange","setValue","currentValue","hash","location","currentTab","substring","tab","handleHashChange","handleValueChange","newValue","currentState","history","state","newUrl","pathname","search","pushState","useCallback","tabName","TabsPrimitive","onValueChange","VTabsBar","handleTabChange","t","href","TabsList","TabsTrigger","warn","VTabsPanel","TabsContent","handleClick","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","sideOffset","delayDuration","labelVariants","Label","required","LabelPrimitive","Breadcrumbs","path","maxItems","separator","renderBreadcrumbItem","BreadcrumbButton","BreadcrumbPage","Breadcrumb","BreadcrumbList","Fragment","BreadcrumbItem","BreadcrumbSeparator","ChevronRight","lastThreeItems","BreadcrumbEllipsis","role","MoreHorizontal","AnimateChangeInHeight","containerRef","setHeight","entries","observedHeight","contentRect","Checkbox","CheckboxPrimitive","Indicator","DynamicLabel","labelRenderer","fallbackLabel","setLabel","setIsLoading","async","result","Promise","resolvedLabel","renderLabel","SelectionCombobox","filterType","filterValues","setFilterValues","commandInput","setCommandInput","commandInputRef","nonSelectedFilterValues","onInputCapture","currentTarget","checked","calendarStyles","DateCombobox","isRange","localDateRange","setLocalDateRange","selectedDate","Date","dateRange","handleDateChange","date","dayjs","format","actualDate","alignOffset","ReactCalendar","selectRange","returnValue","maxDate","setHours","tileClassName","view","currentDate","getTime","today","startDate","endDate","TextCombobox","StringListCombobox","tags","setTags","JSON","stringify","InputList","generateComboboxOptions","setFilters","filterGroups","f","dateValue","textValue","values","filterGroup","group","Filters","filters","join","TextFilter","selectedView","setTextValue","handleClose","handleTextFilterAdd","trim","DateFilter","setSelectedDate","setDateRange","selectedGroup","g","isDateRange","effectiveDateRange","selectedDateStart","toISOString","Calendar","SelectFilter","selectedOptions","setSelectedOptions","groupName","getFilteredOptions","filterOption","existingFilterIndex","findIndex","updatedFilters","handleOptionToggle","StringListFilter","FilterContext","FilterProvider","searchParams","URL","hasInitialized","setHasInitialized","params","URLSearchParams","toString","filterString","encodeURIComponent","firstValue","set","delete","replaceState","filtersParam","get","parsedFilters","pair","encodedName","valuesString","decodeURIComponent","startsWith","endsWith","arrayContent","encodedValue","matchingOption","shouldBeMultiple","FilterBtn","setSelectedView","ListFilter","selectedGroupType","renderFilterOptions","val","handleSelect","getAvailableFilterGroups","FilterBar","FilterClear","FilterOperator","Heading","level","h1","h2","h3","h4","h5","h6","textVariants","weight","normal","medium","semibold","Text","ResizablePanelGroup","ResizablePrimitive","PanelGroup","ResizablePanel","Panel","ResizableHandle","withHandle","PanelResizeHandle","Minus","Textarea","ConfirmModal","onConfirm","onCancel","cancelButtonRef","TriangleAlert","useToast","ToastContext","PORTAL_ID","tempNode","portalEl","setPortalEl","doc","ownerDocument","appendChild","icons","CircleCheck","CircleX","warning","AlertTriangle","Info","colors","NotificationPanel","data","setShow","timeoutRef","resetTimeout","globalThis","clearTimeout","clearCurrentTimeout","Icon","Transition","appear","as","afterLeave","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","ToastProvider","setData","DeleteModal","idToDelete","setIdToDelete","deleteApi","finally","Divider","Dropdown","trigger","MenuButton","MenuItems","MenuItem","_MenuItem","active","DropdownList","Listbox","ListboxButton","ChevronDown","ListboxOptions","ListboxOption","selected","EmptyCollection","buttonLabel","stroke","vectorEffect","strokeLinecap","strokeLinejoin","Plus","FileUploadInput","onUpload","cursor","files","ar","fileListToArray","DropZone","dropZoneProps","useDropZone","htmlFor","xmlns","dragOverClass","dropEffect","onDrop","__dragOver_cnt__","dataTransfer","promises","traverseFileTree","resolve","isFile","file","defineProperty","isDirectory","dirReader","createReader","readEntries","results","entry","all","filesArrays","flat","webkitGetAsEntry","allFiles","onDragOver","onDragEnter","el","cnt","_onDragEnter","onDragLeave","_onDragLeave","FormItem","direction","Styles","INPUT_UNSTYLED","INPUT","delimiters","setText","splice","onBlur","isEmpty","indexOf","pop","Link","underline","underlineClass","MenuList","MenuListItem","MessageBox","defaultIcon","titleColor","textColor","bgColor","ErrorBox","InfoBox","WarningBox","SuccessBox","DefaultBox","Modal","TransitionChild","unmount","DialogPanel","ModalCloseButton","tabIndex","ModalTitle","showDivider","ModalFooter","ModalBody","numberToString","isNaN","NumberInput","noScroll","noSpinners","onWheel","blur","num","parseFloat","Spinner","Variants","soft","SpinnerVariants","overlayContent","overlayClassName","showCloseButton","triggerClassName","backdropClassName","animationConfig","stiffness","damping","setIsOpen","animationProps","initial","x","animate","exit","y","opacity","scale","getAnimationProps","positionClasses","baseClasses","getPositionClasses","motion","div","transition","RadioOptionAdapter","labelOf","RadioGroup","checkColor","cols","checkIcon","CheckIcon","DefaultCheckIcon","setSelected","selectedId","RadioOption","isHighlighted","setIsHighlighted","isChecked","version","fillRule","SelectBox","clearTitle","ClearIcon","showFilter","setFilter","buttonRef","setButtonWidth","onClear","onFilterChange","onFilterKeyDown","ChevronsUpDownIcon","ListOption","defaultOptionLayout","check","reverse","SelectList","optionLayout","noCheck","optionEquals","useMemo","o1","o2","SelectListOption","SelectStack","Option","SidePanel","panelWidth","backdrop","_panelWidth","setPanelWidth","AnimatePresence","onMouseDown","isDragging","startX","pageX","startWidth","handleMouseMove","deltaX","newWidth","handleMouseUp","CloseButton","action","footer","sizes","Switch","UISwitch","Table","RowSkeleton","columns","_","TBody","rows","TR","useTabs","applyCurrentTab","newTabs","newTab","Tabs","navigate","_tabs","_setTabs","select","TabsBar","actions","TabsPanel","isValidElement","Property","watchers","watcher","watch","w","createCompositeStateProvider","StateClass","Context","consume","_current","withConsumer","useCompositeState","useGetCompositeStateProperty","property","useSetCompositeStateProperty","useWatchCompositeStateProperty","useSlot","slot","useWatchSlot","useDefineSlot","PortalContainerContext","PortalContainerProvider","container","setContainer","getRootNode","ShadowRoot","Document","child","from","HTMLElement","findOrCreatePortalContainer","usePortalContainer","SharedState","addWatcher","useWatchSharedState","useClickOutside","callback","skipFn","useCopyToClipboard","copiedText","setCopiedText","useDarkMode","cb","mediaQuery","_cb","useDebounce","delay","debounceValue","setDebounceValue","handler","startSse","url","onMessage","onCompleted","chunks","sse","EventSource","parse","msg","useEventSource","useFetch","fetcher","opts","deps","setError","fetch","start","onSuccess","onError","end","condition","refetch","useFetchOnce","useFlag","isOn","isOff","on","off","useIntersectionObserver","observer","IntersectionObserver","isEntering","isIntersecting","threshold","unobserve","concat","useIsFirstRendering","isFirstRender","useSafeLayoutEffect","useLayoutEffect","useScrollableSearch","dependencies","pageSize","page","setPage","lastPayload","setLastPayload","payload","setResults","nextPage","setNextPage","isSearching","setIsSearching","requestIdRef","searchMore","currentRequestId","nextPageTrigger","refresh","hasMore","useDefaultScrollableSearch","currentPage","offset","SharedValue","useSharedValue","initialValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertesia-ui-core.js","sources":["esm/core/components/Avatar.js","esm/core/components/libs/utils.js","esm/core/components/Badge.js","esm/core/components/Center.js","esm/core/components/popup/position.js","esm/core/components/popup/utils.js","esm/core/components/popup/PopupController.js","esm/core/components/popup/Popup.js","esm/core/components/ComboBox.js","esm/core/components/shadcn/button.js","esm/core/components/shadcn/theme/ThemeProvider.js","esm/core/components/shadcn/theme/ThemeSwitcher.js","esm/core/components/shadcn/card.js","esm/core/components/libs/visuallyHidden.js","esm/core/components/shadcn/dialog.js","esm/core/components/shadcn/input.js","esm/core/components/shadcn/separator.js","esm/core/components/shadcn/popover.js","esm/core/components/shadcn/command.js","esm/core/components/shadcn/selectBox.js","esm/core/components/shadcn/tabs.js","esm/core/components/shadcn/tooltip.js","esm/core/components/shadcn/label.js","esm/core/components/shadcn/breadcrumb.js","esm/core/components/shadcn/filters/animateChangeInHeight.js","esm/core/components/shadcn/checkbox.js","esm/core/components/shadcn/filters/DynamicLabel.js","esm/core/components/shadcn/filters/comboBox/SelectCombobox.js","esm/core/components/shadcn/filters/filter-styles.js","esm/core/components/shadcn/filters/comboBox/DateCombobox.js","esm/core/components/shadcn/filters/comboBox/TextCombobox.js","esm/core/components/shadcn/filters/comboBox/StringListCombobox.js","esm/core/components/shadcn/filters/filters.js","esm/core/components/shadcn/filters/filter/TextFilter.js","esm/core/components/shadcn/filters/filter/dateFilter.js","esm/core/components/shadcn/filters/filter/SelectFilter.js","esm/core/components/shadcn/filters/filter/StringListFilter.js","esm/core/components/shadcn/filters/filterBar.js","esm/core/components/shadcn/filters/types.js","esm/core/components/shadcn/heading.js","esm/core/components/shadcn/text.js","esm/core/components/shadcn/resizeable.js","esm/core/components/shadcn/textarea.js","esm/core/components/ConfirmModal.js","esm/core/components/toast/ToastContext.js","esm/core/components/Portal.js","esm/core/components/toast/NotificationPanel.js","esm/core/components/toast/ToastProvider.js","esm/core/components/DeleteModal.js","esm/core/components/Divider.js","esm/core/components/Dropdown.js","esm/core/components/DropdownList.js","esm/core/components/EmptyCollection.js","esm/core/components/FileUpload.js","esm/core/components/FormItem.js","esm/core/components/styles.js","esm/core/components/InputList.js","esm/core/components/Link.js","esm/core/components/MenuList.js","esm/core/components/MessageBox.js","esm/core/components/Modal.js","esm/core/components/NumberInput.js","esm/core/components/Spinner.js","esm/core/components/Button.js","esm/core/components/Overlay.js","esm/core/components/RadioGroup.js","esm/core/components/SelectBox.js","esm/core/components/SelectList.js","esm/core/components/SelectStack.js","esm/core/components/SidePanel.js","esm/core/components/Panel.js","esm/core/components/Switch.js","esm/core/components/table/index.js","esm/core/components/tabs/TabsContext.js","esm/core/components/tabs/Tabs.js","esm/core/hooks/CompositeState.js","esm/core/hooks/PortalContainerProvider.js","esm/core/hooks/SharedState.js","esm/core/hooks/useClickOutside.js","esm/core/hooks/useCopyToClipboard.js","esm/core/hooks/useDarkMode.js","esm/core/hooks/useDebounce.js","esm/core/hooks/useEventSource.js","esm/core/hooks/useFetch.js","esm/core/hooks/useFlag.js","esm/core/hooks/useIntersectionObserver.js","esm/core/hooks/useIsFistRendering.js","esm/core/hooks/useSafeLayoutEffect.js","esm/core/hooks/useScrollableSearch.js","esm/core/hooks/useSharedValue.js","esm/core/utils/cn.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nfunction getRealSize(size) {\n switch (size) {\n case 'xs': return 'size-4';\n case 'sm': return 'size-6';\n case 'md': return 'size-8';\n case 'lg': return 'size-10';\n case 'xl': return 'size-12';\n case '2xl': return 'size-14';\n default: throw new Error('Unexpected size: ' + size);\n }\n}\nexport function Avatar({ size, src, name, shape = \"circle\", color = 'bg-gray-500', className }) {\n const rounded = shape === 'circle' ? 'rounded-full' : 'rounded-md';\n const sizeClass = getRealSize(size || 'md');\n if (src) {\n return (_jsx(\"img\", { className: `inline-block ${sizeClass} ${rounded} ${color} ${className}`, src: src, alt: name || src, title: name }));\n }\n if (name) {\n const [first, second] = name.split(' ');\n let text = second ? `${first[0]}${second[0]}` : `${first[0]}${first[1]}`;\n return (_jsx(\"span\", { className: `inline-flex ${sizeClass} items-center justify-center ${rounded} ${color} ${className}`, title: name, children: _jsx(\"span\", { className: `${(size != 'xs') ? 'text-xs' : 'text-[0.6rem]'} font-medium leading-none text-white`, children: text }) }));\n }\n return (_jsx(\"span\", { className: `inline-block ${sizeClass} overflow-hidden ${rounded} ${color}`, children: _jsx(\"svg\", { className: \"h-full w-full text-gray-300\", fill: \"currentColor\", viewBox: \"0 0 24 24\", children: _jsx(\"path\", { d: \"M24 20.993V24H0v-2.996A14.977 14.977 0 0112.004 15c4.904 0 9.26 2.354 11.996 5.993zM16.002 8.999a4 4 0 11-8 0 4 4 0 018 0z\" }) }) }));\n}\nexport function SvgAvatar({ size, shape = \"circle\", color = 'bg-gray-500', className, children }) {\n const rounded = shape === 'circle' ? 'rounded-full' : 'rounded-md';\n const sizeClass = getRealSize(size || 'md');\n return (_jsx(\"span\", { className: `inline-block ${sizeClass} overflow-hidden ${rounded} ${color} ${className}`, children: children }));\n}\n//# sourceMappingURL=Avatar.js.map","import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nexport function cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n//# sourceMappingURL=utils.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"./libs/utils\";\n// Base badge variants\nconst badgeVariants = cva(\"inline-flex items-center rounded-md px-2 py-1 text-xs font-medium\", {\n variants: {\n variant: {\n default: \"text-foreground bg-muted\",\n secondary: \"bg-secondary text-primary\",\n destructive: \"bg-destructive text-destructive\",\n attention: \"bg-attention text-attention\",\n success: \"bg-success text-success\",\n info: \"bg-info text-info\",\n done: \"bg-done text-done\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n// Base Badge component\nexport function Badge({ className, variant, children, onClick, ...props }) {\n return (_jsx(\"span\", { className: cn(badgeVariants({ variant }), className), onClick: onClick, ...props, children: children }));\n}\nconst dotBadgeVariants = cva(\n// Base styles\n\"inline-flex items-center gap-x-1.5 rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ring-border\", {\n variants: {\n variant: {\n default: \"\",\n success: \"\",\n destructive: \"\",\n attention: \"\",\n done: \"\",\n info: \"\",\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n});\n// Separate dot variants to allow className overrides\nconst dotVariants = cva(\"h-1.5 w-1.5\", {\n variants: {\n variant: {\n default: \"fill-foreground\",\n success: \"fill-success\",\n destructive: \"fill-destructive\",\n attention: \"fill-attention\",\n done: \"fill-done\",\n info: \"fill-info\",\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n});\nexport function DotBadge({ variant, className, dotClassName, // New prop for dot-specific classes\nchildren, ...props }) {\n return (_jsxs(\"span\", { className: cn(dotBadgeVariants({ variant }), className), ...props, children: [_jsx(\"div\", { className: \"flex-shrink-0\", children: _jsx(\"svg\", { className: cn(dotVariants({ variant }), dotClassName), viewBox: \"0 0 6 6\", \"aria-hidden\": \"true\", children: _jsx(\"circle\", { cx: 3, cy: 3, r: 3 }) }) }), _jsx(\"span\", { className: \"truncate\", children: children })] }));\n}\n//# sourceMappingURL=Badge.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nexport function Center({ className, children }) {\n return (_jsx(\"div\", { className: clsx('flex items-center justify-center', className), children: children }));\n}\n//# sourceMappingURL=Center.js.map","function flipPos(position) {\n switch (position) {\n case \"top\": return \"bottom\";\n case \"bottom\": return \"top\";\n case \"left\": return \"right\";\n case \"right\": return \"left\";\n case \"ne\": return \"sw\";\n case \"nw\": return \"se\";\n case \"se\": return \"nw\";\n case \"sw\": return \"ne\";\n default: return position;\n }\n}\nfunction flipAlign(align) {\n switch (align) {\n case \"start\": return \"end\";\n case \"end\": return \"start\";\n default: return align;\n }\n}\nclass PositionResolver {\n /**\n * The computed left coordinate (i.e. x)\n */\n left;\n /**\n * The computed top coordinate (i.e. y)\n */\n top;\n /**\n * The computed width constraint. If undefined it means that the width is not constrained.\n */\n width;\n /**\n * The computed height constraint. If undefined it means that the height is not constrained.\n */\n height;\n /**\n * Alignment axis. The axis is computed from the position constraints.\n * If no axis is found - no alignment will be done\n */\n alignAxis;\n /**\n * A gap size between the anchor element and the target element.\n */\n gap;\n constructor(gap = 0) {\n this.gap = gap;\n }\n position(pos, anchorRect, elemRect) {\n switch (pos) {\n case \"top\": {\n this.top = anchorRect.top - elemRect.height - this.gap;\n this.alignAxis = 'x';\n break;\n }\n case \"bottom\": {\n this.top = anchorRect.bottom + this.gap;\n this.alignAxis = 'x';\n break;\n }\n case \"left\": {\n this.left = anchorRect.left - elemRect.width - this.gap;\n this.alignAxis = 'y';\n break;\n }\n case \"right\": {\n this.left = anchorRect.right + this.gap;\n this.alignAxis = 'y';\n break;\n }\n case \"ne\": {\n this.top = anchorRect.top - elemRect.height - this.gap;\n this.left = anchorRect.right + this.gap;\n break;\n }\n case \"nw\": {\n this.top = anchorRect.top - elemRect.height - this.gap;\n this.left = anchorRect.left - elemRect.width - this.gap;\n break;\n }\n case \"se\": {\n this.top = anchorRect.bottom + this.gap;\n this.left = anchorRect.right + this.gap;\n break;\n }\n case \"sw\": {\n this.top = anchorRect.bottom + this.gap;\n this.left = anchorRect.left - elemRect.width - this.gap;\n break;\n }\n }\n }\n align(align, anchorRect, elemRect) {\n if (!this.alignAxis)\n return; // no alignment axis\n switch (align) {\n case 'start': {\n if (this.alignAxis === 'x') {\n this.left = anchorRect.left;\n }\n else {\n this.top = anchorRect.top;\n }\n break;\n }\n case 'end': {\n if (this.alignAxis === 'x') {\n this.left = anchorRect.right - elemRect.width;\n }\n else {\n this.top = anchorRect.bottom - elemRect.height;\n }\n break;\n }\n case 'center': {\n // centering depend on the final value of the width / height\n if (this.alignAxis === 'x') {\n this.left = anchorRect.left + anchorRect.width / 2 - elemRect.width / 2;\n }\n else {\n this.top = anchorRect.top + anchorRect.height / 2 - elemRect.height / 2;\n }\n break;\n }\n case 'fill': {\n if (this.alignAxis === 'x') {\n this.left = anchorRect.left;\n this.width = anchorRect.right - anchorRect.left;\n }\n else {\n this.top = anchorRect.top;\n this.height = anchorRect.bottom - anchorRect.top;\n }\n break;\n }\n }\n }\n computePosition(constraints, elemRect, anchorRect) {\n this.position(constraints.position, anchorRect, elemRect);\n constraints.align && this.align(constraints.align, anchorRect, elemRect);\n if (!this.left && !this.top) {\n throw new Error(\"Invalid position. Cannot compute x,y coordinates\");\n }\n const constrainWidth = this.width != null;\n const constrainHeight = this.height != null;\n const width = constrainWidth ? this.width : elemRect.width;\n const height = constrainHeight ? this.height : elemRect.height;\n return {\n rect: new DOMRect(this.left, this.top, width, height),\n constrainWidth,\n constrainHeight,\n position: constraints.position,\n align: constraints.align\n };\n }\n flipAxis(constraints, axis) {\n if (this.alignAxis === axis) { // flip alignment\n if (constraints.align) {\n const newAlign = flipAlign(constraints.align);\n if (newAlign !== constraints.align) {\n return { ...constraints, align: newAlign };\n }\n }\n }\n else { // flip positioning\n const newPos = flipPos(constraints.position);\n if (newPos !== constraints.position) {\n return { ...constraints, position: newPos };\n }\n }\n return null; // nothing to do\n }\n}\nfunction isElementVisible(elemRect, clientRect) {\n return elemRect.left >= clientRect.left && elemRect.right <= clientRect.right\n &&\n elemRect.top >= clientRect.top && elemRect.bottom <= clientRect.bottom;\n}\nfunction isElementVisibleOnAxis(elemRect, clientRect, axis) {\n if (axis === 'x') {\n return elemRect.left >= clientRect.left && elemRect.right <= clientRect.right;\n }\n else {\n return elemRect.top >= clientRect.top && elemRect.bottom <= clientRect.bottom;\n }\n}\n/**\n * Compute the position by trying to adjust the constraints until the computed position fits into the client area.\n * Returns the best position that fits the constraints.\n * @param constraints\n * @param elemRect\n * @param anchorRect\n * @param clientRect\n * @returns null if the element cannot be positioned otherwise returns a position object\n */\nexport function computePosition(constraints, elemRect, anchorRect, clientRect) {\n const resolver = new PositionResolver(constraints.gap);\n let computedPos = resolver.computePosition(constraints, elemRect, anchorRect);\n const isVisibleOnXAxis = isElementVisibleOnAxis(computedPos.rect, clientRect, 'x');\n const isVisibleOnYAxis = isElementVisibleOnAxis(computedPos.rect, clientRect, 'y');\n if (isVisibleOnXAxis && isVisibleOnYAxis) {\n return computedPos; // the element is visible on both axis\n }\n let newConstraints = null;\n if (!isVisibleOnXAxis) {\n newConstraints = resolver.flipAxis(constraints, 'x');\n }\n if (!isVisibleOnYAxis) {\n newConstraints = resolver.flipAxis(newConstraints || constraints, 'y');\n }\n if (!newConstraints) {\n return null; // cannot find a better position\n }\n computedPos = new PositionResolver(resolver.gap).computePosition(newConstraints, elemRect, anchorRect);\n if (isElementVisible(computedPos.rect, clientRect)) {\n return computedPos;\n }\n return null; // cannot find a better position\n}\n//# sourceMappingURL=position.js.map","/**\n * Compute the intersection of the two given rects.\n * @param rect1\n * @param rect2\n * @returns\n */\nexport function intersectRects(rect1, rect2) {\n const x1 = Math.max(rect1.left, rect2.left);\n const y1 = Math.max(rect1.top, rect2.top);\n const x2 = Math.min(rect1.right, rect2.right);\n const y2 = Math.min(rect1.bottom, rect2.bottom);\n if (x2 <= x1 || y2 <= y1) {\n return null; // No intersection\n }\n return new DOMRect(x1, y1, x2 - x1, y2 - y1);\n}\n/**\n * Compute the visible rectangle of the scrollable parents.\n * @param scrollableParents\n * @returns\n */\nexport function computeVisibleClientRect(scrollableParents) {\n if (scrollableParents.length === 0)\n return null;\n // Initialize the rect as the bounding rect of the first scrollable parent\n let rect = scrollableParents[0].getBoundingClientRect();\n // Iterate over the remaining scrollable parents to compute the intersection\n for (let i = 1, l = scrollableParents.length; i < l; i++) {\n const parentRect = scrollableParents[i].getBoundingClientRect();\n rect = intersectRects(parentRect, rect);\n // If there is no intersection, exit early\n if (!rect) {\n return null;\n }\n }\n return rect;\n}\n/**\n * Tests whether the given element is scrollable in any direction.\n * @param element\n * @returns\n */\nexport function isScrollable(element) {\n const hasScrollY = element.scrollHeight > element.clientHeight;\n const hasScrollX = element.scrollWidth > element.clientWidth;\n if (hasScrollY || hasScrollX) {\n const style = getComputedStyle(element);\n if ((hasScrollY && style.overflowY !== 'visible') || (hasScrollX && style.overflowX !== 'visible')) {\n return true;\n }\n }\n return false;\n}\n/**\n * Get the list of scrollable parents of the given element. The list always include the root parent at the end.\n * The root parent is either the document.documentElement or the given root element.\n * To iterate the list from top to down you need to iterate from the end to the start of the list,\n * since the root parent is always the last element and the nearest scrollable parent is the first element.\n * @param element\n * @param root\n * @returns\n */\nexport function getScrollableParents(element, root = document.documentElement) {\n const parents = [];\n let parent = element.parentElement;\n while (parent && parent !== root) {\n isScrollable(parent) && parents.push(parent);\n parent = parent.parentElement;\n }\n // Always push the root element\n parents.push(root);\n return parents;\n}\n//# sourceMappingURL=utils.js.map","import { computePosition } from \"./position\";\nimport { computeVisibleClientRect, getScrollableParents } from \"./utils\";\nexport class PopupController {\n options;\n root;\n scrollableParents;\n visibleClientRect;\n context;\n constructor(options) {\n this.options = options;\n this.root = options.root || document.documentElement;\n this.scrollableParents = getScrollableParents(this.anchor, this.root);\n this.visibleClientRect = computeVisibleClientRect(this.scrollableParents);\n }\n get anchor() {\n return this.options.anchor;\n }\n registerListeners(element) {\n const parents = this.scrollableParents;\n const updateHandler = () => {\n this.update();\n };\n // add a window resize listener\n window.addEventListener('resize', updateHandler);\n //TODO do we add scroll listeners to the window?\n // add scroll listeners to all scrollable parents\n for (const parent of parents) {\n parent.addEventListener('scroll', updateHandler);\n }\n let closeOnClick;\n if (this.options.closeOnClick) {\n closeOnClick = (ev) => {\n if (!element.contains(ev.target)) {\n this.tryClose();\n }\n };\n // register in the next event loop cycle since the current one\n // is may be triggered by a click event\n window.setTimeout(function () {\n closeOnClick && document.addEventListener('click', closeOnClick);\n }, 0);\n }\n let closeOnEsc;\n if (this.options.closeOnEsc) {\n closeOnEsc = (ev) => {\n if (ev.key === 'Escape') {\n this.tryClose();\n }\n };\n window.setTimeout(function () {\n closeOnEsc && document.addEventListener('keydown', closeOnEsc);\n }, 0);\n }\n const blockPageScroll = this.options.blockPageScroll;\n if (blockPageScroll) {\n document.body.style.overflow = \"hidden\";\n document.body.style.height = \"100%\";\n }\n return () => {\n window.removeEventListener('resize', updateHandler);\n for (const parent of parents) {\n parent.removeEventListener('scroll', updateHandler);\n }\n closeOnClick && document.removeEventListener('click', closeOnClick);\n closeOnEsc && document.removeEventListener('keydown', closeOnEsc);\n if (blockPageScroll) {\n document.body.style.overflow = \"\";\n document.body.style.height = \"\";\n }\n };\n }\n open(element, constraints) {\n if (this.context) {\n throw new Error(\"The popup controller is already bound to an element\");\n }\n this.tryOpen(element, constraints);\n }\n tryOpen(element, constraints) {\n if (this.context) {\n return; // do nothing if the popup is already open\n }\n this.context = {\n element,\n constraints,\n cleanup: this.registerListeners(element)\n };\n element.style.display = \"\";\n element.style.visibility = \"hidden\";\n // update the popup position\n this.update();\n this.options.onOpen && this.options.onOpen(this);\n }\n close() {\n if (!this.context) {\n throw new Error(\"The popup controller is not bound to an element\");\n }\n this.tryClose();\n }\n tryClose() {\n if (!this.context) {\n return; // do nothing if the popup is not open\n }\n this.options.onClose && this.options.onClose(this);\n this.context.cleanup();\n //TODO\n this.context.element.style.display = \"none\";\n this.context = undefined;\n }\n get isOpen() {\n return !!this.context;\n }\n update() {\n if (!this.context)\n return; // do nothing if the popup is not open\n // update the position of the popup\n const element = this.context.element;\n const constraints = this.context.constraints;\n const elemRect = element.getBoundingClientRect();\n const anchorRect = this.anchor.getBoundingClientRect();\n const clientRect = this.visibleClientRect;\n if (!clientRect) {\n // the popup is not visible\n return;\n }\n const position = computePosition(constraints, elemRect, anchorRect, clientRect);\n this.context.position = position || undefined;\n if (position) {\n if (position.constrainHeight) {\n element.style.height = position.rect.height + 'px';\n }\n if (position.constrainWidth) {\n element.style.width = position.rect.width + 'px';\n }\n element.style.left = position.rect.left + 'px';\n element.style.top = position.rect.top + 'px';\n element.style.visibility = \"visible\";\n }\n }\n createPopupElement() {\n const popup = document.createElement('div');\n popup.style.margin = \"0\";\n popup.style.padding = \"0\";\n popup.style.border = \"none\";\n popup.style.background = \"transparent\";\n popup.className = \"composable-Popup\";\n return popup;\n }\n}\n//# sourceMappingURL=PopupController.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { PopupController } from \"./PopupController\";\nconst PopupContext = createContext(undefined);\nexport function usePopupController() {\n const ctrl = useContext(PopupContext);\n if (!ctrl)\n throw new Error(\"usePopupController must be used inside a Popup component\");\n return ctrl;\n}\nexport function DOMPopup({ ctrlRef, id, constraints, isOpen, children, className, onClose, zIndex, position, ...props }) {\n const popupRef = useRef(null);\n const [ctrl, setCtrl] = useState();\n useEffect(() => {\n if (!props.anchor)\n throw new Error(\"Anchor element is required\");\n const _ctrl = new PopupController({\n ...props,\n onClose\n });\n setCtrl(_ctrl);\n return () => {\n _ctrl.tryClose();\n };\n }, []);\n useEffect(() => {\n if (ctrlRef) {\n ctrlRef.current = ctrl;\n }\n }, [ctrl]);\n // effect to open / close the popup\n useEffect(() => {\n if (ctrl && popupRef.current) {\n if (ctrl.isOpen !== isOpen) {\n if (isOpen) {\n ctrl.open(popupRef.current, constraints);\n }\n else {\n ctrl.close();\n }\n }\n }\n else if (ctrl?.isOpen && !isOpen) {\n // close the popup - happens when isOpen becomes false but the ctrl is still open\n // and the popupRef was destroyed by the isOpen && below\n ctrl.close();\n }\n }, [isOpen, ctrl, popupRef.current]);\n return (_jsx(PopupContext.Provider, { value: ctrl, children: isOpen && createPortal(_jsx(\"div\", { id: id, style: {\n //display: isOpen ? 'block' : 'none',\n visibility: 'hidden',\n position: position || 'absolute',\n zIndex: zIndex || 100,\n }, ref: popupRef, className: className, children: children }), document.body) }));\n}\nexport function Popup({ anchor, root, children, ...others }) {\n return anchor.current && (!root || root.current) ? (_jsx(DOMPopup, { anchor: anchor.current, root: root?.current || undefined, ...others, children: children })) : null;\n}\n//# sourceMappingURL=Popup.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport clsx from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Popup } from \"./popup/index\";\nconst INPUT_UNSTYLED = \"block m-0 p-0 border-0 focus:outline-none focus:ring-0 bg-transparent\";\nconst INPUT_NO_PADDING = \"block sm:text-sm sm:leading-6 rounded-md border-0 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 dark:ring-slate-600 dark:text-slate-50 dark:bg-slate-800 placeholder:text-gray-400 dark:placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 dark:focus:ring-indigo-800\";\nconst INPUT = INPUT_NO_PADDING + \" py-1.5\";\nconst COMBOBOX_POPUP = \"combobox-popup\";\nfunction genComboboxPopupId() {\n return `combobox-popup-${Math.floor(Math.random() * 1000000)}`;\n}\nexport class OptionAdapter {\n filter(items, text) {\n const lcText = text.toLowerCase();\n return items.filter((item) => this.valueOf(item).toLowerCase().includes(lcText));\n }\n renderOption(item) {\n return this.valueOf(item);\n }\n findById(items, id) {\n return items.find(item => this.idOf(item) === id);\n }\n // override to support creating new items\n createItem(_value) {\n return null; // default is no new item\n }\n}\nexport class StringOptionAdapter extends OptionAdapter {\n valueOf(item) {\n return String(item);\n }\n idOf(item) {\n return String(item);\n }\n static instance = new StringOptionAdapter();\n}\nexport class StringOptionAdapterWithCreate extends StringOptionAdapter {\n createItem(value) {\n return value;\n }\n static instance = new StringOptionAdapterWithCreate();\n}\nexport function getDefaultComboBoxLayout(fullWidth, unstyledInput) {\n return {\n buttonRight: 4,\n buttonWidth: 24,\n maxMenuHeight: 240,\n menuClass: \"w-72 bg-white mt-1 shadow-md border border-gray-200 overflow-auto p-0 z-10\",\n inputClass: clsx(unstyledInput ? INPUT_UNSTYLED : INPUT, fullWidth ? \"w-full\" : \"!w-auto\"),\n optionClass: \"py-2 px-3 shadow-sm flex flex-col [&.option-selected]:font-semibold [&.option-highlighted]:bg-blue-300\",\n Input: (ComboInput),\n Menu: (ComboMenu),\n Toggle: (ComboToggle),\n };\n}\nexport function ComboBox({ menuAlign = \"fill\", menuGap, focusOnMount, onSelect, value, zIndex, unstyledInput, fullWidth, api, layout: layoutOpts, adapter, items, placeholder }) {\n const [popupId] = useState(genComboboxPopupId());\n const popupCtrl = useRef(undefined);\n const inputRef = useRef(null);\n const layout = layoutOpts ? Object.assign(getDefaultComboBoxLayout(fullWidth, unstyledInput), layoutOpts) : getDefaultComboBoxLayout(fullWidth, unstyledInput);\n const inputBoxRef = React.useRef(null);\n const ctrl = useComboboxCtrl({\n adapter,\n items,\n value,\n popupId\n });\n useEffect(() => {\n if (inputRef.current) {\n focusOnMount && inputRef.current.focus();\n }\n }, [inputRef.current]);\n // the onSelect callback may change so we need to refresh it.\n useEffect(() => {\n ctrl.onSelect = onSelect;\n ctrl.popupCtrl = popupCtrl.current;\n }, [onSelect, popupCtrl.current]);\n useEffect(() => {\n if (api && ctrl && inputRef.current) {\n api.current = {\n open: () => ctrl.openMenu(),\n close: () => ctrl.closeMenu(),\n toggle: () => ctrl.toggleMenu(),\n setInputValue: (value) => ctrl.inputText = value,\n inputValue: ctrl.inputText || '',\n selectedItem: ctrl.selectedItem,\n focus: () => inputRef.current?.focus()\n };\n return () => {\n api.current = null;\n };\n }\n }, [api, ctrl, inputRef.current]);\n const showMenu = ctrl.isMenuOpen && ctrl.filteredItems.length > 0;\n return (_jsxs(_Fragment, { children: [_jsx(layout.Input, { boxRef: inputBoxRef, inputRef: inputRef, ctrl: ctrl, layout: layout, placeholder: placeholder }), _jsx(Popup, { id: popupId, ctrlRef: popupCtrl, className: COMBOBOX_POPUP, closeOnClick: true, closeOnEsc: true, onClose: () => ctrl.closeMenu(), isOpen: showMenu, anchor: inputBoxRef, zIndex: zIndex, constraints: {\n position: \"bottom\",\n align: menuAlign,\n gap: menuGap != null ? menuGap : 4\n }, children: _jsx(layout.Menu, { fillWidth: menuAlign === \"fill\", items: ctrl.filteredItems, ctrl: ctrl, layout: layout, adapter: adapter }) })] }));\n}\nfunction ComboInput({ inputRef, placeholder, boxRef, ctrl, layout }) {\n const buttonWidth = layout.buttonWidth;\n const style = buttonWidth > 0 ? { paddingRight: `${buttonWidth}px` } : undefined;\n const Toggle = layout.Toggle;\n return (_jsxs(\"div\", { className: \"relative\", ref: boxRef, children: [_jsx(\"input\", { ref: inputRef, placeholder: placeholder, ...ctrl.getInputProps(), style: style, className: layout.inputClass }), Toggle &&\n _jsx(\"button\", { style: {\n top: 0, bottom: 0, right: `${layout.buttonRight}px`, width: `${buttonWidth}px`,\n position: \"absolute\",\n border: \"none\",\n padding: 0,\n margin: 0,\n backgroundColor: \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n }, ...ctrl.getToggleButtonProps(), children: _jsx(Toggle, { ctrl: ctrl, layout: layout }) })] }));\n}\nfunction ComboToggle({ ctrl }) {\n return ctrl.isMenuOpen ? _jsx(ChevronUpIcon, { className: \"w-4 h-4\" }) : _jsx(ChevronDownIcon, { className: \"w-4 h-4\" });\n}\nfunction ComboMenu({ fillWidth, items, layout, ctrl, adapter }) {\n const { highlightedIndex, selectedItem } = ctrl;\n return (_jsx(\"ul\", { style: { width: fillWidth ? \"100%\" : undefined, maxHeight: layout.maxMenuHeight ? `${layout.maxMenuHeight}px` : '240px' }, className: layout.menuClass, ...ctrl.getMenuProps(), children: items.map((item, index) => (_jsx(\"li\", { \"data-index\": index, className: clsx(layout.optionClass, highlightedIndex === index && \"option-highlighted\", selectedItem === item && \"option-selected\"), ...ctrl.getItemProps(item, index), children: adapter.renderOption(item) }, adapter.idOf(item)))) }));\n}\nexport function useComboboxCtrl(props) {\n const [ctrl, setCtrl] = useState(new ComboboxController(props));\n useEffect(() => {\n ctrl?.withState(setCtrl);\n }, []);\n return ctrl;\n}\nclass ComboboxController {\n popupId;\n items;\n adapter;\n onSelect;\n setState;\n _selectedItem = null;\n _filteredItems;\n _inputText = \"\";\n _highlightedIndex = null;\n _isMenuOpen = false;\n popupCtrl;\n constructor({ adapter, items, value, popupId }) {\n this.adapter = adapter;\n this.items = items;\n this.popupId = popupId;\n if (typeof value === \"string\") {\n this._inputText = value;\n }\n else if (value) {\n this._selectedItem = adapter.findById(items, adapter.idOf(value)) || null;\n if (this._selectedItem) {\n this._inputText = adapter.valueOf(value);\n }\n }\n if (this._inputText) {\n this._filteredItems = this.adapter.filter(this.items, this._inputText);\n }\n else {\n this._filteredItems = this.items;\n }\n }\n withState(setState) {\n this.setState = setState;\n return this;\n }\n clone() {\n const clone = new ComboboxController({ adapter: this.adapter, items: this.items, popupId: this.popupId });\n clone.setState = this.setState;\n clone.onSelect = this.onSelect;\n clone._inputText = this._inputText;\n clone._highlightedIndex = this._highlightedIndex;\n clone._selectedItem = this._selectedItem;\n clone._isMenuOpen = this._isMenuOpen;\n clone._filteredItems = this._filteredItems;\n clone.popupCtrl = this.popupCtrl;\n return clone;\n }\n updateState() {\n this.setState?.(this.clone());\n }\n get filteredItems() {\n if (this._inputText) {\n return this.adapter.filter(this.items, this._inputText);\n }\n else {\n return this.items;\n }\n }\n get selectedItem() {\n return this._selectedItem;\n }\n set selectedItem(item) {\n this._selectedItem = item;\n this._inputText = item ? this.adapter.valueOf(item) : \"\";\n this._filteredItems = this._inputText ?\n this.adapter.filter(this.items, this._inputText)\n : this.items;\n this.updateState();\n this.onSelect?.(item);\n }\n get isMenuOpen() {\n return this._isMenuOpen;\n }\n set inputText(inputText) {\n this._inputText = inputText;\n if (inputText) {\n this._filteredItems = this.adapter.filter(this.items, inputText);\n }\n else {\n this._filteredItems = this.items;\n }\n this._highlightedIndex = null;\n this._selectedItem = null;\n this.updateState();\n // TODO -- experimental - it works but it's not perfect\n // we need to update if the popup is on top and the filtered items changed\n if (this.isMenuOpen && this.popupCtrl) {\n const popupCtrl = this.popupCtrl;\n const popupPosition = popupCtrl.context?.position?.position;\n if (popupPosition && popupPosition === \"top\") {\n window.setTimeout(() => {\n popupCtrl.update();\n }, 100);\n }\n }\n }\n get inputText() {\n return this._inputText;\n }\n set highlightedIndex(index) {\n this._highlightedIndex = index;\n this.updateState();\n }\n get highlightedIndex() {\n return this._highlightedIndex;\n }\n openMenu() {\n if (this._filteredItems.length > 0) {\n this._isMenuOpen = true;\n //this._highlightedIndex = 0;\n this.updateState();\n }\n else {\n // TODO nothing to show.\n // display a create value option?\n }\n }\n closeMenu(_item) {\n if (this._isMenuOpen) {\n this._highlightedIndex = null;\n this._isMenuOpen = false;\n this.updateState();\n }\n }\n toggleMenu() {\n if (this._isMenuOpen) {\n this.closeMenu();\n }\n else {\n this.openMenu();\n }\n }\n highlightIndex(index, navigateToTop = false) {\n this.highlightedIndex = index;\n const popup = document.getElementById(this.popupId);\n if (popup) {\n popup.querySelector(`li[data-index=\"${index}\"]`)?.scrollIntoView(navigateToTop);\n }\n }\n getMenuProps() {\n return {};\n }\n getToggleButtonProps() {\n return {\n onClick: () => {\n this._isMenuOpen = !this._isMenuOpen;\n this.updateState();\n }\n };\n }\n getItemProps(item, index) {\n return {\n \"aria-selected\": this._highlightedIndex === index,\n onClick: () => {\n this.selectedItem = item;\n this.closeMenu();\n },\n onMouseEnter: () => {\n if (this.highlightedIndex !== index) {\n this.highlightedIndex = index;\n }\n },\n onMouseLeave: () => {\n if (this.highlightedIndex === index) {\n this.highlightedIndex = null;\n }\n }\n };\n }\n getInputProps() {\n const items = this._filteredItems;\n return {\n onClick: () => {\n this.openMenu();\n },\n onChange: (ev) => {\n const value = ev.target.value;\n this.inputText = value;\n this.openMenu();\n },\n value: this.inputText,\n onKeyDown: (ev) => {\n const key = ev.key;\n if (key === \"Enter\") {\n if (this.highlightedIndex != null) {\n this.selectedItem = items[this.highlightedIndex || 0];\n }\n else {\n // create new value?\n if (this.inputText) {\n const item = this.adapter.createItem(this.inputText);\n if (item) {\n this.items.push(item);\n this.selectedItem = item;\n }\n }\n }\n this.closeMenu();\n }\n else if (key === \"ArrowDown\") {\n if (this.isMenuOpen) {\n this.highlightIndex(this.highlightedIndex === null ? 0 : incrModulo(this.highlightedIndex, items.length), false);\n }\n else {\n this.openMenu();\n }\n }\n else if (key === \"ArrowUp\") {\n if (this.isMenuOpen) {\n this.highlightIndex(this.highlightedIndex === null ? 0 : decrModulo(this.highlightedIndex, items.length), true);\n }\n }\n }\n };\n }\n}\nfunction incrModulo(value, max) {\n return (value + 1) % max;\n}\nfunction decrModulo(value, max) {\n return (value - 1 + max) % max;\n}\n//# sourceMappingURL=ComboBox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport { VTooltip } from \"@vertesia/ui/core\";\nimport { cn } from \"../libs/utils\";\nimport { Check, CopyIcon, Loader2 } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nconst buttonVariants = cva(\"hover:cursor-pointer inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", {\n variants: {\n variant: {\n destructive: \"bg-destructive dark:bg-destructive/10 text-destructive ring-1 ring-inset ring-destructive-muted/50 dark:ring-destructive-muted/50 shadow-xs hover:bg-destructive/50\",\n outline: \"border border-input bg-background shadow-xs hover:bg-muted ring-inset\",\n secondary: \"bg-primary/5 dark:bg-primary/10 text-primary shadow-xs hover:bg-primary/10 dark:hover:bg-primary/20 ring-inset\",\n ghost: \"hover:bg-muted/50 dark:hover:bg-muted/20 ring-inset\",\n link: \"text-foreground underline-offset-4 hover:underline ring-inset\",\n primary: \"bg-primary text-white shadow-xs hover:bg-primary/90 ring-inset\",\n unstyled: \"\"\n },\n size: {\n xs: 'h-7 rounded px-2 py-1 text-xs gap-x-1',\n sm: \"h-8 rounded px-3 text-xs\",\n md: \"h-9 rounded-md px-4 py-2\",\n lg: \"h-10 rounded-md px-3\",\n xl: 'rounded-md px-3.5 py-2.5 text-sm gap-x-2',\n icon: \"p-0 m-0 rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n});\nconst Button = React.forwardRef(({ className, variant, size, asChild = false, alt, isDisabled, isLoading, title, onClick, type, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n const buttonElement = (_jsxs(Comp, { className: clsx(cn(buttonVariants({ variant, size })), className), disabled: isDisabled || isLoading || props.disabled, ref: ref, onClick: onClick, type: type, autoFocus: false, ...props, children: [isLoading && _jsx(Loader2, { className: \"animate-spin\" }), props.children] }));\n if (alt || title) {\n return (_jsx(VTooltip, { description: alt || title, asChild: true, className: \"cursor-pointer\", size: \"xs\", placement: \"top\", children: buttonElement }));\n }\n return buttonElement;\n});\nButton.displayName = \"Button\";\nconst CopyButton = React.forwardRef(({ size, content, toast, className, alt, ...props }, ref) => {\n const [isCopied, setIsCopied] = useState(false);\n const handleCopy = (e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(content).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n if (!toast || !toast.toast) {\n return;\n }\n toast.toast({\n status: \"success\",\n title: toast.message || \"Copied to clipboard\",\n duration: 2000,\n });\n }).catch((err) => {\n console.error(\"Failed to copy text: \", err);\n if (toast && toast.toast)\n toast.toast({\n status: \"error\",\n title: \"Failed to copy\",\n duration: 2000,\n });\n });\n };\n return (_jsx(Button, { ref: ref, className: cn(className), variant: \"unstyled\", size: size || \"sm\", onClick: handleCopy, ...props, alt: alt ?? \"Copy\", children: isCopied ?\n _jsx(Check, { className: \"text-success\" })\n :\n _jsx(CopyIcon, { className: \"size-4\" }) }));\n});\nCopyButton.displayName = \"CopyButton\";\nexport { Button, CopyButton, buttonVariants };\n//# sourceMappingURL=button.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext, useEffect, useState } from \"react\";\nconst initialState = {\n theme: \"system\",\n setTheme: () => null,\n};\nconst ThemeProviderContext = createContext(initialState);\nexport { ThemeProviderContext };\nexport function ThemeProvider({ children, defaultTheme = \"system\", storageKey = \"vite-ui-theme\", ...props }) {\n const [theme, setTheme] = useState(() => localStorage.getItem(storageKey) || defaultTheme);\n useEffect(() => {\n const root = window.document.documentElement;\n root.classList.remove(\"light\", \"dark\");\n if (theme === \"system\") {\n const systemTheme = window.matchMedia(\"(prefers-color-scheme: dark)\")\n .matches\n ? \"dark\"\n : \"light\";\n root.classList.add(systemTheme);\n return;\n }\n root.classList.add(theme);\n }, [theme]);\n const value = {\n theme,\n setTheme: (theme) => {\n localStorage.setItem(storageKey, theme);\n setTheme(theme);\n },\n };\n return (_jsx(ThemeProviderContext.Provider, { ...props, value: value, children: children }));\n}\nexport const useTheme = () => {\n const context = useContext(ThemeProviderContext);\n if (context === undefined)\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n return context;\n};\n//# sourceMappingURL=ThemeProvider.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Computer, Moon, Sun } from \"lucide-react\";\nimport { Button } from \"../button\";\nimport { useTheme } from \"./ThemeProvider\";\nexport function ModeOption({ option, current, setTheme, icon }) {\n return (_jsx(Button, { variant: current === option ? \"secondary\" : \"outline\", size: \"sm\", onClick: () => setTheme(option), alt: option, children: icon }));\n}\nexport default function ModeToggle() {\n const { setTheme } = useTheme();\n const theme = useTheme().theme;\n return (_jsxs(\"div\", { className: \"flex justify-between px-2 items-center\", children: [_jsx(\"p\", { className: \"text-sm font-semibold\", children: \"Theme\" }), _jsxs(\"div\", { className: \"flex gap-2\", children: [_jsx(ModeOption, { current: theme, option: \"system\", setTheme: setTheme, icon: _jsx(Computer, { className: \"text-muted\" }) }), _jsx(ModeOption, { current: theme, option: \"light\", setTheme: setTheme, icon: _jsx(Sun, { className: \"text-muted\" }) }), _jsx(ModeOption, { current: theme, option: \"dark\", setTheme: setTheme, icon: _jsx(Moon, { className: \"text-muted\" }) })] })] }));\n}\n//# sourceMappingURL=ThemeSwitcher.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { cn } from \"../libs/utils\";\nconst Card = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"rounded-xl border bg-card text-card-foreground shadow\", className), ...props })));\nCard.displayName = \"Card\";\nconst CardHeader = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"flex flex-col p-6\", className), ...props })));\nCardHeader.displayName = \"CardHeader\";\nconst CardTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"font-semibold leading-none tracking-tight\", className), ...props })));\nCardTitle.displayName = \"CardTitle\";\nconst CardDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"text-sm text-muted-foreground\", className), ...props })));\nCardDescription.displayName = \"CardDescription\";\nconst CardContent = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"p-6 pt-0\", className), ...props })));\nCardContent.displayName = \"CardContent\";\nconst CardFooter = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"div\", { ref: ref, className: cn(\"flex items-center p-6 pt-0\", className), ...props })));\nCardFooter.displayName = \"CardFooter\";\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n//# sourceMappingURL=card.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function VisuallyHidden({ children }) {\n return (_jsx(\"span\", { style: {\n border: 0,\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n }, children: children }));\n}\n//# sourceMappingURL=visuallyHidden.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cn } from \"../libs/utils\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { VisuallyHidden } from \"../libs/visuallyHidden\";\nimport { createContext, useContext } from \"react\";\nconst ModalContext = createContext(false);\nexport function useIsInModal() {\n return !!useContext(ModalContext);\n}\nexport function ModalContextProvider({ children }) {\n return _jsx(ModalContext.Provider, { value: true, children: children });\n}\nexport function VModal({ className, children, isOpen, onClose, description = \"Modal Description\", noCloseButton = false, allowOverflow = false, disableCloseOnClickOutside = false, size = \"md\", }) {\n const handleOpenChange = (open) => {\n if (!open) {\n onClose();\n }\n };\n function getSizeClasses() {\n switch (size) {\n case \"sm\":\n return \"max-w-[20vw]\";\n case \"md\":\n return \"max-w-[40vw]\";\n case \"lg\":\n return \"max-w-[60vw]\";\n case \"xl\":\n return \"max-w-[80vw]\";\n default:\n return \"max-w-[40vw]\";\n }\n }\n return (_jsxs(Dialog, { open: isOpen, onOpenChange: (open) => {\n if (!disableCloseOnClickOutside || open) {\n handleOpenChange(open);\n }\n }, children: [allowOverflow && _jsx(DialogOverlay, { className: \"z-50 fixed inset-0 bg-black/80\" }), _jsx(VisuallyHidden, { children: _jsx(DialogDescription, { children: description }) }), _jsxs(DialogContent, { className: cn(\"min-h-20 p-4\", \"fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] border bg-background shadow-lg duration-200 sm:rounded-lg\", getSizeClasses(), className), children: [!noCloseButton && (_jsx(DialogClose, { onClick: () => handleOpenChange(false), asChild: true, autoFocus: false, children: _jsx(Button, { variant: \"outline\", alt: \"Close\", className: \"top-4 right-4 absolute data-[state=open]:bg-accent opacity-70 hover:opacity-100 rounded-sm focus:outline-none focus:ring-2 focus:ring-ring ring-offset-background focus:ring-offset-2 data-[state=open]:text-muted-foreground transition-opacity disabled:pointer-events-none\", children: _jsx(X, { className: \"w-4 h-4\" }) }) })), _jsx(ModalContextProvider, { children: children })] })] }));\n}\nexport const VModalTitle = ({ children, show = true, className, description, ...props }) => {\n if (!show) {\n return (_jsxs(VisuallyHidden, { children: [_jsx(DialogTitle, { children: children }), description && _jsx(DialogDescription, { children: description })] }));\n }\n return (_jsx(_Fragment, { children: _jsxs(DialogTitle, { className: cn(\"text-lg font-semibold leading-6 tracking-tight\", { 'py-2': !description }, className), ...props, children: [children, description && (_jsx(DialogDescription, { className: \"text-sm !font-normal text-muted-foreground pb-2\", children: description }))] }) }));\n};\nexport const VModalBody = ({ children, className, ...props }) => {\n return (_jsx(\"div\", { className: cn(\"text-sm max-h-[80vh] overflow-y-auto\", className), ...props, children: children }));\n};\nexport const VModalFooter = ({ align = \"right\", children, className, ...props }) => {\n const alignClass = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n };\n return (_jsx(\"div\", { className: cn(\"w-full flex py-3 sm:py-2 sm:flex sm:flex-row-reverse sm:flex-row sm:justify-end sm:space-x-2\", alignClass[align], className), ...props, children: children }));\n};\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\nconst DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: cn(\"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className), ...props })));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\nconst DialogContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(DialogPortal, { children: [_jsx(DialogOverlay, {}), _jsx(DialogPrimitive.Content, { ref: ref, autoFocus: false, onOpenAutoFocus: (event) => {\n event.preventDefault();\n }, className: cn(\"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\", className), ...props, children: children })] })));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\nconst DialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, className: cn(\"text-sm text-muted\", className), ...props })));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\nconst DialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, className: cn(\"text-lg font-semibold leading-none tracking-tight\", className), ...props })));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\nexport { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogTitle, DialogDescription, };\n//# sourceMappingURL=dialog.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../libs/utils\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"@vertesia/ui/core\";\nconst variants = cva(\"\", {\n variants: {\n size: {\n xs: \"rounded py-1 text-xs rounded-xs\",\n sm: \"rounded text-xs rounded-sm\",\n md: \"rounded-md py-2 text-sm\",\n lg: \"rounded-md text-base\",\n xl: \"rounded-md py-2.5 text-lg\",\n },\n variant: {\n default: \"flex w-full rounded-md border border-input bg-background ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n unstyled: \"block m-0 p-0 w-full border-0 focus:outline-hidden focus:ring-0 bg-transparent\",\n noPadding: \"block rounded-md border-0 bg-background shadow-2xs ring-1 ring-inset ring-ring placeholder:text-muted-foreground focus:ring-2 focus:ring-inset focus:ring-ring ring-offset-background\",\n legacy: \"py-1.5 block rounded-md border-0 bg-background shadow-2xs ring-1 ring-inset ring-ring placeholder:text-muted-foreground focus:ring-2 focus:ring-inset focus:ring-ring ring-offset-background\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n});\nconst Input = React.forwardRef(({ className, type, size = \"md\", variant = \"default\", clearable = true, onChange, value, ...props }, ref) => {\n const _onClear = () => {\n onChange && onChange('');\n };\n const _onChange = (ev) => {\n onChange && onChange(ev.target.value);\n };\n return (_jsxs(\"div\", { className: \"w-full relative inline-block [&:hover_.clear-button]:opacity-100\", children: [_jsx(\"input\", { type: type, className: cn(variants({ size, variant }), className, clearable && value ? \"pr-8\" : \"\"), ref: ref, value: value == null ? '' : value, onChange: _onChange, ...props }), clearable && value && !props.readOnly && !props.disabled && (_jsx(Button, { variant: \"link\", size: \"icon\", type: \"button\", onClick: _onClear, className: `clear-button opacity-0 transition-opacity duration-200\n absolute top-1/2 -translate-y-1/2 text-muted !hover:text-destructive cursor-pointer\n flex items-center justify-center size-6 rounded right-2`, alt: \"Clear input\", children: _jsx(X, { size: 16 }) }))] }));\n});\nInput.displayName = \"Input\";\nexport { Input, };\n//# sourceMappingURL=input.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../libs/utils\";\nconst Separator = React.forwardRef(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (_jsx(SeparatorPrimitive.Root, { ref: ref, decorative: decorative, orientation: orientation, className: cn(\"shrink-0 bg-border\", orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\", className), ...props })));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\nexport { Separator };\n//# sourceMappingURL=separator.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../libs/utils\";\nimport { useIsInModal } from \"./dialog\";\nconst PopoverContext = React.createContext(null);\nconst Popover = ({ hover = false, click = false, children, _open, onOpenChange }) => {\n const [open, setOpen] = React.useState(_open || false);\n const insideModal = useIsInModal();\n const handleOpenChange = (open) => {\n setOpen(open);\n if (onOpenChange) {\n onOpenChange(open);\n }\n };\n return (_jsx(PopoverContext.Provider, { value: { open, setOpen, hover, click }, children: _jsx(PopoverPrimitive.Root, { open: open, onOpenChange: handleOpenChange, modal: insideModal, children: children }) }));\n};\nfunction handleHover(hover = false, setOpen = () => { }, type) {\n if (hover) {\n setOpen(type === \"enter\");\n }\n}\nconst PopoverTrigger = React.forwardRef(({ children, ...props }, ref) => {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"PopoverTrigger must be used within a Popover\");\n }\n const { setOpen, hover, click } = context;\n return (_jsx(PopoverPrimitive.Trigger, { ref: ref, asChild: true, onMouseEnter: () => handleHover(hover, setOpen, \"enter\"), onMouseLeave: () => handleHover(hover, setOpen, \"leave\"), onClick: () => {\n if (click)\n setOpen((prev) => !prev);\n }, ...props, children: children }));\n});\nPopoverTrigger.displayName = PopoverPrimitive.Trigger.displayName;\nconst PopoverAnchor = PopoverPrimitive.Anchor;\nconst PopoverContent = React.forwardRef(({ className, align = \"center\", side = \"bottom\", ...props }, ref) => {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"PopoverContent must be used within a Popover\");\n }\n const { setOpen, hover } = context;\n return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, side: side, onMouseEnter: () => handleHover(hover, setOpen, \"enter\"), onMouseLeave: () => handleHover(hover, setOpen, \"leave\"), \n // onClick={() => {setOpen(false)}}\n className: cn(\"z-50 w-72 rounded-md border-popover bg-popover text-popover-foreground ring-1 ring-gray-200 dark:ring-slate-700 shadow-md focus:outline-none animate-in\", \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className), ...props }) }));\n});\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\nconst PopoverClose = PopoverPrimitive.Close;\nPopoverClose.displayName = PopoverPrimitive.Close.displayName;\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose };\n//# sourceMappingURL=popover.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\nimport { cn } from \"../libs/utils\";\nimport { Dialog, DialogContent } from \"./dialog\";\nconst Command = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive, { ref: ref, className: cn(\"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\", className), ...props })));\nCommand.displayName = CommandPrimitive.displayName;\nconst CommandDialog = ({ children, ...props }) => {\n return (_jsx(Dialog, { ...props, children: _jsx(DialogContent, { className: \"shadow-lg p-0 overflow-hidden\", children: _jsx(Command, { className: \"[&_[cmdk-group]]:px-2 [&_[cmdk-item]]:px-2 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]_svg]:w-5 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\", children: children }) }) }));\n};\nconst CommandInput = React.forwardRef(({ className, ...props }, ref) => (_jsxs(\"div\", { className: \"flex items-center px-3 border-b\", \"cmdk-input-wrapper\": \"\", children: [_jsx(Search, { className: \"opacity-50 size-4 shrink-0\" }), _jsx(CommandPrimitive.Input, { ref: ref, className: cn(\"focus:ring-0\", \"border-0 flex h-8 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\", className), ...props })] })));\nCommandInput.displayName = CommandPrimitive.Input.displayName;\nconst CommandList = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.List, { ref: ref, className: cn(\"overflow-y-auto overflow-x-hidden\", className), ...props })));\nCommandList.displayName = CommandPrimitive.List.displayName;\nconst CommandEmpty = React.forwardRef((props, ref) => (_jsx(CommandPrimitive.Empty, { ref: ref, className: \"py-2 text-sm text-center\", ...props })));\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\nconst CommandGroup = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.Group, { ref: ref, className: cn(\"overflow-y-auto overflow-x-hidden p-1 text-foreground\", \"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\", className), ...props })));\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\nconst CommandSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.Separator, { ref: ref, className: cn(\"-mx-1 h-px bg-border\", className), ...props })));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\nconst CommandItem = React.forwardRef(({ className, ...props }, ref) => (_jsx(CommandPrimitive.Item, { ref: ref, className: cn(\"hover:bg-muted cursor-pointer relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", className), ...props })));\nCommandItem.displayName = CommandPrimitive.Item.displayName;\nconst CommandShortcut = ({ className, ...props }) => {\n return (_jsx(\"span\", { className: cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className), ...props }));\n};\nCommandShortcut.displayName = \"CommandShortcut\";\nexport { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };\n//# sourceMappingURL=command.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { isEqual } from 'lodash-es';\nimport { Check, ChevronsUpDown, SearchIcon, SquarePlus, X } from 'lucide-react';\nimport { useState, useEffect, useRef } from 'react';\nimport { Popover, PopoverContent, PopoverTrigger, PopoverClose } from './popover';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from './command';\nimport { Input } from './input';\nimport { Button } from '@vertesia/ui/core';\nexport function VSelectBox({ options, optionLabel, value, onChange, addNew, addNewLabel, disabled, filterBy, label, placeholder, className, popupClass, isClearable, border = true, multiple = false, by, inline = false }) {\n const triggerRef = useRef(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n const [filterValue, setFilterValue] = useState('');\n useEffect(() => {\n const element = triggerRef.current;\n if (!element) {\n return;\n }\n const updateWidth = () => {\n const contentWidth = element.getBoundingClientRect().width;\n setWidth(contentWidth);\n };\n const resizeObserver = new ResizeObserver(() => {\n updateWidth();\n });\n updateWidth();\n resizeObserver.observe(element);\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n const handleTriggerClick = (e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n setOpen(!open);\n };\n const _onClick = (opt) => {\n if (multiple) {\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = isOptionSelected(opt, currentValues);\n if (isSelected) {\n // Remove from selection\n const newValues = currentValues.filter(v => !isOptionsEqual(v, opt));\n onChange(newValues);\n }\n else {\n // Add to selection\n onChange([...currentValues, opt]);\n }\n // Don't close the popover in multiple mode\n }\n else {\n setOpen(false);\n onChange(opt);\n }\n };\n // Helper function to check if an option is selected\n const isOptionSelected = (option, selectedValues) => {\n if (!selectedValues || selectedValues.length === 0)\n return false;\n return selectedValues.some(v => isOptionsEqual(v, option));\n };\n // Helper function to compare options for equality\n const isOptionsEqual = (a, b) => {\n // Handle null/undefined values\n if (a == null || b == null) {\n return a === b;\n }\n if (typeof by === 'string') {\n return a[by] === b[by];\n }\n else if (typeof by === 'function') {\n return by(a, b);\n }\n else {\n return isEqual(a, b);\n }\n };\n let filteredOptions = options || [];\n function getFilterByFn(filterBy) {\n if (!filterBy) {\n return (o) => String(o).toLowerCase();\n }\n else if (typeof filterBy === 'string') {\n return (o) => String(o[filterBy]).toLowerCase();\n }\n else {\n return filterBy;\n }\n }\n const filterLc = filterValue.toLowerCase();\n const filterFn = getFilterByFn(filterBy);\n filteredOptions = filteredOptions.filter(o => filterFn(o).includes(filterLc));\n const renderSingleValue = () => {\n if (!value || (Array.isArray(value) && value.length === 0)) {\n return _jsx(\"span\", { className: \"text-muted\", children: placeholder });\n }\n const singleValue = Array.isArray(value) ? value[0] : value;\n return optionLabel ? optionLabel(singleValue) : singleValue;\n };\n const renderMultipleValue = () => {\n const arrayValue = Array.isArray(value) ? value : (value ? [value] : []);\n if (arrayValue.length === 0) {\n return _jsx(\"span\", { className: \"text-muted\", children: placeholder });\n }\n if (arrayValue.length === 1) {\n return optionLabel ? optionLabel(arrayValue[0]) : arrayValue[0];\n }\n return (_jsxs(\"div\", { className: \"flex flex-wrap gap-1\", children: [arrayValue.slice(0, 1).map((item, index) => (_jsx(\"span\", { className: \"inline-flex items-center gap-1 px-2 py-1 text-xs bg-muted rounded\", children: optionLabel ? optionLabel(item) : item }, index))), arrayValue.length > 1 && (_jsxs(\"span\", { className: \"inline-flex items-center px-2 py-1 text-xs bg-muted rounded\", children: [\"+\", arrayValue.length - 1, \" more\"] }))] }));\n };\n // Render the options list content\n const renderOptionsContent = () => (_jsxs(_Fragment, { children: [filterBy && (_jsxs(\"div\", { className: 'flex justify-start items-center mb-1', children: [_jsx(\"div\", { className: 'mx-2', children: _jsx(SearchIcon, { className: \"size-4\" }) }), _jsx(Input, { variant: 'unstyled', value: filterValue, onChange: setFilterValue, className: \"w-full p-1 rounded-md\", placeholder: \"Search...\" })] })), _jsx(Command, { className: \"overflow-hidden\", children: _jsxs(CommandList, { className: inline ? \"max-h-full overflow-y-auto\" : \"max-h-[200px] overflow-y-auto\", children: [_jsx(CommandEmpty, { children: \"No result found.\" }), _jsx(CommandGroup, { className: \"overflow-visible\", children: filteredOptions?.map((opt, index) => {\n const isSelected = multiple\n ? isOptionSelected(opt, Array.isArray(value) ? value : [])\n : value != null ? isOptionsEqual(value, opt) : false;\n return (_jsx(CommandItem, { onSelect: () => _onClick(opt), className: \"w-full\", children: multiple || inline ? (_jsxs(\"div\", { className: 'w-full flex justify-between items-center cursor-pointer', children: [_jsx(\"div\", { className: 'w-full truncate text-left', children: optionLabel ? optionLabel(opt) : opt }), isSelected && _jsx(Check, { className: \"size-4\" })] })) : (_jsxs(PopoverClose, { className: 'w-full flex justify-between items-center', children: [_jsx(\"div\", { className: 'w-full truncate text-left', children: optionLabel ? optionLabel(opt) : opt }), isSelected && _jsx(Check, { className: \"size-4\" })] })) }, index));\n }) })] }) }), addNew && (_jsx(\"div\", { className: 'p-1', children: _jsxs(\"a\", { onClick: addNew, className: clsx('gap-x-2 px-2 py-1.5 truncate group flex rounded-md items-center text-sm cursor-pointer hover:bg-accent'), children: [_jsx(SquarePlus, { size: 16, strokeWidth: 1.25, absoluteStrokeWidth: true }), addNewLabel] }) }))] }));\n if (inline) {\n return (_jsx(\"div\", { className: clsx(className, border && 'border border-border rounded-md', \"bg-popover p-1\", popupClass), children: renderOptionsContent() }));\n }\n return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(\"div\", { ref: triggerRef, onClick: handleTriggerClick, className: clsx(className, border && 'border border-border', 'flex flex-row gap-2 items-center justify-between p-2 rounded-md group relative [&:hover_.clear-button]:opacity-100', !disabled ? \"cursor-pointer hover:bg-muted\" : \"cursor-not-allowed text-muted\"), children: [_jsxs(\"div\", { className: clsx(\"flex flex-col w-full rounded-md text-sm items-center justify-center truncate\", !disabled && \"\", isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && \"pr-6\"), children: [label && _jsx(\"div\", { className: 'w-full text-left text-xs font-semibold', children: label }), _jsx(\"div\", { className: clsx('w-full text-left', !disabled && ''), children: multiple ? renderMultipleValue() : renderSingleValue() })] }), _jsxs(\"div\", { className: \"flex items-center gap-1 group\", children: [isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && (_jsx(Button, { variant: \"link\", size: \"icon\", disabled: disabled, alt: \"Clear selection\", onClick: (e) => {\n e.stopPropagation();\n if (multiple) {\n onChange([]);\n }\n else {\n onChange(undefined);\n }\n }, className: \"cursor-pointer hover:bg-muted/20 clear-button opacity-0 transition-opacity duration-200 rounded p-1\", children: _jsx(X, { className: \"size-4\" }) })), !disabled && (_jsx(ChevronsUpDown, { className: \"size-4 opacity-50\" }))] })] }) }), _jsx(PopoverContent, { style: { width: `${width}px`, zIndex: 1000000 }, className: clsx(\"min-w-[8rem] w-64 bg-popover p-1 border shadow\", \"divide-y divide-border\", popupClass), children: renderOptionsContent() })] }));\n}\n//# sourceMappingURL=selectBox.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../libs/utils\";\nimport { VSelectBox } from \"./selectBox\";\nconst TabsContext = React.createContext({\n size: undefined,\n tabs: undefined,\n current: undefined,\n setTab: undefined,\n responsive: false,\n variant: \"tabs\",\n updateHash: true\n});\nconst VTabs = ({ tabs, defaultValue, current, className, fullWidth, children, onTabChange, responsive = false, variant = \"tabs\", updateHash = true }) => {\n // Initialize value\n const [value, setValue] = React.useState(() => {\n // First check if current is provided\n const currentValue = typeof current === 'function' ? current() : current;\n if (currentValue) {\n return currentValue;\n }\n // Then check hash\n const hash = window.location.hash;\n const currentTab = hash ? hash.substring(1) : undefined;\n // Check if the tab from hash exists in tabs\n if (currentTab && tabs.some(tab => tab.name === currentTab)) {\n return currentTab;\n }\n // Fall back to default or first tab\n return defaultValue || tabs[0]?.name;\n });\n // Update when current prop changes (but don't create a loop)\n React.useEffect(() => {\n const currentValue = typeof current === 'function' ? current() : current;\n if (currentValue && currentValue !== value) {\n setValue(currentValue);\n }\n }, [current]);\n // Listen to hash changes only when there's no current prop being controlled externally\n React.useEffect(() => {\n if (current)\n return; // Skip hash handling if controlled by parent\n const handleHashChange = () => {\n const hash = window.location.hash;\n const currentTab = hash ? hash.substring(1) : undefined;\n // Only update if the tab exists in tabs\n if (currentTab && tabs.some(tab => tab.name === currentTab)) {\n setValue(currentTab);\n }\n else if (!hash && defaultValue) {\n // If no hash, fall back to default\n setValue(defaultValue);\n }\n };\n // Check initial hash\n handleHashChange();\n window.addEventListener('hashchange', handleHashChange);\n return () => window.removeEventListener('hashchange', handleHashChange);\n }, [current, tabs, defaultValue]);\n const handleValueChange = (newValue) => {\n setValue(newValue);\n // Update the URL hash when tab changes (only if updateHash is true and not controlled by parent)\n if (updateHash && !current) {\n // Preserve existing history state when changing hash\n const currentState = window.history.state;\n const newUrl = window.location.pathname + window.location.search + '#' + newValue;\n window.history.pushState(currentState, '', newUrl);\n }\n if (onTabChange) {\n onTabChange(newValue);\n }\n };\n const setTab = React.useCallback((tabName) => {\n handleValueChange(tabName);\n }, [handleValueChange]);\n return (_jsx(TabsContext.Provider, { value: { tabs, size: fullWidth ? tabs.length : 0, current: value, setTab, responsive: responsive, variant, updateHash }, children: _jsx(TabsPrimitive.Root, { defaultValue: value || tabs[0]?.name, value: value, onValueChange: handleValueChange, className: className, children: children }) }));\n};\nconst VTabsBar = ({ className }) => {\n const { tabs, size, current, setTab, responsive, variant, updateHash } = React.useContext(TabsContext);\n const fullWidth = size !== 0;\n const handleTabChange = React.useCallback((tabName) => {\n if (!tabs || !setTab)\n return;\n const tab = tabs.find(t => t.name === tabName);\n if (tab?.href && updateHash) {\n // Preserve existing history state when changing tabs\n const currentState = window.history.state;\n window.history.pushState(currentState, '', tab.href);\n }\n setTab(tabName);\n }, [tabs, setTab, updateHash]);\n if (!tabs || !setTab) {\n console.warn(\"TabsBar: No tabs provided or setTab not available\");\n return null;\n }\n return (_jsxs(_Fragment, { children: [responsive && (_jsx(\"div\", { className: \"px-2 block lg:hidden\", children: _jsx(VSelectBox, { label: \"Tab\", className: (className), options: tabs, optionLabel: (tab) => typeof tab.label === 'string' ? tab.label : String(tab.label), value: tabs.find(tab => tab.name === current), onChange: (tab) => {\n handleTabChange(tab.name);\n } }) })), _jsx(TabsList, { size: size, variant: variant, className: cn((fullWidth ? \"w-full\" : \"\"), className, (responsive ? \"hidden lg:flex\" : \"\")), children: tabs.map((tab) => (_jsx(TabsTrigger, { value: tab.name, disabled: tab.disabled, href: tab.href, variant: variant, onClick: () => handleTabChange(tab.name), children: tab.label }, tab.name))) })] }));\n};\nconst VTabsPanel = () => {\n const { tabs } = React.useContext(TabsContext);\n if (!tabs)\n return null;\n return (_jsx(_Fragment, { children: tabs.map((tab) => (_jsx(TabsContent, { value: tab.name, children: tab.content }, tab.name))) }));\n};\nconst TabsList = React.forwardRef(({ className, size, variant = \"tabs\", ...props }, ref) => (_jsx(TabsContext.Provider, { value: { size, variant }, children: _jsx(TabsPrimitive.List, { ref: ref, className: cn(variant === \"tabs\"\n ? \"border-b -mb-px flex space-x-4\"\n : \"flex space-x-2 p-1 rounded-md\", className), ...props }) })));\nTabsList.displayName = TabsPrimitive.List.displayName;\nconst TabsTrigger = React.forwardRef(({ className, href, variant = \"tabs\", ...props }, ref) => {\n const { size } = React.useContext(TabsContext);\n const handleClick = React.useCallback((event) => {\n if (href) {\n event.preventDefault();\n // Preserve existing history state when changing tabs\n const currentState = window.history.state;\n window.history.pushState(currentState, '', href);\n }\n if (props.onClick) {\n props.onClick(event);\n }\n }, [href, props.onClick]);\n return (_jsx(TabsPrimitive.Trigger, { ref: ref, className: cn(variant === \"tabs\"\n ? cn(\"border-b-2 px-2 py-1.5 text-sm font-medium whitespace-nowrap cursor-pointer\", \"border-transparent text-muted-foreground hover:border-border hover:text-foreground\", \"data-[state=active]:border-primary data-[state=active]:text-primary\", \"disabled:pointer-events-none disabled:opacity-50\")\n : cn(\"px-3 py-1.5 text-sm font-medium whitespace-nowrap cursor-pointer rounded-sm transition-colors\", \"tborder border-input bg-muted shadow-xs hover:bg-muted ring-inset\", \"data-[state=active]:bg-primary data-[state=active]:text-white data-[state=active]:shadow-sm\", \"disabled:pointer-events-none disabled:opacity-50\"), className, size ? `w-1/${size}` : \"\"), onClick: handleClick, ...props }));\n});\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\nconst TabsContent = React.forwardRef(({ className, ...props }, ref) => (_jsx(TabsPrimitive.Content, { ref: ref, className: cn(\"focus-visible:outline-none\", className), ...props })));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\nexport { VTabs, VTabsBar, VTabsPanel, TabsList, TabsTrigger, TabsContent };\n//# sourceMappingURL=tabs.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../libs/utils\";\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipContent = React.forwardRef(({ className, sideOffset = 4, side = \"top\", ...props }, ref) => (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Content, { ref: ref, sideOffset: sideOffset, side: side, style: { zIndex: 100 }, className: cn(\"max-w-[90vw]\", \"z-50 overflow-hidden rounded-md bg-tooltips border px-3 py-1.5 text-xs animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\", className), ...props }) })));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\nexport function VTooltip({ description, children, size = 'sm', placement = 'top', className, asChild }) {\n return (_jsx(TooltipProvider, { delayDuration: 0, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { className: \"cursor-pointer\", asChild: asChild, children: children }), _jsx(TooltipContent, { side: placement, className: `px-3 py-1.5 max-w-${size} text-${size} px-3 ${className}`, children: description })] }) }));\n}\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n//# sourceMappingURL=tooltip.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../libs/utils\";\nconst labelVariants = cva(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\nconst Label = React.forwardRef(({ className, required, ...props }, ref) => (_jsxs(LabelPrimitive.Root, { ref: ref, className: cn(labelVariants(), className), ...props, children: [props.children, required && _jsx(\"span\", { className: \"text-destructive-foreground ml-1\", children: \"*\" })] })));\nLabel.displayName = LabelPrimitive.Root.displayName;\nexport { Label };\n//# sourceMappingURL=label.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"../libs/utils\";\nexport function Breadcrumbs({ path, maxItems = 3, className, separator }) {\n const items = path || [];\n const renderBreadcrumbItem = (item) => {\n if (item.onClick) {\n return _jsx(BreadcrumbButton, { onClick: item.onClick, href: item.href, children: item.label });\n }\n else if (item.href) {\n return _jsx(BreadcrumbButton, { href: item.href, children: item.label });\n }\n else {\n return _jsx(BreadcrumbPage, { children: item.label });\n }\n };\n if (items.length <= maxItems) {\n return (_jsx(Breadcrumb, { className: cn(\"w-full\", className), children: _jsx(BreadcrumbList, { children: items.map((item, index) => (_jsxs(React.Fragment, { children: [_jsx(BreadcrumbItem, { children: renderBreadcrumbItem(item) }), index < items.length - 1 &&\n _jsx(BreadcrumbSeparator, { children: separator ?? _jsx(ChevronRight, {}) })] }, index))) }) }));\n }\n const lastThreeItems = items.slice(-(maxItems - 1));\n return (_jsx(Breadcrumb, { className: cn(\"w-full\", className), children: _jsxs(BreadcrumbList, { children: [_jsx(BreadcrumbItem, { children: _jsx(BreadcrumbEllipsis, {}) }), _jsx(BreadcrumbSeparator, { children: separator ?? _jsx(ChevronRight, {}) }), lastThreeItems.map((item, index) => (_jsxs(React.Fragment, { children: [_jsx(BreadcrumbItem, { children: renderBreadcrumbItem(item) }), index < lastThreeItems.length - 1 && _jsx(BreadcrumbSeparator, { children: separator ?? _jsx(ChevronRight, {}) })] }, index)))] }) }));\n}\nconst Breadcrumb = React.forwardRef(({ ...props }, ref) => _jsx(\"nav\", { ref: ref, \"aria-label\": \"breadcrumb\", ...props }));\nBreadcrumb.displayName = \"Breadcrumb\";\nconst BreadcrumbList = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"ol\", { ref: ref, className: cn(\"flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5\", className), ...props })));\nBreadcrumbList.displayName = \"BreadcrumbList\";\nconst BreadcrumbItem = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"li\", { ref: ref, className: cn(\"inline-flex items-center gap-1.5 text-muted\", className), ...props })));\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\nconst BreadcrumbLink = React.forwardRef(({ asChild, className, ...props }, ref) => {\n return (_jsx(\"a\", { ref: ref, className: cn(\"transition-colors hover:text-muted\", className), ...props }));\n});\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\nconst BreadcrumbButton = React.forwardRef(({ className, href, onClick, ...props }, ref) => {\n const handleClick = (e) => {\n e.preventDefault();\n if (onClick) {\n onClick(e);\n }\n };\n return (_jsx(\"button\", { ref: ref, className: cn(\"transition-colors hover:text-foreground cursor-pointer\", className), onClick: handleClick, ...props }));\n});\nBreadcrumbButton.displayName = \"BreadcrumbButton\";\nconst BreadcrumbPage = React.forwardRef(({ className, ...props }, ref) => (_jsx(\"span\", { ref: ref, role: \"link\", \"aria-disabled\": \"true\", \"aria-current\": \"page\", className: cn(\"font-normal text-foreground\", className), ...props })));\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\nconst BreadcrumbSeparator = ({ children, className, ...props }) => (_jsx(\"li\", { role: \"presentation\", \"aria-hidden\": \"true\", className: cn(\"[&>svg]:w-3.5 [&>svg]:h-3.5\", className), ...props, children: children ?? _jsx(ChevronRight, {}) }));\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\nconst BreadcrumbEllipsis = ({ className, ...props }) => (_jsxs(\"span\", { role: \"presentation\", \"aria-hidden\": \"true\", className: cn(\"flex h-9 w-9 items-center justify-center\", className), ...props, children: [_jsx(MoreHorizontal, { className: \"h-4 w-4\" }), _jsx(\"span\", { className: \"sr-only\", children: \"More\" })] }));\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n//# sourceMappingURL=breadcrumb.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../../libs/utils\";\nimport { useEffect, useRef, useState } from \"react\";\nexport const AnimateChangeInHeight = ({ children, className, }) => {\n const containerRef = useRef(null);\n const [height, setHeight] = useState(\"auto\");\n useEffect(() => {\n if (containerRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n // We only have one entry, so we can use entries[0].\n const observedHeight = entries[0].contentRect.height;\n setHeight(observedHeight);\n });\n resizeObserver.observe(containerRef.current);\n return () => {\n // Cleanup the observer when the component is unmounted\n resizeObserver.disconnect();\n };\n }\n }, []);\n return (_jsx(\"div\", { className: cn(className, \"overflow-hidden transition-all duration-100 ease-in\"), style: { height }, children: _jsx(\"div\", { ref: containerRef, children: children }) }));\n};\n//# sourceMappingURL=animateChangeInHeight.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../libs/utils\";\nconst Checkbox = React.forwardRef(({ className, ...props }, ref) => (_jsx(CheckboxPrimitive.Root, { ref: ref, className: cn(\"peer size-4 shrink-0 rounded-sm border border-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-white\", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { className: cn(\"flex items-center justify-center text-current\"), children: _jsx(Check, { className: \"size-4\" }) }) })));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\nexport { Checkbox };\n//# sourceMappingURL=checkbox.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useEffect, useState } from 'react';\nexport function DynamicLabel({ value, labelRenderer, fallbackLabel }) {\n const [label, setLabel] = useState(fallbackLabel || value);\n const [isLoading, setIsLoading] = useState(false);\n useEffect(() => {\n if (!labelRenderer) {\n setLabel(fallbackLabel || value);\n return;\n }\n const renderLabel = async () => {\n setIsLoading(true);\n try {\n const result = labelRenderer(value);\n if (result instanceof Promise) {\n const resolvedLabel = await result;\n setLabel(resolvedLabel);\n }\n else {\n setLabel(result);\n }\n }\n catch (error) {\n console.error('Error rendering label:', error);\n setLabel(fallbackLabel || value);\n }\n finally {\n setIsLoading(false);\n }\n };\n renderLabel();\n }, [value, labelRenderer, fallbackLabel]);\n if (isLoading) {\n return _jsx(\"span\", { className: \"text-muted-foreground\", children: \"Loading...\" });\n }\n return _jsx(_Fragment, { children: label });\n}\n//# sourceMappingURL=DynamicLabel.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useRef, useState } from \"react\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from \"../../command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nimport { AnimateChangeInHeight } from \"../animateChangeInHeight\";\nimport { DynamicLabel } from \"../DynamicLabel\";\nexport const SelectionCombobox = ({ filterType, filterValues, setFilterValues, options, labelRenderer, }) => {\n const [open, setOpen] = useState(false);\n const [commandInput, setCommandInput] = useState(\"\");\n const commandInputRef = useRef(null);\n const nonSelectedFilterValues = options?.filter((option) => !filterValues.some(filter => filter.value === option.value));\n return (_jsxs(Popover, { _open: open, onOpenChange: (open) => {\n setOpen(open);\n if (!open) {\n setTimeout(() => {\n setCommandInput(\"\");\n }, 200);\n }\n }, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 transition text-muted hover:text-primary shrink-0\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center\", children: filterValues?.length === 1 ? ((() => {\n const option = filterValues[0];\n return (_jsx(DynamicLabel, { value: option.value || '', labelRenderer: labelRenderer, fallbackLabel: option.label }));\n })()) : (`${filterValues?.length} selected`) }) }), _jsx(PopoverContent, { className: \"w-[300px] p-0\", children: _jsx(AnimateChangeInHeight, { children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: filterType, className: \"h-9\", value: commandInput, onInputCapture: (e) => {\n setCommandInput(e.currentTarget.value);\n }, ref: commandInputRef }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: \"No results found.\" }), _jsx(CommandGroup, { children: filterValues.map((value) => {\n return (_jsxs(CommandItem, { className: \"group flex gap-2 items-center\", onSelect: () => {\n setFilterValues(filterValues.filter((v) => v.value !== value.value));\n setTimeout(() => {\n setCommandInput(\"\");\n }, 200);\n setOpen(false);\n }, children: [_jsx(\"input\", { type: \"checkbox\", checked: true, onChange: () => { } }), _jsx(DynamicLabel, { value: value.value || '', labelRenderer: labelRenderer, fallbackLabel: value.label })] }, value.value));\n }) }), nonSelectedFilterValues?.length > 0 && (_jsxs(_Fragment, { children: [_jsx(CommandSeparator, {}), _jsx(CommandGroup, { children: nonSelectedFilterValues\n .filter(option => String(option.label || option.value).toLowerCase().includes(commandInput.toLowerCase()))\n .map((filter) => (_jsxs(CommandItem, { className: \"group flex gap-2 items-center\", value: String(filter.label || filter.value), onSelect: () => {\n setFilterValues([...filterValues, {\n value: filter.value,\n label: filter.label\n }]);\n setTimeout(() => {\n setCommandInput(\"\");\n }, 200);\n setOpen(false);\n }, children: [_jsx(Checkbox, { checked: false, className: \"opacity-0 group-data-[selected=true]:opacity-100\" }), _jsx(\"span\", { className: \"text-muted\", children: _jsx(DynamicLabel, { value: filter.value || '', labelRenderer: filter.labelRenderer || labelRenderer, fallbackLabel: filter.label }) })] }, filter.value))) })] }))] })] }) }) })] }));\n};\n//# sourceMappingURL=SelectCombobox.js.map","export const calendarStyles = `\n.calendar-wrapper .react-calendar__navigation {\n display: flex !important;\n justify-content: space-between !important;\n align-items: center !important;\n gap: 8px !important;\n padding: 8px !important;\n}\n\n.calendar-wrapper .react-calendar__navigation__label {\n flex: 1 !important;\n text-align: center !important;\n font-weight: 500 !important;\n}\n\n.calendar-wrapper .react-calendar__navigation__arrow {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n min-width: 32px !important;\n height: 32px !important;\n border-radius: 4px !important;\n border: 1px solid hsl(var(--border)) !important;\n background: hsl(var(--background)) !important;\n color: hsl(var(--foreground)) !important;\n}\n\n.calendar-wrapper .react-calendar__navigation__arrow:hover {\n background: oklch(var(--muted)) !important;\n}\n\n.calendar-wrapper .react-calendar__tile {\n cursor: pointer !important;\n width: 0.5rem !important;\n font-size: 0.875rem !important;\n}\n\n.calendar-wrapper .react-calendar__tile:hover,\n.calendar-wrapper .react-calendar__month-view__days__day:hover,\n.calendar-wrapper .react-calendar__decade-view__years__year:hover,\n.calendar-wrapper .react-calendar__year-view__months__month:hover {\n background: #b5b5b580 !important;\n}\n\n.calendar-wrapper .react-calendar__tile:not(.react-calendar__tile--active):hover {\n background: #b5b5b580 !important;\n}\n\n.calendar-wrapper .react-calendar__tile--hover {\n background: #b5b5b580 !important;\n}\n\n.calendar-wrapper .react-calendar__tile--disabled,\n.calendar-wrapper .react-calendar__tile:disabled,\n.calendar-wrapper .react-calendar__month-view__days__day--disabled,\n.calendar-wrapper .react-calendar__month-view__days__day:disabled,\n.calendar-wrapper .react-calendar__year-view__months__month--disabled,\n.calendar-wrapper .react-calendar__year-view__months__month:disabled,\n.calendar-wrapper .react-calendar__decade-view__years__year--disabled,\n.calendar-wrapper .react-calendar__decade-view__years__year:disabled {\n cursor: not-allowed !important;\n color: #9ca3af !important;\n}\n\n.calendar-wrapper .react-calendar__tile--disabled:hover,\n.calendar-wrapper .react-calendar__tile:disabled:hover,\n.calendar-wrapper .react-calendar__month-view__days__day--disabled:hover,\n.calendar-wrapper .react-calendar__month-view__days__day:disabled:hover,\n.calendar-wrapper .react-calendar__year-view__months__month--disabled:hover,\n.calendar-wrapper .react-calendar__year-view__months__month:disabled:hover,\n.calendar-wrapper .react-calendar__decade-view__years__year--disabled:hover,\n.calendar-wrapper .react-calendar__decade-view__years__year:disabled:hover {\n background: transparent !important;\n}\n\n\n.calendar-wrapper .react-calendar__month-view__weekdays {\n font-size: 0.75rem !important;\n}\n\n.calendar-wrapper .react-calendar__month-view__weekdays__weekday {\n width: 0.75rem !important;\n font-size: 0.75rem !important;\n text-align: center !important;\n}\n \n`;\n//# sourceMappingURL=filter-styles.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useState, useEffect } from \"react\";\nimport dayjs from \"dayjs\";\nimport ReactCalendar from \"react-calendar\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nimport { calendarStyles } from \"../filter-styles\";\nexport const DateCombobox = ({ filterValues, setFilterValues, isRange = false, }) => {\n const [open, setOpen] = useState(false);\n const [localDateRange, setLocalDateRange] = useState([null, null]);\n // For single date\n const selectedDate = filterValues[0] ? new Date(filterValues[0]) : undefined;\n // For date range - use local state for immediate feedback, fall back to filter values\n const dateRange = isRange ? [\n localDateRange[0] || (filterValues[0] ? new Date(filterValues[0]) : null),\n localDateRange[1] || (filterValues[1] ? new Date(filterValues[1]) : null)\n ] : [null, null];\n // Update local state when filter values change\n useEffect(() => {\n if (isRange) {\n setLocalDateRange([\n filterValues[0] ? new Date(filterValues[0]) : null,\n filterValues[1] ? new Date(filterValues[1]) : null\n ]);\n }\n }, [filterValues, isRange]);\n const getDisplayText = () => {\n if (isRange) {\n if (dateRange[0] && dateRange[1]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-1.5\", children: [_jsx(\"span\", { className: \"font-medium\", children: dayjs(dateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted-foreground\", children: \"-\" }), _jsx(\"span\", { className: \"font-medium\", children: dayjs(dateRange[1]).format(\"MMMM DD, YYYY\") })] }));\n }\n else if (dateRange[0]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-1.5\", children: [_jsx(\"span\", { className: \"font-medium\", children: dayjs(dateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted-foreground\", children: \"- Select end\" })] }));\n }\n else {\n return _jsx(\"span\", { className: \"text-muted-foreground\", children: \"Select range\" });\n }\n }\n else {\n return selectedDate ? dayjs(selectedDate).format(\"MMMM DD, YYYY\") : \"Pick a date\";\n }\n };\n const handleDateChange = (date) => {\n if (isRange) {\n // Update local state immediately for visual feedback\n if (Array.isArray(date)) {\n setLocalDateRange([date[0], date[1]]);\n // Update filter values\n if (date[0] && date[1]) {\n setFilterValues([\n dayjs(date[0]).format(\"YYYY-MM-DD\"),\n dayjs(date[1]).format(\"YYYY-MM-DD\")\n ]);\n }\n else if (date[0]) {\n setFilterValues([dayjs(date[0]).format(\"YYYY-MM-DD\")]);\n }\n }\n }\n else {\n if (date) {\n const actualDate = Array.isArray(date) ? date[0] : date;\n if (actualDate) {\n setFilterValues([dayjs(actualDate).format(\"YYYY-MM-DD\")]);\n setOpen(false);\n }\n }\n }\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center min-h-[20px]\", children: getDisplayText() }) }), _jsx(PopoverContent, { className: \"w-auto p-0\", align: \"start\", side: \"bottom\", alignOffset: -4, sideOffset: 6, children: _jsx(\"div\", { className: \"p-2\", children: isRange ? (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(ReactCalendar, { value: dateRange, onChange: handleDateChange, selectRange: true, returnValue: \"range\", maxDate: (() => {\n const maxDate = new Date();\n maxDate.setHours(23, 59, 59, 999);\n return maxDate;\n })(), className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (dateRange[0]) {\n const startDate = dateRange[0].getTime();\n if (dateRange[1]) {\n // Both dates selected\n const endDate = dateRange[1].getTime();\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-l-md font-semibold';\n }\n if (currentDate === endDate) {\n return 'bg-primary text-primary-foreground rounded-r-md font-semibold';\n }\n if (currentDate > startDate && currentDate < endDate) {\n return 'bg-primary/20 text-primary font-medium';\n }\n }\n else {\n // Only start date selected\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n }\n }\n return '';\n } })] }), dateRange[0] && dateRange[1] && (_jsx(\"div\", { className: \"border-t pt-2\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: () => setOpen(false), children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: () => setOpen(false), children: \"Apply\" })] }) }))] })) : (_jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(ReactCalendar, { value: selectedDate, onChange: handleDateChange, selectRange: false, maxDate: (() => {\n const maxDate = new Date();\n maxDate.setHours(23, 59, 59, 999);\n return maxDate;\n })(), className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (selectedDate && currentDate === selectedDate.getTime()) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n return '';\n } })] })) }) })] }));\n};\n//# sourceMappingURL=DateCombobox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { Button } from \"../../button\";\nimport { Input } from \"../../input\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nexport const TextCombobox = ({ filterType, filterValue, setFilterValue, }) => {\n const [open, setOpen] = useState(false);\n const [inputValue, setInputValue] = useState(filterValue);\n const handleKeyDown = (event) => {\n if (event.key === \"Enter\") {\n setFilterValue(inputValue);\n setOpen(false);\n }\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: (open) => {\n setOpen(open);\n if (!open && inputValue !== filterValue) {\n setInputValue(filterValue);\n }\n }, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center\", children: filterValue || \"Enter text...\" }) }), _jsx(PopoverContent, { className: \"w-[300px] p-3\", children: _jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted\", children: _jsx(\"span\", { children: filterType }) }), _jsx(Input, { autoFocus: true, type: \"text\", size: \"sm\", value: inputValue, onChange: setInputValue, onKeyDown: handleKeyDown, placeholder: \"Enter text...\" }), _jsx(\"div\", { className: \"mt-2 p-2 border-t\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: () => {\n setInputValue(filterValue);\n setOpen(false);\n }, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: () => {\n setFilterValue(inputValue);\n setOpen(false);\n }, children: \"Apply\" })] }) })] }) })] }));\n};\n//# sourceMappingURL=TextCombobox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\nimport { InputList } from \"../../../index\";\nexport const StringListCombobox = ({ filterType, filterValues, setFilterValues, }) => {\n const [open, setOpen] = useState(false);\n const [tags, setTags] = useState(filterValues);\n const handleApply = () => {\n setFilterValues(tags);\n setOpen(false);\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: (open) => {\n setOpen(open);\n if (!open && JSON.stringify(tags) !== JSON.stringify(filterValues)) {\n setTags(filterValues);\n }\n }, children: [_jsx(PopoverTrigger, { className: \"rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition\", children: _jsx(\"div\", { className: \"flex gap-1.5 items-center\", children: filterValues.length > 0 ? (filterValues.length === 1 ? filterValues[0] : `${filterValues.length} tags`) : (\"Add tags...\") }) }), _jsx(PopoverContent, { className: \"w-[300px] p-3\", children: _jsxs(\"div\", { className: \"flex flex-col gap-3\", children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted\", children: _jsx(\"span\", { children: filterType }) }), _jsx(InputList, { value: tags, onChange: setTags, placeholder: `Add ${filterType.toLowerCase()}...` }), _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { size: \"sm\", variant: \"ghost\", onClick: () => {\n setTags(filterValues);\n setOpen(false);\n }, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApply, children: \"Apply\" })] })] }) })] }));\n};\n//# sourceMappingURL=StringListCombobox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../button\";\nimport { DateCombobox, SelectionCombobox, TextCombobox, StringListCombobox } from \"./comboBox/comboBox\";\nimport dayjs from \"dayjs\";\nfunction generateComboboxOptions(filter, setFilters, filterGroups) {\n switch (filter.type) {\n case \"date\":\n return (_jsx(DateCombobox, { filterValues: Array.isArray(filter.value) && typeof filter.value[0] === 'object' ? filter.value.map((v) => v.value || '') : [], isRange: filter.multiple, setFilterValues: (filterValues) => {\n setFilters((prev) => prev.map((f) => f === filter ? {\n ...f,\n value: filterValues.length > 0 ?\n filterValues.map(dateValue => ({\n value: dateValue,\n label: dayjs(dateValue).format(\"LLL dd, y\"),\n })) : []\n } : f));\n } }));\n case \"text\":\n return (_jsx(TextCombobox, { filterType: filter.placeholder || filter.name, filterValue: Array.isArray(filter.value) && filter.value[0] && typeof filter.value[0] === 'object' ? filter.value[0].value || \"\" : \"\", setFilterValue: (textValue) => {\n setFilters((prev) => prev.map((f) => f === filter\n ? {\n ...f,\n value: [\n {\n value: textValue,\n label: textValue,\n },\n ],\n }\n : f));\n } }));\n case \"stringList\":\n return (_jsx(StringListCombobox, { filterType: filter.placeholder || filter.name, filterValues: Array.isArray(filter.value) && typeof filter.value[0] === 'string' ? filter.value : [], setFilterValues: (values) => {\n setFilters((prev) => prev.map((f) => f === filter\n ? { ...f, value: values }\n : f));\n } }));\n case 'select':\n default: {\n const filterGroup = filterGroups.find(group => group.name === filter.name);\n return (_jsx(SelectionCombobox, { filterType: filter.placeholder || filter.name, filterValues: Array.isArray(filter.value) && typeof filter.value[0] === 'object' ? filter.value : [], setFilterValues: (filterValues) => {\n setFilters((prev) => prev.map((f) => f === filter\n ? { ...f, value: filterValues }\n : f));\n }, options: filterGroup?.options || [], labelRenderer: filterGroup?.labelRenderer }));\n }\n }\n}\nexport default function Filters({ filters, setFilters, filterGroups, }) {\n return (_jsx(\"div\", { className: \"flex gap-2 flex-wrap justify-start\", children: filters\n .filter((filter) => filter.value?.length > 0)\n .map((filter) => (_jsxs(\"div\", { className: \"flex gap-[1px] items-center text-sm\", children: [_jsx(\"div\", { className: \"flex gap-1.5 shrink-0 rounded-l bg-muted p-1.5 h-8 items-center\", children: filter.placeholder || filter.name }), generateComboboxOptions(filter, setFilters, filterGroups), _jsx(Button, { variant: \"ghost\", size: \"icon\", onClick: () => {\n setFilters((prev) => prev.filter((f) => f !== filter));\n }, className: \"bg-muted rounded-l-none rounded-r-sm size-8 hover:text-primary hover:bg-muted/50 transition shrink-0\", children: _jsx(X, { className: \"size-6\" }) })] }, filter.name + '-' + (filter.type == 'date' ? 'date' : filter.type === 'stringList' && typeof filter.value[0] === 'string' ? filter.value.join(',') : Array.isArray(filter.value) ? filter.value.map((v) => v.value).join(',') : '')))) }));\n}\n//# sourceMappingURL=filters.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from \"../../button\";\nimport { Input } from \"../../input\";\nexport default function TextFilter({ selectedView, textValue, setTextValue, setFilters, handleClose, filterGroups, }) {\n const handleTextFilterAdd = () => {\n setFilters((prev) => {\n return [\n ...prev,\n {\n name: selectedView || \"\",\n placeholder: filterGroups.find(group => group.name === selectedView)?.placeholder,\n value: [{ value: textValue, label: textValue }],\n type: \"text\",\n }\n ];\n });\n handleClose();\n };\n return (_jsxs(\"div\", { className: \"p-2 flex flex-col gap-1\", children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted\", children: _jsx(\"span\", { children: filterGroups.find(group => group.name === selectedView)?.placeholder }) }), _jsx(Input, { autoFocus: true, type: \"text\", size: \"sm\", value: textValue, onChange: setTextValue, onKeyDown: (e) => e.key === \"Enter\" && handleTextFilterAdd(), placeholder: \"Enter text...\" }), _jsx(\"div\", { className: \"mt-2 p-2 border-t\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleTextFilterAdd, disabled: !textValue.trim(), children: \"Apply\" })] }) })] }));\n}\n//# sourceMappingURL=TextFilter.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport dayjs from \"dayjs\";\nimport { useState } from \"react\";\nimport Calendar from \"react-calendar\";\nimport { Button } from \"../../button\";\nimport { calendarStyles } from \"../filter-styles\";\nexport default function DateFilter({ selectedView, selectedDate, setSelectedDate, setFilters, filters, handleClose, filterGroups, }) {\n const [dateRange, setDateRange] = useState([null, null]);\n const [localDateRange, setLocalDateRange] = useState([null, null]);\n const selectedGroup = filterGroups.find(g => g.name === selectedView);\n const isDateRange = selectedGroup?.multiple;\n // Create maxDate set to end of today to ensure today is selectable\n const maxDate = new Date();\n maxDate.setHours(23, 59, 59, 999);\n // Use local state for immediate feedback, fall back to dateRange\n const effectiveDateRange = [\n localDateRange[0] || dateRange[0],\n localDateRange[1] || dateRange[1]\n ];\n const handleDateChange = (value) => {\n if (isDateRange) {\n // Handle date range selection\n if (Array.isArray(value)) {\n // Update local state immediately for visual feedback\n setLocalDateRange([value[0], value[1]]);\n // Also update the main dateRange state\n setDateRange([value[0], value[1]]);\n }\n else {\n // Single date in range mode\n setLocalDateRange([value, null]);\n setDateRange([value, null]);\n }\n }\n else {\n // Handle single date selection\n const date = Array.isArray(value) ? value[0] : value;\n setSelectedDate(date || undefined);\n if (date) {\n // Set date to start of day (00:00)\n const selectedDateStart = new Date(date);\n selectedDateStart.setHours(0, 0, 0, 0);\n setFilters([\n ...filters,\n {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder,\n value: [\n {\n value: selectedDateStart.toISOString(),\n label: dayjs(selectedDateStart).format(\"LLL dd, y\"),\n }\n ],\n type: selectedGroup?.type || \"date\",\n multiple: selectedGroup?.multiple || false,\n },\n ]);\n handleClose();\n }\n }\n };\n const handleApplyDateRange = () => {\n if (dateRange[0]) {\n const startDate = new Date(dateRange[0]);\n const endDate = dateRange[1] ? new Date(dateRange[1]) : new Date(dateRange[0]);\n // Set start date to beginning of day\n startDate.setHours(0, 0, 0, 0);\n // Set end date to end of day\n endDate.setHours(23, 59, 59, 999);\n const filterValue = [];\n filterValue.push({\n value: startDate.toISOString(),\n label: dayjs(startDate).format(\"LLL dd, y\"),\n });\n if (dateRange[1] && dateRange[0].getTime() !== dateRange[1].getTime()) {\n filterValue.push({\n value: endDate.toISOString(),\n label: dayjs(endDate).format(\"LLL dd, y\"),\n });\n }\n setFilters([\n ...filters,\n {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder,\n value: filterValue,\n type: selectedGroup?.type || \"date\",\n multiple: selectedGroup?.multiple || false,\n },\n ]);\n handleClose();\n }\n };\n const getDisplayText = () => {\n if (isDateRange) {\n if (effectiveDateRange[0] && effectiveDateRange[1]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-2\", children: [_jsx(\"span\", { className: \"text-xs text-muted\", children: \"From:\" }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted\", children: \"To:\" }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[1]).format(\"MMMM DD, YYYY\") })] }));\n }\n else if (effectiveDateRange[0]) {\n return (_jsxs(\"span\", { className: \"flex items-center gap-2\", children: [_jsx(\"span\", { className: \"text-xs text-muted\", children: \"From:\" }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted\", children: \"\\u2192 Select end date\" })] }));\n }\n else {\n return _jsx(\"span\", { className: \"text-muted text-xs\", children: selectedGroup?.placeholder || selectedGroup?.name || selectedView || \"Select date range\" });\n }\n }\n else {\n return selectedDate ? dayjs(selectedDate).format(\"MMMM DD, YYYY\") : \"Pick a date\";\n }\n };\n return (_jsx(\"div\", { className: \"p-2\", children: isDateRange ? (_jsxs(_Fragment, { children: [_jsx(\"div\", { children: getDisplayText() }), _jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(Calendar, { value: effectiveDateRange, onChange: handleDateChange, selectRange: true, returnValue: \"range\", maxDate: maxDate, className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (effectiveDateRange[0]) {\n const startDate = effectiveDateRange[0].getTime();\n if (effectiveDateRange[1]) {\n // Both dates selected\n const endDate = effectiveDateRange[1].getTime();\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-l-md font-semibold';\n }\n if (currentDate === endDate) {\n return 'bg-primary text-primary-foreground rounded-r-md font-semibold';\n }\n if (currentDate > startDate && currentDate < endDate) {\n return 'bg-primary/20 text-primary font-medium';\n }\n }\n else {\n // Only start date selected\n if (currentDate === startDate) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n }\n }\n return '';\n } }, `${effectiveDateRange[0]?.getTime()}-${effectiveDateRange[1]?.getTime()}`)] }), _jsx(\"div\", { className: \"border-t pt-2\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApplyDateRange, disabled: !effectiveDateRange[0], children: \"Apply\" })] }) })] })) : (_jsx(_Fragment, { children: _jsxs(\"div\", { className: \"calendar-wrapper\", children: [_jsx(\"style\", { children: calendarStyles }), _jsx(Calendar, { value: selectedDate, onChange: handleDateChange, selectRange: false, maxDate: maxDate, className: \"mb-2 border-0\", tileClassName: ({ date, view }) => {\n if (view === 'month') {\n const currentDate = date.getTime();\n const today = new Date();\n today.setHours(23, 59, 59, 999);\n // Check if date is disabled (future date)\n if (currentDate > today.getTime()) {\n return 'text-muted/20 cursor-not-allowed';\n }\n // Handle selected date styling\n if (selectedDate && currentDate === selectedDate.getTime()) {\n return 'bg-primary text-primary-foreground rounded-md font-semibold';\n }\n }\n return '';\n } })] }) })) }));\n}\n//# sourceMappingURL=dateFilter.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { CommandItem } from \"../../command\";\nimport { Button } from \"../../button\";\nimport { DynamicLabel } from \"../DynamicLabel\";\nexport default function SelectFilter({ selectedView, commandInput, setFilters, handleClose, filterGroups, }) {\n const [selectedOptions, setSelectedOptions] = useState([]);\n const getFilteredOptions = (groupName) => {\n const group = filterGroups.find(g => g.name === groupName);\n if (!group) {\n return [];\n }\n let filteredOptions = group.options || [];\n if (!commandInput.trim()) {\n return filteredOptions;\n }\n if (group.filterBy) {\n const filterLc = commandInput.toLowerCase();\n const results = filteredOptions.filter(option => {\n if (option.value === undefined)\n return false;\n return group.filterBy(option.value, filterLc);\n });\n return results;\n }\n const filterLc = commandInput.toLowerCase();\n return filteredOptions.filter(option => {\n const optionValue = String(option.value || '').toLowerCase();\n return optionValue.includes(filterLc);\n });\n };\n if (!selectedView) {\n return null;\n }\n const options = getFilteredOptions(selectedView);\n const selectedGroup = filterGroups.find(g => g.name === selectedView);\n const groupTitle = selectedGroup?.placeholder || selectedGroup?.name;\n const handleApply = () => {\n if (selectedOptions.length > 0) {\n setFilters(prev => [\n ...prev.filter(f => f.name !== selectedView),\n {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder || \"\",\n value: selectedOptions,\n type: selectedGroup?.type || \"select\",\n multiple: selectedGroup?.multiple || false,\n }\n ]);\n }\n handleClose();\n };\n const handleOptionToggle = (option) => {\n const filterOption = {\n value: option.value,\n label: option.label\n };\n if (selectedGroup?.multiple) {\n // For multiple selection, toggle the option\n const isSelected = selectedOptions.some(opt => opt.value === option.value);\n if (isSelected) {\n setSelectedOptions(prev => prev.filter(opt => opt.value !== option.value));\n }\n else {\n setSelectedOptions(prev => [...prev, filterOption]);\n }\n }\n else {\n // For single selection, apply immediately\n setFilters((prev) => {\n const existingFilterIndex = prev.findIndex(f => f.name === selectedView);\n if (existingFilterIndex >= 0) {\n const updatedFilters = [...prev];\n updatedFilters[existingFilterIndex] = {\n ...updatedFilters[existingFilterIndex],\n value: [filterOption]\n };\n return updatedFilters;\n }\n else {\n return [...prev, {\n name: selectedView || \"\",\n placeholder: selectedGroup?.placeholder || \"\",\n value: [filterOption],\n type: selectedGroup?.type || \"select\",\n multiple: selectedGroup?.multiple || false,\n }];\n }\n });\n handleClose();\n }\n };\n return (_jsxs(\"div\", { className: \"flex flex-col h-full\", children: [_jsx(\"div\", { className: \"flex items-center p-1.5 text-xs text-muted shrink-0\", children: _jsx(\"span\", { children: groupTitle }) }), _jsx(\"div\", { className: \"flex-1 overflow-hidden min-h-0\", children: _jsx(\"div\", { className: \"max-h-[200px] overflow-y-auto\", children: options.length > 0 && (options.map((option) => {\n const isSelected = selectedOptions.some(opt => opt.value === option.value);\n return (_jsxs(CommandItem, { className: `group flex gap-2 items-center w-full hover:bg-muted ${selectedGroup?.multiple && isSelected ? 'bg-muted' : ''}`, onSelect: () => handleOptionToggle(option), children: [_jsx(DynamicLabel, { value: option.value || '', labelRenderer: option.labelRenderer || selectedGroup?.labelRenderer, fallbackLabel: option.label }), selectedGroup?.multiple && isSelected && (_jsx(\"span\", { className: \"ml-auto text-xs text-success\", children: \"\\u2713\" }))] }, option.value || `option-${Math.random()}`));\n })) }) }), selectedGroup?.multiple && (_jsx(\"div\", { className: \"p-2 border-t shrink-0\", children: _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApply, disabled: selectedOptions.length === 0, children: \"Apply\" })] }) }))] }));\n}\n//# sourceMappingURL=SelectFilter.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { InputList } from \"../../../index\";\nimport { Button } from \"../../button\";\nexport default function StringListFilter({ selectedView, setFilters, handleClose, filterGroups, }) {\n const [tags, setTags] = useState([]);\n const selectedGroup = filterGroups.find(g => g.name === selectedView);\n const handleApply = () => {\n if (tags.length > 0) {\n setFilters(prev => [\n ...prev.filter(f => f.name !== selectedView),\n {\n name: selectedView,\n placeholder: selectedGroup?.placeholder,\n value: tags,\n type: \"stringList\"\n }\n ]);\n }\n handleClose();\n };\n return (_jsxs(\"div\", { className: \"p-2 space-y-3\", children: [_jsx(\"div\", { className: \"space-y-2\", children: _jsx(InputList, { value: tags, onChange: setTags, placeholder: selectedGroup?.placeholder || `Add ${selectedView}...`, autoFocus: true }) }), _jsxs(\"div\", { className: \"flex gap-2 justify-end\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: handleClose, children: \"Cancel\" }), _jsx(Button, { size: \"sm\", onClick: handleApply, disabled: tags.length === 0, children: \"Apply\" })] })] }));\n}\n//# sourceMappingURL=StringListFilter.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useEffect } from \"react\";\nimport { cn } from \"../../libs/utils\";\nimport { Button } from \"../button\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"../popover\";\nimport { Command, CommandInput, CommandList, CommandGroup, CommandItem, CommandEmpty } from \"../command\";\nimport { ListFilter } from \"lucide-react\";\nimport Filters from \"./filters\";\nimport TextFilter from \"./filter/TextFilter\";\nimport DateFilter from \"./filter/dateFilter\";\nimport SelectFilter from \"./filter/SelectFilter\";\nimport StringListFilter from \"./filter/StringListFilter\";\nconst FilterContext = React.createContext({});\nconst FilterProvider = ({ filters, setFilters, filterGroups, children }) => {\n const url = new URL(window.location.href);\n const searchParams = url.searchParams;\n const [hasInitialized, setHasInitialized] = React.useState(false);\n useEffect(() => {\n try {\n const params = new URLSearchParams(searchParams.toString());\n if (filters.length > 0) {\n // Convert filters to format with array indicators: filterName:value,value;filterName2:value\n // Arrays are prefixed with []: filterName:[value1,value2]\n const filterString = filters.map(filter => {\n let values;\n if (filter.type === 'stringList' && Array.isArray(filter.value) && typeof filter.value[0] === 'string') {\n // Handle stringList with direct string array - always array format\n values = `[${filter.value.map(item => encodeURIComponent(item)).join(',')}]`;\n }\n else if (Array.isArray(filter.value)) {\n if (filter.multiple) {\n // Handle multiple filters - always use array format for multiple=true\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else if (filter.value.length > 1) {\n // Handle multiple values for non-multiple filters\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else {\n // Single value in array for non-multiple filter - don't use array format\n const firstValue = filter.value[0];\n if (typeof firstValue === 'string') {\n values = encodeURIComponent(firstValue);\n }\n else if (typeof firstValue === 'object' && firstValue?.value !== undefined) {\n // Handle FilterOption object\n values = encodeURIComponent(String(firstValue.value));\n }\n else {\n values = encodeURIComponent(String(firstValue || ''));\n }\n }\n }\n else {\n values = encodeURIComponent(filter.value || '');\n }\n return `${encodeURIComponent(filter.name)}:${values}`;\n }).join(';');\n params.set('filters', filterString);\n }\n else {\n params.delete('filters');\n }\n const newUrl = `${window.location.pathname}?${params.toString()}${window.location.hash}`;\n window.history.replaceState(window.history.state || {}, '', newUrl);\n }\n catch (error) {\n console.error(\"Failed to update URL with filters:\", error);\n }\n }, [filters]);\n useEffect(() => {\n const filtersParam = searchParams.get('filters');\n if (filtersParam && filterGroups.length > 0 && !hasInitialized) {\n try {\n // Parse format with array indicators: filterName:value or filterName:[value1,value2]\n const filterPairs = filtersParam.split(';');\n const parsedFilters = filterPairs.map(pair => {\n const [encodedName, valuesString] = pair.split(':');\n const name = decodeURIComponent(encodedName);\n let values;\n // Check if it's an array format [value1,value2]\n if (valuesString.startsWith('[') && valuesString.endsWith(']')) {\n // Array format - remove brackets and split by comma\n const arrayContent = valuesString.slice(1, -1); // Remove [ and ]\n values = arrayContent ? arrayContent.split(',').map(encodedValue => decodeURIComponent(encodedValue)) : [];\n }\n else {\n // Single value format\n values = [decodeURIComponent(valuesString)];\n }\n const group = filterGroups.find(g => g.name === name);\n let filterValue;\n if (group?.type === 'stringList') {\n // For stringList, return direct string array\n filterValue = values;\n }\n else if (group?.type === 'text') {\n // For text, return FilterOption array (single value for text inputs)\n filterValue = values.length === 1 ? [{ value: values[0], label: values[0] }] :\n values.map(value => ({ value, label: value }));\n }\n else {\n // For other types, find options with labels\n filterValue = values.map(value => {\n const matchingOption = group?.options?.find(opt => opt.value === value);\n let label = value;\n if (matchingOption?.label) {\n label = String(matchingOption.label);\n }\n else if (matchingOption?.labelRenderer) {\n label = String(matchingOption.labelRenderer(value));\n }\n else if (group?.labelRenderer) {\n label = String(group.labelRenderer(value));\n }\n return {\n value,\n label\n };\n });\n }\n if (group?.multiple && !valuesString.startsWith('[') && !valuesString.endsWith(']')) {\n if (group.type === 'stringList') {\n filterValue = values;\n }\n else {\n if (!Array.isArray(filterValue)) {\n filterValue = [filterValue];\n }\n }\n }\n // Fallback: if group not found but we detected array format, assume it should be multiple\n const shouldBeMultiple = group?.multiple || (!group && valuesString.startsWith('[') && valuesString.endsWith(']'));\n const filter = {\n name,\n type: group?.type || 'select',\n placeholder: group?.placeholder,\n value: filterValue,\n multiple: shouldBeMultiple\n };\n return filter;\n });\n setFilters(parsedFilters);\n setHasInitialized(true);\n }\n catch (error) {\n setHasInitialized(true);\n }\n }\n else if (filterGroups.length > 0 && !hasInitialized) {\n // No URL params but we have groups - mark as initialized\n setHasInitialized(true);\n }\n }, [filterGroups, hasInitialized]);\n return (_jsx(FilterContext.Provider, { value: { filters, setFilters, filterGroups }, children: children }));\n};\nconst FilterBtn = ({ className }) => {\n const { filters, setFilters, filterGroups } = React.useContext(FilterContext);\n const [open, setOpen] = React.useState(false);\n const [selectedView, setSelectedView] = React.useState(null);\n const [commandInput, setCommandInput] = React.useState(\"\");\n const commandInputRef = React.useRef(null);\n const [selectedDate, setSelectedDate] = React.useState();\n const [textValue, setTextValue] = React.useState(\"\");\n const handleSelect = (groupName) => {\n setSelectedView(groupName);\n setCommandInput(\"\");\n commandInputRef.current?.focus();\n };\n const getAvailableFilterGroups = () => {\n let options = filterGroups.map(group => ({\n ...group,\n options: (group.options ?? []).filter(option => !filters.some(filter => {\n if (filter.type === \"date\") {\n return filter.name === group.name;\n }\n return filter.name === group.name &&\n (Array.isArray(filter.value) && typeof filter.value[0] === 'string'\n ? filter.value.some(val => val === option.value)\n : filter.value.some(val => val.value === option.value));\n }))\n })).filter(group => ((group.options ?? []).length > 0) ||\n (group.type === \"date\" && !filters.some(filter => filter.name === group.name)) ||\n (group.type === \"text\" && !filters.some(filter => filter.name === group.name)) ||\n (group.type === \"stringList\" && !filters.some(filter => filter.name === group.name)));\n if (options.length === 0) {\n return _jsx(CommandEmpty, { children: \"No available filters\" });\n }\n return options.map((group, index) => (_jsx(CommandItem, { onSelect: () => handleSelect(group.name), className: \"group flex gap-2 items-center hover:bg-muted\", children: _jsx(\"span\", { children: group.placeholder ?? group.name }) }, index)));\n };\n const handleClose = () => {\n setOpen(false);\n setTimeout(() => {\n setSelectedView(null);\n setCommandInput(\"\");\n setSelectedDate(undefined);\n }, 200);\n };\n const handleOpen = (open) => {\n setOpen(open);\n if (!open) {\n setTimeout(() => {\n setSelectedView(null);\n setCommandInput(\"\");\n setTextValue(\"\");\n }, 200);\n }\n };\n const renderFilterOptions = () => {\n if (!selectedView) {\n return null;\n }\n const selectedGroupType = filterGroups.find(g => g.name === selectedView)?.type;\n switch (selectedGroupType) {\n case \"date\":\n return (_jsx(DateFilter, { selectedView: selectedView, selectedDate: selectedDate, setSelectedDate: setSelectedDate, setFilters: setFilters, filters: filters, handleClose: handleClose, filterGroups: filterGroups }));\n case \"text\":\n return (_jsx(TextFilter, { selectedView: selectedView, textValue: textValue, setTextValue: setTextValue, setFilters: setFilters, handleClose: handleClose, filterGroups: filterGroups }));\n case \"stringList\":\n return (_jsx(StringListFilter, { selectedView: selectedView, setFilters: setFilters, handleClose: handleClose, filterGroups: filterGroups }));\n default:\n return (_jsx(SelectFilter, { selectedView: selectedView, commandInput: commandInput, setFilters: setFilters, handleClose: handleClose, filterGroups: filterGroups }));\n }\n };\n return (_jsxs(Popover, { _open: open, onOpenChange: handleOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: \"outline\", role: \"combobox\", \"aria-expanded\": open, size: \"md\", className: cn(\"transition group flex gap-1.5\", className), children: [_jsx(ListFilter, { className: \"size-4 shrink-0 transition-all text-muted\" }), \"Filter\"] }) }), _jsx(PopoverContent, { className: \"w-[300px] p-0\", align: \"start\", sideOffset: 4, children: _jsxs(Command, { children: [filterGroups.find(group => group.name === selectedView)?.type === \"select\" && (_jsx(CommandInput, { placeholder: selectedView ? `Filter by ${selectedView}` : \"Filter...\", className: \"h-9 ring-0\", value: commandInput, onValueChange: (value) => {\n setCommandInput(value);\n }, ref: commandInputRef, autoFocus: true })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: \"No matching filters\" }), _jsx(CommandGroup, { children: !selectedView ? getAvailableFilterGroups() : renderFilterOptions() })] })] }) })] }));\n};\nconst FilterBar = ({ className }) => {\n const { filters, setFilters, filterGroups } = React.useContext(FilterContext);\n return (_jsx(\"div\", { className: cn(className), children: _jsx(Filters, { filters: filters, setFilters: setFilters, filterGroups: filterGroups }) }));\n};\nconst FilterClear = ({ className }) => {\n const { filters, setFilters } = React.useContext(FilterContext);\n const hasActiveFilters = filters.filter((filter) => filter.value?.length > 0).length > 0;\n if (!hasActiveFilters) {\n return null;\n }\n return (_jsx(Button, { variant: \"outline\", size: \"xs\", className: cn(\"transition group\", className), onClick: () => setFilters([]), children: \"Clear All\" }));\n};\nexport { FilterProvider, FilterBtn, FilterBar, FilterClear };\n//# sourceMappingURL=filterBar.js.map","export var FilterOperator;\n(function (FilterOperator) {\n FilterOperator[\"IS\"] = \"is\";\n FilterOperator[\"IS_NOT\"] = \"is_not\";\n FilterOperator[\"CONTAINS\"] = \"contains\";\n FilterOperator[\"BEFORE\"] = \"before\";\n FilterOperator[\"AFTER\"] = \"after\";\n FilterOperator[\"IS_ANY_OF\"] = \"is_any_of\";\n})(FilterOperator || (FilterOperator = {}));\n//# sourceMappingURL=types.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../libs/utils\";\nimport { forwardRef } from \"react\";\nexport const Heading = forwardRef(({ className, level = 3, ...props }, ref) => {\n const Component = `h${level}`;\n const styles = {\n h1: \"text-2xl font-medium tracking-tight\",\n h2: \"text-xl font-medium tracking-tight\",\n h3: \"text-lg font-medium\",\n h4: \"text-base font-medium\",\n h5: \"text-sm font-medium\",\n h6: \"text-xs font-medium\",\n };\n return _jsx(Component, { ref: ref, className: cn(styles[`h${level}`], 'mb-2', className), ...props });\n});\nHeading.displayName = \"Heading\";\n//# sourceMappingURL=heading.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../libs/utils\";\nimport { cva } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n// Update the text variants to match the new sizing requirements\nconst textVariants = cva(\"text-foreground\", {\n variants: {\n size: {\n xl: \"text-base md:text-lg leading-relaxed\",\n lg: \"text-base leading-relaxed\",\n default: \"text-sm leading-normal\",\n sm: \"text-sm leading-normal\",\n xs: \"text-xs leading-normal\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n },\n defaultVariants: {\n size: \"default\",\n weight: \"normal\",\n },\n});\nexport const Text = forwardRef(({ className, size, weight, ...props }, ref) => {\n return _jsx(\"p\", { ref: ref, className: cn(textVariants({ size, weight, className })), ...props });\n});\nText.displayName = \"Text\";\n//# sourceMappingURL=text.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Minus } from \"lucide-react\";\nimport * as ResizablePrimitive from \"react-resizable-panels\";\nimport { cn } from \"../libs/utils\";\nfunction ResizablePanelGroup({ className, ...props }) {\n return (_jsx(ResizablePrimitive.PanelGroup, { \"data-slot\": \"resizable-panel-group\", className: cn(\"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\", className), ...props }));\n}\nfunction ResizablePanel({ ...props }) {\n return _jsx(ResizablePrimitive.Panel, { \"data-slot\": \"resizable-panel\", ...props });\n}\nfunction ResizableHandle({ withHandle, className, ...props }) {\n return (_jsx(ResizablePrimitive.PanelResizeHandle, { \"data-slot\": \"resizable-handle\", className: cn(\"bg-muted focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\", className), ...props, children: withHandle && (_jsx(\"div\", { className: \"z-10 flex size-4 items-center justify-center rounded-xs font-semibold\", children: _jsx(Minus, { className: \"size-4 rotate-90\" }) })) }));\n}\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle };\n//# sourceMappingURL=resizeable.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from \"../libs/utils\";\nfunction Textarea({ className, ...props }) {\n return (_jsx(\"textarea\", { \"data-slot\": \"textarea\", className: cn(\"py-2 text-sm\", \"flex w-full rounded-md border border-input bg-background ring-offset-background\", \"placeholder:text-muted focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring\", \"disabled:cursor-not-allowed disabled:opacity-50\", className), ...props }));\n}\nexport { Textarea };\n//# sourceMappingURL=textarea.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { TriangleAlert } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { VModal, VModalTitle, VModalFooter } from \"./shadcn\";\nimport { Button } from \"./shadcn/button\";\nexport function ConfirmModal({ title, content, onConfirm, onCancel, isOpen }) {\n const cancelButtonRef = useRef(null);\n return (_jsxs(VModal, { isOpen: isOpen, onClose: onCancel, description: \"Confirm Modal\", children: [_jsxs(\"div\", { className: \"sm:flex sm:items-start p-2\", children: [_jsx(\"div\", { className: \"mx-auto flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\", children: _jsx(TriangleAlert, { className: \"size-6 text-red-600\", \"aria-hidden\": \"true\" }) }), _jsxs(\"div\", { className: \"mt-3 text-center sm:ml-4 sm:mt-0 sm:text-left\", children: [_jsx(VModalTitle, { className: \"leading-6\", show: true, children: title }), _jsx(\"div\", { className: \"mt-2\", children: _jsx(\"div\", { className: \"prose text-sm text-gray-500\", children: content }) })] })] }), _jsxs(VModalFooter, { align: \"right\", children: [_jsx(Button, { variant: \"destructive\", onClick: onConfirm, children: \"Confirm\" }), _jsx(Button, { variant: \"outline\", onClick: onCancel, ref: cancelButtonRef, children: \"Cancel\" })] })] }));\n}\n//# sourceMappingURL=ConfirmModal.js.map","import { createContext, useContext } from \"react\";\nexport function useToast() {\n return useContext(ToastContext);\n}\nconst ToastContext = createContext(() => { });\nexport { ToastContext };\n//# sourceMappingURL=ToastContext.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nconst PORTAL_ID = '--tailwind-portal';\nexport function Portal({ children }) {\n const tempNode = useRef(null);\n const [portalEl, setPortalEl] = useState(null);\n // hack to have the Portal not generating hydration errors (content mismatch) on SSR / CSR\n useEffect(() => {\n if (tempNode.current) { // we are on the browser -> we an use the portal\n const doc = tempNode.current.ownerDocument;\n let portalEl = doc.getElementById(PORTAL_ID);\n if (!portalEl) {\n portalEl = doc.createElement('DIV');\n portalEl.id = PORTAL_ID;\n doc.body.appendChild(portalEl);\n }\n setPortalEl(portalEl);\n }\n }, [tempNode.current]);\n if (portalEl) {\n return createPortal(children, portalEl);\n }\n else {\n return _jsx(\"span\", { ref: tempNode });\n }\n}\n//# sourceMappingURL=Portal.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Transition } from \"@headlessui/react\";\nimport { CircleCheck, AlertTriangle, Info, CircleX, X } from \"lucide-react\";\nimport { Fragment, useEffect, useState, useRef } from \"react\";\nconst icons = {\n success: CircleCheck,\n error: CircleX,\n warning: AlertTriangle,\n info: Info\n};\nconst colors = {\n success: 'text-success',\n error: 'text-destructive',\n warning: 'text-attention',\n info: 'text-info'\n};\nexport function NotificationPanel({ data, onClose }) {\n const [show, setShow] = useState(true);\n const timeoutRef = useRef(null);\n const resetTimeout = () => {\n if (timeoutRef.current) {\n globalThis.clearTimeout(timeoutRef.current);\n }\n if (data.duration) {\n timeoutRef.current = setTimeout(() => setShow(false), data.duration);\n }\n };\n const clearCurrentTimeout = () => {\n if (timeoutRef.current) {\n globalThis.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n useEffect(() => {\n resetTimeout();\n return clearCurrentTimeout;\n }, [data.duration]);\n const Icon = icons[data.status] || Info;\n const color = colors[data.status] || 'text-info';\n // Global notification live region, render this permanently at the end of the document\n return (_jsx(\"div\", { \"aria-live\": \"assertive\", className: \"pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6 z-100\", children: _jsx(\"div\", { className: \"flex w-full flex-col items-center space-y-4 sm:items-end\", children: _jsx(Transition, { appear: true, show: show, as: Fragment, afterLeave: onClose, enter: \"transform ease-out duration-700 transition\", enterFrom: \"translate-y-0 opacity-0 sm:translate-y-0 sm:translate-x-2\", enterTo: \"translate-y-2 opacity-100 sm:translate-x-0\", leave: \"transition ease-in duration-300\", leaveFrom: \"opacity-100\", leaveTo: \"opacity-0\", children: _jsx(\"div\", { className: \"pointer-events-auto w-full max-w-md overflow-hidden rounded-lg bg-muted shadow-lg ring-1 ring-border\", onMouseEnter: clearCurrentTimeout, onMouseLeave: resetTimeout, children: _jsx(\"div\", { className: \"p-5\", children: _jsxs(\"div\", { className: \"flex items-start\", children: [_jsx(\"div\", { className: \"shrink-0\", children: _jsx(Icon, { className: `size-6 ${color}`, \"aria-hidden\": \"true\" }) }), _jsxs(\"div\", { className: \"ml-3 flex-1 pt-0.5 min-w-0\", children: [_jsx(\"p\", { className: \"text-sm font-semibold text-foreground break-words\", children: data.title }), data.description && (_jsx(\"p\", { className: \"mt-2 text-sm text-muted break-words whitespace-pre-wrap leading-relaxed\", children: data.description }))] }), _jsx(\"div\", { className: \"ml-4 flex shrink-0\", children: _jsxs(\"button\", { type: \"button\", className: \"inline-flex rounded-md bg-muted text-muted hover:text-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\", onClick: () => setShow(false), children: [_jsx(\"span\", { className: \"sr-only\", children: \"Close\" }), _jsx(X, { className: \"size-5\", \"aria-hidden\": \"true\" })] }) })] }) }) }) }) }) }));\n}\n//# sourceMappingURL=NotificationPanel.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from \"react\";\nimport { Portal } from \"../Portal.js\";\nimport { NotificationPanel } from \"./NotificationPanel.js\";\nimport { ToastContext } from \"./ToastContext.js\";\nexport function ToastProvider({ children }) {\n const [data, setData] = useState(null);\n const toast = (data) => {\n setData(data);\n };\n return (_jsxs(_Fragment, { children: [_jsx(ToastContext.Provider, { value: toast, children: children }), data && _jsx(Portal, { children: _jsx(NotificationPanel, { data: data, onClose: () => toast(null) }) })] }));\n}\n//# sourceMappingURL=ToastProvider.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { useToast } from \"./toast/index.js\";\nexport function DeleteModal({ idToDelete, title, content, setIdToDelete, deleteApi }) {\n const toast = useToast();\n const doDelete = async () => {\n if (!idToDelete) {\n return;\n }\n return deleteApi(idToDelete)\n .then(() => {\n toast({\n title: 'Delete succeeded',\n status: 'success'\n });\n }).catch((err) => {\n toast({\n title: 'Failed to delete',\n description: err.message ?? 'An error occurred while deleting the object',\n status: 'error'\n });\n }).finally(() => {\n setIdToDelete(undefined);\n });\n };\n return (_jsx(ConfirmModal, { title: title, content: content, isOpen: !!idToDelete, onConfirm: doDelete, onCancel: () => { setIdToDelete(undefined); } }));\n}\n//# sourceMappingURL=DeleteModal.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nexport function Divider({ className }) {\n return (_jsx(\"hr\", { className: clsx(\"w-full h-0.5 border-t-0 bg-border\", className) }));\n}\n//# sourceMappingURL=Divider.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Menu, MenuButton, MenuItems, MenuItem as _MenuItem, Transition } from '@headlessui/react';\nimport clsx from 'clsx';\nimport { Fragment } from 'react';\nexport function Dropdown({ trigger, children }) {\n return (_jsxs(Menu, { as: \"div\", className: \"relative\", children: [_jsx(MenuButton, { as: \"span\", className: \"-m-1.5 flex items-center p-1.5\", children: trigger }), _jsx(Transition, { as: Fragment, enter: \"transition ease-out duration-100\", enterFrom: \"transform opacity-0 scale-95\", enterTo: \"transform opacity-100 scale-100\", leave: \"transition ease-in duration-75\", leaveFrom: \"transform opacity-100 scale-100\", leaveTo: \"transform opacity-0 scale-95\", children: _jsx(MenuItems, { className: \"absolute right-0 z-10 mt-2.5 w-48 origin-top-right rounded-md bg-white dark:bg-slate-900 dark:border-slate-800 dark:border py-2 shadow-lg ring-1 ring-gray-900/5 dark:ring-slate-200/5 focus:outline-hidden\", children: children }) })] }));\n}\nexport function MenuItem({ children, href = '#', onClick, closeOnClick = true, isDisabled = false }) {\n return (_jsx(_MenuItem, { disabled: isDisabled, children: ({ active, close }) => (_jsx(\"a\", { href: href, onClick: (e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick && onClick(e);\n closeOnClick && close();\n }, className: clsx(active ? 'bg-gray-50 dark:bg-slate-800' : '', isDisabled ? 'opacity-50 cursor-not-allowed' : '', 'block px-3 py-1 text-sm leading-6 text-gray-900 dark:text-gray-200'), children: children })) }));\n}\n//# sourceMappingURL=Dropdown.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Listbox, ListboxButton, ListboxOption, ListboxOptions, Transition } from \"@headlessui/react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { Fragment } from \"react\";\nexport function DropdownList({ items, value, onChange }) {\n return (_jsx(Listbox, { value: value, onChange: onChange, children: ({ open }) => (_jsxs(\"div\", { className: \"relative\", children: [_jsxs(\"div\", { className: \"inline-flex divide-x divide-indigo-700 rounded-md shadow-2xs\", children: [_jsxs(\"div\", { className: \"inline-flex items-center gap-x-1.5 rounded-l-md bg-indigo-600 px-3 py-2 text-white shadow-2xs\", children: [value.name && _jsx(Check, { className: \"-ml-0.5 size-5\", \"aria-hidden\": \"true\" }), _jsx(\"p\", { className: \"text-sm font-semibold\", children: value.name || \"\" })] }), _jsxs(ListboxButton, { className: \"inline-flex items-center rounded-l-none rounded-r-md bg-indigo-600 p-2 hover:bg-indigo-700 focus:outline-hidden focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2 focus:ring-offset-gray-50\", children: [_jsx(\"span\", { className: \"sr-only\", children: \"Change selection\" }), _jsx(ChevronDown, { className: \"size-5 text-white\", \"aria-hidden\": \"true\" })] })] }), _jsx(Transition, { show: open, as: Fragment, leave: \"transition ease-in duration-100\", leaveFrom: \"opacity-100\", leaveTo: \"opacity-0\", children: _jsx(ListboxOptions, { className: \"absolute right-0 z-10 mt-2 w-72 origin-top-right divide-y divide-gray-200 overflow-hidden rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-hidden\", children: items.map((option) => (_jsx(ListboxOption, { className: ({ active }) => clsx(active ? 'bg-indigo-600 text-white' : 'text-gray-900', 'cursor-default select-none p-4 text-sm'), value: option, children: ({ selected, active }) => (_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsxs(\"div\", { className: \"flex justify-between\", children: [_jsx(\"p\", { className: selected ? 'font-semibold' : 'font-normal', children: option.name }), selected ? (_jsx(\"span\", { className: active ? 'text-white' : 'text-indigo-600', children: _jsx(Check, { className: \"size-5\", \"aria-hidden\": \"true\" }) })) : null] }), _jsx(\"p\", { className: clsx(active ? 'text-indigo-200' : 'text-gray-500', 'mt-2'), children: option.description })] })) }, option.id))) }) })] })) }));\n}\n//# sourceMappingURL=DropdownList.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Plus } from \"lucide-react\";\nimport { Button } from \"@vertesia/ui/core\";\nexport function EmptyCollection({ buttonLabel, title, children, onClick }) {\n return (_jsx(\"div\", { className: \"flex items-center justify-center h-full text-center\", children: _jsxs(\"div\", { className: \"py-12\", children: [_jsx(\"svg\", { className: \"mx-auto size-12\", fill: \"none\", viewBox: \"0 0 24 24\", stroke: \"currentColor\", \"aria-hidden\": \"true\", children: _jsx(\"path\", { vectorEffect: \"non-scaling-stroke\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: 2, d: \"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" }) }), _jsx(\"h3\", { className: \"mt-2 text-sm font-semibold\", children: title }), _jsx(\"p\", { className: \"mt-1 text-sm text-muted\", children: children }), _jsx(\"div\", { className: \"mt-6\", children: _jsxs(Button, { onClick: onClick, children: [_jsx(Plus, { className: \"-ml-0.5 mr-1.5 size-5\", \"aria-hidden\": \"true\" }), buttonLabel] }) })] }) }));\n}\n//# sourceMappingURL=EmptyCollection.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef } from \"react\";\n/**\n * TODO: TS complains that:\n * Type 'FileList' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher.\n * So as a quick fix aI use a for loop to convert FileList to File[]\n * @param files\n * @returns\n */\nfunction fileListToArray(files) {\n const ar = [];\n for (let i = 0, l = files.length; i < l; i++) {\n ar.push(files[i]);\n }\n return ar;\n}\nexport function FileUploadInput({ children, onUpload }) {\n const inputRef = useRef(null);\n const _onUpload = () => {\n if (inputRef.current?.files) {\n onUpload(fileListToArray(inputRef.current.files));\n }\n };\n return (_jsxs(\"label\", { style: { cursor: \"pointer\" }, children: [children, _jsx(\"input\", { ref: inputRef, type: \"file\", style: { display: \"none\" }, onChange: _onUpload })] }));\n}\n//TODO implement using tailwind\nexport function DropZone({ onUpload }) {\n const dropZoneProps = useDropZone({ onUpload });\n return (_jsx(\"div\", { ...dropZoneProps, className: \"flex items-center justify-center w-full h-64 border-2 border-dashed rounded-lg cursor-pointer bg-gray-50 dark:hover:bg-bray-800 dark:bg-gray-700 hover:bg-gray-100 dark:border-gray-600 dark:hover:border-gray-500 dark:hover:bg-gray-600\", children: _jsxs(\"label\", { htmlFor: \"dropzone-file\", className: \"flex flex-col items-center justify-center w-full h-full\", children: [_jsxs(\"div\", { className: \"flex flex-col items-center justify-center pt-5 pb-6\", children: [_jsx(\"svg\", { className: \"w-8 h-8 mb-4 text-gray-500 dark:text-gray-400\", \"aria-hidden\": \"true\", xmlns: \"http://www.w3.org/2000/svg\", fill: \"none\", viewBox: \"0 0 20 16\", children: _jsx(\"path\", { stroke: \"currentColor\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\", \"stroke-width\": \"2\", d: \"M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2\" }) }), _jsxs(\"p\", { className: \"mb-2 text-sm text-gray-500 dark:text-gray-400\", children: [_jsx(\"span\", { className: \"font-semibold\", children: \"Click to upload\" }), \" or drag and drop\"] }), _jsx(\"p\", { className: \"text-xs text-gray-500 dark:text-gray-400\", children: \"SVG, PNG, JPG or GIF (MAX. 800x400px)\" })] }), _jsx(\"input\", { id: \"dropzone-file\", type: \"file\", className: \"hidden\" })] }) }));\n}\nfunction _onDragEnter(el) {\n let cnt = el.__dragOver_cnt__ || 0;\n el.__dragOver_cnt__ = cnt + 1;\n return !cnt; // true if first drag o ver false if dragover already recorded\n}\nfunction _onDragLeave(el) {\n let cnt = el.__dragOver_cnt__;\n if (!cnt)\n return false;\n el.__dragOver_cnt__ = cnt - 1;\n return cnt === 1; // true if leave false if not\n}\nfunction _onDrop(el) {\n delete el.__dragOver_cnt__;\n}\nexport function useDropZone({ onUpload, dragOverClass = \"is-drag-over-on\", dropEffect = \"copy\", }) {\n const ref = useRef(null);\n const onDrop = (ev) => {\n ev.preventDefault();\n _onDrop(ref.current);\n ref.current?.classList.remove(dragOverClass);\n const items = ev.dataTransfer.items;\n if (items) {\n const promises = [];\n const traverseFileTree = (item, path = \"\") => {\n return new Promise((resolve) => {\n if (item.isFile) {\n item.file((file) => {\n Object.defineProperty(file, \"webkitRelativePath\", { value: path + file.name });\n resolve([file]);\n });\n }\n else if (item.isDirectory) {\n const dirReader = item.createReader();\n const entries = [];\n const readEntries = () => {\n dirReader.readEntries((results) => {\n if (!results.length) {\n Promise.all(entries).then((filesArrays) => resolve(filesArrays.flat()));\n }\n else {\n for (const entry of results) {\n entries.push(traverseFileTree(entry, path + item.name + \"/\"));\n }\n readEntries();\n }\n });\n };\n readEntries();\n }\n });\n };\n for (let i = 0; i < items.length; i++) {\n const entry = items[i].webkitGetAsEntry();\n if (entry) {\n promises.push(traverseFileTree(entry));\n }\n }\n Promise.all(promises).then((filesArrays) => {\n const allFiles = filesArrays.flat();\n if (allFiles.length) {\n onUpload(allFiles);\n }\n });\n }\n };\n const onDragOver = (ev) => {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = dropEffect;\n };\n const onDragEnter = () => {\n if (_onDragEnter(ref.current)) {\n ref.current?.classList.add(dragOverClass);\n }\n };\n const onDragLeave = () => {\n if (_onDragLeave(ref.current)) {\n ref.current?.classList.remove(dragOverClass);\n }\n };\n return {\n onDrop,\n onDragOver,\n onDragEnter,\n onDragLeave,\n ref,\n };\n}\n//# sourceMappingURL=FileUpload.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { VTooltip } from './shadcn/tooltip';\nimport { Info } from 'lucide-react';\nexport function FormItem({ description, required, label, className, direction = \"column\", children, disabled = false }) {\n return (_jsxs(\"div\", { className: clsx(\"flex w-full space-y-1\", className, direction === \"row\" ? \"flex-row justify-between items-center gap-2\" : \"flex-col\"), children: [_jsxs(\"div\", { className: 'flex items-center gap-1', children: [_jsxs(\"label\", { className: `text-sm font-medium mb-1 ${disabled ? \"text-muted\" : \"\"}`, children: [label, required ? _jsx(\"span\", { className: 'text-destructive -mt-4 ml-1', children: \"*\" }) : \"\"] }), description &&\n _jsx(\"div\", { className: 'mx-2 flex w-4 items-center', children: _jsx(VTooltip, { description: description, children: _jsx(Info, { className: \"size-3 text-muted\" }) }) })] }), children] }));\n}\n//# sourceMappingURL=FormItem.js.map","const INPUT_UNSTYLED = \"block m-0 p-0 w-full border-0 focus:outline-hidden focus:ring-0 bg-transparent\";\nconst INPUT_NO_PADDING = \"rounded-md text-sm flex w-full rounded-md border border-input bg-background ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\";\nconst INPUT = INPUT_NO_PADDING + \" py-1.5\";\nconst Styles = {\n INPUT_UNSTYLED,\n INPUT_NO_PADDING,\n INPUT\n};\nexport { Styles };\n//# sourceMappingURL=styles.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { Badge } from './Badge';\nimport { Input } from './shadcn/input';\nimport { Styles } from './styles';\nexport function InputList({ value = [], onChange, className, delimiters = \", \", placeholder, autoFocus }) {\n const [text, setText] = useState('');\n const onBlur = (ev) => {\n const v = ev.target.value;\n if (v && v.trim()) {\n onChange([...value, v.trim()]);\n setText('');\n }\n };\n const onKeyDown = (ev) => {\n const v = ev.target.value;\n const isEmpty = !v.trim();\n const key = ev.key;\n if (key === 'Enter' || delimiters.indexOf(key) > -1) {\n ev.preventDefault();\n if (value && !isEmpty) {\n onChange([...value, v.trim()]);\n setText('');\n }\n }\n else if (key === 'Backspace' && isEmpty) {\n if (value && value.length > 0) {\n value.pop();\n onChange([...value]);\n }\n }\n };\n const _onClick = (index) => {\n if (value && value.length > 0) {\n value.splice(index, 1);\n onChange([...value]);\n }\n };\n return (_jsxs(\"div\", { className: clsx(className, 'w-full flex flex-wrap items-center gap-1 p-2', Styles.INPUT), children: [value && value.length > 0 &&\n (value.map((v, index) => _jsx(Badge, { variant: \"secondary\", onClick: () => _onClick(index), className: 'cursor-pointer', title: v, children: _jsx(\"span\", { className: 'break-all', children: v }) }, index))), _jsx(Input, { clearable: false, className: 'placeholder:text-muted-foreground px-1 min-w-0 flex-shrink-0 min-w-[120px]', variant: 'unstyled', type: 'text', value: text, onBlur: onBlur, onKeyDown: onKeyDown, onChange: setText, placeholder: !value || value.length === 0 ? placeholder : '', autoFocus: autoFocus })] }));\n}\n//# sourceMappingURL=InputList.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nexport function Link({ underline = 'always', className, children, ...others }) {\n let underlineClass;\n if (underline === 'always') {\n underlineClass = 'underline';\n }\n else if (underline === 'hover') {\n underlineClass = 'hover:underline';\n }\n return _jsx(\"a\", { className: clsx(\"text-indigo-800 dark:text-indigo-300\", className, underlineClass), ...others, children: children });\n}\n//# sourceMappingURL=Link.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nexport function MenuList({ className, children }) {\n return (_jsx(\"ul\", { className: `${className} space-y-1 flex flex-col items-start`, children: children }));\n}\nconst MenuListItem = forwardRef(function _MenuListItem(props, ref) {\n const { current, children, className, href = '#', onClick, ...others } = props;\n return (_jsx(\"li\", { className: clsx(className, current ? 'bg-muted' : '', 'w-full p-2 pl-3 text-sm leading-6 font-semibold hover:bg-muted'), children: _jsx(\"a\", { ref: ref, href: href, onClick: (e) => {\n if (onClick) {\n e.preventDefault();\n onClick(e);\n }\n else if (href === '#') {\n e.preventDefault();\n }\n }, className: 'w-full flex items-center gap-x-3', ...others, children: children }) }));\n});\nMenuList.Item = MenuListItem;\n//# sourceMappingURL=MenuList.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { CircleX, CircleCheck, AlertTriangle, Info } from 'lucide-react';\nexport function MessageBox({ icon, status, title, children, className }) {\n let defaultIcon, titleColor, textColor, bgColor;\n switch (status) {\n case 'error': {\n defaultIcon = _jsx(CircleX, { className: \"size-5 text-destructive\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-destructive border border-destructive\";\n break;\n }\n case 'warning': {\n defaultIcon = _jsx(AlertTriangle, { className: \"size-5 text-attention\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-attention border border-attention\";\n break;\n }\n case 'success': {\n defaultIcon = _jsx(CircleCheck, { className: \"size-5 text-success\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-success border border-success\";\n break;\n }\n case 'info': {\n defaultIcon = _jsx(Info, { className: \"size-5 text-info\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-info border border-info\";\n break;\n }\n case 'default': {\n defaultIcon = _jsx(Info, { className: \"size-5 text-muted\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-muted border border-muted\";\n break;\n }\n case 'done': {\n defaultIcon = _jsx(Info, { className: \"size-5 text-done\", \"aria-hidden\": \"true\" });\n titleColor = \"\";\n textColor = \"text-foreground\";\n bgColor = \"bg-done border border-done\";\n break;\n }\n }\n return (_jsx(\"div\", { className: `rounded-md p-4 ${bgColor} ${className}`, children: _jsxs(\"div\", { className: \"flex\", children: [_jsx(\"div\", { className: \"shrink-0\", children: icon ?? defaultIcon }), _jsxs(\"div\", { className: \"w-full ml-2 px-1\", children: [title && _jsx(\"h3\", { className: `text-sm font-medium mb-2 ${titleColor}`, children: title }), _jsx(\"div\", { className: `text-sm ${textColor} break-words`, children: children })] })] }) }));\n}\nexport function ErrorBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"error\", title: title, className: className, children: _jsx(\"pre\", { children: children }) });\n}\nexport function InfoBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"info\", title: title, className: className, children: children });\n}\nexport function WarningBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"warning\", title: title, className: className, children: children });\n}\nexport function SuccessBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"success\", title: title, className: className, children: children });\n}\nexport function DefaultBox({ title, className, children }) {\n return _jsx(MessageBox, { status: \"default\", title: title, className: className, children: children });\n}\n//# sourceMappingURL=MessageBox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport { Fragment } from \"react\";\nimport { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild } from \"@headlessui/react\";\nimport { X } from \"lucide-react\";\nexport function Modal({ className, children, isOpen, onClose, noCloseButton = false, allowOverflow = false, disableCloseOnClickOutside = false, }) {\n const setOpen = (open) => {\n if (!open) {\n onClose();\n }\n };\n return (_jsx(Transition, { show: isOpen, as: Fragment, children: _jsxs(Dialog, { style: { zIndex: 50 }, as: \"div\", className: \"relative\", onClose: disableCloseOnClickOutside ? () => { } : setOpen, children: [_jsx(TransitionChild, { as: Fragment, enter: \"ease-out duration-300\", enterFrom: \"opacity-0\", enterTo: \"opacity-100\", leave: \"ease-in duration-200\", leaveFrom: \"opacity-100\", leaveTo: \"opacity-0\", unmount: true, children: _jsx(\"div\", { className: \"fixed inset-0 bg-gray-500 dark:bg-slate-800 dark:opacity-75 opacity-75 transition-opacity\" }) }), _jsx(\"div\", { className: \"fixed inset-0 z-10 w-screen overflow-y-auto\", children: _jsx(\"div\", { className: \"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\", children: _jsx(TransitionChild, { as: Fragment, enter: \"ease-out duration-300\", enterFrom: \"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\", enterTo: \"opacity-100 translate-y-0 sm:scale-100\", leave: \"ease-in duration-200\", leaveFrom: \"opacity-100 translate-y-0 sm:scale-100\", leaveTo: \"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\", children: _jsxs(DialogPanel, { className: clsx(\"p-0! relative transform rounded-lg bg-white dark:bg-slate-900 text-left dark:text-slate-100 shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-md sm:p-6\", allowOverflow ? \"overflow-visible\" : \"overflow-hidden\", className), children: [!noCloseButton && _jsx(ModalCloseButton, { onClose: onClose }), children] }) }) }) })] }) }));\n}\nfunction ModalCloseButton({ onClose }) {\n return (_jsx(\"div\", { className: \"absolute right-0 top-0 hidden pr-4 pt-4 sm:block\", children: _jsxs(\"button\", { tabIndex: -1, type: \"button\", className: \"rounded-md bg-white text-gray-400 dark:text-slate-200 dark:bg-slate-800 hover:brightness-95 focus:outline-hidden focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 hover:cursor-pointer\", onClick: onClose, children: [_jsx(\"span\", { className: \"sr-only\", children: \"Close\" }), _jsx(X, { className: \"size-6\", \"aria-hidden\": \"true\" })] }) }));\n}\nexport function ModalTitle({ children, showDivider = false }) {\n return (_jsx(\"div\", { className: showDivider ? \"border-b-solid border-b border-b-1\" : \"\", children: _jsx(DialogTitle, { as: \"h3\", className: \"py-4 pl-4 pr-8 text-base font-semibold leading-6 text-gray-900 dark:text-slate-50\", children: children }) }));\n}\nexport function ModalFooter({ children, className = \"justify-end\", fill = false }) {\n return (_jsx(\"div\", { className: clsx(\"w-full flex space-x-2 p-4 border-t-solid border-t-gray-100 dark:border-t-gray-800 border-t\", className || \"justify-end\", fill ? \"bg-gray-100 dark:bg-slate-800\" : \"\"), children: children }));\n}\nexport function ModalBody({ children, className = \"\" }) {\n return _jsx(\"div\", { className: clsx(\"p-4\", className), children: children });\n}\n//# sourceMappingURL=Modal.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport React, { useEffect } from \"react\";\nimport { Styles } from \"./styles.js\";\nfunction numberToString(value) {\n if (value == null || isNaN(value)) {\n return '';\n }\n else {\n return value.toString();\n }\n}\n/**\n * The value of this input is always a number. It can be undefined or NaN. If NaN the input value will not be updated with the NaN one.\n * If undefined the input will be updated to be empty.\n * The onChange callback is called whenever the value changes. If the input cannot be parsed as a number\n * it will be returned as NaN.\n */\nconst NumberInput = React.forwardRef(({ value, onChange, className, noScroll = false, noSpinners = false, ...others }, ref) => {\n // we need to store the state here in string\n const [textValue, setTextValue] = React.useState(numberToString(value));\n const _onChange = (ev) => {\n const value = ev.target.value;\n setTextValue(value);\n if (value === '') {\n onChange && onChange(undefined, value);\n }\n else {\n const num = parseFloat(value);\n onChange && onChange(num, value);\n }\n };\n useEffect(() => {\n // we do not update if not empty and NaN\n if (value == null || !isNaN(value)) {\n const text = numberToString(value);\n setTextValue(text);\n }\n }, [value]);\n return (_jsx(\"input\", { onWheel: noScroll ? event => { event.target.blur(); } : others.onWheel, type: 'number', value: textValue, onChange: _onChange, className: clsx(className, Styles.INPUT, { \"no-spinners\": noSpinners }, noSpinners && \"[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"), ref: ref, ...others }));\n});\nexport { NumberInput };\n//# sourceMappingURL=NumberInput.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nfunction getRealSize(size) {\n switch (size) {\n case 'xs': return 'size-2';\n case 'sm': return 'size-3';\n case 'md': return 'size-4';\n case 'lg': return 'size-5';\n case 'xl': return 'size-7';\n case '2xl': return 'size-10';\n default: throw new Error('Unexpected size: ' + size);\n }\n}\nexport function Spinner({ size, className }) {\n const sizeClass = getRealSize(size || 'md');\n return (_jsx(_Fragment, { children: _jsxs(\"svg\", { className: clsx(\"animate-[spin_0.8s_linear_infinite] text-indigo-500\", sizeClass, className), xmlns: \"http://www.w3.org/2000/svg\", fill: \"none\", viewBox: \"0 0 24 24\", children: [_jsx(\"circle\", { className: \"opacity-25\", cx: \"12\", cy: \"12\", r: \"10\", stroke: \"currentColor\", strokeWidth: \"4\" }), _jsx(\"path\", { className: \"opacity-75\", fill: \"currentColor\", d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" })] }) }));\n}\n//# sourceMappingURL=Spinner.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { Spinner } from \"./Spinner.js\";\nfunction getRealSize(size) {\n switch (size) {\n case 'xs': return 'rounded-xs px-2 py-1 text-xs gap-x-1';\n case 'sm': return 'rounded-xs px-2 py-1 text-sm gap-x-1';\n case 'md': return 'rounded-md px-2.5 py-1.5 text-sm gap-x-1.5';\n case 'lg': return 'rounded-md px-3 py-2 text-sm gap-x-1.5';\n case 'xl': return 'rounded-md px-3.5 py-2.5 text-sm gap-x-2';\n default: throw new Error('Unexpected size: ' + size);\n }\n}\nconst Variants = {\n primary: \"shadow-2xs bg-indigo-600 text-white hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\",\n secondary: \"shadow-2xs bg-white text-gray-900 hover:bg-gray-50 ring-1 ring-inset ring-gray-300\",\n soft: \"shadow-2xs bg-indigo-50 text-indigo-600 hover:bg-indigo-100\",\n ghost: \"text-indigo-600 hover:bg-indigo-100 dark:text-indigo-400 dark:hover:bg-indigo-900\",\n unstyled: \"\"\n};\nconst SpinnerVariants = {\n primary: \"text-white\",\n secondary: \"text-indigo-500\",\n soft: \"text-indigo-600\",\n ghost: \"text-indigo-600\",\n unstyled: \"text-gray-600\"\n};\nexport function Button({ title, className, type = 'button', children, size, onClick, variant = \"primary\", isLoading = false, isDisabled = false }) {\n const sizeClass = getRealSize(size || 'md');\n return (_jsxs(\"button\", { title: title, disabled: isDisabled || isLoading, onClick: onClick, type: type, className: clsx(\"whitespace-nowrap inline-flex items-center justify-center font-semibold hover:cursor-pointer\", Variants[variant], sizeClass, isDisabled && \"cursor-not-allowed text-gray-300!\", className), children: [isLoading && _jsx(Spinner, { className: SpinnerVariants[variant], size: size }), children] }));\n}\n//# sourceMappingURL=Button.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"./Button\";\nexport function Overlay({ children, overlayContent, className = \"\", overlayClassName = \"\", position = 'right', width, height, showCloseButton = true, onOpen, onClose, triggerClassName = \"\", backdropClassName = \"\", animationConfig = { type: \"spring\", stiffness: 300, damping: 30 } }) {\n const [isOpen, setIsOpen] = useState(false);\n const handleOpen = () => {\n setIsOpen(true);\n onOpen?.();\n };\n const handleClose = () => {\n setIsOpen(false);\n onClose?.();\n };\n const animationProps = getAnimationProps(position);\n const positionClasses = getPositionClasses(position, width, height);\n return (_jsxs(\"div\", { className: `flex items-center justify-center w-full ${className}`, children: [_jsx(\"div\", { onClick: handleOpen, className: `w-full align-left cursor-pointer ${triggerClassName}`, children: children }), isOpen && (_jsx(\"div\", { className: `z-45 fixed inset-0 bg-black bg-opacity-50 ${backdropClassName}`, children: _jsxs(motion.div, { ...animationProps, transition: animationConfig, className: `${positionClasses} ${overlayClassName}`, children: [showCloseButton && (_jsx(\"div\", { className: \"absolute top-2 right-2 z-10\", children: _jsx(Button, { onClick: handleClose, variant: \"primary\", children: _jsx(X, {}) }) })), _jsx(\"div\", { className: showCloseButton ? \"mt-8\" : \"\", children: overlayContent })] }) }))] }));\n}\nfunction getAnimationProps(position) {\n switch (position) {\n case 'left':\n return { initial: { x: \"-100%\" }, animate: { x: 0 }, exit: { x: \"-100%\" } };\n case 'right':\n return { initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" } };\n case 'top':\n return { initial: { y: \"-100%\" }, animate: { y: 0 }, exit: { y: \"-100%\" } };\n case 'bottom':\n return { initial: { y: \"100%\" }, animate: { y: 0 }, exit: { y: \"100%\" } };\n case 'center':\n return {\n initial: { opacity: 0, scale: 0.8 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.8 }\n };\n default:\n return { initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" } };\n }\n}\nfunction getPositionClasses(position, width, height) {\n const baseClasses = \"fixed bg-white shadow-lg p-4 relative\";\n switch (position) {\n case 'left':\n return `${baseClasses} left-0 top-[var(--header-height)] h-full ${width || 'w-80'}`;\n case 'right':\n return `${baseClasses} right-0 top-[var(--header-height)] h-full ${width || 'w-80'}`;\n case 'top':\n return `${baseClasses} top-[var(--header-height)] left-0 right-0 ${height || 'h-80'}`;\n case 'bottom':\n return `${baseClasses} bottom-0 left-0 right-0 ${height || 'h-80'}`;\n case 'center':\n return `${baseClasses} top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 ${width || 'w-96'} ${height || 'max-h-96'}`;\n default:\n return `${baseClasses} right-0 top-[var(--header-height)] h-full ${width || 'w-80'}`;\n }\n}\n//# sourceMappingURL=Overlay.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nexport class RadioOptionAdapter {\n renderOption(item) {\n return this.labelOf(item);\n }\n findById(items, id) {\n return items.find(item => this.idOf(item) === id);\n }\n}\nexport function RadioGroup({ checkColor, cols = \"grid-cols-1\", gap = \"gap-2\", value, onChange, options, checkIcon: CheckIcon = DefaultCheckIcon, adapter }) {\n const [selected, setSelected] = useState(value);\n const onSelect = (option) => {\n setSelected(option);\n onChange(option);\n };\n const selectedId = selected ? adapter.idOf(selected) : undefined;\n return (_jsx(\"div\", { className: clsx(\"grid\", cols, gap), children: options.map(option => {\n const key = adapter.idOf(option);\n return (_jsx(RadioOption, { checkColor: checkColor, isSelected: key === selectedId, option: option, adapter: adapter, onSelect: onSelect, CheckIcon: CheckIcon }, key));\n }) }));\n}\nfunction RadioOption({ checkColor, CheckIcon, adapter, isSelected, option, onSelect }) {\n const [isHighlighted, setIsHighlighted] = useState(false);\n return (_jsxs(\"div\", { className: \"flex gap-1 cursor-pointer items-center\", onClick: () => onSelect(option), onMouseEnter: () => setIsHighlighted(true), onMouseLeave: () => setIsHighlighted(false), children: [_jsx(\"div\", { className: \"\", children: _jsx(CheckIcon, { size: 24, isChecked: isSelected, isHighlighted: isHighlighted, color: checkColor }) }), _jsx(\"div\", { children: adapter.renderOption(option) })] }));\n}\nfunction DefaultCheckIcon({ size, isChecked, isHighlighted, color = \"currentColor\" }) {\n //https://www.svgrepo.com/svg/309414/checkbox-checked\n //https://www.svgrepo.com/svg/309415/checkbox-unchecked\n const opacity = isHighlighted ? 1 : 0.6;\n return isChecked ? (_jsx(\"svg\", { width: `${size}px`, height: `${size}px`, viewBox: \"0 0 24 24\", version: \"1.1\", children: _jsx(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\", children: _jsx(\"g\", { id: \"ic_fluent_checkbox_checked_24_regular\", fill: color, fillRule: \"nonzero\", opacity: opacity, children: _jsx(\"path\", { d: \"M18.25,3 C19.7687831,3 21,4.23121694 21,5.75 L21,18.25 C21,19.7687831 19.7687831,21 18.25,21 L5.75,21 C4.23121694,21 3,19.7687831 3,18.25 L3,5.75 C3,4.23121694 4.23121694,3 5.75,3 L18.25,3 Z M18.25,4.5 L5.75,4.5 C5.05964406,4.5 4.5,5.05964406 4.5,5.75 L4.5,18.25 C4.5,18.9403559 5.05964406,19.5 5.75,19.5 L18.25,19.5 C18.9403559,19.5 19.5,18.9403559 19.5,18.25 L19.5,5.75 C19.5,5.05964406 18.9403559,4.5 18.25,4.5 Z M10,14.4393398 L16.4696699,7.96966991 C16.7625631,7.6767767 17.2374369,7.6767767 17.5303301,7.96966991 C17.7965966,8.23593648 17.8208027,8.65260016 17.6029482,8.94621165 L17.5303301,9.03033009 L10.5303301,16.0303301 C10.2640635,16.2965966 9.84739984,16.3208027 9.55378835,16.1029482 L9.46966991,16.0303301 L6.46966991,13.0303301 C6.1767767,12.7374369 6.1767767,12.2625631 6.46966991,11.9696699 C6.73593648,11.7034034 7.15260016,11.6791973 7.44621165,11.8970518 L7.53033009,11.9696699 L10,14.4393398 L16.4696699,7.96966991 L10,14.4393398 Z\" }) }) }) })) : (_jsx(\"svg\", { width: `${size}px`, height: `${size}px`, viewBox: \"0 0 24 24\", version: \"1.1\", children: _jsx(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\", children: _jsx(\"g\", { id: \"ic_fluent_checkbox_unchecked_24_regular\", fill: color, fillRule: \"nonzero\", opacity: opacity, children: _jsx(\"path\", { d: \"M5.75,3 L18.25,3 C19.7687831,3 21,4.23121694 21,5.75 L21,18.25 C21,19.7687831 19.7687831,21 18.25,21 L5.75,21 C4.23121694,21 3,19.7687831 3,18.25 L3,5.75 C3,4.23121694 4.23121694,3 5.75,3 Z M5.75,4.5 C5.05964406,4.5 4.5,5.05964406 4.5,5.75 L4.5,18.25 C4.5,18.9403559 5.05964406,19.5 5.75,19.5 L18.25,19.5 C18.9403559,19.5 19.5,18.9403559 19.5,18.25 L19.5,5.75 C19.5,5.05964406 18.9403559,4.5 18.25,4.5 L5.75,4.5 Z\" }) }) }) }));\n}\n//# sourceMappingURL=RadioGroup.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Listbox, ListboxButton, ListboxOption, ListboxOptions } from \"@headlessui/react\";\nimport { X, Check, ChevronsUpDownIcon } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { useState, useEffect, useRef } from \"react\";\nimport { Button } from \"./Button\";\nimport { Center } from \"./Center\";\nfunction getFilterByFn(filterBy) {\n if (!filterBy) {\n return (o) => String(o).toLowerCase();\n }\n else if (typeof filterBy === 'string') {\n return (o) => String(o[filterBy]).toLowerCase();\n }\n else {\n return filterBy;\n }\n}\nexport function SelectBox({ clearTitle, ClearIcon = X, showFilter, filterBy, isClearable, disabled, by, options, value, onChange, className, addNew, addNewLabel, placeholder, optionLabel = (option) => String(option), label }) {\n const [filter, setFilter] = useState();\n const buttonRef = useRef(null);\n const [buttonWidth, setButtonWidth] = useState();\n useEffect(() => {\n if (buttonRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n setButtonWidth(entries[0].contentRect.width);\n });\n resizeObserver.observe(buttonRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n const onClear = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (isClearable) {\n onChange(undefined);\n }\n };\n const onFilterChange = (e) => {\n setFilter(e.target.value);\n };\n let filteredOptions = options || [];\n if (showFilter === undefined) {\n showFilter = filteredOptions?.length >= 10;\n }\n if (showFilter && filter) {\n const filterLc = filter.toLowerCase();\n const filterFn = getFilterByFn(filterBy);\n filteredOptions = filteredOptions.filter(o => filterFn(o).includes(filterLc));\n }\n const onFilterKeyDown = (e) => {\n if (e.key !== \"Escape\"\n && e.key !== \"Enter\"\n && e.key !== \"ArrowDown\"\n && e.key !== \"ArrowUp\") {\n e.stopPropagation();\n }\n };\n return (_jsx(Listbox, { value: value || null, onChange: onChange, by: by, disabled: disabled, children: () => (_jsx(\"div\", { className: 'overflow-y-visible ' + className, children: _jsxs(\"div\", { className: \"relative\", children: [_jsxs(ListboxButton, { ref: buttonRef, className: \"relative w-full cursor-default rounded-md bg-white py-1.5 text-left text-gray-900 shadow-2xs ring-1 ring-inset ring-gray-300 focus:outline-hidden focus:ring-2 focus:ring-indigo-600 dark:ring-slate-600 dark:text-slate-50 dark:bg-slate-800 sm:text-sm sm:leading-6 hover:cursor-pointer\", children: [label && _jsx(\"div\", { className: 'w-full text-gray-500 text-left px-2', children: label }), _jsx(\"span\", { className: \"block truncate pl-3 pr-14\", children: value ? optionLabel(value) : placeholder }), isClearable && value != null && _jsx(\"span\", { className: \"absolute inset-y-0 right-0 mr-5 flex items-center pr-2\", onClick: onClear, children: _jsx(ClearIcon, { title: clearTitle, className: \"size-5 text-gray-400 hover:text-red-500 cursor-pointer\", \"aria-hidden\": \"true\" }) }), !disabled &&\n _jsx(\"span\", { className: \"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\", children: _jsx(ChevronsUpDownIcon, { className: \"size-5 text-gray-400\", \"aria-hidden\": \"true\" }) })] }), _jsxs(ListboxOptions, { anchor: \"bottom\", style: { width: buttonWidth, zIndex: 100000000 }, className: \"absolute z-10 mt-1 overflow-auto rounded-md bg-white dark:ring-slate-600 dark:text-slate-50 dark:bg-slate-800 py-1 text-base shadow-lg ring-1 ring-gray-300 ring-opacity-5 focus:outline-hidden sm:text-sm\", children: [showFilter &&\n _jsx(\"div\", { className: \"p-1\", children: _jsx(\"input\", { type: \"text\", value: filter || '', onKeyDown: onFilterKeyDown, onChange: onFilterChange, className: \"w-full p-1 border border-gray-300 rounded-md dark:bg-slate-700 dark:text-slate-50\", placeholder: \"Filter...\" }) }), _jsx(\"div\", { className: \"overflow-y-auto max-h-60\", children: filteredOptions.map((option, i) => _jsx(ListOption, { option: option, optionLabel: optionLabel, className: \"hover:cursor-pointer\" }, i)) }), addNew &&\n _jsx(Center, { className: \"font-semibold py-2 border-t\", children: _jsx(Button, { variant: 'secondary', onClick: addNew, children: addNewLabel }) })] })] }) })) }));\n}\nexport function ListOption({ option, optionLabel, onClick, className }) {\n return (_jsx(ListboxOption, { className: ({ active }) => clsx(active ? 'bg-indigo-600 text-white dark:bg-indigo-800 dark:text-white' : 'text-gray-900 dark:text-slate-50', 'relative cursor-default select-none py-2 pl-3 pr-9', className), value: option, onClick: onClick, children: ({ selected, active }) => (_jsxs(_Fragment, { children: [_jsx(\"div\", { className: clsx(selected ? 'font-semibold' : 'font-inherit', 'block truncate'), children: optionLabel(option) }), selected ? (_jsx(\"div\", { className: clsx(active ? 'text-white' : 'text-indigo-600', 'absolute inset-y-0 right-0 flex items-center pr-4'), children: _jsx(Check, { className: \"size-5\", \"aria-hidden\": \"true\" }) })) : null] })) }));\n}\n//# sourceMappingURL=SelectBox.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Check } from \"lucide-react\";\nimport clsx from \"clsx\";\nimport { useMemo, useState } from \"react\";\nimport { Input } from \"./shadcn\";\nconst Default_Option_Style = \"flex-1 px-2 py-2 hover:bg-accent nowrap\";\nfunction defaultOptionLayout(option, isSelected) {\n return {\n label: String(option),\n check: isSelected ? _jsx(Check, { className: 'size-4' }) : _jsx(\"div\", { className: \"size-4\" }),\n reverse: false,\n className: Default_Option_Style,\n };\n}\nexport function SelectList({ value, options, onChange, className, optionLayout, by, noCheck, filterBy }) {\n const [selected, setSelected] = useState(value);\n const [filterValue, setFilterValue] = useState(\"\");\n const onSelect = (option) => {\n setSelected(option);\n onChange(option);\n };\n const optionEquals = useMemo(() => {\n if (typeof by === 'string') {\n return (o1, o2) => o1[by] === o2[by];\n }\n else if (!by) {\n return (o1, o2) => o1 === o2;\n }\n else {\n return by;\n }\n }, [by]);\n return (_jsxs(\"div\", { className: clsx(\"\", className), children: [filterBy && (_jsx(Input, { type: \"text\", placeholder: \"Filter...\", value: filterValue, onChange: (value) => setFilterValue(value) })), options.map((option, i) => {\n if (filterBy && !filterBy(filterValue)(option)) {\n return null;\n }\n const isSelected = selected ? optionEquals(selected, option) : false;\n let layout;\n if (optionLayout) {\n layout = optionLayout(option, isSelected);\n layout = Object.assign(defaultOptionLayout(option, isSelected), layout);\n }\n else {\n layout = defaultOptionLayout(option, isSelected);\n }\n return (_jsx(SelectListOption, { option: option, onSelect: onSelect, layout: layout, noCheck: noCheck }, i));\n })] }));\n}\nfunction SelectListOption({ option, onSelect, layout, noCheck }) {\n return (_jsxs(\"div\", { className: clsx('group flex items-center cursor-pointer gap-x-2 hover:bg-muted', layout.reverse && 'flex-row-reverse', layout.className), onClick: () => onSelect(option), children: [noCheck ? null : _jsx(\"div\", { className: \"\", children: layout.check }), _jsx(\"div\", { className: 'flex-1', children: layout.label })] }));\n}\n//# sourceMappingURL=SelectList.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { RadioGroup } from '@headlessui/react';\nimport clsx from 'clsx';\nexport function SelectStack({ onSelect, selected, options }) {\n return (_jsxs(RadioGroup, { value: selected, onChange: onSelect, children: [_jsx(RadioGroup.Label, { className: \"sr-only\", children: \"Server size\" }), _jsx(\"div\", { className: \"space-y-4\", children: options.map((option) => (_jsx(RadioGroup.Option, { value: option, className: ({ active }) => clsx(active ? 'border-border ring-2 ring-ring' : 'border-border', 'relative block cursor-pointer rounded-lg border bg-accent px-6 py-4 shadow-2xs focus:outline-hidden sm:flex sm:justify-between'), children: ({ active, checked }) => (_jsxs(_Fragment, { children: [_jsx(\"span\", { className: \"flex items-center\", children: _jsxs(\"span\", { className: \"flex flex-col text-sm\", children: [_jsx(RadioGroup.Label, { as: \"span\", className: \"font-medium text-text\", children: option.label }), option.description &&\n _jsx(RadioGroup.Description, { as: \"span\", className: \"text-muted-foreground\", children: option.description })] }) }), _jsx(\"span\", { className: clsx(active ? 'border' : 'border-2', checked ? 'border-accent-foreground' : 'border-transparent', 'pointer-events-none absolute -inset-px rounded-lg'), \"aria-hidden\": \"true\" })] })) }, option.id))) })] }));\n}\n//# sourceMappingURL=SelectStack.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Minus, X } from 'lucide-react';\nimport { Button } from './shadcn/button';\nexport function SidePanel({ isOpen, title, onClose, children, panelWidth = 768, backdrop = false }) {\n const [_panelWidth, setPanelWidth] = useState(panelWidth);\n const handleDragStart = (e) => {\n e.preventDefault();\n let isDragging = true;\n const startX = e.pageX;\n const startWidth = _panelWidth;\n const handleMouseMove = (e) => {\n if (isDragging) {\n const deltaX = startX - e.pageX;\n const newWidth = Math.max(startWidth + deltaX, 480);\n setPanelWidth(newWidth);\n }\n };\n const handleMouseUp = () => {\n isDragging = false;\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n };\n return (_jsx(AnimatePresence, { children: isOpen && (_jsxs(\"div\", { className: \"relative z-20\", children: [backdrop && (_jsx(motion.div, { className: \"fixed inset-0 bg-black/70\", initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, onClick: onClose })), _jsx(\"div\", { className: \"fixed inset-y-0 right-0 overflow-hidden\", children: _jsx(\"div\", { className: \"absolute inset-0 overflow-hidden\", children: _jsx(\"div\", { className: \"pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10 sm:pl-16\", children: _jsx(motion.div, { className: \"pointer-events-auto border-l\", style: { width: `${_panelWidth}px` }, initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" }, transition: { type: \"spring\", stiffness: 300, damping: 30 }, children: _jsxs(\"div\", { className: \"relative flex h-full\", children: [_jsx(\"div\", { className: \"absolute -left-1 top-0 bottom-0 w-3 cursor-ew-resize hover:bg-indigo-500 transition-colors flex items-center justify-center\", onMouseDown: handleDragStart, children: _jsx(Minus, { className: \"rotate-90 font-semibold\", strokeWidth: 4 }) }), _jsxs(\"div\", { className: \"flex-1 flex flex-col overflow-y-scroll gap-4 bg-background py-2 shadow-xl\", children: [title && (_jsx(\"div\", { className: \"px-2 sm:px-4\", children: _jsxs(\"div\", { className: \"flex items-start justify-between\", children: [_jsx(\"h2\", { className: \"w-full text-base font-semibold leading-6\", children: _jsx(\"div\", { className: \"text-2xl\", children: title ?? \"\" }) }), _jsx(\"div\", { className: \"ml-3 flex h-7 items-center\", children: _jsx(CloseButton, { onClose: onClose }) })] }) })), _jsx(\"div\", { className: \"px-2 sm:px-4\", children: children })] })] }) }) }) }) })] })) }));\n}\nfunction CloseButton({ onClose }) {\n return (_jsx(Button, { alt: \"Close panel\", variant: \"ghost\", onClick: onClose, children: _jsx(X, { className: \"size-6\", \"aria-hidden\": \"true\" }) }));\n}\n//# sourceMappingURL=SidePanel.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { VTooltip } from \"./shadcn/tooltip\";\nimport { Info } from \"lucide-react\";\nexport function Panel({ children, action, title, description, footer, className }) {\n return (_jsxs(\"div\", { className: `p-4 flex flex-col gap-2 rounded-sm border bg-card ${className}`, children: [_jsxs(\"div\", { className: \"flex items-center justify-between\", children: [_jsxs(\"div\", { className: \"flex items-center gap-2\", children: [_jsx(\"div\", { className: \"font-semibold text-lg\", children: title }), description && _jsx(VTooltip, { description: description, children: _jsx(Info, { className: \"size-4 text-muted\" }) })] }), action] }), children, footer &&\n _jsx(\"div\", { className: \"border-t border-muted flex flex-col-2 text-sm pt-4\", children: footer })] }));\n}\n//# sourceMappingURL=Panel.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Switch as UISwitch } from \"@headlessui/react\";\nconst sizes = {\n 'sm': ['h-5 w-8', 'size-3', 'translate-x-4'],\n 'md': ['h-6 w-11', 'size-4', 'translate-x-6'],\n 'lg': ['h-8 w-16', 'size-6', 'translate-x-9'],\n};\nexport function Switch({ value, onChange, size = 'md', children, className, disabled }) {\n const sizeClass = sizes[size];\n return (_jsxs(UISwitch, { checked: value, onChange: () => onChange(!value), className: `flex items-center ${className} ${disabled ? 'cursor-not-allowed opacity-50' : 'hover:cursor-pointer'}`, children: [_jsx(\"div\", { className: `${value ? 'bg-primary' : 'bg-muted/50'} relative inline-flex ${sizeClass[0]} items-center rounded-full border-1`, children: _jsx(\"span\", { className: `${value ? sizeClass[2] : 'translate-x-1'} inline-block ${sizeClass[1]} transform rounded-full bg-white transition` }) }), children && _jsx(\"span\", { className: \"px-2\", children: children })] }));\n}\n//# sourceMappingURL=Switch.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from \"clsx\";\nconst defaultTableCass = `\ndivide-y divide-border\n[&>tbody]:divide-y [&>tbody]:divide-border\n[&_th]:text-left [&_th]:px-3 [&_th]:py-3.5 [&_th]:text-sm [&_th]:font-normal [&_th]:text-muted-foreground\n[&_td]:px-3 [&_td]:py-4 [&_td]:text-sm\n`;\nexport function Table({ className, children, ...others }) {\n return (_jsx(\"table\", { className: clsx(defaultTableCass, className), ...others, children: children }));\n}\nexport function RowSkeleton({ columns }) {\n return (_jsx(\"tr\", { className: \"hover:bg-muted\", children: Array(columns).fill(0).map((_, index) => _jsx(\"td\", { children: _jsx(\"div\", { className: \"animate-pulse rounded-xs h-5 bg-muted\" }) }, index)) }));\n}\nexport function TBody({ isLoading = false, columns, rows = 3, children }) {\n return (_jsx(\"tbody\", { children: isLoading ?\n Array(rows).fill(0).map((_, index) => _jsx(RowSkeleton, { columns: columns }, index))\n : children }));\n}\nexport function TR({ className, children, ...others }) {\n return (_jsx(\"tr\", { className: clsx(\"hover:bg-muted hover:cursor-pointer\", className), ...others, children: children }));\n}\n//# sourceMappingURL=index.js.map","import { createContext, useContext } from \"react\";\nexport function useTabs() {\n return useContext(TabsContext);\n}\nconst TabsContext = createContext({});\nexport { TabsContext };\n//# sourceMappingURL=TabsContext.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { isValidElement, useEffect, useState } from 'react';\nimport { TabsContext, useTabs } from './TabsContext.js';\nfunction applyCurrentTab(tabs, current) {\n const name = typeof current === 'function' ? current() : current;\n let currentTab = null;\n const newTabs = [];\n for (const tab of tabs) {\n const newTab = { ...tab };\n newTab.current = false;\n newTabs.push(newTab);\n if (newTab.name === name) {\n currentTab = newTab;\n }\n }\n if (!currentTab) {\n currentTab = newTabs[0];\n }\n currentTab.current = true;\n return newTabs;\n}\nexport function Tabs({ current, onSelect, tabs, children, navigate }) {\n const [_tabs, _setTabs] = useState([]);\n useEffect(() => {\n _setTabs(applyCurrentTab(tabs, current));\n }, [current, tabs]);\n const context = {\n tabs: _tabs,\n select: (tab) => {\n if (onSelect) {\n if (onSelect(tab) === false) {\n return;\n }\n }\n if (tab.href) {\n if (navigate) {\n navigate(tab.href);\n }\n else {\n window.location.href = tab.href;\n }\n }\n else {\n _setTabs([...applyCurrentTab(_tabs, tab.name)]);\n }\n }\n };\n return (_jsx(TabsContext.Provider, { value: context, children: _jsx(\"div\", { className: \"flex flex-col h-full\", children: children }) }));\n}\nexport function TabsBar({ actions, className }) {\n const { tabs, select } = useTabs();\n const _onClick = (e, tab) => {\n e.preventDefault();\n e.stopPropagation();\n // ignore if disabled\n !tab.disabled && select(tab);\n };\n return (_jsxs(\"div\", { className: \"border-b flex items-start justify-between\", children: [_jsx(\"nav\", { className: \"flex space-x-4 px-4\", \"aria-label\": \"Tabs\", children: tabs.map((tab) => {\n const cursor = tab.disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n return (_jsx(\"a\", { href: tab.href || '#' + tab.name, onClick: (e) => _onClick(e, tab), className: clsx(tab.current\n ? 'border-indigo-500 text-indigo-600 dark:border-indigo-400 dark:text-indigo-50'\n : 'border-transparent text-gray-500 dark:text-slate-300 hover:border-slate-400 hover:text-gray-700 dark:hover:border-slate-200 dark:hover:text-gray-200 ', className, 'whitespace-nowrap border-b-2 py-2 px-1 text-sm font-medium', cursor), \"aria-current\": tab.current ? 'page' : undefined, children: tab.label }, tab.name));\n }) }), _jsx(\"div\", { className: \"flex gap-x-1\", children: actions })] }));\n}\nexport function TabsPanel({}) {\n const { tabs } = useTabs();\n const content = tabs.find((t) => t.current)?.content;\n if (!content) {\n return null;\n }\n if (isValidElement(content)) {\n return _jsx(\"div\", { className: \"h-full overflow-y-auto flex-1\", children: content });\n }\n const Component = content;\n return (_jsx(\"div\", { className: \"h-full overflow-y-auto flex-1\", children: _jsx(Component, {}) }));\n}\n//# sourceMappingURL=Tabs.js.map","import React, { useContext, useEffect, useState } from \"react\";\n//type KeysOfType<T, V> = { [K in keyof T]-?: T[K] extends V ? K : never }[keyof T];\n//type KeysNotOfType<T, V> = { [K in keyof T]-?: T[K] extends V ? never : K }[keyof T];\nexport class Property {\n _value;\n watchers = [];\n constructor(value) {\n this._value = value;\n }\n get value() {\n return this._value;\n }\n set value(value) {\n if (value !== this._value) {\n this._value = value;\n for (const watcher of this.watchers) {\n watcher(value);\n }\n }\n }\n watch(watcher) {\n this.watchers.push(watcher);\n return () => {\n this.watchers = this.watchers.filter(w => w !== watcher);\n };\n }\n}\nexport function createCompositeStateProvider(StateClass) {\n const context = React.createContext(undefined);\n StateClass.Context = context;\n return context.Provider;\n}\nexport class Slot {\n consume = undefined;\n _current;\n constructor(content) {\n this._current = content;\n }\n set current(content) {\n if (content !== this._current) {\n this._current = content;\n this.consume?.(content);\n }\n }\n get current() {\n return this._current;\n }\n withConsumer(consume) {\n this.consume = consume;\n consume && consume(this.current);\n return this;\n }\n}\nexport function useCompositeState(StateClass) {\n const context = StateClass.Context;\n if (!context) {\n throw new Error(\"Context not defined for \" + StateClass.name);\n }\n return useContext(context);\n}\nexport function useGetCompositeStateProperty(property) {\n const [value, setValue] = useState(property.value);\n useEffect(() => {\n return property.watch((value) => {\n if (typeof value === 'function') {\n setValue(() => value); // cannot directly store functions\n }\n else {\n setValue(value);\n }\n });\n }, [property]);\n return value;\n}\n// use memo on value to avoid re-computations if needed\nexport function useSetCompositeStateProperty(property, value) {\n useEffect(() => {\n property.value = value;\n return () => {\n property.value = undefined;\n };\n }, [property, value]);\n return value;\n}\n// use memo on watcher to avoid re-computations if needed\nexport function useWatchCompositeStateProperty(property, watcher) {\n useEffect(() => {\n return property.watch(watcher);\n }, [property, watcher]);\n}\nexport function useSlot(slot) {\n const [value, setValue] = useState(slot.current);\n useEffect(() => {\n slot.withConsumer(setValue);\n return () => {\n slot.withConsumer(undefined);\n };\n }, [slot]);\n return value;\n}\nexport function useWatchSlot(slot, watcher) {\n useEffect(() => {\n slot.withConsumer(watcher);\n return () => {\n slot.withConsumer(undefined);\n };\n }, [slot, watcher]);\n}\n// use memo for value if needed\nexport function useDefineSlot(slot, value) {\n useEffect(() => {\n slot.current = value;\n return () => {\n slot.current = undefined;\n };\n }, [slot, value]);\n}\n//# sourceMappingURL=CompositeState.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nconst PortalContainerContext = React.createContext(undefined);\nfunction findOrCreatePortalContainer(root, id = \"plugin-portal-container\") {\n // look only at direct children\n for (const child of Array.from(root.children)) {\n if (child instanceof HTMLElement && child.id === id) {\n return child;\n }\n }\n // not found → create\n const container = document.createElement(\"div\");\n container.id = id;\n root.appendChild(container);\n return container;\n}\nexport function PortalContainerProvider({ children, id = \"plugin-portal-container\", }) {\n const ref = React.useRef(null);\n const [container, setContainer] = React.useState(undefined);\n React.useEffect(() => {\n if (ref.current) {\n const root = ref.current.getRootNode();\n if (root instanceof ShadowRoot || root instanceof Document) {\n const container = findOrCreatePortalContainer(root, id);\n setContainer(container);\n }\n else {\n setContainer(null);\n }\n }\n }, [id]);\n // If container not discovered yet → render hidden marker only\n if (container === undefined) {\n return _jsx(\"div\", { ref: ref, style: { display: \"none\" } });\n }\n // Once container is resolved (null or HTMLElement) → provide it\n return (_jsx(PortalContainerContext.Provider, { value: container || undefined, children: children }));\n}\nexport function usePortalContainer() {\n return React.useContext(PortalContainerContext);\n}\n//# sourceMappingURL=PortalContainerProvider.js.map","import { useEffect, useState } from \"react\";\nexport class SharedState {\n _value;\n watchers = [];\n constructor(value) {\n this._value = value;\n }\n get value() {\n return this._value;\n }\n set value(value) {\n if (value !== this._value) {\n this._value = value;\n for (const watcher of this.watchers) {\n watcher(value);\n }\n }\n }\n addWatcher(watcher) {\n this.watchers.push(watcher);\n return () => {\n this.watchers = this.watchers.filter(w => w !== watcher);\n };\n }\n}\nexport function useWatchSharedState(state) {\n const [value, setValue] = useState(state.value);\n useEffect(() => {\n return state.addWatcher((value) => {\n if (typeof value === 'function') {\n setValue(() => value); // cannot directly store functions\n }\n else {\n setValue(value);\n }\n });\n }, [state]);\n return value;\n}\n// export function createSharedStateContext<T>(initialValue: T) {\n// const Context = React.createContext<SharedState<T>>(undefined as any);\n// function SharedStateProvider({ value = initialValue, children }: {\n// value?: T,\n// children: React.ReactNode\n// }) {\n// const state = useMemo(() => {\n// return new SharedState(value);\n// }, []);\n// return <Context.Provider value={state}>{children}</Context.Provider>\n// }\n// const useSharedState = () => {\n// return React.useContext(Context);\n// }\n// return {\n// Context,\n// Provider: SharedStateProvider,\n// useSharedState,\n// useWatchSharedState: () => {\n// const state = useSharedState();\n// return state ? useWatchSharedState(state) : undefined;\n// }\n// }\n// }\n//# sourceMappingURL=SharedState.js.map","import { useEffect, useRef } from \"react\";\n/**\n *\n * @param callback\n * @param skipFn an optional function to skip the callback if the event matches some condition. Return true to skip\n * @returns\n */\nexport function useClickOutside(callback, skipFn) {\n const ref = useRef(null);\n useEffect(() => {\n const handleClick = (e) => {\n if (ref.current && !ref.current.contains(e.target)) {\n if (!skipFn || !skipFn(e)) {\n callback(e);\n }\n }\n };\n // add te listener just after the render to avoid the callback to be called on the current click\n // if you are in a click context\n window.setTimeout(() => {\n document.addEventListener('click', handleClick);\n }, 0);\n return () => {\n document.removeEventListener('click', handleClick);\n };\n }, []);\n return ref;\n}\n//# sourceMappingURL=useClickOutside.js.map","import { useState } from 'react';\nexport function useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = async (text) => {\n if (!navigator?.clipboard) {\n console.warn('Clipboard not supported');\n return false;\n }\n // Try to save to clipboard then save it in the state if worked\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n }\n catch (error) {\n console.warn('Copy failed', error);\n setCopiedText(null);\n return false;\n }\n };\n return [copiedText, copy];\n}\n//# sourceMappingURL=useCopyToClipboard.js.map","import { useEffect } from \"react\";\nexport function useDarkMode(cb) {\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const _cb = (e) => cb(e.matches);\n mediaQuery.addEventListener('change', _cb);\n cb(mediaQuery.matches);\n return () => mediaQuery.removeEventListener('change', _cb);\n }, []);\n}\n//# sourceMappingURL=useDarkMode.js.map","import { useEffect, useState } from \"react\";\nexport function useDebounce(value, delay) {\n const [debounceValue, setDebounceValue] = useState(value);\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebounceValue(value);\n }, delay);\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n return debounceValue;\n}\n//# sourceMappingURL=useDebounce.js.map","import { useEffect } from \"react\";\nfunction startSse(url, onMessage, onCompleted) {\n const chunks = [];\n const sse = new EventSource(url);\n sse.addEventListener(\"message\", ev => {\n const data = JSON.parse(ev.data);\n if (data) {\n chunks.push(data);\n onMessage(chunks.join(''));\n }\n });\n sse.addEventListener(\"close\", (ev) => {\n sse.close();\n const msg = JSON.parse(ev.data);\n onCompleted(msg);\n });\n return () => {\n sse.close();\n };\n}\nexport function useEventSource(url, onMessage, onCompleted) {\n useEffect(() => {\n if (typeof url === 'function') {\n url().then(url => startSse(url, onMessage, onCompleted));\n }\n else {\n startSse(url, onMessage, onCompleted);\n }\n }, [url]);\n}\n//# sourceMappingURL=useEventSource.js.map","import { useEffect, useState } from \"react\";\nexport function useFetch(fetcher, opts) {\n if (Array.isArray(opts)) {\n opts = { deps: opts };\n }\n const options = (opts || {});\n const [error, setError] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [data, setData] = useState(options.defaultValue);\n const fetch = () => {\n options.start && options.start();\n setIsLoading(true);\n return fetcher().then((result) => {\n setData(result);\n options.onSuccess && options.onSuccess(result);\n }).catch(error => {\n setError(error);\n options.onError && options.onError(error);\n }).finally(() => {\n setIsLoading(false);\n options.end && options.end();\n });\n };\n useEffect(() => {\n if (!options.condition || options.condition()) {\n fetch();\n }\n }, options.deps);\n return { data, isLoading, error, setData, refetch: fetch };\n}\nexport function useFetchOnce(fetcher, opts) {\n if (!opts || Array.isArray(opts)) {\n opts = { deps: [] };\n }\n else if (opts) {\n opts.deps = [];\n }\n return useFetch(fetcher, opts);\n}\n//# sourceMappingURL=useFetch.js.map","import { useState } from \"react\";\nexport function useFlag(isOn = false) {\n const [state, setState] = useState(isOn);\n return {\n isOn: state,\n isOff: !state,\n set: (value) => setState(value),\n on: () => setState(true),\n off: () => setState(false),\n toggle: () => setState(!state)\n };\n}\n//# sourceMappingURL=useFlag.js.map","import { useEffect } from \"react\";\n/**\n * if leave option is true then callback will be called when the target leaves the viewport\n * otherwise when it enters the viewport\n * @param target\n * @param cb\n * @param opts\n */\nexport function useIntersectionObserver(target, cb, opts = {}) {\n useEffect(() => {\n const observer = new IntersectionObserver(entries => {\n const isEntering = entries[0].isIntersecting;\n if (opts.leave) {\n if (!isEntering) {\n cb(entries[0]);\n }\n }\n else {\n if (isEntering) {\n cb(entries[0]);\n }\n }\n }, { threshold: opts.threshold || 1 });\n if (target.current) {\n observer.observe(target.current);\n }\n return () => {\n if (target.current) {\n observer.unobserve(target.current);\n }\n };\n }, opts.deps ? opts.deps.concat(target) : [target]);\n}\n//# sourceMappingURL=useIntersectionObserver.js.map","import { useEffect, useRef } from \"react\";\nexport function useIsFirstRendering() {\n const isFirstRender = useRef(true);\n useEffect((cb) => {\n if (cb && isFirstRender.current) {\n cb();\n }\n isFirstRender.current = false;\n // ---> StrictMode: The following is REQUIRED to reset/cleanup:\n return () => { isFirstRender.current = true; };\n }, []);\n return isFirstRender.current;\n}\n//# sourceMappingURL=useIsFistRendering.js.map","import { useEffect, useLayoutEffect } from \"react\";\nconst useSafeLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\nexport { useSafeLayoutEffect };\n//# sourceMappingURL=useSafeLayoutEffect.js.map","import { useIntersectionObserver } from \"@vertesia/ui/core\";\nimport { useEffect, useRef, useState } from \"react\";\n/**\n * A hook that provides paginated search functionality with infinite scrolling support.\n */\nexport function useScrollableSearch(opts, dependencies = []) {\n const pageSize = opts.pageSize || 50;\n const [page, setPage] = useState(null);\n const [lastPayload, setLastPayload] = useState(opts.payload);\n const [error, setError] = useState(null);\n const [results, setResults] = useState([]);\n const [nextPage, setNextPage] = useState(null);\n const [isSearching, setIsSearching] = useState(false);\n // Track current request to prevent stale results\n const requestIdRef = useRef(0);\n const search = (payload) => {\n setPage(null);\n setResults([]); // Clear old results immediately\n setNextPage(null);\n setLastPayload(payload);\n };\n const searchMore = () => {\n if (nextPage !== null) {\n setPage(nextPage);\n }\n };\n useEffect(() => {\n // Increment request ID to mark previous requests as stale\n requestIdRef.current += 1;\n const currentRequestId = requestIdRef.current;\n setIsSearching(true);\n opts.search(lastPayload, page, pageSize).then(r => {\n // Only update state if this is still the current request\n if (currentRequestId !== requestIdRef.current) {\n return; // Stale request, ignore results\n }\n // If page is null, it's a new search - replace results\n // Otherwise, it's loading more - append results\n if (page === null) {\n setResults(r.result);\n }\n else {\n setResults(prev => [...prev, ...r.result]);\n }\n setNextPage(r.nextPage);\n setError(null);\n }).catch(error => {\n // Only update error if this is still the current request\n if (currentRequestId !== requestIdRef.current) {\n return; // Stale request, ignore error\n }\n setError(error);\n }).finally(() => {\n // Only update isSearching if this is still the current request\n if (currentRequestId === requestIdRef.current) {\n setIsSearching(false);\n }\n });\n }, [...dependencies, lastPayload, page]);\n // Intersection observer for infinite scrolling\n useIntersectionObserver(opts.nextPageTrigger, () => {\n if (!isSearching && nextPage) {\n searchMore();\n }\n }, { threshold: 0.1, deps: [nextPage, isSearching] });\n return {\n search,\n refresh: () => search(lastPayload),\n searchMore,\n result: results,\n page,\n hasMore: nextPage !== null,\n error,\n isSearching,\n };\n}\nexport function useDefaultScrollableSearch(opts, dependencies = []) {\n const actualOpts = {\n ...opts,\n async search(payload, page, pageSize) {\n const currentPage = page ?? 0;\n const offset = currentPage * pageSize;\n const result = await opts.search(payload, offset, pageSize);\n return {\n result,\n nextPage: result.length === 0 ? null : currentPage + 1\n };\n }\n };\n return useScrollableSearch(actualOpts, dependencies);\n}\n//# sourceMappingURL=useScrollableSearch.js.map","import { useState } from \"react\";\nexport class SharedValue {\n state;\n constructor(state) {\n this.state = state;\n }\n get() {\n return this.state[0];\n }\n set(value) {\n this.state[1](value);\n }\n}\n/**\n * Share a stateful value\n */\nexport function useSharedValue(initialValue) {\n const state = useState(initialValue);\n return new SharedValue(state);\n}\n//# sourceMappingURL=useSharedValue.js.map","import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nexport function cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n//# sourceMappingURL=cn.js.map"],"names":["getRealSize","size","Error","Avatar","src","name","shape","color","className","rounded","sizeClass","_jsx","alt","title","first","second","split","text","children","fill","viewBox","d","SvgAvatar","cn","inputs","twMerge","clsx","badgeVariants","cva","variants","variant","default","secondary","destructive","attention","success","info","done","defaultVariants","Badge","onClick","props","dotBadgeVariants","dotVariants","DotBadge","dotClassName","_jsxs","cx","cy","r","Center","PositionResolver","left","top","width","height","alignAxis","gap","constructor","this","position","pos","anchorRect","elemRect","bottom","right","align","computePosition","constraints","constrainWidth","constrainHeight","rect","DOMRect","flipAxis","axis","newAlign","flipAlign","newPos","flipPos","isElementVisibleOnAxis","clientRect","resolver","computedPos","isVisibleOnXAxis","isVisibleOnYAxis","newConstraints","isElementVisible","intersectRects","rect1","rect2","x1","Math","max","y1","x2","min","y2","isScrollable","element","hasScrollY","scrollHeight","clientHeight","hasScrollX","scrollWidth","clientWidth","style","getComputedStyle","overflowY","overflowX","PopupController","options","root","scrollableParents","visibleClientRect","context","document","documentElement","parents","parent","parentElement","push","getScrollableParents","anchor","length","getBoundingClientRect","i","l","computeVisibleClientRect","registerListeners","updateHandler","update","window","addEventListener","closeOnClick","closeOnEsc","ev","contains","target","tryClose","setTimeout","key","blockPageScroll","body","overflow","removeEventListener","open","tryOpen","cleanup","display","visibility","onOpen","close","onClose","undefined","isOpen","createPopupElement","popup","createElement","margin","padding","border","background","PopupContext","createContext","usePopupController","ctrl","useContext","DOMPopup","ctrlRef","id","zIndex","popupRef","useRef","setCtrl","useState","useEffect","_ctrl","current","Provider","value","createPortal","ref","Popup","others","OptionAdapter","filter","items","lcText","toLowerCase","item","valueOf","includes","renderOption","findById","find","idOf","createItem","_value","StringOptionAdapter","String","static","StringOptionAdapterWithCreate","getDefaultComboBoxLayout","fullWidth","unstyledInput","buttonRight","buttonWidth","maxMenuHeight","menuClass","inputClass","INPUT_NO_PADDING","optionClass","Input","Menu","Toggle","ComboBox","menuAlign","menuGap","focusOnMount","onSelect","api","layout","layoutOpts","adapter","placeholder","popupId","floor","random","popupCtrl","inputRef","Object","assign","inputBoxRef","React","useComboboxCtrl","focus","openMenu","closeMenu","toggle","toggleMenu","setInputValue","inputText","inputValue","selectedItem","showMenu","isMenuOpen","filteredItems","_Fragment","boxRef","fillWidth","ComboInput","paddingRight","getInputProps","backgroundColor","alignItems","justifyContent","getToggleButtonProps","ComboToggle","ChevronUpIcon","ChevronDownIcon","ComboMenu","highlightedIndex","maxHeight","getMenuProps","map","index","getItemProps","ComboboxController","withState","setState","_selectedItem","_filteredItems","_inputText","_highlightedIndex","_isMenuOpen","clone","updateState","popupPosition","_item","highlightIndex","navigateToTop","getElementById","querySelector","scrollIntoView","onMouseEnter","onMouseLeave","onChange","onKeyDown","decrModulo","buttonVariants","outline","ghost","link","primary","unstyled","xs","sm","md","lg","xl","icon","Button","forwardRef","asChild","isDisabled","isLoading","type","buttonElement","Slot","disabled","autoFocus","Loader2","VTooltip","description","placement","displayName","CopyButton","content","toast","isCopied","setIsCopied","e","stopPropagation","navigator","clipboard","writeText","then","status","message","duration","catch","err","console","error","Check","CopyIcon","ThemeProviderContext","theme","setTheme","ThemeProvider","defaultTheme","storageKey","localStorage","getItem","classList","remove","add","systemTheme","matchMedia","matches","setItem","useTheme","ModeOption","option","ModeToggle","Computer","Sun","Moon","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","VisuallyHidden","clip","whiteSpace","wordWrap","ModalContext","useIsInModal","ModalContextProvider","VModal","noCloseButton","allowOverflow","disableCloseOnClickOutside","handleOpenChange","Dialog","onOpenChange","DialogOverlay","DialogDescription","DialogContent","getSizeClasses","DialogClose","X","VModalTitle","show","DialogTitle","VModalBody","VModalFooter","center","DialogPrimitive","Root","DialogTrigger","Trigger","DialogPortal","Portal","Close","Overlay","Content","onOpenAutoFocus","event","preventDefault","Description","Title","noPadding","legacy","clearable","readOnly","Separator","orientation","decorative","SeparatorPrimitive","PopoverContext","Popover","hover","click","_open","setOpen","insideModal","PopoverPrimitive","modal","handleHover","PopoverTrigger","prev","PopoverAnchor","Anchor","PopoverContent","side","PopoverClose","Command","CommandPrimitive","CommandDialog","CommandInput","Search","CommandList","List","CommandEmpty","Empty","CommandGroup","Group","CommandSeparator","CommandItem","Item","CommandShortcut","VSelectBox","optionLabel","addNew","addNewLabel","filterBy","label","popupClass","isClearable","multiple","by","inline","triggerRef","setWidth","filterValue","setFilterValue","updateWidth","contentWidth","resizeObserver","ResizeObserver","observe","disconnect","isOptionSelected","selectedValues","some","v","isOptionsEqual","a","b","isEqual","filteredOptions","filterLc","filterFn","o","getFilterByFn","renderOptionsContent","SearchIcon","opt","isSelected","Array","isArray","currentValues","newValues","_onClick","SquarePlus","strokeWidth","absoluteStrokeWidth","arrayValue","slice","renderMultipleValue","singleValue","renderSingleValue","ChevronsUpDown","TabsContext","tabs","setTab","responsive","updateHash","VTabs","defaultValue","onTabChange","setValue","currentValue","hash","location","currentTab","substring","tab","handleHashChange","handleValueChange","newValue","currentState","history","state","newUrl","pathname","search","pushState","useCallback","tabName","TabsPrimitive","onValueChange","VTabsBar","handleTabChange","t","href","TabsList","TabsTrigger","warn","VTabsPanel","TabsContent","handleClick","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","sideOffset","delayDuration","labelVariants","Label","required","LabelPrimitive","Breadcrumbs","path","maxItems","separator","renderBreadcrumbItem","BreadcrumbButton","BreadcrumbPage","Breadcrumb","BreadcrumbList","Fragment","BreadcrumbItem","BreadcrumbSeparator","ChevronRight","lastThreeItems","BreadcrumbEllipsis","role","MoreHorizontal","AnimateChangeInHeight","containerRef","setHeight","entries","observedHeight","contentRect","Checkbox","CheckboxPrimitive","Indicator","DynamicLabel","labelRenderer","fallbackLabel","setLabel","setIsLoading","async","result","Promise","resolvedLabel","renderLabel","SelectionCombobox","filterType","filterValues","setFilterValues","commandInput","setCommandInput","commandInputRef","nonSelectedFilterValues","onInputCapture","currentTarget","checked","calendarStyles","DateCombobox","isRange","localDateRange","setLocalDateRange","selectedDate","Date","dateRange","handleDateChange","date","dayjs","format","actualDate","alignOffset","ReactCalendar","selectRange","returnValue","maxDate","setHours","tileClassName","view","currentDate","getTime","today","startDate","endDate","TextCombobox","StringListCombobox","tags","setTags","JSON","stringify","InputList","generateComboboxOptions","setFilters","filterGroups","f","dateValue","textValue","values","filterGroup","group","Filters","filters","join","TextFilter","selectedView","setTextValue","handleClose","handleTextFilterAdd","trim","DateFilter","setSelectedDate","setDateRange","selectedGroup","g","isDateRange","effectiveDateRange","selectedDateStart","toISOString","Calendar","SelectFilter","selectedOptions","setSelectedOptions","groupName","getFilteredOptions","filterOption","existingFilterIndex","findIndex","updatedFilters","handleOptionToggle","StringListFilter","FilterContext","FilterProvider","searchParams","URL","hasInitialized","setHasInitialized","params","URLSearchParams","toString","filterString","encodeURIComponent","firstValue","set","delete","replaceState","filtersParam","get","parsedFilters","pair","encodedName","valuesString","decodeURIComponent","startsWith","endsWith","arrayContent","encodedValue","matchingOption","shouldBeMultiple","FilterBtn","setSelectedView","ListFilter","selectedGroupType","renderFilterOptions","val","handleSelect","getAvailableFilterGroups","FilterBar","FilterClear","FilterOperator","Heading","level","h1","h2","h3","h4","h5","h6","textVariants","weight","normal","medium","semibold","Text","ResizablePanelGroup","ResizablePrimitive","PanelGroup","ResizablePanel","Panel","ResizableHandle","withHandle","PanelResizeHandle","Minus","Textarea","ConfirmModal","onConfirm","onCancel","cancelButtonRef","TriangleAlert","useToast","ToastContext","PORTAL_ID","tempNode","portalEl","setPortalEl","doc","ownerDocument","appendChild","icons","CircleCheck","CircleX","warning","AlertTriangle","Info","colors","NotificationPanel","data","setShow","timeoutRef","resetTimeout","globalThis","clearTimeout","clearCurrentTimeout","Icon","Transition","appear","as","afterLeave","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","ToastProvider","setData","DeleteModal","idToDelete","setIdToDelete","deleteApi","finally","Divider","Dropdown","trigger","MenuButton","MenuItems","MenuItem","_MenuItem","active","DropdownList","Listbox","ListboxButton","ChevronDown","ListboxOptions","ListboxOption","selected","EmptyCollection","buttonLabel","stroke","vectorEffect","strokeLinecap","strokeLinejoin","Plus","FileUploadInput","onUpload","cursor","files","ar","fileListToArray","DropZone","dropZoneProps","useDropZone","htmlFor","xmlns","dragOverClass","dropEffect","onDrop","__dragOver_cnt__","dataTransfer","promises","traverseFileTree","resolve","isFile","file","defineProperty","isDirectory","dirReader","createReader","readEntries","results","entry","all","filesArrays","flat","webkitGetAsEntry","allFiles","onDragOver","onDragEnter","el","cnt","_onDragEnter","onDragLeave","_onDragLeave","FormItem","direction","Styles","INPUT_UNSTYLED","INPUT","delimiters","setText","splice","onBlur","isEmpty","indexOf","pop","Link","underline","underlineClass","MenuList","MenuListItem","MessageBox","defaultIcon","titleColor","textColor","bgColor","ErrorBox","InfoBox","WarningBox","SuccessBox","DefaultBox","Modal","TransitionChild","unmount","DialogPanel","ModalCloseButton","tabIndex","ModalTitle","showDivider","ModalFooter","ModalBody","numberToString","isNaN","NumberInput","noScroll","noSpinners","onWheel","blur","num","parseFloat","Spinner","Variants","soft","SpinnerVariants","overlayContent","overlayClassName","showCloseButton","triggerClassName","backdropClassName","animationConfig","stiffness","damping","setIsOpen","animationProps","initial","x","animate","exit","y","opacity","scale","getAnimationProps","positionClasses","baseClasses","getPositionClasses","motion","div","transition","RadioOptionAdapter","labelOf","RadioGroup","checkColor","cols","checkIcon","CheckIcon","DefaultCheckIcon","setSelected","selectedId","RadioOption","isHighlighted","setIsHighlighted","isChecked","version","fillRule","SelectBox","clearTitle","ClearIcon","showFilter","setFilter","buttonRef","setButtonWidth","onClear","onFilterChange","onFilterKeyDown","ChevronsUpDownIcon","ListOption","defaultOptionLayout","check","reverse","SelectList","optionLayout","noCheck","optionEquals","useMemo","o1","o2","SelectListOption","SelectStack","Option","SidePanel","panelWidth","backdrop","_panelWidth","setPanelWidth","AnimatePresence","onMouseDown","isDragging","startX","pageX","startWidth","handleMouseMove","deltaX","newWidth","handleMouseUp","CloseButton","action","footer","sizes","Switch","UISwitch","Table","RowSkeleton","columns","_","TBody","rows","TR","useTabs","applyCurrentTab","newTabs","newTab","Tabs","navigate","_tabs","_setTabs","select","TabsBar","actions","TabsPanel","isValidElement","Property","watchers","watcher","watch","w","createCompositeStateProvider","StateClass","Context","consume","_current","withConsumer","useCompositeState","useGetCompositeStateProperty","property","useSetCompositeStateProperty","useWatchCompositeStateProperty","useSlot","slot","useWatchSlot","useDefineSlot","PortalContainerContext","PortalContainerProvider","container","setContainer","getRootNode","ShadowRoot","Document","child","from","HTMLElement","findOrCreatePortalContainer","usePortalContainer","SharedState","addWatcher","useWatchSharedState","useClickOutside","callback","skipFn","useCopyToClipboard","copiedText","setCopiedText","useDarkMode","cb","mediaQuery","_cb","useDebounce","delay","debounceValue","setDebounceValue","handler","startSse","url","onMessage","onCompleted","chunks","sse","EventSource","parse","msg","useEventSource","useFetch","fetcher","opts","deps","setError","fetch","start","onSuccess","onError","end","condition","refetch","useFetchOnce","useFlag","isOn","isOff","on","off","useIntersectionObserver","observer","IntersectionObserver","isEntering","isIntersecting","threshold","unobserve","concat","useIsFirstRendering","isFirstRender","useSafeLayoutEffect","useLayoutEffect","useScrollableSearch","dependencies","pageSize","page","setPage","lastPayload","setLastPayload","payload","setResults","nextPage","setNextPage","isSearching","setIsSearching","requestIdRef","searchMore","currentRequestId","nextPageTrigger","refresh","hasMore","useDefaultScrollableSearch","currentPage","offset","SharedValue","useSharedValue","initialValue"],"mappings":"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"}
|