@exxatdesignux/ui 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/CHANGELOG.md +701 -6
  2. package/README.md +138 -0
  3. package/bin/init.mjs +134 -31
  4. package/consumer-extras/cursor-rules/exxat-board-cards.mdc +1 -1
  5. package/consumer-extras/cursor-rules/exxat-centralized-list-dataset.mdc +2 -2
  6. package/consumer-extras/cursor-rules/exxat-collaboration-access.mdc +1 -1
  7. package/consumer-extras/cursor-rules/exxat-data-tables.mdc +2 -0
  8. package/consumer-extras/cursor-rules/exxat-dedicated-search-surfaces.mdc +1 -1
  9. package/consumer-extras/cursor-rules/exxat-ds-agents.mdc +3 -3
  10. package/consumer-extras/cursor-rules/exxat-library-hub-header.mdc +28 -0
  11. package/consumer-extras/cursor-rules/exxat-mono-ids.mdc +1 -1
  12. package/consumer-extras/cursor-rules/exxat-person-identity-display.mdc +1 -1
  13. package/consumer-extras/cursor-rules/exxat-primary-nav-secondary-panel.mdc +6 -6
  14. package/consumer-extras/cursor-rules/exxat-reuse-before-custom.mdc +1 -1
  15. package/consumer-extras/cursor-skills/exxat-board-cards/SKILL.md +2 -2
  16. package/consumer-extras/cursor-skills/exxat-centralized-list-dataset/SKILL.md +1 -1
  17. package/consumer-extras/cursor-skills/exxat-collaboration-access/SKILL.md +3 -3
  18. package/consumer-extras/cursor-skills/exxat-dedicated-search-surfaces/SKILL.md +2 -2
  19. package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +7 -7
  20. package/consumer-extras/cursor-skills/exxat-kpi-flat-band/SKILL.md +1 -1
  21. package/consumer-extras/cursor-skills/exxat-list-page-view-shells/SKILL.md +1 -1
  22. package/consumer-extras/cursor-skills/exxat-mono-ids/SKILL.md +4 -4
  23. package/consumer-extras/cursor-skills/exxat-primary-nav-secondary-panel/SKILL.md +8 -8
  24. package/consumer-extras/cursor-skills/exxat-token-economy/SKILL.md +277 -0
  25. package/consumer-extras/handbook/HANDBOOK.md +2 -0
  26. package/consumer-extras/handbook/glossary.md +2 -1
  27. package/consumer-extras/handbook/reference-implementations.md +31 -4
  28. package/consumer-extras/patterns/collaboration-access-pattern.md +7 -7
  29. package/consumer-extras/patterns/data-views-pattern.md +18 -16
  30. package/consumer-extras/patterns/kpi-flat-band-pattern.md +2 -2
  31. package/dist/components/data-table/index.js +2 -2
  32. package/dist/components/data-table/index.js.map +1 -1
  33. package/dist/components/data-table/pagination.js +3 -3
  34. package/dist/components/data-table/pagination.js.map +1 -1
  35. package/dist/components/data-table/use-table-state.d.ts +1 -1
  36. package/dist/components/data-table/use-table-state.js.map +1 -1
  37. package/dist/components/data-views/data-row-list.js.map +1 -1
  38. package/dist/components/data-views/finder-panel-view.d.ts +1 -1
  39. package/dist/components/data-views/finder-panel-view.js.map +1 -1
  40. package/dist/components/data-views/hub-table.d.ts +9 -3
  41. package/dist/components/data-views/hub-table.js +262 -40
  42. package/dist/components/data-views/hub-table.js.map +1 -1
  43. package/dist/components/data-views/index.js +262 -40
  44. package/dist/components/data-views/index.js.map +1 -1
  45. package/dist/components/data-views/list-page-split-hub-tokens.d.ts +2 -2
  46. package/dist/components/data-views/list-page-split-hub-tokens.js.map +1 -1
  47. package/dist/components/data-views/list-page-tree-column-header.d.ts +1 -1
  48. package/dist/components/data-views/list-page-tree-column-header.js.map +1 -1
  49. package/dist/components/data-views/list-page-tree-panel-shell.js.map +1 -1
  50. package/dist/components/data-views/os-folder-glyph.d.ts +1 -1
  51. package/dist/components/data-views/os-folder-glyph.js.map +1 -1
  52. package/dist/components/ui/avatar.d.ts +1 -1
  53. package/dist/components/ui/key-metrics.js.map +1 -1
  54. package/dist/index.js +136 -39
  55. package/dist/index.js.map +1 -1
  56. package/package.json +3 -2
  57. package/src/components/data-table/index.tsx +2 -2
  58. package/src/components/data-table/pagination.tsx +5 -1
  59. package/src/components/data-table/use-table-state.ts +1 -1
  60. package/src/components/data-views/data-row-list.tsx +1 -1
  61. package/src/components/data-views/finder-panel-view.tsx +2 -2
  62. package/src/components/data-views/hub-table.tsx +149 -41
  63. package/src/components/data-views/list-page-split-hub-tokens.ts +2 -2
  64. package/src/components/data-views/list-page-tree-column-header.tsx +1 -1
  65. package/src/components/data-views/os-folder-glyph.tsx +1 -1
  66. package/src/components/ui/key-metrics.tsx +1 -1
  67. package/template/.claude/skills/exxat-ds-skill/SKILL.md +8 -7
  68. package/template/.cursor/rules/exxat-accessibility.mdc +1 -1
  69. package/template/.cursor/rules/exxat-command-menu.mdc +1 -1
  70. package/template/.cursor/rules/exxat-dashboard-view-charts.mdc +6 -6
  71. package/template/.cursor/rules/exxat-data-tables.mdc +3 -3
  72. package/template/.cursor/rules/exxat-kbd-shortcuts.mdc +5 -5
  73. package/template/.cursor/rules/exxat-mono-ids.mdc +1 -1
  74. package/template/.cursor/rules/exxat-page-vs-drawer.mdc +1 -1
  75. package/template/.cursor/rules/exxat-table-properties-drawer.mdc +1 -1
  76. package/template/AGENTS.md +43 -37
  77. package/template/app/(app)/columns/page.tsx +11 -0
  78. package/template/app/(app)/library/all/page.tsx +11 -0
  79. package/template/app/(app)/library/find/page.tsx +12 -0
  80. package/template/app/(app)/{question-bank → library}/layout.tsx +16 -16
  81. package/template/app/(app)/library/list/page.tsx +12 -0
  82. package/template/app/(app)/{question-bank → library}/new/page.tsx +10 -10
  83. package/template/app/(app)/library/page.tsx +11 -0
  84. package/template/app/(app)/tokens-themes/page.tsx +11 -0
  85. package/template/components/ask-leo-composer.tsx +2 -2
  86. package/template/components/columns-client.tsx +158 -0
  87. package/template/components/columns-showcase.tsx +541 -0
  88. package/template/components/data-views/index.ts +32 -6
  89. package/template/components/data-views/{question-bank-folder-tree-branch.tsx → library-folder-tree-branch.tsx} +19 -19
  90. package/template/components/data-views/table-cells.tsx +673 -0
  91. package/template/components/folder-details-shell.tsx +11 -11
  92. package/template/components/hub-tree-panel-view.tsx +24 -24
  93. package/template/components/{question-bank-board-view.tsx → library-board-view.tsx} +44 -44
  94. package/template/components/{question-bank-client.tsx → library-client.tsx} +82 -82
  95. package/template/components/{question-bank-dashboard-charts.tsx → library-dashboard-charts.tsx} +14 -14
  96. package/template/components/{question-bank-favorite-button.tsx → library-favorite-button.tsx} +7 -7
  97. package/template/components/{question-bank-hub-client.tsx → library-hub-client.tsx} +43 -43
  98. package/template/components/{question-bank-new-folder-sheet.tsx → library-new-folder-sheet.tsx} +14 -14
  99. package/template/components/{question-bank-os-folder-view.tsx → library-os-folder-view.tsx} +31 -31
  100. package/template/components/{question-bank-page-header.tsx → library-page-header.tsx} +6 -6
  101. package/template/components/library-panel-activator.tsx +8 -0
  102. package/template/components/{question-bank-secondary-nav.tsx → library-secondary-nav.tsx} +60 -60
  103. package/template/components/{question-bank-table.tsx → library-table.tsx} +97 -97
  104. package/template/components/list-hub-status-badge.tsx +2 -2
  105. package/template/components/{new-question-composer.tsx → new-library-item-form.tsx} +37 -37
  106. package/template/components/sidebar/app-sidebar.tsx +61 -5
  107. package/template/components/sidebar/secondary-panel.tsx +109 -56
  108. package/template/components/sidebar/sidebar-auto-collapse.tsx +2 -2
  109. package/template/components/sidebar/sidebar-auto-open.tsx +2 -1
  110. package/template/components/table-properties/types.ts +1 -1
  111. package/template/components/templates/discovery-hub-template.tsx +1 -1
  112. package/template/components/templates/new-focus-template.tsx +2 -2
  113. package/template/components/templates/secondary-panel-hub-template.tsx +1 -1
  114. package/template/components/tokens-secondary-nav.tsx +192 -0
  115. package/template/components/tokens-themes-client.tsx +476 -0
  116. package/template/components/tokens-themes-section.tsx +386 -0
  117. package/template/docs/HANDBOOK.md +187 -0
  118. package/template/docs/blueprints/README.md +1 -1
  119. package/template/docs/blueprints/board-card.md +1 -1
  120. package/template/docs/blueprints/data-table.md +2 -2
  121. package/template/docs/blueprints/list-page-template.md +3 -3
  122. package/template/docs/blueprints/page-header.md +4 -4
  123. package/template/docs/collaboration-access-pattern.md +7 -7
  124. package/template/docs/component-selection-guide.md +1 -1
  125. package/template/docs/data-views-pattern.md +18 -16
  126. package/template/docs/glossary.md +58 -0
  127. package/template/docs/kpi-flat-band-pattern.md +3 -3
  128. package/template/docs/kpi-trend-pattern.md +18 -3
  129. package/template/docs/large-dataset-strategy.md +155 -0
  130. package/template/docs/library-hub-header-pattern.md +25 -0
  131. package/template/docs/migrations/_template.md +1 -1
  132. package/template/docs/reference-implementations.md +151 -0
  133. package/template/docs/token-taxonomy.md +1 -1
  134. package/template/docs/voice-and-tone.md +262 -0
  135. package/template/eslint.config.mjs +9 -39
  136. package/template/hooks/use-secondary-panel-hub-nav.ts +10 -10
  137. package/template/lib/ask-leo-route-context.ts +6 -18
  138. package/template/lib/coach-mark-registry.ts +0 -16
  139. package/template/lib/command-menu-config.ts +5 -12
  140. package/template/lib/command-menu-search-data.ts +8 -39
  141. package/template/lib/{question-bank-authoring.ts → library-authoring.ts} +89 -88
  142. package/template/lib/library-dedicated-search.ts +19 -0
  143. package/template/lib/library-hub-search.ts +90 -0
  144. package/template/lib/library-nav.ts +477 -0
  145. package/template/lib/library-recent-searches.ts +22 -0
  146. package/template/lib/{placements-supported-views.ts → library-supported-views.ts} +2 -2
  147. package/template/lib/list-status-badges.ts +16 -104
  148. package/template/lib/mock/dashboard.ts +1 -1
  149. package/template/lib/mock/{question-bank-folders.ts → library-folders.ts} +30 -30
  150. package/template/lib/mock/library-header-collaborators.ts +54 -0
  151. package/template/lib/mock/{question-bank-inspector.ts → library-inspector.ts} +29 -29
  152. package/template/lib/mock/{question-bank-kpi.ts → library-kpi.ts} +20 -20
  153. package/template/lib/mock/library.ts +249 -0
  154. package/template/lib/mock/navigation.tsx +32 -26
  155. package/template/lib/table-state-lifecycle.ts +1 -1
  156. package/template/next.config.mjs +7 -4
  157. package/template/package.json +0 -1
  158. package/tokens/hooks-index.json +2874 -0
  159. package/consumer-extras/cursor-rules/exxat-question-bank-hub-header.mdc +0 -28
  160. package/template/app/(app)/examples/page.tsx +0 -41
  161. package/template/app/(app)/question-bank/find/page.tsx +0 -12
  162. package/template/app/(app)/question-bank/library/page.tsx +0 -11
  163. package/template/app/(app)/question-bank/list/page.tsx +0 -12
  164. package/template/app/(app)/question-bank/page.tsx +0 -11
  165. package/template/components/compliance-board-view.tsx +0 -142
  166. package/template/components/compliance-client.tsx +0 -92
  167. package/template/components/compliance-page-header.tsx +0 -89
  168. package/template/components/compliance-table.tsx +0 -468
  169. package/template/components/data-view-dashboard-charts-compliance.tsx +0 -963
  170. package/template/components/data-view-dashboard-charts-team.tsx +0 -971
  171. package/template/components/data-view-dashboard-charts.tsx +0 -1503
  172. package/template/components/new-placement-back-btn.tsx +0 -28
  173. package/template/components/new-placement-form.tsx +0 -942
  174. package/template/components/placement-board-card.tsx +0 -250
  175. package/template/components/placement-detail.tsx +0 -438
  176. package/template/components/placements-board-view.tsx +0 -397
  177. package/template/components/placements-client.tsx +0 -220
  178. package/template/components/placements-list-view.tsx +0 -124
  179. package/template/components/placements-page-header.tsx +0 -166
  180. package/template/components/placements-table-cells.test.tsx +0 -22
  181. package/template/components/placements-table-cells.tsx +0 -173
  182. package/template/components/placements-table-columns.tsx +0 -210
  183. package/template/components/placements-table.tsx +0 -934
  184. package/template/components/question-bank-panel-activator.tsx +0 -8
  185. package/template/components/rotations-empty-state.tsx +0 -50
  186. package/template/components/rotations-panel-activator.tsx +0 -8
  187. package/template/components/sites-board-view.tsx +0 -67
  188. package/template/components/sites-client.tsx +0 -154
  189. package/template/components/sites-table.tsx +0 -249
  190. package/template/components/team-board-view.tsx +0 -122
  191. package/template/components/team-client.tsx +0 -100
  192. package/template/components/team-page-header.tsx +0 -92
  193. package/template/components/team-table.tsx +0 -553
  194. package/template/docs/question-bank-hub-header-pattern.md +0 -25
  195. package/template/lib/compliance-supported-views.ts +0 -10
  196. package/template/lib/data-view-dashboard-placements-layout.ts +0 -215
  197. package/template/lib/mock/compliance-kpi.ts +0 -61
  198. package/template/lib/mock/compliance.ts +0 -146
  199. package/template/lib/mock/placements-kpi.ts +0 -134
  200. package/template/lib/mock/placements.ts +0 -176
  201. package/template/lib/mock/question-bank-header-collaborators.ts +0 -54
  202. package/template/lib/mock/question-bank.ts +0 -249
  203. package/template/lib/mock/sites-directory.ts +0 -16
  204. package/template/lib/mock/sites-kpi.ts +0 -25
  205. package/template/lib/mock/team-kpi.ts +0 -60
  206. package/template/lib/mock/team.ts +0 -118
  207. package/template/lib/placement-board-card-layout.ts +0 -79
  208. package/template/lib/question-bank-dedicated-search.ts +0 -19
  209. package/template/lib/question-bank-hub-search.ts +0 -90
  210. package/template/lib/question-bank-nav.ts +0 -477
  211. package/template/lib/question-bank-recent-searches.ts +0 -22
  212. package/template/lib/question-bank-supported-views.ts +0 -12
  213. package/template/lib/sites-supported-views.ts +0 -10
  214. package/template/lib/team-supported-views.ts +0 -10
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * Central exports for list-page data surfaces and shared view chrome.
3
3
  *
4
- * **Pattern:** `ListPageTemplate` + `PlacementsTable` (or any hub-specific `*-table.tsx`) — one `useTableState`, one toolbar,
5
- * table | list | board | dashboard from the same component (`AGENTS.md` §4, `docs/data-views-pattern.md`).
4
+ * **Pattern:** `ListPageTemplate` + `HubTable` — one `useTableState`, one toolbar,
5
+ * table | list | board | dashboard from the same primitive (`AGENTS.md` §4,
6
+ * `docs/data-views-pattern.md`). See `columns-showcase.tsx` and
7
+ * `tokens-themes-client.tsx` for reference compositions in this app.
6
8
  *
7
9
  * **View UI:** `ViewSegmentedControl` matches the template’s views toolbar (`bg-muted/60` pills).
8
10
  */
9
11
 
10
- export { PlacementsTable } from "@/components/placements-table"
11
- export type { PlacementsTableProps, PlacementsTableHandle } from "@/components/placements-table"
12
12
  export type { DataListViewType } from "@/lib/data-list-view"
13
13
  export { DATA_LIST_VIEW_TILES, dataListViewIcon, dataListViewLabel } from "@/lib/data-list-view"
14
14
 
@@ -104,8 +104,8 @@ export {
104
104
  type OutlineTreeSurface,
105
105
  } from "@/components/data-views/outline-tree-menu"
106
106
 
107
- export { QuestionBankFolderTreeBranch } from "@/components/data-views/question-bank-folder-tree-branch"
108
- export type { QuestionBankFolderTreeBranchProps } from "@/components/data-views/question-bank-folder-tree-branch"
107
+ export { LibraryFolderTreeBranch } from "@/components/data-views/library-folder-tree-branch"
108
+ export type { LibraryFolderTreeBranchProps } from "@/components/data-views/library-folder-tree-branch"
109
109
 
110
110
  export {
111
111
  LIST_PAGE_SPLIT_MILLER_COLUMN_PANEL_CLASS,
@@ -148,6 +148,32 @@ export { FolderGridView, type FolderGridViewProps } from "@/components/data-view
148
148
  * `ListPageBoardCard layout="row"` via a `renderRow` prop. */
149
149
  export { DataRowList, type DataRowListProps } from "@/components/data-views/data-row-list"
150
150
 
151
+ /** Reusable `ColumnDef['cell']` renderers — progress, currency, rating,
152
+ * relative time, attachments, external link, face rails, pills, signal bars,
153
+ * inline toggles, and a generic `<TRow>` `RowActionsCell`. The live catalog
154
+ * is `columns-showcase.tsx` (`/columns`).
155
+ * Skill: `.cursor/skills/exxat-token-economy/SKILL.md` §3. */
156
+ export {
157
+ AttachmentCountCell,
158
+ BooleanToggleCell,
159
+ CurrencyCell,
160
+ EMPTY_DASH,
161
+ ExternalLinkCell,
162
+ NumericCell,
163
+ PeopleAvatarRailCell,
164
+ PillCell,
165
+ ProgressCell,
166
+ RatingCell,
167
+ RelativeTimeCell,
168
+ RowActionsCell,
169
+ SignalBarsCell,
170
+ TagListCell,
171
+ type PersonStub,
172
+ type ProgressTone,
173
+ type RowActionDef,
174
+ type SignalTone,
175
+ } from "@/components/data-views/table-cells"
176
+
151
177
 
152
178
  /** Unified hub tile + list row surface — see `list-page-board-card.tsx`. */
153
179
  export {
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  /**
4
- * Question bank **Folders** tree — shared outline primitives (`OutlineTree*`) so the rail
4
+ * Library **Folders** tree — shared outline primitives (`OutlineTree*`) so the rail
5
5
  * matches `HubTreePanelView` and shadcn sidebar file-tree rhythm.
6
6
  */
7
7
 
@@ -23,29 +23,29 @@ import {
23
23
  OutlineTreeMenuItem,
24
24
  OutlineTreeSub,
25
25
  } from "@/components/data-views/outline-tree-menu"
26
- import type { QuestionBankFolder } from "@/lib/mock/question-bank-folders"
27
- import { QUESTION_BANK_FOLDER_ICON_COLORS } from "@/lib/mock/question-bank-folders"
26
+ import type { LibraryFolder } from "@/lib/mock/library-folders"
27
+ import { LIBRARY_FOLDER_ICON_COLORS } from "@/lib/mock/library-folders"
28
28
  import {
29
- isQuestionBankNavActive,
30
- questionBankHubScopeHref,
31
- type QuestionBankNavState,
32
- } from "@/lib/question-bank-nav"
29
+ isLibraryNavActive,
30
+ libraryHubScopeHref,
31
+ type LibraryNavState,
32
+ } from "@/lib/library-nav"
33
33
 
34
- export interface QuestionBankFolderTreeBranchProps {
35
- folder: QuestionBankFolder
36
- folders: QuestionBankFolder[]
34
+ export interface LibraryFolderTreeBranchProps {
35
+ folder: LibraryFolder
36
+ folders: LibraryFolder[]
37
37
  pathname: string
38
38
  hubSearchParams: URLSearchParams
39
- nav: QuestionBankNavState
39
+ nav: LibraryNavState
40
40
  canManageFolders: boolean
41
41
  canManageAccess: boolean
42
42
  onAddSubfolder: (parentId: string) => void
43
- onCustomizeFolder: (folder: QuestionBankFolder) => void
43
+ onCustomizeFolder: (folder: LibraryFolder) => void
44
44
  onManageAccess: () => void
45
- onDeleteFolder: (folder: QuestionBankFolder) => void
45
+ onDeleteFolder: (folder: LibraryFolder) => void
46
46
  }
47
47
 
48
- export function QuestionBankFolderTreeBranch({
48
+ export function LibraryFolderTreeBranch({
49
49
  folder,
50
50
  folders,
51
51
  pathname,
@@ -57,7 +57,7 @@ export function QuestionBankFolderTreeBranch({
57
57
  onCustomizeFolder,
58
58
  onManageAccess,
59
59
  onDeleteFolder,
60
- }: QuestionBankFolderTreeBranchProps) {
60
+ }: LibraryFolderTreeBranchProps) {
61
61
  const childFolders = React.useMemo(
62
62
  () =>
63
63
  folders
@@ -69,11 +69,11 @@ export function QuestionBankFolderTreeBranch({
69
69
  const hasSubfolders = childFolders.length > 0
70
70
  const isRootFolder = folder.parentId === null
71
71
 
72
- const folderHref = questionBankHubScopeHref(pathname, hubSearchParams, {
72
+ const folderHref = libraryHubScopeHref(pathname, hubSearchParams, {
73
73
  scope: "folder",
74
74
  folderId: folder.id,
75
75
  })
76
- const folderActive = isQuestionBankNavActive(pathname, nav, "folder", folder.id)
76
+ const folderActive = isLibraryNavActive(pathname, nav, "folder", folder.id)
77
77
 
78
78
  return (
79
79
  <Collapsible defaultOpen={isRootFolder} className="group/collapsible">
@@ -116,7 +116,7 @@ export function QuestionBankFolderTreeBranch({
116
116
  className={cn(
117
117
  "fa-light inline-flex size-4 shrink-0 items-center justify-center text-sm leading-none",
118
118
  folder.icon,
119
- QUESTION_BANK_FOLDER_ICON_COLORS[folder.colorKey],
119
+ LIBRARY_FOLDER_ICON_COLORS[folder.colorKey],
120
120
  )}
121
121
  aria-hidden
122
122
  />
@@ -187,7 +187,7 @@ export function QuestionBankFolderTreeBranch({
187
187
  <OutlineTreeSub surface="sidebar" guideLayout="chevronRail">
188
188
  {childFolders.map(child => (
189
189
  <OutlineTreeMenuItem key={child.id}>
190
- <QuestionBankFolderTreeBranch
190
+ <LibraryFolderTreeBranch
191
191
  folder={child}
192
192
  folders={folders}
193
193
  pathname={pathname}