@exxatdesignux/ui 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/CHANGELOG.md +608 -6
  2. package/consumer-extras/cursor-rules/exxat-board-cards.mdc +1 -1
  3. package/consumer-extras/cursor-rules/exxat-centralized-list-dataset.mdc +2 -2
  4. package/consumer-extras/cursor-rules/exxat-collaboration-access.mdc +1 -1
  5. package/consumer-extras/cursor-rules/exxat-data-tables.mdc +2 -0
  6. package/consumer-extras/cursor-rules/exxat-dedicated-search-surfaces.mdc +1 -1
  7. package/consumer-extras/cursor-rules/exxat-ds-agents.mdc +3 -3
  8. package/consumer-extras/cursor-rules/exxat-library-hub-header.mdc +28 -0
  9. package/consumer-extras/cursor-rules/exxat-mono-ids.mdc +1 -1
  10. package/consumer-extras/cursor-rules/exxat-person-identity-display.mdc +1 -1
  11. package/consumer-extras/cursor-rules/exxat-primary-nav-secondary-panel.mdc +6 -6
  12. package/consumer-extras/cursor-rules/exxat-reuse-before-custom.mdc +1 -1
  13. package/consumer-extras/cursor-skills/exxat-board-cards/SKILL.md +2 -2
  14. package/consumer-extras/cursor-skills/exxat-centralized-list-dataset/SKILL.md +1 -1
  15. package/consumer-extras/cursor-skills/exxat-collaboration-access/SKILL.md +3 -3
  16. package/consumer-extras/cursor-skills/exxat-dedicated-search-surfaces/SKILL.md +2 -2
  17. package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +7 -7
  18. package/consumer-extras/cursor-skills/exxat-kpi-flat-band/SKILL.md +1 -1
  19. package/consumer-extras/cursor-skills/exxat-list-page-view-shells/SKILL.md +1 -1
  20. package/consumer-extras/cursor-skills/exxat-mono-ids/SKILL.md +4 -4
  21. package/consumer-extras/cursor-skills/exxat-primary-nav-secondary-panel/SKILL.md +8 -8
  22. package/consumer-extras/cursor-skills/exxat-token-economy/SKILL.md +277 -0
  23. package/consumer-extras/handbook/HANDBOOK.md +2 -0
  24. package/consumer-extras/handbook/glossary.md +2 -1
  25. package/consumer-extras/handbook/reference-implementations.md +31 -4
  26. package/consumer-extras/patterns/collaboration-access-pattern.md +7 -7
  27. package/consumer-extras/patterns/data-views-pattern.md +18 -16
  28. package/consumer-extras/patterns/kpi-flat-band-pattern.md +2 -2
  29. package/dist/components/data-table/index.js +2 -2
  30. package/dist/components/data-table/index.js.map +1 -1
  31. package/dist/components/data-table/pagination.js +3 -3
  32. package/dist/components/data-table/pagination.js.map +1 -1
  33. package/dist/components/data-table/use-table-state.d.ts +1 -1
  34. package/dist/components/data-table/use-table-state.js.map +1 -1
  35. package/dist/components/data-views/data-row-list.js.map +1 -1
  36. package/dist/components/data-views/finder-panel-view.d.ts +1 -1
  37. package/dist/components/data-views/finder-panel-view.js.map +1 -1
  38. package/dist/components/data-views/hub-table.d.ts +9 -3
  39. package/dist/components/data-views/hub-table.js +262 -40
  40. package/dist/components/data-views/hub-table.js.map +1 -1
  41. package/dist/components/data-views/index.js +262 -40
  42. package/dist/components/data-views/index.js.map +1 -1
  43. package/dist/components/data-views/list-page-split-hub-tokens.d.ts +2 -2
  44. package/dist/components/data-views/list-page-split-hub-tokens.js.map +1 -1
  45. package/dist/components/data-views/list-page-tree-column-header.d.ts +1 -1
  46. package/dist/components/data-views/list-page-tree-column-header.js.map +1 -1
  47. package/dist/components/data-views/list-page-tree-panel-shell.js.map +1 -1
  48. package/dist/components/data-views/os-folder-glyph.d.ts +1 -1
  49. package/dist/components/data-views/os-folder-glyph.js.map +1 -1
  50. package/dist/components/ui/avatar.d.ts +1 -1
  51. package/dist/components/ui/banner.d.ts +2 -2
  52. package/dist/components/ui/key-metrics.js.map +1 -1
  53. package/dist/index.js +136 -39
  54. package/dist/index.js.map +1 -1
  55. package/package.json +1 -1
  56. package/src/components/data-table/index.tsx +2 -2
  57. package/src/components/data-table/pagination.tsx +5 -1
  58. package/src/components/data-table/use-table-state.ts +1 -1
  59. package/src/components/data-views/data-row-list.tsx +1 -1
  60. package/src/components/data-views/finder-panel-view.tsx +2 -2
  61. package/src/components/data-views/hub-table.tsx +149 -41
  62. package/src/components/data-views/list-page-split-hub-tokens.ts +2 -2
  63. package/src/components/data-views/list-page-tree-column-header.tsx +1 -1
  64. package/src/components/data-views/os-folder-glyph.tsx +1 -1
  65. package/src/components/ui/key-metrics.tsx +1 -1
  66. package/template/.claude/skills/exxat-ds-skill/SKILL.md +8 -7
  67. package/template/.cursor/rules/exxat-accessibility.mdc +1 -1
  68. package/template/.cursor/rules/exxat-command-menu.mdc +1 -1
  69. package/template/.cursor/rules/exxat-dashboard-view-charts.mdc +6 -6
  70. package/template/.cursor/rules/exxat-data-tables.mdc +3 -3
  71. package/template/.cursor/rules/exxat-kbd-shortcuts.mdc +5 -5
  72. package/template/.cursor/rules/exxat-mono-ids.mdc +1 -1
  73. package/template/.cursor/rules/exxat-page-vs-drawer.mdc +1 -1
  74. package/template/.cursor/rules/exxat-table-properties-drawer.mdc +1 -1
  75. package/template/AGENTS.md +43 -37
  76. package/template/app/(app)/columns/page.tsx +11 -0
  77. package/template/app/(app)/library/all/page.tsx +11 -0
  78. package/template/app/(app)/library/find/page.tsx +12 -0
  79. package/template/app/(app)/{question-bank → library}/layout.tsx +16 -16
  80. package/template/app/(app)/library/list/page.tsx +12 -0
  81. package/template/app/(app)/{question-bank → library}/new/page.tsx +10 -10
  82. package/template/app/(app)/library/page.tsx +11 -0
  83. package/template/app/(app)/tokens-themes/page.tsx +11 -0
  84. package/template/components/ask-leo-composer.tsx +2 -2
  85. package/template/components/columns-client.tsx +158 -0
  86. package/template/components/columns-showcase.tsx +541 -0
  87. package/template/components/data-views/index.ts +32 -6
  88. package/template/components/data-views/{question-bank-folder-tree-branch.tsx → library-folder-tree-branch.tsx} +19 -19
  89. package/template/components/data-views/table-cells.tsx +673 -0
  90. package/template/components/folder-details-shell.tsx +11 -11
  91. package/template/components/hub-tree-panel-view.tsx +24 -24
  92. package/template/components/{question-bank-board-view.tsx → library-board-view.tsx} +44 -44
  93. package/template/components/{question-bank-client.tsx → library-client.tsx} +82 -82
  94. package/template/components/{question-bank-dashboard-charts.tsx → library-dashboard-charts.tsx} +14 -14
  95. package/template/components/{question-bank-favorite-button.tsx → library-favorite-button.tsx} +7 -7
  96. package/template/components/{question-bank-hub-client.tsx → library-hub-client.tsx} +43 -43
  97. package/template/components/{question-bank-new-folder-sheet.tsx → library-new-folder-sheet.tsx} +14 -14
  98. package/template/components/{question-bank-os-folder-view.tsx → library-os-folder-view.tsx} +31 -31
  99. package/template/components/{question-bank-page-header.tsx → library-page-header.tsx} +6 -6
  100. package/template/components/library-panel-activator.tsx +8 -0
  101. package/template/components/{question-bank-secondary-nav.tsx → library-secondary-nav.tsx} +60 -60
  102. package/template/components/{question-bank-table.tsx → library-table.tsx} +97 -97
  103. package/template/components/list-hub-status-badge.tsx +2 -2
  104. package/template/components/{new-question-composer.tsx → new-library-item-form.tsx} +37 -37
  105. package/template/components/sidebar/app-sidebar.tsx +61 -5
  106. package/template/components/sidebar/secondary-panel.tsx +109 -56
  107. package/template/components/sidebar/sidebar-auto-collapse.tsx +2 -2
  108. package/template/components/sidebar/sidebar-auto-open.tsx +2 -1
  109. package/template/components/table-properties/types.ts +1 -1
  110. package/template/components/templates/discovery-hub-template.tsx +1 -1
  111. package/template/components/templates/new-focus-template.tsx +2 -2
  112. package/template/components/templates/secondary-panel-hub-template.tsx +1 -1
  113. package/template/components/tokens-secondary-nav.tsx +192 -0
  114. package/template/components/tokens-themes-client.tsx +476 -0
  115. package/template/components/tokens-themes-section.tsx +386 -0
  116. package/template/docs/HANDBOOK.md +187 -0
  117. package/template/docs/blueprints/README.md +1 -1
  118. package/template/docs/blueprints/board-card.md +1 -1
  119. package/template/docs/blueprints/data-table.md +2 -2
  120. package/template/docs/blueprints/list-page-template.md +3 -3
  121. package/template/docs/blueprints/page-header.md +4 -4
  122. package/template/docs/collaboration-access-pattern.md +7 -7
  123. package/template/docs/component-selection-guide.md +1 -1
  124. package/template/docs/data-views-pattern.md +18 -16
  125. package/template/docs/glossary.md +58 -0
  126. package/template/docs/kpi-flat-band-pattern.md +3 -3
  127. package/template/docs/kpi-trend-pattern.md +18 -3
  128. package/template/docs/large-dataset-strategy.md +155 -0
  129. package/template/docs/library-hub-header-pattern.md +25 -0
  130. package/template/docs/migrations/_template.md +1 -1
  131. package/template/docs/reference-implementations.md +151 -0
  132. package/template/docs/token-taxonomy.md +1 -1
  133. package/template/docs/voice-and-tone.md +262 -0
  134. package/template/hooks/use-secondary-panel-hub-nav.ts +10 -10
  135. package/template/lib/ask-leo-route-context.ts +6 -18
  136. package/template/lib/coach-mark-registry.ts +0 -16
  137. package/template/lib/command-menu-config.ts +5 -12
  138. package/template/lib/command-menu-search-data.ts +8 -39
  139. package/template/lib/{question-bank-authoring.ts → library-authoring.ts} +89 -88
  140. package/template/lib/library-dedicated-search.ts +19 -0
  141. package/template/lib/library-hub-search.ts +90 -0
  142. package/template/lib/library-nav.ts +477 -0
  143. package/template/lib/library-recent-searches.ts +22 -0
  144. package/template/lib/{placements-supported-views.ts → library-supported-views.ts} +2 -2
  145. package/template/lib/list-status-badges.ts +16 -104
  146. package/template/lib/mock/dashboard.ts +1 -1
  147. package/template/lib/mock/{question-bank-folders.ts → library-folders.ts} +30 -30
  148. package/template/lib/mock/library-header-collaborators.ts +54 -0
  149. package/template/lib/mock/{question-bank-inspector.ts → library-inspector.ts} +29 -29
  150. package/template/lib/mock/{question-bank-kpi.ts → library-kpi.ts} +20 -20
  151. package/template/lib/mock/library.ts +249 -0
  152. package/template/lib/mock/navigation.tsx +32 -26
  153. package/template/lib/table-state-lifecycle.ts +1 -1
  154. package/template/next.config.mjs +7 -4
  155. package/consumer-extras/cursor-rules/exxat-question-bank-hub-header.mdc +0 -28
  156. package/template/app/(app)/examples/page.tsx +0 -41
  157. package/template/app/(app)/question-bank/find/page.tsx +0 -12
  158. package/template/app/(app)/question-bank/library/page.tsx +0 -11
  159. package/template/app/(app)/question-bank/list/page.tsx +0 -12
  160. package/template/app/(app)/question-bank/page.tsx +0 -11
  161. package/template/components/compliance-board-view.tsx +0 -142
  162. package/template/components/compliance-client.tsx +0 -92
  163. package/template/components/compliance-page-header.tsx +0 -89
  164. package/template/components/compliance-table.tsx +0 -468
  165. package/template/components/data-view-dashboard-charts-compliance.tsx +0 -963
  166. package/template/components/data-view-dashboard-charts-team.tsx +0 -971
  167. package/template/components/data-view-dashboard-charts.tsx +0 -1503
  168. package/template/components/new-placement-back-btn.tsx +0 -28
  169. package/template/components/new-placement-form.tsx +0 -942
  170. package/template/components/placement-board-card.tsx +0 -250
  171. package/template/components/placement-detail.tsx +0 -438
  172. package/template/components/placements-board-view.tsx +0 -397
  173. package/template/components/placements-client.tsx +0 -220
  174. package/template/components/placements-list-view.tsx +0 -124
  175. package/template/components/placements-page-header.tsx +0 -166
  176. package/template/components/placements-table-cells.test.tsx +0 -22
  177. package/template/components/placements-table-cells.tsx +0 -173
  178. package/template/components/placements-table-columns.tsx +0 -210
  179. package/template/components/placements-table.tsx +0 -934
  180. package/template/components/question-bank-panel-activator.tsx +0 -8
  181. package/template/components/rotations-empty-state.tsx +0 -50
  182. package/template/components/rotations-panel-activator.tsx +0 -8
  183. package/template/components/sites-board-view.tsx +0 -67
  184. package/template/components/sites-client.tsx +0 -154
  185. package/template/components/sites-table.tsx +0 -249
  186. package/template/components/team-board-view.tsx +0 -122
  187. package/template/components/team-client.tsx +0 -100
  188. package/template/components/team-page-header.tsx +0 -92
  189. package/template/components/team-table.tsx +0 -553
  190. package/template/docs/question-bank-hub-header-pattern.md +0 -25
  191. package/template/lib/compliance-supported-views.ts +0 -10
  192. package/template/lib/data-view-dashboard-placements-layout.ts +0 -215
  193. package/template/lib/mock/compliance-kpi.ts +0 -61
  194. package/template/lib/mock/compliance.ts +0 -146
  195. package/template/lib/mock/placements-kpi.ts +0 -134
  196. package/template/lib/mock/placements.ts +0 -176
  197. package/template/lib/mock/question-bank-header-collaborators.ts +0 -54
  198. package/template/lib/mock/question-bank.ts +0 -249
  199. package/template/lib/mock/sites-directory.ts +0 -16
  200. package/template/lib/mock/sites-kpi.ts +0 -25
  201. package/template/lib/mock/team-kpi.ts +0 -60
  202. package/template/lib/mock/team.ts +0 -118
  203. package/template/lib/placement-board-card-layout.ts +0 -79
  204. package/template/lib/question-bank-dedicated-search.ts +0 -19
  205. package/template/lib/question-bank-hub-search.ts +0 -90
  206. package/template/lib/question-bank-nav.ts +0 -477
  207. package/template/lib/question-bank-recent-searches.ts +0 -22
  208. package/template/lib/question-bank-supported-views.ts +0 -12
  209. package/template/lib/sites-supported-views.ts +0 -10
  210. 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}