@nadicodeai/ui 12.1.165 → 12.1.167

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 (367) hide show
  1. package/AGENTS.md +8 -9
  2. package/README.md +2 -17
  3. package/dist/components/accordion.d.ts.map +1 -1
  4. package/dist/components/accordion.js +2 -1
  5. package/dist/components/account-menu.d.ts.map +1 -1
  6. package/dist/components/account-menu.js +5 -3
  7. package/dist/components/activity-calendar.d.ts.map +1 -1
  8. package/dist/components/activity-calendar.js +3 -2
  9. package/dist/components/agent-card.js +1 -1
  10. package/dist/components/agent-orb.d.ts.map +1 -1
  11. package/dist/components/agent-orb.js +1 -0
  12. package/dist/components/agent-profile.d.ts.map +1 -1
  13. package/dist/components/agent-profile.js +7 -4
  14. package/dist/components/alert-dialog.d.ts +1 -1
  15. package/dist/components/alert-dialog.d.ts.map +1 -1
  16. package/dist/components/alert-dialog.js +3 -3
  17. package/dist/components/app-mark.js +1 -1
  18. package/dist/components/avatar.js +8 -8
  19. package/dist/components/badge.d.ts +11 -16
  20. package/dist/components/badge.d.ts.map +1 -1
  21. package/dist/components/badge.js +7 -43
  22. package/dist/components/breadcrumb.d.ts.map +1 -1
  23. package/dist/components/breadcrumb.js +3 -2
  24. package/dist/components/button.d.ts +5 -21
  25. package/dist/components/button.d.ts.map +1 -1
  26. package/dist/components/button.js +6 -76
  27. package/dist/components/calendar.d.ts +1 -1
  28. package/dist/components/calendar.d.ts.map +1 -1
  29. package/dist/components/calendar.js +3 -3
  30. package/dist/components/card-row.js +1 -1
  31. package/dist/components/card.d.ts +4 -1
  32. package/dist/components/card.d.ts.map +1 -1
  33. package/dist/components/card.js +3 -2
  34. package/dist/components/catalog-drawer.d.ts.map +1 -1
  35. package/dist/components/catalog-drawer.js +3 -2
  36. package/dist/components/chart-axis.d.ts.map +1 -1
  37. package/dist/components/chart-axis.js +0 -2
  38. package/dist/components/chart-bar-horizontal.d.ts.map +1 -1
  39. package/dist/components/chart-bar-horizontal.js +16 -14
  40. package/dist/components/chart-card.d.ts.map +1 -1
  41. package/dist/components/chart-card.js +0 -1
  42. package/dist/components/chart.d.ts.map +1 -1
  43. package/dist/components/chart.js +18 -32
  44. package/dist/components/checkbox.d.ts +3 -2
  45. package/dist/components/checkbox.d.ts.map +1 -1
  46. package/dist/components/checkbox.js +4 -3
  47. package/dist/components/choicebox.d.ts +5 -5
  48. package/dist/components/choicebox.d.ts.map +1 -1
  49. package/dist/components/choicebox.js +6 -5
  50. package/dist/components/clearable-input.d.ts.map +1 -1
  51. package/dist/components/clearable-input.js +2 -2
  52. package/dist/components/code-block.d.ts.map +1 -1
  53. package/dist/components/code-block.js +4 -2
  54. package/dist/components/collapsible.js +1 -1
  55. package/dist/components/collection-filters.d.ts.map +1 -1
  56. package/dist/components/collection-filters.js +1 -0
  57. package/dist/components/collection-page.js +1 -1
  58. package/dist/components/collection-sort.d.ts.map +1 -1
  59. package/dist/components/collection-sort.js +1 -4
  60. package/dist/components/collection-toolbar.js +1 -1
  61. package/dist/components/combobox.js +4 -4
  62. package/dist/components/command.d.ts.map +1 -1
  63. package/dist/components/command.js +1 -1
  64. package/dist/components/confirm-dialog.js +2 -2
  65. package/dist/components/context-menu.d.ts +1 -1
  66. package/dist/components/context-menu.d.ts.map +1 -1
  67. package/dist/components/copy-button.js +1 -1
  68. package/dist/components/data-table.d.ts +14 -7
  69. package/dist/components/data-table.d.ts.map +1 -1
  70. package/dist/components/data-table.js +24 -15
  71. package/dist/components/dialog.d.ts +1 -1
  72. package/dist/components/dialog.d.ts.map +1 -1
  73. package/dist/components/dialog.js +2 -2
  74. package/dist/components/drawer.d.ts +4 -4
  75. package/dist/components/drawer.d.ts.map +1 -1
  76. package/dist/components/drawer.js +14 -15
  77. package/dist/components/dropdown-menu.d.ts +1 -1
  78. package/dist/components/dropdown-menu.d.ts.map +1 -1
  79. package/dist/components/dropdown-menu.js +9 -5
  80. package/dist/components/empty-art.js +1 -1
  81. package/dist/components/empty-state.js +2 -2
  82. package/dist/components/entry-scene.d.ts.map +1 -1
  83. package/dist/components/entry-scene.js +2 -3
  84. package/dist/components/field.js +3 -3
  85. package/dist/components/file-diff.d.ts.map +1 -1
  86. package/dist/components/file-diff.js +5 -2
  87. package/dist/components/footer.d.ts +1 -1
  88. package/dist/components/footer.d.ts.map +1 -1
  89. package/dist/components/footer.js +3 -3
  90. package/dist/components/form-dialog.d.ts.map +1 -1
  91. package/dist/components/form-dialog.js +2 -1
  92. package/dist/components/form-drawer.d.ts +7 -9
  93. package/dist/components/form-drawer.d.ts.map +1 -1
  94. package/dist/components/form-drawer.js +5 -5
  95. package/dist/components/form.d.ts +26 -0
  96. package/dist/components/form.d.ts.map +1 -0
  97. package/dist/components/form.js +29 -0
  98. package/dist/components/gauge.js +2 -2
  99. package/dist/components/heatmap/calendar-heatmap.d.ts.map +1 -1
  100. package/dist/components/heatmap/calendar-heatmap.js +15 -13
  101. package/dist/components/hive-scene.d.ts.map +1 -1
  102. package/dist/components/hive-scene.js +3 -1
  103. package/dist/components/hover-card.d.ts +1 -1
  104. package/dist/components/hover-card.d.ts.map +1 -1
  105. package/dist/components/hover-card.js +1 -1
  106. package/dist/components/input-group.d.ts +5 -6
  107. package/dist/components/input-group.d.ts.map +1 -1
  108. package/dist/components/input-group.js +8 -11
  109. package/dist/components/input-otp.d.ts.map +1 -1
  110. package/dist/components/input-otp.js +2 -2
  111. package/dist/components/item.d.ts +1 -1
  112. package/dist/components/item.js +2 -2
  113. package/dist/components/kbd.d.ts +6 -9
  114. package/dist/components/kbd.d.ts.map +1 -1
  115. package/dist/components/kbd.js +7 -3
  116. package/dist/components/message-notice.js +1 -1
  117. package/dist/components/middle-truncate.d.ts.map +1 -1
  118. package/dist/components/middle-truncate.js +1 -0
  119. package/dist/components/model-identity.d.ts +4 -4
  120. package/dist/components/model-identity.d.ts.map +1 -1
  121. package/dist/components/model-identity.js +2 -2
  122. package/dist/components/model-mark.d.ts.map +1 -1
  123. package/dist/components/model-mark.js +4 -2
  124. package/dist/components/multi-select.js +2 -2
  125. package/dist/components/native-select.d.ts.map +1 -1
  126. package/dist/components/native-select.js +2 -6
  127. package/dist/components/notice-banner.js +1 -1
  128. package/dist/components/object-page.js +2 -2
  129. package/dist/components/object-workspace.d.ts.map +1 -1
  130. package/dist/components/object-workspace.js +1 -3
  131. package/dist/components/overview-page.d.ts +1 -1
  132. package/dist/components/overview-page.d.ts.map +1 -1
  133. package/dist/components/overview-page.js +2 -1
  134. package/dist/components/page-actions.d.ts.map +1 -1
  135. package/dist/components/page-actions.js +9 -4
  136. package/dist/components/pairing-code.js +1 -1
  137. package/dist/components/pending-label.d.ts.map +1 -1
  138. package/dist/components/pending-label.js +0 -1
  139. package/dist/components/popover.d.ts +1 -1
  140. package/dist/components/popover.d.ts.map +1 -1
  141. package/dist/components/portal-sidebar-frame.d.ts.map +1 -1
  142. package/dist/components/portal-sidebar-frame.js +1 -1
  143. package/dist/components/product-message.d.ts.map +1 -1
  144. package/dist/components/product-message.js +1 -0
  145. package/dist/components/progress-checklist.d.ts.map +1 -1
  146. package/dist/components/progress-checklist.js +2 -2
  147. package/dist/components/progress.d.ts.map +1 -1
  148. package/dist/components/progress.js +5 -4
  149. package/dist/components/radio-group.js +2 -2
  150. package/dist/components/reading-column.js +1 -1
  151. package/dist/components/record-identity.d.ts.map +1 -1
  152. package/dist/components/record-identity.js +2 -5
  153. package/dist/components/record-list.d.ts +5 -4
  154. package/dist/components/record-list.d.ts.map +1 -1
  155. package/dist/components/record-list.js +31 -17
  156. package/dist/components/record-sheet.js +1 -1
  157. package/dist/components/record-time.d.ts.map +1 -1
  158. package/dist/components/record-time.js +2 -1
  159. package/dist/components/resizable.d.ts.map +1 -1
  160. package/dist/components/resizable.js +1 -1
  161. package/dist/components/row-edit-form.d.ts +2 -1
  162. package/dist/components/row-edit-form.d.ts.map +1 -1
  163. package/dist/components/row-edit-form.js +2 -1
  164. package/dist/components/run-timeline.js +1 -1
  165. package/dist/components/scope-switcher.js +1 -1
  166. package/dist/components/segmented-control.js +1 -1
  167. package/dist/components/select.js +1 -1
  168. package/dist/components/settings-facts.js +1 -1
  169. package/dist/components/settings-section.js +1 -1
  170. package/dist/components/sheet.d.ts +1 -1
  171. package/dist/components/sheet.d.ts.map +1 -1
  172. package/dist/components/sheet.js +1 -1
  173. package/dist/components/sidebar.d.ts +2 -2
  174. package/dist/components/sidebar.d.ts.map +1 -1
  175. package/dist/components/sidebar.js +16 -18
  176. package/dist/components/site-menu.d.ts +28 -0
  177. package/dist/components/site-menu.d.ts.map +1 -0
  178. package/dist/components/site-menu.js +23 -0
  179. package/dist/components/slider.d.ts.map +1 -1
  180. package/dist/components/slider.js +2 -1
  181. package/dist/components/snippet.d.ts +2 -0
  182. package/dist/components/snippet.d.ts.map +1 -1
  183. package/dist/components/snippet.js +13 -6
  184. package/dist/components/sonner.d.ts.map +1 -1
  185. package/dist/components/sonner.js +3 -4
  186. package/dist/components/status-badge.d.ts +1 -1
  187. package/dist/components/status-badge.d.ts.map +1 -1
  188. package/dist/components/switch.js +1 -1
  189. package/dist/components/table-card.js +1 -1
  190. package/dist/components/table-layouts.d.ts +24 -9
  191. package/dist/components/table-layouts.d.ts.map +1 -1
  192. package/dist/components/table-layouts.js +27 -10
  193. package/dist/components/table.js +4 -4
  194. package/dist/components/tabs-nav.d.ts +52 -0
  195. package/dist/components/tabs-nav.d.ts.map +1 -0
  196. package/dist/components/tabs-nav.js +95 -0
  197. package/dist/components/tabs.d.ts +2 -56
  198. package/dist/components/tabs.d.ts.map +1 -1
  199. package/dist/components/tabs.js +2 -91
  200. package/dist/components/text-link.d.ts +1 -2
  201. package/dist/components/text-link.d.ts.map +1 -1
  202. package/dist/components/text-link.js +1 -2
  203. package/dist/components/textarea.d.ts +5 -2
  204. package/dist/components/textarea.d.ts.map +1 -1
  205. package/dist/components/textarea.js +12 -4
  206. package/dist/components/toast.d.ts +2 -0
  207. package/dist/components/toast.d.ts.map +1 -1
  208. package/dist/components/toast.js +4 -0
  209. package/dist/components/toggle-group.d.ts +3 -1
  210. package/dist/components/toggle-group.d.ts.map +1 -1
  211. package/dist/components/toggle-group.js +3 -6
  212. package/dist/components/toggle.js +1 -1
  213. package/dist/components/tooltip.d.ts +12 -12
  214. package/dist/components/tooltip.d.ts.map +1 -1
  215. package/dist/components/tooltip.js +9 -9
  216. package/dist/components/trend-badge.js +2 -2
  217. package/dist/components/update-card.js +1 -1
  218. package/dist/components/usage-meter.d.ts +1 -1
  219. package/dist/components/usage-meter.d.ts.map +1 -1
  220. package/dist/components/usage-meter.js +9 -7
  221. package/dist/components/waiting-line.js +1 -1
  222. package/dist/index.d.ts +3 -7
  223. package/dist/index.d.ts.map +1 -1
  224. package/dist/index.js +3 -7
  225. package/dist/internal/agent-orb-motion.d.ts +4 -1
  226. package/dist/internal/agent-orb-motion.d.ts.map +1 -1
  227. package/dist/internal/agent-orb-motion.js +9 -7
  228. package/dist/internal/agent-orb.d.ts +4 -1
  229. package/dist/internal/agent-orb.d.ts.map +1 -1
  230. package/dist/internal/agent-orb.js +7 -1
  231. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -1
  232. package/dist/internal/assistant-ui/attachment.js +15 -15
  233. package/dist/internal/assistant-ui/follow-up-suggestions.js +1 -1
  234. package/dist/internal/assistant-ui/markdown-text.js +26 -25
  235. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -1
  236. package/dist/internal/assistant-ui/reasoning.js +13 -16
  237. package/dist/internal/assistant-ui/thread.d.ts.map +1 -1
  238. package/dist/internal/assistant-ui/thread.js +22 -16
  239. package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -1
  240. package/dist/internal/assistant-ui/tool-fallback.js +29 -21
  241. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -1
  242. package/dist/internal/assistant-ui/tool-group.js +6 -7
  243. package/dist/internal/assistant-ui/tooltip-icon-button.js +1 -1
  244. package/dist/internal/badge-frame.d.ts +15 -0
  245. package/dist/internal/badge-frame.d.ts.map +1 -0
  246. package/dist/internal/badge-frame.js +44 -0
  247. package/dist/internal/button-classes.d.ts +20 -0
  248. package/dist/internal/button-classes.d.ts.map +1 -0
  249. package/dist/internal/button-classes.js +74 -0
  250. package/dist/internal/catalog-list.d.ts.map +1 -1
  251. package/dist/internal/catalog-list.js +8 -4
  252. package/dist/internal/collection-rail.js +3 -3
  253. package/dist/internal/form-drawer-frame.d.ts +10 -0
  254. package/dist/internal/form-drawer-frame.d.ts.map +1 -0
  255. package/dist/internal/form-drawer-frame.js +9 -0
  256. package/dist/internal/form-submit.d.ts +2 -1
  257. package/dist/internal/form-submit.d.ts.map +1 -1
  258. package/dist/internal/settings-save.d.ts.map +1 -1
  259. package/dist/internal/settings-save.js +4 -2
  260. package/dist/internal/status-mark.d.ts.map +1 -1
  261. package/dist/internal/status-mark.js +4 -1
  262. package/dist/internal/tab-row.d.ts +10 -0
  263. package/dist/internal/tab-row.d.ts.map +1 -0
  264. package/dist/internal/tab-row.js +2 -0
  265. package/dist/internal/table-compact-line.d.ts +1 -1
  266. package/dist/internal/table-compact-line.d.ts.map +1 -1
  267. package/dist/internal/table-compact-line.js +1 -1
  268. package/dist/internal/tooltip-content-frame.d.ts +14 -0
  269. package/dist/internal/tooltip-content-frame.d.ts.map +1 -0
  270. package/dist/internal/tooltip-content-frame.js +11 -0
  271. package/dist/lib/css-variables.d.ts +8 -0
  272. package/dist/lib/css-variables.d.ts.map +1 -0
  273. package/dist/lib/css-variables.js +4 -0
  274. package/dist/lib/merge-tokens.generated.js +1 -1
  275. package/dist/lib/use-copy-to-clipboard.d.ts.map +1 -1
  276. package/dist/lib/use-copy-to-clipboard.js +1 -2
  277. package/dist/showcase/samples.js +1 -1
  278. package/dist/showcase/specimens/choices.d.ts.map +1 -1
  279. package/dist/showcase/specimens/choices.js +3 -2
  280. package/dist/showcase/specimens/compositions.d.ts.map +1 -1
  281. package/dist/showcase/specimens/compositions.js +7 -5
  282. package/dist/showcase/specimens/data.d.ts.map +1 -1
  283. package/dist/showcase/specimens/data.js +1 -1
  284. package/dist/showcase/specimens/feedback.d.ts.map +1 -1
  285. package/dist/showcase/specimens/feedback.js +1 -2
  286. package/dist/showcase/specimens/index.d.ts +2 -0
  287. package/dist/showcase/specimens/index.d.ts.map +1 -1
  288. package/dist/showcase/specimens/inputs.d.ts +1 -0
  289. package/dist/showcase/specimens/inputs.d.ts.map +1 -1
  290. package/dist/showcase/specimens/inputs.js +5 -2
  291. package/dist/showcase/specimens/menus.d.ts +1 -0
  292. package/dist/showcase/specimens/menus.d.ts.map +1 -1
  293. package/dist/showcase/specimens/menus.js +7 -2
  294. package/dist/showcase/specimens/navigation.d.ts.map +1 -1
  295. package/dist/showcase/specimens/navigation.js +6 -5
  296. package/dist/showcase/specimens/status.d.ts.map +1 -1
  297. package/dist/showcase/specimens/status.js +4 -4
  298. package/dist/showcase/usage.generated.d.ts +1 -1
  299. package/dist/showcase/usage.generated.d.ts.map +1 -1
  300. package/dist/showcase/usage.generated.js +40 -18
  301. package/dist/standalone/index.js +2 -2
  302. package/dist/standalone/orb-page.js +10 -8
  303. package/dist/styles/components.css +14 -1
  304. package/package.json +32 -33
  305. package/dist/eslint/index.js +0 -224
  306. package/dist/eslint/rules/badge-is-static-label.js +0 -93
  307. package/dist/eslint/rules/button-icon-slot.js +0 -102
  308. package/dist/eslint/rules/button-link-for-navigation.js +0 -146
  309. package/dist/eslint/rules/button-no-aria-label-with-text.js +0 -75
  310. package/dist/eslint/rules/button-type-roles-only-in-buttons.js +0 -83
  311. package/dist/eslint/rules/choice-control-has-a-name.js +0 -98
  312. package/dist/eslint/rules/choice-group-in-fieldset.js +0 -86
  313. package/dist/eslint/rules/command-shortcut-single-owner.js +0 -118
  314. package/dist/eslint/rules/confirm-dialog-words.js +0 -63
  315. package/dist/eslint/rules/data-table-one-unsized-column.js +0 -96
  316. package/dist/eslint/rules/destructive-action-placement.js +0 -69
  317. package/dist/eslint/rules/disabled-choice-says-why.js +0 -71
  318. package/dist/eslint/rules/disabled-control-appearance.js +0 -75
  319. package/dist/eslint/rules/ellipsis-opens-a-dialog.js +0 -110
  320. package/dist/eslint/rules/empty-state-owner.js +0 -145
  321. package/dist/eslint/rules/input-group-owners.js +0 -155
  322. package/dist/eslint/rules/jsx-class-utility.js +0 -200
  323. package/dist/eslint/rules/kbd-children-no-modifier-text.js +0 -128
  324. package/dist/eslint/rules/literal-text.js +0 -41
  325. package/dist/eslint/rules/menu-owner.js +0 -75
  326. package/dist/eslint/rules/middle-truncate-placement.js +0 -69
  327. package/dist/eslint/rules/no-app-feature-component.js +0 -100
  328. package/dist/eslint/rules/no-bare-button-label.js +0 -55
  329. package/dist/eslint/rules/no-choice-control-wrapper.js +0 -97
  330. package/dist/eslint/rules/no-comment.js +0 -77
  331. package/dist/eslint/rules/no-control-in-read-only-surface.js +0 -106
  332. package/dist/eslint/rules/no-decorative-icon.js +0 -164
  333. package/dist/eslint/rules/no-deprecated-zod-api.js +0 -215
  334. package/dist/eslint/rules/no-global-patch.js +0 -115
  335. package/dist/eslint/rules/no-hand-built-busy.js +0 -104
  336. package/dist/eslint/rules/no-hand-built-theme-picker.js +0 -144
  337. package/dist/eslint/rules/no-hand-built-tile.js +0 -41
  338. package/dist/eslint/rules/no-hand-formatted-date.js +0 -87
  339. package/dist/eslint/rules/no-hand-stacked-avatars.js +0 -67
  340. package/dist/eslint/rules/no-nested-collapse.js +0 -60
  341. package/dist/eslint/rules/no-package-component-redefinition.js +0 -175
  342. package/dist/eslint/rules/no-search-in-form.js +0 -47
  343. package/dist/eslint/rules/no-shadcn-appearance-override.js +0 -305
  344. package/dist/eslint/rules/no-shell-prompt-in-snippet.js +0 -74
  345. package/dist/eslint/rules/no-stock-error-words.js +0 -56
  346. package/dist/eslint/rules/no-subject-derived-expectation.js +0 -183
  347. package/dist/eslint/rules/no-tooltip-around-labelled-field.js +0 -72
  348. package/dist/eslint/rules/no-weight-class-on-strong-in-type-role.js +0 -57
  349. package/dist/eslint/rules/no-write-in-subscription.js +0 -140
  350. package/dist/eslint/rules/one-submenu-level.js +0 -43
  351. package/dist/eslint/rules/one-toast-per-flow.js +0 -91
  352. package/dist/eslint/rules/option-count.js +0 -167
  353. package/dist/eslint/rules/page-command-link-not-render.js +0 -43
  354. package/dist/eslint/rules/page-composition.js +0 -232
  355. package/dist/eslint/rules/progress-needs-name.js +0 -57
  356. package/dist/eslint/rules/rendered-import.js +0 -121
  357. package/dist/eslint/rules/server-action-discipline.js +0 -233
  358. package/dist/eslint/rules/settings-limit-in-footer.js +0 -94
  359. package/dist/eslint/rules/skeleton-in-region.js +0 -80
  360. package/dist/eslint/rules/sortable-heading-uses-sort.js +0 -79
  361. package/dist/eslint/rules/table-cell-inset-owner.js +0 -107
  362. package/dist/eslint/rules/tabs-selection-is-controlled.js +0 -47
  363. package/dist/eslint/rules/test-files-from-one-definition.js +0 -67
  364. package/dist/eslint/rules/tooltip-only-arrow.js +0 -38
  365. package/dist/eslint/rules/tooltip-trigger-accessible-name.js +0 -114
  366. package/dist/eslint/rules/workspace-declares-imports.js +0 -163
  367. package/dist/eslint/strict-design-system.js +0 -250
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "../components/sheet.js";
4
+ import { guardUnsaved } from "./unsaved-guard.js";
5
+ /** The right-side sheet that `FormDrawer` and `CatalogDrawer` both draw. */
6
+ export function FormDrawerFrame(props) {
7
+ const { open, onOpenChange, onOpenChangeComplete, title, description, closeLabel, children, initialFocus, finalFocus = true, unsaved, } = props;
8
+ return (_jsx(Sheet, { modal: true, open: open, onOpenChange: guardUnsaved(onOpenChange, unsaved), onOpenChangeComplete: onOpenChangeComplete, children: _jsxs(SheetContent, { closeLabel: closeLabel, finalFocus: finalFocus, initialFocus: initialFocus, side: "right", children: [_jsxs(SheetHeader, { className: "pr-12", children: [props.job === "steps" ? (_jsx("p", { className: "font-label-mono text-label-mono text-muted-foreground", "data-slot": "form-drawer-progress", children: props.progress })) : null, _jsx(SheetTitle, { className: "wrap-break-word", children: title }), description ? _jsx(SheetDescription, { children: description }) : null] }), children] }) }));
9
+ }
@@ -1,4 +1,5 @@
1
1
  import type { ComponentProps, ReactNode } from "react";
2
+ import type { Form } from "../components/form.js";
2
3
  /** The save of a drawer's, a dialog's or a row's form. */
3
4
  export type FormSubmit = {
4
5
  label: string;
@@ -15,7 +16,7 @@ export type FormSubmit = {
15
16
  /** The button's own word while the save runs: the label's -ing form, *Saving*. */
16
17
  pendingLabel: string;
17
18
  });
18
- export type FormProps = Omit<ComponentProps<"form">, "children" | "className"> & {
19
+ export type FormProps = Omit<ComponentProps<typeof Form>, "children" | "className"> & {
19
20
  cancelLabel: string;
20
21
  submit: FormSubmit;
21
22
  /** A refusal or a failure of the save, above the footer, where the button is. */
@@ -1 +1 @@
1
- {"version":3,"file":"form-submit.d.ts","sourceRoot":"","sources":["../../src/internal/form-submit.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,CACA;IAAE,OAAO,CAAC,EAAE,SAAS,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C;IACE,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,YAAY,EAAE,MAAM,CAAC;CACtB,CACJ,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAoCF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,WAAmB,GACpB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,+BAeA"}
1
+ {"version":3,"file":"form-submit.d.ts","sourceRoot":"","sources":["../../src/internal/form-submit.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,CACA;IAAE,OAAO,CAAC,EAAE,SAAS,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C;IACE,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,YAAY,EAAE,MAAM,CAAC;CACtB,CACJ,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAoCF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,WAAmB,GACpB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,+BAeA"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-save.d.ts","sourceRoot":"","sources":["../../src/internal/settings-save.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAMf,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAOtF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;;;OAIG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACpE,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mIAAmI;IACnI,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAuGF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAwGA;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,sCAqC1D"}
1
+ {"version":3,"file":"settings-save.d.ts","sourceRoot":"","sources":["../../src/internal/settings-save.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EASf,MAAM,OAAO,CAAC;AAOf,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAOtF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;;;OAIG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACpE,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mIAAmI;IACnI,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAuGF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA0GA;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,sCAqC1D"}
@@ -1,9 +1,10 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { createContext, startTransition, use, useCallback, useEffect, useLayoutEffect, useRef, useState, } from "react";
3
+ import { createContext, startTransition, use, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from "react";
4
4
  import { useFormStatus } from "react-dom";
5
5
  import { Button } from "../components/button.js";
6
6
  import { FieldError } from "../components/field.js";
7
+ import { Form } from "../components/form.js";
7
8
  import { MessageNotice } from "../components/message-notice.js";
8
9
  import { messageSentences } from "../components/product-message.js";
9
10
  import { CardContent } from "../components/card.js";
@@ -100,6 +101,7 @@ export function SettingsSaveForm({ save, titleId, children, }) {
100
101
  element.addEventListener("reset", onReset);
101
102
  return () => element.removeEventListener("reset", onReset);
102
103
  }, [controlled]);
104
+ const saveContext = useMemo(() => ({ failure, claim }), [failure, claim]);
103
105
  // A toast's store renders at once, outside the transition that ends the save, so `saved` waits for the commit
104
106
  // that ends it, or for the section to close with it.
105
107
  const announce = useCallback(() => {
@@ -116,7 +118,7 @@ export function SettingsSaveForm({ save, titleId, children, }) {
116
118
  }, [announce]);
117
119
  const changed = save.changed ?? fieldsChanged;
118
120
  const sectionFailure = failure && (failure.field === undefined || !claimedFields.has(failure.field)) ? failure : null;
119
- return (_jsx(SettingsSaveContext, { value: { failure, claim }, children: _jsxs("form", { ref: form, "aria-labelledby": titleId, className: "contents", "data-slot": "settings-section-form", action: async (formData) => {
121
+ return (_jsx(SettingsSaveContext, { value: saveContext, children: _jsxs(Form, { ref: form, "aria-labelledby": titleId, className: "contents", "data-slot": "settings-section-form", action: async (formData) => {
120
122
  const result = await save.action(formData);
121
123
  keepValuesOnReset.current = result !== null;
122
124
  if (result === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"status-mark.d.ts","sourceRoot":"","sources":["../../src/internal/status-mark.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,aAAa,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AA+GpE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,aAAa,EAAE,CAM9E,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;CAAsC,CAAC;AAgB1E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMtF,CAAC"}
1
+ {"version":3,"file":"status-mark.d.ts","sourceRoot":"","sources":["../../src/internal/status-mark.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,aAAa,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAkHpE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,aAAa,EAAE,CAM9E,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;CAAsC,CAAC;AAgB1E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMtF,CAAC"}
@@ -45,7 +45,10 @@ const MARKS = {
45
45
  ring: { outline: { kind: "circle", r: 6.7 }, hollow: true },
46
46
  };
47
47
  function sides(corners) {
48
- return corners.map((start, index) => [start, corners[(index + 1) % corners.length]]);
48
+ return corners.flatMap((start, index) => {
49
+ const end = corners[(index + 1) % corners.length];
50
+ return end === undefined ? [] : [[start, end]];
51
+ });
49
52
  }
50
53
  function contains(outline, [x, y]) {
51
54
  if (outline.kind === "circle")
@@ -0,0 +1,10 @@
1
+ /** What a row of `Tabs` and a row of `TabsNav` links share: the row's required name and one tab's shape. */
2
+ export type TabGroupName = {
3
+ "aria-label": string;
4
+ "aria-labelledby"?: string | undefined;
5
+ } | {
6
+ "aria-labelledby": string;
7
+ "aria-label"?: string | undefined;
8
+ };
9
+ export declare const tabShape = "nc-transition-paint relative inline-flex shrink-0 h-nadicode-control-height-sm min-h-touch-target min-w-touch-target items-center justify-center gap-1.5 rounded-sm px-3 text-label-sm font-normal whitespace-nowrap text-muted-foreground not-aria-disabled:hover:text-foreground aria-disabled:cursor-not-allowed focus-visible:-outline-offset-2 [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 group-data-[variant=line]/tabs-list:rounded-none group-data-[variant=line]/tabs-list:text-body-sm";
10
+ //# sourceMappingURL=tab-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-row.d.ts","sourceRoot":"","sources":["../../src/internal/tab-row.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAE5G,MAAM,MAAM,YAAY,GACpB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAChE;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAErE,eAAO,MAAM,QAAQ,8mBACwlB,CAAC"}
@@ -0,0 +1,2 @@
1
+ /** What a row of `Tabs` and a row of `TabsNav` links share: the row's required name and one tab's shape. */
2
+ export const tabShape = "nc-transition-paint relative inline-flex shrink-0 h-nadicode-control-height-sm min-h-touch-target min-w-touch-target items-center justify-center gap-1.5 rounded-sm px-3 text-label-sm font-normal whitespace-nowrap text-muted-foreground not-aria-disabled:hover:text-foreground aria-disabled:cursor-not-allowed focus-visible:-outline-offset-2 [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 group-data-[variant=line]/tabs-list:rounded-none group-data-[variant=line]/tabs-list:text-body-sm";
@@ -10,7 +10,7 @@ export type TableDetailFact = {
10
10
  besideName?: boolean;
11
11
  };
12
12
  /** A facts line reads a `Tag` as its text and a block value inline. */
13
- export declare const detailFactsLine = "[&_[data-slot=tag]]:contents [&>span>:is(div,p,.block,.grid,.flex)]:inline";
13
+ export declare const detailFactsLine = "**:data-[slot=tag]:contents [&>span>:is(div,p,.block,.grid,.flex)]:inline";
14
14
  export declare const detailFactsWrap = "[&_:not(.sr-only,[data-slot=badge],[data-slot=badge]_*)]:whitespace-normal";
15
15
  export declare function DetailFacts({ facts, leadingSeparator, }: {
16
16
  facts: readonly TableDetailFact[];
@@ -1 +1 @@
1
- {"version":3,"file":"table-compact-line.d.ts","sourceRoot":"","sources":["../../src/internal/table-compact-line.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,4HAA4H;IAC5H,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wGAAwG;IACxG,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,+EACkD,CAAC;AAE/E,eAAO,MAAM,eAAe,+EACkD,CAAC;AAE/E,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,gBAAwB,GACzB,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,uBAQA;AAED,KAAK,qBAAqB,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AAI/F,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,qBAAqB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAEvD;AAED,4IAA4I;AAC5I,wBAAgB,iBAAiB,6BAahC;AAED,2KAA2K;AAC3K,wBAAgB,qBAAqB,6BAkBpC;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAEA;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD"}
1
+ {"version":3,"file":"table-compact-line.d.ts","sourceRoot":"","sources":["../../src/internal/table-compact-line.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,4HAA4H;IAC5H,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wGAAwG;IACxG,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,8EACiD,CAAC;AAE9E,eAAO,MAAM,eAAe,+EACkD,CAAC;AAE/E,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,gBAAwB,GACzB,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,uBAQA;AAED,KAAK,qBAAqB,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AAI/F,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,qBAAqB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAEvD;AAED,4IAA4I;AAC5I,wBAAgB,iBAAiB,6BAahC;AAED,2KAA2K;AAC3K,wBAAgB,qBAAqB,6BAkBpC;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAEA;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD"}
@@ -4,7 +4,7 @@ import * as React from "react";
4
4
  import { tableCompactLayouts } from "../components/table-layouts.js";
5
5
  import { cn } from "../lib/utils.js";
6
6
  /** A facts line reads a `Tag` as its text and a block value inline. */
7
- export const detailFactsLine = "[&_[data-slot=tag]]:contents [&>span>:is(div,p,.block,.grid,.flex)]:inline";
7
+ export const detailFactsLine = "**:data-[slot=tag]:contents [&>span>:is(div,p,.block,.grid,.flex)]:inline";
8
8
  export const detailFactsWrap = "[&_:not(.sr-only,[data-slot=badge],[data-slot=badge]_*)]:whitespace-normal";
9
9
  export function DetailFacts({ facts, leadingSeparator = false, }) {
10
10
  return facts.map((fact, index) => (_jsxs("span", { children: [index > 0 || leadingSeparator ? _jsx("span", { "aria-hidden": "true", children: " \u00B7 " }) : null, _jsxs("span", { className: "sr-only", children: [fact.label, ": "] }), fact.value] }, fact.id)));
@@ -0,0 +1,14 @@
1
+ import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
2
+ import type { PresentContent } from "./present-content.js";
3
+ type TooltipContentFrameProps = TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset"> & {
4
+ /** What the tooltip says; a tooltip without it does not compile. */
5
+ children: PresentContent;
6
+ /** The stem pointing at the trigger; `false` for a tooltip that sits against it. */
7
+ arrow?: boolean;
8
+ /** Centres the text of a tooltip that wraps; `false` left-aligns it. */
9
+ centerText?: boolean;
10
+ };
11
+ /** The popup `TooltipContent` draws; only the package passes it content other than text. */
12
+ declare function TooltipContentFrame({ className, side, sideOffset, align, alignOffset, arrow, centerText, children, ...props }: TooltipContentFrameProps): import("react").JSX.Element;
13
+ export { TooltipContentFrame, type TooltipContentFrameProps };
14
+ //# sourceMappingURL=tooltip-content-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip-content-frame.d.ts","sourceRoot":"","sources":["../../src/internal/tooltip-content-frame.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE,KAAK,wBAAwB,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,GAC1D,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,YAAY,CAAC,GAAG;IACzF,oEAAoE;IACpE,QAAQ,EAAE,cAAc,CAAC;IACzB,oFAAoF;IACpF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEJ,4FAA4F;AAC5F,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,IAAY,EACZ,UAAe,EACf,KAAgB,EAChB,WAAe,EACf,KAAY,EACZ,UAAiB,EACjB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,wBAAwB,+BA+B1B;AAED,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
4
+ import { overlayStem, OverlayStemShape } from "./overlay-stem.js";
5
+ import { cn } from "../lib/utils.js";
6
+ import { anchoredOverlayMotion } from "../lib/motion.js";
7
+ /** The popup `TooltipContent` draws; only the package passes it content other than text. */
8
+ function TooltipContentFrame({ className, side = "top", sideOffset = 10, align = "center", alignOffset = 0, arrow = true, centerText = true, children, ...props }) {
9
+ return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Positioner, { align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, className: "isolate z-50", children: _jsxs(TooltipPrimitive.Popup, { "data-slot": "tooltip-content", "data-nc-ui": "", className: cn("z-50 w-fit max-w-62.5 rounded-md border-0 bg-foreground px-nadicode-xs py-1.5 text-body-compact text-balance text-background nc-elevation-floating has-data-[slot=kbd]:inline-flex has-data-[slot=kbd]:items-center has-data-[slot=kbd]:gap-1 has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:h-5 **:data-[slot=kbd]:min-w-5 **:data-[slot=kbd]:text-caption **:data-[slot=kbd]:leading-5", centerText ? "text-center" : "text-left", anchoredOverlayMotion, className), ...props, children: [children, arrow ? (_jsx(TooltipPrimitive.Arrow, { className: cn(overlayStem, "[&_path]:fill-foreground"), children: _jsx(OverlayStemShape, {}) })) : null] }) }) }));
10
+ }
11
+ export { TooltipContentFrame };
@@ -0,0 +1,8 @@
1
+ import type { CSSProperties } from "react";
2
+ type StyleWithVariables = CSSProperties & {
3
+ [name: `--${string}`]: string | number | undefined;
4
+ };
5
+ /** A `style` object that sets CSS custom properties, which `CSSProperties` does not list; React sets each `--` key through `style.setProperty`. */
6
+ export declare function cssVariables(style: StyleWithVariables): CSSProperties;
7
+ export {};
8
+ //# sourceMappingURL=css-variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-variables.d.ts","sourceRoot":"","sources":["../../src/lib/css-variables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,KAAK,kBAAkB,GAAG,aAAa,GAAG;IAAE,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjG,mJAAmJ;AACnJ,wBAAgB,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAErE"}
@@ -0,0 +1,4 @@
1
+ /** A `style` object that sets CSS custom properties, which `CSSProperties` does not list; React sets each `--` key through `style.setProperty`. */
2
+ export function cssVariables(style) {
3
+ return style;
4
+ }
@@ -1,5 +1,5 @@
1
1
  // Generated by scripts/generate-merge-tokens.mjs from @nadicodeai/design-system/css.
2
- // Do not edit: `npm run generate:merge-tokens -w @nadicodeai/ui` rewrites it.
2
+ // Do not edit: `pnpm --filter @nadicodeai/ui generate:merge-tokens` rewrites it.
3
3
  export const themeMergeTokens = {
4
4
  spacing: "button-padding-inline button-padding-inline-lg button-padding-inline-sm control-height control-padding-inline nadicode-2xl nadicode-3xl nadicode-4xl nadicode-5xl nadicode-6xl nadicode-button-padding-inline nadicode-button-padding-inline-lg nadicode-button-padding-inline-sm nadicode-card-padding nadicode-content-max nadicode-control-height nadicode-control-height-lg nadicode-control-height-sm nadicode-control-height-xs nadicode-control-padding-inline nadicode-focus-outline-offset nadicode-focus-outline-width nadicode-guide nadicode-gutter-desktop nadicode-gutter-mobile nadicode-gutter-tablet nadicode-icon-stroke nadicode-icon-stroke-sm nadicode-lg nadicode-md nadicode-section-step-desktop nadicode-section-step-mobile nadicode-sm nadicode-touch-target nadicode-xl nadicode-xs nadicode-xxs touch-target".split(" "),
5
5
  radius: "2xl 3xl full lg md none sm xl xs xs-plus".split(" "),
@@ -1 +1 @@
1
- {"version":3,"file":"use-copy-to-clipboard.d.ts","sourceRoot":"","sources":["../../src/lib/use-copy-to-clipboard.ts"],"names":[],"mappings":"AA6BA,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,eAAuB,GACxB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;;;EAsCA"}
1
+ {"version":3,"file":"use-copy-to-clipboard.d.ts","sourceRoot":"","sources":["../../src/lib/use-copy-to-clipboard.ts"],"names":[],"mappings":"AA4BA,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,eAAuB,GACxB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;;;EAsCA"}
@@ -11,8 +11,7 @@ async function attemptCopy(input) {
11
11
  return { kind: "copied" };
12
12
  }
13
13
  catch (error) {
14
- // SAFETY: writeText is navigator.clipboard.writeText, which useCopyToClipboard, the only caller, passes bound; its promise rejects with a DOMException, which is an Error.
15
- return { kind: "failed", error: error };
14
+ return { kind: "failed", error: error instanceof Error ? error : new Error(String(error)) };
16
15
  }
17
16
  }
18
17
  export function useCopyToClipboard({ text, onCopy, onError, timeout, skipWhileCopied = false, }) {
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Copy, Pencil, Trash2 } from "lucide-react";
3
3
  import { agentOrbColorTokens } from "../components/agent-orb-appearance.js";
4
- // eslint-disable-next-line product-message/imports -- the showcase words its own sample messages, which no product shows
4
+ // oxlint-disable-next-line nadicodeai/product-message-imports -- the showcase words its own sample messages, which no product shows
5
5
  import { wordMessage } from "../components/product-message.js";
6
6
  export const nothing = () => undefined;
7
7
  export const COBALTO = agentOrbColorTokens.cobalto;
@@ -1 +1 @@
1
- {"version":3,"file":"choices.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/choices.tsx"],"names":[],"mappings":"AAwDA,iBAAS,sBAAsB,gCAc9B;AAED,iBAAS,gBAAgB,gCAgCxB;AAED,iBAAS,mBAAmB,gCAiB3B;AAED,iBAAS,uBAAuB,gCAe/B;AAED,iBAAS,sBAAsB,gCAkF9B;AAED,iBAAS,mBAAmB,gCAoC3B;AAID,iBAAS,wBAAwB,gCA8DhC;AAED,iBAAS,cAAc,gCA2CtB;AAED,iBAAS,yBAAyB,gCAUjC;AAED,iBAAS,yBAAyB,gCAQjC;AAED,iBAAS,kBAAkB,gCAuE1B;AAED,iBAAS,gBAAgB,gCAoCxB;AAED,iBAAS,cAAc,gCAgDtB;AAED,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;CAyBO,CAAC"}
1
+ {"version":3,"file":"choices.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/choices.tsx"],"names":[],"mappings":"AAyDA,iBAAS,sBAAsB,gCAc9B;AAED,iBAAS,gBAAgB,gCAgCxB;AAED,iBAAS,mBAAmB,gCAiB3B;AAED,iBAAS,uBAAuB,gCAe/B;AAED,iBAAS,sBAAsB,gCAqF9B;AAED,iBAAS,mBAAmB,gCAoC3B;AAID,iBAAS,wBAAwB,gCA8DhC;AAED,iBAAS,cAAc,gCA2CtB;AAED,iBAAS,yBAAyB,gCAUjC;AAED,iBAAS,yBAAyB,gCAQjC;AAED,iBAAS,kBAAkB,gCAsE1B;AAED,iBAAS,gBAAgB,gCAoCxB;AAED,iBAAS,cAAc,gCAgDtB;AAED,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;CAyBO,CAAC"}
@@ -9,6 +9,7 @@ import { ChoiceboxGroup, ChoiceboxGroupItem } from "../../components/choicebox.j
9
9
  import { CollectionSort } from "../../components/collection-sort.js";
10
10
  import { Combobox, ComboboxContent, ComboboxInput, ComboboxItem, ComboboxList, ComboboxLoading, } from "../../components/combobox.js";
11
11
  import { Field, FieldLabel, FieldLegend, FieldSet } from "../../components/field.js";
12
+ import { Form } from "../../components/form.js";
12
13
  import { Label } from "../../components/label.js";
13
14
  import { MultiSelect, MultiSelectContent, MultiSelectRow, MultiSelectTrigger, } from "../../components/multi-select.js";
14
15
  import { RadioGroup, RadioGroupItem } from "../../components/radio-group.js";
@@ -58,7 +59,7 @@ function SegmentedChoiceSpecimen() {
58
59
  }
59
60
  function ChoiceboxGroupSpecimen() {
60
61
  const [plan, setPlan] = useState("trial");
61
- return (_jsxs("div", { className: "grid max-w-2xl gap-6", children: [_jsxs(ChoiceboxGroup, { label: "Plan", name: "plan", onValueChange: (next) => setPlan(next === "pro" ? "pro" : "trial"), showLabel: true, type: "radio", value: plan, children: [_jsx(ChoiceboxGroupItem, { description: "Free for two weeks.", title: "Pro trial", value: "trial", children: "Ends on 30 November." }), _jsx(ChoiceboxGroupItem, { description: "Starts today.", title: "Pro", value: "pro" }), _jsx(ChoiceboxGroupItem, { description: "For one company only.", disabledReason: "Already used on this company.", title: "Second trial", value: "second-trial" })] }), _jsxs(ChoiceboxGroup, { defaultValue: "standard", label: "Server size", name: "server-size", showLabel: true, type: "radio", children: [_jsx(ChoiceboxGroupItem, { badge: "Recommended", description: "Enough for most teams.", specs: ["4 vCPU", "8 GB"], title: "Standard", value: "standard" }), _jsx(ChoiceboxGroupItem, { description: "For heavy daily use.", specs: ["8 vCPU", "16 GB"], title: "Enhanced", value: "enhanced" })] }), _jsxs(ChoiceboxGroup, { label: "Send the report by", showLabel: true, type: "checkbox", children: [_jsx(ChoiceboxGroupItem, { description: "To the billing address.", title: "Email", value: "email" }), _jsx(ChoiceboxGroupItem, { description: "To the Rossi Ottica channel.", title: "Alveare", value: "chat" })] }), _jsxs(ChoiceboxGroup, { defaultValue: "pro", disabledReason: "Your partner manages this plan.", label: "Plan, managed by a partner", showLabel: true, type: "radio", children: [_jsx(ChoiceboxGroupItem, { description: "Free for two weeks.", title: "Pro trial", value: "trial" }), _jsx(ChoiceboxGroupItem, { description: "Starts today.", title: "Pro", value: "pro" })] }), _jsxs(ChoiceboxGroup, { defaultValue: ["email"], label: "Send the invoice by", showLabel: true, type: "checkbox", children: [_jsx(ChoiceboxGroupItem, { description: "To the billing address.", title: "Email", value: "email" }), _jsx(ChoiceboxGroupItem, { description: "Not set up for this company.", disabledReason: "Connect Alveare first.", title: "Alveare", value: "chat" })] }), _jsxs(ChoiceboxGroup, { label: "Plan, stacked", orientation: "vertical", showLabel: true, type: "radio", children: [_jsx(ChoiceboxGroupItem, { description: "Free for two weeks.", title: "Pro trial", value: "trial" }), _jsx(ChoiceboxGroupItem, { description: "Starts today.", title: "Pro", value: "pro" })] })] }));
62
+ return (_jsxs("div", { className: "grid max-w-2xl gap-6", children: [_jsxs(ChoiceboxGroup, { label: "Plan", name: "plan", onValueChange: (next) => setPlan(next === "pro" ? "pro" : "trial"), showLabel: true, type: "radio", value: plan, children: [_jsx(ChoiceboxGroupItem, { description: "Free for two weeks.", selectedFacts: ["Ends on 30 November."], title: "Pro trial", value: "trial" }), _jsx(ChoiceboxGroupItem, { description: "Starts today.", title: "Pro", value: "pro" }), _jsx(ChoiceboxGroupItem, { description: "For one company only.", disabledReason: "Already used on this company.", title: "Second trial", value: "second-trial" })] }), _jsxs(ChoiceboxGroup, { defaultValue: "standard", label: "Server size", name: "server-size", showLabel: true, type: "radio", children: [_jsx(ChoiceboxGroupItem, { badge: "Recommended", description: "Enough for most teams.", specs: ["4 vCPU", "8 GB"], title: "Standard", value: "standard" }), _jsx(ChoiceboxGroupItem, { description: "For heavy daily use.", specs: ["8 vCPU", "16 GB"], title: "Enhanced", value: "enhanced" })] }), _jsxs(ChoiceboxGroup, { label: "Send the report by", showLabel: true, type: "checkbox", children: [_jsx(ChoiceboxGroupItem, { description: "To the billing address.", title: "Email", value: "email" }), _jsx(ChoiceboxGroupItem, { description: "To the Rossi Ottica channel.", title: "Alveare", value: "chat" })] }), _jsxs(ChoiceboxGroup, { defaultValue: "pro", disabledReason: "Your partner manages this plan.", label: "Plan, managed by a partner", showLabel: true, type: "radio", children: [_jsx(ChoiceboxGroupItem, { description: "Free for two weeks.", title: "Pro trial", value: "trial" }), _jsx(ChoiceboxGroupItem, { description: "Starts today.", title: "Pro", value: "pro" })] }), _jsxs(ChoiceboxGroup, { defaultValue: ["email"], label: "Send the invoice by", showLabel: true, type: "checkbox", children: [_jsx(ChoiceboxGroupItem, { description: "To the billing address.", title: "Email", value: "email" }), _jsx(ChoiceboxGroupItem, { description: "Not set up for this company.", disabledReason: "Connect Alveare first.", title: "Alveare", value: "chat" })] }), _jsxs(ChoiceboxGroup, { label: "Plan, stacked", orientation: "vertical", showLabel: true, type: "radio", children: [_jsx(ChoiceboxGroupItem, { description: "Free for two weeks.", title: "Pro trial", value: "trial" }), _jsx(ChoiceboxGroupItem, { description: "Starts today.", title: "Pro", value: "pro" })] })] }));
62
63
  }
63
64
  function MultiSelectSpecimen() {
64
65
  const [chosen, setChosen] = useState(new Set(["Milan", "Frankfurt"]));
@@ -117,7 +118,7 @@ function RadioGroupSpecimen() {
117
118
  const legend = `${id}-legend`;
118
119
  const disabledLegend = `${id}-disabled-legend`;
119
120
  const requiredLegend = `${id}-required-legend`;
120
- return (_jsxs("div", { className: "grid max-w-md gap-8", children: [_jsxs(FieldSet, { children: [_jsx(FieldLegend, { id: legend, variant: "label", children: "Who can see this Agent" }), _jsxs(RadioGroup, { "aria-labelledby": legend, defaultValue: "me", children: [_jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-me`, value: "me" }), _jsx(FieldLabel, { htmlFor: `${id}-me`, children: "Only me" })] }), _jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-everyone`, value: "everyone" }), _jsx(FieldLabel, { htmlFor: `${id}-everyone`, children: "Everyone in the company" })] })] })] }), _jsxs(FieldSet, { children: [_jsx(FieldLegend, { id: disabledLegend, variant: "label", children: "Who can see this Agent, locked" }), _jsxs(RadioGroup, { "aria-labelledby": disabledLegend, defaultValue: "me", disabled: true, children: [_jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-locked-me`, value: "me" }), _jsx(FieldLabel, { htmlFor: `${id}-locked-me`, children: "Only me" })] }), _jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-locked-everyone`, value: "everyone" }), _jsx(FieldLabel, { htmlFor: `${id}-locked-everyone`, children: "Everyone in the company" })] })] })] }), _jsxs("form", { className: "grid gap-4", method: "post", onSubmit: (event) => {
121
+ return (_jsxs("div", { className: "grid max-w-md gap-8", children: [_jsxs(FieldSet, { children: [_jsx(FieldLegend, { id: legend, variant: "label", children: "Who can see this Agent" }), _jsxs(RadioGroup, { "aria-labelledby": legend, defaultValue: "me", children: [_jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-me`, value: "me" }), _jsx(FieldLabel, { htmlFor: `${id}-me`, children: "Only me" })] }), _jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-everyone`, value: "everyone" }), _jsx(FieldLabel, { htmlFor: `${id}-everyone`, children: "Everyone in the company" })] })] })] }), _jsxs(FieldSet, { children: [_jsx(FieldLegend, { id: disabledLegend, variant: "label", children: "Who can see this Agent, locked" }), _jsxs(RadioGroup, { "aria-labelledby": disabledLegend, defaultValue: "me", disabled: true, children: [_jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-locked-me`, value: "me" }), _jsx(FieldLabel, { htmlFor: `${id}-locked-me`, children: "Only me" })] }), _jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-locked-everyone`, value: "everyone" }), _jsx(FieldLabel, { htmlFor: `${id}-locked-everyone`, children: "Everyone in the company" })] })] })] }), _jsxs(Form, { className: "grid gap-4", onSubmit: (event) => {
121
122
  event.preventDefault();
122
123
  }, children: [_jsxs(FieldSet, { children: [_jsx(FieldLegend, { id: requiredLegend, variant: "label", children: "Billing cycle" }), _jsxs(RadioGroup, { "aria-labelledby": requiredLegend, name: "cycle", required: true, children: [_jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-monthly`, value: "monthly" }), _jsx(FieldLabel, { htmlFor: `${id}-monthly`, children: "Monthly" })] }), _jsxs(Field, { orientation: "horizontal", children: [_jsx(RadioGroupItem, { id: `${id}-yearly`, value: "yearly" }), _jsx(FieldLabel, { htmlFor: `${id}-yearly`, children: "Yearly" })] })] })] }), _jsx(Button, { className: "justify-self-start", size: "sm", type: "submit", children: "Choose billing cycle" })] }), _jsx(RadioGroup, { "aria-label": "Standalone", defaultValue: "only", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(RadioGroupItem, { "aria-label": "Keep the old key", value: "only" }), _jsx("span", { className: "text-label-sm text-foreground", children: "Keep the old key" })] }) })] }));
123
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compositions.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/compositions.tsx"],"names":[],"mappings":"AAoIA,iBAAS,oBAAoB,gCA+B5B;AAED,iBAAS,wBAAwB,gCAahC;AAED,iBAAS,qBAAqB,gCA0B7B;AAED,iBAAS,yBAAyB,gCAGjC;AAED,iBAAS,sBAAsB,gCAyD9B;AAED,iBAAS,yBAAyB,gCAUjC;AAED,iBAAS,qBAAqB,gCAwC7B;AAED,iBAAS,kBAAkB,gCAiB1B;AAED,iBAAS,kBAAkB,gCAuE1B;AAED,iBAAS,kBAAkB,gCAwB1B;AAED,iBAAS,oBAAoB,gCAkD5B;AAED,iBAAS,oBAAoB,gCAqC5B;AAED,iBAAS,mBAAmB,gCA2B3B;AAED,iBAAS,mBAAmB,gCAoB3B;AAwBD,iBAAS,uBAAuB,gCAkD/B;AA0BD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;CA8FE,CAAC"}
1
+ {"version":3,"file":"compositions.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/compositions.tsx"],"names":[],"mappings":"AAoIA,iBAAS,oBAAoB,gCA+B5B;AAMD,iBAAS,wBAAwB,gCAahC;AAED,iBAAS,qBAAqB,gCA0B7B;AAED,iBAAS,yBAAyB,gCAGjC;AAED,iBAAS,sBAAsB,gCAyD9B;AAED,iBAAS,yBAAyB,gCAUjC;AAED,iBAAS,qBAAqB,gCAwC7B;AAED,iBAAS,kBAAkB,gCAiB1B;AAED,iBAAS,kBAAkB,gCAuE1B;AAED,iBAAS,kBAAkB,gCAwB1B;AAED,iBAAS,oBAAoB,gCAkD5B;AAED,iBAAS,oBAAoB,gCAqC5B;AAED,iBAAS,mBAAmB,gCA2B3B;AAED,iBAAS,mBAAmB,gCAoB3B;AAwBD,iBAAS,uBAAuB,gCAkD/B;AA+BD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;CA2FE,CAAC"}
@@ -134,8 +134,9 @@ function ActivityFeedSpecimen() {
134
134
  },
135
135
  ], empty: { kind: "nothingYet", message: "Nothing has happened yet." }, label: "Activity", loadingLabel: "Loading activity", locale: "en" }));
136
136
  }
137
+ const cobaltoOrb = (size) => (_jsx(AgentOrb, { color: COBALTO, decorative: true, form: "orbit", size: size }));
137
138
  function AgentProfileCardSpecimen() {
138
- return (_jsx(AgentProfileCard, { activity: { label: "Last active", value: "Today at 09:13", missingLabel: "Never" }, description: "Writes quotes from the price list", descriptionMissingLabel: "No description yet", edit: { label: "Edit Acme Quotes", onClick: nothing }, name: "Acme Quotes", orb: (size) => _jsx(AgentOrb, { color: COBALTO, decorative: true, form: "orbit", size: size }), origin: { label: "Made from", value: "Sales template", missingLabel: "Made from scratch" }, state: { label: "State", tone: "success", text: "Ready" } }));
139
+ return (_jsx(AgentProfileCard, { activity: { label: "Last active", value: "Today at 09:13", missingLabel: "Never" }, description: "Writes quotes from the price list", descriptionMissingLabel: "No description yet", edit: { label: "Edit Acme Quotes", onClick: nothing }, name: "Acme Quotes", orb: cobaltoOrb, origin: { label: "Made from", value: "Sales template", missingLabel: "Made from scratch" }, state: { label: "State", tone: "success", text: "Ready" } }));
139
140
  }
140
141
  function CatalogDrawerSpecimen() {
141
142
  const [open, setOpen] = useState(false);
@@ -345,6 +346,10 @@ function SelectableRecordListSpecimen() {
345
346
  }),
346
347
  } }));
347
348
  }
349
+ const reconnectMenu = (mailbox) => ({
350
+ label: `More for ${mailbox.address}`,
351
+ commands: [{ label: "Reconnect", icon: _jsx(RefreshCw, {}), onClick: nothing }],
352
+ });
348
353
  export const COMPOSITIONS = {
349
354
  ActivityFeed: ActivityFeedSpecimen,
350
355
  AgentProfileCard: AgentProfileCardSpecimen,
@@ -372,10 +377,7 @@ export const COMPOSITIONS = {
372
377
  ] }) })),
373
378
  OverviewPage: OverviewPageSpecimen,
374
379
  PageHeader: () => (_jsxs(PageActionsHostProvider, { children: [_jsx(PageHeader, { title: "Customers" }), _jsx(PageActions, { primary: { label: "Invite customer", icon: _jsx(Plus, {}), onClick: nothing } })] })),
375
- RecordList: () => (_jsxs("div", { className: "grid gap-6", children: [_jsx(RecordList, { ...MAILBOX_LIST, footer: { count: "3 mailboxes" }, label: "Mailboxes", records: MAILBOXES }), _jsx(RecordList, { ...MAILBOX_LIST, label: "Mailboxes with one command", menu: (mailbox) => ({
376
- label: `More for ${mailbox.address}`,
377
- commands: [{ label: "Reconnect", icon: _jsx(RefreshCw, {}), onClick: nothing }],
378
- }), records: MAILBOXES }), _jsx(RecordList, { ...MAILBOX_LIST, command: () => ({
380
+ RecordList: () => (_jsxs("div", { className: "grid gap-6", children: [_jsx(RecordList, { ...MAILBOX_LIST, footer: { count: "3 mailboxes" }, label: "Mailboxes", records: MAILBOXES }), _jsx(RecordList, { ...MAILBOX_LIST, label: "Mailboxes with one command", menu: reconnectMenu, records: MAILBOXES }), _jsx(RecordList, { ...MAILBOX_LIST, command: () => ({
379
381
  label: "Reconnect",
380
382
  pendingLabel: "Reconnecting…",
381
383
  icon: _jsx(RefreshCw, {}),
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/data.tsx"],"names":[],"mappings":"AA4HA,iBAAS,iBAAiB,gCAczB;AAsCD,iBAAS,iBAAiB,gCAkDzB;AAUD,iBAAS,eAAe,gCASvB;AAED,iBAAS,YAAY,gCAoCpB;AAED,iBAAS,WAAW,gCA6BnB;AAQD,iBAAS,gBAAgB,gCAqBxB;AAED,iBAAS,qBAAqB,gCAc7B;AAED,iBAAS,UAAU,gCAqClB;AAED,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;CAgOU,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/data.tsx"],"names":[],"mappings":"AA4HA,iBAAS,iBAAiB,gCAczB;AAsCD,iBAAS,iBAAiB,gCAkDzB;AAUD,iBAAS,eAAe,gCASvB;AAED,iBAAS,YAAY,gCAoCpB;AAED,iBAAS,WAAW,gCAuBnB;AAQD,iBAAS,gBAAgB,gCAqBxB;AAED,iBAAS,qBAAqB,gCAc7B;AAED,iBAAS,UAAU,gCAqClB;AAED,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;CAgOU,CAAC"}
@@ -137,7 +137,7 @@ function ItemSpecimen() {
137
137
  return (_jsxs(ItemGroup, { className: "max-w-lg", divided: true, children: [_jsxs(Item, { children: [_jsx(ItemMedia, { variant: "icon", children: _jsx(MessageCircle, { "aria-hidden": "true" }) }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Telegram" }), _jsx(ItemDescription, { children: "Invoices answers the sales group here." })] }), _jsx(ItemActions, { children: _jsx(Button, { size: "sm", variant: "outline", children: "Disconnect Telegram" }) })] }), _jsxs(Item, { children: [_jsx(ItemMedia, { variant: "icon", children: _jsx(RotateCw, { "aria-hidden": "true" }) }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Nadia filed 12 invoices" }), _jsx(ItemDescription, { children: "From the October statement, in the archive folder." })] })] }), _jsxs(Item, { children: [_jsx(ItemSelect, { checked: selected, label: "Select Chrome, Mac", onCheckedChange: setSelected }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: "Chrome, Mac" }), _jsx(ItemDescription, { children: "Signed in today at 09:14." })] })] })] }));
138
138
  }
139
139
  function KbdSpecimen() {
140
- return (_jsxs("div", { className: "grid gap-3 text-sm", children: [_jsxs("span", { className: "flex items-center gap-2", children: ["Find", _jsx(Kbd, { meta: true, children: "K" }), _jsx(Kbd, { meta: true, shift: true, children: "K" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Find, small", _jsx(Kbd, { meta: true, size: "sm", children: "K" }), _jsx(Kbd, { meta: true, shift: true, size: "sm", children: "K" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Close", _jsx(Kbd, { children: "Esc" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Previous Agent", _jsx(Kbd, { children: "ArrowUp" })] })] }));
140
+ return (_jsxs("div", { className: "grid gap-3 text-sm", children: [_jsxs("span", { className: "flex items-center gap-2", children: ["Find", _jsx(Kbd, { meta: true, keyName: "K" }), _jsx(Kbd, { meta: true, shift: true, keyName: "K" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Find, small", _jsx(Kbd, { meta: true, size: "sm", keyName: "K" }), _jsx(Kbd, { meta: true, shift: true, size: "sm", keyName: "K" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Close", _jsx(Kbd, { keyName: "Esc" })] }), _jsxs("span", { className: "flex items-center gap-2", children: ["Previous Agent", _jsx(Kbd, { keyName: "ArrowUp" })] })] }));
141
141
  }
142
142
  const IMPORT_STOPS = [
143
143
  { value: 1, label: "Reading the file" },
@@ -1 +1 @@
1
- {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/feedback.tsx"],"names":[],"mappings":"AA6CA,iBAAS,kBAAkB,gCAoE1B;AAED,iBAAS,oBAAoB,gCAkB5B;AAED,iBAAS,eAAe,gCAyBvB;AAED,iBAAS,kBAAkB,gCA8B1B;AAED,iBAAS,sBAAsB,gCAwB9B;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CA6LM,CAAC"}
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/feedback.tsx"],"names":[],"mappings":"AA4CA,iBAAS,kBAAkB,gCAoE1B;AAED,iBAAS,oBAAoB,gCAkB5B;AAED,iBAAS,eAAe,gCAyBvB;AAED,iBAAS,kBAAkB,gCA8B1B;AAED,iBAAS,sBAAsB,gCAwB9B;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CAyLM,CAAC"}
@@ -8,7 +8,6 @@ import { EmptyState } from "../../components/empty-state.js";
8
8
  import { EntryProgress, EntryStageList } from "../../components/entry-scene.js";
9
9
  import { DropdownMenu, DropdownMenuCommand, DropdownMenuContent, DropdownMenuTrigger, } from "../../components/dropdown-menu.js";
10
10
  import { HoverCard, HoverCardContent, HoverCardSummary, HoverCardTrigger, } from "../../components/hover-card.js";
11
- import { Kbd } from "../../components/kbd.js";
12
11
  import { MessageNotice } from "../../components/message-notice.js";
13
12
  import { NoticeBanner } from "../../components/notice-banner.js";
14
13
  import { RecordTime } from "../../components/record-time.js";
@@ -76,7 +75,7 @@ export const FEEDBACK = {
76
75
  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" }) })] })] })),
77
76
  SkeletonRegion: SkeletonRegionSpecimen,
78
77
  Toaster: ToasterSpecimen,
79
- 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." })] })] })),
78
+ 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" }) }), _jsx(TooltipContent, { shortcut: { keyName: "/" }, children: "Search" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { "aria-label": "Find a mailbox", size: "icon", variant: "outline" }), children: _jsx(Mail, { "aria-hidden": "true" }) }), _jsx(TooltipContent, { shortcut: { meta: true, keyName: "K" }, children: "Find a mailbox" })] }), _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." })] })] })),
80
79
  UpdateCard: UpdateCardSpecimen,
81
80
  WaitingLine: () => (_jsxs("div", { className: "grid max-w-sm gap-2 text-sm", children: ["Connecting Telegram", _jsx(WaitingLine, { label: "Connecting Telegram", waiting: true })] })),
82
81
  };
@@ -39,6 +39,7 @@ export declare const SPECIMENS: {
39
39
  MenuChoiceRow: () => import("react").JSX.Element;
40
40
  Popover: () => import("react").JSX.Element;
41
41
  Sheet: () => import("react").JSX.Element;
42
+ SiteMenu: () => import("react").JSX.Element;
42
43
  ThemeModeMenu: () => import("react").JSX.Element;
43
44
  Alert: () => import("react").JSX.Element;
44
45
  EmptyState: () => import("react").JSX.Element;
@@ -131,6 +132,7 @@ export declare const SPECIMENS: {
131
132
  ClearableInput: () => import("react").JSX.Element;
132
133
  CollectionSearch: () => import("react").JSX.Element;
133
134
  Field: () => import("react").JSX.Element;
135
+ Form: () => import("react").JSX.Element;
134
136
  Input: () => import("react").JSX.Element;
135
137
  InputGroup: () => import("react").JSX.Element;
136
138
  InputOTP: () => 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"}
@@ -10,6 +10,7 @@ export declare const INPUTS: {
10
10
  ClearableInput: typeof ClearableInputSpecimen;
11
11
  CollectionSearch: typeof CollectionSearchSpecimen;
12
12
  Field: () => import("react").JSX.Element;
13
+ Form: () => import("react").JSX.Element;
13
14
  Input: () => import("react").JSX.Element;
14
15
  InputGroup: typeof InputGroupSpecimen;
15
16
  InputOTP: typeof InputOTPSpecimen;
@@ -1 +1 @@
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,gCAoD5B;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;CAoHQ,CAAC"}
1
+ {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/inputs.tsx"],"names":[],"mappings":"AA+BA,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,gCAoD5B;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;CAkIQ,CAAC"}
@@ -2,10 +2,12 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { AtSign, Clock, Globe, Search } from "lucide-react";
4
4
  import { useState } from "react";
5
+ import { Button } from "../../components/button.js";
5
6
  import { Calendar } from "../../components/calendar.js";
6
7
  import { ClearableInput } from "../../components/clearable-input.js";
7
8
  import { CollectionSearch } from "../../components/collection-search.js";
8
9
  import { Field, FieldDescription, FieldError, FieldLabel } from "../../components/field.js";
10
+ import { Form } from "../../components/form.js";
9
11
  import { Input } from "../../components/input.js";
10
12
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, } from "../../components/input-group.js";
11
13
  import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "../../components/input-otp.js";
@@ -26,13 +28,13 @@ function CalendarSpecimen() {
26
28
  function CollectionSearchSpecimen() {
27
29
  const [value, setValue] = useState("");
28
30
  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 })] }));
31
+ 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, keyName: "K" }, value: query })] }));
30
32
  }
31
33
  function ClearableInputSpecimen() {
32
34
  const [reference, setReference] = useState("INV-2026-0412");
33
35
  const [filter, setFilter] = useState("");
34
36
  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 })] }));
37
+ 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, keyName: "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 })] }));
36
38
  }
37
39
  function InputGroupSpecimen() {
38
40
  const [value, setValue] = useState("acme.it");
@@ -91,6 +93,7 @@ export const INPUTS = {
91
93
  ClearableInput: ClearableInputSpecimen,
92
94
  CollectionSearch: CollectionSearchSpecimen,
93
95
  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." })] })] })),
96
+ Form: () => (_jsxs(Form, { className: "grid max-w-sm gap-4", onSubmit: (event) => event.preventDefault(), children: [_jsx(Input, { autoComplete: "email", id: "showcase-form-email", label: "Billing email", name: "email", type: "email" }), _jsx(Button, { className: "justify-self-start", size: "sm", type: "submit", children: "Save billing email" })] })),
94
97
  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" }) })] })),
95
98
  InputGroup: InputGroupSpecimen,
96
99
  InputOTP: InputOTPSpecimen,
@@ -13,6 +13,7 @@ export declare const MENUS: {
13
13
  MenuChoiceRow: typeof MenuRowsSpecimen;
14
14
  Popover: () => import("react").JSX.Element;
15
15
  Sheet: () => import("react").JSX.Element;
16
+ SiteMenu: () => import("react").JSX.Element;
16
17
  ThemeModeMenu: typeof MenuRowsSpecimen;
17
18
  };
18
19
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"menus.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/menus.tsx"],"names":[],"mappings":"AAmHA,iBAAS,mBAAmB,gCA8B3B;AAED,iBAAS,gBAAgB,gCA0BxB;AAqDD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;CAwNS,CAAC"}
1
+ {"version":3,"file":"menus.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/menus.tsx"],"names":[],"mappings":"AAoHA,iBAAS,mBAAmB,gCA8B3B;AAED,iBAAS,gBAAgB,gCA0BxB;AAqDD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;CA+NS,CAAC"}
@@ -18,6 +18,7 @@ import { MenuChoiceRow } from "../../components/menu-choice-row.js";
18
18
  import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, } from "../../components/popover.js";
19
19
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../components/select.js";
20
20
  import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from "../../components/sheet.js";
21
+ import { SiteMenu } from "../../components/site-menu.js";
21
22
  import { ThemeModeMenu } from "../../components/theme-mode-switcher.js";
22
23
  import { COBALTO, nothing, RECORD_COMMANDS, VERDE } from "../samples.js";
23
24
  const THEME_LABELS = { light: "Light", dark: "Dark", system: "System" };
@@ -85,11 +86,15 @@ export const MENUS = {
85
86
  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" })] })] })] })),
86
87
  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" })] })] })),
87
88
  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" }) }) })] })] })] })),
88
- 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." })] })),
89
- 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" })] }) })] })] })),
89
+ 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, { children: _jsx("p", { 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." })] })),
90
+ 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", keyName: "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" })] }) })] })] })),
90
91
  GlassControl: () => (_jsxs("div", { className: "relative isolate grid min-h-40 place-items-center overflow-hidden rounded-md p-6", children: [_jsxs("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 -z-10 flex items-center justify-around", children: [_jsx(AgentOrb, { color: COBALTO, decorative: true, form: "globe", motion: "ambient", size: 96 }), _jsx(AgentOrb, { color: VERDE, decorative: true, form: "network", motion: "ambient", size: 96 })] }), _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" })] })] })),
91
92
  MenuChoiceRow: MenuRowsSpecimen,
92
93
  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." })] }) })] })),
93
94
  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, {})] })] })),
95
+ SiteMenu: () => (_jsx(SiteMenu, { invitation: { href: "#invitation", label: "Book a call" }, label: "Menu", links: [
96
+ { href: "#nadia", label: "Nadia" },
97
+ { href: "#pricing", label: "Pricing" },
98
+ ], signInHref: "#sign-in", signInLabel: "Sign in" })),
94
99
  ThemeModeMenu: MenuRowsSpecimen,
95
100
  };
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/navigation.tsx"],"names":[],"mappings":"AAoEA,iBAAS,qBAAqB,gCAoC7B;AAED,iBAAS,qBAAqB,gCAmB7B;AAED,iBAAS,uBAAuB,gCAiE/B;AAED,iBAAS,YAAY,gCAqCpB;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAkRI,CAAC"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../src/showcase/specimens/navigation.tsx"],"names":[],"mappings":"AAqEA,iBAAS,qBAAqB,gCAkC7B;AAED,iBAAS,qBAAqB,gCAmB7B;AAED,iBAAS,uBAAuB,gCAiE/B;AAED,iBAAS,YAAY,gCAqCpB;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAsQI,CAAC"}