@vertesia/ui 1.0.0 → 1.1.0-dev.20260427.060440Z
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/ComboBox.js +23 -24
- package/lib/esm/core/components/ComboBox.js.map +1 -1
- package/lib/esm/core/components/FormItem.js +2 -2
- package/lib/esm/core/components/FormItem.js.map +1 -1
- package/lib/esm/core/components/SidePanel.js +1 -1
- package/lib/esm/core/components/SidePanel.js.map +1 -1
- package/lib/esm/core/components/shadcn/collaspible.js +3 -4
- package/lib/esm/core/components/shadcn/collaspible.js.map +1 -1
- package/lib/esm/core/components/shadcn/dropdown.js +37 -12
- package/lib/esm/core/components/shadcn/dropdown.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js +6 -6
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filterBar.js +5 -3
- package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/esm/core/components/shadcn/radioGroup.js +1 -2
- package/lib/esm/core/components/shadcn/radioGroup.js.map +1 -1
- package/lib/esm/core/components/shadcn/switch.js +0 -1
- package/lib/esm/core/components/shadcn/switch.js.map +1 -1
- package/lib/esm/core/components/shadcn/tabs.js +2 -2
- package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
- package/lib/esm/core/components/shadcn/tooltip.js +17 -1
- package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
- package/lib/esm/core/hooks/PortalContainerProvider.js +9 -3
- package/lib/esm/core/hooks/PortalContainerProvider.js.map +1 -1
- package/lib/esm/env/index.js +5 -8
- package/lib/esm/env/index.js.map +1 -1
- package/lib/esm/features/agent/chat/AgentRightPanel.js +21 -11
- package/lib/esm/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/AskUserWidget.js +2 -6
- package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/esm/features/agent/chat/DocumentPanel.js +8 -5
- package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/DocumentTabBar.js +5 -13
- package/lib/esm/features/agent/chat/DocumentTabBar.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentConversation.js +57 -26
- package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +20 -16
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +56 -45
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js +3 -9
- package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useAgentStream.js +9 -5
- package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +4 -0
- package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
- package/lib/esm/features/facets/AgentRunnerFacetsNav.js +1 -1
- package/lib/esm/features/facets/AgentRunnerFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/DocumentsFacetsNav.js +3 -2
- package/lib/esm/features/facets/DocumentsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/RunsFacetsNav.js +8 -1
- package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js +1 -1
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/index.js +1 -0
- package/lib/esm/features/facets/index.js.map +1 -1
- package/lib/esm/features/facets/utils/VInteractionFacet.js +5 -5
- package/lib/esm/features/facets/utils/VInteractionFacet.js.map +1 -1
- package/lib/esm/features/index.js +1 -0
- package/lib/esm/features/index.js.map +1 -1
- package/lib/esm/features/oauth/OAuthProviderConnectButton.js +85 -0
- package/lib/esm/features/oauth/OAuthProviderConnectButton.js.map +1 -0
- package/lib/esm/features/oauth/RemoteMcpConnectionButton.js +119 -0
- package/lib/esm/features/oauth/RemoteMcpConnectionButton.js.map +1 -0
- package/lib/esm/features/oauth/index.js +4 -0
- package/lib/esm/features/oauth/index.js.map +1 -0
- package/lib/esm/features/oauth/useOAuthPopup.js +89 -0
- package/lib/esm/features/oauth/useOAuthPopup.js.map +1 -0
- package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js +9 -2
- package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/esm/features/store/objects/components/ContentOverview.js +19 -7
- package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/esm/features/store/objects/components/useContentPanelHooks.js +35 -15
- package/lib/esm/features/store/objects/components/useContentPanelHooks.js.map +1 -1
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js +3 -3
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
- package/lib/esm/features/store/objects/selection/SelectionActions.js +4 -3
- package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +11 -3
- package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +1 -5
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/esm/features/user/UserInfo.js +33 -10
- package/lib/esm/features/user/UserInfo.js.map +1 -1
- package/lib/esm/i18n/locales/ar.json +81 -98
- package/lib/esm/i18n/locales/de.json +44 -73
- package/lib/esm/i18n/locales/en.json +31 -61
- package/lib/esm/i18n/locales/es.json +55 -79
- package/lib/esm/i18n/locales/fr.json +55 -81
- package/lib/esm/i18n/locales/it.json +55 -79
- package/lib/esm/i18n/locales/ja.json +46 -75
- package/lib/esm/i18n/locales/ko.json +44 -73
- package/lib/esm/i18n/locales/pt.json +55 -79
- package/lib/esm/i18n/locales/ru.json +58 -81
- package/lib/esm/i18n/locales/tr.json +46 -75
- package/lib/esm/i18n/locales/zh-TW.json +46 -75
- package/lib/esm/i18n/locales/zh.json +46 -75
- package/lib/esm/session/UserSession.js +2 -4
- package/lib/esm/session/UserSession.js.map +1 -1
- package/lib/esm/session/UserSessionProvider.js +22 -17
- package/lib/esm/session/UserSessionProvider.js.map +1 -1
- package/lib/esm/session/auth/composable.js +20 -2
- package/lib/esm/session/auth/composable.js.map +1 -1
- package/lib/esm/session/auth/domainRouting.js +7 -0
- package/lib/esm/session/auth/domainRouting.js.map +1 -0
- package/lib/esm/shell/login/InviteAcceptModal.js +1 -0
- package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
- package/lib/esm/widgets/form/Form.js +2 -2
- package/lib/esm/widgets/form/Form.js.map +1 -1
- package/lib/esm/widgets/markdown/MarkdownRenderer.js +2 -1
- package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
- package/lib/esm/widgets/markdown/preprocessMathDelimiters.js +226 -0
- package/lib/esm/widgets/markdown/preprocessMathDelimiters.js.map +1 -0
- package/lib/esm/widgets/monacoEditor/MonacoEditor.js +40 -5
- package/lib/esm/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/esm/widgets/monacoEditor/foldingProviders.js +132 -0
- package/lib/esm/widgets/monacoEditor/foldingProviders.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/components/ComboBox.d.ts +12 -2
- package/lib/types/core/components/ComboBox.d.ts.map +1 -1
- package/lib/types/core/components/FormItem.d.ts +5 -2
- package/lib/types/core/components/FormItem.d.ts.map +1 -1
- package/lib/types/core/components/SidePanel.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/badge.d.ts +2 -2
- package/lib/types/core/components/shadcn/collaspible.d.ts +3 -3
- package/lib/types/core/components/shadcn/collaspible.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/dropdown.d.ts +11 -3
- package/lib/types/core/components/shadcn/dropdown.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts +2 -1
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/input.d.ts +1 -1
- package/lib/types/core/components/shadcn/radioGroup.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/switch.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/tabs.d.ts +4 -2
- package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/text.d.ts +1 -1
- package/lib/types/core/components/shadcn/tooltip.d.ts +1 -1
- package/lib/types/core/components/shadcn/tooltip.d.ts.map +1 -1
- package/lib/types/core/hooks/PortalContainerProvider.d.ts +1 -0
- package/lib/types/core/hooks/PortalContainerProvider.d.ts.map +1 -1
- package/lib/types/env/index.d.ts +2 -2
- package/lib/types/env/index.d.ts.map +1 -1
- package/lib/types/features/agent/chat/AgentChart.d.ts +1 -1
- package/lib/types/features/agent/chat/AgentChart.d.ts.map +1 -1
- package/lib/types/features/agent/chat/AgentRightPanel.d.ts +7 -2
- package/lib/types/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/DocumentPanel.d.ts +2 -2
- package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/DocumentTabBar.d.ts +1 -2
- package/lib/types/features/agent/chat/DocumentTabBar.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +5 -3
- package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +4 -2
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +4 -4
- package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/types/features/agent/chat/VegaLiteChart.d.ts +1 -1
- package/lib/types/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +4 -2
- package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts +1 -0
- package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
- package/lib/types/features/facets/DocumentsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/RunsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/index.d.ts +1 -0
- package/lib/types/features/facets/index.d.ts.map +1 -1
- package/lib/types/features/index.d.ts +1 -0
- package/lib/types/features/index.d.ts.map +1 -1
- package/lib/types/features/oauth/OAuthProviderConnectButton.d.ts +11 -0
- package/lib/types/features/oauth/OAuthProviderConnectButton.d.ts.map +1 -0
- package/lib/types/features/oauth/RemoteMcpConnectionButton.d.ts +25 -0
- package/lib/types/features/oauth/RemoteMcpConnectionButton.d.ts.map +1 -0
- package/lib/types/features/oauth/index.d.ts +4 -0
- package/lib/types/features/oauth/index.d.ts.map +1 -0
- package/lib/types/features/oauth/useOAuthPopup.d.ts +12 -0
- package/lib/types/features/oauth/useOAuthPopup.d.ts.map +1 -0
- package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/collections/EditCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts +3 -3
- package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts +2 -1
- package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/SelectionActions.d.ts +3 -3
- package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
- package/lib/types/features/user/UserInfo.d.ts +2 -1
- package/lib/types/features/user/UserInfo.d.ts.map +1 -1
- package/lib/types/session/UserSession.d.ts.map +1 -1
- package/lib/types/session/UserSessionProvider.d.ts +0 -1
- package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/types/session/auth/composable.d.ts +4 -0
- package/lib/types/session/auth/composable.d.ts.map +1 -1
- package/lib/types/session/auth/domainRouting.d.ts +8 -0
- package/lib/types/session/auth/domainRouting.d.ts.map +1 -0
- package/lib/types/shell/login/InviteAcceptModal.d.ts.map +1 -1
- package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
- package/lib/types/widgets/markdown/preprocessMathDelimiters.d.ts +24 -0
- package/lib/types/widgets/markdown/preprocessMathDelimiters.d.ts.map +1 -0
- package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts +2 -1
- package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/types/widgets/monacoEditor/foldingProviders.d.ts +2 -0
- package/lib/types/widgets/monacoEditor/foldingProviders.d.ts.map +1 -0
- 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-i18n.js +1 -1
- package/lib/vertesia-ui-i18n.js.map +1 -1
- package/lib/vertesia-ui-layout.js +1 -1
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-session.js +1 -1
- package/lib/vertesia-ui-session.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 +15 -15
- package/src/core/components/ComboBox.tsx +66 -29
- package/src/core/components/FormItem.tsx +9 -6
- package/src/core/components/SidePanel.tsx +5 -3
- package/src/core/components/shadcn/collaspible.tsx +5 -7
- package/src/core/components/shadcn/dropdown.tsx +68 -13
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +6 -6
- package/src/core/components/shadcn/filters/filterBar.tsx +5 -3
- package/src/core/components/shadcn/radioGroup.tsx +1 -3
- package/src/core/components/shadcn/switch.tsx +0 -2
- package/src/core/components/shadcn/tabs.tsx +15 -2
- package/src/core/components/shadcn/tooltip.tsx +20 -3
- package/src/core/hooks/PortalContainerProvider.tsx +11 -3
- package/src/env/index.ts +7 -10
- package/src/features/agent/chat/AgentRightPanel.tsx +43 -23
- package/src/features/agent/chat/DocumentPanel.tsx +21 -19
- package/src/features/agent/chat/DocumentTabBar.tsx +21 -32
- package/src/features/agent/chat/ModernAgentConversation.tsx +72 -27
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +21 -9
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +136 -115
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +0 -3
- package/src/features/agent/chat/hooks/useAgentStream.ts +13 -7
- package/src/features/agent/chat/hooks/useDocumentPanel.ts +8 -0
- package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -1
- package/src/features/facets/DocumentsFacetsNav.tsx +3 -1
- package/src/features/facets/RunsFacetsNav.tsx +9 -1
- package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +1 -1
- package/src/features/facets/index.ts +1 -0
- package/src/features/facets/utils/VInteractionFacet.tsx +12 -12
- package/src/features/index.ts +1 -0
- package/src/features/oauth/OAuthProviderConnectButton.tsx +125 -0
- package/src/features/oauth/RemoteMcpConnectionButton.tsx +274 -0
- package/src/features/oauth/index.ts +3 -0
- package/src/features/oauth/useOAuthPopup.ts +125 -0
- package/src/features/store/collections/BrowseCollectionView.tsx +3 -3
- package/src/features/store/collections/EditCollectionView.tsx +10 -1
- package/src/features/store/objects/components/ContentOverview.tsx +108 -87
- package/src/features/store/objects/components/useContentPanelHooks.ts +50 -15
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +5 -5
- package/src/features/store/objects/selection/ObjectsActionSpec.ts +2 -1
- package/src/features/store/objects/selection/SelectionActions.tsx +6 -5
- package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +12 -3
- package/src/features/user/UserInfo.tsx +82 -10
- package/src/i18n/locales/ar.json +81 -98
- package/src/i18n/locales/de.json +44 -73
- package/src/i18n/locales/en.json +31 -61
- package/src/i18n/locales/es.json +55 -79
- package/src/i18n/locales/fr.json +55 -81
- package/src/i18n/locales/it.json +55 -79
- package/src/i18n/locales/ja.json +46 -75
- package/src/i18n/locales/ko.json +44 -73
- package/src/i18n/locales/pt.json +55 -79
- package/src/i18n/locales/ru.json +58 -81
- package/src/i18n/locales/tr.json +46 -75
- package/src/i18n/locales/zh-TW.json +46 -75
- package/src/i18n/locales/zh.json +46 -75
- package/src/session/UserSession.ts +2 -5
- package/src/session/UserSessionProvider.tsx +23 -18
- package/src/session/auth/auth-flow.md +1 -1
- package/src/session/auth/composable.ts +21 -2
- package/src/session/auth/domainRouting.test.ts +26 -0
- package/src/session/auth/domainRouting.ts +13 -0
- package/src/shell/login/InviteAcceptModal.tsx +1 -0
- package/src/widgets/form/Form.tsx +2 -2
- package/src/widgets/markdown/MarkdownRenderer.tsx +2 -1
- package/src/widgets/markdown/markdown.css +12 -0
- package/src/widgets/markdown/preprocessMathDelimiters.test.ts +87 -0
- package/src/widgets/markdown/preprocessMathDelimiters.ts +229 -0
- package/src/widgets/monacoEditor/MonacoEditor.tsx +47 -4
- package/src/widgets/monacoEditor/foldingProviders.ts +122 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertesia-ui-core.js","sources":["esm/core/components/Avatar.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/Divider.js","esm/core/components/EmptyCollection.js","esm/core/components/FileUpload.js","esm/core/components/libs/utils.js","esm/core/hooks/PortalContainerProvider.js","esm/core/components/shadcn/tooltip.js","esm/core/components/FormItem.js","esm/core/components/shadcn/badge.js","esm/core/components/shadcn/input.js","esm/core/components/InputList.js","esm/core/components/Link.js","esm/core/components/MenuList.js","esm/core/components/styles.js","esm/core/components/NumberInput.js","esm/i18n/instance.js","esm/core/components/shadcn/button.js","esm/core/components/Overlay.js","esm/core/components/Portal.js","esm/core/components/shadcn/theme/ThemeProvider.js","esm/i18n/index.js","esm/core/components/shadcn/theme/ThemeSwitcher.js","esm/core/components/shadcn/card.js","esm/core/components/libs/visuallyHidden.js","esm/core/components/shadcn/modal/dialog.js","esm/core/components/shadcn/modal/ConfirmModal.js","esm/core/components/toast/ToastContext.js","esm/core/components/toast/NotificationPanel.js","esm/core/components/toast/ToastProvider.js","esm/core/components/shadcn/modal/DeleteModal.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/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/shadcn/MessageBox.js","esm/core/components/shadcn/Panel.js","esm/core/components/shadcn/switch.js","esm/core/components/shadcn/radioGroup.js","esm/core/components/shadcn/collaspible.js","esm/core/components/shadcn/dropdown.js","esm/core/components/SelectList.js","esm/core/components/SidePanel.js","esm/core/components/Spinner.js","esm/core/components/table/index.js","esm/core/components/TagsInput.js","esm/core/hooks/CompositeState.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 { 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 } 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 { 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 { 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 } from \"react/jsx-runtime\";\nimport React from \"react\";\nconst PortalContainerContext = React.createContext(undefined);\nfunction findOrCreatePortalContainer(root, id = \"plugin-portal-container\") {\n // Determine the actual parent element to search and append to\n const parentElement = root instanceof Document ? root.body : root;\n // look only at direct children\n for (const child of Array.from(parentElement.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 parentElement.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 { 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\";\nimport { usePortalContainer } from \"../../hooks/PortalContainerProvider\";\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipContent = React.forwardRef(({ className, sideOffset = 4, side = \"top\", ...props }, ref) => {\n const container = usePortalContainer();\n return (_jsx(TooltipPrimitive.Portal, { container: container, 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 border-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 }) }));\n});\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 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","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, 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, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { Badge } from './shadcn/badge';\nimport { Input } from './shadcn/input';\nimport { VTooltip } from '@vertesia/ui/core';\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 onPaste = (ev) => {\n const pastedText = ev.clipboardData.getData('text');\n if (pastedText) {\n ev.preventDefault();\n // Create a regex pattern from delimiters\n const delimiterPattern = delimiters.split('').map((char) => char === ' ' ? '\\\\s' : char.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|');\n const regex = new RegExp(`[${delimiterPattern}]+`);\n // Split the pasted text by delimiters and filter out empty values\n const newValues = pastedText\n .split(regex)\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n if (newValues.length > 0) {\n onChange([...value, ...newValues]);\n }\n setText('');\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 py-1.5', 'rounded-md text-sm 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 focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50'), children: [value && value.length > 0 &&\n (value.map((v, index) => _jsx(VTooltip, { description: 'click to remove', children: _jsx(Badge, { variant: \"secondary\", onClick: () => _onClick(index), className: 'cursor-pointer flex-shrink-0 hover:bg-destructive hover:text-destructive transition-colors', title: v, children: _jsx(\"span\", { className: 'break-all', children: v }) }, index) }, index))), _jsx(Input, { clearable: false, className: 'placeholder:text-muted px-1 flex-1 min-w-[120px]', variant: 'unstyled', type: 'text', value: text, onBlur: onBlur, onKeyDown: onKeyDown, onPaste: onPaste, 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","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 } 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 i18next from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport ar from './locales/ar.json';\nimport de from './locales/de.json';\nimport en from './locales/en.json';\nimport es from './locales/es.json';\nimport fr from './locales/fr.json';\nimport it from './locales/it.json';\nimport ja from './locales/ja.json';\nimport ko from './locales/ko.json';\nimport pt from './locales/pt.json';\nimport ru from './locales/ru.json';\nimport tr from './locales/tr.json';\nimport zh from './locales/zh.json';\nimport zhTW from './locales/zh-TW.json';\nexport const NAMESPACE = 'vertesia.ui';\n// Scoped instance — does NOT touch the global i18next singleton\nconst i18nInstance = i18next.createInstance();\nvoid i18nInstance.use(initReactI18next).init({\n resources: {\n ar: { [NAMESPACE]: ar },\n de: { [NAMESPACE]: de },\n en: { [NAMESPACE]: en },\n es: { [NAMESPACE]: es },\n fr: { [NAMESPACE]: fr },\n it: { [NAMESPACE]: it },\n ja: { [NAMESPACE]: ja },\n ko: { [NAMESPACE]: ko },\n pt: { [NAMESPACE]: pt },\n ru: { [NAMESPACE]: ru },\n tr: { [NAMESPACE]: tr },\n zh: { [NAMESPACE]: zh },\n 'zh-TW': { [NAMESPACE]: zhTW },\n },\n fallbackLng: 'en',\n ns: [NAMESPACE],\n defaultNS: NAMESPACE,\n interpolation: {\n escapeValue: false, // React already escapes\n },\n react: {\n useSuspense: false, // Translations are bundled, no async loading\n },\n});\nexport { i18nInstance };\n//# sourceMappingURL=instance.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\";\nimport { i18nInstance, NAMESPACE } from '../../../i18n/instance.js';\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 t = i18nInstance.getFixedT(null, NAMESPACE);\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 || t('misc.copiedToClipboard'),\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: t('misc.failedToCopy'),\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 ?? t('misc.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, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"./shadcn/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 } 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 } 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 } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { I18nextProvider, useTranslation } from 'react-i18next';\nimport { i18nInstance, NAMESPACE } from './instance.js';\nfunction detectLanguage(lng) {\n return lng ?? navigator.language?.split('-')[0] ?? 'en';\n}\nexport function I18nProvider({ lng, children }) {\n // Set language synchronously on first render to avoid flash of wrong language\n const language = detectLanguage(lng);\n if (i18nInstance.language !== language) {\n void i18nInstance.changeLanguage(language);\n }\n // Also react to prop changes\n useEffect(() => {\n const lang = detectLanguage(lng);\n if (i18nInstance.language !== lang) {\n void i18nInstance.changeLanguage(lang);\n }\n }, [lng]);\n return (_jsx(I18nextProvider, { i18n: i18nInstance, children: children }));\n}\n/**\n * Hook for components inside @vertesia/ui to get translation functions.\n * Always binds to the 'vertesia.ui' namespace on the scoped instance.\n */\nexport function useUITranslation() {\n return useTranslation(NAMESPACE, { i18n: i18nInstance });\n}\nexport { i18nInstance, NAMESPACE } from './instance.js';\n//# sourceMappingURL=index.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\";\nimport { useUITranslation } from \"../../../../i18n/index.js\";\nexport function ModeOption({ option, current, setTheme, icon, alt }) {\n return (_jsx(Button, { variant: current === option ? \"secondary\" : \"outline\", size: \"sm\", onClick: () => setTheme(option), alt: alt, children: icon }));\n}\nexport function ModeToggle({ label, className } = {}) {\n const { setTheme, theme } = useTheme();\n const { t } = useUITranslation();\n const resolvedLabel = label === false ? false : (label ?? t('theme.label'));\n return (_jsxs(\"div\", { className: className ?? (resolvedLabel ? \"flex justify-between px-2 items-center\" : \"flex items-center gap-1\"), children: [resolvedLabel && _jsx(\"p\", { className: \"text-sm font-semibold\", children: resolvedLabel }), _jsxs(\"div\", { className: \"flex gap-2\", children: [_jsx(ModeOption, { current: theme, option: \"system\", setTheme: setTheme, icon: _jsx(Computer, {}), alt: t('theme.system') }), _jsx(ModeOption, { current: theme, option: \"light\", setTheme: setTheme, icon: _jsx(Sun, {}), alt: t('theme.light') }), _jsx(ModeOption, { current: theme, option: \"dark\", setTheme: setTheme, icon: _jsx(Moon, {}), alt: t('theme.dark') })] })] }));\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, Fragment as _Fragment, jsxs as _jsxs } 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\";\nimport { usePortalContainer } from \"../../../hooks/PortalContainerProvider\";\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 Modal({ className, children, isOpen, onClose, description = \"Modal Description\", noCloseButton = false, allowOverflow = false, disableCloseOnClickOutside = false, size = \"md\", action }) {\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-[60vw] lg:max-w-[40vw]\";\n case \"lg\":\n return \"max-w-[80vw] md:max-w-[60vw]\";\n case \"xl\":\n return \"max-w-[95vw] lg:max-w-[80vw]\";\n default:\n return \"max-w-[60vw] lg: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: [_jsx(\"div\", { className: \"top-4 right-4 absolute\", children: _jsxs(\"div\", { className: \"flex gap-2\", children: [action && (_jsx(_Fragment, { children: action })), !noCloseButton && (_jsx(DialogClose, { onClick: () => handleOpenChange(false), asChild: true, autoFocus: false, children: _jsx(Button, { variant: \"outline\", alt: \"Close\", className: \"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: \"size-4\" }) }) }))] }) }), _jsx(ModalContextProvider, { children: children })] })] }));\n}\nexport const ModalTitle = ({ children, show = true, className, description, showDivider = false, ...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(showDivider ? \"border-b-solid border-b border-b-1 pb-2 mb-4\" : \"\", \"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 ModalBody = ({ children, className, ...props }) => {\n return (_jsx(\"div\", { className: cn(\"text-sm max-h-[80vh] overflow-y-auto\", className), ...props, children: children }));\n};\nexport const ModalFooter = ({ 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) => {\n const container = usePortalContainer();\n return (_jsxs(DialogPortal, { container: container, 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 })] }));\n});\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 { TriangleAlert } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { Modal, ModalTitle, ModalFooter } from \"./dialog\";\nimport { Button } from \"../button\";\nexport function ConfirmModal({ title, content, onConfirm, onCancel, isOpen, isLoading }) {\n const { t } = useUITranslation();\n const cancelButtonRef = useRef(null);\n return (_jsxs(Modal, { 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(ModalTitle, { 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(ModalFooter, { align: \"right\", children: [_jsx(Button, { variant: \"destructive\", onClick: onConfirm, isLoading: isLoading, children: t('modal.confirm') }), _jsx(Button, { variant: \"outline\", onClick: onCancel, ref: cancelButtonRef, children: t('modal.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, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { CircleCheck, AlertTriangle, Info, CircleX, X } from \"lucide-react\";\nimport { 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(AnimatePresence, { onExitComplete: onClose, children: show && (_jsx(motion.div, { className: \"pointer-events-auto w-full max-w-md overflow-hidden rounded-lg bg-muted shadow-lg ring-1 ring-border\", initial: { opacity: 0, x: 8 }, animate: { opacity: 1, x: 0, transition: { ease: 'easeOut', duration: 0.7 } }, exit: { opacity: 0, transition: { ease: 'easeIn', duration: 0.3 } }, 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 { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { useToast } from \"../../toast/index.js\";\nexport function DeleteModal({ idToDelete, title, content, setIdToDelete, deleteApi }) {\n const { t } = useUITranslation();\n const toast = useToast();\n const doDelete = async () => {\n if (!idToDelete) {\n return;\n }\n return deleteApi(idToDelete)\n .then(() => {\n toast({\n title: t('modal.delete.succeeded'),\n status: 'success'\n });\n }).catch((err) => {\n toast({\n title: t('modal.delete.failed'),\n description: err.message ?? t('modal.delete.error'),\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 * 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 PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\nimport { usePortalContainer } from \"../../hooks/PortalContainerProvider\";\nimport { cn } from \"../libs/utils\";\nexport const PopoverContext = React.createContext(null);\nconst Popover = ({ hover = false, click = false, modal, children, _open, onOpenChange }) => {\n const [open, setOpen] = React.useState(_open || false);\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: modal, 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 const container = usePortalContainer();\n return (_jsx(PopoverPrimitive.Portal, { container: container, 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 function usePopoverContext() {\n const ctx = React.useContext(PopoverContext);\n if (!ctx)\n throw new Error('usePopoverContext must be used within a Popover');\n return { ...ctx, close: () => ctx.setOpen(false) };\n}\nexport { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger };\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 \"./modal/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 { AlertTriangle, Check, ChevronsUpDown, LoaderCircle, SearchIcon, SquarePlus, X } from 'lucide-react';\nimport { useState, useEffect, useRef, useMemo } from 'react';\nimport { Popover, PopoverContent, PopoverTrigger, PopoverClose } from './popover';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from './command';\nimport { Input } from './input';\nimport { Button } from './button';\nimport { VTooltip } from './tooltip';\nexport function SelectBox({ options, optionLabel, value, onChange, addNew, addNewLabel, disabled, filterBy, label, placeholder, className, popupClass, isClearable, border = true, multiple = false, by, inline = false, isLoading = false, warnOnMissingValue = true, missingValueWarning = \"Value not in options list, may not be valid\", clearIcon, clearTitle }) {\n const triggerRef = useRef(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n const [filterValue, setFilterValue] = useState('');\n // Check if value is in options list (for single select only)\n const isMissingValue = useMemo(() => {\n if (!warnOnMissingValue || multiple || value == null || !options)\n return false;\n // Use the isOptionsEqual helper which respects the 'by' comparator\n return !options.some(opt => {\n if (typeof by === 'string') {\n return opt[by] === value[by];\n }\n else if (typeof by === 'function') {\n return by(opt, value);\n }\n else {\n return isEqual(opt, value);\n }\n });\n }, [warnOnMissingValue, multiple, value, options, by]);\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 || isLoading) {\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\", onWheel: (e) => { e.currentTarget.scrollTop += e.deltaY; }, children: [_jsx(CommandEmpty, { children: \"No result found.\" }), _jsx(CommandGroup, { 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: isLoading\n ? _jsx(\"div\", { className: \"flex justify-center items-center p-2 text-muted text-sm\", children: _jsx(LoaderCircle, { className: \"size-4 animate-spin\" }) })\n : renderOptionsContent() }));\n }\n return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(\"div\", { ref: triggerRef, onClick: handleTriggerClick, className: clsx(className, isLoading\n ? 'flex justify-center items-center gap-2 border border-border rounded-md p-2 text-muted text-sm'\n : clsx(border && (isMissingValue ? 'border border-destructive' : '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: isLoading ? (_jsx(LoaderCircle, { className: \"size-4 animate-spin\" })) : (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: clsx(\"flex flex-col w-full rounded-md text-sm min-h-6 items-center justify-center truncate\", !disabled && \"\", isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && \"pr-2\"), children: [label && _jsx(\"div\", { className: 'w-full text-left text-xs font-semibold', children: label }), _jsxs(\"div\", { className: clsx('w-full text-left ', !disabled && '', isMissingValue && 'text-destructive'), children: [isMissingValue && (_jsx(VTooltip, { description: missingValueWarning, placement: \"top\", asChild: true, children: _jsx(AlertTriangle, { className: \"inline-block size-4 mr-1 -mt-0.5 cursor-help\" }) })), 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: clearTitle || \"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: clearIcon ? clearIcon : _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 { SelectBox } 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 Tabs = ({ tabs, defaultValue, current, className, fullWidth, fullHeight, children, onTabChange, responsive = false, variant = \"tabs\", updateHash = true }) => {\n // Filter tabs based on is_allowed (undefined or true means visible)\n const visibleTabs = React.useMemo(() => tabs.filter(tab => tab.is_allowed === undefined || tab.is_allowed === true), [tabs]);\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 visible tabs\n if (currentTab && visibleTabs.some(tab => tab.name === currentTab)) {\n return currentTab;\n }\n // Fall back to default or first visible tab\n return defaultValue || visibleTabs[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 visible tabs\n if (currentTab && visibleTabs.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, visibleTabs, 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: visibleTabs, size: fullWidth ? visibleTabs.length : 0, current: value, setTab, responsive: responsive, variant, updateHash }, children: _jsx(TabsPrimitive.Root, { defaultValue: value || visibleTabs[0]?.name, value: value, onValueChange: handleValueChange, className: cn(\"flex-1 flex flex-col min-h-0 px-2\", fullHeight && \"h-full\", className), children: children }) }));\n};\nconst TabsBar = ({ className, sticky }) => {\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(SelectBox, { label: \"Tab\", className: cn(sticky && \"sticky top-0 bg-background z-10\", 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\" : \"\"), sticky && \"sticky top-0 bg-background z-10\", 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 TabsPanel = ({ className }) => {\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, className: className, 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\", \"flex-1 overflow-y-auto min-h-0 pt-2 pb-4\", className), ...props })));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\nexport { Tabs, TabsBar, TabsPanel, 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 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\";\nimport { Button } from \"./button\";\nexport function Breadcrumbs({ path, maxItems = 3, className, separator }) {\n const items = path || [];\n const renderBreadcrumbItem = (item) => {\n const shortenedLabel = typeof item.label === \"string\" && item.label.length > 20\n ? item.label.slice(0, 17) + \"...\"\n : item.label;\n if (item.onClick) {\n return _jsx(BreadcrumbButton, { onClick: item.onClick, href: item.href, title: typeof item.label === 'string' ? item.label : undefined, children: shortenedLabel });\n }\n else if (item.href) {\n return _jsx(BreadcrumbButton, { href: item.href, title: typeof item.label === 'string' ? item.label : undefined, children: shortenedLabel });\n }\n else {\n return _jsx(BreadcrumbPage, { children: shortenedLabel });\n }\n };\n if (items.length <= maxItems) {\n return (_jsx(Breadcrumb, { className: cn(\"w-full flex items-center\", 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 flex items-center\", 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 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, { variant: \"ghost\", size: \"md\", ref: ref, className: cn(\"p-0! hover:underline! hover:bg-background!\", 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\";\nimport { useUITranslation } from '../../../../../i18n/index.js';\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 { t } = useUITranslation();\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: t('filter.noResultsFound') }), _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\";\nimport { useUITranslation } from '../../../../../i18n/index.js';\nexport const DateCombobox = ({ filterValues, setFilterValues, isRange = false, }) => {\n const [open, setOpen] = useState(false);\n const [localDateRange, setLocalDateRange] = useState([null, null]);\n const { t } = useUITranslation();\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: t('filter.selectRange') });\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 { InputList } from \"../../../InputList\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\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\";\nimport { useUITranslation } from '../../../../../i18n/index.js';\nexport default function DateFilter({ selectedView, selectedDate, setSelectedDate, setFilters, filters, handleClose, filterGroups, }) {\n const { t } = useUITranslation();\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: t('filter.from') }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted\", children: t('filter.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: t('filter.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 \"../../../InputList\";\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\";\nimport { useUITranslation } from '../../../../i18n/index.js';\nconst FilterContext = React.createContext({});\n// Syncs filters ↔ URL. On mount, captures the initial URL param and restores matching filters\n// incrementally as filterGroups loads. URL writes are blocked until the first filterGroups load\n// so the address bar doesn't flicker. Filters not matching any filterGroup are silently dropped\n// (prevents cross-page URL contamination, e.g. a modal inheriting a parent page's filters).\n// Parse format with array indicators: filterName:value or filterName:[value1,value2]\nconst FilterProvider = ({ filters, setFilters, filterGroups, children }) => {\n const url = new URL(window.location.href);\n const searchParams = url.searchParams;\n const [initialFiltersParam] = React.useState(() => new URLSearchParams(window.location.search).get('filters'));\n const processedUrlFilters = React.useRef(new Set());\n const hasRestoredFromUrl = React.useRef(!initialFiltersParam);\n useEffect(() => {\n if (!hasRestoredFromUrl.current)\n return;\n try {\n const params = new URLSearchParams(searchParams.toString());\n if (filters.length > 0) {\n const filterString = filters.map(filter => {\n let values;\n if (filter.type === 'stringList' && Array.isArray(filter.value) && typeof filter.value[0] === 'string') {\n values = `[${filter.value.map(item => encodeURIComponent(item)).join(',')}]`;\n }\n else if (Array.isArray(filter.value)) {\n if (filter.multiple) {\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else if (filter.value.length > 1) {\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else {\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 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 if (!initialFiltersParam || filterGroups.length === 0)\n return;\n try {\n const filterPairs = initialFiltersParam.split(';');\n const newFilters = [];\n for (const pair of filterPairs) {\n const [encodedName, valuesString] = pair.split(':');\n const name = decodeURIComponent(encodedName);\n if (processedUrlFilters.current.has(name))\n continue;\n const group = filterGroups.find(g => g.name === name);\n if (!group)\n continue;\n processedUrlFilters.current.add(name);\n let values;\n if (valuesString.startsWith('[') && valuesString.endsWith(']')) {\n const arrayContent = valuesString.slice(1, -1);\n values = arrayContent ? arrayContent.split(',').map(encodedValue => decodeURIComponent(encodedValue)) : [];\n }\n else {\n values = [decodeURIComponent(valuesString)];\n }\n let filterValue;\n if (group.type === 'stringList') {\n filterValue = values;\n }\n else if (group.type === 'text') {\n filterValue = values.length === 1 ? [{ value: values[0], label: values[0] }] :\n values.map(value => ({ value, label: value }));\n }\n else {\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 { value, label };\n });\n }\n if (group.multiple && !valuesString.startsWith('[') && !valuesString.endsWith(']')) {\n if (group.type === 'stringList') {\n filterValue = values;\n }\n else if (!Array.isArray(filterValue)) {\n filterValue = [filterValue];\n }\n }\n newFilters.push({\n name,\n type: group.type,\n placeholder: group.placeholder,\n value: filterValue,\n multiple: group.multiple,\n });\n }\n if (newFilters.length > 0) {\n setFilters(prev => [...prev, ...newFilters]);\n }\n hasRestoredFromUrl.current = true;\n }\n catch (_error) {\n // ignore parse errors\n }\n }, [filterGroups, initialFiltersParam]);\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 { t } = useUITranslation();\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: t('filter.noAvailableFilters') });\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\" }), t('filter.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 ? t('filter.filterBy', { view: selectedView }) : t('filter.filterPlaceholder'), className: \"h-9 ring-0\", value: commandInput, onValueChange: (value) => {\n setCommandInput(value);\n }, ref: commandInputRef, autoFocus: true })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: t('filter.noMatchingFilters') }), _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 { t } = useUITranslation();\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: t('filter.clearAll') }));\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 { useLayoutEffect, useRef, useCallback } from \"react\";\nimport { cn } from \"../libs/utils\";\nfunction Textarea({ className, minLines, maxLines, value, ...props }) {\n const textareaRef = useRef(null);\n const growing = minLines !== undefined || maxLines !== undefined;\n const resize = useCallback(() => {\n const el = textareaRef.current;\n if (!el)\n return;\n const style = getComputedStyle(el);\n const lineHeight = parseFloat(style.lineHeight) || parseFloat(style.fontSize) * 1.5;\n const paddingTop = parseFloat(style.paddingTop) || 0;\n const paddingBottom = parseFloat(style.paddingBottom) || 0;\n const paddingY = paddingTop + paddingBottom;\n const borderTop = parseFloat(style.borderTopWidth) || 0;\n const borderBottom = parseFloat(style.borderBottomWidth) || 0;\n const borderY = borderTop + borderBottom;\n const effectiveMin = minLines ?? 1;\n const effectiveMax = maxLines ?? Infinity;\n const minHeight = effectiveMin * lineHeight + paddingY + borderY;\n const maxHeight = effectiveMax === Infinity ? Infinity : effectiveMax * lineHeight + paddingY + borderY;\n el.style.height = \"auto\";\n const contentHeight = Math.min(Math.max(el.scrollHeight, minHeight), maxHeight);\n el.style.height = `${contentHeight}px`;\n el.style.overflowY = maxHeight !== Infinity && el.scrollHeight > maxHeight ? \"auto\" : \"hidden\";\n }, [minLines, maxLines]);\n useLayoutEffect(() => {\n if (growing)\n resize();\n }, [value, growing, resize]);\n return (_jsx(\"textarea\", { ref: textareaRef, \"data-slot\": \"textarea\", value: value, 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\", growing && \"resize-none\", className), ...props }));\n}\nexport { Textarea };\n//# sourceMappingURL=textarea.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\", { className: \"whitespace-pre-wrap break-words\", 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 { useState } from \"react\";\nimport { VTooltip } from \"./tooltip\";\nimport { ChevronDown, ChevronUp, Info } from \"lucide-react\";\nimport { Button } from \"./button\";\nexport function Panel({ children, action, title, description, footer, className, collapsible, defaultCollapsed = false }) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\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\" }) })] }), _jsxs(\"div\", { className: \"flex gap-2 items-center\", children: [action, collapsible && (_jsx(Button, { variant: \"ghost\", size: \"icon\", onClick: () => setIsCollapsed(!isCollapsed), children: isCollapsed ?\n _jsx(ChevronDown, { className: \"size-4\" }) :\n _jsx(ChevronUp, { className: \"size-4\" }) }))] })] }), !isCollapsed && 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","\"use client\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"../libs/utils\";\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};\nfunction Switch({ className, size = 'md', value, onChange, children, disabled }) {\n const [trackSize, thumbSize, thumbTranslate] = sizes[size];\n const switchEl = (_jsx(SwitchPrimitive.Root, { \"data-slot\": \"switch\", checked: value, onCheckedChange: onChange, disabled: disabled, className: cn(\"data-[state=checked]:bg-primary data-[state=unchecked]:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 shrink-0 rounded-full border focus-visible:ring-3 aria-invalid:ring-3 peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\", trackSize, !children && className), children: _jsx(SwitchPrimitive.Thumb, { \"data-slot\": \"switch-thumb\", className: cn(\"bg-white rounded-full pointer-events-none block ring-0 transition-transform\", thumbSize, value ? thumbTranslate : 'translate-x-1') }) }));\n if (children) {\n return (_jsxs(\"div\", { className: cn(\"flex items-center\", className), children: [switchEl, _jsx(\"span\", { className: \"px-2\", children: children })] }));\n }\n return switchEl;\n}\nexport { Switch };\n//# sourceMappingURL=switch.js.map","\"use client\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../libs/utils\";\nfunction RadioGroupItem({ className, ...props }) {\n return (_jsx(RadioGroupPrimitive.Item, { \"data-slot\": \"radio-group-item\", className: cn(\"border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3 group/radio-group-item peer relative aspect-square shrink-0 border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50\", className), ...props, children: _jsx(RadioGroupPrimitive.Indicator, { \"data-slot\": \"radio-group-indicator\", className: \"flex size-4 items-center justify-center\", children: _jsx(\"span\", { className: \"bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full\" }) }) }));\n}\nexport class RadioGroupAdapter {\n descriptionOf(_item) { return undefined; }\n selectedClassName(_item) { return 'border-accent-foreground'; }\n}\nfunction RadioGroup({ onSelect, selected, options, adapter }) {\n const getId = (o) => adapter ? adapter.idOf(o) : o.id;\n const getLabel = (o) => adapter ? adapter.labelOf(o) : o.label;\n const getDescription = (o) => adapter ? adapter.descriptionOf(o) : o.description;\n const getSelectedClass = (o) => adapter ? adapter.selectedClassName(o) : 'border-accent-foreground';\n return (_jsx(RadioGroupPrimitive.Root, { \"data-slot\": \"radio-group\", value: selected ? getId(selected) : undefined, onValueChange: (id) => {\n const option = options.find((o) => getId(o) === id);\n if (option)\n onSelect(option);\n }, className: \"space-y-4\", children: options.map((option) => {\n const isSelected = selected ? getId(selected) === getId(option) : false;\n return (_jsx(RadioGroupPrimitive.Item, { value: getId(option), className: cn('relative block w-full cursor-pointer rounded-lg border border-border bg-accent px-6 py-4 shadow-2xs text-left', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', 'sm:flex sm:justify-between', isSelected && getSelectedClass(option)), children: _jsx(\"span\", { className: \"flex items-center\", children: _jsxs(\"span\", { className: \"flex flex-col text-sm\", children: [_jsx(\"span\", { className: \"font-medium text-text\", children: getLabel(option) }), getDescription(option) && (_jsx(\"span\", { className: \"text-muted-foreground\", children: getDescription(option) }))] }) }) }, getId(option)));\n }) }));\n}\n/** @deprecated use RadioGroupAdapter */\nexport const RadioOptionAdapter = RadioGroupAdapter;\nexport { RadioGroup, RadioGroupItem };\n//# sourceMappingURL=radioGroup.js.map","\"use client\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\";\nfunction Collapsible({ ...props }) {\n return _jsx(CollapsiblePrimitive.Root, { \"data-slot\": \"collapsible\", ...props });\n}\nfunction CollapsibleTrigger({ ...props }) {\n return (_jsx(CollapsiblePrimitive.CollapsibleTrigger, { \"data-slot\": \"collapsible-trigger\", ...props }));\n}\nfunction CollapsibleContent({ ...props }) {\n return (_jsx(CollapsiblePrimitive.CollapsibleContent, { \"data-slot\": \"collapsible-content\", ...props }));\n}\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n//# sourceMappingURL=collaspible.js.map","\"use client\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport { cn } from \"../libs/utils\";\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\";\nfunction DropdownMenu({ ...props }) {\n return _jsx(DropdownMenuPrimitive.Root, { \"data-slot\": \"dropdown-menu\", ...props });\n}\nfunction DropdownMenuPortal({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.Portal, { \"data-slot\": \"dropdown-menu-portal\", ...props }));\n}\nfunction DropdownMenuTrigger({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.Trigger, { \"data-slot\": \"dropdown-menu-trigger\", ...props }));\n}\nfunction DropdownMenuContent({ className, align = \"start\", sideOffset = 4, ...props }) {\n return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { \"data-slot\": \"dropdown-menu-content\", sideOffset: sideOffset, align: align, className: cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto data-[state=closed]:overflow-hidden\", className), ...props }) }));\n}\nfunction DropdownMenuGroup({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.Group, { \"data-slot\": \"dropdown-menu-group\", ...props }));\n}\nfunction DropdownMenuItem({ className, inset, variant = \"default\", ...props }) {\n return (_jsx(DropdownMenuPrimitive.Item, { \"data-slot\": \"dropdown-menu-item\", \"data-inset\": inset, \"data-variant\": variant, className: cn(\"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), ...props }));\n}\nfunction DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {\n return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { \"data-slot\": \"dropdown-menu-checkbox-item\", \"data-inset\": inset, className: cn(\"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), checked: checked, ...props, children: [_jsx(\"span\", { className: \"absolute right-2 flex items-center justify-center pointer-events-none\", \"data-slot\": \"dropdown-menu-checkbox-item-indicator\", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, {}) }) }), children] }));\n}\nfunction DropdownMenuRadioGroup({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.RadioGroup, { \"data-slot\": \"dropdown-menu-radio-group\", ...props }));\n}\nfunction DropdownMenuRadioItem({ className, children, inset, ...props }) {\n return (_jsxs(DropdownMenuPrimitive.RadioItem, { \"data-slot\": \"dropdown-menu-radio-item\", \"data-inset\": inset, className: cn(\"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), ...props, children: [_jsx(\"span\", { className: \"absolute right-2 flex items-center justify-center pointer-events-none\", \"data-slot\": \"dropdown-menu-radio-item-indicator\", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, {}) }) }), children] }));\n}\nfunction DropdownMenuLabel({ className, inset, ...props }) {\n return (_jsx(DropdownMenuPrimitive.Label, { \"data-slot\": \"dropdown-menu-label\", \"data-inset\": inset, className: cn(\"text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7\", className), ...props }));\n}\nfunction DropdownMenuSeparator({ className, ...props }) {\n return (_jsx(DropdownMenuPrimitive.Separator, { \"data-slot\": \"dropdown-menu-separator\", className: cn(\"bg-border -mx-1 my-1 h-px\", className), ...props }));\n}\nfunction DropdownMenuShortcut({ className, ...props }) {\n return (_jsx(\"span\", { \"data-slot\": \"dropdown-menu-shortcut\", className: cn(\"text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest\", className), ...props }));\n}\nfunction DropdownMenuSub({ ...props }) {\n return _jsx(DropdownMenuPrimitive.Sub, { \"data-slot\": \"dropdown-menu-sub\", ...props });\n}\nfunction DropdownMenuSubTrigger({ className, inset, children, ...props }) {\n return (_jsxs(DropdownMenuPrimitive.SubTrigger, { \"data-slot\": \"dropdown-menu-sub-trigger\", \"data-inset\": inset, className: cn(\"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), ...props, children: [children, _jsx(ChevronRightIcon, { className: \"cn-rtl-flip ml-auto\" })] }));\n}\nfunction DropdownMenuSubContent({ className, ...props }) {\n return (_jsx(DropdownMenuPrimitive.SubContent, { \"data-slot\": \"dropdown-menu-sub-content\", className: cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-lg p-1 shadow-lg ring-1 duration-100 z-50 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden\", className), ...props }));\n}\nexport { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };\n// High-level convenience components\nconst alignMap = { left: 'start', center: 'center', right: 'end' };\nexport function Dropdown({ trigger, children, align = 'right' }) {\n return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(\"span\", { className: \"-m-1.5 flex items-center p-1.5\", children: trigger }) }), _jsx(DropdownMenuContent, { align: alignMap[align], className: \"w-max\", children: children })] }));\n}\nexport function MenuItem({ children, href, onClick, closeOnClick = true, isDisabled = false }) {\n return (_jsx(DropdownMenuItem, { className: \"hover:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50 text-nowrap\", disabled: isDisabled, onSelect: (e) => { if (!closeOnClick)\n e.preventDefault(); }, onClick: (e) => { e.stopPropagation(); onClick?.(e); }, asChild: !!href, children: href ? _jsx(\"a\", { href: href, children: children }) : _jsx(_Fragment, { children: children }) }));\n}\n//# sourceMappingURL=dropdown.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 { useUITranslation } from \"@vertesia/ui/i18n\";\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 { t } = useUITranslation();\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: t('form.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 } 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, side = 'right', resizable = true, className, contentClassName }) {\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 const isLeft = side === 'left';\n const positionClass = isLeft ? 'left-0' : 'right-0';\n const paddingClass = isLeft ? 'pr-10 sm:pr-16' : 'pl-10 sm:pl-16';\n const borderClass = isLeft ? 'border-r' : 'border-l';\n const dragHandleClass = isLeft ? '-right-1' : '-left-1';\n const initialX = isLeft ? \"-100%\" : \"100%\";\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 ${positionClass} overflow-hidden`, children: _jsx(\"div\", { className: \"absolute inset-0 overflow-hidden\", children: _jsx(\"div\", { className: `pointer-events-none fixed inset-y-0 ${positionClass} flex max-w-full ${paddingClass}`, children: _jsx(motion.div, { className: `pointer-events-auto ${borderClass}`, style: { width: `${_panelWidth}px` }, initial: { x: initialX }, animate: { x: 0 }, exit: { x: initialX }, transition: { type: \"spring\", stiffness: 300, damping: 30 }, children: _jsxs(\"div\", { className: \"relative flex h-full\", children: [resizable && (_jsx(\"div\", { className: `absolute ${dragHandleClass} 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 bg-background shadow-xl ${className}`, children: [title && (_jsx(\"div\", { className: \"sticky top-0 z-10 bg-background px-2 sm:px-4 py-2 border-b\", 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: contentClassName ?? \"flex-1 overflow-y-auto px-2 sm:px-4 py-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, 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 } 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 THead({ children }) {\n return (_jsx(\"thead\", { className: \"sticky top-0 bg-background z-10 after:absolute after:bottom-0 after:left-0 after:w-full after:h-px after:bg-muted/20\", 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) ? (Array(rows).fill(0).map((_, index) => _jsx(RowSkeleton, { columns: columns }, index))) : (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 { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { X } from 'lucide-react';\nimport { useContext, useEffect, useRef, useState } from 'react';\nimport { Popover, PopoverContent, PopoverContext, PopoverTrigger } from './shadcn/popover';\nfunction TagsInputContent({ options, value, onChange, onOptionsChange, placeholder, className, disabled, layout = 'horizontal', creatable = false, createText = 'Create \"%value%\"', maxDropdownHeight = 200 }) {\n const popoverContext = useContext(PopoverContext);\n const [searchTerm, setSearchTerm] = useState('');\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [width, setWidth] = useState(0);\n const [pendingDeleteIndex, setPendingDeleteIndex] = useState(null);\n const inputRef = useRef(null);\n const triggerRef = useRef(null);\n const dropdownRef = useRef(null);\n const highlightedItemRef = useRef(null);\n const isOpen = popoverContext?.open ?? false;\n const setIsOpen = popoverContext?.setOpen ?? (() => { });\n // Measure trigger width for popover\n useEffect(() => {\n const element = triggerRef.current;\n if (!element)\n return;\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 // Filter options based on search term and exclude already selected\n const filteredOptions = options.filter(option => !value.includes(option) &&\n option.toLowerCase().includes(searchTerm.toLowerCase()));\n // Check if create option should be shown\n const showCreateOption = creatable && searchTerm && !value.includes(searchTerm) && !options.includes(searchTerm);\n // Total number of items (filtered options + create option if shown)\n const totalItems = filteredOptions.length + (showCreateOption ? 1 : 0);\n // Reset highlighted index when filtered options change\n useEffect(() => {\n setHighlightedIndex(0);\n }, [searchTerm, showCreateOption]);\n // Clear pending delete when user starts typing\n useEffect(() => {\n if (searchTerm !== '') {\n setPendingDeleteIndex(null);\n }\n }, [searchTerm]);\n // Scroll highlighted item into view\n useEffect(() => {\n if (isOpen && highlightedItemRef.current && dropdownRef.current) {\n highlightedItemRef.current.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth'\n });\n }\n }, [highlightedIndex, isOpen]);\n // Clear search term when popover closes and refocus input when it opens\n useEffect(() => {\n if (!isOpen) {\n setSearchTerm('');\n }\n else {\n // Ensure input stays focused when popover opens\n inputRef.current?.focus();\n }\n }, [isOpen]);\n const handleSelect = (option) => {\n onChange([...value, option]);\n setSearchTerm('');\n setIsOpen(false);\n setHighlightedIndex(0);\n setPendingDeleteIndex(null);\n };\n const handleCreate = (newTag) => {\n // Add to value\n onChange([...value, newTag]);\n // Add to options if callback provided\n if (onOptionsChange && !options.includes(newTag)) {\n onOptionsChange([...options, newTag]);\n }\n setSearchTerm('');\n setIsOpen(false);\n setHighlightedIndex(0);\n setPendingDeleteIndex(null);\n };\n const handleRemove = (option, e) => {\n e.stopPropagation();\n onChange(value.filter(v => v !== option));\n setPendingDeleteIndex(null);\n };\n const handleKeyDown = (e) => {\n // Handle special keys\n if (e.key === 'Enter' && isOpen && totalItems > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Check if we're selecting the create option\n if (highlightedIndex === filteredOptions.length && showCreateOption) {\n handleCreate(searchTerm);\n }\n else if (highlightedIndex < filteredOptions.length) {\n handleSelect(filteredOptions[highlightedIndex]);\n }\n return;\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n if (!isOpen) {\n setIsOpen(true);\n }\n else {\n setHighlightedIndex(prev => prev < totalItems - 1 ? prev + 1 : prev);\n }\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n if (!isOpen) {\n setIsOpen(true);\n }\n else {\n setHighlightedIndex(prev => (prev > 0 ? prev - 1 : 0));\n }\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n setIsOpen(false);\n return;\n }\n if (e.key === 'Backspace' && searchTerm === '' && value.length > 0) {\n // Two-step deletion: first backspace marks for deletion, second backspace deletes\n e.stopPropagation();\n const lastIndex = value.length - 1;\n if (pendingDeleteIndex === lastIndex) {\n // Second backspace: actually delete the item\n onChange(value.slice(0, -1));\n setPendingDeleteIndex(null);\n }\n else {\n // First backspace: mark for deletion\n setPendingDeleteIndex(lastIndex);\n }\n return;\n }\n // For any other key (typing characters), open dropdown\n if (!isOpen && e.key.length === 1) {\n setIsOpen(true);\n }\n };\n const handleInputClick = (e) => {\n e.stopPropagation();\n if (!disabled) {\n setIsOpen(true);\n }\n };\n const handleInputFocus = () => {\n if (!disabled) {\n setIsOpen(true);\n }\n };\n const handleContainerClick = () => {\n if (!disabled) {\n inputRef.current?.focus();\n }\n };\n return (_jsxs(\"div\", { className: clsx('relative', className), children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(\"div\", { ref: triggerRef, className: clsx('min-h-[40px] w-full rounded-md border border-input bg-background px-3 py-2', 'flex items-center gap-1', layout === 'horizontal' ? 'flex-wrap' : 'flex-col items-stretch', 'cursor-text', 'ring-offset-background', disabled && 'opacity-50 cursor-not-allowed', isOpen ? 'ring-1 ring-inset ring-ring' : ''), onClick: handleContainerClick, children: [layout === 'vertical' && value.length > 0 && (_jsx(\"div\", { className: \"flex flex-col gap-1 w-full\", children: value.map((item, index) => (_jsxs(\"span\", { className: clsx(\"inline-flex items-center justify-between gap-2 px-2 py-1 text-sm bg-primary/10 text-primary rounded-md w-full transition-all\", pendingDeleteIndex === index && \"ring-2 ring-red-300 shadow-[0_0_8px_rgba(252,165,165,0.5)]\"), children: [_jsx(\"span\", { className: \"truncate\", children: item }), _jsx(\"button\", { type: \"button\", onClick: (e) => handleRemove(item, e), disabled: disabled, className: \"hover:bg-primary/20 rounded-sm transition-colors flex-shrink-0\", children: _jsx(X, { className: \"h-3 w-3\" }) })] }, item))) })), layout === 'horizontal' && value.map((item, index) => (_jsxs(\"span\", { className: clsx(\"inline-flex items-center gap-1 px-2 py-1 text-sm bg-primary/10 text-primary rounded-md transition-all\", pendingDeleteIndex === index && \"ring-2 ring-red-300 shadow-[0_0_8px_rgba(252,165,165,0.5)]\"), children: [item, _jsx(\"button\", { type: \"button\", onClick: (e) => handleRemove(item, e), disabled: disabled, className: \"hover:bg-primary/20 rounded-sm transition-colors\", children: _jsx(X, { className: \"h-3 w-3\" }) })] }, item))), _jsx(\"input\", { ref: inputRef, type: \"text\", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), onKeyDown: handleKeyDown, onClick: handleInputClick, onFocus: handleInputFocus, disabled: disabled, placeholder: value.length === 0 ? placeholder : '', className: clsx('flex-1 min-w-[120px] bg-transparent text-sm', 'placeholder:text-muted-foreground', 'border-none outline-none focus:outline-none focus:ring-0 p-0 m-0', layout === 'vertical' && 'w-full') })] }) }), _jsx(PopoverContent, { style: { width: `${width}px` }, className: \"p-0 bg-popover border border-border shadow-lg\", align: \"start\", side: \"bottom\", onOpenAutoFocus: (e) => {\n // Prevent the popover from stealing focus from the input\n e.preventDefault();\n }, children: _jsx(\"div\", { ref: dropdownRef, className: \"overflow-y-auto\", style: { maxHeight: `${maxDropdownHeight}px` }, children: filteredOptions.length === 0 && !showCreateOption ? (_jsx(\"div\", { className: \"px-3 py-2 text-sm text-muted-foreground\", children: searchTerm ? 'No options found' : 'No more options available' })) : (_jsxs(_Fragment, { children: [filteredOptions.length > 0 && (_jsx(\"ul\", { className: \"py-1\", children: filteredOptions.map((option, index) => (_jsx(\"li\", { ref: (el) => {\n if (index === highlightedIndex) {\n highlightedItemRef.current = el;\n }\n }, onClick: () => handleSelect(option), onMouseEnter: () => setHighlightedIndex(index), className: clsx('px-3 py-2 text-sm cursor-pointer transition-colors', index === highlightedIndex\n ? 'bg-blue-500/20 text-foreground'\n : 'hover:bg-accent/50'), children: option }, option))) })), showCreateOption && (_jsxs(_Fragment, { children: [filteredOptions.length > 0 && (_jsx(\"div\", { className: \"border-t border-border\" })), _jsx(\"div\", { ref: (el) => {\n if (highlightedIndex === filteredOptions.length) {\n highlightedItemRef.current = el;\n }\n }, onClick: () => handleCreate(searchTerm), onMouseEnter: () => setHighlightedIndex(filteredOptions.length), className: clsx('px-3 py-2 text-sm cursor-pointer transition-colors text-primary', highlightedIndex === filteredOptions.length\n ? 'bg-blue-500/20'\n : 'hover:bg-accent/50'), children: createText.replace('%value%', searchTerm) })] }))] })) }) })] }));\n}\nexport function TagsInput(props) {\n return (_jsx(Popover, { click: true, children: _jsx(TagsInputContent, { ...props }) }));\n}\n//# sourceMappingURL=TagsInput.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 /**\n * Optional name for debugging purposes.\n * When provided, changes to this property will be logged to the console in development mode,\n * making it easier to track state changes and debug reactive updates.\n *\n * Example: new Property<string>('', 'streamingText')\n * Will log: [CompositeState] streamingText: \"\" → \"new value\"\n */\n name;\n constructor(value, name) {\n this._value = value;\n this.name = name;\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/**\n * Computed property that derives its value from other properties.\n * Automatically recalculates when any of its dependencies change.\n *\n * Think of it like a spreadsheet formula: if cell A1 = 5 and A2 = 10,\n * then A3 = A1 + A2 will automatically update to 15. If A1 changes to 7,\n * A3 automatically becomes 17.\n *\n * @example Basic usage\n * ```typescript\n * class MyState {\n * count = new Property(0, 'count');\n * multiplier = new Property(2, 'multiplier');\n *\n * // Automatically recalculates when count or multiplier changes\n * result = new ComputedProperty(\n * () => (this.count.value || 0) * (this.multiplier.value || 0),\n * [this.count, this.multiplier],\n * 'result'\n * );\n * }\n *\n * state.count.value = 5; // result automatically becomes 10\n * state.multiplier.value = 3; // result automatically becomes 15\n * ```\n *\n * @example Derived state\n * ```typescript\n * class EditorState {\n * workingCopy = new Property<Interaction>();\n * sourceInteraction = new Property<Interaction>();\n *\n * // Automatically true when workingCopy differs from source\n * isDirty = new ComputedProperty(\n * () => JSON.stringify(this.workingCopy.value) !==\n * JSON.stringify(this.sourceInteraction.value),\n * [this.workingCopy, this.sourceInteraction],\n * 'isDirty'\n * );\n * }\n * ```\n *\n * @example Cascading computed properties\n * ```typescript\n * class State {\n * a = new Property(1);\n * b = new Property(2);\n * sum = new ComputedProperty(() => a.value + b.value, [a, b]);\n * doubled = new ComputedProperty(() => sum.value * 2, [sum]);\n * }\n * ```\n *\n * Benefits:\n * - ✅ Automatic updates when dependencies change\n * - ✅ Memoization - only recalculates when needed\n * - ✅ Composable - can depend on other ComputedProperties\n * - ✅ Type-safe with full TypeScript support\n *\n * When to use:\n * - ✅ For derived state (values calculated from other values)\n * - ✅ When dependencies are other Properties or ComputedProperties\n * - ❌ NOT for async operations (use regular methods instead)\n * - ❌ NOT if compute function has side effects\n *\n * @important Remember to call dispose() when the ComputedProperty is no longer needed\n * to prevent memory leaks by unsubscribing from all dependencies.\n */\nexport class ComputedProperty {\n compute;\n _value;\n watchers = [];\n unsubscribers = [];\n /**\n * Optional name for debugging purposes.\n * When provided, recalculations will be logged to the console in development mode.\n */\n name;\n /**\n * @param compute - Function that calculates the derived value\n * @param dependencies - Array of Properties this computed value depends on\n * @param name - Optional name for debugging\n */\n constructor(compute, dependencies, name) {\n this.compute = compute;\n this.name = name;\n this.recalculate();\n // Watch all dependencies - when any changes, recalculate\n for (const dep of dependencies) {\n this.unsubscribers.push(dep.watch(() => this.recalculate()));\n }\n }\n recalculate() {\n const newValue = this.compute();\n if (newValue !== this._value) {\n this._value = newValue;\n for (const watcher of this.watchers) {\n watcher(newValue);\n }\n }\n }\n get value() {\n return this._value;\n }\n watch(watcher) {\n this.watchers.push(watcher);\n return () => {\n this.watchers = this.watchers.filter(w => w !== watcher);\n };\n }\n /**\n * Dispose of this ComputedProperty by unsubscribing from all dependencies.\n * Call this when the ComputedProperty is no longer needed to prevent memory leaks.\n *\n * @example\n * ```typescript\n * const computed = new ComputedProperty(...);\n *\n * // Later, when cleaning up:\n * computed.dispose();\n * ```\n */\n dispose() {\n for (const unsub of this.unsubscribers) {\n unsub();\n }\n this.watchers = [];\n }\n}\n//# sourceMappingURL=CompositeState.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","Center","clsx","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","props","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","_jsxs","_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","onClick","onMouseEnter","onMouseLeave","onChange","onKeyDown","decrModulo","Divider","EmptyCollection","buttonLabel","stroke","vectorEffect","strokeLinecap","strokeLinejoin","strokeWidth","Button","Plus","FileUploadInput","onUpload","cursor","type","files","ar","fileListToArray","DropZone","dropZoneProps","useDropZone","htmlFor","xmlns","dragOverClass","dropEffect","onDrop","preventDefault","__dragOver_cnt__","classList","remove","dataTransfer","promises","traverseFileTree","path","Promise","resolve","isFile","file","defineProperty","isDirectory","dirReader","createReader","entries","readEntries","results","entry","all","then","filesArrays","flat","webkitGetAsEntry","allFiles","onDragOver","onDragEnter","el","cnt","_onDragEnter","add","onDragLeave","_onDragLeave","cn","inputs","twMerge","PortalContainerContext","PortalContainerProvider","container","setContainer","getRootNode","ShadowRoot","Document","child","Array","from","HTMLElement","appendChild","findOrCreatePortalContainer","usePortalContainer","TooltipProvider","TooltipPrimitive","Tooltip","Root","TooltipTrigger","Trigger","TooltipContent","forwardRef","sideOffset","side","Portal","Content","VTooltip","description","placement","asChild","delayDuration","FormItem","required","label","direction","disabled","Info","displayName","badgeVariants","cva","variants","variant","default","secondary","destructive","attention","success","info","done","defaultVariants","Badge","dotBadgeVariants","dotVariants","DotBadge","dotClassName","cx","cy","r","xs","sm","md","lg","xl","unstyled","noPadding","legacy","clearable","readOnly","X","InputList","delimiters","autoFocus","setText","v","splice","_onClick","onBlur","trim","isEmpty","indexOf","pop","onPaste","pastedText","clipboardData","getData","delimiterPattern","char","replace","join","regex","RegExp","newValues","Link","underline","underlineClass","MenuList","MenuListItem","href","e","Item","Styles","INPUT_UNSTYLED","INPUT","numberToString","isNaN","toString","NumberInput","noScroll","noSpinners","textValue","setTextValue","onWheel","event","blur","num","parseFloat","NAMESPACE","i18nInstance","i18next","createInstance","use","initReactI18next","init","resources","de","en","es","fr","it","ja","ko","pt","ru","tr","zh","fallbackLng","ns","defaultNS","interpolation","escapeValue","react","useSuspense","buttonVariants","outline","ghost","link","primary","icon","isDisabled","isLoading","buttonElement","Slot","Loader2","CopyButton","content","toast","isCopied","setIsCopied","t","getFixedT","stopPropagation","navigator","clipboard","writeText","status","message","duration","catch","err","console","error","Check","CopyIcon","Overlay","overlayContent","overlayClassName","showCloseButton","triggerClassName","backdropClassName","animationConfig","stiffness","damping","setIsOpen","animationProps","initial","x","animate","exit","y","opacity","scale","getAnimationProps","positionClasses","baseClasses","getPositionClasses","motion","div","transition","PORTAL_ID","tempNode","portalEl","setPortalEl","doc","ownerDocument","ThemeProviderContext","theme","setTheme","ThemeProvider","defaultTheme","storageKey","localStorage","getItem","systemTheme","matchMedia","matches","setItem","useTheme","useUITranslation","useTranslation","i18n","ModeOption","option","ModeToggle","resolvedLabel","Computer","Sun","Moon","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","VisuallyHidden","clip","whiteSpace","wordWrap","ModalContext","useIsInModal","ModalContextProvider","Modal","noCloseButton","allowOverflow","disableCloseOnClickOutside","action","handleOpenChange","Dialog","onOpenChange","DialogOverlay","DialogDescription","DialogContent","getSizeClasses","DialogClose","ModalTitle","show","showDivider","DialogTitle","ModalBody","ModalFooter","center","DialogPrimitive","DialogTrigger","DialogPortal","Close","onOpenAutoFocus","Description","Title","ConfirmModal","onConfirm","onCancel","cancelButtonRef","TriangleAlert","useToast","ToastContext","icons","CircleCheck","CircleX","warning","AlertTriangle","colors","NotificationPanel","data","setShow","timeoutRef","resetTimeout","globalThis","clearTimeout","clearCurrentTimeout","Icon","AnimatePresence","onExitComplete","ease","ToastProvider","setData","DeleteModal","idToDelete","setIdToDelete","deleteApi","async","finally","Separator","orientation","decorative","SeparatorPrimitive","PopoverContext","Popover","hover","click","modal","_open","setOpen","PopoverPrimitive","handleHover","PopoverTrigger","prev","PopoverAnchor","Anchor","PopoverContent","PopoverClose","usePopoverContext","ctx","Command","CommandPrimitive","CommandDialog","CommandInput","Search","CommandList","List","CommandEmpty","Empty","CommandGroup","Group","CommandSeparator","CommandItem","CommandShortcut","SelectBox","optionLabel","addNew","addNewLabel","filterBy","popupClass","isClearable","multiple","by","inline","warnOnMissingValue","missingValueWarning","clearIcon","clearTitle","triggerRef","setWidth","filterValue","setFilterValue","isMissingValue","useMemo","some","opt","isEqual","updateWidth","contentWidth","resizeObserver","ResizeObserver","observe","disconnect","isOptionSelected","selectedValues","isOptionsEqual","a","b","filteredOptions","filterLc","filterFn","o","getFilterByFn","renderOptionsContent","SearchIcon","currentTarget","scrollTop","deltaY","isSelected","isArray","currentValues","SquarePlus","absoluteStrokeWidth","LoaderCircle","arrayValue","slice","renderMultipleValue","singleValue","renderSingleValue","ChevronsUpDown","TabsContext","tabs","setTab","responsive","updateHash","Tabs","defaultValue","fullHeight","onTabChange","visibleTabs","tab","is_allowed","setValue","currentValue","hash","location","currentTab","substring","handleHashChange","handleValueChange","newValue","currentState","history","state","newUrl","pathname","search","pushState","useCallback","tabName","TabsPrimitive","onValueChange","TabsBar","sticky","handleTabChange","TabsList","TabsTrigger","warn","TabsPanel","TabsContent","handleClick","labelVariants","Label","LabelPrimitive","Breadcrumbs","maxItems","separator","renderBreadcrumbItem","shortenedLabel","BreadcrumbButton","BreadcrumbPage","Breadcrumb","BreadcrumbList","Fragment","BreadcrumbItem","BreadcrumbSeparator","ChevronRight","lastThreeItems","BreadcrumbEllipsis","role","MoreHorizontal","AnimateChangeInHeight","containerRef","setHeight","observedHeight","contentRect","Checkbox","CheckboxPrimitive","Indicator","DynamicLabel","labelRenderer","fallbackLabel","setLabel","setIsLoading","result","renderLabel","SelectionCombobox","filterType","filterValues","setFilterValues","commandInput","setCommandInput","commandInputRef","nonSelectedFilterValues","onInputCapture","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","generateComboboxOptions","setFilters","filterGroups","f","dateValue","values","filterGroup","group","Filters","filters","TextFilter","selectedView","handleClose","handleTextFilterAdd","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","initialFiltersParam","URLSearchParams","get","processedUrlFilters","Set","hasRestoredFromUrl","params","filterString","encodeURIComponent","firstValue","set","delete","replaceState","filterPairs","newFilters","pair","encodedName","valuesString","decodeURIComponent","has","startsWith","endsWith","arrayContent","encodedValue","matchingOption","_error","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","minLines","maxLines","textareaRef","growing","resize","lineHeight","fontSize","paddingY","paddingTop","paddingBottom","borderY","borderTopWidth","borderBottomWidth","effectiveMax","Infinity","minHeight","contentHeight","useLayoutEffect","MessageBox","defaultIcon","titleColor","textColor","bgColor","ErrorBox","InfoBox","WarningBox","SuccessBox","DefaultBox","footer","collapsible","defaultCollapsed","isCollapsed","setIsCollapsed","ChevronDown","ChevronUp","sizes","Switch","trackSize","thumbSize","thumbTranslate","switchEl","SwitchPrimitive","onCheckedChange","Thumb","RadioGroupItem","RadioGroupPrimitive","RadioGroupAdapter","descriptionOf","selectedClassName","RadioGroup","selected","getId","getLabel","labelOf","getDescription","RadioOptionAdapter","Collapsible","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","DropdownMenu","DropdownMenuPrimitive","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","inset","DropdownMenuCheckboxItem","CheckboxItem","ItemIndicator","CheckIcon","DropdownMenuRadioGroup","DropdownMenuRadioItem","RadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","Sub","DropdownMenuSubTrigger","SubTrigger","ChevronRightIcon","DropdownMenuSubContent","SubContent","alignMap","Dropdown","trigger","MenuItem","defaultOptionLayout","check","reverse","SelectList","optionLayout","noCheck","setSelected","optionEquals","o1","o2","SelectListOption","SidePanel","panelWidth","backdrop","resizable","contentClassName","_panelWidth","setPanelWidth","isLeft","positionClass","paddingClass","borderClass","dragHandleClass","initialX","onMouseDown","isDragging","startX","pageX","startWidth","handleMouseMove","deltaX","newWidth","handleMouseUp","CloseButton","Spinner","Table","THead","RowSkeleton","columns","_","TBody","rows","TR","TagsInputContent","onOptionsChange","creatable","createText","maxDropdownHeight","popoverContext","searchTerm","setSearchTerm","setHighlightedIndex","pendingDeleteIndex","setPendingDeleteIndex","dropdownRef","highlightedItemRef","showCreateOption","totalItems","block","behavior","handleCreate","newTag","handleRemove","lastIndex","onFocus","TagsInput","Property","watchers","watcher","watch","w","createCompositeStateProvider","StateClass","Context","consume","_current","withConsumer","useCompositeState","useGetCompositeStateProperty","property","useSetCompositeStateProperty","useWatchCompositeStateProperty","useSlot","slot","useWatchSlot","useDefineSlot","ComputedProperty","compute","unsubscribers","dependencies","recalculate","dep","dispose","unsub","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","leave","threshold","unobserve","concat","useIsFirstRendering","isFirstRender","useSafeLayoutEffect","useScrollableSearch","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/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/Divider.js","esm/core/components/EmptyCollection.js","esm/core/components/FileUpload.js","esm/core/components/libs/utils.js","esm/core/hooks/PortalContainerProvider.js","esm/core/components/shadcn/tooltip.js","esm/core/components/FormItem.js","esm/core/components/shadcn/badge.js","esm/core/components/shadcn/input.js","esm/core/components/InputList.js","esm/core/components/Link.js","esm/core/components/MenuList.js","esm/core/components/styles.js","esm/core/components/NumberInput.js","esm/i18n/instance.js","esm/core/components/shadcn/button.js","esm/core/components/Overlay.js","esm/core/components/Portal.js","esm/core/components/shadcn/theme/ThemeProvider.js","esm/i18n/index.js","esm/core/components/shadcn/theme/ThemeSwitcher.js","esm/core/components/shadcn/card.js","esm/core/components/libs/visuallyHidden.js","esm/core/components/shadcn/modal/dialog.js","esm/core/components/shadcn/modal/ConfirmModal.js","esm/core/components/toast/ToastContext.js","esm/core/components/toast/NotificationPanel.js","esm/core/components/toast/ToastProvider.js","esm/core/components/shadcn/modal/DeleteModal.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/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/shadcn/MessageBox.js","esm/core/components/shadcn/Panel.js","esm/core/components/shadcn/switch.js","esm/core/components/shadcn/radioGroup.js","esm/core/components/shadcn/collaspible.js","esm/core/components/shadcn/dropdown.js","esm/core/components/SelectList.js","esm/core/components/SidePanel.js","esm/core/components/Spinner.js","esm/core/components/table/index.js","esm/core/components/TagsInput.js","esm/core/hooks/CompositeState.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 { 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, XIcon } 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\";\nconst INPUT_NO_PADDING = \"block sm:text-sm sm:leading-6 bg-muted rounded-md border-0 shadow-sm ring-1 ring-inset ring-muted placeholder:text-muted focus:ring-2 focus:ring-inset focus:ring-primary\";\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 mt-1 border-popover bg-popover text-popover-foreground shadow-md 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, clearable, noMatchMessage, openOnFocus }) {\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 || !!noMatchMessage);\n return (_jsxs(_Fragment, { children: [_jsx(layout.Input, { boxRef: inputBoxRef, inputRef: inputRef, ctrl: ctrl, layout: layout, placeholder: placeholder, clearable: clearable, openOnFocus: openOnFocus }), _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, noMatchMessage: noMatchMessage }) })] }));\n}\nfunction ComboInput({ inputRef, placeholder, boxRef, ctrl, layout, clearable, openOnFocus }) {\n const Toggle = layout.Toggle;\n const showClear = clearable && ctrl.selectedItem != null;\n const buttonCount = (Toggle ? 1 : 0) + (showClear ? 1 : 0);\n const style = buttonCount > 0 ? { paddingRight: `${layout.buttonWidth * buttonCount + layout.buttonRight}px` } : undefined;\n return (_jsxs(\"div\", { className: \"relative\", ref: boxRef, children: [_jsx(\"input\", { ref: inputRef, placeholder: placeholder, ...ctrl.getInputProps(), onFocus: openOnFocus ? () => ctrl.openMenu() : undefined, style: style, className: layout.inputClass }), _jsxs(\"div\", { style: { position: 'absolute', right: `${layout.buttonRight}px`, top: 0, bottom: 0, display: 'flex', alignItems: 'center', gap: '2px' }, children: [showClear && (_jsx(\"button\", { style: { border: 'none', padding: 0, margin: 0, backgroundColor: 'transparent', cursor: 'pointer', display: 'flex', alignItems: 'center', width: `${layout.buttonWidth}px` }, onClick: () => { ctrl.selectedItem = null; }, children: _jsx(XIcon, { className: \"w-4 h-4\" }) })), Toggle && (_jsx(\"button\", { style: { width: `${layout.buttonWidth}px`, border: 'none', padding: 0, margin: 0, backgroundColor: 'transparent', display: 'flex', alignItems: 'center', justifyContent: 'center' }, ...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, noMatchMessage }) {\n const { highlightedIndex, selectedItem } = ctrl;\n if (items.length === 0) {\n return noMatchMessage\n ? _jsx(\"div\", { style: { width: fillWidth ? '100%' : undefined }, className: layout.menuClass, children: noMatchMessage })\n : null;\n }\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}\nexport function SimpleCombobox({ options, creatable, ...rest }) {\n const adapter = creatable ? StringOptionAdapterWithCreate.instance : StringOptionAdapter.instance;\n return _jsx(ComboBox, { adapter: adapter, items: options, ...rest });\n}\n//# sourceMappingURL=ComboBox.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 { 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 { 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 } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const PortalContainerContext = React.createContext(undefined);\nfunction findOrCreatePortalContainer(root, id = \"plugin-portal-container\") {\n // Determine the actual parent element to search and append to\n const parentElement = root instanceof Document ? root.body : root;\n // look only at direct children\n for (const child of Array.from(parentElement.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 parentElement.appendChild(container);\n return container;\n}\nexport function PortalContainerProvider({ children, id = \"plugin-portal-container\", }) {\n const inherited = React.useContext(PortalContainerContext);\n const ref = React.useRef(null);\n const [container, setContainer] = React.useState(inherited || undefined);\n React.useEffect(() => {\n // If a parent already provides a portal container, inherit it\n if (inherited) {\n setContainer(inherited);\n return;\n }\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, inherited]);\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 { 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\";\nimport { usePortalContainer } from \"../../hooks/PortalContainerProvider\";\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipContent = React.forwardRef(({ className, sideOffset = 4, side = \"top\", ...props }, ref) => {\n const container = usePortalContainer();\n return (_jsx(TooltipPrimitive.Portal, { container: container, 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 border-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 }) }));\n});\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\nexport function VTooltip({ description, children, size = 'sm', placement = 'top', className, asChild }) {\n const [open, setOpen] = React.useState(false);\n const suppressRef = React.useRef(false);\n React.useEffect(() => {\n const suppress = () => {\n setOpen(false);\n suppressRef.current = true;\n requestAnimationFrame(() => { suppressRef.current = false; });\n };\n window.addEventListener('blur', suppress);\n document.addEventListener('visibilitychange', suppress);\n return () => {\n window.removeEventListener('blur', suppress);\n document.removeEventListener('visibilitychange', suppress);\n };\n }, []);\n return (_jsx(TooltipProvider, { delayDuration: 0, children: _jsxs(Tooltip, { open: open, onOpenChange: (v) => { if (!suppressRef.current)\n setOpen(v); }, 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 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, fullWidthLabel = false, childrenId }) {\n return (_jsxs(\"div\", { className: clsx(\"flex w-full space-y-1\", className, direction === \"row\" ? \"flex-row justify-between items-center gap-2\" : direction === \"row-reverse\" ? \"flex-row-reverse justify-between items-center gap-2\" : \"flex-col\"), children: [_jsxs(\"div\", { className: clsx('flex items-center gap-1 mb-0', fullWidthLabel && 'w-full'), children: [_jsxs(\"label\", { htmlFor: childrenId, className: `text-sm font-medium mb-1 ${disabled ? \"text-muted\" : \"\"} ${fullWidthLabel && \"flex-1\"}`, 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","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, 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, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { Badge } from './shadcn/badge';\nimport { Input } from './shadcn/input';\nimport { VTooltip } from '@vertesia/ui/core';\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 onPaste = (ev) => {\n const pastedText = ev.clipboardData.getData('text');\n if (pastedText) {\n ev.preventDefault();\n // Create a regex pattern from delimiters\n const delimiterPattern = delimiters.split('').map((char) => char === ' ' ? '\\\\s' : char.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|');\n const regex = new RegExp(`[${delimiterPattern}]+`);\n // Split the pasted text by delimiters and filter out empty values\n const newValues = pastedText\n .split(regex)\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n if (newValues.length > 0) {\n onChange([...value, ...newValues]);\n }\n setText('');\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 py-1.5', 'rounded-md text-sm 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 focus-visible:outline-none focus-visible:ring-1 ring-inset focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50'), children: [value && value.length > 0 &&\n (value.map((v, index) => _jsx(VTooltip, { description: 'click to remove', children: _jsx(Badge, { variant: \"secondary\", onClick: () => _onClick(index), className: 'cursor-pointer flex-shrink-0 hover:bg-destructive hover:text-destructive transition-colors', title: v, children: _jsx(\"span\", { className: 'break-all', children: v }) }, index) }, index))), _jsx(Input, { clearable: false, className: 'placeholder:text-muted px-1 flex-1 min-w-[120px]', variant: 'unstyled', type: 'text', value: text, onBlur: onBlur, onKeyDown: onKeyDown, onPaste: onPaste, 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","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 } 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 i18next from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport ar from './locales/ar.json';\nimport de from './locales/de.json';\nimport en from './locales/en.json';\nimport es from './locales/es.json';\nimport fr from './locales/fr.json';\nimport it from './locales/it.json';\nimport ja from './locales/ja.json';\nimport ko from './locales/ko.json';\nimport pt from './locales/pt.json';\nimport ru from './locales/ru.json';\nimport tr from './locales/tr.json';\nimport zh from './locales/zh.json';\nimport zhTW from './locales/zh-TW.json';\nexport const NAMESPACE = 'vertesia.ui';\n// Scoped instance — does NOT touch the global i18next singleton\nconst i18nInstance = i18next.createInstance();\nvoid i18nInstance.use(initReactI18next).init({\n resources: {\n ar: { [NAMESPACE]: ar },\n de: { [NAMESPACE]: de },\n en: { [NAMESPACE]: en },\n es: { [NAMESPACE]: es },\n fr: { [NAMESPACE]: fr },\n it: { [NAMESPACE]: it },\n ja: { [NAMESPACE]: ja },\n ko: { [NAMESPACE]: ko },\n pt: { [NAMESPACE]: pt },\n ru: { [NAMESPACE]: ru },\n tr: { [NAMESPACE]: tr },\n zh: { [NAMESPACE]: zh },\n 'zh-TW': { [NAMESPACE]: zhTW },\n },\n fallbackLng: 'en',\n ns: [NAMESPACE],\n defaultNS: NAMESPACE,\n interpolation: {\n escapeValue: false, // React already escapes\n },\n react: {\n useSuspense: false, // Translations are bundled, no async loading\n },\n});\nexport { i18nInstance };\n//# sourceMappingURL=instance.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\";\nimport { i18nInstance, NAMESPACE } from '../../../i18n/instance.js';\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 t = i18nInstance.getFixedT(null, NAMESPACE);\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 || t('misc.copiedToClipboard'),\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: t('misc.failedToCopy'),\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 ?? t('misc.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, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"./shadcn/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 } 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 } 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 } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { I18nextProvider, useTranslation } from 'react-i18next';\nimport { i18nInstance, NAMESPACE } from './instance.js';\nfunction detectLanguage(lng) {\n return lng ?? navigator.language?.split('-')[0] ?? 'en';\n}\nexport function I18nProvider({ lng, children }) {\n // Set language synchronously on first render to avoid flash of wrong language\n const language = detectLanguage(lng);\n if (i18nInstance.language !== language) {\n void i18nInstance.changeLanguage(language);\n }\n // Also react to prop changes\n useEffect(() => {\n const lang = detectLanguage(lng);\n if (i18nInstance.language !== lang) {\n void i18nInstance.changeLanguage(lang);\n }\n }, [lng]);\n return (_jsx(I18nextProvider, { i18n: i18nInstance, children: children }));\n}\n/**\n * Hook for components inside @vertesia/ui to get translation functions.\n * Always binds to the 'vertesia.ui' namespace on the scoped instance.\n */\nexport function useUITranslation() {\n return useTranslation(NAMESPACE, { i18n: i18nInstance });\n}\nexport { i18nInstance, NAMESPACE } from './instance.js';\n//# sourceMappingURL=index.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\";\nimport { useUITranslation } from \"../../../../i18n/index.js\";\nexport function ModeOption({ option, current, setTheme, icon, alt }) {\n return (_jsx(Button, { variant: current === option ? \"secondary\" : \"outline\", size: \"sm\", onClick: () => setTheme(option), alt: alt, children: icon }));\n}\nexport function ModeToggle({ label, className } = {}) {\n const { setTheme, theme } = useTheme();\n const { t } = useUITranslation();\n const resolvedLabel = label === false ? false : (label ?? t('theme.label'));\n return (_jsxs(\"div\", { className: className ?? (resolvedLabel ? \"flex justify-between px-2 items-center\" : \"flex items-center gap-1\"), children: [resolvedLabel && _jsx(\"p\", { className: \"text-sm font-semibold\", children: resolvedLabel }), _jsxs(\"div\", { className: \"flex gap-2\", children: [_jsx(ModeOption, { current: theme, option: \"system\", setTheme: setTheme, icon: _jsx(Computer, {}), alt: t('theme.system') }), _jsx(ModeOption, { current: theme, option: \"light\", setTheme: setTheme, icon: _jsx(Sun, {}), alt: t('theme.light') }), _jsx(ModeOption, { current: theme, option: \"dark\", setTheme: setTheme, icon: _jsx(Moon, {}), alt: t('theme.dark') })] })] }));\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, Fragment as _Fragment, jsxs as _jsxs } 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\";\nimport { usePortalContainer } from \"../../../hooks/PortalContainerProvider\";\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 Modal({ className, children, isOpen, onClose, description = \"Modal Description\", noCloseButton = false, allowOverflow = false, disableCloseOnClickOutside = false, size = \"md\", action }) {\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-[60vw] lg:max-w-[40vw]\";\n case \"lg\":\n return \"max-w-[80vw] md:max-w-[60vw]\";\n case \"xl\":\n return \"max-w-[95vw] lg:max-w-[80vw]\";\n default:\n return \"max-w-[60vw] lg: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: [_jsx(\"div\", { className: \"top-4 right-4 absolute\", children: _jsxs(\"div\", { className: \"flex gap-2\", children: [action && (_jsx(_Fragment, { children: action })), !noCloseButton && (_jsx(DialogClose, { onClick: () => handleOpenChange(false), asChild: true, autoFocus: false, children: _jsx(Button, { variant: \"outline\", alt: \"Close\", className: \"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: \"size-4\" }) }) }))] }) }), _jsx(ModalContextProvider, { children: children })] })] }));\n}\nexport const ModalTitle = ({ children, show = true, className, description, showDivider = false, ...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(showDivider ? \"border-b-solid border-b border-b-1 pb-2 mb-4\" : \"\", \"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 ModalBody = ({ children, className, ...props }) => {\n return (_jsx(\"div\", { className: cn(\"text-sm max-h-[80vh] overflow-y-auto\", className), ...props, children: children }));\n};\nexport const ModalFooter = ({ 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) => {\n const container = usePortalContainer();\n return (_jsxs(DialogPortal, { container: container, 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 })] }));\n});\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 { TriangleAlert } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { Modal, ModalTitle, ModalFooter } from \"./dialog\";\nimport { Button } from \"../button\";\nexport function ConfirmModal({ title, content, onConfirm, onCancel, isOpen, isLoading }) {\n const { t } = useUITranslation();\n const cancelButtonRef = useRef(null);\n return (_jsxs(Modal, { 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(ModalTitle, { 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(ModalFooter, { align: \"right\", children: [_jsx(Button, { variant: \"destructive\", onClick: onConfirm, isLoading: isLoading, children: t('modal.confirm') }), _jsx(Button, { variant: \"outline\", onClick: onCancel, ref: cancelButtonRef, children: t('modal.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, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { CircleCheck, AlertTriangle, Info, CircleX, X } from \"lucide-react\";\nimport { 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(AnimatePresence, { onExitComplete: onClose, children: show && (_jsx(motion.div, { className: \"pointer-events-auto w-full max-w-md overflow-hidden rounded-lg bg-muted shadow-lg ring-1 ring-border\", initial: { opacity: 0, x: 8 }, animate: { opacity: 1, x: 0, transition: { ease: 'easeOut', duration: 0.7 } }, exit: { opacity: 0, transition: { ease: 'easeIn', duration: 0.3 } }, 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 { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { ConfirmModal } from \"./ConfirmModal.js\";\nimport { useToast } from \"../../toast/index.js\";\nexport function DeleteModal({ idToDelete, title, content, setIdToDelete, deleteApi }) {\n const { t } = useUITranslation();\n const toast = useToast();\n const doDelete = async () => {\n if (!idToDelete) {\n return;\n }\n return deleteApi(idToDelete)\n .then(() => {\n toast({\n title: t('modal.delete.succeeded'),\n status: 'success'\n });\n }).catch((err) => {\n toast({\n title: t('modal.delete.failed'),\n description: err.message ?? t('modal.delete.error'),\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 * 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 PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\nimport { usePortalContainer } from \"../../hooks/PortalContainerProvider\";\nimport { cn } from \"../libs/utils\";\nexport const PopoverContext = React.createContext(null);\nconst Popover = ({ hover = false, click = false, modal, children, _open, onOpenChange }) => {\n const [open, setOpen] = React.useState(_open || false);\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: modal, 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 const container = usePortalContainer();\n return (_jsx(PopoverPrimitive.Portal, { container: container, 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 function usePopoverContext() {\n const ctx = React.useContext(PopoverContext);\n if (!ctx)\n throw new Error('usePopoverContext must be used within a Popover');\n return { ...ctx, close: () => ctx.setOpen(false) };\n}\nexport { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger };\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 \"./modal/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 { AlertTriangle, Check, ChevronsUpDown, LoaderCircle, SearchIcon, SquarePlus, X } from 'lucide-react';\nimport { useState, useEffect, useRef, useMemo } from 'react';\nimport { Popover, PopoverContent, PopoverTrigger, PopoverClose } from './popover';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from './command';\nimport { Input } from './input';\nimport { Button } from './button';\nimport { VTooltip } from './tooltip';\nexport function SelectBox({ options, optionLabel, value, onChange, addNew, addNewLabel, disabled, filterBy, label, placeholder, className, popupClass, isClearable, border = true, multiple = false, by, inline = false, isLoading = false, warnOnMissingValue = true, missingValueWarning = \"Value not in options list, may not be valid\", clearIcon, clearTitle }) {\n const triggerRef = useRef(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n const [filterValue, setFilterValue] = useState('');\n // Check if value is in options list (for single select only)\n const isMissingValue = useMemo(() => {\n if (!warnOnMissingValue || multiple || value == null || !options)\n return false;\n // Use the isOptionsEqual helper which respects the 'by' comparator\n return !options.some(opt => {\n if (typeof by === 'string') {\n return opt[by] === value[by];\n }\n else if (typeof by === 'function') {\n return by(opt, value);\n }\n else {\n return isEqual(opt, value);\n }\n });\n }, [warnOnMissingValue, multiple, value, options, by]);\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 || isLoading) {\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\", onWheel: (e) => { e.currentTarget.scrollTop += e.deltaY; }, children: [_jsx(CommandEmpty, { children: \"No result found.\" }), _jsx(CommandGroup, { 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: isLoading\n ? _jsx(\"div\", { className: \"flex justify-center items-center p-2 text-muted text-sm\", children: _jsx(LoaderCircle, { className: \"size-4 animate-spin\" }) })\n : renderOptionsContent() }));\n }\n return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(\"div\", { ref: triggerRef, onClick: handleTriggerClick, className: clsx(className, isLoading\n ? 'flex justify-center items-center gap-2 border border-border rounded-md p-2 text-muted text-sm'\n : clsx(border && (isMissingValue ? 'border border-destructive' : '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: isLoading ? (_jsx(LoaderCircle, { className: \"size-4 animate-spin\" })) : (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: clsx(\"flex flex-col w-full rounded-md text-sm min-h-6 items-center justify-center truncate\", !disabled && \"\", isClearable && value && (Array.isArray(value) ? value.length > 0 : true) && \"pr-2\"), children: [label && _jsx(\"div\", { className: 'w-full text-left text-xs font-semibold', children: label }), _jsxs(\"div\", { className: clsx('w-full text-left ', !disabled && '', isMissingValue && 'text-destructive'), children: [isMissingValue && (_jsx(VTooltip, { description: missingValueWarning, placement: \"top\", asChild: true, children: _jsx(AlertTriangle, { className: \"inline-block size-4 mr-1 -mt-0.5 cursor-help\" }) })), 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: clearTitle || \"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: clearIcon ? clearIcon : _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 { SelectBox } 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 Tabs = ({ tabs, defaultValue, current, className, fullWidth, fullHeight, children, onTabChange, responsive = false, variant = \"tabs\", updateHash = true }) => {\n // Filter tabs based on is_allowed (undefined or true means visible)\n const visibleTabs = React.useMemo(() => tabs.filter(tab => tab.is_allowed === undefined || tab.is_allowed === true), [tabs]);\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 visible tabs\n if (currentTab && visibleTabs.some(tab => tab.name === currentTab)) {\n return currentTab;\n }\n // Fall back to default or first visible tab\n return defaultValue || visibleTabs[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 visible tabs\n if (currentTab && visibleTabs.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, visibleTabs, 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: visibleTabs, size: fullWidth ? visibleTabs.length : 0, current: value, setTab, responsive: responsive, variant, updateHash }, children: _jsx(TabsPrimitive.Root, { defaultValue: value || visibleTabs[0]?.name, value: value, onValueChange: handleValueChange, className: cn(\"flex-1 flex flex-col min-h-0 px-2\", fullHeight && \"h-full\", className), children: children }) }));\n};\nconst TabsBar = ({ className, sticky, direction }) => {\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(SelectBox, { label: \"Tab\", className: cn(sticky && \"sticky top-0 bg-background z-10\", 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\" : \"\"), sticky && \"sticky top-0 bg-background z-10\", direction === \"vertical\" ? \"flex-col items-start\" : \"flex-row\", responsive ? \"hidden lg:flex\" : \"\", className), children: tabs.map((tab) => (_jsx(TabsTrigger, { className: cn(direction === \"vertical\" ? \"w-full text-left\" : \"\"), value: tab.name, disabled: tab.disabled, href: tab.href, variant: variant, onClick: () => handleTabChange(tab.name), children: tab.label }, tab.name))) })] }));\n};\nconst TabsPanel = ({ className }) => {\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, className: className, 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\", \"flex-1 overflow-y-auto min-h-0 pt-2 pb-4\", className), ...props })));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\nexport { Tabs, TabsBar, TabsPanel, 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 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\";\nimport { Button } from \"./button\";\nexport function Breadcrumbs({ path, maxItems = 3, className, separator }) {\n const items = path || [];\n const renderBreadcrumbItem = (item) => {\n const shortenedLabel = typeof item.label === \"string\" && item.label.length > 20\n ? item.label.slice(0, 17) + \"...\"\n : item.label;\n if (item.onClick) {\n return _jsx(BreadcrumbButton, { onClick: item.onClick, href: item.href, title: typeof item.label === 'string' ? item.label : undefined, children: shortenedLabel });\n }\n else if (item.href) {\n return _jsx(BreadcrumbButton, { href: item.href, title: typeof item.label === 'string' ? item.label : undefined, children: shortenedLabel });\n }\n else {\n return _jsx(BreadcrumbPage, { children: shortenedLabel });\n }\n };\n if (items.length <= maxItems) {\n return (_jsx(Breadcrumb, { className: cn(\"w-full flex items-center\", 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 flex items-center\", 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 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, { variant: \"ghost\", size: \"md\", ref: ref, className: cn(\"p-0! hover:underline! hover:bg-background!\", 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\";\nimport { useUITranslation } from '../../../../../i18n/index.js';\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 { t } = useUITranslation();\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: t('filter.noResultsFound') }), _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\";\nimport { useUITranslation } from '../../../../../i18n/index.js';\nexport const DateCombobox = ({ filterValues, setFilterValues, isRange = false, }) => {\n const [open, setOpen] = useState(false);\n const [localDateRange, setLocalDateRange] = useState([null, null]);\n const { t } = useUITranslation();\n // Parse with dayjs to interpret bare YYYY-MM-DD as local time (to match UI).\n const selectedDate = filterValues[0] ? dayjs(filterValues[0]).toDate() : 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] ? dayjs(filterValues[0]).toDate() : null),\n localDateRange[1] || (filterValues[1] ? dayjs(filterValues[1]).toDate() : null)\n ] : [null, null];\n // Update local state when filter values change\n useEffect(() => {\n if (isRange) {\n setLocalDateRange([\n filterValues[0] ? dayjs(filterValues[0]).toDate() : null,\n filterValues[1] ? dayjs(filterValues[1]).toDate() : 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: t('filter.selectRange') });\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 { InputList } from \"../../../InputList\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../popover\";\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\";\nimport { useUITranslation } from '../../../../../i18n/index.js';\nexport default function DateFilter({ selectedView, selectedDate, setSelectedDate, setFilters, filters, handleClose, filterGroups, }) {\n const { t } = useUITranslation();\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: t('filter.from') }), _jsx(\"span\", { className: \"text-xs font-medium\", children: dayjs(effectiveDateRange[0]).format(\"MMMM DD, YYYY\") }), _jsx(\"span\", { className: \"text-xs text-muted\", children: t('filter.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: t('filter.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 \"../../../InputList\";\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\";\nimport { useUITranslation } from '../../../../i18n/index.js';\nconst FilterContext = React.createContext({});\n// Syncs filters ↔ URL. On mount, captures the initial URL param and restores matching filters\n// incrementally as filterGroups loads. URL writes are blocked until the first filterGroups load\n// so the address bar doesn't flicker. Filters not matching any filterGroup are silently dropped\n// (prevents cross-page URL contamination, e.g. a modal inheriting a parent page's filters).\n// Parse format with array indicators: filterName:value or filterName:[value1,value2]\nconst FilterProvider = ({ filters, setFilters, filterGroups, children, inModal }) => {\n const url = new URL(window.location.href);\n const searchParams = url.searchParams;\n const [initialFiltersParam] = React.useState(() => new URLSearchParams(window.location.search).get('filters'));\n const processedUrlFilters = React.useRef(new Set());\n const hasRestoredFromUrl = React.useRef(inModal || !initialFiltersParam);\n useEffect(() => {\n if (inModal)\n return;\n if (!hasRestoredFromUrl.current)\n return;\n try {\n const params = new URLSearchParams(searchParams.toString());\n if (filters.length > 0) {\n const filterString = filters.map(filter => {\n let values;\n if (filter.type === 'stringList' && Array.isArray(filter.value) && typeof filter.value[0] === 'string') {\n values = `[${filter.value.map(item => encodeURIComponent(item)).join(',')}]`;\n }\n else if (Array.isArray(filter.value)) {\n if (filter.multiple) {\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else if (filter.value.length > 1) {\n values = `[${filter.value.map((item) => encodeURIComponent(item.value || item || '')).join(',')}]`;\n }\n else {\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 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 if (inModal || !initialFiltersParam || filterGroups.length === 0)\n return;\n try {\n const filterPairs = initialFiltersParam.split(';');\n const newFilters = [];\n for (const pair of filterPairs) {\n const [encodedName, valuesString] = pair.split(':');\n const name = decodeURIComponent(encodedName);\n if (processedUrlFilters.current.has(name))\n continue;\n const group = filterGroups.find(g => g.name === name);\n if (!group)\n continue;\n processedUrlFilters.current.add(name);\n let values;\n if (valuesString.startsWith('[') && valuesString.endsWith(']')) {\n const arrayContent = valuesString.slice(1, -1);\n values = arrayContent ? arrayContent.split(',').map(encodedValue => decodeURIComponent(encodedValue)) : [];\n }\n else {\n values = [decodeURIComponent(valuesString)];\n }\n let filterValue;\n if (group.type === 'stringList') {\n filterValue = values;\n }\n else if (group.type === 'text') {\n filterValue = values.length === 1 ? [{ value: values[0], label: values[0] }] :\n values.map(value => ({ value, label: value }));\n }\n else {\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 { value, label };\n });\n }\n if (group.multiple && !valuesString.startsWith('[') && !valuesString.endsWith(']')) {\n if (group.type === 'stringList') {\n filterValue = values;\n }\n else if (!Array.isArray(filterValue)) {\n filterValue = [filterValue];\n }\n }\n newFilters.push({\n name,\n type: group.type,\n placeholder: group.placeholder,\n value: filterValue,\n multiple: group.multiple,\n });\n }\n if (newFilters.length > 0) {\n setFilters(prev => [...prev, ...newFilters]);\n }\n hasRestoredFromUrl.current = true;\n }\n catch (_error) {\n // ignore parse errors\n }\n }, [filterGroups, initialFiltersParam]);\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 { t } = useUITranslation();\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: t('filter.noAvailableFilters') });\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\" }), t('filter.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 ? t('filter.filterBy', { view: selectedView }) : t('filter.filterPlaceholder'), className: \"h-9 ring-0\", value: commandInput, onValueChange: (value) => {\n setCommandInput(value);\n }, ref: commandInputRef, autoFocus: true })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: t('filter.noMatchingFilters') }), _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 { t } = useUITranslation();\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: t('filter.clearAll') }));\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 { useLayoutEffect, useRef, useCallback } from \"react\";\nimport { cn } from \"../libs/utils\";\nfunction Textarea({ className, minLines, maxLines, value, ...props }) {\n const textareaRef = useRef(null);\n const growing = minLines !== undefined || maxLines !== undefined;\n const resize = useCallback(() => {\n const el = textareaRef.current;\n if (!el)\n return;\n const style = getComputedStyle(el);\n const lineHeight = parseFloat(style.lineHeight) || parseFloat(style.fontSize) * 1.5;\n const paddingTop = parseFloat(style.paddingTop) || 0;\n const paddingBottom = parseFloat(style.paddingBottom) || 0;\n const paddingY = paddingTop + paddingBottom;\n const borderTop = parseFloat(style.borderTopWidth) || 0;\n const borderBottom = parseFloat(style.borderBottomWidth) || 0;\n const borderY = borderTop + borderBottom;\n const effectiveMin = minLines ?? 1;\n const effectiveMax = maxLines ?? Infinity;\n const minHeight = effectiveMin * lineHeight + paddingY + borderY;\n const maxHeight = effectiveMax === Infinity ? Infinity : effectiveMax * lineHeight + paddingY + borderY;\n el.style.height = \"auto\";\n const contentHeight = Math.min(Math.max(el.scrollHeight, minHeight), maxHeight);\n el.style.height = `${contentHeight}px`;\n el.style.overflowY = maxHeight !== Infinity && el.scrollHeight > maxHeight ? \"auto\" : \"hidden\";\n }, [minLines, maxLines]);\n useLayoutEffect(() => {\n if (growing)\n resize();\n }, [value, growing, resize]);\n return (_jsx(\"textarea\", { ref: textareaRef, \"data-slot\": \"textarea\", value: value, 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\", growing && \"resize-none\", className), ...props }));\n}\nexport { Textarea };\n//# sourceMappingURL=textarea.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\", { className: \"whitespace-pre-wrap break-words\", 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 { useState } from \"react\";\nimport { VTooltip } from \"./tooltip\";\nimport { ChevronDown, ChevronUp, Info } from \"lucide-react\";\nimport { Button } from \"./button\";\nexport function Panel({ children, action, title, description, footer, className, collapsible, defaultCollapsed = false }) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\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\" }) })] }), _jsxs(\"div\", { className: \"flex gap-2 items-center\", children: [action, collapsible && (_jsx(Button, { variant: \"ghost\", size: \"icon\", onClick: () => setIsCollapsed(!isCollapsed), children: isCollapsed ?\n _jsx(ChevronDown, { className: \"size-4\" }) :\n _jsx(ChevronUp, { className: \"size-4\" }) }))] })] }), !isCollapsed && 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 * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"../libs/utils\";\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};\nfunction Switch({ className, size = 'md', value, onChange, children, disabled }) {\n const [trackSize, thumbSize, thumbTranslate] = sizes[size];\n const switchEl = (_jsx(SwitchPrimitive.Root, { \"data-slot\": \"switch\", checked: value, onCheckedChange: onChange, disabled: disabled, className: cn(\"data-[state=checked]:bg-primary data-[state=unchecked]:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 shrink-0 rounded-full border focus-visible:ring-3 aria-invalid:ring-3 peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\", trackSize, !children && className), children: _jsx(SwitchPrimitive.Thumb, { \"data-slot\": \"switch-thumb\", className: cn(\"bg-white rounded-full pointer-events-none block ring-0 transition-transform\", thumbSize, value ? thumbTranslate : 'translate-x-1') }) }));\n if (children) {\n return (_jsxs(\"div\", { className: cn(\"flex items-center\", className), children: [switchEl, _jsx(\"span\", { className: \"px-2\", children: children })] }));\n }\n return switchEl;\n}\nexport { Switch };\n//# sourceMappingURL=switch.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../libs/utils\";\nfunction RadioGroupItem({ className, ...props }) {\n return (_jsx(RadioGroupPrimitive.Item, { \"data-slot\": \"radio-group-item\", className: cn(\"border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3 group/radio-group-item peer relative aspect-square shrink-0 border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50\", className), ...props, children: _jsx(RadioGroupPrimitive.Indicator, { \"data-slot\": \"radio-group-indicator\", className: \"flex size-4 items-center justify-center\", children: _jsx(\"span\", { className: \"bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full\" }) }) }));\n}\nexport class RadioGroupAdapter {\n descriptionOf(_item) { return undefined; }\n selectedClassName(_item) { return 'border-accent-foreground'; }\n}\nfunction RadioGroup({ onSelect, selected, options, adapter }) {\n const getId = (o) => adapter ? adapter.idOf(o) : o.id;\n const getLabel = (o) => adapter ? adapter.labelOf(o) : o.label;\n const getDescription = (o) => adapter ? adapter.descriptionOf(o) : o.description;\n const getSelectedClass = (o) => adapter ? adapter.selectedClassName(o) : 'border-primary';\n return (_jsx(RadioGroupPrimitive.Root, { \"data-slot\": \"radio-group\", value: selected ? getId(selected) : undefined, onValueChange: (id) => {\n const option = options.find((o) => getId(o) === id);\n if (option)\n onSelect(option);\n }, className: \"space-y-4\", children: options.map((option) => {\n const isSelected = selected ? getId(selected) === getId(option) : false;\n return (_jsx(RadioGroupPrimitive.Item, { value: getId(option), className: cn('relative block w-full cursor-pointer rounded-lg border border-border bg-accent px-6 py-4 shadow-2xs text-left', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', 'sm:flex sm:justify-between', isSelected && getSelectedClass(option)), children: _jsx(\"span\", { className: \"flex items-center\", children: _jsxs(\"span\", { className: \"flex flex-col text-sm\", children: [_jsx(\"span\", { className: \"font-medium text-text\", children: getLabel(option) }), getDescription(option) && (_jsx(\"span\", { className: \"text-muted-foreground\", children: getDescription(option) }))] }) }) }, getId(option)));\n }) }));\n}\n/** @deprecated use RadioGroupAdapter */\nexport const RadioOptionAdapter = RadioGroupAdapter;\nexport { RadioGroup, RadioGroupItem };\n//# sourceMappingURL=radioGroup.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nfunction Collapsible({ ...props }) {\n return _jsx(CollapsiblePrimitive.Root, { \"data-slot\": \"collapsible\", ...props });\n}\nfunction CollapsibleTrigger({ ...props }) {\n return (_jsx(CollapsiblePrimitive.Trigger, { \"data-slot\": \"collapsible-trigger\", ...props }));\n}\nfunction CollapsibleContent({ ...props }) {\n return (_jsx(CollapsiblePrimitive.Content, { \"data-slot\": \"collapsible-content\", ...props }));\n}\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n//# sourceMappingURL=collaspible.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { cn } from \"../libs/utils\";\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\";\nconst HoverMenuContext = React.createContext(false);\nfunction DropdownMenu({ ...props }) {\n return _jsx(DropdownMenuPrimitive.Root, { \"data-slot\": \"dropdown-menu\", ...props });\n}\nfunction DropdownMenuPortal({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.Portal, { \"data-slot\": \"dropdown-menu-portal\", ...props }));\n}\nfunction DropdownMenuTrigger({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.Trigger, { \"data-slot\": \"dropdown-menu-trigger\", ...props }));\n}\nfunction DropdownMenuContent({ className, align = \"start\", sideOffset = 4, ...props }) {\n return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { \"data-slot\": \"dropdown-menu-content\", sideOffset: sideOffset, align: align, className: cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto data-[state=closed]:overflow-hidden\", className), ...props }) }));\n}\nfunction DropdownMenuGroup({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.Group, { \"data-slot\": \"dropdown-menu-group\", ...props }));\n}\nfunction DropdownMenuItem({ className, inset, variant = \"default\", ...props }) {\n return (_jsx(DropdownMenuPrimitive.Item, { \"data-slot\": \"dropdown-menu-item\", \"data-inset\": inset, \"data-variant\": variant, className: cn(\"hover:bg-muted focus:bg-muted data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive gap-2 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), ...props }));\n}\nfunction DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {\n return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { \"data-slot\": \"dropdown-menu-checkbox-item\", \"data-inset\": inset, className: cn(\"focus:bg-muted focus:text-muted focus:**:text-muted gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), checked: checked, ...props, children: [_jsx(\"span\", { className: \"absolute right-2 flex items-center justify-center pointer-events-none\", \"data-slot\": \"dropdown-menu-checkbox-item-indicator\", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, {}) }) }), children] }));\n}\nfunction DropdownMenuRadioGroup({ ...props }) {\n return (_jsx(DropdownMenuPrimitive.RadioGroup, { \"data-slot\": \"dropdown-menu-radio-group\", ...props }));\n}\nfunction DropdownMenuRadioItem({ className, children, inset, ...props }) {\n return (_jsxs(DropdownMenuPrimitive.RadioItem, { \"data-slot\": \"dropdown-menu-radio-item\", \"data-inset\": inset, className: cn(\"focus:bg-muted focus:text-muted focus:**:text-muted gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), ...props, children: [_jsx(\"span\", { className: \"absolute right-2 flex items-center justify-center pointer-events-none\", \"data-slot\": \"dropdown-menu-radio-item-indicator\", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, {}) }) }), children] }));\n}\nfunction DropdownMenuLabel({ className, inset, ...props }) {\n return (_jsx(DropdownMenuPrimitive.Label, { \"data-slot\": \"dropdown-menu-label\", \"data-inset\": inset, className: cn(\"text-muted px-1.5 py-1 text-xs font-medium data-inset:pl-7\", className), ...props }));\n}\nfunction DropdownMenuSeparator({ className, ...props }) {\n return (_jsx(DropdownMenuPrimitive.Separator, { \"data-slot\": \"dropdown-menu-separator\", className: cn(\"bg-border -mx-1 my-1 h-px\", className), ...props }));\n}\nfunction DropdownMenuShortcut({ className, ...props }) {\n return (_jsx(\"span\", { \"data-slot\": \"dropdown-menu-shortcut\", className: cn(\"text-muted group-focus/dropdown-menu-item:text-muted ml-auto text-xs tracking-widest\", className), ...props }));\n}\nfunction DropdownMenuSub({ ...props }) {\n return _jsx(DropdownMenuPrimitive.Sub, { \"data-slot\": \"dropdown-menu-sub\", ...props });\n}\nfunction DropdownMenuSubTrigger({ className, inset, children, ...props }) {\n return (_jsxs(DropdownMenuPrimitive.SubTrigger, { \"data-slot\": \"dropdown-menu-sub-trigger\", \"data-inset\": inset, className: cn(\"focus:bg-muted focus:text-muted data-open:bg-muted data-open:text-muted not-data-[variant=destructive]:focus:**:text-muted gap-2 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0\", className), ...props, children: [children, _jsx(ChevronRightIcon, { className: \"cn-rtl-flip ml-auto\" })] }));\n}\nfunction DropdownMenuSubContent({ className, ...props }) {\n return (_jsx(DropdownMenuPrimitive.SubContent, { \"data-slot\": \"dropdown-menu-sub-content\", className: cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-lg p-1 shadow-lg ring-1 duration-100 z-50 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden\", className), ...props }));\n}\nexport { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };\n// High-level convenience components\nconst alignMap = { left: 'start', center: 'center', right: 'end' };\nexport function Dropdown({ trigger, children, align = 'right', hover }) {\n const [open, setOpen] = React.useState(false);\n const closeTimer = React.useRef(null);\n if (hover) {\n const onEnter = () => {\n if (closeTimer.current)\n clearTimeout(closeTimer.current);\n setOpen(true);\n };\n const onLeave = () => {\n closeTimer.current = setTimeout(() => setOpen(false), 80);\n };\n const alignClass = align === 'right' ? 'right-0' : align === 'center' ? 'left-1/2 -translate-x-1/2' : 'left-0';\n return (_jsxs(\"div\", { className: \"relative inline-flex\", onMouseEnter: onEnter, onMouseLeave: onLeave, children: [trigger, open && (_jsx(\"div\", { className: cn('absolute top-full pt-1 z-50', alignClass), children: _jsx(\"div\", { className: \"min-w-32 rounded-lg p-1 shadow-md ring-1 ring-foreground/10 bg-popover text-popover-foreground\", children: _jsx(HoverMenuContext.Provider, { value: true, children: children }) }) }))] }));\n }\n return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(\"span\", { className: \"-m-1.5 flex items-center p-1.5\", children: trigger }) }), _jsx(DropdownMenuContent, { align: alignMap[align], className: \"w-max\", children: children })] }));\n}\nexport function MenuGroup({ children, label }) {\n return (_jsxs(DropdownMenuGroup, { children: [label && _jsx(DropdownMenuLabel, { children: label }), children] }));\n}\nexport function MenuItem({ children, href, onClick, isDisabled = false, variant = \"default\", className }) {\n const isHoverMenu = React.useContext(HoverMenuContext);\n const baseClass = cn(\"w-full gap-2 rounded-md px-1.5 py-1 text-sm text-nowrap [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center select-none [&_svg]:pointer-events-none [&_svg]:shrink-0\", variant === 'destructive' ? 'text-destructive' : '', isDisabled ? 'pointer-events-none opacity-50' : 'hover:bg-muted focus:bg-muted', className);\n if (isHoverMenu) {\n const handleClick = (e) => { e.stopPropagation(); onClick?.(e); };\n return href\n ? _jsx(\"a\", { href: href, className: baseClass, children: children })\n : _jsx(\"button\", { className: baseClass, disabled: isDisabled, onClick: handleClick, children: children });\n }\n return (_jsx(DropdownMenuItem, { className: cn(\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50 text-nowrap\", className), disabled: isDisabled, variant: variant, onClick: (e) => { e.stopPropagation(); onClick?.(e); }, asChild: !!href, children: href ? _jsx(\"a\", { href: href, children: children }) : _jsx(_Fragment, { children: children }) }));\n}\n//# sourceMappingURL=dropdown.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 { useUITranslation } from \"@vertesia/ui/i18n\";\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 { t } = useUITranslation();\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: t('form.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 } 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, side = 'right', resizable = true, className, contentClassName }) {\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 const isLeft = side === 'left';\n const positionClass = isLeft ? 'left-0' : 'right-0';\n const paddingClass = isLeft ? 'pr-10 sm:pr-16' : 'pl-10 sm:pl-16';\n const borderClass = isLeft ? 'border-r' : 'border-l';\n const dragHandleClass = isLeft ? '-right-1' : '-left-1';\n const initialX = isLeft ? \"-100%\" : \"100%\";\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 ${positionClass} overflow-hidden`, children: _jsx(\"div\", { className: \"absolute inset-0 overflow-hidden\", children: _jsx(\"div\", { className: `pointer-events-none fixed inset-y-0 ${positionClass} flex max-w-full ${paddingClass}`, children: _jsx(motion.div, { className: `pointer-events-auto ${borderClass}`, style: { width: `${_panelWidth}px` }, initial: { x: initialX }, animate: { x: 0 }, exit: { x: initialX }, transition: { type: \"spring\", stiffness: 300, damping: 30 }, children: _jsxs(\"div\", { className: \"relative flex h-full\", children: [resizable && (_jsx(\"div\", { className: `absolute ${dragHandleClass} 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 min-w-0 flex flex-col bg-background shadow-xl ${className}`, children: [title && (_jsx(\"div\", { className: \"sticky top-0 z-10 bg-background px-2 sm:px-4 py-2 border-b\", 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: contentClassName ?? \"flex-1 overflow-auto px-2 sm:px-4 py-4\", children: _jsx(\"div\", { className: 'w-full h-full flex-1 flex flex-col', 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, 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 } 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 THead({ children }) {\n return (_jsx(\"thead\", { className: \"sticky top-0 bg-background z-10 after:absolute after:bottom-0 after:left-0 after:w-full after:h-px after:bg-muted/20\", 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) ? (Array(rows).fill(0).map((_, index) => _jsx(RowSkeleton, { columns: columns }, index))) : (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 { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nimport { X } from 'lucide-react';\nimport { useContext, useEffect, useRef, useState } from 'react';\nimport { Popover, PopoverContent, PopoverContext, PopoverTrigger } from './shadcn/popover';\nfunction TagsInputContent({ options, value, onChange, onOptionsChange, placeholder, className, disabled, layout = 'horizontal', creatable = false, createText = 'Create \"%value%\"', maxDropdownHeight = 200 }) {\n const popoverContext = useContext(PopoverContext);\n const [searchTerm, setSearchTerm] = useState('');\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [width, setWidth] = useState(0);\n const [pendingDeleteIndex, setPendingDeleteIndex] = useState(null);\n const inputRef = useRef(null);\n const triggerRef = useRef(null);\n const dropdownRef = useRef(null);\n const highlightedItemRef = useRef(null);\n const isOpen = popoverContext?.open ?? false;\n const setIsOpen = popoverContext?.setOpen ?? (() => { });\n // Measure trigger width for popover\n useEffect(() => {\n const element = triggerRef.current;\n if (!element)\n return;\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 // Filter options based on search term and exclude already selected\n const filteredOptions = options.filter(option => !value.includes(option) &&\n option.toLowerCase().includes(searchTerm.toLowerCase()));\n // Check if create option should be shown\n const showCreateOption = creatable && searchTerm && !value.includes(searchTerm) && !options.includes(searchTerm);\n // Total number of items (filtered options + create option if shown)\n const totalItems = filteredOptions.length + (showCreateOption ? 1 : 0);\n // Reset highlighted index when filtered options change\n useEffect(() => {\n setHighlightedIndex(0);\n }, [searchTerm, showCreateOption]);\n // Clear pending delete when user starts typing\n useEffect(() => {\n if (searchTerm !== '') {\n setPendingDeleteIndex(null);\n }\n }, [searchTerm]);\n // Scroll highlighted item into view\n useEffect(() => {\n if (isOpen && highlightedItemRef.current && dropdownRef.current) {\n highlightedItemRef.current.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth'\n });\n }\n }, [highlightedIndex, isOpen]);\n // Clear search term when popover closes and refocus input when it opens\n useEffect(() => {\n if (!isOpen) {\n setSearchTerm('');\n }\n else {\n // Ensure input stays focused when popover opens\n inputRef.current?.focus();\n }\n }, [isOpen]);\n const handleSelect = (option) => {\n onChange([...value, option]);\n setSearchTerm('');\n setIsOpen(false);\n setHighlightedIndex(0);\n setPendingDeleteIndex(null);\n };\n const handleCreate = (newTag) => {\n // Add to value\n onChange([...value, newTag]);\n // Add to options if callback provided\n if (onOptionsChange && !options.includes(newTag)) {\n onOptionsChange([...options, newTag]);\n }\n setSearchTerm('');\n setIsOpen(false);\n setHighlightedIndex(0);\n setPendingDeleteIndex(null);\n };\n const handleRemove = (option, e) => {\n e.stopPropagation();\n onChange(value.filter(v => v !== option));\n setPendingDeleteIndex(null);\n };\n const handleKeyDown = (e) => {\n // Handle special keys\n if (e.key === 'Enter' && isOpen && totalItems > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Check if we're selecting the create option\n if (highlightedIndex === filteredOptions.length && showCreateOption) {\n handleCreate(searchTerm);\n }\n else if (highlightedIndex < filteredOptions.length) {\n handleSelect(filteredOptions[highlightedIndex]);\n }\n return;\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n if (!isOpen) {\n setIsOpen(true);\n }\n else {\n setHighlightedIndex(prev => prev < totalItems - 1 ? prev + 1 : prev);\n }\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n if (!isOpen) {\n setIsOpen(true);\n }\n else {\n setHighlightedIndex(prev => (prev > 0 ? prev - 1 : 0));\n }\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n setIsOpen(false);\n return;\n }\n if (e.key === 'Backspace' && searchTerm === '' && value.length > 0) {\n // Two-step deletion: first backspace marks for deletion, second backspace deletes\n e.stopPropagation();\n const lastIndex = value.length - 1;\n if (pendingDeleteIndex === lastIndex) {\n // Second backspace: actually delete the item\n onChange(value.slice(0, -1));\n setPendingDeleteIndex(null);\n }\n else {\n // First backspace: mark for deletion\n setPendingDeleteIndex(lastIndex);\n }\n return;\n }\n // For any other key (typing characters), open dropdown\n if (!isOpen && e.key.length === 1) {\n setIsOpen(true);\n }\n };\n const handleInputClick = (e) => {\n e.stopPropagation();\n if (!disabled) {\n setIsOpen(true);\n }\n };\n const handleInputFocus = () => {\n if (!disabled) {\n setIsOpen(true);\n }\n };\n const handleContainerClick = () => {\n if (!disabled) {\n inputRef.current?.focus();\n }\n };\n return (_jsxs(\"div\", { className: clsx('relative', className), children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(\"div\", { ref: triggerRef, className: clsx('min-h-[40px] w-full rounded-md border border-input bg-background px-3 py-2', 'flex items-center gap-1', layout === 'horizontal' ? 'flex-wrap' : 'flex-col items-stretch', 'cursor-text', 'ring-offset-background', disabled && 'opacity-50 cursor-not-allowed', isOpen ? 'ring-1 ring-inset ring-ring' : ''), onClick: handleContainerClick, children: [layout === 'vertical' && value.length > 0 && (_jsx(\"div\", { className: \"flex flex-col gap-1 w-full\", children: value.map((item, index) => (_jsxs(\"span\", { className: clsx(\"inline-flex items-center justify-between gap-2 px-2 py-1 text-sm bg-primary/10 text-primary rounded-md w-full transition-all\", pendingDeleteIndex === index && \"ring-2 ring-red-300 shadow-[0_0_8px_rgba(252,165,165,0.5)]\"), children: [_jsx(\"span\", { className: \"truncate\", children: item }), _jsx(\"button\", { type: \"button\", onClick: (e) => handleRemove(item, e), disabled: disabled, className: \"hover:bg-primary/20 rounded-sm transition-colors flex-shrink-0\", children: _jsx(X, { className: \"h-3 w-3\" }) })] }, item))) })), layout === 'horizontal' && value.map((item, index) => (_jsxs(\"span\", { className: clsx(\"inline-flex items-center gap-1 px-2 py-1 text-sm bg-primary/10 text-primary rounded-md transition-all\", pendingDeleteIndex === index && \"ring-2 ring-red-300 shadow-[0_0_8px_rgba(252,165,165,0.5)]\"), children: [item, _jsx(\"button\", { type: \"button\", onClick: (e) => handleRemove(item, e), disabled: disabled, className: \"hover:bg-primary/20 rounded-sm transition-colors\", children: _jsx(X, { className: \"h-3 w-3\" }) })] }, item))), _jsx(\"input\", { ref: inputRef, type: \"text\", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), onKeyDown: handleKeyDown, onClick: handleInputClick, onFocus: handleInputFocus, disabled: disabled, placeholder: value.length === 0 ? placeholder : '', className: clsx('flex-1 min-w-[120px] bg-transparent text-sm', 'placeholder:text-muted-foreground', 'border-none outline-none focus:outline-none focus:ring-0 p-0 m-0', layout === 'vertical' && 'w-full') })] }) }), _jsx(PopoverContent, { style: { width: `${width}px` }, className: \"p-0 bg-popover border border-border shadow-lg\", align: \"start\", side: \"bottom\", onOpenAutoFocus: (e) => {\n // Prevent the popover from stealing focus from the input\n e.preventDefault();\n }, children: _jsx(\"div\", { ref: dropdownRef, className: \"overflow-y-auto\", style: { maxHeight: `${maxDropdownHeight}px` }, children: filteredOptions.length === 0 && !showCreateOption ? (_jsx(\"div\", { className: \"px-3 py-2 text-sm text-muted-foreground\", children: searchTerm ? 'No options found' : 'No more options available' })) : (_jsxs(_Fragment, { children: [filteredOptions.length > 0 && (_jsx(\"ul\", { className: \"py-1\", children: filteredOptions.map((option, index) => (_jsx(\"li\", { ref: (el) => {\n if (index === highlightedIndex) {\n highlightedItemRef.current = el;\n }\n }, onClick: () => handleSelect(option), onMouseEnter: () => setHighlightedIndex(index), className: clsx('px-3 py-2 text-sm cursor-pointer transition-colors', index === highlightedIndex\n ? 'bg-blue-500/20 text-foreground'\n : 'hover:bg-accent/50'), children: option }, option))) })), showCreateOption && (_jsxs(_Fragment, { children: [filteredOptions.length > 0 && (_jsx(\"div\", { className: \"border-t border-border\" })), _jsx(\"div\", { ref: (el) => {\n if (highlightedIndex === filteredOptions.length) {\n highlightedItemRef.current = el;\n }\n }, onClick: () => handleCreate(searchTerm), onMouseEnter: () => setHighlightedIndex(filteredOptions.length), className: clsx('px-3 py-2 text-sm cursor-pointer transition-colors text-primary', highlightedIndex === filteredOptions.length\n ? 'bg-blue-500/20'\n : 'hover:bg-accent/50'), children: createText.replace('%value%', searchTerm) })] }))] })) }) })] }));\n}\nexport function TagsInput(props) {\n return (_jsx(Popover, { click: true, children: _jsx(TagsInputContent, { ...props }) }));\n}\n//# sourceMappingURL=TagsInput.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 /**\n * Optional name for debugging purposes.\n * When provided, changes to this property will be logged to the console in development mode,\n * making it easier to track state changes and debug reactive updates.\n *\n * Example: new Property<string>('', 'streamingText')\n * Will log: [CompositeState] streamingText: \"\" → \"new value\"\n */\n name;\n constructor(value, name) {\n this._value = value;\n this.name = name;\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/**\n * Computed property that derives its value from other properties.\n * Automatically recalculates when any of its dependencies change.\n *\n * Think of it like a spreadsheet formula: if cell A1 = 5 and A2 = 10,\n * then A3 = A1 + A2 will automatically update to 15. If A1 changes to 7,\n * A3 automatically becomes 17.\n *\n * @example Basic usage\n * ```typescript\n * class MyState {\n * count = new Property(0, 'count');\n * multiplier = new Property(2, 'multiplier');\n *\n * // Automatically recalculates when count or multiplier changes\n * result = new ComputedProperty(\n * () => (this.count.value || 0) * (this.multiplier.value || 0),\n * [this.count, this.multiplier],\n * 'result'\n * );\n * }\n *\n * state.count.value = 5; // result automatically becomes 10\n * state.multiplier.value = 3; // result automatically becomes 15\n * ```\n *\n * @example Derived state\n * ```typescript\n * class EditorState {\n * workingCopy = new Property<Interaction>();\n * sourceInteraction = new Property<Interaction>();\n *\n * // Automatically true when workingCopy differs from source\n * isDirty = new ComputedProperty(\n * () => JSON.stringify(this.workingCopy.value) !==\n * JSON.stringify(this.sourceInteraction.value),\n * [this.workingCopy, this.sourceInteraction],\n * 'isDirty'\n * );\n * }\n * ```\n *\n * @example Cascading computed properties\n * ```typescript\n * class State {\n * a = new Property(1);\n * b = new Property(2);\n * sum = new ComputedProperty(() => a.value + b.value, [a, b]);\n * doubled = new ComputedProperty(() => sum.value * 2, [sum]);\n * }\n * ```\n *\n * Benefits:\n * - ✅ Automatic updates when dependencies change\n * - ✅ Memoization - only recalculates when needed\n * - ✅ Composable - can depend on other ComputedProperties\n * - ✅ Type-safe with full TypeScript support\n *\n * When to use:\n * - ✅ For derived state (values calculated from other values)\n * - ✅ When dependencies are other Properties or ComputedProperties\n * - ❌ NOT for async operations (use regular methods instead)\n * - ❌ NOT if compute function has side effects\n *\n * @important Remember to call dispose() when the ComputedProperty is no longer needed\n * to prevent memory leaks by unsubscribing from all dependencies.\n */\nexport class ComputedProperty {\n compute;\n _value;\n watchers = [];\n unsubscribers = [];\n /**\n * Optional name for debugging purposes.\n * When provided, recalculations will be logged to the console in development mode.\n */\n name;\n /**\n * @param compute - Function that calculates the derived value\n * @param dependencies - Array of Properties this computed value depends on\n * @param name - Optional name for debugging\n */\n constructor(compute, dependencies, name) {\n this.compute = compute;\n this.name = name;\n this.recalculate();\n // Watch all dependencies - when any changes, recalculate\n for (const dep of dependencies) {\n this.unsubscribers.push(dep.watch(() => this.recalculate()));\n }\n }\n recalculate() {\n const newValue = this.compute();\n if (newValue !== this._value) {\n this._value = newValue;\n for (const watcher of this.watchers) {\n watcher(newValue);\n }\n }\n }\n get value() {\n return this._value;\n }\n watch(watcher) {\n this.watchers.push(watcher);\n return () => {\n this.watchers = this.watchers.filter(w => w !== watcher);\n };\n }\n /**\n * Dispose of this ComputedProperty by unsubscribing from all dependencies.\n * Call this when the ComputedProperty is no longer needed to prevent memory leaks.\n *\n * @example\n * ```typescript\n * const computed = new ComputedProperty(...);\n *\n * // Later, when cleaning up:\n * computed.dispose();\n * ```\n */\n dispose() {\n for (const unsub of this.unsubscribers) {\n unsub();\n }\n this.watchers = [];\n }\n}\n//# sourceMappingURL=CompositeState.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","Center","clsx","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","props","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","clearable","noMatchMessage","openOnFocus","popupId","floor","random","popupCtrl","inputRef","Object","assign","inputBoxRef","React","useComboboxCtrl","focus","openMenu","closeMenu","toggle","toggleMenu","setInputValue","inputText","inputValue","selectedItem","showMenu","isMenuOpen","filteredItems","_jsxs","_Fragment","boxRef","fillWidth","ComboInput","showClear","buttonCount","paddingRight","getInputProps","onFocus","alignItems","backgroundColor","cursor","onClick","XIcon","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","SimpleCombobox","creatable","rest","instance","Divider","EmptyCollection","buttonLabel","stroke","vectorEffect","strokeLinecap","strokeLinejoin","strokeWidth","Button","Plus","FileUploadInput","onUpload","type","files","ar","fileListToArray","DropZone","dropZoneProps","useDropZone","htmlFor","xmlns","dragOverClass","dropEffect","onDrop","preventDefault","__dragOver_cnt__","classList","remove","dataTransfer","promises","traverseFileTree","path","Promise","resolve","isFile","file","defineProperty","isDirectory","dirReader","createReader","entries","readEntries","results","entry","all","then","filesArrays","flat","webkitGetAsEntry","allFiles","onDragOver","onDragEnter","el","cnt","_onDragEnter","add","onDragLeave","_onDragLeave","cn","inputs","twMerge","PortalContainerContext","PortalContainerProvider","inherited","container","setContainer","getRootNode","ShadowRoot","Document","child","Array","from","HTMLElement","appendChild","findOrCreatePortalContainer","usePortalContainer","TooltipProvider","TooltipPrimitive","Tooltip","Root","TooltipTrigger","Trigger","TooltipContent","forwardRef","sideOffset","side","Portal","Content","VTooltip","description","placement","asChild","setOpen","suppressRef","suppress","requestAnimationFrame","delayDuration","onOpenChange","v","FormItem","required","label","direction","disabled","fullWidthLabel","childrenId","Info","displayName","badgeVariants","cva","variants","variant","default","secondary","destructive","attention","success","info","done","defaultVariants","Badge","dotBadgeVariants","dotVariants","DotBadge","dotClassName","cx","cy","r","xs","sm","md","lg","xl","unstyled","noPadding","legacy","readOnly","X","InputList","delimiters","autoFocus","setText","splice","_onClick","onBlur","trim","isEmpty","indexOf","pop","onPaste","pastedText","clipboardData","getData","delimiterPattern","char","replace","join","regex","RegExp","newValues","Link","underline","underlineClass","MenuList","MenuListItem","href","e","Item","Styles","INPUT_UNSTYLED","INPUT","numberToString","isNaN","toString","NumberInput","noScroll","noSpinners","textValue","setTextValue","onWheel","event","blur","num","parseFloat","NAMESPACE","i18nInstance","i18next","createInstance","use","initReactI18next","init","resources","de","en","es","fr","it","ja","ko","pt","ru","tr","zh","fallbackLng","ns","defaultNS","interpolation","escapeValue","react","useSuspense","buttonVariants","outline","ghost","link","primary","icon","isDisabled","isLoading","buttonElement","Slot","Loader2","CopyButton","content","toast","isCopied","setIsCopied","t","getFixedT","stopPropagation","navigator","clipboard","writeText","status","message","duration","catch","err","console","error","Check","CopyIcon","Overlay","overlayContent","overlayClassName","showCloseButton","triggerClassName","backdropClassName","animationConfig","stiffness","damping","setIsOpen","animationProps","initial","x","animate","exit","y","opacity","scale","getAnimationProps","positionClasses","baseClasses","getPositionClasses","motion","div","transition","PORTAL_ID","tempNode","portalEl","setPortalEl","doc","ownerDocument","ThemeProviderContext","theme","setTheme","ThemeProvider","defaultTheme","storageKey","localStorage","getItem","systemTheme","matchMedia","matches","setItem","useTheme","useUITranslation","useTranslation","i18n","ModeOption","option","ModeToggle","resolvedLabel","Computer","Sun","Moon","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","VisuallyHidden","clip","whiteSpace","wordWrap","ModalContext","useIsInModal","ModalContextProvider","Modal","noCloseButton","allowOverflow","disableCloseOnClickOutside","action","handleOpenChange","Dialog","DialogOverlay","DialogDescription","DialogContent","getSizeClasses","DialogClose","ModalTitle","show","showDivider","DialogTitle","ModalBody","ModalFooter","center","DialogPrimitive","DialogTrigger","DialogPortal","Close","onOpenAutoFocus","Description","Title","ConfirmModal","onConfirm","onCancel","cancelButtonRef","TriangleAlert","useToast","ToastContext","icons","CircleCheck","CircleX","warning","AlertTriangle","colors","NotificationPanel","data","setShow","timeoutRef","resetTimeout","globalThis","clearTimeout","clearCurrentTimeout","Icon","AnimatePresence","onExitComplete","ease","ToastProvider","setData","DeleteModal","idToDelete","setIdToDelete","deleteApi","async","finally","Separator","orientation","decorative","SeparatorPrimitive","PopoverContext","Popover","hover","click","modal","_open","PopoverPrimitive","handleHover","PopoverTrigger","prev","PopoverAnchor","Anchor","PopoverContent","PopoverClose","usePopoverContext","ctx","Command","CommandPrimitive","CommandDialog","CommandInput","Search","CommandList","List","CommandEmpty","Empty","CommandGroup","Group","CommandSeparator","CommandItem","CommandShortcut","SelectBox","optionLabel","addNew","addNewLabel","filterBy","popupClass","isClearable","multiple","by","inline","warnOnMissingValue","missingValueWarning","clearIcon","clearTitle","triggerRef","setWidth","filterValue","setFilterValue","isMissingValue","useMemo","some","opt","isEqual","updateWidth","contentWidth","resizeObserver","ResizeObserver","observe","disconnect","isOptionSelected","selectedValues","isOptionsEqual","a","b","filteredOptions","filterLc","filterFn","o","getFilterByFn","renderOptionsContent","SearchIcon","currentTarget","scrollTop","deltaY","isSelected","isArray","currentValues","SquarePlus","absoluteStrokeWidth","LoaderCircle","arrayValue","slice","renderMultipleValue","singleValue","renderSingleValue","ChevronsUpDown","TabsContext","tabs","setTab","responsive","updateHash","Tabs","defaultValue","fullHeight","onTabChange","visibleTabs","tab","is_allowed","setValue","currentValue","hash","location","currentTab","substring","handleHashChange","handleValueChange","newValue","currentState","history","state","newUrl","pathname","search","pushState","useCallback","tabName","TabsPrimitive","onValueChange","TabsBar","sticky","handleTabChange","TabsList","TabsTrigger","warn","TabsPanel","TabsContent","handleClick","labelVariants","Label","LabelPrimitive","Breadcrumbs","maxItems","separator","renderBreadcrumbItem","shortenedLabel","BreadcrumbButton","BreadcrumbPage","Breadcrumb","BreadcrumbList","Fragment","BreadcrumbItem","BreadcrumbSeparator","ChevronRight","lastThreeItems","BreadcrumbEllipsis","role","MoreHorizontal","AnimateChangeInHeight","containerRef","setHeight","observedHeight","contentRect","Checkbox","CheckboxPrimitive","Indicator","DynamicLabel","labelRenderer","fallbackLabel","setLabel","setIsLoading","result","renderLabel","SelectionCombobox","filterType","filterValues","setFilterValues","commandInput","setCommandInput","commandInputRef","nonSelectedFilterValues","onInputCapture","checked","calendarStyles","DateCombobox","isRange","localDateRange","setLocalDateRange","selectedDate","dayjs","toDate","dateRange","handleDateChange","date","format","actualDate","alignOffset","ReactCalendar","selectRange","returnValue","maxDate","Date","setHours","tileClassName","view","currentDate","getTime","today","startDate","endDate","TextCombobox","StringListCombobox","tags","setTags","JSON","stringify","generateComboboxOptions","setFilters","filterGroups","f","dateValue","values","filterGroup","group","Filters","filters","TextFilter","selectedView","handleClose","handleTextFilterAdd","DateFilter","setSelectedDate","setDateRange","selectedGroup","g","isDateRange","effectiveDateRange","selectedDateStart","toISOString","Calendar","SelectFilter","selectedOptions","setSelectedOptions","groupName","getFilteredOptions","filterOption","existingFilterIndex","findIndex","updatedFilters","handleOptionToggle","StringListFilter","FilterContext","FilterProvider","inModal","searchParams","URL","initialFiltersParam","URLSearchParams","get","processedUrlFilters","Set","hasRestoredFromUrl","params","filterString","encodeURIComponent","firstValue","set","delete","replaceState","filterPairs","newFilters","pair","encodedName","valuesString","decodeURIComponent","has","startsWith","endsWith","arrayContent","encodedValue","matchingOption","_error","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","minLines","maxLines","textareaRef","growing","resize","lineHeight","fontSize","paddingY","paddingTop","paddingBottom","borderY","borderTopWidth","borderBottomWidth","effectiveMax","Infinity","minHeight","contentHeight","useLayoutEffect","MessageBox","defaultIcon","titleColor","textColor","bgColor","ErrorBox","InfoBox","WarningBox","SuccessBox","DefaultBox","footer","collapsible","defaultCollapsed","isCollapsed","setIsCollapsed","ChevronDown","ChevronUp","sizes","Switch","trackSize","thumbSize","thumbTranslate","switchEl","SwitchPrimitive","onCheckedChange","Thumb","RadioGroupItem","RadioGroupPrimitive","RadioGroupAdapter","descriptionOf","selectedClassName","RadioGroup","selected","getId","getLabel","labelOf","getDescription","RadioOptionAdapter","Collapsible","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","HoverMenuContext","DropdownMenu","DropdownMenuPrimitive","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","inset","DropdownMenuCheckboxItem","CheckboxItem","ItemIndicator","CheckIcon","DropdownMenuRadioGroup","DropdownMenuRadioItem","RadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","Sub","DropdownMenuSubTrigger","SubTrigger","ChevronRightIcon","DropdownMenuSubContent","SubContent","alignMap","Dropdown","trigger","closeTimer","MenuGroup","MenuItem","isHoverMenu","baseClass","defaultOptionLayout","check","reverse","SelectList","optionLayout","noCheck","setSelected","optionEquals","o1","o2","SelectListOption","SidePanel","panelWidth","backdrop","resizable","contentClassName","_panelWidth","setPanelWidth","isLeft","positionClass","paddingClass","borderClass","dragHandleClass","initialX","onMouseDown","isDragging","startX","pageX","startWidth","handleMouseMove","deltaX","newWidth","handleMouseUp","CloseButton","Spinner","Table","THead","RowSkeleton","columns","_","TBody","rows","TR","TagsInputContent","onOptionsChange","createText","maxDropdownHeight","popoverContext","searchTerm","setSearchTerm","setHighlightedIndex","pendingDeleteIndex","setPendingDeleteIndex","dropdownRef","highlightedItemRef","showCreateOption","totalItems","block","behavior","handleCreate","newTag","handleRemove","lastIndex","TagsInput","Property","watchers","watcher","watch","w","createCompositeStateProvider","StateClass","Context","consume","_current","withConsumer","useCompositeState","useGetCompositeStateProperty","property","useSetCompositeStateProperty","useWatchCompositeStateProperty","useSlot","slot","useWatchSlot","useDefineSlot","ComputedProperty","compute","unsubscribers","dependencies","recalculate","dep","dispose","unsub","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","leave","threshold","unobserve","concat","useIsFirstRendering","isFirstRender","useSafeLayoutEffect","useScrollableSearch","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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"}
|