@exxatdesignux/ui 0.5.3 → 0.5.4

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -1
  3. package/consumer-extras/cursor-rules/exxat-accessibility.mdc +1 -1
  4. package/consumer-extras/cursor-rules/exxat-drawer-vs-dialog.mdc +4 -4
  5. package/consumer-extras/cursor-rules/exxat-ds-agents.mdc +5 -1
  6. package/consumer-extras/cursor-rules/exxat-no-vaul.mdc +25 -0
  7. package/consumer-extras/cursor-rules/exxat-page-header-actions.mdc +31 -0
  8. package/consumer-extras/cursor-rules/exxat-table-row-preview.mdc +24 -0
  9. package/consumer-extras/cursor-rules/exxat-tabs-chrome.mdc +31 -0
  10. package/consumer-extras/cursor-skills/exxat-drawer-vs-dialog/SKILL.md +5 -5
  11. package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +2 -2
  12. package/consumer-extras/cursor-skills/exxat-ds-skill/references/accessibility.md +1 -1
  13. package/consumer-extras/cursor-skills/exxat-token-economy/SKILL.md +4 -2
  14. package/consumer-extras/patterns/consumer-upgrade-checklist.md +14 -1
  15. package/consumer-extras/patterns/drawer-vs-dialog-pattern.md +50 -0
  16. package/dist/index.d.ts +0 -2
  17. package/dist/index.js +1 -114
  18. package/dist/index.js.map +1 -1
  19. package/package.json +1 -2
  20. package/src/index.ts +0 -1
  21. package/template/.cursor/rules/exxat-accessibility.mdc +1 -1
  22. package/template/AGENTS.md +2 -2
  23. package/template/components/site-header.tsx +1 -1
  24. package/template/docs/HANDBOOK.md +1 -1
  25. package/template/docs/component-selection-guide.md +1 -1
  26. package/template/docs/consumer-upgrade-checklist.md +51 -0
  27. package/template/docs/drawer-vs-dialog-pattern.md +8 -8
  28. package/template/lib/motion-ui.ts +2 -2
  29. package/template/package.json +0 -1
  30. package/tokens/hooks-index.json +2 -2
  31. package/dist/components/ui/drawer.d.ts +0 -16
  32. package/dist/components/ui/drawer.js +0 -125
  33. package/dist/components/ui/drawer.js.map +0 -1
  34. package/src/components/ui/drawer.tsx +0 -134
  35. package/template/components/ui/drawer.tsx +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.4
4
+
5
+ ### Patch Changes
6
+
7
+ - **Remove Vaul `Drawer` primitive** — side panels use **`Sheet`** only (`ExportDrawer`, `TablePropertiesDrawer`, invite/folder sheets). **`vaul`** dropped from package dependencies; consumers should remove it from their app and delete any `components/ui/drawer.tsx` shim.
8
+ - **New consumer agent rules (vendored via `sync-extras`):** `exxat-no-vaul`, `exxat-tabs-chrome` (no full-width tab stretch), `exxat-page-header-actions`, `exxat-table-row-preview` (HoverCard + DS cells).
9
+ - **`consumer-upgrade-checklist.md`** — Prism-style audit table (tabs, header buttons, popovers, hub views).
10
+ - **Docs:** sheet-panel vs dialog pattern; landing page start-fresh three-step commands at `@0.5.3+`.
11
+
3
12
  ## 0.5.3
4
13
 
5
14
  ### Patch Changes
package/README.md CHANGED
@@ -89,7 +89,7 @@ code are never touched.
89
89
  ## What's inside
90
90
 
91
91
  - **Primitives** (`@exxatdesignux/ui/components/<name>`) — Button, Input,
92
- Select, Dialog, AlertDialog, Sheet, Drawer, Popover, DropdownMenu,
92
+ Select, Dialog, AlertDialog, Sheet, Popover, DropdownMenu,
93
93
  ContextMenu, Tabs, Accordion, Tooltip, Toast-free Banner, ScrollArea,
94
94
  Slider, HoverCard, Avatar, Badge, StatusBadge, Calendar, Kbd, …
95
95
  - **Hub stack** — `DataTable<TRow>`, `useTableState<TRow>`,
@@ -17,7 +17,7 @@ alwaysApply: true
17
17
  4. **Touch targets (2.5.8):** interactive controls **≥ 24×24 CSS px** or **24px** spacing so hit areas do not overlap — use **`min-h-6 min-w-6` / `size-6`** for icon-only targets; avoid **`size-4`** as the sole target.
18
18
  5. **Contrast:** normal text **≥ 4.5:1**; UI components / focus where required **≥ 3:1**; muted text on tinted surfaces use tokens against the correct surface (e.g. sidebar), not only `--background`.
19
19
  6. **Minimum text size:** visible product copy **≥ 11px** — use **`text-xs`** or larger; **MUST NOT** use arbitrary Tailwind font sizes below that (see **`apps/web/AGENTS.md` §8.3**, **`apps/web/app/globals.css`** `--text-xs`).
20
- 7. **Dialogs / sheets / drawers:** must expose a **Title** (`DialogTitle` / `SheetTitle` / `DrawerTitle`); use **`sr-only`** if visually hidden (shadcn pattern).
20
+ 7. **Dialogs / sheets:** must expose a **Title** (`DialogTitle` / `SheetTitle`); use **`sr-only`** if visually hidden (shadcn pattern).
21
21
  8. **Format hints are persistent, not placeholders (SC 3.3.2 Labels or Instructions, 1.3.1).** Any field that expects a specific format — **date, time, phone, currency, ID pattern, GPA scale, URL, hours, unit-bearing numbers** — MUST show the format as **persistent helper text** via **`FormDescription`** (or the field's description slot). Placeholders disappear on focus and are unreliable for AT, so **MUST NOT** be the sole carrier of the format. Example: GPA → "Out of 4.0"; Date → "MM/DD/YYYY"; Phone → "+1 (555) 555-0100"; Student ID → "STU-YYYY-####". Pair with `inputMode`, `pattern`, or a picker primitive (e.g. `DatePickerField`) where applicable; never rely on a free-text date input.
22
22
  9. **Every icon that communicates information MUST have a text alternative** — not just icon-only buttons. Three cases (SC 1.1.1 Non-text Content, 3.3.2 Labels or Instructions, 2.4.6 Headings and Labels):
23
23
 
@@ -7,16 +7,16 @@ alwaysApply: true
7
7
 
8
8
  ## MUST
9
9
 
10
- 1. **Drawer / sheet** — Hub-**adjacent** work where **parent context** (list, filters, selection) stays relevant: properties, export, invites, long option lists beside the grid.
10
+ 1. **Sheet panel** — Hub-**adjacent** work where **parent context** (list, filters, selection) stays relevant: properties, export, invites, long option lists beside the grid. Use **`Sheet`** (`showOverlay={false}`, floating inset) — **MUST NOT** add a Vaul `Drawer` primitive.
11
11
  2. **Dialog** — **Blocking**, **short** focus: destructive confirm, legal/acknowledgment, single-step choice, alert when the user must not interact with the page behind until resolved.
12
12
  3. **Route** — **Primary**, **long**, or **bookmarkable** flows — **`AGENTS.md` §6.4**, **`.cursor/rules/exxat-page-vs-drawer.mdc`**.
13
13
 
14
14
  ## MUST NOT
15
15
 
16
- - Put **irreversible delete** only in a dismissible toast — use **dialog** (or drawer with explicit confirm) per **`exxat-no-toast.mdc`**.
17
- - Use a **centered dialog** for **wide tables of export columns** when a **drawer** matches mental model and space.
16
+ - Put **irreversible delete** only in a dismissible toast — use **dialog** (or sheet with explicit confirm) per **`exxat-no-toast.mdc`**.
17
+ - Use a **centered dialog** for **wide tables of export columns** when a **sheet panel** matches mental model and space.
18
18
 
19
19
  ## See also
20
20
 
21
21
  - **`docs/drawer-vs-dialog-pattern.md`** · **`.cursor/skills/exxat-drawer-vs-dialog/SKILL.md`**
22
- - **`exxat-page-vs-drawer.mdc`** (drawer vs **route**)
22
+ - **`exxat-page-vs-drawer.mdc`** (sheet vs **route**)
@@ -41,6 +41,10 @@ Before implementing or reviewing **list / table / board / dashboard / data-heavy
41
41
  26. **Blueprints + selection guide** — **`apps/web/docs/blueprints/`** + **`apps/web/docs/component-selection-guide.md`** — framework-agnostic specs + decision tree across the whole DS. Start there before composing a new hub.
42
42
  27. **Migrations** — **`apps/web/docs/migrations/`** — every deprecation gets a numbered entry (`NNNN-<slug>.md`). Token deprecations surface in `tokens/hooks-index.json` as `deprecated: true` and are lint-flagged.
43
43
  28. **Hub supported views (Add view parity)** — **`exxat-hub-supported-views.mdc`** + **`docs/exxat-ds/patterns/hub-supported-views-pattern.md`** — **`FULL_HUB_SUPPORTED_VIEWS`** (seven views, same as Library); sync **`ListPageTemplate`** + **`HubTable`**; real renderers per view; **`LibraryTable`** for **`LibraryItem`** catalogs; **`tokens-hub-auxiliary-views.tsx`** for tokens.
44
+ 29. **No Vaul** — **`exxat-no-vaul.mdc`** — side panels = **`Sheet`** only; remove **`vaul`** from consumer apps on **`@exxatdesignux/ui@0.5.3+`**.
45
+ 30. **Tabs chrome** — **`exxat-tabs-chrome.mdc`** — hub views = **`ListPageTemplate`** toolbar (`w-max`); record tabs = **`TabsList`** `w-fit`, never full-width stretch.
46
+ 31. **Page header actions** — **`exxat-page-header-actions.mdc`** — filled primary + outline overflow; no hand-built grey buttons.
47
+ 32. **Table row preview** — **`exxat-table-row-preview.mdc`** — **`HoverCard`** + DS badges/cells; no bespoke popover cards.
44
48
 
45
49
  ## Also read
46
50
 
@@ -51,7 +55,7 @@ Before implementing or reviewing **list / table / board / dashboard / data-heavy
51
55
  - **`apps/web/docs/blueprints/`** — framework-agnostic specs (start: `page-header.md`, `data-table.md`).
52
56
  - **`apps/web/docs/migrations/`** — token rename + removal history.
53
57
  - **`packages/ui/tokens/hooks-index.json`** — machine-readable token index (regenerate via `pnpm --filter @exxatdesignux/ui tokens:index`).
54
- - `.cursor/rules/exxat-data-tables.mdc`, **`exxat-hub-supported-views.mdc`**, `exxat-list-page-connected-views.mdc`, **`exxat-centralized-list-dataset.mdc`**, **`exxat-list-page-view-shells.mdc`**, **`exxat-fontawesome-icons.mdc`**, **`exxat-mono-ids.mdc`**, **`exxat-primary-nav-secondary-panel.mdc`**, **`exxat-library-hub-header.mdc`**, **`exxat-collaboration-access.mdc`**, **`exxat-dedicated-search-surfaces.mdc`**, **`exxat-kpi-trends.mdc`**, **`exxat-kpi-flat-band.mdc`**, **`exxat-drawer-vs-dialog.mdc`**, **`exxat-card-vs-list-rows.mdc`**, **`exxat-kpi-max-four.mdc`**, **`exxat-reuse-before-custom.mdc`**, `exxat-table-properties-drawer.mdc`, **`exxat-board-cards.mdc`**, **`exxat-page-vs-drawer.mdc`**, **`exxat-no-toast.mdc`**, **`exxat-command-menu.mdc`**, `exxat-kbd-shortcuts.mdc`, `exxat-accessibility.mdc` at repo root; **`apps/web/.cursor/rules/exxat-dashboard-view-charts.mdc`** for Data tab charts.
58
+ - `.cursor/rules/exxat-data-tables.mdc`, **`exxat-hub-supported-views.mdc`**, **`exxat-no-vaul.mdc`**, **`exxat-tabs-chrome.mdc`**, **`exxat-page-header-actions.mdc`**, **`exxat-table-row-preview.mdc`**, `exxat-list-page-connected-views.mdc`, **`exxat-centralized-list-dataset.mdc`**, **`exxat-list-page-view-shells.mdc`**, **`exxat-fontawesome-icons.mdc`**, **`exxat-mono-ids.mdc`**, **`exxat-primary-nav-secondary-panel.mdc`**, **`exxat-library-hub-header.mdc`**, **`exxat-collaboration-access.mdc`**, **`exxat-dedicated-search-surfaces.mdc`**, **`exxat-kpi-trends.mdc`**, **`exxat-kpi-flat-band.mdc`**, **`exxat-drawer-vs-dialog.mdc`**, **`exxat-card-vs-list-rows.mdc`**, **`exxat-kpi-max-four.mdc`**, **`exxat-reuse-before-custom.mdc`**, `exxat-table-properties-drawer.mdc`, **`exxat-board-cards.mdc`**, **`exxat-page-vs-drawer.mdc`**, **`exxat-no-toast.mdc`**, **`exxat-command-menu.mdc`**, `exxat-kbd-shortcuts.mdc`, `exxat-accessibility.mdc` at repo root; **`apps/web/.cursor/rules/exxat-dashboard-view-charts.mdc`** for Data tab charts.
55
59
  - **`apps/web/docs/kpi-flat-band-pattern.md`**, **`apps/web/docs/shell-surface-elevation-pattern.md`** — flat KPI strip + sidebar/secondary/page OKLCH stack.
56
60
  - **`apps/web/docs/library-hub-header-pattern.md`** — folder-scoped library header **Customize folder**.
57
61
  - **`apps/web/docs/collaboration-access-pattern.md`** — shared hub face rail + invite sheet.
@@ -0,0 +1,25 @@
1
+ ---
2
+ description: Exxat DS — no Vaul Drawer primitive; side panels use Sheet only
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Exxat DS — no Vaul
7
+
8
+ ## MUST
9
+
10
+ - Side panels (export, properties, invite, folder create) use **`Sheet`** from `@exxatdesignux/ui/components/sheet` with the floating inset pattern (`showOverlay={false}`, `getFloatingSheetInsetProps`).
11
+ - Product code names may end in `*Drawer` (`ExportDrawer`, `TablePropertiesDrawer`) — implementation is **`Sheet`**, not Vaul.
12
+
13
+ ## MUST NOT
14
+
15
+ - Add **`vaul`** to `package.json` or import `@/components/ui/drawer` / Vaul `Drawer`.
16
+ - Scaffold or extend the removed shadcn Vaul wrapper — it was deleted from `@exxatdesignux/ui@0.5.3+`.
17
+
18
+ ## Consumer apps
19
+
20
+ After upgrading to **`@exxatdesignux/ui@0.5.3`**, remove **`vaul`** from the app `package.json`, delete any local `components/ui/drawer.tsx` re-export, and re-run **`exxat-ui sync-extras`**.
21
+
22
+ ## See also
23
+
24
+ - **`.cursor/rules/exxat-drawer-vs-dialog.mdc`**
25
+ - **`docs/exxat-ds/patterns/drawer-vs-dialog-pattern.md`**
@@ -0,0 +1,31 @@
1
+ ---
2
+ description: Exxat DS — PageHeader actions slot; View as / overflow / primary CTA patterns
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Exxat DS — page header actions
7
+
8
+ **Blueprint:** `docs/exxat-ds/handbook/HANDBOOK.md` + `node_modules/@exxatdesignux/ui/template/docs/blueprints/page-header.md`
9
+
10
+ ## Anatomy (actions slot only)
11
+
12
+ | Control | DS pattern |
13
+ |---------|------------|
14
+ | **Primary CTA** | One **`Button`** `variant="default"` `size="lg"` (filled) — e.g. “Add student”, “Ask Leo” when it is the main action |
15
+ | **Secondary / scope** (“View as”, “All students”) | **`Button variant="outline" size="lg"`** + chevron, or **`Select`** / **`DropdownMenu`** trigger styled as outline button — **not** plain grey rectangles or unstyled `<button>` |
16
+ | **Overflow (⋯)** | **`Button variant="outline" size="icon-lg"`** (or `size="lg"` icon-only) opening **`DropdownMenu`** — Export, settings, invite |
17
+ | **Collaboration** | **`PageHeader variant="collaboration"`** face rail — not a custom avatar row |
18
+
19
+ ## MUST
20
+
21
+ - Compose **`PageHeader`** + pass **`actions`** as DS **`Button`** / **`DropdownMenu`** primitives.
22
+ - Keep **one** filled primary; put Export and long-tail items under **⋯**.
23
+
24
+ ## MUST NOT
25
+
26
+ - Hand-built header button rows that skip **`PageHeader`** and **`Button`** variants.
27
+ - Multiple filled primaries beside each other (e.g. “Ask Leo” + “Add student” both solid black unless product explicitly documents hierarchy — prefer outline for secondary).
28
+
29
+ ## Reference
30
+
31
+ - **`docs/exxat-ds/handbook/reference-implementations.md`**
@@ -0,0 +1,24 @@
1
+ ---
2
+ description: Exxat DS — table row identity preview uses HoverCard + DS tokens, not bespoke Popover cards
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Exxat DS — table row preview (hover / click)
7
+
8
+ When a **data table** cell opens a **rich preview** of a person or record (student, placement, team member):
9
+
10
+ ## MUST
11
+
12
+ - Use **`HoverCard`** (`@/components/ui/hover-card`) for hover-driven previews, or **`Popover`** only when the preview is **click-pinned** and small.
13
+ - Structure identity with **`AvatarInitials`**, name, **`font-mono tabular-nums`** on IDs only (**`exxat-mono-ids.mdc`**), **`ListHubStatusBadge`** + **`lib/list-status-badges.ts`** for status — **color + icon** (**`exxat-accessibility.mdc`** 1.4.1).
14
+ - Reuse table cell patterns from **`@/components/data-views`** (`PeopleAvatarRailCell`, `PillCell`, progress cells) — see **`columns-showcase.tsx`**.
15
+
16
+ ## MUST NOT
17
+
18
+ - Bespoke **`PopoverContent`** layouts with ad-hoc spacing, one-off progress bars, or status chips without the shared badge map.
19
+ - Raw email as the only identifier when a display name exists (**`exxat-person-identity-display.mdc`**).
20
+
21
+ ## Reference
22
+
23
+ - **`HoverCard`** docs in `packages/ui/src/components/ui/hover-card.tsx`
24
+ - **`apps/web/docs/blueprints/data-table.md`**
@@ -0,0 +1,31 @@
1
+ ---
2
+ description: Exxat DS — Tabs and view toolbars must not stretch full width; use ListPageTemplate for hub views
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Exxat DS — tabs chrome (no full-width stretch)
7
+
8
+ ## List hubs (All students, Placements, …)
9
+
10
+ **MUST** use **`ListPageTemplate`** view toolbar — `role="toolbar"` + **`w-max`** segmented control (`viewSegmentedToolbarClass`), **not** Radix **`Tabs`** stretched across the page.
11
+
12
+ - Reference: `packages/ui/src/components/templates/list-page.tsx` (views toolbar block).
13
+ - **MUST NOT** build a custom full-width tab bar for “All students · 16” + Add view.
14
+
15
+ ## Entity / record detail (Overview, Academics, Placements, …)
16
+
17
+ **MUST** use **`Tabs`**, **`TabsList`**, **`TabsTrigger`** from `@/components/ui/tabs`:
18
+
19
+ - **`TabsList`** defaults to **`inline-flex w-fit`** — **MUST NOT** pass `className="w-full"` or wrap the list in a full-width flex container that forces triggers to **`flex-1`**.
20
+ - Prefer **`variant="line"`** for record sub-nav under a **`PageHeader`** (`record-home` blueprint).
21
+ - **`TabsTrigger`** may use `flex-1` only inside a **`w-fit`** list with a fixed number of tabs — never inside a bar that spans the content column.
22
+
23
+ ## MUST NOT
24
+
25
+ - A single grey/white bar spanning the entire content width with tabs distributed edge-to-edge.
26
+ - Mix hub **view tabs** (table/list/board) with entity **section tabs** (Overview/Academics) — different patterns.
27
+
28
+ ## See also
29
+
30
+ - **`docs/exxat-ds/handbook/HANDBOOK.md`** — header never carries view tabs
31
+ - **`docs/exxat-ds/patterns/data-views-pattern.md`** — `ListPageTemplate` view toolbar
@@ -1,6 +1,6 @@
1
1
  # Exxat DS — drawer vs dialog
2
2
 
3
- Use when choosing **Radix `Dialog` / `AlertDialog`** vs **`Sheet` / `Drawer`** vs **route** for a flow.
3
+ Use when choosing **Radix `Dialog` / `AlertDialog`** vs **floating `Sheet` panels** vs **route** for a flow.
4
4
 
5
5
  ## Read first
6
6
 
@@ -10,11 +10,11 @@ Use when choosing **Radix `Dialog` / `AlertDialog`** vs **`Sheet` / `Drawer`** v
10
10
 
11
11
  ## Checklist
12
12
 
13
- 1. **Must the user see the hub while acting?** Yes → **drawer/sheet** (properties, export, invite). No and short → **dialog**. Long / own URL → **route**.
14
- 2. **Destructive confirm?** Prefer **dialog** (`AlertDialog`) unless the product explicitly keeps context in a drawer with the same safeguards.
15
- 3. **Title + focus** — Dialog/drawer/sheet all need an accessible **title**; restore focus to trigger on close.
13
+ 1. **Must the user see the hub while acting?** Yes → **`Sheet`** panel (properties, export, invite). No and short → **dialog**. Long / own URL → **route**.
14
+ 2. **Destructive confirm?** Prefer **dialog** (`AlertDialog`) unless the product explicitly keeps context in a sheet with the same safeguards.
15
+ 3. **Title + focus** — Dialog and sheet both need an accessible **title**; restore focus to trigger on close.
16
16
 
17
17
  ## Repo references
18
18
 
19
- - `TablePropertiesDrawer`, `ExportDrawer`, `InviteCollaboratorsDrawer` — drawer-class.
19
+ - `TablePropertiesDrawer`, `ExportDrawer`, `InviteCollaboratorsDrawer` — floating **`Sheet`** (names end in “Drawer” but implementation is `Sheet` only).
20
20
  - Delete / irreversible — dialog pattern, not toast (**`exxat-no-toast.mdc`**).
@@ -622,7 +622,7 @@ Full checklist in `references/accessibility.md`. Summary of the most-violated ru
622
622
  ### Structure
623
623
  - One `<main id="main-content" tabIndex={-1}>` per page
624
624
  - One `<h1>` per page (via `PageHeader`) — `SiteHeader` title is NOT an h1
625
- - `DialogTitle` / `SheetTitle` / `DrawerTitle` always present (use `className="sr-only"` if visually hidden)
625
+ - `DialogTitle` / `SheetTitle` always present (use `className="sr-only"` if visually hidden)
626
626
 
627
627
  ### ARIA roles
628
628
  - `role="tablist"` → only `role="tab"` children. **Never** put buttons, menus, or other controls inside `tablist`
@@ -879,7 +879,7 @@ Copy and complete for every list/table/hub page:
879
879
  - [ ] All icons: `aria-hidden="true"`; Ask Leo: `fa-duotone fa-solid fa-star-christmas text-brand`
880
880
  - [ ] **Every icon that communicates info has a text alternative** — Case A adjacent label (preferred), Case B `role="img"` + `aria-label` + `Tooltip` (calendar-for-date, status dot, trend arrow, icon-only legend), Case C `aria-label` + `Tooltip` on icon-only buttons; target ≥ 24×24 px. See §12 *Icons that communicate information*.
881
881
  - [ ] **`Kbd` inside a `Button` uses `variant="bare"`** (glue chords into one bare kbd); **`Kbd` inside `TooltipContent` uses the default tile** — see §11 Keyboard shortcuts
882
- - [ ] `DialogTitle`/`SheetTitle`/`DrawerTitle` present on every overlay
882
+ - [ ] `DialogTitle`/`SheetTitle` present on every overlay
883
883
  - [ ] `role="tablist"` contains only tab-role children
884
884
  - [ ] No new shadcn components, no hardcoded colors, no duplicate component abstractions
885
885
 
@@ -42,7 +42,7 @@ This is the single source of truth for all accessibility requirements in Exxat D
42
42
  - Heading hierarchy: one `<h1>` (via `PageHeader`), logical `<h2>` → `<h3>` (no skipping)
43
43
  - `SiteHeader` title in the breadcrumb bar is NOT an `<h1>`
44
44
  - Multiple `<nav>` elements: each must have `aria-label`
45
- - Modal/Sheet/Dialog: `DialogTitle`/`SheetTitle`/`DrawerTitle` ALWAYS present — use `sr-only` if visually hidden
45
+ - Modal/Sheet/Dialog: `DialogTitle`/`SheetTitle` ALWAYS present — use `sr-only` if visually hidden
46
46
  - `<aside>` panels: `aria-label` (e.g. "Ask Leo assistant", "Rotation navigation")
47
47
  - Data tables: `<table>` + `<thead>` + `<th scope="col">`; sortable columns: `aria-sort` on `<th>`
48
48
  - Listbox: `role="listbox"` + `role="option"` + `aria-selected`
@@ -64,8 +64,10 @@ Answer **yes / no / N/A** to each. A **no** means re-plan; you'll save a regener
64
64
  4. **≤ 4 KPIs on the primary strip?** — `KEY_METRICS_KPI_COUNT_MAX = 4`. A fifth becomes a `MetricInsight` or a chart.
65
65
  5. **No toasts for product feedback?** — use `LocalBanner` / `SystemBanner` / inline status. Toasts are reserved for build-tool messages.
66
66
  6. **Seven views + real bodies?** — `FULL_HUB_SUPPORTED_VIEWS` on **`ListPageTemplate`** + **`HubTable`** (sync both); every allowed view has a renderer; list uses **`ListPageBoardCard`** — not `["table"]` / `PRIMARY_HUB_SUPPORTED_VIEWS` / empty `renderers={}`.
67
+ 7. **Sheet only (no Vaul)?** — side panels use **`Sheet`**; **`vaul`** must not be in `package.json`.
68
+ 8. **Header + tabs + table preview?** — **`PageHeader`** + DS **`Button`** variants for actions; hub views via **`ListPageTemplate`** (not full-width tabs); record tabs **`TabsList`** `w-fit`; row preview via **`HoverCard`** + shared cells — not custom popovers.
67
69
 
68
- If all six are **yes**, generate. If any is **no**, either narrow the requirements
70
+ If all eight are **yes**, generate. If any is **no**, either narrow the requirements
69
71
  with **one** clarifying question or fix the gap silently and note it in your response.
70
72
 
71
73
  ---
@@ -84,7 +86,7 @@ When the user says "X", reach for "Y". Save the search.
84
86
  | chip, badge, status, tag | `Badge`, `ListHubStatusBadge`, `StatusBadge` | `@/components/{ui/badge,list-hub-status-badge}` |
85
87
  | dropdown, menu, ⋯ | `DropdownMenu` family | `@/components/ui/dropdown-menu` |
86
88
  | tooltip, hint | `Tip` (or `Tooltip`) | `@/components/ui/tip` |
87
- | sheet, drawer | `Sheet` family, `ExportDrawer`, `TablePropertiesDrawer` | `@/components/ui/sheet` |
89
+ | sheet, side panel | `Sheet` family, `ExportDrawer`, `TablePropertiesDrawer` | `@/components/ui/sheet` |
88
90
  | dialog, modal, confirm | `Dialog` family | `@/components/ui/dialog` |
89
91
  | table, list, grid (product data) | `HubTable` inside `ListPageTemplate` | `@/components/data-views` |
90
92
  | KPI, metric, stat | `KeyMetrics` + `MetricItem` | `@/components/key-metrics` |
@@ -29,8 +29,21 @@ Use it when you need to know **what files exist**, **how shims re-export** `@exx
29
29
 
30
30
  - Keep **`@exxatdesignux/ui`** on the same semver your team tested; prefer explicit **`^x.y.z`** or pinned **`x.y.z`**.
31
31
  - Match **`engines.node`** in your app to the value declared in **`node_modules/@exxatdesignux/ui/package.json`** (see CHANGELOG if it changed).
32
+ - **≥ 0.5.3:** Remove **`vaul`** from your app `package.json` and delete any `components/ui/drawer.tsx` shim — side panels use **`Sheet`** only (**`.cursor/rules/exxat-no-vaul.mdc`**).
32
33
 
33
- ## 5. Still stuck?
34
+ ## 5. Consumer UI audit (after sync-extras)
35
+
36
+ If the app was built before current agent rules, verify:
37
+
38
+ | Symptom | Fix |
39
+ |---------|-----|
40
+ | Full-width tab bar on list hub | Use **`ListPageTemplate`** view toolbar — **`exxat-tabs-chrome.mdc`** |
41
+ | Full-width Overview / Academics tabs | **`TabsList`** must stay **`w-fit`** — no `w-full` / `flex-1` stretch |
42
+ | Grey custom header buttons | **`PageHeader`** + **`Button`** variants — **`exxat-page-header-actions.mdc`** |
43
+ | Bespoke student popover in table | **`HoverCard`** + shared cells/badges — **`exxat-table-row-preview.mdc`** |
44
+ | Custom hub table / trimmed Add view | **`HubTable`** + **`FULL_HUB_SUPPORTED_VIEWS`** — **`exxat-hub-supported-views.mdc`** |
45
+
46
+ ## 6. Still stuck?
34
47
 
35
48
  - **`npx --package=@exxatdesignux/ui@latest exxat-ui doctor`** — compares local CLI version vs npm **`latest`**.
36
49
  - **`npx --package=@exxatdesignux/ui@latest exxat-ui update`** — install commands and reminders.
@@ -0,0 +1,50 @@
1
+ # Sheet panel vs dialog vs route
2
+
3
+ > **Related:** `docs/data-views-pattern.md` (Page vs drawer), **`AGENTS.md` §6.4**, **`.cursor/rules/exxat-page-vs-drawer.mdc`**. **This doc** splits **floating `Sheet` panels** vs **modal dialog** when both stay on the same route.
4
+
5
+ ## Sheet (side panel — product “drawers”)
6
+
7
+ **Use when:**
8
+
9
+ - The **list or hub behind the panel** still matters (user compares, copies, or dismisses and continues browsing).
10
+ - The flow is **medium length** — export options, table/column properties, invite collaborators, filters that mirror the grid.
11
+ - **Width** helps — tables of options, multi-field forms that would feel cramped in a narrow dialog.
12
+
13
+ **Implementation:** **`Sheet`** from `@exxatdesignux/ui/components/sheet` with the floating inset pattern (`showOverlay={false}`, `getFloatingSheetInsetProps`) — see `ExportDrawer`, `TablePropertiesDrawer`, `InviteCollaboratorsDrawer`, `LibraryNewFolderSheet`.
14
+
15
+ **Avoid when:** The task is the **only** thing the user should focus on and the parent would distract (prefer **dialog** for a sharp confirm, or **route** for a full wizard).
16
+
17
+ ## Dialog (modal)
18
+
19
+ **Use when:**
20
+
21
+ - You need a **hard stop** — user must answer or dismiss before interacting with the page again (confirm delete, acknowledge legal, pick a single blocking choice).
22
+ - The content is **short and focused** — one decision, one form step, or a compact message with primary/secondary actions.
23
+ - **Destructive or irreversible** actions — pair with clear copy; **Esc** / Cancel returns safely.
24
+
25
+ **Examples:** `AlertDialog`, confirm-before-remove, “Save changes?” when navigating away.
26
+
27
+ **Avoid when:** Users need to **reference** the grid or copy values from the page while the panel is open — use a **sheet panel** or **inline** pattern instead.
28
+
29
+ ## Route (new page)
30
+
31
+ Use when the work is **primary**, **long**, **multi-step**, or deserves its **own URL** — see **`exxat-page-vs-drawer.mdc`** and **`AGENTS.md` §6.4**.
32
+
33
+ ## Quick matrix
34
+
35
+ | Need | Sheet panel | Dialog | Route |
36
+ | --- | --- | --- | --- |
37
+ | Keep hub visible | Yes | No (blocks) | No |
38
+ | Short confirm / alert | Rare | Yes | Overkill |
39
+ | Long form / wizard | Cramped | No | Yes |
40
+ | Properties tied to a table | Yes | Too small | Optional |
41
+
42
+ ## Accessibility
43
+
44
+ - **Dialog / sheet:** Must expose a **title** (`DialogTitle`, `SheetTitle`) — use `sr-only` if visually hidden.
45
+ - **Focus trap** is expected in dialogs; sheet panels should still **restore focus** on close to the invoking control.
46
+
47
+ ## See also
48
+
49
+ - **`.cursor/rules/exxat-drawer-vs-dialog.mdc`**, **`.cursor/skills/exxat-drawer-vs-dialog/SKILL.md`**
50
+ - **`exxat-no-toast.mdc`** — use dialog/banner/inline, not toasts, for outcomes that need acknowledgment.
package/dist/index.d.ts CHANGED
@@ -52,7 +52,6 @@ export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGr
52
52
  export { DATE_PICKER_ICON_CLASS, DatePickerField, DatePickerFieldProps, DateTextInputField, DateTextInputFieldProps } from './components/ui/date-picker-field.js';
53
53
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './components/ui/dialog.js';
54
54
  export { DragHandleGripIcon } from './components/ui/drag-handle-grip.js';
55
- export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './components/ui/drawer.js';
56
55
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Shortcut, useShortcut } from './components/ui/dropdown-menu.js';
57
56
  export { ExportDrawer, ExportDrawerProps } from './components/ui/export-drawer.js';
58
57
  export { HoverCard, HoverCardContent, HoverCardTrigger } from './components/ui/hover-card.js';
@@ -115,7 +114,6 @@ import 'react-day-picker';
115
114
  import 'recharts';
116
115
  import 'cmdk';
117
116
  import '@radix-ui/react-dialog';
118
- import 'vaul';
119
117
  import 'react-hook-form';
120
118
  import 'sonner';
121
119
  import 'clsx';
package/dist/index.js CHANGED
@@ -20,7 +20,6 @@ import { motion } from 'motion/react';
20
20
  import * as RechartsPrimitive from 'recharts';
21
21
  import { Command as Command$1 } from 'cmdk';
22
22
  import * as DialogPrimitive2 from '@radix-ui/react-dialog';
23
- import { Drawer as Drawer$1 } from 'vaul';
24
23
  import { usePaymentInputs } from 'react-payment-inputs';
25
24
  export { usePaymentInputs } from 'react-payment-inputs';
26
25
  import images from 'react-payment-inputs/images';
@@ -10653,118 +10652,6 @@ function ContextMenuShortcut({
10653
10652
  }
10654
10653
  );
10655
10654
  }
10656
- function Drawer({
10657
- ...props
10658
- }) {
10659
- return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
10660
- }
10661
- function DrawerTrigger({
10662
- ...props
10663
- }) {
10664
- return /* @__PURE__ */ jsx(Drawer$1.Trigger, { "data-slot": "drawer-trigger", ...props });
10665
- }
10666
- function DrawerPortal({
10667
- ...props
10668
- }) {
10669
- return /* @__PURE__ */ jsx(Drawer$1.Portal, { "data-slot": "drawer-portal", ...props });
10670
- }
10671
- function DrawerClose({
10672
- ...props
10673
- }) {
10674
- return /* @__PURE__ */ jsx(Drawer$1.Close, { "data-slot": "drawer-close", ...props });
10675
- }
10676
- function DrawerOverlay({
10677
- className,
10678
- ...props
10679
- }) {
10680
- return /* @__PURE__ */ jsx(
10681
- Drawer$1.Overlay,
10682
- {
10683
- "data-slot": "drawer-overlay",
10684
- className: cn(
10685
- "fixed inset-0 z-50 bg-overlay duration-300 ease-out supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
10686
- className
10687
- ),
10688
- ...props
10689
- }
10690
- );
10691
- }
10692
- function DrawerContent({
10693
- className,
10694
- children,
10695
- ...props
10696
- }) {
10697
- return /* @__PURE__ */ jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [
10698
- /* @__PURE__ */ jsx(DrawerOverlay, {}),
10699
- /* @__PURE__ */ jsxs(
10700
- Drawer$1.Content,
10701
- {
10702
- "data-slot": "drawer-content",
10703
- className: cn(
10704
- "group/drawer-content fixed z-50 flex h-auto flex-col bg-background text-sm duration-300 ease-out outline-none data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:start-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-e-xl data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:end-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-s-xl data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
10705
- className
10706
- ),
10707
- ...props,
10708
- children: [
10709
- /* @__PURE__ */ jsx("div", { className: "mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
10710
- children
10711
- ]
10712
- }
10713
- )
10714
- ] });
10715
- }
10716
- function DrawerHeader({ className, ...props }) {
10717
- return /* @__PURE__ */ jsx(
10718
- "div",
10719
- {
10720
- "data-slot": "drawer-header",
10721
- className: cn(
10722
- "flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-start",
10723
- className
10724
- ),
10725
- ...props
10726
- }
10727
- );
10728
- }
10729
- function DrawerFooter({ className, ...props }) {
10730
- return /* @__PURE__ */ jsx(
10731
- "div",
10732
- {
10733
- "data-slot": "drawer-footer",
10734
- className: cn("mt-auto flex flex-col gap-2 p-4", className),
10735
- ...props
10736
- }
10737
- );
10738
- }
10739
- function DrawerTitle({
10740
- className,
10741
- ...props
10742
- }) {
10743
- return /* @__PURE__ */ jsx(
10744
- Drawer$1.Title,
10745
- {
10746
- "data-slot": "drawer-title",
10747
- className: cn(
10748
- "font-heading text-base font-medium text-foreground",
10749
- className
10750
- ),
10751
- ...props
10752
- }
10753
- );
10754
- }
10755
- function DrawerDescription({
10756
- className,
10757
- ...props
10758
- }) {
10759
- return /* @__PURE__ */ jsx(
10760
- Drawer$1.Description,
10761
- {
10762
- "data-slot": "drawer-description",
10763
- className: cn("text-sm text-muted-foreground", className),
10764
- ...props
10765
- }
10766
- );
10767
- }
10768
10655
  function HoverCard({
10769
10656
  ...props
10770
10657
  }) {
@@ -13539,6 +13426,6 @@ function useCoachMark({
13539
13426
  };
13540
13427
  }
13541
13428
 
13542
- export { ALL_DATA_LIST_VIEW_TYPES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, AvatarInitials, AvatarLeoAssistant, AvatarNotificationCount, AvatarPlusAction, AvatarStatus, AvatarVerified, Badge, BoardCardIconRow, BoardCardTwoLineBlock, BoardNewCardPlaceholder, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, COACH_MARK_FLOW_COMPLETED_EVENT, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CheckboxLabel, CoachMark, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnRow, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CountSyncer, DATA_LIST_SURFACE_VIEW_TYPES, DATA_LIST_VIEW_REGISTRY, DATA_LIST_VIEW_TILES, DATE_PICKER_ICON_CLASS, DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME, DEFAULT_DATA_LIST_DISPLAY_OPTIONS, DROPDOWN_MENU_CONTENT_SURFACE_CLASS, DataRowList, DataTable, DataTablePaginated, DataTableToolbar, DatePickerField, DateTextInputField, DedicatedSearchLandingTemplate, DedicatedSearchResultsHeaderChrome, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DragHandleGripIcon, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFilterCard, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSortCard, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ExportDrawer, FULL_HUB_SUPPORTED_VIEWS, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FilterDateCalendar, FilterTextValueInput, FinderGroupStrip, FinderPanelView, FolderGridView, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GroupsColumn, HoverCard, HoverCardContent, HoverCardTrigger, HubRecordCard, HubTable, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Kbd, KbdGroup, KeyMetrics, KeyMetricsContent, KeyMetricsProvider, LIST_PAGE_SPLIT_HUB_HEIGHT_STYLE, LIST_PAGE_SPLIT_MILLER_COLUMN_PANEL_CLASS, LIST_PAGE_SPLIT_MILLER_DETAIL_PANEL_CLASS, LIST_PAGE_SPLIT_RESIZABLE_HANDLE_CLASS, LIST_PAGE_VIEW_FRAME_GUTTER, LIST_PAGE_VIEW_FRAME_MAX_ICON_GRID, LIST_PAGE_VIEW_FRAME_MAX_WIDE, Label, ListPageBoardCard, ListPageBoardCardAvatar, ListPageBoardCardBadgeRow, ListPageBoardCardBody, ListPageBoardCardHeader, ListPageBoardCardSecondary, ListPageBoardCardTitleRow, ListPageBoardTemplate, ListPageConnectedViewBody, ListPageSplitDetailsPlaceholder, ListPageSplitHubChrome, ListPageTemplate, ListPageTreeColumnHeader, ListPageTreePanelShell, ListPageViewFrame, ListPageViewNotConfigured, LocalBanner, MaskedInput, NestedSecondaryPanelShell, OPERATOR_LABELS, OS_FOLDER_GLYPH_SRC, OUTLINE_TREE_CHEVRON_GUIDE_SPACER_CLASS, OUTLINE_TREE_COLLAPSIBLE_CONTENT_RAIL_CLASS, OUTLINE_TREE_SUB_ROW_SHIFT_CLASS, OsFolderGlyph, OutlineTreeCollapsibleContentRail, OutlineTreeLeafButton, OutlineTreeMenu, OutlineTreeMenuItem, OutlineTreeSub, OutlineTreeSubItem, PRIMARY_HUB_SUPPORTED_VIEWS, PageHeader, PaginationBar, PaymentCardFieldsGroup, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ROW_HEIGHT_TILES, RULE_COLORS, RadioGroup, RadioGroupItem, RadioGroupLabel, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectionTileGrid, Separator2 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Shortcut, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, StatusBadge, SystemBanner, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TablePropertiesDrawer, TablePropertiesDrawerButton, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Tip, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToggleSwitch, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIEW_TYPES, ViewSegmentedControl, avatarRootVariants, badgeVariants, buildNavHashClaims, buttonVariants, chartTooltipKeyboardSyncProps, checkboxVariants, cn, collectNavUrls, columnsToFieldDefinitions, columnsToFilterFields, composeRefs, conditionalRuleMatchesRow, createListPageEditViewHandler, dataListViewAddShortcut, dataListViewDefinition, dataListViewIcon, dataListViewLabel, dataListViewSelectionTilesForHub, dataListViewTilesForHub, devLog, exxatInputMaskDefaults, exxatMaskPatterns, exxatTimeMaskOptions, formatDateFromDate, formatDateTimeUS, formatDateUS, formatYmdForDisplay, getAllCoachMarkKeys, getConditionalCellBackground, getConditionalRowBackground, getDataListViewRenderKind, isDataListSurfaceViewType, isDataListViewTypeSupported, isEditableTarget, isNavHrefActive, lineClampClass, localDateToYmd, metricTrendAriaQualifier, metricTrendTone, navUrlFragment, navUrlPath, normalizePathname, normalizedLocationHash, parseRowDateToYmd, radioGroupItemVariants, rafThrottle, resetAllCoachMarks, resetCoachMarkFlow, resolveActiveNavHref, selectionTileClassNames, selectionTilePreviewClassNames, showsListPageHubMetricsStrip, statusBadgeVariants, tabsListVariants, toggleVariants, useAltKeyLabel, useAppTheme, useCoachMark, useDraggableList, useExxatCustomMask, useExxatDateMDYMask, useExxatMaskedFieldRef, useExxatPhoneMask, useExxatTimeMask, useExxatZipMask, useFormField, useIsMobile, useKeyMetricsContext, useModKeyLabel, useShortcut, useSidebar, useTableState, usesDashboardSurface, usesDataTableComponent, usesToolbarWithFilteredRows, viewSegmentedButtonClass, viewSegmentedToolbarClass, ymdToLocalDate };
13429
+ export { ALL_DATA_LIST_VIEW_TYPES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, AvatarInitials, AvatarLeoAssistant, AvatarNotificationCount, AvatarPlusAction, AvatarStatus, AvatarVerified, Badge, BoardCardIconRow, BoardCardTwoLineBlock, BoardNewCardPlaceholder, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, COACH_MARK_FLOW_COMPLETED_EVENT, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CheckboxLabel, CoachMark, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnRow, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CountSyncer, DATA_LIST_SURFACE_VIEW_TYPES, DATA_LIST_VIEW_REGISTRY, DATA_LIST_VIEW_TILES, DATE_PICKER_ICON_CLASS, DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME, DEFAULT_DATA_LIST_DISPLAY_OPTIONS, DROPDOWN_MENU_CONTENT_SURFACE_CLASS, DataRowList, DataTable, DataTablePaginated, DataTableToolbar, DatePickerField, DateTextInputField, DedicatedSearchLandingTemplate, DedicatedSearchResultsHeaderChrome, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DragHandleGripIcon, DrawerFilterCard, DrawerSortCard, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ExportDrawer, FULL_HUB_SUPPORTED_VIEWS, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FilterDateCalendar, FilterTextValueInput, FinderGroupStrip, FinderPanelView, FolderGridView, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GroupsColumn, HoverCard, HoverCardContent, HoverCardTrigger, HubRecordCard, HubTable, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Kbd, KbdGroup, KeyMetrics, KeyMetricsContent, KeyMetricsProvider, LIST_PAGE_SPLIT_HUB_HEIGHT_STYLE, LIST_PAGE_SPLIT_MILLER_COLUMN_PANEL_CLASS, LIST_PAGE_SPLIT_MILLER_DETAIL_PANEL_CLASS, LIST_PAGE_SPLIT_RESIZABLE_HANDLE_CLASS, LIST_PAGE_VIEW_FRAME_GUTTER, LIST_PAGE_VIEW_FRAME_MAX_ICON_GRID, LIST_PAGE_VIEW_FRAME_MAX_WIDE, Label, ListPageBoardCard, ListPageBoardCardAvatar, ListPageBoardCardBadgeRow, ListPageBoardCardBody, ListPageBoardCardHeader, ListPageBoardCardSecondary, ListPageBoardCardTitleRow, ListPageBoardTemplate, ListPageConnectedViewBody, ListPageSplitDetailsPlaceholder, ListPageSplitHubChrome, ListPageTemplate, ListPageTreeColumnHeader, ListPageTreePanelShell, ListPageViewFrame, ListPageViewNotConfigured, LocalBanner, MaskedInput, NestedSecondaryPanelShell, OPERATOR_LABELS, OS_FOLDER_GLYPH_SRC, OUTLINE_TREE_CHEVRON_GUIDE_SPACER_CLASS, OUTLINE_TREE_COLLAPSIBLE_CONTENT_RAIL_CLASS, OUTLINE_TREE_SUB_ROW_SHIFT_CLASS, OsFolderGlyph, OutlineTreeCollapsibleContentRail, OutlineTreeLeafButton, OutlineTreeMenu, OutlineTreeMenuItem, OutlineTreeSub, OutlineTreeSubItem, PRIMARY_HUB_SUPPORTED_VIEWS, PageHeader, PaginationBar, PaymentCardFieldsGroup, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ROW_HEIGHT_TILES, RULE_COLORS, RadioGroup, RadioGroupItem, RadioGroupLabel, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectionTileGrid, Separator2 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Shortcut, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, StatusBadge, SystemBanner, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TablePropertiesDrawer, TablePropertiesDrawerButton, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Tip, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToggleSwitch, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIEW_TYPES, ViewSegmentedControl, avatarRootVariants, badgeVariants, buildNavHashClaims, buttonVariants, chartTooltipKeyboardSyncProps, checkboxVariants, cn, collectNavUrls, columnsToFieldDefinitions, columnsToFilterFields, composeRefs, conditionalRuleMatchesRow, createListPageEditViewHandler, dataListViewAddShortcut, dataListViewDefinition, dataListViewIcon, dataListViewLabel, dataListViewSelectionTilesForHub, dataListViewTilesForHub, devLog, exxatInputMaskDefaults, exxatMaskPatterns, exxatTimeMaskOptions, formatDateFromDate, formatDateTimeUS, formatDateUS, formatYmdForDisplay, getAllCoachMarkKeys, getConditionalCellBackground, getConditionalRowBackground, getDataListViewRenderKind, isDataListSurfaceViewType, isDataListViewTypeSupported, isEditableTarget, isNavHrefActive, lineClampClass, localDateToYmd, metricTrendAriaQualifier, metricTrendTone, navUrlFragment, navUrlPath, normalizePathname, normalizedLocationHash, parseRowDateToYmd, radioGroupItemVariants, rafThrottle, resetAllCoachMarks, resetCoachMarkFlow, resolveActiveNavHref, selectionTileClassNames, selectionTilePreviewClassNames, showsListPageHubMetricsStrip, statusBadgeVariants, tabsListVariants, toggleVariants, useAltKeyLabel, useAppTheme, useCoachMark, useDraggableList, useExxatCustomMask, useExxatDateMDYMask, useExxatMaskedFieldRef, useExxatPhoneMask, useExxatTimeMask, useExxatZipMask, useFormField, useIsMobile, useKeyMetricsContext, useModKeyLabel, useShortcut, useSidebar, useTableState, usesDashboardSurface, usesDataTableComponent, usesToolbarWithFilteredRows, viewSegmentedButtonClass, viewSegmentedToolbarClass, ymdToLocalDate };
13543
13430
  //# sourceMappingURL=index.js.map
13544
13431
  //# sourceMappingURL=index.js.map