@prestack/thread-ui 0.0.1

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 (408) hide show
  1. package/CHANGELOG.md +348 -0
  2. package/dist/attach.d.ts +1 -0
  3. package/dist/attach.js +1 -0
  4. package/dist/ui/animations/anm_appear.d.ts +16 -0
  5. package/dist/ui/animations/anm_appear.js +10 -0
  6. package/dist/ui/animations/anm_blur_in.d.ts +22 -0
  7. package/dist/ui/animations/anm_blur_in.js +16 -0
  8. package/dist/ui/animations/anm_blur_out.d.ts +22 -0
  9. package/dist/ui/animations/anm_blur_out.js +16 -0
  10. package/dist/ui/animations/anm_dismiss.d.ts +22 -0
  11. package/dist/ui/animations/anm_dismiss.js +16 -0
  12. package/dist/ui/animations/anm_drop.d.ts +22 -0
  13. package/dist/ui/animations/anm_drop.js +16 -0
  14. package/dist/ui/animations/anm_fall.d.ts +22 -0
  15. package/dist/ui/animations/anm_fall.js +16 -0
  16. package/dist/ui/animations/anm_flash.d.ts +19 -0
  17. package/dist/ui/animations/anm_flash.js +16 -0
  18. package/dist/ui/animations/anm_glow.d.ts +16 -0
  19. package/dist/ui/animations/anm_glow.js +14 -0
  20. package/dist/ui/animations/anm_lift.d.ts +16 -0
  21. package/dist/ui/animations/anm_lift.js +14 -0
  22. package/dist/ui/animations/anm_nudge.d.ts +16 -0
  23. package/dist/ui/animations/anm_nudge.js +14 -0
  24. package/dist/ui/animations/anm_pop_in.d.ts +29 -0
  25. package/dist/ui/animations/anm_pop_in.js +20 -0
  26. package/dist/ui/animations/anm_pop_out.d.ts +29 -0
  27. package/dist/ui/animations/anm_pop_out.js +20 -0
  28. package/dist/ui/animations/anm_press.d.ts +19 -0
  29. package/dist/ui/animations/anm_press.js +10 -0
  30. package/dist/ui/animations/anm_pulse.d.ts +20 -0
  31. package/dist/ui/animations/anm_pulse.js +11 -0
  32. package/dist/ui/animations/anm_rise.d.ts +22 -0
  33. package/dist/ui/animations/anm_rise.js +16 -0
  34. package/dist/ui/animations/anm_shake.d.ts +23 -0
  35. package/dist/ui/animations/anm_shake.js +11 -0
  36. package/dist/ui/animations/anm_slide_in_left.d.ts +22 -0
  37. package/dist/ui/animations/anm_slide_in_left.js +16 -0
  38. package/dist/ui/animations/anm_slide_in_right.d.ts +22 -0
  39. package/dist/ui/animations/anm_slide_in_right.js +16 -0
  40. package/dist/ui/animations/anm_slide_out_left.d.ts +22 -0
  41. package/dist/ui/animations/anm_slide_out_left.js +16 -0
  42. package/dist/ui/animations/anm_slide_out_right.d.ts +22 -0
  43. package/dist/ui/animations/anm_slide_out_right.js +16 -0
  44. package/dist/ui/animations/anm_spin.d.ts +16 -0
  45. package/dist/ui/animations/anm_spin.js +10 -0
  46. package/dist/ui/animations/anm_swell.d.ts +16 -0
  47. package/dist/ui/animations/anm_swell.js +14 -0
  48. package/dist/ui/animations/anm_wobble.d.ts +27 -0
  49. package/dist/ui/animations/anm_wobble.js +22 -0
  50. package/dist/ui/animations/anm_zoom_in.d.ts +22 -0
  51. package/dist/ui/animations/anm_zoom_in.js +16 -0
  52. package/dist/ui/animations/anm_zoom_out.d.ts +22 -0
  53. package/dist/ui/animations/anm_zoom_out.js +16 -0
  54. package/dist/ui/animations.d.ts +59 -0
  55. package/dist/ui/animations.js +227 -0
  56. package/dist/ui/attach.d.ts +3 -0
  57. package/dist/ui/attach.js +497 -0
  58. package/dist/ui/charts.d.ts +32 -0
  59. package/dist/ui/charts.js +35 -0
  60. package/dist/ui/checked.d.ts +19 -0
  61. package/dist/ui/checked.js +3 -0
  62. package/dist/ui/collector.d.ts +32 -0
  63. package/dist/ui/collector.js +75 -0
  64. package/dist/ui/compositions.d.ts +21 -0
  65. package/dist/ui/compositions.js +305 -0
  66. package/dist/ui/consent.d.ts +22 -0
  67. package/dist/ui/consent.js +44 -0
  68. package/dist/ui/content.d.ts +9 -0
  69. package/dist/ui/content.js +11 -0
  70. package/dist/ui/contrast.d.ts +3 -0
  71. package/dist/ui/contrast.js +23 -0
  72. package/dist/ui/controls.d.ts +14 -0
  73. package/dist/ui/controls.js +2 -0
  74. package/dist/ui/disclosure.d.ts +14 -0
  75. package/dist/ui/disclosure.js +2 -0
  76. package/dist/ui/dismiss-layer.d.ts +14 -0
  77. package/dist/ui/dismiss-layer.js +66 -0
  78. package/dist/ui/door.d.ts +40 -0
  79. package/dist/ui/door.js +100 -0
  80. package/dist/ui/drag.d.ts +82 -0
  81. package/dist/ui/drag.js +212 -0
  82. package/dist/ui/elements/accordion.d.ts +12 -0
  83. package/dist/ui/elements/accordion.js +16 -0
  84. package/dist/ui/elements/accordion.works.d.ts +22 -0
  85. package/dist/ui/elements/accordion.works.js +44 -0
  86. package/dist/ui/elements/aspect-ratio.d.ts +10 -0
  87. package/dist/ui/elements/aspect-ratio.js +9 -0
  88. package/dist/ui/elements/aspect-ratio.works.d.ts +2 -0
  89. package/dist/ui/elements/aspect-ratio.works.js +3 -0
  90. package/dist/ui/elements/avatar.d.ts +11 -0
  91. package/dist/ui/elements/avatar.js +10 -0
  92. package/dist/ui/elements/avatar.works.d.ts +4 -0
  93. package/dist/ui/elements/avatar.works.js +16 -0
  94. package/dist/ui/elements/badge.d.ts +11 -0
  95. package/dist/ui/elements/badge.js +10 -0
  96. package/dist/ui/elements/badge.works.d.ts +5 -0
  97. package/dist/ui/elements/badge.works.js +6 -0
  98. package/dist/ui/elements/bars.d.ts +14 -0
  99. package/dist/ui/elements/bars.js +17 -0
  100. package/dist/ui/elements/bars.works.d.ts +12 -0
  101. package/dist/ui/elements/bars.works.js +20 -0
  102. package/dist/ui/elements/box.d.ts +12 -0
  103. package/dist/ui/elements/box.js +11 -0
  104. package/dist/ui/elements/breadcrumb.d.ts +10 -0
  105. package/dist/ui/elements/breadcrumb.js +12 -0
  106. package/dist/ui/elements/breadcrumb.works.d.ts +7 -0
  107. package/dist/ui/elements/breadcrumb.works.js +21 -0
  108. package/dist/ui/elements/button.d.ts +17 -0
  109. package/dist/ui/elements/button.js +16 -0
  110. package/dist/ui/elements/button.works.d.ts +17 -0
  111. package/dist/ui/elements/button.works.js +34 -0
  112. package/dist/ui/elements/column.d.ts +9 -0
  113. package/dist/ui/elements/column.js +8 -0
  114. package/dist/ui/elements/consent.d.ts +13 -0
  115. package/dist/ui/elements/consent.js +21 -0
  116. package/dist/ui/elements/consent.works.d.ts +41 -0
  117. package/dist/ui/elements/consent.works.js +79 -0
  118. package/dist/ui/elements/donut.d.ts +13 -0
  119. package/dist/ui/elements/donut.js +16 -0
  120. package/dist/ui/elements/donut.works.d.ts +11 -0
  121. package/dist/ui/elements/donut.works.js +28 -0
  122. package/dist/ui/elements/each.d.ts +14 -0
  123. package/dist/ui/elements/each.js +9 -0
  124. package/dist/ui/elements/each.works.d.ts +3 -0
  125. package/dist/ui/elements/each.works.js +68 -0
  126. package/dist/ui/elements/empty.d.ts +9 -0
  127. package/dist/ui/elements/empty.js +12 -0
  128. package/dist/ui/elements/field.d.ts +16 -0
  129. package/dist/ui/elements/field.js +15 -0
  130. package/dist/ui/elements/field.works.d.ts +17 -0
  131. package/dist/ui/elements/field.works.js +45 -0
  132. package/dist/ui/elements/funnel.d.ts +14 -0
  133. package/dist/ui/elements/funnel.js +17 -0
  134. package/dist/ui/elements/funnel.works.d.ts +12 -0
  135. package/dist/ui/elements/funnel.works.js +23 -0
  136. package/dist/ui/elements/gauge.d.ts +12 -0
  137. package/dist/ui/elements/gauge.js +15 -0
  138. package/dist/ui/elements/gauge.works.d.ts +11 -0
  139. package/dist/ui/elements/gauge.works.js +31 -0
  140. package/dist/ui/elements/glyph.d.ts +10 -0
  141. package/dist/ui/elements/glyph.js +9 -0
  142. package/dist/ui/elements/glyph.works.d.ts +5 -0
  143. package/dist/ui/elements/glyph.works.js +16 -0
  144. package/dist/ui/elements/grid.d.ts +9 -0
  145. package/dist/ui/elements/grid.js +8 -0
  146. package/dist/ui/elements/heatmap.d.ts +15 -0
  147. package/dist/ui/elements/heatmap.js +17 -0
  148. package/dist/ui/elements/heatmap.works.d.ts +11 -0
  149. package/dist/ui/elements/heatmap.works.js +11 -0
  150. package/dist/ui/elements/hit-box.d.ts +19 -0
  151. package/dist/ui/elements/hit-box.js +15 -0
  152. package/dist/ui/elements/hit-box.works.d.ts +87 -0
  153. package/dist/ui/elements/hit-box.works.js +451 -0
  154. package/dist/ui/elements/image.d.ts +10 -0
  155. package/dist/ui/elements/image.js +9 -0
  156. package/dist/ui/elements/line-chart.d.ts +13 -0
  157. package/dist/ui/elements/line-chart.js +16 -0
  158. package/dist/ui/elements/line-chart.works.d.ts +12 -0
  159. package/dist/ui/elements/line-chart.works.js +27 -0
  160. package/dist/ui/elements/link.d.ts +12 -0
  161. package/dist/ui/elements/link.js +15 -0
  162. package/dist/ui/elements/link.works.d.ts +10 -0
  163. package/dist/ui/elements/link.works.js +15 -0
  164. package/dist/ui/elements/media.d.ts +11 -0
  165. package/dist/ui/elements/media.js +22 -0
  166. package/dist/ui/elements/menu.d.ts +12 -0
  167. package/dist/ui/elements/menu.js +18 -0
  168. package/dist/ui/elements/menu.works.d.ts +50 -0
  169. package/dist/ui/elements/menu.works.js +100 -0
  170. package/dist/ui/elements/money.d.ts +10 -0
  171. package/dist/ui/elements/money.js +9 -0
  172. package/dist/ui/elements/money.works.d.ts +4 -0
  173. package/dist/ui/elements/money.works.js +4 -0
  174. package/dist/ui/elements/pagination.d.ts +11 -0
  175. package/dist/ui/elements/pagination.js +12 -0
  176. package/dist/ui/elements/pagination.works.d.ts +5 -0
  177. package/dist/ui/elements/pagination.works.js +15 -0
  178. package/dist/ui/elements/progress.d.ts +11 -0
  179. package/dist/ui/elements/progress.js +11 -0
  180. package/dist/ui/elements/progress.works.d.ts +2 -0
  181. package/dist/ui/elements/progress.works.js +6 -0
  182. package/dist/ui/elements/radio-group.d.ts +15 -0
  183. package/dist/ui/elements/radio-group.js +16 -0
  184. package/dist/ui/elements/radio-group.works.d.ts +10 -0
  185. package/dist/ui/elements/radio-group.works.js +22 -0
  186. package/dist/ui/elements/row.d.ts +9 -0
  187. package/dist/ui/elements/row.js +8 -0
  188. package/dist/ui/elements/scatter.d.ts +13 -0
  189. package/dist/ui/elements/scatter.js +15 -0
  190. package/dist/ui/elements/scatter.works.d.ts +11 -0
  191. package/dist/ui/elements/scatter.works.js +24 -0
  192. package/dist/ui/elements/select.d.ts +13 -0
  193. package/dist/ui/elements/select.js +11 -0
  194. package/dist/ui/elements/select.works.d.ts +4 -0
  195. package/dist/ui/elements/select.works.js +3 -0
  196. package/dist/ui/elements/separator.d.ts +10 -0
  197. package/dist/ui/elements/separator.js +9 -0
  198. package/dist/ui/elements/skeleton.d.ts +8 -0
  199. package/dist/ui/elements/skeleton.js +9 -0
  200. package/dist/ui/elements/slider.d.ts +14 -0
  201. package/dist/ui/elements/slider.js +10 -0
  202. package/dist/ui/elements/slider.works.d.ts +4 -0
  203. package/dist/ui/elements/slider.works.js +3 -0
  204. package/dist/ui/elements/sparkline.d.ts +10 -0
  205. package/dist/ui/elements/sparkline.js +15 -0
  206. package/dist/ui/elements/sparkline.works.d.ts +10 -0
  207. package/dist/ui/elements/sparkline.works.js +19 -0
  208. package/dist/ui/elements/spinner.d.ts +9 -0
  209. package/dist/ui/elements/spinner.js +12 -0
  210. package/dist/ui/elements/stack.d.ts +9 -0
  211. package/dist/ui/elements/stack.js +8 -0
  212. package/dist/ui/elements/stat.d.ts +12 -0
  213. package/dist/ui/elements/stat.js +10 -0
  214. package/dist/ui/elements/stat.works.d.ts +3 -0
  215. package/dist/ui/elements/stat.works.js +10 -0
  216. package/dist/ui/elements/surface.d.ts +9 -0
  217. package/dist/ui/elements/surface.js +15 -0
  218. package/dist/ui/elements/surface.works.d.ts +7 -0
  219. package/dist/ui/elements/surface.works.js +4 -0
  220. package/dist/ui/elements/table.d.ts +13 -0
  221. package/dist/ui/elements/table.js +16 -0
  222. package/dist/ui/elements/table.works.d.ts +11 -0
  223. package/dist/ui/elements/table.works.js +15 -0
  224. package/dist/ui/elements/tabs.d.ts +12 -0
  225. package/dist/ui/elements/tabs.js +16 -0
  226. package/dist/ui/elements/tabs.works.d.ts +25 -0
  227. package/dist/ui/elements/tabs.works.js +53 -0
  228. package/dist/ui/elements/text.d.ts +13 -0
  229. package/dist/ui/elements/text.js +9 -0
  230. package/dist/ui/elements/textarea.d.ts +14 -0
  231. package/dist/ui/elements/textarea.js +11 -0
  232. package/dist/ui/elements/textarea.works.d.ts +4 -0
  233. package/dist/ui/elements/textarea.works.js +3 -0
  234. package/dist/ui/elements/time.d.ts +11 -0
  235. package/dist/ui/elements/time.js +14 -0
  236. package/dist/ui/elements/time.works.d.ts +11 -0
  237. package/dist/ui/elements/time.works.js +16 -0
  238. package/dist/ui/elements/toggle.d.ts +11 -0
  239. package/dist/ui/elements/toggle.js +10 -0
  240. package/dist/ui/elements/toggle.works.d.ts +4 -0
  241. package/dist/ui/elements/toggle.works.js +3 -0
  242. package/dist/ui/elements/tooltip.d.ts +12 -0
  243. package/dist/ui/elements/tooltip.js +15 -0
  244. package/dist/ui/elements/tooltip.works.d.ts +28 -0
  245. package/dist/ui/elements/tooltip.works.js +54 -0
  246. package/dist/ui/elements/value.d.ts +12 -0
  247. package/dist/ui/elements/value.js +9 -0
  248. package/dist/ui/elements/value.works.d.ts +4 -0
  249. package/dist/ui/elements/value.works.js +4 -0
  250. package/dist/ui/elements.d.ts +1143 -0
  251. package/dist/ui/elements.js +68 -0
  252. package/dist/ui/focus-scope.d.ts +7 -0
  253. package/dist/ui/focus-scope.js +109 -0
  254. package/dist/ui/fonts.d.ts +103 -0
  255. package/dist/ui/fonts.js +243 -0
  256. package/dist/ui/generators/dev.d.ts +2 -0
  257. package/dist/ui/generators/dev.js +61 -0
  258. package/dist/ui/generators/elements.d.ts +31 -0
  259. package/dist/ui/generators/elements.js +520 -0
  260. package/dist/ui/generators/i18n.d.ts +5 -0
  261. package/dist/ui/generators/i18n.js +264 -0
  262. package/dist/ui/generators/icons.d.ts +1 -0
  263. package/dist/ui/generators/icons.js +187 -0
  264. package/dist/ui/generators/react.d.ts +26 -0
  265. package/dist/ui/generators/react.js +218 -0
  266. package/dist/ui/generators/routes.d.ts +11 -0
  267. package/dist/ui/generators/routes.js +597 -0
  268. package/dist/ui/generators/show.d.ts +1 -0
  269. package/dist/ui/generators/show.js +231 -0
  270. package/dist/ui/generators/styles.d.ts +1 -0
  271. package/dist/ui/generators/styles.js +502 -0
  272. package/dist/ui/generators/variants.d.ts +12 -0
  273. package/dist/ui/generators/variants.js +162 -0
  274. package/dist/ui/i18n/catalogs/en.d.ts +172 -0
  275. package/dist/ui/i18n/catalogs/en.js +148 -0
  276. package/dist/ui/i18n/format.d.ts +13 -0
  277. package/dist/ui/i18n/format.js +161 -0
  278. package/dist/ui/i18n/locales.d.ts +9 -0
  279. package/dist/ui/i18n/locales.js +20 -0
  280. package/dist/ui/i18n/parse.d.ts +45 -0
  281. package/dist/ui/i18n/parse.js +249 -0
  282. package/dist/ui/i18n/translator.d.ts +10 -0
  283. package/dist/ui/i18n/translator.js +22 -0
  284. package/dist/ui/i18n/types.d.ts +33 -0
  285. package/dist/ui/i18n/types.js +9 -0
  286. package/dist/ui/icons.d.ts +67 -0
  287. package/dist/ui/icons.js +249 -0
  288. package/dist/ui/islands/map.d.ts +33 -0
  289. package/dist/ui/islands/map.js +44 -0
  290. package/dist/ui/localizations.d.ts +33 -0
  291. package/dist/ui/localizations.js +51 -0
  292. package/dist/ui/makers/message.d.ts +1 -0
  293. package/dist/ui/makers/message.js +230 -0
  294. package/dist/ui/material.d.ts +83 -0
  295. package/dist/ui/material.js +95 -0
  296. package/dist/ui/materials/mat_bordered.d.ts +22 -0
  297. package/dist/ui/materials/mat_bordered.js +12 -0
  298. package/dist/ui/materials/mat_ceramic.d.ts +22 -0
  299. package/dist/ui/materials/mat_ceramic.js +12 -0
  300. package/dist/ui/materials/mat_clay.d.ts +22 -0
  301. package/dist/ui/materials/mat_clay.js +12 -0
  302. package/dist/ui/materials/mat_elevated.d.ts +32 -0
  303. package/dist/ui/materials/mat_elevated.js +23 -0
  304. package/dist/ui/materials/mat_flat.d.ts +50 -0
  305. package/dist/ui/materials/mat_flat.js +33 -0
  306. package/dist/ui/materials/mat_glass.d.ts +32 -0
  307. package/dist/ui/materials/mat_glass.js +19 -0
  308. package/dist/ui/materials/mat_lit.d.ts +22 -0
  309. package/dist/ui/materials/mat_lit.js +12 -0
  310. package/dist/ui/materials/mat_moulded.d.ts +16 -0
  311. package/dist/ui/materials/mat_moulded.js +10 -0
  312. package/dist/ui/materials.d.ts +56 -0
  313. package/dist/ui/materials.js +175 -0
  314. package/dist/ui/modes.d.ts +25 -0
  315. package/dist/ui/modes.js +25 -0
  316. package/dist/ui/navigation.d.ts +3 -0
  317. package/dist/ui/navigation.js +24 -0
  318. package/dist/ui/positioning.d.ts +24 -0
  319. package/dist/ui/positioning.js +48 -0
  320. package/dist/ui/presented.d.ts +10 -0
  321. package/dist/ui/presented.js +81 -0
  322. package/dist/ui/provider.d.ts +31 -0
  323. package/dist/ui/provider.js +104 -0
  324. package/dist/ui/render-loop.d.ts +12 -0
  325. package/dist/ui/render-loop.js +94 -0
  326. package/dist/ui/roving-focus.d.ts +15 -0
  327. package/dist/ui/roving-focus.js +143 -0
  328. package/dist/ui/screens.d.ts +17 -0
  329. package/dist/ui/screens.js +112 -0
  330. package/dist/ui/scroll-lock.d.ts +2 -0
  331. package/dist/ui/scroll-lock.js +24 -0
  332. package/dist/ui/series.d.ts +9 -0
  333. package/dist/ui/series.js +67 -0
  334. package/dist/ui/signals.d.ts +120 -0
  335. package/dist/ui/signals.js +286 -0
  336. package/dist/ui/styleguide.d.ts +27 -0
  337. package/dist/ui/styleguide.js +138 -0
  338. package/dist/ui/styleguides.d.ts +11 -0
  339. package/dist/ui/styleguides.js +299 -0
  340. package/dist/ui/themes.d.ts +5 -0
  341. package/dist/ui/themes.js +16 -0
  342. package/dist/ui/token.d.ts +16 -0
  343. package/dist/ui/token.js +37 -0
  344. package/dist/ui/tokens/shadow.d.ts +6 -0
  345. package/dist/ui/tokens/shadow.js +17 -0
  346. package/dist/ui/tokens.d.ts +180 -0
  347. package/dist/ui/tokens.js +200 -0
  348. package/dist/ui/validators.d.ts +37 -0
  349. package/dist/ui/validators.js +184 -0
  350. package/dist/ui/variant.d.ts +122 -0
  351. package/dist/ui/variant.js +201 -0
  352. package/dist/ui/variants/var_avatar-round.d.ts +23 -0
  353. package/dist/ui/variants/var_avatar-round.js +13 -0
  354. package/dist/ui/variants/var_bubble-me.d.ts +21 -0
  355. package/dist/ui/variants/var_bubble-me.js +13 -0
  356. package/dist/ui/variants/var_bubble-them.d.ts +18 -0
  357. package/dist/ui/variants/var_bubble-them.js +12 -0
  358. package/dist/ui/variants/var_button-border.d.ts +116 -0
  359. package/dist/ui/variants/var_button-border.js +75 -0
  360. package/dist/ui/variants/var_button-cta.d.ts +116 -0
  361. package/dist/ui/variants/var_button-cta.js +75 -0
  362. package/dist/ui/variants/var_button-destructive-ghost.d.ts +113 -0
  363. package/dist/ui/variants/var_button-destructive-ghost.js +71 -0
  364. package/dist/ui/variants/var_button-destructive.d.ts +116 -0
  365. package/dist/ui/variants/var_button-destructive.js +75 -0
  366. package/dist/ui/variants/var_button-fill.d.ts +116 -0
  367. package/dist/ui/variants/var_button-fill.js +75 -0
  368. package/dist/ui/variants/var_button-ghost.d.ts +113 -0
  369. package/dist/ui/variants/var_button-ghost.js +71 -0
  370. package/dist/ui/variants/var_button-glass.d.ts +84 -0
  371. package/dist/ui/variants/var_button-glass.js +54 -0
  372. package/dist/ui/variants/var_button-normal.d.ts +116 -0
  373. package/dist/ui/variants/var_button-normal.js +75 -0
  374. package/dist/ui/variants/var_button-quiet.d.ts +119 -0
  375. package/dist/ui/variants/var_button-quiet.js +73 -0
  376. package/dist/ui/variants/var_card.d.ts +30 -0
  377. package/dist/ui/variants/var_card.js +16 -0
  378. package/dist/ui/variants/var_chip.d.ts +18 -0
  379. package/dist/ui/variants/var_chip.js +12 -0
  380. package/dist/ui/variants/var_choice.d.ts +26 -0
  381. package/dist/ui/variants/var_choice.js +14 -0
  382. package/dist/ui/variants/var_framed.d.ts +11 -0
  383. package/dist/ui/variants/var_framed.js +9 -0
  384. package/dist/ui/variants/var_glyph-plain.d.ts +14 -0
  385. package/dist/ui/variants/var_glyph-plain.js +10 -0
  386. package/dist/ui/variants/var_input.d.ts +61 -0
  387. package/dist/ui/variants/var_input.js +42 -0
  388. package/dist/ui/variants/var_link-inline.d.ts +39 -0
  389. package/dist/ui/variants/var_link-inline.js +28 -0
  390. package/dist/ui/variants/var_list-row.d.ts +47 -0
  391. package/dist/ui/variants/var_list-row.js +33 -0
  392. package/dist/ui/variants/var_rule.d.ts +11 -0
  393. package/dist/ui/variants/var_rule.js +9 -0
  394. package/dist/ui/variants/var_skeleton-block.d.ts +17 -0
  395. package/dist/ui/variants/var_skeleton-block.js +11 -0
  396. package/dist/ui/variants/var_spinner-turning.d.ts +17 -0
  397. package/dist/ui/variants/var_spinner-turning.js +11 -0
  398. package/dist/ui/variants/var_stat-tile.d.ts +18 -0
  399. package/dist/ui/variants/var_stat-tile.js +12 -0
  400. package/dist/ui/variants/var_tab-bar.d.ts +24 -0
  401. package/dist/ui/variants/var_tab-bar.js +14 -0
  402. package/dist/ui/variants/var_tap-target.d.ts +33 -0
  403. package/dist/ui/variants/var_tap-target.js +24 -0
  404. package/dist/ui/variants.d.ts +174 -0
  405. package/dist/ui/variants.js +50 -0
  406. package/dist/ui/wrappers.d.ts +128 -0
  407. package/dist/ui/wrappers.js +220 -0
  408. package/package.json +16 -0
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { element, useSurface } from "../wrappers.js";
5
+ export const Spinner = element('Spinner', (props, className) => {
6
+ const surface = useSurface({ className: roleClass(undefined, className),
7
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
8
+ holds: [
9
+ 'spinner',
10
+ ], });
11
+ return (_jsx("span", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, "aria-label": surface.text(props.labelKey), children: null }));
12
+ }, 'e-spinner');
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface StackProps {
4
+ readonly children: ReactNode;
5
+ readonly dispatch?: string;
6
+ readonly input?: Readonly<Record<string, unknown>>;
7
+ readonly invokeOn?: 'press' | 'shown';
8
+ }
9
+ export declare const Stack: Element<'Stack', StackProps>;
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { element, useSurface } from "../wrappers.js";
4
+ export const Stack = element('Stack', (props, className) => {
5
+ const surface = useSurface({ className,
6
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) }, });
7
+ return (_jsx("div", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, children: props.children }));
8
+ }, 'e-stack');
@@ -0,0 +1,12 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface StatProps {
4
+ readonly labelKey: MessageKey;
5
+ readonly value?: unknown;
6
+ readonly compare?: number;
7
+ readonly format?: string;
8
+ readonly dispatch?: string;
9
+ readonly input?: Readonly<Record<string, unknown>>;
10
+ readonly invokeOn?: 'press' | 'shown';
11
+ }
12
+ export declare const Stat: Element<'Stat', StatProps>;
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { element, useSurface } from "../wrappers.js";
5
+ import { shown } from "./stat.works.js";
6
+ export const Stat = element('Stat', (props, className) => {
7
+ const surface = useSurface({ className: roleClass(undefined, className),
8
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) }, });
9
+ return (_jsxs("figure", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, children: [_jsx("span", { children: shown(props, surface).figure }), _jsx("figcaption", { children: surface.text(props.labelKey) }), _jsx("span", { children: shown(props, surface).delta })] }));
10
+ }, 'e-stat');
@@ -0,0 +1,3 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StatProps } from './stat.tsx';
3
+ export declare function shown(props: StatProps, _surface: unknown): Readonly<Record<string, ReactNode>>;
@@ -0,0 +1,10 @@
1
+ import { formatValue } from "../validators.js";
2
+ export function shown(props, _surface) {
3
+ const current = typeof props.value === 'number' ? props.value : Number(props.value ?? 0);
4
+ const against = props.compare;
5
+ const moved = against === undefined || against === 0 ? null : (current - against) / Math.abs(against);
6
+ return {
7
+ figure: formatValue(props.format ?? 'number', props.value),
8
+ delta: moved === null ? null : formatValue('percent', Math.round(moved * 1000) / 10),
9
+ };
10
+ }
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface SurfaceProps {
4
+ readonly children: ReactNode;
5
+ readonly dispatch?: string;
6
+ readonly input?: Readonly<Record<string, unknown>>;
7
+ readonly invokeOn?: 'press' | 'shown';
8
+ }
9
+ export declare const Surface: Element<'Surface', SurfaceProps>;
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { element, useSurface } from "../wrappers.js";
4
+ import { uses } from "./surface.works.js";
5
+ export const Surface = element('Surface', (props, className) => {
6
+ const kept = uses(props);
7
+ const surface = useSurface({ className,
8
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
9
+ holds: [
10
+ ...(kept.holds ?? []),
11
+ ],
12
+ animates: true,
13
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
14
+ return (_jsx("div", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), children: props.children }));
15
+ }, 'e-surface');
@@ -0,0 +1,7 @@
1
+ export declare function uses(_props: unknown): {
2
+ readonly holds?: readonly string[];
3
+ readonly animates?: boolean;
4
+ readonly on: {
5
+ readonly ref: (node: HTMLElement | null) => void;
6
+ };
7
+ };
@@ -0,0 +1,4 @@
1
+ import { useVisibility } from "../wrappers.js";
2
+ export function uses(_props) {
3
+ return { on: { ref: useVisibility(true) } };
4
+ }
@@ -0,0 +1,13 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import type { Row } from '../charts.tsx';
3
+ import { type Element } from '../wrappers.tsx';
4
+ export interface TableProps {
5
+ readonly rows: readonly Row[];
6
+ readonly columns: readonly Row[];
7
+ readonly by: string;
8
+ readonly titleKey?: MessageKey;
9
+ readonly dispatch?: string;
10
+ readonly input?: Readonly<Record<string, unknown>>;
11
+ readonly invokeOn?: 'press' | 'shown';
12
+ }
13
+ export declare const Table: Element<'Table', TableProps>;
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { element, useSurface } from "../wrappers.js";
5
+ import { Each } from "./each.js";
6
+ import { shown, heading, uses } from "./table.works.js";
7
+ export const Table = element('Table', (props, className) => {
8
+ const kept = uses(props);
9
+ const surface = useSurface({ className: roleClass(undefined, className),
10
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
11
+ holds: [
12
+ ...(kept.holds ?? []),
13
+ ],
14
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
15
+ return (_jsxs("table", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), ...(props.titleKey === undefined ? {} : { 'aria-label': surface.text(props.titleKey) }), children: [_jsx("thead", { children: _jsx("tr", { children: _jsx(Each, { rows: props.columns, by: 'field', children: (each0, at) => (_jsx("th", { ...heading(props, kept, each0, at), children: shown(props, each0, surface, kept).heading })) }) }) }), _jsx("tbody", { children: _jsx(Each, { rows: props.rows, by: props.by, children: (each0, at) => (_jsx("tr", { children: _jsx(Each, { rows: props.columns, by: 'field', children: (each1, at) => (_jsx("td", { children: shown(props, each0, each1, surface, kept).cell })) }) })) }) })] }));
16
+ }, 'e-table');
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Row } from '../charts.tsx';
3
+ import type { Surface } from '../door.ts';
4
+ import type { TableProps } from './table.tsx';
5
+ export declare function uses(props: TableProps): {
6
+ readonly holds?: readonly string[];
7
+ readonly animates?: boolean;
8
+ readonly on?: Readonly<Record<string, unknown>>;
9
+ };
10
+ export declare function shown(_props: TableProps, ...rest: readonly [Row, Surface, unknown] | readonly [Row, Row, Surface, unknown]): Readonly<Record<string, ReactNode>>;
11
+ export declare function heading(_props: TableProps, _kept: unknown, _column: Row, _at: number): Readonly<Record<string, string>>;
@@ -0,0 +1,15 @@
1
+ import { formatValue } from "../validators.js";
2
+ export function uses(props) {
3
+ return props.rows.length === 0 ? { holds: ['empty'] } : {};
4
+ }
5
+ export function shown(_props, ...rest) {
6
+ if (rest.length === 3) {
7
+ const [column, surface] = rest;
8
+ return { heading: surface.text(String(column['labelKey'])) };
9
+ }
10
+ const [row, column] = rest;
11
+ return { cell: formatValue(String(column['format'] ?? 'text'), row[String(column['field'])]) };
12
+ }
13
+ export function heading(_props, _kept, _column, _at) {
14
+ return { scope: 'col' };
15
+ }
@@ -0,0 +1,12 @@
1
+ import type { TabItem } from '../disclosure.tsx';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface TabsProps {
4
+ readonly items: readonly TabItem[];
5
+ readonly initial?: string;
6
+ readonly onChange?: (said: string) => void;
7
+ readonly orientation?: string;
8
+ readonly dispatch?: string;
9
+ readonly input?: Readonly<Record<string, unknown>>;
10
+ readonly invokeOn?: 'press' | 'shown';
11
+ }
12
+ export declare const Tabs: Element<'Tabs', TabsProps>;
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { element, useSurface } from "../wrappers.js";
5
+ import { Each } from "./each.js";
6
+ import { shown, strip, tab, panel, opened, uses } from "./tabs.works.js";
7
+ export const Tabs = element('Tabs', (props, className) => {
8
+ const kept = uses(props);
9
+ const surface = useSurface({ className: roleClass(undefined, className),
10
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
11
+ holds: [
12
+ ...(kept.holds ?? []),
13
+ ],
14
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
15
+ return (_jsxs("div", { ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), children: [_jsx("div", { className: `e-tabs-strip ${surface.className ?? ''}`, ...strip(props, kept), children: _jsx(Each, { rows: props.items, by: 'id', children: (each0, at) => (_jsx("button", { className: "e-tabs-tab", ...tab(props, kept, each0, at), children: shown(props, each0, surface, kept).label })) }) }), !opened(props, kept) ? null : _jsx("div", { ...panel(props, kept), children: shown(props, surface, kept).inside })] }));
16
+ }, 'e-tabs');
@@ -0,0 +1,25 @@
1
+ import type { ReactNode, RefObject } from 'react';
2
+ import type { Row } from '../charts.tsx';
3
+ import type { Surface } from '../door.ts';
4
+ import type { TabsProps } from './tabs.tsx';
5
+ type Kept = {
6
+ readonly list: RefObject<HTMLDivElement | null>;
7
+ readonly base: string;
8
+ readonly open: string | undefined;
9
+ readonly choose: (id: string) => void;
10
+ };
11
+ export declare function uses(props: TabsProps): {
12
+ readonly holds?: readonly string[];
13
+ readonly animates?: boolean;
14
+ readonly on?: Readonly<Record<string, unknown>>;
15
+ readonly list: RefObject<HTMLDivElement | null>;
16
+ readonly base: string;
17
+ readonly open: string | undefined;
18
+ readonly choose: (id: string) => void;
19
+ };
20
+ export declare function strip(props: TabsProps, kept: Kept): Readonly<Record<string, unknown>>;
21
+ export declare function tab(_props: TabsProps, kept: Kept, row: Row, _at: number): Readonly<Record<string, unknown>>;
22
+ export declare function opened(_props: TabsProps, kept: Kept): boolean;
23
+ export declare function panel(_props: TabsProps, kept: Kept): Readonly<Record<string, unknown>>;
24
+ export declare function shown(props: TabsProps, ...rest: readonly [Surface, Kept] | readonly [Row, Surface, Kept]): Readonly<Record<string, ReactNode>>;
25
+ export {};
@@ -0,0 +1,53 @@
1
+ import { useId, useRef, useState } from 'react';
2
+ import { ITEM_ATTR, useRovingFocus } from "../roving-focus.js";
3
+ export function uses(props) {
4
+ const list = useRef(null);
5
+ const base = useId();
6
+ const first = props.items.find((one) => one.disabled !== true)?.id;
7
+ const [active, setActive] = useState(props.initial ?? first);
8
+ useRovingFocus(list, { orientation: props.orientation === 'vertical' ? 'vertical' : 'horizontal' });
9
+ const open = props.items.find((one) => one.id === active) ?? props.items.find((one) => one.disabled !== true);
10
+ return {
11
+ list,
12
+ base,
13
+ open: open?.id,
14
+ choose: (id) => {
15
+ setActive(id);
16
+ props.onChange?.(id);
17
+ },
18
+ };
19
+ }
20
+ export function strip(props, kept) {
21
+ return { ref: kept.list, role: 'tablist', 'aria-orientation': props.orientation === 'vertical' ? 'vertical' : 'horizontal' };
22
+ }
23
+ export function tab(_props, kept, row, _at) {
24
+ const id = String(row['id']);
25
+ return {
26
+ ...{ [ITEM_ATTR]: '' },
27
+ type: 'button',
28
+ role: 'tab',
29
+ id: `${kept.base}-tab-${id}`,
30
+ 'aria-controls': `${kept.base}-panel-${id}`,
31
+ 'aria-selected': id === kept.open,
32
+ disabled: row['disabled'] === true,
33
+ onClick: () => kept.choose(id),
34
+ };
35
+ }
36
+ export function opened(_props, kept) {
37
+ return kept.open !== undefined;
38
+ }
39
+ export function panel(_props, kept) {
40
+ return {
41
+ role: 'tabpanel',
42
+ id: `${kept.base}-panel-${String(kept.open)}`,
43
+ 'aria-labelledby': `${kept.base}-tab-${String(kept.open)}`,
44
+ };
45
+ }
46
+ export function shown(props, ...rest) {
47
+ if (rest.length === 3) {
48
+ const [row, surface] = rest;
49
+ return { label: surface.text(String(row['labelKey'])) };
50
+ }
51
+ const [, kept] = rest;
52
+ return { inside: props.items.find((one) => one.id === kept.open)?.content ?? null };
53
+ }
@@ -0,0 +1,13 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import { type FontRoleId } from '../fonts.ts';
3
+ import { type Element } from '../wrappers.tsx';
4
+ export interface TextProps {
5
+ readonly k: MessageKey;
6
+ readonly with?: Readonly<Record<string, unknown>>;
7
+ readonly is?: FontRoleId;
8
+ readonly announce?: 'alert' | 'status';
9
+ readonly dispatch?: string;
10
+ readonly input?: Readonly<Record<string, unknown>>;
11
+ readonly invokeOn?: 'press' | 'shown';
12
+ }
13
+ export declare const Text: Element<'Text', TextProps>;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { element, useSurface } from "../wrappers.js";
5
+ export const Text = element('Text', (props, className) => {
6
+ const surface = useSurface({ className: roleClass(props.is, className),
7
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) }, });
8
+ return (_jsx("span", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, role: props.announce, children: surface.text(props.k, props.with) }));
9
+ }, 'e-text');
@@ -0,0 +1,14 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface TextareaProps {
4
+ readonly labelKey: MessageKey;
5
+ readonly name?: string;
6
+ readonly value?: string;
7
+ readonly onValue?: (said: string) => void;
8
+ readonly validator?: string;
9
+ readonly rows?: number;
10
+ readonly dispatch?: string;
11
+ readonly input?: Readonly<Record<string, unknown>>;
12
+ readonly invokeOn?: 'press' | 'shown';
13
+ }
14
+ export declare const Textarea: Element<'Textarea', TextareaProps>;
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { element, useSurface } from "../wrappers.js";
5
+ import { limited } from "../validators.js";
6
+ import { does } from "./textarea.works.js";
7
+ export const Textarea = element('Textarea', (props, className) => {
8
+ const surface = useSurface({ className: roleClass(undefined, className),
9
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) }, });
10
+ return (_jsxs("label", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, children: [_jsx("span", { children: surface.text(props.labelKey) }), props.value === undefined ? null : _jsx("textarea", { name: props.name, rows: props.rows ?? 4, ...limited(props.validator), disabled: surface.marked('disabled'), value: props.value ?? '', onChange: (event) => does(props).wrote(event.target.value) })] }));
11
+ }, 'e-textarea');
@@ -0,0 +1,4 @@
1
+ import type { TextareaProps } from './textarea.tsx';
2
+ export declare function does(props: TextareaProps): {
3
+ readonly wrote: (said: string) => void;
4
+ };
@@ -0,0 +1,3 @@
1
+ export function does(props) {
2
+ return { wrote: (said) => props.onValue?.(said) };
3
+ }
@@ -0,0 +1,11 @@
1
+ import { type FontRoleId } from '../fonts.ts';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface TimeProps {
4
+ readonly value?: unknown;
5
+ readonly relative?: boolean;
6
+ readonly is?: FontRoleId;
7
+ readonly dispatch?: string;
8
+ readonly input?: Readonly<Record<string, unknown>>;
9
+ readonly invokeOn?: 'press' | 'shown';
10
+ }
11
+ export declare const Time: Element<'Time', TimeProps>;
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { roleClass } from "../fonts.js";
3
+ import { element, useSurface } from "../wrappers.js";
4
+ import { shows, uses } from "./time.works.js";
5
+ export const Time = element('Time', (props, className) => {
6
+ const kept = uses(props);
7
+ const surface = useSurface({ className: roleClass(props.is, className),
8
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
9
+ holds: [
10
+ ...(kept.holds ?? []),
11
+ ],
12
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
13
+ return (shows(props, surface, kept));
14
+ }, 'e-time');
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { Surface } from '../door.ts';
3
+ import type { TimeProps } from './time.tsx';
4
+ export declare function uses(props: TimeProps): {
5
+ readonly holds?: readonly string[];
6
+ readonly animates?: boolean;
7
+ readonly at: number | undefined;
8
+ };
9
+ export declare function shows(props: TimeProps, surface: Surface, kept: {
10
+ readonly at: number | undefined;
11
+ }): ReactNode;
@@ -0,0 +1,16 @@
1
+ import { useCallback, useSyncExternalStore } from 'react';
2
+ import { renderValue } from "../content.js";
3
+ import { useUi } from "../wrappers.js";
4
+ const NO_CLOCK_YET = () => undefined;
5
+ export function uses(props) {
6
+ const { now, ticker } = useUi();
7
+ const subscribe = useCallback((onChange) => (props.relative === true && ticker !== undefined ? ticker.subscribe(onChange) : () => undefined), [props.relative, ticker]);
8
+ const read = useCallback(() => now?.(), [now]);
9
+ return { at: useSyncExternalStore(subscribe, read, NO_CLOCK_YET) };
10
+ }
11
+ export function shows(props, surface, kept) {
12
+ if (props.relative !== true || kept.at === undefined) {
13
+ return renderValue({ validator: 'datetime', value: props.value }, surface);
14
+ }
15
+ return renderValue({ validator: 'relativeTime', value: props.value, context: { now: kept.at } }, surface);
16
+ }
@@ -0,0 +1,11 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface ToggleProps {
4
+ readonly labelKey: MessageKey;
5
+ readonly on?: boolean;
6
+ readonly onToggle?: (said: boolean) => void;
7
+ readonly dispatch?: string;
8
+ readonly input?: Readonly<Record<string, unknown>>;
9
+ readonly invokeOn?: 'press' | 'shown';
10
+ }
11
+ export declare const Toggle: Element<'Toggle', ToggleProps>;
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { element, useSurface } from "../wrappers.js";
5
+ import { does } from "./toggle.works.js";
6
+ export const Toggle = element('Toggle', (props, className) => {
7
+ const surface = useSurface({ className: roleClass(undefined, className),
8
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) }, });
9
+ return (_jsxs("label", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, children: [props.on === undefined ? null : _jsx("input", { type: "checkbox", disabled: surface.marked('disabled'), checked: props.on === true, onChange: (event) => does(props).changed(event.target.checked) }), _jsx("span", { children: surface.text(props.labelKey) })] }));
10
+ }, 'e-toggle');
@@ -0,0 +1,4 @@
1
+ import type { ToggleProps } from './toggle.tsx';
2
+ export declare function does(props: ToggleProps): {
3
+ readonly changed: (on: boolean) => void;
4
+ };
@@ -0,0 +1,3 @@
1
+ export function does(props) {
2
+ return { changed: (on) => props.onToggle?.(on) };
3
+ }
@@ -0,0 +1,12 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { MessageKey } from '../content.tsx';
3
+ import { type Element } from '../wrappers.tsx';
4
+ export interface TooltipProps {
5
+ readonly children: ReactNode;
6
+ readonly labelKey: MessageKey;
7
+ readonly side?: string;
8
+ readonly dispatch?: string;
9
+ readonly input?: Readonly<Record<string, unknown>>;
10
+ readonly invokeOn?: 'press' | 'shown';
11
+ }
12
+ export declare const Tooltip: Element<'Tooltip', TooltipProps>;
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { element, useSurface } from "../wrappers.js";
4
+ import { measured, bubble, showing, uses } from "./tooltip.works.js";
5
+ export const Tooltip = element('Tooltip', (props, className) => {
6
+ const kept = uses(props);
7
+ const surface = useSurface({ className,
8
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
9
+ holds: [
10
+ ...(kept.holds ?? []),
11
+ ],
12
+ measures: measured(props, kept),
13
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
14
+ return (_jsxs("span", { ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), style: surface.measures, children: [props.children, !showing(props, kept) ? null : _jsx("span", { className: `e-tooltip-bubble ${surface.className ?? ''}`, ...bubble(props, kept), children: surface.text(props.labelKey) })] }));
15
+ }, 'e-tooltip');
@@ -0,0 +1,28 @@
1
+ import type { TooltipProps } from './tooltip.tsx';
2
+ type Kept = {
3
+ readonly trigger: React.RefObject<HTMLSpanElement | null>;
4
+ readonly layer: React.RefObject<HTMLSpanElement | null>;
5
+ readonly open: boolean;
6
+ readonly at: {
7
+ readonly x: number;
8
+ readonly y: number;
9
+ } | null;
10
+ readonly show: (to: boolean) => void;
11
+ };
12
+ export declare function uses(props: TooltipProps): {
13
+ readonly holds?: readonly string[];
14
+ readonly animates?: boolean;
15
+ readonly on: Readonly<Record<string, unknown>>;
16
+ readonly trigger: React.RefObject<HTMLSpanElement | null>;
17
+ readonly layer: React.RefObject<HTMLSpanElement | null>;
18
+ readonly open: boolean;
19
+ readonly at: {
20
+ readonly x: number;
21
+ readonly y: number;
22
+ } | null;
23
+ readonly show: (to: boolean) => void;
24
+ };
25
+ export declare function showing(_props: TooltipProps, kept: Kept): boolean;
26
+ export declare function bubble(props: TooltipProps, kept: Kept): Readonly<Record<string, unknown>>;
27
+ export declare function measured(_props: TooltipProps, kept: Kept): Readonly<Record<string, string | number>>;
28
+ export {};
@@ -0,0 +1,54 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { useDismissLayer } from "../dismiss-layer.js";
3
+ import { positionOf } from "../positioning.js";
4
+ export function uses(props) {
5
+ const trigger = useRef(null);
6
+ const layer = useRef(null);
7
+ const [open, setOpen] = useState(false);
8
+ const [at, setAt] = useState(null);
9
+ useDismissLayer(layer, {
10
+ active: open,
11
+ dismissOnEscape: true,
12
+ dismissOnOutside: true,
13
+ onDismiss: () => setOpen(false),
14
+ });
15
+ useEffect(() => {
16
+ if (!open)
17
+ return undefined;
18
+ const anchor = trigger.current;
19
+ const floating = layer.current;
20
+ if (anchor === null || floating === null)
21
+ return undefined;
22
+ let live = true;
23
+ void positionOf(anchor, floating, { placement: (props.side ?? 'top') }).then((position) => {
24
+ if (live)
25
+ setAt({ x: position.x, y: position.y });
26
+ });
27
+ return () => {
28
+ live = false;
29
+ };
30
+ }, [open, props.side]);
31
+ return {
32
+ on: {
33
+ ref: trigger,
34
+ onPointerEnter: () => setOpen(true),
35
+ onPointerLeave: () => setOpen(false),
36
+ onFocus: () => setOpen(true),
37
+ onBlur: () => setOpen(false),
38
+ },
39
+ trigger,
40
+ layer,
41
+ open,
42
+ at,
43
+ show: setOpen,
44
+ };
45
+ }
46
+ export function showing(_props, kept) {
47
+ return kept.open;
48
+ }
49
+ export function bubble(props, kept) {
50
+ return { ref: kept.layer, role: 'tooltip', 'data-side': props.side ?? 'top' };
51
+ }
52
+ export function measured(_props, kept) {
53
+ return kept.at === null ? {} : { x: `${String(kept.at.x)}px`, y: `${String(kept.at.y)}px` };
54
+ }
@@ -0,0 +1,12 @@
1
+ import { type FontRoleId } from '../fonts.ts';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface ValueProps {
4
+ readonly validator: string;
5
+ readonly value?: unknown;
6
+ readonly context?: Readonly<Record<string, unknown>>;
7
+ readonly is?: FontRoleId;
8
+ readonly dispatch?: string;
9
+ readonly input?: Readonly<Record<string, unknown>>;
10
+ readonly invokeOn?: 'press' | 'shown';
11
+ }
12
+ export declare const Value: Element<'Value', ValueProps>;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { roleClass } from "../fonts.js";
3
+ import { element, useSurface } from "../wrappers.js";
4
+ import { shows } from "./value.works.js";
5
+ export const Value = element('Value', (props, className) => {
6
+ const surface = useSurface({ className: roleClass(props.is, className),
7
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) }, });
8
+ return (shows(props, surface));
9
+ }, 'e-value');
@@ -0,0 +1,4 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Surface } from '../door.ts';
3
+ import type { ValueProps } from './value.tsx';
4
+ export declare function shows(props: ValueProps, surface: Surface): ReactNode;
@@ -0,0 +1,4 @@
1
+ import { renderValue } from "../content.js";
2
+ export function shows(props, surface) {
3
+ return renderValue({ validator: props.validator, value: props.value, ...(props.context === undefined ? {} : { context: props.context }) }, surface);
4
+ }