@nadicodeai/ui 12.1.102 → 12.1.104

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 (562) hide show
  1. package/dist/components/accordion.d.ts +38 -12
  2. package/dist/components/accordion.d.ts.map +1 -1
  3. package/dist/components/accordion.js +36 -15
  4. package/dist/components/account-menu.js +2 -2
  5. package/dist/components/action-menu.d.ts +20 -19
  6. package/dist/components/action-menu.d.ts.map +1 -1
  7. package/dist/components/action-menu.js +22 -15
  8. package/dist/components/action-status.d.ts +14 -10
  9. package/dist/components/action-status.d.ts.map +1 -1
  10. package/dist/components/action-status.js +14 -10
  11. package/dist/components/activity-calendar.d.ts +3 -1
  12. package/dist/components/activity-calendar.d.ts.map +1 -1
  13. package/dist/components/activity-calendar.js +16 -2
  14. package/dist/components/activity-feed.d.ts +2 -2
  15. package/dist/components/activity-feed.d.ts.map +1 -1
  16. package/dist/components/activity-feed.js +14 -5
  17. package/dist/components/agent-card.d.ts +11 -5
  18. package/dist/components/agent-card.d.ts.map +1 -1
  19. package/dist/components/agent-card.js +13 -7
  20. package/dist/components/agent-list-row.js +1 -1
  21. package/dist/components/agent-orb-appearance.d.ts +7 -1
  22. package/dist/components/agent-orb-appearance.d.ts.map +1 -1
  23. package/dist/components/agent-orb-appearance.js +26 -0
  24. package/dist/components/agent-profile.d.ts +8 -7
  25. package/dist/components/agent-profile.d.ts.map +1 -1
  26. package/dist/components/agent-profile.js +6 -6
  27. package/dist/components/alert-dialog.d.ts +25 -16
  28. package/dist/components/alert-dialog.d.ts.map +1 -1
  29. package/dist/components/alert-dialog.js +30 -18
  30. package/dist/components/alert.d.ts +1 -1
  31. package/dist/components/avatar.d.ts +83 -17
  32. package/dist/components/avatar.d.ts.map +1 -1
  33. package/dist/components/avatar.js +89 -23
  34. package/dist/components/badge.d.ts +59 -8
  35. package/dist/components/badge.d.ts.map +1 -1
  36. package/dist/components/badge.js +57 -14
  37. package/dist/components/breadcrumb.d.ts +18 -7
  38. package/dist/components/breadcrumb.d.ts.map +1 -1
  39. package/dist/components/breadcrumb.js +37 -13
  40. package/dist/components/button-group.d.ts +12 -15
  41. package/dist/components/button-group.d.ts.map +1 -1
  42. package/dist/components/button-group.js +13 -17
  43. package/dist/components/button.d.ts +126 -23
  44. package/dist/components/button.d.ts.map +1 -1
  45. package/dist/components/button.js +164 -39
  46. package/dist/components/calendar.d.ts +26 -15
  47. package/dist/components/calendar.d.ts.map +1 -1
  48. package/dist/components/calendar.js +60 -46
  49. package/dist/components/card-row.d.ts +13 -5
  50. package/dist/components/card-row.d.ts.map +1 -1
  51. package/dist/components/card-row.js +24 -10
  52. package/dist/components/card.d.ts +6 -12
  53. package/dist/components/card.d.ts.map +1 -1
  54. package/dist/components/card.js +11 -16
  55. package/dist/components/carousel.d.ts +3 -3
  56. package/dist/components/carousel.d.ts.map +1 -1
  57. package/dist/components/carousel.js +7 -7
  58. package/dist/components/catalog-drawer.d.ts +7 -7
  59. package/dist/components/catalog-drawer.d.ts.map +1 -1
  60. package/dist/components/catalog-drawer.js +6 -6
  61. package/dist/components/chart-area-stacked.d.ts +1 -1
  62. package/dist/components/chart-area-stacked.d.ts.map +1 -1
  63. package/dist/components/chart-area-stacked.js +4 -4
  64. package/dist/components/chart-axis.d.ts +14 -1
  65. package/dist/components/chart-axis.d.ts.map +1 -1
  66. package/dist/components/chart-axis.js +11 -1
  67. package/dist/components/chart-bar-horizontal.d.ts +2 -2
  68. package/dist/components/chart-bar-horizontal.d.ts.map +1 -1
  69. package/dist/components/chart-bar-horizontal.js +14 -5
  70. package/dist/components/chart-bar-multiple.d.ts +1 -1
  71. package/dist/components/chart-bar-multiple.d.ts.map +1 -1
  72. package/dist/components/chart-bar-multiple.js +3 -3
  73. package/dist/components/chart-bar-stacked.d.ts +1 -1
  74. package/dist/components/chart-bar-stacked.d.ts.map +1 -1
  75. package/dist/components/chart-bar-stacked.js +3 -3
  76. package/dist/components/chart-card.d.ts +17 -6
  77. package/dist/components/chart-card.d.ts.map +1 -1
  78. package/dist/components/chart-card.js +11 -4
  79. package/dist/components/chart-date-range-control.d.ts +18 -9
  80. package/dist/components/chart-date-range-control.d.ts.map +1 -1
  81. package/dist/components/chart-date-range-control.js +43 -47
  82. package/dist/components/chart-sparkline.d.ts +4 -3
  83. package/dist/components/chart-sparkline.d.ts.map +1 -1
  84. package/dist/components/chart-sparkline.js +6 -5
  85. package/dist/components/check-counts.d.ts +44 -0
  86. package/dist/components/check-counts.d.ts.map +1 -0
  87. package/dist/components/check-counts.js +51 -0
  88. package/dist/components/checkbox.d.ts +39 -11
  89. package/dist/components/checkbox.d.ts.map +1 -1
  90. package/dist/components/checkbox.js +38 -11
  91. package/dist/components/choicebox.d.ts +96 -0
  92. package/dist/components/choicebox.d.ts.map +1 -0
  93. package/dist/components/choicebox.js +113 -0
  94. package/dist/components/clearable-input.d.ts +57 -0
  95. package/dist/components/clearable-input.d.ts.map +1 -0
  96. package/dist/components/clearable-input.js +58 -0
  97. package/dist/components/code-block.d.ts +77 -17
  98. package/dist/components/code-block.d.ts.map +1 -1
  99. package/dist/components/code-block.js +85 -15
  100. package/dist/components/collapsible.d.ts +27 -10
  101. package/dist/components/collapsible.d.ts.map +1 -1
  102. package/dist/components/collapsible.js +24 -9
  103. package/dist/components/collection-filters.d.ts +3 -1
  104. package/dist/components/collection-filters.d.ts.map +1 -1
  105. package/dist/components/collection-filters.js +7 -9
  106. package/dist/components/collection-page.d.ts +31 -10
  107. package/dist/components/collection-page.d.ts.map +1 -1
  108. package/dist/components/collection-page.js +14 -13
  109. package/dist/components/collection-search.d.ts +32 -10
  110. package/dist/components/collection-search.d.ts.map +1 -1
  111. package/dist/components/collection-search.js +24 -13
  112. package/dist/components/collection-sort.d.ts.map +1 -1
  113. package/dist/components/collection-sort.js +2 -2
  114. package/dist/components/collection-toolbar.d.ts +5 -2
  115. package/dist/components/collection-toolbar.d.ts.map +1 -1
  116. package/dist/components/collection-toolbar.js +7 -4
  117. package/dist/components/combobox.d.ts +97 -22
  118. package/dist/components/combobox.d.ts.map +1 -1
  119. package/dist/components/combobox.js +80 -28
  120. package/dist/components/command.d.ts +34 -21
  121. package/dist/components/command.d.ts.map +1 -1
  122. package/dist/components/command.js +33 -25
  123. package/dist/components/confirm-dialog.d.ts +23 -6
  124. package/dist/components/confirm-dialog.d.ts.map +1 -1
  125. package/dist/components/confirm-dialog.js +32 -13
  126. package/dist/components/context-menu.d.ts +14 -10
  127. package/dist/components/context-menu.d.ts.map +1 -1
  128. package/dist/components/context-menu.js +17 -12
  129. package/dist/components/copy-button.d.ts +5 -2
  130. package/dist/components/copy-button.d.ts.map +1 -1
  131. package/dist/components/copy-button.js +16 -8
  132. package/dist/components/data-table.d.ts +120 -54
  133. package/dist/components/data-table.d.ts.map +1 -1
  134. package/dist/components/data-table.js +163 -92
  135. package/dist/components/desktop-shell.d.ts +4 -2
  136. package/dist/components/desktop-shell.d.ts.map +1 -1
  137. package/dist/components/desktop-shell.js +3 -3
  138. package/dist/components/dialog.d.ts +63 -24
  139. package/dist/components/dialog.d.ts.map +1 -1
  140. package/dist/components/dialog.js +52 -31
  141. package/dist/components/disclosure-row.d.ts +1 -2
  142. package/dist/components/disclosure-row.d.ts.map +1 -1
  143. package/dist/components/disclosure-row.js +1 -2
  144. package/dist/components/disclosure.d.ts +1 -1
  145. package/dist/components/disclosure.js +1 -1
  146. package/dist/components/drawer.d.ts +33 -12
  147. package/dist/components/drawer.d.ts.map +1 -1
  148. package/dist/components/drawer.js +47 -35
  149. package/dist/components/dropdown-menu.d.ts +59 -14
  150. package/dist/components/dropdown-menu.d.ts.map +1 -1
  151. package/dist/components/dropdown-menu.js +58 -26
  152. package/dist/components/empty-state.d.ts +35 -12
  153. package/dist/components/empty-state.d.ts.map +1 -1
  154. package/dist/components/empty-state.js +35 -17
  155. package/dist/components/entry-scene.d.ts +4 -4
  156. package/dist/components/entry-scene.d.ts.map +1 -1
  157. package/dist/components/entry-scene.js +2 -2
  158. package/dist/components/field.d.ts +44 -14
  159. package/dist/components/field.d.ts.map +1 -1
  160. package/dist/components/field.js +49 -20
  161. package/dist/components/file-diff.d.ts.map +1 -1
  162. package/dist/components/file-diff.js +3 -4
  163. package/dist/components/form-dialog.d.ts +7 -7
  164. package/dist/components/form-dialog.d.ts.map +1 -1
  165. package/dist/components/form-dialog.js +13 -11
  166. package/dist/components/form-drawer.d.ts +10 -7
  167. package/dist/components/form-drawer.d.ts.map +1 -1
  168. package/dist/components/form-drawer.js +11 -10
  169. package/dist/components/gauge.d.ts +64 -0
  170. package/dist/components/gauge.d.ts.map +1 -0
  171. package/dist/components/gauge.js +73 -0
  172. package/dist/components/hover-card.d.ts +72 -14
  173. package/dist/components/hover-card.d.ts.map +1 -1
  174. package/dist/components/hover-card.js +51 -17
  175. package/dist/components/identity-mark.d.ts +8 -1
  176. package/dist/components/identity-mark.d.ts.map +1 -1
  177. package/dist/components/identity-mark.js +31 -5
  178. package/dist/components/input-group.d.ts +44 -21
  179. package/dist/components/input-group.d.ts.map +1 -1
  180. package/dist/components/input-group.js +74 -27
  181. package/dist/components/input.d.ts +64 -12
  182. package/dist/components/input.d.ts.map +1 -1
  183. package/dist/components/input.js +51 -15
  184. package/dist/components/item.d.ts +37 -15
  185. package/dist/components/item.d.ts.map +1 -1
  186. package/dist/components/item.js +41 -22
  187. package/dist/components/kbd.d.ts +49 -13
  188. package/dist/components/kbd.d.ts.map +1 -1
  189. package/dist/components/kbd.js +115 -16
  190. package/dist/components/kpi-card.d.ts +12 -4
  191. package/dist/components/kpi-card.d.ts.map +1 -1
  192. package/dist/components/kpi-card.js +13 -4
  193. package/dist/components/label.d.ts +17 -10
  194. package/dist/components/label.d.ts.map +1 -1
  195. package/dist/components/label.js +18 -11
  196. package/dist/components/library-shelf.d.ts +6 -6
  197. package/dist/components/library-shelf.d.ts.map +1 -1
  198. package/dist/components/library-shelf.js +5 -5
  199. package/dist/components/load-more-button.d.ts +35 -0
  200. package/dist/components/load-more-button.d.ts.map +1 -0
  201. package/dist/components/load-more-button.js +26 -0
  202. package/dist/components/message-notice.d.ts +8 -13
  203. package/dist/components/message-notice.d.ts.map +1 -1
  204. package/dist/components/message-notice.js +25 -22
  205. package/dist/components/middle-truncate.d.ts +33 -0
  206. package/dist/components/middle-truncate.d.ts.map +1 -0
  207. package/dist/components/middle-truncate.js +72 -0
  208. package/dist/components/multi-select.d.ts +94 -0
  209. package/dist/components/multi-select.d.ts.map +1 -0
  210. package/dist/components/multi-select.js +132 -0
  211. package/dist/components/native-select.d.ts +37 -13
  212. package/dist/components/native-select.d.ts.map +1 -1
  213. package/dist/components/native-select.js +27 -11
  214. package/dist/components/notice-banner.d.ts +17 -10
  215. package/dist/components/notice-banner.d.ts.map +1 -1
  216. package/dist/components/notice-banner.js +12 -11
  217. package/dist/components/numbered-steps.d.ts +10 -4
  218. package/dist/components/numbered-steps.d.ts.map +1 -1
  219. package/dist/components/numbered-steps.js +9 -7
  220. package/dist/components/object-page.d.ts +40 -14
  221. package/dist/components/object-page.d.ts.map +1 -1
  222. package/dist/components/object-page.js +12 -10
  223. package/dist/components/object-workspace.d.ts +29 -10
  224. package/dist/components/object-workspace.d.ts.map +1 -1
  225. package/dist/components/object-workspace.js +18 -8
  226. package/dist/components/overview-page.d.ts +2 -2
  227. package/dist/components/overview-page.d.ts.map +1 -1
  228. package/dist/components/overview-page.js +8 -7
  229. package/dist/components/page-actions.d.ts +28 -8
  230. package/dist/components/page-actions.d.ts.map +1 -1
  231. package/dist/components/page-actions.js +22 -25
  232. package/dist/components/page-header.d.ts +11 -4
  233. package/dist/components/page-header.d.ts.map +1 -1
  234. package/dist/components/page-header.js +10 -5
  235. package/dist/components/pending-label.d.ts +6 -5
  236. package/dist/components/pending-label.d.ts.map +1 -1
  237. package/dist/components/pending-label.js +14 -6
  238. package/dist/components/picture-label.d.ts +2 -2
  239. package/dist/components/picture-label.d.ts.map +1 -1
  240. package/dist/components/picture-label.js +3 -3
  241. package/dist/components/portal-sidebar-frame.d.ts +9 -21
  242. package/dist/components/portal-sidebar-frame.d.ts.map +1 -1
  243. package/dist/components/portal-sidebar-frame.js +13 -27
  244. package/dist/components/progress-checklist.d.ts +46 -0
  245. package/dist/components/progress-checklist.d.ts.map +1 -0
  246. package/dist/components/progress-checklist.js +46 -0
  247. package/dist/components/progress.d.ts +48 -8
  248. package/dist/components/progress.d.ts.map +1 -1
  249. package/dist/components/progress.js +92 -16
  250. package/dist/components/prose.d.ts +19 -0
  251. package/dist/components/prose.d.ts.map +1 -0
  252. package/dist/components/prose.js +29 -0
  253. package/dist/components/radio-group.d.ts +51 -12
  254. package/dist/components/radio-group.d.ts.map +1 -1
  255. package/dist/components/radio-group.js +42 -12
  256. package/dist/components/reading-column.js +1 -1
  257. package/dist/components/record-identity.d.ts +6 -5
  258. package/dist/components/record-identity.d.ts.map +1 -1
  259. package/dist/components/record-identity.js +12 -3
  260. package/dist/components/record-list.d.ts +117 -27
  261. package/dist/components/record-list.d.ts.map +1 -1
  262. package/dist/components/record-list.js +185 -55
  263. package/dist/components/record-time.d.ts +20 -7
  264. package/dist/components/record-time.d.ts.map +1 -1
  265. package/dist/components/record-time.js +38 -19
  266. package/dist/components/resizable.d.ts +7 -5
  267. package/dist/components/resizable.d.ts.map +1 -1
  268. package/dist/components/resizable.js +6 -6
  269. package/dist/components/scope-switcher.d.ts +2 -0
  270. package/dist/components/scope-switcher.d.ts.map +1 -1
  271. package/dist/components/scope-switcher.js +2 -2
  272. package/dist/components/scroll-area.d.ts +47 -11
  273. package/dist/components/scroll-area.d.ts.map +1 -1
  274. package/dist/components/scroll-area.js +72 -14
  275. package/dist/components/segmented-control.d.ts +82 -0
  276. package/dist/components/segmented-control.d.ts.map +1 -0
  277. package/dist/components/segmented-control.js +90 -0
  278. package/dist/components/select.d.ts +55 -15
  279. package/dist/components/select.d.ts.map +1 -1
  280. package/dist/components/select.js +62 -19
  281. package/dist/components/separator.d.ts +12 -5
  282. package/dist/components/separator.d.ts.map +1 -1
  283. package/dist/components/separator.js +11 -6
  284. package/dist/components/settings-facts.d.ts +34 -14
  285. package/dist/components/settings-facts.d.ts.map +1 -1
  286. package/dist/components/settings-facts.js +21 -12
  287. package/dist/components/settings-page.d.ts +4 -4
  288. package/dist/components/settings-page.js +5 -5
  289. package/dist/components/settings-section.d.ts +160 -34
  290. package/dist/components/settings-section.d.ts.map +1 -1
  291. package/dist/components/settings-section.js +92 -39
  292. package/dist/components/sheet.d.ts +47 -16
  293. package/dist/components/sheet.d.ts.map +1 -1
  294. package/dist/components/sheet.js +40 -19
  295. package/dist/components/sidebar-sections.d.ts +16 -12
  296. package/dist/components/sidebar-sections.d.ts.map +1 -1
  297. package/dist/components/sidebar-sections.js +30 -15
  298. package/dist/components/sidebar.d.ts +117 -21
  299. package/dist/components/sidebar.d.ts.map +1 -1
  300. package/dist/components/sidebar.js +180 -55
  301. package/dist/components/skeleton.d.ts +54 -8
  302. package/dist/components/skeleton.d.ts.map +1 -1
  303. package/dist/components/skeleton.js +44 -9
  304. package/dist/components/slider.d.ts +53 -11
  305. package/dist/components/slider.d.ts.map +1 -1
  306. package/dist/components/slider.js +71 -17
  307. package/dist/components/snippet.d.ts +57 -0
  308. package/dist/components/snippet.d.ts.map +1 -0
  309. package/dist/components/snippet.js +60 -0
  310. package/dist/components/sonner.d.ts +13 -14
  311. package/dist/components/sonner.d.ts.map +1 -1
  312. package/dist/components/sonner.js +25 -22
  313. package/dist/components/status-badge.d.ts +37 -11
  314. package/dist/components/status-badge.d.ts.map +1 -1
  315. package/dist/components/status-badge.js +63 -15
  316. package/dist/components/status-dot.d.ts +42 -11
  317. package/dist/components/status-dot.d.ts.map +1 -1
  318. package/dist/components/status-dot.js +40 -11
  319. package/dist/components/switch.d.ts +43 -12
  320. package/dist/components/switch.d.ts.map +1 -1
  321. package/dist/components/switch.js +42 -12
  322. package/dist/components/table-card.d.ts +21 -12
  323. package/dist/components/table-card.d.ts.map +1 -1
  324. package/dist/components/table-card.js +17 -9
  325. package/dist/components/table-layouts.d.ts +40 -8
  326. package/dist/components/table-layouts.d.ts.map +1 -1
  327. package/dist/components/table-layouts.js +52 -8
  328. package/dist/components/table-value.d.ts +4 -3
  329. package/dist/components/table-value.d.ts.map +1 -1
  330. package/dist/components/table-value.js +6 -5
  331. package/dist/components/table.d.ts +62 -25
  332. package/dist/components/table.d.ts.map +1 -1
  333. package/dist/components/table.js +62 -26
  334. package/dist/components/tabs.d.ts +86 -17
  335. package/dist/components/tabs.d.ts.map +1 -1
  336. package/dist/components/tabs.js +93 -22
  337. package/dist/components/text-link.d.ts +4 -1
  338. package/dist/components/text-link.d.ts.map +1 -1
  339. package/dist/components/text-link.js +4 -1
  340. package/dist/components/text-with-copy-button.d.ts +30 -0
  341. package/dist/components/text-with-copy-button.d.ts.map +1 -0
  342. package/dist/components/text-with-copy-button.js +32 -0
  343. package/dist/components/textarea.d.ts +40 -10
  344. package/dist/components/textarea.d.ts.map +1 -1
  345. package/dist/components/textarea.js +50 -11
  346. package/dist/components/theme-mode-switcher.d.ts +18 -1
  347. package/dist/components/theme-mode-switcher.d.ts.map +1 -1
  348. package/dist/components/theme-mode-switcher.js +20 -2
  349. package/dist/components/toggle-group.d.ts +28 -8
  350. package/dist/components/toggle-group.d.ts.map +1 -1
  351. package/dist/components/toggle-group.js +12 -6
  352. package/dist/components/toggle.d.ts +6 -3
  353. package/dist/components/toggle.d.ts.map +1 -1
  354. package/dist/components/toggle.js +10 -7
  355. package/dist/components/tooltip.d.ts +43 -12
  356. package/dist/components/tooltip.d.ts.map +1 -1
  357. package/dist/components/tooltip.js +45 -16
  358. package/dist/components/trend-badge.js +1 -1
  359. package/dist/components/update-card.js +1 -1
  360. package/dist/eslint/index.js +82 -0
  361. package/dist/eslint/rules/badge-is-static-label.js +93 -0
  362. package/dist/eslint/rules/button-icon-slot.js +102 -0
  363. package/dist/eslint/rules/button-link-for-navigation.js +146 -0
  364. package/dist/eslint/rules/button-no-aria-label-with-text.js +75 -0
  365. package/dist/eslint/rules/button-type-roles-only-in-buttons.js +83 -0
  366. package/dist/eslint/rules/choice-control-has-a-name.js +98 -0
  367. package/dist/eslint/rules/choice-group-in-fieldset.js +86 -0
  368. package/dist/eslint/rules/command-shortcut-single-owner.js +118 -0
  369. package/dist/eslint/rules/confirm-dialog-words.js +63 -0
  370. package/dist/eslint/rules/data-table-one-unsized-column.js +96 -0
  371. package/dist/eslint/rules/destructive-action-placement.js +69 -0
  372. package/dist/eslint/rules/disabled-choice-says-why.js +71 -0
  373. package/dist/eslint/rules/ellipsis-opens-a-dialog.js +110 -0
  374. package/dist/eslint/rules/input-group-owners.js +155 -0
  375. package/dist/eslint/rules/kbd-children-no-modifier-text.js +128 -0
  376. package/dist/eslint/rules/literal-text.js +41 -0
  377. package/dist/eslint/rules/middle-truncate-placement.js +69 -0
  378. package/dist/eslint/rules/no-bare-button-label.js +55 -0
  379. package/dist/eslint/rules/no-control-in-read-only-surface.js +106 -0
  380. package/dist/eslint/rules/no-hand-built-busy.js +104 -0
  381. package/dist/eslint/rules/no-hand-built-theme-picker.js +144 -0
  382. package/dist/eslint/rules/no-hand-built-tile.js +41 -0
  383. package/dist/eslint/rules/no-hand-formatted-date.js +87 -0
  384. package/dist/eslint/rules/no-hand-stacked-avatars.js +67 -0
  385. package/dist/eslint/rules/no-nested-collapse.js +60 -0
  386. package/dist/eslint/rules/no-search-in-form.js +47 -0
  387. package/dist/eslint/rules/no-shadcn-appearance-override.js +2 -16
  388. package/dist/eslint/rules/no-shell-prompt-in-snippet.js +74 -0
  389. package/dist/eslint/rules/no-stock-error-words.js +56 -0
  390. package/dist/eslint/rules/no-tooltip-around-labelled-field.js +72 -0
  391. package/dist/eslint/rules/no-weight-class-on-strong-in-type-role.js +57 -0
  392. package/dist/eslint/rules/one-submenu-level.js +43 -0
  393. package/dist/eslint/rules/one-toast-per-flow.js +91 -0
  394. package/dist/eslint/rules/option-count.js +167 -0
  395. package/dist/eslint/rules/page-command-link-not-render.js +43 -0
  396. package/dist/eslint/rules/progress-needs-name.js +57 -0
  397. package/dist/eslint/rules/settings-limit-in-footer.js +94 -0
  398. package/dist/eslint/rules/skeleton-in-region.js +80 -0
  399. package/dist/eslint/rules/sortable-heading-uses-sort.js +79 -0
  400. package/dist/eslint/rules/table-cell-inset-owner.js +107 -0
  401. package/dist/eslint/rules/tabs-selection-is-controlled.js +47 -0
  402. package/dist/eslint/rules/tooltip-only-arrow.js +38 -0
  403. package/dist/eslint/rules/tooltip-trigger-accessible-name.js +114 -0
  404. package/dist/eslint/strict-design-system.js +21 -7
  405. package/dist/index.d.ts +13 -13
  406. package/dist/index.d.ts.map +1 -1
  407. package/dist/index.js +12 -13
  408. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -1
  409. package/dist/internal/assistant-ui/attachment.js +2 -2
  410. package/dist/internal/assistant-ui/reasoning.d.ts +1 -1
  411. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -1
  412. package/dist/internal/assistant-ui/tool-fallback.js +1 -1
  413. package/dist/internal/assistant-ui/tool-group.d.ts +1 -1
  414. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -1
  415. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts +2 -3
  416. package/dist/internal/assistant-ui/tooltip-icon-button.d.ts.map +1 -1
  417. package/dist/internal/assistant-ui/tooltip-icon-button.js +1 -1
  418. package/dist/internal/catalog-list.js +2 -2
  419. package/dist/internal/collection-note.d.ts +23 -0
  420. package/dist/internal/collection-note.d.ts.map +1 -0
  421. package/dist/internal/collection-note.js +17 -0
  422. package/dist/internal/collection-rail.d.ts +57 -0
  423. package/dist/internal/collection-rail.d.ts.map +1 -0
  424. package/dist/internal/collection-rail.js +33 -0
  425. package/dist/internal/company-logo.d.ts +18 -0
  426. package/dist/internal/company-logo.d.ts.map +1 -0
  427. package/dist/internal/company-logo.js +14 -0
  428. package/dist/internal/control-name.d.ts +12 -0
  429. package/dist/internal/control-name.d.ts.map +1 -0
  430. package/dist/internal/control-name.js +1 -0
  431. package/dist/internal/diff-line.d.ts +9 -0
  432. package/dist/internal/diff-line.d.ts.map +1 -0
  433. package/dist/internal/diff-line.js +8 -0
  434. package/dist/internal/empty.d.ts +8 -4
  435. package/dist/internal/empty.d.ts.map +1 -1
  436. package/dist/internal/empty.js +14 -8
  437. package/dist/internal/field-frame.d.ts +33 -0
  438. package/dist/internal/field-frame.d.ts.map +1 -0
  439. package/dist/internal/field-frame.js +20 -0
  440. package/dist/internal/final-focus.d.ts +8 -0
  441. package/dist/internal/final-focus.d.ts.map +1 -0
  442. package/dist/internal/final-focus.js +10 -0
  443. package/dist/internal/footer-strip.d.ts.map +1 -1
  444. package/dist/internal/footer-strip.js +3 -1
  445. package/dist/internal/form-submit.d.ts +9 -5
  446. package/dist/internal/form-submit.d.ts.map +1 -1
  447. package/dist/internal/form-submit.js +31 -2
  448. package/dist/internal/input-box.d.ts +26 -0
  449. package/dist/internal/input-box.d.ts.map +1 -0
  450. package/dist/internal/input-box.js +59 -0
  451. package/dist/internal/menu-surface.d.ts +10 -3
  452. package/dist/internal/menu-surface.d.ts.map +1 -1
  453. package/dist/internal/menu-surface.js +10 -3
  454. package/dist/internal/notice.d.ts +25 -0
  455. package/dist/internal/notice.d.ts.map +1 -0
  456. package/dist/internal/notice.js +33 -0
  457. package/dist/internal/overlay-stem.d.ts +5 -0
  458. package/dist/internal/overlay-stem.d.ts.map +1 -0
  459. package/dist/internal/overlay-stem.js +7 -0
  460. package/dist/internal/phone-sheet.d.ts +4 -0
  461. package/dist/internal/phone-sheet.d.ts.map +1 -0
  462. package/dist/internal/phone-sheet.js +2 -0
  463. package/dist/internal/present-content.d.ts +3 -0
  464. package/dist/internal/present-content.d.ts.map +1 -0
  465. package/dist/internal/present-content.js +1 -0
  466. package/dist/internal/record-menu-items.d.ts +4 -3
  467. package/dist/internal/record-menu-items.d.ts.map +1 -1
  468. package/dist/internal/record-menu-items.js +21 -6
  469. package/dist/internal/settings-save.d.ts +9 -2
  470. package/dist/internal/settings-save.d.ts.map +1 -1
  471. package/dist/internal/settings-save.js +19 -6
  472. package/dist/internal/table-compact-line.d.ts +38 -0
  473. package/dist/internal/table-compact-line.d.ts.map +1 -0
  474. package/dist/internal/table-compact-line.js +35 -0
  475. package/dist/internal/title-when-cut.d.ts +8 -0
  476. package/dist/internal/title-when-cut.d.ts.map +1 -0
  477. package/dist/internal/title-when-cut.js +22 -0
  478. package/dist/internal/unsaved-guard.d.ts +18 -0
  479. package/dist/internal/unsaved-guard.d.ts.map +1 -0
  480. package/dist/internal/unsaved-guard.js +31 -0
  481. package/dist/lib/merge-tokens.generated.js +2 -2
  482. package/dist/showcase/foundations.d.ts.map +1 -1
  483. package/dist/showcase/foundations.js +10 -2
  484. package/dist/showcase/specimens/actions.d.ts +2 -0
  485. package/dist/showcase/specimens/actions.d.ts.map +1 -1
  486. package/dist/showcase/specimens/actions.js +30 -5
  487. package/dist/showcase/specimens/charts.d.ts.map +1 -1
  488. package/dist/showcase/specimens/charts.js +22 -13
  489. package/dist/showcase/specimens/choices.d.ts +14 -3
  490. package/dist/showcase/specimens/choices.d.ts.map +1 -1
  491. package/dist/showcase/specimens/choices.js +93 -13
  492. package/dist/showcase/specimens/compositions.d.ts.map +1 -1
  493. package/dist/showcase/specimens/compositions.js +136 -23
  494. package/dist/showcase/specimens/data.d.ts +12 -7
  495. package/dist/showcase/specimens/data.d.ts.map +1 -1
  496. package/dist/showcase/specimens/data.js +139 -35
  497. package/dist/showcase/specimens/feedback.d.ts +2 -0
  498. package/dist/showcase/specimens/feedback.d.ts.map +1 -1
  499. package/dist/showcase/specimens/feedback.js +39 -15
  500. package/dist/showcase/specimens/index.d.ts +20 -12
  501. package/dist/showcase/specimens/index.d.ts.map +1 -1
  502. package/dist/showcase/specimens/inputs.d.ts +4 -2
  503. package/dist/showcase/specimens/inputs.d.ts.map +1 -1
  504. package/dist/showcase/specimens/inputs.js +62 -19
  505. package/dist/showcase/specimens/menus.d.ts +0 -1
  506. package/dist/showcase/specimens/menus.d.ts.map +1 -1
  507. package/dist/showcase/specimens/menus.js +47 -17
  508. package/dist/showcase/specimens/navigation.d.ts +6 -4
  509. package/dist/showcase/specimens/navigation.d.ts.map +1 -1
  510. package/dist/showcase/specimens/navigation.js +61 -32
  511. package/dist/showcase/specimens/other.d.ts +1 -3
  512. package/dist/showcase/specimens/other.d.ts.map +1 -1
  513. package/dist/showcase/specimens/other.js +17 -13
  514. package/dist/showcase/specimens/status.d.ts +4 -1
  515. package/dist/showcase/specimens/status.d.ts.map +1 -1
  516. package/dist/showcase/specimens/status.js +64 -11
  517. package/dist/showcase/usage.generated.d.ts +1 -1
  518. package/dist/showcase/usage.generated.d.ts.map +1 -1
  519. package/dist/showcase/usage.generated.js +632 -544
  520. package/dist/standalone/index.js +1 -1
  521. package/dist/styles/components.css +13 -13
  522. package/dist/styles/globals.css +25 -0
  523. package/package.json +2 -3
  524. package/dist/components/approval-row.d.ts +0 -34
  525. package/dist/components/approval-row.d.ts.map +0 -1
  526. package/dist/components/approval-row.js +0 -27
  527. package/dist/components/channel-view.d.ts +0 -112
  528. package/dist/components/channel-view.d.ts.map +0 -1
  529. package/dist/components/channel-view.js +0 -84
  530. package/dist/components/dashboard-shell.d.ts +0 -51
  531. package/dist/components/dashboard-shell.d.ts.map +0 -1
  532. package/dist/components/dashboard-shell.js +0 -89
  533. package/dist/components/direction.d.ts +0 -2
  534. package/dist/components/direction.d.ts.map +0 -1
  535. package/dist/components/direction.js +0 -1
  536. package/dist/components/expandable-block.d.ts +0 -20
  537. package/dist/components/expandable-block.d.ts.map +0 -1
  538. package/dist/components/expandable-block.js +0 -32
  539. package/dist/components/form.d.ts +0 -42
  540. package/dist/components/form.d.ts.map +0 -1
  541. package/dist/components/form.js +0 -91
  542. package/dist/components/label-system.d.ts +0 -17
  543. package/dist/components/label-system.d.ts.map +0 -1
  544. package/dist/components/label-system.js +0 -21
  545. package/dist/components/memory-item.d.ts +0 -21
  546. package/dist/components/memory-item.d.ts.map +0 -1
  547. package/dist/components/memory-item.js +0 -18
  548. package/dist/components/menubar.d.ts +0 -43
  549. package/dist/components/menubar.d.ts.map +0 -1
  550. package/dist/components/menubar.js +0 -69
  551. package/dist/components/navigation-menu.d.ts +0 -26
  552. package/dist/components/navigation-menu.d.ts.map +0 -1
  553. package/dist/components/navigation-menu.js +0 -45
  554. package/dist/components/pagination.d.ts +0 -33
  555. package/dist/components/pagination.d.ts.map +0 -1
  556. package/dist/components/pagination.js +0 -41
  557. package/dist/components/plugin-slot-boundary.d.ts +0 -42
  558. package/dist/components/plugin-slot-boundary.d.ts.map +0 -1
  559. package/dist/components/plugin-slot-boundary.js +0 -41
  560. package/dist/components/status-row.d.ts +0 -32
  561. package/dist/components/status-row.d.ts.map +0 -1
  562. package/dist/components/status-row.js +0 -35
@@ -1,8 +1,9 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Mail, Plus, Puzzle, Wrench } from "lucide-react";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Mail, Plus, Puzzle, RefreshCw, Wrench } from "lucide-react";
4
4
  import { useState } from "react";
5
5
  import { ActivityFeed } from "../../components/activity-feed.js";
6
+ import { AgentCard } from "../../components/agent-card.js";
6
7
  import { AgentOrb } from "../../components/agent-orb.js";
7
8
  import { AgentProfileCard } from "../../components/agent-profile.js";
8
9
  import { BrandWordmark } from "../../components/brand.js";
@@ -17,7 +18,6 @@ import { EntryAction, EntryActions, EntryMessage, EntryScene } from "../../compo
17
18
  import { FormDialog, FormDialogForm } from "../../components/form-dialog.js";
18
19
  import { FormDrawer, FormDrawerBody, FormDrawerFooter } from "../../components/form-drawer.js";
19
20
  import { Input } from "../../components/input.js";
20
- import { Label } from "../../components/label.js";
21
21
  import { LibraryShelf } from "../../components/library-shelf.js";
22
22
  import { NadiaPresence } from "../../components/nadia-presence.js";
23
23
  import { ObjectPage } from "../../components/object-page.js";
@@ -37,10 +37,12 @@ const FILTER_COPY = {
37
37
  searchFields: "Find a filter",
38
38
  searchValues: "Find a value",
39
39
  empty: "Nothing matches",
40
+ results: (count) => `${count} results`,
40
41
  back: "Back to filters",
41
42
  remove: "Remove filter",
42
43
  };
43
44
  const MAILBOX_LIST = {
45
+ empty: { kind: "nothingYet", message: "No mailboxes yet." },
44
46
  getId: (mailbox) => mailbox.id,
45
47
  name: (mailbox) => ({
46
48
  name: mailbox.address,
@@ -50,6 +52,7 @@ const MAILBOX_LIST = {
50
52
  status: {
51
53
  label: "Status",
52
54
  of: (mailbox) => mailbox.status === "failed" ? { label: "Can't sign in", tone: "danger" } : null,
55
+ size: 150,
53
56
  },
54
57
  menu: (mailbox) => ({ label: `More for ${mailbox.address}`, commands: RECORD_COMMANDS }),
55
58
  commandsHeader: "Actions",
@@ -83,7 +86,12 @@ function useMailboxFilter() {
83
86
  (status === "" || mailbox.status === status));
84
87
  return {
85
88
  records,
86
- search: { label: "Find a mailbox", value: search, onValueChange: setSearch },
89
+ search: {
90
+ label: "Find a mailbox",
91
+ clearLabel: "Clear search",
92
+ value: search,
93
+ onValueChange: setSearch,
94
+ },
87
95
  filters: {
88
96
  facets: [
89
97
  {
@@ -132,7 +140,12 @@ function AgentProfileCardSpecimen() {
132
140
  function CatalogDrawerSpecimen() {
133
141
  const [open, setOpen] = useState(false);
134
142
  const [search, setSearch] = useState("");
135
- return (_jsxs(_Fragment, { children: [_jsxs(Button, { onClick: () => setOpen(true), variant: "outline", children: [_jsx(Plus, { "aria-hidden": "true", "data-icon": "inline-start" }), "Add skill"] }), _jsx(CatalogDrawer, { closeLabel: "Close", done: "Done", empty: { kind: "nothingYet", message: "No skill to add yet." }, loadingLabel: "Loading skills", onOpenChange: setOpen, open: open, search: { label: "Find a skill", value: search, onValueChange: setSearch }, sections: CATALOG, title: "Add a skill" })] }));
143
+ return (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setOpen(true), prefix: _jsx(Plus, { "aria-hidden": "true" }), variant: "outline", children: "Add skill" }), _jsx(CatalogDrawer, { closeLabel: "Close", done: "Done", empty: { kind: "nothingYet", message: "No skill to add yet." }, loadingLabel: "Loading skills", onOpenChange: setOpen, open: open, search: {
144
+ label: "Find a skill",
145
+ clearLabel: "Clear search",
146
+ value: search,
147
+ onValueChange: setSearch,
148
+ }, sections: CATALOG, title: "Add a skill" })] }));
136
149
  }
137
150
  function CollectionFiltersSpecimen() {
138
151
  const { filters } = useMailboxFilter();
@@ -153,6 +166,33 @@ function CollectionPageSpecimen() {
153
166
  }, filters: filters, footer: { count: `${records.length} mailboxes` }, label: "Mailboxes", noMatch: {
154
167
  message: "No mailbox matches.",
155
168
  clear: { label: "Clear search", onClick: () => search.onValueChange("") },
169
+ }, rail: {
170
+ label: "About your mailboxes",
171
+ sections: [
172
+ {
173
+ id: "attention",
174
+ title: "Needs attention",
175
+ items: MAILBOXES.filter((mailbox) => mailbox.status === "failed").map((mailbox) => ({
176
+ id: mailbox.id,
177
+ mark: { kind: "record", icon: Mail },
178
+ title: mailbox.address,
179
+ detail: "Can't sign in since yesterday",
180
+ href: "#",
181
+ })),
182
+ empty: { kind: "cleared", message: "Every mailbox signs in." },
183
+ },
184
+ {
185
+ id: "figures",
186
+ title: "This month",
187
+ summary: "October",
188
+ action: { label: "Billing", onClick: nothing },
189
+ items: [
190
+ { id: "read", title: "Messages read", value: "1,284" },
191
+ { id: "sent", title: "Messages sent", value: "312" },
192
+ ],
193
+ empty: { kind: "nothingYet", message: "Nothing read this month." },
194
+ },
195
+ ],
156
196
  }, records: records, search: search, title: "Mailboxes" }));
157
197
  }
158
198
  function CollectionToolbarSpecimen() {
@@ -160,19 +200,35 @@ function CollectionToolbarSpecimen() {
160
200
  return (_jsx(CollectionToolbar, { controls: _jsx(CollectionFilters, { ...filters }), label: "Mailbox tools", search: _jsx(CollectionSearch, { ...search }), surface: "plain" }));
161
201
  }
162
202
  function ConfirmDialogSpecimen() {
163
- const [open, setOpen] = useState(false);
164
- return (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setOpen(true), variant: "outline", children: "Remove mailbox" }), _jsx(ConfirmDialog, { cancelLabel: "Cancel", confirmLabel: "Remove mailbox", confirmPendingLabel: "Removing mailbox", description: "Agents stop reading and sending from this address.", destructive: true, onCancel: () => setOpen(false), onConfirm: () => setOpen(false), open: open, title: "Remove pec@acme.it" })] }));
203
+ const [open, setOpen] = useState(null);
204
+ const close = () => setOpen(null);
205
+ return (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { onClick: () => setOpen("reversible"), variant: "outline", children: "Remove mailbox" }), _jsx(Button, { onClick: () => setOpen("typed"), variant: "outline", children: "Remove mailbox, typed" }), _jsx(ConfirmDialog, { cancelLabel: "Cancel", confirmLabel: "Remove mailbox", confirmPendingLabel: "Removing mailbox", description: "Agents stop reading and sending from this address.", destructive: true, onCancel: close, onConfirm: close, open: open === "reversible", title: "Remove pec@acme.it" }), _jsx(ConfirmDialog, { cancelLabel: "Cancel", confirmLabel: "Remove mailbox", confirmPendingLabel: "Removing mailbox", description: "Agents stop reading and sending from this address.", destructive: true, irreversible: "Removing pec@acme.it cannot be undone.", onCancel: close, onConfirm: close, open: open === "typed", title: "Remove pec@acme.it", verify: {
206
+ phrase: "pec@acme.it",
207
+ prompt: "To confirm, type the mailbox address pec@acme.it",
208
+ } })] }));
165
209
  }
166
210
  function EntrySceneSpecimen() {
167
211
  const art = useEmptyArt();
168
212
  return (_jsx("div", { className: "max-w-3xl overflow-hidden rounded-md", children: _jsxs(EntryScene, { picture: _jsx("img", { alt: "", className: "size-full object-cover", src: art.agents }), presence: _jsx(NadiaPresence, { label: "Nadia is ready", reveal: 1, state: "ready" }), title: "Nadia is ready", wordmark: _jsx(BrandWordmark, {}), children: [_jsx(EntryMessage, { children: "Sign in to bring your Agents to this computer." }), _jsx(EntryActions, { children: _jsx(EntryAction, { children: "Sign in" }) })] }) }));
169
213
  }
170
214
  function FormDialogSpecimen() {
171
- const [open, setOpen] = useState(false);
172
- return (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setOpen(true), variant: "outline", children: "New customer" }), _jsx(FormDialog, { closeLabel: "Close", onOpenChange: setOpen, open: open, title: "Create customer", children: _jsx(FormDialogForm, { cancelLabel: "Cancel", onSubmit: (event) => {
215
+ const [open, setOpen] = useState(null);
216
+ const [discardOpen, setDiscardOpen] = useState(false);
217
+ const [name, setName] = useState("");
218
+ const close = () => {
219
+ setOpen(null);
220
+ setName("");
221
+ };
222
+ return (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { onClick: () => setOpen("plain"), variant: "outline", children: "New customer" }), _jsx(Button, { onClick: () => setOpen("guarded"), variant: "outline", children: "New customer, guarded" }), _jsx(FormDialog, { closeLabel: "Close", onOpenChange: (next) => setOpen(next ? "plain" : null), open: open === "plain", title: "Create customer", children: _jsx(FormDialogForm, { cancelLabel: "Cancel", onSubmit: (event) => {
173
223
  event.preventDefault();
174
- setOpen(false);
175
- }, submit: { label: "Create customer", pendingLabel: "Creating customer" }, children: _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "showcase-customer", children: "Company name" }), _jsx(Input, { id: "showcase-customer", placeholder: "Bizeta Arredamenti" })] }) }) })] }));
224
+ close();
225
+ }, submit: { label: "Create customer", pendingLabel: "Creating customer" }, children: _jsx(Input, { id: "showcase-customer", label: "Company name", placeholder: "Bizeta Arredamenti" }) }) }), _jsx(FormDialog, { closeLabel: "Close", onOpenChange: (next) => setOpen(next ? "guarded" : null), open: open === "guarded", title: "Create customer", unsaved: { dirty: name !== "", onDismissBlocked: () => setDiscardOpen(true) }, children: _jsx(FormDialogForm, { cancelLabel: "Cancel", onSubmit: (event) => {
226
+ event.preventDefault();
227
+ close();
228
+ }, submit: { label: "Create customer", pendingLabel: "Creating customer" }, children: _jsx(Input, { id: "showcase-customer-guarded", label: "Company name", onChange: (event) => setName(event.target.value), placeholder: "Bizeta Arredamenti", value: name }) }) }), _jsx(ConfirmDialog, { cancelLabel: "Keep editing", confirmLabel: "Discard changes", description: "The company name you typed is not saved.", onCancel: () => setDiscardOpen(false), onConfirm: () => {
229
+ setDiscardOpen(false);
230
+ close();
231
+ }, open: discardOpen, title: "Discard the new customer" })] }));
176
232
  }
177
233
  function FormDrawerSpecimen() {
178
234
  const [open, setOpen] = useState(false);
@@ -181,12 +237,37 @@ function FormDrawerSpecimen() {
181
237
  function LibraryShelfSpecimen() {
182
238
  const art = useEmptyArt();
183
239
  const [search, setSearch] = useState("");
184
- return (_jsx(LibraryShelf, { definition: "Skills teach an Agent one job. Add one and every Agent you choose can do it.", empty: {
240
+ const templates = [
241
+ {
242
+ name: "Acme Quotes",
243
+ job: "Writes quotes from the price list",
244
+ form: "orbit",
245
+ meta: "3 skills · v1.2.0",
246
+ },
247
+ {
248
+ name: "Front desk",
249
+ job: "Answers the phone and books appointments",
250
+ form: "globe",
251
+ meta: "5 skills · 2 tasks · v2.0.1",
252
+ },
253
+ {
254
+ name: "Invoices",
255
+ job: "Checks e-invoices against orders before they are paid",
256
+ form: "ribbon",
257
+ meta: "4 skills · v1.0.0",
258
+ },
259
+ ];
260
+ return (_jsx(LibraryShelf, { empty: {
185
261
  kind: "firstUse",
186
- title: "No skills yet",
187
- description: "The jobs your Agents know live here.",
188
- picture: art.skills,
189
- }, loadingLabel: "Loading skills", search: { label: "Find a skill", value: search, onValueChange: setSearch }, sections: CATALOG }));
262
+ title: "No Agent templates yet",
263
+ description: "Agent templates appear here once published.",
264
+ picture: art.library,
265
+ }, loadingLabel: "Loading Agent templates", search: {
266
+ label: "Search Agent templates",
267
+ clearLabel: "Clear search",
268
+ value: search,
269
+ onValueChange: setSearch,
270
+ }, templates: templates.map((template) => (_jsx(AgentCard, { action: _jsx(Button, { prefix: _jsx(Plus, {}), children: "Create agent" }), job: template.job, meta: template.meta, name: template.name, visual: _jsx(AgentOrb, { color: COBALTO, decorative: true, form: template.form, size: 96 }) }, template.name))) }));
190
271
  }
191
272
  function OverviewPageSpecimen() {
192
273
  return (_jsx(OverviewPage, { exceptions: _jsx(RecordList, { ...MAILBOX_LIST, heading: { title: "Needs attention", meta: "1 of 3 mailboxes" }, label: "Needs attention", records: MAILBOXES.filter((mailbox) => mailbox.status === "failed") }), figures: [
@@ -229,9 +310,9 @@ function RecordSheetSpecimen() {
229
310
  }
230
311
  function RowEditFormSpecimen() {
231
312
  const [name, setName] = useState("Invoices");
232
- return (_jsx("div", { className: "max-w-lg rounded-md border border-border", children: _jsx(RowEditForm, { cancelLabel: "Cancel", hint: "Agents see the new name at once.", onCancel: () => setName("Invoices"), onSubmit: (event) => event.preventDefault(), submit: { label: "Save", disabled: name === "Invoices" }, children: _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "showcase-row-name", children: "Name" }), _jsx(Input, { id: "showcase-row-name", onChange: (event) => setName(event.target.value), value: name })] }) }) }));
313
+ return (_jsx("div", { className: "max-w-lg rounded-md border border-border", children: _jsx(RowEditForm, { cancelLabel: "Cancel", hint: "Agents see the new name at once.", onCancel: () => setName("Invoices"), onSubmit: (event) => event.preventDefault(), submit: { label: "Save", disabled: name === "Invoices" }, children: _jsx(Input, { id: "showcase-row-name", label: "Name", onChange: (event) => setName(event.target.value), value: name }) }) }));
233
314
  }
234
- function SettingsSectionSpecimen() {
315
+ function SenderSection() {
235
316
  return (_jsx(SettingsSection, { description: "The name and address your Customers read on every message.", save: {
236
317
  action: async () => null,
237
318
  label: "Save",
@@ -240,6 +321,30 @@ function SettingsSectionSpecimen() {
240
321
  hint: "Please use 32 characters at maximum.",
241
322
  }, title: "Sender", children: _jsx(SettingsField, { id: "showcase-sender-name", label: "Sender name", children: ({ controlProps }) => (_jsx(Input, { ...controlProps, defaultValue: "Acme Quotes", name: "senderName" })) }) }));
242
323
  }
324
+ function SettingsSectionSpecimen() {
325
+ return (_jsxs(SettingsPage, { children: [_jsx(SenderSection, {}), _jsx(SettingsSection, { description: "The last payment of \u20AC 49 did not go through. Update your card to keep the Business plan.", footer: _jsx(Button, { variant: "outline", children: "Update payment method" }), title: "Payment failed", tone: "error" }), _jsx(SettingsSection, { description: "Your Pro trial ends on 30 November. Add a payment method to keep your Agents running.", footer: _jsx(Button, { variant: "outline", children: "Add payment method" }), title: "Trial ending soon", tone: "warning" }), _jsx(SettingsSection, { description: "Move this project to another team.", lockedReason: "You need additional permissions to transfer projects.", title: "Transfer project", children: _jsx(SettingsField, { id: "showcase-transfer-team", label: "New team", children: ({ controlProps }) => (_jsx(Input, { ...controlProps, defaultValue: "Rossi Ottica", name: "team" })) }) }), _jsx(SettingsSection, { description: "Invoices and receipts go to this address.", save: {
326
+ action: async () => null,
327
+ label: "Save",
328
+ pendingLabel: "Saving",
329
+ saved: () => undefined,
330
+ }, title: "Billing email", children: _jsx(SettingsField, { id: "showcase-billing-email", label: "Billing email", children: ({ controlProps }) => (_jsx(Input, { ...controlProps, defaultValue: "amministrazione@acme.it", name: "billingEmail", type: "email" })) }) })] }));
331
+ }
332
+ function SelectableRecordListSpecimen() {
333
+ const [selected, setSelected] = useState(new Set(["orders"]));
334
+ return (_jsx(RecordList, { ...MAILBOX_LIST, footer: { count: `${selected.size} of ${MAILBOXES.length} selected` }, label: "Mailboxes to remove", records: MAILBOXES, select: {
335
+ header: "Select",
336
+ label: (mailbox) => `Select ${mailbox.address}`,
337
+ checked: (mailbox) => selected.has(mailbox.id),
338
+ onCheckedChange: (mailbox, checked) => setSelected((current) => {
339
+ const next = new Set(current);
340
+ if (checked)
341
+ next.add(mailbox.id);
342
+ else
343
+ next.delete(mailbox.id);
344
+ return next;
345
+ }),
346
+ } }));
347
+ }
243
348
  export const COMPOSITIONS = {
244
349
  ActivityFeed: ActivityFeedSpecimen,
245
350
  AgentProfileCard: AgentProfileCardSpecimen,
@@ -255,16 +360,24 @@ export const COMPOSITIONS = {
255
360
  ObjectPage: () => (_jsx(ObjectPage, { actions: { secondary: { label: "Edit", onClick: nothing }, menu: PAGE_MENU }, description: "Optician \u00B7 partner since March 2026", facts: [
256
361
  { label: "Customers", value: "4" },
257
362
  { label: "Plan", value: "Business" },
258
- ], mark: { kind: "company", name: "Rossi Ottica" }, name: "Rossi Ottica", children: _jsx(ObjectSection, { title: "Company", children: _jsx(ObjectFacts, { facts: [{ label: "VAT number", value: "IT01234567890" }] }) }) })),
259
- ObjectSection: () => (_jsx(ObjectSection, { action: { label: "Edit", onClick: nothing }, meta: "Changed on 2 October", title: "Billing", children: _jsx(ObjectFacts, { facts: [
260
- { label: "Billing email", value: "amministrazione@acme.it" },
363
+ ], mark: { kind: "company", name: "Rossi Ottica" }, name: "Rossi Ottica", children: _jsx(ObjectSection, { description: "Legal details of the partner.", title: "Company", children: _jsx(ObjectFacts, { facts: [{ label: "VAT number", value: "IT01234567890" }] }) }) })),
364
+ ObjectSection: () => (_jsx(ObjectSection, { action: { label: "Edit", onClick: nothing }, description: "Where invoices go and which plan applies.", meta: "Changed on 2 October", title: "Billing", children: _jsx(ObjectFacts, { facts: [
365
+ { label: "Billing email", value: "amministrazione@acme.it", ellipsis: true },
261
366
  { label: "Plan", value: "Business" },
367
+ {
368
+ label: "Reference",
369
+ value: "ACME-0042",
370
+ tooltip: "The code your Customer quotes when they write to support.",
371
+ },
262
372
  ] }) })),
263
373
  OverviewPage: OverviewPageSpecimen,
264
374
  PageHeader: () => (_jsxs(PageActionsHostProvider, { children: [_jsx(PageHeader, { title: "Customers" }), _jsx(PageActions, { primary: { label: "Invite customer", icon: _jsx(Plus, {}), onClick: nothing } })] })),
265
- RecordList: () => (_jsx(RecordList, { ...MAILBOX_LIST, footer: { count: "3 mailboxes" }, label: "Mailboxes", records: MAILBOXES })),
375
+ RecordList: () => (_jsxs("div", { className: "grid gap-6", children: [_jsx(RecordList, { ...MAILBOX_LIST, footer: { count: "3 mailboxes" }, label: "Mailboxes", records: MAILBOXES }), _jsx(RecordList, { ...MAILBOX_LIST, label: "Mailboxes with one command", menu: (mailbox) => ({
376
+ label: `More for ${mailbox.address}`,
377
+ commands: [{ label: "Reconnect", icon: _jsx(RefreshCw, {}), onClick: nothing }],
378
+ }), records: MAILBOXES }), _jsx(SelectableRecordListSpecimen, {})] })),
266
379
  RecordSheet: RecordSheetSpecimen,
267
380
  RowEditForm: RowEditFormSpecimen,
268
- SettingsPage: () => (_jsx(SettingsPage, { title: "Company settings", children: _jsx(SettingsSectionSpecimen, {}) })),
381
+ SettingsPage: () => (_jsx(SettingsPage, { title: "Company settings", children: _jsx(SenderSection, {}) })),
269
382
  SettingsSection: SettingsSectionSpecimen,
270
383
  };
@@ -1,30 +1,35 @@
1
1
  declare function DataTableSpecimen(): import("react").JSX.Element;
2
+ declare function CodeBlockSpecimen(): import("react").JSX.Element;
3
+ declare function SnippetSpecimen(): import("react").JSX.Element;
4
+ declare function ItemSpecimen(): import("react").JSX.Element;
5
+ declare function KbdSpecimen(): import("react").JSX.Element;
6
+ declare function ProgressSpecimen(): import("react").JSX.Element;
2
7
  declare function DisclosureRowSpecimen(): import("react").JSX.Element;
3
8
  declare function UsageTable(): import("react").JSX.Element;
4
9
  export declare const DATA: {
5
10
  AgentCard: () => import("react").JSX.Element;
6
- ApprovalRow: () => import("react").JSX.Element;
7
11
  Card: () => import("react").JSX.Element;
8
12
  CardRow: () => import("react").JSX.Element;
9
- CodeBlock: () => import("react").JSX.Element;
13
+ CodeBlock: typeof CodeBlockSpecimen;
10
14
  DataTable: typeof DataTableSpecimen;
11
15
  DiffCount: () => import("react").JSX.Element;
12
16
  DisclosureRow: typeof DisclosureRowSpecimen;
13
17
  FileDiff: () => import("react").JSX.Element;
14
- Item: () => import("react").JSX.Element;
15
- Kbd: () => import("react").JSX.Element;
16
- MemoryItem: () => import("react").JSX.Element;
18
+ Item: typeof ItemSpecimen;
19
+ Kbd: typeof KbdSpecimen;
20
+ MiddleTruncate: () => import("react").JSX.Element;
17
21
  ObjectFacts: () => import("react").JSX.Element;
18
22
  PairingCode: () => import("react").JSX.Element;
19
- Progress: () => import("react").JSX.Element;
23
+ Progress: typeof ProgressSpecimen;
20
24
  QrCode: () => import("react").JSX.Element;
21
25
  RecordTime: () => import("react").JSX.Element;
22
26
  RunTimeline: () => import("react").JSX.Element;
23
27
  SettingsFactsSection: () => import("react").JSX.Element;
24
- StatusRow: () => import("react").JSX.Element;
28
+ Snippet: typeof SnippetSpecimen;
25
29
  Table: typeof UsageTable;
26
30
  TableCard: () => import("react").JSX.Element;
27
31
  TableValue: () => import("react").JSX.Element;
32
+ TextWithCopyButton: () => import("react").JSX.Element;
28
33
  UsageMeter: () => import("react").JSX.Element;
29
34
  };
30
35
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/data.tsx"],"names":[],"mappings":"AAqFA,iBAAS,iBAAiB,gCAczB;AAED,iBAAS,qBAAqB,gCAc7B;AAED,iBAAS,UAAU,gCAgClB;AAED,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;CAiOU,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/data.tsx"],"names":[],"mappings":"AA4HA,iBAAS,iBAAiB,gCAczB;AAsCD,iBAAS,iBAAiB,gCAkDzB;AAUD,iBAAS,eAAe,gCASvB;AAED,iBAAS,YAAY,gCAoCpB;AAED,iBAAS,WAAW,gCA6BnB;AAQD,iBAAS,gBAAgB,gCAqBxB;AAED,iBAAS,qBAAqB,gCAc7B;AAED,iBAAS,UAAU,gCAqClB;AAED,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;CAkNU,CAAC"}
@@ -1,10 +1,9 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { MessageCircle, RotateCw } from "lucide-react";
3
+ import { MessageCircle, Plus, RotateCw } from "lucide-react";
4
4
  import { useState } from "react";
5
5
  import { AgentCard } from "../../components/agent-card.js";
6
6
  import { AgentOrb } from "../../components/agent-orb.js";
7
- import { ApprovalRow } from "../../components/approval-row.js";
8
7
  import { Button } from "../../components/button.js";
9
8
  import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "../../components/card.js";
10
9
  import { CardRow } from "../../components/card-row.js";
@@ -13,9 +12,9 @@ import { DataTable } from "../../components/data-table.js";
13
12
  import { DiffCount } from "../../components/diff-count.js";
14
13
  import { DisclosureRow } from "../../components/disclosure-row.js";
15
14
  import { FileDiff } from "../../components/file-diff.js";
16
- import { Item, ItemActions, ItemContent, ItemDescription, ItemGroup, ItemMedia, ItemTitle, } from "../../components/item.js";
17
- import { Kbd, KbdGroup } from "../../components/kbd.js";
18
- import { MemoryItem } from "../../components/memory-item.js";
15
+ import { Item, ItemActions, ItemContent, ItemDescription, ItemGroup, ItemMedia, ItemSelect, ItemTitle, } from "../../components/item.js";
16
+ import { Kbd } from "../../components/kbd.js";
17
+ import { MiddleTruncate } from "../../components/middle-truncate.js";
19
18
  import { ObjectFacts } from "../../components/object-workspace.js";
20
19
  import { PairingCode } from "../../components/pairing-code.js";
21
20
  import { Progress, ProgressLabel, ProgressValue } from "../../components/progress.js";
@@ -23,13 +22,13 @@ import { QrCode } from "../../components/qr-code.js";
23
22
  import { RecordTime } from "../../components/record-time.js";
24
23
  import { RunTimeline } from "../../components/run-timeline.js";
25
24
  import { SettingsFactsSection } from "../../components/settings-facts.js";
26
- import { StatusDot } from "../../components/status-dot.js";
27
- import { StatusRow, StatusSection } from "../../components/status-row.js";
28
- import { Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, } from "../../components/table.js";
25
+ import { Snippet } from "../../components/snippet.js";
26
+ import { Table, TableBody, TableCell, TableCol, TableColgroup, TableFooter, TableHead, TableHeader, TableRow, } from "../../components/table.js";
29
27
  import { TableCard } from "../../components/table-card.js";
30
28
  import { TableValue } from "../../components/table-value.js";
29
+ import { TextWithCopyButton } from "../../components/text-with-copy-button.js";
31
30
  import { UsageMeter } from "../../components/usage-meter.js";
32
- import { COBALTO, MAILBOXES, NOW, nothing } from "../samples.js";
31
+ import { COBALTO, MAILBOXES, NOW } from "../samples.js";
33
32
  const MCP_JSON = `{
34
33
  "mcpServers": {
35
34
  "fatture": { "url": "https://mcp.acme.it/fatture" }
@@ -39,48 +38,152 @@ const COPY_LABELS = {
39
38
  copiedLabel: "Copied",
40
39
  copyFailedLabel: "Couldn't copy",
41
40
  };
42
- const USAGE_ROWS = [
43
- { agent: "Invoices", tokens: "1,204,330", cost: "€ 18.40" },
44
- { agent: "Orders", tokens: "612,904", cost: "€ 9.12" },
45
- { agent: "Support", tokens: "2,033,118", cost: "€ 31.75" },
41
+ const CODE_BLOCK_LABELS = {
42
+ ...COPY_LABELS,
43
+ lineLabel: (line, state) => `Line ${line}, ${state}`,
44
+ };
45
+ const SNIPPET_LABELS = {
46
+ ...COPY_LABELS,
47
+ copyLabel: "Copy command",
48
+ };
49
+ const USAGE_FIGURES = [
50
+ { agent: "Invoices", runs: 412, tokens: 1204330, cost: 18.4 },
51
+ { agent: "Orders", runs: 198, tokens: 612904, cost: 9.12 },
52
+ { agent: "Support", runs: 731, tokens: 2033118, cost: 31.75 },
46
53
  ];
54
+ const formatTokens = (tokens) => tokens.toLocaleString("en-US");
55
+ const formatCost = (cost) => `€ ${cost.toFixed(2)}`;
56
+ const USAGE_ROWS = USAGE_FIGURES.map((figure) => ({
57
+ agent: figure.agent,
58
+ tokens: formatTokens(figure.tokens),
59
+ cost: formatCost(figure.cost),
60
+ }));
47
61
  const USAGE_COLUMNS = [
48
62
  { accessorKey: "agent", header: "Agent" },
49
- { accessorKey: "tokens", header: "Tokens", meta: { numeric: true } },
50
- { accessorKey: "cost", header: "Cost (€)", meta: { numeric: true } },
63
+ {
64
+ accessorKey: "runs",
65
+ header: "Runs",
66
+ size: 96,
67
+ meta: { numeric: true, compact: "dropped" },
68
+ },
69
+ {
70
+ accessorKey: "tokens",
71
+ header: "Tokens",
72
+ size: 140,
73
+ cell: ({ row }) => formatTokens(row.original.tokens),
74
+ meta: { numeric: true },
75
+ },
76
+ {
77
+ accessorKey: "cost",
78
+ header: "Cost (€)",
79
+ size: 120,
80
+ cell: ({ row }) => formatCost(row.original.cost),
81
+ meta: { numeric: true },
82
+ },
51
83
  ];
52
84
  function DataTableSpecimen() {
53
- return (_jsx(DataTable, { columns: USAGE_COLUMNS, data: [...USAGE_ROWS], empty: { kind: "nothingYet", message: "No Agent has run this month." }, footer: "3 Agents", getRowId: (row) => row.agent, heading: { title: "Usage by Agent" }, primaryColumns: ["agent", "cost"], summary: { label: "Total", value: "€ 59.27" }, tableLabel: "Usage by Agent, this month" }));
85
+ return (_jsx(DataTable, { columns: USAGE_COLUMNS, data: [...USAGE_FIGURES], empty: { kind: "nothingYet", message: "No Agent has run this month." }, footer: "3 Agents", getRowId: (row) => row.agent, heading: { title: "Usage by Agent" }, primaryColumns: ["agent", "cost"], summary: { label: "Total", value: "€ 59.27" }, tableLabel: "Usage by Agent, this month" }));
86
+ }
87
+ const MCP_CHANGE = `{
88
+ "mcpServers": {
89
+ "fatture": { "url": "http://mcp.acme.it/fatture" }
90
+ "fatture": { "url": "https://mcp.acme.it/fatture" },
91
+ "ordini": { "url": "https://mcp.acme.it/ordini" }
92
+ }
93
+ }`;
94
+ const MCP_BOTH_JSON = `{
95
+ "mcpServers": {
96
+ "fatture": { "url": "https://mcp.acme.it/fatture" },
97
+ "ordini": { "url": "https://mcp.acme.it/ordini" }
98
+ }
99
+ }`;
100
+ const MCP_YAML = `mcpServers:
101
+ fatture:
102
+ url: https://mcp.acme.it/fatture
103
+ ordini:
104
+ url: https://mcp.acme.it/ordini`;
105
+ const MCP_TOOLS = `{
106
+ "allow": ["fatture", "ordini"],
107
+ "deny": []
108
+ }`;
109
+ const MCP_ALLOW = `{
110
+ "allow": ["fatture"],
111
+ "deny": []
112
+ }`;
113
+ const MCP_FORMATS = [
114
+ { label: "JSON", value: "json" },
115
+ { label: "YAML", value: "yaml" },
116
+ ];
117
+ function CodeBlockSpecimen() {
118
+ const [format, setFormat] = useState("json");
119
+ return (_jsxs("div", { className: "grid max-w-lg gap-4", children: [_jsx(CodeBlock, { ...CODE_BLOCK_LABELS, code: MCP_JSON, copyLabel: "Copy mcp.json", filename: "mcp.json", label: "MCP configuration" }), _jsx(CodeBlock, { ...CODE_BLOCK_LABELS, addedLinesNumbers: [4, 5], code: MCP_CHANGE, copyLabel: "Copy config/mcp.json", filename: "config/mcp.json", highlightedLinesNumbers: [2], label: "MCP configuration, changed", removedLinesNumbers: [3] }), _jsx(CodeBlock, { ...CODE_BLOCK_LABELS, code: format === "json" ? MCP_BOTH_JSON : MCP_YAML, copyLabel: "Copy MCP configuration", label: "MCP configuration in two formats", tabs: {
120
+ label: "Format",
121
+ options: MCP_FORMATS,
122
+ value: format,
123
+ onChange: setFormat,
124
+ } }), _jsx(CodeBlock, { ...CODE_BLOCK_LABELS, code: MCP_TOOLS, copyLabel: "Copy tool list", label: "Tool list" }), _jsx(CodeBlock, { ...CODE_BLOCK_LABELS, code: MCP_ALLOW, copyLabel: "Copy allow list", filename: "allow.json", hideLineNumbers: true, highlightedLinesNumbers: [2], label: "Allow list, marked" })] }));
125
+ }
126
+ const CONFIG_DIGEST = "9f2c4e7a1b8d03f5c6e2a7d4b1908f3e5a6c7d21";
127
+ const MIDDLE_TRUNCATE_VALUES = [
128
+ { label: "Branch", value: "feature/acme-quotes-price-list-import" },
129
+ { label: "Path", value: "apps/portal/src/app/[lang]/(dashboard)/library/page.tsx" },
130
+ { label: "Commit", value: "4f9c1e7a2b8d3065c1e4a7f9b2d8036ec5a1f7d4" },
131
+ ];
132
+ function SnippetSpecimen() {
133
+ return (_jsxs("div", { className: "grid max-w-lg gap-4", children: [_jsx(Snippet, { ...SNIPPET_LABELS, text: "npm init next-app" }), _jsx(Snippet, { ...SNIPPET_LABELS, text: ["cd acme-quotes", "npm run dev"] }), _jsx(Snippet, { ...SNIPPET_LABELS, prompt: false, text: "https://mcp.acme.it/fatture" }), _jsx(Snippet, { ...SNIPPET_LABELS, placeholder: "Run nadia login to connect this computer", text: "" })] }));
134
+ }
135
+ function ItemSpecimen() {
136
+ const [selected, setSelected] = useState(false);
137
+ return (_jsxs(ItemGroup, { className: "max-w-lg", divided: true, children: [_jsxs(Item, { children: [_jsx(ItemMedia, { variant: "icon", children: _jsx(MessageCircle, { "aria-hidden": "true" }) }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Telegram" }), _jsx(ItemDescription, { children: "Invoices answers the sales group here." })] }), _jsx(ItemActions, { children: _jsx(Button, { size: "sm", variant: "outline", children: "Disconnect Telegram" }) })] }), _jsxs(Item, { children: [_jsx(ItemMedia, { variant: "icon", children: _jsx(RotateCw, { "aria-hidden": "true" }) }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Nadia filed 12 invoices" }), _jsx(ItemDescription, { children: "From the October statement, in the archive folder." })] })] }), _jsxs(Item, { children: [_jsx(ItemSelect, { checked: selected, label: "Select Chrome, Mac", onCheckedChange: setSelected }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Chrome, Mac" }), _jsx(ItemDescription, { children: "Signed in today at 09:14." })] })] })] }));
138
+ }
139
+ function KbdSpecimen() {
140
+ return (_jsxs("div", { className: "grid gap-3 text-sm", children: [_jsxs("span", { className: "flex items-center gap-2", children: ["Find", _jsx(Kbd, { meta: true, children: "K" }), _jsx(Kbd, { meta: true, shift: true, children: "K" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Find, small", _jsx(Kbd, { meta: true, size: "sm", children: "K" }), _jsx(Kbd, { meta: true, shift: true, size: "sm", children: "K" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Close", _jsx(Kbd, { children: "Esc" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Previous Agent", _jsx(Kbd, { children: "ArrowUp" })] })] }));
141
+ }
142
+ const IMPORT_STOPS = [
143
+ { value: 1, label: "Reading the file" },
144
+ { value: 2, label: "Matching products" },
145
+ { value: 3, label: "Saving the price list" },
146
+ ];
147
+ function ProgressSpecimen() {
148
+ return (_jsxs("div", { className: "grid max-w-md gap-6", children: [_jsxs(Progress, { "aria-labelledby": "showcase-import-contacts", max: 40, value: 27, children: [_jsx(ProgressLabel, { id: "showcase-import-contacts", children: "Importing contacts" }), _jsx(ProgressValue, { children: () => "27 of 40" })] }), _jsxs(Progress, { "aria-labelledby": "showcase-import-prices", max: 3, stops: IMPORT_STOPS, value: 2, children: [_jsx(ProgressLabel, { id: "showcase-import-prices", children: "Importing the price list" }), _jsx(ProgressValue, { children: () => "Step 2 of 3 · Matching products" })] }), _jsxs(Progress, { "aria-labelledby": "showcase-invoices-filed", max: 12, tone: "success", value: 12, children: [_jsx(ProgressLabel, { id: "showcase-invoices-filed", children: "Invoices filed" }), _jsx(ProgressValue, { children: () => "12 of 12" })] }), _jsxs(Progress, { "aria-labelledby": "showcase-included-runs", max: 1000, tone: "secondary", value: 620, children: [_jsx(ProgressLabel, { id: "showcase-included-runs", children: "Included runs" }), _jsx(ProgressValue, { children: () => "620 of 1,000" })] })] }));
54
149
  }
55
150
  function DisclosureRowSpecimen() {
56
151
  const [open, setOpen] = useState(false);
57
152
  return (_jsxs("div", { className: "grid max-w-md gap-2", children: [_jsx(DisclosureRow, { onToggle: () => setOpen((value) => !value), open: open, trailing: "3 steps", children: "Read the price list" }), open ? (_jsx("p", { className: "pl-6 text-sm text-muted-foreground", children: "Opened listino-2026.xlsx, read 412 rows, kept 38 for the quote." })) : null] }));
58
153
  }
59
154
  function UsageTable() {
60
- return (_jsxs(Table, { "aria-label": "Usage by Agent", children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { scope: "col", children: "Agent" }), _jsx(TableHead, { className: "text-right", scope: "col", children: "Tokens" }), _jsx(TableHead, { className: "text-right", scope: "col", children: "Cost (\u20AC)" })] }) }), _jsx(TableBody, { children: USAGE_ROWS.map((row) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: row.agent }), _jsx(TableCell, { className: "text-right tabular-nums", children: row.tokens }), _jsx(TableCell, { className: "text-right tabular-nums", children: row.cost })] }, row.agent))) }), _jsx(TableFooter, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: "Total" }), _jsx(TableCell, { className: "text-right tabular-nums", children: "3,850,352" }), _jsx(TableCell, { className: "text-right tabular-nums", children: "\u20AC 59.27" })] }) })] }));
155
+ return (_jsxs(Table, { "aria-label": "Usage by Agent", children: [_jsxs(TableColgroup, { children: [_jsx(TableCol, {}), _jsx(TableCol, { className: "w-36" }), _jsx(TableCol, { className: "w-32" })] }), _jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { scope: "col", children: "Agent" }), _jsx(TableHead, { className: "text-right", scope: "col", children: "Tokens" }), _jsx(TableHead, { className: "text-right", scope: "col", children: "Cost (\u20AC)" })] }) }), _jsx(TableBody, { interactive: true, striped: true, children: USAGE_ROWS.map((row) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: row.agent }), _jsx(TableCell, { className: "text-right tabular-nums", children: row.tokens }), _jsx(TableCell, { className: "text-right tabular-nums", children: row.cost })] }, row.agent))) }), _jsx(TableFooter, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: "Total" }), _jsx(TableCell, { className: "text-right tabular-nums", children: "3,850,352" }), _jsx(TableCell, { className: "text-right tabular-nums", children: "\u20AC 59.27" })] }) })] }));
61
156
  }
62
157
  export const DATA = {
63
- AgentCard: () => (_jsx("div", { className: "max-w-md", children: _jsx(AgentCard, { action: _jsx(Button, { variant: "outline", children: "Use template" }), job: "Writes quotes from the price list", meta: "Sales \u00B7 3 skills", name: "Acme Quotes", visual: _jsx(AgentOrb, { color: COBALTO, decorative: true, form: "orbit", size: 96 }) }) })),
64
- ApprovalRow: () => (_jsx(ItemGroup, { className: "max-w-lg", role: "list", children: _jsx(ApprovalRow, { action: _jsx(Button, { children: "Approve payment" }), description: "Invoices drafted it from the October statement.", media: _jsx(AgentOrb, { color: COBALTO, decorative: true, form: "orbit", size: 32 }), title: "Pay Bizeta Arredamenti \u20AC 1,240" }) })),
65
- Card: () => (_jsxs(Card, { className: "max-w-md", children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Billing contact" }), _jsx(CardDescription, { children: "Who receives invoices and payment reminders." }), _jsx(CardAction, { children: _jsx(Button, { variant: "outline", children: "Edit" }) })] }), _jsx(CardContent, { className: "text-sm", children: "amministrazione@acme.it" }), _jsx(CardFooter, { className: "text-sm text-muted-foreground", children: "Changed on 2 October" })] })),
66
- CardRow: () => (_jsx(CardRow, { columns: 3, children: ["Runs", "Approvals", "Cost"].map((title, index) => (_jsx(Card, { children: _jsxs(CardHeader, { children: [_jsx(CardTitle, { children: title }), _jsx(CardDescription, { children: index === 1 ? "A longer line shows every card keeps the tallest's height." : "—" })] }) }, title))) })),
67
- CodeBlock: () => (_jsx("div", { className: "max-w-lg", children: _jsx(CodeBlock, { ...COPY_LABELS, code: MCP_JSON, copyLabel: "Copy mcp.json", filename: "mcp.json", label: "MCP configuration", language: "JSON" }) })),
158
+ AgentCard: () => (_jsx("div", { className: "max-w-xs", children: _jsx(AgentCard, { action: _jsx(Button, { prefix: _jsx(Plus, {}), children: "Create agent" }), job: "Writes quotes from the price list", meta: "3 skills \u00B7 2 tasks \u00B7 v1.2.0", name: "Acme Quotes", visual: _jsx(AgentOrb, { color: COBALTO, decorative: true, form: "orbit", size: 96 }) }) })),
159
+ Card: () => (_jsxs("div", { className: "grid max-w-md gap-6", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Billing contact" }), _jsx(CardDescription, { children: "Who receives invoices and payment reminders." }), _jsx(CardAction, { children: _jsx(Button, { size: "sm", variant: "outline", children: "Edit" }) })] }), _jsx(CardContent, { className: "text-sm", children: "amministrazione@acme.it" }), _jsx(CardFooter, { children: "Changed on 2 October" })] }), _jsxs(Card, { surface: "raised", children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Payment method" }), _jsx(CardDescription, { children: "The card charged for Agents and extra seats." }), _jsx(CardAction, { children: _jsx(Button, { size: "sm", variant: "outline", children: "Change" }) })] }), _jsx(CardContent, { className: "text-sm", children: "Visa ending 4242" })] })] })),
160
+ CardRow: () => (_jsx(CardRow, { columns: 5, children: ["Runs", "Approvals", "Cost", "Tokens", "Cache hit rate"].map((title, index) => (_jsx(Card, { children: _jsxs(CardHeader, { children: [_jsx(CardTitle, { children: title }), _jsx(CardDescription, { children: index === 1 ? "A longer line shows every card keeps the tallest's height." : "—" })] }) }, title))) })),
161
+ CodeBlock: CodeBlockSpecimen,
68
162
  DataTable: DataTableSpecimen,
69
163
  DiffCount: () => (_jsxs("span", { className: "flex items-center gap-2 font-mono text-sm", children: ["quote-template.md", _jsx(DiffCount, { added: 12, removed: 3 })] })),
70
164
  DisclosureRow: DisclosureRowSpecimen,
71
165
  FileDiff: () => (_jsx(FileDiff, { addedLabel: "Added", after: "Payment within 30 days.\nPrices include VAT.\nValid until 31 December.", before: "Payment within 60 days.\nPrices include VAT.", className: "max-w-lg", removedLabel: "Removed", skippedLabel: (count) => `${count} unchanged lines` })),
72
- Item: () => (_jsxs(ItemGroup, { className: "max-w-lg", divided: true, children: [_jsxs(Item, { children: [_jsx(ItemMedia, { variant: "icon", children: _jsx(MessageCircle, { "aria-hidden": "true" }) }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Telegram" }), _jsx(ItemDescription, { children: "Invoices answers the sales group here." })] }), _jsx(ItemActions, { children: _jsx(Button, { variant: "outline", children: "Disconnect" }) })] }), _jsxs(Item, { children: [_jsx(ItemMedia, { variant: "icon", children: _jsx(RotateCw, { "aria-hidden": "true" }) }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Nadia filed 12 invoices" }), _jsx(ItemDescription, { children: "From the October statement, in the archive folder." })] })] })] })),
73
- Kbd: () => (_jsxs("span", { className: "flex items-center gap-2 text-sm", children: ["Find", _jsxs(KbdGroup, { children: [_jsx(Kbd, { children: "\u2318" }), _jsx(Kbd, { children: "K" })] })] })),
74
- MemoryItem: () => (_jsx(MemoryItem, { className: "max-w-md", fact: "Acme's quotes always copy the sales team.", label: "Memory" })),
75
- ObjectFacts: () => (_jsx(ObjectFacts, { facts: [
76
- { label: "VAT number", value: _jsx("span", { className: "font-mono", children: "IT01234567890" }) },
77
- { label: "Partner", value: "Rossi Ottica" },
78
- { label: "Address", value: "Via Roma 12, 20121 Milano", block: true },
79
- ] })),
166
+ Item: ItemSpecimen,
167
+ Kbd: KbdSpecimen,
168
+ MiddleTruncate: () => (_jsx("dl", { className: "grid gap-3 text-sm", children: MIDDLE_TRUNCATE_VALUES.map(({ label, value }) => (_jsxs("div", { className: "grid gap-1", children: [_jsx("dt", { className: "text-muted-foreground", children: label }), _jsx("dd", { className: "w-60", children: _jsx(MiddleTruncate, { className: "font-label-mono text-label-mono", value: value }) })] }, label))) })),
169
+ ObjectFacts: () => (_jsx("div", { className: "max-w-md", children: _jsx(ObjectFacts, { facts: [
170
+ {
171
+ label: "VAT number",
172
+ tooltip: "The tax number printed on every invoice.",
173
+ value: _jsx("span", { className: "font-mono", children: "IT01234567890" }),
174
+ },
175
+ { label: "Partner", value: "Rossi Ottica" },
176
+ {
177
+ label: "Certified email",
178
+ ellipsis: true,
179
+ value: "amministrazione.rossiottica@pec.rossiottica.it",
180
+ },
181
+ { label: "Address", value: "Via Roma 12, 20121 Milano", block: true },
182
+ ] }) })),
80
183
  PairingCode: () => _jsx(PairingCode, { code: "4821", label: "Pairing code" }),
81
- Progress: () => (_jsxs(Progress, { className: "max-w-md", max: 40, value: 27, children: [_jsx(ProgressLabel, { children: "Importing contacts" }), _jsx(ProgressValue, { children: () => "27 of 40" })] })),
184
+ Progress: ProgressSpecimen,
82
185
  QrCode: () => (_jsx(QrCode, { label: "Open Nadia on your phone", size: 128, value: "https://nadicode.com/app" })),
83
- RecordTime: () => (_jsx("div", { className: "grid gap-1 text-sm", children: MAILBOXES.map((mailbox) => (_jsxs("span", { children: [mailbox.address, " \u00B7", " ", _jsx(RecordTime, { at: mailbox.checked, now: NOW, phrase: (when) => `Checked ${when}` })] }, mailbox.id))) })),
186
+ RecordTime: () => (_jsxs("div", { className: "grid gap-1 text-sm", children: [MAILBOXES.map((mailbox) => (_jsxs("span", { children: [mailbox.address, " \u00B7", " ", _jsx(RecordTime, { at: mailbox.checked, now: NOW, phrase: (when) => `Checked ${when}` })] }, mailbox.id))), _jsxs("span", { children: ["pec@acme.it \u00B7", " ", _jsx(RecordTime, { at: null, phrase: (when) => `Checked ${when}`, children: "Pending" })] })] })),
84
187
  RunTimeline: () => (_jsx(RunTimeline, { className: "max-w-lg", steps: [
85
188
  {
86
189
  id: "read",
@@ -98,14 +201,15 @@ export const DATA = {
98
201
  },
99
202
  { id: "send", label: "Step 03", title: "Send the quote", progress: "upcoming" },
100
203
  ] })),
101
- SettingsFactsSection: () => (_jsx("div", { className: "max-w-lg", children: _jsx(SettingsFactsSection, { action: _jsx(Button, { variant: "outline", children: "Edit" }), facts: [
204
+ SettingsFactsSection: () => (_jsx("div", { className: "max-w-lg", children: _jsx(SettingsFactsSection, { action: _jsx(Button, { variant: "outline", children: "Edit" }), description: "The legal details on every invoice.", facts: [
102
205
  { label: "Legal name", value: "Acme S.r.l." },
103
206
  { label: "VAT number", value: _jsx("span", { className: "font-mono", children: "IT01234567890" }) },
104
207
  { label: "PEC", value: null },
105
- ], headingId: "showcase-company-facts", missingValueLabel: "Not set", title: "Company" }) })),
106
- StatusRow: () => (_jsx("div", { className: "max-w-sm", children: _jsxs(StatusSection, { defaultCollapsed: false, label: "Channels", children: [_jsx(StatusRow, { leading: _jsx(StatusDot, { tone: "good" }), onActivate: nothing, children: "Telegram" }), _jsx(StatusRow, { leading: _jsx(StatusDot, { tone: "warn" }), children: "WhatsApp" })] }) })),
208
+ ], footerHint: "Ask an owner to change these.", headingId: "showcase-company-facts", missingValueLabel: "Not set", title: "Company" }) })),
209
+ Snippet: SnippetSpecimen,
107
210
  Table: UsageTable,
108
211
  TableCard: () => (_jsx(TableCard, { footer: "3 Agents", summary: { label: "Total", value: "€ 59.27" }, title: "Usage this month", children: _jsx(UsageTable, {}) })),
109
212
  TableValue: () => (_jsxs("dl", { className: "grid max-w-xs grid-cols-2 gap-2 text-sm", children: [_jsx("dt", { children: "Tokens" }), _jsx("dd", { children: _jsx(TableValue, { missingLabel: "Not reported", value: "1,204,330" }) }), _jsx("dt", { children: "Cost" }), _jsx("dd", { children: _jsx(TableValue, { missingLabel: "Not reported", value: null }) }), _jsx("dt", { children: "Last run" }), _jsx("dd", { children: _jsx(TableValue, { failedLabel: "Couldn't read", state: "failed" }) })] })),
213
+ TextWithCopyButton: () => (_jsxs("div", { className: "grid gap-4", children: [_jsx(TextWithCopyButton, { ...COPY_LABELS, copyLabel: "Copy config digest", value: CONFIG_DIGEST }), _jsx(TextWithCopyButton, { ...COPY_LABELS, className: "w-50", copyLabel: "Copy config digest", ellipsis: true, value: CONFIG_DIGEST })] })),
110
214
  UsageMeter: () => (_jsx(UsageMeter, { className: "max-w-sm", fields: ["Tokens", "620 of 1,000"], usage: 62 })),
111
215
  };
@@ -3,6 +3,7 @@ declare function LabelledPictureSpecimen(): import("react").JSX.Element;
3
3
  declare function PendingLabelSpecimen(): import("react").JSX.Element;
4
4
  declare function ToasterSpecimen(): import("react").JSX.Element;
5
5
  declare function UpdateCardSpecimen(): import("react").JSX.Element;
6
+ declare function SkeletonRegionSpecimen(): import("react").JSX.Element;
6
7
  export declare const FEEDBACK: {
7
8
  Alert: () => import("react").JSX.Element;
8
9
  EmptyState: typeof EmptyStateSpecimen;
@@ -14,6 +15,7 @@ export declare const FEEDBACK: {
14
15
  NoticeBanner: () => import("react").JSX.Element;
15
16
  PendingLabel: typeof PendingLabelSpecimen;
16
17
  Skeleton: () => import("react").JSX.Element;
18
+ SkeletonRegion: typeof SkeletonRegionSpecimen;
17
19
  Toaster: typeof ToasterSpecimen;
18
20
  Tooltip: () => import("react").JSX.Element;
19
21
  UpdateCard: typeof UpdateCardSpecimen;
@@ -1 +1 @@
1
- {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/feedback.tsx"],"names":[],"mappings":"AAyBA,iBAAS,kBAAkB,gCAqB1B;AAED,iBAAS,uBAAuB,gCAW/B;AAED,iBAAS,oBAAoB,gCA0B5B;AAED,iBAAS,eAAe,gCAYvB;AAED,iBAAS,kBAAkB,gCAqB1B;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CAoGM,CAAC"}
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/feedback.tsx"],"names":[],"mappings":"AA8CA,iBAAS,kBAAkB,gCAoE1B;AAED,iBAAS,uBAAuB,gCAW/B;AAED,iBAAS,oBAAoB,gCAkB5B;AAED,iBAAS,eAAe,gCAyBvB;AAED,iBAAS,kBAAkB,gCA8B1B;AAED,iBAAS,sBAAsB,gCAwB9B;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CA8LM,CAAC"}