@hanzo/ui 8.27.90 → 8.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (698) hide show
  1. package/NOTICE +25 -0
  2. package/README.md +1 -1
  3. package/dist/backends/gui/alert-dialog.cjs +24 -6
  4. package/dist/backends/gui/alert-dialog.d.ts +11 -3
  5. package/dist/backends/gui/alert-dialog.d.ts.map +1 -1
  6. package/dist/backends/gui/alert-dialog.js +24 -6
  7. package/dist/backends/gui/alert-dialog.js.map +1 -1
  8. package/dist/backends/gui/alert.cjs +32 -1
  9. package/dist/backends/gui/alert.d.ts +36 -3
  10. package/dist/backends/gui/alert.d.ts.map +1 -1
  11. package/dist/backends/gui/alert.js +32 -2
  12. package/dist/backends/gui/alert.js.map +1 -1
  13. package/dist/backends/gui/avatar-group.cjs +28 -0
  14. package/dist/backends/gui/avatar-group.d.ts +33 -0
  15. package/dist/backends/gui/avatar-group.d.ts.map +1 -0
  16. package/dist/backends/gui/avatar-group.js +26 -0
  17. package/dist/backends/gui/avatar-group.js.map +1 -0
  18. package/dist/backends/gui/avatar.cjs +53 -3
  19. package/dist/backends/gui/avatar.d.ts +46 -4
  20. package/dist/backends/gui/avatar.d.ts.map +1 -1
  21. package/dist/backends/gui/avatar.js +52 -3
  22. package/dist/backends/gui/avatar.js.map +1 -1
  23. package/dist/backends/gui/badge.cjs +40 -2
  24. package/dist/backends/gui/badge.d.ts +7 -2
  25. package/dist/backends/gui/badge.d.ts.map +1 -1
  26. package/dist/backends/gui/badge.js +40 -2
  27. package/dist/backends/gui/badge.js.map +1 -1
  28. package/dist/backends/gui/banner.cjs +40 -1
  29. package/dist/backends/gui/banner.d.ts +36 -3
  30. package/dist/backends/gui/banner.d.ts.map +1 -1
  31. package/dist/backends/gui/banner.js +42 -4
  32. package/dist/backends/gui/banner.js.map +1 -1
  33. package/dist/backends/gui/breadcrumb.cjs +28 -10
  34. package/dist/backends/gui/breadcrumb.d.ts +20 -11
  35. package/dist/backends/gui/breadcrumb.d.ts.map +1 -1
  36. package/dist/backends/gui/breadcrumb.js +28 -10
  37. package/dist/backends/gui/breadcrumb.js.map +1 -1
  38. package/dist/backends/gui/button-group.cjs +43 -0
  39. package/dist/backends/gui/button-group.d.ts +48 -0
  40. package/dist/backends/gui/button-group.d.ts.map +1 -0
  41. package/dist/backends/gui/button-group.js +40 -0
  42. package/dist/backends/gui/button-group.js.map +1 -0
  43. package/dist/backends/gui/button.cjs +177 -4
  44. package/dist/backends/gui/button.d.ts +69 -4
  45. package/dist/backends/gui/button.d.ts.map +1 -1
  46. package/dist/backends/gui/button.js +179 -6
  47. package/dist/backends/gui/button.js.map +1 -1
  48. package/dist/backends/gui/card.cjs +50 -21
  49. package/dist/backends/gui/card.d.ts +16 -7
  50. package/dist/backends/gui/card.d.ts.map +1 -1
  51. package/dist/backends/gui/card.js +50 -21
  52. package/dist/backends/gui/card.js.map +1 -1
  53. package/dist/backends/gui/checkbox.cjs +86 -14
  54. package/dist/backends/gui/checkbox.d.ts +30 -2
  55. package/dist/backends/gui/checkbox.d.ts.map +1 -1
  56. package/dist/backends/gui/checkbox.js +87 -15
  57. package/dist/backends/gui/checkbox.js.map +1 -1
  58. package/dist/backends/gui/chip.cjs +51 -0
  59. package/dist/backends/gui/chip.d.ts +47 -0
  60. package/dist/backends/gui/chip.d.ts.map +1 -0
  61. package/dist/backends/gui/chip.js +49 -0
  62. package/dist/backends/gui/chip.js.map +1 -0
  63. package/dist/backends/gui/choice.cjs +18 -3
  64. package/dist/backends/gui/choice.d.ts +10 -2
  65. package/dist/backends/gui/choice.d.ts.map +1 -1
  66. package/dist/backends/gui/choice.js +19 -4
  67. package/dist/backends/gui/choice.js.map +1 -1
  68. package/dist/backends/gui/code-editor.cjs +16 -5
  69. package/dist/backends/gui/code-editor.d.ts +18 -1
  70. package/dist/backends/gui/code-editor.d.ts.map +1 -1
  71. package/dist/backends/gui/code-editor.js +16 -5
  72. package/dist/backends/gui/code-editor.js.map +1 -1
  73. package/dist/backends/gui/color-sample.cjs +24 -0
  74. package/dist/backends/gui/color-sample.d.ts +23 -0
  75. package/dist/backends/gui/color-sample.d.ts.map +1 -0
  76. package/dist/backends/gui/color-sample.js +22 -0
  77. package/dist/backends/gui/color-sample.js.map +1 -0
  78. package/dist/backends/gui/control.cjs +5 -3
  79. package/dist/backends/gui/control.d.ts +13 -3
  80. package/dist/backends/gui/control.d.ts.map +1 -1
  81. package/dist/backends/gui/control.js +5 -3
  82. package/dist/backends/gui/control.js.map +1 -1
  83. package/dist/backends/gui/country-select.cjs +69 -0
  84. package/dist/backends/gui/country-select.d.ts +30 -0
  85. package/dist/backends/gui/country-select.d.ts.map +1 -0
  86. package/dist/backends/gui/country-select.js +67 -0
  87. package/dist/backends/gui/country-select.js.map +1 -0
  88. package/dist/backends/gui/currency-picker.cjs +48 -0
  89. package/dist/backends/gui/currency-picker.d.ts +37 -0
  90. package/dist/backends/gui/currency-picker.d.ts.map +1 -0
  91. package/dist/backends/gui/currency-picker.js +46 -0
  92. package/dist/backends/gui/currency-picker.js.map +1 -0
  93. package/dist/backends/gui/density.cjs +32 -0
  94. package/dist/backends/gui/density.d.ts +27 -0
  95. package/dist/backends/gui/density.d.ts.map +1 -0
  96. package/dist/backends/gui/density.js +27 -0
  97. package/dist/backends/gui/density.js.map +1 -0
  98. package/dist/backends/gui/dialog.cjs +65 -7
  99. package/dist/backends/gui/dialog.d.ts +68 -3
  100. package/dist/backends/gui/dialog.d.ts.map +1 -1
  101. package/dist/backends/gui/dialog.js +63 -7
  102. package/dist/backends/gui/dialog.js.map +1 -1
  103. package/dist/backends/gui/dropdown-menu.cjs +361 -31
  104. package/dist/backends/gui/dropdown-menu.d.ts +151 -15
  105. package/dist/backends/gui/dropdown-menu.d.ts.map +1 -1
  106. package/dist/backends/gui/dropdown-menu.js +353 -34
  107. package/dist/backends/gui/dropdown-menu.js.map +1 -1
  108. package/dist/backends/gui/feedback.cjs +78 -0
  109. package/dist/backends/gui/feedback.d.ts +46 -0
  110. package/dist/backends/gui/feedback.d.ts.map +1 -0
  111. package/dist/backends/gui/feedback.js +74 -0
  112. package/dist/backends/gui/feedback.js.map +1 -0
  113. package/dist/backends/gui/field.cjs +71 -14
  114. package/dist/backends/gui/field.d.ts +43 -3
  115. package/dist/backends/gui/field.d.ts.map +1 -1
  116. package/dist/backends/gui/field.js +69 -14
  117. package/dist/backends/gui/field.js.map +1 -1
  118. package/dist/backends/gui/flag.cjs +17 -0
  119. package/dist/backends/gui/flag.d.ts +9 -0
  120. package/dist/backends/gui/flag.d.ts.map +1 -0
  121. package/dist/backends/gui/flag.js +14 -0
  122. package/dist/backends/gui/flag.js.map +1 -0
  123. package/dist/backends/gui/grip.cjs +35 -3
  124. package/dist/backends/gui/grip.d.ts +16 -1
  125. package/dist/backends/gui/grip.d.ts.map +1 -1
  126. package/dist/backends/gui/grip.js +35 -3
  127. package/dist/backends/gui/grip.js.map +1 -1
  128. package/dist/backends/gui/heading.cjs +27 -0
  129. package/dist/backends/gui/heading.d.ts +8 -0
  130. package/dist/backends/gui/heading.d.ts.map +1 -0
  131. package/dist/backends/gui/heading.js +25 -0
  132. package/dist/backends/gui/heading.js.map +1 -0
  133. package/dist/backends/gui/hue.cjs +49 -0
  134. package/dist/backends/gui/hue.d.ts +18 -0
  135. package/dist/backends/gui/hue.d.ts.map +1 -0
  136. package/dist/backends/gui/hue.js +43 -0
  137. package/dist/backends/gui/hue.js.map +1 -0
  138. package/dist/backends/gui/icon-tile.cjs +36 -0
  139. package/dist/backends/gui/icon-tile.d.ts +26 -0
  140. package/dist/backends/gui/icon-tile.d.ts.map +1 -0
  141. package/dist/backends/gui/icon-tile.js +32 -0
  142. package/dist/backends/gui/icon-tile.js.map +1 -0
  143. package/dist/backends/gui/image-input.cjs +78 -0
  144. package/dist/backends/gui/image-input.d.ts +32 -0
  145. package/dist/backends/gui/image-input.d.ts.map +1 -0
  146. package/dist/backends/gui/image-input.js +74 -0
  147. package/dist/backends/gui/image-input.js.map +1 -0
  148. package/dist/backends/gui/index.cjs +93 -7
  149. package/dist/backends/gui/index.d.ts +45 -2
  150. package/dist/backends/gui/index.d.ts.map +1 -1
  151. package/dist/backends/gui/index.js +35 -1
  152. package/dist/backends/gui/index.js.map +1 -1
  153. package/dist/backends/gui/input-group.cjs +49 -0
  154. package/dist/backends/gui/input-group.d.ts +46 -0
  155. package/dist/backends/gui/input-group.d.ts.map +1 -0
  156. package/dist/backends/gui/input-group.js +46 -0
  157. package/dist/backends/gui/input-group.js.map +1 -0
  158. package/dist/backends/gui/input.cjs +32 -4
  159. package/dist/backends/gui/input.d.ts +5 -1
  160. package/dist/backends/gui/input.d.ts.map +1 -1
  161. package/dist/backends/gui/input.js +33 -5
  162. package/dist/backends/gui/input.js.map +1 -1
  163. package/dist/backends/gui/item.cjs +34 -2
  164. package/dist/backends/gui/item.d.ts +21 -5
  165. package/dist/backends/gui/item.d.ts.map +1 -1
  166. package/dist/backends/gui/item.js +35 -3
  167. package/dist/backends/gui/item.js.map +1 -1
  168. package/dist/backends/gui/json-tree.cjs +103 -15
  169. package/dist/backends/gui/json-tree.d.ts +39 -3
  170. package/dist/backends/gui/json-tree.d.ts.map +1 -1
  171. package/dist/backends/gui/json-tree.js +104 -16
  172. package/dist/backends/gui/json-tree.js.map +1 -1
  173. package/dist/backends/gui/kbd.cjs +18 -2
  174. package/dist/backends/gui/kbd.d.ts +5 -2
  175. package/dist/backends/gui/kbd.d.ts.map +1 -1
  176. package/dist/backends/gui/kbd.js +18 -2
  177. package/dist/backends/gui/kbd.js.map +1 -1
  178. package/dist/backends/gui/label.cjs +14 -3
  179. package/dist/backends/gui/label.d.ts +12 -3
  180. package/dist/backends/gui/label.d.ts.map +1 -1
  181. package/dist/backends/gui/label.js +14 -3
  182. package/dist/backends/gui/label.js.map +1 -1
  183. package/dist/backends/gui/layout.cjs +5 -1
  184. package/dist/backends/gui/layout.d.ts +1 -1
  185. package/dist/backends/gui/layout.d.ts.map +1 -1
  186. package/dist/backends/gui/layout.js +5 -1
  187. package/dist/backends/gui/layout.js.map +1 -1
  188. package/dist/backends/gui/number-field.cjs +163 -0
  189. package/dist/backends/gui/number-field.d.ts +34 -0
  190. package/dist/backends/gui/number-field.d.ts.map +1 -0
  191. package/dist/backends/gui/number-field.js +160 -0
  192. package/dist/backends/gui/number-field.js.map +1 -0
  193. package/dist/backends/gui/overflowing-list.cjs +79 -0
  194. package/dist/backends/gui/overflowing-list.d.ts +42 -0
  195. package/dist/backends/gui/overflowing-list.d.ts.map +1 -0
  196. package/dist/backends/gui/overflowing-list.js +76 -0
  197. package/dist/backends/gui/overflowing-list.js.map +1 -0
  198. package/dist/backends/gui/phone-country-picker.cjs +60 -0
  199. package/dist/backends/gui/phone-country-picker.d.ts +34 -0
  200. package/dist/backends/gui/phone-country-picker.d.ts.map +1 -0
  201. package/dist/backends/gui/phone-country-picker.js +57 -0
  202. package/dist/backends/gui/phone-country-picker.js.map +1 -0
  203. package/dist/backends/gui/popover.cjs +20 -4
  204. package/dist/backends/gui/popover.d.ts +12 -1
  205. package/dist/backends/gui/popover.d.ts.map +1 -1
  206. package/dist/backends/gui/popover.js +21 -5
  207. package/dist/backends/gui/popover.js.map +1 -1
  208. package/dist/backends/gui/progress-ring.cjs +38 -0
  209. package/dist/backends/gui/progress-ring.d.ts +37 -0
  210. package/dist/backends/gui/progress-ring.d.ts.map +1 -0
  211. package/dist/backends/gui/progress-ring.js +36 -0
  212. package/dist/backends/gui/progress-ring.js.map +1 -0
  213. package/dist/backends/gui/progress.cjs +31 -7
  214. package/dist/backends/gui/progress.d.ts +25 -3
  215. package/dist/backends/gui/progress.d.ts.map +1 -1
  216. package/dist/backends/gui/progress.js +32 -8
  217. package/dist/backends/gui/progress.js.map +1 -1
  218. package/dist/backends/gui/radio-group.cjs +28 -2
  219. package/dist/backends/gui/radio-group.d.ts +20 -2
  220. package/dist/backends/gui/radio-group.d.ts.map +1 -1
  221. package/dist/backends/gui/radio-group.js +28 -2
  222. package/dist/backends/gui/radio-group.js.map +1 -1
  223. package/dist/backends/gui/search-list.cjs +62 -0
  224. package/dist/backends/gui/search-list.d.ts +65 -0
  225. package/dist/backends/gui/search-list.d.ts.map +1 -0
  226. package/dist/backends/gui/search-list.js +58 -0
  227. package/dist/backends/gui/search-list.js.map +1 -0
  228. package/dist/backends/gui/select.cjs +50 -16
  229. package/dist/backends/gui/select.d.ts +12 -3
  230. package/dist/backends/gui/select.d.ts.map +1 -1
  231. package/dist/backends/gui/select.js +51 -17
  232. package/dist/backends/gui/select.js.map +1 -1
  233. package/dist/backends/gui/shortcut.cjs +122 -0
  234. package/dist/backends/gui/shortcut.d.ts +58 -0
  235. package/dist/backends/gui/shortcut.d.ts.map +1 -0
  236. package/dist/backends/gui/shortcut.js +115 -0
  237. package/dist/backends/gui/shortcut.js.map +1 -0
  238. package/dist/backends/gui/skeleton.cjs +41 -10
  239. package/dist/backends/gui/skeleton.d.ts +46 -8
  240. package/dist/backends/gui/skeleton.d.ts.map +1 -1
  241. package/dist/backends/gui/skeleton.js +39 -8
  242. package/dist/backends/gui/skeleton.js.map +1 -1
  243. package/dist/backends/gui/snippet.cjs +12 -1
  244. package/dist/backends/gui/snippet.d.ts +4 -2
  245. package/dist/backends/gui/snippet.d.ts.map +1 -1
  246. package/dist/backends/gui/snippet.js +12 -1
  247. package/dist/backends/gui/snippet.js.map +1 -1
  248. package/dist/backends/gui/spinner.cjs +8 -1
  249. package/dist/backends/gui/spinner.d.ts +11 -2
  250. package/dist/backends/gui/spinner.d.ts.map +1 -1
  251. package/dist/backends/gui/spinner.js +9 -2
  252. package/dist/backends/gui/spinner.js.map +1 -1
  253. package/dist/backends/gui/stack-icon.cjs +17 -0
  254. package/dist/backends/gui/stack-icon.d.ts +15 -0
  255. package/dist/backends/gui/stack-icon.d.ts.map +1 -0
  256. package/dist/backends/gui/stack-icon.js +15 -0
  257. package/dist/backends/gui/stack-icon.js.map +1 -0
  258. package/dist/backends/gui/status.cjs +38 -1
  259. package/dist/backends/gui/status.d.ts +16 -2
  260. package/dist/backends/gui/status.d.ts.map +1 -1
  261. package/dist/backends/gui/status.js +38 -2
  262. package/dist/backends/gui/status.js.map +1 -1
  263. package/dist/backends/gui/stepper.cjs +73 -3
  264. package/dist/backends/gui/stepper.d.ts +25 -1
  265. package/dist/backends/gui/stepper.d.ts.map +1 -1
  266. package/dist/backends/gui/stepper.js +71 -5
  267. package/dist/backends/gui/stepper.js.map +1 -1
  268. package/dist/backends/gui/switch.cjs +35 -20
  269. package/dist/backends/gui/switch.d.ts +12 -2
  270. package/dist/backends/gui/switch.d.ts.map +1 -1
  271. package/dist/backends/gui/switch.js +35 -20
  272. package/dist/backends/gui/switch.js.map +1 -1
  273. package/dist/backends/gui/tabs.cjs +63 -17
  274. package/dist/backends/gui/tabs.d.ts +35 -6
  275. package/dist/backends/gui/tabs.d.ts.map +1 -1
  276. package/dist/backends/gui/tabs.js +65 -19
  277. package/dist/backends/gui/tabs.js.map +1 -1
  278. package/dist/backends/gui/tag.cjs +48 -0
  279. package/dist/backends/gui/tag.d.ts +53 -0
  280. package/dist/backends/gui/tag.d.ts.map +1 -0
  281. package/dist/backends/gui/tag.js +46 -0
  282. package/dist/backends/gui/tag.js.map +1 -0
  283. package/dist/backends/gui/tags.cjs +9 -2
  284. package/dist/backends/gui/tags.d.ts +6 -5
  285. package/dist/backends/gui/tags.d.ts.map +1 -1
  286. package/dist/backends/gui/tags.js +9 -2
  287. package/dist/backends/gui/tags.js.map +1 -1
  288. package/dist/backends/gui/textarea.cjs +22 -6
  289. package/dist/backends/gui/textarea.d.ts +10 -1
  290. package/dist/backends/gui/textarea.d.ts.map +1 -1
  291. package/dist/backends/gui/textarea.js +22 -6
  292. package/dist/backends/gui/textarea.js.map +1 -1
  293. package/dist/backends/gui/toaster.cjs +167 -3
  294. package/dist/backends/gui/toaster.d.ts +28 -2
  295. package/dist/backends/gui/toaster.d.ts.map +1 -1
  296. package/dist/backends/gui/toaster.js +167 -5
  297. package/dist/backends/gui/toaster.js.map +1 -1
  298. package/dist/backends/gui/toggle-group.cjs +13 -0
  299. package/dist/backends/gui/toggle-group.d.ts +7 -1
  300. package/dist/backends/gui/toggle-group.d.ts.map +1 -1
  301. package/dist/backends/gui/toggle-group.js +13 -0
  302. package/dist/backends/gui/toggle-group.js.map +1 -1
  303. package/dist/backends/gui/tooltip.cjs +29 -6
  304. package/dist/backends/gui/tooltip.d.ts +23 -4
  305. package/dist/backends/gui/tooltip.d.ts.map +1 -1
  306. package/dist/backends/gui/tooltip.js +31 -8
  307. package/dist/backends/gui/tooltip.js.map +1 -1
  308. package/dist/backends/gui/truncated-text.cjs +102 -0
  309. package/dist/backends/gui/truncated-text.d.ts +55 -0
  310. package/dist/backends/gui/truncated-text.d.ts.map +1 -0
  311. package/dist/backends/gui/truncated-text.js +97 -0
  312. package/dist/backends/gui/truncated-text.js.map +1 -0
  313. package/dist/gallery/compound.cjs +60 -0
  314. package/dist/gallery/compound.d.ts +2 -0
  315. package/dist/gallery/compound.d.ts.map +1 -0
  316. package/dist/gallery/compound.js +58 -0
  317. package/dist/gallery/compound.js.map +1 -0
  318. package/dist/gallery/display.cjs +47 -0
  319. package/dist/gallery/display.d.ts +3 -0
  320. package/dist/gallery/display.d.ts.map +1 -0
  321. package/dist/gallery/display.js +45 -0
  322. package/dist/gallery/display.js.map +1 -0
  323. package/dist/gallery/feedback.cjs +38 -0
  324. package/dist/gallery/feedback.d.ts +2 -0
  325. package/dist/gallery/feedback.d.ts.map +1 -0
  326. package/dist/gallery/feedback.js +36 -0
  327. package/dist/gallery/feedback.js.map +1 -0
  328. package/dist/gallery/fields.cjs +53 -0
  329. package/dist/gallery/fields.d.ts +2 -0
  330. package/dist/gallery/fields.d.ts.map +1 -0
  331. package/dist/gallery/fields.js +51 -0
  332. package/dist/gallery/fields.js.map +1 -0
  333. package/dist/gallery/frames.cjs +47 -0
  334. package/dist/gallery/frames.d.ts +2 -0
  335. package/dist/gallery/frames.d.ts.map +1 -0
  336. package/dist/gallery/frames.js +45 -0
  337. package/dist/gallery/frames.js.map +1 -0
  338. package/dist/gallery/menus.cjs +64 -0
  339. package/dist/gallery/menus.d.ts +15 -0
  340. package/dist/gallery/menus.d.ts.map +1 -0
  341. package/dist/gallery/menus.js +58 -0
  342. package/dist/gallery/menus.js.map +1 -0
  343. package/dist/gallery/records.cjs +33 -0
  344. package/dist/gallery/records.d.ts +2 -0
  345. package/dist/gallery/records.d.ts.map +1 -0
  346. package/dist/gallery/records.js +31 -0
  347. package/dist/gallery/records.js.map +1 -0
  348. package/dist/gallery/section.cjs +17 -0
  349. package/dist/gallery/section.d.ts +10 -0
  350. package/dist/gallery/section.d.ts.map +1 -0
  351. package/dist/gallery/section.js +14 -0
  352. package/dist/gallery/section.js.map +1 -0
  353. package/dist/gallery.cjs +8 -14
  354. package/dist/gallery.d.ts.map +1 -1
  355. package/dist/gallery.html +1613 -265
  356. package/dist/gallery.js +3 -9
  357. package/dist/gallery.js.map +1 -1
  358. package/dist/gui-config.cjs +37 -7
  359. package/dist/gui-config.d.ts +11 -3
  360. package/dist/gui-config.d.ts.map +1 -1
  361. package/dist/gui-config.js +37 -7
  362. package/dist/gui-config.js.map +1 -1
  363. package/dist/index.cjs +61 -2
  364. package/dist/index.d.ts +4 -2
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +7 -1
  367. package/dist/index.js.map +1 -1
  368. package/dist/index.node.cjs +61 -2
  369. package/dist/index.node.js +7 -1
  370. package/dist/motion.cjs +25 -1
  371. package/dist/motion.d.ts +16 -1
  372. package/dist/motion.d.ts.map +1 -1
  373. package/dist/motion.js +24 -1
  374. package/dist/motion.js.map +1 -1
  375. package/dist/primitives/AvatarGroup.cjs +8 -0
  376. package/dist/primitives/AvatarGroup.d.ts +2 -0
  377. package/dist/primitives/AvatarGroup.d.ts.map +1 -0
  378. package/dist/primitives/AvatarGroup.js +5 -0
  379. package/dist/primitives/AvatarGroup.js.map +1 -0
  380. package/dist/primitives/BannerAction.cjs +8 -0
  381. package/dist/primitives/BannerAction.d.ts +2 -0
  382. package/dist/primitives/BannerAction.d.ts.map +1 -0
  383. package/dist/primitives/BannerAction.js +5 -0
  384. package/dist/primitives/BannerAction.js.map +1 -0
  385. package/dist/primitives/ButtonGroup.cjs +8 -0
  386. package/dist/primitives/ButtonGroup.d.ts +2 -0
  387. package/dist/primitives/ButtonGroup.d.ts.map +1 -0
  388. package/dist/primitives/ButtonGroup.js +5 -0
  389. package/dist/primitives/ButtonGroup.js.map +1 -0
  390. package/dist/primitives/ButtonGroupContext.cjs +8 -0
  391. package/dist/primitives/ButtonGroupContext.d.ts +2 -0
  392. package/dist/primitives/ButtonGroupContext.d.ts.map +1 -0
  393. package/dist/primitives/ButtonGroupContext.js +5 -0
  394. package/dist/primitives/ButtonGroupContext.js.map +1 -0
  395. package/dist/primitives/CalloutAction.cjs +8 -0
  396. package/dist/primitives/CalloutAction.d.ts +2 -0
  397. package/dist/primitives/CalloutAction.d.ts.map +1 -0
  398. package/dist/primitives/CalloutAction.js +5 -0
  399. package/dist/primitives/CalloutAction.js.map +1 -0
  400. package/dist/primitives/Chip.cjs +8 -0
  401. package/dist/primitives/Chip.d.ts +2 -0
  402. package/dist/primitives/Chip.d.ts.map +1 -0
  403. package/dist/primitives/Chip.js +5 -0
  404. package/dist/primitives/Chip.js.map +1 -0
  405. package/dist/primitives/ColorSample.cjs +8 -0
  406. package/dist/primitives/ColorSample.d.ts +2 -0
  407. package/dist/primitives/ColorSample.d.ts.map +1 -0
  408. package/dist/primitives/ColorSample.js +5 -0
  409. package/dist/primitives/ColorSample.js.map +1 -0
  410. package/dist/primitives/CountrySelect.cjs +8 -0
  411. package/dist/primitives/CountrySelect.d.ts +2 -0
  412. package/dist/primitives/CountrySelect.d.ts.map +1 -0
  413. package/dist/primitives/CountrySelect.js +5 -0
  414. package/dist/primitives/CountrySelect.js.map +1 -0
  415. package/dist/primitives/CurrencyPicker.cjs +8 -0
  416. package/dist/primitives/CurrencyPicker.d.ts +2 -0
  417. package/dist/primitives/CurrencyPicker.d.ts.map +1 -0
  418. package/dist/primitives/CurrencyPicker.js +5 -0
  419. package/dist/primitives/CurrencyPicker.js.map +1 -0
  420. package/dist/primitives/Density.cjs +8 -0
  421. package/dist/primitives/Density.d.ts +2 -0
  422. package/dist/primitives/Density.d.ts.map +1 -0
  423. package/dist/primitives/Density.js +5 -0
  424. package/dist/primitives/Density.js.map +1 -0
  425. package/dist/primitives/DialogBody.cjs +8 -0
  426. package/dist/primitives/DialogBody.d.ts +2 -0
  427. package/dist/primitives/DialogBody.d.ts.map +1 -0
  428. package/dist/primitives/DialogBody.js +5 -0
  429. package/dist/primitives/DialogBody.js.map +1 -0
  430. package/dist/primitives/DropdownMenuBack.cjs +8 -0
  431. package/dist/primitives/DropdownMenuBack.d.ts +2 -0
  432. package/dist/primitives/DropdownMenuBack.d.ts.map +1 -0
  433. package/dist/primitives/DropdownMenuBack.js +5 -0
  434. package/dist/primitives/DropdownMenuBack.js.map +1 -0
  435. package/dist/primitives/DropdownMenuClose.cjs +8 -0
  436. package/dist/primitives/DropdownMenuClose.d.ts +2 -0
  437. package/dist/primitives/DropdownMenuClose.d.ts.map +1 -0
  438. package/dist/primitives/DropdownMenuClose.js +5 -0
  439. package/dist/primitives/DropdownMenuClose.js.map +1 -0
  440. package/dist/primitives/DropdownMenuEmpty.cjs +8 -0
  441. package/dist/primitives/DropdownMenuEmpty.d.ts +2 -0
  442. package/dist/primitives/DropdownMenuEmpty.d.ts.map +1 -0
  443. package/dist/primitives/DropdownMenuEmpty.js +5 -0
  444. package/dist/primitives/DropdownMenuEmpty.js.map +1 -0
  445. package/dist/primitives/DropdownMenuHeader.cjs +8 -0
  446. package/dist/primitives/DropdownMenuHeader.d.ts +2 -0
  447. package/dist/primitives/DropdownMenuHeader.d.ts.map +1 -0
  448. package/dist/primitives/DropdownMenuHeader.js +5 -0
  449. package/dist/primitives/DropdownMenuHeader.js.map +1 -0
  450. package/dist/primitives/DropdownMenuLoading.cjs +8 -0
  451. package/dist/primitives/DropdownMenuLoading.d.ts +2 -0
  452. package/dist/primitives/DropdownMenuLoading.d.ts.map +1 -0
  453. package/dist/primitives/DropdownMenuLoading.js +5 -0
  454. package/dist/primitives/DropdownMenuLoading.js.map +1 -0
  455. package/dist/primitives/DropdownMenuOptionItem.cjs +8 -0
  456. package/dist/primitives/DropdownMenuOptionItem.d.ts +2 -0
  457. package/dist/primitives/DropdownMenuOptionItem.d.ts.map +1 -0
  458. package/dist/primitives/DropdownMenuOptionItem.js +5 -0
  459. package/dist/primitives/DropdownMenuOptionItem.js.map +1 -0
  460. package/dist/primitives/DropdownMenuPage.cjs +8 -0
  461. package/dist/primitives/DropdownMenuPage.d.ts +2 -0
  462. package/dist/primitives/DropdownMenuPage.d.ts.map +1 -0
  463. package/dist/primitives/DropdownMenuPage.js +5 -0
  464. package/dist/primitives/DropdownMenuPage.js.map +1 -0
  465. package/dist/primitives/DropdownMenuSearch.cjs +8 -0
  466. package/dist/primitives/DropdownMenuSearch.d.ts +2 -0
  467. package/dist/primitives/DropdownMenuSearch.d.ts.map +1 -0
  468. package/dist/primitives/DropdownMenuSearch.js +5 -0
  469. package/dist/primitives/DropdownMenuSearch.js.map +1 -0
  470. package/dist/primitives/DropdownMenuSection.cjs +8 -0
  471. package/dist/primitives/DropdownMenuSection.d.ts +2 -0
  472. package/dist/primitives/DropdownMenuSection.d.ts.map +1 -0
  473. package/dist/primitives/DropdownMenuSection.js +5 -0
  474. package/dist/primitives/DropdownMenuSection.js.map +1 -0
  475. package/dist/primitives/DropdownMenuSelectionGroup.cjs +8 -0
  476. package/dist/primitives/DropdownMenuSelectionGroup.d.ts +2 -0
  477. package/dist/primitives/DropdownMenuSelectionGroup.d.ts.map +1 -0
  478. package/dist/primitives/DropdownMenuSelectionGroup.js +5 -0
  479. package/dist/primitives/DropdownMenuSelectionGroup.js.map +1 -0
  480. package/dist/primitives/DropdownMenuTitle.cjs +8 -0
  481. package/dist/primitives/DropdownMenuTitle.d.ts +2 -0
  482. package/dist/primitives/DropdownMenuTitle.d.ts.map +1 -0
  483. package/dist/primitives/DropdownMenuTitle.js +5 -0
  484. package/dist/primitives/DropdownMenuTitle.js.map +1 -0
  485. package/dist/primitives/Heading.cjs +2 -2
  486. package/dist/primitives/Heading.d.ts +1 -1
  487. package/dist/primitives/Heading.d.ts.map +1 -1
  488. package/dist/primitives/Heading.js +1 -1
  489. package/dist/primitives/Heading.js.map +1 -1
  490. package/dist/primitives/IconTile.cjs +8 -0
  491. package/dist/primitives/IconTile.d.ts +2 -0
  492. package/dist/primitives/IconTile.d.ts.map +1 -0
  493. package/dist/primitives/IconTile.js +5 -0
  494. package/dist/primitives/IconTile.js.map +1 -0
  495. package/dist/primitives/ImageInput.cjs +8 -0
  496. package/dist/primitives/ImageInput.d.ts +2 -0
  497. package/dist/primitives/ImageInput.d.ts.map +1 -0
  498. package/dist/primitives/ImageInput.js +5 -0
  499. package/dist/primitives/ImageInput.js.map +1 -0
  500. package/dist/primitives/InputGroup.cjs +8 -0
  501. package/dist/primitives/InputGroup.d.ts +2 -0
  502. package/dist/primitives/InputGroup.d.ts.map +1 -0
  503. package/dist/primitives/InputGroup.js +5 -0
  504. package/dist/primitives/InputGroup.js.map +1 -0
  505. package/dist/primitives/NumberField.cjs +8 -0
  506. package/dist/primitives/NumberField.d.ts +2 -0
  507. package/dist/primitives/NumberField.d.ts.map +1 -0
  508. package/dist/primitives/NumberField.js +5 -0
  509. package/dist/primitives/NumberField.js.map +1 -0
  510. package/dist/primitives/OverflowingList.cjs +8 -0
  511. package/dist/primitives/OverflowingList.d.ts +2 -0
  512. package/dist/primitives/OverflowingList.d.ts.map +1 -0
  513. package/dist/primitives/OverflowingList.js +5 -0
  514. package/dist/primitives/OverflowingList.js.map +1 -0
  515. package/dist/primitives/PhoneCountryPicker.cjs +8 -0
  516. package/dist/primitives/PhoneCountryPicker.d.ts +2 -0
  517. package/dist/primitives/PhoneCountryPicker.d.ts.map +1 -0
  518. package/dist/primitives/PhoneCountryPicker.js +5 -0
  519. package/dist/primitives/PhoneCountryPicker.js.map +1 -0
  520. package/dist/primitives/ProgressRing.cjs +8 -0
  521. package/dist/primitives/ProgressRing.d.ts +2 -0
  522. package/dist/primitives/ProgressRing.d.ts.map +1 -0
  523. package/dist/primitives/ProgressRing.js +5 -0
  524. package/dist/primitives/ProgressRing.js.map +1 -0
  525. package/dist/primitives/RadioCircle.cjs +8 -0
  526. package/dist/primitives/RadioCircle.d.ts +2 -0
  527. package/dist/primitives/RadioCircle.d.ts.map +1 -0
  528. package/dist/primitives/RadioCircle.js +5 -0
  529. package/dist/primitives/RadioCircle.js.map +1 -0
  530. package/dist/primitives/SKELETON_HEIGHT.cjs +8 -0
  531. package/dist/primitives/SKELETON_HEIGHT.d.ts +2 -0
  532. package/dist/primitives/SKELETON_HEIGHT.d.ts.map +1 -0
  533. package/dist/primitives/SKELETON_HEIGHT.js +5 -0
  534. package/dist/primitives/SKELETON_HEIGHT.js.map +1 -0
  535. package/dist/primitives/STATUS_COLOR.cjs +8 -0
  536. package/dist/primitives/STATUS_COLOR.d.ts +2 -0
  537. package/dist/primitives/STATUS_COLOR.d.ts.map +1 -0
  538. package/dist/primitives/STATUS_COLOR.js +5 -0
  539. package/dist/primitives/STATUS_COLOR.js.map +1 -0
  540. package/dist/primitives/STATUS_HUE.cjs +8 -0
  541. package/dist/primitives/STATUS_HUE.d.ts +2 -0
  542. package/dist/primitives/STATUS_HUE.d.ts.map +1 -0
  543. package/dist/primitives/STATUS_HUE.js +5 -0
  544. package/dist/primitives/STATUS_HUE.js.map +1 -0
  545. package/dist/primitives/STATUS_PAINT.cjs +8 -0
  546. package/dist/primitives/STATUS_PAINT.d.ts +2 -0
  547. package/dist/primitives/STATUS_PAINT.d.ts.map +1 -0
  548. package/dist/primitives/STATUS_PAINT.js +5 -0
  549. package/dist/primitives/STATUS_PAINT.js.map +1 -0
  550. package/dist/primitives/Shortcut.cjs +8 -0
  551. package/dist/primitives/Shortcut.d.ts +2 -0
  552. package/dist/primitives/Shortcut.d.ts.map +1 -0
  553. package/dist/primitives/Shortcut.js +5 -0
  554. package/dist/primitives/Shortcut.js.map +1 -0
  555. package/dist/primitives/StackIcon.cjs +8 -0
  556. package/dist/primitives/StackIcon.d.ts +2 -0
  557. package/dist/primitives/StackIcon.d.ts.map +1 -0
  558. package/dist/primitives/StackIcon.js +5 -0
  559. package/dist/primitives/StackIcon.js.map +1 -0
  560. package/dist/primitives/TOAST_DURATION.cjs +8 -0
  561. package/dist/primitives/TOAST_DURATION.d.ts +2 -0
  562. package/dist/primitives/TOAST_DURATION.d.ts.map +1 -0
  563. package/dist/primitives/TOAST_DURATION.js +5 -0
  564. package/dist/primitives/TOAST_DURATION.js.map +1 -0
  565. package/dist/primitives/Tag.cjs +8 -0
  566. package/dist/primitives/Tag.d.ts +2 -0
  567. package/dist/primitives/Tag.d.ts.map +1 -0
  568. package/dist/primitives/Tag.js +5 -0
  569. package/dist/primitives/Tag.js.map +1 -0
  570. package/dist/primitives/ToastCard.cjs +8 -0
  571. package/dist/primitives/ToastCard.d.ts +2 -0
  572. package/dist/primitives/ToastCard.d.ts.map +1 -0
  573. package/dist/primitives/ToastCard.js +5 -0
  574. package/dist/primitives/ToastCard.js.map +1 -0
  575. package/dist/primitives/ToastFace.cjs +8 -0
  576. package/dist/primitives/ToastFace.d.ts +2 -0
  577. package/dist/primitives/ToastFace.d.ts.map +1 -0
  578. package/dist/primitives/ToastFace.js +5 -0
  579. package/dist/primitives/ToastFace.js.map +1 -0
  580. package/dist/primitives/TruncatedText.cjs +8 -0
  581. package/dist/primitives/TruncatedText.d.ts +2 -0
  582. package/dist/primitives/TruncatedText.d.ts.map +1 -0
  583. package/dist/primitives/TruncatedText.js +5 -0
  584. package/dist/primitives/TruncatedText.js.map +1 -0
  585. package/dist/primitives/TruncatedTextProvider.cjs +8 -0
  586. package/dist/primitives/TruncatedTextProvider.d.ts +2 -0
  587. package/dist/primitives/TruncatedTextProvider.d.ts.map +1 -0
  588. package/dist/primitives/TruncatedTextProvider.js +5 -0
  589. package/dist/primitives/TruncatedTextProvider.js.map +1 -0
  590. package/dist/primitives/VisuallyHidden.cjs +8 -0
  591. package/dist/primitives/VisuallyHidden.d.ts +2 -0
  592. package/dist/primitives/VisuallyHidden.d.ts.map +1 -0
  593. package/dist/primitives/VisuallyHidden.js +5 -0
  594. package/dist/primitives/VisuallyHidden.js.map +1 -0
  595. package/dist/primitives/fieldSize.cjs +8 -0
  596. package/dist/primitives/fieldSize.d.ts +2 -0
  597. package/dist/primitives/fieldSize.d.ts.map +1 -0
  598. package/dist/primitives/fieldSize.js +5 -0
  599. package/dist/primitives/fieldSize.js.map +1 -0
  600. package/dist/primitives/flag.cjs +8 -0
  601. package/dist/primitives/flag.d.ts +2 -0
  602. package/dist/primitives/flag.d.ts.map +1 -0
  603. package/dist/primitives/flag.js +5 -0
  604. package/dist/primitives/flag.js.map +1 -0
  605. package/dist/primitives/formatShortcut.cjs +8 -0
  606. package/dist/primitives/formatShortcut.d.ts +2 -0
  607. package/dist/primitives/formatShortcut.d.ts.map +1 -0
  608. package/dist/primitives/formatShortcut.js +5 -0
  609. package/dist/primitives/formatShortcut.js.map +1 -0
  610. package/dist/primitives/initialOf.cjs +8 -0
  611. package/dist/primitives/initialOf.d.ts +2 -0
  612. package/dist/primitives/initialOf.d.ts.map +1 -0
  613. package/dist/primitives/initialOf.js +5 -0
  614. package/dist/primitives/initialOf.js.map +1 -0
  615. package/dist/primitives/parseNumber.cjs +8 -0
  616. package/dist/primitives/parseNumber.d.ts +2 -0
  617. package/dist/primitives/parseNumber.d.ts.map +1 -0
  618. package/dist/primitives/parseNumber.js +5 -0
  619. package/dist/primitives/parseNumber.js.map +1 -0
  620. package/dist/primitives/speakShortcut.cjs +8 -0
  621. package/dist/primitives/speakShortcut.d.ts +2 -0
  622. package/dist/primitives/speakShortcut.d.ts.map +1 -0
  623. package/dist/primitives/speakShortcut.js +5 -0
  624. package/dist/primitives/speakShortcut.js.map +1 -0
  625. package/dist/primitives/tileTones.cjs +8 -0
  626. package/dist/primitives/tileTones.d.ts +2 -0
  627. package/dist/primitives/tileTones.d.ts.map +1 -0
  628. package/dist/primitives/tileTones.js +5 -0
  629. package/dist/primitives/tileTones.js.map +1 -0
  630. package/dist/primitives/useDensity.cjs +8 -0
  631. package/dist/primitives/useDensity.d.ts +2 -0
  632. package/dist/primitives/useDensity.d.ts.map +1 -0
  633. package/dist/primitives/useDensity.js +5 -0
  634. package/dist/primitives/useDensity.js.map +1 -0
  635. package/dist/primitives/useField.cjs +8 -0
  636. package/dist/primitives/useField.d.ts +2 -0
  637. package/dist/primitives/useField.d.ts.map +1 -0
  638. package/dist/primitives/useField.js +5 -0
  639. package/dist/primitives/useField.js.map +1 -0
  640. package/dist/product/ComboBox.cjs +25 -7
  641. package/dist/product/ComboBox.d.ts +3 -1
  642. package/dist/product/ComboBox.d.ts.map +1 -1
  643. package/dist/product/ComboBox.js +25 -7
  644. package/dist/product/ComboBox.js.map +1 -1
  645. package/dist/product/CommandMenu.cjs +137 -0
  646. package/dist/product/CommandMenu.d.ts +77 -0
  647. package/dist/product/CommandMenu.d.ts.map +1 -0
  648. package/dist/product/CommandMenu.js +134 -0
  649. package/dist/product/CommandMenu.js.map +1 -0
  650. package/dist/product/DetailPane.cjs +154 -12
  651. package/dist/product/DetailPane.d.ts +80 -2
  652. package/dist/product/DetailPane.d.ts.map +1 -1
  653. package/dist/product/DetailPane.js +153 -16
  654. package/dist/product/DetailPane.js.map +1 -1
  655. package/dist/product/Fact.cjs +6 -1
  656. package/dist/product/Fact.d.ts +16 -1
  657. package/dist/product/Fact.d.ts.map +1 -1
  658. package/dist/product/Fact.js +6 -1
  659. package/dist/product/Fact.js.map +1 -1
  660. package/dist/product/Field.cjs +14 -2
  661. package/dist/product/Field.d.ts +16 -1
  662. package/dist/product/Field.d.ts.map +1 -1
  663. package/dist/product/Field.js +14 -2
  664. package/dist/product/Field.js.map +1 -1
  665. package/dist/product/Filters.cjs +61 -9
  666. package/dist/product/Filters.d.ts +37 -6
  667. package/dist/product/Filters.d.ts.map +1 -1
  668. package/dist/product/Filters.js +62 -10
  669. package/dist/product/Filters.js.map +1 -1
  670. package/dist/product/MenuRow.cjs +81 -2
  671. package/dist/product/MenuRow.d.ts +76 -6
  672. package/dist/product/MenuRow.d.ts.map +1 -1
  673. package/dist/product/MenuRow.js +81 -4
  674. package/dist/product/MenuRow.js.map +1 -1
  675. package/dist/product/PrimaryButton.cjs +5 -1
  676. package/dist/product/PrimaryButton.d.ts +8 -0
  677. package/dist/product/PrimaryButton.d.ts.map +1 -1
  678. package/dist/product/PrimaryButton.js +5 -1
  679. package/dist/product/PrimaryButton.js.map +1 -1
  680. package/dist/product/Skeleton.cjs +7 -6
  681. package/dist/product/Skeleton.d.ts +3 -20
  682. package/dist/product/Skeleton.d.ts.map +1 -1
  683. package/dist/product/Skeleton.js +8 -7
  684. package/dist/product/Skeleton.js.map +1 -1
  685. package/dist/product/index.cjs +2 -0
  686. package/dist/product/index.d.ts +1 -0
  687. package/dist/product/index.d.ts.map +1 -1
  688. package/dist/product/index.js +2 -0
  689. package/dist/product/index.js.map +1 -1
  690. package/dist/settings/Section.cjs +11 -2
  691. package/dist/settings/Section.d.ts +8 -1
  692. package/dist/settings/Section.d.ts.map +1 -1
  693. package/dist/settings/Section.js +11 -2
  694. package/dist/settings/Section.js.map +1 -1
  695. package/dist/styles/motion.css +70 -0
  696. package/dist/styles.css +1479 -136
  697. package/dist/theme.css +963 -9
  698. package/package.json +2 -1
@@ -66,6 +66,11 @@ const REST = {
66
66
  borderColor: '$borderColor',
67
67
  hoverStyle: { backgroundColor: '$hover' },
68
68
  },
69
+ tile: {
70
+ backgroundColor: 'transparent',
71
+ borderColor: '$borderColor',
72
+ hoverStyle: { backgroundColor: '$hover' },
73
+ },
69
74
  };
70
75
  /**
71
76
  * The ON treatment. gui merges `activeStyle` into hover and focus as well as
@@ -77,6 +82,7 @@ const REST = {
77
82
  const ON = {
78
83
  default: { backgroundColor: '$rim', borderColor: '$bound' },
79
84
  outline: { backgroundColor: '$raised', borderColor: '$bound' },
85
+ tile: { backgroundColor: 'transparent', borderColor: 'var(--primary)' },
80
86
  };
81
87
  const GroupContext = /* @__PURE__ */ (0, react_1.createContext)({
82
88
  type: 'multiple',
@@ -102,6 +108,13 @@ function ToggleGroupItem({ variant, size, disabled, children, value, ...props })
102
108
  const s = group.size ?? size ?? 'default';
103
109
  const on = group.selected.includes(value);
104
110
  const off = disabled || group.disabled;
111
+ if (v === 'tile')
112
+ return ((0, jsx_runtime_1.jsx)(gui_1.ToggleGroup.Item, { value: value, ...(0, slot_1.slot)('toggle-group-item'), "data-variant": "tile", role: group.type === 'single' ? 'radio' : undefined, "aria-checked": group.type === 'single' ? on : undefined, unstyled: true, flexDirection: "column", items: "center", justify: "center", width: "100%", minH: 32, px: "$1", py: "$1.5", gap: "$1", borderWidth: 1, rounded: "$xs", select: "none", disabled: off, cursor: off ? 'default' : 'pointer', focusVisibleStyle: press_1.RING, ...REST.tile, ...(off ? { backgroundColor: '$panel', hoverStyle: { backgroundColor: '$panel' } } : null), activeStyle: ON.tile, animation: "75ms", ...(0, gesture_1.touch)(32, 44, 'y'), ...props, children: (0, ink_1.ink)(children, undefined, {
113
+ size: '$1',
114
+ fontWeight: '600',
115
+ numberOfLines: 1,
116
+ color: off ? 'var(--text-faint)' : on ? 'var(--primary)' : '$hint',
117
+ }) }));
105
118
  return ((0, jsx_runtime_1.jsx)(gui_1.ToggleGroup.Item, { value: value, ...(0, slot_1.slot)('toggle-group-item'), "data-variant": v, "data-size": s,
106
119
  // The two Radix semantics gui drops in `single` mode. `aria-pressed` is
107
120
  // left alone for `multiple`, where gui already sets it from the same state.
@@ -40,7 +40,13 @@
40
40
  */
41
41
  import { ToggleGroup as GuiToggleGroup } from '@hanzo/gui';
42
42
  import { type CSSProperties, type ComponentProps, type ReactNode } from 'react';
43
- export type ToggleGroupVariant = 'default' | 'outline';
43
+ /**
44
+ * `tile` is the picker tile (twenty-ui's MenuPicker, MIT, NOTICE): an icon over
45
+ * a small label in a 4px-cornered box that fills its grid cell — a chart type,
46
+ * a view layout. The chosen tile takes the accent edge and label; the label is
47
+ * 12px semibold and truncates.
48
+ */
49
+ export type ToggleGroupVariant = 'default' | 'outline' | 'tile';
44
50
  export type ToggleGroupSize = 'default' | 'sm' | 'lg';
45
51
  /**
46
52
  * Written out rather than derived from gui's, which cannot be used here.
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,WAAW,IAAI,cAAc,EAAwB,MAAM,YAAY,CAAA;AAChF,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM1G,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAA;AACtD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AAuDrD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,KAAK,eAAe,GAAG;IACrB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAChC;;;;;;;;;OASG;IACH,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,iBAAS,WAAW,CAAC,EACnB,IAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAA0B,EAC1B,mBAAmB,EACnB,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAoClB;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,EAC1C,MAAM,CACP,GAAG;IACF,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAA;CACvB,CAAA;AAED,iBAAS,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,+BA+CpG;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,WAAW,IAAI,cAAc,EAAwB,MAAM,YAAY,CAAA;AAChF,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM1G;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AA6DrD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,KAAK,eAAe,GAAG;IACrB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAChC;;;;;;;;;OASG;IACH,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,iBAAS,WAAW,CAAC,EACnB,IAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAA0B,EAC1B,mBAAmB,EACnB,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAoClB;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,EAC1C,MAAM,CACP,GAAG;IACF,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAA;CACvB,CAAA;AAED,iBAAS,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,+BAsFpG;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA"}
@@ -62,6 +62,11 @@ const REST = {
62
62
  borderColor: '$borderColor',
63
63
  hoverStyle: { backgroundColor: '$hover' },
64
64
  },
65
+ tile: {
66
+ backgroundColor: 'transparent',
67
+ borderColor: '$borderColor',
68
+ hoverStyle: { backgroundColor: '$hover' },
69
+ },
65
70
  };
66
71
  /**
67
72
  * The ON treatment. gui merges `activeStyle` into hover and focus as well as
@@ -73,6 +78,7 @@ const REST = {
73
78
  const ON = {
74
79
  default: { backgroundColor: '$rim', borderColor: '$bound' },
75
80
  outline: { backgroundColor: '$raised', borderColor: '$bound' },
81
+ tile: { backgroundColor: 'transparent', borderColor: 'var(--primary)' },
76
82
  };
77
83
  const GroupContext = /* @__PURE__ */ createContext({
78
84
  type: 'multiple',
@@ -98,6 +104,13 @@ function ToggleGroupItem({ variant, size, disabled, children, value, ...props })
98
104
  const s = group.size ?? size ?? 'default';
99
105
  const on = group.selected.includes(value);
100
106
  const off = disabled || group.disabled;
107
+ if (v === 'tile')
108
+ return (_jsx(GuiToggleGroup.Item, { value: value, ...slot('toggle-group-item'), "data-variant": "tile", role: group.type === 'single' ? 'radio' : undefined, "aria-checked": group.type === 'single' ? on : undefined, unstyled: true, flexDirection: "column", items: "center", justify: "center", width: "100%", minH: 32, px: "$1", py: "$1.5", gap: "$1", borderWidth: 1, rounded: "$xs", select: "none", disabled: off, cursor: off ? 'default' : 'pointer', focusVisibleStyle: RING, ...REST.tile, ...(off ? { backgroundColor: '$panel', hoverStyle: { backgroundColor: '$panel' } } : null), activeStyle: ON.tile, animation: "75ms", ...touch(32, 44, 'y'), ...props, children: ink(children, undefined, {
109
+ size: '$1',
110
+ fontWeight: '600',
111
+ numberOfLines: 1,
112
+ color: off ? 'var(--text-faint)' : on ? 'var(--primary)' : '$hint',
113
+ }) }));
101
114
  return (_jsx(GuiToggleGroup.Item, { value: value, ...slot('toggle-group-item'), "data-variant": v, "data-size": s,
102
115
  // The two Radix semantics gui drops in `single` mode. `aria-pressed` is
103
116
  // left alone for `multiple`, where gui already sets it from the same state.
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-group.js","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toggle-group.js","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"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"}
@@ -9,25 +9,48 @@ const jsx_runtime_1 = require("react/jsx-runtime");
9
9
  * gui keeps the offset on the tooltip ROOT while the compound API spells it on
10
10
  * Content, as `sideOffset`. One value, one owner: the root holds it, Content
11
11
  * publishes into it — the same split `popover` resolves, for the same reason.
12
+ *
13
+ * The panel FOLLOWS THE THEME — a dark hint on a dark page, a light one on a
14
+ * light page (Hanzo's decision; twenty-ui's is a dark slab in both). It did not
15
+ * before, measured: gui's Tooltip frame carries a `t_Tooltip` sub-theme that
16
+ * inverts the ground, so on the dark page the hint was a light-grey slab
17
+ * (`--background` 85% lightness under glass) with near-black text, and on the
18
+ * light page a dark one. Naming the frame's component `Hint`, which no theme
19
+ * table carries, leaves it in the theme it was opened from. It takes twenty-ui's
20
+ * geometry (MIT, NOTICE): 4×6 padding, 12px text on
21
+ * a 16px line, 10px clear of its anchor, at most 300 wide, opening after 600ms.
22
+ * A title may lead with a 14px icon and carry a quieter description under it,
23
+ * line breaks kept.
12
24
  */
13
25
  const gui_1 = require("@hanzo/gui");
14
26
  const react_1 = require("react");
15
27
  const portal_theme_1 = require("../../product/menu/portal-theme.cjs");
16
28
  const ink_1 = require("./ink.cjs");
17
29
  const slot_1 = require("./slot.cjs");
18
- const DEFAULT_OFFSET = 4;
30
+ const DEFAULT_OFFSET = 10;
31
+ /** How long a pointer rests before the hint opens, ms. */
32
+ const DEFAULT_DELAY = 600;
33
+ const MAX_W = 300;
19
34
  const Publish = /* @__PURE__ */ (0, react_1.createContext)(null);
20
- const Tooltip = ({ offset = DEFAULT_OFFSET, ...props }) => {
35
+ /**
36
+ * Whether a tooltip sits in a `TooltipProvider`. gui lets a tooltip's own
37
+ * `delay` override its group's, so a tooltip in a group must leave the delay
38
+ * unsaid for the group's to hold; one standing alone takes the 600ms default.
39
+ */
40
+ const Grouped = /* @__PURE__ */ (0, react_1.createContext)(false);
41
+ const Tooltip = ({ offset = DEFAULT_OFFSET, delay, ...props }) => {
21
42
  const [placed, setPlaced] = (0, react_1.useState)({});
22
43
  const publish = (0, react_1.useCallback)((p) => setPlaced((prev) => ({ ...prev, ...p })), []);
23
- return ((0, jsx_runtime_1.jsx)(Publish.Provider, { value: publish, children: (0, jsx_runtime_1.jsx)(gui_1.Tooltip, { offset: placed.offset ?? offset, ...props }) }));
44
+ const grouped = (0, react_1.useContext)(Grouped);
45
+ return ((0, jsx_runtime_1.jsx)(Publish.Provider, { value: publish, children: (0, jsx_runtime_1.jsx)(gui_1.Tooltip, { offset: placed.offset ?? offset, delay: delay ?? (grouped ? undefined : DEFAULT_DELAY), ...props }) }));
24
46
  };
25
47
  exports.Tooltip = Tooltip;
26
48
  const TooltipTrigger = gui_1.Tooltip.Trigger;
27
49
  exports.TooltipTrigger = TooltipTrigger;
28
- const TooltipProvider = gui_1.TooltipGroup;
50
+ /** gui's `TooltipGroup`: the tooltips in it share one delay, 600ms unless told otherwise. */
51
+ const TooltipProvider = ({ delay = DEFAULT_DELAY, ...props }) => ((0, jsx_runtime_1.jsx)(Grouped.Provider, { value: true, children: (0, jsx_runtime_1.jsx)(gui_1.TooltipGroup, { delay: delay, ...props }) }));
29
52
  exports.TooltipProvider = TooltipProvider;
30
- const TooltipContent = ({ sideOffset, children, ...props }) => {
53
+ const TooltipContent = ({ sideOffset, startIcon, description, children, ...props }) => {
31
54
  const themeName = (0, portal_theme_1.useThemeName)();
32
55
  const publish = (0, react_1.useContext)(Publish);
33
56
  // Only a Content that names an offset has anything to say about it; an absent
@@ -36,6 +59,6 @@ const TooltipContent = ({ sideOffset, children, ...props }) => {
36
59
  if (sideOffset !== undefined)
37
60
  publish?.({ offset: sideOffset });
38
61
  }, [publish, sideOffset]);
39
- return ((0, jsx_runtime_1.jsx)(portal_theme_1.PortalTheme, { name: themeName, children: (0, jsx_runtime_1.jsx)(gui_1.Tooltip.Content, { ...(0, slot_1.slot)('tooltip-content'), bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$3", py: "$1.5", ...props, children: (0, ink_1.ink)(children, undefined, { size: '$1' }) }) }));
62
+ return ((0, jsx_runtime_1.jsx)(portal_theme_1.PortalTheme, { name: themeName, children: (0, jsx_runtime_1.jsx)(gui_1.Tooltip.Content, { ...(0, slot_1.slot)('tooltip-content'), componentName: "Hint", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$1.5", py: "$1", maxW: MAX_W, ...props, children: startIcon || description ? ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$0.5", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$1", children: [startIcon ? (0, jsx_runtime_1.jsx)(gui_1.XStack, { shrink: 0, children: startIcon }) : null, (0, ink_1.ink)(children, undefined, { size: '$1', fontWeight: '500' })] }), description ? (typeof description === 'string' ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('tooltip-description'), fontSize: "$1", lineHeight: "$1", color: "$aside", style: { whiteSpace: 'pre-line' }, children: description })) : (description)) : null] })) : ((0, ink_1.ink)(children, undefined, { size: '$1' })) }) }));
40
63
  };
41
64
  exports.TooltipContent = TooltipContent;
@@ -4,18 +4,37 @@
4
4
  * gui keeps the offset on the tooltip ROOT while the compound API spells it on
5
5
  * Content, as `sideOffset`. One value, one owner: the root holds it, Content
6
6
  * publishes into it — the same split `popover` resolves, for the same reason.
7
+ *
8
+ * The panel FOLLOWS THE THEME — a dark hint on a dark page, a light one on a
9
+ * light page (Hanzo's decision; twenty-ui's is a dark slab in both). It did not
10
+ * before, measured: gui's Tooltip frame carries a `t_Tooltip` sub-theme that
11
+ * inverts the ground, so on the dark page the hint was a light-grey slab
12
+ * (`--background` 85% lightness under glass) with near-black text, and on the
13
+ * light page a dark one. Naming the frame's component `Hint`, which no theme
14
+ * table carries, leaves it in the theme it was opened from. It takes twenty-ui's
15
+ * geometry (MIT, NOTICE): 4×6 padding, 12px text on
16
+ * a 16px line, 10px clear of its anchor, at most 300 wide, opening after 600ms.
17
+ * A title may lead with a 14px icon and carry a quieter description under it,
18
+ * line breaks kept.
7
19
  */
8
20
  import { Tooltip as GuiTooltip, TooltipGroup } from '@hanzo/gui';
9
- import { type ComponentProps } from 'react';
21
+ import { type ComponentProps, type ReactNode } from 'react';
10
22
  export type TooltipProps = Omit<ComponentProps<typeof GuiTooltip>, 'offset'> & {
11
23
  offset?: number;
12
24
  };
13
25
  export type TooltipContentProps = ComponentProps<typeof GuiTooltip.Content> & {
14
26
  sideOffset?: number;
27
+ /** A 14px icon before the title. */
28
+ startIcon?: ReactNode;
29
+ /** A quieter line under the title, line breaks kept. */
30
+ description?: ReactNode;
15
31
  };
16
- declare const Tooltip: ({ offset, ...props }: TooltipProps) => import("react").JSX.Element;
32
+ declare const Tooltip: ({ offset, delay, ...props }: TooltipProps) => import("react").JSX.Element;
17
33
  declare const TooltipTrigger: typeof GuiTooltip.Trigger;
18
- declare const TooltipProvider: typeof TooltipGroup;
19
- declare const TooltipContent: ({ sideOffset, children, ...props }: TooltipContentProps) => import("react").JSX.Element;
34
+ /** gui's `TooltipGroup`: the tooltips in it share one delay, 600ms unless told otherwise. */
35
+ declare const TooltipProvider: ({ delay, ...props }: Omit<ComponentProps<typeof TooltipGroup>, 'delay'> & {
36
+ delay?: ComponentProps<typeof TooltipGroup>['delay'];
37
+ }) => import("react").JSX.Element;
38
+ declare const TooltipContent: ({ sideOffset, startIcon, description, children, ...props }: TooltipContentProps) => import("react").JSX.Element;
20
39
  export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
21
40
  //# sourceMappingURL=tooltip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,OAAO,CAAA;AAYd,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAClG,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAErG,QAAA,MAAM,OAAO,yBAA2C,YAAY,gCAQnE,CAAA;AACD,QAAA,MAAM,cAAc,EAAE,OAAO,UAAU,CAAC,OAA4B,CAAA;AACpE,QAAA,MAAM,eAAe,EAAE,OAAO,YAA2B,CAAA;AAEzD,QAAA,MAAM,cAAc,uCAAwC,mBAAmB,gCAwB9E,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAQ,OAAO,IAAI,UAAU,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAA;AACtF,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAed,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAClG,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,wDAAwD;IACxD,WAAW,CAAC,EAAE,SAAS,CAAA;CACxB,CAAA;AASD,QAAA,MAAM,OAAO,gCAAkD,YAAY,gCAS1E,CAAA;AACD,QAAA,MAAM,cAAc,EAAE,OAAO,UAAU,CAAC,OAA4B,CAAA;AAEpE,6FAA6F;AAC7F,QAAA,MAAM,eAAe,wBAAyC,IAAI,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,OAAO,CAAC,CAAA;CAAE,gCAI1K,CAAA;AAED,QAAA,MAAM,cAAc,+DAAgE,mBAAmB,gCA4CtG,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
@@ -1,27 +1,50 @@
1
1
  'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  /**
4
4
  * Tooltip — hover/focus hint. `TooltipProvider` is gui's `TooltipGroup`.
5
5
  *
6
6
  * gui keeps the offset on the tooltip ROOT while the compound API spells it on
7
7
  * Content, as `sideOffset`. One value, one owner: the root holds it, Content
8
8
  * publishes into it — the same split `popover` resolves, for the same reason.
9
+ *
10
+ * The panel FOLLOWS THE THEME — a dark hint on a dark page, a light one on a
11
+ * light page (Hanzo's decision; twenty-ui's is a dark slab in both). It did not
12
+ * before, measured: gui's Tooltip frame carries a `t_Tooltip` sub-theme that
13
+ * inverts the ground, so on the dark page the hint was a light-grey slab
14
+ * (`--background` 85% lightness under glass) with near-black text, and on the
15
+ * light page a dark one. Naming the frame's component `Hint`, which no theme
16
+ * table carries, leaves it in the theme it was opened from. It takes twenty-ui's
17
+ * geometry (MIT, NOTICE): 4×6 padding, 12px text on
18
+ * a 16px line, 10px clear of its anchor, at most 300 wide, opening after 600ms.
19
+ * A title may lead with a 14px icon and carry a quieter description under it,
20
+ * line breaks kept.
9
21
  */
10
- import { Tooltip as GuiTooltip, TooltipGroup } from '@hanzo/gui';
22
+ import { Text, Tooltip as GuiTooltip, TooltipGroup, XStack, YStack } from '@hanzo/gui';
11
23
  import { createContext, useCallback, useContext, useEffect, useState, } from 'react';
12
24
  import { PortalTheme, useThemeName } from '../../product/menu/portal-theme.js';
13
25
  import { ink } from './ink.js';
14
26
  import { slot } from './slot.js';
15
- const DEFAULT_OFFSET = 4;
27
+ const DEFAULT_OFFSET = 10;
28
+ /** How long a pointer rests before the hint opens, ms. */
29
+ const DEFAULT_DELAY = 600;
30
+ const MAX_W = 300;
16
31
  const Publish = /* @__PURE__ */ createContext(null);
17
- const Tooltip = ({ offset = DEFAULT_OFFSET, ...props }) => {
32
+ /**
33
+ * Whether a tooltip sits in a `TooltipProvider`. gui lets a tooltip's own
34
+ * `delay` override its group's, so a tooltip in a group must leave the delay
35
+ * unsaid for the group's to hold; one standing alone takes the 600ms default.
36
+ */
37
+ const Grouped = /* @__PURE__ */ createContext(false);
38
+ const Tooltip = ({ offset = DEFAULT_OFFSET, delay, ...props }) => {
18
39
  const [placed, setPlaced] = useState({});
19
40
  const publish = useCallback((p) => setPlaced((prev) => ({ ...prev, ...p })), []);
20
- return (_jsx(Publish.Provider, { value: publish, children: _jsx(GuiTooltip, { offset: placed.offset ?? offset, ...props }) }));
41
+ const grouped = useContext(Grouped);
42
+ return (_jsx(Publish.Provider, { value: publish, children: _jsx(GuiTooltip, { offset: placed.offset ?? offset, delay: delay ?? (grouped ? undefined : DEFAULT_DELAY), ...props }) }));
21
43
  };
22
44
  const TooltipTrigger = GuiTooltip.Trigger;
23
- const TooltipProvider = TooltipGroup;
24
- const TooltipContent = ({ sideOffset, children, ...props }) => {
45
+ /** gui's `TooltipGroup`: the tooltips in it share one delay, 600ms unless told otherwise. */
46
+ const TooltipProvider = ({ delay = DEFAULT_DELAY, ...props }) => (_jsx(Grouped.Provider, { value: true, children: _jsx(TooltipGroup, { delay: delay, ...props }) }));
47
+ const TooltipContent = ({ sideOffset, startIcon, description, children, ...props }) => {
25
48
  const themeName = useThemeName();
26
49
  const publish = useContext(Publish);
27
50
  // Only a Content that names an offset has anything to say about it; an absent
@@ -30,7 +53,7 @@ const TooltipContent = ({ sideOffset, children, ...props }) => {
30
53
  if (sideOffset !== undefined)
31
54
  publish?.({ offset: sideOffset });
32
55
  }, [publish, sideOffset]);
33
- return (_jsx(PortalTheme, { name: themeName, children: _jsx(GuiTooltip.Content, { ...slot('tooltip-content'), bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$3", py: "$1.5", ...props, children: ink(children, undefined, { size: '$1' }) }) }));
56
+ return (_jsx(PortalTheme, { name: themeName, children: _jsx(GuiTooltip.Content, { ...slot('tooltip-content'), componentName: "Hint", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$1.5", py: "$1", maxW: MAX_W, ...props, children: startIcon || description ? (_jsxs(YStack, { gap: "$0.5", children: [_jsxs(XStack, { items: "center", gap: "$1", children: [startIcon ? _jsx(XStack, { shrink: 0, children: startIcon }) : null, ink(children, undefined, { size: '$1', fontWeight: '500' })] }), description ? (typeof description === 'string' ? (_jsx(Text, { ...slot('tooltip-description'), fontSize: "$1", lineHeight: "$1", color: "$aside", style: { whiteSpace: 'pre-line' }, children: description })) : (description)) : null] })) : (ink(children, undefined, { size: '$1' })) }) }));
34
57
  };
35
58
  export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
36
59
  //# sourceMappingURL=tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,GAET,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,MAAM,cAAc,GAAG,CAAC,CAAA;AAKxB,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,CAA+B,IAAI,CAAC,CAAA;AAKjF,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,KAAK,EAAgB,EAAE,EAAE;IACtE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACxF,OAAO,CACL,KAAC,OAAO,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAC9B,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,KAAM,KAAK,GAAI,GACzC,CACpB,CAAA;AACH,CAAC,CAAA;AACD,MAAM,cAAc,GAA8B,UAAU,CAAC,OAAO,CAAA;AACpE,MAAM,eAAe,GAAwB,YAAY,CAAA;AAEzD,MAAM,cAAc,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAuB,EAAE,EAAE;IACjF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IACnC,8EAA8E;IAC9E,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IACjE,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;IACzB,OAAO,CACL,KAAC,WAAW,IAAC,IAAI,EAAE,SAAS,YAC1B,KAAC,UAAU,CAAC,OAAO,OACb,IAAI,CAAC,iBAAiB,CAAC,EAC3B,EAAE,EAAC,QAAQ,EACX,WAAW,EAAE,CAAC,EACd,WAAW,EAAC,cAAc,EAC1B,OAAO,EAAC,IAAI,EACZ,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,KACL,KAAK,YAER,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GACtB,GACT,CACf,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.overflows = void 0;
5
+ exports.TruncatedTextProvider = TruncatedTextProvider;
6
+ exports.TruncatedText = TruncatedText;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ /**
9
+ * TruncatedText — one line with an ellipsis, or N lines clamped, that shows the
10
+ * whole text in a tooltip only when it was actually cut.
11
+ *
12
+ * Every cell, chip label, navigation item and view name in a record surface is
13
+ * one of these, so the tooltip has to cost nothing when it is not needed: it
14
+ * measures (scroll size past client size) when the pointer enters or focus
15
+ * arrives, and the tooltip opens only if that measurement found an overflow. A
16
+ * text that fits never shows one. `TruncatedTextProvider` lets a host change the
17
+ * rule for a subtree — a table turns it `disabled` while it scrolls or edits, so
18
+ * a thousand cells carry no listeners at all.
19
+ *
20
+ * Re-expressed from twenty-ui's OverflowingTextWithTooltip and its mode provider
21
+ * (MIT, see NOTICE): 500ms delay, bottom placement, a 300px cap on the hint,
22
+ * focusable on request, `alwaysShowTooltip` for a hint that is wanted anyway.
23
+ * The tooltip is this package's own `Tooltip`; its look is the Tooltip's.
24
+ *
25
+ * Anchored, not triggered: a tooltip trigger stamps `aria-expanded` on its
26
+ * child, which a run of text may not carry (axe, aria-allowed-attr), and the
27
+ * hint discloses nothing — it repeats the text. So the text is the tooltip's
28
+ * ANCHOR and this component opens it itself, after the delay, on hover or focus.
29
+ */
30
+ const gui_1 = require("@hanzo/gui");
31
+ const react_1 = require("react");
32
+ const tooltip_1 = require("./tooltip.cjs");
33
+ const slot_1 = require("./slot.cjs");
34
+ const ModeContext = /* @__PURE__ */ (0, react_1.createContext)('measure-on-hover');
35
+ function TruncatedTextProvider({ mode, children }) {
36
+ return (0, jsx_runtime_1.jsx)(ModeContext.Provider, { value: mode, children: children });
37
+ }
38
+ /** Whether a rendered node holds more than it shows. False off the web, where there is no node to ask. */
39
+ const overflows = (node) => {
40
+ const el = node;
41
+ if (!el || typeof el.scrollWidth !== 'number')
42
+ return false;
43
+ return el.scrollWidth > (el.clientWidth ?? 0) || (el.scrollHeight ?? 0) > (el.clientHeight ?? 0);
44
+ };
45
+ exports.overflows = overflows;
46
+ const DELAY = 500;
47
+ const MAX_W = 300;
48
+ function TruncatedText({ text, lineClamp, tooltipContent, tooltipDelay = DELAY, tooltipPlace = 'bottom', isTooltipMultiline = false, alwaysShowTooltip = false, isFocusable = false, ...props }) {
49
+ const mode = (0, react_1.useContext)(ModeContext);
50
+ const [open, setOpen] = (0, react_1.useState)(false);
51
+ const [cut, setCut] = (0, react_1.useState)(false);
52
+ const node = (0, react_1.useRef)(null);
53
+ const timer = (0, react_1.useRef)(null);
54
+ const held = (0, react_1.useRef)(false);
55
+ (0, react_1.useEffect)(() => () => {
56
+ if (timer.current)
57
+ clearTimeout(timer.current);
58
+ }, []);
59
+ const lines = lineClamp && Number.isInteger(lineClamp) && lineClamp > 0 ? lineClamp : 1;
60
+ const host = (extra) => ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { ...(0, slot_1.slot)('truncated-text'), numberOfLines: lines, maxW: "100%", minW: 0, ...(lines > 1 ? { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' } } : null), ...props, ...extra, children: text }));
61
+ if (mode === 'disabled' && !alwaysShowTooltip)
62
+ return host({});
63
+ const measure = (target) => {
64
+ node.current = target;
65
+ const over = (0, exports.overflows)(target);
66
+ setCut(over);
67
+ return over;
68
+ };
69
+ /** Arm the hint: measured now (hover mode) or when it opens (open mode), shown after the delay. */
70
+ const arm = (target, wait) => {
71
+ if (timer.current)
72
+ clearTimeout(timer.current);
73
+ const now = mode === 'measure-on-hover' ? measure(target) : ((node.current = target), false);
74
+ timer.current = setTimeout(() => {
75
+ const over = mode === 'measure-on-open' ? measure(node.current) : now;
76
+ if (alwaysShowTooltip || over)
77
+ setOpen(true);
78
+ }, wait);
79
+ };
80
+ const disarm = () => {
81
+ if (timer.current)
82
+ clearTimeout(timer.current);
83
+ timer.current = null;
84
+ if (!held.current)
85
+ setOpen(false);
86
+ };
87
+ return ((0, jsx_runtime_1.jsxs)(tooltip_1.Tooltip, { open: open, onOpenChange: (next) => !next && setOpen(false), placement: tooltipPlace, children: [(0, jsx_runtime_1.jsx)(gui_1.Tooltip.Anchor, { asChild: true, children: host({
88
+ onPointerEnter: (e) => arm(e?.currentTarget, tooltipDelay),
89
+ onPointerLeave: disarm,
90
+ // Focus opens at once; the hint stays while the text holds focus.
91
+ onFocus: (e) => {
92
+ held.current = true;
93
+ arm(e?.currentTarget, 0);
94
+ },
95
+ onBlur: () => {
96
+ held.current = false;
97
+ disarm();
98
+ },
99
+ ...(isFocusable ? { tabIndex: 0, focusVisibleStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' } } : null),
100
+ ...(cut ? { cursor: 'pointer' } : null),
101
+ }) }), (0, jsx_runtime_1.jsx)(tooltip_1.TooltipContent, { maxW: MAX_W, children: isTooltipMultiline && typeof (tooltipContent ?? text) === 'string' ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", style: { whiteSpace: 'pre-wrap' }, children: tooltipContent ?? text })) : ((tooltipContent ?? text)) })] }));
102
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * TruncatedText — one line with an ellipsis, or N lines clamped, that shows the
3
+ * whole text in a tooltip only when it was actually cut.
4
+ *
5
+ * Every cell, chip label, navigation item and view name in a record surface is
6
+ * one of these, so the tooltip has to cost nothing when it is not needed: it
7
+ * measures (scroll size past client size) when the pointer enters or focus
8
+ * arrives, and the tooltip opens only if that measurement found an overflow. A
9
+ * text that fits never shows one. `TruncatedTextProvider` lets a host change the
10
+ * rule for a subtree — a table turns it `disabled` while it scrolls or edits, so
11
+ * a thousand cells carry no listeners at all.
12
+ *
13
+ * Re-expressed from twenty-ui's OverflowingTextWithTooltip and its mode provider
14
+ * (MIT, see NOTICE): 500ms delay, bottom placement, a 300px cap on the hint,
15
+ * focusable on request, `alwaysShowTooltip` for a hint that is wanted anyway.
16
+ * The tooltip is this package's own `Tooltip`; its look is the Tooltip's.
17
+ *
18
+ * Anchored, not triggered: a tooltip trigger stamps `aria-expanded` on its
19
+ * child, which a run of text may not carry (axe, aria-allowed-attr), and the
20
+ * hint discloses nothing — it repeats the text. So the text is the tooltip's
21
+ * ANCHOR and this component opens it itself, after the delay, on hover or focus.
22
+ */
23
+ import { SizableText } from '@hanzo/gui';
24
+ import { type ComponentProps, type ReactNode } from 'react';
25
+ /**
26
+ * `measure-on-hover` (default): the hint is armed by the last hover or focus
27
+ * that measured an overflow. `measure-on-open`: measured when it tries to open.
28
+ * `disabled`: no tooltip and no listeners.
29
+ */
30
+ export type TruncateMode = 'measure-on-hover' | 'measure-on-open' | 'disabled';
31
+ export declare function TruncatedTextProvider({ mode, children }: {
32
+ mode: TruncateMode;
33
+ children?: ReactNode;
34
+ }): import("react").JSX.Element;
35
+ /** Whether a rendered node holds more than it shows. False off the web, where there is no node to ask. */
36
+ export declare const overflows: (node: unknown) => boolean;
37
+ export type TruncatedTextProps = Omit<ComponentProps<typeof SizableText>, 'children'> & {
38
+ /** What is shown. A node needs `tooltipContent`, since the hint cannot be read off it. */
39
+ text: ReactNode;
40
+ /** Clamp to N lines (wrapping, breaking long words) instead of one line with an ellipsis. */
41
+ lineClamp?: number;
42
+ /** The hint, when it should say more or other than `text`. */
43
+ tooltipContent?: ReactNode;
44
+ /** Milliseconds before the hint opens. */
45
+ tooltipDelay?: number;
46
+ tooltipPlace?: 'top' | 'right' | 'bottom' | 'left';
47
+ /** Keep the hint's line breaks. */
48
+ isTooltipMultiline?: boolean;
49
+ /** Show the hint whether or not the text was cut. */
50
+ alwaysShowTooltip?: boolean;
51
+ /** A tab stop: focus measures and opens the hint, as a hover does. */
52
+ isFocusable?: boolean;
53
+ };
54
+ export declare function TruncatedText({ text, lineClamp, tooltipContent, tooltipDelay, tooltipPlace, isTooltipMultiline, alwaysShowTooltip, isFocusable, ...props }: TruncatedTextProps): import("react").JSX.Element;
55
+ //# sourceMappingURL=truncated-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncated-text.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/truncated-text.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,WAAW,EAAyB,MAAM,YAAY,CAAA;AAC/D,OAAO,EAA0D,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAInH;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,UAAU,CAAA;AAI9E,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,+BAErG;AAED,0GAA0G;AAC1G,eAAO,MAAM,SAAS,SAAU,OAAO,KAAG,OAIzC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACtF,0FAA0F;IAC1F,IAAI,EAAE,SAAS,CAAA;IACf,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IAClD,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAKD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,cAAc,EACd,YAAoB,EACpB,YAAuB,EACvB,kBAA0B,EAC1B,iBAAyB,EACzB,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,kBAAkB,+BAgFpB"}
@@ -0,0 +1,97 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * TruncatedText — one line with an ellipsis, or N lines clamped, that shows the
5
+ * whole text in a tooltip only when it was actually cut.
6
+ *
7
+ * Every cell, chip label, navigation item and view name in a record surface is
8
+ * one of these, so the tooltip has to cost nothing when it is not needed: it
9
+ * measures (scroll size past client size) when the pointer enters or focus
10
+ * arrives, and the tooltip opens only if that measurement found an overflow. A
11
+ * text that fits never shows one. `TruncatedTextProvider` lets a host change the
12
+ * rule for a subtree — a table turns it `disabled` while it scrolls or edits, so
13
+ * a thousand cells carry no listeners at all.
14
+ *
15
+ * Re-expressed from twenty-ui's OverflowingTextWithTooltip and its mode provider
16
+ * (MIT, see NOTICE): 500ms delay, bottom placement, a 300px cap on the hint,
17
+ * focusable on request, `alwaysShowTooltip` for a hint that is wanted anyway.
18
+ * The tooltip is this package's own `Tooltip`; its look is the Tooltip's.
19
+ *
20
+ * Anchored, not triggered: a tooltip trigger stamps `aria-expanded` on its
21
+ * child, which a run of text may not carry (axe, aria-allowed-attr), and the
22
+ * hint discloses nothing — it repeats the text. So the text is the tooltip's
23
+ * ANCHOR and this component opens it itself, after the delay, on hover or focus.
24
+ */
25
+ import { SizableText, Tooltip as GuiTooltip } from '@hanzo/gui';
26
+ import { createContext, useContext, useEffect, useRef, useState } from 'react';
27
+ import { Tooltip, TooltipContent } from './tooltip.js';
28
+ import { slot } from './slot.js';
29
+ const ModeContext = /* @__PURE__ */ createContext('measure-on-hover');
30
+ export function TruncatedTextProvider({ mode, children }) {
31
+ return _jsx(ModeContext.Provider, { value: mode, children: children });
32
+ }
33
+ /** Whether a rendered node holds more than it shows. False off the web, where there is no node to ask. */
34
+ export const overflows = (node) => {
35
+ const el = node;
36
+ if (!el || typeof el.scrollWidth !== 'number')
37
+ return false;
38
+ return el.scrollWidth > (el.clientWidth ?? 0) || (el.scrollHeight ?? 0) > (el.clientHeight ?? 0);
39
+ };
40
+ const DELAY = 500;
41
+ const MAX_W = 300;
42
+ export function TruncatedText({ text, lineClamp, tooltipContent, tooltipDelay = DELAY, tooltipPlace = 'bottom', isTooltipMultiline = false, alwaysShowTooltip = false, isFocusable = false, ...props }) {
43
+ const mode = useContext(ModeContext);
44
+ const [open, setOpen] = useState(false);
45
+ const [cut, setCut] = useState(false);
46
+ const node = useRef(null);
47
+ const timer = useRef(null);
48
+ const held = useRef(false);
49
+ useEffect(() => () => {
50
+ if (timer.current)
51
+ clearTimeout(timer.current);
52
+ }, []);
53
+ const lines = lineClamp && Number.isInteger(lineClamp) && lineClamp > 0 ? lineClamp : 1;
54
+ const host = (extra) => (_jsx(SizableText, { ...slot('truncated-text'), numberOfLines: lines, maxW: "100%", minW: 0, ...(lines > 1 ? { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' } } : null), ...props, ...extra, children: text }));
55
+ if (mode === 'disabled' && !alwaysShowTooltip)
56
+ return host({});
57
+ const measure = (target) => {
58
+ node.current = target;
59
+ const over = overflows(target);
60
+ setCut(over);
61
+ return over;
62
+ };
63
+ /** Arm the hint: measured now (hover mode) or when it opens (open mode), shown after the delay. */
64
+ const arm = (target, wait) => {
65
+ if (timer.current)
66
+ clearTimeout(timer.current);
67
+ const now = mode === 'measure-on-hover' ? measure(target) : ((node.current = target), false);
68
+ timer.current = setTimeout(() => {
69
+ const over = mode === 'measure-on-open' ? measure(node.current) : now;
70
+ if (alwaysShowTooltip || over)
71
+ setOpen(true);
72
+ }, wait);
73
+ };
74
+ const disarm = () => {
75
+ if (timer.current)
76
+ clearTimeout(timer.current);
77
+ timer.current = null;
78
+ if (!held.current)
79
+ setOpen(false);
80
+ };
81
+ return (_jsxs(Tooltip, { open: open, onOpenChange: (next) => !next && setOpen(false), placement: tooltipPlace, children: [_jsx(GuiTooltip.Anchor, { asChild: true, children: host({
82
+ onPointerEnter: (e) => arm(e?.currentTarget, tooltipDelay),
83
+ onPointerLeave: disarm,
84
+ // Focus opens at once; the hint stays while the text holds focus.
85
+ onFocus: (e) => {
86
+ held.current = true;
87
+ arm(e?.currentTarget, 0);
88
+ },
89
+ onBlur: () => {
90
+ held.current = false;
91
+ disarm();
92
+ },
93
+ ...(isFocusable ? { tabIndex: 0, focusVisibleStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' } } : null),
94
+ ...(cut ? { cursor: 'pointer' } : null),
95
+ }) }), _jsx(TooltipContent, { maxW: MAX_W, children: isTooltipMultiline && typeof (tooltipContent ?? text) === 'string' ? (_jsx(SizableText, { size: "$1", style: { whiteSpace: 'pre-wrap' }, children: tooltipContent ?? text })) : ((tooltipContent ?? text)) })] }));
96
+ }
97
+ //# sourceMappingURL=truncated-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncated-text.js","sourceRoot":"","sources":["../../../src/backends/gui/truncated-text.tsx"],"names":[],"mappings":"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"}