@freeappstore/sdk 0.15.10 → 0.16.1

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/ui/layout.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Suspense, useEffect, useInsertionEffect, useLayoutEffect, useRef, useState, } from 'react';
2
+ import { Suspense, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
3
  import { useAuth, useTheme } from '../hooks.js';
4
4
  import { Footer, Modal, Spinner } from './components.js';
5
5
  import { Avatar, SignInButton, TextSizeToggle, ThemeToggle, useTextSize } from './core.js';
6
6
  import { FriendRequestBadge, FriendsList } from './friends.js';
7
7
  import { activeHref, NavBar, useCurrentPath } from './navbar.js';
8
- import { OfflineBanner, SHELL_CSS, ShellErrorBoundary, SkipLink, ToastProvider, useRouteChangeEffects, } from './shell-resilience.js';
8
+ import { OfflineBanner, ShellErrorBoundary, SkipLink, ToastProvider, useRouteChangeEffects, } from './shell-resilience.js';
9
9
  /** Avatar button that opens dropdown: username, theme toggle, sign out, delete account. */
10
10
  export function ProfileMenu({ app, showThemeToggle = true, children }) {
11
11
  const { user, signOut, deleteAccount } = useAuth(app);
@@ -36,64 +36,14 @@ export function ProfileMenu({ app, showThemeToggle = true, children }) {
36
36
  await deleteAccount();
37
37
  setOpen(false);
38
38
  };
39
- return (_jsxs("div", { ref: ref, style: { position: 'relative' }, children: [_jsx("button", { onClick: () => setOpen(!open), style: {
40
- background: 'none',
41
- border: '2px solid var(--line)',
42
- borderRadius: '50%',
43
- padding: 0,
44
- cursor: 'pointer',
45
- width: 32,
46
- height: 32,
47
- overflow: 'hidden',
48
- display: 'block',
49
- }, children: _jsx(Avatar, { user: user, size: 28 }) }), open && (_jsxs("div", { style: {
50
- position: 'absolute',
51
- top: 40,
52
- right: 0,
53
- background: 'var(--panel)',
54
- border: '1px solid var(--line)',
55
- borderRadius: 'var(--radius, 0.75rem)',
56
- boxShadow: '0 4px 20px rgba(0,0,0,0.1)',
57
- minWidth: 200,
58
- padding: '0.5rem 0',
59
- zIndex: 100,
60
- }, children: [_jsx("div", { style: {
61
- padding: '0.5rem 1rem',
62
- borderBottom: '1px solid var(--line)',
63
- fontSize: '0.85rem',
64
- fontWeight: 700,
65
- color: 'var(--ink)',
66
- }, children: user.login }), showThemeToggle && (_jsxs("div", { style: {
67
- padding: '0.5rem 1rem',
68
- borderBottom: '1px solid var(--line)',
69
- display: 'flex',
70
- alignItems: 'center',
71
- justifyContent: 'space-between',
72
- }, children: [_jsx("span", { style: { fontSize: '0.85rem', color: 'var(--muted)' }, children: "Theme" }), _jsx(ThemeToggle, {})] })), _jsx("button", { onClick: () => {
39
+ return (_jsxs("div", { ref: ref, className: "relative", children: [_jsx("button", { type: "button", "aria-label": "Profile menu", "aria-expanded": open, onClick: () => setOpen(!open), className: "bg-transparent border-2 border-line rounded-full p-0 cursor-pointer w-8 h-8 overflow-hidden block", children: _jsx(Avatar, { user: user, size: 28 }) }), open && (_jsxs("div", { className: "absolute top-10 right-0 bg-popover border border-line rounded shadow-sm min-w-50 p-[0.5rem_0] z-[100]", children: [_jsx("div", { className: "p-[0.5rem_1rem] border-b border-line text-[0.85rem] font-bold text-ink", children: user.login }), showThemeToggle && (_jsxs("div", { className: "p-[0.5rem_1rem] border-b border-line flex items-center justify-between", children: [_jsx("span", { className: "text-[0.85rem] text-muted", children: "Theme" }), _jsx(ThemeToggle, {})] })), _jsx("button", { onClick: () => {
73
40
  app.keys.manage();
74
41
  setOpen(false);
75
- }, style: menuItemStyle, children: "API Keys" }), _jsxs("button", { onClick: () => {
42
+ }, className: "block w-full p-[0.5rem_1rem] bg-transparent border-0 text-left text-[0.85rem] cursor-pointer text-ink font-[inherit]", children: "API Keys" }), _jsxs("button", { onClick: () => {
76
43
  setFriendsOpen(true);
77
44
  setOpen(false);
78
- }, style: {
79
- ...menuItemStyle,
80
- display: 'flex',
81
- alignItems: 'center',
82
- justifyContent: 'space-between',
83
- }, children: ["Friends ", _jsx(FriendRequestBadge, { app: app })] }), children, _jsx("button", { onClick: handleSignOut, style: menuItemStyle, children: "Sign out" }), _jsx("button", { onClick: handleDelete, style: { ...menuItemStyle, color: 'var(--danger, #dc2626)' }, children: "Delete account" })] })), _jsx(Modal, { open: friendsOpen, onClose: () => setFriendsOpen(false), title: "Friends", maxWidth: 420, children: _jsx(FriendsList, { app: app }) })] }));
45
+ }, className: "flex w-full p-[0.5rem_1rem] bg-transparent border-0 text-left text-[0.85rem] cursor-pointer text-ink font-[inherit] items-center justify-between", children: ["Friends ", _jsx(FriendRequestBadge, { app: app })] }), children, _jsx("button", { onClick: handleSignOut, className: "block w-full p-[0.5rem_1rem] bg-transparent border-0 text-left text-[0.85rem] cursor-pointer text-ink font-[inherit]", children: "Sign out" }), _jsx("button", { onClick: handleDelete, className: "block w-full p-[0.5rem_1rem] bg-transparent border-0 text-left text-[0.85rem] cursor-pointer text-danger font-[inherit]", children: "Delete account" })] })), _jsx(Modal, { open: friendsOpen, onClose: () => setFriendsOpen(false), title: "Friends", maxWidth: 420, children: _jsx(FriendsList, { app: app }) })] }));
84
46
  }
85
- const menuItemStyle = {
86
- display: 'block',
87
- width: '100%',
88
- padding: '0.5rem 1rem',
89
- background: 'none',
90
- border: 'none',
91
- textAlign: 'left',
92
- fontSize: '0.85rem',
93
- cursor: 'pointer',
94
- color: 'var(--ink)',
95
- fontFamily: 'inherit',
96
- };
97
47
  /** Full-page profile & preferences: avatar, theme, text size, friends, sign out, delete. */
98
48
  export function ProfilePage({ app, showThemeToggle = true }) {
99
49
  const { user, loading, signOut, deleteAccount } = useAuth(app);
@@ -101,10 +51,10 @@ export function ProfilePage({ app, showThemeToggle = true }) {
101
51
  const { size: textSize, setSize: setTextSize } = useTextSize();
102
52
  const [friendsOpen, setFriendsOpen] = useState(false);
103
53
  if (loading) {
104
- return (_jsx("div", { style: { padding: '2rem', textAlign: 'center', color: 'var(--muted)' }, children: "Loading..." }));
54
+ return _jsx("div", { className: "p-8 text-center text-muted", children: "Loading..." });
105
55
  }
106
56
  if (!user) {
107
- return (_jsxs("div", { style: { padding: '2rem', textAlign: 'center' }, children: [_jsx("p", { style: { color: 'var(--muted)', marginBottom: '1rem' }, children: "Sign in to view your profile." }), _jsx(SignInButton, { app: app })] }));
57
+ return (_jsxs("div", { className: "p-8 text-center", children: [_jsx("p", { className: "text-muted mb-4", children: "Sign in to view your profile." }), _jsx(SignInButton, { app: app })] }));
108
58
  }
109
59
  const handleDelete = async () => {
110
60
  if (!confirm('Delete your account? This permanently removes ALL your data across ALL apps. This cannot be undone.'))
@@ -123,87 +73,30 @@ export function ProfilePage({ app, showThemeToggle = true }) {
123
73
  { value: 'default', label: 'Default' },
124
74
  { value: 'lg', label: 'Large' },
125
75
  ];
126
- return (_jsxs("div", { style: { maxWidth: 480, margin: '0 auto', padding: '2rem 1rem' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '1rem', marginBottom: '2rem' }, children: [_jsx(Avatar, { user: user, size: 64 }), _jsxs("div", { children: [_jsx("div", { style: {
127
- fontSize: '1.25rem',
128
- fontWeight: 700,
129
- color: 'var(--ink-strong)',
130
- }, children: user.login }), _jsx("div", { style: { fontSize: '0.85rem', color: 'var(--muted)' }, children: "FreeAppStore account" })] })] }), _jsxs(ProfileSection, { title: "Appearance", children: [showThemeToggle && (_jsxs(_Fragment, { children: [_jsx(ProfileLabel, { children: "Theme" }), _jsx("div", { style: { display: 'flex', gap: '0.5rem', marginBottom: '1rem' }, children: themeOptions.map((opt) => (_jsx(ToggleButton, { active: preference === opt.value, onClick: () => setPreference(opt.value), children: opt.label }, opt.value))) })] })), _jsx(ProfileLabel, { children: "Text Size" }), _jsx("div", { style: { display: 'flex', gap: '0.5rem' }, children: textSizeOptions.map((opt) => (_jsx(ToggleButton, { active: textSize === opt.value, onClick: () => setTextSize(opt.value), children: opt.label }, opt.value))) })] }), _jsx(ProfileSection, { title: "Friends", children: _jsxs("button", { onClick: () => setFriendsOpen(true), style: {
131
- ...profileBtnStyle,
132
- display: 'flex',
133
- alignItems: 'center',
134
- justifyContent: 'space-between',
135
- }, children: ["Manage Friends ", _jsx(FriendRequestBadge, { app: app })] }) }), _jsx(ProfileSection, { title: "API Keys", children: _jsx("button", { onClick: () => app.keys.manage(), style: profileBtnStyle, children: "Manage API Keys" }) }), _jsx("button", { onClick: signOut, style: {
136
- ...profileBtnStyle,
137
- marginBottom: '1.5rem',
138
- }, children: "Sign out" }), _jsxs("div", { style: {
139
- border: '1px solid #fecaca',
140
- borderRadius: 'var(--radius, 0.75rem)',
141
- padding: '1.25rem',
142
- }, children: [_jsx("div", { style: {
143
- fontSize: '0.9rem',
144
- fontWeight: 700,
145
- color: 'var(--danger, #dc2626)',
146
- marginBottom: '0.5rem',
147
- }, children: "Danger zone" }), _jsx("p", { style: { fontSize: '0.85rem', color: 'var(--muted)', marginBottom: '0.75rem' }, children: "Permanently delete your account and all data across all apps." }), _jsx("button", { onClick: handleDelete, style: {
148
- padding: '0.5rem 1rem',
149
- borderRadius: 'var(--radius-sm, 0.5rem)',
150
- border: '1px solid var(--danger, #dc2626)',
151
- background: 'transparent',
152
- color: 'var(--danger, #dc2626)',
153
- fontSize: '0.85rem',
154
- fontWeight: 600,
155
- cursor: 'pointer',
156
- fontFamily: 'inherit',
157
- }, children: "Delete account" })] }), _jsx(Modal, { open: friendsOpen, onClose: () => setFriendsOpen(false), title: "Friends", maxWidth: 420, children: _jsx(FriendsList, { app: app }) })] }));
76
+ return (_jsxs("div", { className: "max-w-120 m-[0_auto] p-[2rem_1rem]", children: [_jsxs("div", { className: "flex items-center gap-4 mb-8", children: [_jsx(Avatar, { user: user, size: 64 }), _jsxs("div", { children: [_jsx("div", { className: "text-[1.25rem] font-bold text-ink-strong", children: user.login }), _jsx("div", { className: "text-[0.85rem] text-muted", children: "FreeAppStore account" })] })] }), _jsxs(ProfileSection, { title: "Appearance", children: [showThemeToggle && (_jsxs(_Fragment, { children: [_jsx(ProfileLabel, { children: "Theme" }), _jsx("div", { className: "flex gap-2 mb-4", children: themeOptions.map((opt) => (_jsx(ToggleButton, { active: preference === opt.value, onClick: () => setPreference(opt.value), children: opt.label }, opt.value))) })] })), _jsx(ProfileLabel, { children: "Text Size" }), _jsx("div", { className: "flex gap-2", children: textSizeOptions.map((opt) => (_jsx(ToggleButton, { active: textSize === opt.value, onClick: () => setTextSize(opt.value), children: opt.label }, opt.value))) })] }), _jsx(ProfileSection, { title: "Friends", children: _jsxs("button", { onClick: () => setFriendsOpen(true), className: "w-full p-3 rounded border border-line bg-panel text-ink text-[0.9rem] font-semibold cursor-pointer font-[inherit] flex items-center justify-between", children: ["Manage Friends ", _jsx(FriendRequestBadge, { app: app })] }) }), _jsx(ProfileSection, { title: "API Keys", children: _jsx("button", { onClick: () => app.keys.manage(), className: "w-full p-3 rounded border border-line bg-panel text-ink text-[0.9rem] font-semibold cursor-pointer font-[inherit]", children: "Manage API Keys" }) }), _jsx("button", { onClick: signOut, className: "w-full p-3 rounded border border-line bg-panel text-ink text-[0.9rem] font-semibold cursor-pointer font-[inherit] mb-6", children: "Sign out" }), _jsxs("div", { className: "border border-danger rounded p-5", children: [_jsx("div", { className: "text-[0.9rem] font-bold text-danger mb-2", children: "Danger zone" }), _jsx("p", { className: "text-[0.85rem] text-muted mb-3", children: "Permanently delete your account and all data across all apps." }), _jsx("button", { onClick: handleDelete, className: "p-[0.5rem_1rem] rounded-sm border border-danger bg-transparent text-danger text-[0.85rem] font-semibold cursor-pointer font-[inherit]", children: "Delete account" })] }), _jsx(Modal, { open: friendsOpen, onClose: () => setFriendsOpen(false), title: "Friends", maxWidth: 420, children: _jsx(FriendsList, { app: app }) })] }));
158
77
  }
159
78
  function ProfileSection({ title, children }) {
160
- return (_jsxs("div", { style: {
161
- background: 'var(--panel)',
162
- border: '1px solid var(--line)',
163
- borderRadius: 'var(--radius, 0.75rem)',
164
- padding: '1.25rem',
165
- marginBottom: '1rem',
166
- }, children: [_jsx("div", { style: {
167
- fontSize: '0.9rem',
168
- fontWeight: 700,
169
- marginBottom: '0.75rem',
170
- color: 'var(--ink)',
171
- }, children: title }), children] }));
79
+ return (_jsxs("div", { className: "bg-panel border border-line rounded p-5 mb-4", children: [_jsx("div", { className: "text-[0.9rem] font-bold mb-3 text-ink", children: title }), children] }));
172
80
  }
173
81
  function ProfileLabel({ children }) {
174
- return (_jsx("div", { style: {
175
- fontSize: '0.75rem',
176
- fontWeight: 600,
177
- color: 'var(--muted)',
178
- marginBottom: '0.35rem',
179
- }, children: children }));
82
+ return _jsx("div", { className: "text-[0.75rem] font-semibold text-muted mb-[0.35rem]", children: children });
180
83
  }
181
84
  function ToggleButton({ active, onClick, children, }) {
182
- return (_jsx("button", { onClick: onClick, style: {
183
- flex: 1,
184
- padding: '0.5rem',
185
- borderRadius: 'var(--radius-sm, 0.5rem)',
186
- border: active ? '2px solid var(--accent)' : '1px solid var(--line)',
187
- background: active ? 'var(--accent-soft)' : 'transparent',
188
- color: active ? 'var(--accent)' : 'var(--muted)',
189
- fontWeight: active ? 700 : 500,
190
- fontSize: '0.85rem',
191
- cursor: 'pointer',
192
- fontFamily: 'inherit',
193
- }, children: children }));
85
+ return (_jsx("button", { onClick: onClick, className: [
86
+ 'flex-1',
87
+ 'p-2',
88
+ 'rounded-sm',
89
+ active ? 'border-2 border-accent' : 'border border-line',
90
+ active ? 'bg-accent-soft' : 'bg-transparent',
91
+ active ? 'text-accent' : 'text-muted',
92
+ active ? 'font-bold' : 'font-medium',
93
+ 'text-[0.85rem]',
94
+ 'cursor-pointer',
95
+ 'font-[inherit]',
96
+ ]
97
+ .filter(Boolean)
98
+ .join(' '), children: children }));
194
99
  }
195
- const profileBtnStyle = {
196
- width: '100%',
197
- padding: '0.75rem',
198
- borderRadius: 'var(--radius, 0.75rem)',
199
- border: '1px solid var(--line)',
200
- background: 'var(--panel)',
201
- color: 'var(--ink)',
202
- fontSize: '0.9rem',
203
- fontWeight: 600,
204
- cursor: 'pointer',
205
- fontFamily: 'inherit',
206
- };
207
100
  function normalizeShellAppName(appName) {
208
101
  return appName === 'AppStore' ? 'FreeAppStore' : appName;
209
102
  }
@@ -219,14 +112,6 @@ export function Shell({ app, children, appName, nav, renderNav, onNavigate, rend
219
112
  const mainRef = useRef(null);
220
113
  const beforeNavigate = useRouteChangeEffects(currentPath, mainRef, onNavigate !== undefined);
221
114
  const displayAppName = normalizeShellAppName(appName);
222
- useInsertionEffect(() => {
223
- if (document.getElementById('fas-shell-css'))
224
- return;
225
- const style = document.createElement('style');
226
- style.id = 'fas-shell-css';
227
- style.textContent = SHELL_CSS;
228
- document.head.appendChild(style);
229
- }, []);
230
115
  // A nav item's `title` becomes the tab title on its route. A layout effect
231
116
  // runs before every passive effect, so a screen's own useDocumentTitle wins.
232
117
  const navItems = nav ?? [];
@@ -237,26 +122,10 @@ export function Shell({ app, children, appName, nav, renderNav, onNavigate, rend
237
122
  document.title = navTitle;
238
123
  }, [navTitle, currentPath]);
239
124
  if (loading) {
240
- return (_jsx("div", { style: {
241
- minHeight: '100dvh',
242
- display: 'flex',
243
- alignItems: 'center',
244
- justifyContent: 'center',
245
- }, children: _jsx("p", { style: { color: 'var(--muted)' }, children: "Loading..." }) }));
125
+ return (_jsx("div", { className: "min-h-[100dvh] flex items-center justify-center", children: _jsx("p", { className: "text-muted", children: "Loading..." }) }));
246
126
  }
247
127
  if (requireAuth && !user) {
248
- return (_jsx("div", { style: {
249
- minHeight: '100dvh',
250
- display: 'flex',
251
- alignItems: 'center',
252
- justifyContent: 'center',
253
- padding: '2rem',
254
- }, children: _jsxs("div", { style: { maxWidth: 400, textAlign: 'center' }, children: [_jsx("h1", { style: {
255
- fontSize: '1.5rem',
256
- fontWeight: 800,
257
- marginBottom: '0.5rem',
258
- color: 'var(--ink)',
259
- }, children: displayAppName || 'FreeAppStore' }), _jsx("p", { style: { color: 'var(--muted)', fontSize: '0.9rem', marginBottom: '1rem' }, children: "Sign in to continue." }), _jsx(SignInButton, { app: app }), _jsx("p", { style: { color: 'var(--muted)', fontSize: '0.75rem', marginTop: '0.75rem' }, children: "One account for all Free apps." })] }) }));
128
+ return (_jsx("div", { className: "min-h-[100dvh] flex items-center justify-center p-8", children: _jsxs("div", { className: "max-w-100 text-center", children: [_jsx("h1", { className: "text-[1.5rem] font-extrabold mb-2 text-ink", children: displayAppName || 'FreeAppStore' }), _jsx("p", { className: "text-muted text-[0.9rem] mb-4", children: "Sign in to continue." }), _jsx(SignInButton, { app: app }), _jsx("p", { className: "text-muted text-[0.75rem] mt-3", children: "One account for all Free apps." })] }) }));
260
129
  }
261
130
  // Client-side navigation goes through the shell so it knows the route changed.
262
131
  // Without onNavigate, items are plain links.
@@ -272,22 +141,7 @@ export function Shell({ app, children, appName, nav, renderNav, onNavigate, rend
272
141
  currentPath,
273
142
  onNavigate: navigate ?? ((href) => window.location.assign(href)),
274
143
  })) : navigate ? (_jsx(NavBar, { items: navItems, currentPath: currentPath, onNavigate: navigate })) : (_jsx(NavBar, { items: navItems }));
275
- const loadingNode = renderLoading ? (renderLoading()) : (_jsx("div", { className: "fas-shell-loading", children: _jsx(Spinner, { size: 28 }) }));
276
- return (_jsx(ToastProvider, { children: _jsxs("div", { style: { minHeight: '100dvh', display: 'flex', flexDirection: 'column' }, children: [_jsx(SkipLink, { mainRef: mainRef }), _jsxs("header", { style: {
277
- display: 'flex',
278
- alignItems: 'center',
279
- justifyContent: 'space-between',
280
- padding: '0.5rem 1rem',
281
- borderBottom: '1px solid var(--line)',
282
- background: 'var(--panel)',
283
- position: 'sticky',
284
- top: 0,
285
- zIndex: 50,
286
- }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.75rem' }, children: [_jsx("a", { href: "https://freeappstore.online", style: {
287
- fontWeight: 800,
288
- fontSize: '1rem',
289
- color: 'var(--accent)',
290
- textDecoration: 'none',
291
- }, children: "Free" }), displayAppName && displayAppName !== 'FreeAppStore' && (_jsx("span", { style: { fontSize: '0.85rem', fontWeight: 600, color: 'var(--muted)' }, children: displayAppName }))] }), navNode, _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [_jsx(TextSizeToggle, {}), showThemeToggle && !user && _jsx(ThemeToggle, {}), user ? (_jsx(ProfileMenu, { app: app, showThemeToggle: showThemeToggle })) : (_jsx(SignInButton, { app: app, label: "Sign in" }))] })] }), _jsx(OfflineBanner, {}), _jsx("main", { id: "main", ref: mainRef, tabIndex: -1, className: "fas-main", style: { flex: 1, display: 'flex', flexDirection: 'column' }, children: _jsx(ShellErrorBoundary, { app: app, renderError: renderError, resetKey: currentPath, children: _jsx(Suspense, { fallback: loadingNode, children: children }) }) }), _jsx(Footer, {})] }) }));
144
+ const loadingNode = renderLoading ? (renderLoading()) : (_jsx("div", { className: "fas-shell-loading flex flex-1 items-center justify-center px-4 py-12", children: _jsx(Spinner, { size: 28 }) }));
145
+ return (_jsx(ToastProvider, { children: _jsxs("div", { className: "min-h-[100dvh] flex flex-col", children: [_jsx(SkipLink, { mainRef: mainRef }), _jsxs("header", { className: "flex items-center justify-between p-[0.5rem_1rem] border-b border-line bg-panel sticky top-0 z-[50]", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("a", { href: "https://freeappstore.online", className: "font-extrabold text-[1rem] text-accent no-underline", children: "Free" }), displayAppName && displayAppName !== 'FreeAppStore' && (_jsx("span", { className: "text-[0.85rem] font-semibold text-muted", children: displayAppName }))] }), navNode, _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(TextSizeToggle, {}), showThemeToggle && !user && _jsx(ThemeToggle, {}), user ? (_jsx(ProfileMenu, { app: app, showThemeToggle: showThemeToggle })) : (_jsx(SignInButton, { app: app, label: "Sign in" }))] })] }), _jsx(OfflineBanner, {}), _jsx("main", { id: "main", ref: mainRef, tabIndex: -1, className: "fas-main flex-1 flex flex-col", children: _jsx(ShellErrorBoundary, { app: app, renderError: renderError, resetKey: currentPath, children: _jsx(Suspense, { fallback: loadingNode, children: children }) }) }), _jsx(Footer, {})] }) }));
292
146
  }
293
147
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.tsx"],"names":[],"mappings":"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"}
@@ -29,7 +29,6 @@ export interface NavBarProps {
29
29
  export declare function useCurrentPath(initial?: string): [string, (path: string) => void];
30
30
  /** The item to mark current: an exact match, else the longest prefix (`/notes` for `/notes/42`). */
31
31
  export declare function activeHref(items: NavItem[], path: string): string | null;
32
- export declare const NAVBAR_CSS = ".fas-nav{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0;margin:0 .5rem}\n.fas-nav__toggle{display:none;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0;border:1px solid var(--line);border-radius:var(--radius-sm,10px);background:transparent;color:var(--ink);font:inherit;cursor:pointer}\n.fas-nav__list{display:flex;align-items:center;gap:.25rem;margin:0;padding:0;list-style:none;overflow-x:auto}\n.fas-nav__link{display:inline-flex;align-items:center;gap:.4rem;min-height:44px;padding:0 .75rem;border-radius:var(--radius-sm,10px);color:var(--muted);font-size:.9rem;font-weight:600;text-decoration:none;white-space:nowrap}\n.fas-nav__link:hover{color:var(--ink);background:var(--line)}\n.fas-nav__link[aria-current=\"page\"]{color:var(--accent);background:var(--accent-soft,var(--line))}\n.fas-nav__toggle:focus-visible,.fas-nav__link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n@media (max-width:639px){.fas-nav{flex:0 0 auto;margin:0}.fas-nav__toggle{display:inline-flex}.fas-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:var(--radius,12px);box-shadow:0 8px 24px rgba(0,0,0,.12)}.fas-nav[data-open=\"true\"] .fas-nav__list{display:flex}}\n";
33
32
  /**
34
33
  * NavBar — the app's main navigation. Shell renders it in its topbar from the
35
34
  * `nav` prop; it also works on its own in a custom layout.
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../src/ui/navbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,+CAA+C;AAC/C,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAcjF;AAED,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AAID,eAAO,MAAM,UAAU,g5CAQtB,CAAC;AAYF;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,WAAW,sCAyFrE"}
1
+ {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../src/ui/navbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAsC,MAAM,OAAO,CAAC;AAE5F,+CAA+C;AAC/C,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAcjF;AAED,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,WAAW,sCAgGrE"}
package/dist/ui/navbar.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useId, useInsertionEffect, useRef, useState, } from 'react';
2
+ import { useEffect, useId, useRef, useState } from 'react';
3
3
  /** The browser's current path, following back/forward. `initial` wins when given. */
4
4
  export function useCurrentPath(initial) {
5
5
  const [path, setPath] = useState(() => initial ?? (typeof window === 'undefined' ? '/' : window.location.pathname));
@@ -24,27 +24,6 @@ export function activeHref(items, path) {
24
24
  }
25
25
  return best;
26
26
  }
27
- // Hover, focus and the small-screen collapse need real CSS, so it's injected
28
- // once like the SDK's keyframes. Tokens only, so it follows light/dark theme.
29
- export const NAVBAR_CSS = `.fas-nav{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0;margin:0 .5rem}
30
- .fas-nav__toggle{display:none;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0;border:1px solid var(--line);border-radius:var(--radius-sm,10px);background:transparent;color:var(--ink);font:inherit;cursor:pointer}
31
- .fas-nav__list{display:flex;align-items:center;gap:.25rem;margin:0;padding:0;list-style:none;overflow-x:auto}
32
- .fas-nav__link{display:inline-flex;align-items:center;gap:.4rem;min-height:44px;padding:0 .75rem;border-radius:var(--radius-sm,10px);color:var(--muted);font-size:.9rem;font-weight:600;text-decoration:none;white-space:nowrap}
33
- .fas-nav__link:hover{color:var(--ink);background:var(--line)}
34
- .fas-nav__link[aria-current="page"]{color:var(--accent);background:var(--accent-soft,var(--line))}
35
- .fas-nav__toggle:focus-visible,.fas-nav__link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
36
- @media (max-width:639px){.fas-nav{flex:0 0 auto;margin:0}.fas-nav__toggle{display:inline-flex}.fas-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:var(--radius,12px);box-shadow:0 8px 24px rgba(0,0,0,.12)}.fas-nav[data-open="true"] .fas-nav__list{display:flex}}
37
- `;
38
- function useNavbarStyles() {
39
- useInsertionEffect(() => {
40
- if (document.getElementById('fas-nav-css'))
41
- return;
42
- const style = document.createElement('style');
43
- style.id = 'fas-nav-css';
44
- style.textContent = NAVBAR_CSS;
45
- document.head.appendChild(style);
46
- }, []);
47
- }
48
27
  /**
49
28
  * NavBar — the app's main navigation. Shell renders it in its topbar from the
50
29
  * `nav` prop; it also works on its own in a custom layout.
@@ -55,7 +34,6 @@ function useNavbarStyles() {
55
34
  * Renders nothing when there are no items.
56
35
  */
57
36
  export function NavBar({ items, currentPath, onNavigate }) {
58
- useNavbarStyles();
59
37
  const [path, setPath] = useCurrentPath(currentPath);
60
38
  const [open, setOpen] = useState(false);
61
39
  const listId = useId();
@@ -102,6 +80,6 @@ export function NavBar({ items, currentPath, onNavigate }) {
102
80
  if (currentPath === undefined)
103
81
  setPath(href);
104
82
  };
105
- return (_jsxs("nav", { ref: navRef, "aria-label": "Main", className: "fas-nav", "data-open": open ? 'true' : 'false', children: [_jsx("button", { ref: toggleRef, type: "button", className: "fas-nav__toggle", "aria-expanded": open, "aria-controls": listId, "aria-label": "Menu", onClick: () => setOpen((o) => !o), children: _jsx("svg", { "aria-hidden": "true", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: _jsx("path", { d: open ? 'M6 6l12 12M18 6L6 18' : 'M4 7h16M4 12h16M4 17h16' }) }) }), _jsx("ul", { id: listId, className: "fas-nav__list", children: items.map((item) => (_jsx("li", { children: _jsxs("a", { href: item.href, "aria-current": item.href === current ? 'page' : undefined, className: "fas-nav__link", onClick: (e) => follow(e, item.href), children: [item.icon, item.label] }) }, item.href))) })] }));
83
+ return (_jsxs("nav", { ref: navRef, "aria-label": "Main", className: "fas-nav relative mx-0 flex min-w-0 flex-none items-center sm:mx-2 sm:flex-auto", "data-open": open ? 'true' : 'false', children: [_jsx("button", { ref: toggleRef, type: "button", className: "fas-nav__toggle inline-flex min-h-11 min-w-11 items-center justify-center rounded-sm border border-line bg-transparent p-0 text-ink cursor-pointer sm:hidden focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2", "aria-expanded": open, "aria-controls": listId, "aria-label": "Menu", onClick: () => setOpen((o) => !o), children: _jsx("svg", { "aria-hidden": "true", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: _jsx("path", { d: open ? 'M6 6l12 12M18 6L6 18' : 'M4 7h16M4 12h16M4 17h16' }) }) }), _jsx("ul", { id: listId, className: `fas-nav__list fixed right-0 top-14 z-60 m-0 h-[calc(100dvh-3.5rem)] w-72 max-w-[calc(100vw-1rem)] flex-col items-stretch gap-1 overflow-y-auto border-l border-line bg-popover p-3 text-ink shadow-lg motion-safe:transition-transform motion-safe:duration-200 sm:static sm:h-auto sm:w-auto sm:max-w-none sm:translate-x-0 sm:flex-row sm:items-center sm:overflow-x-auto sm:border-0 sm:bg-transparent sm:p-0 sm:shadow-none ${open ? 'flex translate-x-0 motion-safe:animate-sdk-drawer sm:animate-none' : 'hidden translate-x-full sm:flex'}`, children: items.map((item) => (_jsx("li", { children: _jsxs("a", { href: item.href, "aria-current": item.href === current ? 'page' : undefined, className: "fas-nav__link inline-flex min-h-11 items-center gap-[0.4rem] whitespace-nowrap rounded-sm px-3 text-[0.9rem] font-semibold text-muted no-underline hover:bg-line hover:text-ink aria-[current=page]:bg-accent-soft aria-[current=page]:text-accent focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2", onClick: (e) => follow(e, item.href), children: [item.icon, item.label] }) }, item.href))) })] }));
106
84
  }
107
85
  //# sourceMappingURL=navbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.js","sourceRoot":"","sources":["../../src/ui/navbar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navbar.js","sourceRoot":"","sources":["../../src/ui/navbar.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/ui/page.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,OAAO,CAAC;AAElD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAIvE;AAED,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,KAAK,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,eAAe,+BAc1E"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/ui/page.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,OAAO,CAAC;AAElD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAIvE;AAED,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,KAAK,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,eAAe,+BAoB1E"}
package/dist/ui/page.js CHANGED
@@ -21,6 +21,6 @@ export function useDocumentTitle(title) {
21
21
  * and screen-reader users land on the new page.
22
22
  */
23
23
  export function PageHeader({ title, description, actions }) {
24
- return (_jsxs("div", { className: "fas-page-header", children: [_jsxs("div", { children: [_jsx("h1", { className: "fas-page-header__title", tabIndex: -1, "data-fas-page-heading": "", children: title }), description && _jsx("p", { className: "fas-page-header__description", children: description })] }), actions && (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: actions }))] }));
24
+ return (_jsxs("div", { className: "fas-page-header mb-5 flex flex-wrap items-end justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h1", { className: "fas-page-header__title m-0 text-2xl font-bold leading-[1.2] text-ink focus:outline-none", tabIndex: -1, "data-fas-page-heading": "", children: title }), description && (_jsx("p", { className: "fas-page-header__description mb-0 mt-1 text-[0.9rem] text-muted", children: description }))] }), actions && _jsx("div", { className: "flex items-center gap-2", children: actions })] }));
25
25
  }
26
26
  //# sourceMappingURL=page.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ui/page.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;IACpC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAmB;IACzE,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,aAC9B,0BACE,aAAI,SAAS,EAAC,wBAAwB,EAAC,QAAQ,EAAE,CAAC,CAAC,2BAAwB,EAAE,YAC1E,KAAK,GACH,EACJ,WAAW,IAAI,YAAG,SAAS,EAAC,8BAA8B,YAAE,WAAW,GAAK,IACzE,EACL,OAAO,IAAI,CACV,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAG,OAAO,GAAO,CACtF,IACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ui/page.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;IACpC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAmB;IACzE,OAAO,CACL,eAAK,SAAS,EAAC,qEAAqE,aAClF,0BACE,aACE,SAAS,EAAC,yFAAyF,EACnG,QAAQ,EAAE,CAAC,CAAC,2BACU,EAAE,YAEvB,KAAK,GACH,EACJ,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,iEAAiE,YAC3E,WAAW,GACV,CACL,IACG,EACL,OAAO,IAAI,cAAK,SAAS,EAAC,yBAAyB,YAAE,OAAO,GAAO,IAChE,CACP,CAAC;AACJ,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { Component, type ErrorInfo, type ReactNode, type RefObject } from 'react';
2
2
  import type { FreeAppStore } from '../index.js';
3
- export declare const SHELL_CSS = ".fas-skip-link{position:fixed;top:.5rem;left:.5rem;z-index:1200;padding:.7rem 1rem;border:2px solid var(--accent);border-radius:var(--radius-sm,10px);background:var(--panel);color:var(--ink);font-weight:600;white-space:nowrap;text-decoration:none;transform:translateY(calc(-100% - 1rem))}\n.fas-skip-link:focus{transform:none;outline:2px solid var(--accent);outline-offset:2px}\n.fas-main:focus{outline:none}\n.fas-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.fas-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.fas-toast{display:flex;align-items:center;gap:.75rem;padding:.25rem .25rem .25rem 1rem;background:var(--ink);color:var(--panel);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.fas-toast[data-variant=\"success\"]{border-left-color:var(--success)}\n.fas-toast[data-variant=\"error\"]{border-left-color:var(--danger)}\n.fas-dismiss{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0;border:0;border-radius:var(--radius-sm,10px);background:transparent;color:inherit;font:inherit;font-size:1.1rem;line-height:1;cursor:pointer;opacity:.75}\n.fas-dismiss:hover{opacity:1}\n.fas-shell-loading{display:flex;flex:1;align-items:center;justify-content:center;padding:3rem 1rem}\n.fas-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.fas-shell-error h1{margin:0;font-size:1.25rem}\n.fas-shell-error p{margin:0;max-width:32rem;color:var(--muted);font-size:.9rem}\n.fas-shell-error__retry{min-height:44px;padding:0 1.25rem;border:0;border-radius:var(--radius-sm,10px);background:var(--accent);color:#fff;font:inherit;font-weight:600;cursor:pointer}\n.fas-page-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.75rem;margin:0 0 1.25rem}\n.fas-page-header__title{margin:0;color:var(--ink);font-size:1.5rem;font-weight:700;line-height:1.2}\n.fas-page-header__title:focus{outline:none}\n.fas-page-header__description{margin:.25rem 0 0;color:var(--muted);font-size:.9rem}\n.fas-dismiss:focus-visible,.fas-shell-error__retry:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n";
4
3
  export interface ShellErrorContext {
5
4
  error: Error;
6
5
  /** Clear the error and render the screen again. */
@@ -1 +1 @@
1
- {"version":3,"file":"shell-resilience.d.ts","sourceRoot":"","sources":["../../src/ui/shell-resilience.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,eAAO,MAAM,SAAS,omFAoBrB,CAAC;AAIF,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,mDAAmD;IACnD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,YAAY,CAAC;IAClB,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,iBAAiB,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACjE,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACpE,KAAK,EAAE,aAAa,CAAkD;IAE/E,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAIvE,MAAM,CAAC,wBAAwB,CAC7B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAIvB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IASjE,KAAK,QAAO,IAAI,CAAmC;IAE1C,MAAM,IAAI,SAAS;CAiB7B;AAID,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC;IAC1D,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAcD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAInC;AAuBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BA+BlE;AAID,+EAA+E;AAC/E,wBAAgB,SAAS,IAAI,OAAO,CAgBnC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,gCAoC5B;AAID,wGAAwG;AACxG,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CAAE,+BAgB/E;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACtC,OAAO,EAAE,OAAO,GACf,MAAM,IAAI,CA0CZ"}
1
+ {"version":3,"file":"shell-resilience.d.ts","sourceRoot":"","sources":["../../src/ui/shell-resilience.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,mDAAmD;IACnD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,YAAY,CAAC;IAClB,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,iBAAiB,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;IACjE,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACpE,KAAK,EAAE,aAAa,CAAkD;IAE/E,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAIvE,MAAM,CAAC,wBAAwB,CAC7B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAIvB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IASjE,KAAK,QAAO,IAAI,CAAmC;IAE1C,MAAM,IAAI,SAAS;CAwB7B;AAID,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC;IAC1D,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAcD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAInC;AA0BD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAmClE;AAID,+EAA+E;AAC/E,wBAAgB,SAAS,IAAI,OAAO,CAgBnC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,gCAoC5B;AAID,wGAAwG;AACxG,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CAAE,+BAgB/E;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACtC,OAAO,EAAE,OAAO,GACf,MAAM,IAAI,CA0CZ"}
@@ -1,34 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Component, createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
3
- // Shell's resilience and feedback layer (#89): error boundary, toasts, offline
4
- // banner, skip link, and scroll/focus on client-side route changes.
5
- // Skip link, offline banner, toasts, error/loading fallbacks and PageHeader.
6
- // Tokens only, injected once by Shell like the navbar's stylesheet.
7
- //
8
- // The skip link hides by sitting just above the viewport (fixed, so it never
9
- // adds document scroll) and slides in on focus. Not the 1px overflow:hidden
10
- // "sr-only" box: `fas screencheck` reports that as content clipping (#149).
11
- export const SHELL_CSS = `.fas-skip-link{position:fixed;top:.5rem;left:.5rem;z-index:1200;padding:.7rem 1rem;border:2px solid var(--accent);border-radius:var(--radius-sm,10px);background:var(--panel);color:var(--ink);font-weight:600;white-space:nowrap;text-decoration:none;transform:translateY(calc(-100% - 1rem))}
12
- .fas-skip-link:focus{transform:none;outline:2px solid var(--accent);outline-offset:2px}
13
- .fas-main:focus{outline:none}
14
- .fas-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}
15
- .fas-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}
16
- .fas-toast{display:flex;align-items:center;gap:.75rem;padding:.25rem .25rem .25rem 1rem;background:var(--ink);color:var(--panel);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}
17
- .fas-toast[data-variant="success"]{border-left-color:var(--success)}
18
- .fas-toast[data-variant="error"]{border-left-color:var(--danger)}
19
- .fas-dismiss{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0;border:0;border-radius:var(--radius-sm,10px);background:transparent;color:inherit;font:inherit;font-size:1.1rem;line-height:1;cursor:pointer;opacity:.75}
20
- .fas-dismiss:hover{opacity:1}
21
- .fas-shell-loading{display:flex;flex:1;align-items:center;justify-content:center;padding:3rem 1rem}
22
- .fas-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)}
23
- .fas-shell-error h1{margin:0;font-size:1.25rem}
24
- .fas-shell-error p{margin:0;max-width:32rem;color:var(--muted);font-size:.9rem}
25
- .fas-shell-error__retry{min-height:44px;padding:0 1.25rem;border:0;border-radius:var(--radius-sm,10px);background:var(--accent);color:#fff;font:inherit;font-weight:600;cursor:pointer}
26
- .fas-page-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.75rem;margin:0 0 1.25rem}
27
- .fas-page-header__title{margin:0;color:var(--ink);font-size:1.5rem;font-weight:700;line-height:1.2}
28
- .fas-page-header__title:focus{outline:none}
29
- .fas-page-header__description{margin:.25rem 0 0;color:var(--muted);font-size:.9rem}
30
- .fas-dismiss:focus-visible,.fas-shell-error__retry:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
31
- `;
32
3
  /**
33
4
  * Catches a render error in the app's content so one broken screen shows a
34
5
  * fallback instead of a white screen, and records it through `app.log`: an
@@ -58,7 +29,7 @@ export class ShellErrorBoundary extends Component {
58
29
  return this.props.children;
59
30
  if (this.props.renderError)
60
31
  return this.props.renderError({ error, reset: this.reset });
61
- return (_jsxs("div", { role: "alert", className: "fas-shell-error", children: [_jsx("h1", { children: "Something went wrong" }), _jsx("p", { children: "This screen hit an error and could not be shown. It has been reported. Try again, or use the navigation to go elsewhere." }), _jsx("button", { type: "button", className: "fas-shell-error__retry", onClick: this.reset, children: "Try again" })] }));
32
+ return (_jsxs("div", { role: "alert", className: "fas-shell-error flex flex-1 flex-col items-center justify-center gap-3 px-4 py-12 text-center text-ink [&_h1]:m-0 [&_h1]:text-xl [&_p]:m-0 [&_p]:max-w-lg [&_p]:text-[0.9rem] [&_p]:text-muted", children: [_jsx("h1", { children: "Something went wrong" }), _jsx("p", { children: "This screen hit an error and could not be shown. It has been reported. Try again, or use the navigation to go elsewhere." }), _jsx("button", { type: "button", className: "fas-shell-error__retry min-h-11 cursor-pointer rounded-sm border-0 bg-accent px-5 font-semibold text-white focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2", onClick: this.reset, children: "Try again" })] }));
62
33
  }
63
34
  }
64
35
  /** At most this many messages at once; the oldest goes first. */
@@ -86,7 +57,7 @@ function ToastItem({ toast, onDismiss }) {
86
57
  const timer = setTimeout(() => onDismiss(toast.id), toast.duration);
87
58
  return () => clearTimeout(timer);
88
59
  }, [toast.id, toast.duration, onDismiss]);
89
- return (_jsxs("div", { className: "fas-toast", "data-variant": toast.variant, children: [_jsx("span", { children: toast.message }), _jsx("button", { type: "button", className: "fas-dismiss", "aria-label": "Dismiss", onClick: () => onDismiss(toast.id), children: "\u00D7" })] }));
60
+ return (_jsxs("div", { className: "fas-toast pointer-events-auto flex items-center gap-3 rounded border-l-[3px] border-accent bg-popover py-1 pl-4 pr-1 text-sm text-ink shadow-lg data-[variant=success]:border-success data-[variant=error]:border-danger", "data-variant": toast.variant, children: [_jsx("span", { children: toast.message }), _jsx("button", { type: "button", className: "fas-dismiss inline-flex min-h-11 min-w-11 cursor-pointer items-center justify-center rounded-sm border-0 bg-transparent p-0 text-[1.1rem] leading-none text-inherit opacity-75 hover:opacity-100 focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2", "aria-label": "Dismiss", onClick: () => onDismiss(toast.id), children: "\u00D7" })] }));
90
61
  }
91
62
  /**
92
63
  * The shell's toast queue. The region is always rendered, so it's already in
@@ -109,7 +80,7 @@ export function ToastProvider({ children }) {
109
80
  return id;
110
81
  }, []);
111
82
  const api = useMemo(() => ({ show, dismiss }), [show, dismiss]);
112
- return (_jsxs(ToastContext.Provider, { value: api, children: [children, _jsx("div", { role: "status", "aria-live": "polite", className: "fas-toast-region", children: toasts.map((toast) => (_jsx(ToastItem, { toast: toast, onDismiss: dismiss }, toast.id))) })] }));
83
+ return (_jsxs(ToastContext.Provider, { value: api, children: [children, _jsx("div", { role: "status", "aria-live": "polite", className: "fas-toast-region pointer-events-none fixed bottom-5 left-1/2 z-[1100] flex max-w-[calc(100vw-2rem)] -translate-x-1/2 flex-col items-center gap-2", children: toasts.map((toast) => (_jsx(ToastItem, { toast: toast, onDismiss: dismiss }, toast.id))) })] }));
113
84
  }
114
85
  // ── Offline ─────────────────────────────────────────────────────
115
86
  /** `navigator.onLine`, kept current by the browser's online/offline events. */
@@ -154,14 +125,14 @@ export function OfflineBanner() {
154
125
  window.removeEventListener('offline', down);
155
126
  };
156
127
  }, []);
157
- return (_jsx("div", { role: "status", "aria-live": "polite", children: !online && !dismissed && (_jsxs("div", { className: "fas-offline", children: [_jsx("span", { children: "You're offline. Changes can't be saved until the connection is back." }), _jsx("button", { type: "button", className: "fas-dismiss", "aria-label": "Dismiss offline notice", onClick: () => setState((state) => ({ ...state, dismissed: true })), children: "\u00D7" })] })) }));
128
+ return (_jsx("div", { role: "status", "aria-live": "polite", children: !online && !dismissed && (_jsxs("div", { className: "fas-offline flex items-center justify-between gap-3 border-b border-l-[3px] border-line border-l-warning bg-panel py-1 pl-4 pr-2 text-sm text-ink", children: [_jsx("span", { children: "You're offline. Changes can't be saved until the connection is back." }), _jsx("button", { type: "button", className: "fas-dismiss inline-flex min-h-11 min-w-11 cursor-pointer items-center justify-center rounded-sm border-0 bg-transparent p-0 text-[1.1rem] leading-none text-inherit opacity-75 hover:opacity-100 focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2", "aria-label": "Dismiss offline notice", onClick: () => setState((state) => ({ ...state, dismissed: true })), children: "\u00D7" })] })) }));
158
129
  }
159
130
  // ── Skip link ───────────────────────────────────────────────────
160
131
  /** The first focusable element: hidden until focused, moves focus to the shell's `<main id="main">`. */
161
132
  export function SkipLink({ mainRef }) {
162
133
  return (
163
134
  // biome-ignore lint/a11y/useValidAnchor: a real link to #main (works without JS); the click handler only avoids a hash change.
164
- _jsx("a", { href: "#main", className: "fas-skip-link", onClick: (e) => {
135
+ _jsx("a", { href: "#main", className: "fas-skip-link fixed left-2 top-2 z-[1200] -translate-y-[calc(100%+1rem)] whitespace-nowrap rounded-sm border-2 border-accent bg-popover px-4 py-[0.7rem] font-semibold text-ink no-underline focus:translate-y-0 focus:outline-2 focus:outline-accent focus:outline-offset-2", onClick: (e) => {
165
136
  // Focus directly rather than following the fragment: a hash change is a
166
137
  // history navigation, which a router would see as a route change.
167
138
  e.preventDefault();