@vertesia/ui 0.66.0 → 0.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/core/components/Badge.js +1 -1
- package/lib/esm/core/components/Badge.js.map +1 -1
- package/lib/esm/core/components/FormItem.js +2 -2
- package/lib/esm/core/components/FormItem.js.map +1 -1
- package/lib/esm/core/components/InputList.js +2 -2
- package/lib/esm/core/components/InputList.js.map +1 -1
- package/lib/esm/core/components/shadcn/checkbox.js +1 -1
- package/lib/esm/core/components/shadcn/checkbox.js.map +1 -1
- package/lib/esm/core/components/shadcn/command.js +1 -1
- package/lib/esm/core/components/shadcn/command.js.map +1 -1
- package/lib/esm/core/components/shadcn/dialog.js +6 -6
- package/lib/esm/core/components/shadcn/dialog.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/DynamicLabel.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js +129 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js +46 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js +23 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/TextCombobox.js +28 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/TextCombobox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/comboBox.js +5 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/comboBox.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js +101 -0
- package/lib/esm/core/components/shadcn/filters/filter/SelectFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/{stringListFilter.js → filter/StringListFilter.js} +3 -3
- package/lib/esm/core/components/shadcn/filters/filter/StringListFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/{textFilter.js → filter/TextFilter.js} +4 -4
- package/lib/esm/core/components/shadcn/filters/filter/TextFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js +161 -0
- package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filter-styles.js +88 -0
- package/lib/esm/core/components/shadcn/filters/filter-styles.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/filterBar.js +128 -87
- package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filters.js +7 -6
- package/lib/esm/core/components/shadcn/filters/filters.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/index.js +1 -1
- package/lib/esm/core/components/shadcn/filters/index.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/types.js.map +1 -1
- package/lib/esm/core/components/toast/NotificationPanel.js +24 -18
- package/lib/esm/core/components/toast/NotificationPanel.js.map +1 -1
- package/lib/esm/features/agent/PayloadBuilder.js +47 -27
- package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentConversation.js +10 -4
- package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +7 -6
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +13 -2
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingMessages.js +2 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +10 -4
- package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
- package/lib/esm/features/facets/DocumentsFacetsNav.js +133 -0
- package/lib/esm/features/facets/DocumentsFacetsNav.js.map +1 -0
- package/lib/esm/features/facets/RunsFacetsNav.js +125 -0
- package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -0
- package/lib/esm/features/facets/VFacetsNav.js +4 -113
- package/lib/esm/features/facets/VFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/VStringFacet.js +6 -4
- package/lib/esm/features/facets/VStringFacet.js.map +1 -1
- package/lib/esm/features/facets/VTypeFacet.js +4 -5
- package/lib/esm/features/facets/VTypeFacet.js.map +1 -1
- package/lib/esm/features/facets/VUserFacet.js +1 -1
- package/lib/esm/features/facets/VUserFacet.js.map +1 -1
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js +98 -0
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -0
- package/lib/esm/features/facets/index.js +3 -2
- package/lib/esm/features/facets/index.js.map +1 -1
- package/lib/esm/features/store/collections/CollectionsTable.js +1 -1
- package/lib/esm/features/store/collections/CollectionsTable.js.map +1 -1
- package/lib/esm/features/store/collections/CreateCollection.js +10 -9
- package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js +10 -9
- package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/SelectCollection.js +1 -1
- package/lib/esm/features/store/collections/SelectCollection.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentPreviewPanel.js +0 -1
- package/lib/esm/features/store/objects/DocumentPreviewPanel.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentSearchResults.js +37 -2
- package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/esm/features/store/objects/components/ContentOverview.js +5 -6
- package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/esm/features/store/objects/components/SelectDocument.js +2 -2
- package/lib/esm/features/store/objects/components/SelectDocument.js.map +1 -1
- package/lib/esm/features/store/objects/components/VectorSearchWidget.js +1 -1
- package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +16 -4
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +72 -37
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/esm/features/store/types/ObjectSchemaEditor.js +15 -0
- package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
- package/lib/esm/features/user/UserInfo.js +8 -8
- package/lib/esm/features/user/UserInfo.js.map +1 -1
- package/lib/esm/layout/FullHeightLayout.js +2 -4
- package/lib/esm/layout/FullHeightLayout.js.map +1 -1
- package/lib/esm/router/HistoryNavigator.js +2 -2
- package/lib/esm/router/HistoryNavigator.js.map +1 -1
- package/lib/esm/shell/SplashScreen.js +19 -0
- package/lib/esm/shell/SplashScreen.js.map +1 -0
- package/lib/esm/shell/VertesiaShell.js +10 -0
- package/lib/esm/shell/VertesiaShell.js.map +1 -0
- package/lib/esm/shell/index.js +7 -0
- package/lib/esm/shell/index.js.map +1 -0
- package/lib/esm/shell/login/EnterpriseSigninButton.js +81 -0
- package/lib/esm/shell/login/EnterpriseSigninButton.js.map +1 -0
- package/lib/esm/shell/login/GitHubSignInButton.js +24 -0
- package/lib/esm/shell/login/GitHubSignInButton.js.map +1 -0
- package/lib/esm/shell/login/GoogleSignInButton.js +25 -0
- package/lib/esm/shell/login/GoogleSignInButton.js.map +1 -0
- package/lib/esm/shell/login/InviteAcceptModal.js +45 -0
- package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -0
- package/lib/esm/shell/login/MicrosoftSigninButton.js +19 -0
- package/lib/esm/shell/login/MicrosoftSigninButton.js.map +1 -0
- package/lib/esm/shell/login/PreviewIcon.js +23 -0
- package/lib/esm/shell/login/PreviewIcon.js.map +1 -0
- package/lib/esm/shell/login/SignInModal.js +9 -0
- package/lib/esm/shell/login/SignInModal.js.map +1 -0
- package/lib/esm/shell/login/SigninScreen.js +64 -0
- package/lib/esm/shell/login/SigninScreen.js.map +1 -0
- package/lib/esm/shell/login/SignupForm.js +91 -0
- package/lib/esm/shell/login/SignupForm.js.map +1 -0
- package/lib/esm/shell/login/TerminalLogin.js +179 -0
- package/lib/esm/shell/login/TerminalLogin.js.map +1 -0
- package/lib/esm/shell/login/UserInfo.js +40 -0
- package/lib/esm/shell/login/UserInfo.js.map +1 -0
- package/lib/esm/shell/login/UserSessionMenu.js +31 -0
- package/lib/esm/shell/login/UserSessionMenu.js.map +1 -0
- package/lib/esm/shell/utils.js +6 -0
- package/lib/esm/shell/utils.js.map +1 -0
- package/lib/esm/widgets/SvgIcon.js +36 -0
- package/lib/esm/widgets/SvgIcon.js.map +1 -0
- package/lib/esm/widgets/index.js +7 -6
- package/lib/esm/widgets/index.js.map +1 -1
- package/lib/esm/widgets/upload/UploadSummary.js +1 -1
- package/lib/esm/widgets/upload/UploadSummary.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/components/FormItem.d.ts +2 -1
- package/lib/types/core/components/shadcn/dialog.d.ts +2 -1
- package/lib/types/core/components/shadcn/filters/DynamicLabel.d.ts +1 -1
- package/lib/types/core/components/shadcn/filters/comboBox/DateCombobox.d.ts +5 -0
- package/lib/types/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts +8 -0
- package/lib/types/core/components/shadcn/filters/comboBox/StringListCombobox.d.ts +5 -0
- package/lib/types/core/components/shadcn/filters/comboBox/TextCombobox.d.ts +5 -0
- package/lib/types/core/components/shadcn/filters/comboBox/comboBox.d.ts +4 -0
- package/lib/types/core/components/shadcn/filters/{selectFilter.d.ts → filter/SelectFilter.d.ts} +2 -2
- package/lib/types/core/components/shadcn/filters/{stringListFilter.d.ts → filter/StringListFilter.d.ts} +1 -1
- package/lib/types/core/components/shadcn/filters/{textFilter.d.ts → filter/TextFilter.d.ts} +1 -1
- package/lib/types/core/components/shadcn/filters/{dateFilter.d.ts → filter/dateFilter.d.ts} +1 -1
- package/lib/types/core/components/shadcn/filters/filter-styles.d.ts +1 -0
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts +14 -4
- package/lib/types/core/components/shadcn/filters/index.d.ts +1 -1
- package/lib/types/core/components/shadcn/filters/types.d.ts +2 -0
- package/lib/types/features/agent/PayloadBuilder.d.ts +17 -8
- package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +2 -1
- package/lib/types/features/facets/DocumentsFacetsNav.d.ts +16 -0
- package/lib/types/features/facets/RunsFacetsNav.d.ts +18 -0
- package/lib/types/features/facets/VFacetsNav.d.ts +1 -1
- package/lib/types/features/facets/VStringFacet.d.ts +6 -2
- package/lib/types/features/facets/VTypeFacet.d.ts +3 -1
- package/lib/types/features/facets/WorkflowExecutionsFacetsNav.d.ts +13 -0
- package/lib/types/features/facets/index.d.ts +3 -2
- package/lib/types/shell/SplashScreen.d.ts +4 -0
- package/lib/types/shell/VertesiaShell.d.ts +7 -0
- package/lib/types/shell/index.d.ts +6 -0
- package/lib/types/shell/login/EnterpriseSigninButton.d.ts +5 -0
- package/lib/types/shell/login/GitHubSignInButton.d.ts +5 -0
- package/lib/types/shell/login/GoogleSignInButton.d.ts +5 -0
- package/lib/types/shell/login/InviteAcceptModal.d.ts +1 -0
- package/lib/types/shell/login/MicrosoftSigninButton.d.ts +5 -0
- package/lib/types/shell/login/PreviewIcon.d.ts +5 -0
- package/lib/types/shell/login/SignInModal.d.ts +6 -0
- package/lib/types/shell/login/SigninScreen.d.ts +8 -0
- package/lib/types/shell/login/SignupForm.d.ts +7 -0
- package/lib/types/shell/login/TerminalLogin.d.ts +1 -0
- package/lib/types/shell/login/UserInfo.d.ts +5 -0
- package/lib/types/shell/login/UserSessionMenu.d.ts +8 -0
- package/lib/types/shell/utils.d.ts +1 -0
- package/lib/types/widgets/SvgIcon.d.ts +6 -0
- package/lib/types/widgets/index.d.ts +7 -6
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +1 -1
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-layout.js +1 -1
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-router.js +1 -1
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-shell.js +2 -0
- package/lib/vertesia-ui-shell.js.map +1 -0
- package/lib/vertesia-ui-widgets.js +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/package.json +14 -6
- package/src/core/components/Badge.tsx +12 -8
- package/src/core/components/FormItem.tsx +4 -3
- package/src/core/components/InputList.tsx +21 -17
- package/src/core/components/shadcn/checkbox.tsx +2 -2
- package/src/core/components/shadcn/command.tsx +1 -1
- package/src/core/components/shadcn/dialog.tsx +18 -9
- package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -2
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +211 -0
- package/src/core/components/shadcn/filters/{comboBox.tsx → comboBox/SelectCombobox.tsx} +8 -192
- package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +76 -0
- package/src/core/components/shadcn/filters/comboBox/TextCombobox.tsx +81 -0
- package/src/core/components/shadcn/filters/comboBox/comboBox.tsx +4 -0
- package/src/core/components/shadcn/filters/filter/SelectFilter.tsx +161 -0
- package/src/core/components/shadcn/filters/{stringListFilter.tsx → filter/StringListFilter.tsx} +7 -7
- package/src/core/components/shadcn/filters/{textFilter.tsx → filter/TextFilter.tsx} +17 -11
- package/src/core/components/shadcn/filters/filter/dateFilter.tsx +256 -0
- package/src/core/components/shadcn/filters/filter-styles.ts +87 -0
- package/src/core/components/shadcn/filters/filterBar.tsx +208 -152
- package/src/core/components/shadcn/filters/filters.tsx +7 -5
- package/src/core/components/shadcn/filters/index.ts +1 -1
- package/src/core/components/shadcn/filters/types.ts +2 -0
- package/src/core/components/toast/NotificationPanel.tsx +38 -22
- package/src/features/agent/PayloadBuilder.tsx +56 -31
- package/src/features/agent/chat/ModernAgentConversation.tsx +645 -639
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +7 -6
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +13 -2
- package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -1
- package/src/features/agent/chat/ModernAgentOutput/utils.ts +12 -4
- package/src/features/facets/DocumentsFacetsNav.tsx +171 -0
- package/src/features/facets/RunsFacetsNav.tsx +166 -0
- package/src/features/facets/VFacetsNav.tsx +10 -126
- package/src/features/facets/VStringFacet.tsx +10 -4
- package/src/features/facets/VTypeFacet.tsx +6 -5
- package/src/features/facets/VUserFacet.tsx +5 -3
- package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +132 -0
- package/src/features/facets/index.ts +5 -2
- package/src/features/store/collections/CollectionsTable.tsx +3 -2
- package/src/features/store/collections/CreateCollection.tsx +17 -15
- package/src/features/store/collections/EditCollectionView.tsx +19 -16
- package/src/features/store/collections/SelectCollection.tsx +1 -1
- package/src/features/store/objects/DocumentPreviewPanel.tsx +0 -1
- package/src/features/store/objects/DocumentSearchResults.tsx +80 -11
- package/src/features/store/objects/components/ContentOverview.tsx +7 -7
- package/src/features/store/objects/components/SelectDocument.tsx +2 -2
- package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
- package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +40 -19
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +160 -214
- package/src/features/store/types/ObjectSchemaEditor.tsx +15 -0
- package/src/features/user/UserInfo.tsx +17 -14
- package/src/layout/FullHeightLayout.tsx +2 -2
- package/src/router/HistoryNavigator.ts +2 -2
- package/src/shell/SplashScreen.tsx +41 -0
- package/src/shell/VertesiaShell.tsx +27 -0
- package/src/shell/index.tsx +6 -0
- package/src/shell/login/EnterpriseSigninButton.tsx +106 -0
- package/src/shell/login/GitHubSignInButton.tsx +40 -0
- package/src/shell/login/GoogleSignInButton.tsx +36 -0
- package/src/shell/login/InviteAcceptModal.tsx +78 -0
- package/src/shell/login/MicrosoftSigninButton.tsx +30 -0
- package/src/shell/login/PreviewIcon.tsx +29 -0
- package/src/shell/login/SignInModal.tsx +28 -0
- package/src/shell/login/SigninScreen.tsx +162 -0
- package/src/shell/login/SignupForm.tsx +178 -0
- package/src/shell/login/TerminalLogin.tsx +299 -0
- package/src/shell/login/UserInfo.tsx +76 -0
- package/src/shell/login/UserSessionMenu.tsx +81 -0
- package/src/shell/utils.tsx +7 -0
- package/src/widgets/SvgIcon.tsx +44 -0
- package/src/widgets/index.ts +7 -6
- package/src/widgets/upload/UploadSummary.tsx +3 -4
- package/lib/esm/core/components/shadcn/filters/comboBox.js +0 -101
- package/lib/esm/core/components/shadcn/filters/comboBox.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/dateFilter.js +0 -36
- package/lib/esm/core/components/shadcn/filters/dateFilter.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/selectFilter.js +0 -67
- package/lib/esm/core/components/shadcn/filters/selectFilter.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/stringListFilter.js.map +0 -1
- package/lib/esm/core/components/shadcn/filters/textFilter.js.map +0 -1
- package/lib/esm/features/facets/InteractionFacet.js +0 -39
- package/lib/esm/features/facets/InteractionFacet.js.map +0 -1
- package/lib/esm/features/facets/TypeOptions.js +0 -19
- package/lib/esm/features/facets/TypeOptions.js.map +0 -1
- package/lib/esm/features/facets/UserFacet.js +0 -33
- package/lib/esm/features/facets/UserFacet.js.map +0 -1
- package/lib/types/core/components/shadcn/filters/comboBox.d.ts +0 -22
- package/lib/types/features/facets/InteractionFacet.d.ts +0 -9
- package/lib/types/features/facets/TypeOptions.d.ts +0 -3
- package/lib/types/features/facets/UserFacet.d.ts +0 -11
- package/src/core/components/shadcn/filters/dateFilter.tsx +0 -82
- package/src/core/components/shadcn/filters/selectFilter.tsx +0 -110
- package/src/features/facets/InteractionFacet.tsx +0 -53
- package/src/features/facets/TypeOptions.tsx +0 -22
- package/src/features/facets/UserFacet.tsx +0 -61
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertesia-ui-shell.js","sources":["esm/shell/login/InviteAcceptModal.js","esm/shell/login/EnterpriseSigninButton.js","esm/shell/login/GitHubSignInButton.js","esm/shell/login/GoogleSignInButton.js","esm/shell/login/MicrosoftSigninButton.js","esm/shell/login/SignupForm.js","esm/shell/login/SigninScreen.js","esm/shell/login/TerminalLogin.js","esm/shell/login/SignInModal.js","esm/shell/login/UserInfo.js","esm/shell/login/UserSessionMenu.js","esm/shell/utils.js","esm/shell/SplashScreen.js","esm/shell/VertesiaShell.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Modal, ModalBody, ModalTitle } from \"@vertesia/ui/core\";\nimport { useEffect, useState } from \"react\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nexport function InviteAcceptModal() {\n const session = useUserSession();\n const { client, account } = session;\n const [showModal, setShowModal] = useState(false);\n const [invites, setInvites] = useState([]);\n useEffect(() => {\n client.account.listInvites().then(invites => {\n if (invites.length > 0) {\n console.log(\"Got invites - showing modal\");\n setInvites(invites);\n /*toast({\n status: 'info',\n title: 'You have pending invites',\n description: 'Click the button on the top right to review them.'\n })*/\n setShowModal(true);\n }\n });\n }, [account?.id]);\n const closeModal = () => setShowModal(false);\n const accept = async (invite) => {\n await client.account.acceptInvite(invite.id);\n await session.fetchAccounts();\n const remainingInvites = invites.filter(i => i.id !== invite.id);\n setInvites(remainingInvites);\n if (remainingInvites.length === 0) {\n closeModal();\n }\n };\n const reject = async (invite) => {\n await client.account.rejectInvite(invite.id);\n const remainingInvites = invites.filter(i => i.id !== invite.id);\n setInvites(remainingInvites);\n if (remainingInvites.length === 0) {\n closeModal();\n }\n };\n const inviteList = invites.map(invite => (_jsxs(\"div\", { className: \"flex flex-row w-full justify-between border rounded-sm px-2 py-2 \", children: [_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsx(\"div\", { className: \"w-full font-semibold\", children: invite.data.account.name }), _jsxs(\"div\", { className: \"text-xs\", children: [\"Role: \", invite.data.role] }), _jsxs(\"div\", { className: \"text-xs\", children: [\"by \", invite.data.invitedBy.name] })] }), _jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [_jsx(Button, { size: 'xs', onClick: () => accept(invite), children: \"Accept\" }), \" \", _jsx(Button, { size: 'xs', variant: \"secondary\", onClick: () => reject(invite), children: \"Reject\" })] })] }, invite.id)));\n return (_jsx(\"div\", { children: _jsxs(Modal, { isOpen: showModal, onClose: closeModal, children: [_jsx(ModalTitle, { children: \"Review Invites\" }), _jsxs(ModalBody, { children: [_jsx(\"div\", { className: \"text-sm pb-4\", children: \"You have received the following invites to join other accounts. Please review and accept or declined them.\" }), inviteList] })] }) }));\n}\n//# sourceMappingURL=InviteAcceptModal.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Input, Spinner, useToast } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { getFirebaseAuth, setFirebaseTenant, useUXTracking } from \"@vertesia/ui/session\";\nimport { GoogleAuthProvider, OAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { useState } from \"react\";\nfunction getProvider(redirectTo) {\n const providerType = Env.firebase.providerType;\n switch (providerType) {\n case \"oidc\":\n return new OAuthProvider(\"oidc.main\");\n case \"google\": {\n let redirectPath = redirectTo || window.location.pathname || '/';\n if (redirectPath[0] !== '/') {\n redirectPath = '/' + redirectPath;\n }\n const provider = new GoogleAuthProvider();\n provider.addScope('profile');\n provider.addScope('email');\n provider.setCustomParameters({\n prompt: 'select_account',\n redirect_uri: window.location.origin + redirectPath\n });\n return provider;\n }\n case \"microsoft\":\n return new OAuthProvider(\"microsoft.com\");\n case \"github\":\n return new OAuthProvider(\"github.com\");\n default:\n return new OAuthProvider(\"oidc.main\");\n }\n}\nexport default function EnterpriseSigninButton({ redirectTo }) {\n const [isLoading, setIsLoading] = useState(false);\n const { trackEvent } = useUXTracking();\n const [email, setEmail] = useState(\"\");\n const toast = useToast();\n const signIn = async () => {\n if (!email)\n return;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email)) {\n toast({\n title: \"Invalid email address\",\n status: \"error\",\n duration: 5000,\n });\n return;\n }\n // Env.firebase.tenantEmail = email;\n setIsLoading(true);\n setFirebaseTenant(email).then((data) => {\n if (!data) {\n toast({\n title: \"Tenant not found\",\n status: \"error\",\n duration: 5000,\n });\n setIsLoading(false);\n return;\n }\n localStorage.setItem(\"tenantName\", data.name ?? \"\");\n const provider = getProvider(redirectTo);\n trackEvent(\"enterprise_signin\", {\n firebaseTenantName: data.name,\n });\n Env.logger.info('Enterprise single sign-in', {\n vertesia: {\n email: email,\n firebaseTenantName: data.name,\n firebaseTenantId: data.firebaseTenantId,\n },\n });\n signInWithRedirect(getFirebaseAuth(), provider);\n setIsLoading(false);\n });\n };\n return (_jsxs(_Fragment, { children: [_jsx(Input, { value: email, onChange: setEmail, placeholder: \"Enter your enterprise email\", type: \"email\" }), isLoading ? (_jsx(\"div\", { className: \"w-full flex justify-center\", children: _jsx(Spinner, {}) })) : (_jsx(Button, { variant: \"outline\", onClick: signIn, className: \"w-full mt-2 py-4 flex rounded-lg hover:shadow-sm transition duration-150 text-center\", children: _jsx(\"span\", { className: \"text-sm font-semibold\", children: \"Continue with Enterprise SSO\" }) }))] }));\n}\n//# sourceMappingURL=EnterpriseSigninButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { GithubAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nexport default function GitHubSignInButton({}) {\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n //with github can only have one allowed redirect\n const baseUrl = \"https://dengenlabs.firebaseapp.com/__/auth/handler\";\n let redirectPath = baseUrl + window.location.pathname;\n if (redirectPath[0] !== \"/\") {\n redirectPath = \"/\" + redirectPath;\n }\n const provider = new GithubAuthProvider();\n provider.addScope(\"profile\");\n provider.addScope(\"email\");\n /*provider.setCustomParameters({\n redirect_uri: redirectPath,\n });*/\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center mb-2\", children: [_jsx(\"img\", { className: \"size-6 bg-white rounded-full\", src: \"https://www.svgrepo.com/show/503359/github.svg\", loading: \"lazy\", alt: \"github logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: \"Continue with GitHub\" })] }));\n}\n//# sourceMappingURL=GitHubSignInButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { GoogleAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nexport default function GoogleSignInButton({ redirectTo }) {\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n let redirectPath = redirectTo || window.location.pathname || '/';\n if (redirectPath[0] !== '/') {\n redirectPath = '/' + redirectPath;\n }\n const provider = new GoogleAuthProvider();\n provider.addScope('profile');\n provider.addScope('email');\n // always ask to select the google account\n //console.log('redirectPath', window.location.origin + redirectPath)\n provider.setCustomParameters({\n prompt: 'select_account',\n redirect_uri: window.location.origin + redirectPath\n });\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center mb-2\", children: [_jsx(\"img\", { className: \"size-6\", src: \"https://www.svgrepo.com/show/475656/google-color.svg\", loading: \"lazy\", alt: \"google logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: \"Continue with Google\" })] }));\n}\n//# sourceMappingURL=GoogleSignInButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { OAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nexport default function MicrosoftSignInButton({ redirectTo }) {\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n let redirectPath = redirectTo || window.location.pathname || '/';\n if (redirectPath[0] !== '/') {\n redirectPath = '/' + redirectPath;\n }\n const provider = new OAuthProvider('microsoft.com');\n provider.addScope('profile');\n provider.addScope('email');\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center\", children: [_jsx(\"img\", { className: \"size-6\", src: \"https://learn.microsoft.com/en-us/entra/identity-platform/media/howto-add-branding-in-apps/ms-symbollockup_mssymbol_19.svg\", loading: \"lazy\", alt: \"microsoft logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: \"Continue with Microsoft\" })] }));\n}\n//# sourceMappingURL=MicrosoftSigninButton.js.map","import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Input, VSelectBox, SelectStack } from \"@vertesia/ui/core\";\nimport { getAuth } from \"firebase/auth\";\nimport { useEffect, useState } from \"react\";\nconst companySizeOptions = [\n { id: 1, label: \"1-10 employees\" },\n { id: 11, label: \"11-100 employees\" },\n { id: 101, label: \"101-1000 employees\" },\n { id: 1001, label: \"1001-5000 employees\" },\n { id: 5001, label: \"5000+ employees\" },\n];\nconst accountTypeOptions = [\n {\n id: \"personal\",\n label: \"Personal\",\n description: \"For personal use, or for a small team.\",\n },\n {\n id: \"company\",\n label: \"Company\",\n description: \"For a company or organization.\",\n },\n];\nconst projectMaturityOptions = [\n { id: \"testing\", label: \"Just Testing or Evaluating LLMs\" },\n { id: \"exploring\", label: \"Actively Exploring LLMs on a Project\" },\n { id: \"using\", label: \"Already Using LLMs in Production\" },\n { id: \"migrating\", label: \"Migrating to different LLMs\" },\n { id: \"other\", label: \"Other\" },\n];\nexport default function SignupForm({ onSignup, goBack }) {\n const [accountType, setAccountType] = useState(undefined);\n const [companySize, setCompanySize] = useState(undefined);\n const [companyName, setCompanyName] = useState(undefined);\n const [companyWebsite, setCompanyWebsite] = useState(undefined);\n const [projectMaturity, setProjectMaturity] = useState(undefined);\n const [fbUser, setFbUser] = useState(undefined);\n const [error, setError] = useState(undefined);\n const isCompany = accountType === \"company\";\n useEffect(() => {\n const user = getAuth().currentUser;\n if (!user) {\n console.error('No user found');\n return;\n }\n setFbUser(user);\n }, [fbUser]);\n const isValid = () => {\n if (!accountType) {\n setError(\"Please select an account type\");\n return false;\n }\n if (isCompany && !companyName) {\n setError(\"Please enter an organization name\");\n return false;\n }\n if (isCompany && !companySize) {\n setError(\"Please select a company size\");\n return false;\n }\n return true;\n };\n const onSubmit = async () => {\n if (!isValid())\n return;\n if (!accountType)\n return;\n const signupData = {\n accountType: accountType,\n companyName: companyName,\n companySize: companySize?.id,\n companyWebsite: companyWebsite,\n maturity: projectMaturity,\n };\n window.localStorage.setItem(\"composableSignupData\", JSON.stringify(signupData));\n const fbToken = await getAuth().currentUser?.getIdToken();\n console.log('Got firebase token', getAuth(), fbToken);\n if (!fbToken) {\n console.error('No firebase token found');\n return;\n }\n onSignup(signupData, fbToken);\n };\n return (_jsxs(\"div\", { className: \"flex flex-col space-y-2\", children: [_jsxs(\"div\", { className: \"prose\", children: [_jsxs(\"p\", { className: \"prose text-sm text-muted pt-4\", children: [\"Welcome to Vertesia, \", fbUser?.displayName, \" (\", fbUser?.email, \"). Please tell us a little bit about yourself and you'll be on your way. No credit card is required.\"] }), error &&\n _jsx(\"div\", { className: \"text-destructive\", children: error })] }), _jsx(FormItem, { label: \"Account Type\", children: _jsx(SelectStack, { options: accountTypeOptions, selected: accountTypeOptions.find((option) => option.id === accountType), onSelect: (option) => setAccountType(option.id) }) }), isCompany &&\n _jsxs(_Fragment, { children: [_jsx(FormItem, { label: \"Company Size\", children: _jsx(VSelectBox, { className: \"w-full border border-accent bg-muted\", value: companySize, options: companySizeOptions, onChange: setCompanySize, optionLabel: (option) => option?.label, placeholder: 'Select Company Size' }) }), _jsx(FormItem, { label: \"Company Name\", children: _jsx(Input, { value: companyName, onChange: setCompanyName, type: \"text\", required: true }) }), _jsx(FormItem, { label: \"Company Website\", children: _jsx(Input, { value: companyWebsite, onChange: setCompanyWebsite, type: \"text\" }) })] }), _jsx(FormItem, { label: \"Project Maturity\", children: _jsx(VSelectBox, { className: \"w-full border border-accent bg-muted\", options: projectMaturityOptions, value: projectMaturityOptions.find((option) => option.id === projectMaturity), optionLabel: (option) => option?.label, placeholder: 'Select Project Maturity', onChange: (option) => setProjectMaturity(option?.id) }) }), _jsxs(\"div\", { className: \"pt-8 flex flex-col\", children: [_jsx(Button, { variant: \"primary\", onClick: onSubmit, size: \"xl\", children: _jsx(\"span\", { className: \"text-lg\", children: \"Sign Up\" }) }), _jsx(Button, { variant: \"ghost\", size: \"xl\", className: \"mt-4\", onClick: goBack, children: _jsx(\"span\", { className: \"\", children: \"Wrong account, go back\" }) })] })] }));\n}\nfunction FormItem({ label, children }) {\n return (_jsxs(\"div\", { className: \"flex flex-col space-y-2 pt-4\", children: [_jsx(\"div\", { className: \"text-sm text-muted\", children: label }), children] }));\n}\n//# sourceMappingURL=SignupForm.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, useSafeLayoutEffect } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { UserNotFoundError, useUserSession, useUXTracking } from \"@vertesia/ui/session\";\nimport clsx from \"clsx\";\nimport { useEffect, useState } from \"react\";\nimport EnterpriseSigninButton from \"./EnterpriseSigninButton\";\nimport GitHubSignInButton from \"./GitHubSignInButton\";\nimport GoogleSignInButton from \"./GoogleSignInButton\";\nimport MicrosoftSignInButton from \"./MicrosoftSigninButton\";\nimport SignupForm from \"./SignupForm\";\nexport function SigninScreen({ allowedPrefix, isNested = false, lightLogo, darkLogo }) {\n const [allow, setAllow] = useState(false);\n useSafeLayoutEffect(() => {\n allowedPrefix && setAllow(window.location.href.startsWith(allowedPrefix));\n }, []);\n return allow ? null : _jsx(SigninScreenImpl, { isNested: isNested, lightLogo: lightLogo, darkLogo: darkLogo });\n}\nfunction SigninScreenImpl({ isNested = false, lightLogo, darkLogo }) {\n const { isLoading, user, authError } = useUserSession();\n return !isLoading && !user ? (_jsx(\"div\", { style: { zIndex: 999998 }, className: (isNested ? \"absolute\" : \"fixed\") + \"overflow-y-auto \", children: _jsxs(\"div\", { className: clsx(\"flex flex-col items-center justify-center py-14 px-4\"), children: [_jsx(StandardSigninPanel, { authError: authError, lightLogo: lightLogo, darkLogo: darkLogo }), _jsxs(\"div\", { className: \"flex gap-x-6 mt-10 justify-center text-muted\", children: [_jsx(\"a\", { href: \"https://vertesiahq.com/privacy\", className: \"text-sm\", children: \"Privacy Policy\" }), _jsx(\"a\", { href: \"https://vertesiahq.com/terms\", className: \"text-sm\", children: \"Terms of Service\" })] })] }) })) : null;\n}\nfunction StandardSigninPanel({ authError, darkLogo, lightLogo }) {\n const [signupData, setSignupData] = useState(undefined);\n const [collectSignupData, setCollectSignupData] = useState(false);\n const { signOut } = useUserSession();\n const { trackEvent } = useUXTracking();\n history.replaceState({}, '', '/');\n const goBack = () => {\n console.log(\"Going back, signing out\");\n setSignupData(undefined);\n setCollectSignupData(false);\n signOut();\n };\n const goToSignup = () => {\n setSignupData(undefined);\n setCollectSignupData(true);\n };\n useEffect(() => {\n if (authError instanceof UserNotFoundError) {\n console.log(\"User not found, redirecting to signup\");\n goToSignup();\n }\n }, [authError]);\n const onSignup = (data, fbToken) => {\n console.log(\"Got Signup data\", data);\n setSignupData(data);\n const payload = {\n signupData: data,\n firebaseToken: fbToken,\n };\n fetch(Env.endpoints.studio + \"/auth/signup\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n }).then((res) => {\n console.log(\"Signup successful\", payload, res);\n trackEvent(\"sign_up\");\n window.location.href = \"/\";\n });\n };\n return (_jsxs(_Fragment, { children: [lightLogo && _jsx(\"img\", { src: lightLogo, alt: 'logo', className: 'h-15 block dark:hidden' }), darkLogo && _jsx(\"img\", { src: darkLogo, alt: 'logo', className: 'h-15 hidden dark:block' }), signupData && (_jsxs(\"div\", { className: \"my-6\", children: [\"Need to make a change?\", \" \", _jsx(Button, { onClick: goToSignup, children: \" Go back\" })] })), _jsx(\"div\", { className: \"flex flex-col space-y-2\", children: collectSignupData && !localStorage.getItem('tenantName') ? (_jsx(SignupForm, { onSignup: onSignup, goBack: goBack })) : (_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsx(\"div\", { className: \"my-4\", children: _jsx(\"h2\", { className: \"text-2xl font-bold text-center\", children: \"Log in or Sign up\" }) }), _jsxs(\"div\", { className: \"max-w-2xl text-center my-2 px-2\", children: [\"First time here? No problem, it's free to try!\", _jsx(\"br\", {}), \"We'll just ask you a couple of questions next and you'll be on your way.\"] }), _jsxs(\"div\", { className: \"flex items-center flex-col\", children: [_jsxs(\"div\", { className: \"py-4 w-70\", children: [_jsx(GoogleSignInButton, {}), _jsx(GitHubSignInButton, {}), _jsx(MicrosoftSignInButton, {})] }), _jsxs(\"div\", { className: \"flex items-center flex-row w-70 text-muted\", children: [_jsx(\"hr\", { className: \"w-full\" }), _jsx(\"div\", { className: \"px-2 text-xs\", children: \"OR\" }), _jsx(\"hr\", { className: \"w-full\" })] }), _jsx(\"div\", { className: \"py-4 w-70\", children: _jsx(EnterpriseSigninButton, {}) })] }), authError && (_jsx(\"div\", { className: \"text-center\", children: _jsxs(\"div\", { className: \"\", children: [\"Sorry, we have not been able to sign you in.\", _jsx(\"br\", {}), \"Please try again or contact\", _jsx(\"a\", { className: 'text-info mx-1', href: \"mailto:support@vertesiahq.com\", children: \"support@vertesiahq.com\" }), \"if it persists.\", _jsxs(\"pre\", { className: \"mt-2\", children: [\"Error: \", authError.message] })] }) }))] })) })] }));\n}\n//# sourceMappingURL=SigninScreen.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nimport { Button, Center, ErrorBox, Input, SelectBox, Spinner, useFetch, useToast } from '@vertesia/ui/core';\nimport { Env } from \"@vertesia/ui/env\";\nimport { useLocation } from \"@vertesia/ui/router\";\nimport { fetchComposableTokenFromFirebaseToken, useUserSession } from '@vertesia/ui/session';\nfunction getClientInfo(location) {\n const params = new URLSearchParams(location.search);\n let redirect = params.get('redirect_uri');\n const code = params.get('code');\n if (!redirect || !code) {\n return null;\n }\n redirect = decodeURI(redirect);\n if (!redirect.startsWith('http://127.0.0.1:') && !redirect.startsWith('http://localhost:')) {\n return null;\n }\n const profile = params.get('profile') ?? \"default\";\n const project = params.get('project') ?? undefined;\n const account = params.get('account') ?? undefined;\n return { redirect, code, profile, project, account };\n}\nexport function TerminalLogin() {\n const [payload, setPayload] = useState();\n const [error, setError] = useState();\n const location = useLocation();\n const clientInfo = getClientInfo(location);\n const toast = useToast();\n const onAccept = async (data) => {\n if (!clientInfo)\n return;\n if (!data.profile) {\n toast({\n title: 'Profile is required',\n description: 'Please enter a profile name to save the client authorization',\n status: 'error',\n duration: 2000\n });\n return;\n }\n if (!data.account) {\n toast({\n title: 'Account is required',\n description: 'Please select an account to authorize the client to access the ComposablePrompts servers',\n status: 'error',\n duration: 2000\n });\n return;\n }\n if (!data.project) {\n toast({\n title: 'Project is required',\n description: 'Please select a project to authorize the client to access the ComposablePrompts servers',\n status: 'error',\n duration: 2000\n });\n return;\n }\n // expire in 1 day\n let payload;\n try {\n const token = await fetchComposableTokenFromFirebaseToken(data.account, data.project, 24 * 3600);\n if (token) {\n payload = {\n ...data,\n studio_server_url: Env.endpoints.studio,\n zeno_server_url: Env.endpoints.zeno,\n token,\n };\n await fetch(clientInfo.redirect, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload)\n });\n setPayload(payload);\n }\n else {\n toast({\n title: 'Failed to get composable token',\n status: 'error',\n duration: 5000\n });\n }\n }\n catch (err) {\n if (payload) {\n setError(err);\n setPayload(payload);\n }\n else {\n toast({\n title: 'Error authorizing client',\n description: err.message,\n status: 'error',\n duration: 5000\n });\n }\n }\n };\n const getPageContent = () => {\n if (!clientInfo) {\n return _jsx(ErrorBox, { title: 'Invalid request', children: \"This page should be called by a terminal client to authenticate against the ComposablePrompts servers\" });\n }\n return payload\n ? _jsx(AuthDoneScreen, { payload: payload, error: error })\n : _jsx(AuthAcceptScreen, { clientInfo: clientInfo, onAccept: onAccept });\n };\n const page = getPageContent();\n return (_jsx(\"div\", { className: \"w-full flex flex-col items-center gap-4 mt-24\", children: page }));\n}\nfunction AuthAcceptScreen({ onAccept, clientInfo }) {\n const { client, user } = useUserSession();\n const { data: allProjects, error } = useFetch(() => user ? client.projects.list() : Promise.resolve([]), [user]);\n if (error) {\n return _jsx(ErrorBox, { title: 'Error loading projects', children: error.message });\n }\n const getEnvironmentName = () => {\n if (Env.isLocalDev) {\n return \"Local Dev\";\n }\n else if (Env.isDev) {\n return \"Staging\";\n }\n return \"Production\";\n };\n const envName = getEnvironmentName();\n return user && allProjects ? (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: 'w-1/3', children: [_jsxs(\"div\", { className: \"mb-4 text-xl font-semibold text-gray-800\", children: [\"Authorizing client on \", envName, \" environment.\"] }), _jsxs(\"div\", { className: 'mb-2 text-md text-gray-800', children: [_jsx(\"div\", { children: \"A client app wants authorization to access the composable prompt servers in your name.\" }), _jsxs(\"div\", { children: [\"The client app code is \", _jsx(\"b\", { children: clientInfo.code }), \". You can check if the code is correct in the terminal.\"] })] }), _jsxs(\"div\", { className: 'mb-2 text-sm text-gray-600', children: [_jsx(\"div\", { children: \"You must choose the target account and project for the client to access.\" }), _jsx(\"div\", { children: \"Also, enter a profile name that will be used to save the authorization in your client configuration.\" })] })] }), _jsx(ProfileForm, { onAccept: onAccept, allProjects: allProjects, data: clientInfo })] })) : _jsx(Spinner, { size: 'lg' });\n}\nfunction AuthDoneScreen({ payload, error }) {\n const toast = useToast();\n const onCopy = () => {\n if (payload) {\n navigator.clipboard.writeText(JSON.stringify(payload));\n toast({\n title: 'Authentication Payload copied',\n description: error ? 'You can paste the authentication payload in the terminal to authenticate the client.' : 'You can close the page now.',\n status: 'success',\n duration: 5000\n });\n }\n };\n return (_jsxs(\"div\", { children: [error ?\n _jsxs(\"div\", { children: [_jsxs(ErrorBox, { title: 'Failed to send the authorization token to the cli tool', children: [\"This can happen due to security checks on Safari. The error is \\\"\", error.message, \"\\\"\"] }), _jsx(\"div\", { children: \"Don't worry, you can still authenticate the cli tool by pasting the authentication token in the terminal. You can close this page.\" })] })\n : _jsx(\"div\", { children: \"The client is authenticated. You can close this page.\" }), _jsx(Center, { className: \"mt-4\", children: _jsx(Button, { variant: 'secondary', onClick: onCopy, children: \"Copy the Authentication Payload\" }) })] }));\n}\nfunction ProfileForm({ allProjects, data, onAccept }) {\n const { accounts, account, project } = useUserSession();\n const [currentData, setCurrentData] = useState(() => ({\n profile: data.profile,\n account: data.account ?? account?.id,\n project: data.project ?? project?.id,\n }));\n const onChangeProfile = (value) => {\n setCurrentData({ ...currentData, profile: value });\n };\n const onChangeAccount = (value) => {\n setCurrentData({ ...currentData, account: value.id, project: undefined });\n };\n const onChangeProject = (value) => {\n setCurrentData({ ...currentData, project: value.id });\n };\n const projects = allProjects.filter(p => p.account === currentData.account);\n return (_jsxs(\"div\", { className: 'w-1/3', children: [_jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-gray-600\", children: \"Profile Name\" }), _jsx(Input, { type: 'text', value: currentData.profile, onChange: onChangeProfile })] }), _jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-gray-600\", children: \"Account\" }), _jsx(SelectAccount, { value: currentData.account, onChange: onChangeAccount, accounts: accounts || [] })] }), _jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-gray-600\", children: \"Project\" }), _jsx(SelectProject, { value: currentData.project, onChange: onChangeProject, projects: projects })] }), _jsx(\"div\", { className: \"pt-2\", children: _jsx(Button, { size: 'xl', onClick: () => onAccept(currentData), children: \"Authorize Client\" }) })] }));\n}\nfunction SelectAccount({ value, accounts, onChange }) {\n const _onChange = (value) => {\n onChange(value);\n };\n return _jsx(SelectBox, { options: accounts, value: accounts?.find(a => a.id === value), onChange: _onChange, by: \"id\", optionLabel: (option) => option.name, placeholder: 'Select Account' });\n}\nfunction SelectProject({ value, projects, onChange }) {\n const _onChange = (value) => {\n onChange(value);\n };\n return (_jsx(SelectBox, { by: \"id\", value: projects.find(p => p.id === value), options: projects, optionLabel: (option) => option.name, placeholder: 'Select Project', onChange: _onChange }));\n}\n//# sourceMappingURL=TerminalLogin.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Modal, ModalBody, ModalFooter, ModalTitle } from \"@vertesia/ui/core\";\nimport GitHubSignInButton from \"./GitHubSignInButton\";\nimport GoogleSignInButton from \"./GoogleSignInButton\";\nimport MicrosoftSignInButton from \"./MicrosoftSigninButton\";\nexport default function SignInModal({ isOpen, onClose }) {\n return (_jsxs(Modal, { isOpen: isOpen, onClose: onClose, children: [_jsx(ModalTitle, { children: \"Sign In\" }), _jsxs(ModalBody, { className: \"flex justify-center\", children: [_jsx(GoogleSignInButton, {}), _jsx(GitHubSignInButton, {}), _jsx(MicrosoftSignInButton, {})] }), _jsx(ModalFooter, { justify: \"end\", children: _jsx(Button, { variant: \"ghost\", onClick: onClose, children: \"Cancel\" }) })] }));\n}\n//# sourceMappingURL=SignInModal.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTenantIdFromProject } from \"@vertesia/common\";\nimport { VTabs, VTabsBar, VTabsPanel, VTooltip } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nimport { Check, CopyIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nexport function InfoItems({ title, value }) {\n function copyToClipboard(value) {\n navigator.clipboard.writeText(value);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n }\n const [isCopied, setIsCopied] = useState(false);\n return (_jsxs(\"div\", { className: \"w-full flex justify-between items-center mb-1\", children: [_jsxs(\"div\", { className: \"flex flex-col w-[calc(100%-3rem)]\", children: [_jsx(\"div\", { className: 'text-sm px-2 dark:text-slate-200', children: title }), _jsx(VTooltip, { description: value, size: \"xs\", placement: \"left\", children: _jsxs(\"div\", { className: 'text-xs truncate text-muted w-full text-left px-2', children: [value, \" \"] }) })] }), isCopied ?\n _jsx(Check, { className: \"size-4 cursor-pointer text-success\" })\n :\n _jsx(CopyIcon, { className: \"size-4 cursor-pointer text-gray-400 dark:text-slate-400\", onClick: () => copyToClipboard(value) })] }));\n}\nexport default function InfoList() {\n const session = useUserSession();\n const { account, project, client, authToken } = session;\n const server = new URL(client.baseUrl).hostname;\n const store = new URL(client.store.baseUrl).hostname;\n const tenantId = project ? getTenantIdFromProject(project) : '';\n const tabs = [\n {\n name: 'user',\n label: 'User',\n content: _jsxs(\"div\", { className: \"space-y-1 p-2\", children: [_jsx(InfoItems, { title: \"Organization ID\", value: account?.id ?? 'Unknown' }), _jsx(InfoItems, { title: \"Project ID\", value: project?.id ?? 'Unknown' }), _jsx(InfoItems, { title: \"User ID\", value: authToken?.sub ?? 'Unknown' }), _jsx(InfoItems, { title: \"Organization Roles\", value: authToken?.account_roles?.join(',') ?? 'Unknown' }), _jsx(InfoItems, { title: \"Project Roles\", value: authToken?.project_roles?.join(',') ?? 'Unknown' })] })\n },\n {\n name: 'environment',\n label: 'Environment',\n content: _jsxs(\"div\", { className: \"space-y-1 p-2\", children: [_jsx(InfoItems, { title: \"Tenant ID\", value: tenantId }), _jsx(InfoItems, { title: \"Environment\", value: Env.type }), _jsx(InfoItems, { title: \"Server\", value: server }), _jsx(InfoItems, { title: \"Store\", value: store }), _jsx(InfoItems, { title: \"App Version\", value: Env.version })] })\n }\n ];\n return (_jsx(\"div\", { className: \"w-full\", children: _jsxs(VTabs, { defaultValue: \"user\", tabs: tabs, fullWidth: true, children: [_jsx(VTabsBar, {}), _jsx(VTabsPanel, {})] }) }));\n}\n//# sourceMappingURL=UserInfo.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Avatar, Button, MenuList, ModeToggle, Spinner } from \"@vertesia/ui/core\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nimport { Popover } from \"@vertesia/ui/widgets\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nimport SignInModal from \"./SignInModal\";\nimport InfoList from \"./UserInfo\";\nexport function UserSessionMenu({}) {\n const { user, isLoading } = useUserSession();\n const [showModal, setShowModal] = useState(false);\n if (isLoading) {\n return _jsx(Spinner, {});\n }\n else if (!user) {\n return _jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setShowModal(true), children: \"Sign In\" }), _jsx(SignInModal, { isOpen: showModal, onClose: () => setShowModal(false) })] });\n }\n else {\n return (_jsx(\"div\", { className: \"px-3\", children: _jsx(UserSessionPopup, { asMenuTrigger: true }) }));\n }\n}\nfunction UserSessionPopup({ className, asMenuTrigger = false }) {\n const session = useUserSession();\n const { user } = session;\n if (!session || !user)\n return null;\n return (_jsxs(Popover, { strategy: 'fixed', placement: 'bottom-start', zIndex: 100, children: [_jsx(Popover.Trigger, { click: true, children: _jsx(\"div\", { className: clsx(className, \"flex items-center justify-start\", asMenuTrigger && \"cursor-pointer\"), children: _jsx(Avatar, { size: 'sm', color: 'bg-amber-500', shape: 'circle', \n /*src={picture} */\n name: user?.name }) }) }), _jsx(Popover.Content, { className: \"w-[280px] mx-2 my-1\", children: _jsx(\"div\", { className: \"bg-white dark:bg-slate-900 shadow-lg rounded-md ring-1 ring-gray-200 dark:ring-slate-700\", children: _jsxs(\"div\", { className: 'divide-y divide-gray-200 dark:divide-slate-700', children: [_jsxs(\"div\", { className: 'py-2 pl-2', children: [_jsx(\"p\", { className: \"px-4 dark:text-white mb-1\", children: user?.name ?? 'Unknown' }), _jsx(\"p\", { className: \"px-4 text-xs text-gray-500\", children: user?.email ?? '' })] }), _jsx(\"div\", { className: \"w-full p-1\", children: _jsx(InfoList, {}) }), _jsx(\"div\", { className: 'py-2 pl-2', children: _jsx(ModeToggle, {}) }), _jsx(\"div\", { className: 'py-2', children: _jsx(MenuList, { children: _jsx(MenuList.Item, { className: 'px-2', onClick: () => session.logout(), children: \"Sign out\" }) }) })] }) }) })] }));\n}\n//# sourceMappingURL=UserSessionMenu.js.map","export function isVertesiaEmail(email) {\n return email ? (email.endsWith('@vertesiahq.com') ||\n email.endsWith('@becomposable.com') ||\n email.endsWith('@composableprompts.com')) : false;\n}\n//# sourceMappingURL=utils.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Transition } from \"@headlessui/react\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nexport function SplashScreen({}) {\n const { isLoading } = useUserSession();\n const [show, setShow] = useState(true);\n useEffect(() => {\n if (!isLoading) {\n setShow(false);\n }\n // setTimeout(() => {\n // setShow(false)\n // }, 2000)\n }, [isLoading]);\n // 300 500 700 1000\n return (_jsx(Transition, { appear: true, show: show, as: Fragment, unmount: true, leave: \"transition ease-in duration-500\", leaveFrom: \"opacity-100\", leaveTo: \"opacity-0\", children: _jsx(\"div\", { style: { zIndex: 999999 }, className: 'fixed inset-x-0 inset-y-0', children: _jsx(\"div\", { className: \"flex w-full h-full items-center justify-center\", children: _jsx(\"div\", { className: \"animate-[spin_4s_linear_infinite]\", children: _jsx(\"img\", { src: '/icon.svg', className: 'w-10 h-auto animate-pulse rounded-full' }) }) }) }) }));\n}\n//# sourceMappingURL=SplashScreen.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ThemeProvider, ToastProvider } from \"@vertesia/ui/core\";\nimport { UserPermissionProvider } from \"@vertesia/ui/features\";\nimport { UserSessionProvider } from \"@vertesia/ui/session\";\nimport { SplashScreen } from \"./SplashScreen\";\nimport { SigninScreen } from \"./login/SigninScreen\";\nexport function VertesiaShell({ children, lightLogo, darkLogo }) {\n return (_jsx(ToastProvider, { children: _jsx(UserSessionProvider, { children: _jsxs(ThemeProvider, { defaultTheme: \"system\", storageKey: \"vite-ui-theme\", children: [_jsx(SplashScreen, {}), _jsx(SigninScreen, { allowedPrefix: \"/shared/\", lightLogo: lightLogo, darkLogo: darkLogo }), _jsx(UserPermissionProvider, { children: children })] }) }) }));\n}\n//# sourceMappingURL=VertesiaShell.js.map"],"names":["InviteAcceptModal","session","useUserSession","client","account","showModal","setShowModal","useState","invites","setInvites","useEffect","listInvites","then","length","console","log","id","closeModal","inviteList","map","invite","_jsxs","className","children","_jsx","data","name","role","invitedBy","Button","size","onClick","async","acceptInvite","fetchAccounts","remainingInvites","filter","i","accept","variant","rejectInvite","reject","Modal","isOpen","onClose","ModalTitle","ModalBody","EnterpriseSigninButton","redirectTo","isLoading","setIsLoading","trackEvent","useUXTracking","email","setEmail","toast","useToast","_Fragment","Input","value","onChange","placeholder","type","Spinner","test","setFirebaseTenant","title","status","duration","localStorage","setItem","provider","Env","firebase","providerType","OAuthProvider","redirectPath","window","location","pathname","GoogleAuthProvider","addScope","setCustomParameters","prompt","redirect_uri","origin","getProvider","firebaseTenantName","logger","info","vertesia","firebaseTenantId","signInWithRedirect","getFirebaseAuth","GitHubSignInButton","removeItem","GithubAuthProvider","src","loading","alt","GoogleSignInButton","MicrosoftSignInButton","companySizeOptions","label","accountTypeOptions","description","projectMaturityOptions","SignupForm","onSignup","goBack","accountType","setAccountType","undefined","companySize","setCompanySize","companyName","setCompanyName","companyWebsite","setCompanyWebsite","projectMaturity","setProjectMaturity","fbUser","setFbUser","error","setError","isCompany","user","getAuth","currentUser","displayName","FormItem","SelectStack","options","selected","find","option","onSelect","VSelectBox","optionLabel","required","signupData","maturity","JSON","stringify","fbToken","getIdToken","SigninScreen","allowedPrefix","isNested","lightLogo","darkLogo","allow","setAllow","useSafeLayoutEffect","href","startsWith","SigninScreenImpl","authError","style","zIndex","clsx","StandardSigninPanel","setSignupData","collectSignupData","setCollectSignupData","signOut","history","replaceState","goToSignup","UserNotFoundError","getItem","payload","firebaseToken","fetch","endpoints","studio","method","headers","body","res","message","TerminalLogin","setPayload","clientInfo","params","URLSearchParams","search","redirect","get","code","decodeURI","profile","project","getClientInfo","useLocation","onAccept","token","fetchComposableTokenFromFirebaseToken","studio_server_url","zeno_server_url","zeno","err","page","AuthDoneScreen","AuthAcceptScreen","ErrorBox","allProjects","useFetch","projects","list","Promise","resolve","envName","isLocalDev","isDev","ProfileForm","Center","navigator","clipboard","writeText","accounts","currentData","setCurrentData","p","SelectAccount","SelectProject","SelectBox","a","by","SignInModal","ModalFooter","justify","InfoItems","isCopied","setIsCopied","VTooltip","placement","Check","CopyIcon","setTimeout","copyToClipboard","InfoList","authToken","server","URL","baseUrl","hostname","store","tenantId","getTenantIdFromProject","tabs","content","sub","account_roles","join","project_roles","version","VTabs","defaultValue","fullWidth","VTabsBar","VTabsPanel","UserSessionMenu","UserSessionPopup","asMenuTrigger","Popover","strategy","Trigger","click","Avatar","color","shape","Content","ModeToggle","MenuList","Item","logout","isVertesiaEmail","endsWith","SplashScreen","show","setShow","Transition","appear","as","Fragment","unmount","leave","leaveFrom","leaveTo","VertesiaShell","ToastProvider","UserSessionProvider","ThemeProvider","defaultTheme","storageKey","UserPermissionProvider"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{isNil as n,omit as s,isEqual as i}from"lodash-es";import a,{createContext as o,useContext as l,useMemo as c,useState as d,useEffect as h,useRef as u,Children as p,isValidElement as m}from"react";import{XMLParser as f,XMLValidator as g}from"fast-xml-parser";import{ObjectWalker as y}from"@vertesia/json";import{DotBadge as v,useSafeLayoutEffect as b,useToast as x,VModal as w,VModalTitle as N,VModalBody as k,VModalFooter as C,Button as j,Styles as S,VSelectBox as O,ModalBody as A,ModalFooter as P,useFlag as $,useClickOutside as E,Table as I,VTooltip as T}from"@vertesia/ui/core";import q from"clsx";import M from"ajv";import{json as L}from"@codemirror/lang-json";import D from"debounce";import{EditorView as F}from"@codemirror/view";import{Text as R,EditorState as V}from"@codemirror/state";import{basicSetup as _}from"codemirror";import{AlignLeft as z,Trash2 as U,SquarePen as K,Plus as B,ChevronDown as W,ChevronRight as H,Info as J,UploadIcon as G,CheckCircleIcon as X,AlertCircleIcon as Z,XCircleIcon as Y}from"lucide-react";import{offset as Q,shift as ee,flip as te}from"@floating-ui/dom";import{useFloating as re,autoUpdate as ne,useDismiss as se,useClick as ie,useHover as ae,useInteractions as oe,useTransitionStyles as le,FloatingPortal as ce,FloatingFocusManager as de,safePolygon as he}from"@floating-ui/react";const ue="#text",pe="#comment",me="#cdata",fe="DECLARATION_TAG",ge={tagColor:"#d43900",textColor:"#333",attributeKeyColor:"#2a7ab0",attributeValueColor:"#008000",separatorColor:"#333",commentColor:"#aaa",cdataColor:"#1d781d",fontFamily:"monospace"},ye=o({theme:ge,collapsible:!1,indentSize:2}),ve=()=>l(ye),be=new f({preserveOrder:!0,ignoreAttributes:!1,attributeNamePrefix:"",allowBooleanAttributes:!0,commentPropName:pe,cdataPropName:me,parseTagValue:!1});function xe(r){const{indentation:n,children:s,isInline:i}=r,{theme:a}=ve();return e("div",{style:{color:a.cdataColor},children:[t("span",{children:`${n}<![CDATA[`}),s,t("span",{children:`${i?"":n}]]>`})]})}function we(e){const{collapsible:r,theme:n}=ve(),{collapsed:s}=e;return r?t("span",{style:{position:"relative"},children:t("span",{style:{position:"absolute",right:"0",border:0,padding:0,background:"none"},children:t(Ne,{fill:n.separatorColor,style:{transform:`rotate(${s?0:90}deg)`,transition:"transform 0.2s"}})})}):null}function Ne({...e}){return t("svg",{width:"16px",height:"16px",viewBox:"0 0 24 24",...e,children:t("path",{d:"M9 17.898C9 18.972 10.2649 19.546 11.0731 18.8388L17.3838 13.3169C18.1806 12.6197 18.1806 11.3801 17.3838 10.6829L11.0731 5.16108C10.2649 4.45388 9 5.02785 9 6.1018V17.898Z"})})}function ke(e){const{collapsible:t,initialCollapsedDepth:r}=ve(),[s,i]=d((()=>!(n(r)||!t)&&e>=r));return h((()=>{i(!(n(r)||!t)&&e>=r)}),[r,e,t]),{collapsed:s,buttonProps:t?{onClick:()=>i((e=>!e)),role:"button",style:{cursor:"pointer"}}:{}}}function Ce(r){const{indentation:n,children:s,isInline:i,level:a}=r,{theme:o}=ve(),{collapsed:l,buttonProps:c}=ke(a);return e("div",{style:{color:o.commentColor},children:[e("span",{...c,children:[t("span",{children:n}),t(we,{collapsed:l}),t("span",{children:"\x3c!-- "})]}),!l&&s,l&&"...",t("span",{children:`${i||l?" ":n}--\x3e`})]})}function je(r){const{attributes:n}=r,{theme:s}=ve();return n?t("span",{children:Object.entries(n).map((([r,n])=>e("span",{children:[t("span",{style:{color:s.attributeKeyColor},children:` ${r}`}),t("span",{style:{color:s.separatorColor},children:"="}),t("span",{style:{color:s.attributeValueColor},children:`"${n}"`})]},`attribute-${r}`)))}):null}function Se(r){const{indentation:n,tagKey:s,attributes:i}=r,{theme:a}=ve();return e("div",{children:[t("span",{style:{color:a.separatorColor},children:`${n}<?`}),t("span",{style:{color:a.tagColor},children:`${s.slice(1)}`}),t(je,{attributes:i}),t("span",{style:{color:a.separatorColor},children:"?>"})]})}function Oe(e){return"string"==typeof e&&e.includes("\n")}function Ae(e){const t=e[":@"],r=s(e,":@"),[[n,i]]=Object.entries(r),a=function(e){switch(e){case ue:case me:case pe:return e;default:return e.startsWith("?")?fe:"TAG"}}(n);return{attributes:t,tagKey:n,subElements:i,type:a}}function Pe(e){return!!e&&Object.keys(e).length>0}function $e(n){const{indentation:s,tagKey:i,attributes:a,children:o,isInline:l,hasChildren:c,level:d}=n,{collapsed:h,buttonProps:u}=ke(d),{theme:p}=ve();return e("div",{children:[e("span",{...u,children:[t("span",{children:s}),t(we,{collapsed:h}),t("span",{style:{color:p.separatorColor},children:"<"}),t("span",{style:{color:p.tagColor},children:`${i}`}),!h&&t(je,{attributes:a}),h&&Pe(a)&&" ...",t("span",{style:{color:p.separatorColor},children:c?">":" />"})]}),c&&e(r,{children:[!h&&o,h&&"...",t("span",{style:{color:p.separatorColor},children:`${l||h?"":s}</`}),t("span",{style:{color:p.tagColor},children:`${i}`}),t("span",{style:{color:p.separatorColor},children:">"})]})]})}function Ee(e){const{hasSiblings:r,text:n,indentation:s,isText:i}=e,{theme:a}=ve(),o=i?{color:a.textColor}:void 0;return Oe(n)||r?t("div",{style:o,children:n.split("\n").filter((e=>!!e.trim())).map(((e,r)=>t("div",{children:`${s}${e.trim()}`},`${r}`)))}):t("span",{style:o,children:n})}function Ie(e){const{elements:n,level:s=0,isText:i=!0}=e,{indentSize:a}=ve();return Array.isArray(n)&&0!==n.length?t(r,{children:n.map(((e,r)=>{const{tagKey:o,attributes:l,subElements:c,type:d}=Ae(e),h=n.length>1,u=function(e,t){return new Array(t*e+1).join(" ")}(a,s),p=`${s}-${r}`,m=function(e){return"string"!=typeof e&&1===e.length&&ue in e[0]&&!Oe(e[0][ue])}(c);switch(d){case ue:return t(Ee,{text:c,indentation:u,hasSiblings:h,isText:i},p);case pe:return t(Ce,{isInline:m,indentation:u,level:s,children:t(Ie,{elements:c,level:s+1,isText:!1})},p);case me:return t(xe,{indentation:u,isInline:m,children:t(Ie,{elements:c,level:s+1,isText:!1})},p);case fe:return t(Se,{indentation:u,tagKey:o,attributes:l},p);default:return t($e,{indentation:u,tagKey:o,attributes:l,isInline:m,hasChildren:c.length>0,level:s,children:t(Ie,{elements:c,level:s+1})},p)}}))}):null}function Te(){return t("div",{children:"Invalid XML!"})}function qe(e){const{theme:r,xml:n,collapsible:s=!1,indentSize:a=2,invalidXml:o,initalCollapsedDepth:l,initialCollapsedDepth:u}=e,[p,m]=d((()=>({...ge,...r}))),{json:f,valid:y}=function(e){return c((()=>{try{if(!g.validate(e))throw new Error("Invalid XML!");const t=be.parse(e);if("string"==typeof e&&e.trim().length>0&&0===t.length)throw new Error("Invalid XML!");return{json:t,valid:!0}}catch(e){return{json:null,valid:!1,errorMessage:`Fail to parse: ${e.message}`}}}),[e])}(n),v=c((()=>({theme:p,collapsible:s,indentSize:a,initialCollapsedDepth:u??l})),[p,s,a,l,u]);return h((()=>{m((e=>{const t={...ge,...r};return i(t,e)?e:t}))}),[r]),y?t(ye.Provider,{value:v,children:t("div",{className:"rxv-container",style:{whiteSpace:"pre-wrap",fontFamily:p.fontFamily,overflowWrap:"break-word"},children:t(Ie,{elements:f})})}):o||t(Te,{})}const Me="text-pink-500 dark:text-pink-400",Le="text-purple-500 dark:text-purple-400",De="text-blue-500 dark:text-blue-400",Fe={code:"bg-gray-100 dark:bg-slate-800 whitespace-pre-wrap p-4 rounded-lg font-mono",comma:Me,assign:Me,startObject:Me,endObject:Me,startArray:Me,endArray:Me,boolean:Le,null:Le,key:De,index:De,string:"text-orange-500 dark:text-orange-400",number:"text-green-500 dark:text-green-400"};class Re{renderer;parent;key;indent;result=[];constructor(e,t,r,n){this.renderer=e,this.parent=t,this.key=r,this.indent=n}get classMap(){return this.renderer.classMap}writeKey(e){const t=typeof e;"string"===t?(this.result.length>0&&this.result.push(`<span class='${this.classMap.comma}'>,\n</span>`),this.indent&&this.result.push(this.indent),this.result.push(`<span class="${this.classMap.key}">"${e}"</span><span class='${this.classMap.assign}'>: </span>`)):"number"===t&&(this.result.length>0&&this.result.push(`<span class='${this.classMap.comma}'>,\n</span>`),this.indent&&this.result.push(this.indent))}pushValue(e,t){if(this.writeKey(e),null===t)this.result.push(`<span class='${this.classMap.null}'>null</span>`);else if(t instanceof Re)this.result.push(t.renderStart()+t.renderValue()+t.renderEnd());else{let e;const r=typeof t;"string"===r?(t=(t=`"${t}"`).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),e=this.classMap.string):"number"===r?e=this.classMap.number:"boolean"===r&&(e=this.classMap.boolean),this.result.push(`<span class='${e}'>${t}</span>`)}}renderValue(){return this.result.join("")}}class Ve extends Re{constructor(e,t,r,n){super(e,t,r,n)}renderStart(){return`<span class='${this.classMap.startObject}'>{\n</span>`}renderEnd(){const e=this.result.length>0?"\n":"";return`<span class='${this.classMap.endObject}'>${e}${this.parent?.indent||""}}</span>`}}class _e extends Re{constructor(e,t,r,n){super(e,t,r,n)}renderStart(){return`<span class='${this.classMap.startArray}'>[\n</span>`}renderEnd(){const e=this.result.length>0?"\n":"";return`<span class='${this.classMap.endArray}'>${e}${this.parent?.indent||""}]</span>`}}class ze{classMap;tab;stack=[];block=new Ve(this,void 0,"","");constructor(e=Fe,t=" "){this.classMap=e,this.tab=t}onStartObject(e){const t=new Ve(this,this.block,e,this.block.indent+this.tab);this.stack.push(this.block),this.block=t}onEndObject(){const e=this.block;this.block=this.stack.pop(),this.block.pushValue(e.key,e)}onStartIteration(e){const t=new _e(this,this.block,e,this.block.indent+this.tab);this.stack.push(this.block),this.block=t}onEndIteration(){const e=this.block;this.block=this.stack.pop(),this.block.pushValue(e.key,e)}onValue(e,t){this.block.pushValue(e,t)}}function Ue({data:e,className:r,classMap:n}){const[s,i]=d();return h((()=>{i(function(e,r,n){const s=new ze(r);(new y).walk(e,s);const i=s.block.renderValue();return t("div",{className:n,dangerouslySetInnerHTML:{__html:`<div class='${s.classMap.code}' style='overflow-x: scroll'>${i}</div>`}})}(e,n,r))}),[e]),s}class Ke{schema;properties={};_validator;constructor(e){this.schema=e||{type:"object",properties:{}},this.load()}get validator(){if(!this._validator){const e=new M({allErrors:!0,strict:!1});this._validator=e.compile(this.schema)}return this._validator}load(){if(this.schema.properties){const e=this.schema.properties;Object.keys(e).forEach((t=>{this.loadProperty(t,e[t])}))}}hasProperties(){return Object.keys(this.properties).length>0}get title(){return this.schema.title||this.schema.name}get description(){return this.schema.description}loadProperty(e,t){let r;return r="array"===t.type?new We(this,e,t):new Be(this,e,t),this.properties[e]=r,r}get type(){return this.schema.type}validate(e){return this.validator(e)?null:this.validator.errors||[]}addProperty(e,t,r=!1){"object"!==this.schema.type&&(this.schema.type="object"),this.schema.properties||(this.schema.properties={});const n="string"==typeof t?"object"===(s=t)?{type:"object",properties:{}}:"array"===s?{type:"array",items:{}}:{type:s}:t;var s;const i=this.loadProperty(e,n);return this.schema.properties[i.name]=i.schema,r&&(i.isRequired=!0),i}removeProperty(e){this.schema.properties&&(delete this.schema.properties[e],Array.isArray(this.schema.required)&&(this.schema.required=this.schema.required.filter((t=>t!==e)))),delete this.properties[e]}getProperty(e){return this.properties[e]}get editor(){return this.schema.editor}}class Be extends Ke{parent;name;constructor(e,t,r){if(super(r),this.parent=e,this.name=t,"array"===r.type)throw new Error("Array property must be instantiated using ArrayPropertySchema");"object"!==r.type||r.properties||(r.properties={})}get isMulti(){return!1}get isReadOnly(){return!!this.schema.readOnly}set isReadOnly(e){this.schema.readOnly=e}get defaultValue(){return this.schema.default}set defaultValue(e){this.schema.default=e}get enum(){return this.schema.enum}set enum(e){this.schema.enum=e}get isRequired(){const e=this.parent.schema.required;return!!e&&e.includes(this.name)}set isRequired(e){let t=Array.isArray(this.parent.schema.required)?this.parent.schema.required:[];t=e?t.concat(this.name):t.filter((e=>e!==this.name)),this.parent.schema.required=t}get type(){return this.schema.type}set type(e){this.schema.type!==e&&(this.schema.type=e,"object"!==e&&(this.properties={},this.schema.properties=void 0))}remove(){this.parent.removeProperty(this.name)}get isBoolean(){return"boolean"===this.type}get isString(){return"string"===this.type}get isNumber(){return"number"===this.type||"integer"===this.type}get isObject(){return"object"===this.type}}class We extends Be{arraySchema;constructor(e,t,r){super(e,t,function(e){if("array"!==e.type)throw new Error("Expecting an array schema");if(e.items){if(Array.isArray(e.items))throw new Error("Tuple arrays are not supported")}else e.items={};return e.items}(r)),this.arraySchema=r}get isMulti(){return!0}}function He(e){return(e=e.replace(/_/g," ").replace(/([a-z0-9])&([A-Z])/g,"$1 $2"))[0].toUpperCase()+e.slice(1)}function Je(e,t){if(t.editor)return t.editor;switch(t.type){case"number":case"integer":return"number";case"boolean":return"checkbox";default:return"text"}}class Ge{parent;schema;name;observer;constructor(e,t,r){this.parent=e,this.schema=t,this.name=r}get isRoot(){return!this.parent}get root(){return this.parent?this.parent.root:this}get path(){return this.parent?this.parent.path.concat(this.name):[]}get isScalar(){return!1}get isListItem(){return!1}get isObject(){return!1}get isList(){return!1}get title(){return this.schema.title||He(this.name)}onChange(e){this.observer&&!1===this.observer(this)||this.parent&&this.parent.onChange(e)}}class Xe extends Ge{constructor(e,t,r){super(e,t,r)}get isObject(){return!0}getProperty(e){const t=this.schema.properties[e];return t.isMulti?new et(this,t,this.getOrInitArrayProperty(e)):t.isObject?new Ye(this,t,t.name,this.getOrInitObjectProperty(e)):new Qe(this,t)}getOrInitObjectProperty(e){let t=this.value[e];return t||(this.value[e]=t={}),t}getOrInitArrayProperty(e){let t=this.value[e];return t||(this.value[e]=t=[]),t}setPropertyValue(e,t){return this.value[e]!==t&&(this.value[e]=t,!0)}getPropertyValue(e){return this.value[e]}get properties(){const e=[];for(const t of Object.values(this.schema.properties))t.isMulti?e.push(new et(this,t,this.getOrInitArrayProperty(t.name))):t.isObject?e.push(new Ye(this,t,t.name,this.getOrInitObjectProperty(t.name))):e.push(new Qe(this,t));return e}[Symbol.iterator](){return this.properties[Symbol.iterator]()}}class Ze extends Xe{value;constructor(e,t={}){super(null,e instanceof Ke?e:new Ke(e),"#root"),this.value=t}}class Ye extends Xe{value;constructor(e,t,r,n){super(e,t,r),this.value=n}}class Qe extends Ge{constructor(e,t){super(e,t,t.name),void 0===e.value[this.name]&&void 0!==t.defaultValue&&(e.value[this.name]=t.defaultValue)}get isScalar(){return!0}set value(e){this.parent.setPropertyValue(this.name,e)&&this.onChange(this)}get value(){return this.parent.getPropertyValue(this.name)}getInputType(){return Je(this.name,this.schema)}}class et extends Ge{value;items=[];constructor(e,t,r){super(e,t,t.name),this.value=r;for(const e of this.value)this.add()}get isList(){return!0}newItem(e){return this.schema.isObject?new tt(this,e):new rt(this,e)}add(){const e=this.newItem(this.items.length);return this.items.push(e),e}remove(e){const t=this.value;if(e>=0&&e<this.items.length){this.items.splice(e,1);for(let e=0,t=this.items.length;e<t;e++){const t=this.items[e];t.index=e,t.name=String(e)}}Array.isArray(t)&&e>=0&&e<t.length&&(t.splice(e,1),this.onChange(this))}[Symbol.iterator](){return this.items[Symbol.iterator]()}item(e){if(e<0||e>=this.value.length)return;const t=this.value[e];return this.schema.isObject?new Ye(this,this.schema,String(e),t):new rt(this,e)}trim(){for(;void 0===this.items[this.items.length-1];)this.items.pop()}}class tt extends Xe{index;key;constructor(e,t){super(e,e.schema,String(t)),this.index=t,void 0===e.value[t]&&(e.value[t]={}),this.key=this.name+"@"+Date.now()}get isListItem(){return!0}set value(e){this.parent.value[this.index]=e}get value(){return this.parent.value[this.index]}}class rt extends Ge{index;key;constructor(e,t){super(e,e.schema,String(t)),this.index=t,void 0===e.value[t]&&void 0!==e.schema.defaultValue&&(e.value[t]=e.schema.defaultValue),this.key=this.name+"@"+Date.now()}get isScalar(){return!0}get isListItem(){return!0}set value(e){this.parent.value[this.index]=e}get value(){return this.parent.value[this.index]}getInputType(){return Je(this.name,this.schema)}}function nt({value:e}){return t("div",{className:"flex flex-col gap-4",children:Object.entries(e).map((([e,r])=>t(at,{name:e,value:r},e)))})}function st({name:e}){return t("div",{className:"text-md font-semibold",children:He(e)})}function it({children:e,className:r}){return t("div",{className:q("flex flex-col gap-4 py-2 pl-4 border-l-4 border-l-solid border-l-slate-100 dark:border-l-slate-600",r),children:e})}function at({name:r,value:n}){const s=dt(n);switch(s.type){case ct.Inline:return e("div",{className:"w-full flex gap-2",children:[t(st,{name:r+":"}),t("p",{children:s.value})]});case ct.Paragraph:return e("div",{children:[t(st,{name:r}),t("p",{children:s.value})]});case ct.Prose:return e("div",{className:"prose dark:prose-invert",children:[t(st,{name:r}),t("div",{className:"vprose dark:prose-invert",children:s.value})]});case ct.Array:return t(ot,{name:r,value:n});case ct.Object:return e("div",{children:[t(st,{name:r}),t(it,{className:"mt-2",children:Object.entries(n).map((([e,r])=>t(at,{name:e,value:r},e)))})]})}}function ot({name:r,value:n}){const s=n.join(" ").length,i=s/n.length,a="string"==typeof n[0]&&(s<80||s<400&&i<32),o=n.length>9;return e("div",a?{className:"flex gap-2 flex-wrap",children:[r&&t(st,{name:r+":"}),n.map(((e,r)=>t(v,{children:String(e)},r)))]}:{children:[r&&t(st,{name:r}),t("div",{className:"flex flex-col gap-2",children:n.map(((e,r)=>t(lt,{index:r,value:e,useBullet:o},r)))})]})}function lt({index:r,value:n,useBullet:s}){const i=s?t("span",{className:"text-xl",children:"•"}):e("span",{children:[r+1,"."]}),a=dt(n);let o;switch(a.type){case ct.Object:o=t(it,{children:Object.entries(n).map((([e,r])=>t(at,{name:e,value:r},e)))});break;case ct.Array:o=t(ot,{value:n});break;case ct.Prose:o=t("div",{className:"prose dark:prose-invert",children:a.value});break;default:o=t("div",{children:a.value})}return e("div",{className:"flex gap-4 hover:bg-slate-50 dark:hover:bg-slate-800 py-2 pr-2 pl-4",children:[t("div",{className:"font-semibold text-gray-600 dark:text-gray-400",children:i}),t("div",{children:o})]})}var ct;function dt(e){if(null==e)return{value:"-",type:ct.Inline};if(Array.isArray(e))return{value:e,type:ct.Array};const t=typeof e;if("string"===t){const t=e.length;let r;return t<80?r=ct.Inline:t>400?r=ct.Prose:(r=ct.Paragraph,e=e.replace(/(?:\n\n)+/g,"\n\n")),{type:r,value:e}}return"number"===t||"boolean"===t?{value:String(e),type:ct.Inline}:{value:e,type:ct.Object}}function ht({value:e,viewCode:r=!1}){return e?t("div",{className:"relative w-full",children:r?t(Ue,{data:e}):t(nt,{value:e})}):t("pre",{className:"whitespace-pre-wrap",children:"No Data to display"})}!function(e){e[e.Inline=0]="Inline",e[e.Paragraph=1]="Paragraph",e[e.Prose=2]="Prose",e[e.Array=3]="Array",e[e.Object=4]="Object"}(ct||(ct={}));let ut=null;class pt{editor;constructor(e){this.editor=e}setValue(e){this.editor.dispatch({changes:{from:0,to:this.editor.state.doc.length,insert:e||""}})}getValue(){return this.editor.state.doc.toString()}}const mt=[F.theme({"&":{fontSize:"14px",fontFamily:"monospace"},".cm-content":{fontFamily:"inherit"},".cm-scroller":{fontFamily:"inherit"},".cm-gutters":{backgroundColor:"transparent",color:"#ddd"},".cm-focused":{outline:"none"},".cm-cursor":{borderLeft:"2px solid #808080",borderLeftColor:"#808080",animation:"blink 1.2s step-start infinite"},"@keyframes blink":{"50%":{opacity:0}}}),F.lineWrapping];function ft({onChange:e,value:r,className:n,editorRef:s,extensions:i,debounceTimeout:a=0}){const o=u(null),l=u(void 0);h((()=>{if(e)return l.current=a>0?D(e,a):e,()=>{l.current=void 0}}),[e,a]);const d=c((()=>t("div",{ref:o,className:n})),[n]);return b((()=>{if(o.current){let t=[...mt,(e=e=>{l.current?.(e)},F.updateListener.of((t=>{t.docChanged&&e(t)})))];Array.isArray(i)?t=t.concat(i):i&&t.push(i);const n=((e="",t=[])=>{const r="string"==typeof e?R.of(e.split("\n")):e;return ut?ut.doc.toString()!==r.toString()&&(ut=V.create({doc:r,extensions:t})):ut=V.create({doc:r,extensions:t}),ut})(r,t),a=new F({state:n,parent:o.current}),c=new pt(a);return s&&(s.current=c),()=>{a.destroy(),s&&(s.current=void 0)}}var e}),[d,i]),d}const gt=[_,L()];function yt({schema:r,isOpen:n,onClose:s,readonly:i=!1}){const a=u(void 0),o=x(),l=c((()=>function(e){return e?JSON.stringify(e,null,2):""}(r.schema)),[r]);return e(w,{onClose:s,isOpen:!!n,className:"min-w-[60vw]",children:[t(N,{children:"JSON Schema Editor"}),t(k,{children:i?t(Ue,{data:r.schema||{}}):t(ft,{value:l,extensions:gt,editorRef:a})}),t(C,{children:i?null:t(j,{onClick:()=>{if(a.current){const e=a.current.getValue();try{const t=function(e){if(e&&(e=e.trim()))return JSON.parse(e)}(e);r.replaceSchema(t),s()}catch(e){o({status:"error",title:"Invalid JSON Schema",description:e.message,duration:5e3})}}},children:"Save changes"})})]})}var vt;function bt(e,t){let r="any"===t.name?void 0:t.isNullable?[t.name,"null"]:t.name;if(t.isArray)if(e.type="array",e.properties=void 0,!e.items||Array.isArray(e.items))e.items={type:r,properties:t.isObject?{}:void 0};else{const n=e.items;n.type=r,t.isObject&&!n.properties&&(n.properties={})}else e.type=r,e.items=void 0,t.isObject?e.properties||(e.properties={}):e.properties=void 0}function xt(e){let t,r=!1,n=!1;const s=e.type;if(Array.isArray(s))for(const e of s)"null"===e?r=!0:t||(t=e);else t=s;t||(t="any"),"array"===t&&(n=!0,t=function(e){if(!e)return"any";let t;t=Array.isArray(e)?wt(e[0].type):wt(e.type);"array"!==t&&"null"!==t||(t="any");return t}(e.items));let i=t;switch(e.editor||e.format){case"textarea":i="text";break;case"media":i="media";break;case"document":i="document"}return{isNullable:r,isArray:n,isObject:"object"===t,name:i}}function wt(e){return e?Array.isArray(e)?e.find((e=>"null"!==e))||"any":e:"any"}!function(e){e.string="string",e.number="number",e.integer="integer",e.boolean="boolean",e.object="object",e.any="any",e.text="text",e.media="media",e.document="document"}(vt||(vt={}));let Nt=0;class kt{source;onChange=()=>{};schema;root;constructor(e,t){this.schema=e?"string"==typeof e?JSON.parse(e):e:{title:t,type:"object",properties:{}},this.schema.properties||(this.schema.properties={}),this.root=new Ct("",this.schema,this),this.root.loadChildren()}get isEmpty(){return!this.root.children||0===this.root.children.length}get children(){return this.root.children}reload(){return this.root=new Ct("",this.schema,this),this.root.loadChildren(),this.onChange?.(this),this}withSource(e,t){return this.source={uri:t,name:e},this}withChangeListener(e){return this.onChange=e,this}replaceSchema(e){this.schema=e||{title:this.schema.title,type:"object",properties:{}},this.reload()}clone(){const e=new kt(this.schema);return e.source=this.source,this.onChange&&e.withChangeListener(this.onChange),e}}class Ct{schema;loader;parent;name;isRequired=!1;type;children;constructor(e,t,r,n){if(this.schema=t,this.loader=r,this.parent=n,this.name=e,this.type=xt(t),this.parent){let t=this.parent._getPropertiesSchema().required;this.isRequired=!(!t||!Array.isArray(t))&&t.includes(e)}}get title(){return this.schema.title}set title(e){this.schema.title=e}get description(){return this.schema.description}set description(e){this.schema.description=e}get isParent(){return this.type.isObject}get isNew(){return!!this.schema.isNew}set isNew(e){e?this.schema.isNew=!0:delete this.schema.isNew}resetIsNew(){const e=this.isNew;return this.isNew=!1,e}getNameSignature(){return`${this.name}${this.isRequired?"":"?"}`}getTypeSignature(){return`${this.type.name}${this.type.isArray?"[]":""}${this.type.isNullable?"?":""}`}getSignature(){return`${this.getNameSignature()}: ${this.getTypeSignature()}`}reloadTree(){this.loader.reload()}loadChildren(){this.children=[],this.schema.items&&this.schema.items.properties?this._loadChildren(this.schema.items.properties):this.schema.properties&&this._loadChildren(this.schema.properties)}_loadChildren(e){for(const t of Object.keys(e)){const r=e[t],n=new Ct(t,r,this.loader,this);this.children.push(n),n.isParent&&n.loadChildren()}}_getPropertiesSchema(){return this.type.isArray&&this.type.isObject?this.schema.items:this.schema}findAvailableChildName(e){const t=this._getPropertiesSchema().properties||{};let r;do{r=e+ ++Nt}while(t[r]);return r}addChild(e,t,r=!1){if(!this.type.isObject)throw new Error("Cannot add child to a non object node");this.children||(this.children=[]);const n=function(e,t,r,n=!1){if("object"!==e.type)throw new Error("Cannot add property to a non-object schema");e.properties||(e.properties={});const s={};return bt(s,r),e.properties[t]=s,n&&(Array.isArray(e.required)?function(e,t){e.includes(t)||e.push(t)}(e.required,t):e.required=[t]),s}(this._getPropertiesSchema(),e,t,r),s=new Ct(e,n,this.loader,this);return this.children.push(s),s}remove(){if(this.parent&&this.parent.type.isObject){return function(e,t){e.properties&&(delete e.properties[t],Array.isArray(e.required)&&(e.required=e.required.filter((e=>e!==t))))}(this.parent._getPropertiesSchema(),this.name),this.parent.children&&(this.parent.children=this.parent.children.filter((e=>e.name!==this.name))),!0}return!1}update(e){let t=!1;null!=e.name&&this.name!==e.name&&(this.parent&&function(e,t,r){if(e.properties){const n=e.properties,s={};for(const e of Object.keys(n)){const i=n[e];e===t?s[r]=i:s[e]=i}e.properties=s}e.required&&(e.required=e.required.map((e=>e===t?r:e)))}(this.parent._getPropertiesSchema(),this.name,e.name),this.name=e.name,t=!0),null!=e.isRequired&&this.isRequired!==e.isRequired&&(this.parent&&function(e,t,r){if(Array.isArray(e.required)){const n=e.required.indexOf(t);r?n<0&&e.required.push(t):n>-1&&e.required.splice(n,1)}else r&&(e.required=[t])}(this.parent._getPropertiesSchema(),this.name,e.isRequired),this.isRequired=e.isRequired,t=!0);let r=e.type?.name;"any"===r&&(r=void 0);const n=r!==this.schema.type;return e.type&&(bt(this.schema,e.type),this.type=e.type,this.type.isObject?this.children||(this.children=[]):this.children=void 0,t=!0),this.schema.editor&&null===e.editor?(this.schema.editor=void 0,this.schema.format=void 0,t=!0):e.editor?(this.schema.editor=e.editor,this.schema.format=e.editor,t=!0):n&&(this.schema.editor=void 0,this.schema.format=void 0,t=!0),e.description!==this.description&&(this.description=e.description,t=!0),t}getUpdateFromNameAndTypeSignature(e,t){let r=e.trim(),n=!0;r.endsWith("?")&&(r=r.substring(0,r.length-1).trim(),n=!1);const s=function(e){let t=!1,r=!1;(e=e.trim()).endsWith("?")&&(r=!0,e=e.substring(0,e.length-1).trim()),e.endsWith("[]")&&(t=!0,e=e.substring(0,e.length-2).trim());const n=vt[e];if(!n)throw new Error(`Unknown type "${e}"`);return{name:n,isArray:t,isNullable:r,isObject:n===vt.object}}(t);let i;return"text"===s.name?(s.name=vt.string,i="textarea"):"media"===s.name?(s.name=vt.any,i="media"):"document"===s.name?(s.name=vt.any,i="document"):i=null,{name:r,type:s,isRequired:n,editor:i}}updateFromNameAndTypeSignature(e,t){return this.update(this.getUpdateFromNameAndTypeSignature(e,t))}updateFromSignature(e){const t=(e=e.trim()).indexOf(":");if(t<0)throw new Error("Expecting a name and a type separated by a colon");const r=e.substring(0,t),n=e.substring(t+1);return this.updateFromNameAndTypeSignature(r,n)}}function jt(e){return{name:e.getNameSignature(),type:e.getTypeSignature(),description:e.description}}const St=function(){const e=Object.values(vt),t=[...e];for(const r of e)t.push(r+"[]");return e.sort(),t}();function Ot({value:r,onChange:n,onCancel:s,onSave:i}){const[a,o]=d(!1);if(!r)return null;return e("div",{className:"flex items-center",children:[t("div",{className:"flex-1",children:t(At,{value:r.name,onChange:e=>{n({...r,name:e})},onCancel:s,onSave:i})}),t("div",{className:"px-1 font-semibold",children:":"}),t("div",{className:"flex-1",children:t(Pt,{value:r.type,onChange:e=>{n({...r,type:e})},onCancel:s,onSave:i})}),e("div",{children:[t(j,{variant:"ghost",size:"xs",onClick:()=>o(!0),title:"Edit description",children:t(z,{className:"size-4"})}),t($t,{value:r.description,isOpen:a,onClose:e=>{void 0!==e&&"string"==typeof e&&n({...r,description:e},!0),o(!1)}})]})]})}function At({value:e,onChange:r,onCancel:n,onSave:s}){const i=u(null);h((()=>{i.current?.focus()}),[]);return t("input",{onKeyUp:e=>{switch(e.key){case"Enter":s?.();break;case"Escape":n?.()}},ref:i,value:e,onChange:e=>{r(e.target.value)},className:S.INPUT_UNSTYLED,style:{fontSize:"inherit",width:"",display:"inline"}})}function Pt({value:e,onChange:r,onCancel:n,onSave:s}){return t(O,{className:S.INPUT_UNSTYLED,options:St,value:e||"",onBlur:()=>{s?.()},onChange:r,onKeyDown:(e,t)=>{t||("Enter"===e.key?s?.():"Escape"===e.key&&n?.())},popupClass:"schema-type-suggest-popup z-90"})}function $t({value:r,isOpen:n,onClose:s}){return e(w,{isOpen:n,onClose:s,children:[t(N,{children:"Edit description"}),t(Et,{value:r,onSave:s})]})}function Et({value:n,onSave:s}){const i=u(null),[a,o]=d(n||"");return h((()=>{i.current&&i.current.focus()}),[i.current]),e(r,{children:[t(A,{className:"h-max",children:t("textarea",{ref:i,className:"dark:bg-gray-800 w-full h-full dark:text-white",value:a,onChange:e=>o(e.target.value)})}),t(P,{children:t(j,{onClick:()=>s(a),children:"Save Changes"})})]})}function It({value:r}){return r?e("div",{className:"w-full flex items-baseline",children:[t("div",{children:r.name||""}),t("div",{className:"ml-2 text-sm text-muted",children:r.type||""})]}):null}function Tt(e){const[t,r]=d(new kt(e||{type:"object",properties:{}}).withChangeListener((e=>{r(e.clone())})));return t}const qt="block text-sm sm:leading-6 rounded-md border-0 py-1.5 px-4",Mt=`${qt} hover:shadow-xs hover:ring-1 hover:ring-inset hover:ring-ring`,Lt=`${qt} shadow-xs ring-1 ring-inset ring-ring`;function Dt({value:r,onChange:n,onDelete:s,outlineOnHover:i=!1,editOnClick:a=!0,placeholder:o,viewer:l,editor:c,skipClickOutside:h,isEditing:u=!1,readonly:p=!1,onValidate:m}){const{on:f,off:g,isOn:y}=$(u),[v,b]=d();return e("div",{className:"",children:[y&&!p?t(Rt,{value:r,onSave:e=>{if(m){const t=m(e);if(t)return void b(t);b(void 0)}n(e)&&g()},onCancel:g,editor:c,skipClickOutside:e=>!!h&&h(e)}):t(Ft,{value:r,onEdit:f,viewer:l,placeholder:o,outlineOnHover:i,editOnClick:a,onDelete:s,readonly:p}),v&&t("div",{className:"text-red-500 text-sm",children:v})]})}function Ft({viewer:r,value:n,onEdit:s,editOnClick:i,outlineOnHover:a,placeholder:o,onDelete:l,readonly:c}){const d="invisible group-hover:visible";return e("div",{tabIndex:0,onKeyUp:e=>{"Enter"===e.key&&s()},onClick:()=>{i&&s()},className:q("flex justify-start items-center group",a?Mt:qt,{"cursor-pointer":i}),children:[t(r,{value:n,placeholder:o}),e("div",{className:"ml-auto flex space-x-2",children:[!c&&l&&t(j,{variant:"ghost",size:"sm",className:d,onClick:l,children:t(U,{className:"size-4"})}),c?null:t(j,{variant:"ghost",size:"sm",className:d,onClick:s,children:t(K,{className:"size-4"})})]})]})}function Rt({editor:e,value:r,onSave:n,onCancel:s,skipClickOutside:i}){const[a,o]=d(r),l=u(r),[c,h]=d(null),p=()=>{n(l.current)},m=E(p,i);return t("div",{ref:m,children:t("div",{className:Lt,children:t("div",{className:"w-full",onClick:e=>e.stopPropagation(),children:t(e,{value:a,onChange:(e,t=!1)=>{o(e),l.current=e,t&&(c&&clearTimeout(c),h(setTimeout((()=>{n(e)}),500)))},onSave:p,onCancel:s})})})})}function Vt(e){const t=e.target;return!(!t.closest||!t.closest(".schema-type-suggest-popup"))}function _t({schema:r,readonly:n=!1}){return e("ul",{className:"",children:[r.children.map((e=>zt(e,n))),n?null:t(Ht,{parent:r.root})]})}function zt(e,r){return e.isParent?t(Kt,{property:e,readonly:r},e.name):t(Ut,{node:e,readonly:r},e.name)}function Ut({node:e,readonly:r}){return t("li",{children:t(Wt,{property:e,readonly:r})})}function Kt({property:r,readonly:n}){const[s,i]=d(!0);return e("li",{children:[e("div",{className:"flex items-center w-full",children:[t("button",{onClick:()=>i(!s),children:t(s?W:H,{className:"size-4"})}),t("div",{className:"flex-1",children:t(Wt,{property:r,readonly:n})})]}),s&&e("ul",{className:"ml-4 border-l border-gray-400 border-dashed",children:[(r.children||[]).map((e=>zt(e,n))),n?null:t(Ht,{parent:r})]})]})}function Bt(e){return e?/^[a-zA-Z0-9_]+[?]?$/.test(e)?void 0:"Only letters, numbers, underscores or question mark are allowed (a-zA-Z0-9_?)":"Name is required"}function Wt({property:e,readonly:r}){const n=x(),s=e.resetIsNew(),i=jt(e);return t(Dt,{value:i,onChange:t=>{try{t.description&&"string"!=typeof t.description&&(t.description=void 0);const r=e.getUpdateFromNameAndTypeSignature(t.name,t.type);e.update({...r,description:t.description})&&e.reloadTree()}catch(e){return n({status:"error",title:"Invalid property declaration",description:e.message,duration:9e3}),!1}return!0},onDelete:()=>{e.remove(),e.reloadTree()},editor:Ot,viewer:It,outlineOnHover:!0,isEditing:s,skipClickOutside:Vt,readonly:r,onValidate:e=>Bt(e.name)})}function Ht({parent:r}){return e(j,{variant:"ghost",onClick:()=>{const e=r.findAvailableChildName("new_property_");r.addChild(e,{isObject:!1,isArray:!1,isNullable:!1,name:vt.string},!0).isNew=!0,r.reloadTree()},children:[t(B,{className:"size-4"}),"Add property"]})}const Jt=o(void 0),Gt=Jt.Provider;function Xt(){const e=l(Jt);if(!e)throw new Error("useFieldSet must be used within a Form or FieldSet element");return e}const Zt=o(void 0);function Yt(){const e=l(Zt);if(!e)throw new Error("useForm must be used within a Form element");return e}const Qt=Zt.Provider;function er({htmlFor:r,required:n,children:s}){return e("label",{htmlFor:r,className:"block text-sm font-medium leading-6 text-gray-900 dark:text-gray-200",children:[s,n&&t("sup",{className:"text-red-600",children:"*"})]})}function tr({children:e}){return t("p",{className:"mt-2 text-sm text-gray-500",children:e})}function rr({children:e}){return t("p",{className:"mt-2 text-sm text-red-600",children:e})}const nr=a.forwardRef((({object:e,type:r="text",onChange:n,...s},i)=>{const[a,o]=d(null!=e.value?String(e.value):""),[l,c]=d(e.schema.isBoolean&&!0===e.value);s.className?s.className=q(S.INPUT,s.className):s.className=S.INPUT;const h=t=>{o(t.target.value),e.schema.isBoolean?(e.value=t.target.checked,c(e.value)):e.value=t.target.value,n&&n(t)};return"textarea"===r?t("textarea",{ref:i,...s,value:a,onChange:h}):t("input","checkbox"===r?{ref:i,...s,type:"checkbox",checked:l,onChange:h,className:"form-check-input"}:{ref:i,...s,type:r,value:a,onChange:h})}));function sr({object:e,components:r,onSubmit:n,children:s,onChange:i}){return e.observer=i,t(Qt,{value:{object:e,components:r||{}},children:t("form",{className:"w-full",onSubmit:t=>{t.stopPropagation(),t.preventDefault(),n&&n(e.value)},children:s})})}function ir(){const e=Yt();return t("div",{className:"flex flex-col gap-4 w-full",children:e.object.properties.map(or)})}function ar({children:r,...n}){return e(sr,{...n,children:[t(ir,{}),r]})}function or(e){return e.isList?t(dr,{object:e},e.name):e.isObject?t(cr,{object:e},e.name):t(lr,{object:e},e.name)}function lr({object:r,editor:n,inline:s=!1}){n||(n=r.schema.editor);const{components:i}=Yt(),a=n&&i[n]||nr,o=r.getInputType();"checkbox"===o&&(s=!0);return e("div",{className:"",children:[e("div",{className:q("flex gap-2",s?"flex-row items-center":"flex-col"),children:[!r.isListItem&&t(er,{required:r.schema.isRequired,children:r.title}),t(a,{object:r,type:o,onChange:e=>{const{value:t}=e.target;r.value=r.schema.isNumber?parseFloat(t):t}})]}),r.schema.description&&t(tr,{children:r.schema.description})]})}function cr({object:r}){return e("div",{className:"flex flex-col gap-4 my-4 py-2 pl-4 border-l-4 border-l-solid border-l-slate-100 dark:border-l-slate-600",children:[!r.isListItem&&t("div",{className:"text-gray-900 dark:text-gray-200 font-semibold",children:r.title}),r.properties.map(or)]})}function dr({object:r}){const[n,s]=d(r.value||[]);return e("div",{className:"flex flex-col gap-4 my-4 py-2 pl-4 border-l-4 border-l-solid border-l-slate-100 darK:border-l-slate-600",children:[!r.isListItem&&t("div",{className:"text-gray-900 dark:text-gray-200 font-semibold",children:r.title}),r.items.map(((e,i)=>t(hr,{object:e,list:r,onDelete:()=>(e=>{r.remove(e),s([...r.value])})(i)},`${i}-${n[i]??""}`))),t("div",{children:e(j,{variant:"secondary",onClick:()=>{r.add(),s([...r.value])},children:[t(B,{className:"size-6"})," Add"]})})]})}function hr({list:r,object:n,onDelete:s}){return e("div",{className:"flex gap-2 w-full",children:[t("div",{className:"flex-1",children:(i=n,a=r.schema.arraySchema.editor,i.isList?t(dr,{object:i}):i.isObject?t(cr,{object:i}):t(lr,{object:i,editor:a}))}),t(j,{variant:"secondary",onClick:s,children:t(U,{className:"size-4"})})]});var i,a}function ur({className:r,properties:n}){return t(I,{className:r,children:t("tbody",{children:n.map((r=>e("tr",{children:[e("td",{className:"w-1/3 font-semibold gap-2",children:[t("span",{children:r.name}),r.description&&t(T,{description:r.description,placement:"top",children:t(J,{className:"size-3 ml-2 text-muted-foreground"})})]}),t("td",{className:"w-2/3",children:r.value??"undefined"})]},r.name)))})})}const pr=o(void 0);function mr(){return l(pr)}const fr=Symbol("__SLOT_NAME");function gr(e,t){const r=[];return p.forEach(e,(e=>{!function(e,t,r){let n;m(e)&&(n=e.type[fr])?r[n]=e:t.push(e)}(e,r,t)})),r.length>1?r:r[0]}function yr(e,t){t[fr]=e}function vr(e){return e?"boolean"==typeof e?{enabled:e}:e:{enabled:!1}}function br(e){const r={};if(gr(e.children,r),!r.content)throw new Error("Popover must provide a content slot");const n=r.trigger?.props,s=r.content.props;return t(xr,{...e,trigger:n,content:s})}function xr({middleware:r,offset:n,trigger:s,dismiss:i=!0,content:a,placement:o,strategy:l,zIndex:c=40}){const[h,u]=d(!1),p=re({open:h,placement:o,strategy:l,onOpenChange:u,middleware:r||[Q(n||4),ee(),te()],whileElementsMounted:ne}),{floatingStyles:m,refs:{setReference:f,setFloating:g},context:y}=p,v=se(y,vr(i)),b=ie(y,vr(!(x=s)||x.hover||x.click?x?.click:{enabled:!0}));var x;const w=ae(y,vr(function(e){return!0===e?.hover?{enabled:!0,handleClose:he({blockPointerEvents:!0}),restMs:0}:e?.hover}(s))),{getReferenceProps:N,getFloatingProps:k}=oe([v,b,w]),{isMounted:C,styles:j}=le(y,a.transition);return e(pr.Provider,{value:{...p,close:()=>u(!1)},children:[s&&t("div",{className:q(s.className,"inline-block"),ref:f,...N(),children:s.children}),t(ce,{children:C&&t("div",{ref:g,style:{...m,zIndex:c},...k(),children:t(de,{context:y,children:t("div",{className:q(a.className,"bg-popover rounded-md text-popover-foreground max-w-md"),style:j,children:a.children})})})})]})}function wr(e){return null}function Nr(e){return null}function kr({onDrop:r,message:n,buttonLabel:s="Upload Files",allowFolders:i=!0,className:a=""}){const[o,l]=d(!1),c=u(null),h=u(null);return e("div",{className:`flex flex-col items-center justify-center py-12 border-2 rounded-lg transition-colors ${o?"border-color-primary bg-color-primary/10":"border-dashed border-color-border"} ${a}`,onDragOver:e=>{e.preventDefault(),e.dataTransfer.types.includes("Files")&&l(!0)},onDragLeave:e=>{e.preventDefault(),h.current&&!h.current.contains(e.relatedTarget)&&l(!1)},onDrop:async e=>{if(e.preventDefault(),l(!1),e.dataTransfer.items&&e.dataTransfer.items.length>0){const t=Array.from(e.dataTransfer.items),n=[],s=new Set,i=async e=>{if(e.isFile){const t=await new Promise((t=>{e.file((r=>{Object.defineProperty(r,"webkitRelativePath",{writable:!0,value:e.fullPath.substring(1)}),t(r)}))}));!t.name.startsWith(".")&&t.size>0&&n.push(t);const r=e.fullPath.substring(1).split("/").slice(0,-1).join("/");r&&s.add(r)}else if(e.isDirectory){const t=e.createReader(),r=await new Promise((e=>{t.readEntries((t=>{e(t)}))}));await Promise.all(r.map(i));const n=e.fullPath.substring(1);n&&s.add(n)}};try{if(await Promise.all(t.map((e=>{const t=e.webkitGetAsEntry?e.webkitGetAsEntry():e;return t?i(t):Promise.resolve()}))),n.length>0){const e=new Set(Array.from(s).map((e=>e.split("/")[0])).filter(Boolean)).size,t=n.length;let i="";i=e>0?1===e?`Preparing to upload 1 folder with ${t} files...`:`Preparing to upload ${e} folders with ${t} files...`:`Preparing to upload ${t} file${1===t?"":"s"}...`,r(n,{count:n.length,message:i})}}catch(t){console.error("Error processing dropped files:",t);const n=Array.from(e.dataTransfer.files);n.length>0&&r(n)}}else if(e.dataTransfer.files&&e.dataTransfer.files.length>0){const t=Array.from(e.dataTransfer.files);r(t)}},children:[t(G,{className:"h-12 w-12 mb-3 transition-colors "+(o?"text-primary":"text-muted/50")}),t("p",{className:"text-color-muted-foreground",children:n}),e("div",{className:"mt-4 text-center",children:[e("div",{className:"text-sm text-muted mb-2",children:["Drag and drop files",i?" or folders":""," here, or"]}),e(j,{onClick:()=>{c.current&&c.current.click()},children:[t(G,{className:"h-4 w-4 mr-2"}),s]}),t("input",{type:"file",ref:c,onChange:e=>{if(e.target.files&&e.target.files.length>0){const t=Array.from(e.target.files);if(t.some((e=>e.webkitRelativePath&&e.webkitRelativePath.includes("/")))){const e=new Set(t.map((e=>e.webkitRelativePath?.split("/")[0])).filter(Boolean)).size,n=t.length,s=1===e?`Preparing to upload 1 folder with ${n} files...`:`Preparing to upload ${e} folders with ${n} files...`,i={count:t.length,message:s};r(t,i)}else{const e={count:t.length,message:`Preparing to upload ${t.length} file${1===t.length?"":"s"}...`};r(t,e)}}},multiple:!0,webkitdirectory:i?"":void 0,directory:i?"":void 0,className:"hidden"})]})]})}function Cr({title:r,count:n,icon:s=t(X,{className:"h-4 w-4 text-green-500"}),items:i}){const[a,o]=d(!1);return e("div",{className:"border border-color-border rounded-md overflow-hidden",children:[e("div",{className:"flex items-center justify-between p-3 bg-color-muted/10 cursor-pointer",onClick:()=>o(!a),children:[e("div",{className:"flex items-center",children:[t("span",{className:"mr-2",children:s}),t("span",{className:"font-medium",children:r}),t("span",{className:"ml-2 px-2 py-0.5 bg-color-muted/20 rounded-full text-xs",children:n})]}),t("button",{className:"text-muted",children:t("svg",{className:"h-5 w-5 transition-transform "+(a?"transform rotate-180":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:t("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})})]}),a&&t("div",{className:"p-3 border-t border-color-border max-h-48 overflow-y-auto",children:i.length>0?t("ul",{className:"space-y-1",children:i.map(((e,r)=>t("li",{className:"text-sm py-1 px-2 rounded hover:bg-color-muted/10",children:e},r)))}):t("div",{className:"text-sm text-muted py-2",children:"No items to display"})})]})}function jr({files:r,className:n="",location:s,collection:i}){const a=r.filter((e=>"success"===e.status)),o=r.filter((e=>"updated"===e.status)),l=r.filter((e=>"skipped"===e.status)),c=r.filter((e=>"failed"===e.status)),d=a.length,h=o.length,u=l.length,p=c.length,m=r.length;return e("div",{className:`flex flex-col py-6 ${n}`,children:[e("div",{className:"flex items-center mb-4",children:[t("div",{className:"w-12 h-12 mr-4 rounded-full bg-color-success/10 flex items-center justify-center",children:t(X,{className:"h-6 w-6 text-color-success"})}),e("div",{children:[t("p",{className:"text-lg font-medium text-color-success",children:"Upload Complete"}),e("p",{className:"text-muted",children:[m," file",1!==m?"s":""," processed",i?` in collection '${i}'`:"",s?` in folder '${s}'`:""]})]})]}),e("div",{className:"space-y-3 mt-2",children:[d>0&&t(Cr,{title:"Successfully Uploaded",count:d,icon:t(X,{className:"h-4 w-4 text-green-500"}),items:a.map((e=>e.name))}),h>0&&t(Cr,{title:"Successfully Updated",count:h,icon:t(X,{className:"h-4 w-4 text-blue-500"}),items:o.map((e=>e.name))}),u>0&&t(Cr,{title:"Skipped (Already Existed)",count:u,icon:t(Z,{className:"h-4 w-4 text-amber-500"}),items:l.map((e=>e.name))}),p>0&&t(Cr,{title:"Failed to Upload",count:p,icon:t(Y,{className:"h-4 w-4 text-red-500"}),items:c.map((e=>e.name))})]})]})}function Sr({percent:e}){return t("div",{className:"w-full bg-gray-200 rounded-full h-2.5 dark:bg-gray-700",children:t("div",{className:"bg-blue-600 h-2.5 rounded-full",style:{width:`${e}%`}})})}yr("trigger",wr),yr("content",Nr),br.Trigger=wr,br.Content=Nr;export{We as ArrayPropertySchema,ft as CodeMirrorEditor,kr as DropZone,pt as EditorApi,Gt as FieldSetContextProvider,sr as Form,Qt as FormContextProvider,rr as FormError,tr as FormHelper,er as FormLabel,ar as GeneratedForm,nr as Input,Ue as JSONCode,ht as JSONDisplay,yt as JSONSchemaEditorModal,nt as JSONView,tt as ManageObjectEntry,et as ManagedListProperty,Ze as ManagedObject,Xe as ManagedObjectBase,Ye as ManagedObjectProperty,Qe as ManagedProperty,rt as ManagedScalarEntry,kt as ManagedSchema,Ge as Node,br as Popover,pr as PopoverContext,Sr as Progress,ur as PropertiesView,Ot as PropertyEditor,At as PropertyNameEditor,Be as PropertySchema,It as PropertyViewer,lr as ScalarField,Ke as Schema,_t as SchemaEditor,Ct as SchemaNode,Cr as UploadResultCategory,jr as UploadSummary,qe as XMLViewer,He as computeTitleFromName,jt as getEditableSchemaProperty,Xt as useFieldSet,Yt as useForm,mr as usePopoverContext,Tt as useSchema,Bt as validatePropertyName};
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import n from"debounce";import s,{useRef as i,useEffect as a,useMemo as o,createContext as l,useContext as c,useState as d,Children as h,isValidElement as u}from"react";import{EditorView as p}from"@codemirror/view";import{useSafeLayoutEffect as m,Styles as f,Button as g,DotBadge as y,Table as v,VTooltip as b,useToast as x,VModal as w,VModalTitle as N,VModalBody as k,VModalFooter as C,VSelectBox as j,ModalBody as S,ModalFooter as O,useFlag as A,useClickOutside as P}from"@vertesia/ui/core";import{Text as $,EditorState as E}from"@codemirror/state";import{Plus as T,Trash2 as I,Info as q,AlignLeft as M,SquarePen as L,ChevronDown as D,ChevronRight as F,UploadIcon as z,CheckCircleIcon as R,AlertCircleIcon as V,XCircleIcon as _}from"lucide-react";import U from"clsx";import K from"ajv";import{ObjectWalker as B}from"@vertesia/json";import{offset as W,shift as H,flip as J}from"@floating-ui/dom";import{useFloating as G,autoUpdate as X,useDismiss as Z,useClick as Y,useHover as Q,useInteractions as ee,useTransitionStyles as te,FloatingPortal as re,FloatingFocusManager as ne,safePolygon as se}from"@floating-ui/react";import{json as ie}from"@codemirror/lang-json";import{basicSetup as ae}from"codemirror";import{isNil as oe,omit as le,isEqual as ce}from"lodash-es";import{XMLParser as de,XMLValidator as he}from"fast-xml-parser";let ue=null;class pe{editor;constructor(e){this.editor=e}setValue(e){this.editor.dispatch({changes:{from:0,to:this.editor.state.doc.length,insert:e||""}})}getValue(){return this.editor.state.doc.toString()}}const me=[p.theme({"&":{fontSize:"14px",fontFamily:"monospace"},".cm-content":{fontFamily:"inherit"},".cm-scroller":{fontFamily:"inherit"},".cm-gutters":{backgroundColor:"transparent",color:"#ddd"},".cm-focused":{outline:"none"},".cm-cursor":{borderLeft:"2px solid #808080",borderLeftColor:"#808080",animation:"blink 1.2s step-start infinite"},"@keyframes blink":{"50%":{opacity:0}}}),p.lineWrapping];function fe({onChange:t,value:r,className:s,editorRef:l,extensions:c,debounceTimeout:d=0}){const h=i(null),u=i(void 0);a((()=>{if(t)return u.current=d>0?n(t,d):t,()=>{u.current=void 0}}),[t,d]);const f=o((()=>e("div",{ref:h,className:s})),[s]);return m((()=>{if(h.current){let t=[...me,(e=e=>{u.current?.(e)},p.updateListener.of((t=>{t.docChanged&&e(t)})))];Array.isArray(c)?t=t.concat(c):c&&t.push(c);const n=((e="",t=[])=>{const r="string"==typeof e?$.of(e.split("\n")):e;return ue?ue.doc.toString()!==r.toString()&&(ue=E.create({doc:r,extensions:t})):ue=E.create({doc:r,extensions:t}),ue})(r,t),s=new p({state:n,parent:h.current}),i=new pe(s);return l&&(l.current=i),()=>{s.destroy(),l&&(l.current=void 0)}}var e}),[f,c]),f}const ge=l(void 0),ye=ge.Provider;function ve(){const e=c(ge);if(!e)throw new Error("useFieldSet must be used within a Form or FieldSet element");return e}const be=l(void 0);function xe(){const e=c(be);if(!e)throw new Error("useForm must be used within a Form element");return e}const we=be.Provider;function Ne({htmlFor:r,required:n,children:s}){return t("label",{htmlFor:r,className:"block text-sm font-medium leading-6 text-gray-900 dark:text-gray-200",children:[s,n&&e("sup",{className:"text-red-600",children:"*"})]})}function ke({children:t}){return e("p",{className:"mt-2 text-sm text-gray-500",children:t})}function Ce({children:t}){return e("p",{className:"mt-2 text-sm text-red-600",children:t})}const je=s.forwardRef((({object:t,type:r="text",onChange:n,...s},i)=>{const[a,o]=d(null!=t.value?String(t.value):""),[l,c]=d(t.schema.isBoolean&&!0===t.value);s.className?s.className=U(f.INPUT,s.className):s.className=f.INPUT;const h=e=>{o(e.target.value),t.schema.isBoolean?(t.value=e.target.checked,c(t.value)):t.value=e.target.value,n&&n(e)};return"textarea"===r?e("textarea",{ref:i,...s,value:a,onChange:h}):e("input","checkbox"===r?{ref:i,...s,type:"checkbox",checked:l,onChange:h,className:"form-check-input"}:{ref:i,...s,type:r,value:a,onChange:h})}));function Se({object:t,components:r,onSubmit:n,children:s,onChange:i}){return t.observer=i,e(we,{value:{object:t,components:r||{}},children:e("form",{className:"w-full",onSubmit:e=>{e.stopPropagation(),e.preventDefault(),n&&n(t.value)},children:s})})}function Oe(){const t=xe();return e("div",{className:"flex flex-col gap-4 w-full",children:t.object.properties.map(Pe)})}function Ae({children:r,...n}){return t(Se,{...n,children:[e(Oe,{}),r]})}function Pe(t){return t.isList?e(Te,{object:t},t.name):t.isObject?e(Ee,{object:t},t.name):e($e,{object:t},t.name)}function $e({object:r,editor:n,inline:s=!1}){n||(n=r.schema.editor);const{components:i}=xe(),a=n&&i[n]||je,o=r.getInputType();"checkbox"===o&&(s=!0);return t("div",{className:"",children:[t("div",{className:U("flex gap-2",s?"flex-row items-center":"flex-col"),children:[!r.isListItem&&e(Ne,{required:r.schema.isRequired,children:r.title}),e(a,{object:r,type:o,onChange:e=>{const{value:t}=e.target;r.value=r.schema.isNumber?parseFloat(t):t}})]}),r.schema.description&&e(ke,{children:r.schema.description})]})}function Ee({object:r}){return t("div",{className:"flex flex-col gap-4 my-4 py-2 pl-4 border-l-4 border-l-solid border-l-slate-100 dark:border-l-slate-600",children:[!r.isListItem&&e("div",{className:"text-gray-900 dark:text-gray-200 font-semibold",children:r.title}),r.properties.map(Pe)]})}function Te({object:r}){const[n,s]=d(r.value||[]);return t("div",{className:"flex flex-col gap-4 my-4 py-2 pl-4 border-l-4 border-l-solid border-l-slate-100 darK:border-l-slate-600",children:[!r.isListItem&&e("div",{className:"text-gray-900 dark:text-gray-200 font-semibold",children:r.title}),r.items.map(((t,i)=>e(Ie,{object:t,list:r,onDelete:()=>(e=>{r.remove(e),s([...r.value])})(i)},`${i}-${n[i]??""}`))),e("div",{children:t(g,{variant:"secondary",onClick:()=>{r.add(),s([...r.value])},children:[e(T,{className:"size-6"})," Add"]})})]})}function Ie({list:r,object:n,onDelete:s}){return t("div",{className:"flex gap-2 w-full",children:[e("div",{className:"flex-1",children:(i=n,a=r.schema.arraySchema.editor,i.isList?e(Te,{object:i}):i.isObject?e(Ee,{object:i}):e($e,{object:i,editor:a}))}),e(g,{variant:"secondary",onClick:s,children:e(I,{className:"size-4"})})]});var i,a}class qe{schema;properties={};_validator;constructor(e){this.schema=e||{type:"object",properties:{}},this.load()}get validator(){if(!this._validator){const e=new K({allErrors:!0,strict:!1});this._validator=e.compile(this.schema)}return this._validator}load(){if(this.schema.properties){const e=this.schema.properties;Object.keys(e).forEach((t=>{this.loadProperty(t,e[t])}))}}hasProperties(){return Object.keys(this.properties).length>0}get title(){return this.schema.title||this.schema.name}get description(){return this.schema.description}loadProperty(e,t){let r;return r="array"===t.type?new Le(this,e,t):new Me(this,e,t),this.properties[e]=r,r}get type(){return this.schema.type}validate(e){return this.validator(e)?null:this.validator.errors||[]}addProperty(e,t,r=!1){"object"!==this.schema.type&&(this.schema.type="object"),this.schema.properties||(this.schema.properties={});const n="string"==typeof t?"object"===(s=t)?{type:"object",properties:{}}:"array"===s?{type:"array",items:{}}:{type:s}:t;var s;const i=this.loadProperty(e,n);return this.schema.properties[i.name]=i.schema,r&&(i.isRequired=!0),i}removeProperty(e){this.schema.properties&&(delete this.schema.properties[e],Array.isArray(this.schema.required)&&(this.schema.required=this.schema.required.filter((t=>t!==e)))),delete this.properties[e]}getProperty(e){return this.properties[e]}get editor(){return this.schema.editor}}class Me extends qe{parent;name;constructor(e,t,r){if(super(r),this.parent=e,this.name=t,"array"===r.type)throw new Error("Array property must be instantiated using ArrayPropertySchema");"object"!==r.type||r.properties||(r.properties={})}get isMulti(){return!1}get isReadOnly(){return!!this.schema.readOnly}set isReadOnly(e){this.schema.readOnly=e}get defaultValue(){return this.schema.default}set defaultValue(e){this.schema.default=e}get enum(){return this.schema.enum}set enum(e){this.schema.enum=e}get isRequired(){const e=this.parent.schema.required;return!!e&&e.includes(this.name)}set isRequired(e){let t=Array.isArray(this.parent.schema.required)?this.parent.schema.required:[];t=e?t.concat(this.name):t.filter((e=>e!==this.name)),this.parent.schema.required=t}get type(){return this.schema.type}set type(e){this.schema.type!==e&&(this.schema.type=e,"object"!==e&&(this.properties={},this.schema.properties=void 0))}remove(){this.parent.removeProperty(this.name)}get isBoolean(){return"boolean"===this.type}get isString(){return"string"===this.type}get isNumber(){return"number"===this.type||"integer"===this.type}get isObject(){return"object"===this.type}}class Le extends Me{arraySchema;constructor(e,t,r){super(e,t,function(e){if("array"!==e.type)throw new Error("Expecting an array schema");if(e.items){if(Array.isArray(e.items))throw new Error("Tuple arrays are not supported")}else e.items={};return e.items}(r)),this.arraySchema=r}get isMulti(){return!0}}function De(e){return(e=e.replace(/_/g," ").replace(/([a-z0-9])&([A-Z])/g,"$1 $2"))[0].toUpperCase()+e.slice(1)}function Fe(e,t){if(t.editor)return t.editor;switch(t.type){case"number":case"integer":return"number";case"boolean":return"checkbox";default:return"text"}}class ze{parent;schema;name;observer;constructor(e,t,r){this.parent=e,this.schema=t,this.name=r}get isRoot(){return!this.parent}get root(){return this.parent?this.parent.root:this}get path(){return this.parent?this.parent.path.concat(this.name):[]}get isScalar(){return!1}get isListItem(){return!1}get isObject(){return!1}get isList(){return!1}get title(){return this.schema.title||De(this.name)}onChange(e){this.observer&&!1===this.observer(this)||this.parent&&this.parent.onChange(e)}}class Re extends ze{constructor(e,t,r){super(e,t,r)}get isObject(){return!0}getProperty(e){const t=this.schema.properties[e];return t.isMulti?new Ke(this,t,this.getOrInitArrayProperty(e)):t.isObject?new _e(this,t,t.name,this.getOrInitObjectProperty(e)):new Ue(this,t)}getOrInitObjectProperty(e){let t=this.value[e];return t||(this.value[e]=t={}),t}getOrInitArrayProperty(e){let t=this.value[e];return t||(this.value[e]=t=[]),t}setPropertyValue(e,t){return this.value[e]!==t&&(this.value[e]=t,!0)}getPropertyValue(e){return this.value[e]}get properties(){const e=[];for(const t of Object.values(this.schema.properties))t.isMulti?e.push(new Ke(this,t,this.getOrInitArrayProperty(t.name))):t.isObject?e.push(new _e(this,t,t.name,this.getOrInitObjectProperty(t.name))):e.push(new Ue(this,t));return e}[Symbol.iterator](){return this.properties[Symbol.iterator]()}}class Ve extends Re{value;constructor(e,t={}){super(null,e instanceof qe?e:new qe(e),"#root"),this.value=t}}class _e extends Re{value;constructor(e,t,r,n){super(e,t,r),this.value=n}}class Ue extends ze{constructor(e,t){super(e,t,t.name),void 0===e.value[this.name]&&void 0!==t.defaultValue&&(e.value[this.name]=t.defaultValue)}get isScalar(){return!0}set value(e){this.parent.setPropertyValue(this.name,e)&&this.onChange(this)}get value(){return this.parent.getPropertyValue(this.name)}getInputType(){return Fe(this.name,this.schema)}}class Ke extends ze{value;items=[];constructor(e,t,r){super(e,t,t.name),this.value=r;for(const e of this.value)this.add()}get isList(){return!0}newItem(e){return this.schema.isObject?new Be(this,e):new We(this,e)}add(){const e=this.newItem(this.items.length);return this.items.push(e),e}remove(e){const t=this.value;if(e>=0&&e<this.items.length){this.items.splice(e,1);for(let e=0,t=this.items.length;e<t;e++){const t=this.items[e];t.index=e,t.name=String(e)}}Array.isArray(t)&&e>=0&&e<t.length&&(t.splice(e,1),this.onChange(this))}[Symbol.iterator](){return this.items[Symbol.iterator]()}item(e){if(e<0||e>=this.value.length)return;const t=this.value[e];return this.schema.isObject?new _e(this,this.schema,String(e),t):new We(this,e)}trim(){for(;void 0===this.items[this.items.length-1];)this.items.pop()}}class Be extends Re{index;key;constructor(e,t){super(e,e.schema,String(t)),this.index=t,void 0===e.value[t]&&(e.value[t]={}),this.key=this.name+"@"+Date.now()}get isListItem(){return!0}set value(e){this.parent.value[this.index]=e}get value(){return this.parent.value[this.index]}}class We extends ze{index;key;constructor(e,t){super(e,e.schema,String(t)),this.index=t,void 0===e.value[t]&&void 0!==e.schema.defaultValue&&(e.value[t]=e.schema.defaultValue),this.key=this.name+"@"+Date.now()}get isScalar(){return!0}get isListItem(){return!0}set value(e){this.parent.value[this.index]=e}get value(){return this.parent.value[this.index]}getInputType(){return Fe(this.name,this.schema)}}const He="text-pink-500 dark:text-pink-400",Je="text-purple-500 dark:text-purple-400",Ge="text-blue-500 dark:text-blue-400",Xe={code:"bg-gray-100 dark:bg-slate-800 whitespace-pre-wrap p-4 rounded-lg font-mono",comma:He,assign:He,startObject:He,endObject:He,startArray:He,endArray:He,boolean:Je,null:Je,key:Ge,index:Ge,string:"text-orange-500 dark:text-orange-400",number:"text-green-500 dark:text-green-400"};class Ze{renderer;parent;key;indent;result=[];constructor(e,t,r,n){this.renderer=e,this.parent=t,this.key=r,this.indent=n}get classMap(){return this.renderer.classMap}writeKey(e){const t=typeof e;"string"===t?(this.result.length>0&&this.result.push(`<span class='${this.classMap.comma}'>,\n</span>`),this.indent&&this.result.push(this.indent),this.result.push(`<span class="${this.classMap.key}">"${e}"</span><span class='${this.classMap.assign}'>: </span>`)):"number"===t&&(this.result.length>0&&this.result.push(`<span class='${this.classMap.comma}'>,\n</span>`),this.indent&&this.result.push(this.indent))}pushValue(e,t){if(this.writeKey(e),null===t)this.result.push(`<span class='${this.classMap.null}'>null</span>`);else if(t instanceof Ze)this.result.push(t.renderStart()+t.renderValue()+t.renderEnd());else{let e;const r=typeof t;"string"===r?(t=(t=`"${t}"`).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),e=this.classMap.string):"number"===r?e=this.classMap.number:"boolean"===r&&(e=this.classMap.boolean),this.result.push(`<span class='${e}'>${t}</span>`)}}renderValue(){return this.result.join("")}}class Ye extends Ze{constructor(e,t,r,n){super(e,t,r,n)}renderStart(){return`<span class='${this.classMap.startObject}'>{\n</span>`}renderEnd(){const e=this.result.length>0?"\n":"";return`<span class='${this.classMap.endObject}'>${e}${this.parent?.indent||""}}</span>`}}class Qe extends Ze{constructor(e,t,r,n){super(e,t,r,n)}renderStart(){return`<span class='${this.classMap.startArray}'>[\n</span>`}renderEnd(){const e=this.result.length>0?"\n":"";return`<span class='${this.classMap.endArray}'>${e}${this.parent?.indent||""}]</span>`}}class et{classMap;tab;stack=[];block=new Ye(this,void 0,"","");constructor(e=Xe,t=" "){this.classMap=e,this.tab=t}onStartObject(e){const t=new Ye(this,this.block,e,this.block.indent+this.tab);this.stack.push(this.block),this.block=t}onEndObject(){const e=this.block;this.block=this.stack.pop(),this.block.pushValue(e.key,e)}onStartIteration(e){const t=new Qe(this,this.block,e,this.block.indent+this.tab);this.stack.push(this.block),this.block=t}onEndIteration(){const e=this.block;this.block=this.stack.pop(),this.block.pushValue(e.key,e)}onValue(e,t){this.block.pushValue(e,t)}}function tt({data:t,className:r,classMap:n}){const[s,i]=d();return a((()=>{i(function(t,r,n){const s=new et(r);(new B).walk(t,s);const i=s.block.renderValue();return e("div",{className:n,dangerouslySetInnerHTML:{__html:`<div class='${s.classMap.code}' style='overflow-x: scroll'>${i}</div>`}})}(t,n,r))}),[t]),s}function rt({value:t}){return e("div",{className:"flex flex-col gap-4",children:Object.entries(t).map((([t,r])=>e(it,{name:t,value:r},t)))})}function nt({name:t}){return e("div",{className:"text-md font-semibold",children:De(t)})}function st({children:t,className:r}){return e("div",{className:U("flex flex-col gap-4 py-2 pl-4 border-l-4 border-l-solid border-l-slate-100 dark:border-l-slate-600",r),children:t})}function it({name:r,value:n}){const s=ct(n);switch(s.type){case lt.Inline:return t("div",{className:"w-full flex gap-2",children:[e(nt,{name:r+":"}),e("p",{children:s.value})]});case lt.Paragraph:return t("div",{children:[e(nt,{name:r}),e("p",{children:s.value})]});case lt.Prose:return t("div",{className:"prose dark:prose-invert",children:[e(nt,{name:r}),e("div",{className:"vprose dark:prose-invert",children:s.value})]});case lt.Array:return e(at,{name:r,value:n});case lt.Object:return t("div",{children:[e(nt,{name:r}),e(st,{className:"mt-2",children:Object.entries(n).map((([t,r])=>e(it,{name:t,value:r},t)))})]})}}function at({name:r,value:n}){const s=n.join(" ").length,i=s/n.length,a="string"==typeof n[0]&&(s<80||s<400&&i<32),o=n.length>9;return t("div",a?{className:"flex gap-2 flex-wrap",children:[r&&e(nt,{name:r+":"}),n.map(((t,r)=>e(y,{children:String(t)},r)))]}:{children:[r&&e(nt,{name:r}),e("div",{className:"flex flex-col gap-2",children:n.map(((t,r)=>e(ot,{index:r,value:t,useBullet:o},r)))})]})}function ot({index:r,value:n,useBullet:s}){const i=s?e("span",{className:"text-xl",children:"•"}):t("span",{children:[r+1,"."]}),a=ct(n);let o;switch(a.type){case lt.Object:o=e(st,{children:Object.entries(n).map((([t,r])=>e(it,{name:t,value:r},t)))});break;case lt.Array:o=e(at,{value:n});break;case lt.Prose:o=e("div",{className:"prose dark:prose-invert",children:a.value});break;default:o=e("div",{children:a.value})}return t("div",{className:"flex gap-4 hover:bg-slate-50 dark:hover:bg-slate-800 py-2 pr-2 pl-4",children:[e("div",{className:"font-semibold text-gray-600 dark:text-gray-400",children:i}),e("div",{children:o})]})}var lt;function ct(e){if(null==e)return{value:"-",type:lt.Inline};if(Array.isArray(e))return{value:e,type:lt.Array};const t=typeof e;if("string"===t){const t=e.length;let r;return t<80?r=lt.Inline:t>400?r=lt.Prose:(r=lt.Paragraph,e=e.replace(/(?:\n\n)+/g,"\n\n")),{type:r,value:e}}return"number"===t||"boolean"===t?{value:String(e),type:lt.Inline}:{value:e,type:lt.Object}}function dt({value:t,viewCode:r=!1}){return t?e("div",{className:"relative w-full",children:r?e(tt,{data:t}):e(rt,{value:t})}):e("pre",{className:"whitespace-pre-wrap",children:"No Data to display"})}!function(e){e[e.Inline=0]="Inline",e[e.Paragraph=1]="Paragraph",e[e.Prose=2]="Prose",e[e.Array=3]="Array",e[e.Object=4]="Object"}(lt||(lt={}));const ht=l(void 0);function ut(){return c(ht)}const pt=Symbol("__SLOT_NAME");function mt(e,t){const r=[];return h.forEach(e,(e=>{!function(e,t,r){let n;u(e)&&(n=e.type[pt])?r[n]=e:t.push(e)}(e,r,t)})),r.length>1?r:r[0]}function ft(e,t){t[pt]=e}function gt(e){return e?"boolean"==typeof e?{enabled:e}:e:{enabled:!1}}function yt(t){const r={};if(mt(t.children,r),!r.content)throw new Error("Popover must provide a content slot");const n=r.trigger?.props,s=r.content.props;return e(vt,{...t,trigger:n,content:s})}function vt({middleware:r,offset:n,trigger:s,dismiss:i=!0,content:a,placement:o,strategy:l,zIndex:c=40}){const[h,u]=d(!1),p=G({open:h,placement:o,strategy:l,onOpenChange:u,middleware:r||[W(n||4),H(),J()],whileElementsMounted:X}),{floatingStyles:m,refs:{setReference:f,setFloating:g},context:y}=p,v=Z(y,gt(i)),b=Y(y,gt(!(x=s)||x.hover||x.click?x?.click:{enabled:!0}));var x;const w=Q(y,gt(function(e){return!0===e?.hover?{enabled:!0,handleClose:se({blockPointerEvents:!0}),restMs:0}:e?.hover}(s))),{getReferenceProps:N,getFloatingProps:k}=ee([v,b,w]),{isMounted:C,styles:j}=te(y,a.transition);return t(ht.Provider,{value:{...p,close:()=>u(!1)},children:[s&&e("div",{className:U(s.className,"inline-block"),ref:f,...N(),children:s.children}),e(re,{children:C&&e("div",{ref:g,style:{...m,zIndex:c},...k(),children:e(ne,{context:y,children:e("div",{className:U(a.className,"bg-popover rounded-md text-popover-foreground max-w-md"),style:j,children:a.children})})})})]})}function bt(e){return null}function xt(e){return null}function wt({percent:t}){return e("div",{className:"w-full bg-gray-200 rounded-full h-2.5 dark:bg-gray-700",children:e("div",{className:"bg-blue-600 h-2.5 rounded-full",style:{width:`${t}%`}})})}function Nt({className:r,properties:n}){return e(v,{className:r,children:e("tbody",{children:n.map((r=>t("tr",{children:[t("td",{className:"w-1/3 font-semibold gap-2",children:[e("span",{children:r.name}),r.description&&e(b,{description:r.description,placement:"top",children:e(q,{className:"size-3 ml-2 text-muted-foreground"})})]}),e("td",{className:"w-2/3",children:r.value??"undefined"})]},r.name)))})})}ft("trigger",bt),ft("content",xt),yt.Trigger=bt,yt.Content=xt;const kt=[ae,ie()];function Ct({schema:r,isOpen:n,onClose:s,readonly:a=!1}){const l=i(void 0),c=x(),d=o((()=>function(e){return e?JSON.stringify(e,null,2):""}(r.schema)),[r]);return t(w,{onClose:s,isOpen:!!n,className:"min-w-[60vw]",children:[e(N,{children:"JSON Schema Editor"}),e(k,{children:a?e(tt,{data:r.schema||{}}):e(fe,{value:d,extensions:kt,editorRef:l})}),e(C,{children:a?null:e(g,{onClick:()=>{if(l.current){const e=l.current.getValue();try{const t=function(e){if(e&&(e=e.trim()))return JSON.parse(e)}(e);r.replaceSchema(t),s()}catch(e){c({status:"error",title:"Invalid JSON Schema",description:e.message,duration:5e3})}}},children:"Save changes"})})]})}var jt;function St(e,t){let r="any"===t.name?void 0:t.isNullable?[t.name,"null"]:t.name;if(t.isArray)if(e.type="array",e.properties=void 0,!e.items||Array.isArray(e.items))e.items={type:r,properties:t.isObject?{}:void 0};else{const n=e.items;n.type=r,t.isObject&&!n.properties&&(n.properties={})}else e.type=r,e.items=void 0,t.isObject?e.properties||(e.properties={}):e.properties=void 0}function Ot(e){let t,r=!1,n=!1;const s=e.type;if(Array.isArray(s))for(const e of s)"null"===e?r=!0:t||(t=e);else t=s;t||(t="any"),"array"===t&&(n=!0,t=function(e){if(!e)return"any";let t;t=Array.isArray(e)?At(e[0].type):At(e.type);"array"!==t&&"null"!==t||(t="any");return t}(e.items));let i=t;switch(e.editor||e.format){case"textarea":i="text";break;case"media":i="media";break;case"document":i="document"}return{isNullable:r,isArray:n,isObject:"object"===t,name:i}}function At(e){return e?Array.isArray(e)?e.find((e=>"null"!==e))||"any":e:"any"}!function(e){e.string="string",e.number="number",e.integer="integer",e.boolean="boolean",e.object="object",e.any="any",e.text="text",e.media="media",e.document="document"}(jt||(jt={}));let Pt=0;class $t{source;onChange=()=>{};schema;root;constructor(e,t){this.schema=e?"string"==typeof e?JSON.parse(e):e:{title:t,type:"object",properties:{}},this.schema.properties||(this.schema.properties={}),this.root=new Et("",this.schema,this),this.root.loadChildren()}get isEmpty(){return!this.root.children||0===this.root.children.length}get children(){return this.root.children}reload(){return this.root=new Et("",this.schema,this),this.root.loadChildren(),this.onChange?.(this),this}withSource(e,t){return this.source={uri:t,name:e},this}withChangeListener(e){return this.onChange=e,this}replaceSchema(e){this.schema=e||{title:this.schema.title,type:"object",properties:{}},this.reload()}clone(){const e=new $t(this.schema);return e.source=this.source,this.onChange&&e.withChangeListener(this.onChange),e}}class Et{schema;loader;parent;name;isRequired=!1;type;children;constructor(e,t,r,n){if(this.schema=t,this.loader=r,this.parent=n,this.name=e,this.type=Ot(t),this.parent){let t=this.parent._getPropertiesSchema().required;this.isRequired=!(!t||!Array.isArray(t))&&t.includes(e)}}get title(){return this.schema.title}set title(e){this.schema.title=e}get description(){return this.schema.description}set description(e){this.schema.description=e}get isParent(){return this.type.isObject}get isNew(){return!!this.schema.isNew}set isNew(e){e?this.schema.isNew=!0:delete this.schema.isNew}resetIsNew(){const e=this.isNew;return this.isNew=!1,e}getNameSignature(){return`${this.name}${this.isRequired?"":"?"}`}getTypeSignature(){return`${this.type.name}${this.type.isArray?"[]":""}${this.type.isNullable?"?":""}`}getSignature(){return`${this.getNameSignature()}: ${this.getTypeSignature()}`}reloadTree(){this.loader.reload()}loadChildren(){this.children=[],this.schema.items&&this.schema.items.properties?this._loadChildren(this.schema.items.properties):this.schema.properties&&this._loadChildren(this.schema.properties)}_loadChildren(e){for(const t of Object.keys(e)){const r=e[t],n=new Et(t,r,this.loader,this);this.children.push(n),n.isParent&&n.loadChildren()}}_getPropertiesSchema(){return this.type.isArray&&this.type.isObject?this.schema.items:this.schema}findAvailableChildName(e){const t=this._getPropertiesSchema().properties||{};let r;do{r=e+ ++Pt}while(t[r]);return r}addChild(e,t,r=!1){if(!this.type.isObject)throw new Error("Cannot add child to a non object node");this.children||(this.children=[]);const n=function(e,t,r,n=!1){if("object"!==e.type)throw new Error("Cannot add property to a non-object schema");e.properties||(e.properties={});const s={};return St(s,r),e.properties[t]=s,n&&(Array.isArray(e.required)?function(e,t){e.includes(t)||e.push(t)}(e.required,t):e.required=[t]),s}(this._getPropertiesSchema(),e,t,r),s=new Et(e,n,this.loader,this);return this.children.push(s),s}remove(){if(this.parent&&this.parent.type.isObject){return function(e,t){e.properties&&(delete e.properties[t],Array.isArray(e.required)&&(e.required=e.required.filter((e=>e!==t))))}(this.parent._getPropertiesSchema(),this.name),this.parent.children&&(this.parent.children=this.parent.children.filter((e=>e.name!==this.name))),!0}return!1}update(e){let t=!1;null!=e.name&&this.name!==e.name&&(this.parent&&function(e,t,r){if(e.properties){const n=e.properties,s={};for(const e of Object.keys(n)){const i=n[e];e===t?s[r]=i:s[e]=i}e.properties=s}e.required&&(e.required=e.required.map((e=>e===t?r:e)))}(this.parent._getPropertiesSchema(),this.name,e.name),this.name=e.name,t=!0),null!=e.isRequired&&this.isRequired!==e.isRequired&&(this.parent&&function(e,t,r){if(Array.isArray(e.required)){const n=e.required.indexOf(t);r?n<0&&e.required.push(t):n>-1&&e.required.splice(n,1)}else r&&(e.required=[t])}(this.parent._getPropertiesSchema(),this.name,e.isRequired),this.isRequired=e.isRequired,t=!0);let r=e.type?.name;"any"===r&&(r=void 0);const n=r!==this.schema.type;return e.type&&(St(this.schema,e.type),this.type=e.type,this.type.isObject?this.children||(this.children=[]):this.children=void 0,t=!0),this.schema.editor&&null===e.editor?(this.schema.editor=void 0,this.schema.format=void 0,t=!0):e.editor?(this.schema.editor=e.editor,this.schema.format=e.editor,t=!0):n&&(this.schema.editor=void 0,this.schema.format=void 0,t=!0),e.description!==this.description&&(this.description=e.description,t=!0),t}getUpdateFromNameAndTypeSignature(e,t){let r=e.trim(),n=!0;r.endsWith("?")&&(r=r.substring(0,r.length-1).trim(),n=!1);const s=function(e){let t=!1,r=!1;(e=e.trim()).endsWith("?")&&(r=!0,e=e.substring(0,e.length-1).trim()),e.endsWith("[]")&&(t=!0,e=e.substring(0,e.length-2).trim());const n=jt[e];if(!n)throw new Error(`Unknown type "${e}"`);return{name:n,isArray:t,isNullable:r,isObject:n===jt.object}}(t);let i;return"text"===s.name?(s.name=jt.string,i="textarea"):"media"===s.name?(s.name=jt.any,i="media"):"document"===s.name?(s.name=jt.any,i="document"):i=null,{name:r,type:s,isRequired:n,editor:i}}updateFromNameAndTypeSignature(e,t){return this.update(this.getUpdateFromNameAndTypeSignature(e,t))}updateFromSignature(e){const t=(e=e.trim()).indexOf(":");if(t<0)throw new Error("Expecting a name and a type separated by a colon");const r=e.substring(0,t),n=e.substring(t+1);return this.updateFromNameAndTypeSignature(r,n)}}function Tt(e){return{name:e.getNameSignature(),type:e.getTypeSignature(),description:e.description}}const It=function(){const e=Object.values(jt),t=[...e];for(const r of e)t.push(r+"[]");return e.sort(),t}();function qt({value:r,onChange:n,onCancel:s,onSave:i}){const[a,o]=d(!1);if(!r)return null;return t("div",{className:"flex items-center",children:[e("div",{className:"flex-1",children:e(Mt,{value:r.name,onChange:e=>{n({...r,name:e})},onCancel:s,onSave:i})}),e("div",{className:"px-1 font-semibold",children:":"}),e("div",{className:"flex-1",children:e(Lt,{value:r.type,onChange:e=>{n({...r,type:e})},onCancel:s,onSave:i})}),t("div",{children:[e(g,{variant:"ghost",size:"xs",onClick:()=>o(!0),title:"Edit description",children:e(M,{className:"size-4"})}),e(Dt,{value:r.description,isOpen:a,onClose:e=>{void 0!==e&&"string"==typeof e&&n({...r,description:e},!0),o(!1)}})]})]})}function Mt({value:t,onChange:r,onCancel:n,onSave:s}){const o=i(null);a((()=>{o.current?.focus()}),[]);return e("input",{onKeyUp:e=>{switch(e.key){case"Enter":s?.();break;case"Escape":n?.()}},ref:o,value:t,onChange:e=>{r(e.target.value)},className:f.INPUT_UNSTYLED,style:{fontSize:"inherit",width:"",display:"inline"}})}function Lt({value:t,onChange:r,onCancel:n,onSave:s}){return e(j,{className:f.INPUT_UNSTYLED,options:It,value:t||"",onBlur:()=>{s?.()},onChange:r,onKeyDown:(e,t)=>{t||("Enter"===e.key?s?.():"Escape"===e.key&&n?.())},popupClass:"schema-type-suggest-popup z-90"})}function Dt({value:r,isOpen:n,onClose:s}){return t(w,{isOpen:n,onClose:s,children:[e(N,{children:"Edit description"}),e(Ft,{value:r,onSave:s})]})}function Ft({value:n,onSave:s}){const o=i(null),[l,c]=d(n||"");return a((()=>{o.current&&o.current.focus()}),[o.current]),t(r,{children:[e(S,{className:"h-max",children:e("textarea",{ref:o,className:"dark:bg-gray-800 w-full h-full dark:text-white",value:l,onChange:e=>c(e.target.value)})}),e(O,{children:e(g,{onClick:()=>s(l),children:"Save Changes"})})]})}function zt({value:r}){return r?t("div",{className:"w-full flex items-baseline",children:[e("div",{children:r.name||""}),e("div",{className:"ml-2 text-sm text-muted",children:r.type||""})]}):null}function Rt(e){const[t,r]=d(new $t(e||{type:"object",properties:{}}).withChangeListener((e=>{r(e.clone())})));return t}const Vt="block text-sm sm:leading-6 rounded-md border-0 py-1.5 px-4",_t=`${Vt} hover:shadow-xs hover:ring-1 hover:ring-inset hover:ring-ring`,Ut=`${Vt} shadow-xs ring-1 ring-inset ring-ring`;function Kt({value:r,onChange:n,onDelete:s,outlineOnHover:i=!1,editOnClick:a=!0,placeholder:o,viewer:l,editor:c,skipClickOutside:h,isEditing:u=!1,readonly:p=!1,onValidate:m}){const{on:f,off:g,isOn:y}=A(u),[v,b]=d();return t("div",{className:"",children:[y&&!p?e(Wt,{value:r,onSave:e=>{if(m){const t=m(e);if(t)return void b(t);b(void 0)}n(e)&&g()},onCancel:g,editor:c,skipClickOutside:e=>!!h&&h(e)}):e(Bt,{value:r,onEdit:f,viewer:l,placeholder:o,outlineOnHover:i,editOnClick:a,onDelete:s,readonly:p}),v&&e("div",{className:"text-red-500 text-sm",children:v})]})}function Bt({viewer:r,value:n,onEdit:s,editOnClick:i,outlineOnHover:a,placeholder:o,onDelete:l,readonly:c}){const d="invisible group-hover:visible";return t("div",{tabIndex:0,onKeyUp:e=>{"Enter"===e.key&&s()},onClick:()=>{i&&s()},className:U("flex justify-start items-center group",a?_t:Vt,{"cursor-pointer":i}),children:[e(r,{value:n,placeholder:o}),t("div",{className:"ml-auto flex space-x-2",children:[!c&&l&&e(g,{variant:"ghost",size:"sm",className:d,onClick:l,children:e(I,{className:"size-4"})}),c?null:e(g,{variant:"ghost",size:"sm",className:d,onClick:s,children:e(L,{className:"size-4"})})]})]})}function Wt({editor:t,value:r,onSave:n,onCancel:s,skipClickOutside:a}){const[o,l]=d(r),c=i(r),[h,u]=d(null),p=()=>{n(c.current)},m=P(p,a);return e("div",{ref:m,children:e("div",{className:Ut,children:e("div",{className:"w-full",onClick:e=>e.stopPropagation(),children:e(t,{value:o,onChange:(e,t=!1)=>{l(e),c.current=e,t&&(h&&clearTimeout(h),u(setTimeout((()=>{n(e)}),500)))},onSave:p,onCancel:s})})})})}function Ht(e){const t=e.target;return!(!t.closest||!t.closest(".schema-type-suggest-popup"))}function Jt({schema:r,readonly:n=!1}){return t("ul",{className:"",children:[r.children.map((e=>Gt(e,n))),n?null:e(er,{parent:r.root})]})}function Gt(t,r){return t.isParent?e(Zt,{property:t,readonly:r},t.name):e(Xt,{node:t,readonly:r},t.name)}function Xt({node:t,readonly:r}){return e("li",{children:e(Qt,{property:t,readonly:r})})}function Zt({property:r,readonly:n}){const[s,i]=d(!0);return t("li",{children:[t("div",{className:"flex items-center w-full",children:[e("button",{onClick:()=>i(!s),children:e(s?D:F,{className:"size-4"})}),e("div",{className:"flex-1",children:e(Qt,{property:r,readonly:n})})]}),s&&t("ul",{className:"ml-4 border-l border-gray-400 border-dashed",children:[(r.children||[]).map((e=>Gt(e,n))),n?null:e(er,{parent:r})]})]})}function Yt(e){return e?/^[a-zA-Z0-9_]+[?]?$/.test(e)?void 0:"Only letters, numbers, underscores or question mark are allowed (a-zA-Z0-9_?)":"Name is required"}function Qt({property:t,readonly:r}){const n=x(),s=t.resetIsNew(),i=Tt(t);return e(Kt,{value:i,onChange:e=>{try{e.description&&"string"!=typeof e.description&&(e.description=void 0);const r=t.getUpdateFromNameAndTypeSignature(e.name,e.type);t.update({...r,description:e.description})&&t.reloadTree()}catch(e){return n({status:"error",title:"Invalid property declaration",description:e.message,duration:9e3}),!1}return!0},onDelete:()=>{t.remove(),t.reloadTree()},editor:qt,viewer:zt,outlineOnHover:!0,isEditing:s,skipClickOutside:Ht,readonly:r,onValidate:e=>Yt(e.name)})}function er({parent:r}){return t(g,{variant:"ghost",onClick:()=>{const e=r.findAvailableChildName("new_property_");r.addChild(e,{isObject:!1,isArray:!1,isNullable:!1,name:jt.string},!0).isNew=!0,r.reloadTree()},children:[e(T,{className:"size-4"}),"Add property"]})}function tr({content:t,...r}){const n=i(null);return a((()=>{if(!n.current)return;const e=(new DOMParser).parseFromString(t,"image/svg+xml").querySelector("svg");if(!e)return console.warn("SvgIcon: No <svg> element found in provided string"),void(n.current.innerHTML="");r&&Object.entries(r).forEach((([t,r])=>{if(null==r)return;const n="className"===t?"class":t;e.setAttribute(n,String(r))})),n.current.innerHTML="",n.current.appendChild(e)}),[t,r]),e("span",{ref:n})}function rr(t){return r=>e(tr,{content:t,...r})}function nr({onDrop:r,message:n,buttonLabel:s="Upload Files",allowFolders:a=!0,className:o=""}){const[l,c]=d(!1),h=i(null),u=i(null);return t("div",{className:`flex flex-col items-center justify-center py-12 border-2 rounded-lg transition-colors ${l?"border-color-primary bg-color-primary/10":"border-dashed border-color-border"} ${o}`,onDragOver:e=>{e.preventDefault(),e.dataTransfer.types.includes("Files")&&c(!0)},onDragLeave:e=>{e.preventDefault(),u.current&&!u.current.contains(e.relatedTarget)&&c(!1)},onDrop:async e=>{if(e.preventDefault(),c(!1),e.dataTransfer.items&&e.dataTransfer.items.length>0){const t=Array.from(e.dataTransfer.items),n=[],s=new Set,i=async e=>{if(e.isFile){const t=await new Promise((t=>{e.file((r=>{Object.defineProperty(r,"webkitRelativePath",{writable:!0,value:e.fullPath.substring(1)}),t(r)}))}));!t.name.startsWith(".")&&t.size>0&&n.push(t);const r=e.fullPath.substring(1).split("/").slice(0,-1).join("/");r&&s.add(r)}else if(e.isDirectory){const t=e.createReader(),r=await new Promise((e=>{t.readEntries((t=>{e(t)}))}));await Promise.all(r.map(i));const n=e.fullPath.substring(1);n&&s.add(n)}};try{if(await Promise.all(t.map((e=>{const t=e.webkitGetAsEntry?e.webkitGetAsEntry():e;return t?i(t):Promise.resolve()}))),n.length>0){const e=new Set(Array.from(s).map((e=>e.split("/")[0])).filter(Boolean)).size,t=n.length;let i="";i=e>0?1===e?`Preparing to upload 1 folder with ${t} files...`:`Preparing to upload ${e} folders with ${t} files...`:`Preparing to upload ${t} file${1===t?"":"s"}...`,r(n,{count:n.length,message:i})}}catch(t){console.error("Error processing dropped files:",t);const n=Array.from(e.dataTransfer.files);n.length>0&&r(n)}}else if(e.dataTransfer.files&&e.dataTransfer.files.length>0){const t=Array.from(e.dataTransfer.files);r(t)}},children:[e(z,{className:"h-12 w-12 mb-3 transition-colors "+(l?"text-primary":"text-muted/50")}),e("p",{className:"text-color-muted-foreground",children:n}),t("div",{className:"mt-4 text-center",children:[t("div",{className:"text-sm text-muted mb-2",children:["Drag and drop files",a?" or folders":""," here, or"]}),t(g,{onClick:()=>{h.current&&h.current.click()},children:[e(z,{className:"h-4 w-4 mr-2"}),s]}),e("input",{type:"file",ref:h,onChange:e=>{if(e.target.files&&e.target.files.length>0){const t=Array.from(e.target.files);if(t.some((e=>e.webkitRelativePath&&e.webkitRelativePath.includes("/")))){const e=new Set(t.map((e=>e.webkitRelativePath?.split("/")[0])).filter(Boolean)).size,n=t.length,s=1===e?`Preparing to upload 1 folder with ${n} files...`:`Preparing to upload ${e} folders with ${n} files...`,i={count:t.length,message:s};r(t,i)}else{const e={count:t.length,message:`Preparing to upload ${t.length} file${1===t.length?"":"s"}...`};r(t,e)}}},multiple:!0,webkitdirectory:a?"":void 0,directory:a?"":void 0,className:"hidden"})]})]})}function sr({title:r,count:n,icon:s=e(R,{className:"h-4 w-4 text-green-500"}),items:i}){const[a,o]=d(!1);return t("div",{className:"border border-color-border rounded-md overflow-hidden",children:[t("div",{className:"flex items-center justify-between p-3 bg-color-muted/10 cursor-pointer",onClick:()=>o(!a),children:[t("div",{className:"flex items-center",children:[e("span",{className:"mr-2",children:s}),e("span",{className:"font-medium",children:r}),e("span",{className:"ml-2 px-2 py-0.5 bg-color-muted/20 rounded-full text-xs",children:n})]}),e("button",{className:"text-muted",children:e("svg",{className:"h-5 w-5 transition-transform "+(a?"transform rotate-180":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})})]}),a&&e("div",{className:"p-3 border-t border-color-border max-h-48 overflow-y-auto",children:i.length>0?e("ul",{className:"space-y-1",children:i.map(((t,r)=>e("li",{className:"text-sm py-1 px-2 rounded hover:bg-color-muted/10",children:t},r)))}):e("div",{className:"text-sm text-muted py-2",children:"No items to display"})})]})}function ir({files:r,className:n="",location:s,collection:i}){const a=r.filter((e=>"success"===e.status)),o=r.filter((e=>"updated"===e.status)),l=r.filter((e=>"skipped"===e.status)),c=r.filter((e=>"failed"===e.status)),d=a.length,h=o.length,u=l.length,p=c.length,m=r.length;return t("div",{className:`flex flex-col py-2 ${n}`,children:[t("div",{className:"flex items-center mb-4",children:[e("div",{className:"size-8 mr-4 rounded-full bg-success/10 flex items-center justify-center",children:e(R,{className:"size-4 text-success"})}),e("div",{children:t("p",{className:"text-muted",children:[m," file",1!==m?"s":""," processed",i?` in collection '${i}'`:"",s?` in folder '${s}'`:""]})})]}),t("div",{className:"space-y-3 mt-2",children:[d>0&&e(sr,{title:"Successfully Uploaded",count:d,icon:e(R,{className:"h-4 w-4 text-green-500"}),items:a.map((e=>e.name))}),h>0&&e(sr,{title:"Successfully Updated",count:h,icon:e(R,{className:"h-4 w-4 text-blue-500"}),items:o.map((e=>e.name))}),u>0&&e(sr,{title:"Skipped (Already Existed)",count:u,icon:e(V,{className:"h-4 w-4 text-amber-500"}),items:l.map((e=>e.name))}),p>0&&e(sr,{title:"Failed to Upload",count:p,icon:e(_,{className:"h-4 w-4 text-red-500"}),items:c.map((e=>e.name))})]})]})}const ar="#text",or="#comment",lr="#cdata",cr="DECLARATION_TAG",dr={tagColor:"#d43900",textColor:"#333",attributeKeyColor:"#2a7ab0",attributeValueColor:"#008000",separatorColor:"#333",commentColor:"#aaa",cdataColor:"#1d781d",fontFamily:"monospace"},hr=l({theme:dr,collapsible:!1,indentSize:2}),ur=()=>c(hr),pr=new de({preserveOrder:!0,ignoreAttributes:!1,attributeNamePrefix:"",allowBooleanAttributes:!0,commentPropName:or,cdataPropName:lr,parseTagValue:!1});function mr(r){const{indentation:n,children:s,isInline:i}=r,{theme:a}=ur();return t("div",{style:{color:a.cdataColor},children:[e("span",{children:`${n}<![CDATA[`}),s,e("span",{children:`${i?"":n}]]>`})]})}function fr(t){const{collapsible:r,theme:n}=ur(),{collapsed:s}=t;return r?e("span",{style:{position:"relative"},children:e("span",{style:{position:"absolute",right:"0",border:0,padding:0,background:"none"},children:e(gr,{fill:n.separatorColor,style:{transform:`rotate(${s?0:90}deg)`,transition:"transform 0.2s"}})})}):null}function gr({...t}){return e("svg",{width:"16px",height:"16px",viewBox:"0 0 24 24",...t,children:e("path",{d:"M9 17.898C9 18.972 10.2649 19.546 11.0731 18.8388L17.3838 13.3169C18.1806 12.6197 18.1806 11.3801 17.3838 10.6829L11.0731 5.16108C10.2649 4.45388 9 5.02785 9 6.1018V17.898Z"})})}function yr(e){const{collapsible:t,initialCollapsedDepth:r}=ur(),[n,s]=d((()=>!(oe(r)||!t)&&e>=r));return a((()=>{s(!(oe(r)||!t)&&e>=r)}),[r,e,t]),{collapsed:n,buttonProps:t?{onClick:()=>s((e=>!e)),role:"button",style:{cursor:"pointer"}}:{}}}function vr(r){const{indentation:n,children:s,isInline:i,level:a}=r,{theme:o}=ur(),{collapsed:l,buttonProps:c}=yr(a);return t("div",{style:{color:o.commentColor},children:[t("span",{...c,children:[e("span",{children:n}),e(fr,{collapsed:l}),e("span",{children:"\x3c!-- "})]}),!l&&s,l&&"...",e("span",{children:`${i||l?" ":n}--\x3e`})]})}function br(r){const{attributes:n}=r,{theme:s}=ur();return n?e("span",{children:Object.entries(n).map((([r,n])=>t("span",{children:[e("span",{style:{color:s.attributeKeyColor},children:` ${r}`}),e("span",{style:{color:s.separatorColor},children:"="}),e("span",{style:{color:s.attributeValueColor},children:`"${n}"`})]},`attribute-${r}`)))}):null}function xr(r){const{indentation:n,tagKey:s,attributes:i}=r,{theme:a}=ur();return t("div",{children:[e("span",{style:{color:a.separatorColor},children:`${n}<?`}),e("span",{style:{color:a.tagColor},children:`${s.slice(1)}`}),e(br,{attributes:i}),e("span",{style:{color:a.separatorColor},children:"?>"})]})}function wr(e){return"string"==typeof e&&e.includes("\n")}function Nr(e){const t=e[":@"],r=le(e,":@"),[[n,s]]=Object.entries(r),i=function(e){switch(e){case ar:case lr:case or:return e;default:return e.startsWith("?")?cr:"TAG"}}(n);return{attributes:t,tagKey:n,subElements:s,type:i}}function kr(e){return!!e&&Object.keys(e).length>0}function Cr(n){const{indentation:s,tagKey:i,attributes:a,children:o,isInline:l,hasChildren:c,level:d}=n,{collapsed:h,buttonProps:u}=yr(d),{theme:p}=ur();return t("div",{children:[t("span",{...u,children:[e("span",{children:s}),e(fr,{collapsed:h}),e("span",{style:{color:p.separatorColor},children:"<"}),e("span",{style:{color:p.tagColor},children:`${i}`}),!h&&e(br,{attributes:a}),h&&kr(a)&&" ...",e("span",{style:{color:p.separatorColor},children:c?">":" />"})]}),c&&t(r,{children:[!h&&o,h&&"...",e("span",{style:{color:p.separatorColor},children:`${l||h?"":s}</`}),e("span",{style:{color:p.tagColor},children:`${i}`}),e("span",{style:{color:p.separatorColor},children:">"})]})]})}function jr(t){const{hasSiblings:r,text:n,indentation:s,isText:i}=t,{theme:a}=ur(),o=i?{color:a.textColor}:void 0;return wr(n)||r?e("div",{style:o,children:n.split("\n").filter((e=>!!e.trim())).map(((t,r)=>e("div",{children:`${s}${t.trim()}`},`${r}`)))}):e("span",{style:o,children:n})}function Sr(t){const{elements:n,level:s=0,isText:i=!0}=t,{indentSize:a}=ur();return Array.isArray(n)&&0!==n.length?e(r,{children:n.map(((t,r)=>{const{tagKey:o,attributes:l,subElements:c,type:d}=Nr(t),h=n.length>1,u=function(e,t){return new Array(t*e+1).join(" ")}(a,s),p=`${s}-${r}`,m=function(e){return"string"!=typeof e&&1===e.length&&ar in e[0]&&!wr(e[0][ar])}(c);switch(d){case ar:return e(jr,{text:c,indentation:u,hasSiblings:h,isText:i},p);case or:return e(vr,{isInline:m,indentation:u,level:s,children:e(Sr,{elements:c,level:s+1,isText:!1})},p);case lr:return e(mr,{indentation:u,isInline:m,children:e(Sr,{elements:c,level:s+1,isText:!1})},p);case cr:return e(xr,{indentation:u,tagKey:o,attributes:l},p);default:return e(Cr,{indentation:u,tagKey:o,attributes:l,isInline:m,hasChildren:c.length>0,level:s,children:e(Sr,{elements:c,level:s+1})},p)}}))}):null}function Or(){return e("div",{children:"Invalid XML!"})}function Ar(t){const{theme:r,xml:n,collapsible:s=!1,indentSize:i=2,invalidXml:l,initalCollapsedDepth:c,initialCollapsedDepth:h}=t,[u,p]=d((()=>({...dr,...r}))),{json:m,valid:f}=function(e){return o((()=>{try{if(!he.validate(e))throw new Error("Invalid XML!");const t=pr.parse(e);if("string"==typeof e&&e.trim().length>0&&0===t.length)throw new Error("Invalid XML!");return{json:t,valid:!0}}catch(e){return{json:null,valid:!1,errorMessage:`Fail to parse: ${e.message}`}}}),[e])}(n),g=o((()=>({theme:u,collapsible:s,indentSize:i,initialCollapsedDepth:h??c})),[u,s,i,c,h]);return a((()=>{p((e=>{const t={...dr,...r};return ce(t,e)?e:t}))}),[r]),f?e(hr.Provider,{value:g,children:e("div",{className:"rxv-container",style:{whiteSpace:"pre-wrap",fontFamily:u.fontFamily,overflowWrap:"break-word"},children:e(Sr,{elements:m})})}):l||e(Or,{})}export{Le as ArrayPropertySchema,fe as CodeMirrorEditor,nr as DropZone,pe as EditorApi,ye as FieldSetContextProvider,Se as Form,we as FormContextProvider,Ce as FormError,ke as FormHelper,Ne as FormLabel,Ae as GeneratedForm,je as Input,tt as JSONCode,dt as JSONDisplay,Ct as JSONSchemaEditorModal,rt as JSONView,Be as ManageObjectEntry,Ke as ManagedListProperty,Ve as ManagedObject,Re as ManagedObjectBase,_e as ManagedObjectProperty,Ue as ManagedProperty,We as ManagedScalarEntry,$t as ManagedSchema,ze as Node,yt as Popover,ht as PopoverContext,wt as Progress,Nt as PropertiesView,qt as PropertyEditor,Mt as PropertyNameEditor,Me as PropertySchema,zt as PropertyViewer,$e as ScalarField,qe as Schema,Jt as SchemaEditor,Et as SchemaNode,tr as SvgIcon,sr as UploadResultCategory,ir as UploadSummary,Ar as XMLViewer,De as computeTitleFromName,rr as createSvgIcon,Tt as getEditableSchemaProperty,ve as useFieldSet,xe as useForm,ut as usePopoverContext,Rt as useSchema,Yt as validatePropertyName};
|
|
2
2
|
//# sourceMappingURL=vertesia-ui-widgets.js.map
|