@hanzo/ui 8.27.91 → 8.29.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 (758) 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-picker.cjs +194 -0
  139. package/dist/backends/gui/icon-picker.d.ts +51 -0
  140. package/dist/backends/gui/icon-picker.d.ts.map +1 -0
  141. package/dist/backends/gui/icon-picker.js +155 -0
  142. package/dist/backends/gui/icon-picker.js.map +1 -0
  143. package/dist/backends/gui/icon-tile.cjs +36 -0
  144. package/dist/backends/gui/icon-tile.d.ts +26 -0
  145. package/dist/backends/gui/icon-tile.d.ts.map +1 -0
  146. package/dist/backends/gui/icon-tile.js +32 -0
  147. package/dist/backends/gui/icon-tile.js.map +1 -0
  148. package/dist/backends/gui/icons.cjs +381 -0
  149. package/dist/backends/gui/icons.d.ts +53 -0
  150. package/dist/backends/gui/icons.d.ts.map +1 -0
  151. package/dist/backends/gui/icons.js +377 -0
  152. package/dist/backends/gui/icons.js.map +1 -0
  153. package/dist/backends/gui/image-input.cjs +78 -0
  154. package/dist/backends/gui/image-input.d.ts +32 -0
  155. package/dist/backends/gui/image-input.d.ts.map +1 -0
  156. package/dist/backends/gui/image-input.js +74 -0
  157. package/dist/backends/gui/image-input.js.map +1 -0
  158. package/dist/backends/gui/index.cjs +105 -7
  159. package/dist/backends/gui/index.d.ts +47 -2
  160. package/dist/backends/gui/index.d.ts.map +1 -1
  161. package/dist/backends/gui/index.js +37 -1
  162. package/dist/backends/gui/index.js.map +1 -1
  163. package/dist/backends/gui/input-group.cjs +49 -0
  164. package/dist/backends/gui/input-group.d.ts +46 -0
  165. package/dist/backends/gui/input-group.d.ts.map +1 -0
  166. package/dist/backends/gui/input-group.js +46 -0
  167. package/dist/backends/gui/input-group.js.map +1 -0
  168. package/dist/backends/gui/input.cjs +32 -4
  169. package/dist/backends/gui/input.d.ts +5 -1
  170. package/dist/backends/gui/input.d.ts.map +1 -1
  171. package/dist/backends/gui/input.js +33 -5
  172. package/dist/backends/gui/input.js.map +1 -1
  173. package/dist/backends/gui/item.cjs +34 -2
  174. package/dist/backends/gui/item.d.ts +21 -5
  175. package/dist/backends/gui/item.d.ts.map +1 -1
  176. package/dist/backends/gui/item.js +35 -3
  177. package/dist/backends/gui/item.js.map +1 -1
  178. package/dist/backends/gui/json-tree.cjs +103 -15
  179. package/dist/backends/gui/json-tree.d.ts +39 -3
  180. package/dist/backends/gui/json-tree.d.ts.map +1 -1
  181. package/dist/backends/gui/json-tree.js +104 -16
  182. package/dist/backends/gui/json-tree.js.map +1 -1
  183. package/dist/backends/gui/kbd.cjs +18 -2
  184. package/dist/backends/gui/kbd.d.ts +5 -2
  185. package/dist/backends/gui/kbd.d.ts.map +1 -1
  186. package/dist/backends/gui/kbd.js +18 -2
  187. package/dist/backends/gui/kbd.js.map +1 -1
  188. package/dist/backends/gui/label.cjs +14 -3
  189. package/dist/backends/gui/label.d.ts +12 -3
  190. package/dist/backends/gui/label.d.ts.map +1 -1
  191. package/dist/backends/gui/label.js +14 -3
  192. package/dist/backends/gui/label.js.map +1 -1
  193. package/dist/backends/gui/layout.cjs +5 -1
  194. package/dist/backends/gui/layout.d.ts +1 -1
  195. package/dist/backends/gui/layout.d.ts.map +1 -1
  196. package/dist/backends/gui/layout.js +5 -1
  197. package/dist/backends/gui/layout.js.map +1 -1
  198. package/dist/backends/gui/number-field.cjs +163 -0
  199. package/dist/backends/gui/number-field.d.ts +34 -0
  200. package/dist/backends/gui/number-field.d.ts.map +1 -0
  201. package/dist/backends/gui/number-field.js +160 -0
  202. package/dist/backends/gui/number-field.js.map +1 -0
  203. package/dist/backends/gui/overflowing-list.cjs +79 -0
  204. package/dist/backends/gui/overflowing-list.d.ts +42 -0
  205. package/dist/backends/gui/overflowing-list.d.ts.map +1 -0
  206. package/dist/backends/gui/overflowing-list.js +76 -0
  207. package/dist/backends/gui/overflowing-list.js.map +1 -0
  208. package/dist/backends/gui/phone-country-picker.cjs +60 -0
  209. package/dist/backends/gui/phone-country-picker.d.ts +34 -0
  210. package/dist/backends/gui/phone-country-picker.d.ts.map +1 -0
  211. package/dist/backends/gui/phone-country-picker.js +57 -0
  212. package/dist/backends/gui/phone-country-picker.js.map +1 -0
  213. package/dist/backends/gui/popover.cjs +20 -4
  214. package/dist/backends/gui/popover.d.ts +12 -1
  215. package/dist/backends/gui/popover.d.ts.map +1 -1
  216. package/dist/backends/gui/popover.js +21 -5
  217. package/dist/backends/gui/popover.js.map +1 -1
  218. package/dist/backends/gui/progress-ring.cjs +38 -0
  219. package/dist/backends/gui/progress-ring.d.ts +37 -0
  220. package/dist/backends/gui/progress-ring.d.ts.map +1 -0
  221. package/dist/backends/gui/progress-ring.js +36 -0
  222. package/dist/backends/gui/progress-ring.js.map +1 -0
  223. package/dist/backends/gui/progress.cjs +31 -7
  224. package/dist/backends/gui/progress.d.ts +25 -3
  225. package/dist/backends/gui/progress.d.ts.map +1 -1
  226. package/dist/backends/gui/progress.js +32 -8
  227. package/dist/backends/gui/progress.js.map +1 -1
  228. package/dist/backends/gui/radio-group.cjs +28 -2
  229. package/dist/backends/gui/radio-group.d.ts +20 -2
  230. package/dist/backends/gui/radio-group.d.ts.map +1 -1
  231. package/dist/backends/gui/radio-group.js +28 -2
  232. package/dist/backends/gui/radio-group.js.map +1 -1
  233. package/dist/backends/gui/search-list.cjs +62 -0
  234. package/dist/backends/gui/search-list.d.ts +65 -0
  235. package/dist/backends/gui/search-list.d.ts.map +1 -0
  236. package/dist/backends/gui/search-list.js +58 -0
  237. package/dist/backends/gui/search-list.js.map +1 -0
  238. package/dist/backends/gui/select.cjs +50 -16
  239. package/dist/backends/gui/select.d.ts +12 -3
  240. package/dist/backends/gui/select.d.ts.map +1 -1
  241. package/dist/backends/gui/select.js +51 -17
  242. package/dist/backends/gui/select.js.map +1 -1
  243. package/dist/backends/gui/shortcut.cjs +122 -0
  244. package/dist/backends/gui/shortcut.d.ts +58 -0
  245. package/dist/backends/gui/shortcut.d.ts.map +1 -0
  246. package/dist/backends/gui/shortcut.js +115 -0
  247. package/dist/backends/gui/shortcut.js.map +1 -0
  248. package/dist/backends/gui/skeleton.cjs +41 -10
  249. package/dist/backends/gui/skeleton.d.ts +46 -8
  250. package/dist/backends/gui/skeleton.d.ts.map +1 -1
  251. package/dist/backends/gui/skeleton.js +39 -8
  252. package/dist/backends/gui/skeleton.js.map +1 -1
  253. package/dist/backends/gui/snippet.cjs +12 -1
  254. package/dist/backends/gui/snippet.d.ts +4 -2
  255. package/dist/backends/gui/snippet.d.ts.map +1 -1
  256. package/dist/backends/gui/snippet.js +12 -1
  257. package/dist/backends/gui/snippet.js.map +1 -1
  258. package/dist/backends/gui/spinner.cjs +8 -1
  259. package/dist/backends/gui/spinner.d.ts +11 -2
  260. package/dist/backends/gui/spinner.d.ts.map +1 -1
  261. package/dist/backends/gui/spinner.js +9 -2
  262. package/dist/backends/gui/spinner.js.map +1 -1
  263. package/dist/backends/gui/stack-icon.cjs +17 -0
  264. package/dist/backends/gui/stack-icon.d.ts +15 -0
  265. package/dist/backends/gui/stack-icon.d.ts.map +1 -0
  266. package/dist/backends/gui/stack-icon.js +15 -0
  267. package/dist/backends/gui/stack-icon.js.map +1 -0
  268. package/dist/backends/gui/status.cjs +38 -1
  269. package/dist/backends/gui/status.d.ts +16 -2
  270. package/dist/backends/gui/status.d.ts.map +1 -1
  271. package/dist/backends/gui/status.js +38 -2
  272. package/dist/backends/gui/status.js.map +1 -1
  273. package/dist/backends/gui/stepper.cjs +73 -3
  274. package/dist/backends/gui/stepper.d.ts +25 -1
  275. package/dist/backends/gui/stepper.d.ts.map +1 -1
  276. package/dist/backends/gui/stepper.js +71 -5
  277. package/dist/backends/gui/stepper.js.map +1 -1
  278. package/dist/backends/gui/switch.cjs +35 -20
  279. package/dist/backends/gui/switch.d.ts +12 -2
  280. package/dist/backends/gui/switch.d.ts.map +1 -1
  281. package/dist/backends/gui/switch.js +35 -20
  282. package/dist/backends/gui/switch.js.map +1 -1
  283. package/dist/backends/gui/tabs.cjs +63 -17
  284. package/dist/backends/gui/tabs.d.ts +35 -6
  285. package/dist/backends/gui/tabs.d.ts.map +1 -1
  286. package/dist/backends/gui/tabs.js +65 -19
  287. package/dist/backends/gui/tabs.js.map +1 -1
  288. package/dist/backends/gui/tag.cjs +48 -0
  289. package/dist/backends/gui/tag.d.ts +53 -0
  290. package/dist/backends/gui/tag.d.ts.map +1 -0
  291. package/dist/backends/gui/tag.js +46 -0
  292. package/dist/backends/gui/tag.js.map +1 -0
  293. package/dist/backends/gui/tags.cjs +9 -2
  294. package/dist/backends/gui/tags.d.ts +6 -5
  295. package/dist/backends/gui/tags.d.ts.map +1 -1
  296. package/dist/backends/gui/tags.js +9 -2
  297. package/dist/backends/gui/tags.js.map +1 -1
  298. package/dist/backends/gui/textarea.cjs +22 -6
  299. package/dist/backends/gui/textarea.d.ts +10 -1
  300. package/dist/backends/gui/textarea.d.ts.map +1 -1
  301. package/dist/backends/gui/textarea.js +22 -6
  302. package/dist/backends/gui/textarea.js.map +1 -1
  303. package/dist/backends/gui/toaster.cjs +167 -3
  304. package/dist/backends/gui/toaster.d.ts +28 -2
  305. package/dist/backends/gui/toaster.d.ts.map +1 -1
  306. package/dist/backends/gui/toaster.js +167 -5
  307. package/dist/backends/gui/toaster.js.map +1 -1
  308. package/dist/backends/gui/toggle-group.cjs +13 -0
  309. package/dist/backends/gui/toggle-group.d.ts +7 -1
  310. package/dist/backends/gui/toggle-group.d.ts.map +1 -1
  311. package/dist/backends/gui/toggle-group.js +13 -0
  312. package/dist/backends/gui/toggle-group.js.map +1 -1
  313. package/dist/backends/gui/tooltip.cjs +29 -6
  314. package/dist/backends/gui/tooltip.d.ts +23 -4
  315. package/dist/backends/gui/tooltip.d.ts.map +1 -1
  316. package/dist/backends/gui/tooltip.js +31 -8
  317. package/dist/backends/gui/tooltip.js.map +1 -1
  318. package/dist/backends/gui/truncated-text.cjs +102 -0
  319. package/dist/backends/gui/truncated-text.d.ts +55 -0
  320. package/dist/backends/gui/truncated-text.d.ts.map +1 -0
  321. package/dist/backends/gui/truncated-text.js +97 -0
  322. package/dist/backends/gui/truncated-text.js.map +1 -0
  323. package/dist/gallery/compound.cjs +60 -0
  324. package/dist/gallery/compound.d.ts +2 -0
  325. package/dist/gallery/compound.d.ts.map +1 -0
  326. package/dist/gallery/compound.js +58 -0
  327. package/dist/gallery/compound.js.map +1 -0
  328. package/dist/gallery/display.cjs +47 -0
  329. package/dist/gallery/display.d.ts +3 -0
  330. package/dist/gallery/display.d.ts.map +1 -0
  331. package/dist/gallery/display.js +45 -0
  332. package/dist/gallery/display.js.map +1 -0
  333. package/dist/gallery/feedback.cjs +38 -0
  334. package/dist/gallery/feedback.d.ts +2 -0
  335. package/dist/gallery/feedback.d.ts.map +1 -0
  336. package/dist/gallery/feedback.js +36 -0
  337. package/dist/gallery/feedback.js.map +1 -0
  338. package/dist/gallery/fields.cjs +53 -0
  339. package/dist/gallery/fields.d.ts +2 -0
  340. package/dist/gallery/fields.d.ts.map +1 -0
  341. package/dist/gallery/fields.js +51 -0
  342. package/dist/gallery/fields.js.map +1 -0
  343. package/dist/gallery/frames.cjs +47 -0
  344. package/dist/gallery/frames.d.ts +2 -0
  345. package/dist/gallery/frames.d.ts.map +1 -0
  346. package/dist/gallery/frames.js +45 -0
  347. package/dist/gallery/frames.js.map +1 -0
  348. package/dist/gallery/icons.cjs +19 -0
  349. package/dist/gallery/icons.d.ts +2 -0
  350. package/dist/gallery/icons.d.ts.map +1 -0
  351. package/dist/gallery/icons.js +17 -0
  352. package/dist/gallery/icons.js.map +1 -0
  353. package/dist/gallery/menus.cjs +64 -0
  354. package/dist/gallery/menus.d.ts +15 -0
  355. package/dist/gallery/menus.d.ts.map +1 -0
  356. package/dist/gallery/menus.js +58 -0
  357. package/dist/gallery/menus.js.map +1 -0
  358. package/dist/gallery/records.cjs +34 -0
  359. package/dist/gallery/records.d.ts +2 -0
  360. package/dist/gallery/records.d.ts.map +1 -0
  361. package/dist/gallery/records.js +32 -0
  362. package/dist/gallery/records.js.map +1 -0
  363. package/dist/gallery/section.cjs +17 -0
  364. package/dist/gallery/section.d.ts +10 -0
  365. package/dist/gallery/section.d.ts.map +1 -0
  366. package/dist/gallery/section.js +14 -0
  367. package/dist/gallery/section.js.map +1 -0
  368. package/dist/gallery.cjs +8 -14
  369. package/dist/gallery.d.ts.map +1 -1
  370. package/dist/gallery.html +1594 -256
  371. package/dist/gallery.js +3 -9
  372. package/dist/gallery.js.map +1 -1
  373. package/dist/gui-config.cjs +33 -4
  374. package/dist/gui-config.d.ts +11 -3
  375. package/dist/gui-config.d.ts.map +1 -1
  376. package/dist/gui-config.js +33 -4
  377. package/dist/gui-config.js.map +1 -1
  378. package/dist/index.cjs +73 -2
  379. package/dist/index.d.ts +5 -2
  380. package/dist/index.d.ts.map +1 -1
  381. package/dist/index.js +10 -1
  382. package/dist/index.js.map +1 -1
  383. package/dist/index.node.cjs +73 -2
  384. package/dist/index.node.js +10 -1
  385. package/dist/motion.cjs +25 -1
  386. package/dist/motion.d.ts +16 -1
  387. package/dist/motion.d.ts.map +1 -1
  388. package/dist/motion.js +24 -1
  389. package/dist/motion.js.map +1 -1
  390. package/dist/primitives/AvatarGroup.cjs +8 -0
  391. package/dist/primitives/AvatarGroup.d.ts +2 -0
  392. package/dist/primitives/AvatarGroup.d.ts.map +1 -0
  393. package/dist/primitives/AvatarGroup.js +5 -0
  394. package/dist/primitives/AvatarGroup.js.map +1 -0
  395. package/dist/primitives/BannerAction.cjs +8 -0
  396. package/dist/primitives/BannerAction.d.ts +2 -0
  397. package/dist/primitives/BannerAction.d.ts.map +1 -0
  398. package/dist/primitives/BannerAction.js +5 -0
  399. package/dist/primitives/BannerAction.js.map +1 -0
  400. package/dist/primitives/ButtonGroup.cjs +8 -0
  401. package/dist/primitives/ButtonGroup.d.ts +2 -0
  402. package/dist/primitives/ButtonGroup.d.ts.map +1 -0
  403. package/dist/primitives/ButtonGroup.js +5 -0
  404. package/dist/primitives/ButtonGroup.js.map +1 -0
  405. package/dist/primitives/ButtonGroupContext.cjs +8 -0
  406. package/dist/primitives/ButtonGroupContext.d.ts +2 -0
  407. package/dist/primitives/ButtonGroupContext.d.ts.map +1 -0
  408. package/dist/primitives/ButtonGroupContext.js +5 -0
  409. package/dist/primitives/ButtonGroupContext.js.map +1 -0
  410. package/dist/primitives/CONCEPTS.cjs +8 -0
  411. package/dist/primitives/CONCEPTS.d.ts +2 -0
  412. package/dist/primitives/CONCEPTS.d.ts.map +1 -0
  413. package/dist/primitives/CONCEPTS.js +5 -0
  414. package/dist/primitives/CONCEPTS.js.map +1 -0
  415. package/dist/primitives/CalloutAction.cjs +8 -0
  416. package/dist/primitives/CalloutAction.d.ts +2 -0
  417. package/dist/primitives/CalloutAction.d.ts.map +1 -0
  418. package/dist/primitives/CalloutAction.js +5 -0
  419. package/dist/primitives/CalloutAction.js.map +1 -0
  420. package/dist/primitives/Chip.cjs +8 -0
  421. package/dist/primitives/Chip.d.ts +2 -0
  422. package/dist/primitives/Chip.d.ts.map +1 -0
  423. package/dist/primitives/Chip.js +5 -0
  424. package/dist/primitives/Chip.js.map +1 -0
  425. package/dist/primitives/ColorSample.cjs +8 -0
  426. package/dist/primitives/ColorSample.d.ts +2 -0
  427. package/dist/primitives/ColorSample.d.ts.map +1 -0
  428. package/dist/primitives/ColorSample.js +5 -0
  429. package/dist/primitives/ColorSample.js.map +1 -0
  430. package/dist/primitives/CountrySelect.cjs +8 -0
  431. package/dist/primitives/CountrySelect.d.ts +2 -0
  432. package/dist/primitives/CountrySelect.d.ts.map +1 -0
  433. package/dist/primitives/CountrySelect.js +5 -0
  434. package/dist/primitives/CountrySelect.js.map +1 -0
  435. package/dist/primitives/CurrencyPicker.cjs +8 -0
  436. package/dist/primitives/CurrencyPicker.d.ts +2 -0
  437. package/dist/primitives/CurrencyPicker.d.ts.map +1 -0
  438. package/dist/primitives/CurrencyPicker.js +5 -0
  439. package/dist/primitives/CurrencyPicker.js.map +1 -0
  440. package/dist/primitives/Density.cjs +8 -0
  441. package/dist/primitives/Density.d.ts +2 -0
  442. package/dist/primitives/Density.d.ts.map +1 -0
  443. package/dist/primitives/Density.js +5 -0
  444. package/dist/primitives/Density.js.map +1 -0
  445. package/dist/primitives/DialogBody.cjs +8 -0
  446. package/dist/primitives/DialogBody.d.ts +2 -0
  447. package/dist/primitives/DialogBody.d.ts.map +1 -0
  448. package/dist/primitives/DialogBody.js +5 -0
  449. package/dist/primitives/DialogBody.js.map +1 -0
  450. package/dist/primitives/DropdownMenuBack.cjs +8 -0
  451. package/dist/primitives/DropdownMenuBack.d.ts +2 -0
  452. package/dist/primitives/DropdownMenuBack.d.ts.map +1 -0
  453. package/dist/primitives/DropdownMenuBack.js +5 -0
  454. package/dist/primitives/DropdownMenuBack.js.map +1 -0
  455. package/dist/primitives/DropdownMenuClose.cjs +8 -0
  456. package/dist/primitives/DropdownMenuClose.d.ts +2 -0
  457. package/dist/primitives/DropdownMenuClose.d.ts.map +1 -0
  458. package/dist/primitives/DropdownMenuClose.js +5 -0
  459. package/dist/primitives/DropdownMenuClose.js.map +1 -0
  460. package/dist/primitives/DropdownMenuEmpty.cjs +8 -0
  461. package/dist/primitives/DropdownMenuEmpty.d.ts +2 -0
  462. package/dist/primitives/DropdownMenuEmpty.d.ts.map +1 -0
  463. package/dist/primitives/DropdownMenuEmpty.js +5 -0
  464. package/dist/primitives/DropdownMenuEmpty.js.map +1 -0
  465. package/dist/primitives/DropdownMenuHeader.cjs +8 -0
  466. package/dist/primitives/DropdownMenuHeader.d.ts +2 -0
  467. package/dist/primitives/DropdownMenuHeader.d.ts.map +1 -0
  468. package/dist/primitives/DropdownMenuHeader.js +5 -0
  469. package/dist/primitives/DropdownMenuHeader.js.map +1 -0
  470. package/dist/primitives/DropdownMenuLoading.cjs +8 -0
  471. package/dist/primitives/DropdownMenuLoading.d.ts +2 -0
  472. package/dist/primitives/DropdownMenuLoading.d.ts.map +1 -0
  473. package/dist/primitives/DropdownMenuLoading.js +5 -0
  474. package/dist/primitives/DropdownMenuLoading.js.map +1 -0
  475. package/dist/primitives/DropdownMenuOptionItem.cjs +8 -0
  476. package/dist/primitives/DropdownMenuOptionItem.d.ts +2 -0
  477. package/dist/primitives/DropdownMenuOptionItem.d.ts.map +1 -0
  478. package/dist/primitives/DropdownMenuOptionItem.js +5 -0
  479. package/dist/primitives/DropdownMenuOptionItem.js.map +1 -0
  480. package/dist/primitives/DropdownMenuPage.cjs +8 -0
  481. package/dist/primitives/DropdownMenuPage.d.ts +2 -0
  482. package/dist/primitives/DropdownMenuPage.d.ts.map +1 -0
  483. package/dist/primitives/DropdownMenuPage.js +5 -0
  484. package/dist/primitives/DropdownMenuPage.js.map +1 -0
  485. package/dist/primitives/DropdownMenuSearch.cjs +8 -0
  486. package/dist/primitives/DropdownMenuSearch.d.ts +2 -0
  487. package/dist/primitives/DropdownMenuSearch.d.ts.map +1 -0
  488. package/dist/primitives/DropdownMenuSearch.js +5 -0
  489. package/dist/primitives/DropdownMenuSearch.js.map +1 -0
  490. package/dist/primitives/DropdownMenuSection.cjs +8 -0
  491. package/dist/primitives/DropdownMenuSection.d.ts +2 -0
  492. package/dist/primitives/DropdownMenuSection.d.ts.map +1 -0
  493. package/dist/primitives/DropdownMenuSection.js +5 -0
  494. package/dist/primitives/DropdownMenuSection.js.map +1 -0
  495. package/dist/primitives/DropdownMenuSelectionGroup.cjs +8 -0
  496. package/dist/primitives/DropdownMenuSelectionGroup.d.ts +2 -0
  497. package/dist/primitives/DropdownMenuSelectionGroup.d.ts.map +1 -0
  498. package/dist/primitives/DropdownMenuSelectionGroup.js +5 -0
  499. package/dist/primitives/DropdownMenuSelectionGroup.js.map +1 -0
  500. package/dist/primitives/DropdownMenuTitle.cjs +8 -0
  501. package/dist/primitives/DropdownMenuTitle.d.ts +2 -0
  502. package/dist/primitives/DropdownMenuTitle.d.ts.map +1 -0
  503. package/dist/primitives/DropdownMenuTitle.js +5 -0
  504. package/dist/primitives/DropdownMenuTitle.js.map +1 -0
  505. package/dist/primitives/FIELD_ICONS.cjs +8 -0
  506. package/dist/primitives/FIELD_ICONS.d.ts +2 -0
  507. package/dist/primitives/FIELD_ICONS.d.ts.map +1 -0
  508. package/dist/primitives/FIELD_ICONS.js +5 -0
  509. package/dist/primitives/FIELD_ICONS.js.map +1 -0
  510. package/dist/primitives/Glyph.cjs +8 -0
  511. package/dist/primitives/Glyph.d.ts +2 -0
  512. package/dist/primitives/Glyph.d.ts.map +1 -0
  513. package/dist/primitives/Glyph.js +5 -0
  514. package/dist/primitives/Glyph.js.map +1 -0
  515. package/dist/primitives/Heading.cjs +2 -2
  516. package/dist/primitives/Heading.d.ts +1 -1
  517. package/dist/primitives/Heading.d.ts.map +1 -1
  518. package/dist/primitives/Heading.js +1 -1
  519. package/dist/primitives/Heading.js.map +1 -1
  520. package/dist/primitives/IconPicker.cjs +8 -0
  521. package/dist/primitives/IconPicker.d.ts +2 -0
  522. package/dist/primitives/IconPicker.d.ts.map +1 -0
  523. package/dist/primitives/IconPicker.js +5 -0
  524. package/dist/primitives/IconPicker.js.map +1 -0
  525. package/dist/primitives/IconTile.cjs +8 -0
  526. package/dist/primitives/IconTile.d.ts +2 -0
  527. package/dist/primitives/IconTile.d.ts.map +1 -0
  528. package/dist/primitives/IconTile.js +5 -0
  529. package/dist/primitives/IconTile.js.map +1 -0
  530. package/dist/primitives/ImageInput.cjs +8 -0
  531. package/dist/primitives/ImageInput.d.ts +2 -0
  532. package/dist/primitives/ImageInput.d.ts.map +1 -0
  533. package/dist/primitives/ImageInput.js +5 -0
  534. package/dist/primitives/ImageInput.js.map +1 -0
  535. package/dist/primitives/InputGroup.cjs +8 -0
  536. package/dist/primitives/InputGroup.d.ts +2 -0
  537. package/dist/primitives/InputGroup.d.ts.map +1 -0
  538. package/dist/primitives/InputGroup.js +5 -0
  539. package/dist/primitives/InputGroup.js.map +1 -0
  540. package/dist/primitives/NumberField.cjs +8 -0
  541. package/dist/primitives/NumberField.d.ts +2 -0
  542. package/dist/primitives/NumberField.d.ts.map +1 -0
  543. package/dist/primitives/NumberField.js +5 -0
  544. package/dist/primitives/NumberField.js.map +1 -0
  545. package/dist/primitives/OverflowingList.cjs +8 -0
  546. package/dist/primitives/OverflowingList.d.ts +2 -0
  547. package/dist/primitives/OverflowingList.d.ts.map +1 -0
  548. package/dist/primitives/OverflowingList.js +5 -0
  549. package/dist/primitives/OverflowingList.js.map +1 -0
  550. package/dist/primitives/PhoneCountryPicker.cjs +8 -0
  551. package/dist/primitives/PhoneCountryPicker.d.ts +2 -0
  552. package/dist/primitives/PhoneCountryPicker.d.ts.map +1 -0
  553. package/dist/primitives/PhoneCountryPicker.js +5 -0
  554. package/dist/primitives/PhoneCountryPicker.js.map +1 -0
  555. package/dist/primitives/ProgressRing.cjs +8 -0
  556. package/dist/primitives/ProgressRing.d.ts +2 -0
  557. package/dist/primitives/ProgressRing.d.ts.map +1 -0
  558. package/dist/primitives/ProgressRing.js +5 -0
  559. package/dist/primitives/ProgressRing.js.map +1 -0
  560. package/dist/primitives/RadioCircle.cjs +8 -0
  561. package/dist/primitives/RadioCircle.d.ts +2 -0
  562. package/dist/primitives/RadioCircle.d.ts.map +1 -0
  563. package/dist/primitives/RadioCircle.js +5 -0
  564. package/dist/primitives/RadioCircle.js.map +1 -0
  565. package/dist/primitives/SKELETON_HEIGHT.cjs +8 -0
  566. package/dist/primitives/SKELETON_HEIGHT.d.ts +2 -0
  567. package/dist/primitives/SKELETON_HEIGHT.d.ts.map +1 -0
  568. package/dist/primitives/SKELETON_HEIGHT.js +5 -0
  569. package/dist/primitives/SKELETON_HEIGHT.js.map +1 -0
  570. package/dist/primitives/STATUS_COLOR.cjs +8 -0
  571. package/dist/primitives/STATUS_COLOR.d.ts +2 -0
  572. package/dist/primitives/STATUS_COLOR.d.ts.map +1 -0
  573. package/dist/primitives/STATUS_COLOR.js +5 -0
  574. package/dist/primitives/STATUS_COLOR.js.map +1 -0
  575. package/dist/primitives/STATUS_HUE.cjs +8 -0
  576. package/dist/primitives/STATUS_HUE.d.ts +2 -0
  577. package/dist/primitives/STATUS_HUE.d.ts.map +1 -0
  578. package/dist/primitives/STATUS_HUE.js +5 -0
  579. package/dist/primitives/STATUS_HUE.js.map +1 -0
  580. package/dist/primitives/STATUS_PAINT.cjs +8 -0
  581. package/dist/primitives/STATUS_PAINT.d.ts +2 -0
  582. package/dist/primitives/STATUS_PAINT.d.ts.map +1 -0
  583. package/dist/primitives/STATUS_PAINT.js +5 -0
  584. package/dist/primitives/STATUS_PAINT.js.map +1 -0
  585. package/dist/primitives/Shortcut.cjs +8 -0
  586. package/dist/primitives/Shortcut.d.ts +2 -0
  587. package/dist/primitives/Shortcut.d.ts.map +1 -0
  588. package/dist/primitives/Shortcut.js +5 -0
  589. package/dist/primitives/Shortcut.js.map +1 -0
  590. package/dist/primitives/StackIcon.cjs +8 -0
  591. package/dist/primitives/StackIcon.d.ts +2 -0
  592. package/dist/primitives/StackIcon.d.ts.map +1 -0
  593. package/dist/primitives/StackIcon.js +5 -0
  594. package/dist/primitives/StackIcon.js.map +1 -0
  595. package/dist/primitives/TABLER.cjs +8 -0
  596. package/dist/primitives/TABLER.d.ts +2 -0
  597. package/dist/primitives/TABLER.d.ts.map +1 -0
  598. package/dist/primitives/TABLER.js +5 -0
  599. package/dist/primitives/TABLER.js.map +1 -0
  600. package/dist/primitives/TOAST_DURATION.cjs +8 -0
  601. package/dist/primitives/TOAST_DURATION.d.ts +2 -0
  602. package/dist/primitives/TOAST_DURATION.d.ts.map +1 -0
  603. package/dist/primitives/TOAST_DURATION.js +5 -0
  604. package/dist/primitives/TOAST_DURATION.js.map +1 -0
  605. package/dist/primitives/Tag.cjs +8 -0
  606. package/dist/primitives/Tag.d.ts +2 -0
  607. package/dist/primitives/Tag.d.ts.map +1 -0
  608. package/dist/primitives/Tag.js +5 -0
  609. package/dist/primitives/Tag.js.map +1 -0
  610. package/dist/primitives/ToastCard.cjs +8 -0
  611. package/dist/primitives/ToastCard.d.ts +2 -0
  612. package/dist/primitives/ToastCard.d.ts.map +1 -0
  613. package/dist/primitives/ToastCard.js +5 -0
  614. package/dist/primitives/ToastCard.js.map +1 -0
  615. package/dist/primitives/ToastFace.cjs +8 -0
  616. package/dist/primitives/ToastFace.d.ts +2 -0
  617. package/dist/primitives/ToastFace.d.ts.map +1 -0
  618. package/dist/primitives/ToastFace.js +5 -0
  619. package/dist/primitives/ToastFace.js.map +1 -0
  620. package/dist/primitives/TruncatedText.cjs +8 -0
  621. package/dist/primitives/TruncatedText.d.ts +2 -0
  622. package/dist/primitives/TruncatedText.d.ts.map +1 -0
  623. package/dist/primitives/TruncatedText.js +5 -0
  624. package/dist/primitives/TruncatedText.js.map +1 -0
  625. package/dist/primitives/TruncatedTextProvider.cjs +8 -0
  626. package/dist/primitives/TruncatedTextProvider.d.ts +2 -0
  627. package/dist/primitives/TruncatedTextProvider.d.ts.map +1 -0
  628. package/dist/primitives/TruncatedTextProvider.js +5 -0
  629. package/dist/primitives/TruncatedTextProvider.js.map +1 -0
  630. package/dist/primitives/VisuallyHidden.cjs +8 -0
  631. package/dist/primitives/VisuallyHidden.d.ts +2 -0
  632. package/dist/primitives/VisuallyHidden.d.ts.map +1 -0
  633. package/dist/primitives/VisuallyHidden.js +5 -0
  634. package/dist/primitives/VisuallyHidden.js.map +1 -0
  635. package/dist/primitives/fieldSize.cjs +8 -0
  636. package/dist/primitives/fieldSize.d.ts +2 -0
  637. package/dist/primitives/fieldSize.d.ts.map +1 -0
  638. package/dist/primitives/fieldSize.js +5 -0
  639. package/dist/primitives/fieldSize.js.map +1 -0
  640. package/dist/primitives/flag.cjs +8 -0
  641. package/dist/primitives/flag.d.ts +2 -0
  642. package/dist/primitives/flag.d.ts.map +1 -0
  643. package/dist/primitives/flag.js +5 -0
  644. package/dist/primitives/flag.js.map +1 -0
  645. package/dist/primitives/formatShortcut.cjs +8 -0
  646. package/dist/primitives/formatShortcut.d.ts +2 -0
  647. package/dist/primitives/formatShortcut.d.ts.map +1 -0
  648. package/dist/primitives/formatShortcut.js +5 -0
  649. package/dist/primitives/formatShortcut.js.map +1 -0
  650. package/dist/primitives/iconWords.cjs +8 -0
  651. package/dist/primitives/iconWords.d.ts +2 -0
  652. package/dist/primitives/iconWords.d.ts.map +1 -0
  653. package/dist/primitives/iconWords.js +5 -0
  654. package/dist/primitives/iconWords.js.map +1 -0
  655. package/dist/primitives/initialOf.cjs +8 -0
  656. package/dist/primitives/initialOf.d.ts +2 -0
  657. package/dist/primitives/initialOf.d.ts.map +1 -0
  658. package/dist/primitives/initialOf.js +5 -0
  659. package/dist/primitives/initialOf.js.map +1 -0
  660. package/dist/primitives/loadIcons.cjs +8 -0
  661. package/dist/primitives/loadIcons.d.ts +2 -0
  662. package/dist/primitives/loadIcons.d.ts.map +1 -0
  663. package/dist/primitives/loadIcons.js +5 -0
  664. package/dist/primitives/loadIcons.js.map +1 -0
  665. package/dist/primitives/parseNumber.cjs +8 -0
  666. package/dist/primitives/parseNumber.d.ts +2 -0
  667. package/dist/primitives/parseNumber.d.ts.map +1 -0
  668. package/dist/primitives/parseNumber.js +5 -0
  669. package/dist/primitives/parseNumber.js.map +1 -0
  670. package/dist/primitives/resolveIcon.cjs +8 -0
  671. package/dist/primitives/resolveIcon.d.ts +2 -0
  672. package/dist/primitives/resolveIcon.d.ts.map +1 -0
  673. package/dist/primitives/resolveIcon.js +5 -0
  674. package/dist/primitives/resolveIcon.js.map +1 -0
  675. package/dist/primitives/speakShortcut.cjs +8 -0
  676. package/dist/primitives/speakShortcut.d.ts +2 -0
  677. package/dist/primitives/speakShortcut.d.ts.map +1 -0
  678. package/dist/primitives/speakShortcut.js +5 -0
  679. package/dist/primitives/speakShortcut.js.map +1 -0
  680. package/dist/primitives/tileTones.cjs +8 -0
  681. package/dist/primitives/tileTones.d.ts +2 -0
  682. package/dist/primitives/tileTones.d.ts.map +1 -0
  683. package/dist/primitives/tileTones.js +5 -0
  684. package/dist/primitives/tileTones.js.map +1 -0
  685. package/dist/primitives/useDensity.cjs +8 -0
  686. package/dist/primitives/useDensity.d.ts +2 -0
  687. package/dist/primitives/useDensity.d.ts.map +1 -0
  688. package/dist/primitives/useDensity.js +5 -0
  689. package/dist/primitives/useDensity.js.map +1 -0
  690. package/dist/primitives/useField.cjs +8 -0
  691. package/dist/primitives/useField.d.ts +2 -0
  692. package/dist/primitives/useField.d.ts.map +1 -0
  693. package/dist/primitives/useField.js +5 -0
  694. package/dist/primitives/useField.js.map +1 -0
  695. package/dist/primitives/useIcons.cjs +8 -0
  696. package/dist/primitives/useIcons.d.ts +2 -0
  697. package/dist/primitives/useIcons.d.ts.map +1 -0
  698. package/dist/primitives/useIcons.js +5 -0
  699. package/dist/primitives/useIcons.js.map +1 -0
  700. package/dist/product/ComboBox.cjs +25 -7
  701. package/dist/product/ComboBox.d.ts +3 -1
  702. package/dist/product/ComboBox.d.ts.map +1 -1
  703. package/dist/product/ComboBox.js +25 -7
  704. package/dist/product/ComboBox.js.map +1 -1
  705. package/dist/product/CommandMenu.cjs +137 -0
  706. package/dist/product/CommandMenu.d.ts +77 -0
  707. package/dist/product/CommandMenu.d.ts.map +1 -0
  708. package/dist/product/CommandMenu.js +134 -0
  709. package/dist/product/CommandMenu.js.map +1 -0
  710. package/dist/product/DetailPane.cjs +154 -12
  711. package/dist/product/DetailPane.d.ts +80 -2
  712. package/dist/product/DetailPane.d.ts.map +1 -1
  713. package/dist/product/DetailPane.js +153 -16
  714. package/dist/product/DetailPane.js.map +1 -1
  715. package/dist/product/Fact.cjs +6 -1
  716. package/dist/product/Fact.d.ts +16 -1
  717. package/dist/product/Fact.d.ts.map +1 -1
  718. package/dist/product/Fact.js +6 -1
  719. package/dist/product/Fact.js.map +1 -1
  720. package/dist/product/Field.cjs +14 -2
  721. package/dist/product/Field.d.ts +16 -1
  722. package/dist/product/Field.d.ts.map +1 -1
  723. package/dist/product/Field.js +14 -2
  724. package/dist/product/Field.js.map +1 -1
  725. package/dist/product/Filters.cjs +61 -9
  726. package/dist/product/Filters.d.ts +37 -6
  727. package/dist/product/Filters.d.ts.map +1 -1
  728. package/dist/product/Filters.js +62 -10
  729. package/dist/product/Filters.js.map +1 -1
  730. package/dist/product/MenuRow.cjs +81 -2
  731. package/dist/product/MenuRow.d.ts +76 -6
  732. package/dist/product/MenuRow.d.ts.map +1 -1
  733. package/dist/product/MenuRow.js +81 -4
  734. package/dist/product/MenuRow.js.map +1 -1
  735. package/dist/product/PrimaryButton.cjs +5 -1
  736. package/dist/product/PrimaryButton.d.ts +8 -0
  737. package/dist/product/PrimaryButton.d.ts.map +1 -1
  738. package/dist/product/PrimaryButton.js +5 -1
  739. package/dist/product/PrimaryButton.js.map +1 -1
  740. package/dist/product/Skeleton.cjs +7 -6
  741. package/dist/product/Skeleton.d.ts +3 -20
  742. package/dist/product/Skeleton.d.ts.map +1 -1
  743. package/dist/product/Skeleton.js +8 -7
  744. package/dist/product/Skeleton.js.map +1 -1
  745. package/dist/product/index.cjs +2 -0
  746. package/dist/product/index.d.ts +1 -0
  747. package/dist/product/index.d.ts.map +1 -1
  748. package/dist/product/index.js +2 -0
  749. package/dist/product/index.js.map +1 -1
  750. package/dist/settings/Section.cjs +11 -2
  751. package/dist/settings/Section.d.ts +8 -1
  752. package/dist/settings/Section.d.ts.map +1 -1
  753. package/dist/settings/Section.js +11 -2
  754. package/dist/settings/Section.js.map +1 -1
  755. package/dist/styles/motion.css +70 -0
  756. package/dist/styles.css +1460 -127
  757. package/dist/theme.css +944 -0
  758. package/package.json +2 -1
@@ -34,32 +34,71 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  };
35
35
  })();
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.DropdownMenuRadioGroup = exports.DropdownMenuSubTrigger = exports.DropdownMenuSubContent = exports.DropdownMenuSub = exports.DropdownMenuPortal = exports.DropdownMenuGroup = exports.DropdownMenuSeparator = exports.DropdownMenuLabel = exports.DropdownMenuRadioItem = exports.DropdownMenuCheckboxItem = exports.DropdownMenuItem = exports.DropdownMenuContent = exports.DropdownMenuTrigger = void 0;
37
+ exports.DropdownMenuClose = exports.DropdownMenuBack = exports.DropdownMenuOptionItem = exports.DropdownMenuRadioGroup = exports.DropdownMenuSubTrigger = exports.DropdownMenuSubContent = exports.DropdownMenuSub = exports.DropdownMenuPortal = exports.DropdownMenuGroup = exports.DropdownMenuSeparator = exports.DropdownMenuLabel = exports.DropdownMenuRadioItem = exports.DropdownMenuCheckboxItem = exports.DropdownMenuItem = exports.DropdownMenuContent = exports.DropdownMenuTrigger = void 0;
38
38
  exports.DropdownMenu = DropdownMenu;
39
39
  exports.DropdownMenuShortcut = DropdownMenuShortcut;
40
+ exports.DropdownMenuSearch = DropdownMenuSearch;
41
+ exports.DropdownMenuSection = DropdownMenuSection;
42
+ exports.DropdownMenuSelectionGroup = DropdownMenuSelectionGroup;
43
+ exports.DropdownMenuPage = DropdownMenuPage;
44
+ exports.DropdownMenuHeader = DropdownMenuHeader;
45
+ exports.DropdownMenuTitle = DropdownMenuTitle;
46
+ exports.DropdownMenuEmpty = DropdownMenuEmpty;
47
+ exports.DropdownMenuLoading = DropdownMenuLoading;
40
48
  const jsx_runtime_1 = require("react/jsx-runtime");
41
49
  /**
42
50
  * DropdownMenu — the ONE compound menu, native to @hanzo/gui.
43
51
  *
44
52
  * @hanzogui/menu already ships the whole compound surface (Root/Trigger/Portal/
45
53
  * Content/Group/Label/Item/CheckboxItem/RadioGroup/RadioItem/ItemIndicator/
46
- * Separator/Sub/SubTrigger/SubContent) with the a11y, roving focus, popper
47
- * placement and dismiss behaviour. This file only FLATTENS `Menu.X` into the 15
48
- * `DropdownMenuX` names and dresses them in the Hanzo tokens, so there is one
49
- * menu component rather than two shapes of the same idea.
54
+ * Separator/Sub/SubTrigger/SubContent) with the a11y, roving focus, typeahead,
55
+ * popper placement and dismiss behaviour. This file FLATTENS `Menu.X` into the
56
+ * `DropdownMenuX` names, dresses them in the Hanzo tokens, and adds the parts a
57
+ * record surface needs on top of gui's — so there is one menu component rather
58
+ * than two shapes of the same idea.
50
59
  *
51
60
  * Cross-platform: gui style props only — no Tailwind class strings, no Radix, no
52
- * DOM APIs. Rows are 32px tall (the design density) and `touch()` lifts the real
53
- * tap target to 44px — on web and Tauri as well as native.
61
+ * DOM APIs outside `isWeb`. Rows are 32px tall (the design density) and
62
+ * `touch()` lifts the real tap target to 44px — on web and Tauri as well as
63
+ * native.
54
64
  *
55
65
  * `DropdownMenuContent` mounts its OWN `Menu.Portal`, so callers never wrap it —
56
- * and re-applies the trigger's resolved theme inside the portal via `PortalTheme`
57
- * (gui portals re-root the subtree, so React theme context does not flow).
66
+ * and re-applies, inside the portal, what React context cannot carry across it:
67
+ * the trigger's resolved theme (`PortalTheme`), its density (`Density`) and the
68
+ * menu's page history. gui portals re-root the subtree, so none of the three
69
+ * flows by itself.
70
+ *
71
+ * THE RECORD PARTS (twenty-ui's Dropdown, MIT, NOTICE), re-expressed on gui's
72
+ * Menu rather than on base-ui's:
73
+ *
74
+ * Search a borderless field at the top; the app filters. Typing
75
+ * stays in the field (gui's typeahead would otherwise take
76
+ * the keys), ArrowDown enters the list, ArrowUp from the
77
+ * first row comes back, Enter runs the first row.
78
+ * Section a padded group with an optional band label, `scrollable`
79
+ * capping it at 176px.
80
+ * SelectionGroup + single or multiple choice: a radio group of
81
+ * OptionItem `menuitemradio`, or `menuitemcheckbox` rows that stay
82
+ * open; the indicator a trailing check, a leading box or
83
+ * none (the row tints).
84
+ * Page / Back / screens inside one popup: only the current page renders,
85
+ * Header / Title / an item with `page` opens one, Back returns, and the
86
+ * Close history resets when the menu closes.
87
+ * Empty / Loading status lines announced politely.
88
+ * Item `actions` trailing controls beside a row, shown under the pointer
89
+ * or focus (always on touch).
90
+ *
91
+ * Typeahead is gui's own, and its buffer is gui's 1000ms where twenty-ui used
92
+ * 500ms: behaviour comes from the primitive, so the difference is recorded, not
93
+ * reimplemented.
58
94
  */
59
95
  const React = __importStar(require("react"));
60
96
  const gui_1 = require("@hanzo/gui");
61
97
  const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
62
98
  const gesture_1 = require("./gesture.cjs");
99
+ const ink_1 = require("./ink.cjs");
100
+ const density_1 = require("./density.cjs");
101
+ const MenuRow_1 = require("../../product/MenuRow.cjs");
63
102
  const portal_theme_1 = require("../../product/menu/portal-theme.cjs");
64
103
  // ── Geometry — literal px on the 8-grid; a 32px row expands to a 44px tap ──────
65
104
  const ROW_H = 32;
@@ -70,52 +109,86 @@ const MIN_W = 200;
70
109
  const INSET_PL = 32;
71
110
  const INDICATOR_SLOT = 14;
72
111
  const ICON = 16;
112
+ /** The panel's own inset; a band, a separator and a header bleed back over it. */
113
+ const PAD = 4;
114
+ /** A scrollable section's ceiling: five and a half rows, so the cut shows there is more. */
115
+ const SCROLL_H = 176;
116
+ /** The search row and the header row, as twenty-ui draws them. */
117
+ const SEARCH_H = 36;
118
+ const HEADER_H = 33;
119
+ const BAND_H = 20;
73
120
  const panel = {
74
121
  bg: "$panel",
75
122
  borderColor: "$borderColor",
76
123
  borderWidth: 1,
77
124
  rounded: "$4",
78
- p: 4,
125
+ p: PAD,
79
126
  minW: MIN_W,
80
127
  overflow: "hidden",
81
128
  shadowColor: "rgba(0,0,0,0.45)",
82
129
  shadowRadius: 20,
83
130
  shadowOffset: { width: 0, height: 10 },
84
131
  };
132
+ /**
133
+ * A row. The corner is 4 — the panel's 8 less its 4px inset — so a highlighted
134
+ * row is concentric with the panel it sits in instead of rounder than it; and
135
+ * the highlight is the hover rung, with the press one rung darker.
136
+ */
85
137
  const row = {
86
138
  items: "center",
87
139
  gap: ROW_PX,
88
140
  px: ROW_PX,
89
141
  minH: ROW_H,
90
- rounded: "$3",
142
+ rounded: "$xs",
91
143
  select: "none",
92
144
  cursor: "pointer",
93
145
  ...(0, gesture_1.touch)(ROW_H, TAP_MIN, "y"),
94
- hoverStyle: { bg: "$raised" },
95
- focusStyle: { bg: "$raised" },
96
- pressStyle: { bg: "$rim" },
146
+ hoverStyle: { bg: "$hover" },
147
+ focusStyle: { bg: "$hover" },
148
+ pressStyle: { bg: "$raised" },
97
149
  };
98
150
  /** Left indicator well shared by checkbox + radio rows. */
99
151
  const Indicator = ({ children }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { position: "absolute", l: ROW_PX, width: INDICATOR_SLOT, height: INDICATOR_SLOT, items: "center", justify: "center", pointerEvents: "none", children: (0, jsx_runtime_1.jsx)(gui_1.Menu.ItemIndicator, { children: children }) }));
100
- // ── Root — owns popper geometry ─────────────────────────────────────────────────
152
+ // ── Root — owns popper geometry and the page history ───────────────────────────
101
153
  // gui puts `offset` on the Popper ROOT; the compound API puts `sideOffset` on
102
154
  // Content. One value, one owner: the root holds it, Content publishes into it.
103
155
  const OffsetContext = /* @__PURE__ */ React.createContext(null);
104
156
  const AlignContext = /* @__PURE__ */ React.createContext(null);
105
- const DEFAULT_OFFSET = 4;
106
- function DropdownMenu({ offset = DEFAULT_OFFSET, trigger, items, minWidth = MIN_W, maxHeight, children, ...props }) {
107
- const [current, setOffset] = React.useState(offset);
157
+ const PagesContext = /* @__PURE__ */ React.createContext(null);
158
+ /**
159
+ * The trigger's offset: 4 on a regular surface, 8 on a compact one — a record
160
+ * menu hangs a little clear of the 32px control it opens from (twenty-front's
161
+ * menus sit 8 below their trigger).
162
+ */
163
+ const offsetFor = (density) => (density === "compact" ? 8 : 4);
164
+ function DropdownMenu({ offset, trigger, items, minWidth = MIN_W, maxHeight, defaultPage, onOpenChange, children, ...props }) {
165
+ const density = (0, density_1.useDensity)();
166
+ const initial = offset ?? offsetFor(density);
167
+ const [current, setOffset] = React.useState(initial);
108
168
  const [placement, setPlacement] = React.useState(undefined);
109
- React.useEffect(() => setOffset(offset), [offset]);
110
- return ((0, jsx_runtime_1.jsx)(OffsetContext.Provider, { value: setOffset, children: (0, jsx_runtime_1.jsx)(AlignContext.Provider, { value: setPlacement, children: (0, jsx_runtime_1.jsxs)(gui_1.Menu, { offset: current, ...(placement ? { placement } : null), ...props, children: [trigger ? ((0, jsx_runtime_1.jsx)(DropdownMenuTrigger, { asChild: true, children: trigger })) : null, items ? ((0, jsx_runtime_1.jsx)(DropdownMenuContent, { minW: minWidth, maxH: maxHeight, children: items.map(renderSpec) })) : null, children] }) }) }));
169
+ React.useEffect(() => setOffset(initial), [initial]);
170
+ const [stack, setStack] = React.useState(defaultPage ? [defaultPage] : []);
171
+ const pages = React.useMemo(() => ({
172
+ page: stack[stack.length - 1] ?? null,
173
+ depth: stack.length,
174
+ go: (id) => setStack((s) => [...s, id]),
175
+ back: () => setStack((s) => (s.length > 1 ? s.slice(0, -1) : s)),
176
+ }), [stack]);
177
+ const changed = React.useCallback((open) => {
178
+ // A menu opens where it was meant to: the history is for one visit.
179
+ if (!open)
180
+ setStack(defaultPage ? [defaultPage] : []);
181
+ onOpenChange?.(open);
182
+ }, [defaultPage, onOpenChange]);
183
+ return ((0, jsx_runtime_1.jsx)(OffsetContext.Provider, { value: setOffset, children: (0, jsx_runtime_1.jsx)(AlignContext.Provider, { value: setPlacement, children: (0, jsx_runtime_1.jsx)(PagesContext.Provider, { value: defaultPage ? pages : null, children: (0, jsx_runtime_1.jsxs)(gui_1.Menu, { offset: current, ...(placement ? { placement } : null), onOpenChange: changed, ...props, children: [trigger ? ((0, jsx_runtime_1.jsx)(DropdownMenuTrigger, { asChild: true, children: trigger })) : null, items ? ((0, jsx_runtime_1.jsx)(DropdownMenuContent, { minW: minWidth, maxH: maxHeight, children: items.map(renderSpec) })) : null, children] }) }) }) }));
111
184
  }
112
- /** One spec row -> the matching compound part. Never a second row renderer. */
185
+ /** One spec row -> the matching compound part, drawn by the one row anatomy. */
113
186
  const renderSpec = (spec, i) => {
114
187
  if (spec.type === "separator")
115
188
  return (0, jsx_runtime_1.jsx)(DropdownMenuSeparator, {}, spec.key ?? `sep-${i}`);
116
189
  if (spec.type === "label")
117
190
  return ((0, jsx_runtime_1.jsx)(DropdownMenuLabel, { children: spec.label }, spec.key ?? `label-${i}`));
118
- return ((0, jsx_runtime_1.jsxs)(DropdownMenuItem, { disabled: spec.disabled, variant: spec.destructive ? "destructive" : "default", onSelect: spec.onSelect, children: [spec.icon ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { width: ICON, height: ICON, items: "center", justify: "center", shrink: 0, children: spec.icon })) : null, (0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, minW: 0, children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$ink", numberOfLines: 1, children: spec.label }), spec.description ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$quiet", numberOfLines: 1, children: spec.description })) : null] }), spec.shortcut ? ((0, jsx_runtime_1.jsx)(DropdownMenuShortcut, { children: spec.shortcut })) : null, spec.selected ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: ICON - 2, ml: "auto" }) : null, spec.hasSubmenu ? ((0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronRight, { size: ICON - 2, ml: "auto", opacity: 0.6 })) : null] }, spec.key));
191
+ return ((0, jsx_runtime_1.jsx)(DropdownMenuItem, { disabled: spec.disabled, variant: spec.destructive ? "destructive" : "default", onSelect: spec.onSelect, ...(spec.closeOnSelect === false ? { preventCloseOnSelect: true } : null), children: (0, jsx_runtime_1.jsx)(MenuRow_1.MenuRowContent, { label: spec.label, sub: spec.description, icon: spec.icon ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { width: ICON, height: ICON, items: "center", justify: "center", shrink: 0, children: spec.icon })) : undefined, shortcut: spec.shortcut ? (0, jsx_runtime_1.jsx)(DropdownMenuShortcut, { children: spec.shortcut }) : undefined, check: !!spec.selected, submenu: !!spec.hasSubmenu }) }, spec.key));
119
192
  };
120
193
  // ── Passthroughs — the gui part already IS the part ─────────────────────────────
121
194
  const DropdownMenuTrigger = gui_1.Menu.Trigger;
@@ -135,21 +208,123 @@ const placementFor = (side, align) => {
135
208
  const base = (side?.split('-')[0] ?? 'bottom');
136
209
  return (align === 'center' ? base : `${base}-${align}`);
137
210
  };
138
- const DropdownMenuContent = /* @__PURE__ */ React.forwardRef(function DropdownMenuContent({ sideOffset = DEFAULT_OFFSET, align, children, ...props }, ref) {
211
+ /** The rows a person can reach in one panel, in order: its own, never a submenu's. */
212
+ const reachable = (panelEl) => [...panelEl.querySelectorAll('[role="menuitem"], [role="menuitemradio"], [role="menuitemcheckbox"]')].filter((el) => el.closest('[data-hanzogui-menu-content]') === panelEl && el.getAttribute('aria-disabled') !== 'true' && !el.hasAttribute('data-disabled'));
213
+ /** The search field of a panel, when it has one. */
214
+ const searchOf = (panelEl) => panelEl.querySelector('[data-slot="dropdown-menu-search"] input');
215
+ const DropdownMenuContent = /* @__PURE__ */ React.forwardRef(function DropdownMenuContent({ sideOffset, align, children, onKeyDown, ...props }, ref) {
139
216
  const themeName = (0, portal_theme_1.useThemeName)();
217
+ const density = (0, density_1.useDensity)();
218
+ const pages = React.useContext(PagesContext);
140
219
  const setOffset = React.useContext(OffsetContext);
141
220
  const setPlacement = React.useContext(AlignContext);
142
- React.useEffect(() => setOffset?.(sideOffset), [setOffset, sideOffset]);
221
+ const offset = sideOffset ?? offsetFor(density);
222
+ React.useEffect(() => setOffset?.(offset), [setOffset, offset]);
143
223
  React.useEffect(() => setPlacement?.(placementFor(undefined, align)), [setPlacement, align]);
144
- return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Portal, { children: (0, jsx_runtime_1.jsx)(portal_theme_1.PortalTheme, { name: themeName, children: (0, jsx_runtime_1.jsx)(gui_1.Menu.Content, { ref: ref, "data-slot": "dropdown-menu-content", ...panel, ...props, children: children }) }) }));
224
+ // ArrowUp on the first row hands focus back to the search field above it —
225
+ // gui's roving focus stops at the first row and knows nothing of the field.
226
+ const keys = (e) => {
227
+ ;
228
+ onKeyDown?.(e);
229
+ if (!gui_1.isWeb || e.key !== 'ArrowUp')
230
+ return;
231
+ const panelEl = e.target?.closest?.('[data-hanzogui-menu-content]');
232
+ if (!panelEl)
233
+ return;
234
+ const rows = reachable(panelEl);
235
+ const field = searchOf(panelEl);
236
+ if (field && rows[0] && rows[0] === document.activeElement) {
237
+ e.preventDefault();
238
+ field.focus();
239
+ }
240
+ };
241
+ const body = framed(children);
242
+ return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Portal, { children: (0, jsx_runtime_1.jsx)(portal_theme_1.PortalTheme, { name: themeName, children: (0, jsx_runtime_1.jsx)(density_1.Density, { value: density, children: (0, jsx_runtime_1.jsx)(PagesContext.Provider, { value: pages, children: (0, jsx_runtime_1.jsx)(gui_1.Menu.Content, { ref: ref, "data-slot": "dropdown-menu-content", ...panel, ...(body.framed ? { role: 'dialog', 'aria-orientation': undefined, 'data-framed': '' } : null), ...(gui_1.isWeb ? { onKeyDown: keys } : null), ...props, children: (0, jsx_runtime_1.jsx)(Paged, { page: pages?.page ?? null, children: body.children }) }) }) }) }) }));
145
243
  });
146
244
  exports.DropdownMenuContent = DropdownMenuContent;
245
+ /** The parts a `menu` may not own: a field and the live status lines. */
246
+ const isFree = (c) => React.isValidElement(c) && (c.type === DropdownMenuSearch || c.type === DropdownMenuEmpty || c.type === DropdownMenuLoading);
247
+ /**
248
+ * A panel holding a search field or a status line is not a bare menu.
249
+ *
250
+ * A `menu` owns items, groups and separators and nothing else, and axe holds
251
+ * the whole subtree to that (`aria-required-children`): a field or a live
252
+ * region inside it fails. So such a panel becomes what it is — a popup with a
253
+ * field, one or more menus of rows, and its status lines — the frame a `dialog`
254
+ * still labelled by its trigger, each run of rows its own `role="menu"`. A panel
255
+ * of rows alone keeps gui's structure untouched. Read off the direct children,
256
+ * the place a Search, an Empty and a Loading belong.
257
+ */
258
+ function framed(children) {
259
+ const parts = React.Children.toArray(children);
260
+ if (!parts.some(isFree))
261
+ return { framed: false, children };
262
+ const out = [];
263
+ let run = [];
264
+ const close = () => {
265
+ if (!run.length)
266
+ return;
267
+ out.push((0, jsx_runtime_1.jsx)(gui_1.YStack, { role: "menu", "aria-orientation": "vertical", "data-slot": "dropdown-menu-list", children: run }, `menu-${out.length}`));
268
+ run = [];
269
+ };
270
+ for (const part of parts) {
271
+ if (isFree(part)) {
272
+ close();
273
+ out.push(part);
274
+ }
275
+ else
276
+ run.push(part);
277
+ }
278
+ close();
279
+ return { framed: true, children: out };
280
+ }
281
+ /**
282
+ * Moving between pages takes the focus with it: the row that was pressed is
283
+ * gone, and focus left on a removed node falls to the document. The new page's
284
+ * first row (or its search) takes it.
285
+ */
286
+ function Paged({ page, children }) {
287
+ const anchor = React.useRef(null);
288
+ const first = React.useRef(true);
289
+ React.useEffect(() => {
290
+ if (first.current) {
291
+ first.current = false;
292
+ return;
293
+ }
294
+ if (!gui_1.isWeb)
295
+ return;
296
+ const panelEl = anchor.current?.closest?.('[data-hanzogui-menu-content]');
297
+ if (!panelEl)
298
+ return;
299
+ const frame = requestAnimationFrame(() => (searchOf(panelEl) ?? reachable(panelEl)[0])?.focus());
300
+ return () => cancelAnimationFrame(frame);
301
+ }, [page]);
302
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [gui_1.isWeb ? (0, jsx_runtime_1.jsx)("span", { ref: anchor, hidden: true, "data-slot": "dropdown-menu-anchor" }) : null, children] }));
303
+ }
147
304
  const DropdownMenuSubContent = /* @__PURE__ */ React.forwardRef(function DropdownMenuSubContent(props, ref) {
148
- return ((0, jsx_runtime_1.jsx)(gui_1.Menu.SubContent, { ref: ref, "data-slot": "dropdown-menu-sub-content", ...panel, ...props }));
305
+ const density = (0, density_1.useDensity)();
306
+ return ((0, jsx_runtime_1.jsx)(density_1.Density, { value: density, children: (0, jsx_runtime_1.jsx)(gui_1.Menu.SubContent, { ref: ref, "data-slot": "dropdown-menu-sub-content", ...panel, ...props }) }));
149
307
  });
150
308
  exports.DropdownMenuSubContent = DropdownMenuSubContent;
151
- const DropdownMenuItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuItem({ inset, variant = "default", disabled, ...props }, ref) {
152
- return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Item, { ref: ref, "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, disabled: disabled, ...row, pl: inset ? INSET_PL : ROW_PX, theme: variant === "destructive" ? "red" : undefined, opacity: disabled ? 0.5 : 1, cursor: disabled ? "default" : "pointer", ...props }));
309
+ const DropdownMenuItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuItem({ inset, variant = "default", disabled, page, actions, actionsVisibility = "hover", onSelect, children, ...props }, ref) {
310
+ const pages = React.useContext(PagesContext);
311
+ const [shown, setShown] = React.useState(false);
312
+ const opens = page !== undefined && pages !== null;
313
+ const item = ((0, jsx_runtime_1.jsx)(gui_1.Menu.Item, { ref: ref, "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, disabled: disabled, ...row, pl: inset ? INSET_PL : ROW_PX, theme: variant === "destructive" ? "red" : undefined, opacity: disabled ? 0.5 : 1, cursor: disabled ? "default" : "pointer", ...(actions ? { flex: 1, onFocus: () => setShown(true), onBlur: () => setShown(false) } : null), onSelect: (e) => {
314
+ if (page !== undefined && pages) {
315
+ e.preventDefault?.();
316
+ pages.go(page);
317
+ }
318
+ onSelect?.(e);
319
+ }, ...props, children: opens ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, ink_1.ink)(children, gui_1.Text, { fontSize: '$2' }), (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronRight, { size: ICON - 2, ml: "auto", color: "$hush" })] })) : ((0, ink_1.ink)(children, gui_1.Text, { fontSize: '$2' })) }));
320
+ if (!actions)
321
+ return item;
322
+ const visible = actionsVisibility === "always" || shown;
323
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { "data-slot": "dropdown-menu-item-row", items: "center", gap: ROW_PX, onHoverIn: () => setShown(true), onHoverOut: () => setShown(false), children: [item, (0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dropdown-menu-item-actions",
324
+ // A menu owns groups, not buttons: the controls beside a row are a group.
325
+ role: "group", shrink: 0, items: "center", gap: 2, opacity: visible ? 1 : 0, $touchable: { opacity: 1 }, animation: "75ms", children: React.Children.map(actions, (a) => React.isValidElement(a) && a.props.role == null
326
+ ? React.cloneElement(a, { role: "menuitem" })
327
+ : a) })] }));
153
328
  });
154
329
  exports.DropdownMenuItem = DropdownMenuItem;
155
330
  const DropdownMenuCheckboxItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuCheckboxItem({ children, checked, ...props }, ref) {
@@ -164,13 +339,168 @@ const DropdownMenuSubTrigger = /* @__PURE__ */ React.forwardRef(function Dropdow
164
339
  return ((0, jsx_runtime_1.jsxs)(gui_1.Menu.SubTrigger, { ref: ref, "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, ...row, pl: inset ? INSET_PL : ROW_PX, ...props, children: [children, (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronRight, { size: ICON, ml: "auto", opacity: 0.6 })] }));
165
340
  });
166
341
  exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
167
- // ── Static rows ─────────────────────────────────────────────────────────────────
168
- const DropdownMenuLabel = /* @__PURE__ */ React.forwardRef(function DropdownMenuLabel({ inset, ...props }, ref) {
342
+ const SelectionContext = /* @__PURE__ */ React.createContext(null);
343
+ const asList = (v) => (v == null ? [] : Array.isArray(v) ? v : [v]);
344
+ function DropdownMenuSelectionGroup({ value, defaultValue = null, onValueChange, multiple = false, closeOnSelect, children, }) {
345
+ const [own, setOwn] = React.useState(() => asList(defaultValue));
346
+ const chosen = value !== undefined ? asList(value) : own;
347
+ const set = (next) => {
348
+ if (value === undefined)
349
+ setOwn(next);
350
+ onValueChange?.(multiple ? next : (next[0] ?? null));
351
+ };
352
+ const ctx = {
353
+ multiple,
354
+ closeOnSelect: closeOnSelect ?? !multiple,
355
+ has: (v) => chosen.includes(v),
356
+ toggle: (v) => set(multiple ? (chosen.includes(v) ? chosen.filter((c) => c !== v) : [...chosen, v]) : [v]),
357
+ };
358
+ return ((0, jsx_runtime_1.jsx)(SelectionContext.Provider, { value: ctx, children: multiple ? ((0, jsx_runtime_1.jsx)(gui_1.Menu.Group, { "data-slot": "dropdown-menu-selection-group", children: children })) : ((0, jsx_runtime_1.jsx)(gui_1.Menu.RadioGroup, { "data-slot": "dropdown-menu-selection-group", value: chosen[0] ?? '', onValueChange: (v) => set(v ? [v] : []), children: children })) }));
359
+ }
360
+ /** The leading box of a multiple choice: a picture of a checkbox, not a control inside the row. */
361
+ const Box = ({ on }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { width: INDICATOR_SLOT, height: INDICATOR_SLOT, shrink: 0, rounded: "$xs", borderWidth: 1, borderColor: on ? "var(--primary)" : "$bound", bg: on ? "var(--primary)" : "transparent", items: "center", justify: "center", children: on ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 12, strokeWidth: 3, color: "var(--primary-foreground)" }) : null }));
362
+ const DropdownMenuOptionItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuOptionItem({ value, indicator, closeOnSelect, onSelect, children, disabled, ...props }, ref) {
363
+ const group = React.useContext(SelectionContext);
364
+ const multiple = group?.multiple ?? false;
365
+ const on = group?.has(value) ?? false;
366
+ const mark = indicator ?? (multiple ? "checkbox" : "check");
367
+ const closes = closeOnSelect ?? group?.closeOnSelect ?? !multiple;
368
+ const body = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [mark === "checkbox" ? (0, jsx_runtime_1.jsx)(Box, { on: on }) : null, typeof children === "string" ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$aside", numberOfLines: 1, flex: 1, minW: 0, children: children })) : (children), mark === "check" && on ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: ICON, strokeWidth: 2, ml: "auto" }) : null] }));
369
+ const shared = {
370
+ ref,
371
+ "data-slot": "dropdown-menu-option-item",
372
+ "data-indicator": mark,
373
+ disabled,
374
+ ...row,
375
+ ...(mark === "none" && on ? { bg: "$hover" } : null),
376
+ opacity: disabled ? 0.5 : 1,
377
+ preventCloseOnSelect: !closes,
378
+ onSelect,
379
+ ...props,
380
+ };
381
+ if (multiple)
382
+ return ((0, jsx_runtime_1.jsx)(gui_1.Menu.CheckboxItem, { ...shared, checked: on, onCheckedChange: () => group?.toggle(value), children: body }));
383
+ return ((0, jsx_runtime_1.jsx)(gui_1.Menu.RadioItem, { ...shared, value: value, children: body }));
384
+ });
385
+ exports.DropdownMenuOptionItem = DropdownMenuOptionItem;
386
+ /**
387
+ * The search row. The keys a field needs stay in it — gui's typeahead listens on
388
+ * the whole panel and would move focus to a matching row on the first letter —
389
+ * and the three that belong to the list leave it: ArrowDown enters the list,
390
+ * Enter runs the first row (respecting an open IME composition), Escape closes.
391
+ */
392
+ function DropdownMenuSearch({ value, defaultValue, onValueChange, placeholder = "Search", autoFocus = true, "aria-label": label, }) {
393
+ const field = React.useRef(null);
394
+ React.useEffect(() => {
395
+ if (!autoFocus || !gui_1.isWeb)
396
+ return;
397
+ // After gui's own open focus, which lands on the panel a frame after mount.
398
+ const frame = requestAnimationFrame(() => {
399
+ const t = setTimeout(() => field.current?.focus(), 0);
400
+ cleanup = () => clearTimeout(t);
401
+ });
402
+ let cleanup = () => { };
403
+ return () => {
404
+ cancelAnimationFrame(frame);
405
+ cleanup();
406
+ };
407
+ }, [autoFocus]);
408
+ const keys = (e) => {
409
+ if (e.key === "Escape" || e.key === "Tab")
410
+ return;
411
+ const panelEl = e.currentTarget.closest("[data-hanzogui-menu-content]");
412
+ if (e.key === "ArrowDown") {
413
+ e.preventDefault();
414
+ e.stopPropagation();
415
+ if (panelEl)
416
+ reachable(panelEl)[0]?.focus();
417
+ return;
418
+ }
419
+ if (e.key === "Enter") {
420
+ e.stopPropagation();
421
+ if (e.nativeEvent.isComposing)
422
+ return;
423
+ e.preventDefault();
424
+ if (panelEl)
425
+ reachable(panelEl)[0]?.click();
426
+ return;
427
+ }
428
+ // Everything else is typing: the field's, not the menu's.
429
+ e.stopPropagation();
430
+ };
431
+ // A direct child of the content, so `framed` seats it beside the rows' menu.
432
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dropdown-menu-search", minH: SEARCH_H, items: "center", px: ROW_PX, mx: -PAD, mt: -PAD, mb: PAD, borderBottomWidth: 1, borderColor: "$borderColor", children: (0, jsx_runtime_1.jsx)(gui_1.Input, { ref: field, unstyled: true, flex: 1, minW: 0, height: 20, p: 0, borderWidth: 0, bg: "transparent", color: "$ink", placeholderTextColor: "$placeholderColor", fontSize: "$1", "aria-label": label ?? placeholder, placeholder: placeholder, ...(value !== undefined ? { value } : { defaultValue }), onChangeText: (t) => onValueChange?.(t), ...(gui_1.isWeb ? { onKeyDown: keys } : null), style: { outlineStyle: "none" } }) }));
433
+ }
434
+ function DropdownMenuSection({ label, scrollable = false, children, ...props }) {
435
+ return ((0, jsx_runtime_1.jsxs)(gui_1.Menu.Group, { "data-slot": "dropdown-menu-section", ...(typeof label === "string" ? { "aria-label": label } : null), children: [label ? (0, jsx_runtime_1.jsx)(DropdownMenuLabel, { variant: "band", children: label }) : null, (0, jsx_runtime_1.jsx)(gui_1.YStack, { gap: 2, ...(scrollable
436
+ ? { maxH: SCROLL_H, style: { overflowY: "auto", overscrollBehavior: "contain" } }
437
+ : null), ...props, children: children })] }));
438
+ }
439
+ // ── Pages ───────────────────────────────────────────────────────────────────────
440
+ /** One screen of a paged menu. Only the current page renders. */
441
+ function DropdownMenuPage({ id, children }) {
442
+ const pages = React.useContext(PagesContext);
443
+ if (!pages || pages.page !== id)
444
+ return null;
445
+ return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { "data-slot": "dropdown-menu-page", "data-page": id, children: children }));
446
+ }
447
+ const header = {
448
+ minH: HEADER_H,
449
+ items: "center",
450
+ gap: ROW_PX,
451
+ px: ROW_PX,
452
+ mx: -PAD,
453
+ mt: -PAD,
454
+ mb: PAD,
455
+ borderBottomWidth: 1,
456
+ borderColor: "$borderColor",
457
+ };
458
+ /** A static title bar over the page. */
459
+ function DropdownMenuHeader({ children, ...props }) {
460
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dropdown-menu-header", ...header, ...props, children: children }));
461
+ }
462
+ function DropdownMenuTitle({ children, ...props }) {
463
+ return ((0, jsx_runtime_1.jsx)(gui_1.Text, { "data-slot": "dropdown-menu-title", fontSize: "$2", fontWeight: "500", color: "$ink", numberOfLines: 1, flex: 1, ...props, children: children }));
464
+ }
465
+ /** The icon-only close in a header. It is a menu item, so choosing it closes as any row does. */
466
+ const DropdownMenuClose = /* @__PURE__ */ React.forwardRef(function DropdownMenuClose(props, ref) {
467
+ return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Item, { ref: ref, "data-slot": "dropdown-menu-close", width: 24, height: 24, rounded: "$xs", items: "center", justify: "center", cursor: "pointer", ...(0, gesture_1.touch)(24), hoverStyle: { bg: "$hover" }, focusStyle: { bg: "$hover" }, ...props, children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.X, { size: ICON, color: "$aside" }) }));
468
+ });
469
+ exports.DropdownMenuClose = DropdownMenuClose;
470
+ /** The header row that returns to the page before. */
471
+ const DropdownMenuBack = /* @__PURE__ */ React.forwardRef(function DropdownMenuBack({ children, onSelect, ...props }, ref) {
472
+ const pages = React.useContext(PagesContext);
473
+ return ((0, jsx_runtime_1.jsxs)(gui_1.Menu.Item, { ref: ref, "data-slot": "dropdown-menu-back", ...header, rounded: 0, cursor: "pointer", hoverStyle: { bg: "$hover" }, focusStyle: { bg: "$hover" }, preventCloseOnSelect: true, onSelect: (e) => {
474
+ pages?.back();
475
+ onSelect?.(e);
476
+ }, ...props, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronLeft, { size: ICON, color: "$aside" }), typeof children === "string" ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: "500", color: "$ink", numberOfLines: 1, flex: 1, children: children })) : (children)] }));
477
+ });
478
+ exports.DropdownMenuBack = DropdownMenuBack;
479
+ // ── Status lines ────────────────────────────────────────────────────────────────
480
+ /**
481
+ * A live line. Placed as a direct child of the content, it sits beside the rows'
482
+ * menu rather than inside it (see `framed`), where a live region may be.
483
+ */
484
+ function Status({ slot, children }) {
485
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": slot, role: "status", "aria-live": "polite", items: "center", gap: ROW_PX, p: ROW_PX, children: children }));
486
+ }
487
+ /** No row matched, said once and politely. */
488
+ function DropdownMenuEmpty({ children = "No results" }) {
489
+ return ((0, jsx_runtime_1.jsx)(Status, { slot: "dropdown-menu-empty", children: (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$aside", children: children }) }));
490
+ }
491
+ /** Rows are on their way. */
492
+ function DropdownMenuLoading({ children = "Loading" }) {
493
+ return ((0, jsx_runtime_1.jsxs)(Status, { slot: "dropdown-menu-loading", children: [(0, jsx_runtime_1.jsx)(gui_1.XStack, { "aria-hidden": true, children: (0, jsx_runtime_1.jsx)(gui_1.Spinner, { size: "small", maxW: 14, maxH: 14 }) }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$quiet", children: children })] }));
494
+ }
495
+ const DropdownMenuLabel = /* @__PURE__ */ React.forwardRef(function DropdownMenuLabel({ inset, variant = "default", ...props }, ref) {
496
+ if (variant === "band")
497
+ return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Label, { ref: ref, "data-slot": "dropdown-menu-label", "data-variant": "band", height: BAND_H, lineHeight: BAND_H, mx: -PAD, px: ROW_PX, py: 0, bg: "$hover", fontSize: "$1", fontWeight: "400", color: "$hint", select: "none", ...props }));
169
498
  return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Label, { ref: ref, "data-slot": "dropdown-menu-label", "data-inset": inset, px: ROW_PX, py: 4, pl: inset ? INSET_PL : ROW_PX, fontSize: "$2", fontWeight: "500", color: "$ink", select: "none", ...props }));
170
499
  });
171
500
  exports.DropdownMenuLabel = DropdownMenuLabel;
501
+ /** A hairline between sections, bled to the panel's edges as twenty-ui draws it. */
172
502
  const DropdownMenuSeparator = /* @__PURE__ */ React.forwardRef(function DropdownMenuSeparator(props, ref) {
173
- return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Separator, { ref: ref, "data-slot": "dropdown-menu-separator", height: 1, bg: "$borderColor", mx: 4, my: 4, ...props }));
503
+ return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Separator, { ref: ref, "data-slot": "dropdown-menu-separator", height: 1, bg: "$borderColor", mx: -PAD, my: PAD, ...props }));
174
504
  });
175
505
  exports.DropdownMenuSeparator = DropdownMenuSeparator;
176
506
  /** Right-aligned shortcut hint. gui `Text`, not a raw `<span>`, so it renders on native. */