@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
@@ -11,16 +11,22 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  *
12
12
  * `Picker` is the other select: the platform's own, for a list the platform
13
13
  * should show — every country, on a phone.
14
+ *
15
+ * Rows are concentric in the panel: a 4px inset inside an 8px panel takes a 4px
16
+ * row radius (`$xs`). Under `<Density value="compact">` the list takes the
17
+ * record density twenty-ui's Select draws (MIT, NOTICE): 13px rows in the quiet
18
+ * ink on the hover rung, and the density crosses the portal with the list.
14
19
  */
15
20
  import { Children, cloneElement, createContext, forwardRef, isValidElement, useContext, } from "react";
16
21
  import { Select as GuiSelect, SelectSeparator as GuiSelectSeparator, Text, XStack, } from "@hanzo/gui";
17
22
  import { Check, ChevronDown, ChevronUp } from "@hanzogui/lucide-icons-2";
18
- import { BOX, CONTROL_H, EDGE, FIELD, FILL } from "./control.js";
23
+ import { BOX, EDGE, FIELD, FILL } from "./control.js";
24
+ import { Density, fieldSize, useDensity } from "./density.js";
25
+ import { invalidOf, useField } from "./field.js";
19
26
  import { touch } from "./gesture.js";
20
27
  import { ink } from "./ink.js";
21
28
  import { slot } from "./slot.js";
22
29
  const ROW_H = 32;
23
- const TRIGGER_H = CONTROL_H;
24
30
  /**
25
31
  * Disabling the control is one fact with two spellings: gui puts `disabled` on
26
32
  * the Trigger, the compound API puts it on the root. The root declares it and
@@ -29,15 +35,25 @@ const TRIGGER_H = CONTROL_H;
29
35
  const Disabled = /* @__PURE__ */ createContext(false);
30
36
  const Select = /* @__PURE__ */ Object.assign(({ disabled = false, ...props }) => (_jsx(Disabled.Provider, { value: disabled, children: _jsx(GuiSelect, { ...props }) })), GuiSelect);
31
37
  const SelectGroup = GuiSelect.Group;
32
- const SelectValue = GuiSelect.Value;
33
- const SelectTrigger = ({ children, disabled, ...props }) => {
38
+ /**
39
+ * The trigger's rung, handed to the value it shows. `ink()` sizes a string
40
+ * child; `SelectValue` is an element and drew gui's own 14px whatever the box,
41
+ * so a 32px compact trigger showed its value a rung larger than the Input
42
+ * beside it. The trigger provides its box's rung and the value reads it.
43
+ */
44
+ const TriggerFont = /* @__PURE__ */ createContext("$3");
45
+ const SelectValue = (props) => (_jsx(GuiSelect.Value, { fontSize: useContext(TriggerFont), ...props }));
46
+ const SelectTrigger = ({ children, disabled, size, ...props }) => {
34
47
  const inherited = useContext(Disabled);
35
- return (_jsxs(GuiSelect.Trigger, { ...slot("select-trigger"), unstyled: true, disabled: disabled ?? inherited, ...FIELD, items: "center", justify: "space-between", gap: "$2",
48
+ const density = useDensity();
49
+ const box = BOX[fieldSize(size, density)];
50
+ const invalid = invalidOf(props["aria-invalid"], useField());
51
+ return (_jsxs(GuiSelect.Trigger, { ...slot("select-trigger"), unstyled: true, disabled: disabled ?? inherited, ...FIELD, ...(density === "compact" ? { bg: "$panel" } : null), ...(invalid ? { borderColor: "$red7", "aria-invalid": true } : null), px: box.gutter, items: "center", justify: "space-between", gap: "$2",
36
52
  // A FLOOR, not a pin. `height` alone clips a child taller than the box, and
37
53
  // the build stays green while it does — that is why 01ac46dce moved Button
38
54
  // off a pinned height. Select and Input kept theirs, so the same trap was
39
55
  // still armed in the two controls that sit in every form.
40
- height: "auto", minHeight: TRIGGER_H,
56
+ height: "auto", minHeight: box.h,
41
57
  // The trigger states its own vertical padding because otherwise something
42
58
  // else states it. `unstyled` does not survive gui's ListItem (it is
43
59
  // destructured into a local and never reaches the frame), so the frame
@@ -46,12 +62,17 @@ const SelectTrigger = ({ children, disabled, ...props }) => {
46
62
  // 14 + a 20px line + 14 + 2px of border rendered a 50px Select beside a 36px
47
63
  // Input. At 0 the floor decides again and `items="center"` does the
48
64
  // centring, which is exactly how the Input already behaves.
49
- py: 0, cursor: "pointer", ...touch(TRIGGER_H, 44, "y"), ...props, children: [ink(children, undefined, { size: "$3" }), _jsx(GuiSelect.Icon, { children: _jsx(ChevronDown, { size: 16, opacity: 0.5 }) })] }));
65
+ py: 0, cursor: "pointer", ...touch(box.h, 44, "y"), ...props, children: [_jsx(TriggerFont.Provider, { value: box.font, children: ink(children, undefined, { size: box.font }) }), _jsx(GuiSelect.Icon, { children: _jsx(ChevronDown, { size: 16, opacity: 0.5 }) })] }));
66
+ };
67
+ const SelectItem = ({ children, value, ...props }) => {
68
+ const compact = useDensity() === "compact";
69
+ return (_jsxs(GuiSelect.Item, { value: value, ...slot("select-item"), unstyled: true, index: props.index ?? 0, items: "center",
70
+ // Start-aligned. gui's ListItem centres its row on the main axis, which set
71
+ // every option's label in the middle of the list with the tick on the far edge.
72
+ justify: "flex-start", gap: "$2", minH: ROW_H, pl: compact ? "$1" : "$2", pr: "$7",
73
+ // Concentric: the panel is 8, its inset 4, so a row is 4.
74
+ rounded: "$xs", cursor: "pointer", ...touch(ROW_H, 44, "y"), hoverStyle: { bg: compact ? "$hover" : "$raised" }, focusStyle: { bg: compact ? "$hover" : "$raised" }, ...props, children: [_jsx(GuiSelect.ItemText, { ...(compact ? { fontSize: "$2", color: "$aside" } : null), children: children }), _jsx(XStack, { position: "absolute", r: "$2", items: "center", justify: "center", pointerEvents: "none", children: _jsx(GuiSelect.ItemIndicator, { children: _jsx(Check, { size: 16, strokeWidth: 2 }) }) })] }));
50
75
  };
51
- const SelectItem = ({ children, value, ...props }) => (_jsxs(GuiSelect.Item, { value: value, ...slot("select-item"), unstyled: true, index: props.index ?? 0, items: "center",
52
- // Start-aligned. gui's ListItem centres its row on the main axis, which set
53
- // every option's label in the middle of the list with the tick on the far edge.
54
- justify: "flex-start", gap: "$2", minH: ROW_H, pl: "$2", pr: "$7", rounded: "$2", cursor: "pointer", ...touch(ROW_H, 44, "y"), hoverStyle: { bg: "$raised" }, focusStyle: { bg: "$raised" }, ...props, children: [_jsx(GuiSelect.ItemText, { children: children }), _jsx(XStack, { position: "absolute", r: "$2", items: "center", justify: "center", pointerEvents: "none", children: _jsx(GuiSelect.ItemIndicator, { children: _jsx(Check, { size: 16 }) }) })] }));
55
76
  /** Depth-first stamp of `index` onto every `SelectItem` in render order. */
56
77
  const stampIndices = (children, next) => Children.map(children, (child) => {
57
78
  if (!isValidElement(child))
@@ -67,9 +88,13 @@ const SelectScrollUpButton = (props) => (_jsx(GuiSelect.ScrollUpButton, { ...slo
67
88
  const SelectScrollDownButton = (props) => (_jsx(GuiSelect.ScrollDownButton, { ...slot("select-scroll-down-button"), items: "center", justify: "center", py: "$1", ...props, children: _jsx(ChevronDown, { size: 16 }) }));
68
89
  const SelectContent = ({ children, ...props }) => {
69
90
  let n = 0;
70
- return (_jsxs(GuiSelect.Content, { ...slot("select-content"), ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(GuiSelect.Viewport, { minW: 128, p: "$1", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$4", children: stampIndices(children, () => n++) }), _jsx(SelectScrollDownButton, {})] }));
91
+ // Read on the trigger's side of the portal and re-provided inside it: a
92
+ // context does not cross gui's portal, a provider placed in the portalled
93
+ // children does.
94
+ const density = useDensity();
95
+ return (_jsx(GuiSelect.Content, { ...slot("select-content"), ...props, children: _jsxs(Density, { value: density, children: [_jsx(SelectScrollUpButton, {}), _jsx(GuiSelect.Viewport, { minW: 128, p: "$1", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", children: stampIndices(children, () => n++) }), _jsx(SelectScrollDownButton, {})] }) }));
71
96
  };
72
- const SelectLabel = (props) => (_jsx(GuiSelect.Label, { ...slot("select-label"), px: "$2", py: "$1.5", fontSize: "$1", color: "$quiet", ...props }));
97
+ const SelectLabel = (props) => (_jsx(GuiSelect.Label, { ...slot("select-label"), px: "$2", py: "$1.5", fontSize: "$1", fontWeight: "500", color: "$quiet", ...props }));
73
98
  const SelectSeparator = (props) => (_jsx(GuiSelectSeparator, { ...slot("select-separator"), my: "$1", borderColor: "$borderColor", ...props }));
74
99
  /** The select's own inset: Chromium pads a select's text 4px inside its box. */
75
100
  const INSET = 4;
@@ -83,12 +108,21 @@ const INSET = 4;
83
108
  * select's own 4px, and the Input theme's ink, edge and two edge states (`EDGE`)
84
109
  * — a native control gui does not draw, so it names what gui's Input carries.
85
110
  */
86
- const Picker = /* @__PURE__ */ forwardRef(function Picker({ id, name, value, defaultValue, onChange, required, disabled, autoComplete, children, size = "default", fill = false, ...props }, ref) {
87
- const box = BOX[size];
88
- return (_jsx(Text, { ref: ref, render: _jsx("select", { id: id, name: name, value: value, defaultValue: defaultValue, onChange: onChange, required: required, disabled: disabled, autoComplete: autoComplete }), ...slot("picker"), componentName: "Input", ...FIELD, ...EDGE, ...(fill ? FILL : null), display: "block",
111
+ const Picker = /* @__PURE__ */ forwardRef(function Picker({ id, name, value, defaultValue, onChange, required, disabled, autoComplete, children, size, fill = false, ...props }, ref) {
112
+ const density = useDensity();
113
+ const resolved = fieldSize(size, density);
114
+ const box = BOX[resolved];
115
+ const dense = resolved === "sm" || resolved === "xs";
116
+ return (_jsx(Text, { ref: ref, render: _jsx("select", { id: id, name: name, value: value, defaultValue: defaultValue, onChange: onChange, required: required, disabled: disabled, autoComplete: autoComplete }), ...slot("picker"), componentName: "Input", ...FIELD, ...EDGE, ...(density === "compact" ? { bg: "$panel" } : null), ...(fill ? FILL : null), display: "block",
89
117
  // A floor, as the trigger's: the riser and the line make the box, and a
90
118
  // larger font grows it rather than clipping the chosen option.
91
- minH: box.h, width: "100%", minW: 0, pl: box.gutter - INSET, pr: box.gutter - INSET, py: box.riser, color: "$color", fontFamily: "$body", fontSize: "$3", lineHeight: "$3", cursor: "pointer", ...props, children: children }));
119
+ minH: box.h, width: "100%", minW: 0, pl: box.gutter - INSET, pr: box.gutter - INSET,
120
+ // Chromium ignores line-height on a <select> and sets its text on
121
+ // `normal` (19px at 13px Zen), so the record sizes cannot be built from a
122
+ // riser and a line the way the regular one is: 7 + 19 + 7 + 2 came out 35
123
+ // in a 32px box. They take no vertical padding and let the floor decide;
124
+ // the menulist centres its own text.
125
+ py: dense ? 0 : box.riser, color: "$color", fontFamily: "$body", fontSize: box.font, lineHeight: dense ? 16 : "$3", cursor: "pointer", ...props, children: children }));
92
126
  });
93
127
  export { Picker, Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
94
128
  //# sourceMappingURL=select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/backends/gui/select.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/backends/gui/select.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.combinations = exports.keyName = void 0;
5
+ exports.formatShortcut = formatShortcut;
6
+ exports.speakShortcut = speakShortcut;
7
+ exports.Shortcut = Shortcut;
8
+ const jsx_runtime_1 = require("react/jsx-runtime");
9
+ /**
10
+ * Shortcut — a keyboard shortcut as keycaps, named for the platform it is read
11
+ * on, and spoken as one phrase.
12
+ *
13
+ * A shortcut is one combination (`['Mod', 'K']`) or a sequence of them
14
+ * (`[['G'], ['P']]`, "G then P"). Key names translate per platform: `Mod` and
15
+ * `CommandOrControl` are ⌘ on a Mac and Ctrl elsewhere, `Alt` is ⌥ on a Mac,
16
+ * Enter is ⏎, arrows and Escape take their glyphs. The whole thing is one image
17
+ * to assistive technology, labelled in words ("Command + K", "G then P"), and
18
+ * the caps inside it are hidden — a screen reader hears the shortcut once, not
19
+ * a list of symbols.
20
+ *
21
+ * The platform is read through `useSyncExternalStore` with a server answer of
22
+ * "other", so a server render and the first client render agree and a Mac
23
+ * swaps Ctrl for ⌘ right after hydration rather than mismatching it.
24
+ *
25
+ * Re-expressed from twenty-ui's Shortcut and formatShortcut (MIT, see NOTICE):
26
+ * keys, text and button variants, a `desktop` visibility that hides it under a
27
+ * coarse pointer, keys 4px apart in a combination.
28
+ */
29
+ const gui_1 = require("@hanzo/gui");
30
+ const react_1 = require("react");
31
+ const kbd_1 = require("./kbd.cjs");
32
+ const slot_1 = require("./slot.cjs");
33
+ /** Every key name the two platforms spell differently, by its lowercase alias. */
34
+ const KEYS = (platform) => {
35
+ const mac = platform === 'mac';
36
+ const mod = mac ? { glyph: '⌘', word: 'Command' } : { glyph: 'Ctrl', word: 'Control' };
37
+ return {
38
+ mod,
39
+ commandorcontrol: mod,
40
+ cmdorctrl: mod,
41
+ command: { glyph: '⌘', word: 'Command' },
42
+ cmd: { glyph: '⌘', word: 'Command' },
43
+ meta: { glyph: '⌘', word: 'Command' },
44
+ control: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
45
+ ctrl: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
46
+ alt: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
47
+ option: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
48
+ shift: { glyph: '⇧', word: 'Shift' },
49
+ enter: { glyph: '⏎', word: 'Enter' },
50
+ return: { glyph: '⏎', word: 'Enter' },
51
+ backspace: { glyph: '⌫', word: 'Backspace' },
52
+ delete: { glyph: '⌦', word: 'Delete' },
53
+ escape: { glyph: 'esc', word: 'Escape' },
54
+ esc: { glyph: 'esc', word: 'Escape' },
55
+ tab: { glyph: '⇥', word: 'Tab' },
56
+ space: { glyph: 'Space', word: 'Space' },
57
+ arrowup: { glyph: '↑', word: 'Up arrow' },
58
+ arrowdown: { glyph: '↓', word: 'Down arrow' },
59
+ arrowleft: { glyph: '←', word: 'Left arrow' },
60
+ arrowright: { glyph: '→', word: 'Right arrow' },
61
+ up: { glyph: '↑', word: 'Up arrow' },
62
+ down: { glyph: '↓', word: 'Down arrow' },
63
+ left: { glyph: '←', word: 'Left arrow' },
64
+ right: { glyph: '→', word: 'Right arrow' },
65
+ };
66
+ };
67
+ /** A key's glyph and word on `platform`; a plain key is itself, a letter uppercased. */
68
+ const keyName = (key, platform) => {
69
+ const known = KEYS(platform)[key.toLowerCase()];
70
+ if (known)
71
+ return known;
72
+ const label = key.length === 1 ? key.toUpperCase() : key;
73
+ return { glyph: label, word: label };
74
+ };
75
+ exports.keyName = keyName;
76
+ /** `keys` as a list of combinations, whichever shape it was given in. */
77
+ const combinations = (keys) => keys.length > 0 && Array.isArray(keys[0]) ? keys.map((c) => [...c]) : [[...keys]];
78
+ exports.combinations = combinations;
79
+ /** The shortcut as text, without rendering: "⌘K", "Ctrl K", "G then P". */
80
+ function formatShortcut(keys, options = {}) {
81
+ const platform = options.platform ?? detect();
82
+ const join = options.combinationSeparator ?? (platform === 'mac' ? '' : ' ');
83
+ return (0, exports.combinations)(keys)
84
+ .map((c) => c.map((k) => (0, exports.keyName)(k, platform).glyph).join(join))
85
+ .join(` ${options.sequenceJoinLabel ?? 'then'} `);
86
+ }
87
+ /** The shortcut in words, for assistive technology: "Command + K", "G then P". */
88
+ function speakShortcut(keys, platform, then = 'then') {
89
+ return (0, exports.combinations)(keys)
90
+ .map((c) => c.map((k) => (0, exports.keyName)(k, platform).word).join(' + '))
91
+ .join(` ${then} `);
92
+ }
93
+ /** macOS and iOS read as a Mac; anything else, or no navigator, does not. */
94
+ function detect() {
95
+ if (typeof navigator === 'undefined')
96
+ return 'other';
97
+ const nav = navigator;
98
+ const p = nav.userAgentData?.platform ?? nav.platform ?? nav.userAgent ?? '';
99
+ return /mac|iphone|ipad|ipod/i.test(p) ? 'mac' : 'other';
100
+ }
101
+ const never = () => () => { };
102
+ function Shortcut({ keys, platform, variant = 'keys', visibility = 'always', sequenceJoinLabel = 'then', combinationSeparator, ...props }) {
103
+ const detected = (0, react_1.useSyncExternalStore)(never, detect, () => 'other');
104
+ const on = platform ?? detected;
105
+ const label = speakShortcut(keys, on, sequenceJoinLabel);
106
+ const hidden = visibility === 'desktop' ? { $touchable: { display: 'none' } } : null;
107
+ const frame = {
108
+ ...(0, slot_1.slot)('shortcut'),
109
+ 'data-variant': variant,
110
+ role: 'img',
111
+ 'aria-label': label,
112
+ display: 'inline-flex',
113
+ items: 'center',
114
+ ...hidden,
115
+ };
116
+ if (variant === 'text' || variant === 'button') {
117
+ const text = formatShortcut(keys, { platform: on, sequenceJoinLabel, combinationSeparator });
118
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...frame, ...(variant === 'button' ? { gap: 6, ml: '$1', opacity: 0.5 } : null), ...props, children: [variant === 'button' ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "aria-hidden": true, width: 1, height: 8, opacity: 0.4, style: { backgroundColor: 'currentColor' } })) : null, (0, jsx_runtime_1.jsx)(gui_1.SizableText, { "aria-hidden": true, size: "$2", ...(variant === 'button' ? { fontWeight: '500' } : null), children: text })] }));
119
+ }
120
+ const combos = (0, exports.combinations)(keys);
121
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...frame, gap: "$1", ...props, children: combos.map((combo, i) => ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { "aria-hidden": true, display: "inline-flex", items: "center", gap: "$1", children: [i > 0 ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$hint", children: sequenceJoinLabel })) : null, combo.map((k, j) => ((0, jsx_runtime_1.jsx)(kbd_1.Kbd, { variant: "cap", children: (0, exports.keyName)(k, on).glyph }, j)))] }, i))) }));
122
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Shortcut — a keyboard shortcut as keycaps, named for the platform it is read
3
+ * on, and spoken as one phrase.
4
+ *
5
+ * A shortcut is one combination (`['Mod', 'K']`) or a sequence of them
6
+ * (`[['G'], ['P']]`, "G then P"). Key names translate per platform: `Mod` and
7
+ * `CommandOrControl` are ⌘ on a Mac and Ctrl elsewhere, `Alt` is ⌥ on a Mac,
8
+ * Enter is ⏎, arrows and Escape take their glyphs. The whole thing is one image
9
+ * to assistive technology, labelled in words ("Command + K", "G then P"), and
10
+ * the caps inside it are hidden — a screen reader hears the shortcut once, not
11
+ * a list of symbols.
12
+ *
13
+ * The platform is read through `useSyncExternalStore` with a server answer of
14
+ * "other", so a server render and the first client render agree and a Mac
15
+ * swaps Ctrl for ⌘ right after hydration rather than mismatching it.
16
+ *
17
+ * Re-expressed from twenty-ui's Shortcut and formatShortcut (MIT, see NOTICE):
18
+ * keys, text and button variants, a `desktop` visibility that hides it under a
19
+ * coarse pointer, keys 4px apart in a combination.
20
+ */
21
+ import { XStack } from '@hanzo/gui';
22
+ import { type ComponentProps } from 'react';
23
+ export type ShortcutPlatform = 'mac' | 'other';
24
+ /** One combination, or a sequence of combinations pressed one after another. */
25
+ export type ShortcutKeys = readonly string[] | readonly (readonly string[])[];
26
+ type Name = {
27
+ glyph: string;
28
+ word: string;
29
+ };
30
+ /** A key's glyph and word on `platform`; a plain key is itself, a letter uppercased. */
31
+ export declare const keyName: (key: string, platform: ShortcutPlatform) => Name;
32
+ /** `keys` as a list of combinations, whichever shape it was given in. */
33
+ export declare const combinations: (keys: ShortcutKeys) => string[][];
34
+ export type FormatOptions = {
35
+ platform?: ShortcutPlatform;
36
+ /** Between combinations of a sequence. Default "then". */
37
+ sequenceJoinLabel?: string;
38
+ /** Between the keys of one combination. Default none on a Mac, a space elsewhere. */
39
+ combinationSeparator?: string;
40
+ };
41
+ /** The shortcut as text, without rendering: "⌘K", "Ctrl K", "G then P". */
42
+ export declare function formatShortcut(keys: ShortcutKeys, options?: FormatOptions): string;
43
+ /** The shortcut in words, for assistive technology: "Command + K", "G then P". */
44
+ export declare function speakShortcut(keys: ShortcutKeys, platform: ShortcutPlatform, then?: string): string;
45
+ export type ShortcutProps = Omit<ComponentProps<typeof XStack>, 'children'> & {
46
+ keys: ShortcutKeys;
47
+ /** Default: the platform the page is read on. */
48
+ platform?: ShortcutPlatform;
49
+ /** `keys` draws keycaps; `text` plain text in the surrounding type; `button` the quiet hint inside a Button. */
50
+ variant?: 'keys' | 'text' | 'button';
51
+ /** `desktop` hides it under a coarse pointer, where there is no keyboard to press it on. */
52
+ visibility?: 'always' | 'desktop';
53
+ sequenceJoinLabel?: string;
54
+ combinationSeparator?: string;
55
+ };
56
+ export declare function Shortcut({ keys, platform, variant, visibility, sequenceJoinLabel, combinationSeparator, ...props }: ShortcutProps): import("react").JSX.Element;
57
+ export {};
58
+ //# sourceMappingURL=shortcut.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcut.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/shortcut.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAe,MAAM,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAIjE,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,CAAA;AAC9C,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;AAE7E,KAAK,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAqC3C,wFAAwF;AACxF,eAAO,MAAM,OAAO,QAAS,MAAM,YAAY,gBAAgB,KAAG,IAKjE,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,YAAY,SAAU,YAAY,KAAG,MAAM,EAAE,EACuD,CAAA;AAEjH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAMtF;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,SAAS,GAAG,MAAM,CAInG;AAYD,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAC5E,IAAI,EAAE,YAAY,CAAA;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,gHAAgH;IAChH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,4FAA4F;IAC5F,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAQ,EACR,OAAgB,EAChB,UAAqB,EACrB,iBAA0B,EAC1B,oBAAoB,EACpB,GAAG,KAAK,EACT,EAAE,aAAa,+BAoDf"}
@@ -0,0 +1,115 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Shortcut — a keyboard shortcut as keycaps, named for the platform it is read
5
+ * on, and spoken as one phrase.
6
+ *
7
+ * A shortcut is one combination (`['Mod', 'K']`) or a sequence of them
8
+ * (`[['G'], ['P']]`, "G then P"). Key names translate per platform: `Mod` and
9
+ * `CommandOrControl` are ⌘ on a Mac and Ctrl elsewhere, `Alt` is ⌥ on a Mac,
10
+ * Enter is ⏎, arrows and Escape take their glyphs. The whole thing is one image
11
+ * to assistive technology, labelled in words ("Command + K", "G then P"), and
12
+ * the caps inside it are hidden — a screen reader hears the shortcut once, not
13
+ * a list of symbols.
14
+ *
15
+ * The platform is read through `useSyncExternalStore` with a server answer of
16
+ * "other", so a server render and the first client render agree and a Mac
17
+ * swaps Ctrl for ⌘ right after hydration rather than mismatching it.
18
+ *
19
+ * Re-expressed from twenty-ui's Shortcut and formatShortcut (MIT, see NOTICE):
20
+ * keys, text and button variants, a `desktop` visibility that hides it under a
21
+ * coarse pointer, keys 4px apart in a combination.
22
+ */
23
+ import { SizableText, XStack } from '@hanzo/gui';
24
+ import { useSyncExternalStore } from 'react';
25
+ import { Kbd } from './kbd.js';
26
+ import { slot } from './slot.js';
27
+ /** Every key name the two platforms spell differently, by its lowercase alias. */
28
+ const KEYS = (platform) => {
29
+ const mac = platform === 'mac';
30
+ const mod = mac ? { glyph: '⌘', word: 'Command' } : { glyph: 'Ctrl', word: 'Control' };
31
+ return {
32
+ mod,
33
+ commandorcontrol: mod,
34
+ cmdorctrl: mod,
35
+ command: { glyph: '⌘', word: 'Command' },
36
+ cmd: { glyph: '⌘', word: 'Command' },
37
+ meta: { glyph: '⌘', word: 'Command' },
38
+ control: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
39
+ ctrl: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
40
+ alt: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
41
+ option: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
42
+ shift: { glyph: '⇧', word: 'Shift' },
43
+ enter: { glyph: '⏎', word: 'Enter' },
44
+ return: { glyph: '⏎', word: 'Enter' },
45
+ backspace: { glyph: '⌫', word: 'Backspace' },
46
+ delete: { glyph: '⌦', word: 'Delete' },
47
+ escape: { glyph: 'esc', word: 'Escape' },
48
+ esc: { glyph: 'esc', word: 'Escape' },
49
+ tab: { glyph: '⇥', word: 'Tab' },
50
+ space: { glyph: 'Space', word: 'Space' },
51
+ arrowup: { glyph: '↑', word: 'Up arrow' },
52
+ arrowdown: { glyph: '↓', word: 'Down arrow' },
53
+ arrowleft: { glyph: '←', word: 'Left arrow' },
54
+ arrowright: { glyph: '→', word: 'Right arrow' },
55
+ up: { glyph: '↑', word: 'Up arrow' },
56
+ down: { glyph: '↓', word: 'Down arrow' },
57
+ left: { glyph: '←', word: 'Left arrow' },
58
+ right: { glyph: '→', word: 'Right arrow' },
59
+ };
60
+ };
61
+ /** A key's glyph and word on `platform`; a plain key is itself, a letter uppercased. */
62
+ export const keyName = (key, platform) => {
63
+ const known = KEYS(platform)[key.toLowerCase()];
64
+ if (known)
65
+ return known;
66
+ const label = key.length === 1 ? key.toUpperCase() : key;
67
+ return { glyph: label, word: label };
68
+ };
69
+ /** `keys` as a list of combinations, whichever shape it was given in. */
70
+ export const combinations = (keys) => keys.length > 0 && Array.isArray(keys[0]) ? keys.map((c) => [...c]) : [[...keys]];
71
+ /** The shortcut as text, without rendering: "⌘K", "Ctrl K", "G then P". */
72
+ export function formatShortcut(keys, options = {}) {
73
+ const platform = options.platform ?? detect();
74
+ const join = options.combinationSeparator ?? (platform === 'mac' ? '' : ' ');
75
+ return combinations(keys)
76
+ .map((c) => c.map((k) => keyName(k, platform).glyph).join(join))
77
+ .join(` ${options.sequenceJoinLabel ?? 'then'} `);
78
+ }
79
+ /** The shortcut in words, for assistive technology: "Command + K", "G then P". */
80
+ export function speakShortcut(keys, platform, then = 'then') {
81
+ return combinations(keys)
82
+ .map((c) => c.map((k) => keyName(k, platform).word).join(' + '))
83
+ .join(` ${then} `);
84
+ }
85
+ /** macOS and iOS read as a Mac; anything else, or no navigator, does not. */
86
+ function detect() {
87
+ if (typeof navigator === 'undefined')
88
+ return 'other';
89
+ const nav = navigator;
90
+ const p = nav.userAgentData?.platform ?? nav.platform ?? nav.userAgent ?? '';
91
+ return /mac|iphone|ipad|ipod/i.test(p) ? 'mac' : 'other';
92
+ }
93
+ const never = () => () => { };
94
+ export function Shortcut({ keys, platform, variant = 'keys', visibility = 'always', sequenceJoinLabel = 'then', combinationSeparator, ...props }) {
95
+ const detected = useSyncExternalStore(never, detect, () => 'other');
96
+ const on = platform ?? detected;
97
+ const label = speakShortcut(keys, on, sequenceJoinLabel);
98
+ const hidden = visibility === 'desktop' ? { $touchable: { display: 'none' } } : null;
99
+ const frame = {
100
+ ...slot('shortcut'),
101
+ 'data-variant': variant,
102
+ role: 'img',
103
+ 'aria-label': label,
104
+ display: 'inline-flex',
105
+ items: 'center',
106
+ ...hidden,
107
+ };
108
+ if (variant === 'text' || variant === 'button') {
109
+ const text = formatShortcut(keys, { platform: on, sequenceJoinLabel, combinationSeparator });
110
+ return (_jsxs(XStack, { ...frame, ...(variant === 'button' ? { gap: 6, ml: '$1', opacity: 0.5 } : null), ...props, children: [variant === 'button' ? (_jsx(XStack, { "aria-hidden": true, width: 1, height: 8, opacity: 0.4, style: { backgroundColor: 'currentColor' } })) : null, _jsx(SizableText, { "aria-hidden": true, size: "$2", ...(variant === 'button' ? { fontWeight: '500' } : null), children: text })] }));
111
+ }
112
+ const combos = combinations(keys);
113
+ return (_jsx(XStack, { ...frame, gap: "$1", ...props, children: combos.map((combo, i) => (_jsxs(XStack, { "aria-hidden": true, display: "inline-flex", items: "center", gap: "$1", children: [i > 0 ? (_jsx(SizableText, { size: "$1", color: "$hint", children: sequenceJoinLabel })) : null, combo.map((k, j) => (_jsx(Kbd, { variant: "cap", children: keyName(k, on).glyph }, j)))] }, i))) }));
114
+ }
115
+ //# sourceMappingURL=shortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcut.js","sourceRoot":"","sources":["../../../src/backends/gui/shortcut.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAuB,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAQ7B,kFAAkF;AAClF,MAAM,IAAI,GAAG,CAAC,QAA0B,EAAwB,EAAE;IAChE,MAAM,GAAG,GAAG,QAAQ,KAAK,KAAK,CAAA;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;IACtF,OAAO;QACL,GAAG;QACH,gBAAgB,EAAE,GAAG;QACrB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE;QACxC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;QACnF,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;QAChF,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;QACzE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;QAC5E,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;QACpC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;QACrC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE;QAC5C,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;QAChC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;QACxC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE;QACzC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;QAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;QAC7C,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE;QAC/C,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE;QACpC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;QACxC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;QACxC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE;KAC3C,CAAA;AACH,CAAC,CAAA;AAED,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,QAA0B,EAAQ,EAAE;IACvE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;IACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACtC,CAAC,CAAA;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAkB,EAAc,EAAE,CAC7D,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,IAAiB,CAAC,CAAC,CAAA;AAUjH,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,OAAO,GAAkB,EAAE;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAA;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC5E,OAAO,YAAY,CAAC,IAAI,CAAC;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/D,IAAI,CAAC,IAAI,OAAO,CAAC,iBAAiB,IAAI,MAAM,GAAG,CAAC,CAAA;AACrD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,IAAkB,EAAE,QAA0B,EAAE,IAAI,GAAG,MAAM;IACzF,OAAO,YAAY,CAAC,IAAI,CAAC;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/D,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,6EAA6E;AAC7E,SAAS,MAAM;IACb,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,OAAO,CAAA;IACpD,MAAM,GAAG,GAAG,SAAkE,CAAA;IAC9E,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,CAAA;IAC5E,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;AAC1D,CAAC;AAED,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;AAc5B,MAAM,UAAU,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAQ,EACR,OAAO,GAAG,MAAM,EAChB,UAAU,GAAG,QAAQ,EACrB,iBAAiB,GAAG,MAAM,EAC1B,oBAAoB,EACpB,GAAG,KAAK,EACM;IACd,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAA2B,CAAC,CAAA;IACvF,MAAM,EAAE,GAAG,QAAQ,IAAI,QAAQ,CAAA;IAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAe,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7F,MAAM,KAAK,GAAG;QACZ,GAAG,IAAI,CAAC,UAAU,CAAC;QACnB,cAAc,EAAE,OAAO;QACvB,IAAI,EAAE,KAAc;QACpB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,aAAsB;QAC/B,KAAK,EAAE,QAAiB;QACxB,GAAG,MAAM;KACV,CAAA;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAC5F,OAAO,CACL,MAAC,MAAM,OACD,KAAK,KACL,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAClE,KAAK,aAER,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtB,KAAC,MAAM,yBAAa,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,GAAI,CACtG,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,WAAW,yBAAa,IAAI,EAAC,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YACzF,IAAI,GACO,IACP,CACV,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,OAAO,CACL,KAAC,MAAM,OAAK,KAAK,EAAE,GAAG,EAAC,IAAI,KAAK,KAAK,YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,MAAC,MAAM,yBAAqB,OAAO,EAAC,aAAa,EAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,aACtE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACP,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,OAAO,YACjC,iBAAiB,GACN,CACf,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,GAAG,IAAS,OAAO,EAAC,KAAK,YACvB,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IADb,CAAC,CAEL,CACP,CAAC,KAVS,CAAC,CAWL,CACV,CAAC,GACK,CACV,CAAA;AACH,CAAC"}
@@ -1,14 +1,45 @@
1
1
  'use client';"use strict";
2
2
  'use client';
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Skeleton = void 0;
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 Skeleton = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box
9
- // Announced as busy so a screen reader says "loading" rather than reading
10
- // out an empty box, or nothing at all. A boolean, not the string "true":
11
- // gui types the ARIA states as booleans and React writes the attribute out
12
- // either way.
13
- , { "aria-busy": true, "aria-live": "polite", "data-motion": "pulse", className: (0, cn_1.cn)('rounded-md bg-muted', className), ...props }));
4
+ exports.SKELETON_HEIGHT = void 0;
14
5
  exports.Skeleton = Skeleton;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * Skeleton — the shape of content that has not arrived. ONE implementation:
9
+ * `@hanzo/ui`'s `Skeleton` is this, and `@hanzo/ui/product`'s `Skeleton` (with
10
+ * `Skeleton.Text`) is this with its own defaults.
11
+ *
12
+ * It is a box with a highlight sweeping across it and nothing else, so the SIZE
13
+ * is the caller's to state and should match what will land there. A skeleton
14
+ * that is not the size of its content is worse than none: the page reflows when
15
+ * the real thing appears, which is the jump the skeleton existed to prevent.
16
+ *
17
+ * After twenty-ui's Skeleton (MIT, NOTICE): the base is the hover rung, the
18
+ * highlight a faint glass band, 4px corners, a 1.5s sweep (`--duration-loop`,
19
+ * stopped under reduced motion), height presets xs 13 / s 16 / m 24 / l 32 /
20
+ * xl 40, and two layouts — `inline` takes a line box of the text around it
21
+ * (it holds a zero-width non-joiner, so it is a line tall with no height
22
+ * given), `block` is a box of its own. The highlight is `--glass` rather than
23
+ * the panel rung: twenty-ui's is 2% black on light and 3% white on dark, and
24
+ * the panel rung is a SOLID step that sits darker than the hover rung in the
25
+ * dark theme, which would sweep a shadow instead of a light.
26
+ *
27
+ * Hidden from assistive technology: a placeholder is scenery, and the content
28
+ * is what should be read when it lands.
29
+ *
30
+ * Class notation is still read (`<Skeleton className="h-4 w-32" />`), the way
31
+ * `Box` reads it, so call sites written against the Box version keep their
32
+ * sizes; a class it does not know stays a class.
33
+ */
34
+ const gui_1 = require("@hanzo/gui");
35
+ const tw_1 = require("../../tw.cjs");
36
+ const slot_1 = require("./slot.cjs");
37
+ /** The height presets, px. */
38
+ exports.SKELETON_HEIGHT = { xs: 13, s: 16, m: 24, l: 32, xl: 40 };
39
+ /** The band that sweeps: transparent, the glass light, transparent. */
40
+ const BAND = 'linear-gradient(90deg, transparent 0%, var(--glass, rgba(128, 128, 128, 0.08)) 50%, transparent 100%)';
41
+ function Skeleton({ size, layout = 'inline', animated = true, className, ...props }) {
42
+ const { props: read, rest } = (0, tw_1.tw)(className);
43
+ const height = size ? exports.SKELETON_HEIGHT[size] : layout === 'block' ? '1em' : undefined;
44
+ return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('skeleton'), "aria-hidden": true, "data-layout": layout, "data-motion": animated ? 'shimmer' : undefined, display: layout === 'inline' ? 'inline-flex' : 'flex', width: "100%", ...(height === undefined ? null : { height }), rounded: "$xs", bg: "$hover", backgroundImage: animated ? BAND : undefined, backgroundSize: "160px 100%", backgroundRepeat: "no-repeat", overflow: "hidden", ...read, ...(rest ? { className: rest } : null), ...props, children: layout === 'inline' && height === undefined && !('height' in props) && !('height' in read) ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$2", "aria-hidden": true, children: '‌' })) : null }));
45
+ }
@@ -1,12 +1,50 @@
1
1
  /**
2
- * Skeleton — the shape of content that has not arrived.
2
+ * Skeleton — the shape of content that has not arrived. ONE implementation:
3
+ * `@hanzo/ui`'s `Skeleton` is this, and `@hanzo/ui/product`'s `Skeleton` (with
4
+ * `Skeleton.Text`) is this with its own defaults.
3
5
  *
4
- * It is a box with the pulse on it and nothing else, so the SIZE is the caller's
5
- * to state and should match what will land there. A skeleton that is not the
6
- * size of its content is worse than none: the page reflows when the real thing
7
- * appears, which is the jump the skeleton existed to prevent.
6
+ * It is a box with a highlight sweeping across it and nothing else, so the SIZE
7
+ * is the caller's to state and should match what will land there. A skeleton
8
+ * that is not the size of its content is worse than none: the page reflows when
9
+ * the real thing appears, which is the jump the skeleton existed to prevent.
10
+ *
11
+ * After twenty-ui's Skeleton (MIT, NOTICE): the base is the hover rung, the
12
+ * highlight a faint glass band, 4px corners, a 1.5s sweep (`--duration-loop`,
13
+ * stopped under reduced motion), height presets xs 13 / s 16 / m 24 / l 32 /
14
+ * xl 40, and two layouts — `inline` takes a line box of the text around it
15
+ * (it holds a zero-width non-joiner, so it is a line tall with no height
16
+ * given), `block` is a box of its own. The highlight is `--glass` rather than
17
+ * the panel rung: twenty-ui's is 2% black on light and 3% white on dark, and
18
+ * the panel rung is a SOLID step that sits darker than the hover rung in the
19
+ * dark theme, which would sweep a shadow instead of a light.
20
+ *
21
+ * Hidden from assistive technology: a placeholder is scenery, and the content
22
+ * is what should be read when it lands.
23
+ *
24
+ * Class notation is still read (`<Skeleton className="h-4 w-32" />`), the way
25
+ * `Box` reads it, so call sites written against the Box version keep their
26
+ * sizes; a class it does not know stays a class.
8
27
  */
9
- import * as React from 'react';
10
- import { Box } from '../../box.js';
11
- export declare const Skeleton: ({ className, ...props }: React.ComponentProps<typeof Box>) => React.JSX.Element;
28
+ import { YStack } from '@hanzo/gui';
29
+ import type { ComponentProps } from 'react';
30
+ import { type ClassValue } from '../../tw.js';
31
+ /** The height presets, px. */
32
+ export declare const SKELETON_HEIGHT: {
33
+ readonly xs: 13;
34
+ readonly s: 16;
35
+ readonly m: 24;
36
+ readonly l: 32;
37
+ readonly xl: 40;
38
+ };
39
+ export type SkeletonSize = keyof typeof SKELETON_HEIGHT;
40
+ export type SkeletonProps = Omit<ComponentProps<typeof YStack>, 'children' | 'size'> & {
41
+ /** A height preset; a `height` given beside it wins. */
42
+ size?: SkeletonSize;
43
+ /** `inline` (default) is a line of the surrounding text; `block` is a box. */
44
+ layout?: 'inline' | 'block';
45
+ /** The sweep; off, a still block. Off under reduced motion regardless. */
46
+ animated?: boolean;
47
+ className?: ClassValue;
48
+ };
49
+ export declare function Skeleton({ size, layout, animated, className, ...props }: SkeletonProps): import("react").JSX.Element;
12
50
  //# sourceMappingURL=skeleton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAG/B,eAAO,MAAM,QAAQ,4BAA6B,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,sBAYjF,CAAA"}
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAe,MAAM,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAM,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAG9C,8BAA8B;AAC9B,eAAO,MAAM,eAAe;aAAK,EAAE,EAAE,EAAE;aAAE,CAAC,EAAE,EAAE;aAAE,CAAC,EAAE,EAAE;aAAE,CAAC,EAAE,EAAE;aAAE,EAAE,EAAE,EAAE;CAAW,CAAA;AAE/E,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,eAAe,CAAA;AAEvD,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,GAAG;IACrF,wDAAwD;IACxD,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,CAAA;AAKD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAiB,EAAE,QAAe,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BA+BxG"}