@hanzo/ui 8.27.91 → 8.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (698) hide show
  1. package/NOTICE +25 -0
  2. package/README.md +1 -1
  3. package/dist/backends/gui/alert-dialog.cjs +24 -6
  4. package/dist/backends/gui/alert-dialog.d.ts +11 -3
  5. package/dist/backends/gui/alert-dialog.d.ts.map +1 -1
  6. package/dist/backends/gui/alert-dialog.js +24 -6
  7. package/dist/backends/gui/alert-dialog.js.map +1 -1
  8. package/dist/backends/gui/alert.cjs +32 -1
  9. package/dist/backends/gui/alert.d.ts +36 -3
  10. package/dist/backends/gui/alert.d.ts.map +1 -1
  11. package/dist/backends/gui/alert.js +32 -2
  12. package/dist/backends/gui/alert.js.map +1 -1
  13. package/dist/backends/gui/avatar-group.cjs +28 -0
  14. package/dist/backends/gui/avatar-group.d.ts +33 -0
  15. package/dist/backends/gui/avatar-group.d.ts.map +1 -0
  16. package/dist/backends/gui/avatar-group.js +26 -0
  17. package/dist/backends/gui/avatar-group.js.map +1 -0
  18. package/dist/backends/gui/avatar.cjs +53 -3
  19. package/dist/backends/gui/avatar.d.ts +46 -4
  20. package/dist/backends/gui/avatar.d.ts.map +1 -1
  21. package/dist/backends/gui/avatar.js +52 -3
  22. package/dist/backends/gui/avatar.js.map +1 -1
  23. package/dist/backends/gui/badge.cjs +40 -2
  24. package/dist/backends/gui/badge.d.ts +7 -2
  25. package/dist/backends/gui/badge.d.ts.map +1 -1
  26. package/dist/backends/gui/badge.js +40 -2
  27. package/dist/backends/gui/badge.js.map +1 -1
  28. package/dist/backends/gui/banner.cjs +40 -1
  29. package/dist/backends/gui/banner.d.ts +36 -3
  30. package/dist/backends/gui/banner.d.ts.map +1 -1
  31. package/dist/backends/gui/banner.js +42 -4
  32. package/dist/backends/gui/banner.js.map +1 -1
  33. package/dist/backends/gui/breadcrumb.cjs +28 -10
  34. package/dist/backends/gui/breadcrumb.d.ts +20 -11
  35. package/dist/backends/gui/breadcrumb.d.ts.map +1 -1
  36. package/dist/backends/gui/breadcrumb.js +28 -10
  37. package/dist/backends/gui/breadcrumb.js.map +1 -1
  38. package/dist/backends/gui/button-group.cjs +43 -0
  39. package/dist/backends/gui/button-group.d.ts +48 -0
  40. package/dist/backends/gui/button-group.d.ts.map +1 -0
  41. package/dist/backends/gui/button-group.js +40 -0
  42. package/dist/backends/gui/button-group.js.map +1 -0
  43. package/dist/backends/gui/button.cjs +177 -4
  44. package/dist/backends/gui/button.d.ts +69 -4
  45. package/dist/backends/gui/button.d.ts.map +1 -1
  46. package/dist/backends/gui/button.js +179 -6
  47. package/dist/backends/gui/button.js.map +1 -1
  48. package/dist/backends/gui/card.cjs +50 -21
  49. package/dist/backends/gui/card.d.ts +16 -7
  50. package/dist/backends/gui/card.d.ts.map +1 -1
  51. package/dist/backends/gui/card.js +50 -21
  52. package/dist/backends/gui/card.js.map +1 -1
  53. package/dist/backends/gui/checkbox.cjs +86 -14
  54. package/dist/backends/gui/checkbox.d.ts +30 -2
  55. package/dist/backends/gui/checkbox.d.ts.map +1 -1
  56. package/dist/backends/gui/checkbox.js +87 -15
  57. package/dist/backends/gui/checkbox.js.map +1 -1
  58. package/dist/backends/gui/chip.cjs +51 -0
  59. package/dist/backends/gui/chip.d.ts +47 -0
  60. package/dist/backends/gui/chip.d.ts.map +1 -0
  61. package/dist/backends/gui/chip.js +49 -0
  62. package/dist/backends/gui/chip.js.map +1 -0
  63. package/dist/backends/gui/choice.cjs +18 -3
  64. package/dist/backends/gui/choice.d.ts +10 -2
  65. package/dist/backends/gui/choice.d.ts.map +1 -1
  66. package/dist/backends/gui/choice.js +19 -4
  67. package/dist/backends/gui/choice.js.map +1 -1
  68. package/dist/backends/gui/code-editor.cjs +16 -5
  69. package/dist/backends/gui/code-editor.d.ts +18 -1
  70. package/dist/backends/gui/code-editor.d.ts.map +1 -1
  71. package/dist/backends/gui/code-editor.js +16 -5
  72. package/dist/backends/gui/code-editor.js.map +1 -1
  73. package/dist/backends/gui/color-sample.cjs +24 -0
  74. package/dist/backends/gui/color-sample.d.ts +23 -0
  75. package/dist/backends/gui/color-sample.d.ts.map +1 -0
  76. package/dist/backends/gui/color-sample.js +22 -0
  77. package/dist/backends/gui/color-sample.js.map +1 -0
  78. package/dist/backends/gui/control.cjs +5 -3
  79. package/dist/backends/gui/control.d.ts +13 -3
  80. package/dist/backends/gui/control.d.ts.map +1 -1
  81. package/dist/backends/gui/control.js +5 -3
  82. package/dist/backends/gui/control.js.map +1 -1
  83. package/dist/backends/gui/country-select.cjs +69 -0
  84. package/dist/backends/gui/country-select.d.ts +30 -0
  85. package/dist/backends/gui/country-select.d.ts.map +1 -0
  86. package/dist/backends/gui/country-select.js +67 -0
  87. package/dist/backends/gui/country-select.js.map +1 -0
  88. package/dist/backends/gui/currency-picker.cjs +48 -0
  89. package/dist/backends/gui/currency-picker.d.ts +37 -0
  90. package/dist/backends/gui/currency-picker.d.ts.map +1 -0
  91. package/dist/backends/gui/currency-picker.js +46 -0
  92. package/dist/backends/gui/currency-picker.js.map +1 -0
  93. package/dist/backends/gui/density.cjs +32 -0
  94. package/dist/backends/gui/density.d.ts +27 -0
  95. package/dist/backends/gui/density.d.ts.map +1 -0
  96. package/dist/backends/gui/density.js +27 -0
  97. package/dist/backends/gui/density.js.map +1 -0
  98. package/dist/backends/gui/dialog.cjs +65 -7
  99. package/dist/backends/gui/dialog.d.ts +68 -3
  100. package/dist/backends/gui/dialog.d.ts.map +1 -1
  101. package/dist/backends/gui/dialog.js +63 -7
  102. package/dist/backends/gui/dialog.js.map +1 -1
  103. package/dist/backends/gui/dropdown-menu.cjs +361 -31
  104. package/dist/backends/gui/dropdown-menu.d.ts +151 -15
  105. package/dist/backends/gui/dropdown-menu.d.ts.map +1 -1
  106. package/dist/backends/gui/dropdown-menu.js +353 -34
  107. package/dist/backends/gui/dropdown-menu.js.map +1 -1
  108. package/dist/backends/gui/feedback.cjs +78 -0
  109. package/dist/backends/gui/feedback.d.ts +46 -0
  110. package/dist/backends/gui/feedback.d.ts.map +1 -0
  111. package/dist/backends/gui/feedback.js +74 -0
  112. package/dist/backends/gui/feedback.js.map +1 -0
  113. package/dist/backends/gui/field.cjs +71 -14
  114. package/dist/backends/gui/field.d.ts +43 -3
  115. package/dist/backends/gui/field.d.ts.map +1 -1
  116. package/dist/backends/gui/field.js +69 -14
  117. package/dist/backends/gui/field.js.map +1 -1
  118. package/dist/backends/gui/flag.cjs +17 -0
  119. package/dist/backends/gui/flag.d.ts +9 -0
  120. package/dist/backends/gui/flag.d.ts.map +1 -0
  121. package/dist/backends/gui/flag.js +14 -0
  122. package/dist/backends/gui/flag.js.map +1 -0
  123. package/dist/backends/gui/grip.cjs +35 -3
  124. package/dist/backends/gui/grip.d.ts +16 -1
  125. package/dist/backends/gui/grip.d.ts.map +1 -1
  126. package/dist/backends/gui/grip.js +35 -3
  127. package/dist/backends/gui/grip.js.map +1 -1
  128. package/dist/backends/gui/heading.cjs +27 -0
  129. package/dist/backends/gui/heading.d.ts +8 -0
  130. package/dist/backends/gui/heading.d.ts.map +1 -0
  131. package/dist/backends/gui/heading.js +25 -0
  132. package/dist/backends/gui/heading.js.map +1 -0
  133. package/dist/backends/gui/hue.cjs +49 -0
  134. package/dist/backends/gui/hue.d.ts +18 -0
  135. package/dist/backends/gui/hue.d.ts.map +1 -0
  136. package/dist/backends/gui/hue.js +43 -0
  137. package/dist/backends/gui/hue.js.map +1 -0
  138. package/dist/backends/gui/icon-tile.cjs +36 -0
  139. package/dist/backends/gui/icon-tile.d.ts +26 -0
  140. package/dist/backends/gui/icon-tile.d.ts.map +1 -0
  141. package/dist/backends/gui/icon-tile.js +32 -0
  142. package/dist/backends/gui/icon-tile.js.map +1 -0
  143. package/dist/backends/gui/image-input.cjs +78 -0
  144. package/dist/backends/gui/image-input.d.ts +32 -0
  145. package/dist/backends/gui/image-input.d.ts.map +1 -0
  146. package/dist/backends/gui/image-input.js +74 -0
  147. package/dist/backends/gui/image-input.js.map +1 -0
  148. package/dist/backends/gui/index.cjs +93 -7
  149. package/dist/backends/gui/index.d.ts +45 -2
  150. package/dist/backends/gui/index.d.ts.map +1 -1
  151. package/dist/backends/gui/index.js +35 -1
  152. package/dist/backends/gui/index.js.map +1 -1
  153. package/dist/backends/gui/input-group.cjs +49 -0
  154. package/dist/backends/gui/input-group.d.ts +46 -0
  155. package/dist/backends/gui/input-group.d.ts.map +1 -0
  156. package/dist/backends/gui/input-group.js +46 -0
  157. package/dist/backends/gui/input-group.js.map +1 -0
  158. package/dist/backends/gui/input.cjs +32 -4
  159. package/dist/backends/gui/input.d.ts +5 -1
  160. package/dist/backends/gui/input.d.ts.map +1 -1
  161. package/dist/backends/gui/input.js +33 -5
  162. package/dist/backends/gui/input.js.map +1 -1
  163. package/dist/backends/gui/item.cjs +34 -2
  164. package/dist/backends/gui/item.d.ts +21 -5
  165. package/dist/backends/gui/item.d.ts.map +1 -1
  166. package/dist/backends/gui/item.js +35 -3
  167. package/dist/backends/gui/item.js.map +1 -1
  168. package/dist/backends/gui/json-tree.cjs +103 -15
  169. package/dist/backends/gui/json-tree.d.ts +39 -3
  170. package/dist/backends/gui/json-tree.d.ts.map +1 -1
  171. package/dist/backends/gui/json-tree.js +104 -16
  172. package/dist/backends/gui/json-tree.js.map +1 -1
  173. package/dist/backends/gui/kbd.cjs +18 -2
  174. package/dist/backends/gui/kbd.d.ts +5 -2
  175. package/dist/backends/gui/kbd.d.ts.map +1 -1
  176. package/dist/backends/gui/kbd.js +18 -2
  177. package/dist/backends/gui/kbd.js.map +1 -1
  178. package/dist/backends/gui/label.cjs +14 -3
  179. package/dist/backends/gui/label.d.ts +12 -3
  180. package/dist/backends/gui/label.d.ts.map +1 -1
  181. package/dist/backends/gui/label.js +14 -3
  182. package/dist/backends/gui/label.js.map +1 -1
  183. package/dist/backends/gui/layout.cjs +5 -1
  184. package/dist/backends/gui/layout.d.ts +1 -1
  185. package/dist/backends/gui/layout.d.ts.map +1 -1
  186. package/dist/backends/gui/layout.js +5 -1
  187. package/dist/backends/gui/layout.js.map +1 -1
  188. package/dist/backends/gui/number-field.cjs +163 -0
  189. package/dist/backends/gui/number-field.d.ts +34 -0
  190. package/dist/backends/gui/number-field.d.ts.map +1 -0
  191. package/dist/backends/gui/number-field.js +160 -0
  192. package/dist/backends/gui/number-field.js.map +1 -0
  193. package/dist/backends/gui/overflowing-list.cjs +79 -0
  194. package/dist/backends/gui/overflowing-list.d.ts +42 -0
  195. package/dist/backends/gui/overflowing-list.d.ts.map +1 -0
  196. package/dist/backends/gui/overflowing-list.js +76 -0
  197. package/dist/backends/gui/overflowing-list.js.map +1 -0
  198. package/dist/backends/gui/phone-country-picker.cjs +60 -0
  199. package/dist/backends/gui/phone-country-picker.d.ts +34 -0
  200. package/dist/backends/gui/phone-country-picker.d.ts.map +1 -0
  201. package/dist/backends/gui/phone-country-picker.js +57 -0
  202. package/dist/backends/gui/phone-country-picker.js.map +1 -0
  203. package/dist/backends/gui/popover.cjs +20 -4
  204. package/dist/backends/gui/popover.d.ts +12 -1
  205. package/dist/backends/gui/popover.d.ts.map +1 -1
  206. package/dist/backends/gui/popover.js +21 -5
  207. package/dist/backends/gui/popover.js.map +1 -1
  208. package/dist/backends/gui/progress-ring.cjs +38 -0
  209. package/dist/backends/gui/progress-ring.d.ts +37 -0
  210. package/dist/backends/gui/progress-ring.d.ts.map +1 -0
  211. package/dist/backends/gui/progress-ring.js +36 -0
  212. package/dist/backends/gui/progress-ring.js.map +1 -0
  213. package/dist/backends/gui/progress.cjs +31 -7
  214. package/dist/backends/gui/progress.d.ts +25 -3
  215. package/dist/backends/gui/progress.d.ts.map +1 -1
  216. package/dist/backends/gui/progress.js +32 -8
  217. package/dist/backends/gui/progress.js.map +1 -1
  218. package/dist/backends/gui/radio-group.cjs +28 -2
  219. package/dist/backends/gui/radio-group.d.ts +20 -2
  220. package/dist/backends/gui/radio-group.d.ts.map +1 -1
  221. package/dist/backends/gui/radio-group.js +28 -2
  222. package/dist/backends/gui/radio-group.js.map +1 -1
  223. package/dist/backends/gui/search-list.cjs +62 -0
  224. package/dist/backends/gui/search-list.d.ts +65 -0
  225. package/dist/backends/gui/search-list.d.ts.map +1 -0
  226. package/dist/backends/gui/search-list.js +58 -0
  227. package/dist/backends/gui/search-list.js.map +1 -0
  228. package/dist/backends/gui/select.cjs +50 -16
  229. package/dist/backends/gui/select.d.ts +12 -3
  230. package/dist/backends/gui/select.d.ts.map +1 -1
  231. package/dist/backends/gui/select.js +51 -17
  232. package/dist/backends/gui/select.js.map +1 -1
  233. package/dist/backends/gui/shortcut.cjs +122 -0
  234. package/dist/backends/gui/shortcut.d.ts +58 -0
  235. package/dist/backends/gui/shortcut.d.ts.map +1 -0
  236. package/dist/backends/gui/shortcut.js +115 -0
  237. package/dist/backends/gui/shortcut.js.map +1 -0
  238. package/dist/backends/gui/skeleton.cjs +41 -10
  239. package/dist/backends/gui/skeleton.d.ts +46 -8
  240. package/dist/backends/gui/skeleton.d.ts.map +1 -1
  241. package/dist/backends/gui/skeleton.js +39 -8
  242. package/dist/backends/gui/skeleton.js.map +1 -1
  243. package/dist/backends/gui/snippet.cjs +12 -1
  244. package/dist/backends/gui/snippet.d.ts +4 -2
  245. package/dist/backends/gui/snippet.d.ts.map +1 -1
  246. package/dist/backends/gui/snippet.js +12 -1
  247. package/dist/backends/gui/snippet.js.map +1 -1
  248. package/dist/backends/gui/spinner.cjs +8 -1
  249. package/dist/backends/gui/spinner.d.ts +11 -2
  250. package/dist/backends/gui/spinner.d.ts.map +1 -1
  251. package/dist/backends/gui/spinner.js +9 -2
  252. package/dist/backends/gui/spinner.js.map +1 -1
  253. package/dist/backends/gui/stack-icon.cjs +17 -0
  254. package/dist/backends/gui/stack-icon.d.ts +15 -0
  255. package/dist/backends/gui/stack-icon.d.ts.map +1 -0
  256. package/dist/backends/gui/stack-icon.js +15 -0
  257. package/dist/backends/gui/stack-icon.js.map +1 -0
  258. package/dist/backends/gui/status.cjs +38 -1
  259. package/dist/backends/gui/status.d.ts +16 -2
  260. package/dist/backends/gui/status.d.ts.map +1 -1
  261. package/dist/backends/gui/status.js +38 -2
  262. package/dist/backends/gui/status.js.map +1 -1
  263. package/dist/backends/gui/stepper.cjs +73 -3
  264. package/dist/backends/gui/stepper.d.ts +25 -1
  265. package/dist/backends/gui/stepper.d.ts.map +1 -1
  266. package/dist/backends/gui/stepper.js +71 -5
  267. package/dist/backends/gui/stepper.js.map +1 -1
  268. package/dist/backends/gui/switch.cjs +35 -20
  269. package/dist/backends/gui/switch.d.ts +12 -2
  270. package/dist/backends/gui/switch.d.ts.map +1 -1
  271. package/dist/backends/gui/switch.js +35 -20
  272. package/dist/backends/gui/switch.js.map +1 -1
  273. package/dist/backends/gui/tabs.cjs +63 -17
  274. package/dist/backends/gui/tabs.d.ts +35 -6
  275. package/dist/backends/gui/tabs.d.ts.map +1 -1
  276. package/dist/backends/gui/tabs.js +65 -19
  277. package/dist/backends/gui/tabs.js.map +1 -1
  278. package/dist/backends/gui/tag.cjs +48 -0
  279. package/dist/backends/gui/tag.d.ts +53 -0
  280. package/dist/backends/gui/tag.d.ts.map +1 -0
  281. package/dist/backends/gui/tag.js +46 -0
  282. package/dist/backends/gui/tag.js.map +1 -0
  283. package/dist/backends/gui/tags.cjs +9 -2
  284. package/dist/backends/gui/tags.d.ts +6 -5
  285. package/dist/backends/gui/tags.d.ts.map +1 -1
  286. package/dist/backends/gui/tags.js +9 -2
  287. package/dist/backends/gui/tags.js.map +1 -1
  288. package/dist/backends/gui/textarea.cjs +22 -6
  289. package/dist/backends/gui/textarea.d.ts +10 -1
  290. package/dist/backends/gui/textarea.d.ts.map +1 -1
  291. package/dist/backends/gui/textarea.js +22 -6
  292. package/dist/backends/gui/textarea.js.map +1 -1
  293. package/dist/backends/gui/toaster.cjs +167 -3
  294. package/dist/backends/gui/toaster.d.ts +28 -2
  295. package/dist/backends/gui/toaster.d.ts.map +1 -1
  296. package/dist/backends/gui/toaster.js +167 -5
  297. package/dist/backends/gui/toaster.js.map +1 -1
  298. package/dist/backends/gui/toggle-group.cjs +13 -0
  299. package/dist/backends/gui/toggle-group.d.ts +7 -1
  300. package/dist/backends/gui/toggle-group.d.ts.map +1 -1
  301. package/dist/backends/gui/toggle-group.js +13 -0
  302. package/dist/backends/gui/toggle-group.js.map +1 -1
  303. package/dist/backends/gui/tooltip.cjs +29 -6
  304. package/dist/backends/gui/tooltip.d.ts +23 -4
  305. package/dist/backends/gui/tooltip.d.ts.map +1 -1
  306. package/dist/backends/gui/tooltip.js +31 -8
  307. package/dist/backends/gui/tooltip.js.map +1 -1
  308. package/dist/backends/gui/truncated-text.cjs +102 -0
  309. package/dist/backends/gui/truncated-text.d.ts +55 -0
  310. package/dist/backends/gui/truncated-text.d.ts.map +1 -0
  311. package/dist/backends/gui/truncated-text.js +97 -0
  312. package/dist/backends/gui/truncated-text.js.map +1 -0
  313. package/dist/gallery/compound.cjs +60 -0
  314. package/dist/gallery/compound.d.ts +2 -0
  315. package/dist/gallery/compound.d.ts.map +1 -0
  316. package/dist/gallery/compound.js +58 -0
  317. package/dist/gallery/compound.js.map +1 -0
  318. package/dist/gallery/display.cjs +47 -0
  319. package/dist/gallery/display.d.ts +3 -0
  320. package/dist/gallery/display.d.ts.map +1 -0
  321. package/dist/gallery/display.js +45 -0
  322. package/dist/gallery/display.js.map +1 -0
  323. package/dist/gallery/feedback.cjs +38 -0
  324. package/dist/gallery/feedback.d.ts +2 -0
  325. package/dist/gallery/feedback.d.ts.map +1 -0
  326. package/dist/gallery/feedback.js +36 -0
  327. package/dist/gallery/feedback.js.map +1 -0
  328. package/dist/gallery/fields.cjs +53 -0
  329. package/dist/gallery/fields.d.ts +2 -0
  330. package/dist/gallery/fields.d.ts.map +1 -0
  331. package/dist/gallery/fields.js +51 -0
  332. package/dist/gallery/fields.js.map +1 -0
  333. package/dist/gallery/frames.cjs +47 -0
  334. package/dist/gallery/frames.d.ts +2 -0
  335. package/dist/gallery/frames.d.ts.map +1 -0
  336. package/dist/gallery/frames.js +45 -0
  337. package/dist/gallery/frames.js.map +1 -0
  338. package/dist/gallery/menus.cjs +64 -0
  339. package/dist/gallery/menus.d.ts +15 -0
  340. package/dist/gallery/menus.d.ts.map +1 -0
  341. package/dist/gallery/menus.js +58 -0
  342. package/dist/gallery/menus.js.map +1 -0
  343. package/dist/gallery/records.cjs +33 -0
  344. package/dist/gallery/records.d.ts +2 -0
  345. package/dist/gallery/records.d.ts.map +1 -0
  346. package/dist/gallery/records.js +31 -0
  347. package/dist/gallery/records.js.map +1 -0
  348. package/dist/gallery/section.cjs +17 -0
  349. package/dist/gallery/section.d.ts +10 -0
  350. package/dist/gallery/section.d.ts.map +1 -0
  351. package/dist/gallery/section.js +14 -0
  352. package/dist/gallery/section.js.map +1 -0
  353. package/dist/gallery.cjs +8 -14
  354. package/dist/gallery.d.ts.map +1 -1
  355. package/dist/gallery.html +1594 -256
  356. package/dist/gallery.js +3 -9
  357. package/dist/gallery.js.map +1 -1
  358. package/dist/gui-config.cjs +33 -4
  359. package/dist/gui-config.d.ts +11 -3
  360. package/dist/gui-config.d.ts.map +1 -1
  361. package/dist/gui-config.js +33 -4
  362. package/dist/gui-config.js.map +1 -1
  363. package/dist/index.cjs +61 -2
  364. package/dist/index.d.ts +4 -2
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +7 -1
  367. package/dist/index.js.map +1 -1
  368. package/dist/index.node.cjs +61 -2
  369. package/dist/index.node.js +7 -1
  370. package/dist/motion.cjs +25 -1
  371. package/dist/motion.d.ts +16 -1
  372. package/dist/motion.d.ts.map +1 -1
  373. package/dist/motion.js +24 -1
  374. package/dist/motion.js.map +1 -1
  375. package/dist/primitives/AvatarGroup.cjs +8 -0
  376. package/dist/primitives/AvatarGroup.d.ts +2 -0
  377. package/dist/primitives/AvatarGroup.d.ts.map +1 -0
  378. package/dist/primitives/AvatarGroup.js +5 -0
  379. package/dist/primitives/AvatarGroup.js.map +1 -0
  380. package/dist/primitives/BannerAction.cjs +8 -0
  381. package/dist/primitives/BannerAction.d.ts +2 -0
  382. package/dist/primitives/BannerAction.d.ts.map +1 -0
  383. package/dist/primitives/BannerAction.js +5 -0
  384. package/dist/primitives/BannerAction.js.map +1 -0
  385. package/dist/primitives/ButtonGroup.cjs +8 -0
  386. package/dist/primitives/ButtonGroup.d.ts +2 -0
  387. package/dist/primitives/ButtonGroup.d.ts.map +1 -0
  388. package/dist/primitives/ButtonGroup.js +5 -0
  389. package/dist/primitives/ButtonGroup.js.map +1 -0
  390. package/dist/primitives/ButtonGroupContext.cjs +8 -0
  391. package/dist/primitives/ButtonGroupContext.d.ts +2 -0
  392. package/dist/primitives/ButtonGroupContext.d.ts.map +1 -0
  393. package/dist/primitives/ButtonGroupContext.js +5 -0
  394. package/dist/primitives/ButtonGroupContext.js.map +1 -0
  395. package/dist/primitives/CalloutAction.cjs +8 -0
  396. package/dist/primitives/CalloutAction.d.ts +2 -0
  397. package/dist/primitives/CalloutAction.d.ts.map +1 -0
  398. package/dist/primitives/CalloutAction.js +5 -0
  399. package/dist/primitives/CalloutAction.js.map +1 -0
  400. package/dist/primitives/Chip.cjs +8 -0
  401. package/dist/primitives/Chip.d.ts +2 -0
  402. package/dist/primitives/Chip.d.ts.map +1 -0
  403. package/dist/primitives/Chip.js +5 -0
  404. package/dist/primitives/Chip.js.map +1 -0
  405. package/dist/primitives/ColorSample.cjs +8 -0
  406. package/dist/primitives/ColorSample.d.ts +2 -0
  407. package/dist/primitives/ColorSample.d.ts.map +1 -0
  408. package/dist/primitives/ColorSample.js +5 -0
  409. package/dist/primitives/ColorSample.js.map +1 -0
  410. package/dist/primitives/CountrySelect.cjs +8 -0
  411. package/dist/primitives/CountrySelect.d.ts +2 -0
  412. package/dist/primitives/CountrySelect.d.ts.map +1 -0
  413. package/dist/primitives/CountrySelect.js +5 -0
  414. package/dist/primitives/CountrySelect.js.map +1 -0
  415. package/dist/primitives/CurrencyPicker.cjs +8 -0
  416. package/dist/primitives/CurrencyPicker.d.ts +2 -0
  417. package/dist/primitives/CurrencyPicker.d.ts.map +1 -0
  418. package/dist/primitives/CurrencyPicker.js +5 -0
  419. package/dist/primitives/CurrencyPicker.js.map +1 -0
  420. package/dist/primitives/Density.cjs +8 -0
  421. package/dist/primitives/Density.d.ts +2 -0
  422. package/dist/primitives/Density.d.ts.map +1 -0
  423. package/dist/primitives/Density.js +5 -0
  424. package/dist/primitives/Density.js.map +1 -0
  425. package/dist/primitives/DialogBody.cjs +8 -0
  426. package/dist/primitives/DialogBody.d.ts +2 -0
  427. package/dist/primitives/DialogBody.d.ts.map +1 -0
  428. package/dist/primitives/DialogBody.js +5 -0
  429. package/dist/primitives/DialogBody.js.map +1 -0
  430. package/dist/primitives/DropdownMenuBack.cjs +8 -0
  431. package/dist/primitives/DropdownMenuBack.d.ts +2 -0
  432. package/dist/primitives/DropdownMenuBack.d.ts.map +1 -0
  433. package/dist/primitives/DropdownMenuBack.js +5 -0
  434. package/dist/primitives/DropdownMenuBack.js.map +1 -0
  435. package/dist/primitives/DropdownMenuClose.cjs +8 -0
  436. package/dist/primitives/DropdownMenuClose.d.ts +2 -0
  437. package/dist/primitives/DropdownMenuClose.d.ts.map +1 -0
  438. package/dist/primitives/DropdownMenuClose.js +5 -0
  439. package/dist/primitives/DropdownMenuClose.js.map +1 -0
  440. package/dist/primitives/DropdownMenuEmpty.cjs +8 -0
  441. package/dist/primitives/DropdownMenuEmpty.d.ts +2 -0
  442. package/dist/primitives/DropdownMenuEmpty.d.ts.map +1 -0
  443. package/dist/primitives/DropdownMenuEmpty.js +5 -0
  444. package/dist/primitives/DropdownMenuEmpty.js.map +1 -0
  445. package/dist/primitives/DropdownMenuHeader.cjs +8 -0
  446. package/dist/primitives/DropdownMenuHeader.d.ts +2 -0
  447. package/dist/primitives/DropdownMenuHeader.d.ts.map +1 -0
  448. package/dist/primitives/DropdownMenuHeader.js +5 -0
  449. package/dist/primitives/DropdownMenuHeader.js.map +1 -0
  450. package/dist/primitives/DropdownMenuLoading.cjs +8 -0
  451. package/dist/primitives/DropdownMenuLoading.d.ts +2 -0
  452. package/dist/primitives/DropdownMenuLoading.d.ts.map +1 -0
  453. package/dist/primitives/DropdownMenuLoading.js +5 -0
  454. package/dist/primitives/DropdownMenuLoading.js.map +1 -0
  455. package/dist/primitives/DropdownMenuOptionItem.cjs +8 -0
  456. package/dist/primitives/DropdownMenuOptionItem.d.ts +2 -0
  457. package/dist/primitives/DropdownMenuOptionItem.d.ts.map +1 -0
  458. package/dist/primitives/DropdownMenuOptionItem.js +5 -0
  459. package/dist/primitives/DropdownMenuOptionItem.js.map +1 -0
  460. package/dist/primitives/DropdownMenuPage.cjs +8 -0
  461. package/dist/primitives/DropdownMenuPage.d.ts +2 -0
  462. package/dist/primitives/DropdownMenuPage.d.ts.map +1 -0
  463. package/dist/primitives/DropdownMenuPage.js +5 -0
  464. package/dist/primitives/DropdownMenuPage.js.map +1 -0
  465. package/dist/primitives/DropdownMenuSearch.cjs +8 -0
  466. package/dist/primitives/DropdownMenuSearch.d.ts +2 -0
  467. package/dist/primitives/DropdownMenuSearch.d.ts.map +1 -0
  468. package/dist/primitives/DropdownMenuSearch.js +5 -0
  469. package/dist/primitives/DropdownMenuSearch.js.map +1 -0
  470. package/dist/primitives/DropdownMenuSection.cjs +8 -0
  471. package/dist/primitives/DropdownMenuSection.d.ts +2 -0
  472. package/dist/primitives/DropdownMenuSection.d.ts.map +1 -0
  473. package/dist/primitives/DropdownMenuSection.js +5 -0
  474. package/dist/primitives/DropdownMenuSection.js.map +1 -0
  475. package/dist/primitives/DropdownMenuSelectionGroup.cjs +8 -0
  476. package/dist/primitives/DropdownMenuSelectionGroup.d.ts +2 -0
  477. package/dist/primitives/DropdownMenuSelectionGroup.d.ts.map +1 -0
  478. package/dist/primitives/DropdownMenuSelectionGroup.js +5 -0
  479. package/dist/primitives/DropdownMenuSelectionGroup.js.map +1 -0
  480. package/dist/primitives/DropdownMenuTitle.cjs +8 -0
  481. package/dist/primitives/DropdownMenuTitle.d.ts +2 -0
  482. package/dist/primitives/DropdownMenuTitle.d.ts.map +1 -0
  483. package/dist/primitives/DropdownMenuTitle.js +5 -0
  484. package/dist/primitives/DropdownMenuTitle.js.map +1 -0
  485. package/dist/primitives/Heading.cjs +2 -2
  486. package/dist/primitives/Heading.d.ts +1 -1
  487. package/dist/primitives/Heading.d.ts.map +1 -1
  488. package/dist/primitives/Heading.js +1 -1
  489. package/dist/primitives/Heading.js.map +1 -1
  490. package/dist/primitives/IconTile.cjs +8 -0
  491. package/dist/primitives/IconTile.d.ts +2 -0
  492. package/dist/primitives/IconTile.d.ts.map +1 -0
  493. package/dist/primitives/IconTile.js +5 -0
  494. package/dist/primitives/IconTile.js.map +1 -0
  495. package/dist/primitives/ImageInput.cjs +8 -0
  496. package/dist/primitives/ImageInput.d.ts +2 -0
  497. package/dist/primitives/ImageInput.d.ts.map +1 -0
  498. package/dist/primitives/ImageInput.js +5 -0
  499. package/dist/primitives/ImageInput.js.map +1 -0
  500. package/dist/primitives/InputGroup.cjs +8 -0
  501. package/dist/primitives/InputGroup.d.ts +2 -0
  502. package/dist/primitives/InputGroup.d.ts.map +1 -0
  503. package/dist/primitives/InputGroup.js +5 -0
  504. package/dist/primitives/InputGroup.js.map +1 -0
  505. package/dist/primitives/NumberField.cjs +8 -0
  506. package/dist/primitives/NumberField.d.ts +2 -0
  507. package/dist/primitives/NumberField.d.ts.map +1 -0
  508. package/dist/primitives/NumberField.js +5 -0
  509. package/dist/primitives/NumberField.js.map +1 -0
  510. package/dist/primitives/OverflowingList.cjs +8 -0
  511. package/dist/primitives/OverflowingList.d.ts +2 -0
  512. package/dist/primitives/OverflowingList.d.ts.map +1 -0
  513. package/dist/primitives/OverflowingList.js +5 -0
  514. package/dist/primitives/OverflowingList.js.map +1 -0
  515. package/dist/primitives/PhoneCountryPicker.cjs +8 -0
  516. package/dist/primitives/PhoneCountryPicker.d.ts +2 -0
  517. package/dist/primitives/PhoneCountryPicker.d.ts.map +1 -0
  518. package/dist/primitives/PhoneCountryPicker.js +5 -0
  519. package/dist/primitives/PhoneCountryPicker.js.map +1 -0
  520. package/dist/primitives/ProgressRing.cjs +8 -0
  521. package/dist/primitives/ProgressRing.d.ts +2 -0
  522. package/dist/primitives/ProgressRing.d.ts.map +1 -0
  523. package/dist/primitives/ProgressRing.js +5 -0
  524. package/dist/primitives/ProgressRing.js.map +1 -0
  525. package/dist/primitives/RadioCircle.cjs +8 -0
  526. package/dist/primitives/RadioCircle.d.ts +2 -0
  527. package/dist/primitives/RadioCircle.d.ts.map +1 -0
  528. package/dist/primitives/RadioCircle.js +5 -0
  529. package/dist/primitives/RadioCircle.js.map +1 -0
  530. package/dist/primitives/SKELETON_HEIGHT.cjs +8 -0
  531. package/dist/primitives/SKELETON_HEIGHT.d.ts +2 -0
  532. package/dist/primitives/SKELETON_HEIGHT.d.ts.map +1 -0
  533. package/dist/primitives/SKELETON_HEIGHT.js +5 -0
  534. package/dist/primitives/SKELETON_HEIGHT.js.map +1 -0
  535. package/dist/primitives/STATUS_COLOR.cjs +8 -0
  536. package/dist/primitives/STATUS_COLOR.d.ts +2 -0
  537. package/dist/primitives/STATUS_COLOR.d.ts.map +1 -0
  538. package/dist/primitives/STATUS_COLOR.js +5 -0
  539. package/dist/primitives/STATUS_COLOR.js.map +1 -0
  540. package/dist/primitives/STATUS_HUE.cjs +8 -0
  541. package/dist/primitives/STATUS_HUE.d.ts +2 -0
  542. package/dist/primitives/STATUS_HUE.d.ts.map +1 -0
  543. package/dist/primitives/STATUS_HUE.js +5 -0
  544. package/dist/primitives/STATUS_HUE.js.map +1 -0
  545. package/dist/primitives/STATUS_PAINT.cjs +8 -0
  546. package/dist/primitives/STATUS_PAINT.d.ts +2 -0
  547. package/dist/primitives/STATUS_PAINT.d.ts.map +1 -0
  548. package/dist/primitives/STATUS_PAINT.js +5 -0
  549. package/dist/primitives/STATUS_PAINT.js.map +1 -0
  550. package/dist/primitives/Shortcut.cjs +8 -0
  551. package/dist/primitives/Shortcut.d.ts +2 -0
  552. package/dist/primitives/Shortcut.d.ts.map +1 -0
  553. package/dist/primitives/Shortcut.js +5 -0
  554. package/dist/primitives/Shortcut.js.map +1 -0
  555. package/dist/primitives/StackIcon.cjs +8 -0
  556. package/dist/primitives/StackIcon.d.ts +2 -0
  557. package/dist/primitives/StackIcon.d.ts.map +1 -0
  558. package/dist/primitives/StackIcon.js +5 -0
  559. package/dist/primitives/StackIcon.js.map +1 -0
  560. package/dist/primitives/TOAST_DURATION.cjs +8 -0
  561. package/dist/primitives/TOAST_DURATION.d.ts +2 -0
  562. package/dist/primitives/TOAST_DURATION.d.ts.map +1 -0
  563. package/dist/primitives/TOAST_DURATION.js +5 -0
  564. package/dist/primitives/TOAST_DURATION.js.map +1 -0
  565. package/dist/primitives/Tag.cjs +8 -0
  566. package/dist/primitives/Tag.d.ts +2 -0
  567. package/dist/primitives/Tag.d.ts.map +1 -0
  568. package/dist/primitives/Tag.js +5 -0
  569. package/dist/primitives/Tag.js.map +1 -0
  570. package/dist/primitives/ToastCard.cjs +8 -0
  571. package/dist/primitives/ToastCard.d.ts +2 -0
  572. package/dist/primitives/ToastCard.d.ts.map +1 -0
  573. package/dist/primitives/ToastCard.js +5 -0
  574. package/dist/primitives/ToastCard.js.map +1 -0
  575. package/dist/primitives/ToastFace.cjs +8 -0
  576. package/dist/primitives/ToastFace.d.ts +2 -0
  577. package/dist/primitives/ToastFace.d.ts.map +1 -0
  578. package/dist/primitives/ToastFace.js +5 -0
  579. package/dist/primitives/ToastFace.js.map +1 -0
  580. package/dist/primitives/TruncatedText.cjs +8 -0
  581. package/dist/primitives/TruncatedText.d.ts +2 -0
  582. package/dist/primitives/TruncatedText.d.ts.map +1 -0
  583. package/dist/primitives/TruncatedText.js +5 -0
  584. package/dist/primitives/TruncatedText.js.map +1 -0
  585. package/dist/primitives/TruncatedTextProvider.cjs +8 -0
  586. package/dist/primitives/TruncatedTextProvider.d.ts +2 -0
  587. package/dist/primitives/TruncatedTextProvider.d.ts.map +1 -0
  588. package/dist/primitives/TruncatedTextProvider.js +5 -0
  589. package/dist/primitives/TruncatedTextProvider.js.map +1 -0
  590. package/dist/primitives/VisuallyHidden.cjs +8 -0
  591. package/dist/primitives/VisuallyHidden.d.ts +2 -0
  592. package/dist/primitives/VisuallyHidden.d.ts.map +1 -0
  593. package/dist/primitives/VisuallyHidden.js +5 -0
  594. package/dist/primitives/VisuallyHidden.js.map +1 -0
  595. package/dist/primitives/fieldSize.cjs +8 -0
  596. package/dist/primitives/fieldSize.d.ts +2 -0
  597. package/dist/primitives/fieldSize.d.ts.map +1 -0
  598. package/dist/primitives/fieldSize.js +5 -0
  599. package/dist/primitives/fieldSize.js.map +1 -0
  600. package/dist/primitives/flag.cjs +8 -0
  601. package/dist/primitives/flag.d.ts +2 -0
  602. package/dist/primitives/flag.d.ts.map +1 -0
  603. package/dist/primitives/flag.js +5 -0
  604. package/dist/primitives/flag.js.map +1 -0
  605. package/dist/primitives/formatShortcut.cjs +8 -0
  606. package/dist/primitives/formatShortcut.d.ts +2 -0
  607. package/dist/primitives/formatShortcut.d.ts.map +1 -0
  608. package/dist/primitives/formatShortcut.js +5 -0
  609. package/dist/primitives/formatShortcut.js.map +1 -0
  610. package/dist/primitives/initialOf.cjs +8 -0
  611. package/dist/primitives/initialOf.d.ts +2 -0
  612. package/dist/primitives/initialOf.d.ts.map +1 -0
  613. package/dist/primitives/initialOf.js +5 -0
  614. package/dist/primitives/initialOf.js.map +1 -0
  615. package/dist/primitives/parseNumber.cjs +8 -0
  616. package/dist/primitives/parseNumber.d.ts +2 -0
  617. package/dist/primitives/parseNumber.d.ts.map +1 -0
  618. package/dist/primitives/parseNumber.js +5 -0
  619. package/dist/primitives/parseNumber.js.map +1 -0
  620. package/dist/primitives/speakShortcut.cjs +8 -0
  621. package/dist/primitives/speakShortcut.d.ts +2 -0
  622. package/dist/primitives/speakShortcut.d.ts.map +1 -0
  623. package/dist/primitives/speakShortcut.js +5 -0
  624. package/dist/primitives/speakShortcut.js.map +1 -0
  625. package/dist/primitives/tileTones.cjs +8 -0
  626. package/dist/primitives/tileTones.d.ts +2 -0
  627. package/dist/primitives/tileTones.d.ts.map +1 -0
  628. package/dist/primitives/tileTones.js +5 -0
  629. package/dist/primitives/tileTones.js.map +1 -0
  630. package/dist/primitives/useDensity.cjs +8 -0
  631. package/dist/primitives/useDensity.d.ts +2 -0
  632. package/dist/primitives/useDensity.d.ts.map +1 -0
  633. package/dist/primitives/useDensity.js +5 -0
  634. package/dist/primitives/useDensity.js.map +1 -0
  635. package/dist/primitives/useField.cjs +8 -0
  636. package/dist/primitives/useField.d.ts +2 -0
  637. package/dist/primitives/useField.d.ts.map +1 -0
  638. package/dist/primitives/useField.js +5 -0
  639. package/dist/primitives/useField.js.map +1 -0
  640. package/dist/product/ComboBox.cjs +25 -7
  641. package/dist/product/ComboBox.d.ts +3 -1
  642. package/dist/product/ComboBox.d.ts.map +1 -1
  643. package/dist/product/ComboBox.js +25 -7
  644. package/dist/product/ComboBox.js.map +1 -1
  645. package/dist/product/CommandMenu.cjs +137 -0
  646. package/dist/product/CommandMenu.d.ts +77 -0
  647. package/dist/product/CommandMenu.d.ts.map +1 -0
  648. package/dist/product/CommandMenu.js +134 -0
  649. package/dist/product/CommandMenu.js.map +1 -0
  650. package/dist/product/DetailPane.cjs +154 -12
  651. package/dist/product/DetailPane.d.ts +80 -2
  652. package/dist/product/DetailPane.d.ts.map +1 -1
  653. package/dist/product/DetailPane.js +153 -16
  654. package/dist/product/DetailPane.js.map +1 -1
  655. package/dist/product/Fact.cjs +6 -1
  656. package/dist/product/Fact.d.ts +16 -1
  657. package/dist/product/Fact.d.ts.map +1 -1
  658. package/dist/product/Fact.js +6 -1
  659. package/dist/product/Fact.js.map +1 -1
  660. package/dist/product/Field.cjs +14 -2
  661. package/dist/product/Field.d.ts +16 -1
  662. package/dist/product/Field.d.ts.map +1 -1
  663. package/dist/product/Field.js +14 -2
  664. package/dist/product/Field.js.map +1 -1
  665. package/dist/product/Filters.cjs +61 -9
  666. package/dist/product/Filters.d.ts +37 -6
  667. package/dist/product/Filters.d.ts.map +1 -1
  668. package/dist/product/Filters.js +62 -10
  669. package/dist/product/Filters.js.map +1 -1
  670. package/dist/product/MenuRow.cjs +81 -2
  671. package/dist/product/MenuRow.d.ts +76 -6
  672. package/dist/product/MenuRow.d.ts.map +1 -1
  673. package/dist/product/MenuRow.js +81 -4
  674. package/dist/product/MenuRow.js.map +1 -1
  675. package/dist/product/PrimaryButton.cjs +5 -1
  676. package/dist/product/PrimaryButton.d.ts +8 -0
  677. package/dist/product/PrimaryButton.d.ts.map +1 -1
  678. package/dist/product/PrimaryButton.js +5 -1
  679. package/dist/product/PrimaryButton.js.map +1 -1
  680. package/dist/product/Skeleton.cjs +7 -6
  681. package/dist/product/Skeleton.d.ts +3 -20
  682. package/dist/product/Skeleton.d.ts.map +1 -1
  683. package/dist/product/Skeleton.js +8 -7
  684. package/dist/product/Skeleton.js.map +1 -1
  685. package/dist/product/index.cjs +2 -0
  686. package/dist/product/index.d.ts +1 -0
  687. package/dist/product/index.d.ts.map +1 -1
  688. package/dist/product/index.js +2 -0
  689. package/dist/product/index.js.map +1 -1
  690. package/dist/settings/Section.cjs +11 -2
  691. package/dist/settings/Section.d.ts +8 -1
  692. package/dist/settings/Section.d.ts.map +1 -1
  693. package/dist/settings/Section.js +11 -2
  694. package/dist/settings/Section.js.map +1 -1
  695. package/dist/styles/motion.css +70 -0
  696. package/dist/styles.css +1460 -127
  697. package/dist/theme.css +944 -0
  698. package/package.json +2 -1
@@ -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":"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"}
@@ -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"}
@@ -1,11 +1,42 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Box } from '../../box.js';
4
- import { cn } from '../../core/cn.js';
5
- export const Skeleton = ({ className, ...props }) => (_jsx(Box
6
- // Announced as busy so a screen reader says "loading" rather than reading
7
- // out an empty box, or nothing at all. A boolean, not the string "true":
8
- // gui types the ARIA states as booleans and React writes the attribute out
9
- // either way.
10
- , { "aria-busy": true, "aria-live": "polite", "data-motion": "pulse", className: cn('rounded-md bg-muted', className), ...props }));
3
+ /**
4
+ * Skeleton — the shape of content that has not arrived. ONE implementation:
5
+ * `@hanzo/ui`'s `Skeleton` is this, and `@hanzo/ui/product`'s `Skeleton` (with
6
+ * `Skeleton.Text`) is this with its own defaults.
7
+ *
8
+ * It is a box with a highlight sweeping across it and nothing else, so the SIZE
9
+ * is the caller's to state and should match what will land there. A skeleton
10
+ * that is not the size of its content is worse than none: the page reflows when
11
+ * the real thing appears, which is the jump the skeleton existed to prevent.
12
+ *
13
+ * After twenty-ui's Skeleton (MIT, NOTICE): the base is the hover rung, the
14
+ * highlight a faint glass band, 4px corners, a 1.5s sweep (`--duration-loop`,
15
+ * stopped under reduced motion), height presets xs 13 / s 16 / m 24 / l 32 /
16
+ * xl 40, and two layouts — `inline` takes a line box of the text around it
17
+ * (it holds a zero-width non-joiner, so it is a line tall with no height
18
+ * given), `block` is a box of its own. The highlight is `--glass` rather than
19
+ * the panel rung: twenty-ui's is 2% black on light and 3% white on dark, and
20
+ * the panel rung is a SOLID step that sits darker than the hover rung in the
21
+ * dark theme, which would sweep a shadow instead of a light.
22
+ *
23
+ * Hidden from assistive technology: a placeholder is scenery, and the content
24
+ * is what should be read when it lands.
25
+ *
26
+ * Class notation is still read (`<Skeleton className="h-4 w-32" />`), the way
27
+ * `Box` reads it, so call sites written against the Box version keep their
28
+ * sizes; a class it does not know stays a class.
29
+ */
30
+ import { SizableText, YStack } from '@hanzo/gui';
31
+ import { tw } from '../../tw.js';
32
+ import { slot } from './slot.js';
33
+ /** The height presets, px. */
34
+ export const SKELETON_HEIGHT = { xs: 13, s: 16, m: 24, l: 32, xl: 40 };
35
+ /** The band that sweeps: transparent, the glass light, transparent. */
36
+ const BAND = 'linear-gradient(90deg, transparent 0%, var(--glass, rgba(128, 128, 128, 0.08)) 50%, transparent 100%)';
37
+ export function Skeleton({ size, layout = 'inline', animated = true, className, ...props }) {
38
+ const { props: read, rest } = tw(className);
39
+ const height = size ? SKELETON_HEIGHT[size] : layout === 'block' ? '1em' : undefined;
40
+ return (_jsx(YStack, { ...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) ? (_jsx(SizableText, { size: "$2", "aria-hidden": true, children: '‌' })) : null }));
41
+ }
11
42
  //# sourceMappingURL=skeleton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAYZ,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAElC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoC,EAAE,EAAE,CAAC,CACrF,KAAC,GAAG;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,cAAc;iBACH,IAAI,eACL,QAAQ,iBACN,OAAO,EACnB,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,KAC3C,KAAK,GACT,CACH,CAAA"}
1
+ {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,EAAE,EAAmB,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,8BAA8B;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAW,CAAA;AAc/E,uEAAuE;AACvE,MAAM,IAAI,GAAG,uGAAuG,CAAA;AAEpH,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiB;IACvG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IACpF,OAAO,CACL,KAAC,MAAM,OACD,IAAI,CAAC,UAAU,CAAC,sCAEP,MAAM,iBAGN,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC7C,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,EACrD,KAAK,EAAC,MAAM,KACR,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAC9C,OAAO,EAAC,KAAK,EACb,EAAE,EAAC,QAAQ,EACX,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC5C,cAAc,EAAC,YAAY,EAC3B,gBAAgB,EAAC,WAAW,EAC5B,QAAQ,EAAC,QAAQ,KACZ,IAAe,KAChB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KACnC,KAAK,YAER,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAC5F,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,iCACnB,GAAG,GACQ,CACf,CAAC,CAAC,CAAC,IAAI,GACD,CACV,CAAA;AACH,CAAC"}
@@ -17,6 +17,13 @@ const jsx_runtime_1 = require("react/jsx-runtime");
17
17
  * no syntax highlighter, the same constraint `code-block.tsx` documents.
18
18
  * `theme` names a fixed palette for the code surface, independent of the
19
19
  * page's own light or dark theme; `size` picks the type scale.
20
+ *
21
+ * `variant="command"` is the record kit's command block (twenty-ui's
22
+ * CommandBlock, MIT — NOTICE): shell lines on the panel ground, 1px hairline,
23
+ * 4px corners, 12px padding, each line led by a "> " the reader does not copy
24
+ * or hear, wrapping anywhere, with `actions` (the copy button by default) 12px
25
+ * from the text and never shrinking. It follows the page's theme rather than a
26
+ * fixed palette, since it sits in settings and setup pages beside other chrome.
20
27
  */
21
28
  const gui_1 = require("@hanzo/gui");
22
29
  const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
@@ -99,7 +106,7 @@ function CopyButton({ copied, onPress, muted, floating, }) {
99
106
  * copy button. `expandable` clamps the body to `collapsedHeight` until its
100
107
  * maximize control is pressed.
101
108
  */
102
- function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, ...props }) {
109
+ function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, actions, ...props }) {
103
110
  const resolvedVariant = variant ?? 'default';
104
111
  const palette = PALETTE[theme ?? 'dark'];
105
112
  const fontSize = FONT_SIZE[size ?? 'default'];
@@ -117,6 +124,10 @@ function Snippet({ code, language = 'text', filename, variant, theme, size, show
117
124
  // No clipboard permission or no clipboard API — nothing else to do.
118
125
  }
119
126
  }, [code]);
127
+ if (resolvedVariant === 'command') {
128
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('snippet'), "data-variant": "command", items: "flex-start", justify: "space-between", gap: "$3", p: "$3", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$xs", ...props, children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('snippet-body'), flex: 1, minW: 0, children: code.split('\n').map((line, i) => ((0, jsx_runtime_1.jsxs)(Mono, { "data-slot": "snippet-line", size: "$2", color: "$ink", style: { whiteSpace: 'pre-wrap', wordBreak: 'break-all' }, children: [(0, jsx_runtime_1.jsx)(Mono, { "aria-hidden": true, color: "$codeNumber", select: "none", children: '> ' }), line] }, i))) }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('snippet-actions'), shrink: 0, items: "center", gap: "$2", children: actions ??
129
+ (showCopyButton ? (0, jsx_runtime_1.jsx)(CopyButton, { copied: copied, onPress: copy, muted: '$hint' }) : null) })] }));
130
+ }
120
131
  if (resolvedVariant === 'inline') {
121
132
  return ((0, jsx_runtime_1.jsx)(Mono, { ...(0, slot_1.slot)('snippet'), "data-variant": "inline", fontFamily: "$mono", rounded: "$2", px: "$2", py: "$1", wrap: wrapLines, style: {
122
133
  display: 'inline-block',
@@ -1,5 +1,5 @@
1
1
  import { type ComponentProps, type ReactNode } from 'react';
2
- export type SnippetVariant = 'default' | 'inline' | 'minimal';
2
+ export type SnippetVariant = 'default' | 'inline' | 'minimal' | 'command';
3
3
  export type SnippetTheme = 'dark' | 'light' | 'github' | 'github-dark' | 'terminal' | 'retro';
4
4
  export type SnippetSize = 'xs' | 'sm' | 'default' | 'lg';
5
5
  export interface SnippetProps extends Omit<ComponentProps<'div'>, 'children'> {
@@ -21,6 +21,8 @@ export interface SnippetProps extends Omit<ComponentProps<'div'>, 'children'> {
21
21
  collapsedHeight?: number | string;
22
22
  wrapLines?: boolean;
23
23
  startLineNumber?: number;
24
+ /** `command`: the controls beside the lines; the copy button unless given. */
25
+ actions?: ReactNode;
24
26
  }
25
27
  /**
26
28
  * A syntax-plain code panel: `variant="default"` shows a header and a gutter
@@ -29,7 +31,7 @@ export interface SnippetProps extends Omit<ComponentProps<'div'>, 'children'> {
29
31
  * copy button. `expandable` clamps the body to `collapsedHeight` until its
30
32
  * maximize control is pressed.
31
33
  */
32
- export declare function Snippet({ code, language, filename, variant, theme, size, showLineNumbers, highlightLines, showCopyButton, showLanguageBadge, showHeader, maxHeight, expandable, collapsedHeight, wrapLines, startLineNumber, ...props }: SnippetProps): import("react").JSX.Element;
34
+ export declare function Snippet({ code, language, filename, variant, theme, size, showLineNumbers, highlightLines, showCopyButton, showLanguageBadge, showHeader, maxHeight, expandable, collapsedHeight, wrapLines, startLineNumber, actions, ...props }: SnippetProps): import("react").JSX.Element;
33
35
  export interface InlineCodeProps extends Omit<SnippetProps, 'variant' | 'code'> {
34
36
  children: string;
35
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAkC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK3F,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE7D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAA;AAE7F,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;AAiBxD,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AA6FD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,QAAiB,EACjB,QAAQ,EACR,OAAO,EACP,KAAK,EACL,IAAI,EACJ,eAAuB,EACvB,cAAmB,EACnB,cAAqB,EACrB,iBAAwB,EACxB,UAAiB,EACjB,SAAS,EACT,UAAkB,EAClB,eAAqB,EACrB,SAAiB,EACjB,eAAmB,EACnB,GAAG,KAAK,EACT,EAAE,YAAY,+BAkKd;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7E,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,GAAG,SAAS,CAYvF"}
1
+ {"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAAkC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK3F,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;AAEzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAA;AAE7F,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;AAiBxD,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AA6FD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,QAAiB,EACjB,QAAQ,EACR,OAAO,EACP,KAAK,EACL,IAAI,EACJ,eAAuB,EACvB,cAAmB,EACnB,cAAqB,EACrB,iBAAwB,EACxB,UAAiB,EACjB,SAAS,EACT,UAAkB,EAClB,eAAqB,EACrB,SAAiB,EACjB,eAAmB,EACnB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,YAAY,+BAyMd;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7E,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,GAAG,SAAS,CAYvF"}
@@ -13,6 +13,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  * no syntax highlighter, the same constraint `code-block.tsx` documents.
14
14
  * `theme` names a fixed palette for the code surface, independent of the
15
15
  * page's own light or dark theme; `size` picks the type scale.
16
+ *
17
+ * `variant="command"` is the record kit's command block (twenty-ui's
18
+ * CommandBlock, MIT — NOTICE): shell lines on the panel ground, 1px hairline,
19
+ * 4px corners, 12px padding, each line led by a "> " the reader does not copy
20
+ * or hear, wrapping anywhere, with `actions` (the copy button by default) 12px
21
+ * from the text and never shrinking. It follows the page's theme rather than a
22
+ * fixed palette, since it sits in settings and setup pages beside other chrome.
16
23
  */
17
24
  import { SizableText, XStack, YStack, styled } from '@hanzo/gui';
18
25
  import { Check, Copy, FileText, Maximize2, Minimize2 } from '@hanzogui/lucide-icons-2';
@@ -95,7 +102,7 @@ function CopyButton({ copied, onPress, muted, floating, }) {
95
102
  * copy button. `expandable` clamps the body to `collapsedHeight` until its
96
103
  * maximize control is pressed.
97
104
  */
98
- export function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, ...props }) {
105
+ export function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, actions, ...props }) {
99
106
  const resolvedVariant = variant ?? 'default';
100
107
  const palette = PALETTE[theme ?? 'dark'];
101
108
  const fontSize = FONT_SIZE[size ?? 'default'];
@@ -113,6 +120,10 @@ export function Snippet({ code, language = 'text', filename, variant, theme, siz
113
120
  // No clipboard permission or no clipboard API — nothing else to do.
114
121
  }
115
122
  }, [code]);
123
+ if (resolvedVariant === 'command') {
124
+ return (_jsxs(XStack, { ...slot('snippet'), "data-variant": "command", items: "flex-start", justify: "space-between", gap: "$3", p: "$3", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$xs", ...props, children: [_jsx(YStack, { ...slot('snippet-body'), flex: 1, minW: 0, children: code.split('\n').map((line, i) => (_jsxs(Mono, { "data-slot": "snippet-line", size: "$2", color: "$ink", style: { whiteSpace: 'pre-wrap', wordBreak: 'break-all' }, children: [_jsx(Mono, { "aria-hidden": true, color: "$codeNumber", select: "none", children: '> ' }), line] }, i))) }), _jsx(XStack, { ...slot('snippet-actions'), shrink: 0, items: "center", gap: "$2", children: actions ??
125
+ (showCopyButton ? _jsx(CopyButton, { copied: copied, onPress: copy, muted: '$hint' }) : null) })] }));
126
+ }
116
127
  if (resolvedVariant === 'inline') {
117
128
  return (_jsx(Mono, { ...slot('snippet'), "data-variant": "inline", fontFamily: "$mono", rounded: "$2", px: "$2", py: "$1", wrap: wrapLines, style: {
118
129
  display: 'inline-block',
@@ -1 +1 @@
1
- {"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"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"}
@@ -21,10 +21,17 @@ const jsx_runtime_1 = require("react/jsx-runtime");
21
21
  *
22
22
  * `aria-hidden`, because a spinner is never the message: the thing that is
23
23
  * loading says so in text beside it.
24
+ *
25
+ * `variant="dot"` is the record kit's loader (twenty-ui's Loader, MIT — NOTICE):
26
+ * a 24×12 pill outline with an 8px dot that travels across it and squashes as
27
+ * it lands, 0.8s a loop (`data-motion="hop"` in styles/motion.css, stopped under
28
+ * reduced motion). It is the quieter one, for a status pill, a button that is
29
+ * busy or a list fetching more; the arc stays the default everywhere else. Both
30
+ * take the surrounding ink unless given a colour.
24
31
  */
25
32
  const gui_1 = require("@hanzo/gui");
26
33
  const slot_1 = require("./slot.cjs");
27
- const Spinner = ({ size = 16, color = 'currentColor', ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.Spinner, { ...(0, slot_1.slot)('spinner'), "aria-hidden": true,
34
+ const Spinner = ({ size = 16, color = 'currentColor', variant = 'arc', ...props }) => variant === 'dot' ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('spinner'), "data-variant": "dot", "aria-hidden": true, width: 24, height: 12, shrink: 0, rounded: "$10", borderWidth: 1, borderColor: color, overflow: "hidden", items: "center", justify: "center", ...props, children: (0, jsx_runtime_1.jsx)(gui_1.View, { "data-motion": "hop", width: 8, height: 8, rounded: "$10", bg: color }) })) : ((0, jsx_runtime_1.jsx)(gui_1.Spinner, { ...(0, slot_1.slot)('spinner'), "aria-hidden": true,
28
35
  // The enum is upstream's TYPE; a number is what the element reads.
29
36
  size: size, color: color, ...props }));
30
37
  exports.Spinner = Spinner;
@@ -16,15 +16,24 @@
16
16
  *
17
17
  * `aria-hidden`, because a spinner is never the message: the thing that is
18
18
  * loading says so in text beside it.
19
+ *
20
+ * `variant="dot"` is the record kit's loader (twenty-ui's Loader, MIT — NOTICE):
21
+ * a 24×12 pill outline with an 8px dot that travels across it and squashes as
22
+ * it lands, 0.8s a loop (`data-motion="hop"` in styles/motion.css, stopped under
23
+ * reduced motion). It is the quieter one, for a status pill, a button that is
24
+ * busy or a list fetching more; the arc stays the default everywhere else. Both
25
+ * take the surrounding ink unless given a colour.
19
26
  */
20
27
  import { Spinner as GuiSpinner } from '@hanzo/gui';
21
28
  import type { ComponentProps } from 'react';
22
29
  export type SpinnerProps = Omit<ComponentProps<typeof GuiSpinner>, 'size' | 'color'> & {
23
- /** Edge of the arc, px. */
30
+ /** Edge of the arc, px. The dot's pill is always 24×12. */
24
31
  size?: number;
25
32
  /** Ink. Inherits the surrounding text by default. */
26
33
  color?: string;
34
+ /** `arc` (default) or the travelling `dot`. */
35
+ variant?: 'arc' | 'dot';
27
36
  };
28
- declare const Spinner: ({ size, color, ...props }: SpinnerProps) => import("react").JSX.Element;
37
+ declare const Spinner: ({ size, color, variant, ...props }: SpinnerProps) => import("react").JSX.Element;
29
38
  export { Spinner };
30
39
  //# sourceMappingURL=spinner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3C,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IACrF,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,QAAA,MAAM,OAAO,8BAAqD,YAAY,gCAS7E,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAgB,MAAM,YAAY,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3C,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IACrF,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;CACxB,CAAA;AAED,QAAA,MAAM,OAAO,uCAAsE,YAAY,gCA4B5F,CAAA;AAEH,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -18,10 +18,17 @@ import { jsx as _jsx } from "react/jsx-runtime";
18
18
  *
19
19
  * `aria-hidden`, because a spinner is never the message: the thing that is
20
20
  * loading says so in text beside it.
21
+ *
22
+ * `variant="dot"` is the record kit's loader (twenty-ui's Loader, MIT — NOTICE):
23
+ * a 24×12 pill outline with an 8px dot that travels across it and squashes as
24
+ * it lands, 0.8s a loop (`data-motion="hop"` in styles/motion.css, stopped under
25
+ * reduced motion). It is the quieter one, for a status pill, a button that is
26
+ * busy or a list fetching more; the arc stays the default everywhere else. Both
27
+ * take the surrounding ink unless given a colour.
21
28
  */
22
- import { Spinner as GuiSpinner } from '@hanzo/gui';
29
+ import { Spinner as GuiSpinner, View, XStack } from '@hanzo/gui';
23
30
  import { slot } from './slot.js';
24
- const Spinner = ({ size = 16, color = 'currentColor', ...props }) => (_jsx(GuiSpinner, { ...slot('spinner'), "aria-hidden": true,
31
+ const Spinner = ({ size = 16, color = 'currentColor', variant = 'arc', ...props }) => variant === 'dot' ? (_jsx(XStack, { ...slot('spinner'), "data-variant": "dot", "aria-hidden": true, width: 24, height: 12, shrink: 0, rounded: "$10", borderWidth: 1, borderColor: color, overflow: "hidden", items: "center", justify: "center", ...props, children: _jsx(View, { "data-motion": "hop", width: 8, height: 8, rounded: "$10", bg: color }) })) : (_jsx(GuiSpinner, { ...slot('spinner'), "aria-hidden": true,
25
32
  // The enum is upstream's TYPE; a number is what the element reads.
26
33
  size: size, color: color, ...props }));
27
34
  export { Spinner };
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAS7B,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,cAAc,EAAE,GAAG,KAAK,EAAgB,EAAE,EAAE,CAAC,CACjF,KAAC,UAAU,OACL,IAAI,CAAC,SAAS,CAAC;IAEnB,mEAAmE;IACnE,IAAI,EAAE,IAA0B,EAChC,KAAK,EAAE,KAAK,KACR,KAAK,GACT,CACH,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAW7B,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,cAAc,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAgB,EAAE,EAAE,CACjG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAClB,KAAC,MAAM,OACD,IAAI,CAAC,SAAS,CAAC,kBACN,KAAK,uBAElB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,CAAC,EACT,OAAO,EAAC,KAAK,EACb,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,KAAc,EAC3B,QAAQ,EAAC,QAAQ,EACjB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,QAAQ,KACX,KAAgB,YAErB,KAAC,IAAI,mBAAa,KAAK,EAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAC,KAAK,EAAC,EAAE,EAAE,KAAc,GAAI,GAC1E,CACV,CAAC,CAAC,CAAC,CACJ,KAAC,UAAU,OACL,IAAI,CAAC,SAAS,CAAC;IAEnB,mEAAmE;IACnE,IAAI,EAAE,IAA0B,EAChC,KAAK,EAAE,KAAK,KACR,KAAK,GACT,CACD,CAAA;AAEH,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -0,0 +1,17 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.StackIcon = StackIcon;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * StackIcon — an icon with a smaller one pinned over its lower-right quadrant:
8
+ * a provider and its state, an app and its connection.
9
+ *
10
+ * Re-expressed from twenty-ui's StackIcon (MIT, see NOTICE): a 16px box, the
11
+ * stacked icon 8px from the left and 7px from the top. Both are decorative.
12
+ */
13
+ const gui_1 = require("@hanzo/gui");
14
+ const slot_1 = require("./slot.cjs");
15
+ function StackIcon({ icon, stackedIcon, ...props }) {
16
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('stack-icon'), "aria-hidden": true, position: "relative", width: 16, height: 16, shrink: 0, items: "center", justify: "center", ...props, children: [icon, (0, jsx_runtime_1.jsx)(gui_1.XStack, { position: "absolute", l: 8, t: 7, children: stackedIcon })] }));
17
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * StackIcon — an icon with a smaller one pinned over its lower-right quadrant:
3
+ * a provider and its state, an app and its connection.
4
+ *
5
+ * Re-expressed from twenty-ui's StackIcon (MIT, see NOTICE): a 16px box, the
6
+ * stacked icon 8px from the left and 7px from the top. Both are decorative.
7
+ */
8
+ import { XStack } from '@hanzo/gui';
9
+ import type { ComponentProps, ReactNode } from 'react';
10
+ export type StackIconProps = Omit<ComponentProps<typeof XStack>, 'children'> & {
11
+ icon: ReactNode;
12
+ stackedIcon: ReactNode;
13
+ };
14
+ export declare function StackIcon({ icon, stackedIcon, ...props }: StackIconProps): import("react").JSX.Element;
15
+ //# sourceMappingURL=stack-icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-icon.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/stack-icon.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAC7E,IAAI,EAAE,SAAS,CAAA;IACf,WAAW,EAAE,SAAS,CAAA;CACvB,CAAA;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BASxE"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * StackIcon — an icon with a smaller one pinned over its lower-right quadrant:
5
+ * a provider and its state, an app and its connection.
6
+ *
7
+ * Re-expressed from twenty-ui's StackIcon (MIT, see NOTICE): a 16px box, the
8
+ * stacked icon 8px from the left and 7px from the top. Both are decorative.
9
+ */
10
+ import { XStack } from '@hanzo/gui';
11
+ import { slot } from './slot.js';
12
+ export function StackIcon({ icon, stackedIcon, ...props }) {
13
+ return (_jsxs(XStack, { ...slot('stack-icon'), "aria-hidden": true, position: "relative", width: 16, height: 16, shrink: 0, items: "center", justify: "center", ...props, children: [icon, _jsx(XStack, { position: "absolute", l: 8, t: 7, children: stackedIcon })] }));
14
+ }
15
+ //# sourceMappingURL=stack-icon.js.map