@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
package/AGENTS.md CHANGED
@@ -8,7 +8,7 @@ The rules every component shares are in `../design-system/DESIGN.md`: tokens,
8
8
  roles, materials, glass, motion, status, activity, Agent orbs and marks. A
9
9
  component's own contract (its sizes, variants, behaviour, words and access) is
10
10
  the usage page in the TSDoc of its main export, which `generate:usage` compiles
11
- and `lint` checks. A component change a person can see goes through
11
+ and `check:usage` checks. A component change a person can see goes through
12
12
  `product-design` first. This file holds only how the package is kept.
13
13
 
14
14
  - **Styling.** A component uses the semantic roles and the generated tokens, and
@@ -30,10 +30,10 @@ and `lint` checks. A component change a person can see goes through
30
30
  registry item. Auth screens start from their shadcn block in the app; this
31
31
  package ships no auth abstraction. A value or function an app's server code
32
32
  calls lives in a module without `"use client"`, and only the Portal's
33
- production build (`npm run build -w @nadicodeai/portal`) proves it.
33
+ production build (`pnpm --filter @nadicodeai/portal build`) proves it.
34
34
  - **Usage.** The main export's TSDoc is the component's contract and carries
35
35
  `@family`, `@when`, `@instead`, `@behaviour`, `@words` and `@access`;
36
- `generate:usage` refreshes the showcase's index from it, and `lint` fails
36
+ `generate:usage` refreshes the showcase's index from it, and `check:usage` fails
37
37
  until it runs.
38
38
  - **Agents.** `@nadicodeai/ui/agents` re-exports assistant-ui and our reviewed
39
39
  compositions; `@nadicodeai/ui/agent-orb` is the React-free entry a native
@@ -44,15 +44,14 @@ and `lint` checks. A component change a person can see goes through
44
44
  maker's name (`model-mark.tsx` holds the one table of names that differ), and
45
45
  an operating system, a messaging channel or a sign-in provider is its icon in
46
46
  Iconify's `logos` set (`platform-mark.tsx`).
47
- - **Charts** are stock shadcn registry items; the deliberate deviations are held
48
- by `tests/guards/chart-kit.test.ts`, and what only a browser lays out, such as
49
- a category axis's labels, by the browser suite in `tests/visual/`, which
50
- post-merge's `test (website, packages)` job runs. A chart the kit lacks is pulled from
47
+ - **Charts** are stock shadcn registry items. What only a browser lays out, such
48
+ as a category axis's labels, is held by the browser suite in `tests/visual/`,
49
+ which post-merge's `test (website)` job runs. A chart the kit lacks is pulled from
51
50
  `https://ui.shadcn.com/r/styles/new-york-v4/<name>.json`.
52
51
  - **Releases.** No change names a version; the publish picks it after merge:
53
52
  `../../docs/agents/publish.md`.
54
53
 
55
- `npm run dev -w @nadicodeai/ui` watches source and refreshes `dist/`;
54
+ `pnpm --filter @nadicodeai/ui dev` watches source and refreshes `dist/`;
56
55
  `build:dev` refreshes it once. Validation policy is in
57
56
  `../../docs/agents/develop.md`. Find a shadcn or assistant-ui component through
58
57
  its current discovery; `--overwrite` replaces a component only with
@@ -65,5 +64,5 @@ Each kind of test the package takes, where it goes, and the file to copy:
65
64
  - A component's behavior, or a module's logic: `<name>.test.tsx` or `.test.ts` beside it (project `unit`). Copy `src/components/accordion.test.tsx` and `src/lib/line-diff.test.ts`.
66
65
  - A test that compares with Node's own identities or reaches its globals: `<name>.native.test.tsx`, in a worker of its own (project `unit-native`). Copy `src/components/chart.native.test.tsx`.
67
66
  - A type contract: `<name>.test-d.tsx`. Copy `src/components/button.test-d.tsx`.
68
- - A rule over the package's files: `tests/guards/<rule>.test.ts` (project `guards`). Copy `tests/guards/chart-kit.test.ts`.
67
+ - A rule over the package's files: `tests/guards/<rule>.test.ts` (project `guards`). Copy `tests/guards/stylesheet.test.ts`.
69
68
  - What only a browser lays out: `tests/visual/<subject>.visual.ts` (`test:visual`). Copy `tests/visual/numbered-steps.visual.ts`.
package/README.md CHANGED
@@ -38,21 +38,6 @@ beside it. A host that runs Tailwind over base styles of its own imports
38
38
  `@nadicodeai/design-system/css/host` and then `@nadicodeai/ui/components.css`
39
39
  instead, keeping its own shadcn roles.
40
40
 
41
- ## Lint
42
-
43
- The package exports the rules this repository uses. Add them after the
44
- framework and TypeScript configs:
45
-
46
- ```js
47
- import nadicodeai from "@nadicodeai/ui/eslint";
48
-
49
- export default [...nadicodeai.configs["flat/strict"]];
50
- ```
51
-
52
- They reject design values the installed design system does not define, raw
53
- colours, deep imports, native visible controls and appearance overrides on
54
- shared components.
55
-
56
41
  ## Imports
57
42
 
58
43
  Import each component from its subpath:
@@ -85,7 +70,7 @@ page that shows one allows `https://logos.composio.dev` in its `img-src`.
85
70
  ## Build
86
71
 
87
72
  ```bash
88
- npm run build -w @nadicodeai/ui
73
+ pnpm --filter @nadicodeai/ui build
89
74
  ```
90
75
 
91
- `npm pack --dry-run -w @nadicodeai/ui` shows exactly what consumers receive.
76
+ `pnpm --filter @nadicodeai/ui pack --dry-run` shows exactly what consumers receive.
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/components/accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAK3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,qBAShE;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,qBAQ5E;AAED,QAAA,MAAM,QAAQ;;;;CAAsC,CAAC;AAErD,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,KAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG;IACtD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;CAC/B,qBAmBA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,gBAAuB,EACvB,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,qBAkBhC;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/components/accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAK3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,qBAShE;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,qBAQ5E;AAGD,QAAA,MAAM,QAAQ;;;;CAAsC,CAAC;AAErD,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,KAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG;IACtD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;CAC/B,qBAmBA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,gBAAuB,EACvB,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,qBAkBhC;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -42,11 +42,12 @@ function Accordion({ className, size = "default", ...props }) {
42
42
  function AccordionItem({ className, ...props }) {
43
43
  return (_jsx(AccordionPrimitive.Item, { "data-slot": "accordion-item", className: cn("border-b", className), ...props }));
44
44
  }
45
+ // oxlint-disable-next-line jsx-a11y/heading-has-content -- Base UI's Header renders the trigger inside the heading it is given
45
46
  const HEADINGS = { 2: _jsx("h2", {}), 3: _jsx("h3", {}), 4: _jsx("h4", {}) };
46
47
  function AccordionTrigger({ className, children, level = 3, ...props }) {
47
48
  return (_jsx(AccordionPrimitive.Header, { className: "flex", render: HEADINGS[level], children: _jsxs(AccordionPrimitive.Trigger, { "data-slot": "accordion-trigger", className: cn("nc-transition-paint group/accordion-trigger flex min-h-touch-target flex-1 items-center justify-between gap-4 rounded-sm py-6.5 text-left text-heading-md aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[size=small]/accordion:py-3 group-data-[size=small]/accordion:text-body-md group-data-[size=small]/accordion:font-medium [@media(hover:hover)_and_(pointer:fine)]:min-h-0", className), ...props, children: [children, _jsx(ChevronRightIcon, { "data-slot": "accordion-trigger-icon", className: "nc-transition-transform pointer-events-none size-4 shrink-0 group-aria-expanded/accordion-trigger:rotate-90" })] }) }));
48
49
  }
49
50
  function AccordionContent({ className, children, hiddenUntilFound = true, ...props }) {
50
- return (_jsx(AccordionPrimitive.Panel, { "data-slot": "accordion-content", className: "h-(--accordion-panel-height) overflow-hidden text-body-md transition-[height] duration-[var(--nc-duration-open)] ease-[var(--nc-ease-out-strong)] data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none", hiddenUntilFound: hiddenUntilFound, ...props, children: _jsx("div", { className: cn("pb-4 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className), children: children }) }));
51
+ return (_jsx(AccordionPrimitive.Panel, { "data-slot": "accordion-content", className: "h-(--accordion-panel-height) overflow-hidden text-body-md transition-[height] duration-(--nc-duration-open) ease-(--nc-ease-out-strong) data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none", hiddenUntilFound: hiddenUntilFound, ...props, children: _jsx("div", { className: cn("pb-4 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className), children: children }) }));
51
52
  }
52
53
  export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
@@ -1 +1 @@
1
- {"version":3,"file":"account-menu.d.ts","sourceRoot":"","sources":["../../src/components/account-menu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account-menu.d.ts","sourceRoot":"","sources":["../../src/components/account-menu.tsx"],"names":[],"mappings":"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"}
@@ -16,8 +16,10 @@ import { cn } from "../lib/utils.js";
16
16
  * account menu's trigger draws it, and so does a sample of the Portal's column.
17
17
  */
18
18
  export function AccountMenuIdentity({ className, identity, pictureOnly = false, }) {
19
- return (_jsxs("span", { className: cn("flex min-w-0 items-center gap-2 text-left text-sm", !pictureOnly && "flex-1", className), "data-slot": "account-menu-identity", children: [_jsxs(Avatar, { className: "size-5", decorative: true, size: "sm", children: [identity.image ? _jsx(AvatarImage, { alt: "", src: identity.image }) : null, _jsx(AvatarFallback, { children: identity.initials || _jsx(UserRound, { "aria-hidden": "true", className: "size-3/5" }) })] }), pictureOnly ? null : (_jsxs(_Fragment, { children: [_jsxs("span", { className: "grid min-w-0 flex-1 leading-tight", children: [_jsx("span", { className: "truncate text-foreground", children: identity.name }), identity.notice ? _jsx("span", { className: "truncate text-xs", children: identity.notice }) : null] }), _jsx("span", { "aria-hidden": "true", className: "grid size-6 shrink-0 place-content-center rounded-full border border-border bg-popover text-muted-foreground transition-colors group-hover/account:text-foreground group-data-[popup-open]/account:text-foreground", children: _jsx(Ellipsis, { className: "size-3" }) })] }))] }));
19
+ return (_jsxs("span", { className: cn("flex min-w-0 items-center gap-2 text-left text-sm", !pictureOnly && "flex-1", className), "data-slot": "account-menu-identity", children: [_jsxs(Avatar, { className: "size-5", decorative: true, size: "sm", children: [identity.image ? _jsx(AvatarImage, { alt: "", src: identity.image }) : null, _jsx(AvatarFallback, { children: identity.initials === undefined || identity.initials === "" ? (_jsx(UserRound, { "aria-hidden": "true", className: "size-3/5" })) : (identity.initials) })] }), pictureOnly ? null : (_jsxs(_Fragment, { children: [_jsxs("span", { className: "grid min-w-0 flex-1 leading-tight", children: [_jsx("span", { className: "truncate text-foreground", children: identity.name }), identity.notice ? _jsx("span", { className: "truncate text-xs", children: identity.notice }) : null] }), _jsx("span", { "aria-hidden": "true", className: "grid size-6 shrink-0 place-content-center rounded-full border border-border bg-popover text-muted-foreground transition-colors group-hover/account:text-foreground group-data-popup-open/account:text-foreground", children: _jsx(Ellipsis, { className: "size-3" }) })] }))] }));
20
20
  }
21
+ const NO_CHOICES = [];
22
+ const NO_COMMANDS = [];
21
23
  /**
22
24
  * The account menu at the foot of a shell's navigation: whose account it is,
23
25
  * and the menu opening on that same identity with what they can do beneath it.
@@ -29,13 +31,13 @@ export function AccountMenuIdentity({ className, identity, pictureOnly = false,
29
31
  * @words The menu's name ("Account"), the person's name and lines, then each row's noun or verb from the product's catalogue: "Theme", "Language", "Usage", "Sign out" and "Signing out".
30
32
  * @access The trigger and the menu are named "{label}: {name}"; the gear carries its label; the pending sign-out is aria-busy and announced through a status; a failure is an alert.
31
33
  */
32
- export function AccountMenu({ align = "start", choices = [], commands = [], identity, label, language, leadingCommands = [], onOpenChange, pictureOnly = false, settings, side = "top", signOut, theme, }) {
34
+ export function AccountMenu({ align = "start", choices = NO_CHOICES, commands = NO_COMMANDS, identity, label, language, leadingCommands = NO_COMMANDS, onOpenChange, pictureOnly = false, settings, side = "top", signOut, theme, }) {
33
35
  const name = `${label}: ${identity.name}`;
34
36
  const commandRows = (rows) => rows.map(({ value, ...command }) => (_jsx(AccountMenuRow, { "aria-label": command.accessibleName, disabled: command.locked === true || command.disabledReason !== undefined, icon: command.icon, reason: command.locked ? command.reason : command.disabledReason, value: value, ...menuItemAction(command), children: command.label }, command.label)));
35
37
  return (_jsxs(DropdownMenu, { onOpenChange: onOpenChange, children: [_jsx(DropdownMenuTrigger, { "aria-label": name, className: cn("group/account flex min-h-9 min-w-0 items-center rounded-full outline-none focus-visible:nc-focus-outline focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50", pictureOnly ? "justify-center" : "w-full pr-2 pl-2.5"), disabled: signOut.pending, children: _jsx(AccountMenuIdentity, { identity: identity, pictureOnly: pictureOnly }) }), _jsxs(DropdownMenuContent, { align: align, "aria-label": name, className: "w-72 max-w-[calc(100vw-2rem)] p-1.5", density: "comfortable", side: side, sideOffset: 6, children: [_jsxs(DropdownMenuGroup, { className: "flex min-w-0 items-center gap-2 py-1.5 pl-2", "data-slot": "account-menu-header", children: [_jsxs("span", { className: "grid min-w-0 flex-1 gap-0.5 text-left", children: [_jsx("span", { className: "truncate text-sm font-medium text-foreground", children: identity.name }), identity.notice ? _jsx("span", { className: "text-xs", children: identity.notice }) : null, identity.lines?.map((line, index) => (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: line }, index)))] }), settings ? (_jsx(DropdownMenuItem, { "aria-label": settings.label, className: "text-muted-foreground", iconOnly: true, ...menuItemAction(settings), children: _jsx(Settings, { "aria-hidden": "true" }) })) : null] }), _jsx(DropdownMenuSeparator, { className: "-mx-1.5 my-1.5" }), _jsxs(DropdownMenuGroup, { children: [commandRows(leadingCommands), _jsx(ThemeModeMenu, { ...theme }), language ? _jsx(MenuChoiceRow, { ...language }) : null, choices.map((choice) => (_jsx(AccountMenuChoiceRow, { choice: choice }, choice.label))), commandRows(commands), _jsx(AccountMenuRow, { "aria-busy": signOut.pending || undefined, closeOnClick: signOut.confirms === true, disabled: signOut.pending, icon: _jsx(LogOut, {}), onClick: () => {
36
38
  if (!signOut.pending)
37
39
  signOut.onSignOut();
38
- }, children: _jsx(PendingLabel, { pending: signOut.pending, pendingLabel: signOut.pendingLabel, children: signOut.label }) }), signOut.pending ? (_jsx("span", { className: "sr-only", role: "status", children: signOut.pendingLabel })) : null, signOut.failure ? (_jsxs(FieldError, { className: "mx-2 mb-1 break-words", "data-message-code": signOut.failure.code, children: [_jsx("span", { className: "block font-medium", children: signOut.failure.title }), bodyBeyondTitle(signOut.failure) ? (_jsx("span", { className: "block", children: bodyBeyondTitle(signOut.failure) })) : null] })) : null] })] })] }));
40
+ }, children: _jsx(PendingLabel, { pending: signOut.pending, pendingLabel: signOut.pendingLabel, children: signOut.label }) }), signOut.pending ? (_jsx("span", { className: "sr-only", role: "status", children: signOut.pendingLabel })) : null, signOut.failure ? (_jsxs(FieldError, { className: "mx-2 mb-1 wrap-break-word", "data-message-code": signOut.failure.code, children: [_jsx("span", { className: "block font-medium", children: signOut.failure.title }), bodyBeyondTitle(signOut.failure) ? (_jsx("span", { className: "block", children: bodyBeyondTitle(signOut.failure) })) : null] })) : null] })] })] }));
39
41
  }
40
42
  function AccountMenuRow({ children, icon, reason, value, ...props }) {
41
43
  return (_jsxs(DropdownMenuItem, { ...props, className: "min-h-9 gap-3 px-2 py-1.5 group-data-[density=comfortable]/menu:px-2 group-data-[density=comfortable]/menu:py-1.5 [@media(hover:hover)_and_(pointer:fine)]:min-h-9", children: [_jsxs("span", { className: "grid min-w-0 flex-1 gap-0.5", children: [_jsx("span", { className: "truncate", children: children }), reason ? _jsx("span", { className: "text-xs text-muted-foreground", children: reason }) : null] }), value === undefined ? null : " ", value === undefined ? null : (_jsx(DropdownMenuShortcut, { className: "ml-0", children: value })), _jsx("span", { "aria-hidden": "true", className: "flex shrink-0 items-center text-muted-foreground", children: icon })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"activity-calendar.d.ts","sourceRoot":"","sources":["../../src/components/activity-calendar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,uCAAuC,CAAC;AAG/C,KAAK,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,KAAK,sBAAsB,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IAC9E,IAAI,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C,CAAC;AAwBF,iBAAS,oBAAoB,CAC3B,IAAI,EAAE,SAAS,qBAAqB,EAAE,EACtC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,QAAQ,EAAE,CAKZ;AA0BD;;;;;;;;;;;;;;;GAeG;AACH,iBAAS,gBAAgB,CAAC,EACxB,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,MAAM,EACN,MAAM,EACN,cAAuE,EACvE,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,+BAyCvB;AAED,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"activity-calendar.d.ts","sourceRoot":"","sources":["../../src/components/activity-calendar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,uCAAuC,CAAC;AAG/C,KAAK,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,KAAK,sBAAsB,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IAC9E,IAAI,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C,CAAC;AAwBF,iBAAS,oBAAoB,CAC3B,IAAI,EAAE,SAAS,qBAAqB,EAAE,EACtC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,QAAQ,EAAE,CAKZ;AA0BD;;;;;;;;;;;;;;;GAeG;AACH,iBAAS,gBAAgB,CAAC,EACxB,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,MAAM,EACN,MAAM,EACN,cAAc,EACd,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,+BA0CvB;AAED,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -60,7 +60,8 @@ function localizedCalendarLabels(locale) {
60
60
  * @access Every day is a named cell for assistive technology; the legend steps are named too.
61
61
  * Colour is never the only reading: the value is in each label.
62
62
  */
63
- function ActivityCalendar({ data, from, to, locale, labels, valueFormatter = (value) => new Intl.NumberFormat(locale).format(value), className, ...props }) {
63
+ function ActivityCalendar({ data, from, to, locale, labels, valueFormatter, className, ...props }) {
64
+ const formatCount = (value) => new Intl.NumberFormat(locale).format(value);
64
65
  const calendarData = activityCalendarData(data, from, to);
65
66
  const dateFormatter = new Intl.DateTimeFormat(locale, {
66
67
  dateStyle: "medium",
@@ -77,7 +78,7 @@ function ActivityCalendar({ data, from, to, locale, labels, valueFormatter = (va
77
78
  const date = dateFormatter.format(utcDay(activity.date));
78
79
  return activity.value === null
79
80
  ? `${date}: ${labels.unavailable}`
80
- : `${date}: ${valueFormatter(activity.value)}`;
81
+ : `${date}: ${(valueFormatter ?? formatCount)(activity.value)}`;
81
82
  },
82
83
  }, ...props, children: [_jsx(CalendarHeatmapBody, { hideYearLabels: true, children: ({ activity, dayIndex, weekIndex }) => (_jsx(CalendarHeatmapBlock, { activity: activity, dayIndex: dayIndex, weekIndex: weekIndex })) }), _jsx(CalendarHeatmapFooter, { children: _jsx(CalendarHeatmapLegend, { labels: { less: labels.less, more: labels.more } }) })] }));
83
84
  }
@@ -32,6 +32,6 @@ function AgentCard({ action, className, job, meta, name, status, visual, ...prop
32
32
  const hasMeta = hasSlotContent(meta);
33
33
  const hasAction = hasSlotContent(action);
34
34
  const hasVisual = hasSlotContent(visual);
35
- return (_jsxs(Card, { className: cn("h-full gap-0", hasVisual && "pb-0", className), ...props, children: [_jsxs("div", { className: cn("grid items-start gap-nadicode-sm px-(--card-spacing)", hasAction && "grid-cols-[minmax(0,1fr)_auto]", hasVisual && "pb-nadicode-md"), "data-slot": "agent-card-header", children: [_jsxs("div", { className: "grid min-w-0 content-start gap-nadicode-xxs", children: [_jsx(CardTitle, { className: "break-words", children: name }), _jsx(CardDescription, { className: "line-clamp-2", children: job }), hasMeta ? (_jsx("div", { className: "pt-nadicode-xxs text-xs text-muted-foreground", "data-slot": "agent-card-meta", children: meta })) : null, hasStatus ? (_jsx("div", { className: "flex flex-wrap items-center gap-nadicode-xxs pt-nadicode-xxs", "data-slot": "agent-card-status", children: status })) : null] }), hasAction ? (_jsx("div", { className: "shrink-0", "data-slot": "agent-card-action", children: action })) : null] }), hasVisual ? (_jsx("div", { className: "mt-auto ml-8 grid h-36 place-items-center overflow-hidden rounded-tl-md border-t border-l border-border bg-recessed pt-nadicode-md", "data-slot": "agent-card-visual", children: visual })) : null] }));
35
+ return (_jsxs(Card, { className: cn("h-full gap-0", hasVisual && "pb-0", className), ...props, children: [_jsxs("div", { className: cn("grid items-start gap-nadicode-sm px-(--card-spacing)", hasAction && "grid-cols-[minmax(0,1fr)_auto]", hasVisual && "pb-nadicode-md"), "data-slot": "agent-card-header", children: [_jsxs("div", { className: "grid min-w-0 content-start gap-nadicode-xxs", children: [_jsx(CardTitle, { className: "wrap-break-word", children: name }), _jsx(CardDescription, { className: "line-clamp-2", children: job }), hasMeta ? (_jsx("div", { className: "pt-nadicode-xxs text-xs text-muted-foreground", "data-slot": "agent-card-meta", children: meta })) : null, hasStatus ? (_jsx("div", { className: "flex flex-wrap items-center gap-nadicode-xxs pt-nadicode-xxs", "data-slot": "agent-card-status", children: status })) : null] }), hasAction ? (_jsx("div", { className: "shrink-0", "data-slot": "agent-card-action", children: action })) : null] }), hasVisual ? (_jsx("div", { className: "mt-auto ml-8 grid h-36 place-items-center overflow-hidden rounded-tl-md border-t border-l border-border bg-recessed pt-nadicode-md", "data-slot": "agent-card-visual", children: visual })) : null] }));
36
36
  }
37
37
  export { AgentCard };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-orb.d.ts","sourceRoot":"","sources":["../../src/components/agent-orb.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,OAAO,CAAC;AAE9D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,KAAK,iBAAiB,GAAG;IACvB,wFAAwF;IACxF,IAAI,EAAE,cAAc,CAAC;IACrB,mGAAmG;IACnG,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,qEAAqE;IACrE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAC3C,CAAC;IAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GACrF,CAAC;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,IAAS,EACT,QAAkB,EAClB,MAAc,EACd,KAAc,EACd,MAAiB,EACjB,SAAa,EACb,UAAkB,EAClB,KAAK,EACL,SAAS,GACV,EAAE,aAAa,+BAyDf"}
1
+ {"version":3,"file":"agent-orb.d.ts","sourceRoot":"","sources":["../../src/components/agent-orb.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,OAAO,CAAC;AAE9D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,KAAK,iBAAiB,GAAG;IACvB,wFAAwF;IACxF,IAAI,EAAE,cAAc,CAAC;IACrB,mGAAmG;IACnG,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,qEAAqE;IACrE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAC3C,CAAC;IAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GACrF,CAAC;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,IAAS,EACT,QAAkB,EAClB,MAAc,EACd,KAAc,EACd,MAAiB,EACjB,SAAa,EACb,UAAkB,EAClB,KAAK,EACL,SAAS,GACV,EAAE,aAAa,+BA0Df"}
@@ -83,6 +83,7 @@ export function AgentOrb({ form, color, size = 32, presence = "plain", paused =
83
83
  shown.current = state;
84
84
  if (motion === "status")
85
85
  renderer.current?.setState(state);
86
+ // oxlint-disable-next-line react/exhaustive-effect-dependencies -- `motionKey` re-runs it so a caller replays the state's motion while the state stays the same
86
87
  }, [state, motion, motionKey]);
87
88
  return (_jsx("canvas", { ref: canvas, "data-slot": "agent-orb", "data-form": form, "data-state": state, "data-motion": motion, role: decorative ? undefined : "img", "aria-hidden": decorative || undefined, "aria-label": decorative ? undefined : label, className: cn("inline-block size-(--nc-agent-orb-size) shrink-0 align-middle", className), width: size, height: size,
88
89
  // The size is a class, not an inline rule, so a caller that sizes the
@@ -1 +1 @@
1
- {"version":3,"file":"agent-profile.d.ts","sourceRoot":"","sources":["../../src/components/agent-profile.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-profile.d.ts","sourceRoot":"","sources":["../../src/components/agent-profile.tsx"],"names":[],"mappings":"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"}
@@ -7,7 +7,8 @@ import { FooterStrip } from "../internal/footer-strip.js";
7
7
  import { cn } from "../lib/utils.js";
8
8
  import { Button } from "./button.js";
9
9
  import { Card, CardContent } from "./card.js";
10
- import { ModelIdentity } from "./model-identity.js";
10
+ import { modelAuthor, modelDisplayName } from "./model-identity.js";
11
+ import { ModelMark } from "./model-mark.js";
11
12
  import { PageActionsRow } from "./page-actions.js";
12
13
  import { RadioGroup } from "./radio-group.js";
13
14
  import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger } from "./select.js";
@@ -19,6 +20,9 @@ const AGENT_PROFILE_ORB_SIZE = 64;
19
20
  function FactValue({ fact }) {
20
21
  return (_jsx(SkeletonRegion, { busy: fact.pending === true, children: fact.pending ? (_jsx(Skeleton, { className: "h-4 w-24" })) : (_jsx(TableValue, { missingLabel: fact.missingLabel, value: fact.value })) }));
21
22
  }
23
+ function EditButton({ label, onClick, ref }) {
24
+ return (_jsx(Button, { "aria-label": label, onClick: onClick, ref: ref, size: "icon", title: label, type: "button", variant: "ghost", children: _jsx(PencilIcon, { "aria-hidden": "true" }) }));
25
+ }
22
26
  /**
23
27
  * The card an Agent's Profile opens with in every product.
24
28
  *
@@ -48,7 +52,7 @@ export function AgentProfileCard({ orb, name, description, descriptionMissingLab
48
52
  ];
49
53
  const factList = (_jsx("dl", { className: "mt-nadicode-sm flex min-w-0 flex-wrap gap-x-nadicode-lg gap-y-nadicode-sm", "data-slot": "agent-profile-facts", children: facts.map((fact) => (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsx("dt", { className: "text-xs text-muted-foreground", children: fact.label }), _jsx("dd", { className: "flex min-h-6 min-w-0 items-center text-sm", children: fact.value })] }, fact.label))) }));
50
54
  const text = description?.trim();
51
- return (_jsxs(Card, { className: "@container/agent-profile min-w-0", render: _jsx("section", { "aria-labelledby": headingProps?.id }), "data-slot": "agent-profile", children: [_jsxs(CardContent, { className: "grid min-w-0 gap-nadicode-lg @3xl/agent-profile:grid-cols-[minmax(0,1fr)_minmax(18rem,22rem)] @3xl/agent-profile:gap-nadicode-xl", children: [_jsxs("div", { className: "grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-nadicode-md", children: [_jsx("div", { className: "shrink-0", children: orb(AGENT_PROFILE_ORB_SIZE) }), editor ? (_jsxs("div", { className: "grid min-w-0 gap-nadicode-md", "data-slot": "agent-profile-editor", children: [_jsx("h1", { ...headingProps, className: cn("sr-only", headingProps?.className), children: name }), editor, factList] })) : (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-x-1 gap-y-nadicode-sm", children: [_jsx("h1", { ...headingProps, className: cn("min-w-0 text-heading-md break-words text-foreground outline-none", headingProps?.className), children: name }), edit ? (_jsx(Button, { "aria-label": edit.label, onClick: edit.onClick, ref: edit.ref, size: "icon", title: edit.label, type: "button", variant: "ghost", children: _jsx(PencilIcon, { "aria-hidden": "true" }) })) : null, actions ? (_jsx("div", { className: "ml-auto flex shrink-0 items-center gap-2 pl-nadicode-sm", "data-slot": "agent-profile-actions", children: _jsx(PageActionsRow, { ...actions }) })) : null] }), _jsx("p", { className: "min-w-0 text-sm text-pretty break-words text-muted-foreground", children: _jsx(TableValue, { missingLabel: descriptionMissingLabel, value: text }) }), factList] }))] }), settings ? (_jsx("div", { className: "grid min-w-0 content-start gap-nadicode-md border-t border-border pt-nadicode-md @3xl/agent-profile:border-t-0 @3xl/agent-profile:border-l @3xl/agent-profile:pt-0 @3xl/agent-profile:pl-nadicode-lg", "data-slot": "agent-profile-settings", children: settings })) : null] }), _jsx(FooterStrip, { hint: footerHint, hintSlot: "agent-profile-hint", children: footer })] }));
55
+ return (_jsxs(Card, { className: "@container/agent-profile min-w-0", render: _jsx("section", { "aria-labelledby": headingProps?.id }), "data-slot": "agent-profile", children: [_jsxs(CardContent, { className: "grid min-w-0 gap-nadicode-lg @3xl/agent-profile:grid-cols-[minmax(0,1fr)_minmax(18rem,22rem)] @3xl/agent-profile:gap-nadicode-xl", children: [_jsxs("div", { className: "grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-nadicode-md", children: [_jsx("div", { className: "shrink-0", children: orb(AGENT_PROFILE_ORB_SIZE) }), editor ? (_jsxs("div", { className: "grid min-w-0 gap-nadicode-md", "data-slot": "agent-profile-editor", children: [_jsx("h1", { ...headingProps, className: cn("sr-only", headingProps?.className), children: name }), editor, factList] })) : (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-x-1 gap-y-nadicode-sm", children: [_jsx("h1", { ...headingProps, className: cn("min-w-0 text-heading-md wrap-break-word text-foreground outline-none", headingProps?.className), children: name }), edit ? _jsx(EditButton, { ...edit }) : null, actions ? (_jsx("div", { className: "ml-auto flex shrink-0 items-center gap-2 pl-nadicode-sm", "data-slot": "agent-profile-actions", children: _jsx(PageActionsRow, { ...actions }) })) : null] }), _jsx("p", { className: "min-w-0 text-sm text-pretty wrap-break-word text-muted-foreground", children: _jsx(TableValue, { missingLabel: descriptionMissingLabel, value: text }) }), factList] }))] }), settings ? (_jsx("div", { className: "grid min-w-0 content-start gap-nadicode-md border-t border-border pt-nadicode-md @3xl/agent-profile:border-t-0 @3xl/agent-profile:border-l @3xl/agent-profile:pt-0 @3xl/agent-profile:pl-nadicode-lg", "data-slot": "agent-profile-settings", children: settings })) : null] }), _jsx(FooterStrip, { hint: footerHint, hintSlot: "agent-profile-hint", children: footer })] }));
52
56
  }
53
57
  /**
54
58
  * A model chosen from a list, each read with its maker's mark.
@@ -66,10 +70,9 @@ export function AgentProfileCard({ orb, name, description, descriptionMissingLab
66
70
  */
67
71
  export function ModelSelect({ value, options, onValueChange, placeholder, nameOf, disabled, className, ...props }) {
68
72
  return (_jsxs(Select, { disabled: disabled, onValueChange: (model) => {
69
- // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Base UI's Select types the chosen value as unknown; this is where it is read.
70
73
  if (typeof model === "string")
71
74
  onValueChange(model);
72
- }, value: value, children: [_jsx(SelectTrigger, { className: cn("w-full min-w-0", className), ...props, children: _jsx(SelectPrimitive.Value, { className: "flex min-w-0 flex-1 items-center gap-1.5 text-left", "data-slot": "select-value", children: (model) => model ? (_jsx(ModelIdentity, { className: "min-w-0", markSize: 20, model: model, name: nameOf?.(model) })) : (_jsx("span", { className: "text-placeholder", children: placeholder })) }) }), _jsx(SelectContent, { align: "start", alignItemWithTrigger: false, children: _jsx(SelectGroup, { children: options.map((model) => (_jsx(SelectItem, { value: model, children: _jsx(ModelIdentity, { markSize: 20, model: model, name: nameOf?.(model) }) }, model))) }) })] }));
75
+ }, value: value, children: [_jsx(SelectTrigger, { className: cn("w-full min-w-0", className), ...props, children: _jsx(SelectPrimitive.Value, { className: "flex min-w-0 flex-1 items-center gap-1.5 text-left", "data-slot": "select-value", children: (model) => model ? (_jsx(ModelMark, { author: modelAuthor(model), className: "min-w-0", name: nameOf?.(model) ?? modelDisplayName(model), size: 20 })) : (_jsx("span", { className: "text-placeholder", children: placeholder })) }) }), _jsx(SelectContent, { align: "start", alignItemWithTrigger: false, children: _jsx(SelectGroup, { children: options.map((model) => (_jsx(SelectItem, { value: model, children: _jsx(ModelMark, { author: modelAuthor(model), name: nameOf?.(model) ?? modelDisplayName(model), size: 20 }) }, model))) }) })] }));
73
76
  }
74
77
  /**
75
78
  * One choice among a few short levels, drawn as segments that share a row.
@@ -26,7 +26,7 @@ import { type TextButtonProps } from "./button.js";
26
26
  * "Keep the Cancel button literally `Cancel` so screen-reader users hear a stable dismissal label across destructive flows." (https://vercel.com/geist/modal)
27
27
  * Ours: `role="alertdialog"`, named by the title and described by the consequence.
28
28
  */
29
- declare function AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props): React.JSX.Element;
29
+ declare function AlertDialog({ ...props }: Omit<AlertDialogPrimitive.Root.Props, "defaultOpen">): React.JSX.Element;
30
30
  declare function AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props): React.JSX.Element;
31
31
  declare function AlertDialogPortal({ ...props }: AlertDialogPrimitive.Portal.Props): React.JSX.Element;
32
32
  declare function AlertDialogOverlay({ className, ...props }: AlertDialogPrimitive.Backdrop.Props): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../src/components/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAIlF,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGnE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,qBAEjE;AAED,iBAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,qBAE3E;AAED,iBAAS,iBAAiB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,qBAEzE;AAED,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,qBAavF;AAED,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,qBAkBpF;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ9E;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ5E;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW9E;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,KAAK,CAAC,qBAQzD;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,WAAW,CAAC,qBAW/D;AAID,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC,qBAS9E;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC,qBAS9E;AAED,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,CAAC"}
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../src/components/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAIlF,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGnE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,qBAEtF;AAED,iBAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,qBAE3E;AAED,iBAAS,iBAAiB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,qBAEzE;AAED,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,qBAavF;AAED,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,qBAkBpF;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ9E;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ5E;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW9E;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,KAAK,CAAC,qBAQzD;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,WAAW,CAAC,qBAW/D;AAID,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC,qBAS9E;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC,qBAS9E;AAED,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,CAAC"}
@@ -43,7 +43,7 @@ function AlertDialogOverlay({ className, ...props }) {
43
43
  return (_jsx(AlertDialogPrimitive.Backdrop, { "data-slot": "alert-dialog-overlay", className: cn("pointer-events-auto", "fixed inset-0 isolate z-50 bg-scrim/scrim", overlayBackdropMotion, className), ...props }));
44
44
  }
45
45
  function AlertDialogContent({ className, ...props }) {
46
- return (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Popup, { "data-slot": "alert-dialog-content", "data-phone-layout": "sheet", className: cn("pointer-events-auto", "group/alert-dialog-content fixed top-1/2 left-1/2 z-50 flex max-h-[min(50rem,80svh)] w-full -translate-x-1/2 -translate-y-1/2 flex-col gap-(--dialog-gap) overflow-y-auto rounded-lg border-0 bg-popover p-(--dialog-padding) [--dialog-gap:var(--dialog-padding)] [--dialog-padding:var(--spacing-nadicode-card-padding)] text-popover-foreground nc-elevation-modal outline-none sm:max-w-120", phoneSheetLayout, modalOverlayMotion, className), ...props })] }));
46
+ return (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Popup, { "data-slot": "alert-dialog-content", "data-phone-layout": "sheet", className: cn("pointer-events-auto", "group/alert-dialog-content fixed top-1/2 left-1/2 z-50 flex max-h-[min(50rem,80svh)] w-full -translate-1/2 flex-col gap-(--dialog-gap) overflow-y-auto rounded-lg border-0 bg-popover p-(--dialog-padding) [--dialog-gap:var(--dialog-padding)] [--dialog-padding:var(--spacing-nadicode-card-padding)] text-popover-foreground nc-elevation-modal outline-none sm:max-w-120", phoneSheetLayout, modalOverlayMotion, className), ...props })] }));
47
47
  }
48
48
  function AlertDialogHeader({ className, ...props }) {
49
49
  return (_jsx("div", { "data-slot": "alert-dialog-header", className: cn("flex flex-col gap-2", className), ...props }));
@@ -52,10 +52,10 @@ function AlertDialogBody({ className, ...props }) {
52
52
  return (_jsx("div", { "data-slot": "alert-dialog-body", className: cn("flex flex-col gap-nadicode-lg", className), ...props }));
53
53
  }
54
54
  function AlertDialogFooter({ className, ...props }) {
55
- return (_jsx("div", { "data-slot": "alert-dialog-footer", className: cn("sticky -bottom-(--dialog-padding) z-10 -mx-(--dialog-padding) -mb-(--dialog-padding) flex shrink-0 flex-row justify-between gap-nadicode-md rounded-b-lg border-t border-border bg-recessed p-nadicode-sm group-data-[phone-layout=sheet]/alert-dialog-content:max-sm:rounded-b-none *:only:w-full [&_[data-slot=button]]:h-nadicode-control-height-sm [&_[data-slot=button]]:min-h-nadicode-control-height-sm [&_[data-slot=button]]:px-button-padding-inline-sm", className), ...props }));
55
+ return (_jsx("div", { "data-slot": "alert-dialog-footer", className: cn("sticky -bottom-(--dialog-padding) z-10 -mx-(--dialog-padding) -mb-(--dialog-padding) flex shrink-0 flex-row justify-between gap-nadicode-md rounded-b-lg border-t border-border bg-recessed p-nadicode-sm group-data-[phone-layout=sheet]/alert-dialog-content:max-sm:rounded-b-none *:only:w-full **:data-[slot=button]:h-nadicode-control-height-sm **:data-[slot=button]:min-h-nadicode-control-height-sm **:data-[slot=button]:px-button-padding-inline-sm", className), ...props }));
56
56
  }
57
57
  function AlertDialogTitle({ className, ...props }) {
58
- return (_jsx(AlertDialogPrimitive.Title, { "data-slot": "alert-dialog-title", className: cn("min-w-0 text-heading-sm break-words", className), ...props }));
58
+ return (_jsx(AlertDialogPrimitive.Title, { "data-slot": "alert-dialog-title", className: cn("min-w-0 text-heading-sm wrap-break-word", className), ...props }));
59
59
  }
60
60
  function AlertDialogDescription({ className, ...props }) {
61
61
  return (_jsx(AlertDialogPrimitive.Description, { "data-slot": "alert-dialog-description", className: cn("text-body-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props }));
@@ -32,7 +32,7 @@ function appInitial(app) {
32
32
  * name.
33
33
  */
34
34
  function AppMark({ app, logo, platform, size = APP_MARK_SIZE, label, className, style, ...props }) {
35
- const named = Boolean(label?.trim() || props["aria-label"]?.trim() || props["aria-labelledby"]?.trim());
35
+ const named = [label, props["aria-label"], props["aria-labelledby"]].some((value) => Boolean(value?.trim()));
36
36
  const labelling = !named
37
37
  ? { "aria-hidden": true }
38
38
  : label?.trim()
@@ -11,16 +11,16 @@ const AVATAR_SIZE_CLASS = {
11
11
  lg: "size-12",
12
12
  };
13
13
  const AVATAR_COUNT_TEXT_CLASS = {
14
- xs: "text-[10px] leading-3",
15
- sm: "text-[10px] leading-3",
16
- default: "text-[10px] leading-3",
17
- lg: "text-xs leading-4",
14
+ xs: "text-[10px]/3 ",
15
+ sm: "text-[10px]/3 ",
16
+ default: "text-[10px]/3 ",
17
+ lg: "text-xs/4 ",
18
18
  };
19
19
  const AVATAR_CORNER_ICON_CLASS = {
20
- xs: "-start-0.5 -bottom-0.5 size-2 [&>svg]:size-1.5",
21
- sm: "-start-0.5 -bottom-1 size-3 [&>svg]:size-2.5",
22
- default: "-start-0.75 -bottom-1.25 size-4 [&>svg]:size-3.5",
23
- lg: "-start-1 -bottom-2 size-6 [&>svg]:size-5",
20
+ xs: "-inset-s-0.5 -bottom-0.5 size-2 [&>svg]:size-1.5",
21
+ sm: "-inset-s-0.5 -bottom-1 size-3 [&>svg]:size-2.5",
22
+ default: "-inset-s-0.75 -bottom-1.25 size-4 [&>svg]:size-3.5",
23
+ lg: "-inset-s-1 -bottom-2 size-6 [&>svg]:size-5",
24
24
  };
25
25
  const AVATAR_AUTO_OVERLAP = { xs: 5, sm: 7, default: 10, lg: 14 };
26
26
  /**
@@ -1,19 +1,13 @@
1
- import type { ReactNode } from "react";
2
- import { useRender } from "@base-ui/react/use-render";
3
- import { type VariantProps } from "class-variance-authority";
4
- declare const badgeVariants: (props?: ({
5
- variant?: "default" | "outline" | "secondary" | "pink" | "purple" | "teal" | null | undefined;
6
- size?: "sm" | "lg" | "md" | null | undefined;
7
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
- type BadgeSize = NonNullable<VariantProps<typeof badgeVariants>["size"]>;
9
- type BadgeProps = Omit<useRender.ComponentProps<"span">, "onClick" | "children" | "title"> & VariantProps<typeof badgeVariants> & ({
10
- children: ReactNode;
11
- /** One mark before the word; never a second icon. */
12
- icon?: ReactNode;
1
+ import type { LucideIcon } from "lucide-react";
2
+ import { type BadgeFrameProps, type BadgeSize } from "../internal/badge-frame.js";
3
+ type BadgeProps = Omit<BadgeFrameProps, "children" | "icon" | "title"> & ({
4
+ children: string;
5
+ /** One lucide icon before the word, passed as the component (`icon={Lock}`); never a second icon. */
6
+ icon?: LucideIcon;
13
7
  title?: string;
14
8
  } | {
15
9
  children?: never;
16
- icon: ReactNode;
10
+ icon: LucideIcon;
17
11
  /** What the mark means: an icon alone has no word to name it. */
18
12
  title: string;
19
13
  });
@@ -41,7 +35,8 @@ type BadgeProps = Omit<useRender.ComponentProps<"span">, "onClick" | "children"
41
35
  * a real anchor, and only `outline` takes the hover, a gray fill.
42
36
  * "Keep badge content to text or `icon` + text." (https://vercel.com/geist/badge)
43
37
  * "Never stack two icons or a child Badge inside a Badge." (https://vercel.com/geist/badge) Ours:
44
- * never a paragraph either.
38
+ * never a paragraph either. The type holds it: the children are one string and `icon` is one
39
+ * lucide icon component (`icon={Lock}`), so no element, and no second label, fits inside.
45
40
  * "Pair lifecycle badges (`Alpha`, `Beta`, `Early Access`) with a `Tooltip` that names the limit, like `Alpha: API may change before GA`." (https://vercel.com/geist/badge)
46
41
  * Ours: the badge is the `render` of a `TooltipTrigger` with `tabIndex={0}`, so keyboard and touch
47
42
  * users reach the limit it names.
@@ -65,6 +60,6 @@ type BadgeProps = Omit<useRender.ComponentProps<"span">, "onClick" | "children"
65
60
  * "Don’t rely on color alone; the text has to be readable without it." (https://vercel.com/geist/badge)
66
61
  * Ours: a coloured variant still carries its word.
67
62
  */
68
- declare function Badge({ className, variant, size, icon, children, render, ...props }: BadgeProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
69
- export { Badge, badgeVariants, type BadgeProps, type BadgeSize };
63
+ declare function Badge({ icon: Icon, ...props }: BadgeProps): import("react").JSX.Element;
64
+ export { Badge, type BadgeProps, type BadgeSize };
70
65
  //# sourceMappingURL=badge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;;8EAuBlB,CAAC;AAEF,KAAK,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzE,KAAK,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,GACxF,YAAY,CAAC,OAAO,aAAa,CAAC,GAClC,CACI;IACE,QAAQ,EAAE,SAAS,CAAC;IACpB,qDAAqD;IACrD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACD;IACE,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf,CACJ,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAmB,EACnB,IAAW,EACX,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,GAAG,KAAK,EACT,EAAE,UAAU,8FA2BZ;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE1F,KAAK,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,GACpE,CACI;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,qGAAqG;IACrG,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACD;IACE,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf,CACJ,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,iBAAS,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAElD;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,CAAC"}
@@ -1,29 +1,5 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { mergeProps } from "@base-ui/react/merge-props";
3
- import { useRender } from "@base-ui/react/use-render";
4
- import { cva } from "class-variance-authority";
5
- import { cn } from "../lib/utils.js";
6
- const badgeVariants = cva("group/badge inline-flex w-fit max-w-full shrink-0 items-center justify-center overflow-hidden rounded-full font-medium whitespace-nowrap tabular-nums transition-[background-color,box-shadow,color,opacity] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)]", {
7
- variants: {
8
- variant: {
9
- default: "bg-primary text-primary-foreground",
10
- secondary: "bg-secondary text-secondary-foreground",
11
- outline: "bg-background text-foreground ring-1 ring-inset ring-border [a]:hover:bg-accent",
12
- teal: "bg-category-teal text-category-teal-foreground",
13
- purple: "bg-category-purple text-category-purple-foreground",
14
- pink: "bg-category-pink text-category-pink-foreground",
15
- },
16
- size: {
17
- sm: "h-5 gap-1 px-2 text-[11px] leading-5 tracking-[0.2px] has-data-[icon=inline-start]:pl-1.5 [&>[data-icon]>svg]:size-3",
18
- md: "h-6 gap-1.25 px-3 text-xs leading-6 has-data-[icon=inline-start]:pl-2 [&>[data-icon]>svg]:size-3.5",
19
- lg: "h-8 gap-1.5 px-3 text-sm leading-5 [&>[data-icon]>svg]:size-4",
20
- },
21
- },
22
- defaultVariants: {
23
- variant: "default",
24
- size: "md",
25
- },
26
- });
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { BadgeFrame } from "../internal/badge-frame.js";
27
3
  /**
28
4
  * Short metadata beside its subject: a role, a plan, "Beta".
29
5
  *
@@ -48,7 +24,8 @@ const badgeVariants = cva("group/badge inline-flex w-fit max-w-full shrink-0 ite
48
24
  * a real anchor, and only `outline` takes the hover, a gray fill.
49
25
  * "Keep badge content to text or `icon` + text." (https://vercel.com/geist/badge)
50
26
  * "Never stack two icons or a child Badge inside a Badge." (https://vercel.com/geist/badge) Ours:
51
- * never a paragraph either.
27
+ * never a paragraph either. The type holds it: the children are one string and `icon` is one
28
+ * lucide icon component (`icon={Lock}`), so no element, and no second label, fits inside.
52
29
  * "Pair lifecycle badges (`Alpha`, `Beta`, `Early Access`) with a `Tooltip` that names the limit, like `Alpha: API may change before GA`." (https://vercel.com/geist/badge)
53
30
  * Ours: the badge is the `render` of a `TooltipTrigger` with `tabIndex={0}`, so keyboard and touch
54
31
  * users reach the limit it names.
@@ -72,20 +49,7 @@ const badgeVariants = cva("group/badge inline-flex w-fit max-w-full shrink-0 ite
72
49
  * "Don’t rely on color alone; the text has to be readable without it." (https://vercel.com/geist/badge)
73
50
  * Ours: a coloured variant still carries its word.
74
51
  */
75
- function Badge({ className, variant = "default", size = "md", icon, children, render, ...props }) {
76
- return useRender({
77
- defaultTagName: "span",
78
- props: mergeProps({
79
- className: cn(badgeVariants({ variant, size }), className),
80
- children: icon ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "pointer-events-none inline-flex shrink-0", "data-icon": "inline-start", children: icon }), children] })) : (children),
81
- }, props),
82
- render,
83
- state: {
84
- slot: "badge",
85
- "nc-ui": true,
86
- variant,
87
- size,
88
- },
89
- });
52
+ function Badge({ icon: Icon, ...props }) {
53
+ return _jsx(BadgeFrame, { ...props, icon: Icon ? _jsx(Icon, { "aria-hidden": "true" }) : undefined });
90
54
  }
91
- export { Badge, badgeVariants };
55
+ export { Badge };
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../src/components/breadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMtD,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAItC,KAAK,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,GAAG;IACvE,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,qBAW1E;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAW1E;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAW1E;AA8BD,KAAK,mBAAmB,GAAG,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,GACtD,CAAC;IAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAExF,iBAAS,cAAc,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,QAAgB,EAChB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,mBAAmB,qBAsBrB;AAED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAmBtF;AAED,iBAAS,mBAAmB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,4BAczF;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;CACf,qBAWA;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,CAAC"}
1
+ {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../src/components/breadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAOtD,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAItC,KAAK,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,GAAG;IACvE,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,qBAW1E;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAW1E;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAW1E;AA8BD,KAAK,mBAAmB,GAAG,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,GACtD,CAAC;IAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAExF,iBAAS,cAAc,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,QAAgB,EAChB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,mBAAmB,qBAsBrB;AAED,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAmBtF;AAED,iBAAS,mBAAmB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,4BAczF;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;CACf,qBAWA;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,CAAC"}
@@ -3,7 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { mergeProps } from "@base-ui/react/merge-props";
5
5
  import { useRender } from "@base-ui/react/use-render";
6
- import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
6
+ import { Tooltip, TooltipTrigger } from "./tooltip.js";
7
+ import { TooltipContentFrame } from "../internal/tooltip-content-frame.js";
7
8
  import { cn } from "../lib/utils.js";
8
9
  import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react";
9
10
  const BreadcrumbTypeContext = React.createContext("text");
@@ -37,7 +38,7 @@ function ChipTooltip({ children, crumb, }) {
37
38
  children === false) {
38
39
  return crumb;
39
40
  }
40
- return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: crumb }), _jsx(TooltipContent, { children: children })] }));
41
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: crumb }), _jsx(TooltipContentFrame, { children: children })] }));
41
42
  }
42
43
  function BreadcrumbLink({ children, className, disabled = false, render, ...props }) {
43
44
  const crumb = useRender({
@@ -1,24 +1,7 @@
1
1
  import { Button as ButtonPrimitive } from "@base-ui/react/button";
2
2
  import { useRender } from "@base-ui/react/use-render";
3
- import { type VariantProps } from "class-variance-authority";
4
3
  import { type ReactNode } from "react";
5
- declare const buttonClasses: (props?: ({
6
- variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "brandGhost" | "brandSolid" | "destructive" | "warning" | null | undefined;
7
- size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
8
- shape?: "square" | "rounded" | "circle" | null | undefined;
9
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
- type ButtonVariant = NonNullable<VariantProps<typeof buttonClasses>["variant"]>;
11
- type ButtonSize = NonNullable<VariantProps<typeof buttonClasses>["size"]>;
12
- type IconSize = Extract<ButtonSize, `icon${string}`>;
13
- type TextSize = Exclude<ButtonSize, IconSize>;
14
- /**
15
- * The button classes for an element that is not a `Button`, such as a calendar's
16
- * day arrows. They pass through `cn` as `Button`'s do, so a variant's border,
17
- * fill or text replaces the base one instead of losing to it in the stylesheet:
18
- * unmerged, the base `border-transparent` hides every outline edge. A link
19
- * drawn as a button is a `ButtonLink`.
20
- */
21
- declare function buttonVariants(props?: Parameters<typeof buttonClasses>[0]): string;
4
+ import { type ButtonVariant, type IconSize, type TextSize } from "../internal/button-classes.js";
22
5
  export type LoadingWord = {
23
6
  loading?: undefined;
24
7
  loadingLabel?: undefined;
@@ -67,8 +50,7 @@ export type IconButtonPartProps = Omit<IconButtonProps, "size" | "aria-label" |
67
50
  * Ours: one `default` per surface, the thing this page or dialog is for.
68
51
  * @instead "Switch to a `Menu` or `Split Button` when more than one related action shares a row." (https://vercel.com/geist/button)
69
52
  * Ours: a link inside a sentence is `TextLink`. A record's secondary commands go in `ActionMenu`. Appending to a list is a
70
- * `LoadMoreButton`. An on/off value is a `Switch`. An element that is neither a `Button` nor a
71
- * `ButtonLink` takes `buttonVariants`.
53
+ * `LoadMoreButton`. An on/off value is a `Switch`.
72
54
  * @behaviour "Default `Button` is primary." (https://vercel.com/geist/button)
73
55
  * "Pass `type="secondary"` for the supporting action and `type="error"` for destructive confirmations." (https://vercel.com/geist/button)
74
56
  * "`primary`, `success`, `ghost`, and `violet` are not valid `type` values." (https://vercel.com/geist/button)
@@ -81,6 +63,8 @@ export type IconButtonPartProps = Omit<IconButtonProps, "size" | "aria-label" |
81
63
  * "The default size is medium." (https://vercel.com/geist/button)
82
64
  * Ours: `xs` (24 px), `sm` (32 px), `default` (36 px, medium) and `lg` (40 px); `sm` and `xs` are
83
65
  * for a control nested in dense content, such as a composer or an input group, never for chrome.
66
+ * `inline` is a `link` command standing in a line of text (*Change*, *Switch account*): no padding
67
+ * of its own, and on a mouse it keeps the control's minimum height so it is as easy to hit.
84
68
  * The corner is 6 px, 8 px at `lg` and 4 px on the 24 px icon button. The label is the button type
85
69
  * at `sm` and `default`, the large one at `lg` and the 12 px one at `xs`, and the inline padding is
86
70
  * 6 px at `sm`, 10 px at `default` and 14 px at `lg` (8 px at `xs`).
@@ -148,5 +132,5 @@ export type ButtonLinkProps = ButtonLinkBase & (TextLook | IconLook);
148
132
  * `aria-label` or `aria-labelledby` naming destination, and the type requires it.
149
133
  */
150
134
  declare function ButtonLink({ children, className, disabled, loading, loadingLabel, onClick, prefix, render, shape, size, suffix, variant, ...props }: ButtonLinkProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
151
- export { Button, ButtonLink, buttonVariants };
135
+ export { Button, ButtonLink };
152
136
  //# sourceMappingURL=button.d.ts.map