@nadicodeai/ui 12.1.95 → 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 (596) 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-appearance.d.ts +5 -4
  27. package/dist/components/agent-orb-appearance.d.ts.map +1 -1
  28. package/dist/components/agent-orb.d.ts +16 -0
  29. package/dist/components/agent-orb.d.ts.map +1 -1
  30. package/dist/components/agent-orb.js +17 -0
  31. package/dist/components/agent-profile.d.ts +39 -10
  32. package/dist/components/agent-profile.d.ts.map +1 -1
  33. package/dist/components/agent-profile.js +40 -10
  34. package/dist/components/alert-dialog.d.ts +14 -0
  35. package/dist/components/alert-dialog.d.ts.map +1 -1
  36. package/dist/components/alert-dialog.js +14 -0
  37. package/dist/components/alert.d.ts +14 -0
  38. package/dist/components/alert.d.ts.map +1 -1
  39. package/dist/components/alert.js +14 -0
  40. package/dist/components/app-mark.d.ts +14 -4
  41. package/dist/components/app-mark.d.ts.map +1 -1
  42. package/dist/components/app-mark.js +16 -4
  43. package/dist/components/approval-row.d.ts +15 -2
  44. package/dist/components/approval-row.d.ts.map +1 -1
  45. package/dist/components/approval-row.js +15 -2
  46. package/dist/components/aspect-ratio.d.ts +10 -0
  47. package/dist/components/aspect-ratio.d.ts.map +1 -1
  48. package/dist/components/aspect-ratio.js +13 -1
  49. package/dist/components/avatar.d.ts +15 -0
  50. package/dist/components/avatar.d.ts.map +1 -1
  51. package/dist/components/avatar.js +15 -0
  52. package/dist/components/badge.d.ts +11 -1
  53. package/dist/components/badge.d.ts.map +1 -1
  54. package/dist/components/badge.js +10 -5
  55. package/dist/components/brand-field.d.ts +10 -0
  56. package/dist/components/brand-field.d.ts.map +1 -1
  57. package/dist/components/brand-field.js +10 -0
  58. package/dist/components/brand.d.ts +14 -0
  59. package/dist/components/brand.d.ts.map +1 -1
  60. package/dist/components/brand.js +18 -4
  61. package/dist/components/breadcrumb.d.ts +20 -2
  62. package/dist/components/breadcrumb.d.ts.map +1 -1
  63. package/dist/components/breadcrumb.js +13 -3
  64. package/dist/components/button-group.d.ts +21 -0
  65. package/dist/components/button-group.d.ts.map +1 -1
  66. package/dist/components/button-group.js +21 -0
  67. package/dist/components/button.d.ts +20 -0
  68. package/dist/components/button.d.ts.map +1 -1
  69. package/dist/components/button.js +20 -0
  70. package/dist/components/calendar.d.ts +15 -0
  71. package/dist/components/calendar.d.ts.map +1 -1
  72. package/dist/components/calendar.js +15 -0
  73. package/dist/components/card-row.d.ts +15 -5
  74. package/dist/components/card-row.d.ts.map +1 -1
  75. package/dist/components/card-row.js +15 -5
  76. package/dist/components/card.d.ts +16 -0
  77. package/dist/components/card.d.ts.map +1 -1
  78. package/dist/components/card.js +16 -0
  79. package/dist/components/carousel.d.ts +12 -0
  80. package/dist/components/carousel.d.ts.map +1 -1
  81. package/dist/components/carousel.js +12 -0
  82. package/dist/components/catalog-drawer.d.ts +29 -0
  83. package/dist/components/catalog-drawer.d.ts.map +1 -0
  84. package/dist/components/catalog-drawer.js +31 -0
  85. package/dist/components/catalog-entry.d.ts +49 -26
  86. package/dist/components/catalog-entry.d.ts.map +1 -1
  87. package/dist/components/catalog-entry.js +5 -27
  88. package/dist/components/channel-view.d.ts +23 -0
  89. package/dist/components/channel-view.d.ts.map +1 -1
  90. package/dist/components/channel-view.js +13 -4
  91. package/dist/components/chart-area-stacked.d.ts +11 -1
  92. package/dist/components/chart-area-stacked.d.ts.map +1 -1
  93. package/dist/components/chart-area-stacked.js +12 -2
  94. package/dist/components/chart-axis.d.ts.map +1 -1
  95. package/dist/components/chart-axis.js +2 -0
  96. package/dist/components/chart-bar-horizontal.d.ts +11 -1
  97. package/dist/components/chart-bar-horizontal.d.ts.map +1 -1
  98. package/dist/components/chart-bar-horizontal.js +15 -2
  99. package/dist/components/chart-bar-multiple.d.ts +9 -4
  100. package/dist/components/chart-bar-multiple.d.ts.map +1 -1
  101. package/dist/components/chart-bar-multiple.js +10 -5
  102. package/dist/components/chart-bar-stacked.d.ts +11 -1
  103. package/dist/components/chart-bar-stacked.d.ts.map +1 -1
  104. package/dist/components/chart-bar-stacked.js +12 -2
  105. package/dist/components/chart-card.d.ts +38 -24
  106. package/dist/components/chart-card.d.ts.map +1 -1
  107. package/dist/components/chart-card.js +21 -8
  108. package/dist/components/chart-date-range-control.d.ts +15 -10
  109. package/dist/components/chart-date-range-control.d.ts.map +1 -1
  110. package/dist/components/chart-date-range-control.js +16 -12
  111. package/dist/components/chart-date-range.d.ts +2 -1
  112. package/dist/components/chart-date-range.d.ts.map +1 -1
  113. package/dist/components/chart-date-range.js +5 -2
  114. package/dist/components/chart-entity-colors.d.ts +7 -0
  115. package/dist/components/chart-entity-colors.d.ts.map +1 -1
  116. package/dist/components/chart-entity-colors.js +7 -0
  117. package/dist/components/chart-sparkline.d.ts +10 -0
  118. package/dist/components/chart-sparkline.d.ts.map +1 -1
  119. package/dist/components/chart-sparkline.js +8 -7
  120. package/dist/components/chart.d.ts +10 -0
  121. package/dist/components/chart.d.ts.map +1 -1
  122. package/dist/components/chart.js +27 -4
  123. package/dist/components/checkbox.d.ts +15 -0
  124. package/dist/components/checkbox.d.ts.map +1 -1
  125. package/dist/components/checkbox.js +15 -0
  126. package/dist/components/code-block.d.ts +15 -0
  127. package/dist/components/code-block.d.ts.map +1 -1
  128. package/dist/components/code-block.js +15 -0
  129. package/dist/components/collapsible.d.ts +12 -0
  130. package/dist/components/collapsible.d.ts.map +1 -1
  131. package/dist/components/collapsible.js +12 -0
  132. package/dist/components/collection-filters.d.ts +15 -2
  133. package/dist/components/collection-filters.d.ts.map +1 -1
  134. package/dist/components/collection-filters.js +13 -1
  135. package/dist/components/collection-page.d.ts +29 -115
  136. package/dist/components/collection-page.d.ts.map +1 -1
  137. package/dist/components/collection-page.js +24 -139
  138. package/dist/components/collection-search.d.ts +14 -0
  139. package/dist/components/collection-search.d.ts.map +1 -1
  140. package/dist/components/collection-search.js +14 -0
  141. package/dist/components/collection-sort.d.ts +13 -3
  142. package/dist/components/collection-sort.d.ts.map +1 -1
  143. package/dist/components/collection-sort.js +17 -4
  144. package/dist/components/collection-toolbar.d.ts +13 -0
  145. package/dist/components/collection-toolbar.d.ts.map +1 -1
  146. package/dist/components/collection-toolbar.js +13 -0
  147. package/dist/components/combobox.d.ts +17 -0
  148. package/dist/components/combobox.d.ts.map +1 -1
  149. package/dist/components/combobox.js +17 -0
  150. package/dist/components/command.d.ts +16 -0
  151. package/dist/components/command.d.ts.map +1 -1
  152. package/dist/components/command.js +16 -0
  153. package/dist/components/company-card/renderer.js +2 -2
  154. package/dist/components/company-card.d.ts +16 -4
  155. package/dist/components/company-card.d.ts.map +1 -1
  156. package/dist/components/company-card.js +22 -10
  157. package/dist/components/confirm-dialog.d.ts +24 -14
  158. package/dist/components/confirm-dialog.d.ts.map +1 -1
  159. package/dist/components/confirm-dialog.js +16 -10
  160. package/dist/components/context-menu.d.ts +10 -0
  161. package/dist/components/context-menu.d.ts.map +1 -1
  162. package/dist/components/context-menu.js +10 -0
  163. package/dist/components/copy-button.d.ts +10 -0
  164. package/dist/components/copy-button.d.ts.map +1 -1
  165. package/dist/components/copy-button.js +10 -0
  166. package/dist/components/dashboard-shell.d.ts +14 -0
  167. package/dist/components/dashboard-shell.d.ts.map +1 -1
  168. package/dist/components/dashboard-shell.js +15 -1
  169. package/dist/components/data-table.d.ts +23 -1
  170. package/dist/components/data-table.d.ts.map +1 -1
  171. package/dist/components/data-table.js +63 -31
  172. package/dist/components/desktop-shell.d.ts +15 -0
  173. package/dist/components/desktop-shell.d.ts.map +1 -1
  174. package/dist/components/desktop-shell.js +15 -0
  175. package/dist/components/dialog.d.ts +16 -0
  176. package/dist/components/dialog.d.ts.map +1 -1
  177. package/dist/components/dialog.js +16 -0
  178. package/dist/components/diff-count.d.ts +11 -0
  179. package/dist/components/diff-count.d.ts.map +1 -1
  180. package/dist/components/diff-count.js +11 -0
  181. package/dist/components/disclosure-row.d.ts +12 -0
  182. package/dist/components/disclosure-row.d.ts.map +1 -1
  183. package/dist/components/disclosure-row.js +12 -0
  184. package/dist/components/disclosure.d.ts +15 -5
  185. package/dist/components/disclosure.d.ts.map +1 -1
  186. package/dist/components/disclosure.js +15 -5
  187. package/dist/components/drawer.d.ts +13 -0
  188. package/dist/components/drawer.d.ts.map +1 -1
  189. package/dist/components/drawer.js +13 -0
  190. package/dist/components/dropdown-menu.d.ts +17 -5
  191. package/dist/components/dropdown-menu.d.ts.map +1 -1
  192. package/dist/components/dropdown-menu.js +20 -7
  193. package/dist/components/empty-art.d.ts +1 -1
  194. package/dist/components/empty-art.d.ts.map +1 -1
  195. package/dist/components/empty-art.js +8 -0
  196. package/dist/components/empty-state.d.ts +24 -10
  197. package/dist/components/empty-state.d.ts.map +1 -1
  198. package/dist/components/empty-state.js +23 -1
  199. package/dist/components/entry-scene.d.ts +33 -20
  200. package/dist/components/entry-scene.d.ts.map +1 -1
  201. package/dist/components/entry-scene.js +40 -9
  202. package/dist/components/expandable-block.d.ts +10 -0
  203. package/dist/components/expandable-block.d.ts.map +1 -1
  204. package/dist/components/expandable-block.js +10 -0
  205. package/dist/components/field.d.ts +17 -0
  206. package/dist/components/field.d.ts.map +1 -1
  207. package/dist/components/field.js +17 -0
  208. package/dist/components/file-diff.d.ts +12 -0
  209. package/dist/components/file-diff.d.ts.map +1 -1
  210. package/dist/components/file-diff.js +12 -0
  211. package/dist/components/file-type-icon.d.ts +12 -0
  212. package/dist/components/file-type-icon.d.ts.map +1 -1
  213. package/dist/components/file-type-icon.js +46 -31
  214. package/dist/components/footer.d.ts +14 -0
  215. package/dist/components/footer.d.ts.map +1 -1
  216. package/dist/components/footer.js +14 -0
  217. package/dist/components/form-dialog.d.ts +10 -0
  218. package/dist/components/form-dialog.d.ts.map +1 -1
  219. package/dist/components/form-dialog.js +10 -0
  220. package/dist/components/form-drawer.d.ts +24 -11
  221. package/dist/components/form-drawer.d.ts.map +1 -1
  222. package/dist/components/form-drawer.js +13 -3
  223. package/dist/components/form.d.ts +17 -0
  224. package/dist/components/form.d.ts.map +1 -1
  225. package/dist/components/form.js +25 -5
  226. package/dist/components/glass-control.d.ts +13 -0
  227. package/dist/components/glass-control.d.ts.map +1 -1
  228. package/dist/components/glass-control.js +13 -0
  229. package/dist/components/heatmap/calendar-heatmap.d.ts.map +1 -1
  230. package/dist/components/heatmap/calendar-heatmap.js +6 -4
  231. package/dist/components/hive-scene.d.ts +14 -0
  232. package/dist/components/hive-scene.d.ts.map +1 -1
  233. package/dist/components/hive-scene.js +14 -0
  234. package/dist/components/house-icons.d.ts +15 -0
  235. package/dist/components/house-icons.d.ts.map +1 -1
  236. package/dist/components/house-icons.js +19 -1
  237. package/dist/components/hover-card.d.ts +15 -0
  238. package/dist/components/hover-card.d.ts.map +1 -1
  239. package/dist/components/hover-card.js +15 -0
  240. package/dist/components/identity-mark.d.ts +55 -0
  241. package/dist/components/identity-mark.d.ts.map +1 -0
  242. package/dist/components/identity-mark.js +66 -0
  243. package/dist/components/input-group.d.ts +16 -0
  244. package/dist/components/input-group.d.ts.map +1 -1
  245. package/dist/components/input-group.js +17 -0
  246. package/dist/components/input-otp.d.ts +15 -0
  247. package/dist/components/input-otp.d.ts.map +1 -1
  248. package/dist/components/input-otp.js +15 -0
  249. package/dist/components/input.d.ts +15 -0
  250. package/dist/components/input.d.ts.map +1 -1
  251. package/dist/components/input.js +15 -0
  252. package/dist/components/item.d.ts +16 -0
  253. package/dist/components/item.d.ts.map +1 -1
  254. package/dist/components/item.js +16 -0
  255. package/dist/components/kbd.d.ts +14 -0
  256. package/dist/components/kbd.d.ts.map +1 -1
  257. package/dist/components/kbd.js +14 -0
  258. package/dist/components/kpi-card.d.ts +21 -13
  259. package/dist/components/kpi-card.d.ts.map +1 -1
  260. package/dist/components/kpi-card.js +14 -3
  261. package/dist/components/label-system.d.ts +12 -0
  262. package/dist/components/label-system.d.ts.map +1 -1
  263. package/dist/components/label-system.js +12 -0
  264. package/dist/components/label.d.ts +15 -0
  265. package/dist/components/label.d.ts.map +1 -1
  266. package/dist/components/label.js +15 -0
  267. package/dist/components/library-shelf.d.ts +35 -0
  268. package/dist/components/library-shelf.d.ts.map +1 -0
  269. package/dist/components/library-shelf.js +40 -0
  270. package/dist/components/memory-item.d.ts +12 -0
  271. package/dist/components/memory-item.d.ts.map +1 -1
  272. package/dist/components/memory-item.js +12 -0
  273. package/dist/components/menu-choice-row.d.ts +13 -5
  274. package/dist/components/menu-choice-row.d.ts.map +1 -1
  275. package/dist/components/menu-choice-row.js +12 -6
  276. package/dist/components/menubar.d.ts +13 -0
  277. package/dist/components/menubar.d.ts.map +1 -1
  278. package/dist/components/menubar.js +13 -0
  279. package/dist/components/message-notice.d.ts +16 -0
  280. package/dist/components/message-notice.d.ts.map +1 -1
  281. package/dist/components/message-notice.js +18 -2
  282. package/dist/components/model-identity.d.ts +16 -3
  283. package/dist/components/model-identity.d.ts.map +1 -1
  284. package/dist/components/model-identity.js +16 -3
  285. package/dist/components/model-mark.d.ts +15 -2
  286. package/dist/components/model-mark.d.ts.map +1 -1
  287. package/dist/components/model-mark.js +36 -23
  288. package/dist/components/nadia-presence.d.ts +10 -4
  289. package/dist/components/nadia-presence.d.ts.map +1 -1
  290. package/dist/components/nadia-presence.js +10 -4
  291. package/dist/components/native-select.d.ts +16 -0
  292. package/dist/components/native-select.d.ts.map +1 -1
  293. package/dist/components/native-select.js +21 -0
  294. package/dist/components/navigation-menu.d.ts +14 -0
  295. package/dist/components/navigation-menu.d.ts.map +1 -1
  296. package/dist/components/navigation-menu.js +14 -0
  297. package/dist/components/notice-banner.d.ts +10 -3
  298. package/dist/components/notice-banner.d.ts.map +1 -1
  299. package/dist/components/notice-banner.js +9 -3
  300. package/dist/components/numbered-steps.d.ts +33 -0
  301. package/dist/components/numbered-steps.d.ts.map +1 -0
  302. package/dist/components/numbered-steps.js +23 -0
  303. package/dist/components/object-page.d.ts +37 -0
  304. package/dist/components/object-page.d.ts.map +1 -0
  305. package/dist/components/object-page.js +19 -0
  306. package/dist/components/object-workspace.d.ts +26 -36
  307. package/dist/components/object-workspace.d.ts.map +1 -1
  308. package/dist/components/object-workspace.js +27 -24
  309. package/dist/components/overview-page.d.ts +24 -0
  310. package/dist/components/overview-page.d.ts.map +1 -0
  311. package/dist/components/overview-page.js +26 -0
  312. package/dist/components/page-actions.d.ts +28 -23
  313. package/dist/components/page-actions.d.ts.map +1 -1
  314. package/dist/components/page-actions.js +20 -14
  315. package/dist/components/page-header.d.ts +11 -5
  316. package/dist/components/page-header.d.ts.map +1 -1
  317. package/dist/components/page-header.js +11 -5
  318. package/dist/components/pagination.d.ts +15 -0
  319. package/dist/components/pagination.d.ts.map +1 -1
  320. package/dist/components/pagination.js +15 -0
  321. package/dist/components/pairing-code.d.ts +15 -4
  322. package/dist/components/pairing-code.d.ts.map +1 -1
  323. package/dist/components/pairing-code.js +15 -4
  324. package/dist/components/pending-label.d.ts +12 -4
  325. package/dist/components/pending-label.d.ts.map +1 -1
  326. package/dist/components/pending-label.js +12 -4
  327. package/dist/components/picture-label.d.ts +15 -7
  328. package/dist/components/picture-label.d.ts.map +1 -1
  329. package/dist/components/picture-label.js +15 -7
  330. package/dist/components/platform-mark.d.ts +12 -3
  331. package/dist/components/platform-mark.d.ts.map +1 -1
  332. package/dist/components/platform-mark.js +12 -3
  333. package/dist/components/plugin-slot-boundary.d.ts +15 -0
  334. package/dist/components/plugin-slot-boundary.d.ts.map +1 -1
  335. package/dist/components/plugin-slot-boundary.js +18 -1
  336. package/dist/components/popover.d.ts +15 -0
  337. package/dist/components/popover.d.ts.map +1 -1
  338. package/dist/components/popover.js +15 -0
  339. package/dist/components/portal-sidebar-frame.d.ts +26 -12
  340. package/dist/components/portal-sidebar-frame.d.ts.map +1 -1
  341. package/dist/components/portal-sidebar-frame.js +26 -0
  342. package/dist/components/product-message.d.ts.map +1 -1
  343. package/dist/components/product-message.js +1 -0
  344. package/dist/components/progress.d.ts +10 -8
  345. package/dist/components/progress.d.ts.map +1 -1
  346. package/dist/components/progress.js +17 -16
  347. package/dist/components/qr-code.d.ts +9 -3
  348. package/dist/components/qr-code.d.ts.map +1 -1
  349. package/dist/components/qr-code.js +9 -3
  350. package/dist/components/radio-group.d.ts +15 -0
  351. package/dist/components/radio-group.d.ts.map +1 -1
  352. package/dist/components/radio-group.js +15 -0
  353. package/dist/components/reading-column.d.ts +11 -0
  354. package/dist/components/reading-column.d.ts.map +1 -1
  355. package/dist/components/reading-column.js +11 -0
  356. package/dist/components/record-identity.d.ts +12 -7
  357. package/dist/components/record-identity.d.ts.map +1 -1
  358. package/dist/components/record-identity.js +12 -7
  359. package/dist/components/record-list.d.ts +119 -0
  360. package/dist/components/record-list.d.ts.map +1 -0
  361. package/dist/components/record-list.js +161 -0
  362. package/dist/components/record-sheet.d.ts +36 -0
  363. package/dist/components/record-sheet.d.ts.map +1 -0
  364. package/dist/components/record-sheet.js +19 -0
  365. package/dist/components/record-time.d.ts +27 -11
  366. package/dist/components/record-time.d.ts.map +1 -1
  367. package/dist/components/record-time.js +35 -14
  368. package/dist/components/resizable.d.ts +10 -0
  369. package/dist/components/resizable.d.ts.map +1 -1
  370. package/dist/components/resizable.js +10 -0
  371. package/dist/components/row-edit-form.d.ts +8 -5
  372. package/dist/components/row-edit-form.d.ts.map +1 -1
  373. package/dist/components/row-edit-form.js +8 -5
  374. package/dist/components/run-timeline.d.ts +24 -11
  375. package/dist/components/run-timeline.d.ts.map +1 -1
  376. package/dist/components/run-timeline.js +13 -6
  377. package/dist/components/scope-switcher.d.ts +11 -0
  378. package/dist/components/scope-switcher.d.ts.map +1 -1
  379. package/dist/components/scope-switcher.js +20 -9
  380. package/dist/components/scroll-area.d.ts +12 -0
  381. package/dist/components/scroll-area.d.ts.map +1 -1
  382. package/dist/components/scroll-area.js +12 -0
  383. package/dist/components/select.d.ts +16 -0
  384. package/dist/components/select.d.ts.map +1 -1
  385. package/dist/components/select.js +16 -0
  386. package/dist/components/separator.d.ts +11 -0
  387. package/dist/components/separator.d.ts.map +1 -1
  388. package/dist/components/separator.js +11 -0
  389. package/dist/components/settings-facts.d.ts +18 -1
  390. package/dist/components/settings-facts.d.ts.map +1 -1
  391. package/dist/components/settings-facts.js +20 -1
  392. package/dist/components/settings-page.d.ts +20 -0
  393. package/dist/components/settings-page.d.ts.map +1 -0
  394. package/dist/components/settings-page.js +16 -0
  395. package/dist/components/settings-section.d.ts +38 -8
  396. package/dist/components/settings-section.d.ts.map +1 -1
  397. package/dist/components/settings-section.js +33 -7
  398. package/dist/components/sheet.d.ts +16 -0
  399. package/dist/components/sheet.d.ts.map +1 -1
  400. package/dist/components/sheet.js +16 -0
  401. package/dist/components/sidebar-sections.d.ts +40 -0
  402. package/dist/components/sidebar-sections.d.ts.map +1 -0
  403. package/dist/components/sidebar-sections.js +35 -0
  404. package/dist/components/sidebar.d.ts +14 -1
  405. package/dist/components/sidebar.d.ts.map +1 -1
  406. package/dist/components/sidebar.js +24 -5
  407. package/dist/components/skeleton.d.ts +10 -0
  408. package/dist/components/skeleton.d.ts.map +1 -1
  409. package/dist/components/skeleton.js +11 -1
  410. package/dist/components/slider.d.ts +14 -0
  411. package/dist/components/slider.d.ts.map +1 -1
  412. package/dist/components/slider.js +14 -0
  413. package/dist/components/sonner.d.ts +18 -0
  414. package/dist/components/sonner.d.ts.map +1 -1
  415. package/dist/components/sonner.js +23 -2
  416. package/dist/components/status-badge.d.ts +13 -2
  417. package/dist/components/status-badge.d.ts.map +1 -1
  418. package/dist/components/status-badge.js +21 -9
  419. package/dist/components/status-dot.d.ts +12 -0
  420. package/dist/components/status-dot.d.ts.map +1 -1
  421. package/dist/components/status-dot.js +12 -0
  422. package/dist/components/status-row.d.ts +14 -0
  423. package/dist/components/status-row.d.ts.map +1 -1
  424. package/dist/components/status-row.js +14 -0
  425. package/dist/components/switch.d.ts +15 -0
  426. package/dist/components/switch.d.ts.map +1 -1
  427. package/dist/components/switch.js +15 -0
  428. package/dist/components/table-card.d.ts +16 -3
  429. package/dist/components/table-card.d.ts.map +1 -1
  430. package/dist/components/table-card.js +16 -3
  431. package/dist/components/table-value.d.ts +24 -2
  432. package/dist/components/table-value.d.ts.map +1 -1
  433. package/dist/components/table-value.js +25 -3
  434. package/dist/components/table.d.ts +16 -0
  435. package/dist/components/table.d.ts.map +1 -1
  436. package/dist/components/table.js +17 -1
  437. package/dist/components/tabs.d.ts +27 -0
  438. package/dist/components/tabs.d.ts.map +1 -1
  439. package/dist/components/tabs.js +27 -0
  440. package/dist/components/tag.d.ts +12 -2
  441. package/dist/components/tag.d.ts.map +1 -1
  442. package/dist/components/tag.js +12 -2
  443. package/dist/components/text-link.d.ts +17 -0
  444. package/dist/components/text-link.d.ts.map +1 -1
  445. package/dist/components/text-link.js +17 -0
  446. package/dist/components/textarea.d.ts +14 -0
  447. package/dist/components/textarea.d.ts.map +1 -1
  448. package/dist/components/textarea.js +14 -0
  449. package/dist/components/theme-mode-switcher.d.ts +21 -0
  450. package/dist/components/theme-mode-switcher.d.ts.map +1 -1
  451. package/dist/components/theme-mode-switcher.js +23 -1
  452. package/dist/components/toggle-group.d.ts +13 -0
  453. package/dist/components/toggle-group.d.ts.map +1 -1
  454. package/dist/components/toggle-group.js +16 -1
  455. package/dist/components/toggle.d.ts +14 -0
  456. package/dist/components/toggle.d.ts.map +1 -1
  457. package/dist/components/toggle.js +14 -0
  458. package/dist/components/tool-icon.d.ts +14 -4
  459. package/dist/components/tool-icon.d.ts.map +1 -1
  460. package/dist/components/tool-icon.js +28 -19
  461. package/dist/components/tooltip.d.ts +15 -0
  462. package/dist/components/tooltip.d.ts.map +1 -1
  463. package/dist/components/tooltip.js +15 -0
  464. package/dist/components/trend-badge.d.ts +16 -1
  465. package/dist/components/trend-badge.d.ts.map +1 -1
  466. package/dist/components/trend-badge.js +16 -7
  467. package/dist/components/update-card.d.ts +36 -0
  468. package/dist/components/update-card.d.ts.map +1 -0
  469. package/dist/components/update-card.js +28 -0
  470. package/dist/components/usage-meter.d.ts +15 -0
  471. package/dist/components/usage-meter.d.ts.map +1 -1
  472. package/dist/components/usage-meter.js +20 -1
  473. package/dist/components/waiting-line.d.ts +13 -10
  474. package/dist/components/waiting-line.d.ts.map +1 -1
  475. package/dist/components/waiting-line.js +13 -10
  476. package/dist/eslint/index.js +9 -0
  477. package/dist/eslint/rules/empty-state-owner.js +145 -0
  478. package/dist/eslint/rules/jsx-class-utility.js +5 -0
  479. package/dist/eslint/rules/menu-owner.js +75 -0
  480. package/dist/eslint/rules/no-choice-control-wrapper.js +2 -0
  481. package/dist/eslint/rules/no-decorative-icon.js +164 -0
  482. package/dist/eslint/rules/no-deprecated-zod-api.js +1 -0
  483. package/dist/eslint/rules/no-shadcn-appearance-override.js +1 -0
  484. package/dist/eslint/rules/no-subject-derived-expectation.js +1 -1
  485. package/dist/eslint/rules/no-write-in-subscription.js +1 -0
  486. package/dist/eslint/rules/page-composition.js +232 -0
  487. package/dist/eslint/rules/rendered-import.js +121 -0
  488. package/dist/eslint/strict-design-system.js +1 -1
  489. package/dist/hooks/use-hydrated.d.ts +2 -0
  490. package/dist/hooks/use-hydrated.d.ts.map +1 -0
  491. package/dist/hooks/use-hydrated.js +7 -0
  492. package/dist/index.d.ts +15 -10
  493. package/dist/index.d.ts.map +1 -1
  494. package/dist/index.js +15 -10
  495. package/dist/internal/agent-orb.d.ts.map +1 -1
  496. package/dist/internal/agent-orb.js +2 -1
  497. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -1
  498. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -1
  499. package/dist/internal/assistant-ui/reasoning.js +3 -1
  500. package/dist/internal/assistant-ui/thread.js +3 -1
  501. package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -1
  502. package/dist/internal/assistant-ui/tool-fallback.js +13 -13
  503. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -1
  504. package/dist/internal/assistant-ui/tool-group.js +3 -1
  505. package/dist/internal/catalog-list.d.ts +14 -0
  506. package/dist/internal/catalog-list.d.ts.map +1 -0
  507. package/dist/internal/catalog-list.js +53 -0
  508. package/dist/internal/empty.d.ts +6 -9
  509. package/dist/internal/empty.d.ts.map +1 -1
  510. package/dist/internal/empty.js +24 -22
  511. package/dist/internal/footer-strip.d.ts +0 -4
  512. package/dist/internal/footer-strip.d.ts.map +1 -1
  513. package/dist/internal/footer-strip.js +0 -4
  514. package/dist/internal/record-menu-items.d.ts +19 -0
  515. package/dist/internal/record-menu-items.d.ts.map +1 -0
  516. package/dist/internal/record-menu-items.js +20 -0
  517. package/dist/internal/settings-save.d.ts +43 -0
  518. package/dist/internal/settings-save.d.ts.map +1 -0
  519. package/dist/internal/settings-save.js +147 -0
  520. package/dist/lib/theme-mode.d.ts +1 -1
  521. package/dist/lib/theme-mode.js +2 -2
  522. package/dist/lib/use-copy-to-clipboard.d.ts.map +1 -1
  523. package/dist/lib/use-copy-to-clipboard.js +1 -0
  524. package/dist/showcase/assets.d.ts +8 -0
  525. package/dist/showcase/assets.d.ts.map +1 -0
  526. package/dist/showcase/assets.js +13 -0
  527. package/dist/showcase/foundations.d.ts +2 -0
  528. package/dist/showcase/foundations.d.ts.map +1 -0
  529. package/dist/showcase/foundations.js +61 -0
  530. package/dist/showcase/samples.d.ts +21 -0
  531. package/dist/showcase/samples.d.ts.map +1 -0
  532. package/dist/showcase/samples.js +48 -0
  533. package/dist/showcase/showcase.d.ts +10 -0
  534. package/dist/showcase/showcase.d.ts.map +1 -0
  535. package/dist/showcase/showcase.js +44 -0
  536. package/dist/showcase/specimens/actions.d.ts +7 -0
  537. package/dist/showcase/specimens/actions.d.ts.map +1 -0
  538. package/dist/showcase/specimens/actions.js +15 -0
  539. package/dist/showcase/specimens/charts.d.ts +17 -0
  540. package/dist/showcase/specimens/charts.d.ts.map +1 -0
  541. package/dist/showcase/specimens/charts.js +104 -0
  542. package/dist/showcase/specimens/choices.d.ts +21 -0
  543. package/dist/showcase/specimens/choices.d.ts.map +1 -0
  544. package/dist/showcase/specimens/choices.js +68 -0
  545. package/dist/showcase/specimens/compositions.d.ts +39 -0
  546. package/dist/showcase/specimens/compositions.d.ts.map +1 -0
  547. package/dist/showcase/specimens/compositions.js +270 -0
  548. package/dist/showcase/specimens/data.d.ts +31 -0
  549. package/dist/showcase/specimens/data.d.ts.map +1 -0
  550. package/dist/showcase/specimens/data.js +111 -0
  551. package/dist/showcase/specimens/feedback.d.ts +23 -0
  552. package/dist/showcase/specimens/feedback.d.ts.map +1 -0
  553. package/dist/showcase/specimens/feedback.js +64 -0
  554. package/dist/showcase/specimens/index.d.ts +164 -0
  555. package/dist/showcase/specimens/index.d.ts.map +1 -0
  556. package/dist/showcase/specimens/index.js +24 -0
  557. package/dist/showcase/specimens/inputs.d.ts +22 -0
  558. package/dist/showcase/specimens/inputs.d.ts.map +1 -0
  559. package/dist/showcase/specimens/inputs.js +60 -0
  560. package/dist/showcase/specimens/menus.d.ts +20 -0
  561. package/dist/showcase/specimens/menus.d.ts.map +1 -0
  562. package/dist/showcase/specimens/menus.js +65 -0
  563. package/dist/showcase/specimens/navigation.d.ts +22 -0
  564. package/dist/showcase/specimens/navigation.d.ts.map +1 -0
  565. package/dist/showcase/specimens/navigation.js +103 -0
  566. package/dist/showcase/specimens/other.d.ts +26 -0
  567. package/dist/showcase/specimens/other.d.ts.map +1 -0
  568. package/dist/showcase/specimens/other.js +73 -0
  569. package/dist/showcase/specimens/specimen.d.ts +5 -0
  570. package/dist/showcase/specimens/specimen.d.ts.map +1 -0
  571. package/dist/showcase/specimens/specimen.js +1 -0
  572. package/dist/showcase/specimens/status.d.ts +22 -0
  573. package/dist/showcase/specimens/status.d.ts.map +1 -0
  574. package/dist/showcase/specimens/status.js +44 -0
  575. package/dist/showcase/usage.generated.d.ts +16 -0
  576. package/dist/showcase/usage.generated.d.ts.map +1 -0
  577. package/dist/showcase/usage.generated.js +1788 -0
  578. package/dist/standalone/index.js +2 -2
  579. package/dist/standalone/orb-page.js +1 -0
  580. package/dist/styles/components.css +21 -0
  581. package/package.json +8 -3
  582. package/dist/components/automation-section.d.ts +0 -78
  583. package/dist/components/automation-section.d.ts.map +0 -1
  584. package/dist/components/automation-section.js +0 -75
  585. package/dist/components/catalog-tile.d.ts +0 -19
  586. package/dist/components/catalog-tile.d.ts.map +0 -1
  587. package/dist/components/catalog-tile.js +0 -13
  588. package/dist/components/feedback-state.d.ts +0 -14
  589. package/dist/components/feedback-state.d.ts.map +0 -1
  590. package/dist/components/feedback-state.js +0 -65
  591. package/dist/components/installer-shell.d.ts +0 -25
  592. package/dist/components/installer-shell.d.ts.map +0 -1
  593. package/dist/components/installer-shell.js +0 -32
  594. package/dist/components/settings-form.d.ts +0 -9
  595. package/dist/components/settings-form.d.ts.map +0 -1
  596. package/dist/components/settings-form.js +0 -85
@@ -1,12 +1,36 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from "react";
2
3
  import { cn } from "../lib/utils.js";
3
4
  import { FooterStrip } from "../internal/footer-strip.js";
4
- import { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle, } from "./card.js";
5
+ import { SettingsFieldFailure, SettingsSaveForm, } from "../internal/settings-save.js";
6
+ import { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } from "./card.js";
5
7
  import { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, } from "./field.js";
6
- function SettingsSection({ title, description, actions, footer, footerHint, children, className, surface = "resting", presentation = "split", columns = 1, ...props }) {
7
- return (_jsxs(Card, { render: _jsx("section", { ...props, "data-slot": "settings-section" }), surface: surface, className: cn("@container/settings-section min-w-0", presentation === "form" && "gap-5", className), children: [(title || description || actions) && (_jsxs(CardHeader, { children: [title && (_jsx(CardTitle, { children: _jsx("h2", { children: title }) })), description && _jsx(CardDescription, { children: description }), actions && _jsx(CardAction, { children: actions })] })), children != null ? (_jsx(CardContent, { children: _jsx(FieldGroup, { "data-slot": "settings-section-fields", className: cn((presentation === "form" || columns === 2) && "grid gap-5", columns === 2 && "@2xl/settings-section:grid-cols-2"), children: children }) })) : null, _jsx(FooterStrip, { hint: footerHint, hintSlot: "settings-section-hint", children: footer })] }));
8
+ /**
9
+ * A card of related settings that says what changing them does and saves them from its own footer.
10
+ *
11
+ * @family Compositions
12
+ * @when A few related values a person changes and saves together, on a SettingsPage or as a section of an ObjectPage: Personal details, Company identity, Notifications.
13
+ * @instead Read-only values are a SettingsFactsSection; Theme and Language, which apply on change, live in the account menu; a record's edit in a list is a RowEditForm.
14
+ * @behaviour With `save`: Save stays disabled until a field differs from what is saved, says `pendingLabel` while saving with Cancel held beside it, then the footer shows the ok check and `savedLabel` until the next change. A failure keeps every value and shows under its field until that field changes, or above the footer until the next save. A `cancel` that runs work of its own says its `pendingLabel` while `pending`. Without `save`, the footer holds `footerHint` and `footer`, and is left out when both are.
15
+ * @words The title names the values ("Personal details"); the description says what changing them does, in one line; the hint says where the save applies ("Saved for every device you sign in on."); Save, Saving and Saved come from the product's catalogue.
16
+ * @access The title is the section's h2 and names the form that saves it. The footer's hint and saved line are one status, announced politely; a failure under a field marks the control invalid and describes it.
17
+ */
18
+ function SettingsSection({ title, description, actions, columns = 1, children, className, save, footer, footerHint, ...props }) {
19
+ const titleId = React.useId();
20
+ const fields = children != null ? (_jsx(CardContent, { children: _jsx(FieldGroup, { "data-slot": "settings-section-fields", className: cn("gap-4.5", columns === 2 && "grid @2xl/settings-section:grid-cols-2"), children: children }) })) : null;
21
+ return (_jsxs(Card, { render: _jsx("section", { ...props, "data-slot": "settings-section" }), className: cn("@container/settings-section min-w-0", className), children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: _jsx("h2", { id: titleId, children: title }) }), _jsx(CardDescription, { children: description }), actions ? _jsx(CardAction, { children: actions }) : null] }), save ? (_jsx(SettingsSaveForm, { save: save, titleId: titleId, children: fields })) : (_jsxs(_Fragment, { children: [fields, _jsx(FooterStrip, { hint: footerHint, hintSlot: "settings-section-hint", children: footer })] }))] }));
8
22
  }
9
- function SettingsField({ id, label, description, error, invalid = Boolean(error), disabled, required, orientation = "responsive", children, className, contentClassName, controlClassName, controlWidth = "natural", ...props }) {
23
+ /**
24
+ * One setting: its label and help above its control, and what went wrong under it.
25
+ *
26
+ * @family Inputs
27
+ * @when A value inside a SettingsSection: a name, an address, a choice, a switch.
28
+ * @instead A field of a drawer's or a dialog's form is a Field from the form's own owner; a read-only value is a fact in a SettingsFactsSection.
29
+ * @behaviour The control is 20rem wide under its label and help by default; a switch row passes `orientation="horizontal"` and sits at the end of its label's row at its own width. A validation `error`, or a failed save about this field, shows under the control and marks it invalid.
30
+ * @words The label is a noun for the value ("Display name"); the help is one line saying what it is for or where it shows; an error says what to do next.
31
+ * @access The control receives its id, `aria-invalid` and `aria-describedby` through `controlProps`, so the label, help and error are read with it.
32
+ */
33
+ function SettingsField({ id, label, description, error, invalid = Boolean(error), disabled, required, orientation = "vertical", children, className, contentClassName, controlClassName, controlWidth = orientation === "horizontal" ? "natural" : "standard", ...props }) {
10
34
  const descriptionId = description ? `${id}-description` : undefined;
11
35
  const errorId = error ? `${id}-error` : undefined;
12
36
  const describedBy = [descriptionId, errorId].filter(Boolean).join(" ");
@@ -17,7 +41,9 @@ function SettingsField({ id, label, description, error, invalid = Boolean(error)
17
41
  "aria-invalid": invalid ? true : undefined,
18
42
  "aria-describedby": describedBy || undefined,
19
43
  };
20
- return (_jsx("div", { "data-slot": "settings-field", "data-invalid": invalid ? true : undefined, className: "contents", children: _jsxs(Field, { "data-invalid": invalid ? true : undefined, "data-disabled": disabled ? true : undefined, orientation: orientation, className: cn("items-start", className), ...props, children: [_jsxs(FieldContent, { className: contentClassName, children: [_jsx(FieldLabel, { htmlFor: id, children: label }), description && _jsx(FieldDescription, { id: descriptionId, children: description }), error && _jsx(FieldError, { id: errorId, children: error })] }), _jsx("div", { "data-slot": "settings-field-control", className: cn("flex min-w-0", controlWidth === "standard"
44
+ const errors = (_jsxs(_Fragment, { children: [error ? _jsx(FieldError, { id: errorId, children: error }) : null, _jsx(SettingsFieldFailure, { id: id })] }));
45
+ const errorsUnderControl = orientation === "vertical";
46
+ return (_jsx("div", { "data-slot": "settings-field", "data-invalid": invalid ? true : undefined, className: "contents", children: _jsxs(Field, { "data-invalid": invalid ? true : undefined, "data-disabled": disabled ? true : undefined, orientation: orientation, className: cn("items-start", className), ...props, children: [_jsxs(FieldContent, { className: contentClassName, children: [_jsx(FieldLabel, { htmlFor: id, children: label }), description ? (_jsx(FieldDescription, { id: descriptionId, children: description })) : null, errorsUnderControl ? null : errors] }), _jsx("div", { "data-slot": "settings-field-control", className: cn("flex min-w-0", controlWidth === "standard"
21
47
  ? "w-full max-w-80 justify-start [&>:not([role=checkbox],[role=switch],[role=radio])]:w-full"
22
48
  : controlWidth === "full"
23
49
  ? "w-full justify-start [&>:not([role=checkbox],[role=switch],[role=radio])]:w-full"
@@ -25,6 +51,6 @@ function SettingsField({ id, label, description, error, invalid = Boolean(error)
25
51
  ? "w-full justify-start"
26
52
  : orientation === "horizontal"
27
53
  ? "shrink-0 justify-end"
28
- : "w-full justify-start @md/field-group:w-auto @md/field-group:min-w-64 @md/field-group:justify-end", controlClassName), children: children({ controlProps }) })] }) }));
54
+ : "w-full justify-start @md/field-group:w-auto @md/field-group:min-w-64 @md/field-group:justify-end", controlClassName), children: children({ controlProps }) }), errorsUnderControl ? errors : null] }) }));
29
55
  }
30
56
  export { SettingsField, SettingsSection };
@@ -1,5 +1,21 @@
1
1
  import * as React from "react";
2
2
  import { Dialog as SheetPrimitive } from "@base-ui/react/dialog";
3
+ /**
4
+ * A panel beside a record, or the navigation on a narrow window.
5
+ *
6
+ * @family Menus
7
+ * @when Context that belongs beside a record: inspecting a row's details. And the product's
8
+ * navigation when the window is too narrow for the sidebar.
9
+ * @instead For a catalogue or steps use `FormDrawer` (built on this). For editing use the row or
10
+ * the record's page. For a blocking decision use `ConfirmDialog`.
11
+ * @behaviour From any side, 12 px from the edges, 12 px corners all round, modal over the scrim.
12
+ * Default 3/4 of the window up to 384 px; navigation 288 px. Header 24 px padding; body scrolls;
13
+ * footer recessed.
14
+ * @words Title is the record's name, never the page's heading again. A footer link names where it
15
+ * goes: *Open Rossi Ottica*.
16
+ * @access A modal dialog named by its title with a named close. Focus returns to the row it
17
+ * inspects, or to the navigation button.
18
+ */
3
19
  declare function Sheet({ ...props }: SheetPrimitive.Root.Props): React.JSX.Element;
4
20
  declare function SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props): React.JSX.Element;
5
21
  declare function SheetClose({ ...props }: SheetPrimitive.Close.Props): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOjE,iBAAS,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,qBAErD;AAED,iBAAS,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,qBAE/D;AAED,iBAAS,UAAU,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,qBAE3D;AAgBD,KAAK,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG;IACpD,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,IAAc,EACd,eAAsB,EACtB,UAAoB,EACpB,GAAG,KAAK,EACT,EAAE,iBAAiB,qBAgCnB;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,qBAQtE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,qBAQlF;AAED,OAAO,EACL,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAC"}
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOjE;;;;;;;;;;;;;;;GAeG;AACH,iBAAS,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,qBAErD;AAED,iBAAS,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,qBAE/D;AAED,iBAAS,UAAU,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,qBAE3D;AAgBD,KAAK,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG;IACpD,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,IAAc,EACd,eAAsB,EACtB,UAAoB,EACpB,GAAG,KAAK,EACT,EAAE,iBAAiB,qBAgCnB;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,qBAQtE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,qBAQlF;AAED,OAAO,EACL,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAC"}
@@ -5,6 +5,22 @@ import { cn } from "../lib/utils.js";
5
5
  import { overlayBackdropMotion } from "../lib/motion.js";
6
6
  import { Button } from "./button.js";
7
7
  import { XIcon } from "lucide-react";
8
+ /**
9
+ * A panel beside a record, or the navigation on a narrow window.
10
+ *
11
+ * @family Menus
12
+ * @when Context that belongs beside a record: inspecting a row's details. And the product's
13
+ * navigation when the window is too narrow for the sidebar.
14
+ * @instead For a catalogue or steps use `FormDrawer` (built on this). For editing use the row or
15
+ * the record's page. For a blocking decision use `ConfirmDialog`.
16
+ * @behaviour From any side, 12 px from the edges, 12 px corners all round, modal over the scrim.
17
+ * Default 3/4 of the window up to 384 px; navigation 288 px. Header 24 px padding; body scrolls;
18
+ * footer recessed.
19
+ * @words Title is the record's name, never the page's heading again. A footer link names where it
20
+ * goes: *Open Rossi Ottica*.
21
+ * @access A modal dialog named by its title with a named close. Focus returns to the row it
22
+ * inspects, or to the navigation button.
23
+ */
8
24
  function Sheet({ ...props }) {
9
25
  return _jsx(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
10
26
  }
@@ -0,0 +1,40 @@
1
+ import { type IconComponent, type IdentityMarkProps } from "./identity-mark.js";
2
+ import type { PageCommandAction } from "./page-actions.js";
3
+ export type SidebarSection<Id extends string> = PageCommandAction & {
4
+ id: Id;
5
+ label: string;
6
+ icon: IconComponent;
7
+ };
8
+ export type SidebarSectionsProps<Id extends string> = {
9
+ /** The way back: "Agents", "Customers", "Back to workspace". */
10
+ back: PageCommandAction & {
11
+ label: string;
12
+ disabled?: boolean;
13
+ };
14
+ /** What you are in. `detail` reads under the name: "Company · 3 Agents". */
15
+ identity: {
16
+ name: string;
17
+ mark?: IdentityMarkProps;
18
+ detail?: string;
19
+ };
20
+ /** A heading over the sections: "Account", "Platform settings". */
21
+ group?: string;
22
+ /** Names the nav for assistive technology. */
23
+ label: string;
24
+ sections: readonly SidebarSection<Id>[];
25
+ current: Id;
26
+ /** The rail is too narrow for words: icons, names in tooltips. */
27
+ narrow?: boolean;
28
+ };
29
+ /**
30
+ * The sidebar swapped to one object: the way back, what you are in, and its sections.
31
+ *
32
+ * @family Navigation
33
+ * @when Inside an object, the account or Platform settings, the same sidebar column shows these instead of the places: an Agent's or a Customer's sections in the Portal, Nadia's Edit and her company's sections, the Portal's Account and Platform settings.
34
+ * @instead The places a person can go are the sidebar's own groups; a page's views are Tabs; a settings page that does not swap the column is a SettingsPage. Never a second column beside the first.
35
+ * @behaviour The back row returns to where the person came from and is disabled while leaving is blocked. One section is current. Narrow, the identity and the heading leave, and each row keeps its icon with its name in a tooltip.
36
+ * @words The back row names where it goes ("Agents", "Back to workspace"); the identity is the object's own name; the heading names the kind of settings ("Account"); sections are nouns ("Skills", "Members").
37
+ * @access The sections are a nav named by `label`; the current one carries aria-current="page". The identity's mark is decorative beside its name.
38
+ */
39
+ export declare function SidebarSections<Id extends string>({ back, current, group, identity, label, narrow, sections, }: SidebarSectionsProps<Id>): import("react").JSX.Element;
40
+ //# sourceMappingURL=sidebar-sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-sections.d.ts","sourceRoot":"","sources":["../../src/components/sidebar-sections.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AASnE,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,MAAM,IAAI,iBAAiB,GAAG;IAClE,EAAE,EAAE,EAAE,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,MAAM,IAAI;IACpD,gEAAgE;IAChE,IAAI,EAAE,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChE,4EAA4E;IAC5E,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,EAAE,CAAC;IACZ,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAaF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,EACjD,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAc,EACd,QAAQ,GACT,EAAE,oBAAoB,CAAC,EAAE,CAAC,+BAyD1B"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronLeft } from "lucide-react";
4
+ import { IdentityMark, } from "./identity-mark.js";
5
+ import { SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "./sidebar.js";
6
+ import { cn } from "../lib/utils.js";
7
+ function actionProps(action, disabled = false) {
8
+ if (action.render) {
9
+ return { render: action.render, "aria-disabled": disabled || undefined };
10
+ }
11
+ // The row's tooltip trigger takes `disabled` for itself, so the button element carries it.
12
+ return {
13
+ onClick: action.onClick,
14
+ render: _jsx("button", { disabled: disabled, type: "button" }),
15
+ };
16
+ }
17
+ /**
18
+ * The sidebar swapped to one object: the way back, what you are in, and its sections.
19
+ *
20
+ * @family Navigation
21
+ * @when Inside an object, the account or Platform settings, the same sidebar column shows these instead of the places: an Agent's or a Customer's sections in the Portal, Nadia's Edit and her company's sections, the Portal's Account and Platform settings.
22
+ * @instead The places a person can go are the sidebar's own groups; a page's views are Tabs; a settings page that does not swap the column is a SettingsPage. Never a second column beside the first.
23
+ * @behaviour The back row returns to where the person came from and is disabled while leaving is blocked. One section is current. Narrow, the identity and the heading leave, and each row keeps its icon with its name in a tooltip.
24
+ * @words The back row names where it goes ("Agents", "Back to workspace"); the identity is the object's own name; the heading names the kind of settings ("Account"); sections are nouns ("Skills", "Members").
25
+ * @access The sections are a nav named by `label`; the current one carries aria-current="page". The identity's mark is decorative beside its name.
26
+ */
27
+ export function SidebarSections({ back, current, group, identity, label, narrow = false, sections, }) {
28
+ const row = cn(narrow && "justify-center px-0");
29
+ const words = cn("truncate", narrow && "sr-only");
30
+ return (_jsxs("div", { className: "grid w-full gap-2", "data-slot": "sidebar-sections", children: [_jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { className: row, tooltip: back.label, ...actionProps(back, back.disabled), children: [_jsx(ChevronLeft, { "aria-hidden": "true" }), _jsx("span", { className: words, children: back.label })] }) }) }), narrow ? null : (_jsxs("div", { className: "flex min-w-0 items-center gap-2 px-2 pt-2 text-sm", "data-slot": "sidebar-sections-identity", children: [identity.mark ? _jsx(IdentityMark, { ...identity.mark, size: 24 }) : null, _jsxs("span", { className: "grid min-w-0", children: [_jsx("span", { className: "truncate font-medium text-sidebar-foreground", children: identity.name }), identity.detail ? (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: identity.detail })) : null] })] })), group && !narrow ? _jsx(SidebarGroupLabel, { children: group }) : null, _jsx("nav", { "aria-label": label, children: _jsx(SidebarMenu, { children: sections.map((section) => {
31
+ const Icon = section.icon;
32
+ const isCurrent = section.id === current;
33
+ return (_jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { "aria-current": isCurrent ? "page" : undefined, className: row, isActive: isCurrent, tooltip: section.label, ...actionProps(section), children: [_jsx(Icon, { "aria-hidden": "true" }), _jsx("span", { className: words, children: section.label })] }) }, section.id));
34
+ }) }) })] }));
35
+ }
@@ -42,6 +42,16 @@ type SidebarProps = React.ComponentProps<"div"> & {
42
42
  /** The mobile sheet's standard focus destination after it closes. */
43
43
  mobileFinalFocus?: React.ComponentProps<typeof SheetContent>["finalFocus"];
44
44
  };
45
+ /**
46
+ * A product's navigation column: where a person can go, with the account at its foot.
47
+ *
48
+ * @family Navigation
49
+ * @when The Portal's and Nadia's left column: the groups of places, an object's sections when the column swaps, the update offer and the account menu at the foot.
50
+ * @instead An object's sections are SidebarSections inside this column, never a second column or a tab row; a page's own views are Tabs.
51
+ * @behaviour One row is selected and marked as the current page. Collapsed or narrow, rows keep their icon and show their name in a tooltip; under the mobile breakpoint the column becomes a sheet. A row's count uses SidebarMenuBadge, whose attention tone is for a failure that needs the person.
52
+ * @words Each row is a place's noun: "Agents", "Tasks", "Customers". A count is a bare number.
53
+ * @access The column is a landmark; each row is a link or a button with its name, and the current one carries aria-current="page". The badge's number is read with its row.
54
+ */
45
55
  declare function Sidebar({ side, variant, collapsible, mobileTitle, mobileDescription, mobileCloseLabel, mobileFinalFocus, className, children, dir, ...props }: SidebarProps): React.JSX.Element;
46
56
  declare function SidebarTrigger({ className, onClick, "aria-label": ariaLabel, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
47
57
  declare function SidebarRail({ className, "aria-label": ariaLabel, title, ...props }: React.ComponentProps<"button">): React.JSX.Element;
@@ -70,7 +80,10 @@ declare function SidebarMenuButton({ render, isActive, variant, size, tooltip, c
70
80
  declare function SidebarMenuAction({ className, render, showOnHover, ...props }: useRender.ComponentProps<"button"> & React.ComponentProps<"button"> & {
71
81
  showOnHover?: boolean;
72
82
  }): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
73
- declare function SidebarMenuBadge({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
83
+ declare function SidebarMenuBadge({ className, tone, ...props }: React.ComponentProps<"div"> & {
84
+ /** `attention` is a count that needs the person, such as Tasks that failed. */
85
+ tone?: "default" | "attention";
86
+ }): React.JSX.Element;
74
87
  declare function SidebarMenuSkeleton({ className, showIcon, ...props }: React.ComponentProps<"div"> & {
75
88
  showIcon?: boolean;
76
89
  }): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/components/sidebar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/components/sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAS,YAAY,EAA6C,MAAM,oBAAoB,CAAC;AAEpG,OAAO,EAAW,cAAc,EAAmC,MAAM,sBAAsB,CAAC;AAUhG,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,UAAU,GAAG,WAAW,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAIF,iBAAS,UAAU,wBAOlB;AAED,iBAAS,eAAe,CAAC,EACvB,WAAkB,EAClB,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,WAAW,EACzB,OAAe,EACf,WAAkB,EAClB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,qBAqFA;AAED,KAAK,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAChD,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC3C,WAAW,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;CAC5E,CAAC;AAEF;;;;;;;;;GASG;AACH,iBAAS,OAAO,CAAC,EACf,IAAa,EACb,OAAmB,EACnB,WAAyB,EACzB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,YAAY,qBA8Fd;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,OAAO,EACP,YAAY,EAAE,SAAS,EACvB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,qBAuBrC;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,YAAY,EAAE,SAA4B,EAC1C,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,qBAuBhC;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,WAAmB,EACnB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,0EAkB3F;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,qBAShF;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAS1E;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAS1E;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,qBASxF;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAY3E;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBASzE;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,MAAM,EACN,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,0EAkB/D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,MAAM,EACN,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,0EAkBrE;AAED,iBAAS,mBAAmB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAShF;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBASvE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAS3E;AAED,QAAA,MAAM,yBAAyB;;;8EAoB9B,CAAC;AAEF,iBAAS,iBAAiB,CAAC,EACzB,MAAM,EACN,QAAgB,EAChB,OAAmB,EACnB,IAAgB,EAChB,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,GACnC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC;CAChE,GAAG,YAAY,CAAC,OAAO,yBAAyB,CAAC,qBAqCnD;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,MAAM,EACN,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,GACnC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,0EAoBF;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CAChC,qBAeA;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,qBA0BA;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAY1E;AAED,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAS9E;AAED,iBAAS,oBAAoB,CAAC,EAC5B,MAAM,EACN,IAAW,EACX,QAAgB,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,GAC9B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,0EAoBF;AAED,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,UAAU,GACX,CAAC"}
@@ -35,6 +35,7 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
35
35
  const [_open, _setOpen] = React.useState(defaultOpen);
36
36
  const open = openProp ?? _open;
37
37
  const setOpen = React.useCallback((value) => {
38
+ // oxlint-disable-next-line anti-slop/no-runtime-typeof -- value is React's boolean | updater union, told apart only by typeof.
38
39
  const openState = typeof value === "function" ? value(open) : value;
39
40
  if (setOpenProp) {
40
41
  setOpenProp(openState);
@@ -76,19 +77,33 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
76
77
  setOpenMobile,
77
78
  toggleSidebar,
78
79
  }), [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]);
79
- return (_jsx(SidebarContext.Provider, { value: contextValue, children: _jsx(TooltipProvider, { delay: 0, children: _jsx("div", { "data-slot": "sidebar-wrapper", style: {
80
+ return (_jsx(SidebarContext.Provider, { value: contextValue, children: _jsx(TooltipProvider, { delay: 0, children: _jsx("div", { "data-slot": "sidebar-wrapper",
81
+ // SAFETY: CSSProperties lists only standard properties; React sets each `--` custom property key here through style.setProperty.
82
+ style: {
80
83
  "--sidebar-width": SIDEBAR_WIDTH,
81
84
  "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
82
85
  ...style,
83
86
  }, className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className), ...props, children: children }) }) }));
84
87
  }
88
+ /**
89
+ * A product's navigation column: where a person can go, with the account at its foot.
90
+ *
91
+ * @family Navigation
92
+ * @when The Portal's and Nadia's left column: the groups of places, an object's sections when the column swaps, the update offer and the account menu at the foot.
93
+ * @instead An object's sections are SidebarSections inside this column, never a second column or a tab row; a page's own views are Tabs.
94
+ * @behaviour One row is selected and marked as the current page. Collapsed or narrow, rows keep their icon and show their name in a tooltip; under the mobile breakpoint the column becomes a sheet. A row's count uses SidebarMenuBadge, whose attention tone is for a failure that needs the person.
95
+ * @words Each row is a place's noun: "Agents", "Tasks", "Customers". A count is a bare number.
96
+ * @access The column is a landmark; each row is a link or a button with its name, and the current one carries aria-current="page". The badge's number is read with its row.
97
+ */
85
98
  function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", mobileTitle, mobileDescription, mobileCloseLabel, mobileFinalFocus, className, children, dir, ...props }) {
86
99
  const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
87
100
  if (collapsible === "none") {
88
101
  return (_jsx("div", { "data-slot": "sidebar", className: cn("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", className), ...props, children: children }));
89
102
  }
90
103
  if (isMobile) {
91
- return (_jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: _jsxs(SheetContent, { closeLabel: mobileCloseLabel ?? "Close", finalFocus: mobileFinalFocus, dir: dir, "data-sidebar": "sidebar", "data-slot": "sidebar", "data-mobile": "true", className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground", style: {
104
+ return (_jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: _jsxs(SheetContent, { closeLabel: mobileCloseLabel ?? "Close", finalFocus: mobileFinalFocus, dir: dir, "data-sidebar": "sidebar", "data-slot": "sidebar", "data-mobile": "true", className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground",
105
+ // SAFETY: CSSProperties lists only standard properties; React sets each `--` custom property key here through style.setProperty.
106
+ style: {
92
107
  "--sidebar-width": SIDEBAR_WIDTH_MOBILE,
93
108
  }, side: side, children: [_jsxs(SheetHeader, { className: "sr-only", children: [_jsx(SheetTitle, { children: mobileTitle ?? "Sidebar" }), _jsx(SheetDescription, { children: mobileDescription ?? "Displays the mobile sidebar." })] }), _jsx("div", { className: "flex h-full w-full flex-col", children: children })] }) }));
94
109
  }
@@ -212,6 +227,7 @@ function SidebarMenuButton({ render, isActive = false, variant = "default", size
212
227
  if (!tooltip) {
213
228
  return comp;
214
229
  }
230
+ // oxlint-disable-next-line anti-slop/no-runtime-typeof -- tooltip is our own string | TooltipContent props union, told apart only by typeof.
215
231
  if (typeof tooltip === "string") {
216
232
  tooltip = {
217
233
  children: tooltip,
@@ -233,15 +249,18 @@ function SidebarMenuAction({ className, render, showOnHover = false, ...props })
233
249
  },
234
250
  });
235
251
  }
236
- function SidebarMenuBadge({ className, ...props }) {
237
- return (_jsx("div", { "data-slot": "sidebar-menu-badge", "data-sidebar": "menu-badge", className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-sm px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-primary-foreground", className), ...props }));
252
+ function SidebarMenuBadge({ className, tone = "default", ...props }) {
253
+ return (_jsx("div", { "data-slot": "sidebar-menu-badge", "data-sidebar": "menu-badge", "data-tone": tone, className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-sm px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-primary-foreground", tone === "attention" &&
254
+ "h-4.5 min-w-4.5 rounded-full bg-destructive font-semibold text-destructive-foreground peer-hover/menu-button:text-destructive-foreground peer-data-active/menu-button:text-destructive-foreground", className), ...props }));
238
255
  }
239
256
  function SidebarMenuSkeleton({ className, showIcon = false, ...props }) {
240
257
  // Random width between 50 to 90%.
241
258
  const [width] = React.useState(() => {
242
259
  return `${Math.floor(Math.random() * 40) + 50}%`;
243
260
  });
244
- return (_jsxs("div", { "data-slot": "sidebar-menu-skeleton", "data-sidebar": "menu-skeleton", className: cn("flex h-8 items-center gap-2 rounded-sm px-2", className), ...props, children: [showIcon && _jsx(Skeleton, { className: "size-4 rounded-sm", "data-sidebar": "menu-skeleton-icon" }), _jsx(Skeleton, { className: "h-4 max-w-(--skeleton-width) flex-1", "data-sidebar": "menu-skeleton-text", style: {
261
+ return (_jsxs("div", { "data-slot": "sidebar-menu-skeleton", "data-sidebar": "menu-skeleton", className: cn("flex h-8 items-center gap-2 rounded-sm px-2", className), ...props, children: [showIcon && _jsx(Skeleton, { className: "size-4 rounded-sm", "data-sidebar": "menu-skeleton-icon" }), _jsx(Skeleton, { className: "h-4 max-w-(--skeleton-width) flex-1", "data-sidebar": "menu-skeleton-text",
262
+ // SAFETY: CSSProperties lists only standard properties; React sets each `--` custom property key here through style.setProperty.
263
+ style: {
245
264
  "--skeleton-width": width,
246
265
  } })] }));
247
266
  }
@@ -1,3 +1,13 @@
1
+ /**
2
+ * A still placeholder in the shape of content whose layout is known.
3
+ *
4
+ * @family Feedback
5
+ * @when A page or region whose layout is known while its data loads.
6
+ * @instead For a wait on something the person pressed use `PendingLabel` and `WaitingLine`. Unknown layout shows nothing until data. Never both a skeleton and a line.
7
+ * @behaviour The `line` fill, which stays visible on the card and on the workspace ground in both modes; 6 px corners or a circle, in the final shape so nothing shifts. Never pulses. Resolves to data, an absence or a failure.
8
+ * @words None. No "Loading" text beside it.
9
+ * @access The region is `aria-busy`; each placeholder is hidden and never focusable.
10
+ */
1
11
  declare function Skeleton({ className, shape, ...props }: React.ComponentProps<"div"> & {
2
12
  shape?: "rectangle" | "circle";
3
13
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAEA,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CAChC,+BAQA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CAChC,+BASA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,6 +1,16 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cn } from "../lib/utils.js";
3
+ /**
4
+ * A still placeholder in the shape of content whose layout is known.
5
+ *
6
+ * @family Feedback
7
+ * @when A page or region whose layout is known while its data loads.
8
+ * @instead For a wait on something the person pressed use `PendingLabel` and `WaitingLine`. Unknown layout shows nothing until data. Never both a skeleton and a line.
9
+ * @behaviour The `line` fill, which stays visible on the card and on the workspace ground in both modes; 6 px corners or a circle, in the final shape so nothing shifts. Never pulses. Resolves to data, an absence or a failure.
10
+ * @words None. No "Loading" text beside it.
11
+ * @access The region is `aria-busy`; each placeholder is hidden and never focusable.
12
+ */
3
13
  function Skeleton({ className, shape = "rectangle", ...props }) {
4
- return (_jsx("div", { "data-slot": "skeleton", className: cn("bg-muted", shape === "circle" ? "rounded-full" : "rounded-sm", className), ...props }));
14
+ return (_jsx("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("bg-border", shape === "circle" ? "rounded-full" : "rounded-sm", className), ...props }));
5
15
  }
6
16
  export { Skeleton };
@@ -1,4 +1,18 @@
1
1
  import { Slider as SliderPrimitive } from "@base-ui/react/slider";
2
+ /**
3
+ * A bounded number chosen by a thumb's position on a track.
4
+ *
5
+ * @family Inputs
6
+ * @when A bounded number where the position matters more than the digit: a limit, a share.
7
+ * @instead An exact number is `Input`; pair the two when precision counts. A few named levels are
8
+ * radios.
9
+ * @behaviour A 4 px track, the filled part in ink, a 12 px thumb edged in the input grey. Hover,
10
+ * drag and focus outline the thumb. Arrows step, Page Up and Down jump, Home and End reach the
11
+ * bounds. The thumb's touch target is 44 px.
12
+ * @words The label names the quantity; the current value and its unit are always written beside it
13
+ * (*€ 400*). The help states the bounds and the step.
14
+ * @access `role="slider"` with a name, min, max and `aria-valuetext` carrying the unit.
15
+ */
2
16
  declare function Slider({ className, defaultValue, value, min, max, ...props }: SliderPrimitive.Root.Props): import("react").JSX.Element;
3
17
  export { Slider };
4
18
  //# sourceMappingURL=slider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlE,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,YAAY,EACZ,KAAK,EACL,GAAO,EACP,GAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,+BAsC5B;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlE;;;;;;;;;;;;;GAaG;AACH,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,YAAY,EACZ,KAAK,EACL,GAAO,EACP,GAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,+BAsC5B;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -1,6 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Slider as SliderPrimitive } from "@base-ui/react/slider";
3
3
  import { cn } from "../lib/utils.js";
4
+ /**
5
+ * A bounded number chosen by a thumb's position on a track.
6
+ *
7
+ * @family Inputs
8
+ * @when A bounded number where the position matters more than the digit: a limit, a share.
9
+ * @instead An exact number is `Input`; pair the two when precision counts. A few named levels are
10
+ * radios.
11
+ * @behaviour A 4 px track, the filled part in ink, a 12 px thumb edged in the input grey. Hover,
12
+ * drag and focus outline the thumb. Arrows step, Page Up and Down jump, Home and End reach the
13
+ * bounds. The thumb's touch target is 44 px.
14
+ * @words The label names the quantity; the current value and its unit are always written beside it
15
+ * (*€ 400*). The help states the bounds and the step.
16
+ * @access `role="slider"` with a name, min, max and `aria-valuetext` carrying the unit.
17
+ */
4
18
  function Slider({ className, defaultValue, value, min = 0, max = 100, ...props }) {
5
19
  const _values = Array.isArray(value)
6
20
  ? value
@@ -1,4 +1,22 @@
1
1
  import { type ToasterProps } from "sonner";
2
+ /**
3
+ * The one place toasts appear, mounted once per product.
4
+ *
5
+ * @family Feedback
6
+ * @when One acknowledgement of an action the person took, when the result is not already visible
7
+ * where they are looking; and the Undo of a reversible removal. Mount it once; raise toasts through
8
+ * `toast`.
9
+ * @instead For a failure that must stay, use `MessageNotice` by the control. For unsaved work,
10
+ * failed payment or lost access never a toast alone. For a condition use a banner.
11
+ * @behaviour Tone `success`, `info`, `warning`, `error`; mark in the deep step. The first action
12
+ * with a handler becomes its one button. Undo only where a safe rollback exists. A toast that stays
13
+ * up shows the waiting line, not a spinner.
14
+ * @words Completion is noun, past participle: *Mailbox removed*, *Agent created*, paired one to one
15
+ * with its button *Remove mailbox*. No *successfully*, no exclamation.
16
+ * @access Announced by the toaster's live region. Never the only route to recovery: the record's
17
+ * own row keeps its controls. Undo is reachable by keyboard (Alt+T moves focus to the toasts) while
18
+ * it shows.
19
+ */
2
20
  declare const Toaster: ({ ...props }: ToasterProps) => import("react").JSX.Element;
3
21
  export { Toaster };
4
22
  //# sourceMappingURL=sonner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAK9D,QAAA,MAAM,OAAO,GAAI,cAAc,YAAY,gCAgC1C,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAM9D;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,OAAO,GAAI,cAAc,YAAY,gCAiC1C,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -4,9 +4,28 @@ import { useTheme } from "next-themes";
4
4
  import { Toaster as Sonner } from "sonner";
5
5
  import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon } from "lucide-react";
6
6
  import { WaitingLine } from "./waiting-line.js";
7
+ import { isThemeMode } from "../lib/theme-mode.js";
8
+ /**
9
+ * The one place toasts appear, mounted once per product.
10
+ *
11
+ * @family Feedback
12
+ * @when One acknowledgement of an action the person took, when the result is not already visible
13
+ * where they are looking; and the Undo of a reversible removal. Mount it once; raise toasts through
14
+ * `toast`.
15
+ * @instead For a failure that must stay, use `MessageNotice` by the control. For unsaved work,
16
+ * failed payment or lost access never a toast alone. For a condition use a banner.
17
+ * @behaviour Tone `success`, `info`, `warning`, `error`; mark in the deep step. The first action
18
+ * with a handler becomes its one button. Undo only where a safe rollback exists. A toast that stays
19
+ * up shows the waiting line, not a spinner.
20
+ * @words Completion is noun, past participle: *Mailbox removed*, *Agent created*, paired one to one
21
+ * with its button *Remove mailbox*. No *successfully*, no exclamation.
22
+ * @access Announced by the toaster's live region. Never the only route to recovery: the record's
23
+ * own row keeps its controls. Undo is reachable by keyboard (Alt+T moves focus to the toasts) while
24
+ * it shows.
25
+ */
7
26
  const Toaster = ({ ...props }) => {
8
27
  const { theme = "system" } = useTheme();
9
- return (_jsx(Sonner, { theme: theme, className: "toaster group", icons: {
28
+ return (_jsx(Sonner, { theme: isThemeMode(theme) ? theme : "system", className: "toaster group", icons: {
10
29
  success: _jsx(CircleCheckIcon, { className: "size-4 text-success-soft-foreground" }),
11
30
  info: _jsx(InfoIcon, { className: "size-4 text-info-soft-foreground" }),
12
31
  warning: _jsx(TriangleAlertIcon, { className: "size-4 text-warning-soft-foreground" }),
@@ -14,7 +33,9 @@ const Toaster = ({ ...props }) => {
14
33
  // A toast that stays up is already past a second, so its mark is the
15
34
  // one waiting line rather than a spinning glyph.
16
35
  loading: _jsx(WaitingLine, { className: "w-8", decorative: true }),
17
- }, style: {
36
+ },
37
+ // SAFETY: CSSProperties lists only standard properties; React sets each `--` custom property key here through style.setProperty.
38
+ style: {
18
39
  "--normal-bg": "var(--popover)",
19
40
  "--normal-text": "var(--popover-foreground)",
20
41
  "--normal-border": "transparent",
@@ -7,8 +7,19 @@ type StatusBadgeProps = Omit<ComponentProps<"span">, "children"> & {
7
7
  since?: string;
8
8
  };
9
9
  /**
10
- * A status is a mark and a word in one of five tones. The caller
11
- * owns which tone a state takes and the wording; this owns how the tone looks.
10
+ * A record's state: a mark and a word in one of five tones.
11
+ *
12
+ * @family Status
13
+ * @when A record's state, when it sets the row apart: failed, waiting on a person, a step in
14
+ * motion, paused, connected. Gray is every terminal state that needs no action.
15
+ * @instead For a category (an installation, a partner) use `Tag`. For a control reporting its own
16
+ * action use `ActionStatus`. For a mark beside a word that already names the state, `StatusDot`.
17
+ * @behaviour Still: a status never moves and is never a button. Each app keeps one value-to-tone
18
+ * map in one module; nothing else picks a status colour. A healthy record shows no badge.
19
+ * @words A state, not a verb: *Failed*, *Waiting for you*. Sentence case, one to three words, no
20
+ * trailing ellipsis. Italian runs a third longer: *In attesa di te*.
21
+ * @access The word is the name; the mark is `aria-hidden` and repeats the tone as a shape, so
22
+ * colour never carries the state alone. Not focusable.
12
23
  */
13
24
  declare function StatusBadge({ tone, label, since, className, ...props }: StatusBadgeProps): import("react").JSX.Element;
14
25
  export { StatusBadge, type StatusBadgeProps, type StatusBadgeTone };
@@ -1 +1 @@
1
- {"version":3,"file":"status-badge.d.ts","sourceRoot":"","sources":["../../src/components/status-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAM5C,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAsB7E,KAAK,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IACjE,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,iBAAS,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAkBjF;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"status-badge.d.ts","sourceRoot":"","sources":["../../src/components/status-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAM5C,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAoB7E,KAAK,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IACjE,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,iBAAS,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAmBjF;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,CAAC"}
@@ -2,12 +2,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { CircleCheck, CircleDot, CirclePause, CircleX, Clock } from "lucide-react";
3
3
  import { Badge } from "./badge.js";
4
4
  import { cn } from "../lib/utils.js";
5
- const VARIANT_BY_TONE = {
6
- success: "green",
7
- warning: "amber",
8
- danger: "red",
9
- info: "blue",
10
- neutral: "gray",
5
+ const FILL_BY_TONE = {
6
+ success: { name: "green", classes: "bg-success-soft text-success-soft-foreground" },
7
+ warning: { name: "amber", classes: "bg-warning-soft text-warning-soft-foreground" },
8
+ danger: { name: "red", classes: "bg-destructive-soft text-destructive-soft-foreground" },
9
+ info: { name: "blue", classes: "bg-info-soft text-info-soft-foreground" },
10
+ neutral: { name: "gray", classes: "bg-accent text-muted-foreground" },
11
11
  };
12
12
  // One mark per tone, always the same one: the tone said again as a shape, so a
13
13
  // status reads without colour. The info dot is filled and still.
@@ -19,11 +19,23 @@ const MARK_BY_TONE = {
19
19
  neutral: CirclePause,
20
20
  };
21
21
  /**
22
- * A status is a mark and a word in one of five tones. The caller
23
- * owns which tone a state takes and the wording; this owns how the tone looks.
22
+ * A record's state: a mark and a word in one of five tones.
23
+ *
24
+ * @family Status
25
+ * @when A record's state, when it sets the row apart: failed, waiting on a person, a step in
26
+ * motion, paused, connected. Gray is every terminal state that needs no action.
27
+ * @instead For a category (an installation, a partner) use `Tag`. For a control reporting its own
28
+ * action use `ActionStatus`. For a mark beside a word that already names the state, `StatusDot`.
29
+ * @behaviour Still: a status never moves and is never a button. Each app keeps one value-to-tone
30
+ * map in one module; nothing else picks a status colour. A healthy record shows no badge.
31
+ * @words A state, not a verb: *Failed*, *Waiting for you*. Sentence case, one to three words, no
32
+ * trailing ellipsis. Italian runs a third longer: *In attesa di te*.
33
+ * @access The word is the name; the mark is `aria-hidden` and repeats the tone as a shape, so
34
+ * colour never carries the state alone. Not focusable.
24
35
  */
25
36
  function StatusBadge({ tone, label, since, className, ...props }) {
26
37
  const Mark = MARK_BY_TONE[tone];
27
- return (_jsxs(Badge, { variant: VARIANT_BY_TONE[tone], className: cn("has-data-[icon=inline-start]:pl-2", className), ...props, children: [_jsx(Mark, { "aria-hidden": "true", "data-icon": "inline-start" }), label, since ? (_jsx("span", { className: "tabular-nums", "data-slot": "status-badge-since", children: since })) : null] }));
38
+ const fill = FILL_BY_TONE[tone];
39
+ return (_jsxs(Badge, { className: cn(fill.classes, "has-data-[icon=inline-start]:pl-2", className), "data-variant": fill.name, ...props, children: [_jsx(Mark, { "aria-hidden": "true", "data-icon": "inline-start" }), label, since ? (_jsx("span", { className: "tabular-nums", "data-slot": "status-badge-since", children: since })) : null] }));
28
40
  }
29
41
  export { StatusBadge };
@@ -3,6 +3,18 @@ type StatusTone = "good" | "muted" | "warn" | "bad";
3
3
  interface StatusDotProps extends ComponentProps<"span"> {
4
4
  tone: StatusTone;
5
5
  }
6
+ /**
7
+ * A small still dot beside a word that already names the state.
8
+ *
9
+ * @family Status
10
+ * @when A small mark in dense chrome, beside a word that already names the state: a channel, a
11
+ * machine in a list.
12
+ * @instead A status that stands alone is a `StatusBadge`. Something in motion is the waiting line
13
+ * or an Agent's orb; the dot has no info tone.
14
+ * @behaviour Still; never pulses. Tones are `good`, `muted`, `warn`, `bad`, at full strength.
15
+ * @words None of its own. The word beside it says the state.
16
+ * @access Always `aria-hidden`. If the word is missing, the state is missing.
17
+ */
6
18
  declare function StatusDot({ className, tone, ...props }: StatusDotProps): import("react").JSX.Element;
7
19
  export { StatusDot };
8
20
  export type { StatusTone };
@@ -1 +1 @@
1
- {"version":3,"file":"status-dot.d.ts","sourceRoot":"","sources":["../../src/components/status-dot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAQpD,UAAU,cAAe,SAAQ,cAAc,CAAC,MAAM,CAAC;IACrD,IAAI,EAAE,UAAU,CAAC;CAClB;AACD,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAU/D;AACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"status-dot.d.ts","sourceRoot":"","sources":["../../src/components/status-dot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAQpD,UAAU,cAAe,SAAQ,cAAc,CAAC,MAAM,CAAC;IACrD,IAAI,EAAE,UAAU,CAAC;CAClB;AACD;;;;;;;;;;;GAWG;AACH,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAU/D;AACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,UAAU,EAAE,CAAC"}