@powerhousedao/connect 6.2.3-dev.23 → 6.2.3-dev.25

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.
Files changed (111) hide show
  1. package/dist/{AddDriveModal-CW-ZSWkf.js → AddDriveModal-DhNfP94R.js} +4 -4
  2. package/dist/{AddDriveModal-CW-ZSWkf.js.map → AddDriveModal-DhNfP94R.js.map} +1 -1
  3. package/dist/{ClearStorageModal-BYFLwlea.js → ClearStorageModal-InfiThmU.js} +4 -4
  4. package/dist/{ClearStorageModal-BYFLwlea.js.map → ClearStorageModal-InfiThmU.js.map} +1 -1
  5. package/dist/{ConfirmDocumentUpgradeModal-BBrFlHp_.js → ConfirmDocumentUpgradeModal-DcOZy20m.js} +6 -5
  6. package/dist/{ConfirmDocumentUpgradeModal-BBrFlHp_.js.map → ConfirmDocumentUpgradeModal-DcOZy20m.js.map} +1 -1
  7. package/dist/{CookiesPolicyModal-lKdOuTNm.js → CookiesPolicyModal-BLw4pnhn.js} +3 -3
  8. package/dist/{CookiesPolicyModal-lKdOuTNm.js.map → CookiesPolicyModal-BLw4pnhn.js.map} +1 -1
  9. package/dist/{CreateDocumentModal-HmK-78sB.js → CreateDocumentModal-Bmv0V-kY.js} +5 -4
  10. package/dist/{CreateDocumentModal-HmK-78sB.js.map → CreateDocumentModal-Bmv0V-kY.js.map} +1 -1
  11. package/dist/{DebugSettingsModal-BLs1jLfT.js → DebugSettingsModal-DGB3wq4y.js} +6 -6
  12. package/dist/{DebugSettingsModal-BLs1jLfT.js.map → DebugSettingsModal-DGB3wq4y.js.map} +1 -1
  13. package/dist/{DeleteDriveModal-Cyw6hwc2.js → DeleteDriveModal-CjGnG0ht.js} +4 -4
  14. package/dist/{DeleteDriveModal-Cyw6hwc2.js.map → DeleteDriveModal-CjGnG0ht.js.map} +1 -1
  15. package/dist/{DeleteItemModal-CiFwstZx.js → DeleteItemModal-BbY_4_xT.js} +4 -4
  16. package/dist/{DeleteItemModal-CiFwstZx.js.map → DeleteItemModal-BbY_4_xT.js.map} +1 -1
  17. package/dist/{DisclaimerModal-DIRsjUvu.js → DisclaimerModal-DuglmEwL.js} +3 -3
  18. package/dist/{DisclaimerModal-DIRsjUvu.js.map → DisclaimerModal-DuglmEwL.js.map} +1 -1
  19. package/dist/{DocumentVersionUnsupportedModal-KftC3-jr.js → DocumentVersionUnsupportedModal-C4fy7fZ6.js} +3 -3
  20. package/dist/{DocumentVersionUnsupportedModal-KftC3-jr.js.map → DocumentVersionUnsupportedModal-C4fy7fZ6.js.map} +1 -1
  21. package/dist/{DownloadDocumentWithErrorsModal-CxsR74d-.js → DownloadDocumentWithErrorsModal-BsPQ5qgy.js} +5 -4
  22. package/dist/{DownloadDocumentWithErrorsModal-CxsR74d-.js.map → DownloadDocumentWithErrorsModal-BsPQ5qgy.js.map} +1 -1
  23. package/dist/{DriveAuthRequiredModal-BoqnnNKT.js → DriveAuthRequiredModal-CtsB0kwH.js} +4 -4
  24. package/dist/{DriveAuthRequiredModal-BoqnnNKT.js.map → DriveAuthRequiredModal-CtsB0kwH.js.map} +1 -1
  25. package/dist/{DriveSettingsModal-DRarHRIb.js → DriveSettingsModal-d1L0eYof.js} +3 -3
  26. package/dist/{DriveSettingsModal-DRarHRIb.js.map → DriveSettingsModal-d1L0eYof.js.map} +1 -1
  27. package/dist/{InspectorModal-BnJgQP8R.js → InspectorModal-CITS4ldi.js} +11 -9
  28. package/dist/{InspectorModal-BnJgQP8R.js.map → InspectorModal-CITS4ldi.js.map} +1 -1
  29. package/dist/{LoginModal-DhQTxsoG.js → LoginModal-CI0ogC2-.js} +4 -4
  30. package/dist/{LoginModal-DhQTxsoG.js.map → LoginModal-CI0ogC2-.js.map} +1 -1
  31. package/dist/{MissingPackageModal-Bar7ErIs.js → MissingPackageModal-Dmu03EX7.js} +4 -4
  32. package/dist/{MissingPackageModal-Bar7ErIs.js.map → MissingPackageModal-Dmu03EX7.js.map} +1 -1
  33. package/dist/{OpenFileDocumentsModal-0l2dkdEB.js → OpenFileDocumentsModal-Cym38LC9.js} +6 -5
  34. package/dist/{OpenFileDocumentsModal-0l2dkdEB.js.map → OpenFileDocumentsModal-Cym38LC9.js.map} +1 -1
  35. package/dist/{SettingsModal-H1j2W31l.js → SettingsModal-Bqch-LlY.js} +15 -11
  36. package/dist/{SettingsModal-H1j2W31l.js.map → SettingsModal-Bqch-LlY.js.map} +1 -1
  37. package/dist/{UpgradeDriveModal-C8scFkuq.js → UpgradeDriveModal-CXX6D5Au.js} +3 -3
  38. package/dist/{UpgradeDriveModal-C8scFkuq.js.map → UpgradeDriveModal-CXX6D5Au.js.map} +1 -1
  39. package/dist/app-loader-DDaPW-Ky.js +4 -0
  40. package/dist/{app-loader-CEjrJHls.js → app-loader-k3McuyRp.js} +57 -51
  41. package/dist/{app-loader-CEjrJHls.js.map → app-loader-k3McuyRp.js.map} +1 -1
  42. package/dist/{app-skeleton-C6RjKQuy.js → app-skeleton--Me5zlSz.js} +6 -5
  43. package/dist/{app-skeleton-C6RjKQuy.js.map → app-skeleton--Me5zlSz.js.map} +1 -1
  44. package/dist/{app-skeleton-BQts0IHn.js → app-skeleton-CBN4tenZ.js} +3 -3
  45. package/dist/{boot-uobbAyWT.js → boot-DPNEOI2A.js} +6 -6
  46. package/dist/{boot-uobbAyWT.js.map → boot-DPNEOI2A.js.map} +1 -1
  47. package/dist/{buffer-Bu1eWySI.js → buffer-DNTcuap_.js} +3 -3
  48. package/dist/{buffer-Bu1eWySI.js.map → buffer-DNTcuap_.js.map} +1 -1
  49. package/dist/{build-info-BKKhnRdh.js → build-info-BW_vU5c0.js} +5 -5
  50. package/dist/{build-info-BKKhnRdh.js.map → build-info-BW_vU5c0.js.map} +1 -1
  51. package/dist/{components-ChCIuJW9.js → components-i7X_YR6e.js} +4 -4
  52. package/dist/{connect.config-BofwIsWJ.js → connect.config-Dgs13R1s.js} +6 -6
  53. package/dist/{connect.config-BofwIsWJ.js.map → connect.config-Dgs13R1s.js.map} +1 -1
  54. package/dist/{connection-state-DAqW06pk.js → connection-state-Cy8xRCm_.js} +6 -6
  55. package/dist/{connection-state-DAqW06pk.js.map → connection-state-Cy8xRCm_.js.map} +1 -1
  56. package/dist/{cookie-banner-BQescTYk.js → cookie-banner-CSF930bl.js} +5 -5
  57. package/dist/{cookie-banner-BQescTYk.js.map → cookie-banner-CSF930bl.js.map} +1 -1
  58. package/dist/{i18n-90Q8hAPL.js → i18n-CTgT1HG-.js} +3 -3
  59. package/dist/{i18n-90Q8hAPL.js.map → i18n-CTgT1HG-.js.map} +1 -1
  60. package/dist/{load-G--MiC6j.js → load-C1kCFFvW.js} +13 -11
  61. package/dist/{load-G--MiC6j.js.map → load-C1kCFFvW.js.map} +1 -1
  62. package/dist/main.d.ts +2 -1
  63. package/dist/main.js +4 -4
  64. package/dist/main.js.map +1 -1
  65. package/dist/{package-manager-CKEdIJGv.js → package-manager-Bw4hKQ3s.js} +5 -5
  66. package/dist/{package-manager-CKEdIJGv.js.map → package-manager-Bw4hKQ3s.js.map} +1 -1
  67. package/dist/{pglite-major-D3sdYMs2.js → pglite-major-BbmMK26m.js} +3 -3
  68. package/dist/{pglite-major-D3sdYMs2.js.map → pglite-major-BbmMK26m.js.map} +1 -1
  69. package/dist/{pglite-migrate-core-BIWwtl5e.js → pglite-migrate-core-o88cWesm.js} +8 -6
  70. package/dist/{pglite-migrate-core-BIWwtl5e.js.map → pglite-migrate-core-o88cWesm.js.map} +1 -1
  71. package/dist/{pglite-seed-ChNTfFkc.js → pglite-seed-D6fqQApT.js} +4 -4
  72. package/dist/{pglite-seed-ChNTfFkc.js.map → pglite-seed-D6fqQApT.js.map} +1 -1
  73. package/dist/pglite.worker.d.ts +2 -1
  74. package/dist/pglite.worker.js +4 -3
  75. package/dist/pglite.worker.js.map +1 -1
  76. package/dist/pglite.worker.legacy.d.ts +2 -1
  77. package/dist/pglite.worker.legacy.js +4 -3
  78. package/dist/pglite.worker.legacy.js.map +1 -1
  79. package/dist/{preferences-store-Coa1SHvi.js → preferences-store-Bekp7tv-.js} +5 -5
  80. package/dist/{preferences-store-Coa1SHvi.js.map → preferences-store-Bekp7tv-.js.map} +1 -1
  81. package/dist/{pwa-manifest-link-B38lBmEu.js → pwa-manifest-link-DQRJpF0r.js} +3 -3
  82. package/dist/{pwa-manifest-link-B38lBmEu.js.map → pwa-manifest-link-DQRJpF0r.js.map} +1 -1
  83. package/dist/{reactor-CWJmSgjl.js → reactor-B9xdtXLQ.js} +39 -23
  84. package/dist/reactor-B9xdtXLQ.js.map +1 -0
  85. package/dist/reactor.worker.d.ts +2 -1
  86. package/dist/reactor.worker.js +24 -12
  87. package/dist/reactor.worker.js.map +1 -1
  88. package/dist/{registerServiceWorker-BAbPbSW4.js → registerServiceWorker-Cy1G2rCq.js} +5 -5
  89. package/dist/{registerServiceWorker-BAbPbSW4.js.map → registerServiceWorker-Cy1G2rCq.js.map} +1 -1
  90. package/dist/renown-trust-DRgHpxlZ.js +34 -0
  91. package/dist/renown-trust-DRgHpxlZ.js.map +1 -0
  92. package/dist/{runtime-config-DL3QjcfM.js → runtime-config-DtJIUgYw.js} +3 -3
  93. package/dist/{runtime-config-DL3QjcfM.js.map → runtime-config-DtJIUgYw.js.map} +1 -1
  94. package/dist/{sentry-QXKgQmr2.js → sentry-jfDyrxdX.js} +3 -3
  95. package/dist/{sentry-QXKgQmr2.js.map → sentry-jfDyrxdX.js.map} +1 -1
  96. package/dist/start-connect.d.ts +4 -5
  97. package/dist/start-connect.d.ts.map +1 -1
  98. package/dist/start-connect.js +4 -4
  99. package/dist/start-connect.js.map +1 -1
  100. package/dist/style.css +932 -272
  101. package/dist/{toast-CO6ChlzE.js → toast-C6WW-_O-.js} +3 -3
  102. package/dist/{toast-CO6ChlzE.js.map → toast-C6WW-_O-.js.map} +1 -1
  103. package/dist/{use-renown-login-rS9wfcuG.js → use-renown-login-BzOSQETV.js} +3 -3
  104. package/dist/{use-renown-login-rS9wfcuG.js.map → use-renown-login-BzOSQETV.js.map} +1 -1
  105. package/dist/{useIsEmbedded-B_AIFqBu.js → useIsEmbedded-BWJ0qb7w.js} +3 -3
  106. package/dist/{useIsEmbedded-B_AIFqBu.js.map → useIsEmbedded-BWJ0qb7w.js.map} +1 -1
  107. package/dist/{useRegistryPackages-C2WHmqn4.js → useRegistryPackages-BcKgNT71.js} +18 -12
  108. package/dist/{useRegistryPackages-C2WHmqn4.js.map → useRegistryPackages-BcKgNT71.js.map} +1 -1
  109. package/package.json +17 -15
  110. package/dist/app-loader-Cpuo40Tm.js +0 -4
  111. package/dist/reactor-CWJmSgjl.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsModal-H1j2W31l.js","sources":["../package.json","../src/components/modal/modals/settings/about.tsx","../src/components/modal/modals/settings/ai-assistant.tsx","../src/components/modal/modals/settings/danger-zone.tsx","../src/components/modal/modals/settings/default-editor.tsx","../src/components/modal/modals/settings/package-manager.tsx","../src/components/modal/modals/SettingsModal.tsx"],"sourcesContent":["","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport {\n getGitSha,\n getGitUrl,\n packageJson,\n shortGitSha,\n} from \"@powerhousedao/connect/utils\";\nimport { Icon } from \"@powerhousedao/design-system\";\nimport { About as BaseAbout } from \"@powerhousedao/design-system/connect\";\nimport {\n closePHModal,\n DriveCollectionId,\n showPHModal,\n useDrives,\n useDriveSystemInfo,\n useSyncList,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useMemo } from \"react\";\n\nexport const About: React.FC = () => {\n const onOpenInspector = () => {\n closePHModal();\n showPHModal({ type: \"inspector\" });\n };\n\n return (\n <div>\n <BaseAbout\n packageJson={packageJson}\n phCliVersion={\n typeof connectConfig.phCliVersion === \"string\"\n ? connectConfig.phCliVersion\n : undefined\n }\n />\n <AppGitHash />\n <ConnectedDrives />\n <div className=\"bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Inspector</h2>\n <p className=\"mb-3 text-sm font-normal text-foreground\">\n Explore the local database and sync state for debugging.\n </p>\n <button\n className=\"flex items-center gap-x-2 rounded-md border border-border bg-transparent px-3 py-1 text-sm font-medium text-foreground transition-colors hover:hover-effect\"\n onClick={onOpenInspector}\n type=\"button\"\n >\n Open Inspector <Icon name=\"CircleInfo\" size={16} />\n </button>\n </div>\n </div>\n );\n};\n\nfunction AppGitHash() {\n const sha = getGitSha();\n if (sha === \"unknown\") return null;\n const url = getGitUrl();\n const label = shortGitSha(sha);\n return (\n <div className=\"bg-background p-3 text-sm\">\n <span className=\"font-semibold\">Git hash: </span>\n {url ? (\n <a\n className=\"font-mono underline\"\n href={url}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={sha}\n >\n {label}\n </a>\n ) : (\n <span className=\"font-mono\" title={sha}>\n {label}\n </span>\n )}\n </div>\n );\n}\n\nfunction ConnectedDrives() {\n const drives = useDrives() ?? [];\n const remotes = useSyncList();\n\n const remoteDrives = useMemo(\n () =>\n drives.filter((d) =>\n remotes.some((r) =>\n r.meta.collectionId.equals(DriveCollectionId.forDrive(d.header.id)),\n ),\n ),\n [drives, remotes],\n );\n\n return (\n <div className=\"my-4 bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Connected drives</h2>\n {remoteDrives.length === 0 ? (\n <p className=\"text-sm font-normal text-foreground\">\n No connected remote drives.\n </p>\n ) : (\n <ul className=\"flex flex-col gap-3\">\n {remoteDrives.map((drive) => (\n <DriveAboutEntry key={drive.header.id} drive={drive} />\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nfunction DriveAboutEntry({ drive }: { drive: DocumentDriveDocument }) {\n const info = useDriveSystemInfo(drive);\n const name = drive.state.global.name || drive.header.name;\n\n return (\n <li className=\"text-sm text-foreground\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"font-medium\">{name}</span>\n {info.status === \"ready\" && (\n <span className=\"text-xs text-muted-foreground\">{info.host}</span>\n )}\n </div>\n {info.status === \"loading\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">Loading…</div>\n )}\n {info.status === \"error\" && (\n <div className=\"mt-1 text-xs text-destructive\">\n Could not load system info\n </div>\n )}\n {info.status === \"ready\" && (\n <div className=\"mt-1 text-xs text-foreground\">\n <div>\n <span className=\"font-medium\">Version:</span> {info.version}\n </div>\n <div>\n <span className=\"font-medium\">Git hash: </span>\n {info.gitUrl ? (\n <a\n className=\"font-mono hover:underline\"\n href={info.gitUrl}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={info.gitHash}\n >\n {shortGitSha(info.gitHash)}\n </a>\n ) : (\n <span className=\"font-mono\" title={info.gitHash}>\n {shortGitSha(info.gitHash)}\n </span>\n )}\n </div>\n </div>\n )}\n {info.status === \"local\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">\n Local drive — N/A\n </div>\n )}\n </li>\n );\n}\n","import {\n getAiSettings,\n isAiConfigured,\n updateAiSettings,\n type AiSettings,\n} from \"@powerhousedao/reactor-browser/ai\";\nimport { Bot } from \"lucide-react\";\nimport { useState } from \"react\";\n\ntype TestState =\n | { status: \"idle\" }\n | { status: \"testing\" }\n | { status: \"ok\"; message: string }\n | { status: \"error\"; message: string };\n\nconst FIELD_CLASS =\n \"w-full rounded-md border border-border bg-background p-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground\";\n\n/**\n * Settings-modal section for the in-browser AI assistant: the user master\n * toggle, the OpenAI-compatible endpoint configuration, and a\n * save-and-test-connection action. Only mounted when the deployment\n * enables the feature (`connect.ai.assistantEnabled`).\n */\nexport const AiAssistant: React.FC = () => {\n const [draft, setDraft] = useState<AiSettings>(() => getAiSettings());\n const [test, setTest] = useState<TestState>({ status: \"idle\" });\n\n const patch = (value: Partial<AiSettings>) =>\n setDraft((d) => ({ ...d, ...value }));\n\n const saveAndTest = async () => {\n updateAiSettings(draft);\n if (!isAiConfigured(draft)) {\n setTest({\n status: \"error\",\n message: \"Base URL, API key and model are all required.\",\n });\n return;\n }\n setTest({ status: \"testing\" });\n try {\n const base = draft.baseUrl.trim().replace(/\\/+$/, \"\");\n const res = await fetch(`${base}/models`, {\n headers: draft.apiKey.trim()\n ? { Authorization: `Bearer ${draft.apiKey.trim()}` }\n : undefined,\n });\n if (!res.ok) {\n throw new Error(\n `HTTP ${res.status}${res.statusText ? ` ${res.statusText}` : \"\"}`,\n );\n }\n const data: unknown = await res.json();\n const list = (data as { data?: unknown[] } | null)?.data;\n const count = Array.isArray(list) ? list.length : 0;\n setTest({\n status: \"ok\",\n message: count\n ? `Connected — ${count} model(s) available.`\n : \"Connected.\",\n });\n } catch (error) {\n setTest({\n status: \"error\",\n message: `Connection failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n }\n };\n\n return (\n <div className=\"space-y-4 p-1\">\n <div>\n <h3 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Bot size={16} /> AI Assistant\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n An in-page assistant that creates and changes documents, manages\n drives, and inspects read models through an OpenAI-compatible\n endpoint.\n </p>\n </div>\n\n <label className=\"flex items-center gap-2 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.enabled}\n onChange={(event) => {\n patch({ enabled: event.target.checked });\n // The switch acts immediately: the FAB mounts/unmounts at once.\n updateAiSettings({ enabled: event.target.checked });\n }}\n />\n Enable AI assistant\n </label>\n\n {draft.enabled && (\n <div className=\"space-y-2 rounded-lg border border-border p-3\">\n <div className=\"mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase\">\n Endpoint\n </div>\n <input\n type=\"url\"\n placeholder=\"Base URL (e.g. https://api.openai.com/v1)\"\n value={draft.baseUrl}\n onChange={(e) => patch({ baseUrl: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <input\n type=\"password\"\n placeholder=\"API key\"\n value={draft.apiKey}\n onChange={(e) => patch({ apiKey: e.target.value })}\n className={FIELD_CLASS}\n autoComplete=\"off\"\n spellCheck={false}\n />\n <input\n type=\"text\"\n placeholder=\"Model (e.g. gpt-4o-mini)\"\n value={draft.model}\n onChange={(e) => patch({ model: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <label className=\"flex items-center gap-2 pt-1 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.autoApproveWrites}\n onChange={(event) =>\n patch({ autoApproveWrites: event.target.checked })\n }\n />\n Auto-approve write actions\n </label>\n <p className=\"text-xs text-muted-foreground\">\n Requests go directly from this browser to the endpoint; the API key\n is never sent to Powerhouse servers. The endpoint must allow\n cross-origin (CORS) requests from this site.\n </p>\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={() => void saveAndTest()}\n disabled={test.status === \"testing\"}\n className=\"rounded-md bg-primary px-3 py-1.5 text-sm font-semibold text-primary-foreground hover:bg-primary/90 disabled:disabled-effect\"\n >\n {test.status === \"testing\"\n ? \"Testing…\"\n : \"Save & test connection\"}\n </button>\n {test.status === \"ok\" && (\n <span className=\"text-xs text-foreground\">{test.message}</span>\n )}\n {test.status === \"error\" && (\n <span className=\"text-xs text-destructive\">{test.message}</span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { DangerZone as BaseDangerZone } from \"@powerhousedao/design-system/connect\";\nimport {\n deleteDrive,\n setSelectedDrive,\n showPHModal,\n useDrives,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\n\nexport const DangerZone: React.FC = () => {\n const drives = useDrives();\n\n const handleDeleteDrive = async (drive: DocumentDriveDocument) => {\n await deleteDrive(drive.header.id);\n setSelectedDrive(undefined);\n };\n\n const handleClearStorage = () => {\n showPHModal({ type: \"clearStorage\" });\n };\n\n return (\n <BaseDangerZone\n drives={drives ?? []}\n onDeleteDrive={(drive) => {\n void handleDeleteDrive(drive);\n }}\n onClearStorage={handleClearStorage}\n />\n );\n};\n","import { DefaultEditor as BaseDefaultEditor } from \"@powerhousedao/design-system/connect\";\nimport { useCallback, useState } from \"react\";\n\nconst documentModelEditorOptions = [\n { label: \"V1\", value: \"document-model-editor\" },\n { label: \"V2\", value: \"document-model-editor-v2\" },\n] as const;\n\nexport const DefaultEditor: React.FC = () => {\n const [documentModelEditor, setDocumentModelEditor] = useState<\n (typeof documentModelEditorOptions)[number]\n >(documentModelEditorOptions[1]);\n\n const handleSetDocumentEditor = useCallback((value: string) => {\n const option = documentModelEditorOptions.find((dm) => dm.value == value);\n if (option) {\n setDocumentModelEditor(option);\n }\n }, []);\n\n return (\n <BaseDefaultEditor\n documentModelEditor={documentModelEditor.value}\n setDocumentModelEditor={handleSetDocumentEditor}\n documentModelEditorOptions={\n documentModelEditorOptions as unknown as {\n value: string;\n label: string;\n }[]\n }\n />\n );\n};\n","import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { PackageManager } from \"@powerhousedao/design-system/connect\";\nimport { useVetraPackageManager } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\n/**\n * Split a `name@tag` spec into its bare package name. Mirrors the design-system's\n * `parsePackageSpec` — duplicated here to avoid reaching into a deep subpath\n * export. Scoped names split on the LAST `@`, unscoped on the first.\n */\nfunction parseBareName(spec: string): string {\n const trimmed = spec.trim();\n const at = trimmed.startsWith(\"@\")\n ? trimmed.lastIndexOf(\"@\")\n : trimmed.indexOf(\"@\");\n return at > 0 ? trimmed.slice(0, at) : trimmed;\n}\n\nexport const ConnectPackageManager: React.FC = () => {\n const packageManager = useVetraPackageManager();\n const {\n registryPackageList,\n installedPackages,\n availablePackages,\n availableHasMore,\n isLoadingAvailable,\n isLoadingMoreAvailable,\n availableError,\n ensureAvailableLoaded,\n ensureInstalledMetadataLoaded,\n fetchAvailablePage,\n loadMoreAvailable,\n setAvailableSearch,\n updateRegistryPackageStatus,\n registerFallbackRegistryPackage,\n } = useRegistryPackages();\n\n async function handleInstall(packageSpec: string) {\n if (!packageManager) return;\n\n // The spec may include an explicit `@tag` / `@version` suffix from the\n // search input. Pass it through to the package manager as-is (the CDN\n // route already handles `name@tag` specs), but track status under the\n // bare name so the Settings list doesn't fragment.\n const bareName = parseBareName(packageSpec);\n // Packages that were in `/packages` when the user clicked Install go\n // through `updateRegistryPackageStatus` and hit an existing entry.\n // Packages that landed via the npm-uplink fallback weren't in the list,\n // so we register them explicitly rather than silently upserting a\n // placeholder — keeping the \"does not exist\" error as a signal for any\n // other code path that reaches update without a matching entry.\n const wasKnownToRegistry = registryPackageList.some(\n (p) => p.name === bareName,\n );\n const result = await packageManager.addPackage(packageSpec);\n if (result.type === \"success\") {\n if (wasKnownToRegistry) {\n updateRegistryPackageStatus(bareName, \"registry-install\");\n } else {\n registerFallbackRegistryPackage(\n bareName,\n result.package,\n packageManager.getPackageVersion(bareName) ??\n packageManager.getPackageVersion(packageSpec),\n \"registry-install\",\n );\n }\n toast(`Package \"${packageSpec}\" installed successfully`, {\n type: \"connect-success\",\n });\n } else {\n const message = result.error.message;\n console.error(\n `[Connect][PackageManager] Install failed for \"${packageSpec}\":`,\n result.error,\n );\n // `BrowserPackageManager` raises a generic \"Failed to fetch dynamically\n // imported module\" when the registry CDN returns an error. That covers\n // both \"the name exists nowhere (not on this registry AND not on the\n // npmjs uplink)\" and \"the tarball is there but doesn't look like a\n // Powerhouse package\". Map to plain-language copy — never dump the raw\n // API / loader message into the toast.\n const isLikelyNotFound = /failed to fetch|404|not found/i.test(message);\n const userMessage = isLikelyNotFound\n ? `Couldn't install \"${packageSpec}\". It isn't available on this registry or via npm.`\n : `Couldn't install \"${packageSpec}\". Please try again.`;\n toast(userMessage, { type: \"error\" });\n }\n }\n\n function handleUninstall(packageName: string) {\n if (!packageManager) return;\n try {\n packageManager.removePackage(packageName);\n updateRegistryPackageStatus(packageName, \"available\");\n\n toast(`Package \"${packageName}\" uninstalled successfully`, {\n type: \"connect-success\",\n });\n } catch (error) {\n console.error(\n `[Connect][PackageManager] Uninstall failed for \"${packageName}\":`,\n error,\n );\n toast(`Couldn't uninstall \"${packageName}\". Please try again.`, {\n type: \"error\",\n });\n }\n }\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <PackageManager\n mutable={true}\n installedPackages={installedPackages}\n availablePackages={availablePackages}\n isAvailableLoading={isLoadingAvailable}\n isLoadingMoreAvailable={isLoadingMoreAvailable}\n hasMoreAvailable={availableHasMore}\n onLoadMoreAvailable={loadMoreAvailable}\n availableError={availableError}\n onAvailableRetry={() => {\n void fetchAvailablePage({ reset: true });\n }}\n onAvailableSearchChange={setAvailableSearch}\n onAvailableTabOpen={ensureAvailableLoaded}\n onInstalledTabOpen={ensureInstalledMetadataLoaded}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n};\n","import {\n SettingsModal as SettingsModalV2,\n ThemeSwitch,\n} from \"@powerhousedao/design-system/connect\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport { Bot, CircleHelp, Package, PenLine, TriangleAlert } from \"lucide-react\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.js\";\nimport { AiAssistant } from \"./settings/ai-assistant.js\";\nimport { DangerZone } from \"./settings/danger-zone.js\";\nimport { DefaultEditor } from \"./settings/default-editor.js\";\nimport { ConnectPackageManager } from \"./settings/package-manager.js\";\n\nconst iconProps = { size: 16 } as const;\n\nexport const SettingsModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"settings\";\n\n const tabs = useMemo(\n () => [\n ...(connectConfig.aiAssistantEnabled\n ? [\n {\n id: \"ai-assistant\",\n icon: <Bot {...iconProps} />,\n label: \"AI Assistant\",\n content: AiAssistant,\n },\n ]\n : []),\n {\n id: \"package-manager\",\n icon: <Package {...iconProps} />,\n label: \"Package Manager\",\n content: ConnectPackageManager,\n },\n {\n id: \"default-editors\",\n icon: <PenLine {...iconProps} />,\n label: \"Default Editors\",\n content: DefaultEditor,\n },\n {\n id: \"danger-zone\",\n icon: <TriangleAlert {...iconProps} className=\"text-destructive\" />,\n label: <span className=\"text-destructive\">Danger Zone</span>,\n content: () => <DangerZone />,\n },\n {\n id: \"about\",\n icon: <CircleHelp {...iconProps} />,\n label: \"About\",\n content: About,\n },\n ],\n [],\n );\n\n return (\n <SettingsModalV2\n open={open}\n title={t(\"modals.connectSettings.title\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n tabs={tabs}\n navFooter={<ThemeSwitch horizontal />}\n />\n );\n};\n"],"names":["About","BaseAbout","packageJson","DangerZone","BaseDangerZone","DefaultEditor","BaseDefaultEditor","DefaultEditor","DangerZone","About","SettingsModalV2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACoBA,MAAaA,gBAAwB;CACnC,MAAM,wBAAwB;AAC5B,gBAAc;AACd,cAAY,EAAE,MAAM,aAAa,CAAC;;AAGpC,QACE,qBAAC,OAAD,EAAA,UAAA;EACE,oBAACC,OAAD;GACE,aAAaC;GACb,cACE,OAAO,cAAc,iBAAiB,WAClC,cAAc,eACd,KAAA;GAEN,CAAA;EACF,oBAAC,YAAD,EAAc,CAAA;EACd,oBAAC,iBAAD,EAAmB,CAAA;EACnB,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,oBAAC,MAAD;KAAI,WAAU;eAAqC;KAAc,CAAA;IACjE,oBAAC,KAAD;KAAG,WAAU;eAA2C;KAEpD,CAAA;IACJ,qBAAC,UAAD;KACE,WAAU;KACV,SAAS;KACT,MAAK;eAHP,CAIC,mBACgB,oBAAC,MAAD;MAAM,MAAK;MAAa,MAAM;MAAM,CAAA,CAC5C;;IACL;;EACF,EAAA,CAAA;;AAIV,SAAS,aAAa;CACpB,MAAM,MAAM,WAAW;AACvB,KAAI,QAAQ,UAAW,QAAO;CAC9B,MAAM,MAAM,WAAW;CACvB,MAAM,QAAQ,YAAY,IAAI;AAC9B,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,QAAD;GAAM,WAAU;aAAgB;GAAiB,CAAA,EAChD,MACC,oBAAC,KAAD;GACE,WAAU;GACV,MAAM;GACN,QAAO;GACP,KAAI;GACJ,OAAO;aAEN;GACC,CAAA,GAEJ,oBAAC,QAAD;GAAM,WAAU;GAAY,OAAO;aAChC;GACI,CAAA,CAEL;;;AAIV,SAAS,kBAAkB;CACzB,MAAM,SAAS,WAAW,IAAI,EAAE;CAChC,MAAM,UAAU,aAAa;CAE7B,MAAM,eAAe,cAEjB,OAAO,QAAQ,MACb,QAAQ,MAAM,MACZ,EAAE,KAAK,aAAa,OAAO,kBAAkB,SAAS,EAAE,OAAO,GAAG,CAAC,CACpE,CACF,EACH,CAAC,QAAQ,QAAQ,CAClB;AAED,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,MAAD;GAAI,WAAU;aAAqC;GAAqB,CAAA,EACvE,aAAa,WAAW,IACvB,oBAAC,KAAD;GAAG,WAAU;aAAsC;GAE/C,CAAA,GAEJ,oBAAC,MAAD;GAAI,WAAU;aACX,aAAa,KAAK,UACjB,oBAAC,iBAAD,EAA8C,OAAS,EAAjC,MAAM,OAAO,GAAoB,CACvD;GACC,CAAA,CAEH;;;AAIV,SAAS,gBAAgB,EAAE,SAA2C;CACpE,MAAM,OAAO,mBAAmB,MAAM;AAGtC,QACE,qBAAC,MAAD;EAAI,WAAU;YAAd;GACE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,QAAD;KAAM,WAAU;eALT,MAAM,MAAM,OAAO,QAAQ,MAAM,OAAO;KAKJ,CAAA,EAC1C,KAAK,WAAW,WACf,oBAAC,QAAD;KAAM,WAAU;eAAiC,KAAK;KAAY,CAAA,CAEhE;;GACL,KAAK,WAAW,aACf,oBAAC,OAAD;IAAK,WAAU;cAAqC;IAAc,CAAA;GAEnE,KAAK,WAAW,WACf,oBAAC,OAAD;IAAK,WAAU;cAAgC;IAEzC,CAAA;GAEP,KAAK,WAAW,WACf,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,qBAAC,OAAD,EAAA,UAAA;KACE,oBAAC,QAAD;MAAM,WAAU;gBAAc;MAAe,CAAA;;KAAE,KAAK;KAChD,EAAA,CAAA,EACN,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,QAAD;KAAM,WAAU;eAAc;KAAiB,CAAA,EAC9C,KAAK,SACJ,oBAAC,KAAD;KACE,WAAU;KACV,MAAM,KAAK;KACX,QAAO;KACP,KAAI;KACJ,OAAO,KAAK;eAEX,YAAY,KAAK,QAAQ;KACxB,CAAA,GAEJ,oBAAC,QAAD;KAAM,WAAU;KAAY,OAAO,KAAK;eACrC,YAAY,KAAK,QAAQ;KACrB,CAAA,CAEL,EAAA,CAAA,CACF;;GAEP,KAAK,WAAW,WACf,oBAAC,OAAD;IAAK,WAAU;cAAqC;IAE9C,CAAA;GAEL;;;;;ACrJT,MAAM,cACJ;;;;;;;AAQF,MAAa,oBAA8B;CACzC,MAAM,CAAC,OAAO,YAAY,eAA2B,eAAe,CAAC;CACrE,MAAM,CAAC,MAAM,WAAW,SAAoB,EAAE,QAAQ,QAAQ,CAAC;CAE/D,MAAM,SAAS,UACb,UAAU,OAAO;EAAE,GAAG;EAAG,GAAG;EAAO,EAAE;CAEvC,MAAM,cAAc,YAAY;AAC9B,mBAAiB,MAAM;AACvB,MAAI,CAAC,eAAe,MAAM,EAAE;AAC1B,WAAQ;IACN,QAAQ;IACR,SAAS;IACV,CAAC;AACF;;AAEF,UAAQ,EAAE,QAAQ,WAAW,CAAC;AAC9B,MAAI;GACF,MAAM,OAAO,MAAM,QAAQ,MAAM,CAAC,QAAQ,QAAQ,GAAG;GACrD,MAAM,MAAM,MAAM,MAAM,GAAG,KAAK,UAAU,EACxC,SAAS,MAAM,OAAO,MAAM,GACxB,EAAE,eAAe,UAAU,MAAM,OAAO,MAAM,IAAI,GAClD,KAAA,GACL,CAAC;AACF,OAAI,CAAC,IAAI,GACP,OAAM,IAAI,MACR,QAAQ,IAAI,SAAS,IAAI,aAAa,IAAI,IAAI,eAAe,KAC9D;GAGH,MAAM,QADgB,MAAM,IAAI,MAAM,GACc;GACpD,MAAM,QAAQ,MAAM,QAAQ,KAAK,GAAG,KAAK,SAAS;AAClD,WAAQ;IACN,QAAQ;IACR,SAAS,QACL,eAAe,MAAM,wBACrB;IACL,CAAC;WACK,OAAO;AACd,WAAQ;IACN,QAAQ;IACR,SAAS,sBACP,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;IAEzD,CAAC;;;AAIN,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,qBAAC,OAAD,EAAA,UAAA,CACE,qBAAC,MAAD;IAAI,WAAU;cAAd,CACE,oBAAC,KAAD,EAAK,MAAM,IAAM,CAAA,EAAA,gBACd;OACL,oBAAC,KAAD;IAAG,WAAU;cAAqC;IAI9C,CAAA,CACA,EAAA,CAAA;GAEN,qBAAC,SAAD;IAAO,WAAU;cAAjB,CACE,oBAAC,SAAD;KACE,MAAK;KACL,SAAS,MAAM;KACf,WAAW,UAAU;AACnB,YAAM,EAAE,SAAS,MAAM,OAAO,SAAS,CAAC;AAExC,uBAAiB,EAAE,SAAS,MAAM,OAAO,SAAS,CAAC;;KAErD,CAAA,EAAA,sBAEI;;GAEP,MAAM,WACL,qBAAC,OAAD;IAAK,WAAU;cAAf;KACE,oBAAC,OAAD;MAAK,WAAU;gBAA2E;MAEpF,CAAA;KACN,oBAAC,SAAD;MACE,MAAK;MACL,aAAY;MACZ,OAAO,MAAM;MACb,WAAW,MAAM,MAAM,EAAE,SAAS,EAAE,OAAO,OAAO,CAAC;MACnD,WAAW;MACX,YAAY;MACZ,CAAA;KACF,oBAAC,SAAD;MACE,MAAK;MACL,aAAY;MACZ,OAAO,MAAM;MACb,WAAW,MAAM,MAAM,EAAE,QAAQ,EAAE,OAAO,OAAO,CAAC;MAClD,WAAW;MACX,cAAa;MACb,YAAY;MACZ,CAAA;KACF,oBAAC,SAAD;MACE,MAAK;MACL,aAAY;MACZ,OAAO,MAAM;MACb,WAAW,MAAM,MAAM,EAAE,OAAO,EAAE,OAAO,OAAO,CAAC;MACjD,WAAW;MACX,YAAY;MACZ,CAAA;KACF,qBAAC,SAAD;MAAO,WAAU;gBAAjB,CACE,oBAAC,SAAD;OACE,MAAK;OACL,SAAS,MAAM;OACf,WAAW,UACT,MAAM,EAAE,mBAAmB,MAAM,OAAO,SAAS,CAAC;OAEpD,CAAA,EAAA,6BAEI;;KACR,oBAAC,KAAD;MAAG,WAAU;gBAAgC;MAIzC,CAAA;KACJ,qBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,oBAAC,UAAD;QACE,MAAK;QACL,eAAe,KAAK,aAAa;QACjC,UAAU,KAAK,WAAW;QAC1B,WAAU;kBAET,KAAK,WAAW,YACb,aACA;QACG,CAAA;OACR,KAAK,WAAW,QACf,oBAAC,QAAD;QAAM,WAAU;kBAA2B,KAAK;QAAe,CAAA;OAEhE,KAAK,WAAW,WACf,oBAAC,QAAD;QAAM,WAAU;kBAA4B,KAAK;QAAe,CAAA;OAE9D;;KACF;;GAEJ;;;;;AC1JV,MAAaC,qBAA6B;CACxC,MAAM,SAAS,WAAW;CAE1B,MAAM,oBAAoB,OAAO,UAAiC;AAChE,QAAM,YAAY,MAAM,OAAO,GAAG;AAClC,mBAAiB,KAAA,EAAU;;CAG7B,MAAM,2BAA2B;AAC/B,cAAY,EAAE,MAAM,gBAAgB,CAAC;;AAGvC,QACE,oBAACC,YAAD;EACE,QAAQ,UAAU,EAAE;EACpB,gBAAgB,UAAU;AACnB,qBAAkB,MAAM;;EAE/B,gBAAgB;EAChB,CAAA;;;;ACzBN,MAAM,6BAA6B,CACjC;CAAE,OAAO;CAAM,OAAO;CAAyB,EAC/C;CAAE,OAAO;CAAM,OAAO;CAA4B,CACnD;AAED,MAAaC,wBAAgC;CAC3C,MAAM,CAAC,qBAAqB,0BAA0B,SAEpD,2BAA2B,GAAG;CAEhC,MAAM,0BAA0B,aAAa,UAAkB;EAC7D,MAAM,SAAS,2BAA2B,MAAM,OAAO,GAAG,SAAS,MAAM;AACzE,MAAI,OACF,wBAAuB,OAAO;IAE/B,EAAE,CAAC;AAEN,QACE,oBAACC,eAAD;EACE,qBAAqB,oBAAoB;EACzC,wBAAwB;EAEtB;EAKF,CAAA;;;;;;;;;ACnBN,SAAS,cAAc,MAAsB;CAC3C,MAAM,UAAU,KAAK,MAAM;CAC3B,MAAM,KAAK,QAAQ,WAAW,IAAI,GAC9B,QAAQ,YAAY,IAAI,GACxB,QAAQ,QAAQ,IAAI;AACxB,QAAO,KAAK,IAAI,QAAQ,MAAM,GAAG,GAAG,GAAG;;AAGzC,MAAa,8BAAwC;CACnD,MAAM,iBAAiB,wBAAwB;CAC/C,MAAM,EACJ,qBACA,mBACA,mBACA,kBACA,oBACA,wBACA,gBACA,uBACA,+BACA,oBACA,mBACA,oBACA,6BACA,oCACE,qBAAqB;CAEzB,eAAe,cAAc,aAAqB;AAChD,MAAI,CAAC,eAAgB;EAMrB,MAAM,WAAW,cAAc,YAAY;EAO3C,MAAM,qBAAqB,oBAAoB,MAC5C,MAAM,EAAE,SAAS,SACnB;EACD,MAAM,SAAS,MAAM,eAAe,WAAW,YAAY;AAC3D,MAAI,OAAO,SAAS,WAAW;AAC7B,OAAI,mBACF,6BAA4B,UAAU,mBAAmB;OAEzD,iCACE,UACA,OAAO,SACP,eAAe,kBAAkB,SAAS,IACxC,eAAe,kBAAkB,YAAY,EAC/C,mBACD;AAEH,SAAM,YAAY,YAAY,2BAA2B,EACvD,MAAM,mBACP,CAAC;SACG;GACL,MAAM,UAAU,OAAO,MAAM;AAC7B,WAAQ,MACN,iDAAiD,YAAY,KAC7D,OAAO,MACR;AAWD,SAJyB,iCAAiC,KAAK,QAAQ,GAEnE,qBAAqB,YAAY,sDACjC,qBAAqB,YAAY,uBAClB,EAAE,MAAM,SAAS,CAAC;;;CAIzC,SAAS,gBAAgB,aAAqB;AAC5C,MAAI,CAAC,eAAgB;AACrB,MAAI;AACF,kBAAe,cAAc,YAAY;AACzC,+BAA4B,aAAa,YAAY;AAErD,SAAM,YAAY,YAAY,6BAA6B,EACzD,MAAM,mBACP,CAAC;WACK,OAAO;AACd,WAAQ,MACN,mDAAmD,YAAY,KAC/D,MACD;AACD,SAAM,uBAAuB,YAAY,uBAAuB,EAC9D,MAAM,SACP,CAAC;;;AAIN,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,gBAAD;GACE,SAAS;GACU;GACA;GACnB,oBAAoB;GACI;GACxB,kBAAkB;GAClB,qBAAqB;GACL;GAChB,wBAAwB;AACjB,uBAAmB,EAAE,OAAO,MAAM,CAAC;;GAE1C,yBAAyB;GACzB,oBAAoB;GACpB,oBAAoB;GACpB,WAAW;GACX,aAAa;GACb,CAAA;EACE,CAAA;;;;ACpHV,MAAM,YAAY,EAAE,MAAM,IAAI;AAE9B,MAAa,sBAAgC;CAE3C,MAAM,OADU,YAAY,EACN,SAAS;CAE/B,MAAM,OAAO,cACL;EACJ,GAAI,cAAc,qBACd,CACE;GACE,IAAI;GACJ,MAAM,oBAAC,KAAD,EAAK,GAAI,WAAa,CAAA;GAC5B,OAAO;GACP,SAAS;GACV,CACF,GACD,EAAE;EACN;GACE,IAAI;GACJ,MAAM,oBAAC,SAAD,EAAS,GAAI,WAAa,CAAA;GAChC,OAAO;GACP,SAAS;GACV;EACD;GACE,IAAI;GACJ,MAAM,oBAAC,SAAD,EAAS,GAAI,WAAa,CAAA;GAChC,OAAO;GACP,SAASC;GACV;EACD;GACE,IAAI;GACJ,MAAM,oBAAC,eAAD;IAAe,GAAI;IAAW,WAAU;IAAqB,CAAA;GACnE,OAAO,oBAAC,QAAD;IAAM,WAAU;cAAmB;IAAkB,CAAA;GAC5D,eAAe,oBAACC,cAAD,EAAc,CAAA;GAC9B;EACD;GACE,IAAI;GACJ,MAAM,oBAAC,YAAD,EAAY,GAAI,WAAa,CAAA;GACnC,OAAO;GACP,SAASC;GACV;EACF,EACD,EAAE,CACH;AAED,QACE,oBAACC,iBAAD;EACQ;EACN,OAAO,EAAE,+BAA+B;EACxC,eAAe,WAAoB;AACjC,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAE9B;EACN,WAAW,oBAAC,aAAD,EAAa,YAAA,MAAa,CAAA;EACrC,CAAA","debug_id":"08d6cb8f-76b4-540d-b3c8-7cde0e9ecde2"}
1
+ {"version":3,"file":"SettingsModal-Bqch-LlY.js","sources":["../package.json","../src/components/modal/modals/settings/about.tsx","../src/components/modal/modals/settings/ai-assistant.tsx","../src/components/modal/modals/settings/danger-zone.tsx","../src/components/modal/modals/settings/default-editor.tsx","../src/components/modal/modals/settings/package-manager.tsx","../src/components/modal/modals/SettingsModal.tsx"],"sourcesContent":["","import { connectConfig } from \"@powerhousedao/connect/config\";\nimport {\n getGitSha,\n getGitUrl,\n packageJson,\n shortGitSha,\n} from \"@powerhousedao/connect/utils\";\nimport { Icon } from \"@powerhousedao/design-system\";\nimport { About as BaseAbout } from \"@powerhousedao/design-system/connect\";\nimport {\n closePHModal,\n DriveCollectionId,\n showPHModal,\n useDrives,\n useDriveSystemInfo,\n useSyncList,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport { useMemo } from \"react\";\n\nexport const About: React.FC = () => {\n const onOpenInspector = () => {\n closePHModal();\n showPHModal({ type: \"inspector\" });\n };\n\n return (\n <div>\n <BaseAbout\n packageJson={packageJson}\n phCliVersion={\n typeof connectConfig.phCliVersion === \"string\"\n ? connectConfig.phCliVersion\n : undefined\n }\n />\n <AppGitHash />\n <ConnectedDrives />\n <div className=\"bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Inspector</h2>\n <p className=\"mb-3 text-sm font-normal text-foreground\">\n Explore the local database and sync state for debugging.\n </p>\n <button\n className=\"flex items-center gap-x-2 rounded-md border border-border bg-transparent px-3 py-1 text-sm font-medium text-foreground transition-colors hover:hover-effect\"\n onClick={onOpenInspector}\n type=\"button\"\n >\n Open Inspector <Icon name=\"CircleInfo\" size={16} />\n </button>\n </div>\n </div>\n );\n};\n\nfunction AppGitHash() {\n const sha = getGitSha();\n if (sha === \"unknown\") return null;\n const url = getGitUrl();\n const label = shortGitSha(sha);\n return (\n <div className=\"bg-background p-3 text-sm\">\n <span className=\"font-semibold\">Git hash: </span>\n {url ? (\n <a\n className=\"font-mono underline\"\n href={url}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={sha}\n >\n {label}\n </a>\n ) : (\n <span className=\"font-mono\" title={sha}>\n {label}\n </span>\n )}\n </div>\n );\n}\n\nfunction ConnectedDrives() {\n const drives = useDrives() ?? [];\n const remotes = useSyncList();\n\n const remoteDrives = useMemo(\n () =>\n drives.filter((d) =>\n remotes.some((r) =>\n r.meta.collectionId.equals(DriveCollectionId.forDrive(d.header.id)),\n ),\n ),\n [drives, remotes],\n );\n\n return (\n <div className=\"my-4 bg-background p-3\">\n <h2 className=\"mb-2 font-semibold text-foreground\">Connected drives</h2>\n {remoteDrives.length === 0 ? (\n <p className=\"text-sm font-normal text-foreground\">\n No connected remote drives.\n </p>\n ) : (\n <ul className=\"flex flex-col gap-3\">\n {remoteDrives.map((drive) => (\n <DriveAboutEntry key={drive.header.id} drive={drive} />\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nfunction DriveAboutEntry({ drive }: { drive: DocumentDriveDocument }) {\n const info = useDriveSystemInfo(drive);\n const name = drive.state.global.name || drive.header.name;\n\n return (\n <li className=\"text-sm text-foreground\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"font-medium\">{name}</span>\n {info.status === \"ready\" && (\n <span className=\"text-xs text-muted-foreground\">{info.host}</span>\n )}\n </div>\n {info.status === \"loading\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">Loading…</div>\n )}\n {info.status === \"error\" && (\n <div className=\"mt-1 text-xs text-destructive\">\n Could not load system info\n </div>\n )}\n {info.status === \"ready\" && (\n <div className=\"mt-1 text-xs text-foreground\">\n <div>\n <span className=\"font-medium\">Version:</span> {info.version}\n </div>\n <div>\n <span className=\"font-medium\">Git hash: </span>\n {info.gitUrl ? (\n <a\n className=\"font-mono hover:underline\"\n href={info.gitUrl}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={info.gitHash}\n >\n {shortGitSha(info.gitHash)}\n </a>\n ) : (\n <span className=\"font-mono\" title={info.gitHash}>\n {shortGitSha(info.gitHash)}\n </span>\n )}\n </div>\n </div>\n )}\n {info.status === \"local\" && (\n <div className=\"mt-1 text-xs text-muted-foreground\">\n Local drive — N/A\n </div>\n )}\n </li>\n );\n}\n","import {\n getAiSettings,\n isAiConfigured,\n updateAiSettings,\n type AiSettings,\n} from \"@powerhousedao/reactor-browser/ai\";\nimport { Bot } from \"lucide-react\";\nimport { useState } from \"react\";\n\ntype TestState =\n | { status: \"idle\" }\n | { status: \"testing\" }\n | { status: \"ok\"; message: string }\n | { status: \"error\"; message: string };\n\nconst FIELD_CLASS =\n \"w-full rounded-md border border-border bg-background p-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground\";\n\n/**\n * Settings-modal section for the in-browser AI assistant: the user master\n * toggle, the OpenAI-compatible endpoint configuration, and a\n * save-and-test-connection action. Only mounted when the deployment\n * enables the feature (`connect.ai.assistantEnabled`).\n */\nexport const AiAssistant: React.FC = () => {\n const [draft, setDraft] = useState<AiSettings>(() => getAiSettings());\n const [test, setTest] = useState<TestState>({ status: \"idle\" });\n\n const patch = (value: Partial<AiSettings>) =>\n setDraft((d) => ({ ...d, ...value }));\n\n const saveAndTest = async () => {\n updateAiSettings(draft);\n if (!isAiConfigured(draft)) {\n setTest({\n status: \"error\",\n message: \"Base URL, API key and model are all required.\",\n });\n return;\n }\n setTest({ status: \"testing\" });\n try {\n const base = draft.baseUrl.trim().replace(/\\/+$/, \"\");\n const res = await fetch(`${base}/models`, {\n headers: draft.apiKey.trim()\n ? { Authorization: `Bearer ${draft.apiKey.trim()}` }\n : undefined,\n });\n if (!res.ok) {\n throw new Error(\n `HTTP ${res.status}${res.statusText ? ` ${res.statusText}` : \"\"}`,\n );\n }\n const data: unknown = await res.json();\n const list = (data as { data?: unknown[] } | null)?.data;\n const count = Array.isArray(list) ? list.length : 0;\n setTest({\n status: \"ok\",\n message: count\n ? `Connected — ${count} model(s) available.`\n : \"Connected.\",\n });\n } catch (error) {\n setTest({\n status: \"error\",\n message: `Connection failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n }\n };\n\n return (\n <div className=\"space-y-4 p-1\">\n <div>\n <h3 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Bot size={16} /> AI Assistant\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n An in-page assistant that creates and changes documents, manages\n drives, and inspects read models through an OpenAI-compatible\n endpoint.\n </p>\n </div>\n\n <label className=\"flex items-center gap-2 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.enabled}\n onChange={(event) => {\n patch({ enabled: event.target.checked });\n // The switch acts immediately: the FAB mounts/unmounts at once.\n updateAiSettings({ enabled: event.target.checked });\n }}\n />\n Enable AI assistant\n </label>\n\n {draft.enabled && (\n <div className=\"space-y-2 rounded-lg border border-border p-3\">\n <div className=\"mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase\">\n Endpoint\n </div>\n <input\n type=\"url\"\n placeholder=\"Base URL (e.g. https://api.openai.com/v1)\"\n value={draft.baseUrl}\n onChange={(e) => patch({ baseUrl: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <input\n type=\"password\"\n placeholder=\"API key\"\n value={draft.apiKey}\n onChange={(e) => patch({ apiKey: e.target.value })}\n className={FIELD_CLASS}\n autoComplete=\"off\"\n spellCheck={false}\n />\n <input\n type=\"text\"\n placeholder=\"Model (e.g. gpt-4o-mini)\"\n value={draft.model}\n onChange={(e) => patch({ model: e.target.value })}\n className={FIELD_CLASS}\n spellCheck={false}\n />\n <label className=\"flex items-center gap-2 pt-1 text-sm text-foreground\">\n <input\n type=\"checkbox\"\n checked={draft.autoApproveWrites}\n onChange={(event) =>\n patch({ autoApproveWrites: event.target.checked })\n }\n />\n Auto-approve write actions\n </label>\n <p className=\"text-xs text-muted-foreground\">\n Requests go directly from this browser to the endpoint; the API key\n is never sent to Powerhouse servers. The endpoint must allow\n cross-origin (CORS) requests from this site.\n </p>\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={() => void saveAndTest()}\n disabled={test.status === \"testing\"}\n className=\"rounded-md bg-primary px-3 py-1.5 text-sm font-semibold text-primary-foreground hover:bg-primary/90 disabled:disabled-effect\"\n >\n {test.status === \"testing\"\n ? \"Testing…\"\n : \"Save & test connection\"}\n </button>\n {test.status === \"ok\" && (\n <span className=\"text-xs text-foreground\">{test.message}</span>\n )}\n {test.status === \"error\" && (\n <span className=\"text-xs text-destructive\">{test.message}</span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { DangerZone as BaseDangerZone } from \"@powerhousedao/design-system/connect\";\nimport {\n deleteDrive,\n setSelectedDrive,\n showPHModal,\n useDrives,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\n\nexport const DangerZone: React.FC = () => {\n const drives = useDrives();\n\n const handleDeleteDrive = async (drive: DocumentDriveDocument) => {\n await deleteDrive(drive.header.id);\n setSelectedDrive(undefined);\n };\n\n const handleClearStorage = () => {\n showPHModal({ type: \"clearStorage\" });\n };\n\n return (\n <BaseDangerZone\n drives={drives ?? []}\n onDeleteDrive={(drive) => {\n void handleDeleteDrive(drive);\n }}\n onClearStorage={handleClearStorage}\n />\n );\n};\n","import { DefaultEditor as BaseDefaultEditor } from \"@powerhousedao/design-system/connect\";\nimport { useCallback, useState } from \"react\";\n\nconst documentModelEditorOptions = [\n { label: \"V1\", value: \"document-model-editor\" },\n { label: \"V2\", value: \"document-model-editor-v2\" },\n] as const;\n\nexport const DefaultEditor: React.FC = () => {\n const [documentModelEditor, setDocumentModelEditor] = useState<\n (typeof documentModelEditorOptions)[number]\n >(documentModelEditorOptions[1]);\n\n const handleSetDocumentEditor = useCallback((value: string) => {\n const option = documentModelEditorOptions.find((dm) => dm.value == value);\n if (option) {\n setDocumentModelEditor(option);\n }\n }, []);\n\n return (\n <BaseDefaultEditor\n documentModelEditor={documentModelEditor.value}\n setDocumentModelEditor={handleSetDocumentEditor}\n documentModelEditorOptions={\n documentModelEditorOptions as unknown as {\n value: string;\n label: string;\n }[]\n }\n />\n );\n};\n","import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { PackageManager } from \"@powerhousedao/design-system/connect\";\nimport { useVetraPackageManager } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\n/**\n * Split a `name@tag` spec into its bare package name. Mirrors the design-system's\n * `parsePackageSpec` — duplicated here to avoid reaching into a deep subpath\n * export. Scoped names split on the LAST `@`, unscoped on the first.\n */\nfunction parseBareName(spec: string): string {\n const trimmed = spec.trim();\n const at = trimmed.startsWith(\"@\")\n ? trimmed.lastIndexOf(\"@\")\n : trimmed.indexOf(\"@\");\n return at > 0 ? trimmed.slice(0, at) : trimmed;\n}\n\nexport const ConnectPackageManager: React.FC = () => {\n const packageManager = useVetraPackageManager();\n const {\n registryPackageList,\n installedPackages,\n availablePackages,\n availableHasMore,\n isLoadingAvailable,\n isLoadingMoreAvailable,\n availableError,\n ensureAvailableLoaded,\n ensureInstalledMetadataLoaded,\n fetchAvailablePage,\n loadMoreAvailable,\n setAvailableSearch,\n updateRegistryPackageStatus,\n registerFallbackRegistryPackage,\n } = useRegistryPackages();\n\n async function handleInstall(packageSpec: string) {\n if (!packageManager) return;\n\n // The spec may include an explicit `@tag` / `@version` suffix from the\n // search input. Pass it through to the package manager as-is (the CDN\n // route already handles `name@tag` specs), but track status under the\n // bare name so the Settings list doesn't fragment.\n const bareName = parseBareName(packageSpec);\n // Packages that were in `/packages` when the user clicked Install go\n // through `updateRegistryPackageStatus` and hit an existing entry.\n // Packages that landed via the npm-uplink fallback weren't in the list,\n // so we register them explicitly rather than silently upserting a\n // placeholder — keeping the \"does not exist\" error as a signal for any\n // other code path that reaches update without a matching entry.\n const wasKnownToRegistry = registryPackageList.some(\n (p) => p.name === bareName,\n );\n const result = await packageManager.addPackage(packageSpec);\n if (result.type === \"success\") {\n if (wasKnownToRegistry) {\n updateRegistryPackageStatus(bareName, \"registry-install\");\n } else {\n registerFallbackRegistryPackage(\n bareName,\n result.package,\n packageManager.getPackageVersion(bareName) ??\n packageManager.getPackageVersion(packageSpec),\n \"registry-install\",\n );\n }\n toast(`Package \"${packageSpec}\" installed successfully`, {\n type: \"connect-success\",\n });\n } else {\n const message = result.error.message;\n console.error(\n `[Connect][PackageManager] Install failed for \"${packageSpec}\":`,\n result.error,\n );\n // `BrowserPackageManager` raises a generic \"Failed to fetch dynamically\n // imported module\" when the registry CDN returns an error. That covers\n // both \"the name exists nowhere (not on this registry AND not on the\n // npmjs uplink)\" and \"the tarball is there but doesn't look like a\n // Powerhouse package\". Map to plain-language copy — never dump the raw\n // API / loader message into the toast.\n const isLikelyNotFound = /failed to fetch|404|not found/i.test(message);\n const userMessage = isLikelyNotFound\n ? `Couldn't install \"${packageSpec}\". It isn't available on this registry or via npm.`\n : `Couldn't install \"${packageSpec}\". Please try again.`;\n toast(userMessage, { type: \"error\" });\n }\n }\n\n function handleUninstall(packageName: string) {\n if (!packageManager) return;\n try {\n packageManager.removePackage(packageName);\n updateRegistryPackageStatus(packageName, \"available\");\n\n toast(`Package \"${packageName}\" uninstalled successfully`, {\n type: \"connect-success\",\n });\n } catch (error) {\n console.error(\n `[Connect][PackageManager] Uninstall failed for \"${packageName}\":`,\n error,\n );\n toast(`Couldn't uninstall \"${packageName}\". Please try again.`, {\n type: \"error\",\n });\n }\n }\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <PackageManager\n mutable={true}\n installedPackages={installedPackages}\n availablePackages={availablePackages}\n isAvailableLoading={isLoadingAvailable}\n isLoadingMoreAvailable={isLoadingMoreAvailable}\n hasMoreAvailable={availableHasMore}\n onLoadMoreAvailable={loadMoreAvailable}\n availableError={availableError}\n onAvailableRetry={() => {\n void fetchAvailablePage({ reset: true });\n }}\n onAvailableSearchChange={setAvailableSearch}\n onAvailableTabOpen={ensureAvailableLoaded}\n onInstalledTabOpen={ensureInstalledMetadataLoaded}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n};\n","import {\n SettingsModal as SettingsModalV2,\n ThemeSwitch,\n} from \"@powerhousedao/design-system/connect\";\nimport { connectConfig } from \"@powerhousedao/connect/config\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport { Bot, CircleHelp, Package, PenLine, TriangleAlert } from \"lucide-react\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.js\";\nimport { AiAssistant } from \"./settings/ai-assistant.js\";\nimport { DangerZone } from \"./settings/danger-zone.js\";\nimport { DefaultEditor } from \"./settings/default-editor.js\";\nimport { ConnectPackageManager } from \"./settings/package-manager.js\";\n\nconst iconProps = { size: 16 } as const;\n\nexport const SettingsModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"settings\";\n\n const tabs = useMemo(\n () => [\n ...(connectConfig.aiAssistantEnabled\n ? [\n {\n id: \"ai-assistant\",\n icon: <Bot {...iconProps} />,\n label: \"AI Assistant\",\n content: AiAssistant,\n },\n ]\n : []),\n {\n id: \"package-manager\",\n icon: <Package {...iconProps} />,\n label: \"Package Manager\",\n content: ConnectPackageManager,\n },\n {\n id: \"default-editors\",\n icon: <PenLine {...iconProps} />,\n label: \"Default Editors\",\n content: DefaultEditor,\n },\n {\n id: \"danger-zone\",\n icon: <TriangleAlert {...iconProps} className=\"text-destructive\" />,\n label: <span className=\"text-destructive\">Danger Zone</span>,\n content: () => <DangerZone />,\n },\n {\n id: \"about\",\n icon: <CircleHelp {...iconProps} />,\n label: \"About\",\n content: About,\n },\n ],\n [],\n );\n\n return (\n <SettingsModalV2\n open={open}\n title={t(\"modals.connectSettings.title\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n tabs={tabs}\n navFooter={<ThemeSwitch horizontal />}\n />\n );\n};\n"],"names":["About","BaseAbout","packageJson","DangerZone","BaseDangerZone","DefaultEditor","BaseDefaultEditor","DefaultEditor","DangerZone","About","SettingsModalV2"],"mappings":"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","debug_id":"cd9b94c3-03c6-53f3-90e1-dffab5cfcac2"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2771e75f-3eb4-5196-8988-fa50733707ee")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d05afdb4-8b6f-5d27-8ef7-523366044046")}catch(e){}}();
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { useTranslation } from "react-i18next";
5
5
  import "react";
@@ -30,5 +30,5 @@ const UpgradeDriveModal = () => {
30
30
  //#endregion
31
31
  export { UpgradeDriveModal };
32
32
 
33
- //# sourceMappingURL=UpgradeDriveModal-C8scFkuq.js.map
34
- //# debugId=2771e75f-3eb4-5196-8988-fa50733707ee
33
+ //# sourceMappingURL=UpgradeDriveModal-CXX6D5Au.js.map
34
+ //# debugId=d05afdb4-8b6f-5d27-8ef7-523366044046
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeDriveModal-C8scFkuq.js","sources":["../src/components/modal/modals/UpgradeDriveModal.tsx"],"sourcesContent":["import { ConnectUpgradeDriveModal } from \"@powerhousedao/design-system/connect\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const UpgradeDriveModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"upgradeDrive\";\n const driveId = open ? phModal.driveId : undefined;\n\n const { t } = useTranslation();\n\n const onContinue = () => {\n // TODO: Implement upgrade drive\n console.log(\"Upgrade drive: \", driveId);\n closePHModal();\n };\n\n return (\n <ConnectUpgradeDriveModal\n open={open}\n onContinue={onContinue}\n header={t(\"modals.upgradeDrive.header\")}\n body={t(\"modals.upgradeDrive.body\")}\n cancelLabel={t(\"common.cancel\")}\n continueLabel={t(\"common.continue\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAKA,MAAa,0BAAoC;CAC/C,MAAM,UAAU,YAAY;CAC5B,MAAM,OAAO,SAAS,SAAS;CAC/B,MAAM,UAAU,OAAO,QAAQ,UAAU,KAAA;CAEzC,MAAM,EAAE,MAAM,gBAAgB;CAE9B,MAAM,mBAAmB;AAEvB,UAAQ,IAAI,mBAAmB,QAAQ;AACvC,gBAAc;;AAGhB,QACE,oBAAC,0BAAD;EACQ;EACM;EACZ,QAAQ,EAAE,6BAA6B;EACvC,MAAM,EAAE,2BAA2B;EACnC,aAAa,EAAE,gBAAgB;EAC/B,eAAe,EAAE,kBAAkB;EACnC,eAAe,WAAoB;AACjC,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,CAAA","debug_id":"2771e75f-3eb4-5196-8988-fa50733707ee"}
1
+ {"version":3,"file":"UpgradeDriveModal-CXX6D5Au.js","sources":["../src/components/modal/modals/UpgradeDriveModal.tsx"],"sourcesContent":["import { ConnectUpgradeDriveModal } from \"@powerhousedao/design-system/connect\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const UpgradeDriveModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"upgradeDrive\";\n const driveId = open ? phModal.driveId : undefined;\n\n const { t } = useTranslation();\n\n const onContinue = () => {\n // TODO: Implement upgrade drive\n console.log(\"Upgrade drive: \", driveId);\n closePHModal();\n };\n\n return (\n <ConnectUpgradeDriveModal\n open={open}\n onContinue={onContinue}\n header={t(\"modals.upgradeDrive.header\")}\n body={t(\"modals.upgradeDrive.body\")}\n cancelLabel={t(\"common.cancel\")}\n continueLabel={t(\"common.continue\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAKA,MAAa,0BAAoC;CAC/C,MAAM,UAAU,WAAW;CAC3B,MAAM,OAAO,SAAS,SAAS;CAC/B,MAAM,UAAU,OAAO,QAAQ,UAAU,KAAA;CAEzC,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,mBAAmB;EAEvB,QAAQ,IAAI,mBAAmB,OAAO;EACtC,aAAa;CACf;CAEA,OACE,oBAAC,0BAAD;EACQ;EACM;EACZ,QAAQ,EAAE,4BAA4B;EACtC,MAAM,EAAE,0BAA0B;EAClC,aAAa,EAAE,eAAe;EAC9B,eAAe,EAAE,iBAAiB;EAClC,eAAe,WAAoB;GACjC,IAAI,CAAC,QAAQ,OAAO,aAAa;EACnC;CACD,CAAA;AAEL","debug_id":"d05afdb4-8b6f-5d27-8ef7-523366044046"}
@@ -0,0 +1,4 @@
1
+ import { t as AppLoader } from "./app-loader-k3McuyRp.js";
2
+ export { AppLoader };
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1a9e6d09-d75e-5c28-9fb2-e240a461d489")}catch(e){}}();
4
+ //# debugId=1a9e6d09-d75e-5c28-9fb2-e240a461d489
@@ -1,18 +1,19 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="32b855f1-0e36-5dd2-bbad-3443ceb189d6")}catch(e){}}();
3
- import { n as getRuntimeConfig } from "./runtime-config-DL3QjcfM.js";
4
- import { n as drainOpenPanelBuffer, t as clearOpenPanelBuffer } from "./buffer-Bu1eWySI.js";
5
- import { c as idbError } from "./pglite-major-D3sdYMs2.js";
6
- import { n as cloneFileData, r as migrateIdb } from "./pglite-migrate-core-BIWwtl5e.js";
7
- import { n as setMigrationStatus, t as AppSkeleton } from "./app-skeleton-C6RjKQuy.js";
8
- import { n as useIsEmbedded } from "./useIsEmbedded-B_AIFqBu.js";
9
- import { a as defaultPHDocumentEditorConfig, i as defaultPHAppConfig, r as connectConfig } from "./connect.config-BofwIsWJ.js";
10
- import { n as useAcceptedCookies, t as setBannerShown } from "./preferences-store-Coa1SHvi.js";
11
- import { t as setSentryModule } from "./sentry-QXKgQmr2.js";
12
- import { n as dismissToast, r as toast, t as ToastContainer } from "./toast-CO6ChlzE.js";
13
- import { f as PRIMARY_IDB_NAMES, r as subscribeWorkerConnection, s as getCachedMigrationMajor, t as getWorkerConnectionStatus, u as subscribeMigrationMajor } from "./connection-state-DAqW06pk.js";
14
- import { n as serviceWorkerManager, r as subscribeServiceWorkerUpdate, t as getServiceWorkerUpdateAvailable } from "./registerServiceWorker-BAbPbSW4.js";
15
- import { t as useOpenRenownLogin } from "./use-renown-login-rS9wfcuG.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="438c342c-0a7d-5586-8a76-014ce9e20cdc")}catch(e){}}();
3
+ import { n as getRuntimeConfig } from "./runtime-config-DtJIUgYw.js";
4
+ import { n as drainOpenPanelBuffer, t as clearOpenPanelBuffer } from "./buffer-DNTcuap_.js";
5
+ import { c as idbError } from "./pglite-major-BbmMK26m.js";
6
+ import { n as cloneFileData, r as migrateIdb } from "./pglite-migrate-core-o88cWesm.js";
7
+ import "./i18n-CTgT1HG-.js";
8
+ import { n as setMigrationStatus, t as AppSkeleton } from "./app-skeleton--Me5zlSz.js";
9
+ import { n as useIsEmbedded } from "./useIsEmbedded-BWJ0qb7w.js";
10
+ import { a as defaultPHDocumentEditorConfig, i as defaultPHAppConfig, r as connectConfig } from "./connect.config-Dgs13R1s.js";
11
+ import { n as useAcceptedCookies, t as setBannerShown } from "./preferences-store-Bekp7tv-.js";
12
+ import { t as setSentryModule } from "./sentry-jfDyrxdX.js";
13
+ import { n as dismissToast, r as toast, t as ToastContainer } from "./toast-C6WW-_O-.js";
14
+ import { f as PRIMARY_IDB_NAMES, r as subscribeWorkerConnection, s as getCachedMigrationMajor, t as getWorkerConnectionStatus, u as subscribeMigrationMajor } from "./connection-state-Cy8xRCm_.js";
15
+ import { n as serviceWorkerManager, r as subscribeServiceWorkerUpdate, t as getServiceWorkerUpdateAvailable } from "./registerServiceWorker-Cy1G2rCq.js";
16
+ import { t as useOpenRenownLogin } from "./use-renown-login-BzOSQETV.js";
16
17
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
17
18
  import { Trans, useTranslation } from "react-i18next";
18
19
  import React, { StrictMode, Suspense, createElement, lazy, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
@@ -104,11 +105,12 @@ function DetailedFallback({ error, resetErrorBoundary }) {
104
105
  * Suitable for use as a custom fallbackRender when you need simple error display.
105
106
  */
106
107
  function CenteredErrorMessage({ error }) {
108
+ const errorMessage = error instanceof Error ? error.message : String(error);
107
109
  return /* @__PURE__ */ jsx("div", {
108
110
  className: "flex size-full items-center justify-center p-6",
109
111
  children: /* @__PURE__ */ jsx("h3", {
110
112
  className: "max-w-lg min-w-0 text-center text-lg font-semibold wrap-break-word text-foreground",
111
- children: error instanceof Error ? error.message : String(error)
113
+ children: errorMessage
112
114
  })
113
115
  });
114
116
  }
@@ -168,8 +170,9 @@ function ErrorBoundary$1(props) {
168
170
  (loggerContext ? childLogger(loggerContext) : logger$2).error("@error @info", error, info);
169
171
  onError?.(error, info);
170
172
  };
173
+ const fallbackRender = hasCustomFallback(props) ? props.fallbackRender : getFallbackComponent(props.variant, props.fallbackMessage);
171
174
  return /* @__PURE__ */ jsx(ErrorBoundary, {
172
- fallbackRender: hasCustomFallback(props) ? props.fallbackRender : getFallbackComponent(props.variant, props.fallbackMessage),
175
+ fallbackRender,
173
176
  onError: handleError,
174
177
  resetKeys,
175
178
  children
@@ -344,6 +347,9 @@ function buildDefaultProperties(op) {
344
347
  * routed to `onError` and never thrown back to the manager.
345
348
  */
346
349
  var OpenPanelProcessor = class {
350
+ client;
351
+ lookupMap;
352
+ onError;
347
353
  constructor(client, lookupMap, onError = (err) => console.warn("[OpenPanelProcessor] Error tracking event:", err)) {
348
354
  this.client = client;
349
355
  this.lookupMap = lookupMap;
@@ -686,14 +692,15 @@ const emptyArray = [];
686
692
  function usePendingInstallations() {
687
693
  const discoveryService = usePackageDiscoveryService();
688
694
  const cacheRef = useRef(emptyArray);
689
- return useSyncExternalStore((cb) => discoveryService?.subscribePending(cb) ?? (() => {}), useCallback(() => {
695
+ const getSnapshot = useCallback(() => {
690
696
  if (!discoveryService) return emptyArray;
691
697
  const next = discoveryService.getPendingInstallations() ?? emptyArray;
692
698
  const prev = cacheRef.current;
693
699
  if (next === prev || next.length === prev.length && next.every((p, i) => p === prev[i])) return prev;
694
700
  cacheRef.current = next;
695
701
  return next;
696
- }, [discoveryService]));
702
+ }, [discoveryService]);
703
+ return useSyncExternalStore((cb) => discoveryService?.subscribePending(cb) ?? (() => {}), getSnapshot);
697
704
  }
698
705
  //#endregion
699
706
  //#region src/hooks/useUndoRedoShortcuts.ts
@@ -908,10 +915,7 @@ function importOne(row, driveId, documentTypes) {
908
915
  settle(progress.fileNode);
909
916
  break;
910
917
  case "failed":
911
- case "unsupported-document-type":
912
- settle(void 0);
913
- break;
914
- default: break;
918
+ case "unsupported-document-type": settle(void 0);
915
919
  }
916
920
  }, documentTypes, "duplicate").catch(() => {
917
921
  settle(void 0);
@@ -954,7 +958,7 @@ const openUrl = openBrowserUrl;
954
958
  //#region src/utils/pglite-migration.ts
955
959
  const BACKUP_PREFIX = "ph-pglite-backup::";
956
960
  const BACKUP_INDEX_KEY = "ph:pglite-backups";
957
- const BACKUP_RETENTION_MS = 720 * 60 * 60 * 1e3;
961
+ const BACKUP_RETENTION_MS = 2592e6;
958
962
  function deleteIdb(name, timeoutMs = 15e3) {
959
963
  return new Promise((resolve, reject) => {
960
964
  const req = indexedDB.deleteDatabase(name);
@@ -1271,11 +1275,12 @@ function PackageInstallPrompt() {
1271
1275
  const pendingInstallations = usePendingInstallations();
1272
1276
  const discoveryService = usePackageDiscoveryService();
1273
1277
  if (!discoveryService || pendingInstallations.length === 0) return null;
1278
+ const installations = pendingInstallations.flatMap((p) => p.packageNames.map((packageName) => ({
1279
+ documentType: p.documentType,
1280
+ packageName
1281
+ })));
1274
1282
  return /* @__PURE__ */ jsx(PackageInstallModal, {
1275
- pendingInstallations: pendingInstallations.flatMap((p) => p.packageNames.map((packageName) => ({
1276
- documentType: p.documentType,
1277
- packageName
1278
- }))),
1283
+ pendingInstallations: installations,
1279
1284
  onInstall: (packageName) => discoveryService.approveInstallation(packageName),
1280
1285
  onDismiss: (packageName) => discoveryService.dismissInstallation(packageName)
1281
1286
  });
@@ -1699,6 +1704,7 @@ const Footer$1 = () => {
1699
1704
  //#endregion
1700
1705
  //#region src/components/root.tsx
1701
1706
  function Root() {
1707
+ const isEmbedded = useIsEmbedded();
1702
1708
  return /* @__PURE__ */ jsx("div", {
1703
1709
  className: "h-screen bg-background",
1704
1710
  children: /* @__PURE__ */ jsx("div", {
@@ -1707,7 +1713,7 @@ function Root() {
1707
1713
  tabIndex: 0,
1708
1714
  children: /* @__PURE__ */ jsxs(Suspense, {
1709
1715
  name: "Root",
1710
- children: [!useIsEmbedded() && /* @__PURE__ */ jsx(Sidebar, {}), /* @__PURE__ */ jsx("div", {
1716
+ children: [!isEmbedded && /* @__PURE__ */ jsx(Sidebar, {}), /* @__PURE__ */ jsx("div", {
1711
1717
  className: "relative flex-1 overflow-auto",
1712
1718
  children: /* @__PURE__ */ jsx(Outlet, {})
1713
1719
  })]
@@ -2127,20 +2133,20 @@ const MigrationBanner = () => {
2127
2133
  };
2128
2134
  //#endregion
2129
2135
  //#region src/components/modal/modals-container.tsx
2130
- const AddDriveModal$1 = lazy(() => import("./AddDriveModal-CW-ZSWkf.js").then((m) => ({ default: m.AddDriveModal })));
2131
- const ClearStorageModal = lazy(() => import("./ClearStorageModal-BYFLwlea.js").then((m) => ({ default: m.ClearStorageModal })));
2132
- const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-lKdOuTNm.js").then((m) => ({ default: m.CookiesPolicyModal })));
2133
- const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-HmK-78sB.js").then((m) => ({ default: m.CreateDocumentModal })));
2134
- const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-BLs1jLfT.js").then((m) => ({ default: m.DebugSettingsModal })));
2135
- const DeleteDriveModal = lazy(() => import("./DeleteDriveModal-Cyw6hwc2.js").then((m) => ({ default: m.DeleteDriveModal })));
2136
- const DeleteItemModal = lazy(() => import("./DeleteItemModal-CiFwstZx.js").then((m) => ({ default: m.DeleteItemModal })));
2137
- const DisclaimerModal = lazy(() => import("./DisclaimerModal-DIRsjUvu.js").then((m) => ({ default: m.DisclaimerModal })));
2138
- const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-DRarHRIb.js").then((m) => ({ default: m.DriveSettingsModal })));
2139
- const DownloadDocumentWithErrorsModal = lazy(() => import("./DownloadDocumentWithErrorsModal-CxsR74d-.js").then((m) => ({ default: m.DownloadDocumentWithErrorsModal })));
2140
- const DocumentVersionUnsupportedModal = lazy(() => import("./DocumentVersionUnsupportedModal-KftC3-jr.js").then((m) => ({ default: m.DocumentVersionUnsupportedModal })));
2141
- const ConfirmDocumentUpgradeModal = lazy(() => import("./ConfirmDocumentUpgradeModal-BBrFlHp_.js").then((m) => ({ default: m.ConfirmDocumentUpgradeModal })));
2142
- const SettingsModal$1 = lazy(() => import("./SettingsModal-H1j2W31l.js").then((m) => ({ default: m.SettingsModal })));
2143
- const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-C8scFkuq.js").then((m) => ({ default: m.UpgradeDriveModal })));
2136
+ const AddDriveModal$1 = lazy(() => import("./AddDriveModal-DhNfP94R.js").then((m) => ({ default: m.AddDriveModal })));
2137
+ const ClearStorageModal = lazy(() => import("./ClearStorageModal-InfiThmU.js").then((m) => ({ default: m.ClearStorageModal })));
2138
+ const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-BLw4pnhn.js").then((m) => ({ default: m.CookiesPolicyModal })));
2139
+ const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-Bmv0V-kY.js").then((m) => ({ default: m.CreateDocumentModal })));
2140
+ const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-DGB3wq4y.js").then((m) => ({ default: m.DebugSettingsModal })));
2141
+ const DeleteDriveModal = lazy(() => import("./DeleteDriveModal-CjGnG0ht.js").then((m) => ({ default: m.DeleteDriveModal })));
2142
+ const DeleteItemModal = lazy(() => import("./DeleteItemModal-BbY_4_xT.js").then((m) => ({ default: m.DeleteItemModal })));
2143
+ const DisclaimerModal = lazy(() => import("./DisclaimerModal-DuglmEwL.js").then((m) => ({ default: m.DisclaimerModal })));
2144
+ const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-d1L0eYof.js").then((m) => ({ default: m.DriveSettingsModal })));
2145
+ const DownloadDocumentWithErrorsModal = lazy(() => import("./DownloadDocumentWithErrorsModal-BsPQ5qgy.js").then((m) => ({ default: m.DownloadDocumentWithErrorsModal })));
2146
+ const DocumentVersionUnsupportedModal = lazy(() => import("./DocumentVersionUnsupportedModal-C4fy7fZ6.js").then((m) => ({ default: m.DocumentVersionUnsupportedModal })));
2147
+ const ConfirmDocumentUpgradeModal = lazy(() => import("./ConfirmDocumentUpgradeModal-DcOZy20m.js").then((m) => ({ default: m.ConfirmDocumentUpgradeModal })));
2148
+ const SettingsModal$1 = lazy(() => import("./SettingsModal-Bqch-LlY.js").then((m) => ({ default: m.SettingsModal })));
2149
+ const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-CXX6D5Au.js").then((m) => ({ default: m.UpgradeDriveModal })));
2144
2150
  const modalComponents = {
2145
2151
  addDrive: AddDriveModal$1,
2146
2152
  clearStorage: ClearStorageModal,
@@ -2154,13 +2160,13 @@ const modalComponents = {
2154
2160
  downloadDocumentWithErrors: DownloadDocumentWithErrorsModal,
2155
2161
  documentVersionUnsupported: DocumentVersionUnsupportedModal,
2156
2162
  confirmDocumentUpgrade: ConfirmDocumentUpgradeModal,
2157
- inspector: lazy(() => import("./InspectorModal-BnJgQP8R.js").then((m) => ({ default: m.InspectorModal }))),
2163
+ inspector: lazy(() => import("./InspectorModal-CITS4ldi.js").then((m) => ({ default: m.InspectorModal }))),
2158
2164
  settings: SettingsModal$1,
2159
2165
  upgradeDrive: UpgradeDriveModal,
2160
- missingPackage: lazy(() => import("./MissingPackageModal-Bar7ErIs.js").then((m) => ({ default: m.ConnectMissingPackageModal }))),
2161
- driveAuthRequired: lazy(() => import("./DriveAuthRequiredModal-BoqnnNKT.js").then((m) => ({ default: m.DriveAuthRequiredModal }))),
2162
- openFileDocuments: lazy(() => import("./OpenFileDocumentsModal-0l2dkdEB.js").then((m) => ({ default: m.OpenFileDocumentsModal }))),
2163
- login: lazy(() => import("./LoginModal-DhQTxsoG.js").then((m) => ({ default: m.LoginModal })))
2166
+ missingPackage: lazy(() => import("./MissingPackageModal-Dmu03EX7.js").then((m) => ({ default: m.ConnectMissingPackageModal }))),
2167
+ driveAuthRequired: lazy(() => import("./DriveAuthRequiredModal-CtsB0kwH.js").then((m) => ({ default: m.DriveAuthRequiredModal }))),
2168
+ openFileDocuments: lazy(() => import("./OpenFileDocumentsModal-Cym38LC9.js").then((m) => ({ default: m.OpenFileDocumentsModal }))),
2169
+ login: lazy(() => import("./LoginModal-CI0ogC2-.js").then((m) => ({ default: m.LoginModal })))
2164
2170
  };
2165
2171
  const ModalsContainer = lazy(() => {
2166
2172
  return Promise.resolve({ default: () => {
@@ -2199,9 +2205,9 @@ const ServiceWorkerUpdatePrompt = () => {
2199
2205
  };
2200
2206
  //#endregion
2201
2207
  //#region src/components/app-loader.tsx
2202
- const CookieBanner$1 = lazy(() => import("./cookie-banner-BQescTYk.js").then((m) => ({ default: m.CookieBanner })));
2208
+ const CookieBanner$1 = lazy(() => import("./cookie-banner-CSF930bl.js").then((m) => ({ default: m.CookieBanner })));
2203
2209
  const AppLoader = (props) => {
2204
- const Load = lazy(() => import("./load-G--MiC6j.js").then((m) => m.loadComponent(props.localPackage)));
2210
+ const Load = lazy(() => import("./load-C1kCFFvW.js").then((m) => m.loadComponent(props.localPackage)));
2205
2211
  return /* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsxs(ErrorBoundary$1, {
2206
2212
  fallbackRender: (props) => /* @__PURE__ */ jsx(AppSkeleton, { children: /* @__PURE__ */ jsx(DetailedFallback, { ...props }) }),
2207
2213
  resetKeys: [props.localPackage],
@@ -2237,5 +2243,5 @@ const AppLoader = (props) => {
2237
2243
  //#endregion
2238
2244
  export { EditorLoader as _, Root as a, Analytics as b, DriveIcon as c, runOpenFileImports as d, clearPendingImportFiles as f, AppContainer as g, subscribePendingImportFiles as h, Router as i, DotsLoader as l, pendingFileKey as m, Sidebar as n, Footer$1 as o, getPendingImportFiles as p, SearchBar as r, DocumentEditor as s, AppLoader as t, App as u, DocumentEditorContainer as v, OpenPanel as y };
2239
2245
 
2240
- //# sourceMappingURL=app-loader-CEjrJHls.js.map
2241
- //# debugId=32b855f1-0e36-5dd2-bbad-3443ceb189d6
2246
+ //# sourceMappingURL=app-loader-k3McuyRp.js.map
2247
+ //# debugId=438c342c-0a7d-5586-8a76-014ce9e20cdc