@nadicodeai/ui 12.1.96 → 12.1.97

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 (566) hide show
  1. package/AGENTS.md +5 -1
  2. package/dist/components/accordion.d.ts +13 -0
  3. package/dist/components/accordion.d.ts.map +1 -1
  4. package/dist/components/accordion.js +13 -0
  5. package/dist/components/account-menu.d.ts +62 -18
  6. package/dist/components/account-menu.d.ts.map +1 -1
  7. package/dist/components/account-menu.js +32 -8
  8. package/dist/components/action-menu.d.ts +61 -5
  9. package/dist/components/action-menu.d.ts.map +1 -1
  10. package/dist/components/action-menu.js +31 -2
  11. package/dist/components/action-status.d.ts +13 -3
  12. package/dist/components/action-status.d.ts.map +1 -1
  13. package/dist/components/action-status.js +13 -3
  14. package/dist/components/activity-calendar.d.ts +14 -0
  15. package/dist/components/activity-calendar.d.ts.map +1 -1
  16. package/dist/components/activity-calendar.js +14 -0
  17. package/dist/components/activity-feed.d.ts +62 -0
  18. package/dist/components/activity-feed.d.ts.map +1 -0
  19. package/dist/components/activity-feed.js +54 -0
  20. package/dist/components/agent-card.d.ts +15 -0
  21. package/dist/components/agent-card.d.ts.map +1 -1
  22. package/dist/components/agent-card.js +15 -0
  23. package/dist/components/agent-list-row.d.ts +11 -7
  24. package/dist/components/agent-list-row.d.ts.map +1 -1
  25. package/dist/components/agent-list-row.js +10 -8
  26. package/dist/components/agent-orb.d.ts +16 -0
  27. package/dist/components/agent-orb.d.ts.map +1 -1
  28. package/dist/components/agent-orb.js +16 -0
  29. package/dist/components/agent-profile.d.ts +39 -10
  30. package/dist/components/agent-profile.d.ts.map +1 -1
  31. package/dist/components/agent-profile.js +39 -10
  32. package/dist/components/alert-dialog.d.ts +14 -0
  33. package/dist/components/alert-dialog.d.ts.map +1 -1
  34. package/dist/components/alert-dialog.js +14 -0
  35. package/dist/components/alert.d.ts +14 -0
  36. package/dist/components/alert.d.ts.map +1 -1
  37. package/dist/components/alert.js +14 -0
  38. package/dist/components/app-mark.d.ts +14 -4
  39. package/dist/components/app-mark.d.ts.map +1 -1
  40. package/dist/components/app-mark.js +13 -3
  41. package/dist/components/approval-row.d.ts +15 -2
  42. package/dist/components/approval-row.d.ts.map +1 -1
  43. package/dist/components/approval-row.js +15 -2
  44. package/dist/components/aspect-ratio.d.ts +10 -0
  45. package/dist/components/aspect-ratio.d.ts.map +1 -1
  46. package/dist/components/aspect-ratio.js +10 -0
  47. package/dist/components/avatar.d.ts +15 -0
  48. package/dist/components/avatar.d.ts.map +1 -1
  49. package/dist/components/avatar.js +15 -0
  50. package/dist/components/badge.d.ts +11 -1
  51. package/dist/components/badge.d.ts.map +1 -1
  52. package/dist/components/badge.js +10 -5
  53. package/dist/components/brand-field.d.ts +10 -0
  54. package/dist/components/brand-field.d.ts.map +1 -1
  55. package/dist/components/brand-field.js +10 -0
  56. package/dist/components/brand.d.ts +14 -0
  57. package/dist/components/brand.d.ts.map +1 -1
  58. package/dist/components/brand.js +14 -0
  59. package/dist/components/breadcrumb.d.ts +20 -2
  60. package/dist/components/breadcrumb.d.ts.map +1 -1
  61. package/dist/components/breadcrumb.js +13 -3
  62. package/dist/components/button-group.d.ts +21 -0
  63. package/dist/components/button-group.d.ts.map +1 -1
  64. package/dist/components/button-group.js +21 -0
  65. package/dist/components/button.d.ts +20 -0
  66. package/dist/components/button.d.ts.map +1 -1
  67. package/dist/components/button.js +20 -0
  68. package/dist/components/calendar.d.ts +15 -0
  69. package/dist/components/calendar.d.ts.map +1 -1
  70. package/dist/components/calendar.js +15 -0
  71. package/dist/components/card-row.d.ts +15 -5
  72. package/dist/components/card-row.d.ts.map +1 -1
  73. package/dist/components/card-row.js +15 -5
  74. package/dist/components/card.d.ts +16 -0
  75. package/dist/components/card.d.ts.map +1 -1
  76. package/dist/components/card.js +16 -0
  77. package/dist/components/carousel.d.ts +12 -0
  78. package/dist/components/carousel.d.ts.map +1 -1
  79. package/dist/components/carousel.js +12 -0
  80. package/dist/components/catalog-drawer.d.ts +29 -0
  81. package/dist/components/catalog-drawer.d.ts.map +1 -0
  82. package/dist/components/catalog-drawer.js +31 -0
  83. package/dist/components/catalog-entry.d.ts +49 -26
  84. package/dist/components/catalog-entry.d.ts.map +1 -1
  85. package/dist/components/catalog-entry.js +5 -27
  86. package/dist/components/channel-view.d.ts +23 -0
  87. package/dist/components/channel-view.d.ts.map +1 -1
  88. package/dist/components/channel-view.js +13 -4
  89. package/dist/components/chart-area-stacked.d.ts +11 -1
  90. package/dist/components/chart-area-stacked.d.ts.map +1 -1
  91. package/dist/components/chart-area-stacked.js +12 -2
  92. package/dist/components/chart-bar-horizontal.d.ts +11 -1
  93. package/dist/components/chart-bar-horizontal.d.ts.map +1 -1
  94. package/dist/components/chart-bar-horizontal.js +12 -2
  95. package/dist/components/chart-bar-multiple.d.ts +9 -4
  96. package/dist/components/chart-bar-multiple.d.ts.map +1 -1
  97. package/dist/components/chart-bar-multiple.js +10 -5
  98. package/dist/components/chart-bar-stacked.d.ts +11 -1
  99. package/dist/components/chart-bar-stacked.d.ts.map +1 -1
  100. package/dist/components/chart-bar-stacked.js +12 -2
  101. package/dist/components/chart-card.d.ts +33 -20
  102. package/dist/components/chart-card.d.ts.map +1 -1
  103. package/dist/components/chart-card.js +18 -4
  104. package/dist/components/chart-date-range-control.d.ts +15 -10
  105. package/dist/components/chart-date-range-control.d.ts.map +1 -1
  106. package/dist/components/chart-date-range-control.js +14 -10
  107. package/dist/components/chart-date-range.d.ts.map +1 -1
  108. package/dist/components/chart-entity-colors.d.ts +7 -0
  109. package/dist/components/chart-entity-colors.d.ts.map +1 -1
  110. package/dist/components/chart-entity-colors.js +7 -0
  111. package/dist/components/chart-sparkline.d.ts +10 -0
  112. package/dist/components/chart-sparkline.d.ts.map +1 -1
  113. package/dist/components/chart-sparkline.js +8 -7
  114. package/dist/components/chart.d.ts +10 -0
  115. package/dist/components/chart.d.ts.map +1 -1
  116. package/dist/components/chart.js +10 -0
  117. package/dist/components/checkbox.d.ts +15 -0
  118. package/dist/components/checkbox.d.ts.map +1 -1
  119. package/dist/components/checkbox.js +15 -0
  120. package/dist/components/code-block.d.ts +15 -0
  121. package/dist/components/code-block.d.ts.map +1 -1
  122. package/dist/components/code-block.js +15 -0
  123. package/dist/components/collapsible.d.ts +12 -0
  124. package/dist/components/collapsible.d.ts.map +1 -1
  125. package/dist/components/collapsible.js +12 -0
  126. package/dist/components/collection-filters.d.ts +15 -2
  127. package/dist/components/collection-filters.d.ts.map +1 -1
  128. package/dist/components/collection-filters.js +13 -1
  129. package/dist/components/collection-page.d.ts +29 -115
  130. package/dist/components/collection-page.d.ts.map +1 -1
  131. package/dist/components/collection-page.js +24 -140
  132. package/dist/components/collection-search.d.ts +14 -0
  133. package/dist/components/collection-search.d.ts.map +1 -1
  134. package/dist/components/collection-search.js +14 -0
  135. package/dist/components/collection-sort.d.ts +13 -3
  136. package/dist/components/collection-sort.d.ts.map +1 -1
  137. package/dist/components/collection-sort.js +13 -3
  138. package/dist/components/collection-toolbar.d.ts +13 -0
  139. package/dist/components/collection-toolbar.d.ts.map +1 -1
  140. package/dist/components/collection-toolbar.js +13 -0
  141. package/dist/components/combobox.d.ts +17 -0
  142. package/dist/components/combobox.d.ts.map +1 -1
  143. package/dist/components/combobox.js +17 -0
  144. package/dist/components/command.d.ts +16 -0
  145. package/dist/components/command.d.ts.map +1 -1
  146. package/dist/components/command.js +16 -0
  147. package/dist/components/company-card.d.ts +16 -4
  148. package/dist/components/company-card.d.ts.map +1 -1
  149. package/dist/components/company-card.js +16 -4
  150. package/dist/components/confirm-dialog.d.ts +24 -14
  151. package/dist/components/confirm-dialog.d.ts.map +1 -1
  152. package/dist/components/confirm-dialog.js +16 -10
  153. package/dist/components/context-menu.d.ts +10 -0
  154. package/dist/components/context-menu.d.ts.map +1 -1
  155. package/dist/components/context-menu.js +10 -0
  156. package/dist/components/copy-button.d.ts +10 -0
  157. package/dist/components/copy-button.d.ts.map +1 -1
  158. package/dist/components/copy-button.js +10 -0
  159. package/dist/components/dashboard-shell.d.ts +14 -0
  160. package/dist/components/dashboard-shell.d.ts.map +1 -1
  161. package/dist/components/dashboard-shell.js +14 -0
  162. package/dist/components/data-table.d.ts +20 -0
  163. package/dist/components/data-table.d.ts.map +1 -1
  164. package/dist/components/data-table.js +23 -2
  165. package/dist/components/desktop-shell.d.ts +15 -0
  166. package/dist/components/desktop-shell.d.ts.map +1 -1
  167. package/dist/components/desktop-shell.js +15 -0
  168. package/dist/components/dialog.d.ts +16 -0
  169. package/dist/components/dialog.d.ts.map +1 -1
  170. package/dist/components/dialog.js +16 -0
  171. package/dist/components/diff-count.d.ts +11 -0
  172. package/dist/components/diff-count.d.ts.map +1 -1
  173. package/dist/components/diff-count.js +11 -0
  174. package/dist/components/disclosure-row.d.ts +12 -0
  175. package/dist/components/disclosure-row.d.ts.map +1 -1
  176. package/dist/components/disclosure-row.js +12 -0
  177. package/dist/components/disclosure.d.ts +15 -5
  178. package/dist/components/disclosure.d.ts.map +1 -1
  179. package/dist/components/disclosure.js +15 -5
  180. package/dist/components/drawer.d.ts +13 -0
  181. package/dist/components/drawer.d.ts.map +1 -1
  182. package/dist/components/drawer.js +13 -0
  183. package/dist/components/dropdown-menu.d.ts +17 -5
  184. package/dist/components/dropdown-menu.d.ts.map +1 -1
  185. package/dist/components/dropdown-menu.js +20 -7
  186. package/dist/components/empty-art.d.ts +1 -1
  187. package/dist/components/empty-art.d.ts.map +1 -1
  188. package/dist/components/empty-art.js +6 -0
  189. package/dist/components/empty-state.d.ts +24 -10
  190. package/dist/components/empty-state.d.ts.map +1 -1
  191. package/dist/components/empty-state.js +23 -1
  192. package/dist/components/entry-scene.d.ts +33 -20
  193. package/dist/components/entry-scene.d.ts.map +1 -1
  194. package/dist/components/entry-scene.js +34 -7
  195. package/dist/components/expandable-block.d.ts +10 -0
  196. package/dist/components/expandable-block.d.ts.map +1 -1
  197. package/dist/components/expandable-block.js +10 -0
  198. package/dist/components/field.d.ts +17 -0
  199. package/dist/components/field.d.ts.map +1 -1
  200. package/dist/components/field.js +17 -0
  201. package/dist/components/file-diff.d.ts +12 -0
  202. package/dist/components/file-diff.d.ts.map +1 -1
  203. package/dist/components/file-diff.js +12 -0
  204. package/dist/components/file-type-icon.d.ts +12 -0
  205. package/dist/components/file-type-icon.d.ts.map +1 -1
  206. package/dist/components/file-type-icon.js +12 -0
  207. package/dist/components/footer.d.ts +14 -0
  208. package/dist/components/footer.d.ts.map +1 -1
  209. package/dist/components/footer.js +14 -0
  210. package/dist/components/form-dialog.d.ts +10 -0
  211. package/dist/components/form-dialog.d.ts.map +1 -1
  212. package/dist/components/form-dialog.js +10 -0
  213. package/dist/components/form-drawer.d.ts +24 -11
  214. package/dist/components/form-drawer.d.ts.map +1 -1
  215. package/dist/components/form-drawer.js +13 -3
  216. package/dist/components/form.d.ts +17 -0
  217. package/dist/components/form.d.ts.map +1 -1
  218. package/dist/components/form.js +17 -0
  219. package/dist/components/glass-control.d.ts +13 -0
  220. package/dist/components/glass-control.d.ts.map +1 -1
  221. package/dist/components/glass-control.js +13 -0
  222. package/dist/components/hive-scene.d.ts +14 -0
  223. package/dist/components/hive-scene.d.ts.map +1 -1
  224. package/dist/components/hive-scene.js +14 -0
  225. package/dist/components/house-icons.d.ts +15 -0
  226. package/dist/components/house-icons.d.ts.map +1 -1
  227. package/dist/components/house-icons.js +15 -0
  228. package/dist/components/hover-card.d.ts +15 -0
  229. package/dist/components/hover-card.d.ts.map +1 -1
  230. package/dist/components/hover-card.js +15 -0
  231. package/dist/components/identity-mark.d.ts +55 -0
  232. package/dist/components/identity-mark.d.ts.map +1 -0
  233. package/dist/components/identity-mark.js +66 -0
  234. package/dist/components/input-group.d.ts +16 -0
  235. package/dist/components/input-group.d.ts.map +1 -1
  236. package/dist/components/input-group.js +16 -0
  237. package/dist/components/input-otp.d.ts +15 -0
  238. package/dist/components/input-otp.d.ts.map +1 -1
  239. package/dist/components/input-otp.js +15 -0
  240. package/dist/components/input.d.ts +15 -0
  241. package/dist/components/input.d.ts.map +1 -1
  242. package/dist/components/input.js +15 -0
  243. package/dist/components/item.d.ts +16 -0
  244. package/dist/components/item.d.ts.map +1 -1
  245. package/dist/components/item.js +16 -0
  246. package/dist/components/kbd.d.ts +14 -0
  247. package/dist/components/kbd.d.ts.map +1 -1
  248. package/dist/components/kbd.js +14 -0
  249. package/dist/components/kpi-card.d.ts +21 -13
  250. package/dist/components/kpi-card.d.ts.map +1 -1
  251. package/dist/components/kpi-card.js +14 -3
  252. package/dist/components/label-system.d.ts +12 -0
  253. package/dist/components/label-system.d.ts.map +1 -1
  254. package/dist/components/label-system.js +12 -0
  255. package/dist/components/label.d.ts +15 -0
  256. package/dist/components/label.d.ts.map +1 -1
  257. package/dist/components/label.js +15 -0
  258. package/dist/components/library-shelf.d.ts +35 -0
  259. package/dist/components/library-shelf.d.ts.map +1 -0
  260. package/dist/components/library-shelf.js +40 -0
  261. package/dist/components/memory-item.d.ts +12 -0
  262. package/dist/components/memory-item.d.ts.map +1 -1
  263. package/dist/components/memory-item.js +12 -0
  264. package/dist/components/menu-choice-row.d.ts +13 -5
  265. package/dist/components/menu-choice-row.d.ts.map +1 -1
  266. package/dist/components/menu-choice-row.js +12 -6
  267. package/dist/components/menubar.d.ts +13 -0
  268. package/dist/components/menubar.d.ts.map +1 -1
  269. package/dist/components/menubar.js +13 -0
  270. package/dist/components/message-notice.d.ts +16 -0
  271. package/dist/components/message-notice.d.ts.map +1 -1
  272. package/dist/components/message-notice.js +18 -2
  273. package/dist/components/model-identity.d.ts +16 -3
  274. package/dist/components/model-identity.d.ts.map +1 -1
  275. package/dist/components/model-identity.js +16 -3
  276. package/dist/components/model-mark.d.ts +15 -2
  277. package/dist/components/model-mark.d.ts.map +1 -1
  278. package/dist/components/model-mark.js +15 -2
  279. package/dist/components/nadia-presence.d.ts +10 -4
  280. package/dist/components/nadia-presence.d.ts.map +1 -1
  281. package/dist/components/nadia-presence.js +10 -4
  282. package/dist/components/native-select.d.ts +16 -0
  283. package/dist/components/native-select.d.ts.map +1 -1
  284. package/dist/components/native-select.js +16 -0
  285. package/dist/components/navigation-menu.d.ts +14 -0
  286. package/dist/components/navigation-menu.d.ts.map +1 -1
  287. package/dist/components/navigation-menu.js +14 -0
  288. package/dist/components/notice-banner.d.ts +10 -3
  289. package/dist/components/notice-banner.d.ts.map +1 -1
  290. package/dist/components/notice-banner.js +9 -3
  291. package/dist/components/numbered-steps.d.ts +33 -0
  292. package/dist/components/numbered-steps.d.ts.map +1 -0
  293. package/dist/components/numbered-steps.js +23 -0
  294. package/dist/components/object-page.d.ts +37 -0
  295. package/dist/components/object-page.d.ts.map +1 -0
  296. package/dist/components/object-page.js +19 -0
  297. package/dist/components/object-workspace.d.ts +26 -36
  298. package/dist/components/object-workspace.d.ts.map +1 -1
  299. package/dist/components/object-workspace.js +27 -24
  300. package/dist/components/overview-page.d.ts +24 -0
  301. package/dist/components/overview-page.d.ts.map +1 -0
  302. package/dist/components/overview-page.js +26 -0
  303. package/dist/components/page-actions.d.ts +28 -23
  304. package/dist/components/page-actions.d.ts.map +1 -1
  305. package/dist/components/page-actions.js +20 -14
  306. package/dist/components/page-header.d.ts +11 -5
  307. package/dist/components/page-header.d.ts.map +1 -1
  308. package/dist/components/page-header.js +11 -5
  309. package/dist/components/pagination.d.ts +15 -0
  310. package/dist/components/pagination.d.ts.map +1 -1
  311. package/dist/components/pagination.js +15 -0
  312. package/dist/components/pairing-code.d.ts +15 -4
  313. package/dist/components/pairing-code.d.ts.map +1 -1
  314. package/dist/components/pairing-code.js +15 -4
  315. package/dist/components/pending-label.d.ts +12 -4
  316. package/dist/components/pending-label.d.ts.map +1 -1
  317. package/dist/components/pending-label.js +12 -4
  318. package/dist/components/picture-label.d.ts +15 -7
  319. package/dist/components/picture-label.d.ts.map +1 -1
  320. package/dist/components/picture-label.js +15 -7
  321. package/dist/components/platform-mark.d.ts +12 -3
  322. package/dist/components/platform-mark.d.ts.map +1 -1
  323. package/dist/components/platform-mark.js +12 -3
  324. package/dist/components/plugin-slot-boundary.d.ts +15 -0
  325. package/dist/components/plugin-slot-boundary.d.ts.map +1 -1
  326. package/dist/components/plugin-slot-boundary.js +15 -0
  327. package/dist/components/popover.d.ts +15 -0
  328. package/dist/components/popover.d.ts.map +1 -1
  329. package/dist/components/popover.js +15 -0
  330. package/dist/components/portal-sidebar-frame.d.ts +26 -12
  331. package/dist/components/portal-sidebar-frame.d.ts.map +1 -1
  332. package/dist/components/portal-sidebar-frame.js +26 -0
  333. package/dist/components/progress.d.ts +10 -8
  334. package/dist/components/progress.d.ts.map +1 -1
  335. package/dist/components/progress.js +11 -9
  336. package/dist/components/qr-code.d.ts +9 -3
  337. package/dist/components/qr-code.d.ts.map +1 -1
  338. package/dist/components/qr-code.js +9 -3
  339. package/dist/components/radio-group.d.ts +15 -0
  340. package/dist/components/radio-group.d.ts.map +1 -1
  341. package/dist/components/radio-group.js +15 -0
  342. package/dist/components/reading-column.d.ts +11 -0
  343. package/dist/components/reading-column.d.ts.map +1 -1
  344. package/dist/components/reading-column.js +11 -0
  345. package/dist/components/record-identity.d.ts +12 -7
  346. package/dist/components/record-identity.d.ts.map +1 -1
  347. package/dist/components/record-identity.js +11 -7
  348. package/dist/components/record-list.d.ts +119 -0
  349. package/dist/components/record-list.d.ts.map +1 -0
  350. package/dist/components/record-list.js +161 -0
  351. package/dist/components/record-sheet.d.ts +36 -0
  352. package/dist/components/record-sheet.d.ts.map +1 -0
  353. package/dist/components/record-sheet.js +19 -0
  354. package/dist/components/record-time.d.ts +27 -11
  355. package/dist/components/record-time.d.ts.map +1 -1
  356. package/dist/components/record-time.js +34 -12
  357. package/dist/components/resizable.d.ts +10 -0
  358. package/dist/components/resizable.d.ts.map +1 -1
  359. package/dist/components/resizable.js +10 -0
  360. package/dist/components/row-edit-form.d.ts +8 -5
  361. package/dist/components/row-edit-form.d.ts.map +1 -1
  362. package/dist/components/row-edit-form.js +8 -5
  363. package/dist/components/run-timeline.d.ts +24 -11
  364. package/dist/components/run-timeline.d.ts.map +1 -1
  365. package/dist/components/run-timeline.js +13 -6
  366. package/dist/components/scope-switcher.d.ts +11 -0
  367. package/dist/components/scope-switcher.d.ts.map +1 -1
  368. package/dist/components/scope-switcher.js +20 -9
  369. package/dist/components/scroll-area.d.ts +12 -0
  370. package/dist/components/scroll-area.d.ts.map +1 -1
  371. package/dist/components/scroll-area.js +12 -0
  372. package/dist/components/select.d.ts +16 -0
  373. package/dist/components/select.d.ts.map +1 -1
  374. package/dist/components/select.js +16 -0
  375. package/dist/components/separator.d.ts +11 -0
  376. package/dist/components/separator.d.ts.map +1 -1
  377. package/dist/components/separator.js +11 -0
  378. package/dist/components/settings-facts.d.ts +18 -1
  379. package/dist/components/settings-facts.d.ts.map +1 -1
  380. package/dist/components/settings-facts.js +20 -1
  381. package/dist/components/settings-page.d.ts +20 -0
  382. package/dist/components/settings-page.d.ts.map +1 -0
  383. package/dist/components/settings-page.js +16 -0
  384. package/dist/components/settings-section.d.ts +38 -8
  385. package/dist/components/settings-section.d.ts.map +1 -1
  386. package/dist/components/settings-section.js +33 -7
  387. package/dist/components/sheet.d.ts +16 -0
  388. package/dist/components/sheet.d.ts.map +1 -1
  389. package/dist/components/sheet.js +16 -0
  390. package/dist/components/sidebar-sections.d.ts +40 -0
  391. package/dist/components/sidebar-sections.d.ts.map +1 -0
  392. package/dist/components/sidebar-sections.js +35 -0
  393. package/dist/components/sidebar.d.ts +14 -1
  394. package/dist/components/sidebar.d.ts.map +1 -1
  395. package/dist/components/sidebar.js +13 -2
  396. package/dist/components/skeleton.d.ts +10 -0
  397. package/dist/components/skeleton.d.ts.map +1 -1
  398. package/dist/components/skeleton.js +11 -1
  399. package/dist/components/slider.d.ts +14 -0
  400. package/dist/components/slider.d.ts.map +1 -1
  401. package/dist/components/slider.js +14 -0
  402. package/dist/components/sonner.d.ts +18 -0
  403. package/dist/components/sonner.d.ts.map +1 -1
  404. package/dist/components/sonner.js +18 -0
  405. package/dist/components/status-badge.d.ts +13 -2
  406. package/dist/components/status-badge.d.ts.map +1 -1
  407. package/dist/components/status-badge.js +21 -9
  408. package/dist/components/status-dot.d.ts +12 -0
  409. package/dist/components/status-dot.d.ts.map +1 -1
  410. package/dist/components/status-dot.js +12 -0
  411. package/dist/components/status-row.d.ts +14 -0
  412. package/dist/components/status-row.d.ts.map +1 -1
  413. package/dist/components/status-row.js +14 -0
  414. package/dist/components/switch.d.ts +15 -0
  415. package/dist/components/switch.d.ts.map +1 -1
  416. package/dist/components/switch.js +15 -0
  417. package/dist/components/table-card.d.ts +16 -3
  418. package/dist/components/table-card.d.ts.map +1 -1
  419. package/dist/components/table-card.js +16 -3
  420. package/dist/components/table-value.d.ts +24 -2
  421. package/dist/components/table-value.d.ts.map +1 -1
  422. package/dist/components/table-value.js +25 -3
  423. package/dist/components/table.d.ts +16 -0
  424. package/dist/components/table.d.ts.map +1 -1
  425. package/dist/components/table.js +17 -1
  426. package/dist/components/tabs.d.ts +27 -0
  427. package/dist/components/tabs.d.ts.map +1 -1
  428. package/dist/components/tabs.js +27 -0
  429. package/dist/components/tag.d.ts +12 -2
  430. package/dist/components/tag.d.ts.map +1 -1
  431. package/dist/components/tag.js +12 -2
  432. package/dist/components/text-link.d.ts +17 -0
  433. package/dist/components/text-link.d.ts.map +1 -1
  434. package/dist/components/text-link.js +17 -0
  435. package/dist/components/textarea.d.ts +14 -0
  436. package/dist/components/textarea.d.ts.map +1 -1
  437. package/dist/components/textarea.js +14 -0
  438. package/dist/components/theme-mode-switcher.d.ts +21 -0
  439. package/dist/components/theme-mode-switcher.d.ts.map +1 -1
  440. package/dist/components/theme-mode-switcher.js +23 -1
  441. package/dist/components/toggle-group.d.ts +13 -0
  442. package/dist/components/toggle-group.d.ts.map +1 -1
  443. package/dist/components/toggle-group.js +13 -0
  444. package/dist/components/toggle.d.ts +14 -0
  445. package/dist/components/toggle.d.ts.map +1 -1
  446. package/dist/components/toggle.js +14 -0
  447. package/dist/components/tool-icon.d.ts +14 -4
  448. package/dist/components/tool-icon.d.ts.map +1 -1
  449. package/dist/components/tool-icon.js +27 -42
  450. package/dist/components/tooltip.d.ts +15 -0
  451. package/dist/components/tooltip.d.ts.map +1 -1
  452. package/dist/components/tooltip.js +15 -0
  453. package/dist/components/trend-badge.d.ts +16 -1
  454. package/dist/components/trend-badge.d.ts.map +1 -1
  455. package/dist/components/trend-badge.js +16 -7
  456. package/dist/components/update-card.d.ts +36 -0
  457. package/dist/components/update-card.d.ts.map +1 -0
  458. package/dist/components/update-card.js +28 -0
  459. package/dist/components/usage-meter.d.ts +15 -0
  460. package/dist/components/usage-meter.d.ts.map +1 -1
  461. package/dist/components/usage-meter.js +15 -0
  462. package/dist/components/waiting-line.d.ts +13 -10
  463. package/dist/components/waiting-line.d.ts.map +1 -1
  464. package/dist/components/waiting-line.js +13 -10
  465. package/dist/eslint/index.js +8 -0
  466. package/dist/eslint/rules/empty-state-owner.js +145 -0
  467. package/dist/eslint/rules/menu-owner.js +75 -0
  468. package/dist/eslint/rules/no-decorative-icon.js +164 -0
  469. package/dist/eslint/rules/page-composition.js +232 -0
  470. package/dist/eslint/rules/rendered-import.js +121 -0
  471. package/dist/eslint/strict-design-system.js +1 -1
  472. package/dist/hooks/use-hydrated.d.ts +2 -0
  473. package/dist/hooks/use-hydrated.d.ts.map +1 -0
  474. package/dist/hooks/use-hydrated.js +7 -0
  475. package/dist/index.d.ts +15 -10
  476. package/dist/index.d.ts.map +1 -1
  477. package/dist/index.js +15 -10
  478. package/dist/internal/catalog-list.d.ts +14 -0
  479. package/dist/internal/catalog-list.d.ts.map +1 -0
  480. package/dist/internal/catalog-list.js +53 -0
  481. package/dist/internal/empty.d.ts +6 -9
  482. package/dist/internal/empty.d.ts.map +1 -1
  483. package/dist/internal/empty.js +24 -22
  484. package/dist/internal/footer-strip.d.ts +0 -4
  485. package/dist/internal/footer-strip.d.ts.map +1 -1
  486. package/dist/internal/footer-strip.js +0 -4
  487. package/dist/internal/record-menu-items.d.ts +19 -0
  488. package/dist/internal/record-menu-items.d.ts.map +1 -0
  489. package/dist/internal/record-menu-items.js +20 -0
  490. package/dist/internal/settings-save.d.ts +43 -0
  491. package/dist/internal/settings-save.d.ts.map +1 -0
  492. package/dist/internal/settings-save.js +147 -0
  493. package/dist/lib/theme-mode.d.ts +1 -1
  494. package/dist/lib/theme-mode.js +1 -1
  495. package/dist/showcase/assets.d.ts +8 -0
  496. package/dist/showcase/assets.d.ts.map +1 -0
  497. package/dist/showcase/assets.js +13 -0
  498. package/dist/showcase/foundations.d.ts +2 -0
  499. package/dist/showcase/foundations.d.ts.map +1 -0
  500. package/dist/showcase/foundations.js +61 -0
  501. package/dist/showcase/samples.d.ts +21 -0
  502. package/dist/showcase/samples.d.ts.map +1 -0
  503. package/dist/showcase/samples.js +48 -0
  504. package/dist/showcase/showcase.d.ts +10 -0
  505. package/dist/showcase/showcase.d.ts.map +1 -0
  506. package/dist/showcase/showcase.js +44 -0
  507. package/dist/showcase/specimens/actions.d.ts +7 -0
  508. package/dist/showcase/specimens/actions.d.ts.map +1 -0
  509. package/dist/showcase/specimens/actions.js +15 -0
  510. package/dist/showcase/specimens/charts.d.ts +17 -0
  511. package/dist/showcase/specimens/charts.d.ts.map +1 -0
  512. package/dist/showcase/specimens/charts.js +104 -0
  513. package/dist/showcase/specimens/choices.d.ts +21 -0
  514. package/dist/showcase/specimens/choices.d.ts.map +1 -0
  515. package/dist/showcase/specimens/choices.js +68 -0
  516. package/dist/showcase/specimens/compositions.d.ts +39 -0
  517. package/dist/showcase/specimens/compositions.d.ts.map +1 -0
  518. package/dist/showcase/specimens/compositions.js +270 -0
  519. package/dist/showcase/specimens/data.d.ts +31 -0
  520. package/dist/showcase/specimens/data.d.ts.map +1 -0
  521. package/dist/showcase/specimens/data.js +111 -0
  522. package/dist/showcase/specimens/feedback.d.ts +23 -0
  523. package/dist/showcase/specimens/feedback.d.ts.map +1 -0
  524. package/dist/showcase/specimens/feedback.js +64 -0
  525. package/dist/showcase/specimens/index.d.ts +164 -0
  526. package/dist/showcase/specimens/index.d.ts.map +1 -0
  527. package/dist/showcase/specimens/index.js +24 -0
  528. package/dist/showcase/specimens/inputs.d.ts +22 -0
  529. package/dist/showcase/specimens/inputs.d.ts.map +1 -0
  530. package/dist/showcase/specimens/inputs.js +60 -0
  531. package/dist/showcase/specimens/menus.d.ts +20 -0
  532. package/dist/showcase/specimens/menus.d.ts.map +1 -0
  533. package/dist/showcase/specimens/menus.js +65 -0
  534. package/dist/showcase/specimens/navigation.d.ts +22 -0
  535. package/dist/showcase/specimens/navigation.d.ts.map +1 -0
  536. package/dist/showcase/specimens/navigation.js +103 -0
  537. package/dist/showcase/specimens/other.d.ts +26 -0
  538. package/dist/showcase/specimens/other.d.ts.map +1 -0
  539. package/dist/showcase/specimens/other.js +73 -0
  540. package/dist/showcase/specimens/specimen.d.ts +5 -0
  541. package/dist/showcase/specimens/specimen.d.ts.map +1 -0
  542. package/dist/showcase/specimens/specimen.js +1 -0
  543. package/dist/showcase/specimens/status.d.ts +22 -0
  544. package/dist/showcase/specimens/status.d.ts.map +1 -0
  545. package/dist/showcase/specimens/status.js +44 -0
  546. package/dist/showcase/usage.generated.d.ts +16 -0
  547. package/dist/showcase/usage.generated.d.ts.map +1 -0
  548. package/dist/showcase/usage.generated.js +1788 -0
  549. package/dist/standalone/index.js +1 -1
  550. package/dist/styles/components.css +21 -0
  551. package/package.json +8 -3
  552. package/dist/components/automation-section.d.ts +0 -78
  553. package/dist/components/automation-section.d.ts.map +0 -1
  554. package/dist/components/automation-section.js +0 -75
  555. package/dist/components/catalog-tile.d.ts +0 -19
  556. package/dist/components/catalog-tile.d.ts.map +0 -1
  557. package/dist/components/catalog-tile.js +0 -13
  558. package/dist/components/feedback-state.d.ts +0 -14
  559. package/dist/components/feedback-state.d.ts.map +0 -1
  560. package/dist/components/feedback-state.js +0 -65
  561. package/dist/components/installer-shell.d.ts +0 -25
  562. package/dist/components/installer-shell.d.ts.map +0 -1
  563. package/dist/components/installer-shell.js +0 -32
  564. package/dist/components/settings-form.d.ts +0 -9
  565. package/dist/components/settings-form.d.ts.map +0 -1
  566. package/dist/components/settings-form.js +0 -83
@@ -9,6 +9,32 @@ import { cn } from "../lib/utils.js";
9
9
  function ItemRow({ item, variant }) {
10
10
  return (_jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { isActive: item.current, tooltip: item.label, ...(variant ? { variant } : {}), children: [item.icon, _jsx("span", { className: "truncate", children: item.label })] }) }));
11
11
  }
12
+ /**
13
+ * The Portal's navigation frame, without the Portal's routing: the wordmark and
14
+ * the section name over the collapse control, the Find control with its
15
+ * shortcut, the labelled nav bands, the band that leads out of the Portal, and
16
+ * the account at the foot.
17
+ *
18
+ * Its regions are separated by the 1 px guide over the line colour, as the
19
+ * Portal's own shell separates them, so a sidebar region takes no border of its
20
+ * own.
21
+ *
22
+ * The frame carries geometry and brand imagery only. Every word, icon and
23
+ * active marking arrives as a prop, so the Portal can pass its nav model and
24
+ * the website can pass a sample of it.
25
+ *
26
+ * @family Navigation
27
+ * @when `PortalSidebarFrame` is the Portal's whole left column, and the website's sample of it.
28
+ * @instead Nadia's left column belongs to `DesktopAppShell`. Both draw their rows with the same
29
+ * `SidebarMenuButton` and end with the same `AccountMenu`; neither paints its own selected fill or
30
+ * its own account block.
31
+ * @behaviour Wordmark and product name over the collapse control, then Find, the bands, the way out
32
+ * (Get Nadia) and the account, split by 1 px guides.
33
+ * @words Find is one word beside ⌘K. Bands are short nouns; items are nouns, one or two words,
34
+ * sentence case.
35
+ * @access The column is a labelled `nav`. Find is a button named with its shortcut. The wordmark is
36
+ * `role="img"` named nadicode.
37
+ */
12
38
  export function PortalSidebarFrame({ account, bands, className, findLabel, footerItem, subtitle, toggleLabel, }) {
13
39
  return (_jsx(Sidebar, { collapsible: "none", className: cn("h-auto shrink-0", className), children: _jsxs("div", { className: "grid min-h-0 flex-1 grid-rows-[auto_minmax(0,1fr)_auto_auto] bg-border *:min-w-0", children: [_jsxs("div", { className: "grid grid-rows-[3.5rem_auto] gap-px bg-border *:bg-sidebar", children: [_jsxs(SidebarHeader, { className: "h-full flex-row items-center justify-between gap-1 px-3 py-0", children: [_jsxs("div", { className: "grid min-w-0 flex-1 gap-0", children: [_jsx(BrandWordmark, { alt: "", className: "h-5 w-28 max-w-full" }), _jsx("span", { className: "truncate text-xs text-muted-foreground", children: subtitle })] }), _jsx(SidebarTrigger, { "aria-label": toggleLabel, className: "shrink-0" })] }), _jsx("div", { className: "p-2", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { variant: "outline", children: [_jsx(Search, { "aria-hidden": "true", className: "text-muted-foreground" }), _jsx("span", { className: "min-w-0 flex-1 truncate text-left text-muted-foreground", children: findLabel }), _jsxs(KbdGroup, { className: "ml-auto", children: [_jsx(Kbd, { children: "\u2318" }), _jsx(Kbd, { children: "K" })] })] }) }) }) })] }), _jsx(SidebarContent, { className: "bg-sidebar", children: bands.map((band) => (_jsxs(SidebarGroup, { children: [band.label ? (_jsx(SidebarGroupLabel, { render: _jsx("h2", {}), children: band.label })) : null, _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: band.items.map((item) => (_jsx(ItemRow, { item: item }, item.id))) }) })] }, band.id))) }), footerItem ? (_jsx(SidebarGroup, { className: "border-t bg-sidebar", children: _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: _jsx(ItemRow, { item: footerItem, variant: "outline" }) }) }) })) : null, _jsx(SidebarFooter, { className: "border-t bg-sidebar", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { size: "lg", children: [_jsx(AccountMenuIdentity, { className: "flex-1", identity: account }), _jsx(ChevronsUpDown, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground" })] }) }) }) })] }) }));
14
40
  }
@@ -1,17 +1,19 @@
1
1
  import { Progress as ProgressPrimitive } from "@base-ui/react/progress";
2
2
  import { type VariantProps } from "class-variance-authority";
3
- /**
4
- * The measured bar. Stock shadcn `progress` plus one variant: a product-owned
5
- * `tone`, because the meters this replaces (usage against an included
6
- * allowance) have to say whether a full bar is fine or a problem. Tone is a
7
- * consumer decision, never derived from the measurement. A value past `max`
8
- * fills the track and takes the over-cap paint, which is the bar saying the
9
- * allowance is spent — not a second segment.
10
- */
11
3
  declare const progressIndicatorVariants: (props?: ({
12
4
  tone?: "default" | "warning" | "critical" | null | undefined;
13
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
14
6
  type ProgressTone = NonNullable<VariantProps<typeof progressIndicatorVariants>["tone"]>;
7
+ /**
8
+ * A known amount against a real maximum, with its label and value.
9
+ *
10
+ * @family Data
11
+ * @when A known amount against a real maximum, with its label and value: included runs used against the plan's allowance.
12
+ * @instead An unknown wait is the waiting line, never a bar with an invented percentage. A run's consumption in a dense spot is a `UsageMeter`. A single figure is a `KpiCard`.
13
+ * @behaviour A 4 px track in the `line` colour. The fill moves only when the reading changes, on `open`; still under reduced motion. `tone` is the product's threshold, never derived from the value. Past the maximum the bar fills and turns red, whatever the tone.
14
+ * @words Print the work and its unit in `ProgressValue`: "620 of 1,000".
15
+ * @access A `progressbar` named by its `ProgressLabel` or `aria-label`, with its value.
16
+ */
15
17
  declare function Progress({ className, children, value, min, max, tone, indicatorColor, ...props }: ProgressPrimitive.Root.Props & {
16
18
  tone?: ProgressTone;
17
19
  indicatorColor?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKlE;;;;;;;GAOG;AAEH,QAAA,MAAM,yBAAyB;;8EAc9B,CAAC;AAEF,KAAK,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAiBxF,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,GAAO,EACP,GAAS,EACT,IAAgB,EAChB,cAAc,EACd,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,YAAY,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,+BAwBjF;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,+BAW5E;AAOD,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,+BA8B3F;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,+BAQ5E;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,+BAQ5E;AAED,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,yBAAyB,GAC1B,CAAC;AACF,YAAY,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKlE,QAAA,MAAM,yBAAyB;;8EAc9B,CAAC;AAEF,KAAK,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAiBxF;;;;;;;;;GASG;AACH,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,GAAO,EACP,GAAS,EACT,IAAgB,EAChB,cAAc,EACd,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,YAAY,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,+BAwBjF;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,+BAW5E;AAOD,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,+BA8B3F;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,+BAQ5E;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,+BAQ5E;AAED,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,yBAAyB,GAC1B,CAAC;AACF,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -4,14 +4,6 @@ import { Progress as ProgressPrimitive } from "@base-ui/react/progress";
4
4
  import { cva } from "class-variance-authority";
5
5
  import { createContext, useContext } from "react";
6
6
  import { cn } from "../lib/utils.js";
7
- /**
8
- * The measured bar. Stock shadcn `progress` plus one variant: a product-owned
9
- * `tone`, because the meters this replaces (usage against an included
10
- * allowance) have to say whether a full bar is fine or a problem. Tone is a
11
- * consumer decision, never derived from the measurement. A value past `max`
12
- * fills the track and takes the over-cap paint, which is the bar saying the
13
- * allowance is spent — not a second segment.
14
- */
15
7
  const progressIndicatorVariants = cva("h-full origin-left scale-x-[var(--progress-scale)] transition-transform duration-[var(--nc-duration-open)] ease-[var(--nc-ease-out-strong)] motion-reduce:transition-none rtl:origin-right", {
16
8
  variants: {
17
9
  tone: {
@@ -30,6 +22,16 @@ const ProgressStateContext = createContext({
30
22
  tone: "default",
31
23
  overCap: false,
32
24
  });
25
+ /**
26
+ * A known amount against a real maximum, with its label and value.
27
+ *
28
+ * @family Data
29
+ * @when A known amount against a real maximum, with its label and value: included runs used against the plan's allowance.
30
+ * @instead An unknown wait is the waiting line, never a bar with an invented percentage. A run's consumption in a dense spot is a `UsageMeter`. A single figure is a `KpiCard`.
31
+ * @behaviour A 4 px track in the `line` colour. The fill moves only when the reading changes, on `open`; still under reduced motion. `tone` is the product's threshold, never derived from the value. Past the maximum the bar fills and turns red, whatever the tone.
32
+ * @words Print the work and its unit in `ProgressValue`: "620 of 1,000".
33
+ * @access A `progressbar` named by its `ProgressLabel` or `aria-label`, with its value.
34
+ */
33
35
  function Progress({ className, children, value, min = 0, max = 100, tone = "default", indicatorColor, ...props }) {
34
36
  const measured = value !== null && Number.isFinite(value);
35
37
  const scale = measured && max > min ? Math.min(1, Math.max(0, (value - min) / (max - min))) : 0;
@@ -37,7 +39,7 @@ function Progress({ className, children, value, min = 0, max = 100, tone = "defa
37
39
  return (_jsx(ProgressPrimitive.Root, { value: value, min: min, max: max, "data-slot": "progress", "data-tone": tone, "data-over-cap": overCap || undefined, className: cn("flex flex-wrap gap-3", className), ...props, children: _jsxs(ProgressStateContext.Provider, { value: { scale, tone, overCap, indicatorColor }, children: [children, _jsx(ProgressTrack, { children: _jsx(ProgressIndicator, {}) })] }) }));
38
40
  }
39
41
  function ProgressTrack({ className, ...props }) {
40
- return (_jsx(ProgressPrimitive.Track, { className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted", className), "data-slot": "progress-track", ...props }));
42
+ return (_jsx(ProgressPrimitive.Track, { className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-border", className), "data-slot": "progress-track", ...props }));
41
43
  }
42
44
  function ProgressIndicator({ className, style, ...props }) {
43
45
  const { scale, tone, overCap, indicatorColor } = useContext(ProgressStateContext);
@@ -1,7 +1,13 @@
1
1
  /**
2
- * A link drawn as a QR code another device can scan: square dark modules on a
3
- * white tile in every theme, because readers expect dark on light. `label`
4
- * names what the code opens; the code itself is the image.
2
+ * A link drawn as a QR code another device can scan.
3
+ *
4
+ * @family Data
5
+ * @when Opening something on a phone from a screen: a mobile sign-in, a download link.
6
+ * @instead Two screens compared by eye is `PairingCode`. A link a person clicks is a link.
7
+ * @behaviour Square dark modules on a white tile in every theme, with the quiet zone a reader
8
+ * needs.
9
+ * @words The label names what the code opens: *Open Nadia on your phone*.
10
+ * @access `role="img"` named by `label`.
5
11
  */
6
12
  declare function QrCode({ value, label, size, className, }: {
7
13
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"qr-code.d.ts","sourceRoot":"","sources":["../../src/components/qr-code.tsx"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,iBAAS,MAAM,CAAC,EACd,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BA0BA;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"qr-code.d.ts","sourceRoot":"","sources":["../../src/components/qr-code.tsx"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,iBAAS,MAAM,CAAC,EACd,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BA0BA;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -5,9 +5,15 @@ import { cn } from "../lib/utils.js";
5
5
  /** The blank border a reader needs around the code, in modules. */
6
6
  const QUIET_ZONE = 4;
7
7
  /**
8
- * A link drawn as a QR code another device can scan: square dark modules on a
9
- * white tile in every theme, because readers expect dark on light. `label`
10
- * names what the code opens; the code itself is the image.
8
+ * A link drawn as a QR code another device can scan.
9
+ *
10
+ * @family Data
11
+ * @when Opening something on a phone from a screen: a mobile sign-in, a download link.
12
+ * @instead Two screens compared by eye is `PairingCode`. A link a person clicks is a link.
13
+ * @behaviour Square dark modules on a white tile in every theme, with the quiet zone a reader
14
+ * needs.
15
+ * @words The label names what the code opens: *Open Nadia on your phone*.
16
+ * @access `role="img"` named by `label`.
11
17
  */
12
18
  function QrCode({ value, label, size, className, }) {
13
19
  const { box, path } = useMemo(() => {
@@ -1,5 +1,20 @@
1
1
  import { Radio as RadioPrimitive } from "@base-ui/react/radio";
2
2
  import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
3
+ /**
4
+ * One option of a few, all shown at once.
5
+ *
6
+ * @family Choices
7
+ * @when One of 2 to 6 options that exclude each other, all shown at once.
8
+ * @instead Options that each need a sentence are choice tiles. Seven or more is a `Select`; a list
9
+ * to search is a `Combobox`. Another view of the same thing is `Tabs`.
10
+ * @behaviour One tab stop for the group; the arrows move and choose. The chosen circle fills with
11
+ * ink and a white 8 px dot. Preselect the safe option when there is one; leave a consequential
12
+ * choice empty until the person makes it.
13
+ * @words Options are parallel phrases in sentence case with no end punctuation: *Only me*,
14
+ * *Everyone in the company*. The legend names the setting; it does not ask a question.
15
+ * @access `role="radiogroup"` named by its legend, each radio by its label. A disabled option shows
16
+ * why in its own help line.
17
+ */
3
18
  declare function RadioGroup({ className, ...props }: RadioGroupPrimitive.Props): import("react").JSX.Element;
4
19
  declare function RadioGroupItem({ children, className, ...props }: RadioPrimitive.Root.Props): import("react").JSX.Element;
5
20
  export { RadioGroup, RadioGroupItem };
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../../src/components/radio-group.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAI/E,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,CAAC,KAAK,+BAQrE;AAED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,+BAoBnF;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../../src/components/radio-group.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAI/E;;;;;;;;;;;;;;GAcG;AACH,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,CAAC,KAAK,+BAQrE;AAED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,+BAoBnF;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
@@ -2,6 +2,21 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Radio as RadioPrimitive } from "@base-ui/react/radio";
3
3
  import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
4
4
  import { cn } from "../lib/utils.js";
5
+ /**
6
+ * One option of a few, all shown at once.
7
+ *
8
+ * @family Choices
9
+ * @when One of 2 to 6 options that exclude each other, all shown at once.
10
+ * @instead Options that each need a sentence are choice tiles. Seven or more is a `Select`; a list
11
+ * to search is a `Combobox`. Another view of the same thing is `Tabs`.
12
+ * @behaviour One tab stop for the group; the arrows move and choose. The chosen circle fills with
13
+ * ink and a white 8 px dot. Preselect the safe option when there is one; leave a consequential
14
+ * choice empty until the person makes it.
15
+ * @words Options are parallel phrases in sentence case with no end punctuation: *Only me*,
16
+ * *Everyone in the company*. The legend names the setting; it does not ask a question.
17
+ * @access `role="radiogroup"` named by its legend, each radio by its label. A disabled option shows
18
+ * why in its own help line.
19
+ */
5
20
  function RadioGroup({ className, ...props }) {
6
21
  return (_jsx(RadioGroupPrimitive, { "data-slot": "radio-group", className: cn("grid w-full gap-2", className), ...props }));
7
22
  }
@@ -1,5 +1,16 @@
1
1
  import * as React from "react";
2
2
  export type ReadingColumnWidth = "full" | "reading" | "configuration";
3
+ /**
4
+ * The column a page's content stands in: full, reading or configuration width.
5
+ *
6
+ * @family Other
7
+ * @when Setting a page's measure: `reading` for prose and conversations, `configuration` for
8
+ * settings, `full` for collections.
9
+ * @instead A settings page's column is `SettingsPage`'s. A card row is `CardRow`.
10
+ * @behaviour Centred with a maximum width per kind; full takes the content's width.
11
+ * @words None of its own.
12
+ * @access A layout container.
13
+ */
3
14
  declare function ReadingColumn({ width, className, ...props }: React.ComponentProps<"div"> & {
4
15
  width?: ReadingColumnWidth;
5
16
  }): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"reading-column.d.ts","sourceRoot":"","sources":["../../src/components/reading-column.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC;AAEtE,iBAAS,aAAa,CAAC,EACrB,KAAiB,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAA;CAAE,qBAc9D;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"reading-column.d.ts","sourceRoot":"","sources":["../../src/components/reading-column.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,iBAAS,aAAa,CAAC,EACrB,KAAiB,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAA;CAAE,qBAc9D;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,5 +1,16 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cn } from "../lib/utils.js";
3
+ /**
4
+ * The column a page's content stands in: full, reading or configuration width.
5
+ *
6
+ * @family Other
7
+ * @when Setting a page's measure: `reading` for prose and conversations, `configuration` for
8
+ * settings, `full` for collections.
9
+ * @instead A settings page's column is `SettingsPage`'s. A card row is `CardRow`.
10
+ * @behaviour Centred with a maximum width per kind; full takes the content's width.
11
+ * @words None of its own.
12
+ * @access A layout container.
13
+ */
3
14
  function ReadingColumn({ width = "reading", className, ...props }) {
4
15
  return (_jsx("div", { "data-slot": "reading-column", "data-width": width, className: cn("mx-auto flex w-full min-w-0 flex-col gap-6", width === "reading" && "max-w-3xl", width === "configuration" && "max-w-4xl", className), ...props }));
5
16
  }
@@ -1,16 +1,21 @@
1
1
  import type { ReactNode } from "react";
2
+ import { type IdentityMarkProps } from "./identity-mark.js";
2
3
  /**
3
4
  * A record's identity in a row (DESIGN.md "Tables and missing values"): its
4
- * mark, its name, and under it one muted `detail` line saying what the record
5
- * is or where it comes from, so the row reads without a column heading. The
6
- * name holds one line and ends in an ellipsis, whole in its title, unless it
7
- * is the record's whole text, such as a memory, which `wraps` in full. The
8
- * detail breaks between words, so a long one, such as a failure inside the
9
- * row, is read whole.
5
+ * mark at 32, its name, and under it one muted `detail` line saying what the
6
+ * record is or where it comes from, so the row reads without a column heading.
7
+ *
8
+ * @family Status
9
+ * @when The first cell of every collection row: the mark, the name, and one muted line saying what the record is or where it comes from, so the row reads without a heading.
10
+ * @instead An Agent in a gallery is `AgentListRow`; a model is `ModelIdentity`. A descriptive item with prose and actions is `Item`.
11
+ * @behaviour The name holds one line and ends in an ellipsis, whole in its title, with a `hint` such as an ID read after it. `wraps` only when the name is the whole record, such as a memory. The detail breaks between words, so a failure inside the row is read whole. The table owns the link.
12
+ * @words The name as the record calls itself. Detail: kind, then relation, three to six words: "Company skill · every Agent has it".
13
+ * @access The name is the row link's text; the mark is decorative; the title carries the full name.
10
14
  */
11
15
  declare function RecordIdentity({ name, mark, hint, detail, wraps, }: {
12
16
  name: ReactNode;
13
- mark?: ReactNode;
17
+ /** Drawn at 32, whatever size it carries. */
18
+ mark?: IdentityMarkProps;
14
19
  /** Read after the name in its title, such as an identifier the row does not show. */
15
20
  hint?: string;
16
21
  detail?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"record-identity.d.ts","sourceRoot":"","sources":["../../src/components/record-identity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;;;;;;;;GAQG;AACH,iBAAS,cAAc,CAAC,EACtB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,KAAa,GACd,EAAE;IACD,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,+BA2BA;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"record-identity.d.ts","sourceRoot":"","sources":["../../src/components/record-identity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGlF;;;;;;;;;;;GAWG;AACH,iBAAS,cAAc,CAAC,EACtB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,KAAa,GACd,EAAE;IACD,IAAI,EAAE,SAAS,CAAC;IAChB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,+BA2BA;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,17 +1,21 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IdentityMark } from "./identity-mark.js";
2
3
  import { cn } from "../lib/utils.js";
3
4
  /**
4
5
  * A record's identity in a row (DESIGN.md "Tables and missing values"): its
5
- * mark, its name, and under it one muted `detail` line saying what the record
6
- * is or where it comes from, so the row reads without a column heading. The
7
- * name holds one line and ends in an ellipsis, whole in its title, unless it
8
- * is the record's whole text, such as a memory, which `wraps` in full. The
9
- * detail breaks between words, so a long one, such as a failure inside the
10
- * row, is read whole.
6
+ * mark at 32, its name, and under it one muted `detail` line saying what the
7
+ * record is or where it comes from, so the row reads without a column heading.
8
+ *
9
+ * @family Status
10
+ * @when The first cell of every collection row: the mark, the name, and one muted line saying what the record is or where it comes from, so the row reads without a heading.
11
+ * @instead An Agent in a gallery is `AgentListRow`; a model is `ModelIdentity`. A descriptive item with prose and actions is `Item`.
12
+ * @behaviour The name holds one line and ends in an ellipsis, whole in its title, with a `hint` such as an ID read after it. `wraps` only when the name is the whole record, such as a memory. The detail breaks between words, so a failure inside the row is read whole. The table owns the link.
13
+ * @words The name as the record calls itself. Detail: kind, then relation, three to six words: "Company skill · every Agent has it".
14
+ * @access The name is the row link's text; the mark is decorative; the title carries the full name.
11
15
  */
12
16
  function RecordIdentity({ name, mark, hint, detail, wraps = false, }) {
13
17
  // oxlint-disable-next-line anti-slop/no-runtime-typeof -- name is a ReactNode; only a string can be a title attribute.
14
18
  const title = typeof name === "string" ? (hint ? `${name} · ${hint}` : name) : undefined;
15
- return (_jsxs("span", { className: "flex min-w-0 items-center gap-2.5", "data-slot": "record-identity", children: [mark, _jsxs("span", { className: "grid min-w-0", children: [_jsx("span", { className: cn("min-w-0 font-medium", wraps ? "break-words whitespace-pre-wrap" : "truncate"), title: wraps ? undefined : title, children: name }), detail ? (_jsx("span", { className: "text-xs break-words whitespace-normal text-muted-foreground", "data-slot": "record-identity-detail", children: detail })) : null] })] }));
19
+ return (_jsxs("span", { className: "flex min-w-0 items-center gap-2.5", "data-slot": "record-identity", children: [mark ? _jsx(IdentityMark, { ...mark, size: 32 }) : null, _jsxs("span", { className: "grid min-w-0", children: [_jsx("span", { className: cn("min-w-0 font-medium", wraps ? "break-words whitespace-pre-wrap" : "truncate"), title: wraps ? undefined : title, children: name }), detail ? (_jsx("span", { className: "text-xs break-words whitespace-normal text-muted-foreground", "data-slot": "record-identity-detail", children: detail })) : null] })] }));
16
20
  }
17
21
  export { RecordIdentity };
@@ -0,0 +1,119 @@
1
+ import type { RowData } from "@tanstack/react-table";
2
+ import { type ReactNode } from "react";
3
+ import { type MenuCommand } from "./action-menu.js";
4
+ import { type DataTableRowLinkProps } from "./data-table.js";
5
+ import { type EmptyStateKind } from "./empty-state.js";
6
+ import type { IdentityMarkProps } from "./identity-mark.js";
7
+ import { type PageCommand } from "./page-actions.js";
8
+ import { type StatusBadgeTone } from "./status-badge.js";
9
+ import { type RowMessage } from "../internal/row-message.js";
10
+ export type { RowMessage };
11
+ export type RecordName = {
12
+ /** One line, ending in an ellipsis and whole in its title, unless the list `wraps`. */
13
+ name: string;
14
+ /** One muted line: what it is or where it comes from. */
15
+ detail?: ReactNode;
16
+ /** Its identity mark, drawn at 32. */
17
+ mark?: IdentityMarkProps;
18
+ };
19
+ export type RecordFact<TRecord> = {
20
+ id: string;
21
+ /** The column's name for assistive technology. */
22
+ label: string;
23
+ of: (record: TRecord) => ReactNode;
24
+ /** A phrase that takes the row's spare width; otherwise one line at its own width. */
25
+ prose?: boolean;
26
+ };
27
+ export type RecordStatus = {
28
+ label: string;
29
+ tone: StatusBadgeTone;
30
+ };
31
+ export type RecordTimeColumn<TRecord> = {
32
+ label: string;
33
+ of: (record: TRecord) => Date | number | string | null | undefined;
34
+ /** The time's sentence for this record: "Ran today 07:30", "Next Monday". */
35
+ phrase: (when: string, record: TRecord) => string;
36
+ /** What a screen reader hears beside the muted dash where a record has no time. */
37
+ missing: string;
38
+ locale?: string;
39
+ };
40
+ export type RecordListFooter = {
41
+ /** "5 Agents" */
42
+ count?: ReactNode;
43
+ /** A bounded server page: "Page 1 of 6" and the way to the others. */
44
+ pages?: {
45
+ label: ReactNode;
46
+ previous: PageCommand;
47
+ next: PageCommand;
48
+ pending?: boolean;
49
+ };
50
+ };
51
+ export type RecordListProps<TRecord extends RowData> = {
52
+ /** Names the list for assistive technology: "Skills". */
53
+ label: string;
54
+ /** Already searched, filtered and ordered; undefined while they load. */
55
+ records: readonly TRecord[] | undefined;
56
+ getId: (record: TRecord) => string;
57
+ name: (record: TRecord) => RecordName;
58
+ /** The name is the record's whole text, such as a memory: it wraps in full. */
59
+ wraps?: boolean;
60
+ facts?: readonly RecordFact<TRecord>[];
61
+ /** Only for the exception: null for the usual record. */
62
+ status?: {
63
+ label: string;
64
+ of: (record: TRecord) => RecordStatus | null;
65
+ };
66
+ time?: RecordTimeColumn<TRecord>;
67
+ /** The row's one visible command, an outline button before the three dots: "Connect", "Open report". */
68
+ command?: (record: TRecord) => ReactNode;
69
+ /** The row's three dots; its first line is `name(record).name`. */
70
+ menu?: (record: TRecord) => {
71
+ label: string;
72
+ commands: readonly MenuCommand[];
73
+ } | null;
74
+ /** Names the command column for assistive technology: "Actions". */
75
+ commandsHeader?: string;
76
+ /** The record opens its own page: the whole row is one target. */
77
+ open?: {
78
+ href: (record: TRecord) => string | null;
79
+ label: (record: TRecord) => string;
80
+ renderLink?: (props: DataTableRowLinkProps) => ReactNode;
81
+ };
82
+ /** The record's own action failed or was refused: its message inside its row. */
83
+ state?: (record: TRecord) => RowMessage | null;
84
+ /** The record being edited: its RowEditForm, inside its row. */
85
+ editor?: {
86
+ id: string;
87
+ render: (record: TRecord) => ReactNode;
88
+ };
89
+ /** Names the rows while they load; `label` when left out. */
90
+ loadingLabel?: string;
91
+ failed?: EmptyStateKind<"failed">;
92
+ empty?: EmptyStateKind<"firstUse"> | EmptyStateKind<"nothingYet">;
93
+ /** Given only while a search or filter is set. */
94
+ noMatch?: Omit<EmptyStateKind<"noResults">, "kind">;
95
+ /**
96
+ * A list that is one section of another page: "Needs attention", "2 of 5 Agents", and the one
97
+ * line under the title that says what joins the list: "Every Agent of an allowed Nadia joins".
98
+ */
99
+ heading?: {
100
+ title: string;
101
+ description?: ReactNode;
102
+ meta?: ReactNode;
103
+ };
104
+ footer?: RecordListFooter;
105
+ };
106
+ /**
107
+ * One line per record, on one resting card: its identity mark and name over
108
+ * what it is, a few comparable facts, a status only for the exception, when
109
+ * it happened, the row's one command, and its three dots last.
110
+ *
111
+ * @family Compositions
112
+ * @when A list of records inside another page: an Overview's exceptions, an object page's "Needs attention", any section that lists records a person opens or acts on. A page whose whole job is the list is a `CollectionPage`, which draws this.
113
+ * @instead Figures compared across records, read by their column headings, are a `DataTable`. Events in time are an `ActivityFeed`. Reusable things a person adds from a catalogue are a `LibraryShelf`.
114
+ * @behaviour Each row reads left to right at fixed measures: the mark and name (at most a third of the row), facts on one line, the status in its 150 px slot only when the record is the exception, the time right-aligned in tabular figures with the exact moment on hover, the row command at most 192 px wide with its label cut short, then the three dots, or a muted chevron when the row only opens. On a card too narrow for them (768 px, or 1024 px for seven columns or more or a row command), the facts, the status and the time move under the record's line, leaving out a fact or status the record does not have, and the name and its commands keep theirs. A menu of one command that is not destructive, with no row command, is that command's outline button. With `open` the whole row is one target. A failed or refused action of the record replaces its detail line, with its next steps beside its commands; the record being edited opens its form under its own line. While the records load, three still skeleton rows hold the place; then, first that holds: the failed read, no match, the empty state, the rows. A list with no records and no empty state draws nothing.
115
+ * @words Every string is the product's: `label` names the list, a time's `phrase` writes its sentence ("Updated {when}"), `missing` is what a screen reader hears for a record with no time, the menu's `label` reads "More for {record}". A status is the exception's word ("Needs attention"), never "Active" on every row.
116
+ * @access A table named by `label`, its column headings read by assistive technology only. The row link carries `open.label`; the three dots carry the menu's `label`, and the menu's first line names the record. The loading rows are a busy status named by `loadingLabel`.
117
+ */
118
+ export declare function RecordList<TRecord extends RowData>(props: RecordListProps<TRecord>): import("react").JSX.Element | null;
119
+ //# sourceMappingURL=record-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-list.d.ts","sourceRoot":"","sources":["../../src/components/record-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAElE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,2BAA2B,CAAC;AAIhF,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAI9E,OAAO,EAAE,KAAK,UAAU,EAAqC,MAAM,wBAAwB,CAAC;AAE5F,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,MAAM,MAAM,UAAU,GAAG;IACvB,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,sCAAsC;IACtC,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IACnC,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnE,6EAA6E;IAC7E,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAClD,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iBAAiB;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,sEAAsE;IACtE,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3F,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,OAAO,IAAI;IACrD,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;IACxC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,UAAU,CAAC;IACtC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,yDAAyD;IACzD,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,YAAY,GAAG,IAAI,CAAA;KAAE,CAAC;IACzE,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjC,wGAAwG;IACxG,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IACzC,mEAAmE;IACnE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACvF,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;QACzC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;QACnC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,SAAS,CAAC;KAC1D,CAAC;IACF,iFAAiF;IACjF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,CAAC;IAC/C,gEAAgE;IAChE,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAA;KAAE,CAAC;IAChE,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAClE,kDAAkD;IAClD,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IACpD;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IACvE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AA4MF;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,OAAO,SAAS,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,sCAgClF"}
@@ -0,0 +1,161 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronRight } from "lucide-react";
4
+ import { createContext, useContext } from "react";
5
+ import { ActionMenu } from "./action-menu.js";
6
+ import { DataTable, } from "./data-table.js";
7
+ import { EmptyState } from "./empty-state.js";
8
+ import { PageCommandButton } from "./page-actions.js";
9
+ import { RecordIdentity } from "./record-identity.js";
10
+ import { RecordTime, recordDate } from "./record-time.js";
11
+ import { Skeleton } from "./skeleton.js";
12
+ import { StatusBadge } from "./status-badge.js";
13
+ import { TableCard } from "./table-card.js";
14
+ import { TableValue } from "./table-value.js";
15
+ import { soleMenuButton } from "../internal/record-menu-items.js";
16
+ import { RowMessageActions, RowMessageLine } from "../internal/row-message.js";
17
+ const ShownList = createContext(undefined);
18
+ function useShownList() {
19
+ // SAFETY: only RecordList provides ShownList, with its own props, around the rows of that same RecordList<TRecord>.
20
+ return useContext(ShownList);
21
+ }
22
+ /*
23
+ * Each cell is one component for the list's whole life: TanStack renders a
24
+ * column's `cell` as a component, so a function made anew on each render would
25
+ * remount every row's cells on every render, closing a row's open menu when
26
+ * the records are read again. The cells read the list's current props instead.
27
+ */
28
+ function NameCell({ row }) {
29
+ const list = useShownList();
30
+ const shown = list.name(row.original);
31
+ const state = list.state?.(row.original);
32
+ return (_jsx(RecordIdentity, { detail: state ? _jsx(RowMessageLine, { state: state }) : shown.detail, mark: shown.mark, name: shown.name, wraps: list.wraps }));
33
+ }
34
+ function FactCell({ column, row }) {
35
+ const fact = useShownList().facts?.find((each) => each.id === column.id);
36
+ return _jsx(_Fragment, { children: fact?.of(row.original) });
37
+ }
38
+ function StatusCell({ row }) {
39
+ const shown = useShownList().status?.of(row.original);
40
+ return (_jsx("div", { className: "w-37.5", children: shown ? _jsx(StatusBadge, { label: shown.label, tone: shown.tone }) : null }));
41
+ }
42
+ function TimeCell({ row }) {
43
+ const time = useShownList().time;
44
+ if (!time)
45
+ return null;
46
+ const record = row.original;
47
+ const at = recordDate(time.of(record));
48
+ return (_jsx("div", { className: "w-23 text-right text-muted-foreground tabular-nums", children: _jsx(TableValue, { missingLabel: time.missing, value: at ? (_jsx(RecordTime, { at: at, locale: time.locale, phrase: (when) => time.phrase(when, record) })) : null }) }));
49
+ }
50
+ function CommandsCell({ row }) {
51
+ const list = useShownList();
52
+ const record = row.original;
53
+ const state = list.state?.(record);
54
+ const menu = list.menu?.(record);
55
+ const commands = menu?.commands ?? [];
56
+ const menuButton = list.command ? undefined : soleMenuButton(commands);
57
+ const command = menuButton ? (_jsx(PageCommandButton, { command: menuButton, variant: "outline" })) : (list.command?.(record));
58
+ const end = menu && commands.length > 0 && !menuButton ? (_jsx(ActionMenu, { commands: commands, label: menu.label, record: list.name(record).name })) : list.open?.href(record) && !state ? (_jsx(ChevronRight, { "aria-hidden": "true", className: "size-4 text-muted-foreground" })) : null;
59
+ if (!command && !state && !end)
60
+ return null;
61
+ return (_jsxs("div", { className: "flex items-center justify-end gap-2", children: [command ? (_jsx("div", { className: "flex max-w-48 min-w-28 justify-end [&>*]:max-w-full [&>*]:min-w-0 [&>*]:shrink [&>*>span:not([data-icon])]:truncate", children: command })) : null, state ? _jsx(RowMessageActions, { state: state }) : null, end] }));
62
+ }
63
+ function LoadingRecords({ label }) {
64
+ return (_jsx("div", { "aria-busy": "true", "aria-label": label, className: "divide-y divide-border", role: "status", children: Array.from({ length: 3 }, (_, index) => (_jsxs("div", { className: "flex min-h-14 items-center gap-4 pr-2 pl-4", children: [_jsx(Skeleton, { className: "size-8 shrink-0" }), _jsxs("div", { className: "grid min-w-0 gap-1.5", children: [_jsx(Skeleton, { className: "h-4 w-40 max-w-full" }), _jsx(Skeleton, { className: "h-3 w-56 max-w-full" })] }), _jsx(Skeleton, { className: "ml-auto h-4 w-23" })] }, index))) }));
65
+ }
66
+ function Pages({ pages }) {
67
+ const waiting = (command) => pages.pending ? { ...command, disabled: true } : command;
68
+ return (_jsxs("div", { "aria-busy": pages.pending ? true : undefined, className: "flex items-center gap-3", children: [_jsx("span", { className: "tabular-nums", children: pages.label }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(PageCommandButton, { command: waiting(pages.previous), variant: "outline" }), _jsx(PageCommandButton, { command: waiting(pages.next), variant: "outline" })] })] }));
69
+ }
70
+ function recordColumns(props) {
71
+ const columns = [
72
+ {
73
+ id: "name",
74
+ header: props.label,
75
+ meta: props.wraps ? { wraps: true } : undefined,
76
+ cell: NameCell,
77
+ },
78
+ ];
79
+ for (const fact of props.facts ?? []) {
80
+ columns.push({
81
+ id: fact.id,
82
+ header: fact.label,
83
+ accessorFn: fact.of,
84
+ meta: { ...(fact.prose ? { prose: true } : { narrow: true }), optional: true },
85
+ cell: FactCell,
86
+ });
87
+ }
88
+ if (props.status) {
89
+ columns.push({
90
+ id: "status",
91
+ header: props.status.label,
92
+ accessorFn: props.status.of,
93
+ meta: { narrow: true, optional: true },
94
+ cell: StatusCell,
95
+ });
96
+ }
97
+ if (props.time) {
98
+ columns.push({ id: "time", header: props.time.label, meta: { narrow: true }, cell: TimeCell });
99
+ }
100
+ if (props.menu || props.command || props.open || props.state) {
101
+ columns.push({
102
+ id: "commands",
103
+ header: props.commandsHeader ?? props.label,
104
+ meta: { narrow: true },
105
+ cell: CommandsCell,
106
+ });
107
+ }
108
+ return columns;
109
+ }
110
+ function RecordRows(props) {
111
+ const columns = recordColumns(props);
112
+ const table = {
113
+ columns,
114
+ data: [...props.records],
115
+ embedded: true,
116
+ empty: { kind: "nothingYet", message: props.label },
117
+ getRowId: props.getId,
118
+ compactLayout: columns.length >= 7 || props.command !== undefined
119
+ ? "wide"
120
+ : "standard",
121
+ primaryColumns: ["name", "commands"],
122
+ showColumnHeaders: false,
123
+ rowEditor: props.editor ? { rowId: props.editor.id, render: props.editor.render } : undefined,
124
+ tableLabel: props.label,
125
+ };
126
+ return props.open ? (_jsx(DataTable, { ...table, primaryColumnId: "name", renderRowLink: props.open.renderLink, rowHref: props.open.href, rowLabel: props.open.label })) : (_jsx(DataTable, { ...table }));
127
+ }
128
+ /**
129
+ * One line per record, on one resting card: its identity mark and name over
130
+ * what it is, a few comparable facts, a status only for the exception, when
131
+ * it happened, the row's one command, and its three dots last.
132
+ *
133
+ * @family Compositions
134
+ * @when A list of records inside another page: an Overview's exceptions, an object page's "Needs attention", any section that lists records a person opens or acts on. A page whose whole job is the list is a `CollectionPage`, which draws this.
135
+ * @instead Figures compared across records, read by their column headings, are a `DataTable`. Events in time are an `ActivityFeed`. Reusable things a person adds from a catalogue are a `LibraryShelf`.
136
+ * @behaviour Each row reads left to right at fixed measures: the mark and name (at most a third of the row), facts on one line, the status in its 150 px slot only when the record is the exception, the time right-aligned in tabular figures with the exact moment on hover, the row command at most 192 px wide with its label cut short, then the three dots, or a muted chevron when the row only opens. On a card too narrow for them (768 px, or 1024 px for seven columns or more or a row command), the facts, the status and the time move under the record's line, leaving out a fact or status the record does not have, and the name and its commands keep theirs. A menu of one command that is not destructive, with no row command, is that command's outline button. With `open` the whole row is one target. A failed or refused action of the record replaces its detail line, with its next steps beside its commands; the record being edited opens its form under its own line. While the records load, three still skeleton rows hold the place; then, first that holds: the failed read, no match, the empty state, the rows. A list with no records and no empty state draws nothing.
137
+ * @words Every string is the product's: `label` names the list, a time's `phrase` writes its sentence ("Updated {when}"), `missing` is what a screen reader hears for a record with no time, the menu's `label` reads "More for {record}". A status is the exception's word ("Needs attention"), never "Active" on every row.
138
+ * @access A table named by `label`, its column headings read by assistive technology only. The row link carries `open.label`; the three dots carry the menu's `label`, and the menu's first line names the record. The loading rows are a busy status named by `loadingLabel`.
139
+ */
140
+ export function RecordList(props) {
141
+ const { records, heading, footer } = props;
142
+ let body;
143
+ if (props.failed) {
144
+ body = _jsx(EmptyState, { ...props.failed, scope: "card" });
145
+ }
146
+ else if (records === undefined) {
147
+ body = _jsx(LoadingRecords, { label: props.loadingLabel ?? props.label });
148
+ }
149
+ else if (records.length === 0 && props.noMatch) {
150
+ body = _jsx(EmptyState, { kind: "noResults", ...props.noMatch, scope: "card" });
151
+ }
152
+ else if (records.length === 0) {
153
+ if (!props.empty)
154
+ return null;
155
+ body = _jsx(EmptyState, { ...props.empty, headingLevel: heading ? 3 : 2, scope: "card" });
156
+ }
157
+ else {
158
+ body = _jsx(RecordRows, { ...props, records: records });
159
+ }
160
+ return (_jsx(TableCard, { actions: heading?.meta ? (_jsx("span", { className: "text-body-sm text-muted-foreground", children: heading.meta })) : undefined, footer: footer?.pages ? _jsx(Pages, { pages: footer.pages }) : undefined, footerHint: footer?.count, description: heading?.description, title: heading?.title, children: _jsx(ShownList.Provider, { value: props, children: body }) }));
161
+ }