@powerhousedao/connect 6.2.2-dev.12 → 6.2.2-dev.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AddDriveModal-B_Oft9Cv.js → AddDriveModal-Cy4_b0wO.js} +3 -3
- package/dist/{AddDriveModal-B_Oft9Cv.js.map → AddDriveModal-Cy4_b0wO.js.map} +1 -1
- package/dist/{ClearStorageModal-14u4aeex.js → ClearStorageModal-CANJ91ax.js} +4 -4
- package/dist/{ClearStorageModal-14u4aeex.js.map → ClearStorageModal-CANJ91ax.js.map} +1 -1
- package/dist/{CookiesPolicyModal-CYFTfkEN.js → CookiesPolicyModal-Dpx-2TgP.js} +3 -3
- package/dist/{CookiesPolicyModal-CYFTfkEN.js.map → CookiesPolicyModal-Dpx-2TgP.js.map} +1 -1
- package/dist/{CreateDocumentModal-Dmg3R-Vh.js → CreateDocumentModal-u-IaJUQ0.js} +3 -3
- package/dist/{CreateDocumentModal-Dmg3R-Vh.js.map → CreateDocumentModal-u-IaJUQ0.js.map} +1 -1
- package/dist/{DebugSettingsModal-CHyfTg2u.js → DebugSettingsModal-DlO43gn2.js} +6 -6
- package/dist/{DebugSettingsModal-CHyfTg2u.js.map → DebugSettingsModal-DlO43gn2.js.map} +1 -1
- package/dist/{DeleteDriveModal-CzRPqyMf.js → DeleteDriveModal-CJKhWtli.js} +3 -3
- package/dist/{DeleteDriveModal-CzRPqyMf.js.map → DeleteDriveModal-CJKhWtli.js.map} +1 -1
- package/dist/{DeleteItemModal-CaCrmQOG.js → DeleteItemModal-DiieJw_o.js} +3 -3
- package/dist/{DeleteItemModal-CaCrmQOG.js.map → DeleteItemModal-DiieJw_o.js.map} +1 -1
- package/dist/{DisclaimerModal-D5Jhefcc.js → DisclaimerModal-DAvYIF9-.js} +3 -3
- package/dist/{DisclaimerModal-D5Jhefcc.js.map → DisclaimerModal-DAvYIF9-.js.map} +1 -1
- package/dist/{DownloadDocumentWithErrorsModal-ZuX8WDCC.js → DownloadDocumentWithErrorsModal-CE4fa1k5.js} +3 -3
- package/dist/{DownloadDocumentWithErrorsModal-ZuX8WDCC.js.map → DownloadDocumentWithErrorsModal-CE4fa1k5.js.map} +1 -1
- package/dist/DriveAuthRequiredModal-DSM6uNlb.js +36 -0
- package/dist/DriveAuthRequiredModal-DSM6uNlb.js.map +1 -0
- package/dist/{DriveSettingsModal-VNpuhty1.js → DriveSettingsModal-CqFeWu4r.js} +3 -3
- package/dist/{DriveSettingsModal-VNpuhty1.js.map → DriveSettingsModal-CqFeWu4r.js.map} +1 -1
- package/dist/{InspectorModal-DKzQILfr.js → InspectorModal-BvxtawQP.js} +6 -6
- package/dist/{InspectorModal-DKzQILfr.js.map → InspectorModal-BvxtawQP.js.map} +1 -1
- package/dist/LoginModal-BGTKLJx0.js +75 -0
- package/dist/LoginModal-BGTKLJx0.js.map +1 -0
- package/dist/{MissingPackageModal-D4V6oYzy.js → MissingPackageModal-C3acJ9r0.js} +3 -3
- package/dist/{MissingPackageModal-D4V6oYzy.js.map → MissingPackageModal-C3acJ9r0.js.map} +1 -1
- package/dist/{OpenFileDocumentsModal-BLy9Z98Q.js → OpenFileDocumentsModal-PxW24Y7r.js} +4 -4
- package/dist/{OpenFileDocumentsModal-BLy9Z98Q.js.map → OpenFileDocumentsModal-PxW24Y7r.js.map} +1 -1
- package/dist/{SettingsModal-Cmq_VH4m.js → SettingsModal-BcmWLrQ2.js} +6 -6
- package/dist/{SettingsModal-Cmq_VH4m.js.map → SettingsModal-BcmWLrQ2.js.map} +1 -1
- package/dist/{UpgradeDriveModal-Ul4tyz-Q.js → UpgradeDriveModal-rUHyJTc7.js} +3 -3
- package/dist/{UpgradeDriveModal-Ul4tyz-Q.js.map → UpgradeDriveModal-rUHyJTc7.js.map} +1 -1
- package/dist/{app-loader-DdiMcHzZ.js → app-loader-CB4g_EkG.js} +60 -28
- package/dist/app-loader-CB4g_EkG.js.map +1 -0
- package/dist/app-loader-QiajdyJs.js +4 -0
- package/dist/{build-info-BU9FFwx3.js → build-info-Ck9YweY7.js} +5 -5
- package/dist/{build-info-BU9FFwx3.js.map → build-info-Ck9YweY7.js.map} +1 -1
- package/dist/{components-D_F74RBh.js → components-CUc85sje.js} +3 -3
- package/dist/{connect.config-vgUeFoNp.js → connect.config-C-b_Yhd6.js} +9 -4
- package/dist/connect.config-C-b_Yhd6.js.map +1 -0
- package/dist/{connection-state-xPSbZ_4J.js → connection-state-KCa1yljA.js} +4 -4
- package/dist/{connection-state-xPSbZ_4J.js.map → connection-state-KCa1yljA.js.map} +1 -1
- package/dist/{load-ClIUHisS.js → load-pPyvdfRh.js} +8 -8
- package/dist/{load-ClIUHisS.js.map → load-pPyvdfRh.js.map} +1 -1
- package/dist/main.js +1 -1
- package/dist/{package-G8LMMUz8.js → package-BRKQgVj-.js} +8 -4
- package/dist/package-BRKQgVj-.js.map +1 -0
- package/dist/{pglite-seed-DRYYEWUq.js → pglite-seed-DRXPe7p-.js} +4 -4
- package/dist/{pglite-seed-DRYYEWUq.js.map → pglite-seed-DRXPe7p-.js.map} +1 -1
- package/dist/{reactor-BGdk3n2t.js → reactor-Bz781t19.js} +8 -7
- package/dist/{reactor-BGdk3n2t.js.map → reactor-Bz781t19.js.map} +1 -1
- package/dist/{registerServiceWorker-uI4Gj6fl.js → registerServiceWorker-Bn1KWmk0.js} +4 -4
- package/dist/{registerServiceWorker-uI4Gj6fl.js.map → registerServiceWorker-Bn1KWmk0.js.map} +1 -1
- package/dist/start-connect.js +1 -1
- package/dist/style.css +48 -0
- package/dist/use-renown-login-DBujbqs8.js +55 -0
- package/dist/use-renown-login-DBujbqs8.js.map +1 -0
- package/package.json +15 -11
- package/dist/DriveAuthRequiredModal-CPV5uXnf.js +0 -40
- package/dist/DriveAuthRequiredModal-CPV5uXnf.js.map +0 -1
- package/dist/app-loader-CmZQxyq0.js +0 -4
- package/dist/app-loader-DdiMcHzZ.js.map +0 -1
- package/dist/connect.config-vgUeFoNp.js.map +0 -1
- package/dist/package-G8LMMUz8.js.map +0 -1
package/dist/{registerServiceWorker-uI4Gj6fl.js.map → registerServiceWorker-Bn1KWmk0.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerServiceWorker-
|
|
1
|
+
{"version":3,"file":"registerServiceWorker-Bn1KWmk0.js","sources":["../src/utils/registerServiceWorker.ts"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { refreshPwaManifestLink } from \"./pwa-manifest-link.js\";\n\nconst basePath = connectConfig.routerBasename;\n\nconst serviceWorkerScriptPath = [basePath, \"service-worker.js\"]\n .join(\"/\")\n .replace(/\\/{2,}/gm, \"/\");\n\n// External store backing the refresh prompt: our hand-written service worker\n// (injectManifest, registerType: prompt) parks a new worker as \"waiting\" by not\n// calling skipWaiting on install; we flag that here so\n// service-worker-update-prompt.tsx can offer a Refresh instead of reloading\n// from under the user.\nlet updateAvailable = false;\nconst updateListeners = new Set<() => void>();\n\nfunction setUpdateAvailable(value: boolean) {\n if (updateAvailable === value) return;\n updateAvailable = value;\n for (const listener of updateListeners) listener();\n}\n\nexport function subscribeServiceWorkerUpdate(cb: () => void): () => void {\n updateListeners.add(cb);\n return () => {\n updateListeners.delete(cb);\n };\n}\n\nexport function getServiceWorkerUpdateAvailable(): boolean {\n return updateAvailable;\n}\n\nclass ServiceWorkerManager {\n ready = false;\n debug = false;\n registration: ServiceWorkerRegistration | null = null;\n // Only reload on controllerchange when the user actually accepted an update.\n // clientsClaim fires controllerchange on the very first install too, and we\n // must not reload then.\n #updateAccepted = false;\n #reloading = false;\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n setDebug(debug: boolean) {\n this.debug = debug;\n }\n\n #log(...args: unknown[]) {\n if (this.debug) console.log(\"[ServiceWorker]\", ...args);\n }\n\n // Watch an installing worker; once it reaches \"installed\" while another\n // worker already controls the page, a new version is waiting → prompt.\n #trackInstalling(worker: ServiceWorker | null) {\n if (!worker) return;\n worker.addEventListener(\"statechange\", () => {\n if (worker.state === \"installed\" && navigator.serviceWorker.controller) {\n this.#log(\"New version installed and waiting\");\n setUpdateAvailable(true);\n }\n });\n }\n\n #handleRegistration(registration: ServiceWorkerRegistration) {\n this.registration = registration;\n this.ready = true;\n this.#log(\"registered\", registration);\n\n // A worker installed by a previous page load may already be waiting.\n if (registration.waiting && navigator.serviceWorker.controller) {\n setUpdateAvailable(true);\n }\n\n this.#trackInstalling(registration.installing);\n registration.addEventListener(\"updatefound\", () => {\n this.#trackInstalling(registration.installing);\n });\n }\n\n async #register() {\n try {\n navigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n // First visit: boot fetches the runtime config before this SW controls\n // the page, so it never lands in the cache. Warm it now (clientsClaim\n // just gave us control) so a single online load is enough to go offline.\n this.#warmRuntimeConfigCache();\n // The SW only serves the dynamic manifest.webmanifest once it controls\n // the page. A package installed before that (its fragment already in\n // IndexedDB) was re-consumed against the static base manifest; now that\n // the dynamic route is live, re-attach the link so it picks up the\n // package's PWA config without a manual reload.\n refreshPwaManifestLink();\n // Reload once the worker we activated via applyUpdate() takes control.\n if (!this.#updateAccepted || this.#reloading) return;\n this.#reloading = true;\n window.location.reload();\n });\n\n const existing = await navigator.serviceWorker.getRegistration();\n if (existing) {\n this.#handleRegistration(existing);\n // Force an immediate check so a deploy that happened while the tab was\n // closed surfaces a prompt on the next load.\n await existing.update();\n } else {\n const registration = await navigator.serviceWorker.register(\n serviceWorkerScriptPath,\n );\n this.#handleRegistration(registration);\n }\n\n // Periodically poll for a new version while the tab stays open.\n const intervalId = setInterval(() => {\n void (async () => {\n const reg = await navigator.serviceWorker.getRegistration();\n if (!reg) {\n clearInterval(intervalId);\n return;\n }\n // Skip while a worker is mid-install or the browser is offline —\n // updating then would only fire a doomed network fetch (per the\n // vite-plugin-pwa periodic-update guidance).\n if (reg.installing || !navigator.onLine) return;\n await reg.update();\n })();\n }, connectConfig.appVersionCheckInterval);\n } catch (error) {\n console.error(\"ServiceWorker registration failed: \", error);\n }\n }\n\n registerServiceWorker(debug = false) {\n this.debug = debug;\n\n if (!(\"serviceWorker\" in navigator)) {\n console.warn(\"Service Worker not available\");\n return;\n }\n const start = () => {\n this.#register().catch(console.error);\n };\n // This runs from a React effect, which usually fires *after* the window\n // `load` event has already happened — so adding a load listener would never\n // fire. Register immediately when the page is already loaded; otherwise wait\n // for load to avoid contending with initial page resource fetches.\n if (document.readyState === \"complete\") {\n start();\n } else {\n window.addEventListener(\"load\", start, { once: true });\n }\n }\n\n // Fire-and-forget re-fetch so the controlling SW's NetworkFirst rule caches\n // the config (see controllerchange). The URL MUST match runtime-config.ts's\n // loader (`${import.meta.env.BASE_URL}powerhouse.config.json`) or the cache\n // keys won't line up.\n #warmRuntimeConfigCache() {\n void fetch(`${import.meta.env.BASE_URL}powerhouse.config.json`).catch(\n () => {},\n );\n }\n\n // Activate the waiting worker; the controllerchange handler then reloads.\n applyUpdate() {\n setUpdateAvailable(false);\n const waiting = this.registration?.waiting;\n if (!waiting) {\n // Nothing waiting (or already activated) — reload to pick up whatever\n // the active worker now serves.\n this.#reloading = true;\n window.location.reload();\n return;\n }\n this.#updateAccepted = true;\n waiting.postMessage({ type: \"SKIP_WAITING\" });\n }\n\n sendMessage(message: unknown) {\n const target =\n this.registration?.active ??\n this.registration?.waiting ??\n navigator.serviceWorker.controller;\n target?.postMessage(message);\n }\n\n // Drop any worker controlling this scope — used when offline support is\n // disabled (a disabled build also ships a self-destroying worker).\n async unregisterAll() {\n if (!(\"serviceWorker\" in navigator)) return;\n const registrations = await navigator.serviceWorker.getRegistrations();\n await Promise.all(registrations.map((r) => r.unregister()));\n }\n}\n\nexport const serviceWorkerManager = new ServiceWorkerManager();\n"],"names":["#log","#trackInstalling","#register","#warmRuntimeConfigCache","#updateAccepted","#reloading","#handleRegistration"],"mappings":"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","debug_id":"6228ba39-f39a-580d-836c-d01174316972"}
|
package/dist/start-connect.js
CHANGED
|
@@ -5,7 +5,7 @@ import { createRoot } from "react-dom/client";
|
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region start-connect.tsx
|
|
7
7
|
await loadRuntimeConfig();
|
|
8
|
-
const { AppLoader } = await import("./components-
|
|
8
|
+
const { AppLoader } = await import("./components-CUc85sje.js");
|
|
9
9
|
function updateLocalPackage(pkg) {
|
|
10
10
|
window.ph?.vetraPackageManager?.updateLocalPackage(pkg);
|
|
11
11
|
}
|
package/dist/style.css
CHANGED
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
--font-weight-bold: 700;
|
|
79
79
|
--tracking-normal: 0em;
|
|
80
80
|
--tracking-wide: 0.025em;
|
|
81
|
+
--tracking-wider: 0.05em;
|
|
81
82
|
--leading-tight: 1.25;
|
|
82
83
|
--leading-normal: 1.5;
|
|
83
84
|
--leading-relaxed: 1.625;
|
|
@@ -372,6 +373,9 @@
|
|
|
372
373
|
.end {
|
|
373
374
|
inset-inline-end: var(--spacing);
|
|
374
375
|
}
|
|
376
|
+
.-top-2 {
|
|
377
|
+
top: calc(var(--spacing) * -2);
|
|
378
|
+
}
|
|
375
379
|
.top-0 {
|
|
376
380
|
top: calc(var(--spacing) * 0);
|
|
377
381
|
}
|
|
@@ -1152,6 +1156,9 @@
|
|
|
1152
1156
|
.max-w-\[calc\(100\%-2rem\)\] {
|
|
1153
1157
|
max-width: calc(100% - 2rem);
|
|
1154
1158
|
}
|
|
1159
|
+
.max-w-\[calc\(100vw-2rem\)\] {
|
|
1160
|
+
max-width: calc(100vw - 2rem);
|
|
1161
|
+
}
|
|
1155
1162
|
.max-w-fit {
|
|
1156
1163
|
max-width: fit-content;
|
|
1157
1164
|
}
|
|
@@ -1653,6 +1660,9 @@
|
|
|
1653
1660
|
background-color: color-mix(in oklab, var(--background) 50%, transparent);
|
|
1654
1661
|
}
|
|
1655
1662
|
}
|
|
1663
|
+
.bg-border {
|
|
1664
|
+
background-color: var(--border);
|
|
1665
|
+
}
|
|
1656
1666
|
.bg-card {
|
|
1657
1667
|
background-color: var(--card);
|
|
1658
1668
|
}
|
|
@@ -1671,6 +1681,9 @@
|
|
|
1671
1681
|
background-color: color-mix(in oklab, var(--destructive) 10%, transparent);
|
|
1672
1682
|
}
|
|
1673
1683
|
}
|
|
1684
|
+
.bg-foreground {
|
|
1685
|
+
background-color: var(--foreground);
|
|
1686
|
+
}
|
|
1674
1687
|
.bg-info {
|
|
1675
1688
|
background-color: var(--info);
|
|
1676
1689
|
}
|
|
@@ -2047,6 +2060,9 @@
|
|
|
2047
2060
|
font-size: var(--text-xs);
|
|
2048
2061
|
line-height: calc(var(--spacing) * 5);
|
|
2049
2062
|
}
|
|
2063
|
+
.text-\[10px\] {
|
|
2064
|
+
font-size: 10px;
|
|
2065
|
+
}
|
|
2050
2066
|
.leading-4 {
|
|
2051
2067
|
--tw-leading: calc(var(--spacing) * 4);
|
|
2052
2068
|
line-height: calc(var(--spacing) * 4);
|
|
@@ -2099,6 +2115,10 @@
|
|
|
2099
2115
|
--tw-tracking: var(--tracking-wide);
|
|
2100
2116
|
letter-spacing: var(--tracking-wide);
|
|
2101
2117
|
}
|
|
2118
|
+
.tracking-wider {
|
|
2119
|
+
--tw-tracking: var(--tracking-wider);
|
|
2120
|
+
letter-spacing: var(--tracking-wider);
|
|
2121
|
+
}
|
|
2102
2122
|
.wrap-anywhere {
|
|
2103
2123
|
overflow-wrap: anywhere;
|
|
2104
2124
|
}
|
|
@@ -2115,6 +2135,9 @@
|
|
|
2115
2135
|
.whitespace-nowrap {
|
|
2116
2136
|
white-space: nowrap;
|
|
2117
2137
|
}
|
|
2138
|
+
.text-background {
|
|
2139
|
+
color: var(--background);
|
|
2140
|
+
}
|
|
2118
2141
|
.text-current {
|
|
2119
2142
|
color: currentcolor;
|
|
2120
2143
|
}
|
|
@@ -2940,6 +2963,16 @@
|
|
|
2940
2963
|
}
|
|
2941
2964
|
}
|
|
2942
2965
|
}
|
|
2966
|
+
.hover\:bg-primary\/85 {
|
|
2967
|
+
&:hover {
|
|
2968
|
+
@media (hover: hover) {
|
|
2969
|
+
background-color: var(--primary);
|
|
2970
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2971
|
+
background-color: color-mix(in oklab, var(--primary) 85%, transparent);
|
|
2972
|
+
}
|
|
2973
|
+
}
|
|
2974
|
+
}
|
|
2975
|
+
}
|
|
2943
2976
|
.hover\:pr-6 {
|
|
2944
2977
|
&:hover {
|
|
2945
2978
|
@media (hover: hover) {
|
|
@@ -3102,6 +3135,11 @@
|
|
|
3102
3135
|
transition: filter 0.1s ease-in-out;
|
|
3103
3136
|
}
|
|
3104
3137
|
}
|
|
3138
|
+
.disabled\:pointer-events-none {
|
|
3139
|
+
&:disabled {
|
|
3140
|
+
pointer-events: none;
|
|
3141
|
+
}
|
|
3142
|
+
}
|
|
3105
3143
|
.disabled\:disabled-effect {
|
|
3106
3144
|
&:disabled {
|
|
3107
3145
|
cursor: not-allowed;
|
|
@@ -3129,6 +3167,16 @@
|
|
|
3129
3167
|
box-shadow: none;
|
|
3130
3168
|
}
|
|
3131
3169
|
}
|
|
3170
|
+
.disabled\:cursor-wait {
|
|
3171
|
+
&:disabled {
|
|
3172
|
+
cursor: wait;
|
|
3173
|
+
}
|
|
3174
|
+
}
|
|
3175
|
+
.disabled\:opacity-60 {
|
|
3176
|
+
&:disabled {
|
|
3177
|
+
opacity: 60%;
|
|
3178
|
+
}
|
|
3179
|
+
}
|
|
3132
3180
|
.disabled\:opacity-100 {
|
|
3133
3181
|
&:disabled {
|
|
3134
3182
|
opacity: 100%;
|
|
@@ -0,0 +1,55 @@
|
|
|
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]="bbb5e35d-c252-50af-bc16-46e7ceedd324")}catch(e){}}();
|
|
3
|
+
import { n as getRuntimeConfig } from "./runtime-config-DL3QjcfM.js";
|
|
4
|
+
import { useCallback, useMemo } from "react";
|
|
5
|
+
import { openRenown, showPHModal, useRenownAuth, useRenownLoginMethods } from "@powerhousedao/reactor-browser";
|
|
6
|
+
//#region src/hooks/use-renown-login.ts
|
|
7
|
+
function useOpenRenownLogin() {
|
|
8
|
+
const adapters = getRuntimeConfig().connect.renown?.adapters;
|
|
9
|
+
const methods = useRenownLoginMethods(adapters);
|
|
10
|
+
return useCallback(() => {
|
|
11
|
+
if (methods.length > 0) showPHModal({ type: "login" });
|
|
12
|
+
else openRenown();
|
|
13
|
+
}, [methods]);
|
|
14
|
+
}
|
|
15
|
+
const LAST_METHOD_KEY = "renown:last-login-method";
|
|
16
|
+
function getLastLoginMethod() {
|
|
17
|
+
try {
|
|
18
|
+
return localStorage.getItem(LAST_METHOD_KEY);
|
|
19
|
+
} catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function setLastLoginMethod(method) {
|
|
24
|
+
try {
|
|
25
|
+
localStorage.setItem(LAST_METHOD_KEY, method);
|
|
26
|
+
} catch {}
|
|
27
|
+
}
|
|
28
|
+
function useRenownLoginProps() {
|
|
29
|
+
const { login, pending, error } = useRenownAuth();
|
|
30
|
+
const onLogin = useCallback(() => login(), [login]);
|
|
31
|
+
const adapters = getRuntimeConfig().connect.renown?.adapters;
|
|
32
|
+
const baseMethods = useRenownLoginMethods(adapters);
|
|
33
|
+
return {
|
|
34
|
+
onLogin,
|
|
35
|
+
methods: useMemo(() => {
|
|
36
|
+
const lastUsed = getLastLoginMethod();
|
|
37
|
+
return baseMethods.map((method) => ({
|
|
38
|
+
id: method.id,
|
|
39
|
+
label: method.label,
|
|
40
|
+
lastUsed: lastUsed === method.id,
|
|
41
|
+
onSelect: () => {
|
|
42
|
+
setLastLoginMethod(method.id);
|
|
43
|
+
login(void 0, method.id);
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
}, [baseMethods, login]),
|
|
47
|
+
loading: pending,
|
|
48
|
+
error: error?.message ?? null
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { useRenownLoginProps as n, useOpenRenownLogin as t };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=use-renown-login-DBujbqs8.js.map
|
|
55
|
+
//# debugId=bbb5e35d-c252-50af-bc16-46e7ceedd324
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-renown-login-DBujbqs8.js","sources":["../src/hooks/use-renown-login.ts"],"sourcesContent":["import type { RenownLoginOption } from \"@powerhousedao/design-system/connect\";\nimport {\n openRenown,\n showPHModal,\n useRenownAuth,\n useRenownLoginMethods,\n} from \"@powerhousedao/reactor-browser\";\nimport type { WalletAdaptersConfig } from \"@renown/sdk/wallet\";\nimport { useCallback, useMemo } from \"react\";\nimport { getRuntimeConfig } from \"../runtime-config.js\";\n\n// Opens the in-page login modal when wallet adapters are configured; otherwise\n// redirects straight to the Renown portal (no modal with only a redirect button).\nexport function useOpenRenownLogin(): () => void {\n const adapters = getRuntimeConfig().connect.renown?.adapters as\n | WalletAdaptersConfig\n | undefined;\n const methods = useRenownLoginMethods(adapters);\n return useCallback(() => {\n if (methods.length > 0) {\n showPHModal({ type: \"login\" });\n } else {\n openRenown();\n }\n }, [methods]);\n}\n\nexport interface RenownLoginProps {\n onLogin: () => void;\n // One option per configured login method (wallet, Google, email, …). Empty\n // only when no adapters are configured (the redirect Connect button is used).\n methods: RenownLoginOption[];\n loading: boolean;\n error: string | null;\n}\n\nconst LAST_METHOD_KEY = \"renown:last-login-method\";\n\nfunction getLastLoginMethod(): string | null {\n try {\n return localStorage.getItem(LAST_METHOD_KEY);\n } catch {\n return null;\n }\n}\n\nfunction setLastLoginMethod(method: string): void {\n try {\n localStorage.setItem(LAST_METHOD_KEY, method);\n } catch {\n // localStorage unavailable (private mode / SSR) — the badge is optional.\n }\n}\n\n// Single source of the login wiring shared by every Connect CTA: in-page\n// sign-in (with redirect fallback) plus pending/error feedback.\nexport function useRenownLoginProps(): RenownLoginProps {\n const { login, pending, error } = useRenownAuth();\n const onLogin = useCallback(() => login(), [login]);\n\n const adapters = getRuntimeConfig().connect.renown?.adapters as\n | WalletAdaptersConfig\n | undefined;\n // Method list (labels) comes from the shared primitive; Connect adds the\n // last-used badge + the onSelect wiring for its design-system card.\n const baseMethods = useRenownLoginMethods(adapters);\n\n const methods = useMemo<RenownLoginOption[]>(() => {\n const lastUsed = getLastLoginMethod();\n return baseMethods.map((method) => ({\n id: method.id,\n label: method.label,\n lastUsed: lastUsed === method.id,\n onSelect: () => {\n setLastLoginMethod(method.id);\n login(undefined, method.id);\n },\n }));\n }, [baseMethods, login]);\n\n return { onLogin, methods, loading: pending, error: error?.message ?? null };\n}\n"],"names":[],"mappings":";;;;;;AAaA,SAAgB,qBAAiC;CAC/C,MAAM,WAAW,kBAAkB,CAAC,QAAQ,QAAQ;CAGpD,MAAM,UAAU,sBAAsB,SAAS;AAC/C,QAAO,kBAAkB;AACvB,MAAI,QAAQ,SAAS,EACnB,aAAY,EAAE,MAAM,SAAS,CAAC;MAE9B,aAAY;IAEb,CAAC,QAAQ,CAAC;;AAYf,MAAM,kBAAkB;AAExB,SAAS,qBAAoC;AAC3C,KAAI;AACF,SAAO,aAAa,QAAQ,gBAAgB;SACtC;AACN,SAAO;;;AAIX,SAAS,mBAAmB,QAAsB;AAChD,KAAI;AACF,eAAa,QAAQ,iBAAiB,OAAO;SACvC;;AAOV,SAAgB,sBAAwC;CACtD,MAAM,EAAE,OAAO,SAAS,UAAU,eAAe;CACjD,MAAM,UAAU,kBAAkB,OAAO,EAAE,CAAC,MAAM,CAAC;CAEnD,MAAM,WAAW,kBAAkB,CAAC,QAAQ,QAAQ;CAKpD,MAAM,cAAc,sBAAsB,SAAS;AAenD,QAAO;EAAE;EAAS,SAbF,cAAmC;GACjD,MAAM,WAAW,oBAAoB;AACrC,UAAO,YAAY,KAAK,YAAY;IAClC,IAAI,OAAO;IACX,OAAO,OAAO;IACd,UAAU,aAAa,OAAO;IAC9B,gBAAgB;AACd,wBAAmB,OAAO,GAAG;AAC7B,WAAM,KAAA,GAAW,OAAO,GAAG;;IAE9B,EAAE;KACF,CAAC,aAAa,MAAM,CAAC;EAEG,SAAS;EAAS,OAAO,OAAO,WAAW;EAAM","debug_id":"bbb5e35d-c252-50af-bc16-46e7ceedd324"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/connect",
|
|
3
3
|
"productName": "Powerhouse-Connect",
|
|
4
|
-
"version": "6.2.2-dev.
|
|
4
|
+
"version": "6.2.2-dev.14",
|
|
5
5
|
"description": "Powerhouse Connect",
|
|
6
6
|
"main": "dist/index.html",
|
|
7
7
|
"type": "module",
|
|
@@ -56,7 +56,10 @@
|
|
|
56
56
|
"@openfeature/web-sdk": "1.6.2",
|
|
57
57
|
"@openpanel/web": "^1.4.1",
|
|
58
58
|
"@powerhousedao/document-engineering": "1.40.5",
|
|
59
|
+
"@privy-io/react-auth": "^3.25.0",
|
|
60
|
+
"@rainbow-me/rainbowkit": "^2.2.11",
|
|
59
61
|
"@sentry/react": "^10.17.0",
|
|
62
|
+
"@tanstack/react-query": "^5.90.2",
|
|
60
63
|
"i18next": "^25.5.3",
|
|
61
64
|
"kysely": "0.28.16",
|
|
62
65
|
"kysely-pglite-dialect": "1.2.0",
|
|
@@ -69,17 +72,18 @@
|
|
|
69
72
|
"react-router-dom": "^6.11.2",
|
|
70
73
|
"tailwind-merge": "3.4.0",
|
|
71
74
|
"usehooks-ts": "^3.1.1",
|
|
75
|
+
"wagmi": "2.19.5",
|
|
72
76
|
"zod": "4.3.6",
|
|
73
|
-
"@powerhousedao/config": "6.2.2-dev.
|
|
74
|
-
"@powerhousedao/
|
|
75
|
-
"@powerhousedao/
|
|
76
|
-
"@powerhousedao/
|
|
77
|
-
"@powerhousedao/reactor-
|
|
78
|
-
"@powerhousedao/
|
|
79
|
-
"@powerhousedao/
|
|
80
|
-
"@
|
|
81
|
-
"
|
|
82
|
-
"
|
|
77
|
+
"@powerhousedao/config": "6.2.2-dev.14",
|
|
78
|
+
"@powerhousedao/reactor": "6.2.2-dev.14",
|
|
79
|
+
"@powerhousedao/reactor-attachments": "6.2.2-dev.14",
|
|
80
|
+
"@powerhousedao/powerhouse-vetra-packages": "6.2.2-dev.14",
|
|
81
|
+
"@powerhousedao/reactor-browser": "6.2.2-dev.14",
|
|
82
|
+
"@powerhousedao/design-system": "6.2.2-dev.14",
|
|
83
|
+
"@powerhousedao/vetra": "6.2.2-dev.14",
|
|
84
|
+
"@renown/sdk": "6.2.2-dev.14",
|
|
85
|
+
"document-model": "6.2.2-dev.14",
|
|
86
|
+
"@powerhousedao/shared": "6.2.2-dev.14"
|
|
83
87
|
},
|
|
84
88
|
"devDependencies": {
|
|
85
89
|
"@tailwindcss/cli": "4.2.2",
|
|
@@ -1,40 +0,0 @@
|
|
|
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]="b78ca9b0-db26-5391-94d1-8d814e3be9f5")}catch(e){}}();
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
import "react";
|
|
5
|
-
import { logout, openRenown, usePHModal, useUser } from "@powerhousedao/reactor-browser";
|
|
6
|
-
import { DriveAuthGate } from "@powerhousedao/design-system/connect";
|
|
7
|
-
//#region src/components/modal/modals/DriveAuthRequiredModal.tsx
|
|
8
|
-
/**
|
|
9
|
-
* Shown when a protected drive can't be added because the user isn't logged in.
|
|
10
|
-
*
|
|
11
|
-
* Deliberately NOT a Radix modal dialog: a modal dialog blocks all outside
|
|
12
|
-
* interaction, which would trap the cookie banner (rendered above at z-10000)
|
|
13
|
-
* and prevent accepting/rejecting it. Instead this is a non-blocking overlay —
|
|
14
|
-
* `pointer-events-none` on the backdrop (so the banner and page stay clickable)
|
|
15
|
-
* with `pointer-events-auto` on the card — sitting below the cookie banner. The
|
|
16
|
-
* card itself is the shared {@link DriveAuthGate}, identical to the full-page
|
|
17
|
-
* gate. It stays up until login (the Renown CTA full-page-redirects).
|
|
18
|
-
*/
|
|
19
|
-
const DriveAuthRequiredModal = () => {
|
|
20
|
-
const phModal = usePHModal();
|
|
21
|
-
const mode = useUser() ? "unauthorized" : "login";
|
|
22
|
-
if (phModal?.type !== "driveAuthRequired") return null;
|
|
23
|
-
return /* @__PURE__ */ jsx("div", {
|
|
24
|
-
role: "dialog",
|
|
25
|
-
"aria-modal": "false",
|
|
26
|
-
"aria-label": mode === "unauthorized" ? "You don't have access to this drive" : "Log in to access this drive",
|
|
27
|
-
className: "pointer-events-none fixed inset-0 z-50 grid place-items-center bg-primary/30",
|
|
28
|
-
children: /* @__PURE__ */ jsx(DriveAuthGate, {
|
|
29
|
-
mode,
|
|
30
|
-
onLogin: () => openRenown(),
|
|
31
|
-
onLogout: () => void logout(),
|
|
32
|
-
className: "pointer-events-auto"
|
|
33
|
-
})
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
//#endregion
|
|
37
|
-
export { DriveAuthRequiredModal };
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=DriveAuthRequiredModal-CPV5uXnf.js.map
|
|
40
|
-
//# debugId=b78ca9b0-db26-5391-94d1-8d814e3be9f5
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DriveAuthRequiredModal-CPV5uXnf.js","sources":["../src/components/modal/modals/DriveAuthRequiredModal.tsx"],"sourcesContent":["import { DriveAuthGate } from \"@powerhousedao/design-system/connect\";\nimport {\n logout,\n openRenown,\n usePHModal,\n useUser,\n} from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\n/**\n * Shown when a protected drive can't be added because the user isn't logged in.\n *\n * Deliberately NOT a Radix modal dialog: a modal dialog blocks all outside\n * interaction, which would trap the cookie banner (rendered above at z-10000)\n * and prevent accepting/rejecting it. Instead this is a non-blocking overlay —\n * `pointer-events-none` on the backdrop (so the banner and page stay clickable)\n * with `pointer-events-auto` on the card — sitting below the cookie banner. The\n * card itself is the shared {@link DriveAuthGate}, identical to the full-page\n * gate. It stays up until login (the Renown CTA full-page-redirects).\n */\nexport const DriveAuthRequiredModal: React.FC = () => {\n const phModal = usePHModal();\n const user = useUser();\n const mode = user ? \"unauthorized\" : \"login\";\n if (phModal?.type !== \"driveAuthRequired\") return null;\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label={\n mode === \"unauthorized\"\n ? \"You don't have access to this drive\"\n : \"Log in to access this drive\"\n }\n className=\"pointer-events-none fixed inset-0 z-50 grid place-items-center bg-primary/30\"\n >\n <DriveAuthGate\n mode={mode}\n onLogin={() => openRenown()}\n onLogout={() => void logout()}\n className=\"pointer-events-auto\"\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAoBA,MAAa,+BAAyC;CACpD,MAAM,UAAU,YAAY;CAE5B,MAAM,OADO,SAAS,GACF,iBAAiB;AACrC,KAAI,SAAS,SAAS,oBAAqB,QAAO;AAElD,QACE,oBAAC,OAAD;EACE,MAAK;EACL,cAAW;EACX,cACE,SAAS,iBACL,wCACA;EAEN,WAAU;YAEV,oBAAC,eAAD;GACQ;GACN,eAAe,YAAY;GAC3B,gBAAgB,KAAK,QAAQ;GAC7B,WAAU;GACV,CAAA;EACE,CAAA","debug_id":"b78ca9b0-db26-5391-94d1-8d814e3be9f5"}
|
|
@@ -1,4 +0,0 @@
|
|
|
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
|