@exxatdesignux/ui 0.5.2 → 0.5.3

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 (82) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/consumer-extras/cursor-rules/exxat-data-tables.mdc +8 -6
  3. package/consumer-extras/cursor-rules/exxat-ds-agents.mdc +2 -1
  4. package/consumer-extras/cursor-rules/exxat-hub-supported-views.mdc +54 -0
  5. package/consumer-extras/cursor-rules/exxat-nav-single-active.mdc +31 -0
  6. package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +8 -3
  7. package/consumer-extras/cursor-skills/exxat-ds-skill/references/data-table-pattern.md +15 -5
  8. package/consumer-extras/cursor-skills/exxat-token-economy/SKILL.md +11 -4
  9. package/consumer-extras/handbook/HANDBOOK.md +1 -1
  10. package/consumer-extras/handbook/reference-implementations.md +2 -2
  11. package/consumer-extras/patterns/data-views-pattern.md +6 -0
  12. package/consumer-extras/patterns/hub-supported-views-pattern.md +53 -0
  13. package/dist/components/data-table/index.js +13 -9
  14. package/dist/components/data-table/index.js.map +1 -1
  15. package/dist/components/data-table/pagination.js +13 -9
  16. package/dist/components/data-table/pagination.js.map +1 -1
  17. package/dist/components/data-views/hub-table.d.ts +8 -4
  18. package/dist/components/data-views/hub-table.js +25 -10
  19. package/dist/components/data-views/hub-table.js.map +1 -1
  20. package/dist/components/data-views/index.d.ts +1 -1
  21. package/dist/components/data-views/index.js +25 -10
  22. package/dist/components/data-views/index.js.map +1 -1
  23. package/dist/components/data-views/list-page-connected-view-body.d.ts +1 -1
  24. package/dist/components/data-views/list-page-connected-view-body.js +1 -0
  25. package/dist/components/data-views/list-page-connected-view-body.js.map +1 -1
  26. package/dist/components/table-properties/drawer-button.js +1 -0
  27. package/dist/components/table-properties/drawer-button.js.map +1 -1
  28. package/dist/components/table-properties/drawer.js +1 -0
  29. package/dist/components/table-properties/drawer.js.map +1 -1
  30. package/dist/components/table-properties/index.d.ts +1 -1
  31. package/dist/components/table-properties/index.js +1 -0
  32. package/dist/components/table-properties/index.js.map +1 -1
  33. package/dist/components/templates/index.d.ts +1 -1
  34. package/dist/components/templates/index.js +12 -2
  35. package/dist/components/templates/index.js.map +1 -1
  36. package/dist/components/templates/list-page.d.ts +4 -2
  37. package/dist/components/templates/list-page.js +12 -2
  38. package/dist/components/templates/list-page.js.map +1 -1
  39. package/dist/{data-list-view-registry-CyBoBML4.d.ts → data-list-view-registry-BstmlfQ3.d.ts} +16 -1
  40. package/dist/index.d.ts +2 -1
  41. package/dist/index.js +135 -13
  42. package/dist/index.js.map +1 -1
  43. package/dist/lib/data-list-view-registry.d.ts +1 -1
  44. package/dist/lib/data-list-view-registry.js +17 -1
  45. package/dist/lib/data-list-view-registry.js.map +1 -1
  46. package/dist/lib/data-list-view-surface.d.ts +1 -1
  47. package/dist/lib/data-list-view-surface.js +1 -0
  48. package/dist/lib/data-list-view-surface.js.map +1 -1
  49. package/dist/lib/list-page-table-properties.d.ts +1 -1
  50. package/dist/lib/list-page-table-properties.js +1 -0
  51. package/dist/lib/list-page-table-properties.js.map +1 -1
  52. package/dist/lib/nav-active.d.ts +38 -0
  53. package/dist/lib/nav-active.js +104 -0
  54. package/dist/lib/nav-active.js.map +1 -0
  55. package/package.json +1 -1
  56. package/src/components/data-table/index.tsx +25 -17
  57. package/src/components/data-views/hub-table.tsx +9 -3
  58. package/src/components/templates/list-page.tsx +9 -3
  59. package/src/index.ts +1 -0
  60. package/src/lib/data-list-view-registry.ts +31 -0
  61. package/src/lib/nav-active.ts +162 -0
  62. package/template/.claude/skills/exxat-ds-skill/SKILL.md +2 -1
  63. package/template/AGENTS.md +16 -1
  64. package/template/components/columns-client.tsx +3 -2
  65. package/template/components/columns-showcase.tsx +22 -18
  66. package/template/components/exxat-product-logo.tsx +1 -1
  67. package/template/components/library-table.tsx +62 -23
  68. package/template/components/new-library-item-form.tsx +0 -7
  69. package/template/components/product-wordmark.tsx +1 -1
  70. package/template/components/sidebar/app-sidebar.tsx +14 -106
  71. package/template/components/sidebar/secondary-nav.tsx +22 -4
  72. package/template/components/tokens-hub-auxiliary-views.tsx +301 -0
  73. package/template/components/tokens-themes-client.tsx +44 -16
  74. package/template/docs/HANDBOOK.md +1 -1
  75. package/template/docs/data-views-pattern.md +6 -0
  76. package/template/docs/glossary.md +2 -1
  77. package/template/docs/hub-supported-views-pattern.md +53 -0
  78. package/template/docs/reference-implementations.md +2 -2
  79. package/template/lib/full-hub-supported-views.ts +8 -0
  80. package/template/lib/library-supported-views.ts +5 -12
  81. package/template/package.json +1 -0
  82. package/tokens/hooks-index.json +2 -2
@@ -0,0 +1,53 @@
1
+ # Hub supported views pattern (Add view parity)
2
+
3
+ > **Agents:** `.cursor/rules/exxat-hub-supported-views.mdc` (binding). **Reference hub:** Library / All questions (`library-table.tsx`, `library-client.tsx`).
4
+
5
+ ## Problem this solves
6
+
7
+ `ListPageTemplate` filters **Add view** and Properties view tiles from `supportedViewTypes`. If Column types passes four views but Library passes seven, users see inconsistent menus. If a hub allows Board but has no `board-with-toolbar` renderer, users see **“does not implement Board view”**.
8
+
9
+ ## Canonical allowlist
10
+
11
+ Import from the registry (single source of truth):
12
+
13
+ ```ts
14
+ import { FULL_HUB_SUPPORTED_VIEWS } from "@/lib/data-list-view-registry"
15
+ // or
16
+ import { LIBRARY_SUPPORTED_VIEWS } from "@/lib/library-supported-views" // alias of FULL
17
+ ```
18
+
19
+ Seven views: **table**, **list**, **board**, **dashboard**, **folder**, **panel**, **tree-panel**.
20
+
21
+ `HubTable` and `ListPageTemplate` use this list when `supportedViewTypes` is omitted.
22
+
23
+ `PRIMARY_HUB_SUPPORTED_VIEWS` (four views) remains for hubs that intentionally omit folder/panel/tree — document that in `lib/<entity>-supported-views.ts`.
24
+
25
+ ## Wiring checklist
26
+
27
+ 1. **`ListPageTemplate`** — `supportedViewTypes={FULL_HUB_SUPPORTED_VIEWS}` (or entity alias).
28
+ 2. **`HubTable`** — same allowlist (or omit on both).
29
+ 3. **List** — `renderListRow` returning **`ListPageBoardCard`** `layout="row"` (copy from `library-table.tsx`).
30
+ 4. **Board** — `renderBoardCard` + `boardGroups` and/or `renderers["board-with-toolbar"]`.
31
+ 5. **Dashboard** — `renderers["dashboard-with-toolbar"]` with **`KeyMetrics`** on filtered rows.
32
+ 6. **Folder / panel / tree** — explicit `renderers` entries (Library reference) or **`LibraryTable`** for `LibraryItem` rows.
33
+
34
+ ## Special cases in this app
35
+
36
+ | Hub | Pattern |
37
+ |-----|---------|
38
+ | **Library / All questions** | `LibraryTable` + `LIBRARY_SUPPORTED_VIEWS` — reference |
39
+ | **Column types** | `LibraryTable` with `columnDefs` + `hubLabels` + `DEFAULT_LIBRARY_FOLDERS` — custom table, shared other views |
40
+ | **Tokens & themes** | `FULL_HUB_SUPPORTED_VIEWS` + `tokens-hub-auxiliary-views.tsx` |
41
+ | **New entity hub** | Start from `library-table.tsx` or token/columns references; never table-only unless approved |
42
+
43
+ ## Anti-patterns
44
+
45
+ - `supportedViewTypes={["table"]}` on a `ListPageTemplate` hub.
46
+ - `COLUMNS_SUPPORTED_VIEWS = PRIMARY_HUB_SUPPORTED_VIEWS` without board/folder/panel/tree renderers.
47
+ - Minimal `renderListRow` with only stem + `questionId` (not product list UI).
48
+
49
+ ## See also
50
+
51
+ - `packages/ui/src/lib/data-list-view-registry.ts`
52
+ - `apps/web/docs/data-views-pattern.md`
53
+ - `apps/web/lib/hub-connected-view-renderers.ts` — `defineHubViewRenderers` dev warnings
@@ -25,9 +25,9 @@ If you find yourself diverging from the reference page, ask **why** before shipp
25
25
  | Full hub: table + board + dashboard + list + paginated + conditional rules + dashboard customize | `apps/web/components/library-table.tsx` + `library-hub-client.tsx` | [`list-page-template`](./blueprints/list-page-template.md), [`data-table`](./blueprints/data-table.md), [`board-card`](./blueprints/board-card.md), [`key-metrics`](./blueprints/key-metrics.md) | [`exxat-data-tables`](../../../.cursor/rules/exxat-data-tables.mdc), [`exxat-list-page-connected-views`](../../../.cursor/rules/exxat-list-page-connected-views.mdc), [`exxat-centralized-list-dataset`](../../../.cursor/rules/exxat-centralized-list-dataset.mdc) | [`data-views-pattern`](./data-views-pattern.md) |
26
26
  | Hub with secondary panel scope (folder rail) | `apps/web/components/library-hub-client.tsx` + `library-secondary-nav.tsx` | [`list-page-template`](./blueprints/list-page-template.md) | [`exxat-primary-nav-secondary-panel`](../../../.cursor/rules/exxat-primary-nav-secondary-panel.mdc), [`exxat-library-hub-header`](../../../.cursor/rules/exxat-library-hub-header.mdc) | [`library-hub-header-pattern`](./library-hub-header-pattern.md) |
27
27
  | Hub with secondary panel scope (URL-driven category rail) — **smallest** secondary-panel reference + built-in pagination chrome | `apps/web/components/tokens-themes-client.tsx` + `tokens-secondary-nav.tsx` | [`list-page-template`](./blueprints/list-page-template.md) | [`exxat-primary-nav-secondary-panel`](../../../.cursor/rules/exxat-primary-nav-secondary-panel.mdc) | [`shell-surface-elevation-pattern`](./shell-surface-elevation-pattern.md) |
28
- | Single-view showcase hub (table only) — **18 SaaS cell patterns**, each rendered by an **importable named cell** from `@/components/data-views` (see "Cell primitives" table below). Categories: select, primary identity + ID + favorite, avatar + name + email, avatar group +N, type pill, difficulty signal, status chip, inline toggle, tag list, rating stars, progress bar, currency, numeric, attachment count, external link, relative time, absolute date, row actions overflow. | `apps/web/components/columns-showcase.tsx` + `columns-client.tsx` | [`list-page-template`](./blueprints/list-page-template.md), [`data-table`](./blueprints/data-table.md) | [`exxat-data-tables`](../../../.cursor/rules/exxat-data-tables.mdc) | — |
28
+ | Cell-pattern catalog — **18 SaaS cell patterns** via custom `columnDefs`; **seven views** via **`LibraryTable`** (same Add view as Library). | `apps/web/components/columns-showcase.tsx` + `columns-client.tsx` | [`list-page-template`](./blueprints/list-page-template.md), [`data-table`](./blueprints/data-table.md), [`hub-supported-views-pattern`](./hub-supported-views-pattern.md) | [`exxat-data-tables`](../../../.cursor/rules/exxat-data-tables.mdc), [`exxat-hub-supported-views`](../../../.cursor/rules/exxat-hub-supported-views.mdc) | — |
29
29
 
30
- > **First-time hub builder:** start with `columns-showcase.tsx` (single-view catalog, easiest) or `tokens-themes-client.tsx` (adds a secondary panel + URL-driven scope). Move to `library-table.tsx` only when you genuinely need a board / dashboard / conditional rules.
30
+ > **First-time hub builder:** copy **`library-table.tsx`** + **`library-client.tsx`** for seven-view wiring; use **`columns-showcase.tsx`** for custom columns on **`LibraryItem`**; use **`tokens-themes-client.tsx`** + **`tokens-hub-auxiliary-views.tsx`** for token rows. Read **`hub-supported-views-pattern.md`** before changing Add view.
31
31
 
32
32
  ---
33
33
 
@@ -0,0 +1,8 @@
1
+ /**
2
+ * App-wide default view allowlist for list-page hubs (Add view + Properties).
3
+ * Keep in sync with `library-table.tsx` / `ListPageTemplate` / `HubTable`.
4
+ */
5
+ export {
6
+ FULL_HUB_SUPPORTED_VIEWS,
7
+ PRIMARY_HUB_SUPPORTED_VIEWS,
8
+ } from "@exxatdesignux/ui/lib/data-list-view-registry"
@@ -1,12 +1,5 @@
1
- import type { DataListViewType } from "@/lib/data-list-view"
2
-
3
- /** Views implemented in `LibraryTable` — keep in sync with `ListPageConnectedViewBody` renderers. */
4
- export const LIBRARY_SUPPORTED_VIEWS = [
5
- "table",
6
- "list",
7
- "board",
8
- "dashboard",
9
- "folder",
10
- "panel",
11
- "tree-panel",
12
- ] as const satisfies readonly DataListViewType[]
1
+ export {
2
+ FULL_HUB_SUPPORTED_VIEWS,
3
+ FULL_HUB_SUPPORTED_VIEWS as LIBRARY_SUPPORTED_VIEWS,
4
+ PRIMARY_HUB_SUPPORTED_VIEWS,
5
+ } from "@exxatdesignux/ui/lib/data-list-view-registry"
@@ -9,6 +9,7 @@
9
9
  },
10
10
  "scripts": {
11
11
  "dev": "next dev --turbopack",
12
+ "dev:webpack": "next dev",
12
13
  "dev:3001": "next dev --turbopack -p 3001",
13
14
  "dev:3005": "next dev --turbopack -p 3005",
14
15
  "dev:daemon": "pm2 start ecosystem.config.cjs",
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "0.5.2",
2
+ "version": "0.5.3",
3
3
  "source": "packages/ui/src/globals.css",
4
- "generatedAt": "2026-05-22T05:01:54.358Z",
4
+ "generatedAt": "2026-05-22T09:24:53.662Z",
5
5
  "tokenCount": 197,
6
6
  "themeKeys": [
7
7
  "tailwind-bridge",