@vertesia/ui 1.4.0 → 1.5.0-dev.20260713.151751Z
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/core/components/InputList.d.ts.map +1 -1
- package/lib/core/components/InputList.js +3 -2
- package/lib/core/components/InputList.js.map +1 -1
- package/lib/core/components/SelectList.d.ts.map +1 -1
- package/lib/core/components/SelectList.js +1 -1
- package/lib/core/components/SelectList.js.map +1 -1
- package/lib/core/components/TagsInput.d.ts.map +1 -1
- package/lib/core/components/TagsInput.js +36 -4
- package/lib/core/components/TagsInput.js.map +1 -1
- package/lib/core/components/popup/Popup.js +2 -1
- package/lib/core/components/popup/Popup.js.map +1 -1
- package/lib/core/components/popup/position.d.ts.map +1 -1
- package/lib/core/components/popup/position.js +3 -6
- package/lib/core/components/popup/position.js.map +1 -1
- package/lib/core/components/shadcn/badge.d.ts +2 -2
- package/lib/core/components/shadcn/badge.d.ts.map +1 -1
- package/lib/core/components/shadcn/badge.js +3 -0
- package/lib/core/components/shadcn/badge.js.map +1 -1
- package/lib/core/components/shadcn/breadcrumb.d.ts.map +1 -1
- package/lib/core/components/shadcn/breadcrumb.js +2 -2
- package/lib/core/components/shadcn/breadcrumb.js.map +1 -1
- package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/filterBar.js +1 -3
- package/lib/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/core/components/shadcn/resizeable.d.ts +1 -1
- package/lib/core/components/shadcn/resizeable.d.ts.map +1 -1
- package/lib/core/components/shadcn/resizeable.js +12 -2
- package/lib/core/components/shadcn/resizeable.js.map +1 -1
- package/lib/core/components/shadcn/selectBox.d.ts +7 -1
- package/lib/core/components/shadcn/selectBox.d.ts.map +1 -1
- package/lib/core/components/shadcn/selectBox.js +29 -12
- package/lib/core/components/shadcn/selectBox.js.map +1 -1
- package/lib/core/components/table/index.d.ts.map +1 -1
- package/lib/core/components/table/index.js +1 -1
- package/lib/core/components/table/index.js.map +1 -1
- package/lib/core/hooks/useIntersectionObserver.d.ts.map +1 -1
- package/lib/core/hooks/useIntersectionObserver.js +3 -1
- package/lib/core/hooks/useIntersectionObserver.js.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.js +3 -6
- package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/features/agent/chat/AnimatedThinkingDots.d.ts.map +1 -1
- package/lib/features/agent/chat/AnimatedThinkingDots.js +1 -1
- package/lib/features/agent/chat/AnimatedThinkingDots.js.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.js +4 -3
- package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +56 -11
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +8 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +40 -31
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +3 -3
- package/lib/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +5 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +3 -7
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js +5 -5
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +4 -4
- package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +3 -3
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +156 -8
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
- package/lib/features/agent/chat/hooks/useFileProcessing.d.ts +1 -0
- package/lib/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useFileProcessing.js +37 -3
- package/lib/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.js +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
- package/lib/features/facets/InteractionsFacetsNav.d.ts +10 -1
- package/lib/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/InteractionsFacetsNav.js +14 -5
- package/lib/features/facets/InteractionsFacetsNav.js.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.js +12 -1
- package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
- package/lib/features/facets/RunsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/RunsFacetsNav.js +1 -1
- package/lib/features/facets/RunsFacetsNav.js.map +1 -1
- package/lib/features/magic-pdf/AnnotatedImageSlider.d.ts.map +1 -1
- package/lib/features/magic-pdf/AnnotatedImageSlider.js +1 -3
- package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
- package/lib/features/magic-pdf/MagicPdfProvider.js +2 -3
- package/lib/features/magic-pdf/MagicPdfProvider.js.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.d.ts +6 -2
- package/lib/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.js +6 -6
- package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +1 -1
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/DocumentIcon.d.ts.map +1 -1
- package/lib/features/store/objects/components/DocumentIcon.js +1 -1
- package/lib/features/store/objects/components/DocumentIcon.js.map +1 -1
- package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts +4 -4
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.js +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.js.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContext.js +2 -25
- package/lib/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContextClass.d.ts +0 -2
- package/lib/features/store/objects/selection/ObjectsActionContextClass.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContextClass.js +1 -7
- package/lib/features/store/objects/selection/ObjectsActionContextClass.js.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionHooks.d.ts +0 -1
- package/lib/features/store/objects/selection/ObjectsActionHooks.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionHooks.js +0 -10
- package/lib/features/store/objects/selection/ObjectsActionHooks.js.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.d.ts +4 -0
- package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js +4 -18
- package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
- package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js +16 -7
- package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.d.ts +7 -0
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.d.ts.map +1 -0
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +51 -0
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -0
- package/lib/features/store/objects/selection/actions/index.d.ts +0 -1
- package/lib/features/store/objects/selection/actions/index.d.ts.map +1 -1
- package/lib/features/store/objects/selection/actions/index.js +0 -1
- package/lib/features/store/objects/selection/actions/index.js.map +1 -1
- package/lib/features/store/types/ContentObjectTypesSearch.d.ts.map +1 -1
- package/lib/features/store/types/ContentObjectTypesSearch.js +55 -3
- package/lib/features/store/types/ContentObjectTypesSearch.js.map +1 -1
- package/lib/features/store/types/ContentObjectTypesTable.d.ts +5 -1
- package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
- package/lib/features/store/types/ContentObjectTypesTable.js +4 -2
- package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.js +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.js.map +1 -1
- package/lib/i18n/locales/ar.json +17 -0
- package/lib/i18n/locales/de.json +17 -0
- package/lib/i18n/locales/en.json +33 -0
- package/lib/i18n/locales/es.json +17 -0
- package/lib/i18n/locales/fr.json +17 -0
- package/lib/i18n/locales/it.json +17 -0
- package/lib/i18n/locales/ja.json +17 -0
- package/lib/i18n/locales/ko.json +17 -0
- package/lib/i18n/locales/pt.json +17 -0
- package/lib/i18n/locales/ru.json +17 -0
- package/lib/i18n/locales/tr.json +17 -0
- package/lib/i18n/locales/zh-TW.json +17 -0
- package/lib/i18n/locales/zh.json +17 -0
- package/lib/layout/Sidebar.d.ts +5 -1
- package/lib/layout/Sidebar.d.ts.map +1 -1
- package/lib/layout/Sidebar.js.map +1 -1
- package/lib/router/NestedRouterProvider.d.ts +1 -1
- package/lib/router/NestedRouterProvider.d.ts.map +1 -1
- package/lib/router/NestedRouterProvider.js +2 -2
- package/lib/router/NestedRouterProvider.js.map +1 -1
- package/lib/router/Redirect.d.ts +13 -0
- package/lib/router/Redirect.d.ts.map +1 -0
- package/lib/router/Redirect.js +20 -0
- package/lib/router/Redirect.js.map +1 -0
- package/lib/router/Router.d.ts.map +1 -1
- package/lib/router/Router.js +1 -2
- package/lib/router/Router.js.map +1 -1
- package/lib/router/index.d.ts +1 -0
- package/lib/router/index.d.ts.map +1 -1
- package/lib/router/index.js +1 -0
- package/lib/router/index.js.map +1 -1
- package/lib/session/DevSessionProvider.d.ts +8 -0
- package/lib/session/DevSessionProvider.d.ts.map +1 -0
- package/lib/session/DevSessionProvider.js +33 -0
- package/lib/session/DevSessionProvider.js.map +1 -0
- package/lib/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/session/UserSessionProvider.js +16 -2
- package/lib/session/UserSessionProvider.js.map +1 -1
- package/lib/session/auth/composable.d.ts +10 -1
- package/lib/session/auth/composable.d.ts.map +1 -1
- package/lib/session/auth/composable.js +38 -2
- package/lib/session/auth/composable.js.map +1 -1
- package/lib/session/index.d.ts +1 -0
- package/lib/session/index.d.ts.map +1 -1
- package/lib/session/index.js +1 -0
- package/lib/session/index.js.map +1 -1
- package/lib/shell/VertesiaShell.d.ts +3 -1
- package/lib/shell/VertesiaShell.d.ts.map +1 -1
- package/lib/shell/VertesiaShell.js +5 -4
- package/lib/shell/VertesiaShell.js.map +1 -1
- package/lib/shell/login/SignInRestrictedEnvStep.d.ts +14 -0
- package/lib/shell/login/SignInRestrictedEnvStep.d.ts.map +1 -0
- package/lib/shell/login/SignInRestrictedEnvStep.js +50 -0
- package/lib/shell/login/SignInRestrictedEnvStep.js.map +1 -0
- package/lib/shell/login/SigninScreen.d.ts.map +1 -1
- package/lib/shell/login/SigninScreen.js +16 -3
- package/lib/shell/login/SigninScreen.js.map +1 -1
- package/lib/shell/login/productionUrl.d.ts +16 -0
- package/lib/shell/login/productionUrl.d.ts.map +1 -0
- package/lib/shell/login/productionUrl.js +19 -0
- package/lib/shell/login/productionUrl.js.map +1 -0
- package/lib/shell/login/signInUtils.d.ts.map +1 -1
- package/lib/shell/login/signInUtils.js +14 -1
- package/lib/shell/login/signInUtils.js.map +1 -1
- package/lib/vertesia-ui-core.js +95 -2
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-env.js +2 -2
- package/lib/vertesia-ui-env.js.map +1 -1
- package/lib/vertesia-ui-features.js +454 -2
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +41 -2
- package/lib/vertesia-ui-i18n.js.map +1 -1
- package/lib/vertesia-ui-layout.js +2 -2
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-router.js +2 -2
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-session.js +2 -2
- package/lib/vertesia-ui-session.js.map +1 -1
- package/lib/vertesia-ui-shell.js +2 -2
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +9 -2
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/json-view/JSONCode.d.ts.map +1 -1
- package/lib/widgets/json-view/JSONCode.js +1 -1
- package/lib/widgets/json-view/JSONCode.js.map +1 -1
- package/lib/widgets/json-view/JSONTable.d.ts.map +1 -1
- package/lib/widgets/json-view/JSONTable.js +1 -1
- package/lib/widgets/json-view/JSONTable.js.map +1 -1
- package/lib/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
- package/lib/widgets/markdown/ArtifactContentRenderer.js +1 -1
- package/lib/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
- package/lib/widgets/markdown/CodeBlockPlaceholder.d.ts.map +1 -1
- package/lib/widgets/markdown/CodeBlockPlaceholder.js +1 -1
- package/lib/widgets/markdown/CodeBlockPlaceholder.js.map +1 -1
- package/lib/widgets/monacoEditor/foldingProviders.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/foldingProviders.js +5 -10
- package/lib/widgets/monacoEditor/foldingProviders.js.map +1 -1
- package/lib/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
- package/lib/widgets/schema-editor/ManagedSchema.js +1 -2
- package/lib/widgets/schema-editor/ManagedSchema.js.map +1 -1
- package/lib/widgets/upload/UploadResultCategory.d.ts.map +1 -1
- package/lib/widgets/upload/UploadResultCategory.js +1 -1
- package/lib/widgets/upload/UploadResultCategory.js.map +1 -1
- package/lib/widgets/xml-viewer/components/TextElement/index.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/components/TextElement/index.js +1 -1
- package/lib/widgets/xml-viewer/components/TextElement/index.js.map +1 -1
- package/package.json +38 -43
- package/src/core/components/InputList.tsx +5 -10
- package/src/core/components/SelectList.tsx +7 -2
- package/src/core/components/TagsInput.tsx +41 -4
- package/src/core/components/popup/Popup.tsx +3 -3
- package/src/core/components/popup/position.ts +3 -6
- package/src/core/components/shadcn/badge.tsx +3 -0
- package/src/core/components/shadcn/breadcrumb.tsx +2 -4
- package/src/core/components/shadcn/filters/filterBar.tsx +2 -3
- package/src/core/components/shadcn/resizeable.test.tsx +77 -0
- package/src/core/components/shadcn/resizeable.tsx +28 -2
- package/src/core/components/shadcn/selectBox.tsx +70 -36
- package/src/core/components/table/index.tsx +1 -2
- package/src/core/hooks/useIntersectionObserver.tsx +3 -1
- package/src/features/agent/chat/AgentRightPanel.tsx +5 -6
- package/src/features/agent/chat/AnimatedThinkingDots.tsx +1 -2
- package/src/features/agent/chat/AskUserWidget.test.tsx +49 -0
- package/src/features/agent/chat/AskUserWidget.tsx +32 -22
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +198 -1
- package/src/features/agent/chat/ModernAgentConversation.tsx +62 -15
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +60 -34
- package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +3 -3
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +25 -0
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +5 -1
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +30 -30
- package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +5 -6
- package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +4 -5
- package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +3 -5
- package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +326 -42
- package/src/features/agent/chat/hooks/useFileProcessing.test.tsx +70 -0
- package/src/features/agent/chat/hooks/useFileProcessing.ts +37 -6
- package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -2
- package/src/features/facets/InteractionsFacetsNav.tsx +30 -5
- package/src/features/facets/PromptsFacetsNav.tsx +13 -1
- package/src/features/facets/RunsFacetsNav.tsx +1 -2
- package/src/features/magic-pdf/AnnotatedImageSlider.tsx +1 -2
- package/src/features/magic-pdf/MagicPdfProvider.tsx +4 -4
- package/src/features/store/objects/DocumentSearchResults.tsx +11 -1
- package/src/features/store/objects/components/ContentOverview.tsx +1 -2
- package/src/features/store/objects/components/DocumentIcon.tsx +1 -2
- package/src/features/store/objects/components/DocumentInput.tsx +2 -2
- package/src/features/store/objects/search/DocumentSearchContext.test.ts +2 -2
- package/src/features/store/objects/search/DocumentSearchContext.ts +3 -3
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -27
- package/src/features/store/objects/selection/ObjectsActionContextClass.ts +1 -7
- package/src/features/store/objects/selection/ObjectsActionHooks.ts +0 -11
- package/src/features/store/objects/selection/SelectionActions.tsx +9 -34
- package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +40 -7
- package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +104 -0
- package/src/features/store/objects/selection/actions/index.ts +0 -1
- package/src/features/store/types/ContentObjectTypesSearch.tsx +110 -1
- package/src/features/store/types/ContentObjectTypesTable.tsx +42 -3
- package/src/features/store/types/search/ObjectTypeSearchContext.tsx +1 -1
- package/src/i18n/locales/ar.json +17 -0
- package/src/i18n/locales/de.json +17 -0
- package/src/i18n/locales/en.json +33 -0
- package/src/i18n/locales/es.json +17 -0
- package/src/i18n/locales/fr.json +17 -0
- package/src/i18n/locales/it.json +17 -0
- package/src/i18n/locales/ja.json +17 -0
- package/src/i18n/locales/ko.json +17 -0
- package/src/i18n/locales/pt.json +17 -0
- package/src/i18n/locales/ru.json +17 -0
- package/src/i18n/locales/tr.json +17 -0
- package/src/i18n/locales/zh-TW.json +17 -0
- package/src/i18n/locales/zh.json +17 -0
- package/src/layout/Sidebar.tsx +6 -1
- package/src/router/NestedRouterProvider.tsx +2 -2
- package/src/router/Redirect.tsx +29 -0
- package/src/router/Router.tsx +1 -2
- package/src/router/index.ts +1 -0
- package/src/session/DevSessionProvider.tsx +46 -0
- package/src/session/UserSessionProvider.tsx +18 -2
- package/src/session/auth/composable.ts +41 -3
- package/src/session/index.ts +1 -0
- package/src/shell/VertesiaShell.tsx +27 -14
- package/src/shell/login/SignInRestrictedEnvStep.tsx +87 -0
- package/src/shell/login/SigninScreen.tsx +29 -16
- package/src/shell/login/productionUrl.test.ts +19 -0
- package/src/shell/login/productionUrl.ts +18 -0
- package/src/shell/login/signInUtils.ts +14 -1
- package/src/widgets/json-view/JSONCode.tsx +1 -2
- package/src/widgets/json-view/JSONTable.tsx +1 -2
- package/src/widgets/markdown/ArtifactContentRenderer.tsx +4 -7
- package/src/widgets/markdown/CodeBlockPlaceholder.tsx +1 -2
- package/src/widgets/monacoEditor/foldingProviders.ts +10 -15
- package/src/widgets/schema-editor/ManagedSchema.ts +1 -2
- package/src/widgets/upload/UploadResultCategory.tsx +2 -3
- package/src/widgets/xml-viewer/components/TextElement/index.tsx +1 -2
- package/lib/features/store/objects/selection/actions/StartWorkflowComponent.d.ts +0 -4
- package/lib/features/store/objects/selection/actions/StartWorkflowComponent.d.ts.map +0 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowComponent.js +0 -77
- package/lib/features/store/objects/selection/actions/StartWorkflowComponent.js.map +0 -1
- package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +0 -127
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertesia-ui-i18n.js","sources":["i18n/instance.js","i18n/rtl.js","i18n/LanguageProvider.js","i18n/useLocaleFormat.js","i18n/index.js"],"sourcesContent":["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 returnEmptyString: false,\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","/**\n * RTL detection and language resolution for the @vertesia/ui locale set.\n *\n * SUPPORTED_LANGUAGES is the single source of truth for what locales the\n * switcher offers, and must stay in sync with the resources registered in\n * `./instance.ts`. A divergence-guard test (`./rtl.test.ts`) fails the build\n * if the two diverge.\n *\n * RTL_LANGUAGES is deliberately broader than SUPPORTED_LANGUAGES so that\n * dir=\"rtl\" handling is forward-compatible when new RTL locales (he, fa, ur,\n * ...) are added to instance.ts later.\n */\nexport const SUPPORTED_LANGUAGES = [\n 'ar',\n 'de',\n 'en',\n 'es',\n 'fr',\n 'it',\n 'ja',\n 'ko',\n 'pt',\n 'ru',\n 'tr',\n 'zh',\n 'zh-TW',\n];\nexport const RTL_LANGUAGES = new Set(['ar', 'he', 'fa', 'ur']);\nexport function isRTL(lng) {\n if (!lng)\n return false;\n return RTL_LANGUAGES.has(lng.split('-')[0].toLowerCase());\n}\n/**\n * Resolve any raw language code (BCP-47 or bare) to a SupportedLanguage:\n * 1. exact match against SUPPORTED_LANGUAGES (preserves `zh-TW` vs `zh`)\n * 2. base-language fallback (`pt-BR` -> `pt`)\n * 3. `'en'` fallback\n *\n * The inline FOUC script in `index.html` must reimplement this same logic\n * verbatim (it cannot import ESM before bundle load).\n */\nexport function resolveLanguage(raw) {\n if (!raw)\n return 'en';\n const list = SUPPORTED_LANGUAGES;\n if (list.includes(raw))\n return raw;\n const base = raw.split('-')[0];\n if (list.includes(base))\n return base;\n return 'en';\n}\n//# sourceMappingURL=rtl.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { DirectionProvider } from '@radix-ui/react-direction';\nimport { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { isRTL, resolveLanguage } from './rtl.js';\nconst initialState = {\n language: 'en',\n setLanguage: () => null,\n isRTL: false,\n};\nconst LanguageProviderContext = createContext(initialState);\nexport { LanguageProviderContext };\nfunction readInitialLanguage(storageKey, defaultLanguage) {\n if (typeof window === 'undefined')\n return defaultLanguage;\n const stored = window.localStorage?.getItem(storageKey);\n if (stored)\n return resolveLanguage(stored);\n const nav = window.navigator?.language;\n if (nav)\n return resolveLanguage(nav);\n return defaultLanguage;\n}\nexport function LanguageProvider({ children, defaultLanguage = 'en', storageKey = 'vertesia-ui-language', ...props }) {\n const [language, setLanguage] = useState(() => readInitialLanguage(storageKey, defaultLanguage));\n const rtl = isRTL(language);\n useEffect(() => {\n const root = window.document.documentElement;\n root.lang = language;\n root.dir = rtl ? 'rtl' : 'ltr';\n }, [language, rtl]);\n const value = useMemo(() => ({\n language,\n isRTL: rtl,\n setLanguage: (next) => {\n window.localStorage?.setItem(storageKey, next);\n setLanguage(next);\n },\n }), [language, rtl, storageKey]);\n return (_jsx(LanguageProviderContext.Provider, { ...props, value: value, children: _jsx(DirectionProvider, { dir: rtl ? 'rtl' : 'ltr', children: children }) }));\n}\nexport function useLanguage() {\n const context = useContext(LanguageProviderContext);\n if (context === undefined) {\n throw new Error('useLanguage must be used within a LanguageProvider');\n }\n return context;\n}\n//# sourceMappingURL=LanguageProvider.js.map","import { useMemo } from 'react';\nimport { useLanguage } from './LanguageProvider.js';\nfunction toDate(input) {\n if (input == null)\n return null;\n const d = input instanceof Date ? input : new Date(input);\n return Number.isNaN(d.getTime()) ? null : d;\n}\nconst PLACEHOLDER = '—';\nconst RELATIVE_UNITS = [\n { unit: 'year', seconds: 31536000 },\n { unit: 'month', seconds: 2628000 },\n { unit: 'week', seconds: 604800 },\n { unit: 'day', seconds: 86400 },\n { unit: 'hour', seconds: 3600 },\n { unit: 'minute', seconds: 60 },\n { unit: 'second', seconds: 1 },\n];\nexport function useLocaleFormat() {\n const { language } = useLanguage();\n return useMemo(() => {\n // dateStyle: 'long' so each locale shows its native flavor — Japanese\n // gets 年月日 markers, English gets \"May 11, 2026\", Arabic gets month\n // names, etc. The 'short' style is too aggressively numeric (it\n // renders Japanese as \"2026/05/11\", which is correct per CLDR but\n // doesn't feel localized to users). Call sites that want compact\n // numeric output can pass `{ dateStyle: 'short' }` explicitly.\n const dateLong = new Intl.DateTimeFormat(language, { dateStyle: 'long' });\n const dateTimeLong = new Intl.DateTimeFormat(language, { dateStyle: 'long', timeStyle: 'short' });\n const timeShort = new Intl.DateTimeFormat(language, { timeStyle: 'short' });\n const numberDefault = new Intl.NumberFormat(language);\n const relativeDefault = new Intl.RelativeTimeFormat(language, { numeric: 'auto' });\n const listDefault = new Intl.ListFormat(language);\n return {\n language,\n formatDate: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n return options ? new Intl.DateTimeFormat(language, options).format(d) : dateLong.format(d);\n },\n formatDateTime: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n return options ? new Intl.DateTimeFormat(language, options).format(d) : dateTimeLong.format(d);\n },\n formatTime: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n return options ? new Intl.DateTimeFormat(language, options).format(d) : timeShort.format(d);\n },\n formatNumber: (value, options) => {\n if (value == null || Number.isNaN(value))\n return PLACEHOLDER;\n return options ? new Intl.NumberFormat(language, options).format(value) : numberDefault.format(value);\n },\n formatRelativeTime: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n const diffSeconds = (d.getTime() - Date.now()) / 1000;\n const abs = Math.abs(diffSeconds);\n const { unit, seconds } = RELATIVE_UNITS.find((u) => abs >= u.seconds) ?? RELATIVE_UNITS[RELATIVE_UNITS.length - 1];\n const value = Math.round(diffSeconds / seconds);\n const formatter = options ? new Intl.RelativeTimeFormat(language, options) : relativeDefault;\n return formatter.format(value, unit);\n },\n formatList: (items, options) => {\n const filtered = items.filter((v) => v != null && v !== '');\n if (filtered.length === 0)\n return '';\n return options ? new Intl.ListFormat(language, options).format(filtered) : listDefault.format(filtered);\n },\n };\n }, [language]);\n}\n//# sourceMappingURL=useLocaleFormat.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { I18nextProvider, Trans, useTranslation } from 'react-i18next';\nimport { i18nInstance, NAMESPACE } from './instance.js';\nimport { useLanguage } from './LanguageProvider.js';\nexport { Trans };\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 * Binds i18next to the language reported by the surrounding `LanguageProvider`.\n * Use this inside `VertesiaShell` (or wherever a `LanguageProvider` ancestor is\n * available) so language changes propagate to all `useUITranslation()` callers\n * without a static `lng` prop.\n */\nexport function LanguageBoundI18nProvider({ children }) {\n const { language } = useLanguage();\n return _jsx(I18nProvider, { lng: language, 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';\nexport { LanguageProvider, LanguageProviderContext, useLanguage, } from './LanguageProvider.js';\nexport { isRTL, RTL_LANGUAGES, resolveLanguage, SUPPORTED_LANGUAGES, } from './rtl.js';\nexport { useLocaleFormat } from './useLocaleFormat.js';\n//# sourceMappingURL=index.js.map"],"names":["NAMESPACE","i18nInstance","i18next","createInstance","use","initReactI18next","init","resources","ar","de","en","es","fr","it","ja","ko","pt","ru","tr","zh","fallbackLng","returnEmptyString","ns","defaultNS","interpolation","escapeValue","react","useSuspense","SUPPORTED_LANGUAGES","RTL_LANGUAGES","Set","isRTL","lng","has","split","toLowerCase","resolveLanguage","raw","list","includes","base","LanguageProviderContext","createContext","language","setLanguage","LanguageProvider","children","defaultLanguage","storageKey","props","useState","window","stored","localStorage","getItem","nav","navigator","readInitialLanguage","rtl","useEffect","root","document","documentElement","lang","dir","value","useMemo","next","setItem","_jsx","Provider","DirectionProvider","useLanguage","context","useContext","undefined","Error","toDate","input","d","Date","Number","isNaN","getTime","PLACEHOLDER","RELATIVE_UNITS","unit","seconds","useLocaleFormat","dateLong","Intl","DateTimeFormat","dateStyle","dateTimeLong","timeStyle","timeShort","numberDefault","NumberFormat","relativeDefault","RelativeTimeFormat","numeric","listDefault","ListFormat","formatDate","date","options","format","formatDateTime","formatTime","formatNumber","formatRelativeTime","diffSeconds","now","abs","Math","find","u","length","round","formatList","items","filtered","filter","v","detectLanguage","I18nProvider","changeLanguage","I18nextProvider","i18n","LanguageBoundI18nProvider","useUITranslation","useTranslation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertesia-ui-i18n.js","names":["ar","de","en","es","fr","it","ja","ko","pt","ru","tr","zh","zhTW","_jsx","_jsx"],"sources":["i18n/locales/ar.json","i18n/locales/de.json","i18n/locales/en.json","i18n/locales/es.json","i18n/locales/fr.json","i18n/locales/it.json","i18n/locales/ja.json","i18n/locales/ko.json","i18n/locales/pt.json","i18n/locales/ru.json","i18n/locales/tr.json","i18n/locales/zh.json","i18n/locales/zh-TW.json","i18n/instance.js","i18n/rtl.js","i18n/LanguageProvider.js","i18n/useLocaleFormat.js","i18n/index.js"],"sourcesContent":["","","","","","","","","","","","","","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 returnEmptyString: false,\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","/**\n * RTL detection and language resolution for the @vertesia/ui locale set.\n *\n * SUPPORTED_LANGUAGES is the single source of truth for what locales the\n * switcher offers, and must stay in sync with the resources registered in\n * `./instance.ts`. A divergence-guard test (`./rtl.test.ts`) fails the build\n * if the two diverge.\n *\n * RTL_LANGUAGES is deliberately broader than SUPPORTED_LANGUAGES so that\n * dir=\"rtl\" handling is forward-compatible when new RTL locales (he, fa, ur,\n * ...) are added to instance.ts later.\n */\nexport const SUPPORTED_LANGUAGES = [\n 'ar',\n 'de',\n 'en',\n 'es',\n 'fr',\n 'it',\n 'ja',\n 'ko',\n 'pt',\n 'ru',\n 'tr',\n 'zh',\n 'zh-TW',\n];\nexport const RTL_LANGUAGES = new Set(['ar', 'he', 'fa', 'ur']);\nexport function isRTL(lng) {\n if (!lng)\n return false;\n return RTL_LANGUAGES.has(lng.split('-')[0].toLowerCase());\n}\n/**\n * Resolve any raw language code (BCP-47 or bare) to a SupportedLanguage:\n * 1. exact match against SUPPORTED_LANGUAGES (preserves `zh-TW` vs `zh`)\n * 2. base-language fallback (`pt-BR` -> `pt`)\n * 3. `'en'` fallback\n *\n * The inline FOUC script in `index.html` must reimplement this same logic\n * verbatim (it cannot import ESM before bundle load).\n */\nexport function resolveLanguage(raw) {\n if (!raw)\n return 'en';\n const list = SUPPORTED_LANGUAGES;\n if (list.includes(raw))\n return raw;\n const base = raw.split('-')[0];\n if (list.includes(base))\n return base;\n return 'en';\n}\n//# sourceMappingURL=rtl.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { DirectionProvider } from '@radix-ui/react-direction';\nimport { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { isRTL, resolveLanguage } from './rtl.js';\nconst initialState = {\n language: 'en',\n setLanguage: () => null,\n isRTL: false,\n};\nconst LanguageProviderContext = createContext(initialState);\nexport { LanguageProviderContext };\nfunction readInitialLanguage(storageKey, defaultLanguage) {\n if (typeof window === 'undefined')\n return defaultLanguage;\n const stored = window.localStorage?.getItem(storageKey);\n if (stored)\n return resolveLanguage(stored);\n const nav = window.navigator?.language;\n if (nav)\n return resolveLanguage(nav);\n return defaultLanguage;\n}\nexport function LanguageProvider({ children, defaultLanguage = 'en', storageKey = 'vertesia-ui-language', ...props }) {\n const [language, setLanguage] = useState(() => readInitialLanguage(storageKey, defaultLanguage));\n const rtl = isRTL(language);\n useEffect(() => {\n const root = window.document.documentElement;\n root.lang = language;\n root.dir = rtl ? 'rtl' : 'ltr';\n }, [language, rtl]);\n const value = useMemo(() => ({\n language,\n isRTL: rtl,\n setLanguage: (next) => {\n window.localStorage?.setItem(storageKey, next);\n setLanguage(next);\n },\n }), [language, rtl, storageKey]);\n return (_jsx(LanguageProviderContext.Provider, { ...props, value: value, children: _jsx(DirectionProvider, { dir: rtl ? 'rtl' : 'ltr', children: children }) }));\n}\nexport function useLanguage() {\n const context = useContext(LanguageProviderContext);\n if (context === undefined) {\n throw new Error('useLanguage must be used within a LanguageProvider');\n }\n return context;\n}\n//# sourceMappingURL=LanguageProvider.js.map","import { useMemo } from 'react';\nimport { useLanguage } from './LanguageProvider.js';\nfunction toDate(input) {\n if (input == null)\n return null;\n const d = input instanceof Date ? input : new Date(input);\n return Number.isNaN(d.getTime()) ? null : d;\n}\nconst PLACEHOLDER = '—';\nconst RELATIVE_UNITS = [\n { unit: 'year', seconds: 31536000 },\n { unit: 'month', seconds: 2628000 },\n { unit: 'week', seconds: 604800 },\n { unit: 'day', seconds: 86400 },\n { unit: 'hour', seconds: 3600 },\n { unit: 'minute', seconds: 60 },\n { unit: 'second', seconds: 1 },\n];\nexport function useLocaleFormat() {\n const { language } = useLanguage();\n return useMemo(() => {\n // dateStyle: 'long' so each locale shows its native flavor — Japanese\n // gets 年月日 markers, English gets \"May 11, 2026\", Arabic gets month\n // names, etc. The 'short' style is too aggressively numeric (it\n // renders Japanese as \"2026/05/11\", which is correct per CLDR but\n // doesn't feel localized to users). Call sites that want compact\n // numeric output can pass `{ dateStyle: 'short' }` explicitly.\n const dateLong = new Intl.DateTimeFormat(language, { dateStyle: 'long' });\n const dateTimeLong = new Intl.DateTimeFormat(language, { dateStyle: 'long', timeStyle: 'short' });\n const timeShort = new Intl.DateTimeFormat(language, { timeStyle: 'short' });\n const numberDefault = new Intl.NumberFormat(language);\n const relativeDefault = new Intl.RelativeTimeFormat(language, { numeric: 'auto' });\n const listDefault = new Intl.ListFormat(language);\n return {\n language,\n formatDate: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n return options ? new Intl.DateTimeFormat(language, options).format(d) : dateLong.format(d);\n },\n formatDateTime: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n return options ? new Intl.DateTimeFormat(language, options).format(d) : dateTimeLong.format(d);\n },\n formatTime: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n return options ? new Intl.DateTimeFormat(language, options).format(d) : timeShort.format(d);\n },\n formatNumber: (value, options) => {\n if (value == null || Number.isNaN(value))\n return PLACEHOLDER;\n return options ? new Intl.NumberFormat(language, options).format(value) : numberDefault.format(value);\n },\n formatRelativeTime: (date, options) => {\n const d = toDate(date);\n if (!d)\n return PLACEHOLDER;\n const diffSeconds = (d.getTime() - Date.now()) / 1000;\n const abs = Math.abs(diffSeconds);\n const { unit, seconds } = RELATIVE_UNITS.find((u) => abs >= u.seconds) ?? RELATIVE_UNITS[RELATIVE_UNITS.length - 1];\n const value = Math.round(diffSeconds / seconds);\n const formatter = options ? new Intl.RelativeTimeFormat(language, options) : relativeDefault;\n return formatter.format(value, unit);\n },\n formatList: (items, options) => {\n const filtered = items.filter((v) => v != null && v !== '');\n if (filtered.length === 0)\n return '';\n return options ? new Intl.ListFormat(language, options).format(filtered) : listDefault.format(filtered);\n },\n };\n }, [language]);\n}\n//# sourceMappingURL=useLocaleFormat.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { I18nextProvider, Trans, useTranslation } from 'react-i18next';\nimport { i18nInstance, NAMESPACE } from './instance.js';\nimport { useLanguage } from './LanguageProvider.js';\nexport { Trans };\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 * Binds i18next to the language reported by the surrounding `LanguageProvider`.\n * Use this inside `VertesiaShell` (or wherever a `LanguageProvider` ancestor is\n * available) so language changes propagate to all `useUITranslation()` callers\n * without a static `lng` prop.\n */\nexport function LanguageBoundI18nProvider({ children }) {\n const { language } = useLanguage();\n return _jsx(I18nProvider, { lng: language, 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';\nexport { LanguageProvider, LanguageProviderContext, useLanguage, } from './LanguageProvider.js';\nexport { isRTL, RTL_LANGUAGES, resolveLanguage, SUPPORTED_LANGUAGES, } from './rtl.js';\nexport { useLocaleFormat } from './useLocaleFormat.js';\n//# sourceMappingURL=index.js.map"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=vertesia-ui-layout.js.map
|
|
1
|
+
import{Fragment as e,jsx as t,jsxs as n}from"react/jsx-runtime";import{Button as r,SidePanel as i,Tooltip as a,TooltipContent as o,TooltipProvider as s,TooltipTrigger as c,cn as l}from"@vertesia/ui/core";import{useLanguage as u,useUITranslation as d}from"@vertesia/ui/i18n";import f from"clsx";import{createContext as p,useContext as m,useEffect as h,useState as g}from"react";import{Dot as _,Menu as v,Search as y}from"lucide-react";import{Nav as b,useRouterContext as x}from"@vertesia/ui/router";import{Env as S}from"@vertesia/ui/env";const C=p({isOpen:!1,toggleMobile:()=>void 0,toggleDesktop:()=>void 0});function w(){return m(C)}function T({title:e}){return t(`div`,{className:`self-center text-lg font-semibold`,children:e})}function E({children:e,logo:r,onSearch:i,title:a}){return n(`div`,{className:`sticky top-0 z-40 flex h-16 shrink-0 items-center gap-x-4 border-b px-4 shadow-2xs sm:gap-x-6 sm:px-6 lg:px-8`,children:[t(O,{}),t(`div`,{className:`lg:hidden`,children:r}),i&&t(k,{visible:`mobile`}),n(`div`,{className:`flex flex-1 gap-x-4 self-stretch lg:gap-x-6`,children:[t(T,{title:a}),i&&t(D,{onSearch:i}),t(`div`,{className:`flex items-center gap-x-4 lg:gap-x-6 ms-auto`,children:e})]})]})}function D(e){let{t:r}=d();return n(`form`,{className:`relative flex flex-1`,action:`#`,method:`GET`,children:[t(`label`,{htmlFor:`search-field`,className:`sr-only`,children:r(`layout.search`)}),t(y,{className:`pointer-events-none absolute inset-y-0 start-0 h-full w-5 text-gray-400`,"aria-hidden":`true`}),t(`input`,{id:`search-field`,className:`block h-full w-full border-0 py-0 ps-8 pe-0 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm`,placeholder:r(`layout.searchPlaceholder`),type:`search`,name:`search`})]})}function O(){let{toggleDesktop:e,toggleMobile:n}=w(),i=()=>{window.innerWidth<1024?n():e()};return t(r,{variant:`ghost`,size:`icon`,onClick:()=>i(),className:`p-2 rounded-full transition-colors w-full text-center `,children:t(v,{"aria-hidden":`true`,size:24})})}function k({visible:e}){let n=``;return e&&(n=e===`mobile`?`lg:hidden`:`hidden lg:block`),t(`div`,{className:`h-6 w-px bg-gray-900/10 dark:bg-slate-900/0.1 ${n}`,"aria-hidden":`true`})}function A({title:e,icon:r,onClick:i}){return n(`button`,{type:`button`,className:`-m-2.5 p-2.5 text-gray-400 dark:text-slate-50 hover:text-gray-500`,onClick:i,children:[t(`span`,{className:`sr-only`,children:e}),t(r,{className:`size-6`,"aria-hidden":`true`,title:e})]})}function j({children:e,onClick:n}){return t(r,{onClick:n,children:e})}function M({href:e,onClick:n,children:r}){return t(`a`,{className:`dark:text-slate-50`,href:e,onClick:n,children:r})}function N({children:e,logo:r,className:i}){return n(`div`,{className:f(i||`bg-indigo-600 dark:bg-indigo-950`,`flex flex-col h-full`),children:[r&&t(`div`,{className:`-mx-2 flex h-auto my-4 shrink-0 self-start`,children:r}),t(`div`,{className:`flex-1 min-h-0 overflow-hidden px-0 lg:px-2`,children:t(`nav`,{className:`h-full flex flex-col`,children:t(`ul`,{className:`flex flex-col gap-y-2 overflow-y-auto h-full`,children:e})})})]})}function P({children:r,title:i,action:a,isFooter:o=!1,className:s}){let{isOpen:c}=w(),l=c?n(e,{children:[i||``,a]}):t(_,{className:`size-6`});return n(`li`,{className:o?`mt-auto`:``,children:[i&&t(`div`,{className:`text-xs font-medium h-8 flex items-center gap-x-2 px-2 text-sidebar-foreground/70`,children:l}),t(`ul`,{"data-sidebar":`menu`,className:f(`flex w-full min-w-0 flex-col gap-1`,s),children:r})]})}function F({children:e,text:r}){let{isOpen:i}=w();return i?e:t(s,{children:n(a,{children:[t(c,{asChild:!0,children:e}),t(o,{side:`right`,children:r})]})})}function I({external:e,className:r,tools:i,children:a,icon:o,href:s,to:c,current:l,onClick:u,replace:d,skipStickyParams:p}){let{toggleMobile:m}=w(),{router:h}=x(),g=!p&&s.startsWith(`/`)?h.getTopRouter().navigator.addStickyParams(s):s;return t(`li`,{children:t(b,{to:c,onClick:()=>{setTimeout(()=>{m(!1)},100)},replace:d,children:t(F,{text:a,children:n(`a`,{href:g,onClick:t=>{e?(window.open(g,`_blank`),t.preventDefault(),t.stopPropagation()):u&&u(t)},className:f(l?`bg-sidebar-accent text-sidebar-accent-foreground`:`text-sidebar-foreground hover:text-sidebar-accent-foreground hover:bg-sidebar-accent`,`group flex gap-x-3 rounded-md px-2 py-1.5 text-sm items-center h-8`,r),children:[o&&t(o,{className:f(l?`bg-sidebar-accent text-sidebar-accent-foreground`:`text-sidebar-foreground hover:text-sidebar-accent-foreground hover:bg-sidebar-accent`,`size-4 shrink-0`),"aria-hidden":`true`}),a,i&&t(`div`,{className:`flex items-center ms-auto`,children:i})]})})})})}function L({sidebarClassName:e,className:r,title:a,children:o,logo:s,navbar:c,sidebar:l,mainNav:d}){localStorage.getItem(`desktopSidebarOpen`)===null&&localStorage.setItem(`desktopSidebarOpen`,`true`);let{isRTL:p}=u(),[m,_]=g(!1),[v,y]=g(localStorage.getItem(`desktopSidebarOpen`)===`true`),[b,x]=g(window.innerWidth>=1024);h(()=>{let e=()=>{x(window.innerWidth>=1024)};return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let S={isOpen:b?v:m,toggleDesktop:e=>{y(e===void 0?!v:e),localStorage.setItem(`desktopSidebarOpen`,JSON.stringify(!v))},toggleMobile:e=>{_(e===void 0?!m:e)}};return t(`div`,{className:`flex flex-col h-screen overflow-y-hidden`,children:n(C.Provider,{value:S,children:[t(`div`,{className:`w-full`,children:d}),n(`div`,{className:`flex h-full overflow-y-auto w-full`,children:[t(`div`,{className:`lg:hidden`,children:t(i,{className:`bg-sidebar`,isOpen:m,onClose:()=>_(!1),side:p?`right`:`left`,panelWidth:288,resizable:!1,backdrop:!0,children:t(N,{logo:s,className:e,children:l})})}),t(`div`,{className:`hidden lg:block relative transition-all duration-300 ${v?`w-72`:`w-12`}`,children:t(N,{logo:s,className:e,children:l})}),n(`div`,{className:`w-full h-full overflow-y-hidden`,children:[c?t(E,{title:a,logo:s,children:c}):null,t(`main`,{className:f(`flex-1 h-full w-full relative flex flex-col`,r),children:o})]})]})]})})}function R({title:e=`Something went wrong`,message:i=`An unexpected error occurred. Please try again.`,actionLabel:a=`Try again`,onAction:o}){return t(`div`,{className:`flex min-h-screen items-center justify-center bg-white px-6 py-12 text-center`,children:n(`div`,{className:`max-w-md space-y-6`,children:[t(`div`,{className:`mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-destructive text-3xl font-semibold text-destructive`,children:`!`}),n(`div`,{className:`space-y-2`,children:[t(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:e}),t(`p`,{className:`text-sm leading-6 text-muted`,children:i})]}),o?t(r,{onClick:o,children:a}):null]})})}function z({className:e,children:n}){return t(`div`,{className:f(`flex flex-col`,`h-full`,`overflow-y-auto`,`px-2`,e),children:n})}z.Fixed=function({heightClass:e,className:n,children:r}){return t(`div`,{className:f(`w-full`,e,n),children:r})},z.Body=function({className:e,children:n}){return t(`div`,{className:f(`grow overflow-auto`,`min-h-0`,`p-2`,e),children:n})},z.VR=function(){return t(`div`,{className:`w-[1px] border border-red-200`})},z.HR=function(){return t(`div`,{className:`w-full h-1 border-b border-red-200`})},z.Flex=function({className:e,children:n}){return t(`div`,{className:f(`grow flex flex-col`,`overflow-hidden min-h-0`,`p-2`,e),children:n})},z.Tab=function({children:e}){return t(`div`,{className:`flex flex-col h-full`,children:e})};const B={eu:`EU`,jp:`JP`};function V({className:e}){let n=S.region;return!n||n===`us`?null:t(`div`,{className:l(`text-[0.6rem] font-semibold px-1.5 rounded-3xl leading-4`,`bg-info text-white`,e),children:B[n]??n.toUpperCase()})}export{L as AppLayout,R as ErrorPage,z as FullHeightLayout,O as HamburgerButton,E as Navbar,j as NavbarButton,A as NavbarIconButton,M as NavbarLink,k as NavbarSeparator,V as RegionTag,N as Sidebar,C as SidebarContext,I as SidebarItem,P as SidebarSection,F as SidebarTooltip,T as TitleBar,w as useSidebarToggle};
|
|
2
|
+
//# sourceMappingURL=vertesia-ui-layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertesia-ui-layout.js","sources":["layout/SidebarContext.js","layout/TitleBar.js","layout/Navbar.js","layout/Sidebar.js","layout/AppLayout.js","layout/ErrorPage.js","layout/FullHeightLayout.js","layout/RegionTag.js"],"sourcesContent":["import { createContext, useContext } from 'react';\nexport const SidebarContext = createContext({\n isOpen: false,\n toggleMobile: () => void 0,\n toggleDesktop: () => void 0,\n});\nexport function useSidebarToggle() {\n return useContext(SidebarContext);\n}\n//# sourceMappingURL=SidebarContext.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function TitleBar({ title }) {\n return _jsx(\"div\", { className: \"self-center text-lg font-semibold\", children: title });\n}\n//# sourceMappingURL=TitleBar.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from '@vertesia/ui/core';\nimport { useUITranslation } from '@vertesia/ui/i18n';\nimport { Menu, Search } from 'lucide-react';\nimport { useSidebarToggle } from './SidebarContext.js';\nimport { TitleBar } from './TitleBar.js';\nexport function Navbar({ children, logo, onSearch, title }) {\n return (_jsxs(\"div\", { className: \"sticky top-0 z-40 flex h-16 shrink-0 items-center gap-x-4 border-b px-4 shadow-2xs sm:gap-x-6 sm:px-6 lg:px-8\", children: [_jsx(HamburgerButton, {}), _jsx(\"div\", { className: \"lg:hidden\", children: logo }), onSearch && _jsx(NavbarSeparator, { visible: \"mobile\" }), _jsxs(\"div\", { className: \"flex flex-1 gap-x-4 self-stretch lg:gap-x-6\", children: [_jsx(TitleBar, { title: title }), onSearch && _jsx(SearchBox, { onSearch: onSearch }), _jsx(\"div\", { className: \"flex items-center gap-x-4 lg:gap-x-6 ms-auto\", children: children })] })] }));\n}\nfunction SearchBox(_props) {\n const { t } = useUITranslation();\n return (_jsxs(\"form\", { className: \"relative flex flex-1\", action: \"#\", method: \"GET\", children: [_jsx(\"label\", { htmlFor: \"search-field\", className: \"sr-only\", children: t('layout.search') }), _jsx(Search, { className: \"pointer-events-none absolute inset-y-0 start-0 h-full w-5 text-gray-400\", \"aria-hidden\": \"true\" }), _jsx(\"input\", { id: \"search-field\", className: \"block h-full w-full border-0 py-0 ps-8 pe-0 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm\", placeholder: t('layout.searchPlaceholder'), type: \"search\", name: \"search\" })] }));\n}\nexport function HamburgerButton() {\n const { toggleDesktop, toggleMobile } = useSidebarToggle();\n const toggle = () => {\n if (window.innerWidth < 1024) {\n toggleMobile();\n }\n else {\n toggleDesktop();\n }\n };\n return (_jsx(Button, { variant: \"ghost\", size: \"icon\", onClick: () => toggle(), className: \"p-2 rounded-full transition-colors w-full text-center \", children: _jsx(Menu, { \"aria-hidden\": \"true\", size: 24 }) }));\n}\nexport function NavbarSeparator({ visible }) {\n let visibility = '';\n if (visible) {\n visibility = visible === 'mobile' ? 'lg:hidden' : 'hidden lg:block';\n }\n return _jsx(\"div\", { className: `h-6 w-px bg-gray-900/10 dark:bg-slate-900/0.1 ${visibility}`, \"aria-hidden\": \"true\" });\n}\nexport function NavbarIconButton({ title, icon: Icon, onClick }) {\n return (_jsxs(\"button\", { type: \"button\", className: \"-m-2.5 p-2.5 text-gray-400 dark:text-slate-50 hover:text-gray-500\", onClick: onClick, children: [_jsx(\"span\", { className: \"sr-only\", children: title }), _jsx(Icon, { className: \"size-6\", \"aria-hidden\": \"true\", title: title })] }));\n}\nexport function NavbarButton({ children, onClick }) {\n return _jsx(Button, { onClick: onClick, children: children });\n}\nexport function NavbarLink({ href, onClick, children }) {\n return (_jsx(\"a\", { className: \"dark:text-slate-50\", href: href, onClick: onClick, children: children }));\n}\n//# sourceMappingURL=Navbar.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@vertesia/ui/core';\nimport { Nav, useRouterContext } from '@vertesia/ui/router';\nimport clsx from 'clsx';\nimport { Dot } from 'lucide-react';\nimport { useSidebarToggle } from './SidebarContext';\nexport function Sidebar({ children, logo, className }) {\n return (_jsxs(\"div\", { className: clsx(className || 'bg-indigo-600 dark:bg-indigo-950', 'flex flex-col h-full'), children: [logo && _jsx(\"div\", { className: \"-mx-2 flex h-auto my-4 shrink-0 self-start\", children: logo }), _jsx(\"div\", { className: \"flex-1 min-h-0 overflow-hidden px-0 lg:px-2\", children: _jsx(\"nav\", { className: \"h-full flex flex-col\", children: _jsx(\"ul\", { className: \"flex flex-col gap-y-2 overflow-y-auto h-full\", children: children }) }) })] }));\n}\nexport function SidebarSection({ children, title, action, isFooter = false, className }) {\n const { isOpen } = useSidebarToggle();\n const header = isOpen ? (_jsxs(_Fragment, { children: [title || '', action] })) : (_jsx(Dot, { className: \"size-6\" }));\n return (_jsxs(\"li\", { className: isFooter ? 'mt-auto' : '', children: [title && (_jsx(\"div\", { className: \"text-xs font-medium h-8 flex items-center gap-x-2 px-2 text-sidebar-foreground/70\", children: header })), _jsx(\"ul\", { \"data-sidebar\": \"menu\", className: clsx('flex w-full min-w-0 flex-col gap-1', className), children: children })] }));\n}\nexport function SidebarTooltip({ children, text }) {\n const { isOpen } = useSidebarToggle();\n return isOpen ? (children) : (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: children }), _jsx(TooltipContent, { side: \"right\", children: text })] }) }));\n}\nexport function SidebarItem({ external, className, tools, children, icon: Icon, href, to, current, onClick, replace, skipStickyParams, }) {\n const { toggleMobile } = useSidebarToggle();\n const { router } = useRouterContext();\n // Append the active tenant sticky params (account `a` + project `p`) the router holds to internal\n // hrefs, so opening a nav item in a new tab or copying its address preserves the current\n // account/project.\n const resolvedHref = !skipStickyParams && href.startsWith('/') ? router.getTopRouter().navigator.addStickyParams(href) : href;\n const _closeSideBar = () => {\n setTimeout(() => {\n toggleMobile(false);\n }, 100);\n };\n const onClickWrapper = (event) => {\n if (external) {\n window.open(resolvedHref, '_blank');\n event.preventDefault(); // Prevent default link behavior\n event.stopPropagation(); // Stop the event from propagating\n }\n else if (onClick) {\n onClick(event);\n }\n };\n return (_jsx(\"li\", { children: _jsx(Nav, { to: to, onClick: _closeSideBar, replace: replace, children: _jsx(SidebarTooltip, { text: children, children: _jsxs(\"a\", { href: resolvedHref, onClick: onClickWrapper, className: clsx(current\n ? 'bg-sidebar-accent text-sidebar-accent-foreground'\n : 'text-sidebar-foreground hover:text-sidebar-accent-foreground hover:bg-sidebar-accent', 'group flex gap-x-3 rounded-md px-2 py-1.5 text-sm items-center h-8', className), children: [Icon && (_jsx(Icon, { className: clsx(current\n ? 'bg-sidebar-accent text-sidebar-accent-foreground'\n : 'text-sidebar-foreground hover:text-sidebar-accent-foreground hover:bg-sidebar-accent', 'size-4 shrink-0'), \"aria-hidden\": \"true\" })), children, tools && _jsx(\"div\", { className: \"flex items-center ms-auto\", children: tools })] }) }) }) }));\n}\n//# sourceMappingURL=Sidebar.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { SidePanel } from '@vertesia/ui/core';\nimport { useLanguage } from '@vertesia/ui/i18n';\nimport clsx from 'clsx';\nimport { useEffect, useState } from 'react';\n// import { FullHeightLayout } from './FullHeightLayout.js'\nimport { Navbar } from './Navbar.js';\nimport { Sidebar } from './Sidebar.js';\nimport { SidebarContext } from './SidebarContext.js';\nexport function AppLayout({ sidebarClassName, className, title, children, logo, navbar, sidebar, mainNav, }) {\n if (localStorage.getItem('desktopSidebarOpen') === null) {\n localStorage.setItem('desktopSidebarOpen', 'true');\n }\n const { isRTL } = useLanguage();\n const [sidebarOpen, setSidebarOpen] = useState(false);\n const [desktopSidebarOpen, setDesktopSidebarOpen] = useState(localStorage.getItem('desktopSidebarOpen') === 'true');\n const [isLargeScreen, setIsLargeScreen] = useState(window.innerWidth >= 1024);\n useEffect(() => {\n const handleResize = () => {\n setIsLargeScreen(window.innerWidth >= 1024);\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n const sidebarContextValue = {\n isOpen: isLargeScreen ? desktopSidebarOpen : sidebarOpen,\n toggleDesktop: (value) => {\n if (value === undefined) {\n setDesktopSidebarOpen(!desktopSidebarOpen);\n }\n else {\n setDesktopSidebarOpen(value);\n }\n localStorage.setItem('desktopSidebarOpen', JSON.stringify(!desktopSidebarOpen));\n },\n toggleMobile: (value) => {\n if (value === undefined) {\n setSidebarOpen(!sidebarOpen);\n }\n else {\n setSidebarOpen(value);\n }\n },\n };\n return (_jsx(\"div\", { className: \"flex flex-col h-screen overflow-y-hidden\", children: _jsxs(SidebarContext.Provider, { value: sidebarContextValue, children: [_jsx(\"div\", { className: \"w-full\", children: mainNav }), _jsxs(\"div\", { className: \"flex h-full overflow-y-auto w-full\", children: [_jsx(\"div\", { className: \"lg:hidden\", children: _jsx(SidePanel, { className: \"bg-sidebar\", isOpen: sidebarOpen, onClose: () => setSidebarOpen(false), side: isRTL ? 'right' : 'left', panelWidth: 288, resizable: false, backdrop: true, children: _jsx(Sidebar, { logo: logo, className: sidebarClassName, children: sidebar }) }) }), _jsx(\"div\", { className: `hidden lg:block relative transition-all duration-300 ${desktopSidebarOpen ? 'w-72' : 'w-12'}`, children: _jsx(Sidebar, { logo: logo, className: sidebarClassName, children: sidebar }) }), _jsxs(\"div\", { className: \"w-full h-full overflow-y-hidden\", children: [navbar ? (_jsx(Navbar, { title: title, logo: logo, children: navbar })) : null, _jsx(\"main\", { className: clsx('flex-1 h-full w-full relative flex flex-col', className), children: children })] })] })] }) }));\n}\n//# sourceMappingURL=AppLayout.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from '@vertesia/ui/core';\nexport function ErrorPage({ title = 'Something went wrong', message = 'An unexpected error occurred. Please try again.', actionLabel = 'Try again', onAction, }) {\n return (_jsx(\"div\", { className: \"flex min-h-screen items-center justify-center bg-white px-6 py-12 text-center\", children: _jsxs(\"div\", { className: \"max-w-md space-y-6\", children: [_jsx(\"div\", { className: \"mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-destructive text-3xl font-semibold text-destructive\", children: \"!\" }), _jsxs(\"div\", { className: \"space-y-2\", children: [_jsx(\"h1\", { className: \"text-2xl font-semibold tracking-tight\", children: title }), _jsx(\"p\", { className: \"text-sm leading-6 text-muted\", children: message })] }), onAction ? _jsx(Button, { onClick: onAction, children: actionLabel }) : null] }) }));\n}\n//# sourceMappingURL=ErrorPage.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nexport function FullHeightLayout({ className, children }) {\n return _jsx(\"div\", { className: clsx('flex flex-col', 'h-full', 'overflow-y-auto', 'px-2', className), children: children });\n}\nFullHeightLayout.Fixed = function Fixed({ heightClass, className, children }) {\n return _jsx(\"div\", { className: clsx('w-full', heightClass, className), children: children });\n};\nFullHeightLayout.Body = function Body({ className, children }) {\n return _jsx(\"div\", { className: clsx('grow overflow-auto', 'min-h-0', 'p-2', className), children: children });\n};\nFullHeightLayout.VR = function VDivider() {\n return _jsx(\"div\", { className: \"w-[1px] border border-red-200\" });\n};\nFullHeightLayout.HR = function HDivider() {\n return _jsx(\"div\", { className: \"w-full h-1 border-b border-red-200\" });\n};\nFullHeightLayout.Flex = function Flex({ className, children }) {\n return _jsx(\"div\", { className: clsx('grow flex flex-col', 'overflow-hidden min-h-0', 'p-2', className), children: children });\n};\nFullHeightLayout.Tab = function Tab({ children }) {\n return _jsx(\"div\", { className: \"flex flex-col h-full\", children: children });\n};\n//# sourceMappingURL=FullHeightLayout.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from '@vertesia/ui/core';\nimport { Env } from '@vertesia/ui/env';\nconst regionLabels = {\n eu: 'EU',\n jp: 'JP',\n};\nexport function RegionTag({ className }) {\n const region = Env.region;\n // Only show for non-US regions (US is default, no need to display)\n if (!region || region === 'us')\n return null;\n return (_jsx(\"div\", { className: cn('text-[0.6rem] font-semibold px-1.5 rounded-3xl leading-4', 'bg-info text-white', className), children: regionLabels[region] ?? region.toUpperCase() }));\n}\n//# sourceMappingURL=RegionTag.js.map"],"names":["SidebarContext","createContext","isOpen","toggleMobile","toggleDesktop","useSidebarToggle","useContext","TitleBar","title","_jsx","className","children","Navbar","logo","onSearch","_jsxs","HamburgerButton","NavbarSeparator","visible","SearchBox","_props","t","useUITranslation","action","method","htmlFor","Search","id","placeholder","type","name","Button","variant","size","onClick","window","innerWidth","Menu","visibility","NavbarIconButton","icon","Icon","NavbarButton","NavbarLink","href","Sidebar","clsx","SidebarSection","isFooter","header","_Fragment","Dot","SidebarTooltip","text","TooltipProvider","Tooltip","TooltipTrigger","asChild","TooltipContent","side","SidebarItem","external","tools","to","current","replace","skipStickyParams","router","useRouterContext","resolvedHref","startsWith","getTopRouter","navigator","addStickyParams","Nav","setTimeout","event","open","preventDefault","stopPropagation","AppLayout","sidebarClassName","navbar","sidebar","mainNav","localStorage","getItem","setItem","isRTL","useLanguage","sidebarOpen","setSidebarOpen","useState","desktopSidebarOpen","setDesktopSidebarOpen","isLargeScreen","setIsLargeScreen","useEffect","handleResize","addEventListener","removeEventListener","sidebarContextValue","value","undefined","JSON","stringify","Provider","SidePanel","onClose","panelWidth","resizable","backdrop","ErrorPage","message","actionLabel","onAction","FullHeightLayout","Fixed","heightClass","Body","VR","HR","Flex","Tab","regionLabels","eu","jp","RegionTag","region","Env","cn","toUpperCase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertesia-ui-layout.js","names":["_jsx","_jsxs","_jsx","_jsxs","_jsx","_Fragment","_jsx","_jsxs","_jsx","_jsxs","_jsx","_jsx"],"sources":["layout/SidebarContext.js","layout/TitleBar.js","layout/Navbar.js","layout/Sidebar.js","layout/AppLayout.js","layout/ErrorPage.js","layout/FullHeightLayout.js","layout/RegionTag.js"],"sourcesContent":["import { createContext, useContext } from 'react';\nexport const SidebarContext = createContext({\n isOpen: false,\n toggleMobile: () => void 0,\n toggleDesktop: () => void 0,\n});\nexport function useSidebarToggle() {\n return useContext(SidebarContext);\n}\n//# sourceMappingURL=SidebarContext.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function TitleBar({ title }) {\n return _jsx(\"div\", { className: \"self-center text-lg font-semibold\", children: title });\n}\n//# sourceMappingURL=TitleBar.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from '@vertesia/ui/core';\nimport { useUITranslation } from '@vertesia/ui/i18n';\nimport { Menu, Search } from 'lucide-react';\nimport { useSidebarToggle } from './SidebarContext.js';\nimport { TitleBar } from './TitleBar.js';\nexport function Navbar({ children, logo, onSearch, title }) {\n return (_jsxs(\"div\", { className: \"sticky top-0 z-40 flex h-16 shrink-0 items-center gap-x-4 border-b px-4 shadow-2xs sm:gap-x-6 sm:px-6 lg:px-8\", children: [_jsx(HamburgerButton, {}), _jsx(\"div\", { className: \"lg:hidden\", children: logo }), onSearch && _jsx(NavbarSeparator, { visible: \"mobile\" }), _jsxs(\"div\", { className: \"flex flex-1 gap-x-4 self-stretch lg:gap-x-6\", children: [_jsx(TitleBar, { title: title }), onSearch && _jsx(SearchBox, { onSearch: onSearch }), _jsx(\"div\", { className: \"flex items-center gap-x-4 lg:gap-x-6 ms-auto\", children: children })] })] }));\n}\nfunction SearchBox(_props) {\n const { t } = useUITranslation();\n return (_jsxs(\"form\", { className: \"relative flex flex-1\", action: \"#\", method: \"GET\", children: [_jsx(\"label\", { htmlFor: \"search-field\", className: \"sr-only\", children: t('layout.search') }), _jsx(Search, { className: \"pointer-events-none absolute inset-y-0 start-0 h-full w-5 text-gray-400\", \"aria-hidden\": \"true\" }), _jsx(\"input\", { id: \"search-field\", className: \"block h-full w-full border-0 py-0 ps-8 pe-0 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm\", placeholder: t('layout.searchPlaceholder'), type: \"search\", name: \"search\" })] }));\n}\nexport function HamburgerButton() {\n const { toggleDesktop, toggleMobile } = useSidebarToggle();\n const toggle = () => {\n if (window.innerWidth < 1024) {\n toggleMobile();\n }\n else {\n toggleDesktop();\n }\n };\n return (_jsx(Button, { variant: \"ghost\", size: \"icon\", onClick: () => toggle(), className: \"p-2 rounded-full transition-colors w-full text-center \", children: _jsx(Menu, { \"aria-hidden\": \"true\", size: 24 }) }));\n}\nexport function NavbarSeparator({ visible }) {\n let visibility = '';\n if (visible) {\n visibility = visible === 'mobile' ? 'lg:hidden' : 'hidden lg:block';\n }\n return _jsx(\"div\", { className: `h-6 w-px bg-gray-900/10 dark:bg-slate-900/0.1 ${visibility}`, \"aria-hidden\": \"true\" });\n}\nexport function NavbarIconButton({ title, icon: Icon, onClick }) {\n return (_jsxs(\"button\", { type: \"button\", className: \"-m-2.5 p-2.5 text-gray-400 dark:text-slate-50 hover:text-gray-500\", onClick: onClick, children: [_jsx(\"span\", { className: \"sr-only\", children: title }), _jsx(Icon, { className: \"size-6\", \"aria-hidden\": \"true\", title: title })] }));\n}\nexport function NavbarButton({ children, onClick }) {\n return _jsx(Button, { onClick: onClick, children: children });\n}\nexport function NavbarLink({ href, onClick, children }) {\n return (_jsx(\"a\", { className: \"dark:text-slate-50\", href: href, onClick: onClick, children: children }));\n}\n//# sourceMappingURL=Navbar.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@vertesia/ui/core';\nimport { Nav, useRouterContext } from '@vertesia/ui/router';\nimport clsx from 'clsx';\nimport { Dot } from 'lucide-react';\nimport { useSidebarToggle } from './SidebarContext';\nexport function Sidebar({ children, logo, className }) {\n return (_jsxs(\"div\", { className: clsx(className || 'bg-indigo-600 dark:bg-indigo-950', 'flex flex-col h-full'), children: [logo && _jsx(\"div\", { className: \"-mx-2 flex h-auto my-4 shrink-0 self-start\", children: logo }), _jsx(\"div\", { className: \"flex-1 min-h-0 overflow-hidden px-0 lg:px-2\", children: _jsx(\"nav\", { className: \"h-full flex flex-col\", children: _jsx(\"ul\", { className: \"flex flex-col gap-y-2 overflow-y-auto h-full\", children: children }) }) })] }));\n}\nexport function SidebarSection({ children, title, action, isFooter = false, className }) {\n const { isOpen } = useSidebarToggle();\n const header = isOpen ? (_jsxs(_Fragment, { children: [title || '', action] })) : (_jsx(Dot, { className: \"size-6\" }));\n return (_jsxs(\"li\", { className: isFooter ? 'mt-auto' : '', children: [title && (_jsx(\"div\", { className: \"text-xs font-medium h-8 flex items-center gap-x-2 px-2 text-sidebar-foreground/70\", children: header })), _jsx(\"ul\", { \"data-sidebar\": \"menu\", className: clsx('flex w-full min-w-0 flex-col gap-1', className), children: children })] }));\n}\nexport function SidebarTooltip({ children, text }) {\n const { isOpen } = useSidebarToggle();\n return isOpen ? (children) : (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: children }), _jsx(TooltipContent, { side: \"right\", children: text })] }) }));\n}\nexport function SidebarItem({ external, className, tools, children, icon: Icon, href, to, current, onClick, replace, skipStickyParams, }) {\n const { toggleMobile } = useSidebarToggle();\n const { router } = useRouterContext();\n // Append the active tenant sticky params (account `a` + project `p`) the router holds to internal\n // hrefs, so opening a nav item in a new tab or copying its address preserves the current\n // account/project.\n const resolvedHref = !skipStickyParams && href.startsWith('/') ? router.getTopRouter().navigator.addStickyParams(href) : href;\n const _closeSideBar = () => {\n setTimeout(() => {\n toggleMobile(false);\n }, 100);\n };\n const onClickWrapper = (event) => {\n if (external) {\n window.open(resolvedHref, '_blank');\n event.preventDefault(); // Prevent default link behavior\n event.stopPropagation(); // Stop the event from propagating\n }\n else if (onClick) {\n onClick(event);\n }\n };\n return (_jsx(\"li\", { children: _jsx(Nav, { to: to, onClick: _closeSideBar, replace: replace, children: _jsx(SidebarTooltip, { text: children, children: _jsxs(\"a\", { href: resolvedHref, onClick: onClickWrapper, className: clsx(current\n ? 'bg-sidebar-accent text-sidebar-accent-foreground'\n : 'text-sidebar-foreground hover:text-sidebar-accent-foreground hover:bg-sidebar-accent', 'group flex gap-x-3 rounded-md px-2 py-1.5 text-sm items-center h-8', className), children: [Icon && (_jsx(Icon, { className: clsx(current\n ? 'bg-sidebar-accent text-sidebar-accent-foreground'\n : 'text-sidebar-foreground hover:text-sidebar-accent-foreground hover:bg-sidebar-accent', 'size-4 shrink-0'), \"aria-hidden\": \"true\" })), children, tools && _jsx(\"div\", { className: \"flex items-center ms-auto\", children: tools })] }) }) }) }));\n}\n//# sourceMappingURL=Sidebar.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { SidePanel } from '@vertesia/ui/core';\nimport { useLanguage } from '@vertesia/ui/i18n';\nimport clsx from 'clsx';\nimport { useEffect, useState } from 'react';\n// import { FullHeightLayout } from './FullHeightLayout.js'\nimport { Navbar } from './Navbar.js';\nimport { Sidebar } from './Sidebar.js';\nimport { SidebarContext } from './SidebarContext.js';\nexport function AppLayout({ sidebarClassName, className, title, children, logo, navbar, sidebar, mainNav, }) {\n if (localStorage.getItem('desktopSidebarOpen') === null) {\n localStorage.setItem('desktopSidebarOpen', 'true');\n }\n const { isRTL } = useLanguage();\n const [sidebarOpen, setSidebarOpen] = useState(false);\n const [desktopSidebarOpen, setDesktopSidebarOpen] = useState(localStorage.getItem('desktopSidebarOpen') === 'true');\n const [isLargeScreen, setIsLargeScreen] = useState(window.innerWidth >= 1024);\n useEffect(() => {\n const handleResize = () => {\n setIsLargeScreen(window.innerWidth >= 1024);\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n const sidebarContextValue = {\n isOpen: isLargeScreen ? desktopSidebarOpen : sidebarOpen,\n toggleDesktop: (value) => {\n if (value === undefined) {\n setDesktopSidebarOpen(!desktopSidebarOpen);\n }\n else {\n setDesktopSidebarOpen(value);\n }\n localStorage.setItem('desktopSidebarOpen', JSON.stringify(!desktopSidebarOpen));\n },\n toggleMobile: (value) => {\n if (value === undefined) {\n setSidebarOpen(!sidebarOpen);\n }\n else {\n setSidebarOpen(value);\n }\n },\n };\n return (_jsx(\"div\", { className: \"flex flex-col h-screen overflow-y-hidden\", children: _jsxs(SidebarContext.Provider, { value: sidebarContextValue, children: [_jsx(\"div\", { className: \"w-full\", children: mainNav }), _jsxs(\"div\", { className: \"flex h-full overflow-y-auto w-full\", children: [_jsx(\"div\", { className: \"lg:hidden\", children: _jsx(SidePanel, { className: \"bg-sidebar\", isOpen: sidebarOpen, onClose: () => setSidebarOpen(false), side: isRTL ? 'right' : 'left', panelWidth: 288, resizable: false, backdrop: true, children: _jsx(Sidebar, { logo: logo, className: sidebarClassName, children: sidebar }) }) }), _jsx(\"div\", { className: `hidden lg:block relative transition-all duration-300 ${desktopSidebarOpen ? 'w-72' : 'w-12'}`, children: _jsx(Sidebar, { logo: logo, className: sidebarClassName, children: sidebar }) }), _jsxs(\"div\", { className: \"w-full h-full overflow-y-hidden\", children: [navbar ? (_jsx(Navbar, { title: title, logo: logo, children: navbar })) : null, _jsx(\"main\", { className: clsx('flex-1 h-full w-full relative flex flex-col', className), children: children })] })] })] }) }));\n}\n//# sourceMappingURL=AppLayout.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from '@vertesia/ui/core';\nexport function ErrorPage({ title = 'Something went wrong', message = 'An unexpected error occurred. Please try again.', actionLabel = 'Try again', onAction, }) {\n return (_jsx(\"div\", { className: \"flex min-h-screen items-center justify-center bg-white px-6 py-12 text-center\", children: _jsxs(\"div\", { className: \"max-w-md space-y-6\", children: [_jsx(\"div\", { className: \"mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-destructive text-3xl font-semibold text-destructive\", children: \"!\" }), _jsxs(\"div\", { className: \"space-y-2\", children: [_jsx(\"h1\", { className: \"text-2xl font-semibold tracking-tight\", children: title }), _jsx(\"p\", { className: \"text-sm leading-6 text-muted\", children: message })] }), onAction ? _jsx(Button, { onClick: onAction, children: actionLabel }) : null] }) }));\n}\n//# sourceMappingURL=ErrorPage.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport clsx from 'clsx';\nexport function FullHeightLayout({ className, children }) {\n return _jsx(\"div\", { className: clsx('flex flex-col', 'h-full', 'overflow-y-auto', 'px-2', className), children: children });\n}\nFullHeightLayout.Fixed = function Fixed({ heightClass, className, children }) {\n return _jsx(\"div\", { className: clsx('w-full', heightClass, className), children: children });\n};\nFullHeightLayout.Body = function Body({ className, children }) {\n return _jsx(\"div\", { className: clsx('grow overflow-auto', 'min-h-0', 'p-2', className), children: children });\n};\nFullHeightLayout.VR = function VDivider() {\n return _jsx(\"div\", { className: \"w-[1px] border border-red-200\" });\n};\nFullHeightLayout.HR = function HDivider() {\n return _jsx(\"div\", { className: \"w-full h-1 border-b border-red-200\" });\n};\nFullHeightLayout.Flex = function Flex({ className, children }) {\n return _jsx(\"div\", { className: clsx('grow flex flex-col', 'overflow-hidden min-h-0', 'p-2', className), children: children });\n};\nFullHeightLayout.Tab = function Tab({ children }) {\n return _jsx(\"div\", { className: \"flex flex-col h-full\", children: children });\n};\n//# sourceMappingURL=FullHeightLayout.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from '@vertesia/ui/core';\nimport { Env } from '@vertesia/ui/env';\nconst regionLabels = {\n eu: 'EU',\n jp: 'JP',\n};\nexport function RegionTag({ className }) {\n const region = Env.region;\n // Only show for non-US regions (US is default, no need to display)\n if (!region || region === 'us')\n return null;\n return (_jsx(\"div\", { className: cn('text-[0.6rem] font-semibold px-1.5 rounded-3xl leading-4', 'bg-info text-white', className), children: regionLabels[region] ?? region.toUpperCase() }));\n}\n//# sourceMappingURL=RegionTag.js.map"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as e}from"react/jsx-runtime";import{useRef as n,useEffect as a,createContext as r,useContext as i,useState as s,useMemo as o}from"react";import{useSafeLayoutEffect as h}from"@vertesia/ui/core";class c{path;params;hash;constructor(t){let e=t.lastIndexOf("#");e>-1?(this.hash=t.substring(e),t=t.substring(0,e)):this.hash="",e=t.indexOf("?"),e>-1?(this.path=t.substring(0,e),this.params=new URLSearchParams(t.substring(e+1))):(this.path=t,this.params=new URLSearchParams)}add(t){for(const[e,n]of Object.entries(t))this.params.set(e,n);return this}toString(){return`${this.path}?${this.params.toString()}${this.hash}`}}function l(t){return"/"===t||""===t}function d(t,e){return e=t.endsWith("/")&&e.startsWith("/")?t+e.substring(1):t.endsWith("/")||e.startsWith("/")?t+e:`${t}/${e}`}function u(t){if(""===t)return[];if("/"===t)return[""];let e=0,n=t.length;return t.startsWith("./")?e=2:t.startsWith("/")&&(e=1),t.endsWith("/")&&(n=t.length-1),(e>0||n<t.length?t.substring(e,n):t).split("/")}function m(t){if("string"==typeof t)return u(t);if(Array.isArray(t))return t;throw new Error(`Unsupported path object: ${t}`)}var f=Object.freeze({__proto__:null,getPathSegments:u,isRootPath:l,joinPath:d,toSegments:m});const p=Symbol("BASE_PATH");class w{name;type;location;state;_canceled=!1;constructor(t,e,n,a){this.name=t,this.type=e,this.location=n,this.state=a}get isPageLoad(){return"initial"===this.type}get isBackForward(){return"popState"===this.type}get isLinkClick(){return"linkClick"===this.type}get isNavigation(){return"navigate"===this.type}get isCancelable(){return"beforeChange"===this.name}cancel(){if("afterChange"===this.name)throw new Error("Cannot cancel afterChange event");this._canceled=!0}}class g extends w{constructor(t,e,n){super("beforeChange",t,e,n)}}class v extends w{constructor(t,e,n){super("afterChange",t,e,n)}}class P{stickyParams;_popStateListener;_linkNavListener;_listeners=[];addListener(t){this._listeners.push(t)}fireLocationChange(t){for(const e of this._listeners)e(t)}firePageLoad(){this.fireLocationChange(new v("initial",new URL(window.location.href)))}addStickyParams(t){return this.stickyParams?new c(t).add(this.stickyParams).toString():t}normalizeCurrentUrl(){if("undefined"==typeof window||!this.stickyParams)return;const t=window.location.pathname+window.location.search+window.location.hash,e=this.addStickyParams(t);if(e!==t){const t=new URL(e,window.location.href);window.history.replaceState(window.history.state,"",t.href)}}navigate(t,e={}){if(e.stepsBack&&e.stepsBack>0)this.stepBack(e.stepsBack,e);else{if(e.basePath){let n=e.basePath;n.startsWith("/")||(n=`/${n}`),t=d(n,t)}t=this.addStickyParams(t),this._navigate(new URL(t,window.location.href),"navigate",e)}}stepBack(t,e={}){const n=window.history.state.historyChain||[],a=n.length>=t?new URL(n[n.length-t].href,window.location.href):new URL(window.location.origin,window.location.href);this._navigate(a,"popState",e);const r={from:window.location.href,historyChain:n.slice(0,-t),data:e.state||void 0,title:e.title||document.title};window.history.replaceState(r,"",a.href),this.fireLocationChange(new v("popState",a,e.state))}_navigate(t,e,n){const a=new g(e,t,n.state);if(this.fireLocationChange(a),a._canceled)return;const r=window.history.state,i={title:n.title||document.title,href:window.location.pathname+window.location.search+window.location.hash};let s=[];!n.replace&&r?.historyChain&&(s=[...r.historyChain]),n.replace||(s.push(i),s.length>10&&(s=s.slice(-10)));const o={from:window.location.href,historyChain:s,data:n.state||void 0,title:n.title||document.title};window.history[n.replace?"replaceState":"pushState"](o,"",t.href),this.fireLocationChange(new v(e,t,n.state))}start(){if("undefined"==typeof window)return;const t=t=>{let e;const n=new URL(window.location.href);let a;t.state?(e="popState",a=t.state.data):e="linkClick",this.fireLocationChange(new v(e,n,a))};this._popStateListener=t,this._linkNavListener=t=>{const e=t.target;if("a"===e.tagName.toLowerCase()&&(e.hasAttribute("download")||e.href?.startsWith("blob:")))return;const n=function(t){if(t&&"a"===t.tagName.toLowerCase()){const e=t?.href.trim();if("string"==typeof e&&e.length>0)return new URL(e)}return null}(e);if(n&&n.origin===window.location.origin){t.preventDefault();const e=new URL(this.addStickyParams(n.href)),a=t[p]||t.target[p];a&&(e.pathname=d(a,e.pathname)),this._navigate(e,"linkClick",{})}},window.addEventListener("popstate",t),document.body.addEventListener("click",this._linkNavListener)}stop(){this._popStateListener&&window.removeEventListener("popstate",this._popStateListener),this._linkNavListener&&document.body.removeEventListener("click",this._linkNavListener)}}function b({basePath:e,children:r}){const i=n(null);return a(()=>{if(i.current){const t=i.current,n=t=>{"a"===t.target.tagName.toLowerCase()&&(t[p]=e)};return t.addEventListener("click",n),()=>{t.removeEventListener("click",n)}}},[e]),t("div",{ref:i,className:"h-full w-full",children:r})}class L{tree=new k;loadMapping(t){for(const[e,n]of Object.entries(t))this.addSegments(u(e),n)}addPath(t,e){this.addSegments(u(t),e)}addSegments(t,e){let n=this.tree;for(let a=0,r=t.length;a<r;a++){const i=t[a];if(":"===i[0]){let e=n.wildcard;if(e){if(!(e instanceof S))throw new Error(`Failed to index path segments: ${t.join("/")}. A wildcard ":" segment will overwrite an existing wildcard segment at path: /${t.slice(0,a).join("/")}`)}else e=new S(i),n.wildcard=e;n=e}else{if("*"===i){if(n.wildcard)throw new Error(`Failed to index path segments: ${t.join("/")}. A wildcard "*" segment already exists at path: /${t.slice(0,a).join("/")}`);if(n.wildcard=new _(i,e),a<r-1)throw new Error(`Failed to index path segments: ${t.join("/")}. A wildcard segment must be the last segment`);return}{let t=n.children[i];t||(t=new C(i),n.children[i]=t),n=t}}}if(void 0!==n.value)throw new Error(`Failed to index path segments: ${t.join("/")}. A value already exists at path: /${t.join("/")}`);n.value=e}match(t){const e=m(t);if(0===e.length)return null;const n={};let a,r,i=this.tree;for(const t of e){const e=i.match(t,n);if(!e)return null;i=e}if(!i.value){if(i instanceof y&&i.wildcard instanceof _&&(i=i.wildcard.match("",n),!i.value))throw new Error("Wildcard segment node `*` must have a value");if(!i.value)return null}return n._&&n._.length>0?(a=e.slice(0,-n._.length),r=n._):a=e,{params:n,matchedSegments:a,remainingSegments:r,value:i.value}}}class y{name;value;children={};wildcard;constructor(t,e){this.name=t,this.value=e}match(t,e){const n=this.children[t];if(n)return n;if(this.wildcard){if(this.wildcard instanceof _)return this.wildcard.match(t,e);if(this.wildcard instanceof S)return e[this.wildcard.paramName]=t,this.wildcard;throw new Error(`Unknown wildcard segment node type: ${this.wildcard.constructor.name}`)}return null}}class k extends y{constructor(){super("#root")}}class C extends y{}class S extends y{paramName;constructor(t,e){super(t,e),this.paramName=t.substring(1)}}class _{name;value;constructor(t,e){this.name=t,this.value=e}match(t,e){return e._?t&&e._.push(t):e._=t?[t]:[],this}}class x{index;matcher=new L;constructor(t,e){this.index=e;for(const e of t)this.matcher.addPath(e.path,e)}match(t){const e=l(t)&&this.index;return this.matcher.match(e?this.index:t)}}class R extends x{prompt;observer;navigator=new P;constructor(t,e){super(t),this.navigator.addListener(t=>{if((!t.isCancelable||!this.prompt?.when||window.confirm(this.prompt.message))&&(this.observer&&this.observer(t),"afterChange"===t.name)){const n=this.match(t.location.pathname);e(n?.value?{...n,state:t.state}:null)}})}getTopRouter(){return this}setStickyParams(t){this.navigator.stickyParams=null!=t?t:void 0,this.navigator.normalizeCurrentUrl()}withObserver(t){return this.observer=t,this}start(){this.navigator.start(),this.navigator.firePageLoad()}stop(){this.navigator.stop()}navigate(t,e){this.navigator.navigate(t,e)}}class E extends x{parent;basePath;constructor(t,e,n){super(n),this.parent=t,this.basePath=e}getTopRouter(){return this.parent instanceof R?this.parent:this.parent.getTopRouter()}navigate(t,e){let n;if(e?.isBasePathNested??!0){const a=e?.basePath;n=a?d(this.basePath,a):this.basePath,this.parent.navigate(t,{...e,basePath:n})}else this.parent.navigate(t,{...e,basePath:e?.basePath})}}const $=r(void 0);function N(){const t=i($);if(!t)throw new Error("useRouter must be used within a RouterProvider");return t}function j(){const{navigate:t}=N();return t}function U(){const{matchedRoutePath:t,router:e}=N();return e instanceof E?e.basePath:t}function W(t){const{params:e}=N();return t?e[t]:e}function A(){const{location:t}=N();return t}function B(t){a(()=>{const e=document.title;return document.title=t,()=>{document.title=e}},[t])}function z(t){const{router:e}=N(),n=e.getTopRouter();a(()=>(n.prompt=t,()=>{n.prompt=void 0}),[t,n]),a(()=>{if(t.when){const e=t.when,n=t=>{e&&(t.preventDefault(),t.returnValue="")};return window.addEventListener("beforeunload",n),()=>{window.removeEventListener("beforeunload",n)}}},[t.when])}function O({children:e,to:n,onClick:a,replace:r=!0}){const i=j();return t("span",{onClick:t=>{const e=t.target.closest("a"),s=e?.getAttribute("href"),o=n??s;e&&o&&(t.stopPropagation(),t.preventDefault(),i(o,{replace:r}),a?.(t))},children:e})}function T({children:e,href:n,className:a,target:r,topLevelNav:i,clearBreadcrumbs:s=!1,replace:o,skipStickyParams:h}){const{router:c}=N(),l=!n||n.startsWith("#"),d=/^[a-z][a-z0-9+.-]*:/i.test(n)||n.startsWith("//")||!!r&&"_self"!==r,u=!l&&!d,m=!h&&u?c.getTopRouter().navigator.addStickyParams(n):n;return t("a",{href:m,className:a,target:r,onClick:t=>{if(t.defaultPrevented||!u)return;t.stopPropagation(),t.preventDefault();(i?c.getTopRouter():c).navigate(n,{replace:o??s})},children:e})}function F({spinner:e}){const n=N(),a=n.route;if(a.Component){const e=a.Component;return t(e,{...n.params})}if(a.LazyComponent)return t(D,{route:a,spinner:e});throw new Error(`Invalid route for ${a.path}. Either Component or LazyCOmponent must be specified.`)}function D({route:e,spinner:n}){const[r,i]=s(null);return a(()=>{e.LazyComponent().then(t=>{if(!t.default)throw new Error(`Lazy module for ${e.path} does not have a default export`);i(()=>t.default)})},[e]),r?t(r,{}):n||null}function I({basePath:e,fixLinks:n=!1,children:a}){const r=N(),i=n?e=>t(b,{basePath:r.matchedRoutePath,children:e}):t=>t;return t($.Provider,{value:{...r,navigate:(t,n)=>{if(!1===n?.isBasePathNested)return r.navigate(t,n);const a=n?.basePath?d(e,n.basePath):e;return r.navigate(t,{...n,basePath:a})}},children:i(a||t(F,{}))})}function H(){const t=N();return e("div",{children:["Route not found for path ",t.matchedRoutePath]})}function M(){return{params:{},matchedSegments:[],state:null,value:{path:"virtual:404",Component:()=>t(H,{})}}}function V({routes:e,index:a,children:r,fixLinks:i=!1}){const s=N(),h=n(s.matchedRoutePath),c=o(()=>{if("undefined"==typeof window)return null;const t=new E(s.router,h.current,e);return t.index=a,t},[s.router,a,e]),l=o(()=>{if(c&&s.matchedRoutePath===c.basePath)return c.match(s.remainingPath||"/")||M()},[s.matchedRoutePath,s.remainingPath,c]),d=i?e=>t(b,{basePath:s.matchedRoutePath,children:e}):t=>t;return l&&t($.Provider,{value:{...s,router:c,route:l.value,params:l.params,matchedRoutePath:`/${l.matchedSegments.join("/")}`,remainingPath:l.remainingSegments?`/${l.remainingSegments.join("/")}`:void 0,navigate:(t,e)=>{if(c)return c.navigate(t,e)}},children:d(r||t(F,{}))})}function q({routes:e,index:n,onChange:a,children:r}){const[i,c]=s(void 0),l=o(()=>{if("undefined"==typeof window)return null;const t=new R(e,e=>{null===e&&(e=M()),c({location:window.location,route:e.value,params:e.params,state:e.state,router:t,matchedRoutePath:`/${e.matchedSegments.join("/")}`,remainingPath:e.remainingSegments?`/${e.remainingSegments.join("/")}`:void 0,navigate:(e,n)=>t.navigate(e,n)})}).withObserver(a);return t.index=n,t},[n,a,e]);return h(()=>(l?.start(),()=>{l?.stop()}),[l]),i&&t($.Provider,{value:i,children:r||t(F,{})})}export{v as AfterLocationChangeEvent,p as BASE_PATH,x as BaseRouter,g as BeforeLocationChangeEvent,b as FixLinks,P as HistoryNavigator,w as LocationChangeEvent,O as Nav,T as NavLink,I as NestedNavigationContext,E as NestedRouter,V as NestedRouterProvider,f as Path,L as PathMatcher,$ as ReactRouterContext,F as RouteComponent,R as Router,q as RouterProvider,A as useLocation,j as useNavigate,z as useNavigationPrompt,B as usePageTitle,W as useParams,U as useRouterBasePath,N as useRouterContext};
|
|
2
|
-
//# sourceMappingURL=vertesia-ui-router.js.map
|
|
1
|
+
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{createContext as n,useContext as r,useEffect as i,useMemo as a,useRef as o,useState as s}from"react";import{useSafeLayoutEffect as c}from"@vertesia/ui/core";var l=Object.defineProperty,u=(e,t)=>{let n={};for(var r in e)l(n,r,{get:e[r],enumerable:!0});return t||l(n,Symbol.toStringTag,{value:`Module`}),n},d=class{path;params;hash;constructor(e){let t=e.lastIndexOf(`#`);t>-1?(this.hash=e.substring(t),e=e.substring(0,t)):this.hash=``,t=e.indexOf(`?`),t>-1?(this.path=e.substring(0,t),this.params=new URLSearchParams(e.substring(t+1))):(this.path=e,this.params=new URLSearchParams)}add(e){for(let[t,n]of Object.entries(e))this.params.set(t,n);return this}toString(){return`${this.path}?${this.params.toString()}${this.hash}`}},f=u({getPathSegments:()=>h,isRootPath:()=>p,joinPath:()=>m,toSegments:()=>g});function p(e){return e===`/`||e===``}function m(e,t){return t=e.endsWith(`/`)&&t.startsWith(`/`)?e+t.substring(1):e.endsWith(`/`)||t.startsWith(`/`)?e+t:`${e}/${t}`,t}function h(e){if(e===``)return[];if(e===`/`)return[``];let t=0,n=e.length;return e.startsWith(`./`)?t=2:e.startsWith(`/`)&&(t=1),e.endsWith(`/`)&&(n=e.length-1),(t>0||n<e.length?e.substring(t,n):e).split(`/`)}function g(e){if(typeof e==`string`)return h(e);if(Array.isArray(e))return e;throw Error(`Unsupported path object: ${e}`)}const _=Symbol(`BASE_PATH`);var v=class{name;type;location;state;_canceled=!1;constructor(e,t,n,r){this.name=e,this.type=t,this.location=n,this.state=r}get isPageLoad(){return this.type===`initial`}get isBackForward(){return this.type===`popState`}get isLinkClick(){return this.type===`linkClick`}get isNavigation(){return this.type===`navigate`}get isCancelable(){return this.name===`beforeChange`}cancel(){if(this.name===`afterChange`)throw Error(`Cannot cancel afterChange event`);this._canceled=!0}},y=class extends v{constructor(e,t,n){super(`beforeChange`,e,t,n)}},b=class extends v{constructor(e,t,n){super(`afterChange`,e,t,n)}};function x(e){if(e&&e.tagName.toLowerCase()===`a`){let t=e?.href.trim();if(typeof t==`string`&&t.length>0)return new URL(t)}return null}var S=class{stickyParams;_popStateListener;_linkNavListener;_listeners=[];addListener(e){this._listeners.push(e)}fireLocationChange(e){for(let t of this._listeners)t(e)}firePageLoad(){this.fireLocationChange(new b(`initial`,new URL(window.location.href)))}addStickyParams(e){return this.stickyParams?new d(e).add(this.stickyParams).toString():e}normalizeCurrentUrl(){if(typeof window>`u`||!this.stickyParams)return;let e=window.location.pathname+window.location.search+window.location.hash,t=this.addStickyParams(e);if(t!==e){let e=new URL(t,window.location.href);window.history.replaceState(window.history.state,``,e.href)}}navigate(e,t={}){if(t.stepsBack&&t.stepsBack>0){this.stepBack(t.stepsBack,t);return}if(t.basePath){let n=t.basePath;n.startsWith(`/`)||(n=`/${n}`),e=m(n,e)}e=this.addStickyParams(e),this._navigate(new URL(e,window.location.href),`navigate`,t)}stepBack(e,t={}){let n=window.history.state.historyChain||[],r=n.length>=e?new URL(n[n.length-e].href,window.location.href):new URL(window.location.origin,window.location.href);this._navigate(r,`popState`,t);let i={from:window.location.href,historyChain:n.slice(0,-e),data:t.state||void 0,title:t.title||document.title};window.history.replaceState(i,``,r.href),this.fireLocationChange(new b(`popState`,r,t.state))}_navigate(e,t,n){let r=new y(t,e,n.state);if(this.fireLocationChange(r),r._canceled)return;let i=window.history.state,a={title:n.title||document.title,href:window.location.pathname+window.location.search+window.location.hash},o=[];!n.replace&&i?.historyChain&&(o=[...i.historyChain]),n.replace||(o.push(a),o.length>10&&(o=o.slice(-10)));let s={from:window.location.href,historyChain:o,data:n.state||void 0,title:n.title||document.title};window.history[n.replace?`replaceState`:`pushState`](s,``,e.href),this.fireLocationChange(new b(t,e,n.state))}start(){if(typeof window>`u`)return;let e=e=>{let t,n=new URL(window.location.href),r;e.state?(t=`popState`,r=e.state.data):t=`linkClick`,this.fireLocationChange(new b(t,n,r))},t=e=>{let t=e.target;if(t.tagName.toLowerCase()===`a`&&(t.hasAttribute(`download`)||t.href?.startsWith(`blob:`)))return;let n=x(t);if(n&&n.origin===window.location.origin){e.preventDefault();let t=new URL(this.addStickyParams(n.href)),r=e[_]||e.target[_];r&&(t.pathname=m(r,t.pathname)),this._navigate(t,`linkClick`,{})}};this._popStateListener=e,this._linkNavListener=t,window.addEventListener(`popstate`,e),document.body.addEventListener(`click`,this._linkNavListener)}stop(){this._popStateListener&&window.removeEventListener(`popstate`,this._popStateListener),this._linkNavListener&&document.body.removeEventListener(`click`,this._linkNavListener)}};function C({basePath:t,children:n}){let r=o(null);return i(()=>{if(r.current){let e=r.current,n=e=>{e.target.tagName.toLowerCase()===`a`&&(e[_]=t)};return e.addEventListener(`click`,n),()=>{e.removeEventListener(`click`,n)}}},[t]),e(`div`,{ref:r,className:`h-full w-full`,children:n})}var w=class{tree=new E;loadMapping(e){for(let[t,n]of Object.entries(e))this.addSegments(h(t),n)}addPath(e,t){this.addSegments(h(e),t)}addSegments(e,t){let n=this.tree;for(let r=0,i=e.length;r<i;r++){let a=e[r];if(a[0]===`:`){let t=n.wildcard;if(!t)t=new O(a),n.wildcard=t;else if(!(t instanceof O))throw Error(`Failed to index path segments: ${e.join(`/`)}. A wildcard ":" segment will overwrite an existing wildcard segment at path: ${`/${e.slice(0,r).join(`/`)}`}`);n=t}else if(a===`*`){if(n.wildcard)throw Error(`Failed to index path segments: ${e.join(`/`)}. A wildcard "*" segment already exists at path: ${`/${e.slice(0,r).join(`/`)}`}`);if(n.wildcard=new k(a,t),r<i-1)throw Error(`Failed to index path segments: ${e.join(`/`)}. A wildcard segment must be the last segment`);return}else{let e=n.children[a];e||(e=new D(a),n.children[a]=e),n=e}}if(n.value!==void 0)throw Error(`Failed to index path segments: ${e.join(`/`)}. A value already exists at path: ${`/${e.join(`/`)}`}`);n.value=t}match(e){let t=g(e);if(t.length===0)return null;let n={},r=this.tree;for(let e of t){let t=r.match(e,n);if(t)r=t;else return null}if(!r.value){if(r instanceof T&&r.wildcard instanceof k&&(r=r.wildcard.match(``,n),!r.value))throw Error("Wildcard segment node `*` must have a value");if(!r.value)return null}let i,a;return n._&&n._.length>0?(i=t.slice(0,-n._.length),a=n._):i=t,{params:n,matchedSegments:i,remainingSegments:a,value:r.value}}},T=class{name;value;children={};wildcard;constructor(e,t){this.name=e,this.value=t}match(e,t){let n=this.children[e];if(n)return n;if(this.wildcard){if(this.wildcard instanceof k)return this.wildcard.match(e,t);if(this.wildcard instanceof O)return t[this.wildcard.paramName]=e,this.wildcard;throw Error(`Unknown wildcard segment node type: ${this.wildcard.constructor.name}`)}else return null}},E=class extends T{constructor(){super(`#root`)}},D=class extends T{},O=class extends T{paramName;constructor(e,t){super(e,t),this.paramName=e.substring(1)}},k=class{name;value;constructor(e,t){this.name=e,this.value=t}match(e,t){return t._?e&&t._.push(e):t._=e?[e]:[],this}},A=class{index;matcher=new w;constructor(e,t){this.index=t;for(let t of e)this.matcher.addPath(t.path,t)}match(e){let t=p(e)&&this.index;return this.matcher.match(t||e)}},j=class extends A{prompt;observer;navigator=new S;constructor(e,t){super(e),this.navigator.addListener(e=>{if(!(e.isCancelable&&this.prompt?.when&&!window.confirm(this.prompt.message))&&(this.observer&&this.observer(e),e.name===`afterChange`)){let n=this.match(e.location.pathname);n?.value?t({...n,state:e.state}):t(null)}})}getTopRouter(){return this}setStickyParams(e){this.navigator.stickyParams=e??void 0,this.navigator.normalizeCurrentUrl()}withObserver(e){return this.observer=e,this}start(){this.navigator.start(),this.navigator.firePageLoad()}stop(){this.navigator.stop()}navigate(e,t){this.navigator.navigate(e,t)}},M=class extends A{parent;basePath;constructor(e,t,n){super(n),this.parent=e,this.basePath=t}getTopRouter(){return this.parent instanceof j?this.parent:this.parent.getTopRouter()}navigate(e,t){let n=t?.isBasePathNested??!0,r;if(n){let n=t?.basePath;r=n?m(this.basePath,n):this.basePath,this.parent.navigate(e,{...t,basePath:r})}else this.parent.navigate(e,{...t,basePath:t?.basePath})}};const N=n(void 0);function P(){let e=r(N);if(!e)throw Error(`useRouter must be used within a RouterProvider`);return e}function F(){let{navigate:e}=P();return e}function I(){let{matchedRoutePath:e,router:t}=P();return t instanceof M?t.basePath:e}function L(e){let{params:t}=P();return e?t[e]:t}function R(){let{location:e}=P();return e}function z(e){i(()=>{let t=document.title;return document.title=e,()=>{document.title=t}},[e])}function B(e){let{router:t}=P(),n=t.getTopRouter();i(()=>(n.prompt=e,()=>{n.prompt=void 0}),[e,n]),i(()=>{if(e.when){let t=e.when,n=e=>{t&&(e.preventDefault(),e.returnValue=``)};return window.addEventListener(`beforeunload`,n),()=>{window.removeEventListener(`beforeunload`,n)}}},[e.when])}function V({children:t,to:n,onClick:r,replace:i=!0}){let a=F();return e(`span`,{onClick:e=>{let t=e.target.closest(`a`),o=t?.getAttribute(`href`),s=n??o;t&&s&&(e.stopPropagation(),e.preventDefault(),a(s,{replace:i}),r?.(e))},children:t})}function H({children:t,href:n,className:r,target:i,topLevelNav:a,clearBreadcrumbs:o=!1,replace:s,skipStickyParams:c}){let{router:l}=P(),u=!n||n.startsWith(`#`),d=/^[a-z][a-z0-9+.-]*:/i.test(n)||n.startsWith(`//`)||!!i&&i!==`_self`,f=!u&&!d;return e(`a`,{href:!c&&f?l.getTopRouter().navigator.addStickyParams(n):n,className:r,target:i,onClick:e=>{e.defaultPrevented||!f||(e.stopPropagation(),e.preventDefault(),(a?l.getTopRouter():l).navigate(n,{replace:s??o}))},children:t})}function U({spinner:t}){let n=P(),r=n.route;if(r.Component){let t=r.Component;return e(t,{...n.params})}else if(r.LazyComponent)return e(W,{route:r,spinner:t});else throw Error(`Invalid route for ${r.path}. Either Component or LazyCOmponent must be specified.`)}function W({route:t,spinner:n}){let[r,a]=s(null);return i(()=>{t.LazyComponent().then(e=>{if(!e.default)throw Error(`Lazy module for ${t.path} does not have a default export`);a(()=>e.default)})},[t]),r?e(r,{}):n||null}function G({basePath:t,fixLinks:n=!1,children:r}){let i=P(),a=n?t=>e(C,{basePath:i.matchedRoutePath,children:t}):e=>e;return e(N.Provider,{value:{...i,navigate:(e,n)=>{if(n?.isBasePathNested===!1)return i.navigate(e,n);let r=n?.basePath?m(t,n.basePath):t;return i.navigate(e,{...n,basePath:r})}},children:a(r||e(U,{}))})}function K(){return t(`div`,{children:[`Route not found for path `,P().matchedRoutePath]})}function q(){return{params:{},matchedSegments:[],state:null,value:{path:`virtual:404`,Component:()=>e(K,{})}}}function J({routes:t,index:n,children:r,fixLinks:i=!1}){let s=P(),c=o(s.matchedRoutePath),l=a(()=>{if(typeof window>`u`)return null;let e=new M(s.router,c.current,t);return e.index=n,e},[s.router,n,t]),u=a(()=>{if(l&&s.matchedRoutePath===l.basePath)return l.match(s.remainingPath||`/`)||q()},[s.matchedRoutePath,s.remainingPath,l]),d=i?t=>e(C,{basePath:s.matchedRoutePath,children:t}):e=>e;return l&&u&&e(N.Provider,{value:{...s,router:l,route:u.value,params:u.params,matchedRoutePath:`/${u.matchedSegments.join(`/`)}`,remainingPath:u.remainingSegments?`/${u.remainingSegments.join(`/`)}`:void 0,navigate:(e,t)=>{if(l)return l.navigate(e,t)}},children:d(r||e(U,{}))})}function Y({to:e,replace:t=!0,state:n}){let r=F();return i(()=>{r(e,{replace:t,state:n})},[r,t,n,e]),null}function X(t,n={}){return function(){return e(Y,{to:t,replace:n.replace,state:n.state})}}function Z({routes:t,index:n,onChange:r,children:i}){let[o,l]=s(void 0),u=a(()=>{if(typeof window>`u`)return null;let e=new j(t,t=>{t===null&&(t=q()),l({location:window.location,route:t.value,params:t.params,state:t.state,router:e,matchedRoutePath:`/${t.matchedSegments.join(`/`)}`,remainingPath:t.remainingSegments?`/${t.remainingSegments.join(`/`)}`:void 0,navigate:(t,n)=>e.navigate(t,n)})}).withObserver(r);return e.index=n,e},[n,r,t]);return c(()=>(u?.start(),()=>{u?.stop()}),[u]),o&&e(N.Provider,{value:o,children:i||e(U,{})})}export{b as AfterLocationChangeEvent,_ as BASE_PATH,A as BaseRouter,y as BeforeLocationChangeEvent,C as FixLinks,S as HistoryNavigator,v as LocationChangeEvent,V as Nav,H as NavLink,G as NestedNavigationContext,M as NestedRouter,J as NestedRouterProvider,f as Path,w as PathMatcher,N as ReactRouterContext,Y as Redirect,U as RouteComponent,j as Router,Z as RouterProvider,X as redirectTo,R as useLocation,F as useNavigate,B as useNavigationPrompt,z as usePageTitle,L as useParams,I as useRouterBasePath,P as useRouterContext};
|
|
2
|
+
//# sourceMappingURL=vertesia-ui-router.js.map
|