@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
@@ -68,6 +68,17 @@ const jsx_runtime_1 = require("react/jsx-runtime");
68
68
  * draws instead of an outline.
69
69
  *
70
70
  * Moved here from @hanzo/build, where hanzo.ai's sidebar and asides used it.
71
+ *
72
+ * `bar` draws a handle a person can see before reaching for it (twenty-ui's
73
+ * ResizeHandle, MIT, NOTICE): a pill in the middle of the band, 4×48 on an edge
74
+ * (`edge`) or 3×32 between two panes (`inline`), the raised rung at rest, the
75
+ * soft one under the pointer, and the strong edge while it moves, lengthened by
76
+ * a fifth whenever it is reached for. A drag in progress is cancelled by Escape,
77
+ * which puts the box back where the drag found it. `step` sets the key's step.
78
+ *
79
+ * It is THE standalone resizer: the docked side panel's edge, a drawer's width
80
+ * and an editor's height are a Grip; `ResizableHandle` is the separator inside
81
+ * a `ResizablePanelGroup` and nothing else.
71
82
  */
72
83
  const gui_1 = require("@hanzo/gui");
73
84
  const React = __importStar(require("react"));
@@ -78,7 +89,7 @@ const LONG = 32;
78
89
  const SLACK = 48;
79
90
  /** The grab band's thickness, px; the line drawn inside it is 2. */
80
91
  const BAND = 8;
81
- function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut, label, ...rest }) {
92
+ function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut, label, bar, step: unit = STEP, ...rest }) {
82
93
  const tall = side === 'top';
83
94
  /** +1 when the pointer moving away from the pinned edge grows the box. */
84
95
  const grows = side === 'right' ? -1 : 1;
@@ -89,6 +100,8 @@ function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut,
89
100
  // keeps nothing.
90
101
  const drag = React.useRef('none');
91
102
  const want = React.useRef(span);
103
+ // The size the drag began at, for Escape to put back.
104
+ const began = React.useRef(span);
92
105
  const frame = React.useRef(0);
93
106
  const [hovered, setHovered] = React.useState(false);
94
107
  const [keyed, setKeyed] = React.useState(false);
@@ -119,6 +132,21 @@ function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut,
119
132
  if (moved)
120
133
  settle(want.current);
121
134
  };
135
+ // Escape cancels a drag. The press took no focus (pointerdown is prevented so
136
+ // no text selection starts), so the key arrives at the document, not here.
137
+ React.useEffect(() => {
138
+ if (!moving || typeof window === 'undefined')
139
+ return;
140
+ const cancel = (e) => {
141
+ if (e.key !== 'Escape' || drag.current === 'none')
142
+ return;
143
+ e.preventDefault();
144
+ stop();
145
+ onSpan(began.current);
146
+ };
147
+ window.addEventListener('keydown', cancel, true);
148
+ return () => window.removeEventListener('keydown', cancel, true);
149
+ });
122
150
  const wider = side === 'left' ? 'ArrowRight' : side === 'right' ? 'ArrowLeft' : 'ArrowDown';
123
151
  const narrower = side === 'left' ? 'ArrowLeft' : side === 'right' ? 'ArrowRight' : 'ArrowUp';
124
152
  const edge = tall
@@ -135,6 +163,7 @@ function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut,
135
163
  const now = drawn(e.currentTarget);
136
164
  held.current = along(e) - grows * now;
137
165
  want.current = clamp(now);
166
+ began.current = clamp(now);
138
167
  drag.current = 'held';
139
168
  setMoving(true);
140
169
  }, onPointerMove: (e) => {
@@ -158,7 +187,7 @@ function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut,
158
187
  },
159
188
  // A drag ends when the pointer is let go: lifted, or taken by the browser.
160
189
  onPointerUp: end, onPointerCancel: end, onDoubleClick: () => (onReset ? onReset() : settle(clamp(reset ?? span))), onKeyDown: (e) => {
161
- const step = e.shiftKey ? LONG : STEP;
190
+ const step = e.shiftKey ? LONG : unit;
162
191
  const now = drawn(e.currentTarget);
163
192
  const to = e.key === wider
164
193
  ? now + step
@@ -175,5 +204,8 @@ function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut,
175
204
  if (onShut && to < floor)
176
205
  return onShut();
177
206
  settle(clamp(to));
178
- }, ...rest, children: (0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(tall ? { height: 2, width: '100%' } : { width: 2, height: '100%' }), rounded: 1, bg: keyed || moving ? '$outlineColor' : hovered ? '$rim' : 'transparent', pointerEvents: "none" }) }));
207
+ }, ...rest, children: bar ? ((0, jsx_runtime_1.jsx)(gui_1.YStack, { "data-slot": "grip-bar", ...(() => {
208
+ const [thick, long] = bar === 'edge' ? [4, 48] : [3, 32];
209
+ return tall ? { height: thick, width: long } : { width: thick, height: long };
210
+ })(), self: "center", rounded: "$10", bg: moving ? '$rim' : keyed ? '$outlineColor' : hovered ? '$hint' : '$raised', [tall ? 'scaleX' : 'scaleY']: moving || hovered || keyed ? 1.2 : 1, animation: "quickest", pointerEvents: "none" })) : ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(tall ? { height: 2, width: '100%' } : { width: 2, height: '100%' }), rounded: 1, bg: keyed || moving ? '$outlineColor' : hovered ? '$rim' : 'transparent', pointerEvents: "none" })) }));
179
211
  }
@@ -30,6 +30,17 @@
30
30
  * draws instead of an outline.
31
31
  *
32
32
  * Moved here from @hanzo/build, where hanzo.ai's sidebar and asides used it.
33
+ *
34
+ * `bar` draws a handle a person can see before reaching for it (twenty-ui's
35
+ * ResizeHandle, MIT, NOTICE): a pill in the middle of the band, 4×48 on an edge
36
+ * (`edge`) or 3×32 between two panes (`inline`), the raised rung at rest, the
37
+ * soft one under the pointer, and the strong edge while it moves, lengthened by
38
+ * a fifth whenever it is reached for. A drag in progress is cancelled by Escape,
39
+ * which puts the box back where the drag found it. `step` sets the key's step.
40
+ *
41
+ * It is THE standalone resizer: the docked side panel's edge, a drawer's width
42
+ * and an editor's height are a Grip; `ResizableHandle` is the separator inside
43
+ * a `ResizablePanelGroup` and nothing else.
33
44
  */
34
45
  import { type YStackProps } from '@hanzo/gui';
35
46
  import * as React from 'react';
@@ -46,6 +57,10 @@ export interface GripProps extends Omit<YStackProps, 'children'> {
46
57
  onShut?: () => void;
47
58
  /** The separator's accessible name: "Resize sidebar", "Resize Input". */
48
59
  label: string;
60
+ /** A visible handle: `edge` 4×48 on a box's edge, `inline` 3×32 between panes. Absent, the line alone. */
61
+ bar?: 'edge' | 'inline';
62
+ /** A key's step, px (32 with Shift). Default 8. */
63
+ step?: number;
49
64
  }
50
- export declare function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut, label, ...rest }: GripProps): React.JSX.Element;
65
+ export declare function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut, label, bar, step: unit, ...rest }: GripProps): React.JSX.Element;
51
66
  //# sourceMappingURL=grip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grip.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/grip.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;AAE/C,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IAC9D,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;CACd;AAKD,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,IAAI,EACR,EAAE,SAAS,qBAmIX"}
1
+ {"version":3,"file":"grip.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/grip.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;AAE/C,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IAC9D,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,0GAA0G;IAC1G,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAKD,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,EACH,IAAI,EAAE,IAAW,EACjB,GAAG,IAAI,EACR,EAAE,SAAS,qBAsKX"}
@@ -32,6 +32,17 @@ import { jsx as _jsx } from "react/jsx-runtime";
32
32
  * draws instead of an outline.
33
33
  *
34
34
  * Moved here from @hanzo/build, where hanzo.ai's sidebar and asides used it.
35
+ *
36
+ * `bar` draws a handle a person can see before reaching for it (twenty-ui's
37
+ * ResizeHandle, MIT, NOTICE): a pill in the middle of the band, 4×48 on an edge
38
+ * (`edge`) or 3×32 between two panes (`inline`), the raised rung at rest, the
39
+ * soft one under the pointer, and the strong edge while it moves, lengthened by
40
+ * a fifth whenever it is reached for. A drag in progress is cancelled by Escape,
41
+ * which puts the box back where the drag found it. `step` sets the key's step.
42
+ *
43
+ * It is THE standalone resizer: the docked side panel's edge, a drawer's width
44
+ * and an editor's height are a Grip; `ResizableHandle` is the separator inside
45
+ * a `ResizablePanelGroup` and nothing else.
35
46
  */
36
47
  import { YStack } from '@hanzo/gui';
37
48
  import * as React from 'react';
@@ -42,7 +53,7 @@ const LONG = 32;
42
53
  const SLACK = 48;
43
54
  /** The grab band's thickness, px; the line drawn inside it is 2. */
44
55
  const BAND = 8;
45
- export function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut, label, ...rest }) {
56
+ export function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep, onShut, label, bar, step: unit = STEP, ...rest }) {
46
57
  const tall = side === 'top';
47
58
  /** +1 when the pointer moving away from the pinned edge grows the box. */
48
59
  const grows = side === 'right' ? -1 : 1;
@@ -53,6 +64,8 @@ export function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep,
53
64
  // keeps nothing.
54
65
  const drag = React.useRef('none');
55
66
  const want = React.useRef(span);
67
+ // The size the drag began at, for Escape to put back.
68
+ const began = React.useRef(span);
56
69
  const frame = React.useRef(0);
57
70
  const [hovered, setHovered] = React.useState(false);
58
71
  const [keyed, setKeyed] = React.useState(false);
@@ -83,6 +96,21 @@ export function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep,
83
96
  if (moved)
84
97
  settle(want.current);
85
98
  };
99
+ // Escape cancels a drag. The press took no focus (pointerdown is prevented so
100
+ // no text selection starts), so the key arrives at the document, not here.
101
+ React.useEffect(() => {
102
+ if (!moving || typeof window === 'undefined')
103
+ return;
104
+ const cancel = (e) => {
105
+ if (e.key !== 'Escape' || drag.current === 'none')
106
+ return;
107
+ e.preventDefault();
108
+ stop();
109
+ onSpan(began.current);
110
+ };
111
+ window.addEventListener('keydown', cancel, true);
112
+ return () => window.removeEventListener('keydown', cancel, true);
113
+ });
86
114
  const wider = side === 'left' ? 'ArrowRight' : side === 'right' ? 'ArrowLeft' : 'ArrowDown';
87
115
  const narrower = side === 'left' ? 'ArrowLeft' : side === 'right' ? 'ArrowRight' : 'ArrowUp';
88
116
  const edge = tall
@@ -99,6 +127,7 @@ export function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep,
99
127
  const now = drawn(e.currentTarget);
100
128
  held.current = along(e) - grows * now;
101
129
  want.current = clamp(now);
130
+ began.current = clamp(now);
102
131
  drag.current = 'held';
103
132
  setMoving(true);
104
133
  }, onPointerMove: (e) => {
@@ -122,7 +151,7 @@ export function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep,
122
151
  },
123
152
  // A drag ends when the pointer is let go: lifted, or taken by the browser.
124
153
  onPointerUp: end, onPointerCancel: end, onDoubleClick: () => (onReset ? onReset() : settle(clamp(reset ?? span))), onKeyDown: (e) => {
125
- const step = e.shiftKey ? LONG : STEP;
154
+ const step = e.shiftKey ? LONG : unit;
126
155
  const now = drawn(e.currentTarget);
127
156
  const to = e.key === wider
128
157
  ? now + step
@@ -139,6 +168,9 @@ export function Grip({ side, span, floor, ceil, reset, onReset, onSpan, onKeep,
139
168
  if (onShut && to < floor)
140
169
  return onShut();
141
170
  settle(clamp(to));
142
- }, ...rest, children: _jsx(YStack, { ...(tall ? { height: 2, width: '100%' } : { width: 2, height: '100%' }), rounded: 1, bg: keyed || moving ? '$outlineColor' : hovered ? '$rim' : 'transparent', pointerEvents: "none" }) }));
171
+ }, ...rest, children: bar ? (_jsx(YStack, { "data-slot": "grip-bar", ...(() => {
172
+ const [thick, long] = bar === 'edge' ? [4, 48] : [3, 32];
173
+ return tall ? { height: thick, width: long } : { width: thick, height: long };
174
+ })(), self: "center", rounded: "$10", bg: moving ? '$rim' : keyed ? '$outlineColor' : hovered ? '$hint' : '$raised', [tall ? 'scaleX' : 'scaleY']: moving || hovered || keyed ? 1.2 : 1, animation: "quickest", pointerEvents: "none" })) : (_jsx(YStack, { ...(tall ? { height: 2, width: '100%' } : { width: 2, height: '100%' }), rounded: 1, bg: keyed || moving ? '$outlineColor' : hovered ? '$rim' : 'transparent', pointerEvents: "none" })) }));
143
175
  }
144
176
  //# sourceMappingURL=grip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grip.js","sourceRoot":"","sources":["../../../src/backends/gui/grip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grip.js","sourceRoot":"","sources":["../../../src/backends/gui/grip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Heading = void 0;
5
+ /**
6
+ * Heading — gui's semantic heading, with a `tone`.
7
+ *
8
+ * Sizes stay gui's own rungs, and the record headings are four of them: a
9
+ * settings section or a widget title is `size="$2"` (13), a group header `$1`
10
+ * (12, also twenty-ui's xs, since 12px is Hanzo's text floor), a dialog or
11
+ * empty-state title `$4` (15) — twenty-ui's xs/sm/md/lg
12
+ * (11/12/13/16, MIT, see NOTICE) on Hanzo's ramp. `tone` is the new axis:
13
+ * primary ink, secondary or tertiary, at the heading's own weight. A styled
14
+ * extension rather than a wrapper, so `styled(Heading, …)` in a host still
15
+ * extends the component it always did.
16
+ */
17
+ const gui_1 = require("@hanzo/gui");
18
+ exports.Heading = (0, gui_1.styled)(gui_1.Heading, {
19
+ name: 'Heading',
20
+ variants: {
21
+ tone: {
22
+ primary: { color: '$ink' },
23
+ secondary: { color: '$aside' },
24
+ tertiary: { color: '$hint' },
25
+ },
26
+ },
27
+ });
@@ -0,0 +1,8 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare const Heading: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, any, import("@hanzogui/web").TextNonStyleProps, import("@hanzogui/web").TextStylePropsBase, {
3
+ size?: import("@hanzogui/web").FontSizeTokens | undefined;
4
+ tone?: "primary" | "secondary" | "tertiary" | undefined;
5
+ unstyled?: boolean | undefined;
6
+ }, import("@hanzogui/web").StaticConfigPublic>;
7
+ export type HeadingProps = ComponentProps<typeof Heading>;
8
+ //# sourceMappingURL=heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/heading.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAE3C,eAAO,MAAM,OAAO;;;;8CASlB,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,OAAO,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ /**
3
+ * Heading — gui's semantic heading, with a `tone`.
4
+ *
5
+ * Sizes stay gui's own rungs, and the record headings are four of them: a
6
+ * settings section or a widget title is `size="$2"` (13), a group header `$1`
7
+ * (12, also twenty-ui's xs, since 12px is Hanzo's text floor), a dialog or
8
+ * empty-state title `$4` (15) — twenty-ui's xs/sm/md/lg
9
+ * (11/12/13/16, MIT, see NOTICE) on Hanzo's ramp. `tone` is the new axis:
10
+ * primary ink, secondary or tertiary, at the heading's own weight. A styled
11
+ * extension rather than a wrapper, so `styled(Heading, …)` in a host still
12
+ * extends the component it always did.
13
+ */
14
+ import { Heading as GuiHeading, styled } from '@hanzo/gui';
15
+ export const Heading = styled(GuiHeading, {
16
+ name: 'Heading',
17
+ variants: {
18
+ tone: {
19
+ primary: { color: '$ink' },
20
+ secondary: { color: '$aside' },
21
+ tertiary: { color: '$hint' },
22
+ },
23
+ },
24
+ });
25
+ //# sourceMappingURL=heading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.js","sourceRoot":"","sources":["../../../src/backends/gui/heading.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAG1D,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE;IACxC,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YAC1B,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC9B,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;SAC7B;KACO;CACX,CAAC,CAAA"}
@@ -0,0 +1,49 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.hueOr = exports.isHue = exports.neutrals = exports.hues = void 0;
5
+ exports.useTone = useTone;
6
+ /**
7
+ * A data hue on a component: the colour a person chose for a record, carried as
8
+ * custom properties so the component's rules are written once.
9
+ *
10
+ * A tag, an avatar, an icon tile and a status pill can each take any of thirty
11
+ * hues, and which one is DATA — read from a record at run time. Spelling the
12
+ * hue into each style prop would mint one atomic class per hue per step, every
13
+ * one of which the shipped sheet would have to hold before first paint. So the
14
+ * element states its hue once, inline — `--tone-3: var(--data-red-3)` — and the
15
+ * styled parts read `var(--tone-3)`: one class per step, whatever the hue, and
16
+ * the value still follows the theme, because `--data-red-3` is declared per
17
+ * theme in @hanzo/tokens' data.css.
18
+ *
19
+ * Off the web there are no custom properties, so `tone(step)` hands back the
20
+ * step's own hex for the theme being rendered (from `scales`), and `style` is
21
+ * empty.
22
+ */
23
+ const gui_1 = require("@hanzo/gui");
24
+ const data_1 = require("@hanzo/tokens/data");
25
+ Object.defineProperty(exports, "hues", { enumerable: true, get: function () { return data_1.hues; } });
26
+ Object.defineProperty(exports, "neutrals", { enumerable: true, get: function () { return data_1.neutrals; } });
27
+ /** Whether `v` names one of the thirty data hues. */
28
+ const isHue = (v) => typeof v === 'string' && Object.hasOwn(data_1.scales, v);
29
+ exports.isHue = isHue;
30
+ /** `v` when it is a hue, `gray` otherwise — an unknown colour reads as the neutral, never as nothing. */
31
+ const hueOr = (v, fallback = 'gray') => ((0, exports.isHue)(v) ? v : fallback);
32
+ exports.hueOr = hueOr;
33
+ /**
34
+ * The hue's steps for one element.
35
+ *
36
+ * `style` goes on the element that roots the part (its children inherit the
37
+ * properties); `tone(step)` is the value a style prop reads.
38
+ */
39
+ function useTone(hue, steps) {
40
+ const theme = (0, gui_1.useThemeName)();
41
+ if (!gui_1.isWeb) {
42
+ const scale = data_1.scales[hue][String(theme).startsWith('light') ? 'light' : 'dark'];
43
+ return { style: {}, tone: (step) => scale[step - 1] };
44
+ }
45
+ const style = {};
46
+ for (const s of steps)
47
+ style[`--tone-${s}`] = `var(--data-${hue}-${s})`;
48
+ return { style, tone: (step) => `var(--tone-${step})` };
49
+ }
@@ -0,0 +1,18 @@
1
+ import { hues, neutrals, type DataHue } from '@hanzo/tokens/data';
2
+ export type { DataHue };
3
+ export { hues, neutrals };
4
+ /** Whether `v` names one of the thirty data hues. */
5
+ export declare const isHue: (v: unknown) => v is DataHue;
6
+ /** `v` when it is a hue, `gray` otherwise — an unknown colour reads as the neutral, never as nothing. */
7
+ export declare const hueOr: (v: unknown, fallback?: DataHue) => DataHue;
8
+ /**
9
+ * The hue's steps for one element.
10
+ *
11
+ * `style` goes on the element that roots the part (its children inherit the
12
+ * properties); `tone(step)` is the value a style prop reads.
13
+ */
14
+ export declare function useTone(hue: DataHue, steps: readonly number[]): {
15
+ style: Record<string, string>;
16
+ tone: (step: number) => string;
17
+ };
18
+ //# sourceMappingURL=hue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hue.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/hue.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAU,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEzE,YAAY,EAAE,OAAO,EAAE,CAAA;AACvB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAEzB,qDAAqD;AACrD,eAAO,MAAM,KAAK,MAAO,OAAO,KAAG,CAAC,IAAI,OAA4D,CAAA;AAEpG,yGAAyG;AACzG,eAAO,MAAM,KAAK,MAAO,OAAO,aAAY,OAAO,KAAY,OAAoC,CAAA;AAEnG;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE;;iBAQ/B,MAAM;EACpC"}
@@ -0,0 +1,43 @@
1
+ 'use client';
2
+ /**
3
+ * A data hue on a component: the colour a person chose for a record, carried as
4
+ * custom properties so the component's rules are written once.
5
+ *
6
+ * A tag, an avatar, an icon tile and a status pill can each take any of thirty
7
+ * hues, and which one is DATA — read from a record at run time. Spelling the
8
+ * hue into each style prop would mint one atomic class per hue per step, every
9
+ * one of which the shipped sheet would have to hold before first paint. So the
10
+ * element states its hue once, inline — `--tone-3: var(--data-red-3)` — and the
11
+ * styled parts read `var(--tone-3)`: one class per step, whatever the hue, and
12
+ * the value still follows the theme, because `--data-red-3` is declared per
13
+ * theme in @hanzo/tokens' data.css.
14
+ *
15
+ * Off the web there are no custom properties, so `tone(step)` hands back the
16
+ * step's own hex for the theme being rendered (from `scales`), and `style` is
17
+ * empty.
18
+ */
19
+ import { isWeb, useThemeName } from '@hanzo/gui';
20
+ import { hues, neutrals, scales } from '@hanzo/tokens/data';
21
+ export { hues, neutrals };
22
+ /** Whether `v` names one of the thirty data hues. */
23
+ export const isHue = (v) => typeof v === 'string' && Object.hasOwn(scales, v);
24
+ /** `v` when it is a hue, `gray` otherwise — an unknown colour reads as the neutral, never as nothing. */
25
+ export const hueOr = (v, fallback = 'gray') => (isHue(v) ? v : fallback);
26
+ /**
27
+ * The hue's steps for one element.
28
+ *
29
+ * `style` goes on the element that roots the part (its children inherit the
30
+ * properties); `tone(step)` is the value a style prop reads.
31
+ */
32
+ export function useTone(hue, steps) {
33
+ const theme = useThemeName();
34
+ if (!isWeb) {
35
+ const scale = scales[hue][String(theme).startsWith('light') ? 'light' : 'dark'];
36
+ return { style: {}, tone: (step) => scale[step - 1] };
37
+ }
38
+ const style = {};
39
+ for (const s of steps)
40
+ style[`--tone-${s}`] = `var(--data-${hue}-${s})`;
41
+ return { style, tone: (step) => `var(--tone-${step})` };
42
+ }
43
+ //# sourceMappingURL=hue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hue.js","sourceRoot":"","sources":["../../../src/backends/gui/hue.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,oBAAoB,CAAA;AAGzE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAEzB,qDAAqD;AACrD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAU,EAAgB,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAEpG,yGAAyG;AACzG,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,QAAQ,GAAY,MAAM,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AAEnG;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,GAAY,EAAE,KAAwB;IAC5D,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAC/E,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAA;IAC/D,CAAC;IACD,MAAM,KAAK,GAA2B,EAAE,CAAA;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAA;IACvE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,cAAc,IAAI,GAAG,EAAE,CAAA;AACjE,CAAC"}
@@ -0,0 +1,36 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.tileTones = void 0;
5
+ exports.IconTile = IconTile;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * IconTile — a 16px icon on a tinted square: an object's mark in the navigation,
9
+ * a command, a settings area, a workflow node.
10
+ *
11
+ * The tint is the object's data hue — step 4 under a step 10 glyph — so People
12
+ * and Companies keep the colours a person gave them. The icon is decorative;
13
+ * the row beside it carries the name.
14
+ *
15
+ * Re-expressed from twenty-ui's TintedIconTile (MIT, see NOTICE).
16
+ */
17
+ const gui_1 = require("@hanzo/gui");
18
+ const react_1 = require("react");
19
+ const data_1 = require("@hanzo/tokens/data");
20
+ const hue_1 = require("./hue.cjs");
21
+ const slot_1 = require("./slot.cjs");
22
+ const BOX = 16;
23
+ /** A hue's tile pair — fill and glyph — for a row that wants the same two without the tile. */
24
+ const tileTones = (hue) => ({ fill: (0, data_1.data)(hue, 4), glyph: (0, data_1.data)(hue, 10) });
25
+ exports.tileTones = tileTones;
26
+ function IconTile({ icon, color, style, ...props }) {
27
+ const hue = (0, hue_1.hueOr)(color);
28
+ const { style: hueStyle, tone } = (0, hue_1.useTone)(hue, [4, 10]);
29
+ const glyph = (0, react_1.isValidElement)(icon) && icon.props.color == null
30
+ ? (0, react_1.cloneElement)(icon, {
31
+ color: tone(10),
32
+ ...(icon.props.size == null ? { size: BOX } : null),
33
+ })
34
+ : icon;
35
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('icon-tile'), "data-color": hue, "aria-hidden": true, width: BOX, height: BOX, shrink: 0, rounded: "$xs", items: "center", justify: "center", bg: tone(4), style: { ...hueStyle, ...style }, ...props, children: glyph }));
36
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * IconTile — a 16px icon on a tinted square: an object's mark in the navigation,
3
+ * a command, a settings area, a workflow node.
4
+ *
5
+ * The tint is the object's data hue — step 4 under a step 10 glyph — so People
6
+ * and Companies keep the colours a person gave them. The icon is decorative;
7
+ * the row beside it carries the name.
8
+ *
9
+ * Re-expressed from twenty-ui's TintedIconTile (MIT, see NOTICE).
10
+ */
11
+ import { XStack } from '@hanzo/gui';
12
+ import { type ComponentProps, type ReactNode } from 'react';
13
+ import { type DataHue } from './hue.js';
14
+ /** A hue's tile pair — fill and glyph — for a row that wants the same two without the tile. */
15
+ export declare const tileTones: (hue: DataHue) => {
16
+ fill: string;
17
+ glyph: string;
18
+ };
19
+ export type IconTileProps = Omit<ComponentProps<typeof XStack>, 'children' | 'color'> & {
20
+ /** A 16px icon. Given no colour, it takes the glyph step. */
21
+ icon: ReactNode;
22
+ /** A data hue; anything else, or none, is gray. */
23
+ color?: DataHue | (string & {}) | null;
24
+ };
25
+ export declare function IconTile({ icon, color, style, ...props }: IconTileProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=icon-tile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-tile.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/icon-tile.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAgC,KAAK,cAAc,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5G,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAKpD,+FAA+F;AAC/F,eAAO,MAAM,SAAS,QAAS,OAAO;IAAQ,IAAI;IAAgB,KAAK;CAAkB,CAAA;AAEzF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;IACtF,6DAA6D;IAC7D,IAAI,EAAE,SAAS,CAAA;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BA4BvE"}
@@ -0,0 +1,32 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * IconTile — a 16px icon on a tinted square: an object's mark in the navigation,
5
+ * a command, a settings area, a workflow node.
6
+ *
7
+ * The tint is the object's data hue — step 4 under a step 10 glyph — so People
8
+ * and Companies keep the colours a person gave them. The icon is decorative;
9
+ * the row beside it carries the name.
10
+ *
11
+ * Re-expressed from twenty-ui's TintedIconTile (MIT, see NOTICE).
12
+ */
13
+ import { XStack } from '@hanzo/gui';
14
+ import { cloneElement, isValidElement } from 'react';
15
+ import { data } from '@hanzo/tokens/data';
16
+ import { hueOr, useTone } from './hue.js';
17
+ import { slot } from './slot.js';
18
+ const BOX = 16;
19
+ /** A hue's tile pair — fill and glyph — for a row that wants the same two without the tile. */
20
+ export const tileTones = (hue) => ({ fill: data(hue, 4), glyph: data(hue, 10) });
21
+ export function IconTile({ icon, color, style, ...props }) {
22
+ const hue = hueOr(color);
23
+ const { style: hueStyle, tone } = useTone(hue, [4, 10]);
24
+ const glyph = isValidElement(icon) && icon.props.color == null
25
+ ? cloneElement(icon, {
26
+ color: tone(10),
27
+ ...(icon.props.size == null ? { size: BOX } : null),
28
+ })
29
+ : icon;
30
+ return (_jsx(XStack, { ...slot('icon-tile'), "data-color": hue, "aria-hidden": true, width: BOX, height: BOX, shrink: 0, rounded: "$xs", items: "center", justify: "center", bg: tone(4), style: { ...hueStyle, ...style }, ...props, children: glyph }));
31
+ }
32
+ //# sourceMappingURL=icon-tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-tile.js","sourceRoot":"","sources":["../../../src/backends/gui/icon-tile.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,cAAc,EAA0D,MAAM,OAAO,CAAA;AAC5G,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAgB,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,MAAM,GAAG,GAAG,EAAE,CAAA;AAEd,+FAA+F;AAC/F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;AASzF,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,EAAiB;IACtE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IACvD,MAAM,KAAK,GACT,cAAc,CAAC,IAAI,CAAC,IAAK,IAAI,CAAC,KAA6B,CAAC,KAAK,IAAI,IAAI;QACvE,CAAC,CAAC,YAAY,CAAC,IAA6C,EAAE;YAC1D,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACf,GAAG,CAAE,IAAI,CAAC,KAA4B,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAC5E,CAAC;QACJ,CAAC,CAAC,IAAI,CAAA;IACV,OAAO,CACL,KAAC,MAAM,OACD,IAAI,CAAC,WAAW,CAAC,gBACT,GAAG,uBAEf,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,CAAC,EACT,OAAO,EAAC,KAAK,EACb,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,QAAQ,EAChB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EACX,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAI,KAAgB,EAAE,KACxC,KAAK,YAER,KAAK,GACC,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,78 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.accepts = void 0;
5
+ exports.ImageInput = ImageInput;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * ImageInput — one picture with upload, remove and abort: a profile photo, a
9
+ * workspace logo, a record's own image.
10
+ *
11
+ * The square preview is the control: pressing it opens the file picker, and on
12
+ * the web a file dropped on it is taken the same way. Beside it, Upload (or
13
+ * Abort while `isUploading`) and Remove, a helper line and an error line. The
14
+ * host owns the upload: `onChange` hands it the chosen file, `onAbort` asks it
15
+ * to stop, `onRemove` to clear; the preview shows whatever `src` it is given.
16
+ *
17
+ * Anatomy after twenty-ui's ImageInput (MIT, NOTICE): a 66px preview with an 8px
18
+ * corner and a 20px image-up glyph, a column 16px beside it with 12px between
19
+ * its rows, outline buttons with 14px icons.
20
+ */
21
+ const gui_1 = require("@hanzo/gui");
22
+ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
23
+ const react_1 = require("react");
24
+ const button_1 = require("./button.cjs");
25
+ const press_1 = require("./press.cjs");
26
+ const slot_1 = require("./slot.cjs");
27
+ const SIZE = 66;
28
+ /** A file matches `accept` on its MIME type, a MIME wildcard, or its extension. */
29
+ const accepts = (file, accept) => accept
30
+ .split(',')
31
+ .map((a) => a.trim().toLowerCase())
32
+ .filter(Boolean)
33
+ .some((a) => a.startsWith('.')
34
+ ? file.name.toLowerCase().endsWith(a)
35
+ : a.endsWith('/*')
36
+ ? file.type.toLowerCase().startsWith(a.slice(0, -1))
37
+ : file.type.toLowerCase() === a);
38
+ exports.accepts = accepts;
39
+ function ImageInput({ src, alt = '', onChange, onRemove, onAbort, isUploading = false, accept = 'image/*', capture, title = 'Picture', helperText, errorMessage, uploadLabel = 'Upload', removeLabel = 'Remove', abortLabel = 'Abort', disabled = false, required, name, }) {
40
+ const file = (0, react_1.useRef)(null);
41
+ const id = (0, react_1.useId)();
42
+ const [over, setOver] = (0, react_1.useState)(false);
43
+ const pick = () => {
44
+ if (disabled || isUploading)
45
+ return;
46
+ file.current?.click();
47
+ };
48
+ const take = (f) => {
49
+ if (f && (0, exports.accepts)(f, accept))
50
+ onChange?.(f);
51
+ };
52
+ const drop = gui_1.isWeb && !disabled && !isUploading
53
+ ? {
54
+ onDragOver: (e) => {
55
+ e.preventDefault();
56
+ setOver(true);
57
+ },
58
+ onDragLeave: () => setOver(false),
59
+ onDrop: (e) => {
60
+ e.preventDefault();
61
+ setOver(false);
62
+ take(e.dataTransfer?.files?.[0]);
63
+ },
64
+ }
65
+ : null;
66
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('image-input'), items: "flex-start", gap: "$4", children: [(0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('image-input-preview'), render: "button", ...{
67
+ type: 'button',
68
+ disabled: disabled || isUploading,
69
+ 'aria-label': src ? `${title}: change` : `${title}: ${uploadLabel}`,
70
+ 'aria-describedby': errorMessage || helperText ? id : undefined,
71
+ ...drop,
72
+ }, width: SIZE, height: SIZE, shrink: 0, rounded: "$3", borderWidth: 1, borderColor: over ? '$borderColorFocus' : '$borderColor', bg: disabled ? '$panel' : '$hover', overflow: "hidden", items: "center", justify: "center", p: 0, cursor: disabled ? 'not-allowed' : isUploading ? 'progress' : 'pointer',
73
+ // No hover tint over a picture: the picture is what is being shown.
74
+ hoverStyle: src || disabled ? undefined : { bg: '$raised' }, focusVisibleStyle: press_1.RING, onPress: pick, children: src ? ((0, jsx_runtime_1.jsx)(gui_1.Image, { src: src, alt: alt, width: SIZE, height: SIZE, objectFit: "cover" })) : ((0, jsx_runtime_1.jsx)(lucide_icons_2_1.ImageUp, { size: 20, color: over ? '$hint' : '$hush' })) }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$3", flex: 1, minW: 0, children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$2", items: "center", flexWrap: "wrap", children: [isUploading ? ((0, jsx_runtime_1.jsx)(button_1.Button, { size: "sm", variant: "outline", startIcon: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.X, {}), onPress: onAbort, children: abortLabel })) : ((0, jsx_runtime_1.jsx)(button_1.Button, { size: "sm", variant: "outline", startIcon: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Upload, {}), disabled: disabled, onPress: pick, children: uploadLabel })), (0, jsx_runtime_1.jsx)(button_1.Button, { size: "sm", variant: "outline", startIcon: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Trash2, {}), disabled: disabled || isUploading || !src, onPress: onRemove, children: removeLabel })] }), helperText || errorMessage ? ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { id: id, gap: "$1", children: [helperText ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$hint", children: helperText })) : null, errorMessage ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$bad", role: "alert", children: errorMessage })) : null] })) : null] }), gui_1.isWeb ? (0, jsx_runtime_1.jsx)("input", { ref: file, type: "file", accept: accept, capture: capture, name: name, required: required, disabled: disabled, "aria-label": title, tabIndex: -1, style: { display: 'none' }, onChange: (e) => {
75
+ take(e.currentTarget.files?.[0]);
76
+ e.currentTarget.value = '';
77
+ } }) : null] }));
78
+ }