@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,17 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { measured as marking } from "../charts.js";
5
+ import { element, useSurface } from "../wrappers.js";
6
+ import { Each } from "./each.js";
7
+ import { shown, sized, uses } from "./bars.works.js";
8
+ export const Bars = element('Bars', (props, className) => {
9
+ const kept = uses(props);
10
+ const surface = useSurface({ className: roleClass(undefined, className),
11
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
12
+ holds: [
13
+ ...(kept.holds ?? []),
14
+ ],
15
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
16
+ return (_jsx("div", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), role: "img", ...(props.titleKey === undefined ? {} : { 'aria-label': surface.text(props.titleKey) }), children: _jsx(Each, { rows: props.rows, by: props.by, children: (each0, at) => (_jsxs("span", { style: marking(sized(props, kept, each0, at)), children: [_jsx("span", { children: shown(props, each0, surface, kept).label }), _jsx("span", { children: shown(props, each0, surface, kept).amount })] })) }) }));
17
+ }, 'e-bars');
@@ -0,0 +1,12 @@
1
+ import { type Row } from '../charts.tsx';
2
+ import type { BarsProps } from './bars.tsx';
3
+ export declare function uses(props: BarsProps): {
4
+ readonly holds?: readonly string[];
5
+ readonly animates?: boolean;
6
+ readonly on?: Readonly<Record<string, unknown>>;
7
+ readonly ramp: readonly string[];
8
+ };
9
+ export declare function sized(props: BarsProps, kept: {
10
+ readonly ramp: readonly string[];
11
+ }, row: Row, at: number): Readonly<Record<string, string | number>>;
12
+ export declare function shown(props: BarsProps, row: Row, _surface: unknown, _kept?: unknown): Readonly<Record<string, string>>;
@@ -0,0 +1,20 @@
1
+ import { formatValue } from "../validators.js";
2
+ import { seriesColour } from "../series.js";
3
+ import { num, str, useRamp } from "../charts.js";
4
+ export function uses(props) {
5
+ const ramp = useRamp(props.rows.length);
6
+ return { ...(props.rows.length === 0 ? { holds: ['empty'] } : {}), ramp };
7
+ }
8
+ export function sized(props, kept, row, at) {
9
+ const most = Math.max(...props.rows.map((one) => num(one, props.value)), 0) || 1;
10
+ return {
11
+ series: seriesColour(kept.ramp, at),
12
+ fraction: `${((num(row, props.value) / most) * 100).toFixed(1)}%`,
13
+ };
14
+ }
15
+ export function shown(props, row, _surface, _kept) {
16
+ return {
17
+ label: str(row, props.by),
18
+ amount: String(formatValue(props.format ?? 'number', num(row, props.value))),
19
+ };
20
+ }
@@ -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 BoxProps {
5
+ readonly children: ReactNode;
6
+ readonly labelKey?: MessageKey;
7
+ readonly scrolling?: boolean;
8
+ readonly dispatch?: string;
9
+ readonly input?: Readonly<Record<string, unknown>>;
10
+ readonly invokeOn?: 'press' | 'shown';
11
+ }
12
+ export declare const Box: Element<'Box', BoxProps>;
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { element, useSurface } from "../wrappers.js";
4
+ export const Box = element('Box', (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
+ holds: [
8
+ ...(props.scrolling === true ? ['scrolling'] : []),
9
+ ], });
10
+ return (_jsx("div", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, ...(props.labelKey === undefined ? {} : { role: 'group' }), ...(props.labelKey === undefined ? {} : { 'aria-label': surface.text(props.labelKey) }), children: props.children }));
11
+ }, 'e-box');
@@ -0,0 +1,10 @@
1
+ import type { MapIsland } from '../islands/map.ts';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface BreadcrumbProps {
4
+ readonly map: MapIsland;
5
+ readonly current: string;
6
+ readonly dispatch?: string;
7
+ readonly input?: Readonly<Record<string, unknown>>;
8
+ readonly invokeOn?: 'press' | 'shown';
9
+ }
10
+ export declare const Breadcrumb: Element<'Breadcrumb', BreadcrumbProps>;
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { Link } from "./link.js";
5
+ import { element, useSurface } from "../wrappers.js";
6
+ import { Each } from "./each.js";
7
+ import { crumb, steps } from "./breadcrumb.works.js";
8
+ export const Breadcrumb = element('Breadcrumb', (props, className) => {
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
+ return (_jsx("nav", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, "aria-label": surface.text('nav.breadcrumb'), children: _jsx(Each, { rows: steps(props), by: 'id', children: (each0, at) => (_jsx(Link.linkInline, { ...crumb(props, each0, at) })) }) }));
12
+ }, 'e-breadcrumb');
@@ -0,0 +1,7 @@
1
+ import type { Row } from '../charts.tsx';
2
+ import type { BreadcrumbProps } from './breadcrumb.tsx';
3
+ import type { LinkProps } from './link.tsx';
4
+ export declare function steps(props: BreadcrumbProps): readonly Row[];
5
+ export declare function crumb(_props: BreadcrumbProps, row: Row, _at: number): LinkProps & {
6
+ readonly 'aria-current'?: 'page';
7
+ };
@@ -0,0 +1,21 @@
1
+ import { trailTo } from "../navigation.js";
2
+ export function steps(props) {
3
+ const known = new Map(props.map.screens.map((one) => [one.id, one]));
4
+ if (!known.has(props.current))
5
+ return [];
6
+ const trail = trailTo(props.map, props.current);
7
+ return trail.flatMap((id, at) => {
8
+ const screen = known.get(id);
9
+ if (screen === undefined)
10
+ return [];
11
+ return [{ id, nameKey: screen.nameKey, here: at === trail.length - 1 }];
12
+ });
13
+ }
14
+ export function crumb(_props, row, _at) {
15
+ return {
16
+ navigateTo: String(row['id']),
17
+ labelKey: String(row['nameKey']),
18
+ is: 'label',
19
+ ...(row['here'] === true ? { 'aria-current': 'page' } : {}),
20
+ };
21
+ }
@@ -0,0 +1,17 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface ButtonProps {
4
+ readonly label: MessageKey;
5
+ readonly with?: Readonly<Record<string, unknown>>;
6
+ readonly icon?: string;
7
+ readonly shows?: string;
8
+ readonly type?: string;
9
+ readonly disabled?: boolean;
10
+ readonly loading?: boolean;
11
+ readonly dispatch?: string;
12
+ readonly input?: Readonly<Record<string, unknown>>;
13
+ readonly navigateTo?: string;
14
+ readonly onPress?: () => void;
15
+ readonly invokeOn?: 'press' | 'shown';
16
+ }
17
+ export declare const Button: Element<'Button', ButtonProps>;
@@ -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 { shown, iconed, worded, uses, wires } from "./button.works.js";
6
+ export const Button = element('Button', (props, className) => {
7
+ const kept = uses(props);
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
+ holds: [
11
+ ...(kept.holds ?? []),
12
+ ],
13
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
14
+ const wired = wires(props, kept, surface);
15
+ return (_jsxs("button", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), ...(wired.on ?? {}), children: [!iconed(props, kept) ? null : _jsx("span", { className: "e-button-symbol", children: shown(props, surface, kept, wired).symbol }), !worded(props, kept) ? null : _jsx("span", { children: shown(props, surface, kept, wired).wording })] }));
16
+ }, 'e-button');
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Surface } from '../door.ts';
3
+ import type { ButtonProps } from './button.tsx';
4
+ export declare function uses(props: ButtonProps): {
5
+ readonly holds?: readonly string[];
6
+ readonly animates?: boolean;
7
+ readonly on?: Readonly<Record<string, unknown>>;
8
+ readonly press: (() => void) | undefined;
9
+ };
10
+ export declare function wires(props: ButtonProps, kept: {
11
+ readonly press: (() => void) | undefined;
12
+ }, surface: Surface): {
13
+ readonly on: Readonly<Record<string, unknown>>;
14
+ };
15
+ export declare function iconed(props: ButtonProps, _kept?: unknown): boolean;
16
+ export declare function worded(props: ButtonProps, _kept?: unknown): boolean;
17
+ export declare function shown(props: ButtonProps, surface: Surface, _kept: unknown, _wired?: unknown): Readonly<Record<string, ReactNode>>;
@@ -0,0 +1,34 @@
1
+ import { pressOf, usePress } from "../wrappers.js";
2
+ import { drawn } from "./glyph.works.js";
3
+ export function uses(props) {
4
+ return {
5
+ holds: [
6
+ ...(props.disabled === true ? ['disabled'] : []),
7
+ ...(props.loading === true ? ['loading'] : []),
8
+ ],
9
+ press: usePress(pressOf(props), { element: 'Button', name: props.label }),
10
+ };
11
+ }
12
+ export function wires(props, kept, surface) {
13
+ const inert = surface.marked('disabled') || surface.marked('loading');
14
+ return {
15
+ on: {
16
+ type: props.type ?? 'button',
17
+ disabled: inert,
18
+ ...(props.shows === 'icon' ? { 'aria-label': surface.text(props.label, props.with) } : {}),
19
+ onClick: inert ? undefined : kept.press,
20
+ },
21
+ };
22
+ }
23
+ export function iconed(props, _kept) {
24
+ return props.icon !== undefined;
25
+ }
26
+ export function worded(props, _kept) {
27
+ return props.shows !== 'icon';
28
+ }
29
+ export function shown(props, surface, _kept, _wired) {
30
+ return {
31
+ symbol: props.icon === undefined ? null : drawn(props.icon, { 'aria-hidden': true }),
32
+ wording: props.shows === 'icon' ? null : surface.text(props.label, props.with),
33
+ };
34
+ }
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface ColumnProps {
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 Column: Element<'Column', ColumnProps>;
@@ -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 Column = element('Column', (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-column');
@@ -0,0 +1,13 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import type { ConsentDecision } from '../consent.ts';
3
+ import { type Element } from '../wrappers.tsx';
4
+ export interface ConsentProps {
5
+ readonly decision?: ConsentDecision;
6
+ readonly onDecide: (said: ConsentDecision) => void;
7
+ readonly policyKey?: MessageKey;
8
+ readonly preselected: readonly string[];
9
+ readonly dispatch?: string;
10
+ readonly input?: Readonly<Record<string, unknown>>;
11
+ readonly invokeOn?: 'press' | 'shown';
12
+ }
13
+ export declare const Consent: Element<'Consent', ConsentProps>;
@@ -0,0 +1,21 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { roleClass } from "../fonts.js";
4
+ import { Box } from "./box.js";
5
+ import { Column } from "./column.js";
6
+ import { Text } from "./text.js";
7
+ import { Toggle } from "./toggle.js";
8
+ import { Button } from "./button.js";
9
+ import { element, useSurface } from "../wrappers.js";
10
+ import { Each } from "./each.js";
11
+ import { title, policy, hasPolicy, categories, label, describe, chooser, optional, fixed, required, withdraw, withdrawable, decline, accept, acceptAll, uses } from "./consent.works.js";
12
+ export const Consent = element('Consent', (props, className) => {
13
+ const kept = uses(props);
14
+ const surface = useSurface({ className: roleClass(undefined, className),
15
+ invokes: { ...(props.dispatch === undefined ? {} : { dispatch: props.dispatch }), ...(props.input === undefined ? {} : { input: props.input }), ...(props.invokeOn === undefined ? {} : { on: props.invokeOn }) },
16
+ holds: [
17
+ ...(kept.holds ?? []),
18
+ ],
19
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
20
+ return (_jsx(_Fragment, { children: _jsx(Box.card, { children: _jsxs(Column, { children: [_jsx(Text, { ...title(props, kept) }), !hasPolicy(props, kept) ? null : _jsx(Text, { ...policy(props, kept) }), _jsx(Column, { children: _jsx(Each, { rows: categories(props, kept), by: 'id', children: (each0, at) => (_jsxs(Box, { children: [_jsxs(Column, { children: [_jsx(Text, { ...label(props, kept, each0, at) }), _jsx(Text, { ...describe(props, kept, each0, at) })] }), !optional(props, kept, each0) ? null : _jsx(Toggle.input, { ...chooser(props, kept, each0, at) }), !required(props, kept, each0) ? null : _jsx(Text, { ...fixed(props, kept, each0, at) })] })) }) }), _jsxs(Box, { children: [!withdrawable(props, kept) ? null : _jsx(Button.buttonQuiet, { ...withdraw(props, kept) }), _jsx(Button.buttonBorder, { ...decline(props, kept) }), _jsx(Button.buttonBorder, { ...accept(props, kept) }), _jsx(Button.buttonFill, { ...acceptAll(props, kept) })] })] }) }) }));
21
+ }, 'e-consent');
@@ -0,0 +1,41 @@
1
+ import { type ConsentCategory, type ConsentDecision } from '../consent.ts';
2
+ import type { Row } from '../charts.tsx';
3
+ import type { ButtonProps } from './button.tsx';
4
+ import type { ConsentProps } from './consent.tsx';
5
+ import type { TextProps } from './text.tsx';
6
+ import type { ToggleProps } from './toggle.tsx';
7
+ type Kept = {
8
+ readonly categories: readonly ConsentCategory[];
9
+ readonly selected: readonly string[];
10
+ readonly accepted: boolean;
11
+ readonly offered: readonly string[];
12
+ readonly toggle: (id: string, on: boolean) => void;
13
+ readonly decide: (decision: ConsentDecision['decision'], accepted: readonly string[]) => void;
14
+ };
15
+ export declare function uses(props: ConsentProps): {
16
+ readonly holds?: readonly string[];
17
+ readonly animates?: boolean;
18
+ readonly on?: Readonly<Record<string, unknown>>;
19
+ readonly categories: readonly ConsentCategory[];
20
+ readonly selected: readonly string[];
21
+ readonly accepted: boolean;
22
+ readonly offered: readonly string[];
23
+ readonly toggle: (id: string, on: boolean) => void;
24
+ readonly decide: (decision: ConsentDecision['decision'], accepted: readonly string[]) => void;
25
+ };
26
+ export declare function categories(_props: ConsentProps, kept: Kept): readonly Row[];
27
+ export declare function hasPolicy(props: ConsentProps, _kept: Kept): boolean;
28
+ export declare function withdrawable(_props: ConsentProps, kept: Kept): boolean;
29
+ export declare function optional(_props: ConsentProps, _kept: Kept, row: Row): boolean;
30
+ export declare function required(_props: ConsentProps, _kept: Kept, row: Row): boolean;
31
+ export declare function title(_props: ConsentProps, _kept: Kept, _at?: number): TextProps;
32
+ export declare function policy(props: ConsentProps, _kept: Kept, _at?: number): TextProps;
33
+ export declare function label(_props: ConsentProps, _kept: Kept, row: Row, _at: number): TextProps;
34
+ export declare function describe(_props: ConsentProps, _kept: Kept, row: Row, _at: number): TextProps;
35
+ export declare function fixed(_props: ConsentProps, _kept: Kept, _row: Row, _at: number): TextProps;
36
+ export declare function chooser(_props: ConsentProps, kept: Kept, row: Row, _at?: number): ToggleProps;
37
+ export declare function withdraw(_props: ConsentProps, kept: Kept): ButtonProps;
38
+ export declare function decline(_props: ConsentProps, kept: Kept): ButtonProps;
39
+ export declare function accept(_props: ConsentProps, kept: Kept): ButtonProps;
40
+ export declare function acceptAll(_props: ConsentProps, kept: Kept): ButtonProps;
41
+ export {};
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { useState } from 'react';
3
+ import { consentCategories } from "../consent.js";
4
+ function firstSelection(categories, decision, preselected) {
5
+ const answered = decision !== undefined;
6
+ return categories
7
+ .filter((one) => one.required ||
8
+ (answered
9
+ ? decision.decision === 'accepted' && decision.accepted.includes(one.id)
10
+ : preselected.includes(one.id)))
11
+ .map((one) => one.id);
12
+ }
13
+ export function uses(props) {
14
+ const categories = consentCategories();
15
+ const [selected, setSelected] = useState(() => firstSelection(categories, props.decision, props.preselected ?? []));
16
+ const offered = categories.map((one) => one.id);
17
+ return {
18
+ categories,
19
+ selected,
20
+ offered,
21
+ accepted: props.decision?.decision === 'accepted',
22
+ toggle: (id, on) => {
23
+ setSelected((was) => (on ? [...was, id] : was.filter((one) => one !== id)));
24
+ },
25
+ decide: (decision, accepted) => {
26
+ props.onDecide({ decision, accepted: [...accepted], offered });
27
+ },
28
+ };
29
+ }
30
+ export function categories(_props, kept) {
31
+ return kept.categories;
32
+ }
33
+ export function hasPolicy(props, _kept) {
34
+ return props.policyKey !== undefined;
35
+ }
36
+ export function withdrawable(_props, kept) {
37
+ return kept.accepted;
38
+ }
39
+ export function optional(_props, _kept, row) {
40
+ return row['required'] !== true;
41
+ }
42
+ export function required(_props, _kept, row) {
43
+ return row['required'] === true;
44
+ }
45
+ export function title(_props, _kept, _at) {
46
+ return { k: 'consent.title', is: 'heading' };
47
+ }
48
+ export function policy(props, _kept, _at) {
49
+ return { k: props.policyKey ?? 'consent.title', is: 'body' };
50
+ }
51
+ export function label(_props, _kept, row, _at) {
52
+ return { k: String(row['labelKey']), is: 'label' };
53
+ }
54
+ export function describe(_props, _kept, row, _at) {
55
+ return { k: String(row['describeKey']), is: 'body' };
56
+ }
57
+ export function fixed(_props, _kept, _row, _at) {
58
+ return { k: 'consent.required', is: 'label' };
59
+ }
60
+ export function chooser(_props, kept, row, _at) {
61
+ const id = String(row['id']);
62
+ return {
63
+ labelKey: String(row['labelKey']),
64
+ on: kept.selected.includes(id),
65
+ onToggle: (on) => kept.toggle(id, on),
66
+ };
67
+ }
68
+ export function withdraw(_props, kept) {
69
+ return { label: 'consent.withdraw', onPress: () => kept.decide('withdrawn', []) };
70
+ }
71
+ export function decline(_props, kept) {
72
+ return { label: 'consent.decline', onPress: () => kept.decide('declined', []) };
73
+ }
74
+ export function accept(_props, kept) {
75
+ return { label: 'consent.accept', onPress: () => kept.decide('accepted', kept.selected) };
76
+ }
77
+ export function acceptAll(_props, kept) {
78
+ return { label: 'consent.acceptAll', onPress: () => kept.decide('accepted', kept.offered) };
79
+ }
@@ -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 DonutProps {
5
+ readonly rows: readonly Row[];
6
+ readonly by: string;
7
+ readonly value: 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 Donut: Element<'Donut', DonutProps>;
@@ -0,0 +1,16 @@
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
+ import { Each } from "./each.js";
6
+ import { slice, uses } from "./donut.works.js";
7
+ export const Donut = element('Donut', (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 (_jsx("svg", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), role: "img", ...(props.titleKey === undefined ? {} : { 'aria-label': surface.text(props.titleKey) }), children: _jsx(Each, { rows: props.rows, by: props.by, children: (each0, at) => (_jsx("circle", { ...slice(props, kept, each0, at) })) }) }));
16
+ }, 'e-donut');
@@ -0,0 +1,11 @@
1
+ import { type Row } from '../charts.tsx';
2
+ import type { DonutProps } from './donut.tsx';
3
+ export declare function uses(props: DonutProps): {
4
+ readonly holds?: readonly string[];
5
+ readonly animates?: boolean;
6
+ readonly on?: Readonly<Record<string, unknown>>;
7
+ readonly ramp: readonly string[];
8
+ };
9
+ export declare function slice(props: DonutProps, kept: {
10
+ readonly ramp: readonly string[];
11
+ }, row: Row, at: number): Readonly<Record<string, string | number>>;
@@ -0,0 +1,28 @@
1
+ import { seriesColour } from "../series.js";
2
+ import { num, useRamp } from "../charts.js";
3
+ const RADIUS = 40;
4
+ const ROUND = 2 * Math.PI * RADIUS;
5
+ export function uses(props) {
6
+ const ramp = useRamp(props.rows.length);
7
+ return {
8
+ ...(props.rows.length === 0 ? { holds: ['empty'] } : {}),
9
+ on: { viewBox: '0 0 100 100' },
10
+ ramp,
11
+ };
12
+ }
13
+ export function slice(props, kept, row, at) {
14
+ const whole = props.rows.reduce((sum, one) => sum + num(one, props.value), 0) || 1;
15
+ const share = num(row, props.value) / whole;
16
+ const before = props.rows.slice(0, at).reduce((sum, one) => sum + num(one, props.value), 0) / whole;
17
+ return {
18
+ cx: 50,
19
+ cy: 50,
20
+ r: RADIUS,
21
+ fill: 'none',
22
+ stroke: seriesColour(kept.ramp, at),
23
+ strokeWidth: 16,
24
+ strokeDasharray: `${(share * ROUND).toFixed(2)} ${ROUND.toFixed(2)}`,
25
+ strokeDashoffset: (-before * ROUND).toFixed(2),
26
+ transform: 'rotate(-90 50 50)',
27
+ };
28
+ }
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Row } from '../charts.tsx';
3
+ import { type Element } from '../wrappers.tsx';
4
+ export interface EachProps {
5
+ readonly rows: readonly object[];
6
+ readonly by: string;
7
+ readonly children: (row: Row, at: number) => ReactNode;
8
+ readonly settles?: string;
9
+ readonly paced?: string;
10
+ readonly dispatch?: string;
11
+ readonly input?: Readonly<Record<string, unknown>>;
12
+ readonly invokeOn?: 'press' | 'shown';
13
+ }
14
+ export declare const Each: Element<'Each', EachProps>;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { roleClass } from "../fonts.js";
3
+ import { element, useSurface } from "../wrappers.js";
4
+ import { shows } from "./each.works.js";
5
+ export const Each = element('Each', (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
+ return (shows(props, surface));
9
+ }, 'e-each');
@@ -0,0 +1,3 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { EachProps } from './each.tsx';
3
+ export declare function shows(props: EachProps, _surface: unknown): ReactNode;
@@ -0,0 +1,68 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment, useLayoutEffect, useRef } from 'react';
3
+ import { nameOf } from "../token.js";
4
+ function keyOf(row, by, at) {
5
+ const value = row[by];
6
+ if (value === undefined || value === null) {
7
+ throw new Error(`Each: row ${String(at)} has no value for "${by}", so it has no key. React reuses DOM by key, and a ` +
8
+ "row without one is matched by position — which silently keeps the previous row's state when " +
9
+ 'the list reorders. Name the field that identifies a row in this view.');
10
+ }
11
+ return String(value);
12
+ }
13
+ function following(marker) {
14
+ const found = [];
15
+ let node = marker.nextElementSibling;
16
+ while (node !== null) {
17
+ found.push(node);
18
+ node = node.nextElementSibling;
19
+ }
20
+ return found;
21
+ }
22
+ function boxes(marker, ids) {
23
+ const found = new Map();
24
+ following(marker).forEach((node, at) => {
25
+ const id = ids[at];
26
+ if (id !== undefined)
27
+ found.set(id, node.getBoundingClientRect());
28
+ });
29
+ return found;
30
+ }
31
+ function settle(marker, ids, was, over, paced) {
32
+ following(marker).forEach((node, at) => {
33
+ const id = ids[at];
34
+ if (id === undefined)
35
+ return;
36
+ const before = was.get(id);
37
+ if (before === undefined)
38
+ return;
39
+ const after = node.getBoundingClientRect();
40
+ const dx = before.left - after.left;
41
+ const dy = before.top - after.top;
42
+ if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5)
43
+ return;
44
+ node.style.transition = `transform var(${nameOf('motion-instant')})`;
45
+ node.style.transform = `translate(${String(dx)}px, ${String(dy)}px)`;
46
+ void node.offsetWidth;
47
+ node.style.transition = `transform var(--${over}) var(--${paced})`;
48
+ node.style.transform = '';
49
+ });
50
+ }
51
+ export function shows(props, _surface) {
52
+ const within = useRef(null);
53
+ const was = useRef(new Map());
54
+ const drawn = useRef('');
55
+ const order = props.rows.map((row, at) => keyOf(row, props.by, at)).join('|');
56
+ useLayoutEffect(() => {
57
+ const marker = within.current;
58
+ if (marker === null || props.settles === undefined || props.paced === undefined)
59
+ return;
60
+ const ids = order === '' ? [] : order.split('|');
61
+ const moved = drawn.current !== '' && drawn.current !== order;
62
+ if (moved)
63
+ settle(marker, ids, was.current, props.settles, props.paced);
64
+ drawn.current = order;
65
+ was.current = boxes(marker, ids);
66
+ }, [order, props.settles, props.paced]);
67
+ return (_jsxs(_Fragment, { children: [_jsx("span", { ref: within, hidden: true }), props.rows.map((row, at) => (_jsx(Fragment, { children: props.children(row, at) }, keyOf(row, props.by, at))))] }));
68
+ }
@@ -0,0 +1,9 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface EmptyProps {
4
+ readonly labelKey: MessageKey;
5
+ readonly dispatch?: string;
6
+ readonly input?: Readonly<Record<string, unknown>>;
7
+ readonly invokeOn?: 'press' | 'shown';
8
+ }
9
+ export declare const Empty: Element<'Empty', EmptyProps>;
@@ -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 Empty = element('Empty', (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
+ 'empty',
10
+ ], });
11
+ return (_jsx("div", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, children: surface.text(props.labelKey) }));
12
+ }, 'e-empty');
@@ -0,0 +1,16 @@
1
+ import type { MessageKey } from '../content.tsx';
2
+ import { type Element } from '../wrappers.tsx';
3
+ export interface FieldProps {
4
+ readonly name: string;
5
+ readonly validator: string;
6
+ readonly labelKey: MessageKey;
7
+ readonly value?: string;
8
+ readonly onValue?: (said: string) => void;
9
+ readonly context?: Readonly<Record<string, unknown>>;
10
+ readonly autocomplete?: string;
11
+ readonly disabled?: boolean;
12
+ readonly dispatch?: string;
13
+ readonly input?: Readonly<Record<string, unknown>>;
14
+ readonly invokeOn?: 'press' | 'shown';
15
+ }
16
+ export declare const Field: Element<'Field', FieldProps>;
@@ -0,0 +1,15 @@
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, entry, uses } from "./field.works.js";
6
+ export const Field = element('Field', (props, className) => {
7
+ const kept = uses(props);
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
+ holds: [
11
+ ...(kept.holds ?? []),
12
+ ],
13
+ ...(kept.animates === undefined ? {} : { animates: kept.animates }), });
14
+ return (_jsxs("label", { className: surface.className, ...surface.marks, ...surface.invokes, ...surface.a11y, ...(kept.on ?? {}), children: [_jsx("span", { children: surface.text(props.labelKey) }), _jsx("input", { ...entry(props, kept) }), _jsx("span", { children: shown(props, surface, kept).fault })] }));
15
+ }, 'e-field');