@nadicodeai/ui 12.1.102 → 12.1.103

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 +9 -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,27 +1,42 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Info, TriangleAlert, X } from "lucide-react";
3
+ import { CreditCard, Info, LogOut, Mail, Search, TriangleAlert, X } from "lucide-react";
4
4
  import { useState } from "react";
5
5
  import { Alert, AlertDescription, AlertTitle } from "../../components/alert.js";
6
6
  import { Button } from "../../components/button.js";
7
7
  import { EmptyState } from "../../components/empty-state.js";
8
8
  import { EntryProgress, EntryStageList } from "../../components/entry-scene.js";
9
- import { HoverCard, HoverCardContent, HoverCardTrigger } from "../../components/hover-card.js";
9
+ import { DropdownMenu, DropdownMenuCommand, DropdownMenuContent, DropdownMenuTrigger, } from "../../components/dropdown-menu.js";
10
+ import { HoverCard, HoverCardContent, HoverCardSummary, HoverCardTrigger, } from "../../components/hover-card.js";
11
+ import { Kbd } from "../../components/kbd.js";
10
12
  import { MessageNotice } from "../../components/message-notice.js";
11
13
  import { NoticeBanner } from "../../components/notice-banner.js";
12
- import { PendingLabel } from "../../components/pending-label.js";
13
14
  import { LabelledPicture, PictureLabel } from "../../components/picture-label.js";
14
- import { Skeleton } from "../../components/skeleton.js";
15
+ import { RecordTime } from "../../components/record-time.js";
16
+ import { Skeleton, SkeletonRegion } from "../../components/skeleton.js";
15
17
  import { Toaster } from "../../components/sonner.js";
16
18
  import { showMessageToast } from "../../components/toast.js";
17
19
  import { Tooltip, TooltipContent, TooltipTrigger } from "../../components/tooltip.js";
18
20
  import { UpdateCard } from "../../components/update-card.js";
19
21
  import { WaitingLine } from "../../components/waiting-line.js";
20
22
  import { useEmptyArt } from "../assets.js";
21
- import { FAILED_READ, nothing, sampleMessage } from "../samples.js";
23
+ import { FAILED_READ, MAILBOXES, NOW, nothing, sampleMessage } from "../samples.js";
24
+ function Captioned({ caption, children }) {
25
+ return (_jsxs("div", { className: "grid gap-2", children: [_jsx("span", { className: "text-body-sm text-muted-foreground", children: caption }), children] }));
26
+ }
22
27
  function EmptyStateSpecimen() {
23
28
  const art = useEmptyArt();
24
- return (_jsxs("div", { className: "grid gap-4", children: [_jsx(EmptyState, { action: { label: "Add mailbox", onClick: nothing }, description: "Every address your Agents read and send from lives here.", kind: "firstUse", picture: art.mail, scope: "region", title: "No mailboxes yet" }), _jsx(EmptyState, { clear: { label: "Clear search", onClick: nothing }, kind: "noResults", message: "No mailbox matches \u201Cbilling\u201D.", scope: "card" }), _jsx(EmptyState, { kind: "failed", message: FAILED_READ, scope: "card" })] }));
29
+ return (_jsxs("div", { className: "grid gap-6", children: [_jsx(Captioned, { caption: "First use, with a link to the documentation", children: _jsx(EmptyState, { action: { label: "Add mailbox", onClick: nothing }, description: "Every address your Agents read and send from lives here.", docs: {
30
+ label: "How mailboxes work",
31
+ link: _jsx("a", { href: "/docs/mailboxes" }),
32
+ external: true,
33
+ }, kind: "firstUse", picture: art.mail, scope: "region", title: "No mailboxes yet" }) }), _jsx(Captioned, { caption: "Nothing yet, no results and cleared, swapping inside one live region", children: _jsxs("div", { "aria-live": "polite", className: "grid gap-4", children: [_jsx(EmptyState, { kind: "nothingYet", message: "Nothing has been sent from this mailbox yet.", scope: "card" }), _jsx(EmptyState, { clear: { label: "Clear search", onClick: nothing }, kind: "noResults", message: "No mailbox matches \u201Cbilling\u201D.", scope: "card" }), _jsx(EmptyState, { kind: "cleared", message: "You're all caught up.", scope: "card" })] }) }), _jsx(Captioned, { caption: "Cleared and nothing yet as one line, in a card that lists a few items", children: _jsx("div", { className: "grid max-w-75 gap-4 rounded-sm ring-1 ring-border", children: _jsx(EmptyState, { kind: "cleared", message: "No customer waits on anyone.", scope: "line" }) }) }), _jsx(Captioned, { caption: "Denied, on a page", children: _jsx(EmptyState, { action: { label: "Request access", onClick: nothing }, description: "Billing is open to the owners of Acme. Ask Marta Rossi, the owner, to open it for you.", kind: "denied", scope: "page", title: "You can't open billing" }) }), _jsx(Captioned, { caption: "Failed, with the request ID to paste into a support thread", children: _jsx(EmptyState, { kind: "failed", message: FAILED_READ, reference: {
34
+ label: "Request ID",
35
+ value: "iad1::abc12-1760000000000-9f3c",
36
+ copyLabel: "Copy request ID",
37
+ copiedLabel: "Copied",
38
+ copyFailedLabel: "Couldn't copy",
39
+ }, scope: "region" }) }), _jsx(Captioned, { caption: "Failed, in a card: the answer of an ErrorCard", children: _jsx(EmptyState, { kind: "failed", message: FAILED_READ, scope: "card" }) })] }));
25
40
  }
26
41
  function LabelledPictureSpecimen() {
27
42
  const art = useEmptyArt();
@@ -29,17 +44,21 @@ function LabelledPictureSpecimen() {
29
44
  }
30
45
  function PendingLabelSpecimen() {
31
46
  const [pending, setPending] = useState(false);
32
- return (_jsxs("div", { className: "grid max-w-md gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { disabled: pending, onClick: () => setPending(false), variant: "outline", children: "Cancel" }), _jsx(Button, { "aria-busy": pending || undefined, disabled: pending, onClick: () => setPending(true), children: _jsx(PendingLabel, { pending: pending, pendingLabel: "Saving", children: "Save changes" }) }), pending ? (_jsx(Button, { onClick: () => setPending(false), variant: "link", children: "Reset" })) : null] }), pending ? _jsx(WaitingLine, { decorative: true }) : null] }));
47
+ return (_jsxs(DropdownMenu, { onOpenChange: (open) => (open ? undefined : setPending(false)), children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { variant: "outline" }), children: "Account" }), _jsx(DropdownMenuContent, { align: "start", children: _jsx(DropdownMenuCommand, { closeOnClick: false, icon: _jsx(LogOut, {}), loading: pending, loadingLabel: "Signing out", onClick: () => setPending(true), children: "Sign out" }) })] }));
33
48
  }
34
49
  function ToasterSpecimen() {
35
- return (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => showMessageToast(sampleMessage("Mailbox removed"), { tone: "success" }), variant: "outline", children: "Remove mailbox" }), _jsx(Toaster, {})] }));
50
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Button, { onClick: () => showMessageToast(sampleMessage("Mailbox removed"), { tone: "success" }), variant: "outline", children: "Remove mailbox" }), _jsx(Button, { onClick: () => showMessageToast(sampleMessage("Couldn't remove pec@acme.it", "The mailbox is still connected."), { tone: "error" }), variant: "outline", children: "Remove mailbox that fails" })] }), _jsx(Toaster, { closeLabel: "Close notification", regionLabel: "Notifications" })] }));
36
51
  }
37
52
  function UpdateCardSpecimen() {
38
53
  const [updated, setUpdated] = useState(false);
39
- return (_jsx("div", { className: "max-w-xs", children: updated ? (_jsx(UpdateCard, { dismiss: { label: "Dismiss", onClick: () => setUpdated(false) }, state: "updated", title: "Nadia is up to date", version: "12.2.0" })) : (_jsx(UpdateCard, { action: { label: "Restart to update", onClick: () => setUpdated(true) }, state: "available", title: "A new Nadia is ready", version: "12.2.0" })) }));
54
+ return (_jsxs("div", { className: "flex items-start gap-4", children: [_jsx("div", { className: "w-64", children: updated ? (_jsx(UpdateCard, { dismiss: { label: "Dismiss", onClick: () => setUpdated(false) }, state: "updated", title: "Nadia is up to date", version: "12.2.0" })) : (_jsx(UpdateCard, { action: { label: "Restart to update", onClick: () => setUpdated(true) }, state: "available", title: "A new Nadia is ready", version: "12.2.0" })) }), _jsx(UpdateCard, { action: { label: "Restart to update", onClick: nothing }, narrow: true, state: "available", title: "A new Nadia is ready", version: "12.2.0" })] }));
55
+ }
56
+ function SkeletonRegionSpecimen() {
57
+ const [busy, setBusy] = useState(true);
58
+ return (_jsxs("div", { className: "grid max-w-sm gap-3", children: [_jsx(Button, { onClick: () => setBusy((current) => !current), size: "sm", variant: "outline", children: busy ? "Show the mailboxes" : "Show the placeholders" }), _jsx(SkeletonRegion, { busy: busy, className: "grid gap-3", children: MAILBOXES.map((mailbox) => busy ? (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Skeleton, { height: 32, shape: "circle", width: 32 }), _jsx(Skeleton, { boxHeight: 20, height: 12, width: 200 })] }, mailbox.id)) : (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Mail, { "aria-hidden": "true", className: "size-8 rounded-full bg-muted p-2" }), _jsx("span", { className: "text-body-md", children: mailbox.address })] }, mailbox.id))) })] }));
40
59
  }
41
60
  export const FEEDBACK = {
42
- Alert: () => (_jsxs("div", { className: "grid max-w-lg gap-3", children: [_jsxs(Alert, { variant: "info", children: [_jsx(Info, { "aria-hidden": "true" }), _jsx(AlertTitle, { children: "Approvals are on" }), _jsx(AlertDescription, { children: "Payments over \u20AC 500 wait for you." })] }), _jsxs(Alert, { variant: "warning", children: [_jsx(TriangleAlert, { "aria-hidden": "true" }), _jsx(AlertTitle, { children: "WhatsApp needs a new code" }), _jsx(AlertDescription, { children: "Messages wait until it is paired again." })] })] })),
61
+ Alert: () => (_jsxs("div", { className: "grid max-w-lg gap-3", children: [_jsxs(Alert, { variant: "info", children: [_jsx(Info, { "aria-hidden": "true" }), _jsx(AlertTitle, { children: "Approvals are on" }), _jsx(AlertDescription, { children: "Payments over \u20AC 500 wait for you." })] }), _jsxs(Alert, { variant: "warning", children: [_jsx(TriangleAlert, { "aria-hidden": "true" }), _jsx(AlertTitle, { children: "WhatsApp needs a new code" }), _jsx(AlertDescription, { children: "Messages wait until it is paired again." })] }), _jsxs(Alert, { variant: "destructive", children: [_jsx(TriangleAlert, { "aria-hidden": "true" }), _jsx(AlertTitle, { children: "Payment failed" }), _jsx(AlertDescription, { children: "Agents stop at the end of the billing cycle." })] })] })),
43
62
  EmptyState: EmptyStateSpecimen,
44
63
  EntryProgress: () => (_jsx("div", { className: "max-w-sm", children: _jsx(EntryProgress, { count: "27 of 40 files", fraction: 27 / 40 }) })),
45
64
  EntryStageList: () => (_jsx(EntryStageList, { stages: [
@@ -47,18 +66,23 @@ export const FEEDBACK = {
47
66
  { id: "install", label: "Install her tools", mark: "current" },
48
67
  { id: "sign-in", label: "Sign in", mark: "pending" },
49
68
  ] })),
50
- HoverCard: () => (_jsxs(HoverCard, { children: [_jsx(HoverCardTrigger, { render: _jsx("time", { className: "text-sm underline decoration-dotted", dateTime: "2026-10-14T07:00:00Z" }), children: "Updated 3 hours ago" }), _jsxs(HoverCardContent, { className: "grid gap-1 text-sm", children: [_jsx("span", { children: "Tuesday 14 October 2026" }), _jsx("span", { children: "09:00 Rome \u00B7 07:00 UTC" }), _jsx("span", { className: "font-mono text-muted-foreground", children: "2026-10-14T07:00:00Z" })] })] })),
69
+ HoverCard: () => (_jsxs("div", { className: "flex flex-wrap items-center gap-6", children: [_jsx(RecordTime, { at: "2026-10-14T07:00:00Z", now: NOW, phrase: (when) => `Updated ${when}`, timeZone: "Europe/Rome" }), _jsx(RecordTime, { at: null, mode: "clock", children: "Pending" }), _jsxs(HoverCard, { children: [_jsx(HoverCardTrigger, { render: _jsx("button", { className: "text-sm underline decoration-dotted", type: "button" }), children: "Portal" }), _jsx(HoverCardContent, { children: _jsx(HoverCardSummary, { action: { label: "Open project", href: "#" }, detail: "nadicode / portal", facts: [
70
+ { label: "Plan", value: "Pro" },
71
+ { label: "Region", value: "Frankfurt" },
72
+ { label: "Last active", value: null },
73
+ ], missingLabel: "Not reported", name: "Portal" }) })] })] })),
51
74
  LabelledPicture: LabelledPictureSpecimen,
52
75
  MessageNotice: () => (_jsxs("div", { className: "grid max-w-lg gap-4", children: [_jsx(MessageNotice, { message: sampleMessage("Couldn't remove pec@acme.it", "The mailbox is still connected.", [
53
76
  { label: "Try again", onClick: nothing },
54
77
  ]), placement: "action" }), _jsx(MessageNotice, { message: sampleMessage("Billing is paused", "Agents stop at the end of the cycle.", [
55
78
  { label: "Update payment", onClick: nothing },
56
- ]), placement: "section", tone: "warning" })] })),
57
- NoticeBanner: () => (_jsx(NoticeBanner, { action: _jsx(Button, { variant: "outline", children: "Open Slack settings" }), className: "max-w-lg", description: "Agents can't post to Slack until it is connected again.", liveRegion: "off", title: "Slack disconnected", tone: "warning" })),
79
+ ]), placement: "section", tone: "warning" }), _jsx(MessageNotice, { message: sampleMessage("Orders is read-only for you", "Ask an owner of Acme to change who can write to it."), placement: "section", tone: "info" })] })),
80
+ NoticeBanner: () => (_jsxs("div", { className: "grid max-w-lg gap-6", children: [_jsx(Captioned, { caption: "Warning, with a label and a command", children: _jsx(NoticeBanner, { action: { label: "Open Slack settings", onClick: nothing }, description: "Agents can't post to Slack until it is connected again.", label: "Slack", liveRegion: "off", title: "Slack is disconnected", tone: "warning" }) }), _jsx(Captioned, { caption: "Destructive, with its own icon and a link", children: _jsx(NoticeBanner, { action: { label: "Update payment method", link: _jsx("a", { href: "#billing" }) }, description: "Agents stop at the end of the billing cycle.", icon: CreditCard, label: "Billing", liveRegion: "polite", title: "Your last payment failed", tone: "destructive" }) })] })),
58
81
  PendingLabel: PendingLabelSpecimen,
59
- Skeleton: () => (_jsxs("div", { "aria-busy": "true", className: "grid max-w-sm gap-2", children: [_jsx(Skeleton, { className: "h-4 w-3/4" }), _jsx(Skeleton, { className: "h-4 w-1/2" }), _jsx(Skeleton, { className: "size-8", shape: "circle" })] })),
82
+ Skeleton: () => (_jsxs(SkeletonRegion, { busy: true, className: "grid max-w-sm gap-3", children: [_jsx(Skeleton, { boxHeight: 20, height: 16, width: "75%" }), _jsx(Skeleton, { height: 16, width: 160 }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Skeleton, { height: 32, shape: "circle", width: 32 }), _jsx(Skeleton, { height: 48, shape: "squared", width: 48 })] }), _jsx(Skeleton, { height: 100, width: "100%", children: null }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Skeleton, { children: _jsx(Button, { children: "Save changes" }) }), _jsx(Skeleton, { show: false, children: _jsx(Button, { children: "Save changes" }) })] })] })),
83
+ SkeletonRegion: SkeletonRegionSpecimen,
60
84
  Toaster: ToasterSpecimen,
61
- Tooltip: () => (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { "aria-label": "Remove attachment", size: "icon", variant: "ghost" }), children: _jsx(X, { "aria-hidden": "true" }) }), _jsx(TooltipContent, { children: "Remove attachment" })] })),
85
+ Tooltip: () => (_jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { "aria-label": "Remove attachment", size: "icon", variant: "ghost" }), children: _jsx(X, { "aria-hidden": "true" }) }), _jsx(TooltipContent, { children: "Remove attachment" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { "aria-label": "Search", size: "icon", variant: "outline" }), children: _jsx(Search, { "aria-hidden": "true" }) }), _jsxs(TooltipContent, { children: ["Search ", _jsx(Kbd, { children: "/" })] })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { "aria-label": "Find a mailbox", size: "icon", variant: "outline" }), children: _jsx(Mail, { "aria-hidden": "true" }) }), _jsxs(TooltipContent, { children: ["Find a mailbox ", _jsx(Kbd, { meta: true, children: "K" })] })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { variant: "outline" }), children: "Without a stem" }), _jsx(TooltipContent, { arrow: false, children: "Pinned to the button" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { variant: "outline" }), children: "Monthly limit" }), _jsx(TooltipContent, { centerText: false, children: "Limit: 400 runs a month. It resets on 1 November and unused runs do not carry over." })] })] })),
62
86
  UpdateCard: UpdateCardSpecimen,
63
87
  WaitingLine: () => (_jsxs("div", { className: "grid max-w-sm gap-2 text-sm", children: ["Connecting Telegram", _jsx(WaitingLine, { label: "Connecting Telegram" })] })),
64
88
  };
@@ -3,15 +3,13 @@ export declare const SPECIMENS: {
3
3
  AspectRatio: () => import("react").JSX.Element;
4
4
  BrandField: () => import("react").JSX.Element;
5
5
  Carousel: () => import("react").JSX.Element;
6
- ChannelView: () => import("react").JSX.Element;
7
6
  Collapsible: () => import("react").JSX.Element;
8
7
  CompanyCard: () => import("react").JSX.Element;
9
8
  Disclosure: () => import("react").JSX.Element;
10
- ExpandableBlock: () => import("react").JSX.Element;
11
9
  HiveScene: () => import("react").JSX.Element;
12
10
  NadiaPresence: () => import("react").JSX.Element;
13
11
  NumberedSteps: () => import("react").JSX.Element;
14
- PluginSlotBoundary: () => import("react").JSX.Element;
12
+ Prose: () => import("react").JSX.Element;
15
13
  ReadingColumn: () => import("react").JSX.Element;
16
14
  ResizablePanelGroup: () => import("react").JSX.Element;
17
15
  ScrollArea: () => import("react").JSX.Element;
@@ -38,7 +36,6 @@ export declare const SPECIMENS: {
38
36
  Drawer: () => import("react").JSX.Element;
39
37
  DropdownMenu: () => import("react").JSX.Element;
40
38
  GlassControl: () => import("react").JSX.Element;
41
- Menubar: () => import("react").JSX.Element;
42
39
  MenuChoiceRow: () => import("react").JSX.Element;
43
40
  Popover: () => import("react").JSX.Element;
44
41
  Sheet: () => import("react").JSX.Element;
@@ -53,12 +50,12 @@ export declare const SPECIMENS: {
53
50
  NoticeBanner: () => import("react").JSX.Element;
54
51
  PendingLabel: () => import("react").JSX.Element;
55
52
  Skeleton: () => import("react").JSX.Element;
53
+ SkeletonRegion: () => import("react").JSX.Element;
56
54
  Toaster: () => import("react").JSX.Element;
57
55
  Tooltip: () => import("react").JSX.Element;
58
56
  UpdateCard: () => import("react").JSX.Element;
59
57
  WaitingLine: () => import("react").JSX.Element;
60
58
  AgentCard: () => import("react").JSX.Element;
61
- ApprovalRow: () => import("react").JSX.Element;
62
59
  Card: () => import("react").JSX.Element;
63
60
  CardRow: () => import("react").JSX.Element;
64
61
  CodeBlock: () => import("react").JSX.Element;
@@ -68,7 +65,7 @@ export declare const SPECIMENS: {
68
65
  FileDiff: () => import("react").JSX.Element;
69
66
  Item: () => import("react").JSX.Element;
70
67
  Kbd: () => import("react").JSX.Element;
71
- MemoryItem: () => import("react").JSX.Element;
68
+ MiddleTruncate: () => import("react").JSX.Element;
72
69
  ObjectFacts: () => import("react").JSX.Element;
73
70
  PairingCode: () => import("react").JSX.Element;
74
71
  Progress: () => import("react").JSX.Element;
@@ -76,22 +73,24 @@ export declare const SPECIMENS: {
76
73
  RecordTime: () => import("react").JSX.Element;
77
74
  RunTimeline: () => import("react").JSX.Element;
78
75
  SettingsFactsSection: () => import("react").JSX.Element;
79
- StatusRow: () => import("react").JSX.Element;
76
+ Snippet: () => import("react").JSX.Element;
80
77
  Table: () => import("react").JSX.Element;
81
78
  TableCard: () => import("react").JSX.Element;
82
79
  TableValue: () => import("react").JSX.Element;
80
+ TextWithCopyButton: () => import("react").JSX.Element;
83
81
  UsageMeter: () => import("react").JSX.Element;
84
82
  AgentListRow: () => import("react").JSX.Element;
85
83
  Breadcrumb: () => import("react").JSX.Element;
86
84
  CommandDialog: () => import("react").JSX.Element;
87
- DashboardShell: () => import("react").JSX.Element;
88
85
  DesktopAppShell: () => import("react").JSX.Element;
89
86
  Footer: () => import("react").JSX.Element;
90
- NavigationMenu: () => import("react").JSX.Element;
91
- Pagination: () => import("react").JSX.Element;
92
87
  PortalSidebarFrame: () => import("react").JSX.Element;
93
88
  ScopeSwitcher: () => import("react").JSX.Element;
94
89
  Sidebar: () => import("react").JSX.Element;
90
+ SidebarBrand: () => import("react").JSX.Element;
91
+ SidebarFind: () => import("react").JSX.Element;
92
+ SidebarFrame: () => import("react").JSX.Element;
93
+ SidebarMenuChevron: () => import("react").JSX.Element;
95
94
  SidebarSections: () => import("react").JSX.Element;
96
95
  Tabs: () => import("react").JSX.Element;
97
96
  TabsNav: () => import("react").JSX.Element;
@@ -103,41 +102,50 @@ export declare const SPECIMENS: {
103
102
  Avatar: () => import("react").JSX.Element;
104
103
  Badge: () => import("react").JSX.Element;
105
104
  BrandWordmark: () => import("react").JSX.Element;
105
+ CheckCounts: () => import("react").JSX.Element;
106
106
  FileTypeIcon: () => import("react").JSX.Element;
107
+ Gauge: () => import("react").JSX.Element;
107
108
  IdentityMark: () => import("react").JSX.Element;
108
- MetaLabel: () => import("react").JSX.Element;
109
109
  ModelIdentity: () => import("react").JSX.Element;
110
110
  ModelMark: () => import("react").JSX.Element;
111
111
  PlatformMark: () => import("react").JSX.Element;
112
+ ProgressChecklist: () => import("react").JSX.Element;
112
113
  RecordIdentity: () => import("react").JSX.Element;
113
114
  StatusBadge: () => import("react").JSX.Element;
114
115
  StatusDot: () => import("react").JSX.Element;
115
116
  Tag: () => import("react").JSX.Element;
116
117
  Checkbox: () => import("react").JSX.Element;
118
+ ChoiceboxGroup: () => import("react").JSX.Element;
117
119
  CollectionSort: () => import("react").JSX.Element;
118
120
  Combobox: () => import("react").JSX.Element;
119
121
  ModelSelect: () => import("react").JSX.Element;
122
+ MultiSelect: () => import("react").JSX.Element;
120
123
  RadioGroup: () => import("react").JSX.Element;
121
124
  SegmentedChoice: () => import("react").JSX.Element;
125
+ SegmentedControl: () => import("react").JSX.Element;
122
126
  Select: () => import("react").JSX.Element;
123
127
  Switch: () => import("react").JSX.Element;
128
+ ThemeModeSegments: () => import("react").JSX.Element;
124
129
  ThemeModeSwitcher: () => import("react").JSX.Element;
125
130
  Toggle: () => import("react").JSX.Element;
126
131
  ToggleGroup: () => import("react").JSX.Element;
127
132
  Calendar: () => import("react").JSX.Element;
133
+ ClearableInput: () => import("react").JSX.Element;
128
134
  CollectionSearch: () => import("react").JSX.Element;
129
135
  Field: () => import("react").JSX.Element;
130
- Form: () => import("react").JSX.Element;
131
136
  Input: () => import("react").JSX.Element;
132
137
  InputGroup: () => import("react").JSX.Element;
133
138
  InputOTP: () => import("react").JSX.Element;
134
139
  Label: () => import("react").JSX.Element;
135
140
  NativeSelect: () => import("react").JSX.Element;
141
+ SettingsRows: () => import("react").JSX.Element;
136
142
  SettingsField: () => import("react").JSX.Element;
137
143
  Slider: () => import("react").JSX.Element;
138
144
  Textarea: () => import("react").JSX.Element;
139
145
  Button: () => import("react").JSX.Element;
146
+ ButtonLink: () => import("react").JSX.Element;
140
147
  ButtonGroup: () => import("react").JSX.Element;
148
+ LoadMoreButton: () => import("react").JSX.Element;
141
149
  CopyButton: () => import("react").JSX.Element;
142
150
  PageActions: () => import("react").JSX.Element;
143
151
  ActivityFeed: () => import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYiB,CAAC"}
@@ -1,19 +1,21 @@
1
1
  declare function CalendarSpecimen(): import("react").JSX.Element;
2
2
  declare function CollectionSearchSpecimen(): import("react").JSX.Element;
3
- declare function FormSpecimen(): import("react").JSX.Element;
3
+ declare function ClearableInputSpecimen(): import("react").JSX.Element;
4
4
  declare function InputGroupSpecimen(): import("react").JSX.Element;
5
5
  declare function InputOTPSpecimen(): import("react").JSX.Element;
6
6
  declare function SliderSpecimen(): import("react").JSX.Element;
7
+ declare function SettingsRowsSpecimen(): import("react").JSX.Element;
7
8
  export declare const INPUTS: {
8
9
  Calendar: typeof CalendarSpecimen;
10
+ ClearableInput: typeof ClearableInputSpecimen;
9
11
  CollectionSearch: typeof CollectionSearchSpecimen;
10
12
  Field: () => import("react").JSX.Element;
11
- Form: typeof FormSpecimen;
12
13
  Input: () => import("react").JSX.Element;
13
14
  InputGroup: typeof InputGroupSpecimen;
14
15
  InputOTP: typeof InputOTPSpecimen;
15
16
  Label: () => import("react").JSX.Element;
16
17
  NativeSelect: () => import("react").JSX.Element;
18
+ SettingsRows: typeof SettingsRowsSpecimen;
17
19
  SettingsField: () => import("react").JSX.Element;
18
20
  Slider: typeof SliderSpecimen;
19
21
  Textarea: () => import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/inputs.tsx"],"names":[],"mappings":"AAsCA,iBAAS,gBAAgB,gCAaxB;AAED,iBAAS,wBAAwB,gCAOhC;AAED,iBAAS,YAAY,gCA4BpB;AAED,iBAAS,kBAAkB,gCA2B1B;AAED,iBAAS,gBAAgB,gCA2BxB;AAED,iBAAS,cAAc,gCAoBtB;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;CAuEQ,CAAC"}
1
+ {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/inputs.tsx"],"names":[],"mappings":"AA6BA,iBAAS,gBAAgB,gCAexB;AAED,iBAAS,wBAAwB,gCAqBhC;AAED,iBAAS,sBAAsB,gCAiC9B;AAED,iBAAS,kBAAkB,gCAqC1B;AAED,iBAAS,gBAAgB,gCA2BxB;AAED,iBAAS,cAAc,gCAuCtB;AAqBD,iBAAS,oBAAoB,gCAsD5B;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;CAoHQ,CAAC"}
@@ -1,60 +1,103 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Search, X } from "lucide-react";
3
+ import { AtSign, Clock, Globe, Search } from "lucide-react";
4
4
  import { useState } from "react";
5
- import { useForm } from "react-hook-form";
6
- import { Button } from "../../components/button.js";
7
5
  import { Calendar } from "../../components/calendar.js";
6
+ import { ClearableInput } from "../../components/clearable-input.js";
8
7
  import { CollectionSearch } from "../../components/collection-search.js";
9
8
  import { Field, FieldDescription, FieldError, FieldLabel } from "../../components/field.js";
10
- import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "../../components/form.js";
11
9
  import { Input } from "../../components/input.js";
12
10
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, } from "../../components/input-group.js";
13
11
  import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "../../components/input-otp.js";
14
12
  import { Label } from "../../components/label.js";
15
13
  import { NativeSelect, NativeSelectOption } from "../../components/native-select.js";
16
- import { SettingsField } from "../../components/settings-section.js";
14
+ import { SettingsField, SettingsRows, SettingsSection } from "../../components/settings-section.js";
17
15
  import { Slider } from "../../components/slider.js";
18
16
  import { Switch } from "../../components/switch.js";
19
17
  import { Textarea } from "../../components/textarea.js";
18
+ import { nothing } from "../samples.js";
20
19
  function CalendarSpecimen() {
21
20
  const [range, setRange] = useState({
22
21
  from: new Date(2026, 9, 7),
23
22
  to: new Date(2026, 9, 13),
24
23
  });
25
- return (_jsx(Calendar, { defaultMonth: new Date(2026, 9, 1), mode: "range", onSelect: setRange, selected: range }));
24
+ return (_jsx(Calendar, { defaultMonth: new Date(2026, 9, 1), maxValue: new Date(2026, 9, 16), minValue: new Date(2026, 9, 5), mode: "range", onSelect: setRange, selected: range }));
26
25
  }
27
26
  function CollectionSearchSpecimen() {
28
27
  const [value, setValue] = useState("");
29
- return (_jsx("div", { className: "max-w-sm", children: _jsx(CollectionSearch, { label: "Find a skill", onValueChange: setValue, value: value }) }));
28
+ const [query, setQuery] = useState("preventivi");
29
+ return (_jsxs("div", { className: "grid max-w-sm gap-3", children: [_jsx(CollectionSearch, { clearLabel: "Clear search", label: "Find a skill", onValueChange: setValue, value: value }), _jsx(CollectionSearch, { clearLabel: "Clear search", label: "Find a skill", loading: true, onValueChange: setQuery, shortcut: { meta: true, children: "K" }, value: query })] }));
30
30
  }
31
- function FormSpecimen() {
32
- const form = useForm({ defaultValues: { name: "" } });
33
- return (_jsx(Form, { ...form, children: _jsxs("form", { className: "grid max-w-sm gap-4", method: "post", onSubmit: form.handleSubmit(() => undefined), children: [_jsx(FormField, { control: form.control, name: "name", rules: { required: "Enter the company's name, as it appears on invoices." }, render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Company name" }), _jsx(FormControl, { render: _jsx(Input, { placeholder: "Bizeta Arredamenti", ...field }) }), _jsx(FormDescription, { children: "Shown on every invoice your Agents send." }), _jsx(FormMessage, {})] })) }), _jsx(Button, { className: "justify-self-start", type: "submit", children: "Save company" })] }) }));
31
+ function ClearableInputSpecimen() {
32
+ const [reference, setReference] = useState("INV-2026-0412");
33
+ const [filter, setFilter] = useState("");
34
+ const [mailboxFilter, setMailboxFilter] = useState("pec");
35
+ return (_jsxs("div", { className: "grid max-w-sm gap-3", children: [_jsx(ClearableInput, { "aria-label": "Invoice reference", clearLabel: "Clear reference", onValueChange: setReference, value: reference }), _jsx(ClearableInput, { "aria-label": "Filter Agents", clearLabel: "Clear filter", onValueChange: setFilter, placeholder: "Filter Agents", prefix: _jsx(AtSign, { "aria-hidden": "true" }), shortcut: { meta: true, children: "K" }, size: "lg", value: filter }), _jsx(ClearableInput, { "aria-label": "Filter mailboxes", clearLabel: "Clear filter", loading: true, onValueChange: setMailboxFilter, placeholder: "Filter mailboxes", size: "sm", value: mailboxFilter })] }));
34
36
  }
35
37
  function InputGroupSpecimen() {
36
38
  const [value, setValue] = useState("acme.it");
37
- return (_jsxs("div", { className: "grid max-w-sm gap-3", children: [_jsxs(InputGroup, { children: [_jsx(InputGroupAddon, { children: _jsx(InputGroupText, { children: "https://" }) }), _jsx(InputGroupInput, { "aria-label": "Website", onChange: (event) => setValue(event.target.value), value: value }), _jsx(InputGroupAddon, { align: "inline-end", children: _jsx(InputGroupButton, { "aria-label": "Clear website", onClick: () => setValue(""), size: "icon-xs", children: _jsx(X, { "aria-hidden": "true" }) }) })] }), _jsxs(InputGroup, { children: [_jsx(InputGroupAddon, { children: _jsx(Search, { "aria-hidden": "true" }) }), _jsx(InputGroupInput, { "aria-label": "Search the hub", placeholder: "Search the hub", type: "search" })] })] }));
39
+ return (_jsxs("div", { className: "grid max-w-sm gap-3", children: [_jsxs(InputGroup, { children: [_jsx(InputGroupAddon, { children: _jsx(InputGroupText, { children: "https://" }) }), _jsx(InputGroupInput, { "aria-label": "Website", onChange: (event) => setValue(event.target.value), value: value }), _jsx(InputGroupAddon, { align: "inline-end", children: _jsx(InputGroupButton, { onClick: nothing, size: "sm", variant: "ghost", children: "Check" }) })] }), _jsxs(InputGroup, { size: "lg", children: [_jsx(InputGroupAddon, { children: _jsx(Globe, { "aria-hidden": "true" }) }), _jsx(InputGroupInput, { "aria-label": "Domain", defaultValue: "acme.it" }), _jsx(InputGroupAddon, { align: "inline-end", children: _jsx(InputGroupButton, { "aria-label": "Search domain", onClick: nothing, size: "icon", variant: "ghost", children: _jsx(Search, { "aria-hidden": "true" }) }) })] })] }));
38
40
  }
39
41
  function InputOTPSpecimen() {
40
42
  const [code, setCode] = useState("");
41
43
  return (_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "showcase-otp", children: "Code from your authenticator app" }), _jsxs(InputOTP, { autoComplete: "one-time-code", id: "showcase-otp", inputMode: "numeric", maxLength: 6, onChange: setCode, value: code, children: [_jsxs(InputOTPGroup, { children: [_jsx(InputOTPSlot, { index: 0 }), _jsx(InputOTPSlot, { index: 1 }), _jsx(InputOTPSlot, { index: 2 })] }), _jsx(InputOTPSeparator, {}), _jsxs(InputOTPGroup, { children: [_jsx(InputOTPSlot, { index: 3 }), _jsx(InputOTPSlot, { index: 4 }), _jsx(InputOTPSlot, { index: 5 })] })] })] }));
42
44
  }
43
45
  function SliderSpecimen() {
44
- const [limit, setLimit] = useState(400);
45
- return (_jsxs("div", { className: "grid max-w-sm gap-2", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-4", children: [_jsx(Label, { id: "showcase-limit", children: "Monthly limit" }), _jsxs("span", { className: "text-sm tabular-nums", children: ["\u20AC ", limit] })] }), _jsx(Slider, { "aria-labelledby": "showcase-limit", format: { style: "currency", currency: "EUR", maximumFractionDigits: 0 }, max: 1000, min: 0, onValueChange: (next) => setLimit(Array.isArray(next) ? (next[0] ?? 0) : next), step: 50, value: limit }), _jsx("p", { className: "text-sm text-muted-foreground", children: "From \u20AC0 to \u20AC1,000, in steps of \u20AC50." })] }));
46
+ return (_jsxs("div", { className: "grid max-w-sm gap-6", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Slider, { defaultValue: [400], format: { style: "currency", currency: "EUR", maximumFractionDigits: 0 }, label: "Monthly limit", max: 1000, min: 0, showEndInput: true, step: 50 }), _jsx("p", { className: "text-sm text-muted-foreground", children: "From \u20AC0 to \u20AC1,000, in steps of \u20AC50." })] }), _jsx(Slider, { defaultValue: [200, 600], format: { style: "currency", currency: "EUR", maximumFractionDigits: 0 }, label: "Invoice amount", max: 1000, min: 0, showEndInput: true, showStartInput: true, step: 50 }), _jsx(Slider, { defaultValue: [200, 600], disabled: true, format: { style: "currency", currency: "EUR", maximumFractionDigits: 0 }, label: "Invoice amount, locked", max: 1000, min: 0, showEndInput: true, showStartInput: true, step: 50 }), _jsx(CommittedSliderSpecimen, {})] }));
47
+ }
48
+ function CommittedSliderSpecimen() {
49
+ const [committed, setCommitted] = useState(50);
50
+ return (_jsxs("div", { className: "grid gap-2", children: [_jsx(Slider, { defaultValue: [50], label: "Volume", max: 100, min: 0, onValueCommitted: ([next]) => setCommitted(next), step: 1 }), _jsxs("p", { className: "text-sm text-muted-foreground tabular-nums", children: ["Last committed: ", committed] })] }));
51
+ }
52
+ const STATE_LABELS = { on: "Enabled", off: "Disabled" };
53
+ function SettingsRowsSpecimen() {
54
+ const [approvals, setApprovals] = useState(true);
55
+ const [reminders, setReminders] = useState(false);
56
+ const [zone, setZone] = useState("Europe/Rome");
57
+ return (_jsxs("div", { className: "grid gap-6", children: [_jsx(SettingsSection, { description: "Choose which events ask for your attention.", title: "Notifications", children: _jsx(SettingsRows, { kind: "switch", rows: [
58
+ {
59
+ id: "showcase-rows-approvals",
60
+ label: "Approvals",
61
+ info: { label: "About approvals", text: "An Agent waits for you before it sends." },
62
+ checked: approvals,
63
+ onCheckedChange: setApprovals,
64
+ name: "approvals",
65
+ },
66
+ {
67
+ id: "showcase-rows-reminders",
68
+ label: "Reminders",
69
+ info: { label: "About reminders", text: "A nudge when an invoice is overdue." },
70
+ checked: reminders,
71
+ onCheckedChange: setReminders,
72
+ name: "reminders",
73
+ },
74
+ ], stateLabels: STATE_LABELS }) }), _jsx(SettingsSection, { description: "Dates and times follow this choice.", title: "Region", children: _jsx(SettingsRows, { kind: "select", rows: [
75
+ {
76
+ id: "showcase-rows-zone",
77
+ label: "Time zone",
78
+ info: { label: "About time zone", text: "Reports are cut at midnight here." },
79
+ value: zone,
80
+ onValueChange: setZone,
81
+ name: "zone",
82
+ options: [
83
+ { value: "Europe/London", label: "London" },
84
+ { value: "Europe/Rome", label: "Rome" },
85
+ ],
86
+ },
87
+ ] }) })] }));
46
88
  }
47
89
  export const INPUTS = {
48
90
  Calendar: CalendarSpecimen,
91
+ ClearableInput: ClearableInputSpecimen,
49
92
  CollectionSearch: CollectionSearchSpecimen,
50
- Field: () => (_jsxs("div", { className: "grid max-w-sm gap-6", children: [_jsxs(Field, { children: [_jsx(FieldLabel, { htmlFor: "showcase-email", children: "Billing email" }), _jsx(FieldDescription, { children: "Invoices and receipts go here." }), _jsx(Input, { id: "showcase-email", placeholder: "amministrazione@acme.it", type: "email" })] }), _jsxs(Field, { "data-invalid": "true", children: [_jsx(FieldLabel, { htmlFor: "showcase-email-wrong", children: "Billing email" }), _jsx(Input, { "aria-describedby": "showcase-email-error", "aria-invalid": "true", defaultValue: "amministrazione", id: "showcase-email-wrong", type: "email" }), _jsx(FieldError, { id: "showcase-email-error", children: "Enter a full address, like name@company.it." })] })] })),
51
- Form: FormSpecimen,
52
- Input: () => (_jsxs("div", { className: "grid max-w-sm gap-2", children: [_jsx(Label, { htmlFor: "showcase-company", children: "Company name" }), _jsx(Input, { autoComplete: "organization", id: "showcase-company", placeholder: "Bizeta Arredamenti" })] })),
93
+ Field: () => (_jsxs("div", { className: "grid max-w-sm gap-6", children: [_jsxs(Field, { children: [_jsx(FieldLabel, { htmlFor: "showcase-email", id: "showcase-email-label", children: "Billing email" }), _jsx(FieldDescription, { children: "Invoices and receipts go here." }), _jsx(Input, { "aria-labelledby": "showcase-email-label", id: "showcase-email", placeholder: "amministrazione@acme.it", type: "email" })] }), _jsxs(Field, { "data-invalid": "true", children: [_jsx(FieldLabel, { htmlFor: "showcase-email-wrong", id: "showcase-email-wrong-label", children: "Billing email" }), _jsx(Input, { "aria-describedby": "showcase-email-error", "aria-invalid": "true", "aria-labelledby": "showcase-email-wrong-label", defaultValue: "amministrazione", id: "showcase-email-wrong", type: "email" }), _jsx(FieldError, { id: "showcase-email-error", children: "Enter a full address, like name@company.it." })] })] })),
94
+ Input: () => (_jsxs("div", { className: "grid max-w-sm gap-4", children: [_jsx(Input, { autoComplete: "organization", id: "showcase-company", label: "Company name", placeholder: "Bizeta Arredamenti" }), _jsx(Input, { "aria-label": "Website, small", defaultValue: "acme", prefix: "https://", size: "sm", suffix: ".com" }), _jsx(Input, { "aria-label": "Website", defaultValue: "acme", prefix: "https://", suffix: ".com" }), _jsx(Input, { error: "Enter a full address, like name@company.it.", id: "showcase-email-error", label: "Billing email", size: "lg", type: "email", defaultValue: "amministrazione", suffix: _jsx(AtSign, { "aria-hidden": "true" }) })] })),
53
95
  InputGroup: InputGroupSpecimen,
54
96
  InputOTP: InputOTPSpecimen,
55
97
  Label: () => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Switch, { id: "showcase-approvals" }), _jsx(Label, { htmlFor: "showcase-approvals", children: "Approvals" })] })),
56
- NativeSelect: () => (_jsxs("div", { className: "grid max-w-sm gap-2", children: [_jsx(Label, { htmlFor: "showcase-zone", children: "Time zone" }), _jsxs(NativeSelect, { defaultValue: "Europe/Rome", id: "showcase-zone", children: [_jsx(NativeSelectOption, { value: "Europe/London", children: "London" }), _jsx(NativeSelectOption, { value: "Europe/Rome", children: "Rome" }), _jsx(NativeSelectOption, { value: "America/New_York", children: "New York" })] })] })),
57
- SettingsField: () => (_jsx("div", { className: "max-w-md", children: _jsx(SettingsField, { description: "The name your Customers read on every message.", id: "showcase-sender", label: "Sender name", children: ({ controlProps }) => _jsx(Input, { ...controlProps, defaultValue: "Acme Quotes" }) }) })),
98
+ NativeSelect: () => (_jsxs("div", { className: "grid max-w-sm gap-4", children: [_jsxs(NativeSelect, { defaultValue: "Europe/Rome", id: "showcase-zone", label: "Time zone", children: [_jsx(NativeSelectOption, { value: "Europe/London", children: "London" }), _jsx(NativeSelectOption, { value: "Europe/Rome", children: "Rome" }), _jsx(NativeSelectOption, { value: "America/New_York", children: "New York" }), _jsx(NativeSelectOption, { value: "Asia/Tokyo", children: "Tokyo" })] }), _jsxs(NativeSelect, { "aria-label": "Time zone, large", defaultValue: "Europe/Rome", prefix: _jsx(Clock, { "aria-hidden": "true" }), size: "lg", children: [_jsx(NativeSelectOption, { value: "Europe/London", children: "London" }), _jsx(NativeSelectOption, { value: "Europe/Rome", children: "Rome" }), _jsx(NativeSelectOption, { value: "America/New_York", children: "New York" }), _jsx(NativeSelectOption, { value: "Asia/Tokyo", children: "Tokyo" })] })] })),
99
+ SettingsRows: SettingsRowsSpecimen,
100
+ SettingsField: () => (_jsx("div", { className: "max-w-md", children: _jsx(SettingsField, { id: "showcase-sender", label: "Sender name", children: ({ controlProps }) => _jsx(Input, { ...controlProps, defaultValue: "Acme Quotes" }) }) })),
58
101
  Slider: SliderSpecimen,
59
- Textarea: () => (_jsxs("div", { className: "grid max-w-md gap-2", children: [_jsx(Label, { htmlFor: "showcase-instructions", children: "Instructions" }), _jsx(Textarea, { id: "showcase-instructions", placeholder: "Reply in Italian, and copy the sales team on every quote." })] })),
102
+ Textarea: () => (_jsxs("div", { className: "grid max-w-md gap-4", children: [_jsx(Textarea, { id: "showcase-instructions", label: "Instructions", placeholder: "Reply in Italian, and copy the sales team on every quote." }), _jsx(Textarea, { error: "Add at least one line the Agent can follow.", id: "showcase-notes", label: "Handover notes", size: "lg" })] })),
60
103
  };
@@ -10,7 +10,6 @@ export declare const MENUS: {
10
10
  Drawer: () => import("react").JSX.Element;
11
11
  DropdownMenu: () => import("react").JSX.Element;
12
12
  GlassControl: () => import("react").JSX.Element;
13
- Menubar: () => import("react").JSX.Element;
14
13
  MenuChoiceRow: typeof MenuRowsSpecimen;
15
14
  Popover: () => import("react").JSX.Element;
16
15
  Sheet: () => import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"menus.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/menus.tsx"],"names":[],"mappings":"AAuFA,iBAAS,mBAAmB,gCA8B3B;AAED,iBAAS,gBAAgB,gCAoBxB;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;CA0IS,CAAC"}
1
+ {"version":3,"file":"menus.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/menus.tsx"],"names":[],"mappings":"AAkHA,iBAAS,mBAAmB,gCA8B3B;AAED,iBAAS,gBAAgB,gCA0BxB;AAqDD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;CA+MS,CAAC"}
@@ -1,25 +1,48 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Copy, Pencil, Settings2 } from "lucide-react";
3
+ import { ArrowRightLeft, ChevronDown, Copy, Pencil, Settings2, Trash2 } from "lucide-react";
4
4
  import { useState } from "react";
5
5
  import { AccountMenu } from "../../components/account-menu.js";
6
6
  import { ActionContextMenu, ActionMenu } from "../../components/action-menu.js";
7
7
  import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "../../components/alert-dialog.js";
8
8
  import { Button } from "../../components/button.js";
9
- import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger, } from "../../components/context-menu.js";
10
- import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "../../components/dialog.js";
11
- import { Drawer, DrawerBody, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle, DrawerTrigger, } from "../../components/drawer.js";
12
- import { DropdownMenu, DropdownMenuCommand, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuTrigger, } from "../../components/dropdown-menu.js";
9
+ import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuLink, ContextMenuTrigger, } from "../../components/context-menu.js";
10
+ import { Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "../../components/dialog.js";
11
+ import { Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "../../components/drawer.js";
12
+ import { DropdownMenu, DropdownMenuCommand, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuLink, DropdownMenuSeparator, DropdownMenuTrigger, } from "../../components/dropdown-menu.js";
13
13
  import { GlassControl } from "../../components/glass-control.js";
14
14
  import { Input } from "../../components/input.js";
15
- import { Label } from "../../components/label.js";
16
- import { Menubar, MenubarContent, MenubarItem, MenubarMenu, MenubarTrigger, } from "../../components/menubar.js";
15
+ import { Kbd } from "../../components/kbd.js";
17
16
  import { MenuChoiceRow } from "../../components/menu-choice-row.js";
18
17
  import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, } from "../../components/popover.js";
19
- import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger, } from "../../components/sheet.js";
18
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../components/select.js";
19
+ import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from "../../components/sheet.js";
20
20
  import { ThemeModeMenu } from "../../components/theme-mode-switcher.js";
21
21
  import { nothing, RECORD_COMMANDS } from "../samples.js";
22
22
  const THEME_LABELS = { light: "Light", dark: "Dark", system: "System" };
23
+ const REGIONS = [
24
+ { value: "fra1", label: "Frankfurt" },
25
+ { value: "mxp1", label: "Milan" },
26
+ { value: "cdg1", label: "Paris" },
27
+ ];
28
+ const LOCKED_RECORD_COMMANDS = [
29
+ { label: "Rename mailbox", icon: _jsx(Pencil, {}), onClick: nothing },
30
+ {
31
+ label: "Transfer mailbox",
32
+ icon: _jsx(ArrowRightLeft, {}),
33
+ locked: true,
34
+ reason: "Only an owner can transfer a mailbox",
35
+ onClick: nothing,
36
+ },
37
+ {
38
+ label: "Remove mailbox",
39
+ icon: _jsx(Trash2, {}),
40
+ destructive: true,
41
+ locked: true,
42
+ reason: "Only an owner can remove a mailbox",
43
+ onClick: nothing,
44
+ },
45
+ ];
23
46
  function AccountMenuSpecimen() {
24
47
  const [theme, setTheme] = useState("system");
25
48
  const [language, setLanguage] = useState("en");
@@ -31,7 +54,7 @@ function AccountMenuSpecimen() {
31
54
  { value: "it", label: "Italiano", content: "IT" },
32
55
  ],
33
56
  value: language,
34
- }, settings: { label: "Settings", onClick: nothing }, side: "bottom", signOut: {
57
+ }, settings: { label: "Account settings", onClick: nothing }, side: "bottom", signOut: {
35
58
  label: "Sign out",
36
59
  pendingLabel: "Signing out",
37
60
  pending: false,
@@ -41,24 +64,31 @@ function AccountMenuSpecimen() {
41
64
  function MenuRowsSpecimen() {
42
65
  const [theme, setTheme] = useState("system");
43
66
  const [density, setDensity] = useState("comfortable");
44
- return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { variant: "outline", children: "Preferences" }) }), _jsxs(DropdownMenuContent, { align: "start", children: [_jsx(ThemeModeMenu, { label: "Theme", labels: THEME_LABELS, onValueChange: setTheme, value: theme }), _jsx(MenuChoiceRow, { label: "Density", onValueChange: setDensity, options: [
67
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { suffix: _jsx(ChevronDown, {}), variant: "outline", children: "Preferences" }) }), _jsxs(DropdownMenuContent, { align: "start", children: [_jsx(ThemeModeMenu, { label: "Theme", labels: THEME_LABELS, onValueChange: setTheme, value: theme }), _jsx(MenuChoiceRow, { label: "Density", onValueChange: setDensity, options: [
45
68
  { value: "comfortable", label: "Comfortable", content: "Aa" },
46
69
  { value: "compact", label: "Compact", content: "aa" },
47
70
  ], value: density })] })] }));
48
71
  }
72
+ function CreateDatabaseDialog() {
73
+ const [region, setRegion] = useState("fra1");
74
+ const regionLabel = REGIONS.find((option) => option.value === region)?.label;
75
+ return (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { render: _jsx(Button, { variant: "outline", children: "Create database" }) }), _jsxs(DialogContent, { closeLabel: "Close", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Create database" }), _jsx(DialogDescription, { children: "The region cannot be changed once it exists." })] }), _jsx(DialogBody, { children: _jsx("div", { className: "grid gap-2", children: _jsxs(Select, { onValueChange: (next) => setRegion(next ?? "fra1"), value: region, children: [_jsx(SelectTrigger, { id: "showcase-database-region", label: "Region", children: _jsx(SelectValue, { children: regionLabel }) }), _jsx(SelectContent, { children: REGIONS.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))) })] }) }) }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { render: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(Button, { children: "Create database" })] })] })] }));
76
+ }
77
+ function RossiOtticaSheet() {
78
+ return (_jsxs(SheetContent, { closeLabel: "Close", children: [_jsxs(SheetHeader, { children: [_jsx(SheetTitle, { children: "Rossi Ottica" }), _jsx(SheetDescription, { children: "Partner since March 2026, 4 customers." })] }), _jsxs(SheetFooter, { children: [_jsx(SheetClose, { render: _jsx(Button, { variant: "outline", children: "Close" }) }), _jsx(Button, { children: "Open Rossi Ottica" })] })] }));
79
+ }
49
80
  export const MENUS = {
50
81
  AccountMenu: AccountMenuSpecimen,
51
82
  ActionContextMenu: () => (_jsx(ActionContextMenu, { commands: RECORD_COMMANDS, label: "More for pec@acme.it", record: "pec@acme.it", children: _jsx("div", { className: "max-w-sm rounded-md border border-dashed border-border p-6 text-sm text-muted-foreground", children: "Right-click pec@acme.it" }) })),
52
- ActionMenu: () => (_jsxs("div", { className: "flex items-center gap-2 text-sm", children: ["pec@acme.it", _jsx(ActionMenu, { commands: RECORD_COMMANDS, label: "More for pec@acme.it", record: "pec@acme.it" })] })),
83
+ ActionMenu: () => (_jsxs("div", { className: "grid gap-2 text-sm", children: [_jsxs("div", { className: "flex items-center gap-2", children: ["pec@acme.it", _jsx(ActionMenu, { commands: RECORD_COMMANDS, label: "More for pec@acme.it", record: "pec@acme.it" })] }), _jsxs("div", { className: "flex items-center gap-2", children: ["fatture@acme.it", _jsx(ActionMenu, { commands: LOCKED_RECORD_COMMANDS, label: "More for fatture@acme.it", record: "fatture@acme.it" })] })] })),
53
84
  AlertDialog: () => (_jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { render: _jsx(Button, { variant: "outline", children: "Remove mailbox" }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Remove pec@acme.it" }), _jsx(AlertDialogDescription, { children: "Agents stop reading and sending from this address." })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", children: "Remove mailbox" })] })] })] })),
54
- ContextMenu: () => (_jsxs(ContextMenu, { children: [_jsx(ContextMenuTrigger, { className: "block max-w-sm rounded-md border border-dashed border-border p-6 text-sm text-muted-foreground", children: "Right-click the canvas" }), _jsxs(ContextMenuContent, { children: [_jsx(ContextMenuItem, { children: "Paste" }), _jsx(ContextMenuItem, { children: "Select all" })] })] })),
55
- Dialog: () => (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { render: _jsx(Button, { variant: "outline", children: "Add MCP server" }) }), _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Add MCP server" }), _jsx(DialogDescription, { children: "Agents can call its tools once it is added." })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "showcase-mcp-url", children: "Address" }), _jsx(Input, { id: "showcase-mcp-url", placeholder: "https://mcp.acme.it", type: "url" })] }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { render: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(Button, { children: "Add server" })] })] })] })),
56
- Drawer: () => (_jsxs(Drawer, { children: [_jsx(DrawerTrigger, { render: _jsx(Button, { variant: "outline", children: "Connect Telegram" }) }), _jsxs(DrawerContent, { children: [_jsxs(DrawerHeader, { children: [_jsx(DrawerTitle, { children: "Connect Telegram" }), _jsx(DrawerDescription, { children: "Step 1 of 2: open the bot on your phone." })] }), _jsx(DrawerBody, { className: "text-sm text-muted-foreground", children: "Scan the code with Telegram, then come back here." })] })] })),
57
- DropdownMenu: () => (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { variant: "outline", children: "Actions" }) }), _jsx(DropdownMenuContent, { align: "start", children: _jsxs(DropdownMenuGroup, { children: [_jsx(DropdownMenuLabel, { children: "pec@acme.it" }), _jsx(DropdownMenuCommand, { icon: _jsx(Pencil, {}), children: "Rename mailbox" }), _jsx(DropdownMenuCommand, { disabled: true, icon: _jsx(Copy, {}), reason: "Only an owner can copy it", children: "Copy password" })] }) })] })),
85
+ ContextMenu: () => (_jsxs(ContextMenu, { children: [_jsx(ContextMenuTrigger, { className: "block max-w-sm rounded-md border border-dashed border-border p-6 text-sm text-muted-foreground", children: "Right-click the canvas" }), _jsxs(ContextMenuContent, { "aria-label": "Canvas", children: [_jsx(ContextMenuItem, { children: "Paste" }), _jsx(ContextMenuItem, { children: "Select all" }), _jsx(ContextMenuLink, { href: "#canvas-guide", children: "Open canvas guide" })] })] })),
86
+ Dialog: () => (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(Dialog, { children: [_jsx(DialogTrigger, { render: _jsx(Button, { variant: "outline", children: "Add MCP server" }) }), _jsxs(DialogContent, { closeLabel: "Close", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Add MCP server" }), _jsx(DialogDescription, { children: "Agents can call its tools once it is added." })] }), _jsx(DialogBody, { children: _jsx(Input, { id: "showcase-mcp-url", label: "Address", placeholder: "https://mcp.acme.it", type: "url" }) }), _jsxs(DialogFooter, { children: [_jsx(DialogClose, { render: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(Button, { children: "Add server" })] })] })] }), _jsx(CreateDatabaseDialog, {}), _jsxs(Dialog, { children: [_jsx(DialogTrigger, { render: _jsx(Button, { variant: "outline", children: "Connect mailbox" }) }), _jsxs(DialogContent, { closeLabel: "Close", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "pec@acme.it is connected" }), _jsx(DialogDescription, { children: "Agents can read and send from this address." })] }), _jsx(DialogFooter, { children: _jsx(DialogClose, { render: _jsx(Button, { children: "Done" }) }) })] })] })] })),
87
+ Drawer: () => (_jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [_jsxs(Drawer, { height: 320, children: [_jsx(DrawerTrigger, { render: _jsx(Button, { variant: "outline", children: "Connect Telegram" }) }), _jsxs(DrawerContent, { children: [_jsxs(DrawerHeader, { children: [_jsx(DrawerTitle, { children: "Connect Telegram" }), _jsx(DrawerDescription, { children: "Step 1 of 2: open the bot on your phone." })] }), _jsx(DrawerBody, { className: "text-sm text-muted-foreground", children: "Scan the code with Telegram, then come back here." }), _jsxs(DrawerFooter, { children: [_jsx(Button, { children: "Continue" }), _jsx(DrawerClose, { render: _jsx(Button, { variant: "outline", children: "Cancel" }) })] })] })] }), _jsx("span", { className: "text-sm text-muted-foreground", children: "Phone only: it rises from the bottom edge." })] })),
88
+ DropdownMenu: () => (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { suffix: _jsx(ChevronDown, {}), variant: "outline", children: "Actions" }) }), _jsxs(DropdownMenuContent, { align: "start", children: [_jsxs(DropdownMenuGroup, { children: [_jsx(DropdownMenuLabel, { children: "pec@acme.it" }), _jsx(DropdownMenuCommand, { icon: _jsx(Pencil, {}), children: "Rename mailbox" }), _jsx(DropdownMenuCommand, { icon: _jsx(Copy, {}), suffix: _jsx(Kbd, { meta: true, size: "sm", children: "C" }), children: "Copy address" }), _jsx(DropdownMenuCommand, { disabledReason: "Connect the mailbox first", icon: _jsx(Copy, {}), children: "Copy password" })] }), _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuCommand, { icon: _jsx(Trash2, {}), variant: "destructive", children: "Remove mailbox" })] })] }), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { suffix: _jsx(ChevronDown, {}), variant: "outline", children: "Manage" }) }), _jsx(DropdownMenuContent, { align: "start", children: _jsxs(DropdownMenuGroup, { children: [_jsx(DropdownMenuLabel, { children: "Rossi Ottica" }), _jsx(DropdownMenuLink, { href: "#billing", children: "Open billing" }), _jsx(DropdownMenuCommand, { icon: _jsx(ArrowRightLeft, {}), locked: true, reason: "Only an owner can transfer a mailbox", children: "Transfer mailbox" })] }) })] })] })),
58
89
  GlassControl: () => (_jsxs(GlassControl, { className: "flex w-fit items-center gap-2 p-2", children: [_jsx(Button, { variant: "ghost", children: "Day" }), _jsx(Button, { variant: "ghost", children: "Week" }), _jsx(Button, { variant: "ghost", children: "Month" })] })),
59
- Menubar: () => (_jsxs(Menubar, { children: [_jsxs(MenubarMenu, { children: [_jsx(MenubarTrigger, { children: "File" }), _jsxs(MenubarContent, { children: [_jsx(MenubarItem, { children: "New chat" }), _jsx(MenubarItem, { children: "Export chat" })] })] }), _jsxs(MenubarMenu, { children: [_jsx(MenubarTrigger, { children: "Edit" }), _jsx(MenubarContent, { children: _jsx(MenubarItem, { children: "Copy message" }) })] })] })),
60
90
  MenuChoiceRow: MenuRowsSpecimen,
61
91
  Popover: () => (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { render: _jsx(Button, { variant: "outline", children: "Filter" }) }), _jsx(PopoverContent, { align: "start", children: _jsxs(PopoverHeader, { children: [_jsx(PopoverTitle, { children: "Filter skills" }), _jsx(PopoverDescription, { children: "Show the skills every Agent has." })] }) })] })),
62
- Sheet: () => (_jsxs(Sheet, { children: [_jsx(SheetTrigger, { render: _jsx(Button, { variant: "outline", children: "Inspect Rossi Ottica" }) }), _jsx(SheetContent, { children: _jsxs(SheetHeader, { children: [_jsx(SheetTitle, { children: "Rossi Ottica" }), _jsx(SheetDescription, { children: "Partner since March 2026, 4 customers." })] }) })] })),
92
+ Sheet: () => (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(Sheet, { children: [_jsx(SheetTrigger, { render: _jsx(Button, { variant: "outline", children: "Inspect Rossi Ottica" }) }), _jsx(RossiOtticaSheet, {})] }), _jsxs(Sheet, { modal: true, children: [_jsx(SheetTrigger, { render: _jsx(Button, { variant: "outline", children: "Inspect Rossi Ottica, page dimmed" }) }), _jsx(RossiOtticaSheet, {})] })] })),
63
93
  ThemeModeMenu: MenuRowsSpecimen,
64
94
  };