@gravitee/graphene-core 2.55.0 → 2.56.0-feat-layout-content-width-tiers.e76c29f
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/USAGE_GUIDE.md +123 -11
- package/dist/composed/AppLayout/AppLayout.d.ts +14 -3
- package/dist/composed/AppLayout/AppLayout.d.ts.map +1 -1
- package/dist/composed/LayoutSlots/LayoutSlotsContext.d.ts +8 -0
- package/dist/composed/LayoutSlots/LayoutSlotsContext.d.ts.map +1 -1
- package/dist/composed/LayoutSlots/use-layout-config.d.ts +3 -0
- package/dist/composed/LayoutSlots/use-layout-config.d.ts.map +1 -1
- package/dist/composed/PageFocused/PageFocused.d.ts +32 -0
- package/dist/composed/PageFocused/PageFocused.d.ts.map +1 -0
- package/dist/composed/PageFocused/index.d.ts +3 -0
- package/dist/composed/PageFocused/index.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -24
- package/dist/styles/globals.css +1 -1
- package/dist/styles/tailwind-theme.css +2 -0
- package/dist/tokens/component.css +2 -1
- package/package.json +2 -1
- package/snippets/context-sidebar-detail-page.tsx +21 -2
- package/snippets/creation-wizard-page.tsx +120 -0
- package/snippets/json-schema-form-simple.tsx +1 -1
- package/snippets/json-schema-form-with-meta.tsx +1 -1
package/USAGE_GUIDE.md
CHANGED
|
@@ -141,9 +141,41 @@ Scale: `0`, `0.5`, `1`, `1.5`, `2`, `2.5`, `3`, `3.5`, `4`, `5`, `6`, `7`, `8`,
|
|
|
141
141
|
|
|
142
142
|
`rounded-sm`, `rounded-md`, `rounded-lg`, `rounded-xl` (mapped to semantic `--radius`).
|
|
143
143
|
|
|
144
|
-
### Layout
|
|
144
|
+
### Layout — content width system
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
All pages share a single uniform centered container. No per-page width decisions needed — the container never changes between sibling pages, eliminating layout shifts during navigation.
|
|
147
|
+
|
|
148
|
+
The layout owns both **padding** and **max-width** at the layout level. Page components must not duplicate either — do NOT add `p-6` / `p-*` / `px-*` / `py-*` or `max-w-*` classes on page-level wrapper divs.
|
|
149
|
+
|
|
150
|
+
**Decision rule:**
|
|
151
|
+
|
|
152
|
+
1. Is this a tool/workspace layout (Policy Studio, LLM Studio), observability dashboard, or log/trace explorer? → `useLayoutConfig({ contentVariant: 'full-bleed' })`
|
|
153
|
+
2. Is this a single-column creation/edit form with a back button and a focused workflow (e.g. alert form, plan form, resource wizard, onboarding stepper)? → Wrap content in `<PageFocused>`. Heuristic: if the page has a "← Back" button and its route matches `/new`, `/:id/edit`, or `/:id` under a list page, it's likely a focused form.
|
|
154
|
+
3. Everything else (list pages, detail views, settings, dashboards) → Do nothing. The default centered container handles it.
|
|
155
|
+
|
|
156
|
+
```tsx
|
|
157
|
+
import { PageFocused } from '@gravitee/graphene-core';
|
|
158
|
+
|
|
159
|
+
// Wizard/creation page — focused and centered
|
|
160
|
+
function CreateApiPage() {
|
|
161
|
+
return (
|
|
162
|
+
<PageFocused>
|
|
163
|
+
<StepProgress steps={steps} activeStep={step} />
|
|
164
|
+
<StepContent />
|
|
165
|
+
</PageFocused>
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Everything else — just render content directly (no padding, no max-width)
|
|
170
|
+
function ApisPage() {
|
|
171
|
+
return (
|
|
172
|
+
<div className="space-y-4">
|
|
173
|
+
<h2>APIs</h2>
|
|
174
|
+
<DataTable ... />
|
|
175
|
+
</div>
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
```
|
|
147
179
|
|
|
148
180
|
## Styling
|
|
149
181
|
|
|
@@ -293,27 +325,107 @@ If you have not migrated to `AppContextBar` yet, keeping the app name as the fir
|
|
|
293
325
|
|
|
294
326
|
**Linear breadcrumbs:** When each step maps to a **path string** and React Router’s `navigate`, use **`buildLinearBreadcrumbs(navigate, segments)`** so `ContentHeader` / `useLayoutConfig` get consistent `BreadcrumbEntry[]` without copying the same `onClick` wiring. If the first crumb is a **custom action** (e.g. “back” that is not `navigate('/path')`), build that entry by hand or mix with `buildLinearBreadcrumbs`—see Storybook **Composed/ContentHeader → Linear breadcrumbs from builder** for the canonical route-based pattern. API edge cases are covered in `packages/core/src/lib/breadcrumbs/buildLinearBreadcrumbs.test.ts`.
|
|
295
327
|
|
|
296
|
-
### `contentVariant` —
|
|
328
|
+
### `contentVariant` — content width
|
|
329
|
+
|
|
330
|
+
`AppLayout` accepts `contentVariant` to control content area width and padding:
|
|
331
|
+
|
|
332
|
+
- `"default"` (default) — centered container with standard padding. All standard pages.
|
|
333
|
+
- `"full-bleed"` — no max-width, no padding; content spans edge-to-edge. Tool layouts, observability dashboards, log/trace explorers.
|
|
334
|
+
|
|
335
|
+
```tsx
|
|
336
|
+
// Default — no change needed, AppLayout applies the centered container automatically
|
|
337
|
+
<AppLayout>
|
|
338
|
+
<DetailPage />
|
|
339
|
+
</AppLayout>
|
|
340
|
+
|
|
341
|
+
// Full-bleed — for tool layouts and observability pages
|
|
342
|
+
useLayoutConfig({ contentVariant: 'full-bleed' }, []);
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
With `useLayoutConfig` (module federation), a nested page can set `contentVariant` without affecting other layout slots owned by parent components. Each hook only resets the keys it owns on unmount.
|
|
346
|
+
|
|
347
|
+
For creation wizards and steppers, wrap content in `<PageFocused>` inside the default container — see **Layout — content width system** above.
|
|
297
348
|
|
|
298
|
-
|
|
349
|
+
### `banner` — full-width status slot
|
|
299
350
|
|
|
300
|
-
|
|
301
|
-
- `"full-bleed"` — no padding; content spans edge-to-edge.
|
|
351
|
+
`AppLayout` accepts a `banner` prop that renders a full-width region above the padded content wrapper but inside the scroll container. Use it for persistent status indicators with an action (deploy status, environment warnings).
|
|
302
352
|
|
|
303
|
-
|
|
353
|
+
**Shell layout requirement:** If the host shell renders `<AppLayout>` and reads layout config from `LayoutSlotsProvider`, it must forward **both** `banner` and `bannerSticky` slots to `<AppLayout>`:
|
|
304
354
|
|
|
305
355
|
```tsx
|
|
306
|
-
<AppLayout
|
|
307
|
-
|
|
356
|
+
<AppLayout
|
|
357
|
+
banner={slots.banner}
|
|
358
|
+
bannerSticky={slots.bannerSticky}
|
|
359
|
+
contentVariant={slots.contentVariant}
|
|
360
|
+
contextSidebar={slots.contextSidebar}
|
|
361
|
+
/* …other slot props… */
|
|
362
|
+
>
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
Without this wiring, `useLayoutConfig({ banner: … })` calls from consumer modules have no effect.
|
|
366
|
+
|
|
367
|
+
**Usage:**
|
|
368
|
+
|
|
369
|
+
```tsx
|
|
370
|
+
// Direct prop usage
|
|
371
|
+
<AppLayout banner={<DeployStrip />} bannerSticky>
|
|
372
|
+
<DetailPage />
|
|
308
373
|
</AppLayout>
|
|
374
|
+
|
|
375
|
+
// Module federation via useLayoutConfig
|
|
376
|
+
useLayoutConfig({
|
|
377
|
+
banner: deployState === 'NEED_REDEPLOY' ? (
|
|
378
|
+
<DeployStrip onDeploy={handleDeploy} isPending={isPending} />
|
|
379
|
+
) : null,
|
|
380
|
+
bannerSticky: true,
|
|
381
|
+
}, [deployState, handleDeploy, isPending]);
|
|
309
382
|
```
|
|
310
383
|
|
|
311
|
-
|
|
384
|
+
The banner spans full width regardless of `contentVariant`. When `bannerSticky` is true, it sticks to the top of the scroll area so the action remains reachable while scrolling.
|
|
385
|
+
|
|
386
|
+
**Migrating inline banners:** If a page currently renders a banner component inline within its page content, move it to `useLayoutConfig`. On unmount or when the status clears, set `banner: null` — `useLayoutConfig` resets owned keys automatically on unmount, so the banner won't linger after navigation.
|
|
387
|
+
|
|
388
|
+
**Accessibility:** Add `role="status"` and a descriptive `aria-label` on the banner's root element so screen readers announce it as a live region:
|
|
389
|
+
|
|
390
|
+
**Button hierarchy:** When a banner contains an action button alongside page content that has its own primary buttons, use an outline treatment on the banner button to avoid competing with the page's primary CTA:
|
|
312
391
|
|
|
313
392
|
```tsx
|
|
314
|
-
|
|
393
|
+
function DeployStrip({ onDeploy, isPending }) {
|
|
394
|
+
return (
|
|
395
|
+
<div role="status" aria-label="Deployment status" className="flex items-center gap-2 border-b border-border px-5 py-1.5">
|
|
396
|
+
<span className="size-1.5 shrink-0 rounded-full bg-warning" aria-hidden="true" />
|
|
397
|
+
<span className="text-sm text-muted-foreground">Undeployed changes</span>
|
|
398
|
+
<div className="flex-1" />
|
|
399
|
+
<button
|
|
400
|
+
type="button"
|
|
401
|
+
className="rounded-md border border-warning/25 bg-warning/5 px-2.5 py-0.5 text-sm font-semibold text-warning-foreground transition-colors hover:bg-warning/10 disabled:opacity-50"
|
|
402
|
+
onClick={onDeploy}
|
|
403
|
+
disabled={isPending}
|
|
404
|
+
>
|
|
405
|
+
{isPending ? 'Deploying…' : 'Deploy API'}
|
|
406
|
+
</button>
|
|
407
|
+
</div>
|
|
408
|
+
);
|
|
409
|
+
}
|
|
315
410
|
```
|
|
316
411
|
|
|
412
|
+
See Storybook **Composed/AppLayout → BannerSlot** for the full interactive example.
|
|
413
|
+
|
|
414
|
+
### Adopting the content width system in consumer modules
|
|
415
|
+
|
|
416
|
+
Follow these steps to apply the layout width system to an existing consumer module:
|
|
417
|
+
|
|
418
|
+
1. **Identify all pages** in your module that render inside `AppLayout`.
|
|
419
|
+
2. **Categorize each page:**
|
|
420
|
+
- **Default** — list pages, detail views, forms, settings, dashboards. No change needed; `AppLayout` applies the centered container automatically.
|
|
421
|
+
- **PageFocused** — single-column creation wizards or steppers with a back button and a focused workflow (e.g. alert form, plan form, resource wizard, onboarding stepper). Wrap content in `<PageFocused>`. Heuristic: if the page has a "← Back" button and its route matches `/new`, `/:id/edit`, or `/:id` under a list page, it's likely a focused form.
|
|
422
|
+
- **Full-bleed** — tool layouts (Policy Studio, LLM Studio), observability dashboards, log/trace explorers. Add `useLayoutConfig({ contentVariant: 'full-bleed' }, [])` if not already set.
|
|
423
|
+
3. **Remove page-level padding** — delete `p-6` and any `p-*`, `px-*`, `py-*` classes from the page's root wrapper `<div>`. The layout already provides content padding via the container. This is the most common change — nearly every page will need it.
|
|
424
|
+
4. **Remove ad-hoc width constraints** — delete any `max-w-*` classes on page-level wrapper divs. The design system owns content width.
|
|
425
|
+
5. **Verify** — resize the browser to confirm content stays centered without clipping on narrow viewports.
|
|
426
|
+
|
|
427
|
+
See `packages/core/snippets/data-table-list-page.tsx` and `creation-wizard-page.tsx` for complete examples.
|
|
428
|
+
|
|
317
429
|
### Data table (entity list pages)
|
|
318
430
|
|
|
319
431
|
Use `DataTable` for any entity list — whether the data is fetched page-by-page from an API or loaded in full on the client. The component provides sorting, filtering, pagination, column visibility, row selection, and bulk actions through a composable slot API.
|
|
@@ -18,11 +18,22 @@ interface AppLayoutProps {
|
|
|
18
18
|
/** Optional callback when context expansion state changes. */
|
|
19
19
|
readonly onContextExpandedChange?: (expanded: boolean) => void;
|
|
20
20
|
/**
|
|
21
|
-
* Controls content area padding.
|
|
22
|
-
* - `"default"` —
|
|
23
|
-
* - `"full-bleed"` — no padding; content spans edge-to-edge.
|
|
21
|
+
* Controls content area width and padding.
|
|
22
|
+
* - `"default"` — centered container with standard padding.
|
|
23
|
+
* - `"full-bleed"` — no max-width, no padding; content spans edge-to-edge.
|
|
24
|
+
*
|
|
25
|
+
* All standard pages use the default container. Wizards can optionally
|
|
26
|
+
* use `<PageFocused>` inside the default container for a narrower focus.
|
|
24
27
|
*/
|
|
25
28
|
readonly contentVariant?: 'default' | 'full-bleed';
|
|
29
|
+
/**
|
|
30
|
+
* Full-width banner rendered above the padded content area.
|
|
31
|
+
* Sits inside the scroll container but outside the content padding wrapper,
|
|
32
|
+
* so it spans edge-to-edge regardless of `contentVariant`.
|
|
33
|
+
*/
|
|
34
|
+
readonly banner?: ReactNode;
|
|
35
|
+
/** When true the banner sticks to the top of the scroll container. Defaults to `false`. */
|
|
36
|
+
readonly bannerSticky?: boolean;
|
|
26
37
|
/**
|
|
27
38
|
* When true the layout spans the full viewport height.
|
|
28
39
|
* Defaults to `true` (sidebar-dominant shell).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppLayout.d.ts","sourceRoot":"","sources":["../../../src/composed/AppLayout/AppLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;AAGtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAEhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAGhF,UAAU,cAAc;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/D
|
|
1
|
+
{"version":3,"file":"AppLayout.d.ts","sourceRoot":"","sources":["../../../src/composed/AppLayout/AppLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;AAGtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAEhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAGhF,UAAU,cAAc;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/D;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC;IAC1C,kDAAkD;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;CACnC;AAiGD,iBAAS,SAAS,CAAC,EAAE,kBAAmC,EAAE,YAAuB,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,+BAQ3G;kBARQ,SAAS;;;AAYlB,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -8,7 +8,15 @@ interface LayoutSlots {
|
|
|
8
8
|
readonly leading: ReactNode;
|
|
9
9
|
readonly viewMode: 'global' | 'context';
|
|
10
10
|
readonly contextExpanded: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* `"default"` — centered container with padding (use for all standard pages).
|
|
13
|
+
* `"full-bleed"` — no max-width, no padding (tool layouts like Policy Studio).
|
|
14
|
+
*/
|
|
11
15
|
readonly contentVariant: 'default' | 'full-bleed';
|
|
16
|
+
/** Full-width banner rendered above the padded content area (e.g. deploy status, environment warnings). */
|
|
17
|
+
readonly banner: ReactNode;
|
|
18
|
+
/** When true the banner sticks to the top of the scroll container. */
|
|
19
|
+
readonly bannerSticky: boolean;
|
|
12
20
|
}
|
|
13
21
|
interface LayoutSlotsContextValue {
|
|
14
22
|
readonly slots: LayoutSlots;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutSlotsContext.d.ts","sourceRoot":"","sources":["../../../src/composed/LayoutSlots/LayoutSlotsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAA8C,MAAM,OAAO,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEtF,UAAU,WAAW;IACnB,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC;IACxC,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"LayoutSlotsContext.d.ts","sourceRoot":"","sources":["../../../src/composed/LayoutSlots/LayoutSlotsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAA8C,MAAM,OAAO,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEtF,UAAU,WAAW;IACnB,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC;IACxC,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC;IAClD,2GAA2G;IAC3G,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACvF,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC3D,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,WAAW,CAAC,KAAK,IAAI,CAAC;CACvE;AAED,QAAA,MAAM,aAAa,EAAE,WAUpB,CAAC;AAIF,iBAAS,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAwB1E;AAED,iBAAS,cAAc,IAAI,uBAAuB,CAMjD;AAED,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -7,6 +7,9 @@ import { LayoutSlots } from './LayoutSlotsContext';
|
|
|
7
7
|
* **Resets all slots to defaults on unmount** so stale module content
|
|
8
8
|
* never lingers after navigation.
|
|
9
9
|
*
|
|
10
|
+
* Uses `useLayoutEffect` to apply config synchronously before paint,
|
|
11
|
+
* preventing visible layout shifts during navigation.
|
|
12
|
+
*
|
|
10
13
|
* @param config - Slot values the module wants to own.
|
|
11
14
|
* @param deps - Dependency array that triggers a config re-push
|
|
12
15
|
* (same semantics as `useEffect` deps).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-layout-config.d.ts","sourceRoot":"","sources":["../../../src/composed/LayoutSlots/use-layout-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"use-layout-config.d.ts","sourceRoot":"","sources":["../../../src/composed/LayoutSlots/use-layout-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,GAAE,KAAK,CAAC,cAAmB,QAYrF;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
interface PageFocusedProps {
|
|
3
|
+
/** Focused content (stepper, creation wizard, onboarding flow). */
|
|
4
|
+
readonly children: ReactNode;
|
|
5
|
+
readonly className?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Constrains and centers page content for focused flows.
|
|
9
|
+
*
|
|
10
|
+
* Use for creation wizards, multi-step forms, onboarding sequences, and
|
|
11
|
+
* any task where the user is working through a focused linear flow.
|
|
12
|
+
* The centering signals "you are in a sub-task" and draws the eye inward.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* export function CreateApiWizardPage() {
|
|
17
|
+
* return (
|
|
18
|
+
* <PageFocused>
|
|
19
|
+
* <StepProgress steps={steps} activeStep={step} />
|
|
20
|
+
* <StepContent />
|
|
21
|
+
* </PageFocused>
|
|
22
|
+
* );
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
declare function PageFocused({ children, className }: PageFocusedProps): import("react").JSX.Element;
|
|
27
|
+
declare namespace PageFocused {
|
|
28
|
+
var displayName: string;
|
|
29
|
+
}
|
|
30
|
+
export { PageFocused };
|
|
31
|
+
export type { PageFocusedProps };
|
|
32
|
+
//# sourceMappingURL=PageFocused.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageFocused.d.ts","sourceRoot":"","sources":["../../../src/composed/PageFocused/PageFocused.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,gBAAgB;IACxB,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BAE7D;kBAFQ,WAAW;;;AAMpB,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composed/PageFocused/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -62,6 +62,7 @@ export * from './composed/FacetedFilter';
|
|
|
62
62
|
export * from './composed/FileUpload';
|
|
63
63
|
export * from './composed/JsonSchemaForm';
|
|
64
64
|
export * from './composed/LayoutSlots';
|
|
65
|
+
export * from './composed/PageFocused';
|
|
65
66
|
export * from './composed/PasswordInput';
|
|
66
67
|
export * from './composed/SelectorDropdown';
|
|
67
68
|
export * from './composed/SidebarMode';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAG3F,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAMvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,0CAA0C,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAG3F,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAMvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,0CAA0C,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23857,7 +23857,7 @@ function eH({ className: t, ...n }) {
|
|
|
23857
23857
|
function tH({ className: t, ...n }) {
|
|
23858
23858
|
return /* @__PURE__ */ W("main", {
|
|
23859
23859
|
"data-slot": "sidebar-inset",
|
|
23860
|
-
className: e("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2", t),
|
|
23860
|
+
className: e("relative flex w-full min-w-0 flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2", t),
|
|
23861
23861
|
...n
|
|
23862
23862
|
});
|
|
23863
23863
|
}
|
|
@@ -25130,27 +25130,27 @@ function kU({ className: t }) {
|
|
|
25130
25130
|
kU.displayName = "SidebarModeControl";
|
|
25131
25131
|
//#endregion
|
|
25132
25132
|
//#region src/composed/AppLayout/AppLayout.tsx
|
|
25133
|
-
function AU({ className: t, sidebar: n, contextSidebar: r, subheader: i, children: a, viewMode: o, contextExpanded: s = !0, contentVariant: c = "default",
|
|
25134
|
-
let
|
|
25135
|
-
|
|
25136
|
-
let
|
|
25137
|
-
return o !==
|
|
25133
|
+
function AU({ className: t, sidebar: n, contextSidebar: r, subheader: i, children: a, viewMode: o, contextExpanded: s = !0, contentVariant: c = "default", banner: l, bannerSticky: u = !1, fullHeight: d = !0 }) {
|
|
25134
|
+
let f = o === "context", { mode: p } = wU(), [m, h] = U(p), [g, _] = U(!1);
|
|
25135
|
+
p !== m && (h(p), p !== "hover-expand" && _(!1));
|
|
25136
|
+
let v = p === "expanded" ? !0 : p === "collapsed" ? !1 : g, y = p === "hover-expand" ? _ : void 0, [b, x] = U(o), [S, C] = U(!1);
|
|
25137
|
+
return o !== b && (x(o), C(!0)), ae(() => {
|
|
25138
25138
|
let e = requestAnimationFrame(() => {
|
|
25139
|
-
|
|
25139
|
+
C(!1);
|
|
25140
25140
|
});
|
|
25141
25141
|
return () => cancelAnimationFrame(e);
|
|
25142
25142
|
}, [o]), /* @__PURE__ */ W(ZV, {
|
|
25143
|
-
open:
|
|
25144
|
-
onOpenChange:
|
|
25145
|
-
className: e("min-h-0",
|
|
25146
|
-
style:
|
|
25143
|
+
open: v,
|
|
25144
|
+
onOpenChange: y,
|
|
25145
|
+
className: e("min-h-0", d ? "h-svh" : "h-full", S && "**:duration-0!", p === "hover-expand" && g && "**:data-[slot=sidebar-gap]:w-(--sidebar-width-icon)!"),
|
|
25146
|
+
style: d ? { "--topnav-height": "0rem" } : void 0,
|
|
25147
25147
|
children: /* @__PURE__ */ G("div", {
|
|
25148
25148
|
className: e("flex w-full flex-1 overflow-hidden", t),
|
|
25149
25149
|
children: [n, /* @__PURE__ */ G(tH, {
|
|
25150
25150
|
className: "flex min-h-0 flex-col",
|
|
25151
25151
|
children: [i, /* @__PURE__ */ G("div", {
|
|
25152
25152
|
className: "flex min-h-0 flex-1 overflow-hidden",
|
|
25153
|
-
children: [
|
|
25153
|
+
children: [f && r && /* @__PURE__ */ W("aside", {
|
|
25154
25154
|
className: e("shrink-0 overflow-hidden border-r border-border", "transition-[width] duration-200 ease-linear", s ? "w-context-sidebar" : "w-0"),
|
|
25155
25155
|
"aria-hidden": !s,
|
|
25156
25156
|
...!s && { inert: !0 },
|
|
@@ -25158,12 +25158,15 @@ function AU({ className: t, sidebar: n, contextSidebar: r, subheader: i, childre
|
|
|
25158
25158
|
className: "size-full overflow-y-auto",
|
|
25159
25159
|
children: r
|
|
25160
25160
|
})
|
|
25161
|
-
}), /* @__PURE__ */
|
|
25162
|
-
className: "flex-1 overflow-y-auto",
|
|
25163
|
-
children: /* @__PURE__ */ W("div", {
|
|
25164
|
-
className: e("
|
|
25161
|
+
}), /* @__PURE__ */ G("div", {
|
|
25162
|
+
className: "flex min-h-0 flex-1 flex-col overflow-y-auto",
|
|
25163
|
+
children: [l && /* @__PURE__ */ W("div", {
|
|
25164
|
+
className: e("shrink-0", u && "sticky top-0 z-20 bg-background"),
|
|
25165
|
+
children: l
|
|
25166
|
+
}), /* @__PURE__ */ W("div", {
|
|
25167
|
+
className: e("mx-auto w-full", c === "full-bleed" ? "min-h-0 flex-1 p-0" : "max-w-content px-content pt-4 pb-content"),
|
|
25165
25168
|
children: a
|
|
25166
|
-
})
|
|
25169
|
+
})]
|
|
25167
25170
|
})]
|
|
25168
25171
|
})]
|
|
25169
25172
|
})]
|
|
@@ -35586,7 +35589,9 @@ var XZ = {
|
|
|
35586
35589
|
leading: null,
|
|
35587
35590
|
viewMode: "global",
|
|
35588
35591
|
contextExpanded: !0,
|
|
35589
|
-
contentVariant: "default"
|
|
35592
|
+
contentVariant: "default",
|
|
35593
|
+
banner: null,
|
|
35594
|
+
bannerSticky: !1
|
|
35590
35595
|
}, ZZ = L(null);
|
|
35591
35596
|
function QZ({ children: e }) {
|
|
35592
35597
|
let [t, n] = U(XZ), r = R((e, t) => {
|
|
@@ -35632,7 +35637,7 @@ function $Z() {
|
|
|
35632
35637
|
//#region src/composed/LayoutSlots/use-layout-config.ts
|
|
35633
35638
|
function eQ(e, t = []) {
|
|
35634
35639
|
let { setSlots: n, resetSlots: r } = $Z();
|
|
35635
|
-
|
|
35640
|
+
ae(() => {
|
|
35636
35641
|
n(e);
|
|
35637
35642
|
let t = Object.keys(e);
|
|
35638
35643
|
return () => {
|
|
@@ -35645,8 +35650,17 @@ function eQ(e, t = []) {
|
|
|
35645
35650
|
]);
|
|
35646
35651
|
}
|
|
35647
35652
|
//#endregion
|
|
35653
|
+
//#region src/composed/PageFocused/PageFocused.tsx
|
|
35654
|
+
function tQ({ children: t, className: n }) {
|
|
35655
|
+
return /* @__PURE__ */ W("div", {
|
|
35656
|
+
className: e("mx-auto w-full max-w-focused", n),
|
|
35657
|
+
children: t
|
|
35658
|
+
});
|
|
35659
|
+
}
|
|
35660
|
+
tQ.displayName = "PageFocused";
|
|
35661
|
+
//#endregion
|
|
35648
35662
|
//#region src/composed/TopNavUser/TopNavUser.tsx
|
|
35649
|
-
var
|
|
35663
|
+
var nQ = [
|
|
35650
35664
|
{
|
|
35651
35665
|
value: "light",
|
|
35652
35666
|
label: "Light"
|
|
@@ -35660,7 +35674,7 @@ var tQ = [
|
|
|
35660
35674
|
label: "System"
|
|
35661
35675
|
}
|
|
35662
35676
|
];
|
|
35663
|
-
function
|
|
35677
|
+
function rQ({ name: t, email: n, avatarUrl: r, initials: i, className: a, onSignOut: o }) {
|
|
35664
35678
|
let s = i ?? t.slice(0, 2).toUpperCase(), { mode: c, setMode: l } = M();
|
|
35665
35679
|
return /* @__PURE__ */ G(rI, { children: [/* @__PURE__ */ W(aI, {
|
|
35666
35680
|
asChild: !0,
|
|
@@ -35689,7 +35703,7 @@ function nQ({ name: t, email: n, avatarUrl: r, initials: i, className: a, onSign
|
|
|
35689
35703
|
/* @__PURE__ */ W(uI, {
|
|
35690
35704
|
value: c,
|
|
35691
35705
|
onValueChange: (e) => l(e),
|
|
35692
|
-
children:
|
|
35706
|
+
children: nQ.map((e) => /* @__PURE__ */ W(dI, {
|
|
35693
35707
|
value: e.value,
|
|
35694
35708
|
children: e.label
|
|
35695
35709
|
}, e.value))
|
|
@@ -35702,6 +35716,6 @@ function nQ({ name: t, email: n, avatarUrl: r, initials: i, className: a, onSign
|
|
|
35702
35716
|
]
|
|
35703
35717
|
})] });
|
|
35704
35718
|
}
|
|
35705
|
-
|
|
35719
|
+
rQ.displayName = "TopNavUser";
|
|
35706
35720
|
//#endregion
|
|
35707
|
-
export { mv as Accordion, _v as AccordionContent, hv as AccordionItem, gv as AccordionTrigger, Sv as Alert, Tv as AlertAction, wv as AlertDescription, Cv as AlertTitle, xU as AppContextBar, jU as AppLayout, FU as AppSidebar, vU as AppSwitcher, Ev as Avatar, kv as AvatarBadge, Ov as AvatarFallback, Av as AvatarGroup, jv as AvatarGroupCount, Dv as AvatarImage, Nv as Badge, MG as BadgeCell, Pv as Breadcrumb, Bv as BreadcrumbEllipsis, Iv as BreadcrumbItem, Lv as BreadcrumbLink, Fv as BreadcrumbList, Rv as BreadcrumbPage, zv as BreadcrumbSeparator, Hv as Button, Gv as ButtonGroup, qv as ButtonGroupSeparator, Kv as ButtonGroupText, oC as Calendar, sC as CalendarDayButton, cC as Card, fC as CardAction, pC as CardContent, dC as CardDescription, mC as CardFooter, lC as CardHeader, uC as CardTitle, hC as Checkbox, gC as Collapsible, vC as CollapsibleContent, _C as CollapsibleTrigger, LA as Combobox, ZA as ComboboxChip, XA as ComboboxChips, QA as ComboboxChipsInput, qA as ComboboxCollection, HA as ComboboxContent, JA as ComboboxEmpty, GA as ComboboxGroup, VA as ComboboxInput, WA as ComboboxItem, KA as ComboboxLabel, UA as ComboboxList, YA as ComboboxSeparator, zA as ComboboxTrigger, RA as ComboboxValue, vP as Command, yP as CommandDialog, SP as CommandEmpty, CP as CommandGroup, bP as CommandInput, TP as CommandItem, xP as CommandList, wP as CommandSeparator, EP as CommandShortcut, BU as ContentHeader, DP as ContextMenu, LP as ContextMenuCheckboxItem, NP as ContextMenuContent, kP as ContextMenuGroup, PP as ContextMenuItem, zP as ContextMenuLabel, AP as ContextMenuPortal, MP as ContextMenuRadioGroup, RP as ContextMenuRadioItem, BP as ContextMenuSeparator, VP as ContextMenuShortcut, jP as ContextMenuSub, IP as ContextMenuSubContent, FP as ContextMenuSubTrigger, OP as ContextMenuTrigger, LU as ContextSidebar, RU as ContextToggleButton, PG as CopyableCell, VU as CopyableText, XZ as DEFAULT_SLOTS, CG as DataTable, wG as DataTableColumnHeader, IG as DataTableEmptyState, gG as DataTablePagination, _G as DataTableViewOptions, jG as DateCell, GK as DatePicker, KK as DateRangePicker, YK as DateTimePicker, QK as DateTimeRangePicker, cP as Dialog, dP as DialogClose, pP as DialogContent, _P as DialogDescription, hP as DialogFooter, mP as DialogHeader, fP as DialogOverlay, uP as DialogPortal, gP as DialogTitle, lP as DialogTrigger, qF as Drawer, XF as DrawerClose, QF as DrawerContent, nI as DrawerDescription, eI as DrawerFooter, $F as DrawerHeader, ZF as DrawerOverlay, YF as DrawerPortal, tI as DrawerTitle, JF as DrawerTrigger, rI as DropdownMenu, lI as DropdownMenuCheckboxItem, oI as DropdownMenuContent, sI as DropdownMenuGroup, cI as DropdownMenuItem, fI as DropdownMenuLabel, iI as DropdownMenuPortal, uI as DropdownMenuRadioGroup, dI as DropdownMenuRadioItem, pI as DropdownMenuSeparator, mI as DropdownMenuShortcut, hI as DropdownMenuSub, _I as DropdownMenuSubContent, gI as DropdownMenuSubTrigger, aI as DropdownMenuTrigger, vI as Empty, wI as EmptyContent, CI as EmptyDescription, yI as EmptyHeader, xI as EmptyMedia, SI as EmptyTitle, $K as FacetedFilter, AI as Field, jI as FieldContent, PI as FieldDescription, II as FieldError, OI as FieldGroup, MI as FieldLabel, DI as FieldLegend, FI as FieldSeparator, EI as FieldSet, NI as FieldTitle, iq as FileUpload, AR as FileUploadInput, rq as FileUploadItem, jR as HoverCard, NR as HoverCardContent, IR as HoverCardDescription, PR as HoverCardHeader, FR as HoverCardTitle, MR as HoverCardTrigger, OA as Input, kA as InputGroup, jA as InputGroupAddon, NA as InputGroupButton, FA as InputGroupInput, PA as InputGroupText, IA as InputGroupTextarea, BR as Item, KR as ItemActions, UR as ItemContent, GR as ItemDescription, JR as ItemFooter, LR as ItemGroup, qR as ItemHeader, HR as ItemMedia, RR as ItemSeparator, WR as ItemTitle, ZY as JsonSchemaForm, YR as Kbd, XR as KbdGroup, TI as Label, QZ as LayoutSlotsProvider, NG as MonoCell, ZR as Pagination, QR as PaginationContent, rz as PaginationEllipsis, $R as PaginationItem, ez as PaginationLink, nz as PaginationNext, tz as PaginationPrevious, jY as PasswordInput, iz as Popover, sz as PopoverAnchor, oz as PopoverContent, uz as PopoverDescription, cz as PopoverHeader, lz as PopoverTitle, az as PopoverTrigger, ke as PortalContainerProvider, dz as Progress, pz as Prose, mz as RadioGroup, hz as RadioGroupItem, dV as ResizableHandle, uV as ResizablePanel, lV as ResizablePanelGroup, fV as ScrollArea, pV as ScrollBar, mV as Select, vV as SelectContent, hV as SelectGroup, bV as SelectItem, yV as SelectLabel, CV as SelectScrollDownButton, SV as SelectScrollUpButton, xV as SelectSeparator, _V as SelectTrigger, gV as SelectValue, yU as SelectorDropdown, bU as SelectorTriggerButton, Uv as Separator, wV as Sheet, EV as SheetClose, kV as SheetContent, NV as SheetDescription, jV as SheetFooter, AV as SheetHeader, MV as SheetTitle, TV as SheetTrigger, QV as Sidebar, oH as SidebarContent, iH as SidebarFooter, sH as SidebarGroup, lH as SidebarGroupAction, uH as SidebarGroupContent, cH as SidebarGroupLabel, rH as SidebarHeader, nH as SidebarInput, tH as SidebarInset, dH as SidebarMenu, hH as SidebarMenuAction, gH as SidebarMenuBadge, mH as SidebarMenuButton, fH as SidebarMenuItem, _H as SidebarMenuSkeleton, vH as SidebarMenuSub, bH as SidebarMenuSubButton, yH as SidebarMenuSubItem, kU as SidebarModeControl, DU as SidebarModeProvider, IU as SidebarNavigation, ZV as SidebarProvider, eH as SidebarRail, aH as SidebarSeparator, $V as SidebarTrigger, r as Skeleton, QH as Spinner, $H as Switch, eU as Table, nU as TableBody, sU as TableCaption, oU as TableCell, rU as TableFooter, aU as TableHead, tU as TableHeader, iU as TableRow, cU as Tabs, fU as TabsContent, uU as TabsList, dU as TabsTrigger, t as Textarea, N as ThemeProvider, ZH as Toaster, mU as Toggle, gU as ToggleGroup, _U as ToggleGroupItem, FV as Tooltip, LV as TooltipContent, PV as TooltipProvider, IV as TooltipTrigger,
|
|
35721
|
+
export { mv as Accordion, _v as AccordionContent, hv as AccordionItem, gv as AccordionTrigger, Sv as Alert, Tv as AlertAction, wv as AlertDescription, Cv as AlertTitle, xU as AppContextBar, jU as AppLayout, FU as AppSidebar, vU as AppSwitcher, Ev as Avatar, kv as AvatarBadge, Ov as AvatarFallback, Av as AvatarGroup, jv as AvatarGroupCount, Dv as AvatarImage, Nv as Badge, MG as BadgeCell, Pv as Breadcrumb, Bv as BreadcrumbEllipsis, Iv as BreadcrumbItem, Lv as BreadcrumbLink, Fv as BreadcrumbList, Rv as BreadcrumbPage, zv as BreadcrumbSeparator, Hv as Button, Gv as ButtonGroup, qv as ButtonGroupSeparator, Kv as ButtonGroupText, oC as Calendar, sC as CalendarDayButton, cC as Card, fC as CardAction, pC as CardContent, dC as CardDescription, mC as CardFooter, lC as CardHeader, uC as CardTitle, hC as Checkbox, gC as Collapsible, vC as CollapsibleContent, _C as CollapsibleTrigger, LA as Combobox, ZA as ComboboxChip, XA as ComboboxChips, QA as ComboboxChipsInput, qA as ComboboxCollection, HA as ComboboxContent, JA as ComboboxEmpty, GA as ComboboxGroup, VA as ComboboxInput, WA as ComboboxItem, KA as ComboboxLabel, UA as ComboboxList, YA as ComboboxSeparator, zA as ComboboxTrigger, RA as ComboboxValue, vP as Command, yP as CommandDialog, SP as CommandEmpty, CP as CommandGroup, bP as CommandInput, TP as CommandItem, xP as CommandList, wP as CommandSeparator, EP as CommandShortcut, BU as ContentHeader, DP as ContextMenu, LP as ContextMenuCheckboxItem, NP as ContextMenuContent, kP as ContextMenuGroup, PP as ContextMenuItem, zP as ContextMenuLabel, AP as ContextMenuPortal, MP as ContextMenuRadioGroup, RP as ContextMenuRadioItem, BP as ContextMenuSeparator, VP as ContextMenuShortcut, jP as ContextMenuSub, IP as ContextMenuSubContent, FP as ContextMenuSubTrigger, OP as ContextMenuTrigger, LU as ContextSidebar, RU as ContextToggleButton, PG as CopyableCell, VU as CopyableText, XZ as DEFAULT_SLOTS, CG as DataTable, wG as DataTableColumnHeader, IG as DataTableEmptyState, gG as DataTablePagination, _G as DataTableViewOptions, jG as DateCell, GK as DatePicker, KK as DateRangePicker, YK as DateTimePicker, QK as DateTimeRangePicker, cP as Dialog, dP as DialogClose, pP as DialogContent, _P as DialogDescription, hP as DialogFooter, mP as DialogHeader, fP as DialogOverlay, uP as DialogPortal, gP as DialogTitle, lP as DialogTrigger, qF as Drawer, XF as DrawerClose, QF as DrawerContent, nI as DrawerDescription, eI as DrawerFooter, $F as DrawerHeader, ZF as DrawerOverlay, YF as DrawerPortal, tI as DrawerTitle, JF as DrawerTrigger, rI as DropdownMenu, lI as DropdownMenuCheckboxItem, oI as DropdownMenuContent, sI as DropdownMenuGroup, cI as DropdownMenuItem, fI as DropdownMenuLabel, iI as DropdownMenuPortal, uI as DropdownMenuRadioGroup, dI as DropdownMenuRadioItem, pI as DropdownMenuSeparator, mI as DropdownMenuShortcut, hI as DropdownMenuSub, _I as DropdownMenuSubContent, gI as DropdownMenuSubTrigger, aI as DropdownMenuTrigger, vI as Empty, wI as EmptyContent, CI as EmptyDescription, yI as EmptyHeader, xI as EmptyMedia, SI as EmptyTitle, $K as FacetedFilter, AI as Field, jI as FieldContent, PI as FieldDescription, II as FieldError, OI as FieldGroup, MI as FieldLabel, DI as FieldLegend, FI as FieldSeparator, EI as FieldSet, NI as FieldTitle, iq as FileUpload, AR as FileUploadInput, rq as FileUploadItem, jR as HoverCard, NR as HoverCardContent, IR as HoverCardDescription, PR as HoverCardHeader, FR as HoverCardTitle, MR as HoverCardTrigger, OA as Input, kA as InputGroup, jA as InputGroupAddon, NA as InputGroupButton, FA as InputGroupInput, PA as InputGroupText, IA as InputGroupTextarea, BR as Item, KR as ItemActions, UR as ItemContent, GR as ItemDescription, JR as ItemFooter, LR as ItemGroup, qR as ItemHeader, HR as ItemMedia, RR as ItemSeparator, WR as ItemTitle, ZY as JsonSchemaForm, YR as Kbd, XR as KbdGroup, TI as Label, QZ as LayoutSlotsProvider, NG as MonoCell, tQ as PageFocused, ZR as Pagination, QR as PaginationContent, rz as PaginationEllipsis, $R as PaginationItem, ez as PaginationLink, nz as PaginationNext, tz as PaginationPrevious, jY as PasswordInput, iz as Popover, sz as PopoverAnchor, oz as PopoverContent, uz as PopoverDescription, cz as PopoverHeader, lz as PopoverTitle, az as PopoverTrigger, ke as PortalContainerProvider, dz as Progress, pz as Prose, mz as RadioGroup, hz as RadioGroupItem, dV as ResizableHandle, uV as ResizablePanel, lV as ResizablePanelGroup, fV as ScrollArea, pV as ScrollBar, mV as Select, vV as SelectContent, hV as SelectGroup, bV as SelectItem, yV as SelectLabel, CV as SelectScrollDownButton, SV as SelectScrollUpButton, xV as SelectSeparator, _V as SelectTrigger, gV as SelectValue, yU as SelectorDropdown, bU as SelectorTriggerButton, Uv as Separator, wV as Sheet, EV as SheetClose, kV as SheetContent, NV as SheetDescription, jV as SheetFooter, AV as SheetHeader, MV as SheetTitle, TV as SheetTrigger, QV as Sidebar, oH as SidebarContent, iH as SidebarFooter, sH as SidebarGroup, lH as SidebarGroupAction, uH as SidebarGroupContent, cH as SidebarGroupLabel, rH as SidebarHeader, nH as SidebarInput, tH as SidebarInset, dH as SidebarMenu, hH as SidebarMenuAction, gH as SidebarMenuBadge, mH as SidebarMenuButton, fH as SidebarMenuItem, _H as SidebarMenuSkeleton, vH as SidebarMenuSub, bH as SidebarMenuSubButton, yH as SidebarMenuSubItem, kU as SidebarModeControl, DU as SidebarModeProvider, IU as SidebarNavigation, ZV as SidebarProvider, eH as SidebarRail, aH as SidebarSeparator, $V as SidebarTrigger, r as Skeleton, QH as Spinner, $H as Switch, eU as Table, nU as TableBody, sU as TableCaption, oU as TableCell, rU as TableFooter, aU as TableHead, tU as TableHeader, iU as TableRow, cU as Tabs, fU as TabsContent, uU as TabsList, dU as TabsTrigger, t as Textarea, N as ThemeProvider, ZH as Toaster, mU as Toggle, gU as ToggleGroup, _U as ToggleGroupItem, FV as Tooltip, LV as TooltipContent, PV as TooltipProvider, IV as TooltipTrigger, rQ as TopNavUser, FG as TruncatedCell, xv as alertVariants, Mv as badgeVariants, HU as buildLinearBreadcrumbs, Wv as buttonGroupVariants, Vv as buttonVariants, e as cn, QY as composeResolvers, VJ as extractDefaults, HZ as jsonSchemaResolver, lU as tabsListVariants, FH as toast, pU as toggleVariants, $A as useComboboxAnchor, eQ as useLayoutConfig, $Z as useLayoutSlots, Ae as usePortalContainer, XV as useSidebar, wU as useSidebarMode, M as useTheme };
|