@molecule/app-ui-react 1.0.2 → 1.2.0
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 +521 -1
- package/dist/components/ConfirmButton.d.ts +71 -0
- package/dist/components/ConfirmButton.d.ts.map +1 -0
- package/dist/components/ConfirmButton.js +88 -0
- package/dist/components/ConfirmButton.js.map +1 -0
- package/dist/components/ConfirmDialog.d.ts +71 -0
- package/dist/components/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/ConfirmDialog.js +20 -0
- package/dist/components/ConfirmDialog.js.map +1 -0
- package/dist/components/Icon.d.ts.map +1 -1
- package/dist/components/Icon.js +12 -1
- package/dist/components/Icon.js.map +1 -1
- package/dist/components/LoadErrorBanner.d.ts +71 -0
- package/dist/components/LoadErrorBanner.d.ts.map +1 -0
- package/dist/components/LoadErrorBanner.js +31 -0
- package/dist/components/LoadErrorBanner.js.map +1 -0
- package/dist/components/PromptDialog.d.ts +91 -0
- package/dist/components/PromptDialog.d.ts.map +1 -0
- package/dist/components/PromptDialog.js +90 -0
- package/dist/components/PromptDialog.js.map +1 -0
- package/dist/components/ResponsiveAppShell.d.ts +327 -0
- package/dist/components/ResponsiveAppShell.d.ts.map +1 -0
- package/dist/components/ResponsiveAppShell.js +470 -0
- package/dist/components/ResponsiveAppShell.js.map +1 -0
- package/dist/components/UserMenu.d.ts.map +1 -1
- package/dist/components/UserMenu.js +5 -1
- package/dist/components/UserMenu.js.map +1 -1
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +5 -0
- package/dist/components/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResponsiveAppShell — the shared responsive app shell: a top bar, a desktop
|
|
3
|
+
* sidebar (≥768px) and a mobile nav drawer (<768px) around one content region.
|
|
4
|
+
*
|
|
5
|
+
* Roughly 89 flagship apps hand-roll this shell in ~15 drifting variants
|
|
6
|
+
* (inline-style panels, `max-width: 768px` fenceposts, CSS-hidden duplicate
|
|
7
|
+
* shells, hydration-spinner gates). This family is the fleet standard; it
|
|
8
|
+
* follows the QA-hardened shape the best templates converged on
|
|
9
|
+
* (`time-tracking`'s `useIsDesktop`, `blog`'s drawer, `weather-dashboard`'s
|
|
10
|
+
* one-shell-per-breakpoint doctrine).
|
|
11
|
+
*
|
|
12
|
+
* Compose it:
|
|
13
|
+
*
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { ResponsiveAppShell } from '@molecule/app-ui-react'
|
|
16
|
+
* import { NavLink, Outlet } from 'react-router'
|
|
17
|
+
*
|
|
18
|
+
* const nav = (
|
|
19
|
+
* <>
|
|
20
|
+
* <NavLink to="/dashboard">Dashboard</NavLink>
|
|
21
|
+
* <NavLink to="/projects">Projects</NavLink>
|
|
22
|
+
* <NavLink to="/reports">Reports</NavLink>
|
|
23
|
+
* </>
|
|
24
|
+
* )
|
|
25
|
+
*
|
|
26
|
+
* export function Shell() {
|
|
27
|
+
* return (
|
|
28
|
+
* <ResponsiveAppShell>
|
|
29
|
+
* <ResponsiveAppShell.TopBar
|
|
30
|
+
* brand={<NavLink to="/dashboard">Timetrack</NavLink>}
|
|
31
|
+
* actions={<UserMenu />}
|
|
32
|
+
* />
|
|
33
|
+
* <ResponsiveAppShell.Sidebar>{nav}</ResponsiveAppShell.Sidebar>
|
|
34
|
+
* <ResponsiveAppShell.Drawer>{nav}</ResponsiveAppShell.Drawer>
|
|
35
|
+
* <ResponsiveAppShell.Content>
|
|
36
|
+
* <Outlet />
|
|
37
|
+
* </ResponsiveAppShell.Content>
|
|
38
|
+
* </ResponsiveAppShell>
|
|
39
|
+
* )
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @remarks
|
|
44
|
+
* - **Breakpoint: 768px** — the fleet-wide `md` breakpoint. Exactly ONE shell
|
|
45
|
+
* is MOUNTED per breakpoint: `Sidebar` renders only ≥768px, `Drawer` (and
|
|
46
|
+
* the menu trigger) only below. This is deliberate — rendering both and
|
|
47
|
+
* hiding one with CSS (`hidden md:block` style) leaves duplicate `<main>`/
|
|
48
|
+
* `<nav>` landmarks in the accessibility tree, double-mounts route content
|
|
49
|
+
* (double fetches, duplicate text matches for e2e locators). CSS-only
|
|
50
|
+
* responsive pairs remain available for NON-duplicating surface swaps via
|
|
51
|
+
* `hiddenBelow()` / `hiddenFrom()` on the UIClassMap. The `useIsDesktop`
|
|
52
|
+
* hook is exported for apps that need the same signal elsewhere: it reads
|
|
53
|
+
* `matchMedia` synchronously on first client render (no mounted-then-swap
|
|
54
|
+
* flicker in this CSR-only package) and subscribes to `change` events; the
|
|
55
|
+
* initializer is guarded (`typeof window`/`matchMedia`) so SSR and
|
|
56
|
+
* non-browser harnesses render the mobile shell instead of crashing.
|
|
57
|
+
* - **a11y contract.** `TopBar` renders the `<header>` landmark and its menu
|
|
58
|
+
* trigger carries `aria-label` + `aria-expanded` + `aria-controls` (the
|
|
59
|
+
* panel id comes from `useId()`). `Sidebar` renders `<aside>` with a
|
|
60
|
+
* `<nav aria-label>` landmark around its children. `Drawer` implements the
|
|
61
|
+
* WAI-ARIA APG dialog pattern on mobile: `role="dialog"` + `aria-modal`
|
|
62
|
+
* panel, focus moves into the panel on open and returns to the trigger on
|
|
63
|
+
* close, Tab/Shift+Tab are trapped inside, Escape and a backdrop click
|
|
64
|
+
* close, and body scroll is locked (reference-counted, so a `<Modal>`
|
|
65
|
+
* confirm stacked above the drawer never unlocks early). `Content` renders
|
|
66
|
+
* the `<main>` landmark. Marking the CURRENT nav item is the CONSUMER's job
|
|
67
|
+
* — pass `aria-current="page"` from your nav children (the shell renders
|
|
68
|
+
* them pass-through).
|
|
69
|
+
* - **Behavior.** The drawer auto-closes on SPA navigation (react-router
|
|
70
|
+
* location change) so it never sticks over the next page, and when the
|
|
71
|
+
* viewport crosses to desktop while it is open. Apps need an
|
|
72
|
+
* `I18nProvider` (all visible labels go through `t(key, {}, {
|
|
73
|
+
* defaultValue })`) and a react-router context; without the router the
|
|
74
|
+
* shell still renders — it just cannot auto-close on navigation.
|
|
75
|
+
* - **Locators.** Every fixed element carries a `data-mol-id` default,
|
|
76
|
+
* overridable per sub-component: `shell-topbar`, `shell-drawer-open`
|
|
77
|
+
* (trigger), `shell-sidebar`, `shell-drawer` (panel), `shell-drawer-close`,
|
|
78
|
+
* `shell-content`, and `shell-root` on the root `<div>`.
|
|
79
|
+
* - **ClassMap gaps routed around (Rule 5 inline-style exceptions, each
|
|
80
|
+
* commented at the call site).** The UIClassMap `drawer` token is a
|
|
81
|
+
* RIGHT-anchored settings-panel shape (`!right-0 … !max-w-sm`) and cannot
|
|
82
|
+
* serve a left nav drawer; there is no standalone `overflowY: auto`,
|
|
83
|
+
* `z-index`, or `left: 0` token. The shell therefore applies small
|
|
84
|
+
* documented inline styles for the drawer/sidebar geometry (pixel width à
|
|
85
|
+
* la `@molecule/app-sidebar-layout-react`, `max-width: 85vw`,
|
|
86
|
+
* `overflow-y: auto`, stacking `zIndex`) instead of widening UIClassMap —
|
|
87
|
+
* a `navDrawer()`-style token belongs in `@molecule/app-ui` + the ClassMap
|
|
88
|
+
* bond, both outside this package.
|
|
89
|
+
* - **Siblings.** `@molecule/app-sidebar-layout-react` `SidebarLayout` is the
|
|
90
|
+
* router-coupled DESKTOP-only sidebar (no mobile collapse);
|
|
91
|
+
* `@molecule/app-shell-layout-react` `AppShellLayout` is the marketing
|
|
92
|
+
* header/footer frame. THIS family is the responsive authenticated shell.
|
|
93
|
+
* Do not nest `SidebarLayout` inside it — pick one shell per app.
|
|
94
|
+
*
|
|
95
|
+
* @module
|
|
96
|
+
*/
|
|
97
|
+
import { type JSX, type ReactNode } from 'react';
|
|
98
|
+
/**
|
|
99
|
+
* Whether the viewport is at least 768px wide (the fleet's `md` breakpoint).
|
|
100
|
+
*
|
|
101
|
+
* Reads `window.matchMedia` synchronously in the state initializer, so the
|
|
102
|
+
* FIRST client render is already correct — no mobile-then-desktop swap frame
|
|
103
|
+
* (this is time-tracking's QA-hardened version; the naive
|
|
104
|
+
* "state starts false, sync in an effect" variant mounts the wrong shell for
|
|
105
|
+
* one frame and double-fetches route data on desktop). Subscribes to
|
|
106
|
+
* `change` events afterwards. Guarded for non-browser environments
|
|
107
|
+
* (SSR/node): returns `false` (the mobile shell) when no `window.matchMedia`
|
|
108
|
+
* exists.
|
|
109
|
+
*
|
|
110
|
+
* @param query - Override the media query. Defaults to `(min-width: 768px)`.
|
|
111
|
+
* @returns Whether the desktop shell should mount.
|
|
112
|
+
*/
|
|
113
|
+
export declare function useIsDesktop(query?: string): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Semantic sidebar width — the same stack-agnostic presets
|
|
116
|
+
* `@molecule/app-sidebar-layout-react` uses, so both shells render the same
|
|
117
|
+
* fleet geometry: `sm` → 208px, `md` → 240px (default), `lg` → 256px. A raw
|
|
118
|
+
* `number` is an exact pixel width. Applied via inline style (a specific
|
|
119
|
+
* pixel width is the documented "value a swappable ClassMap cannot express
|
|
120
|
+
* as a token" case).
|
|
121
|
+
*/
|
|
122
|
+
export type ShellSidebarWidth = 'sm' | 'md' | 'lg' | number;
|
|
123
|
+
/**
|
|
124
|
+
* Props for the {@link ResponsiveAppShell} root.
|
|
125
|
+
*/
|
|
126
|
+
export interface ResponsiveAppShellProps {
|
|
127
|
+
/**
|
|
128
|
+
* The shell sub-components — `<ResponsiveAppShell.TopBar />`,
|
|
129
|
+
* `<ResponsiveAppShell.Sidebar />`, `<ResponsiveAppShell.Drawer />` and
|
|
130
|
+
* `<ResponsiveAppShell.Content />`.
|
|
131
|
+
*/
|
|
132
|
+
children: ReactNode;
|
|
133
|
+
/**
|
|
134
|
+
* Sidebar (and drawer) width: `'sm'` (208px), `'md'` (240px, default),
|
|
135
|
+
* `'lg'` (256px) or an exact pixel number.
|
|
136
|
+
*/
|
|
137
|
+
sidebarWidth?: ShellSidebarWidth;
|
|
138
|
+
/** Extra classes on the root flex-row container. */
|
|
139
|
+
className?: string;
|
|
140
|
+
/**
|
|
141
|
+
* `data-mol-id` for the root container. Defaults to `'shell-root'`.
|
|
142
|
+
*/
|
|
143
|
+
dataMolId?: string;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Root of the responsive app shell. Owns the breakpoint signal and the
|
|
147
|
+
* drawer open state, closes the drawer on SPA navigation and on
|
|
148
|
+
* desktop-crossing resizes, and provides both to the sub-components via
|
|
149
|
+
* context.
|
|
150
|
+
*
|
|
151
|
+
* Render the four sub-components inside it — see the module example for the
|
|
152
|
+
* canonical composition.
|
|
153
|
+
*
|
|
154
|
+
* @param props - The shell sub-components, sidebar width, and className.
|
|
155
|
+
* @returns The flex-row shell root.
|
|
156
|
+
*/
|
|
157
|
+
declare function ResponsiveAppShellBase({ children, sidebarWidth, className, dataMolId, }: ResponsiveAppShellProps): JSX.Element;
|
|
158
|
+
/**
|
|
159
|
+
* Props for the {@link ResponsiveAppShellTopBar} sub-component.
|
|
160
|
+
*/
|
|
161
|
+
export interface ResponsiveAppShellTopBarProps {
|
|
162
|
+
/**
|
|
163
|
+
* Brand/title node, rendered after the menu trigger — typically a
|
|
164
|
+
* `<Link to="/…">` with the app name or logo. The shell wraps it in a
|
|
165
|
+
* flex row; style the node itself.
|
|
166
|
+
*/
|
|
167
|
+
brand?: ReactNode;
|
|
168
|
+
/** Trailing actions — user menu, theme toggle, search, etc. */
|
|
169
|
+
actions?: ReactNode;
|
|
170
|
+
/**
|
|
171
|
+
* Render the top bar only below the breakpoint (mount-conditioned, not
|
|
172
|
+
* CSS-hidden — no dead DOM on desktop). For apps whose desktop shell has
|
|
173
|
+
* no top bar (e.g. the sidebar carries everything). Default: `false`
|
|
174
|
+
* (top bar on every breakpoint).
|
|
175
|
+
*/
|
|
176
|
+
mobileOnly?: boolean;
|
|
177
|
+
/** Extra classes on the `<header>`. */
|
|
178
|
+
className?: string;
|
|
179
|
+
/** `data-mol-id` override. Default: `'shell-topbar'`. */
|
|
180
|
+
dataMolId?: string;
|
|
181
|
+
/** `data-testid` override. */
|
|
182
|
+
testId?: string;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The shell's `<header>` landmark: menu trigger (mobile, when a Drawer is
|
|
186
|
+
* composed), brand, and trailing actions.
|
|
187
|
+
*
|
|
188
|
+
* Sticks to the top of the viewport by default. The menu trigger renders
|
|
189
|
+
* only while a `ResponsiveAppShell.Drawer` is part of the composition AND
|
|
190
|
+
* the viewport is below the breakpoint.
|
|
191
|
+
*
|
|
192
|
+
* @param props - Brand/actions slots, `mobileOnly`, and class/id overrides.
|
|
193
|
+
* @returns The header landmark, or `null` when `mobileOnly` is set on desktop.
|
|
194
|
+
*/
|
|
195
|
+
export declare function ResponsiveAppShellTopBar({ brand, actions, mobileOnly, className, dataMolId, testId, }: ResponsiveAppShellTopBarProps): JSX.Element | null;
|
|
196
|
+
/**
|
|
197
|
+
* Props for the {@link ResponsiveAppShellSidebar} sub-component.
|
|
198
|
+
*/
|
|
199
|
+
export interface ResponsiveAppShellSidebarProps {
|
|
200
|
+
/**
|
|
201
|
+
* Nav content — the links (they land inside the sidebar's `<nav>` landmark;
|
|
202
|
+
* pass `aria-current="page"` from the active one yourself). Typically the
|
|
203
|
+
* SAME element variable the Drawer receives, so only the mounted
|
|
204
|
+
* breakpoint's copy ever instantiates.
|
|
205
|
+
*/
|
|
206
|
+
children: ReactNode;
|
|
207
|
+
/**
|
|
208
|
+
* Accessible name for the sidebar's `<nav>` landmark. Defaults to the
|
|
209
|
+
* `appShell.primaryNav` translation (English fallback `"Primary
|
|
210
|
+
* navigation"`).
|
|
211
|
+
*/
|
|
212
|
+
navLabel?: string;
|
|
213
|
+
/**
|
|
214
|
+
* Below-nav content (user card, quick action) — rendered after the `<nav>`
|
|
215
|
+
* in a bordered footer row, so it does not sit inside the nav landmark.
|
|
216
|
+
*/
|
|
217
|
+
footer?: ReactNode;
|
|
218
|
+
/** Extra classes on the `<aside>`. */
|
|
219
|
+
className?: string;
|
|
220
|
+
/** `data-mol-id` override. Default: `'shell-sidebar'`. */
|
|
221
|
+
dataMolId?: string;
|
|
222
|
+
/** `data-testid` override. */
|
|
223
|
+
testId?: string;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* The desktop sidebar (`<aside>` + `<nav>` landmarks). Renders NOTHING below
|
|
227
|
+
* 768px — the {@link ResponsiveAppShellDrawer} carries the nav there.
|
|
228
|
+
*
|
|
229
|
+
* Full viewport height, sticky at the top edge, scrolls internally when its
|
|
230
|
+
* content outgrows the viewport.
|
|
231
|
+
*
|
|
232
|
+
* @param props - Nav children, nav label, footer slot, class/id overrides.
|
|
233
|
+
* @returns The sidebar landmarks, or `null` below the breakpoint.
|
|
234
|
+
*/
|
|
235
|
+
export declare function ResponsiveAppShellSidebar({ children, navLabel, footer, className, dataMolId, testId, }: ResponsiveAppShellSidebarProps): JSX.Element | null;
|
|
236
|
+
/**
|
|
237
|
+
* Props for the {@link ResponsiveAppShellDrawer} sub-component.
|
|
238
|
+
*/
|
|
239
|
+
export interface ResponsiveAppShellDrawerProps {
|
|
240
|
+
/**
|
|
241
|
+
* Nav content — the links, same as (or adapted from) the Sidebar's. Only
|
|
242
|
+
* mounted while the drawer is open on a below-breakpoint viewport.
|
|
243
|
+
*/
|
|
244
|
+
children: ReactNode;
|
|
245
|
+
/**
|
|
246
|
+
* Header row content (typically the brand), rendered next to the close
|
|
247
|
+
* button.
|
|
248
|
+
*/
|
|
249
|
+
header?: ReactNode;
|
|
250
|
+
/**
|
|
251
|
+
* Accessible name for the dialog and its `<nav>` landmark. Defaults to the
|
|
252
|
+
* `appShell.primaryNav` translation (English fallback `"Primary
|
|
253
|
+
* navigation"`).
|
|
254
|
+
*/
|
|
255
|
+
navLabel?: string;
|
|
256
|
+
/** Below-nav content (user card, sign-out), after the `<nav>`. */
|
|
257
|
+
footer?: ReactNode;
|
|
258
|
+
/** Whether the panel shows a close (X) button. Default: `true`. */
|
|
259
|
+
showCloseButton?: boolean;
|
|
260
|
+
/** Extra classes on the dialog panel. */
|
|
261
|
+
className?: string;
|
|
262
|
+
/** `data-mol-id` override for the panel. Default: `'shell-drawer'`. */
|
|
263
|
+
dataMolId?: string;
|
|
264
|
+
/** `data-mol-id` override for the close button. Default: `'shell-drawer-close'`. */
|
|
265
|
+
closeDataMolId?: string;
|
|
266
|
+
/** `data-testid` override for the panel. */
|
|
267
|
+
testId?: string;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* The mobile nav drawer (<768px): a left-anchored dialog panel over a
|
|
271
|
+
* backdrop, opened by the menu trigger the TopBar renders.
|
|
272
|
+
*
|
|
273
|
+
* Implements the WAI-ARIA APG dialog pattern — focus moves into the panel on
|
|
274
|
+
* open and returns to the previously focused element (the trigger) on close,
|
|
275
|
+
* Tab is trapped inside, Escape and backdrop clicks close, body scroll locks
|
|
276
|
+
* (reference-counted with any stacked `<Modal>`), and the shell closes it on
|
|
277
|
+
* SPA navigation. Renders nothing on desktop or while closed.
|
|
278
|
+
*
|
|
279
|
+
* @param props - Nav children, header/nav-label/footer slots, close-button
|
|
280
|
+
* and class/id overrides.
|
|
281
|
+
* @returns The drawer portal while open on mobile, otherwise `null`.
|
|
282
|
+
*/
|
|
283
|
+
export declare function ResponsiveAppShellDrawer({ children, header, navLabel, footer, showCloseButton, className, dataMolId, closeDataMolId, testId, }: ResponsiveAppShellDrawerProps): JSX.Element | null;
|
|
284
|
+
/**
|
|
285
|
+
* Props for the {@link ResponsiveAppShellContent} sub-component.
|
|
286
|
+
*/
|
|
287
|
+
export interface ResponsiveAppShellContentProps {
|
|
288
|
+
/** The routed page content — typically an `<Outlet />`. */
|
|
289
|
+
children: ReactNode;
|
|
290
|
+
/** Extra classes on the `<main>`. */
|
|
291
|
+
className?: string;
|
|
292
|
+
/** Inline styles on the `<main>` (rarely needed — layout is owned). */
|
|
293
|
+
style?: React.CSSProperties;
|
|
294
|
+
/** `data-mol-id` override. Default: `'shell-content'`. */
|
|
295
|
+
dataMolId?: string;
|
|
296
|
+
/** `data-testid` override. */
|
|
297
|
+
testId?: string;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* The shell's `<main>` landmark. Grows to fill the row and may shrink below
|
|
301
|
+
* its content width, so page-level `overflow-x` strips scroll inside the
|
|
302
|
+
* page instead of widening the whole shell.
|
|
303
|
+
*
|
|
304
|
+
* @param props - The page content and class/id overrides.
|
|
305
|
+
* @returns The main landmark.
|
|
306
|
+
*/
|
|
307
|
+
export declare function ResponsiveAppShellContent({ children, className, style, dataMolId, testId, }: ResponsiveAppShellContentProps): JSX.Element;
|
|
308
|
+
/**
|
|
309
|
+
* The responsive app shell family — see the {@link ResponsiveAppShellBase |
|
|
310
|
+
* root component} and the module docs for the full contract.
|
|
311
|
+
*
|
|
312
|
+
* Consumed as `<ResponsiveAppShell.TopBar />`, `.Sidebar`, `.Drawer` and
|
|
313
|
+
* `.Content` inside `<ResponsiveAppShell>`; each is also exported as a named
|
|
314
|
+
* component (`ResponsiveAppShellTopBar`, …) for star-import consumers.
|
|
315
|
+
*/
|
|
316
|
+
export declare const ResponsiveAppShell: typeof ResponsiveAppShellBase & {
|
|
317
|
+
/** The `<header>` landmark — brand + actions + the drawer menu trigger. */
|
|
318
|
+
TopBar: typeof ResponsiveAppShellTopBar;
|
|
319
|
+
/** The desktop `<aside>`/`<nav>` landmarks (≥768px only). */
|
|
320
|
+
Sidebar: typeof ResponsiveAppShellSidebar;
|
|
321
|
+
/** The mobile dialog drawer (<768px only). */
|
|
322
|
+
Drawer: typeof ResponsiveAppShellDrawer;
|
|
323
|
+
/** The `<main>` landmark. */
|
|
324
|
+
Content: typeof ResponsiveAppShellContent;
|
|
325
|
+
};
|
|
326
|
+
export {};
|
|
327
|
+
//# sourceMappingURL=ResponsiveAppShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResponsiveAppShell.d.ts","sourceRoot":"","sources":["../../src/components/ResponsiveAppShell.tsx"],"names":[],"mappings":"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"}
|