@powerhousedao/connect 4.1.0-dev.105 → 4.1.0-dev.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/AddDriveModal-C2fZqOQI.js +1 -0
- package/dist/assets/ClearStorageModal-DjjEBXBS.js +1 -0
- package/dist/assets/CookiesPolicyModal-BrOPPvzy.js +1 -0
- package/dist/assets/CreateDocumentModal-C09c_nGK.js +1 -0
- package/dist/assets/DebugSettingsModal-PbDxwRkN.js +1 -0
- package/dist/assets/DeleteDriveModal-x5WgUnZq.js +1 -0
- package/dist/assets/DeleteItemModal-BBYKOKsF.js +1 -0
- package/dist/assets/DisclaimerModal-CteySYvG.js +1 -0
- package/dist/assets/DriveSettingsModal-B18X9rkK.js +1 -0
- package/dist/assets/ExportDocumentWithErrorsModal-B7IfIoUE.js +1 -0
- package/dist/assets/SettingsModal-BrdAtrxz.js +1 -0
- package/dist/assets/UpgradeDriveModal-fqiiEuOr.js +1 -0
- package/dist/assets/common-8r_LaZs4.css +1 -0
- package/dist/assets/common-n2B-GsjO.js +1 -0
- package/dist/assets/config-CU-aFfVJ.js +1 -0
- package/dist/assets/design_system-CZfmC8Ij.js +45 -0
- package/dist/assets/design_system_connect-DHQbQvgv.js +53 -0
- package/dist/assets/document_drive-CP6paqKN.js +305 -0
- package/dist/assets/document_engineering-DojqH50p.js +1 -0
- package/dist/assets/document_model-DLxR7ZLO.js +230 -0
- package/dist/assets/document_model_editor-ButtI7kP.js +2 -0
- package/dist/assets/drive_explorer-IB_BS5Au.js +2 -0
- package/dist/assets/editor-CgH7LMsL.js +105 -0
- package/dist/assets/editor-ClAkqmdQ.js +1 -0
- package/dist/assets/graphql-BS4Brs_E.js +75 -0
- package/dist/assets/graphql_request-9RNJ00DB.js +3 -0
- package/dist/assets/hmr-LMNkvzP7.js +1 -0
- package/dist/assets/index-BSTajiPh.js +18 -0
- package/dist/assets/index-Br7E7qjt.css +1 -0
- package/dist/assets/reactor_browser-BbZdm6Aa.js +25 -0
- package/dist/assets/sentry_browser-BFJlXALZ.js +498 -0
- package/dist/assets/sentry_react-C4W8xEsl.js +3 -0
- package/dist/assets/virtual_ph_external-packages-CM1tCR4L.js +1 -0
- package/dist/assets/zod-C6yxFxyo.js +1 -0
- package/dist/index.html +17 -2
- package/heroku/config/nginx.conf.template +7 -18
- package/lib/package.copy.json +27 -57
- package/lib/src/components/analytics.js +1 -1
- package/lib/src/components/analytics.js.map +1 -1
- package/lib/src/components/app-loader.d.ts +1 -1
- package/lib/src/components/app-loader.d.ts.map +1 -1
- package/lib/src/components/app-loader.js +2 -5
- package/lib/src/components/app-loader.js.map +1 -1
- package/lib/src/components/app-skeleton.d.ts.map +1 -1
- package/lib/src/components/app-skeleton.js +1 -1
- package/lib/src/components/app-skeleton.js.map +1 -1
- package/lib/src/components/app.d.ts.map +1 -1
- package/lib/src/components/app.js +3 -4
- package/lib/src/components/app.js.map +1 -1
- package/lib/src/components/cookie-banner.d.ts.map +1 -1
- package/lib/src/components/cookie-banner.js +3 -4
- package/lib/src/components/cookie-banner.js.map +1 -1
- package/lib/src/components/document-editor-container.js +2 -2
- package/lib/src/components/document-editor-container.js.map +1 -1
- package/lib/src/components/drive-editor-container.js +2 -2
- package/lib/src/components/drive-editor-container.js.map +1 -1
- package/lib/src/components/editor-loader.d.ts +1 -1
- package/lib/src/components/editor-loader.d.ts.map +1 -1
- package/lib/src/components/editor-loader.js +1 -1
- package/lib/src/components/editor-loader.js.map +1 -1
- package/lib/src/components/editors.js +2 -2
- package/lib/src/components/editors.js.map +1 -1
- package/lib/src/components/footer.js +3 -2
- package/lib/src/components/footer.js.map +1 -1
- package/lib/src/components/index.d.ts +1 -2
- package/lib/src/components/index.d.ts.map +1 -1
- package/lib/src/components/index.js +1 -2
- package/lib/src/components/index.js.map +1 -1
- package/lib/src/components/login.js +1 -1
- package/lib/src/components/login.js.map +1 -1
- package/lib/src/components/modal/index.d.ts +17 -1
- package/lib/src/components/modal/index.d.ts.map +1 -1
- package/lib/src/components/modal/index.js +17 -1
- package/lib/src/components/modal/index.js.map +1 -1
- package/lib/src/components/modal/modals/AddDriveModal.d.ts.map +1 -1
- package/lib/src/components/modal/modals/AddDriveModal.js +2 -1
- package/lib/src/components/modal/modals/AddDriveModal.js.map +1 -1
- package/lib/src/components/modal/modals/ClearStorageModal.js +2 -2
- package/lib/src/components/modal/modals/ClearStorageModal.js.map +1 -1
- package/lib/src/components/modal/modals/CookiesPolicyModal.js +1 -1
- package/lib/src/components/modal/modals/CookiesPolicyModal.js.map +1 -1
- package/lib/src/components/modal/modals/CreateDocumentModal.js +1 -1
- package/lib/src/components/modal/modals/CreateDocumentModal.js.map +1 -1
- package/lib/src/components/modal/modals/DebugSettingsModal.d.ts.map +1 -1
- package/lib/src/components/modal/modals/DebugSettingsModal.js +3 -2
- package/lib/src/components/modal/modals/DebugSettingsModal.js.map +1 -1
- package/lib/src/components/modal/modals/DeleteDriveModal.d.ts.map +1 -1
- package/lib/src/components/modal/modals/DeleteDriveModal.js +2 -1
- package/lib/src/components/modal/modals/DeleteDriveModal.js.map +1 -1
- package/lib/src/components/modal/modals/DeleteItemModal.d.ts.map +1 -1
- package/lib/src/components/modal/modals/DeleteItemModal.js +2 -1
- package/lib/src/components/modal/modals/DeleteItemModal.js.map +1 -1
- package/lib/src/components/modal/modals/DisclaimerModal.js +1 -1
- package/lib/src/components/modal/modals/DisclaimerModal.js.map +1 -1
- package/lib/src/components/modal/modals/DriveSettingsModal.js +2 -2
- package/lib/src/components/modal/modals/DriveSettingsModal.js.map +1 -1
- package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.js +1 -1
- package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.js.map +1 -1
- package/lib/src/components/modal/modals/SettingsModal.d.ts.map +1 -1
- package/lib/src/components/modal/modals/SettingsModal.js +4 -6
- package/lib/src/components/modal/modals/SettingsModal.js.map +1 -1
- package/lib/src/components/modal/modals/UpgradeDriveModal.js +1 -1
- package/lib/src/components/modal/modals/UpgradeDriveModal.js.map +1 -1
- package/lib/src/components/modal/modals/settings/about.js +1 -1
- package/lib/src/components/modal/modals/settings/about.js.map +1 -1
- package/lib/src/components/modal/modals/settings/danger-zone.js +1 -1
- package/lib/src/components/modal/modals/settings/danger-zone.js.map +1 -1
- package/lib/src/components/modal/modals/settings/default-editor.js +1 -1
- package/lib/src/components/modal/modals/settings/default-editor.js.map +1 -1
- package/lib/src/components/modal/modals/settings/package-manager.d.ts +1 -1
- package/lib/src/components/modal/modals/settings/package-manager.d.ts.map +1 -1
- package/lib/src/components/modal/modals/settings/package-manager.js +4 -5
- package/lib/src/components/modal/modals/settings/package-manager.js.map +1 -1
- package/lib/src/components/ph-logo.js +1 -1
- package/lib/src/components/ph-logo.js.map +1 -1
- package/lib/src/components/reload-connect-toast.d.ts.map +1 -0
- package/lib/src/components/reload-connect-toast.js.map +1 -0
- package/lib/src/components/root.d.ts.map +1 -1
- package/lib/src/components/root.js +3 -4
- package/lib/src/components/root.js.map +1 -1
- package/lib/src/components/router.js +1 -1
- package/lib/src/components/router.js.map +1 -1
- package/lib/src/components/search-bar.d.ts.map +1 -1
- package/lib/src/components/search-bar.js +2 -1
- package/lib/src/components/search-bar.js.map +1 -1
- package/lib/src/components/sidebar.d.ts.map +1 -1
- package/lib/src/components/sidebar.js +3 -2
- package/lib/src/components/sidebar.js.map +1 -1
- package/lib/src/context/sentry-provider.js +1 -1
- package/lib/src/context/sentry-provider.js.map +1 -1
- package/lib/src/feature-flags.d.ts.map +1 -0
- package/lib/src/feature-flags.js.map +1 -0
- package/lib/src/globals.d.ts +1 -1
- package/lib/src/globals.d.ts.map +1 -1
- package/lib/src/hooks/useCheckLatestVersion.js +3 -3
- package/lib/src/hooks/useCheckLatestVersion.js.map +1 -1
- package/lib/src/index.d.ts +1 -8
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +1 -8
- package/lib/src/index.js.map +1 -1
- package/lib/src/main.js +1 -1
- package/lib/src/main.js.map +1 -1
- package/lib/src/pages/content.d.ts.map +1 -1
- package/lib/src/pages/content.js +2 -3
- package/lib/src/pages/content.js.map +1 -1
- package/lib/src/pages/index.d.ts +2 -1
- package/lib/src/pages/index.d.ts.map +1 -1
- package/lib/src/pages/index.js +2 -1
- package/lib/src/pages/index.js.map +1 -1
- package/lib/src/services/index.d.ts +6 -2
- package/lib/src/services/index.d.ts.map +1 -1
- package/lib/src/services/index.js +5 -2
- package/lib/src/services/index.js.map +1 -1
- package/lib/src/services/toast.d.ts +2 -2
- package/lib/src/services/toast.d.ts.map +1 -1
- package/lib/src/services/toast.js +1 -1
- package/lib/src/services/toast.js.map +1 -1
- package/lib/src/store/document-model.d.ts.map +1 -1
- package/lib/src/store/document-model.js +3 -3
- package/lib/src/store/document-model.js.map +1 -1
- package/lib/src/store/editor.d.ts +2 -2
- package/lib/src/store/editor.d.ts.map +1 -1
- package/lib/src/store/editor.js +6 -6
- package/lib/src/store/editor.js.map +1 -1
- package/lib/src/store/reactor.d.ts.map +1 -1
- package/lib/src/store/reactor.js +6 -21
- package/lib/src/store/reactor.js.map +1 -1
- package/lib/src/utils/drive-sections.d.ts +1 -1
- package/lib/src/utils/drive-sections.d.ts.map +1 -1
- package/lib/src/utils/drive-sections.js +1 -1
- package/lib/src/utils/drive-sections.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/vite.config.d.ts.map +1 -1
- package/lib/vite.config.js +23 -0
- package/lib/vite.config.js.map +1 -1
- package/package.copy.json +27 -57
- package/package.json +34 -64
- package/dist/assets/AddDriveModal-07mDwuqC.js +0 -248
- package/dist/assets/AddDriveModal-07mDwuqC.js.map +0 -1
- package/dist/assets/ClearStorageModal-NS7l69ap.js +0 -46
- package/dist/assets/ClearStorageModal-NS7l69ap.js.map +0 -1
- package/dist/assets/CookiesPolicyModal-C6dI4RKZ.js +0 -34
- package/dist/assets/CookiesPolicyModal-C6dI4RKZ.js.map +0 -1
- package/dist/assets/CreateDocumentModal-KKbJcBSL.js +0 -65
- package/dist/assets/CreateDocumentModal-KKbJcBSL.js.map +0 -1
- package/dist/assets/DebugSettingsModal-DXtCp24I.js +0 -5134
- package/dist/assets/DebugSettingsModal-DXtCp24I.js.map +0 -1
- package/dist/assets/DeleteDriveModal-MSDNucFy.js +0 -55
- package/dist/assets/DeleteDriveModal-MSDNucFy.js.map +0 -1
- package/dist/assets/DeleteItemModal-DW8_baau.js +0 -47
- package/dist/assets/DeleteItemModal-DW8_baau.js.map +0 -1
- package/dist/assets/DisclaimerModal-C6UyAzGM.js +0 -21
- package/dist/assets/DisclaimerModal-C6UyAzGM.js.map +0 -1
- package/dist/assets/DriveSettingsModal-DfM8Gfc9.js +0 -103
- package/dist/assets/DriveSettingsModal-DfM8Gfc9.js.map +0 -1
- package/dist/assets/ExportDocumentWithErrorsModal-cWlxN3T_.js +0 -44
- package/dist/assets/ExportDocumentWithErrorsModal-cWlxN3T_.js.map +0 -1
- package/dist/assets/SettingsModal-BlWJfQsu.js +0 -1723
- package/dist/assets/SettingsModal-BlWJfQsu.js.map +0 -1
- package/dist/assets/UpgradeDriveModal-BL7i2apX.js +0 -40
- package/dist/assets/UpgradeDriveModal-BL7i2apX.js.map +0 -1
- package/dist/assets/ccip-DhNdZlh7.js +0 -168
- package/dist/assets/ccip-DhNdZlh7.js.map +0 -1
- package/dist/assets/confirmation-modal-DM5tMFeL.js +0 -16
- package/dist/assets/confirmation-modal-DM5tMFeL.js.map +0 -1
- package/dist/assets/disclosure-iERpR3s0.js +0 -9
- package/dist/assets/disclosure-iERpR3s0.js.map +0 -1
- package/dist/assets/drive-by-id-BanyjI1t.js +0 -14
- package/dist/assets/drive-by-id-BanyjI1t.js.map +0 -1
- package/dist/assets/dropdown-menu-CXmhaaui.js +0 -1026
- package/dist/assets/dropdown-menu-CXmhaaui.js.map +0 -1
- package/dist/assets/editor-BKLE2wdL.js +0 -416
- package/dist/assets/editor-BKLE2wdL.js.map +0 -1
- package/dist/assets/editor-DO3KuTx4.js +0 -47585
- package/dist/assets/editor-DO3KuTx4.js.map +0 -1
- package/dist/assets/form-input-DTWcBXOv.js +0 -11
- package/dist/assets/form-input-DTWcBXOv.js.map +0 -1
- package/dist/assets/hmr-DO4QUuY_.js +0 -5
- package/dist/assets/hmr-DO4QUuY_.js.map +0 -1
- package/dist/assets/hoist-non-react-statics.cjs-BXLrPRPo.js +0 -224
- package/dist/assets/hoist-non-react-statics.cjs-BXLrPRPo.js.map +0 -1
- package/dist/assets/index-BRK2SPwe.js +0 -92924
- package/dist/assets/index-BRK2SPwe.js.map +0 -1
- package/dist/assets/index-CwYYkw3b.js +0 -183
- package/dist/assets/index-CwYYkw3b.js.map +0 -1
- package/dist/assets/index-D9xz2aln.js +0 -25570
- package/dist/assets/index-D9xz2aln.js.map +0 -1
- package/dist/assets/index-DOrl22sv.css +0 -6263
- package/dist/assets/index-DrtoT5He.js +0 -45
- package/dist/assets/index-DrtoT5He.js.map +0 -1
- package/dist/assets/index-ZC6AHfIK.js +0 -285
- package/dist/assets/index-ZC6AHfIK.js.map +0 -1
- package/dist/assets/index.esm-BaENpqse.js +0 -1801
- package/dist/assets/index.esm-BaENpqse.js.map +0 -1
- package/dist/assets/options-x29vXcTw.js +0 -81
- package/dist/assets/options-x29vXcTw.js.map +0 -1
- package/dist/assets/read-required-modal-CywEDaia.js +0 -44
- package/dist/assets/read-required-modal-CywEDaia.js.map +0 -1
- package/dist/assets/toggle-CFuMlRt5.js +0 -33
- package/dist/assets/toggle-CFuMlRt5.js.map +0 -1
- package/dist/assets/virtual_ph_external-packages-DawtJ3DU.js +0 -8
- package/dist/assets/virtual_ph_external-packages-DawtJ3DU.js.map +0 -1
- package/lib/feature-flags.d.ts.map +0 -1
- package/lib/feature-flags.js.map +0 -1
- package/lib/src/components/modal/modals/settings/index.d.ts +0 -5
- package/lib/src/components/modal/modals/settings/index.d.ts.map +0 -1
- package/lib/src/components/modal/modals/settings/index.js +0 -5
- package/lib/src/components/modal/modals/settings/index.js.map +0 -1
- package/lib/src/components/toast/index.d.ts +0 -2
- package/lib/src/components/toast/index.d.ts.map +0 -1
- package/lib/src/components/toast/index.js +0 -2
- package/lib/src/components/toast/index.js.map +0 -1
- package/lib/src/components/toast/reload-connect-toast.d.ts.map +0 -1
- package/lib/src/components/toast/reload-connect-toast.js.map +0 -1
- package/lib/src/pages/demo/index.d.ts +0 -2
- package/lib/src/pages/demo/index.d.ts.map +0 -1
- package/lib/src/pages/demo/index.js +0 -2
- package/lib/src/pages/demo/index.js.map +0 -1
- package/lib/src/services/renown/index.d.ts +0 -4
- package/lib/src/services/renown/index.d.ts.map +0 -1
- package/lib/src/services/renown/index.js +0 -4
- package/lib/src/services/renown/index.js.map +0 -1
- package/lib/src/services/storage/index.d.ts +0 -4
- package/lib/src/services/storage/index.d.ts.map +0 -1
- package/lib/src/services/storage/index.js +0 -4
- package/lib/src/services/storage/index.js.map +0 -1
- /package/lib/src/components/{toast/reload-connect-toast.d.ts → reload-connect-toast.d.ts} +0 -0
- /package/lib/src/components/{toast/reload-connect-toast.js → reload-connect-toast.js} +0 -0
- /package/lib/{feature-flags.d.ts → src/feature-flags.d.ts} +0 -0
- /package/lib/{feature-flags.js → src/feature-flags.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu-CXmhaaui.js","sources":["../../../../packages/design-system/dist/src/connect/components/dropdown-menu/dropdown-menu.js","../../../../node_modules/.pnpm/@radix-ui+react-menu@2.1.16_@types+react-dom@19.2.2_@types+react@19.2.2__@types+react@1_040ff2abcc161f3449c198580bf5de3c/node_modules/@radix-ui/react-menu/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.16_@types+react-dom@19.2.2_@types+react@19.2.2__@type_f90fa60edb4ba7a2bde2c9dcd66319cb/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../../../../packages/design-system/dist/src/powerhouse/components/dropdown-menu/dropdown-menu.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from \"@powerhousedao/design-system\";\nimport { twMerge } from \"tailwind-merge\";\nexport function ConnectDropdownMenu(props) {\n const { children, items, open, onItemClick, onOpenChange, menuClassName } = props;\n return (_jsxs(DropdownMenu, { onOpenChange: onOpenChange, open: open, children: [_jsx(DropdownMenuTrigger, { asChild: true, className: \"outline-none\", children: children }), _jsx(DropdownMenuContent, { className: twMerge(\"modal-shadow cursor-pointer rounded-2xl bg-white text-sm font-medium text-slate-500\", menuClassName), children: items.map(({ id, label, icon, className }) => (_jsxs(DropdownMenuItem, { className: twMerge(\"flex items-center px-5 py-2 outline-none first-of-type:rounded-t-2xl first-of-type:pt-3 last-of-type:rounded-b-2xl last-of-type:pb-3 hover:bg-slate-50\", className), onClick: (e) => e.stopPropagation(), onSelect: () => onItemClick(id), children: [icon ? _jsx(\"span\", { className: \"mr-2 inline-block\", children: icon }) : null, label] }, id))) })] }));\n}\n//# sourceMappingURL=dropdown-menu.js.map","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Content, Item, Label, Portal, Root, Trigger, } from \"@radix-ui/react-dropdown-menu\";\nimport { forwardRef } from \"react\";\nexport const DropdownMenu = Root;\nexport const DropdownMenuTrigger = Trigger;\nexport const DropdownMenuContent = forwardRef(function DropdownMenuContent({ children, ...delegatedProps }, forwardedRef) {\n return (_jsx(Portal, { children: _jsx(Content, { ...delegatedProps, ref: forwardedRef, children: children }) }));\n});\nexport const DropdownMenuLabel = Label;\nexport const DropdownMenuItem = Item;\n//# sourceMappingURL=dropdown-menu.js.map"],"names":["_jsxs","_jsx","React.useState","React.useRef","React.useEffect","jsx","PopperPrimitive.Root","React.useCallback","React.forwardRef","PopperPrimitive.Anchor","PORTAL_NAME","PortalPrimitive","CONTENT_NAME","RemoveScroll","React.Fragment","RovingFocusGroup.Root","PopperPrimitive.Content","GROUP_NAME","LABEL_NAME","ITEM_NAME","RovingFocusGroup.Item","CHECKBOX_ITEM_NAME","RADIO_GROUP_NAME","RADIO_ITEM_NAME","SEPARATOR_NAME","ARROW_NAME","PopperPrimitive.Arrow","SUB_TRIGGER_NAME","SUB_CONTENT_NAME","Content2","Item2","DropdownMenu","MenuPrimitive.Root","DropdownMenuTrigger","MenuPrimitive.Anchor","MenuPrimitive.Portal","DropdownMenuContent","MenuPrimitive.Content","MenuPrimitive.Group","MenuPrimitive.Label","DropdownMenuItem","MenuPrimitive.Item","MenuPrimitive.CheckboxItem","MenuPrimitive.RadioGroup","MenuPrimitive.RadioItem","MenuPrimitive.ItemIndicator","MenuPrimitive.Separator","MenuPrimitive.Arrow","MenuPrimitive.SubTrigger","MenuPrimitive.SubContent","Root","forwardRef","Portal","Content","Item"],"mappings":"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","x_google_ignoreList":[1,2]}
|
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
import { eG as useNodesInSelectedDrive, x as useSelectedFolder, eH as sortNodesByName, eI as useSelectedNode, b as useUser, eJ as useAllowList, w as useSelectedDriveSafe, Q as useSelectedDriveId, r as reactExports, j as jsxRuntimeExports, s as setSelectedDrive, p as setSelectedNode, I as Icon, eK as addFolder, at as getDriveSharingType, eL as useNodeActions, eM as getSyncStatusSync, t as twMerge, eN as showDeleteNodeModal, eO as useDrop, eP as useOnClickOutside, eQ as useEventListener, eR as useDocumentModelModules, P as PowerhouseButton, eS as showCreateDocumentModal, eT as isFileNodeKind, eU as useVirtualizer, R as React, eV as isFolderNodeKind, a5 as cn, eW as useSetPHDriveEditorConfig } from "./index-BRK2SPwe.js";
|
|
2
|
-
import { n as nodeOptionsMap, d as defaultNodeOptions } from "./options-x29vXcTw.js";
|
|
3
|
-
import { C as ConnectDropdownMenu } from "./dropdown-menu-CXmhaaui.js";
|
|
4
|
-
import "./index-ZC6AHfIK.js";
|
|
5
|
-
function useNodesInSelectedDriveOrFolder() {
|
|
6
|
-
const nodes = useNodesInSelectedDrive();
|
|
7
|
-
const selectedFolder = useSelectedFolder();
|
|
8
|
-
const selectedFolderId = selectedFolder?.id;
|
|
9
|
-
if (!nodes)
|
|
10
|
-
return [];
|
|
11
|
-
if (!selectedFolderId)
|
|
12
|
-
return sortNodesByName(nodes.filter((n) => !n.parentFolder));
|
|
13
|
-
return sortNodesByName(nodes.filter((n) => n.parentFolder === selectedFolderId));
|
|
14
|
-
}
|
|
15
|
-
function useNodePathById(id) {
|
|
16
|
-
const nodes = useNodesInSelectedDrive();
|
|
17
|
-
if (!nodes)
|
|
18
|
-
return [];
|
|
19
|
-
const path = [];
|
|
20
|
-
let current = nodes.find((n) => n.id === id);
|
|
21
|
-
while (current) {
|
|
22
|
-
path.push(current);
|
|
23
|
-
if (!current.parentFolder)
|
|
24
|
-
break;
|
|
25
|
-
current = nodes.find((n) => n.id === current?.parentFolder);
|
|
26
|
-
}
|
|
27
|
-
return path.reverse();
|
|
28
|
-
}
|
|
29
|
-
function useSelectedNodePath() {
|
|
30
|
-
const selectedNode = useSelectedNode();
|
|
31
|
-
return useNodePathById(selectedNode?.id);
|
|
32
|
-
}
|
|
33
|
-
function useUserPermissions() {
|
|
34
|
-
const user = useUser();
|
|
35
|
-
const allowList = useAllowList();
|
|
36
|
-
if (!allowList) {
|
|
37
|
-
return {
|
|
38
|
-
isAllowedToCreateDocuments: true,
|
|
39
|
-
isAllowedToEditDocuments: true
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
isAllowedToCreateDocuments: allowList.includes(user?.address ?? ""),
|
|
44
|
-
isAllowedToEditDocuments: allowList.includes(user?.address ?? "")
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function Breadcrumbs() {
|
|
48
|
-
const { isAllowedToCreateDocuments } = useUserPermissions();
|
|
49
|
-
const [selectedDrive] = useSelectedDriveSafe();
|
|
50
|
-
const selectedDriveId = useSelectedDriveId();
|
|
51
|
-
const selectedNodePath = useSelectedNodePath();
|
|
52
|
-
const [isCreating, setIsCreating] = reactExports.useState(false);
|
|
53
|
-
function onAddNew() {
|
|
54
|
-
setIsCreating(true);
|
|
55
|
-
}
|
|
56
|
-
function onSubmit(name) {
|
|
57
|
-
if (!isAllowedToCreateDocuments || !selectedDriveId)
|
|
58
|
-
return;
|
|
59
|
-
addFolder(selectedDriveId, name, selectedNodePath.at(-1)?.id).then((node) => {
|
|
60
|
-
setSelectedNode(node);
|
|
61
|
-
}).catch((error) => {
|
|
62
|
-
console.error(error);
|
|
63
|
-
}).finally(() => {
|
|
64
|
-
setIsCreating(false);
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
function onCancel() {
|
|
68
|
-
setIsCreating(false);
|
|
69
|
-
}
|
|
70
|
-
const hasSelectedDrive = !!selectedDrive;
|
|
71
|
-
const hasNodePath = !!selectedNodePath.length;
|
|
72
|
-
return jsxRuntimeExports.jsxs("div", { className: "flex h-9 flex-row items-center gap-2 p-6 text-gray-500", children: [hasSelectedDrive && jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Breadcrumb, { name: selectedDrive.state.global.name, onClick: () => setSelectedDrive(selectedDrive) }), jsxRuntimeExports.jsx("span", { children: "/" })] }), hasNodePath && selectedNodePath.map((node) => jsxRuntimeExports.jsxs(reactExports.Fragment, { children: [jsxRuntimeExports.jsx(Breadcrumb, { name: node.name, onClick: () => setSelectedNode(node) }), jsxRuntimeExports.jsx("span", { children: "/" })] }, node.id)), isAllowedToCreateDocuments && (isCreating ? jsxRuntimeExports.jsx(NodeInput, { className: "text-gray-800", defaultValue: "New Folder", onCancel, onSubmit, placeholder: "New Folder" }) : jsxRuntimeExports.jsxs("button", { type: "button", className: "ml-1 flex items-center justify-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 transition-colors hover:bg-gray-200 hover:text-gray-800", onClick: onAddNew, children: [jsxRuntimeExports.jsx(Icon, { name: "Plus", size: 14 }), "Add new"] }))] });
|
|
73
|
-
}
|
|
74
|
-
function Breadcrumb(props) {
|
|
75
|
-
const { name, onClick } = props;
|
|
76
|
-
return jsxRuntimeExports.jsx("div", { className: "transition-colors last-of-type:text-gray-800 hover:text-gray-800", onClick, role: "button", children: name });
|
|
77
|
-
}
|
|
78
|
-
function FileItem(props) {
|
|
79
|
-
const { fileNode, className, customDocumentIconSrc } = props;
|
|
80
|
-
const [mode, setMode] = reactExports.useState("READ");
|
|
81
|
-
const [isDropdownMenuOpen, setIsDropdownMenuOpen] = reactExports.useState(false);
|
|
82
|
-
const [selectedDrive] = useSelectedDriveSafe();
|
|
83
|
-
const sharingType = selectedDrive ? getDriveSharingType(selectedDrive) : "LOCAL";
|
|
84
|
-
const { dragProps } = useDrag({ node: fileNode });
|
|
85
|
-
const { isAllowedToCreateDocuments } = useUserPermissions();
|
|
86
|
-
const { onRenameNode, onDuplicateNode } = useNodeActions();
|
|
87
|
-
const isReadMode = mode === "READ";
|
|
88
|
-
const syncStatus = getSyncStatusSync(fileNode.id, sharingType);
|
|
89
|
-
const dropdownMenuHandlers = {
|
|
90
|
-
DUPLICATE: () => onDuplicateNode(fileNode),
|
|
91
|
-
RENAME: () => setMode("WRITE"),
|
|
92
|
-
DELETE: () => showDeleteNodeModal(fileNode)
|
|
93
|
-
};
|
|
94
|
-
const dropdownMenuOptions = Object.entries(nodeOptionsMap).map(([id, option]) => ({
|
|
95
|
-
...option,
|
|
96
|
-
id
|
|
97
|
-
})).filter((option) => defaultNodeOptions.includes(option.id));
|
|
98
|
-
function onSubmit(name) {
|
|
99
|
-
onRenameNode(name, fileNode).catch((error) => {
|
|
100
|
-
console.error(error);
|
|
101
|
-
}).finally(() => {
|
|
102
|
-
setMode("READ");
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
function onCancel() {
|
|
106
|
-
setMode("READ");
|
|
107
|
-
}
|
|
108
|
-
function onDropdownMenuOptionClick(itemId) {
|
|
109
|
-
const handler = dropdownMenuHandlers[itemId];
|
|
110
|
-
if (!handler) {
|
|
111
|
-
console.error(`No handler found for dropdown menu item: ${itemId}`);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
handler();
|
|
115
|
-
setIsDropdownMenuOpen(false);
|
|
116
|
-
}
|
|
117
|
-
const iconSrc = getDocumentIconSrc(fileNode.documentType, customDocumentIconSrc);
|
|
118
|
-
const iconNode = jsxRuntimeExports.jsxs("div", { className: "relative", children: [jsxRuntimeExports.jsx("img", { alt: "file icon", className: "max-w-none", height: 34, src: iconSrc, width: 32 }), isReadMode && syncStatus && jsxRuntimeExports.jsx("div", { className: "absolute bottom-[-2px] right-0 size-3 rounded-full bg-white", children: jsxRuntimeExports.jsx("div", { className: "absolute left-[-2px] top-[-2px]", children: jsxRuntimeExports.jsx(SyncStatusIcon, { overrideSyncIcons: { SUCCESS: "CheckCircleFill" }, syncStatus }) }) })] });
|
|
119
|
-
const containerStyles = twMerge("group flex h-12 cursor-pointer select-none items-center rounded-lg bg-gray-200 px-2 text-gray-600 hover:text-gray-800", className);
|
|
120
|
-
const content = isReadMode ? jsxRuntimeExports.jsxs("div", { className: "flex w-52 items-center justify-between", children: [jsxRuntimeExports.jsxs("div", { className: "mr-2 truncate group-hover:mr-0", children: [jsxRuntimeExports.jsx("div", { className: "max-h-6 truncate text-sm font-medium group-hover:text-gray-800", children: fileNode.name }), jsxRuntimeExports.jsx("div", { className: "max-h-6 truncate text-xs font-medium text-gray-600 group-hover:text-gray-800", children: fileNode.documentType })] }), isAllowedToCreateDocuments ? jsxRuntimeExports.jsx(ConnectDropdownMenu, { items: dropdownMenuOptions, onItemClick: onDropdownMenuOptionClick, onOpenChange: setIsDropdownMenuOpen, open: isDropdownMenuOpen, children: jsxRuntimeExports.jsx("button", { className: twMerge("hidden group-hover:block", isDropdownMenuOpen && "block"), onClick: (e) => {
|
|
121
|
-
e.stopPropagation();
|
|
122
|
-
setIsDropdownMenuOpen(true);
|
|
123
|
-
}, children: jsxRuntimeExports.jsx(Icon, { className: "text-gray-600", name: "VerticalDots" }) }) }) : null] }) : jsxRuntimeExports.jsx(NodeInput, { className: "ml-3 flex-1 font-medium", defaultValue: fileNode.name, onCancel, onSubmit });
|
|
124
|
-
return jsxRuntimeExports.jsx("div", { className: "relative w-64", onClick: () => setSelectedNode(fileNode), children: jsxRuntimeExports.jsx("div", { ...dragProps, className: containerStyles, children: jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [jsxRuntimeExports.jsx("div", { className: "mr-1.5", children: iconNode }), content] }) }) });
|
|
125
|
-
}
|
|
126
|
-
function FolderItem(props) {
|
|
127
|
-
const { folderNode, className } = props;
|
|
128
|
-
const { isAllowedToCreateDocuments } = useUserPermissions();
|
|
129
|
-
const [mode, setMode] = reactExports.useState("READ");
|
|
130
|
-
const [isDropdownMenuOpen, setIsDropdownMenuOpen] = reactExports.useState(false);
|
|
131
|
-
const [selectedDrive] = useSelectedDriveSafe();
|
|
132
|
-
const sharingType = selectedDrive ? getDriveSharingType(selectedDrive) : "LOCAL";
|
|
133
|
-
const { dragProps } = useDrag({ node: folderNode });
|
|
134
|
-
const { onRenameNode, onDuplicateNode } = useNodeActions();
|
|
135
|
-
const { isDropTarget, dropProps } = useDrop({
|
|
136
|
-
target: folderNode
|
|
137
|
-
});
|
|
138
|
-
const isReadMode = mode === "READ";
|
|
139
|
-
const syncStatus = getSyncStatusSync(folderNode.id, sharingType);
|
|
140
|
-
function onCancel() {
|
|
141
|
-
setMode("READ");
|
|
142
|
-
}
|
|
143
|
-
function onSubmit(name) {
|
|
144
|
-
onRenameNode(name, folderNode).catch((error) => {
|
|
145
|
-
console.error(error);
|
|
146
|
-
}).finally(() => {
|
|
147
|
-
setMode("READ");
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
const dropdownMenuHandlers = {
|
|
151
|
-
DUPLICATE: () => onDuplicateNode(folderNode),
|
|
152
|
-
RENAME: () => setMode("WRITE"),
|
|
153
|
-
DELETE: () => showDeleteNodeModal(folderNode)
|
|
154
|
-
};
|
|
155
|
-
const dropdownMenuOptions = Object.entries(nodeOptionsMap).map(([id, option]) => ({
|
|
156
|
-
...option,
|
|
157
|
-
id
|
|
158
|
-
})).filter((option) => defaultNodeOptions.includes(option.id));
|
|
159
|
-
function onDropdownMenuOptionClick(itemId) {
|
|
160
|
-
const handler = dropdownMenuHandlers[itemId];
|
|
161
|
-
if (!handler) {
|
|
162
|
-
console.error(`No handler found for dropdown menu item: ${itemId}`);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
handler();
|
|
166
|
-
setIsDropdownMenuOpen(false);
|
|
167
|
-
}
|
|
168
|
-
const content = isReadMode || !isAllowedToCreateDocuments ? jsxRuntimeExports.jsx("div", { className: "ml-3 max-h-6 truncate font-medium text-gray-600 group-hover:text-gray-800", children: folderNode.name }) : jsxRuntimeExports.jsx(NodeInput, { className: "ml-3 font-medium", defaultValue: folderNode.name, onCancel, onSubmit });
|
|
169
|
-
const containerStyles = twMerge("group flex h-12 cursor-pointer select-none items-center rounded-lg bg-gray-200 px-2", className, isDropTarget && "bg-blue-100");
|
|
170
|
-
return jsxRuntimeExports.jsx("div", { className: "relative w-64", onClick: () => setSelectedNode(folderNode), children: jsxRuntimeExports.jsxs("div", { ...dragProps, ...dropProps, className: containerStyles, children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center overflow-hidden", children: [jsxRuntimeExports.jsx("div", { className: "p-1", children: jsxRuntimeExports.jsxs("div", { className: "relative", children: [jsxRuntimeExports.jsx(Icon, { name: "FolderClose", size: 24 }), isReadMode && syncStatus ? jsxRuntimeExports.jsx("div", { className: "absolute bottom-[-3px] right-[-2px] size-3 rounded-full bg-white", children: jsxRuntimeExports.jsx("div", { className: "absolute left-[-2px] top-[-2px]", children: jsxRuntimeExports.jsx(SyncStatusIcon, { overrideSyncIcons: {
|
|
171
|
-
SUCCESS: "CheckCircleFill"
|
|
172
|
-
}, syncStatus }) }) }) : null] }) }), content] }), isReadMode && isAllowedToCreateDocuments ? jsxRuntimeExports.jsx(ConnectDropdownMenu, { items: dropdownMenuOptions, onItemClick: onDropdownMenuOptionClick, onOpenChange: setIsDropdownMenuOpen, open: isDropdownMenuOpen, children: jsxRuntimeExports.jsx("button", { className: twMerge("ml-auto hidden group-hover:block", isDropdownMenuOpen && "block"), onClick: (e) => {
|
|
173
|
-
e.stopPropagation();
|
|
174
|
-
setIsDropdownMenuOpen(true);
|
|
175
|
-
}, children: jsxRuntimeExports.jsx(Icon, { className: "text-gray-600", name: "VerticalDots" }) }) }) : null] }) });
|
|
176
|
-
}
|
|
177
|
-
function NodeInput(props) {
|
|
178
|
-
const { onSubmit, onCancel, defaultValue, className, minLength = 1, ...inputProps } = props;
|
|
179
|
-
const [value, setValue] = reactExports.useState(defaultValue ?? "");
|
|
180
|
-
const ref = reactExports.useRef(null);
|
|
181
|
-
useOnClickOutside(ref, handleSubmit);
|
|
182
|
-
useEventListener("keyup", (e) => {
|
|
183
|
-
if (e.key === "Enter") {
|
|
184
|
-
handleSubmit();
|
|
185
|
-
}
|
|
186
|
-
if (e.key === "Escape") {
|
|
187
|
-
onCancel();
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
reactExports.useLayoutEffect(() => {
|
|
191
|
-
setTimeout(() => {
|
|
192
|
-
ref.current?.focus();
|
|
193
|
-
ref.current?.select();
|
|
194
|
-
ref.current?.scroll({ left: 9999 });
|
|
195
|
-
}, 100);
|
|
196
|
-
}, []);
|
|
197
|
-
function handleSubmit() {
|
|
198
|
-
if (value.length >= minLength) {
|
|
199
|
-
onSubmit(value);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
return jsxRuntimeExports.jsx("input", { ...inputProps, autoFocus: true, className: twMerge("bg-inherit text-inherit outline-none", className), minLength, onChange: (e) => setValue(e.target.value), ref, required: true, type: "text", value });
|
|
203
|
-
}
|
|
204
|
-
const syncIcons = {
|
|
205
|
-
SYNCING: "Syncing",
|
|
206
|
-
SUCCESS: "Synced",
|
|
207
|
-
CONFLICT: "Error",
|
|
208
|
-
MISSING: "Circle",
|
|
209
|
-
ERROR: "Error",
|
|
210
|
-
INITIAL_SYNC: "Syncing"
|
|
211
|
-
};
|
|
212
|
-
function SyncStatusIcon(props) {
|
|
213
|
-
const { syncStatus, className, overrideSyncIcons = {}, ...iconProps } = props;
|
|
214
|
-
const icons = { ...syncIcons, ...overrideSyncIcons };
|
|
215
|
-
const syncStatusIcons = {
|
|
216
|
-
[INITIAL_SYNC]: jsxRuntimeExports.jsx(Icon, { size: 16, ...iconProps, className: twMerge("text-blue-900", className), name: icons[INITIAL_SYNC] }),
|
|
217
|
-
[SYNCING]: jsxRuntimeExports.jsx(Icon, { size: 16, ...iconProps, className: twMerge("text-blue-900", className), name: icons[SYNCING] }),
|
|
218
|
-
[SUCCESS]: jsxRuntimeExports.jsx(Icon, { size: 16, ...iconProps, className: twMerge("text-green-900", className), name: icons[SUCCESS] }),
|
|
219
|
-
[CONFLICT]: jsxRuntimeExports.jsx(Icon, { size: 16, ...iconProps, className: twMerge("text-orange-900", className), name: icons[CONFLICT] }),
|
|
220
|
-
[MISSING]: jsxRuntimeExports.jsx(Icon, { size: 16, ...iconProps, className: twMerge("text-red-900", className), name: icons[MISSING] }),
|
|
221
|
-
[ERROR]: jsxRuntimeExports.jsx(Icon, { size: 16, ...iconProps, className: twMerge("text-red-900", className), name: icons[ERROR] })
|
|
222
|
-
};
|
|
223
|
-
return syncStatusIcons[syncStatus];
|
|
224
|
-
}
|
|
225
|
-
const BUDGET = "powerhouse/budget-statement";
|
|
226
|
-
const DEFAULT = "powerhouse/default";
|
|
227
|
-
const MAKERDAO_RWA_PORTFOLIO = "makerdao/rwa-portfolio";
|
|
228
|
-
const documentTypes = [BUDGET, DEFAULT, MAKERDAO_RWA_PORTFOLIO];
|
|
229
|
-
const BudgetStatementImg = "data:image/png;base64,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";
|
|
230
|
-
const MakerdaoRWAPortfolioImg = "/assets/rwa-report-Bb0W5-ac.png";
|
|
231
|
-
const DefaultImg = "data:image/png;base64,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";
|
|
232
|
-
const iconMap = {
|
|
233
|
-
[BUDGET]: BudgetStatementImg,
|
|
234
|
-
[DEFAULT]: DefaultImg,
|
|
235
|
-
[MAKERDAO_RWA_PORTFOLIO]: MakerdaoRWAPortfolioImg
|
|
236
|
-
};
|
|
237
|
-
const SYNCING = "SYNCING";
|
|
238
|
-
const SUCCESS = "SUCCESS";
|
|
239
|
-
const CONFLICT = "CONFLICT";
|
|
240
|
-
const MISSING = "MISSING";
|
|
241
|
-
const ERROR = "ERROR";
|
|
242
|
-
const INITIAL_SYNC = "INITIAL_SYNC";
|
|
243
|
-
function useDrag(props) {
|
|
244
|
-
const { node } = props;
|
|
245
|
-
const [isDragging, setIsDragging] = reactExports.useState(false);
|
|
246
|
-
const onDragStart = reactExports.useCallback((event) => {
|
|
247
|
-
event.dataTransfer.setData("UI_NODE", JSON.stringify(node));
|
|
248
|
-
}, [node]);
|
|
249
|
-
const onDragEnd = reactExports.useCallback(() => {
|
|
250
|
-
setIsDragging(false);
|
|
251
|
-
}, []);
|
|
252
|
-
return reactExports.useMemo(() => {
|
|
253
|
-
return {
|
|
254
|
-
isDragging,
|
|
255
|
-
dragProps: {
|
|
256
|
-
draggable: true,
|
|
257
|
-
onDragStart,
|
|
258
|
-
onDragEnd
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
}, [isDragging, onDragEnd, onDragStart]);
|
|
262
|
-
}
|
|
263
|
-
function getDocumentIconSrc(documentType, customDocumentIconSrc) {
|
|
264
|
-
if (customDocumentIconSrc) {
|
|
265
|
-
return customDocumentIconSrc;
|
|
266
|
-
}
|
|
267
|
-
if (documentTypes.includes(documentType)) {
|
|
268
|
-
return iconMap[documentType];
|
|
269
|
-
}
|
|
270
|
-
return iconMap[DEFAULT];
|
|
271
|
-
}
|
|
272
|
-
const useWindowSize = () => {
|
|
273
|
-
const [windowSize, setWindowSize] = reactExports.useState({
|
|
274
|
-
innerWidth: window.innerWidth,
|
|
275
|
-
innerHeight: window.innerHeight
|
|
276
|
-
});
|
|
277
|
-
reactExports.useEffect(() => {
|
|
278
|
-
const windowSizeHandler = () => {
|
|
279
|
-
setWindowSize({
|
|
280
|
-
innerWidth: window.innerWidth,
|
|
281
|
-
innerHeight: window.innerHeight
|
|
282
|
-
});
|
|
283
|
-
};
|
|
284
|
-
window.addEventListener("resize", windowSizeHandler);
|
|
285
|
-
return () => {
|
|
286
|
-
window.removeEventListener("resize", windowSizeHandler);
|
|
287
|
-
};
|
|
288
|
-
}, []);
|
|
289
|
-
return windowSize;
|
|
290
|
-
};
|
|
291
|
-
function getDocumentSpec(doc) {
|
|
292
|
-
return doc.documentModel.global;
|
|
293
|
-
}
|
|
294
|
-
function CreateDocument() {
|
|
295
|
-
const { isAllowedToCreateDocuments } = useUserPermissions();
|
|
296
|
-
const documentModelModules = useDocumentModelModules();
|
|
297
|
-
const nonDriveDocumentModelModules = documentModelModules?.filter((module) => module.documentModel.global.id !== "powerhouse/document-drive");
|
|
298
|
-
if (!isAllowedToCreateDocuments)
|
|
299
|
-
return null;
|
|
300
|
-
return jsxRuntimeExports.jsxs("div", { className: "px-6 py-4", children: [jsxRuntimeExports.jsx("h3", { className: "mb-3 text-xl font-bold text-gray-600", children: "New document" }), jsxRuntimeExports.jsx("div", { className: "flex w-full flex-wrap gap-4", children: nonDriveDocumentModelModules?.map((doc) => {
|
|
301
|
-
const spec = getDocumentSpec(doc);
|
|
302
|
-
return jsxRuntimeExports.jsx(PowerhouseButton, { color: "light", title: spec.name, "aria-description": spec.description, onClick: () => showCreateDocumentModal(spec.id), children: jsxRuntimeExports.jsx("span", { className: "text-sm", children: spec.name }) }, spec.id);
|
|
303
|
-
}) })] });
|
|
304
|
-
}
|
|
305
|
-
const GAP = 8;
|
|
306
|
-
const ITEM_WIDTH = 256;
|
|
307
|
-
const ITEM_HEIGHT = 48;
|
|
308
|
-
const USED_SPACE = 420;
|
|
309
|
-
function FileContentView() {
|
|
310
|
-
const parentRef = reactExports.useRef(null);
|
|
311
|
-
const windowSize = useWindowSize();
|
|
312
|
-
const availableWidth = windowSize.innerWidth - USED_SPACE;
|
|
313
|
-
const nodes = useNodesInSelectedDriveOrFolder();
|
|
314
|
-
const fileNodes = nodes.filter((n) => isFileNodeKind(n));
|
|
315
|
-
const columnCount = Math.floor(availableWidth / (ITEM_WIDTH + GAP)) || 1;
|
|
316
|
-
const rowCount = Math.ceil(fileNodes.length / columnCount);
|
|
317
|
-
const rowVirtualizer = useVirtualizer({
|
|
318
|
-
count: rowCount,
|
|
319
|
-
getScrollElement: () => parentRef.current,
|
|
320
|
-
estimateSize: (index) => {
|
|
321
|
-
if (index > 0) {
|
|
322
|
-
return ITEM_HEIGHT + GAP;
|
|
323
|
-
}
|
|
324
|
-
return ITEM_HEIGHT;
|
|
325
|
-
},
|
|
326
|
-
overscan: 5
|
|
327
|
-
});
|
|
328
|
-
const columnVirtualizer = useVirtualizer({
|
|
329
|
-
horizontal: true,
|
|
330
|
-
count: columnCount,
|
|
331
|
-
getScrollElement: () => parentRef.current,
|
|
332
|
-
estimateSize: (index) => {
|
|
333
|
-
if (index > 0) {
|
|
334
|
-
return ITEM_WIDTH + GAP;
|
|
335
|
-
}
|
|
336
|
-
return ITEM_WIDTH;
|
|
337
|
-
},
|
|
338
|
-
overscan: 5
|
|
339
|
-
});
|
|
340
|
-
const getItemIndex = (rowIndex, columnIndex) => rowIndex * columnCount + columnIndex;
|
|
341
|
-
const getItem = (rowIndex, columnIndex) => {
|
|
342
|
-
const index = getItemIndex(rowIndex, columnIndex);
|
|
343
|
-
return fileNodes[index] || null;
|
|
344
|
-
};
|
|
345
|
-
if (fileNodes.length === 0) {
|
|
346
|
-
return jsxRuntimeExports.jsx("div", { className: "mb-8 text-sm text-gray-400", children: "No documents or files 📄" });
|
|
347
|
-
}
|
|
348
|
-
const renderItem = (rowIndex, columnIndex) => {
|
|
349
|
-
const fileNode = getItem(rowIndex, columnIndex);
|
|
350
|
-
if (!fileNode) {
|
|
351
|
-
return null;
|
|
352
|
-
}
|
|
353
|
-
return jsxRuntimeExports.jsx("div", { style: {
|
|
354
|
-
marginLeft: columnIndex === 0 ? 0 : GAP
|
|
355
|
-
}, children: jsxRuntimeExports.jsx(FileItem, { fileNode }, fileNode.id) });
|
|
356
|
-
};
|
|
357
|
-
return jsxRuntimeExports.jsx("div", { ref: parentRef, style: {
|
|
358
|
-
width: `100%`,
|
|
359
|
-
overflow: "auto"
|
|
360
|
-
}, children: jsxRuntimeExports.jsx("div", { style: {
|
|
361
|
-
height: `${rowVirtualizer.getTotalSize()}px`,
|
|
362
|
-
width: `${columnVirtualizer.getTotalSize()}px`,
|
|
363
|
-
position: "relative"
|
|
364
|
-
}, children: rowVirtualizer.getVirtualItems().map((virtualRow) => jsxRuntimeExports.jsx(React.Fragment, { children: columnVirtualizer.getVirtualItems().map((virtualColumn) => jsxRuntimeExports.jsx("div", { style: {
|
|
365
|
-
position: "absolute",
|
|
366
|
-
top: 0,
|
|
367
|
-
left: 0,
|
|
368
|
-
marginTop: virtualRow.index === 0 ? 0 : GAP,
|
|
369
|
-
width: `${virtualColumn.size}px`,
|
|
370
|
-
height: `${virtualRow.size}px`,
|
|
371
|
-
transform: `translateX(${virtualColumn.start}px) translateY(${virtualRow.start}px)`
|
|
372
|
-
}, children: renderItem(virtualRow.index, virtualColumn.index) }, virtualColumn.key)) }, virtualRow.key)) }) });
|
|
373
|
-
}
|
|
374
|
-
function FolderView(props) {
|
|
375
|
-
const { className } = props;
|
|
376
|
-
const nodes = useNodesInSelectedDriveOrFolder();
|
|
377
|
-
const selectedFolder = useSelectedFolder();
|
|
378
|
-
const folderNodes = nodes.filter((n) => isFolderNodeKind(n));
|
|
379
|
-
const { isDropTarget, dropProps } = useDrop({
|
|
380
|
-
target: selectedFolder
|
|
381
|
-
});
|
|
382
|
-
return jsxRuntimeExports.jsxs("div", { className: twMerge("rounded-md border-2 border-transparent p-2", isDropTarget && "border-dashed border-blue-100", className), ...dropProps, children: [jsxRuntimeExports.jsx(DriveLayout.ContentSection, { title: "Folders", className: "mb-4", children: folderNodes.length > 0 ? folderNodes.map((folderNode) => jsxRuntimeExports.jsx(FolderItem, { folderNode }, folderNode.id)) : jsxRuntimeExports.jsx("div", { className: "mb-8 text-sm text-gray-400", children: "No documents or files 📄" }) }), jsxRuntimeExports.jsx(DriveLayout.ContentSection, { title: "Documents and files", children: jsxRuntimeExports.jsx("div", { className: "w-full", children: jsxRuntimeExports.jsx(FileContentView, {}) }) })] });
|
|
383
|
-
}
|
|
384
|
-
function DriveLayout({ children, className, ...props }) {
|
|
385
|
-
return jsxRuntimeExports.jsx(DriveLayout.Container, { className, ...props, children });
|
|
386
|
-
}
|
|
387
|
-
DriveLayout.Container = function DriveLayoutContainer({ children, className, containerProps, ...props }) {
|
|
388
|
-
return jsxRuntimeExports.jsx("div", { className: cn("flex grow flex-col overflow-auto rounded-2xl bg-gray-50 p-2", className), ...containerProps, ...props, children });
|
|
389
|
-
};
|
|
390
|
-
DriveLayout.Header = function DriveLayoutHeader({ children, className, containerProps, ...props }) {
|
|
391
|
-
return jsxRuntimeExports.jsx("div", { className: cn("flex-0", className), ...containerProps, ...props, children });
|
|
392
|
-
};
|
|
393
|
-
DriveLayout.Content = function DriveLayoutContent({ children, className, containerProps, ...props }) {
|
|
394
|
-
return jsxRuntimeExports.jsx("div", { className: cn("mb-5 flex-1 px-4", className), ...containerProps, ...props, children });
|
|
395
|
-
};
|
|
396
|
-
DriveLayout.ContentSection = function DriveLayoutContentSection({ title, children, className, containerProps, ...props }) {
|
|
397
|
-
return jsxRuntimeExports.jsxs("div", { className: cn(className), ...containerProps, ...props, children: [title && jsxRuntimeExports.jsx("div", { className: "mb-4 text-base font-semibold text-gray-600", children: title }), jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2", children })] });
|
|
398
|
-
};
|
|
399
|
-
DriveLayout.Footer = function DriveLayoutFooter({ children, className, containerProps, ...props }) {
|
|
400
|
-
return jsxRuntimeExports.jsx("div", { className: cn("flex-0", className), ...containerProps, ...props, children });
|
|
401
|
-
};
|
|
402
|
-
const editorConfig = {
|
|
403
|
-
allowedDocumentTypes: [],
|
|
404
|
-
isDragAndDropEnabled: true
|
|
405
|
-
};
|
|
406
|
-
function Editor(props) {
|
|
407
|
-
useSetPHDriveEditorConfig(editorConfig);
|
|
408
|
-
const { className, children } = props;
|
|
409
|
-
const { isDropTarget, dropProps } = useDrop();
|
|
410
|
-
const showDocumentEditor = !!children;
|
|
411
|
-
return jsxRuntimeExports.jsxs(DriveLayout, { className, children: [!showDocumentEditor && jsxRuntimeExports.jsx(DriveLayout.Header, { children: jsxRuntimeExports.jsx(Breadcrumbs, {}) }), showDocumentEditor ? children : jsxRuntimeExports.jsx(DriveLayout.Content, { ...dropProps, className: isDropTarget ? "rounded-xl bg-blue-100" : "", children: jsxRuntimeExports.jsx(FolderView, {}) }), !showDocumentEditor && jsxRuntimeExports.jsx(DriveLayout.Footer, { children: jsxRuntimeExports.jsx(CreateDocument, {}) })] });
|
|
412
|
-
}
|
|
413
|
-
export {
|
|
414
|
-
Editor as default
|
|
415
|
-
};
|
|
416
|
-
//# sourceMappingURL=editor-BKLE2wdL.js.map
|