@hanzo/ui 8.27.90 → 8.28.0

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 (698) hide show
  1. package/NOTICE +25 -0
  2. package/README.md +1 -1
  3. package/dist/backends/gui/alert-dialog.cjs +24 -6
  4. package/dist/backends/gui/alert-dialog.d.ts +11 -3
  5. package/dist/backends/gui/alert-dialog.d.ts.map +1 -1
  6. package/dist/backends/gui/alert-dialog.js +24 -6
  7. package/dist/backends/gui/alert-dialog.js.map +1 -1
  8. package/dist/backends/gui/alert.cjs +32 -1
  9. package/dist/backends/gui/alert.d.ts +36 -3
  10. package/dist/backends/gui/alert.d.ts.map +1 -1
  11. package/dist/backends/gui/alert.js +32 -2
  12. package/dist/backends/gui/alert.js.map +1 -1
  13. package/dist/backends/gui/avatar-group.cjs +28 -0
  14. package/dist/backends/gui/avatar-group.d.ts +33 -0
  15. package/dist/backends/gui/avatar-group.d.ts.map +1 -0
  16. package/dist/backends/gui/avatar-group.js +26 -0
  17. package/dist/backends/gui/avatar-group.js.map +1 -0
  18. package/dist/backends/gui/avatar.cjs +53 -3
  19. package/dist/backends/gui/avatar.d.ts +46 -4
  20. package/dist/backends/gui/avatar.d.ts.map +1 -1
  21. package/dist/backends/gui/avatar.js +52 -3
  22. package/dist/backends/gui/avatar.js.map +1 -1
  23. package/dist/backends/gui/badge.cjs +40 -2
  24. package/dist/backends/gui/badge.d.ts +7 -2
  25. package/dist/backends/gui/badge.d.ts.map +1 -1
  26. package/dist/backends/gui/badge.js +40 -2
  27. package/dist/backends/gui/badge.js.map +1 -1
  28. package/dist/backends/gui/banner.cjs +40 -1
  29. package/dist/backends/gui/banner.d.ts +36 -3
  30. package/dist/backends/gui/banner.d.ts.map +1 -1
  31. package/dist/backends/gui/banner.js +42 -4
  32. package/dist/backends/gui/banner.js.map +1 -1
  33. package/dist/backends/gui/breadcrumb.cjs +28 -10
  34. package/dist/backends/gui/breadcrumb.d.ts +20 -11
  35. package/dist/backends/gui/breadcrumb.d.ts.map +1 -1
  36. package/dist/backends/gui/breadcrumb.js +28 -10
  37. package/dist/backends/gui/breadcrumb.js.map +1 -1
  38. package/dist/backends/gui/button-group.cjs +43 -0
  39. package/dist/backends/gui/button-group.d.ts +48 -0
  40. package/dist/backends/gui/button-group.d.ts.map +1 -0
  41. package/dist/backends/gui/button-group.js +40 -0
  42. package/dist/backends/gui/button-group.js.map +1 -0
  43. package/dist/backends/gui/button.cjs +177 -4
  44. package/dist/backends/gui/button.d.ts +69 -4
  45. package/dist/backends/gui/button.d.ts.map +1 -1
  46. package/dist/backends/gui/button.js +179 -6
  47. package/dist/backends/gui/button.js.map +1 -1
  48. package/dist/backends/gui/card.cjs +50 -21
  49. package/dist/backends/gui/card.d.ts +16 -7
  50. package/dist/backends/gui/card.d.ts.map +1 -1
  51. package/dist/backends/gui/card.js +50 -21
  52. package/dist/backends/gui/card.js.map +1 -1
  53. package/dist/backends/gui/checkbox.cjs +86 -14
  54. package/dist/backends/gui/checkbox.d.ts +30 -2
  55. package/dist/backends/gui/checkbox.d.ts.map +1 -1
  56. package/dist/backends/gui/checkbox.js +87 -15
  57. package/dist/backends/gui/checkbox.js.map +1 -1
  58. package/dist/backends/gui/chip.cjs +51 -0
  59. package/dist/backends/gui/chip.d.ts +47 -0
  60. package/dist/backends/gui/chip.d.ts.map +1 -0
  61. package/dist/backends/gui/chip.js +49 -0
  62. package/dist/backends/gui/chip.js.map +1 -0
  63. package/dist/backends/gui/choice.cjs +18 -3
  64. package/dist/backends/gui/choice.d.ts +10 -2
  65. package/dist/backends/gui/choice.d.ts.map +1 -1
  66. package/dist/backends/gui/choice.js +19 -4
  67. package/dist/backends/gui/choice.js.map +1 -1
  68. package/dist/backends/gui/code-editor.cjs +16 -5
  69. package/dist/backends/gui/code-editor.d.ts +18 -1
  70. package/dist/backends/gui/code-editor.d.ts.map +1 -1
  71. package/dist/backends/gui/code-editor.js +16 -5
  72. package/dist/backends/gui/code-editor.js.map +1 -1
  73. package/dist/backends/gui/color-sample.cjs +24 -0
  74. package/dist/backends/gui/color-sample.d.ts +23 -0
  75. package/dist/backends/gui/color-sample.d.ts.map +1 -0
  76. package/dist/backends/gui/color-sample.js +22 -0
  77. package/dist/backends/gui/color-sample.js.map +1 -0
  78. package/dist/backends/gui/control.cjs +5 -3
  79. package/dist/backends/gui/control.d.ts +13 -3
  80. package/dist/backends/gui/control.d.ts.map +1 -1
  81. package/dist/backends/gui/control.js +5 -3
  82. package/dist/backends/gui/control.js.map +1 -1
  83. package/dist/backends/gui/country-select.cjs +69 -0
  84. package/dist/backends/gui/country-select.d.ts +30 -0
  85. package/dist/backends/gui/country-select.d.ts.map +1 -0
  86. package/dist/backends/gui/country-select.js +67 -0
  87. package/dist/backends/gui/country-select.js.map +1 -0
  88. package/dist/backends/gui/currency-picker.cjs +48 -0
  89. package/dist/backends/gui/currency-picker.d.ts +37 -0
  90. package/dist/backends/gui/currency-picker.d.ts.map +1 -0
  91. package/dist/backends/gui/currency-picker.js +46 -0
  92. package/dist/backends/gui/currency-picker.js.map +1 -0
  93. package/dist/backends/gui/density.cjs +32 -0
  94. package/dist/backends/gui/density.d.ts +27 -0
  95. package/dist/backends/gui/density.d.ts.map +1 -0
  96. package/dist/backends/gui/density.js +27 -0
  97. package/dist/backends/gui/density.js.map +1 -0
  98. package/dist/backends/gui/dialog.cjs +65 -7
  99. package/dist/backends/gui/dialog.d.ts +68 -3
  100. package/dist/backends/gui/dialog.d.ts.map +1 -1
  101. package/dist/backends/gui/dialog.js +63 -7
  102. package/dist/backends/gui/dialog.js.map +1 -1
  103. package/dist/backends/gui/dropdown-menu.cjs +361 -31
  104. package/dist/backends/gui/dropdown-menu.d.ts +151 -15
  105. package/dist/backends/gui/dropdown-menu.d.ts.map +1 -1
  106. package/dist/backends/gui/dropdown-menu.js +353 -34
  107. package/dist/backends/gui/dropdown-menu.js.map +1 -1
  108. package/dist/backends/gui/feedback.cjs +78 -0
  109. package/dist/backends/gui/feedback.d.ts +46 -0
  110. package/dist/backends/gui/feedback.d.ts.map +1 -0
  111. package/dist/backends/gui/feedback.js +74 -0
  112. package/dist/backends/gui/feedback.js.map +1 -0
  113. package/dist/backends/gui/field.cjs +71 -14
  114. package/dist/backends/gui/field.d.ts +43 -3
  115. package/dist/backends/gui/field.d.ts.map +1 -1
  116. package/dist/backends/gui/field.js +69 -14
  117. package/dist/backends/gui/field.js.map +1 -1
  118. package/dist/backends/gui/flag.cjs +17 -0
  119. package/dist/backends/gui/flag.d.ts +9 -0
  120. package/dist/backends/gui/flag.d.ts.map +1 -0
  121. package/dist/backends/gui/flag.js +14 -0
  122. package/dist/backends/gui/flag.js.map +1 -0
  123. package/dist/backends/gui/grip.cjs +35 -3
  124. package/dist/backends/gui/grip.d.ts +16 -1
  125. package/dist/backends/gui/grip.d.ts.map +1 -1
  126. package/dist/backends/gui/grip.js +35 -3
  127. package/dist/backends/gui/grip.js.map +1 -1
  128. package/dist/backends/gui/heading.cjs +27 -0
  129. package/dist/backends/gui/heading.d.ts +8 -0
  130. package/dist/backends/gui/heading.d.ts.map +1 -0
  131. package/dist/backends/gui/heading.js +25 -0
  132. package/dist/backends/gui/heading.js.map +1 -0
  133. package/dist/backends/gui/hue.cjs +49 -0
  134. package/dist/backends/gui/hue.d.ts +18 -0
  135. package/dist/backends/gui/hue.d.ts.map +1 -0
  136. package/dist/backends/gui/hue.js +43 -0
  137. package/dist/backends/gui/hue.js.map +1 -0
  138. package/dist/backends/gui/icon-tile.cjs +36 -0
  139. package/dist/backends/gui/icon-tile.d.ts +26 -0
  140. package/dist/backends/gui/icon-tile.d.ts.map +1 -0
  141. package/dist/backends/gui/icon-tile.js +32 -0
  142. package/dist/backends/gui/icon-tile.js.map +1 -0
  143. package/dist/backends/gui/image-input.cjs +78 -0
  144. package/dist/backends/gui/image-input.d.ts +32 -0
  145. package/dist/backends/gui/image-input.d.ts.map +1 -0
  146. package/dist/backends/gui/image-input.js +74 -0
  147. package/dist/backends/gui/image-input.js.map +1 -0
  148. package/dist/backends/gui/index.cjs +93 -7
  149. package/dist/backends/gui/index.d.ts +45 -2
  150. package/dist/backends/gui/index.d.ts.map +1 -1
  151. package/dist/backends/gui/index.js +35 -1
  152. package/dist/backends/gui/index.js.map +1 -1
  153. package/dist/backends/gui/input-group.cjs +49 -0
  154. package/dist/backends/gui/input-group.d.ts +46 -0
  155. package/dist/backends/gui/input-group.d.ts.map +1 -0
  156. package/dist/backends/gui/input-group.js +46 -0
  157. package/dist/backends/gui/input-group.js.map +1 -0
  158. package/dist/backends/gui/input.cjs +32 -4
  159. package/dist/backends/gui/input.d.ts +5 -1
  160. package/dist/backends/gui/input.d.ts.map +1 -1
  161. package/dist/backends/gui/input.js +33 -5
  162. package/dist/backends/gui/input.js.map +1 -1
  163. package/dist/backends/gui/item.cjs +34 -2
  164. package/dist/backends/gui/item.d.ts +21 -5
  165. package/dist/backends/gui/item.d.ts.map +1 -1
  166. package/dist/backends/gui/item.js +35 -3
  167. package/dist/backends/gui/item.js.map +1 -1
  168. package/dist/backends/gui/json-tree.cjs +103 -15
  169. package/dist/backends/gui/json-tree.d.ts +39 -3
  170. package/dist/backends/gui/json-tree.d.ts.map +1 -1
  171. package/dist/backends/gui/json-tree.js +104 -16
  172. package/dist/backends/gui/json-tree.js.map +1 -1
  173. package/dist/backends/gui/kbd.cjs +18 -2
  174. package/dist/backends/gui/kbd.d.ts +5 -2
  175. package/dist/backends/gui/kbd.d.ts.map +1 -1
  176. package/dist/backends/gui/kbd.js +18 -2
  177. package/dist/backends/gui/kbd.js.map +1 -1
  178. package/dist/backends/gui/label.cjs +14 -3
  179. package/dist/backends/gui/label.d.ts +12 -3
  180. package/dist/backends/gui/label.d.ts.map +1 -1
  181. package/dist/backends/gui/label.js +14 -3
  182. package/dist/backends/gui/label.js.map +1 -1
  183. package/dist/backends/gui/layout.cjs +5 -1
  184. package/dist/backends/gui/layout.d.ts +1 -1
  185. package/dist/backends/gui/layout.d.ts.map +1 -1
  186. package/dist/backends/gui/layout.js +5 -1
  187. package/dist/backends/gui/layout.js.map +1 -1
  188. package/dist/backends/gui/number-field.cjs +163 -0
  189. package/dist/backends/gui/number-field.d.ts +34 -0
  190. package/dist/backends/gui/number-field.d.ts.map +1 -0
  191. package/dist/backends/gui/number-field.js +160 -0
  192. package/dist/backends/gui/number-field.js.map +1 -0
  193. package/dist/backends/gui/overflowing-list.cjs +79 -0
  194. package/dist/backends/gui/overflowing-list.d.ts +42 -0
  195. package/dist/backends/gui/overflowing-list.d.ts.map +1 -0
  196. package/dist/backends/gui/overflowing-list.js +76 -0
  197. package/dist/backends/gui/overflowing-list.js.map +1 -0
  198. package/dist/backends/gui/phone-country-picker.cjs +60 -0
  199. package/dist/backends/gui/phone-country-picker.d.ts +34 -0
  200. package/dist/backends/gui/phone-country-picker.d.ts.map +1 -0
  201. package/dist/backends/gui/phone-country-picker.js +57 -0
  202. package/dist/backends/gui/phone-country-picker.js.map +1 -0
  203. package/dist/backends/gui/popover.cjs +20 -4
  204. package/dist/backends/gui/popover.d.ts +12 -1
  205. package/dist/backends/gui/popover.d.ts.map +1 -1
  206. package/dist/backends/gui/popover.js +21 -5
  207. package/dist/backends/gui/popover.js.map +1 -1
  208. package/dist/backends/gui/progress-ring.cjs +38 -0
  209. package/dist/backends/gui/progress-ring.d.ts +37 -0
  210. package/dist/backends/gui/progress-ring.d.ts.map +1 -0
  211. package/dist/backends/gui/progress-ring.js +36 -0
  212. package/dist/backends/gui/progress-ring.js.map +1 -0
  213. package/dist/backends/gui/progress.cjs +31 -7
  214. package/dist/backends/gui/progress.d.ts +25 -3
  215. package/dist/backends/gui/progress.d.ts.map +1 -1
  216. package/dist/backends/gui/progress.js +32 -8
  217. package/dist/backends/gui/progress.js.map +1 -1
  218. package/dist/backends/gui/radio-group.cjs +28 -2
  219. package/dist/backends/gui/radio-group.d.ts +20 -2
  220. package/dist/backends/gui/radio-group.d.ts.map +1 -1
  221. package/dist/backends/gui/radio-group.js +28 -2
  222. package/dist/backends/gui/radio-group.js.map +1 -1
  223. package/dist/backends/gui/search-list.cjs +62 -0
  224. package/dist/backends/gui/search-list.d.ts +65 -0
  225. package/dist/backends/gui/search-list.d.ts.map +1 -0
  226. package/dist/backends/gui/search-list.js +58 -0
  227. package/dist/backends/gui/search-list.js.map +1 -0
  228. package/dist/backends/gui/select.cjs +50 -16
  229. package/dist/backends/gui/select.d.ts +12 -3
  230. package/dist/backends/gui/select.d.ts.map +1 -1
  231. package/dist/backends/gui/select.js +51 -17
  232. package/dist/backends/gui/select.js.map +1 -1
  233. package/dist/backends/gui/shortcut.cjs +122 -0
  234. package/dist/backends/gui/shortcut.d.ts +58 -0
  235. package/dist/backends/gui/shortcut.d.ts.map +1 -0
  236. package/dist/backends/gui/shortcut.js +115 -0
  237. package/dist/backends/gui/shortcut.js.map +1 -0
  238. package/dist/backends/gui/skeleton.cjs +41 -10
  239. package/dist/backends/gui/skeleton.d.ts +46 -8
  240. package/dist/backends/gui/skeleton.d.ts.map +1 -1
  241. package/dist/backends/gui/skeleton.js +39 -8
  242. package/dist/backends/gui/skeleton.js.map +1 -1
  243. package/dist/backends/gui/snippet.cjs +12 -1
  244. package/dist/backends/gui/snippet.d.ts +4 -2
  245. package/dist/backends/gui/snippet.d.ts.map +1 -1
  246. package/dist/backends/gui/snippet.js +12 -1
  247. package/dist/backends/gui/snippet.js.map +1 -1
  248. package/dist/backends/gui/spinner.cjs +8 -1
  249. package/dist/backends/gui/spinner.d.ts +11 -2
  250. package/dist/backends/gui/spinner.d.ts.map +1 -1
  251. package/dist/backends/gui/spinner.js +9 -2
  252. package/dist/backends/gui/spinner.js.map +1 -1
  253. package/dist/backends/gui/stack-icon.cjs +17 -0
  254. package/dist/backends/gui/stack-icon.d.ts +15 -0
  255. package/dist/backends/gui/stack-icon.d.ts.map +1 -0
  256. package/dist/backends/gui/stack-icon.js +15 -0
  257. package/dist/backends/gui/stack-icon.js.map +1 -0
  258. package/dist/backends/gui/status.cjs +38 -1
  259. package/dist/backends/gui/status.d.ts +16 -2
  260. package/dist/backends/gui/status.d.ts.map +1 -1
  261. package/dist/backends/gui/status.js +38 -2
  262. package/dist/backends/gui/status.js.map +1 -1
  263. package/dist/backends/gui/stepper.cjs +73 -3
  264. package/dist/backends/gui/stepper.d.ts +25 -1
  265. package/dist/backends/gui/stepper.d.ts.map +1 -1
  266. package/dist/backends/gui/stepper.js +71 -5
  267. package/dist/backends/gui/stepper.js.map +1 -1
  268. package/dist/backends/gui/switch.cjs +35 -20
  269. package/dist/backends/gui/switch.d.ts +12 -2
  270. package/dist/backends/gui/switch.d.ts.map +1 -1
  271. package/dist/backends/gui/switch.js +35 -20
  272. package/dist/backends/gui/switch.js.map +1 -1
  273. package/dist/backends/gui/tabs.cjs +63 -17
  274. package/dist/backends/gui/tabs.d.ts +35 -6
  275. package/dist/backends/gui/tabs.d.ts.map +1 -1
  276. package/dist/backends/gui/tabs.js +65 -19
  277. package/dist/backends/gui/tabs.js.map +1 -1
  278. package/dist/backends/gui/tag.cjs +48 -0
  279. package/dist/backends/gui/tag.d.ts +53 -0
  280. package/dist/backends/gui/tag.d.ts.map +1 -0
  281. package/dist/backends/gui/tag.js +46 -0
  282. package/dist/backends/gui/tag.js.map +1 -0
  283. package/dist/backends/gui/tags.cjs +9 -2
  284. package/dist/backends/gui/tags.d.ts +6 -5
  285. package/dist/backends/gui/tags.d.ts.map +1 -1
  286. package/dist/backends/gui/tags.js +9 -2
  287. package/dist/backends/gui/tags.js.map +1 -1
  288. package/dist/backends/gui/textarea.cjs +22 -6
  289. package/dist/backends/gui/textarea.d.ts +10 -1
  290. package/dist/backends/gui/textarea.d.ts.map +1 -1
  291. package/dist/backends/gui/textarea.js +22 -6
  292. package/dist/backends/gui/textarea.js.map +1 -1
  293. package/dist/backends/gui/toaster.cjs +167 -3
  294. package/dist/backends/gui/toaster.d.ts +28 -2
  295. package/dist/backends/gui/toaster.d.ts.map +1 -1
  296. package/dist/backends/gui/toaster.js +167 -5
  297. package/dist/backends/gui/toaster.js.map +1 -1
  298. package/dist/backends/gui/toggle-group.cjs +13 -0
  299. package/dist/backends/gui/toggle-group.d.ts +7 -1
  300. package/dist/backends/gui/toggle-group.d.ts.map +1 -1
  301. package/dist/backends/gui/toggle-group.js +13 -0
  302. package/dist/backends/gui/toggle-group.js.map +1 -1
  303. package/dist/backends/gui/tooltip.cjs +29 -6
  304. package/dist/backends/gui/tooltip.d.ts +23 -4
  305. package/dist/backends/gui/tooltip.d.ts.map +1 -1
  306. package/dist/backends/gui/tooltip.js +31 -8
  307. package/dist/backends/gui/tooltip.js.map +1 -1
  308. package/dist/backends/gui/truncated-text.cjs +102 -0
  309. package/dist/backends/gui/truncated-text.d.ts +55 -0
  310. package/dist/backends/gui/truncated-text.d.ts.map +1 -0
  311. package/dist/backends/gui/truncated-text.js +97 -0
  312. package/dist/backends/gui/truncated-text.js.map +1 -0
  313. package/dist/gallery/compound.cjs +60 -0
  314. package/dist/gallery/compound.d.ts +2 -0
  315. package/dist/gallery/compound.d.ts.map +1 -0
  316. package/dist/gallery/compound.js +58 -0
  317. package/dist/gallery/compound.js.map +1 -0
  318. package/dist/gallery/display.cjs +47 -0
  319. package/dist/gallery/display.d.ts +3 -0
  320. package/dist/gallery/display.d.ts.map +1 -0
  321. package/dist/gallery/display.js +45 -0
  322. package/dist/gallery/display.js.map +1 -0
  323. package/dist/gallery/feedback.cjs +38 -0
  324. package/dist/gallery/feedback.d.ts +2 -0
  325. package/dist/gallery/feedback.d.ts.map +1 -0
  326. package/dist/gallery/feedback.js +36 -0
  327. package/dist/gallery/feedback.js.map +1 -0
  328. package/dist/gallery/fields.cjs +53 -0
  329. package/dist/gallery/fields.d.ts +2 -0
  330. package/dist/gallery/fields.d.ts.map +1 -0
  331. package/dist/gallery/fields.js +51 -0
  332. package/dist/gallery/fields.js.map +1 -0
  333. package/dist/gallery/frames.cjs +47 -0
  334. package/dist/gallery/frames.d.ts +2 -0
  335. package/dist/gallery/frames.d.ts.map +1 -0
  336. package/dist/gallery/frames.js +45 -0
  337. package/dist/gallery/frames.js.map +1 -0
  338. package/dist/gallery/menus.cjs +64 -0
  339. package/dist/gallery/menus.d.ts +15 -0
  340. package/dist/gallery/menus.d.ts.map +1 -0
  341. package/dist/gallery/menus.js +58 -0
  342. package/dist/gallery/menus.js.map +1 -0
  343. package/dist/gallery/records.cjs +33 -0
  344. package/dist/gallery/records.d.ts +2 -0
  345. package/dist/gallery/records.d.ts.map +1 -0
  346. package/dist/gallery/records.js +31 -0
  347. package/dist/gallery/records.js.map +1 -0
  348. package/dist/gallery/section.cjs +17 -0
  349. package/dist/gallery/section.d.ts +10 -0
  350. package/dist/gallery/section.d.ts.map +1 -0
  351. package/dist/gallery/section.js +14 -0
  352. package/dist/gallery/section.js.map +1 -0
  353. package/dist/gallery.cjs +8 -14
  354. package/dist/gallery.d.ts.map +1 -1
  355. package/dist/gallery.html +1613 -265
  356. package/dist/gallery.js +3 -9
  357. package/dist/gallery.js.map +1 -1
  358. package/dist/gui-config.cjs +37 -7
  359. package/dist/gui-config.d.ts +11 -3
  360. package/dist/gui-config.d.ts.map +1 -1
  361. package/dist/gui-config.js +37 -7
  362. package/dist/gui-config.js.map +1 -1
  363. package/dist/index.cjs +61 -2
  364. package/dist/index.d.ts +4 -2
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +7 -1
  367. package/dist/index.js.map +1 -1
  368. package/dist/index.node.cjs +61 -2
  369. package/dist/index.node.js +7 -1
  370. package/dist/motion.cjs +25 -1
  371. package/dist/motion.d.ts +16 -1
  372. package/dist/motion.d.ts.map +1 -1
  373. package/dist/motion.js +24 -1
  374. package/dist/motion.js.map +1 -1
  375. package/dist/primitives/AvatarGroup.cjs +8 -0
  376. package/dist/primitives/AvatarGroup.d.ts +2 -0
  377. package/dist/primitives/AvatarGroup.d.ts.map +1 -0
  378. package/dist/primitives/AvatarGroup.js +5 -0
  379. package/dist/primitives/AvatarGroup.js.map +1 -0
  380. package/dist/primitives/BannerAction.cjs +8 -0
  381. package/dist/primitives/BannerAction.d.ts +2 -0
  382. package/dist/primitives/BannerAction.d.ts.map +1 -0
  383. package/dist/primitives/BannerAction.js +5 -0
  384. package/dist/primitives/BannerAction.js.map +1 -0
  385. package/dist/primitives/ButtonGroup.cjs +8 -0
  386. package/dist/primitives/ButtonGroup.d.ts +2 -0
  387. package/dist/primitives/ButtonGroup.d.ts.map +1 -0
  388. package/dist/primitives/ButtonGroup.js +5 -0
  389. package/dist/primitives/ButtonGroup.js.map +1 -0
  390. package/dist/primitives/ButtonGroupContext.cjs +8 -0
  391. package/dist/primitives/ButtonGroupContext.d.ts +2 -0
  392. package/dist/primitives/ButtonGroupContext.d.ts.map +1 -0
  393. package/dist/primitives/ButtonGroupContext.js +5 -0
  394. package/dist/primitives/ButtonGroupContext.js.map +1 -0
  395. package/dist/primitives/CalloutAction.cjs +8 -0
  396. package/dist/primitives/CalloutAction.d.ts +2 -0
  397. package/dist/primitives/CalloutAction.d.ts.map +1 -0
  398. package/dist/primitives/CalloutAction.js +5 -0
  399. package/dist/primitives/CalloutAction.js.map +1 -0
  400. package/dist/primitives/Chip.cjs +8 -0
  401. package/dist/primitives/Chip.d.ts +2 -0
  402. package/dist/primitives/Chip.d.ts.map +1 -0
  403. package/dist/primitives/Chip.js +5 -0
  404. package/dist/primitives/Chip.js.map +1 -0
  405. package/dist/primitives/ColorSample.cjs +8 -0
  406. package/dist/primitives/ColorSample.d.ts +2 -0
  407. package/dist/primitives/ColorSample.d.ts.map +1 -0
  408. package/dist/primitives/ColorSample.js +5 -0
  409. package/dist/primitives/ColorSample.js.map +1 -0
  410. package/dist/primitives/CountrySelect.cjs +8 -0
  411. package/dist/primitives/CountrySelect.d.ts +2 -0
  412. package/dist/primitives/CountrySelect.d.ts.map +1 -0
  413. package/dist/primitives/CountrySelect.js +5 -0
  414. package/dist/primitives/CountrySelect.js.map +1 -0
  415. package/dist/primitives/CurrencyPicker.cjs +8 -0
  416. package/dist/primitives/CurrencyPicker.d.ts +2 -0
  417. package/dist/primitives/CurrencyPicker.d.ts.map +1 -0
  418. package/dist/primitives/CurrencyPicker.js +5 -0
  419. package/dist/primitives/CurrencyPicker.js.map +1 -0
  420. package/dist/primitives/Density.cjs +8 -0
  421. package/dist/primitives/Density.d.ts +2 -0
  422. package/dist/primitives/Density.d.ts.map +1 -0
  423. package/dist/primitives/Density.js +5 -0
  424. package/dist/primitives/Density.js.map +1 -0
  425. package/dist/primitives/DialogBody.cjs +8 -0
  426. package/dist/primitives/DialogBody.d.ts +2 -0
  427. package/dist/primitives/DialogBody.d.ts.map +1 -0
  428. package/dist/primitives/DialogBody.js +5 -0
  429. package/dist/primitives/DialogBody.js.map +1 -0
  430. package/dist/primitives/DropdownMenuBack.cjs +8 -0
  431. package/dist/primitives/DropdownMenuBack.d.ts +2 -0
  432. package/dist/primitives/DropdownMenuBack.d.ts.map +1 -0
  433. package/dist/primitives/DropdownMenuBack.js +5 -0
  434. package/dist/primitives/DropdownMenuBack.js.map +1 -0
  435. package/dist/primitives/DropdownMenuClose.cjs +8 -0
  436. package/dist/primitives/DropdownMenuClose.d.ts +2 -0
  437. package/dist/primitives/DropdownMenuClose.d.ts.map +1 -0
  438. package/dist/primitives/DropdownMenuClose.js +5 -0
  439. package/dist/primitives/DropdownMenuClose.js.map +1 -0
  440. package/dist/primitives/DropdownMenuEmpty.cjs +8 -0
  441. package/dist/primitives/DropdownMenuEmpty.d.ts +2 -0
  442. package/dist/primitives/DropdownMenuEmpty.d.ts.map +1 -0
  443. package/dist/primitives/DropdownMenuEmpty.js +5 -0
  444. package/dist/primitives/DropdownMenuEmpty.js.map +1 -0
  445. package/dist/primitives/DropdownMenuHeader.cjs +8 -0
  446. package/dist/primitives/DropdownMenuHeader.d.ts +2 -0
  447. package/dist/primitives/DropdownMenuHeader.d.ts.map +1 -0
  448. package/dist/primitives/DropdownMenuHeader.js +5 -0
  449. package/dist/primitives/DropdownMenuHeader.js.map +1 -0
  450. package/dist/primitives/DropdownMenuLoading.cjs +8 -0
  451. package/dist/primitives/DropdownMenuLoading.d.ts +2 -0
  452. package/dist/primitives/DropdownMenuLoading.d.ts.map +1 -0
  453. package/dist/primitives/DropdownMenuLoading.js +5 -0
  454. package/dist/primitives/DropdownMenuLoading.js.map +1 -0
  455. package/dist/primitives/DropdownMenuOptionItem.cjs +8 -0
  456. package/dist/primitives/DropdownMenuOptionItem.d.ts +2 -0
  457. package/dist/primitives/DropdownMenuOptionItem.d.ts.map +1 -0
  458. package/dist/primitives/DropdownMenuOptionItem.js +5 -0
  459. package/dist/primitives/DropdownMenuOptionItem.js.map +1 -0
  460. package/dist/primitives/DropdownMenuPage.cjs +8 -0
  461. package/dist/primitives/DropdownMenuPage.d.ts +2 -0
  462. package/dist/primitives/DropdownMenuPage.d.ts.map +1 -0
  463. package/dist/primitives/DropdownMenuPage.js +5 -0
  464. package/dist/primitives/DropdownMenuPage.js.map +1 -0
  465. package/dist/primitives/DropdownMenuSearch.cjs +8 -0
  466. package/dist/primitives/DropdownMenuSearch.d.ts +2 -0
  467. package/dist/primitives/DropdownMenuSearch.d.ts.map +1 -0
  468. package/dist/primitives/DropdownMenuSearch.js +5 -0
  469. package/dist/primitives/DropdownMenuSearch.js.map +1 -0
  470. package/dist/primitives/DropdownMenuSection.cjs +8 -0
  471. package/dist/primitives/DropdownMenuSection.d.ts +2 -0
  472. package/dist/primitives/DropdownMenuSection.d.ts.map +1 -0
  473. package/dist/primitives/DropdownMenuSection.js +5 -0
  474. package/dist/primitives/DropdownMenuSection.js.map +1 -0
  475. package/dist/primitives/DropdownMenuSelectionGroup.cjs +8 -0
  476. package/dist/primitives/DropdownMenuSelectionGroup.d.ts +2 -0
  477. package/dist/primitives/DropdownMenuSelectionGroup.d.ts.map +1 -0
  478. package/dist/primitives/DropdownMenuSelectionGroup.js +5 -0
  479. package/dist/primitives/DropdownMenuSelectionGroup.js.map +1 -0
  480. package/dist/primitives/DropdownMenuTitle.cjs +8 -0
  481. package/dist/primitives/DropdownMenuTitle.d.ts +2 -0
  482. package/dist/primitives/DropdownMenuTitle.d.ts.map +1 -0
  483. package/dist/primitives/DropdownMenuTitle.js +5 -0
  484. package/dist/primitives/DropdownMenuTitle.js.map +1 -0
  485. package/dist/primitives/Heading.cjs +2 -2
  486. package/dist/primitives/Heading.d.ts +1 -1
  487. package/dist/primitives/Heading.d.ts.map +1 -1
  488. package/dist/primitives/Heading.js +1 -1
  489. package/dist/primitives/Heading.js.map +1 -1
  490. package/dist/primitives/IconTile.cjs +8 -0
  491. package/dist/primitives/IconTile.d.ts +2 -0
  492. package/dist/primitives/IconTile.d.ts.map +1 -0
  493. package/dist/primitives/IconTile.js +5 -0
  494. package/dist/primitives/IconTile.js.map +1 -0
  495. package/dist/primitives/ImageInput.cjs +8 -0
  496. package/dist/primitives/ImageInput.d.ts +2 -0
  497. package/dist/primitives/ImageInput.d.ts.map +1 -0
  498. package/dist/primitives/ImageInput.js +5 -0
  499. package/dist/primitives/ImageInput.js.map +1 -0
  500. package/dist/primitives/InputGroup.cjs +8 -0
  501. package/dist/primitives/InputGroup.d.ts +2 -0
  502. package/dist/primitives/InputGroup.d.ts.map +1 -0
  503. package/dist/primitives/InputGroup.js +5 -0
  504. package/dist/primitives/InputGroup.js.map +1 -0
  505. package/dist/primitives/NumberField.cjs +8 -0
  506. package/dist/primitives/NumberField.d.ts +2 -0
  507. package/dist/primitives/NumberField.d.ts.map +1 -0
  508. package/dist/primitives/NumberField.js +5 -0
  509. package/dist/primitives/NumberField.js.map +1 -0
  510. package/dist/primitives/OverflowingList.cjs +8 -0
  511. package/dist/primitives/OverflowingList.d.ts +2 -0
  512. package/dist/primitives/OverflowingList.d.ts.map +1 -0
  513. package/dist/primitives/OverflowingList.js +5 -0
  514. package/dist/primitives/OverflowingList.js.map +1 -0
  515. package/dist/primitives/PhoneCountryPicker.cjs +8 -0
  516. package/dist/primitives/PhoneCountryPicker.d.ts +2 -0
  517. package/dist/primitives/PhoneCountryPicker.d.ts.map +1 -0
  518. package/dist/primitives/PhoneCountryPicker.js +5 -0
  519. package/dist/primitives/PhoneCountryPicker.js.map +1 -0
  520. package/dist/primitives/ProgressRing.cjs +8 -0
  521. package/dist/primitives/ProgressRing.d.ts +2 -0
  522. package/dist/primitives/ProgressRing.d.ts.map +1 -0
  523. package/dist/primitives/ProgressRing.js +5 -0
  524. package/dist/primitives/ProgressRing.js.map +1 -0
  525. package/dist/primitives/RadioCircle.cjs +8 -0
  526. package/dist/primitives/RadioCircle.d.ts +2 -0
  527. package/dist/primitives/RadioCircle.d.ts.map +1 -0
  528. package/dist/primitives/RadioCircle.js +5 -0
  529. package/dist/primitives/RadioCircle.js.map +1 -0
  530. package/dist/primitives/SKELETON_HEIGHT.cjs +8 -0
  531. package/dist/primitives/SKELETON_HEIGHT.d.ts +2 -0
  532. package/dist/primitives/SKELETON_HEIGHT.d.ts.map +1 -0
  533. package/dist/primitives/SKELETON_HEIGHT.js +5 -0
  534. package/dist/primitives/SKELETON_HEIGHT.js.map +1 -0
  535. package/dist/primitives/STATUS_COLOR.cjs +8 -0
  536. package/dist/primitives/STATUS_COLOR.d.ts +2 -0
  537. package/dist/primitives/STATUS_COLOR.d.ts.map +1 -0
  538. package/dist/primitives/STATUS_COLOR.js +5 -0
  539. package/dist/primitives/STATUS_COLOR.js.map +1 -0
  540. package/dist/primitives/STATUS_HUE.cjs +8 -0
  541. package/dist/primitives/STATUS_HUE.d.ts +2 -0
  542. package/dist/primitives/STATUS_HUE.d.ts.map +1 -0
  543. package/dist/primitives/STATUS_HUE.js +5 -0
  544. package/dist/primitives/STATUS_HUE.js.map +1 -0
  545. package/dist/primitives/STATUS_PAINT.cjs +8 -0
  546. package/dist/primitives/STATUS_PAINT.d.ts +2 -0
  547. package/dist/primitives/STATUS_PAINT.d.ts.map +1 -0
  548. package/dist/primitives/STATUS_PAINT.js +5 -0
  549. package/dist/primitives/STATUS_PAINT.js.map +1 -0
  550. package/dist/primitives/Shortcut.cjs +8 -0
  551. package/dist/primitives/Shortcut.d.ts +2 -0
  552. package/dist/primitives/Shortcut.d.ts.map +1 -0
  553. package/dist/primitives/Shortcut.js +5 -0
  554. package/dist/primitives/Shortcut.js.map +1 -0
  555. package/dist/primitives/StackIcon.cjs +8 -0
  556. package/dist/primitives/StackIcon.d.ts +2 -0
  557. package/dist/primitives/StackIcon.d.ts.map +1 -0
  558. package/dist/primitives/StackIcon.js +5 -0
  559. package/dist/primitives/StackIcon.js.map +1 -0
  560. package/dist/primitives/TOAST_DURATION.cjs +8 -0
  561. package/dist/primitives/TOAST_DURATION.d.ts +2 -0
  562. package/dist/primitives/TOAST_DURATION.d.ts.map +1 -0
  563. package/dist/primitives/TOAST_DURATION.js +5 -0
  564. package/dist/primitives/TOAST_DURATION.js.map +1 -0
  565. package/dist/primitives/Tag.cjs +8 -0
  566. package/dist/primitives/Tag.d.ts +2 -0
  567. package/dist/primitives/Tag.d.ts.map +1 -0
  568. package/dist/primitives/Tag.js +5 -0
  569. package/dist/primitives/Tag.js.map +1 -0
  570. package/dist/primitives/ToastCard.cjs +8 -0
  571. package/dist/primitives/ToastCard.d.ts +2 -0
  572. package/dist/primitives/ToastCard.d.ts.map +1 -0
  573. package/dist/primitives/ToastCard.js +5 -0
  574. package/dist/primitives/ToastCard.js.map +1 -0
  575. package/dist/primitives/ToastFace.cjs +8 -0
  576. package/dist/primitives/ToastFace.d.ts +2 -0
  577. package/dist/primitives/ToastFace.d.ts.map +1 -0
  578. package/dist/primitives/ToastFace.js +5 -0
  579. package/dist/primitives/ToastFace.js.map +1 -0
  580. package/dist/primitives/TruncatedText.cjs +8 -0
  581. package/dist/primitives/TruncatedText.d.ts +2 -0
  582. package/dist/primitives/TruncatedText.d.ts.map +1 -0
  583. package/dist/primitives/TruncatedText.js +5 -0
  584. package/dist/primitives/TruncatedText.js.map +1 -0
  585. package/dist/primitives/TruncatedTextProvider.cjs +8 -0
  586. package/dist/primitives/TruncatedTextProvider.d.ts +2 -0
  587. package/dist/primitives/TruncatedTextProvider.d.ts.map +1 -0
  588. package/dist/primitives/TruncatedTextProvider.js +5 -0
  589. package/dist/primitives/TruncatedTextProvider.js.map +1 -0
  590. package/dist/primitives/VisuallyHidden.cjs +8 -0
  591. package/dist/primitives/VisuallyHidden.d.ts +2 -0
  592. package/dist/primitives/VisuallyHidden.d.ts.map +1 -0
  593. package/dist/primitives/VisuallyHidden.js +5 -0
  594. package/dist/primitives/VisuallyHidden.js.map +1 -0
  595. package/dist/primitives/fieldSize.cjs +8 -0
  596. package/dist/primitives/fieldSize.d.ts +2 -0
  597. package/dist/primitives/fieldSize.d.ts.map +1 -0
  598. package/dist/primitives/fieldSize.js +5 -0
  599. package/dist/primitives/fieldSize.js.map +1 -0
  600. package/dist/primitives/flag.cjs +8 -0
  601. package/dist/primitives/flag.d.ts +2 -0
  602. package/dist/primitives/flag.d.ts.map +1 -0
  603. package/dist/primitives/flag.js +5 -0
  604. package/dist/primitives/flag.js.map +1 -0
  605. package/dist/primitives/formatShortcut.cjs +8 -0
  606. package/dist/primitives/formatShortcut.d.ts +2 -0
  607. package/dist/primitives/formatShortcut.d.ts.map +1 -0
  608. package/dist/primitives/formatShortcut.js +5 -0
  609. package/dist/primitives/formatShortcut.js.map +1 -0
  610. package/dist/primitives/initialOf.cjs +8 -0
  611. package/dist/primitives/initialOf.d.ts +2 -0
  612. package/dist/primitives/initialOf.d.ts.map +1 -0
  613. package/dist/primitives/initialOf.js +5 -0
  614. package/dist/primitives/initialOf.js.map +1 -0
  615. package/dist/primitives/parseNumber.cjs +8 -0
  616. package/dist/primitives/parseNumber.d.ts +2 -0
  617. package/dist/primitives/parseNumber.d.ts.map +1 -0
  618. package/dist/primitives/parseNumber.js +5 -0
  619. package/dist/primitives/parseNumber.js.map +1 -0
  620. package/dist/primitives/speakShortcut.cjs +8 -0
  621. package/dist/primitives/speakShortcut.d.ts +2 -0
  622. package/dist/primitives/speakShortcut.d.ts.map +1 -0
  623. package/dist/primitives/speakShortcut.js +5 -0
  624. package/dist/primitives/speakShortcut.js.map +1 -0
  625. package/dist/primitives/tileTones.cjs +8 -0
  626. package/dist/primitives/tileTones.d.ts +2 -0
  627. package/dist/primitives/tileTones.d.ts.map +1 -0
  628. package/dist/primitives/tileTones.js +5 -0
  629. package/dist/primitives/tileTones.js.map +1 -0
  630. package/dist/primitives/useDensity.cjs +8 -0
  631. package/dist/primitives/useDensity.d.ts +2 -0
  632. package/dist/primitives/useDensity.d.ts.map +1 -0
  633. package/dist/primitives/useDensity.js +5 -0
  634. package/dist/primitives/useDensity.js.map +1 -0
  635. package/dist/primitives/useField.cjs +8 -0
  636. package/dist/primitives/useField.d.ts +2 -0
  637. package/dist/primitives/useField.d.ts.map +1 -0
  638. package/dist/primitives/useField.js +5 -0
  639. package/dist/primitives/useField.js.map +1 -0
  640. package/dist/product/ComboBox.cjs +25 -7
  641. package/dist/product/ComboBox.d.ts +3 -1
  642. package/dist/product/ComboBox.d.ts.map +1 -1
  643. package/dist/product/ComboBox.js +25 -7
  644. package/dist/product/ComboBox.js.map +1 -1
  645. package/dist/product/CommandMenu.cjs +137 -0
  646. package/dist/product/CommandMenu.d.ts +77 -0
  647. package/dist/product/CommandMenu.d.ts.map +1 -0
  648. package/dist/product/CommandMenu.js +134 -0
  649. package/dist/product/CommandMenu.js.map +1 -0
  650. package/dist/product/DetailPane.cjs +154 -12
  651. package/dist/product/DetailPane.d.ts +80 -2
  652. package/dist/product/DetailPane.d.ts.map +1 -1
  653. package/dist/product/DetailPane.js +153 -16
  654. package/dist/product/DetailPane.js.map +1 -1
  655. package/dist/product/Fact.cjs +6 -1
  656. package/dist/product/Fact.d.ts +16 -1
  657. package/dist/product/Fact.d.ts.map +1 -1
  658. package/dist/product/Fact.js +6 -1
  659. package/dist/product/Fact.js.map +1 -1
  660. package/dist/product/Field.cjs +14 -2
  661. package/dist/product/Field.d.ts +16 -1
  662. package/dist/product/Field.d.ts.map +1 -1
  663. package/dist/product/Field.js +14 -2
  664. package/dist/product/Field.js.map +1 -1
  665. package/dist/product/Filters.cjs +61 -9
  666. package/dist/product/Filters.d.ts +37 -6
  667. package/dist/product/Filters.d.ts.map +1 -1
  668. package/dist/product/Filters.js +62 -10
  669. package/dist/product/Filters.js.map +1 -1
  670. package/dist/product/MenuRow.cjs +81 -2
  671. package/dist/product/MenuRow.d.ts +76 -6
  672. package/dist/product/MenuRow.d.ts.map +1 -1
  673. package/dist/product/MenuRow.js +81 -4
  674. package/dist/product/MenuRow.js.map +1 -1
  675. package/dist/product/PrimaryButton.cjs +5 -1
  676. package/dist/product/PrimaryButton.d.ts +8 -0
  677. package/dist/product/PrimaryButton.d.ts.map +1 -1
  678. package/dist/product/PrimaryButton.js +5 -1
  679. package/dist/product/PrimaryButton.js.map +1 -1
  680. package/dist/product/Skeleton.cjs +7 -6
  681. package/dist/product/Skeleton.d.ts +3 -20
  682. package/dist/product/Skeleton.d.ts.map +1 -1
  683. package/dist/product/Skeleton.js +8 -7
  684. package/dist/product/Skeleton.js.map +1 -1
  685. package/dist/product/index.cjs +2 -0
  686. package/dist/product/index.d.ts +1 -0
  687. package/dist/product/index.d.ts.map +1 -1
  688. package/dist/product/index.js +2 -0
  689. package/dist/product/index.js.map +1 -1
  690. package/dist/settings/Section.cjs +11 -2
  691. package/dist/settings/Section.d.ts +8 -1
  692. package/dist/settings/Section.d.ts.map +1 -1
  693. package/dist/settings/Section.js +11 -2
  694. package/dist/settings/Section.js.map +1 -1
  695. package/dist/styles/motion.css +70 -0
  696. package/dist/styles.css +1479 -136
  697. package/dist/theme.css +963 -9
  698. package/package.json +2 -1
@@ -3,13 +3,31 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.BreadcrumbEllipsis = exports.BreadcrumbSeparator = exports.BreadcrumbPage = exports.BreadcrumbLink = exports.BreadcrumbItem = exports.BreadcrumbList = exports.Breadcrumb = void 0;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
- const box_1 = require("../../box.cjs");
7
- const cn_1 = require("../../core/cn.cjs");
8
- const Breadcrumb = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "nav", "aria-label": "Breadcrumb", className: className, ...props }));
6
+ /**
7
+ * Breadcrumb — where you are, in a trail.
8
+ *
9
+ * A real `<nav>` around a real `<ol>`: the trail is ORDERED, and a screen
10
+ * reader announces "list, 4 items" and reads the position. Built out of divs it
11
+ * announces nothing, which is most of the point of a breadcrumb gone.
12
+ *
13
+ * The separators are `aria-hidden` and outside the items, because a slash is
14
+ * punctuation, not a step — a reader that voices them says "home slash shop
15
+ * slash bag" instead of counting.
16
+ *
17
+ * Drawn on gui props, after twenty-ui's Breadcrumb (MIT, NOTICE): a 32px trail
18
+ * in 13px quiet ink, steps 4px apart around a "/" held in an 8px slot, the page
19
+ * you are on in full ink and the one step that may shrink, with an ellipsis.
20
+ * It used to compose utility class strings (`gap-1.5 text-sm text-muted-foreground`),
21
+ * which this package's own house rule forbids.
22
+ */
23
+ const gui_1 = require("@hanzo/gui");
24
+ const ink_1 = require("./ink.cjs");
25
+ const slot_1 = require("./slot.cjs");
26
+ const Breadcrumb = (props) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('breadcrumb'), render: "nav", "aria-label": "Breadcrumb", minH: 32, items: "center", overflow: "hidden", minW: 0, ...props }));
9
27
  exports.Breadcrumb = Breadcrumb;
10
- const BreadcrumbList = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "ol", className: (0, cn_1.cn)('grid grid-flow-col auto-cols-max items-center gap-1.5 text-sm text-muted-foreground', className), ...props }));
28
+ const BreadcrumbList = ({ children, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('breadcrumb-list'), render: "ol", items: "center", gap: "$1", m: 0, p: 0, minW: 0, style: { listStyle: 'none' }, ...props, children: children }));
11
29
  exports.BreadcrumbList = BreadcrumbList;
12
- const BreadcrumbItem = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "li", className: (0, cn_1.cn)('grid grid-flow-col auto-cols-max items-center gap-1.5', className), ...props }));
30
+ const BreadcrumbItem = ({ children, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('breadcrumb-item'), render: "li", items: "center", gap: "$1", shrink: 0, minW: 0, ...props, children: (0, ink_1.ink)(children, gui_1.Text, { fontSize: '$2', color: '$hint' }) }));
13
31
  exports.BreadcrumbItem = BreadcrumbItem;
14
32
  /**
15
33
  * A step in the trail.
@@ -18,13 +36,13 @@ exports.BreadcrumbItem = BreadcrumbItem;
18
36
  * to is not a link, and an anchor without a target is one a keyboard stops on
19
37
  * for nothing.
20
38
  */
21
- const BreadcrumbLink = ({ className, href, ...props }) => href ? ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "a", href: href, className: (0, cn_1.cn)('hover:text-foreground', className), ...props })) : ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "span", className: className, ...props }));
39
+ const BreadcrumbLink = ({ href, children, ...props }) => href ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('breadcrumb-link'), render: "a", ...{ href }, fontSize: "$2", color: "$hint", textDecorationLine: "none", hoverStyle: { color: '$ink' }, ...props, children: children })) : ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('breadcrumb-link'), fontSize: "$2", color: "$hint", ...props, children: children }));
22
40
  exports.BreadcrumbLink = BreadcrumbLink;
23
- /** The step you are ON — not a link, and it says so. */
24
- const BreadcrumbPage = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "span", role: "link", "aria-disabled": true, "aria-current": "page", className: (0, cn_1.cn)('text-foreground', className), ...props }));
41
+ /** The step you are ON — not a link, and it says so. The one step that shrinks. */
42
+ const BreadcrumbPage = ({ children, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('breadcrumb-page'), role: "link", "aria-disabled": true, "aria-current": "page", fontSize: "$2", color: "$ink", numberOfLines: 1, shrink: 1, minW: 0, ...props, children: children }));
25
43
  exports.BreadcrumbPage = BreadcrumbPage;
26
- const BreadcrumbSeparator = ({ children, className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "li", role: "presentation", "aria-hidden": "true", className: (0, cn_1.cn)('text-muted-foreground', className), ...props, children: children ?? '/' }));
44
+ const BreadcrumbSeparator = ({ children, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('breadcrumb-separator'), render: "li", role: "presentation", "aria-hidden": true, width: 8, justify: "center", shrink: 0, ...props, children: (0, ink_1.ink)(children ?? '/', gui_1.Text, { fontSize: '$2', color: '$hint' }) }));
27
45
  exports.BreadcrumbSeparator = BreadcrumbSeparator;
28
46
  /** A trail too long to show whole. `…` is one character and reads as "more". */
29
- const BreadcrumbEllipsis = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box, { tag: "span", role: "presentation", "aria-hidden": "true", className: (0, cn_1.cn)('grid place-items-center', className), ...props, children: "\u2026" }));
47
+ const BreadcrumbEllipsis = (props) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('breadcrumb-ellipsis'), role: "presentation", "aria-hidden": true, items: "center", justify: "center", ...props, children: (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$hint", children: "\u2026" }) }));
30
48
  exports.BreadcrumbEllipsis = BreadcrumbEllipsis;
@@ -8,12 +8,20 @@
8
8
  * The separators are `aria-hidden` and outside the items, because a slash is
9
9
  * punctuation, not a step — a reader that voices them says "home slash shop
10
10
  * slash bag" instead of counting.
11
+ *
12
+ * Drawn on gui props, after twenty-ui's Breadcrumb (MIT, NOTICE): a 32px trail
13
+ * in 13px quiet ink, steps 4px apart around a "/" held in an 8px slot, the page
14
+ * you are on in full ink and the one step that may shrink, with an ellipsis.
15
+ * It used to compose utility class strings (`gap-1.5 text-sm text-muted-foreground`),
16
+ * which this package's own house rule forbids.
11
17
  */
12
- import * as React from 'react';
13
- import { Box, type BoxProps } from '../../box.js';
14
- export declare const Breadcrumb: ({ className, ...props }: React.ComponentProps<typeof Box>) => React.JSX.Element;
15
- export declare const BreadcrumbList: ({ className, ...props }: React.ComponentProps<typeof Box>) => React.JSX.Element;
16
- export declare const BreadcrumbItem: ({ className, ...props }: React.ComponentProps<typeof Box>) => React.JSX.Element;
18
+ import { Text, XStack } from '@hanzo/gui';
19
+ import type { ComponentProps } from 'react';
20
+ type Row = ComponentProps<typeof XStack>;
21
+ type Words = ComponentProps<typeof Text>;
22
+ export declare const Breadcrumb: (props: Row) => import("react").JSX.Element;
23
+ export declare const BreadcrumbList: ({ children, ...props }: Row) => import("react").JSX.Element;
24
+ export declare const BreadcrumbItem: ({ children, ...props }: Row) => import("react").JSX.Element;
17
25
  /**
18
26
  * A step in the trail.
19
27
  *
@@ -21,12 +29,13 @@ export declare const BreadcrumbItem: ({ className, ...props }: React.ComponentPr
21
29
  * to is not a link, and an anchor without a target is one a keyboard stops on
22
30
  * for nothing.
23
31
  */
24
- export declare const BreadcrumbLink: ({ className, href, ...props }: BoxProps<'a'> & {
32
+ export declare const BreadcrumbLink: ({ href, children, ...props }: Words & {
25
33
  href?: string;
26
- }) => React.JSX.Element;
27
- /** The step you are ON — not a link, and it says so. */
28
- export declare const BreadcrumbPage: ({ className, ...props }: BoxProps<'span'>) => React.JSX.Element;
29
- export declare const BreadcrumbSeparator: ({ children, className, ...props }: React.ComponentProps<typeof Box>) => React.JSX.Element;
34
+ }) => import("react").JSX.Element;
35
+ /** The step you are ON — not a link, and it says so. The one step that shrinks. */
36
+ export declare const BreadcrumbPage: ({ children, ...props }: Words) => import("react").JSX.Element;
37
+ export declare const BreadcrumbSeparator: ({ children, ...props }: Row) => import("react").JSX.Element;
30
38
  /** A trail too long to show whole. `…` is one character and reads as "more". */
31
- export declare const BreadcrumbEllipsis: ({ className, ...props }: React.ComponentProps<typeof Box>) => React.JSX.Element;
39
+ export declare const BreadcrumbEllipsis: (props: Row) => import("react").JSX.Element;
40
+ export {};
32
41
  //# sourceMappingURL=breadcrumb.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/breadcrumb.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAA;AAG9C,eAAO,MAAM,UAAU,4BAA6B,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,sBAEnF,CAAA;AAED,eAAO,MAAM,cAAc,4BAA6B,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,sBASvF,CAAA;AAED,eAAO,MAAM,cAAc,4BAA6B,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,sBAMvF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,kCAIxB,QAAQ,CAAC,GAAG,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,sBAKjC,CAAA;AAEH,wDAAwD;AACxD,eAAO,MAAM,cAAc,4BAA6B,QAAQ,CAAC,MAAM,CAAC,sBASvE,CAAA;AAED,eAAO,MAAM,mBAAmB,sCAI7B,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,sBAUlC,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,4BAA6B,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,sBAU3F,CAAA"}
1
+ {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/breadcrumb.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAK3C,KAAK,GAAG,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,CAAA;AACxC,KAAK,KAAK,GAAG,cAAc,CAAC,OAAO,IAAI,CAAC,CAAA;AAExC,eAAO,MAAM,UAAU,UAAW,GAAG,gCAEpC,CAAA;AAED,eAAO,MAAM,cAAc,2BAA4B,GAAG,gCAIzD,CAAA;AAED,eAAO,MAAM,cAAc,2BAA4B,GAAG,gCAIzD,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,iCAAkC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,gCAkBnF,CAAA;AAEH,mFAAmF;AACnF,eAAO,MAAM,cAAc,2BAA4B,KAAK,gCAe3D,CAAA;AAED,eAAO,MAAM,mBAAmB,2BAA4B,GAAG,gCAI9D,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,UAAW,GAAG,gCAM5C,CAAA"}
@@ -1,10 +1,28 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Box } from '../../box.js';
4
- import { cn } from '../../core/cn.js';
5
- export const Breadcrumb = ({ className, ...props }) => (_jsx(Box, { tag: "nav", "aria-label": "Breadcrumb", className: className, ...props }));
6
- export const BreadcrumbList = ({ className, ...props }) => (_jsx(Box, { tag: "ol", className: cn('grid grid-flow-col auto-cols-max items-center gap-1.5 text-sm text-muted-foreground', className), ...props }));
7
- export const BreadcrumbItem = ({ className, ...props }) => (_jsx(Box, { tag: "li", className: cn('grid grid-flow-col auto-cols-max items-center gap-1.5', className), ...props }));
3
+ /**
4
+ * Breadcrumb — where you are, in a trail.
5
+ *
6
+ * A real `<nav>` around a real `<ol>`: the trail is ORDERED, and a screen
7
+ * reader announces "list, 4 items" and reads the position. Built out of divs it
8
+ * announces nothing, which is most of the point of a breadcrumb gone.
9
+ *
10
+ * The separators are `aria-hidden` and outside the items, because a slash is
11
+ * punctuation, not a step — a reader that voices them says "home slash shop
12
+ * slash bag" instead of counting.
13
+ *
14
+ * Drawn on gui props, after twenty-ui's Breadcrumb (MIT, NOTICE): a 32px trail
15
+ * in 13px quiet ink, steps 4px apart around a "/" held in an 8px slot, the page
16
+ * you are on in full ink and the one step that may shrink, with an ellipsis.
17
+ * It used to compose utility class strings (`gap-1.5 text-sm text-muted-foreground`),
18
+ * which this package's own house rule forbids.
19
+ */
20
+ import { Text, XStack } from '@hanzo/gui';
21
+ import { ink } from './ink.js';
22
+ import { slot } from './slot.js';
23
+ export const Breadcrumb = (props) => (_jsx(XStack, { ...slot('breadcrumb'), render: "nav", "aria-label": "Breadcrumb", minH: 32, items: "center", overflow: "hidden", minW: 0, ...props }));
24
+ export const BreadcrumbList = ({ children, ...props }) => (_jsx(XStack, { ...slot('breadcrumb-list'), render: "ol", items: "center", gap: "$1", m: 0, p: 0, minW: 0, style: { listStyle: 'none' }, ...props, children: children }));
25
+ export const BreadcrumbItem = ({ children, ...props }) => (_jsx(XStack, { ...slot('breadcrumb-item'), render: "li", items: "center", gap: "$1", shrink: 0, minW: 0, ...props, children: ink(children, Text, { fontSize: '$2', color: '$hint' }) }));
8
26
  /**
9
27
  * A step in the trail.
10
28
  *
@@ -12,10 +30,10 @@ export const BreadcrumbItem = ({ className, ...props }) => (_jsx(Box, { tag: "li
12
30
  * to is not a link, and an anchor without a target is one a keyboard stops on
13
31
  * for nothing.
14
32
  */
15
- export const BreadcrumbLink = ({ className, href, ...props }) => href ? (_jsx(Box, { tag: "a", href: href, className: cn('hover:text-foreground', className), ...props })) : (_jsx(Box, { tag: "span", className: className, ...props }));
16
- /** The step you are ON — not a link, and it says so. */
17
- export const BreadcrumbPage = ({ className, ...props }) => (_jsx(Box, { tag: "span", role: "link", "aria-disabled": true, "aria-current": "page", className: cn('text-foreground', className), ...props }));
18
- export const BreadcrumbSeparator = ({ children, className, ...props }) => (_jsx(Box, { tag: "li", role: "presentation", "aria-hidden": "true", className: cn('text-muted-foreground', className), ...props, children: children ?? '/' }));
33
+ export const BreadcrumbLink = ({ href, children, ...props }) => href ? (_jsx(Text, { ...slot('breadcrumb-link'), render: "a", ...{ href }, fontSize: "$2", color: "$hint", textDecorationLine: "none", hoverStyle: { color: '$ink' }, ...props, children: children })) : (_jsx(Text, { ...slot('breadcrumb-link'), fontSize: "$2", color: "$hint", ...props, children: children }));
34
+ /** The step you are ON — not a link, and it says so. The one step that shrinks. */
35
+ export const BreadcrumbPage = ({ children, ...props }) => (_jsx(Text, { ...slot('breadcrumb-page'), role: "link", "aria-disabled": true, "aria-current": "page", fontSize: "$2", color: "$ink", numberOfLines: 1, shrink: 1, minW: 0, ...props, children: children }));
36
+ export const BreadcrumbSeparator = ({ children, ...props }) => (_jsx(XStack, { ...slot('breadcrumb-separator'), render: "li", role: "presentation", "aria-hidden": true, width: 8, justify: "center", shrink: 0, ...props, children: ink(children ?? '/', Text, { fontSize: '$2', color: '$hint' }) }));
19
37
  /** A trail too long to show whole. `…` is one character and reads as "more". */
20
- export const BreadcrumbEllipsis = ({ className, ...props }) => (_jsx(Box, { tag: "span", role: "presentation", "aria-hidden": "true", className: cn('grid place-items-center', className), ...props, children: "\u2026" }));
38
+ export const BreadcrumbEllipsis = (props) => (_jsx(XStack, { ...slot('breadcrumb-ellipsis'), role: "presentation", "aria-hidden": true, items: "center", justify: "center", ...props, children: _jsx(Text, { fontSize: "$2", color: "$hint", children: "\u2026" }) }));
21
39
  //# sourceMappingURL=breadcrumb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb.js","sourceRoot":"","sources":["../../../src/backends/gui/breadcrumb.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAeZ,OAAO,EAAE,GAAG,EAAiB,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAElC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoC,EAAE,EAAE,CAAC,CACvF,KAAC,GAAG,IAAC,GAAG,EAAC,KAAK,gBAAY,YAAY,EAAC,SAAS,EAAE,SAAS,KAAM,KAAK,GAAI,CAC3E,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoC,EAAE,EAAE,CAAC,CAC3F,KAAC,GAAG,IACF,GAAG,EAAC,IAAI,EACR,SAAS,EAAE,EAAE,CACX,qFAAqF,EACrF,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoC,EAAE,EAAE,CAAC,CAC3F,KAAC,GAAG,IACF,GAAG,EAAC,IAAI,EACR,SAAS,EAAE,EAAE,CAAC,uDAAuD,EAAE,SAAS,CAAC,KAC7E,KAAK,GACT,CACH,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,SAAS,EACT,IAAI,EACJ,GAAG,KAAK,EAC0B,EAAE,EAAE,CACtC,IAAI,CAAC,CAAC,CAAC,CACL,KAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAC1F,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,GAAG,EAAC,MAAM,EAAC,SAAS,EAAE,SAAS,KAAM,KAAK,GAAI,CACpD,CAAA;AAEH,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB,EAAE,EAAE,CAAC,CAC3E,KAAC,GAAG,IACF,GAAG,EAAC,MAAM,EACV,IAAI,EAAC,MAAM,mBACI,IAAI,kBACN,MAAM,EACnB,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,KACvC,KAAK,GACT,CACH,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACyB,EAAE,EAAE,CAAC,CACtC,KAAC,GAAG,IACF,GAAG,EAAC,IAAI,EACR,IAAI,EAAC,cAAc,iBACP,MAAM,EAClB,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,KAC7C,KAAK,YAER,QAAQ,IAAI,GAAG,GACZ,CACP,CAAA;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoC,EAAE,EAAE,CAAC,CAC/F,KAAC,GAAG,IACF,GAAG,EAAC,MAAM,EACV,IAAI,EAAC,cAAc,iBACP,MAAM,EAClB,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,KAC/C,KAAK,uBAGL,CACP,CAAA"}
1
+ {"version":3,"file":"breadcrumb.js","sourceRoot":"","sources":["../../../src/backends/gui/breadcrumb.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAK7B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,CACxC,KAAC,MAAM,OAAK,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAC,KAAK,gBAAY,YAAY,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,EAAC,IAAI,EAAE,CAAC,KAAM,KAAK,GAAI,CACvI,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAO,EAAE,EAAE,CAAC,CAC7D,KAAC,MAAM,OAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAM,KAAK,YAClI,QAAQ,GACF,CACV,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAO,EAAE,EAAE,CAAC,CAC7D,KAAC,MAAM,OAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAM,KAAK,YACnG,GAAG,CAAC,QAAQ,EAAE,IAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAC1D,CACV,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA6B,EAAE,EAAE,CACxF,IAAI,CAAC,CAAC,CAAC,CACL,KAAC,IAAI,OACC,IAAI,CAAC,iBAAiB,CAAC,EAC3B,MAAM,EAAC,GAAG,KACL,EAAE,IAAI,EAAa,EACxB,QAAQ,EAAC,IAAI,EACb,KAAK,EAAC,OAAO,EACb,kBAAkB,EAAC,MAAM,EACzB,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KACzB,KAAK,YAER,QAAQ,GACJ,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,OAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,OAAO,KAAK,KAAK,YACrE,QAAQ,GACJ,CACR,CAAA;AAEH,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAS,EAAE,EAAE,CAAC,CAC/D,KAAC,IAAI,OACC,IAAI,CAAC,iBAAiB,CAAC,EAC3B,IAAI,EAAC,MAAM,yCAEE,MAAM,EACnB,QAAQ,EAAC,IAAI,EACb,KAAK,EAAC,MAAM,EACZ,aAAa,EAAE,CAAC,EAChB,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,CAAC,KACH,KAAK,YAER,QAAQ,GACJ,CACR,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAO,EAAE,EAAE,CAAC,CAClE,KAAC,MAAM,OAAK,IAAI,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,cAAc,uBAAa,KAAK,EAAE,CAAC,EAAE,OAAO,EAAC,QAAQ,EAAC,MAAM,EAAE,CAAC,KAAM,KAAK,YAClI,GAAG,CAAC,QAAQ,IAAI,GAAG,EAAE,IAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GACjE,CACV,CAAA;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,CAChD,KAAC,MAAM,OAAK,IAAI,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAC,cAAc,uBAAa,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,KAAK,KAAK,YAChH,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,OAAO,uBAE1B,GACA,CACV,CAAA"}
@@ -0,0 +1,43 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ButtonGroupContext = void 0;
5
+ exports.ButtonGroup = ButtonGroup;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * ButtonGroup — buttons joined into one control: "Update view" with its chevron
9
+ * menu, a cell's hover actions, a diagram's zoom pair.
10
+ *
11
+ * Two independent choices, as twenty-ui's ButtonGroup has them (MIT, NOTICE):
12
+ *
13
+ * attached (default) the buttons share their edges — each after the first
14
+ * steps 1px back over its neighbour's border, the inner
15
+ * corners go square, and a focused button rises above
16
+ * the neighbours so its whole ring shows.
17
+ * framed the buttons sit inside a bordered frame: a `$rim` edge,
18
+ * a 4px corner and 2px of padding on the panel ground, the
19
+ * buttons' own corners cut to 1px so the two radii stay
20
+ * concentric (4 − 2 − 1).
21
+ *
22
+ * Attached rides gui's own `XGroup`, which already squares the corners between
23
+ * items by placement (`XGroup.Item` zeroes the connecting radii of every child it
24
+ * wraps); this file adds the 1px overlap and the focus lift gui does not draw.
25
+ * Unattached is a plain row with a 2px gap.
26
+ *
27
+ * `size`, `variant` and `tone` set here reach every Button inside through
28
+ * context, and a Button that names its own keeps it.
29
+ */
30
+ const gui_1 = require("@hanzo/gui");
31
+ const react_1 = require("react");
32
+ const slot_1 = require("./slot.cjs");
33
+ exports.ButtonGroupContext = (0, react_1.createContext)(null);
34
+ /** The frame: a $rim edge, 4px corner, 2px padding, on the panel ground. */
35
+ const FRAME = { borderWidth: 1, borderColor: '$rim', rounded: '$xs', p: '$0.5', bg: '$panel' };
36
+ function ButtonGroup({ attached = true, framed = false, size, variant, tone, children, ...props }) {
37
+ const items = react_1.Children.toArray(children).filter(react_1.isValidElement);
38
+ const ctx = { size, variant, tone, framed };
39
+ const frame = framed ? FRAME : null;
40
+ if (!attached)
41
+ return ((0, jsx_runtime_1.jsx)(exports.ButtonGroupContext.Provider, { value: ctx, children: (0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('button-group'), role: "group", display: "inline-flex", self: "flex-start", items: "center", gap: "$0.5", ...frame, ...props, children: items }) }));
42
+ return ((0, jsx_runtime_1.jsx)(exports.ButtonGroupContext.Provider, { value: ctx, children: (0, jsx_runtime_1.jsx)(gui_1.XGroup, { ...(0, slot_1.slot)('button-group'), "data-attached": "", role: "group", unstyled: true, display: "inline-flex", self: "flex-start", items: "center", ...frame, ...props, children: items.map((child, i) => ((0, jsx_runtime_1.jsx)(gui_1.XGroup.Item, { ...(i > 0 ? { ml: -1 } : null), focusStyle: { zIndex: 1 }, children: child }, child.key ?? i))) }) }));
43
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * ButtonGroup — buttons joined into one control: "Update view" with its chevron
3
+ * menu, a cell's hover actions, a diagram's zoom pair.
4
+ *
5
+ * Two independent choices, as twenty-ui's ButtonGroup has them (MIT, NOTICE):
6
+ *
7
+ * attached (default) the buttons share their edges — each after the first
8
+ * steps 1px back over its neighbour's border, the inner
9
+ * corners go square, and a focused button rises above
10
+ * the neighbours so its whole ring shows.
11
+ * framed the buttons sit inside a bordered frame: a `$rim` edge,
12
+ * a 4px corner and 2px of padding on the panel ground, the
13
+ * buttons' own corners cut to 1px so the two radii stay
14
+ * concentric (4 − 2 − 1).
15
+ *
16
+ * Attached rides gui's own `XGroup`, which already squares the corners between
17
+ * items by placement (`XGroup.Item` zeroes the connecting radii of every child it
18
+ * wraps); this file adds the 1px overlap and the focus lift gui does not draw.
19
+ * Unattached is a plain row with a 2px gap.
20
+ *
21
+ * `size`, `variant` and `tone` set here reach every Button inside through
22
+ * context, and a Button that names its own keeps it.
23
+ */
24
+ import { XStack } from '@hanzo/gui';
25
+ import { type ComponentProps, type ReactNode } from 'react';
26
+ import type { ButtonSize, ButtonTone, ButtonVariant } from './button.js';
27
+ /** What a Button inside a group takes when it names none of its own. */
28
+ export type ButtonGroupDefaults = {
29
+ size?: ButtonSize;
30
+ variant?: ButtonVariant;
31
+ tone?: ButtonTone;
32
+ framed?: boolean;
33
+ };
34
+ export declare const ButtonGroupContext: import("react").Context<ButtonGroupDefaults | null>;
35
+ export type ButtonGroupProps = Omit<ComponentProps<typeof XStack>, 'children'> & {
36
+ /** The buttons share their edges (default) or stand 2px apart. */
37
+ attached?: boolean;
38
+ /** The buttons sit inside a bordered frame. */
39
+ framed?: boolean;
40
+ size?: ButtonSize;
41
+ variant?: ButtonVariant;
42
+ tone?: ButtonTone;
43
+ /** Names the group for assistive technology, which reads it as one control. */
44
+ 'aria-label'?: string;
45
+ children?: ReactNode;
46
+ };
47
+ export declare function ButtonGroup({ attached, framed, size, variant, tone, children, ...props }: ButtonGroupProps): import("react").JSX.Element;
48
+ //# sourceMappingURL=button-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-group.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/button-group.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAU,MAAM,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAA2C,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGrE,wEAAwE;AACxE,MAAM,MAAM,mBAAmB,GAAG;IAAE,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAErH,eAAO,MAAM,kBAAkB,qDAAkE,CAAA;AAEjG,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAC/E,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAKD,wBAAgB,WAAW,CAAC,EAC1B,QAAe,EACf,MAAc,EACd,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAsClB"}
@@ -0,0 +1,40 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * ButtonGroup — buttons joined into one control: "Update view" with its chevron
5
+ * menu, a cell's hover actions, a diagram's zoom pair.
6
+ *
7
+ * Two independent choices, as twenty-ui's ButtonGroup has them (MIT, NOTICE):
8
+ *
9
+ * attached (default) the buttons share their edges — each after the first
10
+ * steps 1px back over its neighbour's border, the inner
11
+ * corners go square, and a focused button rises above
12
+ * the neighbours so its whole ring shows.
13
+ * framed the buttons sit inside a bordered frame: a `$rim` edge,
14
+ * a 4px corner and 2px of padding on the panel ground, the
15
+ * buttons' own corners cut to 1px so the two radii stay
16
+ * concentric (4 − 2 − 1).
17
+ *
18
+ * Attached rides gui's own `XGroup`, which already squares the corners between
19
+ * items by placement (`XGroup.Item` zeroes the connecting radii of every child it
20
+ * wraps); this file adds the 1px overlap and the focus lift gui does not draw.
21
+ * Unattached is a plain row with a 2px gap.
22
+ *
23
+ * `size`, `variant` and `tone` set here reach every Button inside through
24
+ * context, and a Button that names its own keeps it.
25
+ */
26
+ import { XGroup, XStack } from '@hanzo/gui';
27
+ import { Children, createContext, isValidElement } from 'react';
28
+ import { slot } from './slot.js';
29
+ export const ButtonGroupContext = /* @__PURE__ */ createContext(null);
30
+ /** The frame: a $rim edge, 4px corner, 2px padding, on the panel ground. */
31
+ const FRAME = { borderWidth: 1, borderColor: '$rim', rounded: '$xs', p: '$0.5', bg: '$panel' };
32
+ export function ButtonGroup({ attached = true, framed = false, size, variant, tone, children, ...props }) {
33
+ const items = Children.toArray(children).filter(isValidElement);
34
+ const ctx = { size, variant, tone, framed };
35
+ const frame = framed ? FRAME : null;
36
+ if (!attached)
37
+ return (_jsx(ButtonGroupContext.Provider, { value: ctx, children: _jsx(XStack, { ...slot('button-group'), role: "group", display: "inline-flex", self: "flex-start", items: "center", gap: "$0.5", ...frame, ...props, children: items }) }));
38
+ return (_jsx(ButtonGroupContext.Provider, { value: ctx, children: _jsx(XGroup, { ...slot('button-group'), "data-attached": "", role: "group", unstyled: true, display: "inline-flex", self: "flex-start", items: "center", ...frame, ...props, children: items.map((child, i) => (_jsx(XGroup.Item, { ...(i > 0 ? { ml: -1 } : null), focusStyle: { zIndex: 1 }, children: child }, child.key ?? i))) }) }));
39
+ }
40
+ //# sourceMappingURL=button-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-group.js","sourceRoot":"","sources":["../../../src/backends/gui/button-group.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAuC,MAAM,OAAO,CAAA;AAEpG,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAK7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC,aAAa,CAA6B,IAAI,CAAC,CAAA;AAejG,4EAA4E;AAC5E,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAW,CAAA;AAEvG,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,GAAG,IAAI,EACf,MAAM,GAAG,KAAK,EACd,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,GAAG,KAAK,EACS;IACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAC/D,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAEnC,IAAI,CAAC,QAAQ;QACX,OAAO,CACL,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YACrC,KAAC,MAAM,OAAK,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,aAAa,EAAC,IAAI,EAAC,YAAY,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,MAAM,KAAK,KAAK,KAAM,KAAK,YAClI,KAAK,GACC,GACmB,CAC/B,CAAA;IAEH,OAAO,CACL,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YACrC,KAAC,MAAM,OACD,IAAI,CAAC,cAAc,CAAC,mBACV,EAAE,EAChB,IAAI,EAAC,OAAO,EACZ,QAAQ,QACR,OAAO,EAAC,aAAa,EACrB,IAAI,EAAC,YAAY,EACjB,KAAK,EAAC,QAAQ,KACV,KAAK,KACJ,KAAgB,YAEpB,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAIvB,KAAC,MAAM,CAAC,IAAI,OAA0B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,YACzF,KAAK,IADU,KAAK,CAAC,GAAG,IAAI,CAAC,CAElB,CACf,CAAC,GACK,GACmB,CAC/B,CAAA;AACH,CAAC"}
@@ -31,34 +31,65 @@ const react_1 = require("react");
31
31
  const sx_1 = require("../../sx.cjs");
32
32
  const ink_1 = require("./ink.cjs");
33
33
  const gesture_1 = require("./gesture.cjs");
34
+ const density_1 = require("./density.cjs");
35
+ const button_group_1 = require("./button-group.cjs");
36
+ const tooltip_1 = require("./tooltip.cjs");
37
+ const shortcut_1 = require("./shortcut.cjs");
34
38
  /** The floor every size takes under a coarse pointer: a thumb, not a cursor. */
35
39
  const TOUCH = 44;
40
+ /**
41
+ * `xs` (24), `icon-xs` (24) and `icon-2xs` (20) are the record density: the
42
+ * quiet buttons a table cell, a chip, a kanban header and a menu row hold
43
+ * (twenty-ui's sm and xs, MIT). They sit beside 13px text, carry a 14px icon and
44
+ * keep the 44px press area under a coarse pointer like every other size.
45
+ */
36
46
  const HEIGHT = {
37
47
  default: 36,
38
48
  sm: 32,
49
+ xs: 24,
39
50
  lg: 40,
40
51
  icon: 36,
41
52
  'icon-sm': 32,
53
+ 'icon-xs': 24,
54
+ 'icon-2xs': 20,
42
55
  'icon-lg': 40,
43
56
  };
44
57
  /** Type scale per size — applied to the Text host, which is what renders it. */
45
58
  const TYPE = {
46
59
  default: '$3',
47
60
  sm: '$2',
61
+ xs: '$2',
48
62
  lg: '$3',
49
63
  icon: '$3',
50
64
  'icon-sm': '$2',
65
+ 'icon-xs': '$2',
66
+ 'icon-2xs': '$1',
51
67
  'icon-lg': '$3',
52
68
  };
69
+ /** The icon each size draws a `startIcon`/`endIcon` at, when the icon names no size of its own. */
70
+ const GLYPH = {
71
+ default: 16,
72
+ sm: 14,
73
+ xs: 14,
74
+ lg: 16,
75
+ icon: 16,
76
+ 'icon-sm': 16,
77
+ 'icon-xs': 14,
78
+ 'icon-2xs': 14,
79
+ 'icon-lg': 20,
80
+ };
53
81
  /** The spinner's CEILING, paired 1:1 with TYPE above. A ceiling rather than a
54
82
  * size for the reason the height ladder gives: a pin clips, a bound does not.
55
83
  * A spinner stands in for the label, so it may not outgrow the label's line. */
56
84
  const SPIN = {
57
85
  default: 16,
58
86
  sm: 14,
87
+ xs: 12,
59
88
  lg: 16,
60
89
  icon: 16,
61
90
  'icon-sm': 14,
91
+ 'icon-xs': 12,
92
+ 'icon-2xs': 12,
62
93
  'icon-lg': 16,
63
94
  };
64
95
  const Frame = (0, gui_1.styled)(gui_1.Button.Frame, {
@@ -156,25 +187,162 @@ const Frame = (0, gui_1.styled)(gui_1.Button.Frame, {
156
187
  // TOUCH, the target a thumb lands on; a mouse keeps the designed sizes.
157
188
  default: { height: 'auto', minHeight: HEIGHT.default, px: '$4', $touchable: { minHeight: TOUCH } },
158
189
  sm: { height: 'auto', minHeight: HEIGHT.sm, px: '$3', gap: '$1.5', $touchable: { minHeight: TOUCH } },
190
+ xs: { height: 'auto', minHeight: HEIGHT.xs, px: '$2', gap: '$1', $touchable: { minHeight: TOUCH } },
159
191
  lg: { height: 'auto', minHeight: HEIGHT.lg, px: '$6', $touchable: { minHeight: TOUCH } },
160
192
  icon: { height: 'auto', minHeight: HEIGHT.icon, width: 'auto', minWidth: HEIGHT.icon, px: 0, $touchable: { minHeight: TOUCH, minWidth: TOUCH } },
161
193
  'icon-sm': { height: 'auto', minHeight: HEIGHT['icon-sm'], width: 'auto', minWidth: HEIGHT['icon-sm'], px: 0, $touchable: { minHeight: TOUCH, minWidth: TOUCH } },
194
+ 'icon-xs': { height: 'auto', minHeight: HEIGHT['icon-xs'], width: 'auto', minWidth: HEIGHT['icon-xs'], px: 0, $touchable: { minHeight: TOUCH, minWidth: TOUCH } },
195
+ 'icon-2xs': { height: 'auto', minHeight: HEIGHT['icon-2xs'], width: 'auto', minWidth: HEIGHT['icon-2xs'], px: 0, rounded: '$xs', $touchable: { minHeight: TOUCH, minWidth: TOUCH } },
162
196
  'icon-lg': { height: 'auto', minHeight: HEIGHT['icon-lg'], width: 'auto', minWidth: HEIGHT['icon-lg'], px: 0, $touchable: { minHeight: TOUCH, minWidth: TOUCH } },
163
197
  },
198
+ // The record density's gutter: 8 beside the label and 4 between an icon and
199
+ // it, on the 32px box `compact` gives a size-less Button. After `size`, so
200
+ // it wins over the 12 `sm` states; passed only when the density chose the
201
+ // size, so a named size — an icon size, whose gutter is its width, above all
202
+ // — keeps its own.
203
+ compact: {
204
+ true: { px: '$2', gap: '$1' },
205
+ },
206
+ // After `variant`, so a tone restates the variant's colours rather than
207
+ // racing them. A function of the variant because the axis means a different
208
+ // pair per shape: the edge and the ink of an outline, the tint of a soft
209
+ // button, the fill of a solid one. `neutral` is the variant as it is.
210
+ tone: (tone, { props }) => {
211
+ const t = TONES[tone];
212
+ if (!t)
213
+ return {};
214
+ switch (props.variant) {
215
+ case 'primary':
216
+ return { bg: t.fill, color: t.fillInk, borderColor: 'transparent', hoverStyle: { bg: t.fillHover, borderColor: 'transparent' } };
217
+ case 'secondary':
218
+ return { bg: t.soft, color: t.ink, hoverStyle: { bg: t.softHover, opacity: 1 } };
219
+ case 'ghost':
220
+ return { color: t.ink, hoverStyle: { bg: t.tint } };
221
+ case 'default':
222
+ case 'outline':
223
+ case undefined:
224
+ return { color: t.ink, borderColor: t.edge, hoverStyle: { bg: t.tint, borderColor: t.edge } };
225
+ default:
226
+ return { color: t.ink };
227
+ }
228
+ },
229
+ // Lifted off the page: the ladder's first rung (the `elevation-1` class the
230
+ // component adds — lit edge and small drop, owned by glass.css) and, on an
231
+ // outline, the page's ground with the stronger edge, so it reads as raised
232
+ // rather than as a hole (twenty-ui's `elevated`). Never `--shadow-sm`: that
233
+ // size ramp is common property and glass.test holds the ladder off it.
234
+ elevated: (on, { props }) => on
235
+ ? {
236
+ // The page's ground, through `--surface-page`. Neither `$background`
237
+ // nor `var(--background)` will do: gui redeclares `--background` on
238
+ // its Button sub-theme, so inside a button both read gui's button grey
239
+ // (rgb(36,36,36) measured). `--surface-page` is declared on :root as
240
+ // `var(--background)` and inherits RESOLVED, so it is the page's.
241
+ ...(props.variant === 'default' || props.variant === 'outline' || props.variant === undefined
242
+ ? { bg: 'var(--surface-page)', borderColor: '$rim' }
243
+ : null),
244
+ }
245
+ : {},
246
+ fullWidth: {
247
+ true: { width: '100%', self: 'stretch' },
248
+ },
249
+ round: {
250
+ true: { rounded: '$10' },
251
+ },
164
252
  disabled: {
165
253
  true: { opacity: 0.5, pointerEvents: 'none', cursor: 'default' },
166
254
  },
167
255
  },
168
256
  defaultVariants: { variant: 'default', size: 'default' },
169
257
  });
258
+ /** Each tone's pairs: ink and edge for an outline, tint under the pointer, the
259
+ * soft fill and its hover, the solid fill, its ink and its hover. */
260
+ const TONES = {
261
+ accent: {
262
+ ink: 'var(--primary)',
263
+ edge: 'var(--primary)',
264
+ tint: '$hover',
265
+ soft: '$hover',
266
+ softHover: '$raised',
267
+ fill: 'var(--primary)',
268
+ fillInk: 'var(--primary-foreground)',
269
+ fillHover: 'var(--primary-hover)',
270
+ },
271
+ danger: {
272
+ ink: '$bad',
273
+ edge: '$red7',
274
+ tint: 'var(--state-error-bg)',
275
+ soft: 'var(--state-error-bg)',
276
+ softHover: '$red4',
277
+ fill: 'var(--destructive)',
278
+ fillInk: 'var(--destructive-foreground)',
279
+ fillHover: 'var(--destructive-hover)',
280
+ },
281
+ success: {
282
+ ink: '$good',
283
+ edge: '$green7',
284
+ tint: 'var(--state-success-bg)',
285
+ soft: 'var(--state-success-bg)',
286
+ softHover: '$green4',
287
+ fill: '$green9',
288
+ fillInk: '#ffffff',
289
+ fillHover: '$green10',
290
+ },
291
+ };
292
+ /** The ink a tone gives its icons, which read colour from a prop and not from the label's text context. */
293
+ const toneInk = (tone, variant) => {
294
+ if (tone === 'neutral')
295
+ return undefined;
296
+ return variant === 'primary' ? TONES[tone].fillInk : TONES[tone].ink;
297
+ };
170
298
  /**
171
299
  * A stable class handle for hosts that hook buttons from CSS. Styling lives in
172
300
  * the tokens; this only names the variant and size.
173
301
  */
174
302
  const style_1 = require("../../style.cjs");
175
303
  Object.defineProperty(exports, "buttonVariants", { enumerable: true, get: function () { return style_1.buttonVariants; } });
176
- function Button({ className, variant = 'default', size = 'default', asChild = false, isLoading = false, disabled, children, ...props }) {
177
- const resolved = size ?? 'default';
304
+ /**
305
+ * A Lucide-style icon element, given the size it is drawn at and the label's
306
+ * colour, each only where it names none of its own. A gui icon reads its colour
307
+ * from a prop, not from the text context the label's colour rides on, so a
308
+ * subtle button's icon would otherwise stay at full ink beside a quiet label.
309
+ */
310
+ const glyph = (icon, size, color) => {
311
+ if (!(0, react_1.isValidElement)(icon))
312
+ return icon;
313
+ const own = icon.props;
314
+ const next = { ...(own.size == null ? { size } : null), ...(color && own.color == null ? { color } : null) };
315
+ return Object.keys(next).length ? (0, react_1.cloneElement)(icon, next) : icon;
316
+ };
317
+ /** The two record sizes whose child IS the icon, so the button draws it at its glyph. */
318
+ const SMALL_ICON = new Set(['icon-xs', 'icon-2xs']);
319
+ /** How long a pointer rests on a button before its tooltip shows (twenty-ui's 1000ms). */
320
+ const TOOLTIP_DELAY = 1000;
321
+ function Button({ tooltip, ...props }) {
322
+ if (tooltip == null || tooltip === false)
323
+ return (0, jsx_runtime_1.jsx)(Pressable, { ...props });
324
+ const label = typeof tooltip === 'string' && props['aria-label'] == null ? { 'aria-label': tooltip } : null;
325
+ return ((0, jsx_runtime_1.jsxs)(tooltip_1.Tooltip, { delay: TOOLTIP_DELAY, placement: "bottom", children: [(0, jsx_runtime_1.jsx)(tooltip_1.TooltipTrigger, { asChild: true, children: (0, jsx_runtime_1.jsx)(Pressable, { ...props, ...(props.disabled ? { focusableWhenDisabled: true } : null), ...label }) }), (0, jsx_runtime_1.jsx)(tooltip_1.TooltipContent, { children: tooltip })] }));
326
+ }
327
+ function Pressable({ className, variant: own, size, asChild = false, isLoading = false, disabled, startIcon, endIcon, shortcut, shortcutJoinLabel, emphasis = 'standard', tone: ownTone, loadingPosition = 'start', fullWidth, elevated, shape, focusableWhenDisabled, children, ...props }) {
328
+ const density = (0, density_1.useDensity)();
329
+ const group = (0, react_1.useContext)(button_group_1.ButtonGroupContext);
330
+ const variant = own ?? group?.variant ?? 'default';
331
+ const tone = ownTone ?? group?.tone ?? 'neutral';
332
+ const resolved = size ?? group?.size ?? (density === 'compact' ? 'sm' : 'default');
333
+ // Only the box the density chose takes its gutter: a named size is a decision.
334
+ const compact = density === 'compact' && size == null && group?.size == null;
335
+ const quiet = emphasis === 'subtle' ? { color: '$hint' } : null;
336
+ const tint = emphasis === 'subtle' ? '$hint' : toneInk(tone, variant);
337
+ // The record density's label weight: medium, as twenty-ui sets every button.
338
+ const weight = density === 'compact' ? { fontWeight: '500' } : null;
339
+ // Disabled but focusable: the frame's `disabled` would take pointer events and
340
+ // focus away, so the state is said in ARIA and the press is refused here.
341
+ const inert = !!disabled && !!focusableWhenDisabled;
342
+ const center = isLoading && loadingPosition === 'center';
343
+ // aria-hidden: the label stays the name and `disabled` says it is busy; an
344
+ // unnamed progressbar beside it is what axe reports.
345
+ const spinner = (0, jsx_runtime_1.jsx)(gui_1.Spinner, { "aria-hidden": true, size: "small", maxW: SPIN[resolved], maxH: SPIN[resolved] });
178
346
  // gui's own `asChild` cannot merge into the child here: the Button frame bakes
179
347
  // a `render: <button>`, so asChild WRAPS the child in a button and drops every
180
348
  // compiled style (measured: `<button class="is_View "><a>…</a></button>`).
@@ -188,7 +356,12 @@ function Button({ className, variant = 'default', size = 'default', asChild = fa
188
356
  // default, as `render` below records) so it cannot say otherwise. A caller's
189
357
  // `role` still lands, from the spread after it.
190
358
  const link = host != null && host.props.href != null;
191
- return ((0, jsx_runtime_1.jsxs)(Frame, { "data-slot": "button", "data-variant": variant ?? 'default', "data-size": resolved, variant: variant ?? 'default', size: resolved, ...(host
359
+ return ((0, jsx_runtime_1.jsxs)(Frame, { "data-slot": "button", "data-variant": variant, "data-size": resolved, ...(tone !== 'neutral' ? { 'data-tone': tone } : null), variant: variant, size: resolved, ...(compact ? { compact: true } : null), ...(tone !== 'neutral' ? { tone } : null), ...(elevated ? { elevated: true } : null), ...(fullWidth ? { fullWidth: true } : null), ...(shape === 'round' ? { round: true } : null), ...(group?.framed ? { rounded: 1 } : null), ...(center ? { position: 'relative' } : null), ...(host
192
360
  ? { render: (0, react_1.createElement)(host.type, { ...host.props, children: undefined }) }
193
- : null), ...(link ? { role: undefined } : null), disabled: disabled || isLoading, ...(0, gesture_1.touch)(HEIGHT[resolved], 44, 'y'), ...(0, sx_1.sx)((0, style_1.buttonVariants)({ variant, size, className })), ...props, children: [isLoading && (0, jsx_runtime_1.jsx)(gui_1.Spinner, { size: "small", maxW: SPIN[resolved], maxH: SPIN[resolved] }), (0, ink_1.ink)(body, gui_1.Button.Text, { fontSize: TYPE[resolved] })] }));
361
+ : null), ...(link ? { role: undefined } : null), disabled: inert ? false : disabled || isLoading, ...(inert ? { 'aria-disabled': true, opacity: 0.5, cursor: 'not-allowed' } : null), ...(0, gesture_1.touch)(HEIGHT[resolved], 44, 'y'), ...(0, sx_1.sx)((0, style_1.buttonVariants)({ variant, size, className: elevated ? [className, 'elevation-1'].filter(Boolean).join(' ') : className })), ...props, ...(inert ? { onPress: undefined, onClick: (e) => e?.preventDefault?.() } : null), children: [isLoading && loadingPosition === 'start' ? spinner : null, center ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { position: "absolute", t: 0, b: 0, l: 0, r: 0, items: "center", justify: "center", pointerEvents: "none", children: spinner })) : null, startIcon ? glyph(startIcon, GLYPH[resolved], tint) : null, (0, ink_1.ink)(SMALL_ICON.has(resolved) ? glyph(body, GLYPH[resolved], tint) : body, gui_1.Button.Text, {
362
+ fontSize: TYPE[resolved],
363
+ ...weight,
364
+ ...quiet,
365
+ ...(center ? { opacity: 0 } : null),
366
+ }), shortcut && shortcut.length ? ((0, jsx_runtime_1.jsx)(shortcut_1.Shortcut, { keys: shortcut, variant: "button", sequenceJoinLabel: shortcutJoinLabel, ...(center ? { opacity: 0 } : null) })) : null, endIcon ? glyph(endIcon, GLYPH[resolved], tint) : null, isLoading && loadingPosition === 'end' ? spinner : null] }));
194
367
  }