@powerhousedao/connect 6.2.2-dev.10 → 6.2.2-dev.12
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/assets/document-icon-192x192.png +0 -0
- package/assets/document-icon-512x512.png +0 -0
- package/assets/pwa-192x192.png +0 -0
- package/assets/pwa-512x512-maskable.png +0 -0
- package/assets/pwa-512x512.png +0 -0
- package/dist/{AddDriveModal-MMHlkJBJ.js → AddDriveModal-B_Oft9Cv.js} +4 -4
- package/dist/{AddDriveModal-MMHlkJBJ.js.map → AddDriveModal-B_Oft9Cv.js.map} +1 -1
- package/dist/{ClearStorageModal-CriXdO7P.js → ClearStorageModal-14u4aeex.js} +4 -4
- package/dist/{ClearStorageModal-CriXdO7P.js.map → ClearStorageModal-14u4aeex.js.map} +1 -1
- package/dist/{CookiesPolicyModal-CkcUKPLb.js → CookiesPolicyModal-CYFTfkEN.js} +3 -3
- package/dist/{CookiesPolicyModal-CkcUKPLb.js.map → CookiesPolicyModal-CYFTfkEN.js.map} +1 -1
- package/dist/{CreateDocumentModal-CvsTh0HM.js → CreateDocumentModal-Dmg3R-Vh.js} +3 -3
- package/dist/{CreateDocumentModal-CvsTh0HM.js.map → CreateDocumentModal-Dmg3R-Vh.js.map} +1 -1
- package/dist/{DebugSettingsModal-YV8YMO9a.js → DebugSettingsModal-CHyfTg2u.js} +5 -5
- package/dist/{DebugSettingsModal-YV8YMO9a.js.map → DebugSettingsModal-CHyfTg2u.js.map} +1 -1
- package/dist/{DeleteDriveModal-DSTK8FYk.js → DeleteDriveModal-CzRPqyMf.js} +4 -4
- package/dist/{DeleteDriveModal-DSTK8FYk.js.map → DeleteDriveModal-CzRPqyMf.js.map} +1 -1
- package/dist/{DeleteItemModal-B2nJmjsP.js → DeleteItemModal-CaCrmQOG.js} +4 -4
- package/dist/{DeleteItemModal-B2nJmjsP.js.map → DeleteItemModal-CaCrmQOG.js.map} +1 -1
- package/dist/{DisclaimerModal-D5FO34u9.js → DisclaimerModal-D5Jhefcc.js} +3 -3
- package/dist/{DisclaimerModal-D5FO34u9.js.map → DisclaimerModal-D5Jhefcc.js.map} +1 -1
- package/dist/{DownloadDocumentWithErrorsModal-tEr3bbtN.js → DownloadDocumentWithErrorsModal-ZuX8WDCC.js} +3 -3
- package/dist/{DownloadDocumentWithErrorsModal-tEr3bbtN.js.map → DownloadDocumentWithErrorsModal-ZuX8WDCC.js.map} +1 -1
- package/dist/{DriveAuthRequiredModal-BA2vS3oF.js → DriveAuthRequiredModal-CPV5uXnf.js} +3 -3
- package/dist/{DriveAuthRequiredModal-BA2vS3oF.js.map → DriveAuthRequiredModal-CPV5uXnf.js.map} +1 -1
- package/dist/{DriveSettingsModal-kR3hQnh4.js → DriveSettingsModal-VNpuhty1.js} +3 -3
- package/dist/{DriveSettingsModal-kR3hQnh4.js.map → DriveSettingsModal-VNpuhty1.js.map} +1 -1
- package/dist/{InspectorModal-DKvjtozu.js → InspectorModal-DKzQILfr.js} +6 -6
- package/dist/{InspectorModal-DKvjtozu.js.map → InspectorModal-DKzQILfr.js.map} +1 -1
- package/dist/{MissingPackageModal-BQcCQbOn.js → MissingPackageModal-D4V6oYzy.js} +18 -6
- package/dist/MissingPackageModal-D4V6oYzy.js.map +1 -0
- package/dist/OpenFileDocumentsModal-BLy9Z98Q.js +293 -0
- package/dist/OpenFileDocumentsModal-BLy9Z98Q.js.map +1 -0
- package/dist/{SettingsModal-yk1gDZgB.js → SettingsModal-Cmq_VH4m.js} +25 -12
- package/dist/SettingsModal-Cmq_VH4m.js.map +1 -0
- package/dist/{UpgradeDriveModal-BZGSE9_r.js → UpgradeDriveModal-Ul4tyz-Q.js} +3 -3
- package/dist/{UpgradeDriveModal-BZGSE9_r.js.map → UpgradeDriveModal-Ul4tyz-Q.js.map} +1 -1
- package/dist/app-loader-CmZQxyq0.js +4 -0
- package/dist/{app-loader-BrGV3wVg.js → app-loader-DdiMcHzZ.js} +251 -34
- package/dist/app-loader-DdiMcHzZ.js.map +1 -0
- package/dist/{build-info-DDJ2GhCe.js → build-info-BU9FFwx3.js} +5 -5
- package/dist/{build-info-DDJ2GhCe.js.map → build-info-BU9FFwx3.js.map} +1 -1
- package/dist/components-D_F74RBh.js +5 -0
- package/dist/{connection-state-DO_2lAEJ.js → connection-state-xPSbZ_4J.js} +3 -3
- package/dist/{connection-state-DO_2lAEJ.js.map → connection-state-xPSbZ_4J.js.map} +1 -1
- package/dist/{load-BrYKdy5m.js → load-ClIUHisS.js} +9 -9
- package/dist/{load-BrYKdy5m.js.map → load-ClIUHisS.js.map} +1 -1
- package/dist/main.js +1 -1
- package/dist/{package-DvEHDzEU.js → package-G8LMMUz8.js} +4 -4
- package/dist/package-G8LMMUz8.js.map +1 -0
- package/dist/{pglite-seed-z3B1JA38.js → pglite-seed-DRYYEWUq.js} +4 -4
- package/dist/{pglite-seed-z3B1JA38.js.map → pglite-seed-DRYYEWUq.js.map} +1 -1
- package/dist/pwa-manifest-link-CG8UajMz.js +34 -0
- package/dist/pwa-manifest-link-CG8UajMz.js.map +1 -0
- package/dist/{reactor-BRr4To9y.js → reactor-BGdk3n2t.js} +138 -11
- package/dist/reactor-BGdk3n2t.js.map +1 -0
- package/dist/{registerServiceWorker-nJIc0yEY.js → registerServiceWorker-uI4Gj6fl.js} +5 -3
- package/dist/registerServiceWorker-uI4Gj6fl.js.map +1 -0
- package/dist/{reload-connect-toast-D1Iqw9E_.js → reload-connect-toast-BkgP9i6_.js} +19 -3
- package/dist/{reload-connect-toast-D1Iqw9E_.js.map → reload-connect-toast-BkgP9i6_.js.map} +1 -1
- package/dist/start-connect.js +1 -1
- package/dist/style.css +16 -3
- package/dist/{toast-4t-VimvD.js → toast-BLv8rjmy.js} +3 -3
- package/dist/{toast-4t-VimvD.js.map → toast-BLv8rjmy.js.map} +1 -1
- package/dist/useRegistryPackages-DMhCvTWq.js +314 -0
- package/dist/useRegistryPackages-DMhCvTWq.js.map +1 -0
- package/package.json +11 -11
- package/dist/MissingPackageModal-BQcCQbOn.js.map +0 -1
- package/dist/SettingsModal-yk1gDZgB.js.map +0 -1
- package/dist/app-loader-Be9G3Rlk.js +0 -4
- package/dist/app-loader-BrGV3wVg.js.map +0 -1
- package/dist/components-BfW9xuar.js +0 -5
- package/dist/package-DvEHDzEU.js.map +0 -1
- package/dist/reactor-BRr4To9y.js.map +0 -1
- package/dist/registerServiceWorker-nJIc0yEY.js.map +0 -1
- package/dist/useRegistryPackages-BaYtekjQ.js +0 -179
- package/dist/useRegistryPackages-BaYtekjQ.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
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]="
|
|
3
|
-
import { t as package_default } from "./package-
|
|
4
|
-
import { i as shortGitSha, n as getGitUrl, t as getGitSha } from "./build-info-
|
|
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]="2a63fe3e-d813-5b05-a3fc-e77b0ae38f1c")}catch(e){}}();
|
|
3
|
+
import { t as package_default } from "./package-G8LMMUz8.js";
|
|
4
|
+
import { i as shortGitSha, n as getGitUrl, t as getGitSha } from "./build-info-BU9FFwx3.js";
|
|
5
5
|
import { r as connectConfig } from "./connect.config-vgUeFoNp.js";
|
|
6
|
-
import { n as toast } from "./toast-
|
|
7
|
-
import { t as useRegistryPackages } from "./useRegistryPackages-
|
|
6
|
+
import { n as toast } from "./toast-BLv8rjmy.js";
|
|
7
|
+
import { t as useRegistryPackages } from "./useRegistryPackages-DMhCvTWq.js";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
import { t } from "i18next";
|
|
10
10
|
import { useCallback, useMemo, useState } from "react";
|
|
@@ -200,7 +200,7 @@ function parseBareName(spec) {
|
|
|
200
200
|
}
|
|
201
201
|
const ConnectPackageManager = () => {
|
|
202
202
|
const packageManager = useVetraPackageManager();
|
|
203
|
-
const { registryPackageList, updateRegistryPackageStatus, registerFallbackRegistryPackage } = useRegistryPackages();
|
|
203
|
+
const { registryPackageList, installedPackages, availablePackages, availableHasMore, isLoadingAvailable, isLoadingMoreAvailable, availableError, ensureAvailableLoaded, fetchAvailablePage, loadMoreAvailable, setAvailableSearch, updateRegistryPackageStatus, registerFallbackRegistryPackage } = useRegistryPackages();
|
|
204
204
|
async function handleInstall(packageSpec) {
|
|
205
205
|
if (!packageManager) return;
|
|
206
206
|
const bareName = parseBareName(packageSpec);
|
|
@@ -212,7 +212,8 @@ const ConnectPackageManager = () => {
|
|
|
212
212
|
toast(`Package "${packageSpec}" installed successfully`, { type: "connect-success" });
|
|
213
213
|
} else {
|
|
214
214
|
const message = result.error.message;
|
|
215
|
-
|
|
215
|
+
console.error(`[Connect][PackageManager] Install failed for "${packageSpec}":`, result.error);
|
|
216
|
+
toast(/failed to fetch|404|not found/i.test(message) ? `Couldn't install "${packageSpec}". It isn't available on this registry or via npm.` : `Couldn't install "${packageSpec}". Please try again.`, { type: "error" });
|
|
216
217
|
}
|
|
217
218
|
}
|
|
218
219
|
function handleUninstall(packageName) {
|
|
@@ -222,14 +223,26 @@ const ConnectPackageManager = () => {
|
|
|
222
223
|
updateRegistryPackageStatus(packageName, "available");
|
|
223
224
|
toast(`Package "${packageName}" uninstalled successfully`, { type: "connect-success" });
|
|
224
225
|
} catch (error) {
|
|
225
|
-
|
|
226
|
+
console.error(`[Connect][PackageManager] Uninstall failed for "${packageName}":`, error);
|
|
227
|
+
toast(`Couldn't uninstall "${packageName}". Please try again.`, { type: "error" });
|
|
226
228
|
}
|
|
227
229
|
}
|
|
228
230
|
return /* @__PURE__ */ jsx("div", {
|
|
229
|
-
className: "flex h-
|
|
231
|
+
className: "flex min-h-0 flex-1 flex-col",
|
|
230
232
|
children: /* @__PURE__ */ jsx(PackageManager, {
|
|
231
233
|
mutable: true,
|
|
232
|
-
|
|
234
|
+
installedPackages,
|
|
235
|
+
availablePackages,
|
|
236
|
+
isAvailableLoading: isLoadingAvailable,
|
|
237
|
+
isLoadingMoreAvailable,
|
|
238
|
+
hasMoreAvailable: availableHasMore,
|
|
239
|
+
onLoadMoreAvailable: loadMoreAvailable,
|
|
240
|
+
availableError,
|
|
241
|
+
onAvailableRetry: () => {
|
|
242
|
+
fetchAvailablePage({ reset: true });
|
|
243
|
+
},
|
|
244
|
+
onAvailableSearchChange: setAvailableSearch,
|
|
245
|
+
onAvailableTabOpen: ensureAvailableLoaded,
|
|
233
246
|
onInstall: handleInstall,
|
|
234
247
|
onUninstall: handleUninstall
|
|
235
248
|
})
|
|
@@ -285,5 +298,5 @@ const SettingsModal = () => {
|
|
|
285
298
|
//#endregion
|
|
286
299
|
export { SettingsModal };
|
|
287
300
|
|
|
288
|
-
//# sourceMappingURL=SettingsModal-
|
|
289
|
-
//# debugId=
|
|
301
|
+
//# sourceMappingURL=SettingsModal-Cmq_VH4m.js.map
|
|
302
|
+
//# debugId=2a63fe3e-d813-5b05-a3fc-e77b0ae38f1c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsModal-Cmq_VH4m.js","sources":["../src/components/modal/modals/settings/about.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 { 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 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 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 { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport { CircleHelp, Package, PenLine, TriangleAlert } from \"lucide-react\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.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 {\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":"2a63fe3e-d813-5b05-a3fc-e77b0ae38f1c"}
|
|
@@ -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]="
|
|
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]="f3f737bf-a881-54cb-ae94-2c0265b6ac48")}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-
|
|
34
|
-
//# debugId=
|
|
33
|
+
//# sourceMappingURL=UpgradeDriveModal-Ul4tyz-Q.js.map
|
|
34
|
+
//# debugId=f3f737bf-a881-54cb-ae94-2c0265b6ac48
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpgradeDriveModal-
|
|
1
|
+
{"version":3,"file":"UpgradeDriveModal-Ul4tyz-Q.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":"f3f737bf-a881-54cb-ae94-2c0265b6ac48"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { t as AppLoader } from "./app-loader-DdiMcHzZ.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]="76defe34-ddac-546d-ba09-23d3e8272579")}catch(e){}}();
|
|
4
|
+
//# debugId=76defe34-ddac-546d-ba09-23d3e8272579
|
|
@@ -1,19 +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]="
|
|
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]="fcb16c4f-700e-5a54-9c7a-8bc0833ab6c9")}catch(e){}}();
|
|
3
3
|
import { n as getRuntimeConfig } from "./runtime-config-DL3QjcfM.js";
|
|
4
4
|
import { c as idbError } from "./pglite-major-B39aOEiE.js";
|
|
5
5
|
import { n as cloneFileData, r as migrateIdb } from "./pglite-migrate-core-Boxqqx-c.js";
|
|
6
|
-
import { i as i18n, n as setSentryModule } from "./reload-connect-toast-
|
|
6
|
+
import { i as i18n, n as setSentryModule } from "./reload-connect-toast-BkgP9i6_.js";
|
|
7
7
|
import { a as defaultPHDocumentEditorConfig, i as defaultPHAppConfig, r as connectConfig } from "./connect.config-vgUeFoNp.js";
|
|
8
|
-
import { f as PRIMARY_IDB_NAMES, r as subscribeWorkerConnection, s as getCachedMigrationMajor, t as getWorkerConnectionStatus, u as subscribeMigrationMajor } from "./connection-state-
|
|
9
|
-
import { n as serviceWorkerManager, r as subscribeServiceWorkerUpdate, t as getServiceWorkerUpdateAvailable } from "./registerServiceWorker-
|
|
10
|
-
import { n as toast, t as ToastContainer } from "./toast-
|
|
8
|
+
import { f as PRIMARY_IDB_NAMES, r as subscribeWorkerConnection, s as getCachedMigrationMajor, t as getWorkerConnectionStatus, u as subscribeMigrationMajor } from "./connection-state-xPSbZ_4J.js";
|
|
9
|
+
import { n as serviceWorkerManager, r as subscribeServiceWorkerUpdate, t as getServiceWorkerUpdateAvailable } from "./registerServiceWorker-uI4Gj6fl.js";
|
|
10
|
+
import { n as toast, t as ToastContainer } from "./toast-BLv8rjmy.js";
|
|
11
11
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
12
12
|
import { Trans, useTranslation } from "react-i18next";
|
|
13
13
|
import React, { StrictMode, Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
14
|
-
import { DriveCollectionId, getRevisionFromDate, initTheme, logout, openRenown, setPHAppConfig, setPHDocumentEditorConfig, setRevisionHistoryVisible, setSelectedDrive, setSelectedNode, showPHModal, useAppModuleById, useConnectionStates, useDefaultAppModule, useDocumentById, useDocumentModelModuleById, useDocumentOperations, useDrives, useEditorModuleById, useEditorPreloader, useFallbackEditorModule, useIsAddDriveEnabled, useNodeParentFolderById, usePHModal, usePackageDiscoveryService, useReactorClientModule, useRevisionHistoryVisible, useSelectedDocument, useSelectedDocumentId, useSelectedDriveSafe, useSelectedFolder, useSelectedTimelineItem, useSyncList, useTheme, useUser, useVetraPackageManager, useVetraPackages } from "@powerhousedao/reactor-browser";
|
|
14
|
+
import { DriveCollectionId, addFileWithProgress, getRevisionFromDate, initTheme, logout, openRenown, setPHAppConfig, setPHDocumentEditorConfig, setRevisionHistoryVisible, setSelectedDrive, setSelectedNode, showPHModal, useAppModuleById, useConnectionStates, useDefaultAppModule, useDocumentById, useDocumentModelModuleById, useDocumentOperations, useDrives, useEditorModuleById, useEditorPreloader, useFallbackEditorModule, useIsAddDriveEnabled, useNodeParentFolderById, usePHModal, usePackageDiscoveryService, useReactorClientModule, useRevisionHistoryVisible, useSelectedDocument, useSelectedDocumentId, useSelectedDriveSafe, useSelectedFolder, useSelectedTimelineItem, useSyncList, useTheme, useUser, useVetraPackageManager, useVetraPackages } from "@powerhousedao/reactor-browser";
|
|
15
15
|
import { childLogger } from "document-model";
|
|
16
|
-
import { ConnectSidebar, ConnectTooltipProvider, CookieBanner, DefaultEditorLoader, DriveAuthGate, DropZoneWrapper, HomeScreen, HomeScreenAddDriveItem, HomeScreenItem, LogoAnimation, PackageInstallModal, RevisionHistory, SidebarAddDriveItem, SidebarItem, useEns } from "@powerhousedao/design-system/connect";
|
|
16
|
+
import { ConnectSidebar, ConnectTooltipProvider, CookieBanner, DefaultEditorLoader, DriveAuthGate, DropZoneWrapper, HomeScreen, HomeScreenAddDriveItem, HomeScreenItem, LogoAnimation, PackageInstallModal, RevisionHistory, SidebarAddDriveItem, SidebarItem, UploadFileListContainer, formatFileSize, mapProgressStageToStatus, useEns } from "@powerhousedao/design-system/connect";
|
|
17
17
|
import { z } from "zod";
|
|
18
18
|
import { Outlet, RouterProvider, createBrowserRouter, createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from "react-router-dom";
|
|
19
19
|
import { useHotkeys } from "react-hotkeys-hook";
|
|
@@ -75,6 +75,184 @@ var DocumentEditorDebugTools = class {
|
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
77
|
//#endregion
|
|
78
|
+
//#region src/utils/launch-queue.ts
|
|
79
|
+
let pendingImportFiles = [];
|
|
80
|
+
const pendingListeners = /* @__PURE__ */ new Set();
|
|
81
|
+
function notifyPendingListeners() {
|
|
82
|
+
for (const listener of pendingListeners) listener();
|
|
83
|
+
}
|
|
84
|
+
function getPendingImportFiles() {
|
|
85
|
+
return pendingImportFiles;
|
|
86
|
+
}
|
|
87
|
+
/** Stable identity of a pending file (also the picker's pre-check cache key). */
|
|
88
|
+
function pendingFileKey(file) {
|
|
89
|
+
return `${file.name}|${file.size}|${file.lastModified}`;
|
|
90
|
+
}
|
|
91
|
+
function addPendingImportFiles(files) {
|
|
92
|
+
const seen = new Set(pendingImportFiles.map(pendingFileKey));
|
|
93
|
+
const fresh = files.filter((file) => {
|
|
94
|
+
const key = pendingFileKey(file);
|
|
95
|
+
if (seen.has(key)) return false;
|
|
96
|
+
seen.add(key);
|
|
97
|
+
return true;
|
|
98
|
+
});
|
|
99
|
+
if (fresh.length === 0) return;
|
|
100
|
+
pendingImportFiles = [...pendingImportFiles, ...fresh];
|
|
101
|
+
notifyPendingListeners();
|
|
102
|
+
}
|
|
103
|
+
function clearPendingImportFiles() {
|
|
104
|
+
if (pendingImportFiles.length === 0) return;
|
|
105
|
+
pendingImportFiles = [];
|
|
106
|
+
notifyPendingListeners();
|
|
107
|
+
}
|
|
108
|
+
function subscribePendingImportFiles(cb) {
|
|
109
|
+
pendingListeners.add(cb);
|
|
110
|
+
return () => {
|
|
111
|
+
pendingListeners.delete(cb);
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async function handleLaunchParams(params) {
|
|
115
|
+
const handles = params.files.filter((handle) => handle.kind === "file");
|
|
116
|
+
if (handles.length === 0) return;
|
|
117
|
+
const files = [];
|
|
118
|
+
for (const handle of handles) try {
|
|
119
|
+
files.push(await handle.getFile());
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.error("Failed to read launched file:", handle.name, error);
|
|
122
|
+
}
|
|
123
|
+
if (files.length === 0) return;
|
|
124
|
+
addPendingImportFiles(files);
|
|
125
|
+
showPHModal({ type: "openFileDocuments" });
|
|
126
|
+
}
|
|
127
|
+
function maybeReopenImportModal() {
|
|
128
|
+
if (getPendingImportFiles().length === 0) return;
|
|
129
|
+
if (window.ph?.modal !== void 0) return;
|
|
130
|
+
showPHModal({ type: "openFileDocuments" });
|
|
131
|
+
}
|
|
132
|
+
let initialized = false;
|
|
133
|
+
/**
|
|
134
|
+
* Register the launchQueue consumer that receives files opened with Connect
|
|
135
|
+
* through the OS file association. Idempotent (safe under StrictMode double
|
|
136
|
+
* effects) and a no-op where the File Handling API doesn't exist — Firefox,
|
|
137
|
+
* Safari, and any context without an installed PWA manifest simply never
|
|
138
|
+
* deliver launches.
|
|
139
|
+
*/
|
|
140
|
+
function initLaunchQueueFileHandling() {
|
|
141
|
+
if (initialized) return;
|
|
142
|
+
initialized = true;
|
|
143
|
+
window.addEventListener("ph:modalUpdated", maybeReopenImportModal);
|
|
144
|
+
window.launchQueue?.setConsumer((params) => {
|
|
145
|
+
handleLaunchParams(params);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/utils/open-file-uploads.ts
|
|
150
|
+
let uploads = [];
|
|
151
|
+
const listeners$3 = /* @__PURE__ */ new Set();
|
|
152
|
+
function notifyUploadListeners() {
|
|
153
|
+
for (const listener of listeners$3) listener();
|
|
154
|
+
}
|
|
155
|
+
function getOpenFileUploads() {
|
|
156
|
+
return uploads;
|
|
157
|
+
}
|
|
158
|
+
function subscribeOpenFileUploads(cb) {
|
|
159
|
+
listeners$3.add(cb);
|
|
160
|
+
return () => {
|
|
161
|
+
listeners$3.delete(cb);
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function removeOpenFileUpload(id) {
|
|
165
|
+
const next = uploads.filter((upload) => upload.id !== id);
|
|
166
|
+
if (next.length === uploads.length) return;
|
|
167
|
+
uploads = next;
|
|
168
|
+
notifyUploadListeners();
|
|
169
|
+
}
|
|
170
|
+
function clearOpenFileUploads() {
|
|
171
|
+
if (uploads.length === 0) return;
|
|
172
|
+
uploads = [];
|
|
173
|
+
notifyUploadListeners();
|
|
174
|
+
}
|
|
175
|
+
function addOpenFileUploads(rows) {
|
|
176
|
+
uploads = [...uploads, ...rows];
|
|
177
|
+
notifyUploadListeners();
|
|
178
|
+
}
|
|
179
|
+
function patchOpenFileUpload(id, patch) {
|
|
180
|
+
uploads = uploads.map((upload) => upload.id === id ? {
|
|
181
|
+
...upload,
|
|
182
|
+
...patch
|
|
183
|
+
} : upload);
|
|
184
|
+
notifyUploadListeners();
|
|
185
|
+
}
|
|
186
|
+
let uploadCounter = 0;
|
|
187
|
+
let importChain = Promise.resolve();
|
|
188
|
+
/**
|
|
189
|
+
* Import one file and resolve once the flow truly ends. Completion is
|
|
190
|
+
* tracked through the progress stages, NOT the returned promise — the
|
|
191
|
+
* package-discovery retry path resolves early and keeps reporting through
|
|
192
|
+
* the callback. `resolveConflict: "duplicate"` is always passed: duplicates
|
|
193
|
+
* were resolved in the picker (rename), so the conflict stage must never
|
|
194
|
+
* fire — this also covers a duplicate appearing between pre-check and import.
|
|
195
|
+
*/
|
|
196
|
+
function importOne(row, driveId, documentTypes) {
|
|
197
|
+
return new Promise((resolve) => {
|
|
198
|
+
let settled = false;
|
|
199
|
+
const settle = (fileNode) => {
|
|
200
|
+
if (settled) return;
|
|
201
|
+
settled = true;
|
|
202
|
+
resolve(fileNode);
|
|
203
|
+
};
|
|
204
|
+
addFileWithProgress(row.file, driveId, row.name, void 0, (progress) => {
|
|
205
|
+
patchOpenFileUpload(row.id, {
|
|
206
|
+
status: mapProgressStageToStatus(progress.stage),
|
|
207
|
+
progress: progress.progress,
|
|
208
|
+
...progress.error ? { errorDetails: progress.error } : {},
|
|
209
|
+
...progress.documentType ? { documentType: progress.documentType } : {},
|
|
210
|
+
...progress.fileNode ? { fileNode: progress.fileNode } : {}
|
|
211
|
+
});
|
|
212
|
+
switch (progress.stage) {
|
|
213
|
+
case "complete":
|
|
214
|
+
settle(progress.fileNode);
|
|
215
|
+
break;
|
|
216
|
+
case "failed":
|
|
217
|
+
case "unsupported-document-type":
|
|
218
|
+
settle(void 0);
|
|
219
|
+
break;
|
|
220
|
+
default: break;
|
|
221
|
+
}
|
|
222
|
+
}, documentTypes, "duplicate").catch(() => {
|
|
223
|
+
settle(void 0);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Run a confirmed batch of imports into a drive, feeding the floating upload
|
|
229
|
+
* panel. Rows appear immediately (queued), files import sequentially, and a
|
|
230
|
+
* single-file batch that succeeds opens its document in the editor.
|
|
231
|
+
*/
|
|
232
|
+
function runOpenFileImports(args) {
|
|
233
|
+
const { driveId, imports, documentTypes } = args;
|
|
234
|
+
if (imports.length === 0) return importChain;
|
|
235
|
+
const rows = imports.map(({ file, name }) => ({
|
|
236
|
+
id: `open-file-${++uploadCounter}`,
|
|
237
|
+
file,
|
|
238
|
+
name
|
|
239
|
+
}));
|
|
240
|
+
addOpenFileUploads(rows.map((row) => ({
|
|
241
|
+
id: row.id,
|
|
242
|
+
fileName: row.name,
|
|
243
|
+
fileSize: formatFileSize(row.file.size),
|
|
244
|
+
status: "pending",
|
|
245
|
+
progress: 0
|
|
246
|
+
})));
|
|
247
|
+
const run = async () => {
|
|
248
|
+
const results = [];
|
|
249
|
+
for (const row of rows) results.push(await importOne(row, driveId, documentTypes));
|
|
250
|
+
if (rows.length === 1 && results[0]) setSelectedNode(results[0]);
|
|
251
|
+
};
|
|
252
|
+
importChain = importChain.then(run, run);
|
|
253
|
+
return importChain;
|
|
254
|
+
}
|
|
255
|
+
//#endregion
|
|
78
256
|
//#region src/components/migration-status.ts
|
|
79
257
|
let current = null;
|
|
80
258
|
const listeners$2 = /* @__PURE__ */ new Set();
|
|
@@ -1106,16 +1284,38 @@ function canRetry(reason) {
|
|
|
1106
1284
|
}
|
|
1107
1285
|
function MissingModelBanner() {
|
|
1108
1286
|
const failed = useFailedInstallations();
|
|
1287
|
+
const discoveryService = usePackageDiscoveryService();
|
|
1109
1288
|
const [open, setOpen] = useState(false);
|
|
1289
|
+
const [dismissed, setDismissed] = useState(false);
|
|
1290
|
+
useEffect(() => {
|
|
1291
|
+
return discoveryService?.subscribeEvents((event) => {
|
|
1292
|
+
if (event.type === "load-failed") setDismissed(false);
|
|
1293
|
+
});
|
|
1294
|
+
}, [discoveryService]);
|
|
1110
1295
|
if (failed.length === 0) return null;
|
|
1111
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */
|
|
1112
|
-
className: "
|
|
1113
|
-
children:
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1296
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [dismissed ? null : /* @__PURE__ */ jsx("div", {
|
|
1297
|
+
className: "absolute inset-x-0 top-0 z-200 bg-background",
|
|
1298
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
1299
|
+
className: "flex items-center justify-between gap-3 bg-warning/10 px-4 py-2 text-sm text-warning",
|
|
1300
|
+
children: [/* @__PURE__ */ jsx("span", { children: failed.length === 1 ? "1 document type couldn't load (missing model)." : `${failed.length} document types couldn't load (missing models).` }), /* @__PURE__ */ jsxs("div", {
|
|
1301
|
+
className: "flex items-center gap-2",
|
|
1302
|
+
children: [/* @__PURE__ */ jsx("button", {
|
|
1303
|
+
type: "button",
|
|
1304
|
+
onClick: () => setOpen(true),
|
|
1305
|
+
className: "rounded-md border border-warning bg-background px-3 py-1 text-warning hover:hover-effect",
|
|
1306
|
+
children: "View"
|
|
1307
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
1308
|
+
type: "button",
|
|
1309
|
+
onClick: () => setDismissed(true),
|
|
1310
|
+
"aria-label": "Dismiss",
|
|
1311
|
+
className: "flex items-center text-warning hover:hover-effect",
|
|
1312
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
1313
|
+
name: "XmarkLight",
|
|
1314
|
+
size: 16
|
|
1315
|
+
})
|
|
1316
|
+
})]
|
|
1317
|
+
})]
|
|
1318
|
+
})
|
|
1119
1319
|
}), /* @__PURE__ */ jsx(MissingModelDetailsModal, {
|
|
1120
1320
|
open,
|
|
1121
1321
|
failed,
|
|
@@ -1218,6 +1418,18 @@ function MissingModelDetailsModal(props) {
|
|
|
1218
1418
|
});
|
|
1219
1419
|
}
|
|
1220
1420
|
//#endregion
|
|
1421
|
+
//#region src/components/open-file-upload-list.tsx
|
|
1422
|
+
function OpenFileUploadList() {
|
|
1423
|
+
const uploads = useSyncExternalStore(subscribeOpenFileUploads, getOpenFileUploads);
|
|
1424
|
+
return /* @__PURE__ */ jsx(UploadFileListContainer, {
|
|
1425
|
+
uploadsArray: uploads,
|
|
1426
|
+
uploadsCount: uploads.length,
|
|
1427
|
+
removeUpload: removeOpenFileUpload,
|
|
1428
|
+
clearAllUploads: clearOpenFileUploads,
|
|
1429
|
+
setSelectedNode
|
|
1430
|
+
});
|
|
1431
|
+
}
|
|
1432
|
+
//#endregion
|
|
1221
1433
|
//#region src/components/package-install-prompt.tsx
|
|
1222
1434
|
function PackageInstallPrompt() {
|
|
1223
1435
|
const pendingInstallations = usePendingInstallations();
|
|
@@ -1258,10 +1470,14 @@ const App = () => {
|
|
|
1258
1470
|
else if (connectConfig.offline) serviceWorkerManager.registerServiceWorker(false);
|
|
1259
1471
|
else serviceWorkerManager.unregisterAll();
|
|
1260
1472
|
}, []);
|
|
1473
|
+
useEffect(() => {
|
|
1474
|
+
initLaunchQueueFileHandling();
|
|
1475
|
+
}, []);
|
|
1261
1476
|
return /* @__PURE__ */ jsxs(SentryProvider, { children: [
|
|
1262
1477
|
/* @__PURE__ */ jsx(ToastContainer, { position: "bottom-right" }),
|
|
1263
1478
|
/* @__PURE__ */ jsx(MissingModelBanner, {}),
|
|
1264
1479
|
/* @__PURE__ */ jsx(Router, {}),
|
|
1480
|
+
/* @__PURE__ */ jsx(OpenFileUploadList, {}),
|
|
1265
1481
|
/* @__PURE__ */ jsx(PackageInstallPrompt, {}),
|
|
1266
1482
|
/* @__PURE__ */ jsx(Analytics, {}),
|
|
1267
1483
|
/* @__PURE__ */ jsx(OpenPanel, {})
|
|
@@ -1789,18 +2005,18 @@ const MigrationBanner = () => {
|
|
|
1789
2005
|
};
|
|
1790
2006
|
//#endregion
|
|
1791
2007
|
//#region src/components/modal/modals-container.tsx
|
|
1792
|
-
const AddDriveModal$1 = lazy(() => import("./AddDriveModal-
|
|
1793
|
-
const ClearStorageModal = lazy(() => import("./ClearStorageModal-
|
|
1794
|
-
const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-
|
|
1795
|
-
const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-
|
|
1796
|
-
const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-
|
|
1797
|
-
const DeleteDriveModal = lazy(() => import("./DeleteDriveModal-
|
|
1798
|
-
const DeleteItemModal = lazy(() => import("./DeleteItemModal-
|
|
1799
|
-
const DisclaimerModal = lazy(() => import("./DisclaimerModal-
|
|
1800
|
-
const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-
|
|
1801
|
-
const DownloadDocumentWithErrorsModal = lazy(() => import("./DownloadDocumentWithErrorsModal-
|
|
1802
|
-
const SettingsModal$1 = lazy(() => import("./SettingsModal-
|
|
1803
|
-
const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-
|
|
2008
|
+
const AddDriveModal$1 = lazy(() => import("./AddDriveModal-B_Oft9Cv.js").then((m) => ({ default: m.AddDriveModal })));
|
|
2009
|
+
const ClearStorageModal = lazy(() => import("./ClearStorageModal-14u4aeex.js").then((m) => ({ default: m.ClearStorageModal })));
|
|
2010
|
+
const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-CYFTfkEN.js").then((m) => ({ default: m.CookiesPolicyModal })));
|
|
2011
|
+
const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-Dmg3R-Vh.js").then((m) => ({ default: m.CreateDocumentModal })));
|
|
2012
|
+
const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-CHyfTg2u.js").then((m) => ({ default: m.DebugSettingsModal })));
|
|
2013
|
+
const DeleteDriveModal = lazy(() => import("./DeleteDriveModal-CzRPqyMf.js").then((m) => ({ default: m.DeleteDriveModal })));
|
|
2014
|
+
const DeleteItemModal = lazy(() => import("./DeleteItemModal-CaCrmQOG.js").then((m) => ({ default: m.DeleteItemModal })));
|
|
2015
|
+
const DisclaimerModal = lazy(() => import("./DisclaimerModal-D5Jhefcc.js").then((m) => ({ default: m.DisclaimerModal })));
|
|
2016
|
+
const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-VNpuhty1.js").then((m) => ({ default: m.DriveSettingsModal })));
|
|
2017
|
+
const DownloadDocumentWithErrorsModal = lazy(() => import("./DownloadDocumentWithErrorsModal-ZuX8WDCC.js").then((m) => ({ default: m.DownloadDocumentWithErrorsModal })));
|
|
2018
|
+
const SettingsModal$1 = lazy(() => import("./SettingsModal-Cmq_VH4m.js").then((m) => ({ default: m.SettingsModal })));
|
|
2019
|
+
const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-Ul4tyz-Q.js").then((m) => ({ default: m.UpgradeDriveModal })));
|
|
1804
2020
|
const modalComponents = {
|
|
1805
2021
|
addDrive: AddDriveModal$1,
|
|
1806
2022
|
clearStorage: ClearStorageModal,
|
|
@@ -1812,11 +2028,12 @@ const modalComponents = {
|
|
|
1812
2028
|
disclaimer: DisclaimerModal,
|
|
1813
2029
|
driveSettings: DriveSettingsModal$1,
|
|
1814
2030
|
downloadDocumentWithErrors: DownloadDocumentWithErrorsModal,
|
|
1815
|
-
inspector: lazy(() => import("./InspectorModal-
|
|
2031
|
+
inspector: lazy(() => import("./InspectorModal-DKzQILfr.js").then((m) => ({ default: m.InspectorModal }))),
|
|
1816
2032
|
settings: SettingsModal$1,
|
|
1817
2033
|
upgradeDrive: UpgradeDriveModal,
|
|
1818
|
-
missingPackage: lazy(() => import("./MissingPackageModal-
|
|
1819
|
-
driveAuthRequired: lazy(() => import("./DriveAuthRequiredModal-
|
|
2034
|
+
missingPackage: lazy(() => import("./MissingPackageModal-D4V6oYzy.js").then((m) => ({ default: m.ConnectMissingPackageModal }))),
|
|
2035
|
+
driveAuthRequired: lazy(() => import("./DriveAuthRequiredModal-CPV5uXnf.js").then((m) => ({ default: m.DriveAuthRequiredModal }))),
|
|
2036
|
+
openFileDocuments: lazy(() => import("./OpenFileDocumentsModal-BLy9Z98Q.js").then((m) => ({ default: m.OpenFileDocumentsModal })))
|
|
1820
2037
|
};
|
|
1821
2038
|
const ModalsContainer = lazy(() => {
|
|
1822
2039
|
return Promise.resolve({ default: () => {
|
|
@@ -1856,7 +2073,7 @@ const ServiceWorkerUpdatePrompt = () => {
|
|
|
1856
2073
|
//#endregion
|
|
1857
2074
|
//#region src/components/app-loader.tsx
|
|
1858
2075
|
const AppLoader = (props) => {
|
|
1859
|
-
const Load = lazy(() => import("./load-
|
|
2076
|
+
const Load = lazy(() => import("./load-ClIUHisS.js").then((m) => m.loadComponent(props.localPackage)));
|
|
1860
2077
|
return /* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsxs(ErrorBoundary$1, {
|
|
1861
2078
|
fallbackRender: (props) => /* @__PURE__ */ jsx(AppSkeleton, { children: /* @__PURE__ */ jsx(DetailedFallback, { ...props }) }),
|
|
1862
2079
|
resetKeys: [props.localPackage],
|
|
@@ -1885,7 +2102,7 @@ const AppLoader = (props) => {
|
|
|
1885
2102
|
}) });
|
|
1886
2103
|
};
|
|
1887
2104
|
//#endregion
|
|
1888
|
-
export { DocumentEditor as a, App as c, DocumentEditorContainer as d, OpenPanel as f, Root as i, AppContainer as l, AppSkeleton as m, Sidebar as n, DriveIcon as o, Analytics as p, Router as r, CookieBanner$1 as s, AppLoader as t, EditorLoader as u };
|
|
2105
|
+
export { getPendingImportFiles as _, DocumentEditor as a, App as c, DocumentEditorContainer as d, OpenPanel as f, clearPendingImportFiles as g, runOpenFileImports as h, Root as i, AppContainer as l, AppSkeleton as m, Sidebar as n, DriveIcon as o, Analytics as p, Router as r, CookieBanner$1 as s, AppLoader as t, EditorLoader as u, pendingFileKey as v, subscribePendingImportFiles as y };
|
|
1889
2106
|
|
|
1890
|
-
//# sourceMappingURL=app-loader-
|
|
1891
|
-
//# debugId=
|
|
2107
|
+
//# sourceMappingURL=app-loader-DdiMcHzZ.js.map
|
|
2108
|
+
//# debugId=fcb16c4f-700e-5a54-9c7a-8bc0833ab6c9
|