@proappstore/sdk 1.16.58 → 1.16.60
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/README.md +16 -13
- package/dist/shell-css.d.ts +7 -5
- package/dist/shell-css.d.ts.map +1 -1
- package/dist/shell-css.js +17 -5
- package/dist/shell-css.js.map +1 -1
- package/dist/shell.css +10 -0
- package/dist/shell.js +4 -29
- package/dist/shell.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,6 +18,8 @@ import { initPro } from '@proappstore/sdk'
|
|
|
18
18
|
const app = initPro({ appId: 'my-app' })
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
Then wrap the whole app in `<ProShell app={app} appName="…" nav={[…]}>`, the standard app frame with the gates, topbar, main navigation and resilience layer. See [ProShell Component](#proshell-component).
|
|
22
|
+
|
|
21
23
|
Options:
|
|
22
24
|
|
|
23
25
|
| Option | Default | Description |
|
|
@@ -508,9 +510,9 @@ const all = await app.roles.listAll()
|
|
|
508
510
|
// [{ userId: 'user-456', role: 'moderator' }, ...]
|
|
509
511
|
```
|
|
510
512
|
|
|
511
|
-
## React Hooks
|
|
513
|
+
## React Hooks
|
|
512
514
|
|
|
513
|
-
|
|
515
|
+
Every app is wrapped in [`ProShell`](#proshell-component), which already runs the sign-in and subscription gates. Use these hooks inside its screens to read identity and subscription state, or to gate a single screen. Import from `@proappstore/sdk` or `@proappstore/sdk/hooks`.
|
|
514
516
|
|
|
515
517
|
### useProAuth
|
|
516
518
|
|
|
@@ -522,11 +524,10 @@ import { useProAuth } from '@proappstore/sdk/hooks'
|
|
|
522
524
|
|
|
523
525
|
const app = initPro({ appId: 'my-app' })
|
|
524
526
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
return <p>Welcome, {user.login}! <button onClick={signOut}>Sign out</button></p>
|
|
527
|
+
// A screen inside <ProShell>: the shell has already signed the user in.
|
|
528
|
+
function Welcome() {
|
|
529
|
+
const { user, signOut } = useProAuth(app)
|
|
530
|
+
return <p>Welcome, {user?.login}! <button onClick={signOut}>Sign out</button></p>
|
|
530
531
|
}
|
|
531
532
|
```
|
|
532
533
|
|
|
@@ -547,7 +548,7 @@ function Billing() {
|
|
|
547
548
|
|
|
548
549
|
### useProGate
|
|
549
550
|
|
|
550
|
-
Combined auth + subscription gate. Returns a single `gate` state for easy conditional rendering.
|
|
551
|
+
Combined auth + subscription gate. Returns a single `gate` state for easy conditional rendering. ProShell gates the whole app; use this for one Pro-only screen in an app that otherwise allows free users.
|
|
551
552
|
|
|
552
553
|
```tsx
|
|
553
554
|
import { initPro } from '@proappstore/sdk'
|
|
@@ -555,19 +556,19 @@ import { useProGate } from '@proappstore/sdk/hooks'
|
|
|
555
556
|
|
|
556
557
|
const app = initPro({ appId: 'my-app' })
|
|
557
558
|
|
|
558
|
-
|
|
559
|
-
|
|
559
|
+
// A screen inside <ProShell allowFree>: only this screen needs a subscription.
|
|
560
|
+
function ReportsScreen() {
|
|
561
|
+
const { gate, upgrade } = useProGate(app, { allowFree: false })
|
|
560
562
|
|
|
561
563
|
if (gate === 'loading') return <p>Loading...</p>
|
|
562
|
-
if (gate === 'signed-out') return <button onClick={signIn}>Sign in</button>
|
|
563
564
|
if (gate === 'no-subscription') return <button onClick={() => upgrade()}>Upgrade</button>
|
|
564
|
-
return <
|
|
565
|
+
return <Reports />
|
|
565
566
|
}
|
|
566
567
|
```
|
|
567
568
|
|
|
568
569
|
Gate states: `'loading'` | `'signed-out'` | `'no-subscription'` | `'ready'`
|
|
569
570
|
|
|
570
|
-
|
|
571
|
+
`allowFree` defaults to `true` (free users pass); pass `{ allowFree: false }` to require an active subscription.
|
|
571
572
|
|
|
572
573
|
## ProShell Component
|
|
573
574
|
|
|
@@ -656,6 +657,8 @@ Do not build navigation into a page, and do not stack a second navbar under the
|
|
|
656
657
|
|
|
657
658
|
For a fully custom layout, use `<ProShell app={app} hideTopbar hideFooter>` and compose `NavBar`, `ProfileMenu`, `SignInButton`, `GateScreen`, and hooks from `@proappstore/sdk/ui` and `@proappstore/sdk/hooks`.
|
|
658
659
|
|
|
660
|
+
The children render only after the gates pass: signed-out visitors see the sign-in screen with no topbar or navigation, and `platform-cookie` apps show it briefly to returning users while the session hydrates. Routing caveats (routers, hash routing) and a step-by-step guide to replacing a hand-rolled header or navbar are in the [SDK overview](https://docs.proappstore.online/sdk-overview/#proshell-component).
|
|
661
|
+
|
|
659
662
|
## UI Components
|
|
660
663
|
|
|
661
664
|
Import from `@proappstore/sdk/ui`:
|
package/dist/shell-css.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ProShell's
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* ProShell's styles: the frame itself — wrapper, sticky topbar, main, footer,
|
|
3
|
+
* profile-menu items (#235) — and the resilience and feedback layer (#236):
|
|
4
|
+
* skip link, offline banner, toast region, error and loading fallbacks,
|
|
5
|
+
* PageHeader. Same model as navbar-css.ts: canonical tokens only (PAS-UI-001),
|
|
6
|
+
* mirrored by Tailwind classes on the elements, injected by ProShell at render
|
|
7
|
+
* so an app needs no configuration, and appended to dist/shell.css.
|
|
6
8
|
*/
|
|
7
|
-
export declare const SHELL_CSS = ".pas-skip-link:not(:focus){position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}\n.pas-skip-link:focus{position:fixed;top:.5rem;left:.5rem;z-index:1200;padding:.7rem 1rem;border:2px solid var(--accent);border-radius:10px;background:var(--paper);color:var(--ink);font-weight:600;text-decoration:none;outline:2px solid var(--accent);outline-offset:2px}\n.pas-main:focus{outline:none}\n.pas-offline{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.25rem .5rem .25rem 1rem;background:var(--panel);color:var(--ink);border-bottom:1px solid var(--line);border-left:3px solid var(--warning);font-size:.875rem}\n.pas-toast-region{position:fixed;bottom:1.25rem;left:50%;z-index:1100;display:flex;flex-direction:column;align-items:center;gap:.5rem;max-width:calc(100vw - 2rem);transform:translateX(-50%);pointer-events:none}\n.pas-toast{display:flex;align-items:center;gap:.75rem;padding:.25rem .25rem .25rem 1rem;background:var(--ink);color:var(--paper);border-left:3px solid var(--accent);border-radius:var(--radius,.75rem);box-shadow:0 8px 24px rgba(0,0,0,.3);font-size:.875rem;pointer-events:auto}\n.pas-toast[data-variant=\"success\"]{border-left-color:var(--success)}\n.pas-toast[data-variant=\"error\"]{border-left-color:var(--danger)}\n.pas-dismiss{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0;border:0;border-radius:10px;background:transparent;color:inherit;font:inherit;font-size:1.1rem;line-height:1;cursor:pointer;opacity:.75}\n.pas-dismiss:hover{opacity:1}\n.pas-shell-loading{display:flex;flex:1;align-items:center;justify-content:center;padding:3rem 1rem}\n.pas-shell-error{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;text-align:center;color:var(--ink)}\n.pas-shell-error h1{margin:0;font-size:1.25rem}\n.pas-shell-error p{margin:0;max-width:32rem;color:var(--muted);font-size:.9rem}\n.pas-shell-error__retry{min-height:44px;padding:0 1.25rem;border:0;border-radius:10px;background:var(--accent);color:var(--paper);font:inherit;font-weight:600;cursor:pointer}\n.pas-page-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.75rem;margin:0 0 1.25rem}\n.pas-page-header__title{margin:0;color:var(--ink);font-size:1.5rem;font-weight:700;line-height:1.2}\n.pas-page-header__title:focus{outline:none}\n.pas-page-header__description{margin:.25rem 0 0;color:var(--muted);font-size:.9rem}\n.pas-dismiss:focus-visible,.pas-shell-error__retry:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n";
|
|
9
|
+
export declare const SHELL_CSS = ".pas-shell{display:flex;flex-direction:column;min-height:100dvh}\n.pas-topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid var(--line);background:var(--panel)}\n.pas-topbar__brand{display:flex;align-items:center;gap:.75rem}\n.pas-topbar__logo{color:var(--accent);font-size:1rem;font-weight:800;text-decoration:none}\n.pas-topbar__app{color:var(--muted);font-size:.85rem;font-weight:600}\n.pas-topbar__account{display:flex;align-items:center;gap:.5rem}\n.pas-main{display:flex;flex:1;flex-direction:column}\n.pas-footer{padding:1rem;border-top:1px solid var(--line);color:var(--muted);font-size:.75rem;text-align:center}\n.pas-footer__link{color:var(--accent);font-weight:600;text-decoration:none}\n.pas-menu-item{display:block;width:100%;padding:.5rem 1rem;border:0;background:none;color:var(--ink);font:inherit;font-size:.85rem;text-align:left;cursor:pointer}\n.pas-skip-link:not(:focus){position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}\n.pas-skip-link:focus{position:fixed;top:.5rem;left:.5rem;z-index:1200;padding:.7rem 1rem;border:2px solid var(--accent);border-radius:10px;background:var(--paper);color:var(--ink);font-weight:600;text-decoration:none;outline:2px solid var(--accent);outline-offset:2px}\n.pas-main:focus{outline:none}\n.pas-offline{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.25rem .5rem .25rem 1rem;background:var(--panel);color:var(--ink);border-bottom:1px solid var(--line);border-left:3px solid var(--warning);font-size:.875rem}\n.pas-toast-region{position:fixed;bottom:1.25rem;left:50%;z-index:1100;display:flex;flex-direction:column;align-items:center;gap:.5rem;max-width:calc(100vw - 2rem);transform:translateX(-50%);pointer-events:none}\n.pas-toast{display:flex;align-items:center;gap:.75rem;padding:.25rem .25rem .25rem 1rem;background:var(--ink);color:var(--paper);border-left:3px solid var(--accent);border-radius:var(--radius,.75rem);box-shadow:0 8px 24px rgba(0,0,0,.3);font-size:.875rem;pointer-events:auto}\n.pas-toast[data-variant=\"success\"]{border-left-color:var(--success)}\n.pas-toast[data-variant=\"error\"]{border-left-color:var(--danger)}\n.pas-dismiss{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0;border:0;border-radius:10px;background:transparent;color:inherit;font:inherit;font-size:1.1rem;line-height:1;cursor:pointer;opacity:.75}\n.pas-dismiss:hover{opacity:1}\n.pas-shell-loading{display:flex;flex:1;align-items:center;justify-content:center;padding:3rem 1rem}\n.pas-shell-error{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;text-align:center;color:var(--ink)}\n.pas-shell-error h1{margin:0;font-size:1.25rem}\n.pas-shell-error p{margin:0;max-width:32rem;color:var(--muted);font-size:.9rem}\n.pas-shell-error__retry{min-height:44px;padding:0 1.25rem;border:0;border-radius:10px;background:var(--accent);color:var(--paper);font:inherit;font-weight:600;cursor:pointer}\n.pas-page-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.75rem;margin:0 0 1.25rem}\n.pas-page-header__title{margin:0;color:var(--ink);font-size:1.5rem;font-weight:700;line-height:1.2}\n.pas-page-header__title:focus{outline:none}\n.pas-page-header__description{margin:.25rem 0 0;color:var(--muted);font-size:.9rem}\n.pas-dismiss:focus-visible,.pas-shell-error__retry:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n";
|
|
8
10
|
//# sourceMappingURL=shell-css.d.ts.map
|
package/dist/shell-css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-css.d.ts","sourceRoot":"","sources":["../src/shell-css.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shell-css.d.ts","sourceRoot":"","sources":["../src/shell-css.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,skHA8BrB,CAAC"}
|
package/dist/shell-css.js
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ProShell's
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* ProShell's styles: the frame itself — wrapper, sticky topbar, main, footer,
|
|
3
|
+
* profile-menu items (#235) — and the resilience and feedback layer (#236):
|
|
4
|
+
* skip link, offline banner, toast region, error and loading fallbacks,
|
|
5
|
+
* PageHeader. Same model as navbar-css.ts: canonical tokens only (PAS-UI-001),
|
|
6
|
+
* mirrored by Tailwind classes on the elements, injected by ProShell at render
|
|
7
|
+
* so an app needs no configuration, and appended to dist/shell.css.
|
|
6
8
|
*/
|
|
7
|
-
export const SHELL_CSS = `.pas-
|
|
9
|
+
export const SHELL_CSS = `.pas-shell{display:flex;flex-direction:column;min-height:100dvh}
|
|
10
|
+
.pas-topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid var(--line);background:var(--panel)}
|
|
11
|
+
.pas-topbar__brand{display:flex;align-items:center;gap:.75rem}
|
|
12
|
+
.pas-topbar__logo{color:var(--accent);font-size:1rem;font-weight:800;text-decoration:none}
|
|
13
|
+
.pas-topbar__app{color:var(--muted);font-size:.85rem;font-weight:600}
|
|
14
|
+
.pas-topbar__account{display:flex;align-items:center;gap:.5rem}
|
|
15
|
+
.pas-main{display:flex;flex:1;flex-direction:column}
|
|
16
|
+
.pas-footer{padding:1rem;border-top:1px solid var(--line);color:var(--muted);font-size:.75rem;text-align:center}
|
|
17
|
+
.pas-footer__link{color:var(--accent);font-weight:600;text-decoration:none}
|
|
18
|
+
.pas-menu-item{display:block;width:100%;padding:.5rem 1rem;border:0;background:none;color:var(--ink);font:inherit;font-size:.85rem;text-align:left;cursor:pointer}
|
|
19
|
+
.pas-skip-link:not(:focus){position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
|
|
8
20
|
.pas-skip-link:focus{position:fixed;top:.5rem;left:.5rem;z-index:1200;padding:.7rem 1rem;border:2px solid var(--accent);border-radius:10px;background:var(--paper);color:var(--ink);font-weight:600;text-decoration:none;outline:2px solid var(--accent);outline-offset:2px}
|
|
9
21
|
.pas-main:focus{outline:none}
|
|
10
22
|
.pas-offline{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.25rem .5rem .25rem 1rem;background:var(--panel);color:var(--ink);border-bottom:1px solid var(--line);border-left:3px solid var(--warning);font-size:.875rem}
|
package/dist/shell-css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-css.js","sourceRoot":"","sources":["../src/shell-css.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shell-css.js","sourceRoot":"","sources":["../src/shell-css.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BxB,CAAC"}
|
package/dist/shell.css
CHANGED
|
@@ -6,6 +6,16 @@
|
|
|
6
6
|
.pas-nav__link[aria-current="page"]{color:var(--accent);background:var(--line)}
|
|
7
7
|
.pas-nav__toggle:focus-visible,.pas-nav__link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
|
8
8
|
@media (max-width:639px){.pas-nav{flex:0 0 auto;margin:0}.pas-nav__toggle{display:inline-flex}.pas-nav__list{display:none;position:absolute;top:calc(100% + .5rem);left:0;z-index:60;flex-direction:column;align-items:stretch;min-width:12rem;padding:.5rem;overflow:visible;background:var(--paper);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.12)}.pas-nav[data-open="true"] .pas-nav__list{display:flex}}
|
|
9
|
+
.pas-shell{display:flex;flex-direction:column;min-height:100dvh}
|
|
10
|
+
.pas-topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid var(--line);background:var(--panel)}
|
|
11
|
+
.pas-topbar__brand{display:flex;align-items:center;gap:.75rem}
|
|
12
|
+
.pas-topbar__logo{color:var(--accent);font-size:1rem;font-weight:800;text-decoration:none}
|
|
13
|
+
.pas-topbar__app{color:var(--muted);font-size:.85rem;font-weight:600}
|
|
14
|
+
.pas-topbar__account{display:flex;align-items:center;gap:.5rem}
|
|
15
|
+
.pas-main{display:flex;flex:1;flex-direction:column}
|
|
16
|
+
.pas-footer{padding:1rem;border-top:1px solid var(--line);color:var(--muted);font-size:.75rem;text-align:center}
|
|
17
|
+
.pas-footer__link{color:var(--accent);font-weight:600;text-decoration:none}
|
|
18
|
+
.pas-menu-item{display:block;width:100%;padding:.5rem 1rem;border:0;background:none;color:var(--ink);font:inherit;font-size:.85rem;text-align:left;cursor:pointer}
|
|
9
19
|
.pas-skip-link:not(:focus){position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
|
|
10
20
|
.pas-skip-link:focus{position:fixed;top:.5rem;left:.5rem;z-index:1200;padding:.7rem 1rem;border:2px solid var(--accent);border-radius:10px;background:var(--paper);color:var(--ink);font-weight:600;text-decoration:none;outline:2px solid var(--accent);outline-offset:2px}
|
|
11
21
|
.pas-main:focus{outline:none}
|
package/dist/shell.js
CHANGED
|
@@ -91,7 +91,7 @@ export function ProShell({ app, children, appName, nav, renderNav, onNavigate, a
|
|
|
91
91
|
if (!user) {
|
|
92
92
|
return _jsx(GateScreen, { gate: "signed-out", app: app, appName: appName });
|
|
93
93
|
}
|
|
94
|
-
const profileMenu = (_jsx(ProfileMenu, { app: app, showThemeToggle: showThemeToggle, children: menuItems?.map((item, i) => (_jsx("button", { onClick: item.onClick,
|
|
94
|
+
const profileMenu = (_jsx(ProfileMenu, { app: app, showThemeToggle: showThemeToggle, children: menuItems?.map((item, i) => (_jsx("button", { type: "button", onClick: item.onClick, className: "pas-menu-item block w-full cursor-pointer border-0 bg-transparent px-4 py-2 text-left text-[0.85rem] text-[var(--ink)]", children: item.label }, i))) }));
|
|
95
95
|
// Client-side navigation goes through the shell, so it knows the route changed
|
|
96
96
|
// (scroll, focus, titles). Without onNavigate, items are plain links.
|
|
97
97
|
const navigate = onNavigate
|
|
@@ -120,35 +120,10 @@ export function ProShell({ app, children, appName, nav, renderNav, onNavigate, a
|
|
|
120
120
|
proBadge: subscription?.status === 'active' ? _jsx(ProBadge, {}) : null,
|
|
121
121
|
nav: navNode,
|
|
122
122
|
};
|
|
123
|
-
const topbar = renderTopbar ? renderTopbar(shellContext) : hideTopbar ? null : (_jsxs("header", {
|
|
124
|
-
const footer = renderFooter ? renderFooter(shellContext) : hideFooter ? null : (_jsxs("footer", {
|
|
123
|
+
const topbar = renderTopbar ? renderTopbar(shellContext) : hideTopbar ? null : (_jsxs("header", { className: "pas-topbar sticky top-0 z-50 flex items-center justify-between border-b border-[var(--line)] bg-[var(--panel)] px-4 py-2", children: [_jsxs("div", { className: "pas-topbar__brand flex items-center gap-3", children: [_jsx("a", { href: "https://proappstore.online", className: "pas-topbar__logo text-base font-extrabold text-[var(--accent)] no-underline", children: "Pro" }), appName && _jsx("span", { className: "pas-topbar__app text-[0.85rem] font-semibold text-[var(--muted)]", children: appName }), shellContext.proBadge] }), shellContext.nav, _jsxs("div", { className: "pas-topbar__account flex items-center gap-2", children: [shellContext.textSizeToggle, shellContext.profileMenu] })] }));
|
|
124
|
+
const footer = renderFooter ? renderFooter(shellContext) : hideFooter ? null : (_jsxs("footer", { className: "pas-footer border-t border-[var(--line)] p-4 text-center text-xs text-[var(--muted)]", children: ["Part of", ' ', _jsx("a", { href: "https://proappstore.online", className: "pas-footer__link font-semibold text-[var(--accent)] no-underline", children: "ProAppStore" })] }));
|
|
125
125
|
const loading = renderLoading ? renderLoading() : (_jsx("div", { className: "pas-shell-loading flex flex-1 items-center justify-center px-4 py-12", children: _jsx(Spinner, { size: 28 }) }));
|
|
126
126
|
// --- Ready: render app with topbar ---
|
|
127
|
-
return (_jsx(ProProvider, { app: app, children: _jsx(ToastProvider, { children: _jsxs("div", {
|
|
127
|
+
return (_jsx(ProProvider, { app: app, children: _jsx(ToastProvider, { children: _jsxs("div", { className: "pas-shell flex min-h-dvh flex-col", children: [_jsx(SkipLink, { mainRef: mainRef }), topbar, _jsx(OfflineBanner, {}), _jsx("main", { id: "main", ref: mainRef, tabIndex: -1, className: "pas-main flex flex-1 flex-col", children: _jsx(ShellErrorBoundary, { app: app, renderError: renderError, resetKey: currentPath, children: _jsx(Suspense, { fallback: loading, children: children }) }) }), footer] }) }) }));
|
|
128
128
|
}
|
|
129
|
-
const menuItemStyle = {
|
|
130
|
-
display: 'block', width: '100%', padding: '0.5rem 1rem',
|
|
131
|
-
background: 'none', border: 'none', textAlign: 'left',
|
|
132
|
-
fontSize: '0.85rem', cursor: 'pointer',
|
|
133
|
-
color: 'var(--ink)', fontFamily: 'inherit',
|
|
134
|
-
};
|
|
135
|
-
const styles = {
|
|
136
|
-
shell: { minHeight: '100dvh', display: 'flex', flexDirection: 'column' },
|
|
137
|
-
topbar: {
|
|
138
|
-
display: 'flex', alignItems: 'center', justifyContent: 'space-between',
|
|
139
|
-
padding: '0.5rem 1rem',
|
|
140
|
-
borderBottom: '1px solid var(--line)',
|
|
141
|
-
background: 'var(--panel)',
|
|
142
|
-
position: 'sticky', top: 0, zIndex: 50,
|
|
143
|
-
},
|
|
144
|
-
topbarLeft: { display: 'flex', alignItems: 'center', gap: '0.75rem' },
|
|
145
|
-
logoLink: { fontWeight: 800, fontSize: '1rem', color: 'var(--accent)', textDecoration: 'none' },
|
|
146
|
-
appName: { fontSize: '0.85rem', fontWeight: 600, color: 'var(--muted)' },
|
|
147
|
-
main: { flex: 1, display: 'flex', flexDirection: 'column' },
|
|
148
|
-
footer: {
|
|
149
|
-
padding: '1rem', textAlign: 'center', fontSize: '0.75rem',
|
|
150
|
-
color: 'var(--muted)',
|
|
151
|
-
borderTop: '1px solid var(--line)',
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
129
|
//# sourceMappingURL=shell.js.map
|
package/dist/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"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"}
|