@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,11 @@
1
+ import { variant } from "../variant.js";
2
+ export const SKELETON_BLOCK = variant({
3
+ id: 'skeleton-block',
4
+ sets: [
5
+ { property: 'background', is: 'colour-sunken' },
6
+ { property: 'borderRadius', is: 'radius-sm' },
7
+ { property: 'minHeight', is: 'control-sm' },
8
+ { property: 'animation', is: 'animation-waiting' },
9
+ ],
10
+ reacts: [],
11
+ });
@@ -0,0 +1,17 @@
1
+ export declare const SPINNER_TURNING: {
2
+ readonly id: "spinner-turning";
3
+ readonly sets: readonly [{
4
+ readonly property: "width";
5
+ readonly is: "icon-md";
6
+ }, {
7
+ readonly property: "height";
8
+ readonly is: "icon-md";
9
+ }, {
10
+ readonly property: "color";
11
+ readonly is: "colour-accent";
12
+ }, {
13
+ readonly property: "animation";
14
+ readonly is: "animation-working";
15
+ }];
16
+ readonly reacts: readonly [];
17
+ };
@@ -0,0 +1,11 @@
1
+ import { variant } from "../variant.js";
2
+ export const SPINNER_TURNING = variant({
3
+ id: 'spinner-turning',
4
+ sets: [
5
+ { property: 'width', is: 'icon-md' },
6
+ { property: 'height', is: 'icon-md' },
7
+ { property: 'color', is: 'colour-accent' },
8
+ { property: 'animation', is: 'animation-working' },
9
+ ],
10
+ reacts: [],
11
+ });
@@ -0,0 +1,18 @@
1
+ export declare const STAT_TILE: {
2
+ readonly id: "stat-tile";
3
+ readonly material: "flat";
4
+ readonly sets: readonly [{
5
+ readonly property: "color";
6
+ readonly is: "colour-ink";
7
+ }, {
8
+ readonly property: "borderRadius";
9
+ readonly is: "radius-md";
10
+ }, {
11
+ readonly property: "padding";
12
+ readonly is: "space-4";
13
+ }, {
14
+ readonly property: "gap";
15
+ readonly is: "space-2";
16
+ }];
17
+ readonly reacts: readonly ["focus", "hover"];
18
+ };
@@ -0,0 +1,12 @@
1
+ import { variant } from "../variant.js";
2
+ export const STAT_TILE = variant({
3
+ id: 'stat-tile',
4
+ material: 'flat',
5
+ sets: [
6
+ { property: 'color', is: 'colour-ink' },
7
+ { property: 'borderRadius', is: 'radius-md' },
8
+ { property: 'padding', is: 'space-4' },
9
+ { property: 'gap', is: 'space-2' },
10
+ ],
11
+ reacts: ['focus', 'hover'],
12
+ });
@@ -0,0 +1,24 @@
1
+ export declare const TAB_BAR: {
2
+ readonly id: "tab-bar";
3
+ readonly material: "flat";
4
+ readonly sets: readonly [{
5
+ readonly property: "color";
6
+ readonly is: "colour-ink";
7
+ }, {
8
+ readonly property: "borderRadius";
9
+ readonly is: "radius-lg";
10
+ }, {
11
+ readonly property: "minHeight";
12
+ readonly is: "control-md";
13
+ }, {
14
+ readonly property: "padding";
15
+ readonly is: "space-1";
16
+ }, {
17
+ readonly property: "gap";
18
+ readonly is: "space-1";
19
+ }, {
20
+ readonly property: "transition";
21
+ readonly is: "motion-quick ease-out";
22
+ }];
23
+ readonly reacts: readonly ["focus", "hover"];
24
+ };
@@ -0,0 +1,14 @@
1
+ import { variant } from "../variant.js";
2
+ export const TAB_BAR = variant({
3
+ id: 'tab-bar',
4
+ material: 'flat',
5
+ sets: [
6
+ { property: 'color', is: 'colour-ink' },
7
+ { property: 'borderRadius', is: 'radius-lg' },
8
+ { property: 'minHeight', is: 'control-md' },
9
+ { property: 'padding', is: 'space-1' },
10
+ { property: 'gap', is: 'space-1' },
11
+ { property: 'transition', is: 'motion-quick ease-out' },
12
+ ],
13
+ reacts: ['focus', 'hover'],
14
+ });
@@ -0,0 +1,33 @@
1
+ export declare const TAP_TARGET: {
2
+ readonly id: "tap-target";
3
+ readonly sets: readonly [{
4
+ readonly property: "borderRadius";
5
+ readonly is: "radius-md";
6
+ }];
7
+ readonly states: readonly [{
8
+ readonly when: readonly ["tapped"];
9
+ readonly sets: readonly [{
10
+ readonly property: "animation";
11
+ readonly is: "animation-flash";
12
+ }];
13
+ }, {
14
+ readonly when: readonly ["pressing"];
15
+ readonly sets: readonly [{
16
+ readonly property: "animation";
17
+ readonly is: "animation-press";
18
+ }];
19
+ }, {
20
+ readonly when: readonly ["carrying", "pressing"];
21
+ readonly sets: readonly [{
22
+ readonly property: "animation";
23
+ readonly is: "animation-hover-lift";
24
+ }];
25
+ }, {
26
+ readonly when: readonly ["carrying"];
27
+ readonly sets: readonly [{
28
+ readonly property: "animation";
29
+ readonly is: "animation-hover-lift";
30
+ }];
31
+ }];
32
+ readonly reacts: readonly ["tapped", "pressing", "carrying"];
33
+ };
@@ -0,0 +1,24 @@
1
+ import { variant } from "../variant.js";
2
+ export const TAP_TARGET = variant({
3
+ id: 'tap-target',
4
+ sets: [{ property: 'borderRadius', is: 'radius-md' }],
5
+ states: [
6
+ {
7
+ when: ['tapped'],
8
+ sets: [{ property: 'animation', is: 'animation-flash' }],
9
+ },
10
+ {
11
+ when: ['pressing'],
12
+ sets: [{ property: 'animation', is: 'animation-press' }],
13
+ },
14
+ {
15
+ when: ['carrying', 'pressing'],
16
+ sets: [{ property: 'animation', is: 'animation-hover-lift' }],
17
+ },
18
+ {
19
+ when: ['carrying'],
20
+ sets: [{ property: 'animation', is: 'animation-hover-lift' }],
21
+ },
22
+ ],
23
+ reacts: ['tapped', 'pressing', 'carrying'],
24
+ });
@@ -0,0 +1,174 @@
1
+ export declare const VARIANTS: {
2
+ readonly id: "variant";
3
+ readonly at: "thread/ui/variants.ts";
4
+ readonly files: "ui/var_*.ts";
5
+ readonly describes: "How a thing looks: a material plus the style guide values it names directly, never raw ones, and how that look changes under a state. It says nothing about type, because typography belongs to the role the wording states; what is left here is the look of the box and the colour of what sits in it. Each row names a file prefixed `var_`, and that file is the variant: what it looks like, what it looks like under a state, and which states it reacts to. The row states which elements accept it, and it is worn as the tag, so a variant `button-fill` is written `<Button.buttonFill>` and an element nothing declares is refused. A state is the set of signals holding at once, and two states that can both hold and both set one property must have their combination declared, or which one wins is an accident of file order. An app adds its own to this same list, and a row that goes missing breaks the build, because what the framework offers is not an app’s to withdraw.";
6
+ readonly version: 1;
7
+ readonly cites: readonly [{
8
+ readonly on: "2026-08-24";
9
+ readonly said: "Variants define lots of things. Including how they look in different states. Including how they look in multiple states at once. (hover, pressed) is one variant that covers both hover and pressed, so they look the same when they are simultaneous. (hover) (pressed) (hover, pressed) however have different states for the three situations.";
10
+ }, {
11
+ readonly on: "2026-08-25";
12
+ readonly said: "Variants basically say: This is how I look. These are the elements that accept me. These are my behaviours under different states. These are the states I can react to.";
13
+ }, {
14
+ readonly on: "2026-08-28";
15
+ readonly said: "fonts.ts as SSOT for everything related to fonts and easy to change fonts throughout the app like tokens, like....the exact same reason for existing that tokens+styleguide have is the same reason we have fonts.ts";
16
+ }];
17
+ readonly declares: readonly [{
18
+ readonly id: "card";
19
+ readonly section: "surface";
20
+ readonly at: string;
21
+ readonly wears: readonly ["Accordion", "Bars", "Box", "Donut", "Empty", "Funnel", "Heatmap", "LineChart", "Media", "Menu", "Scatter", "Sparkline", "Surface", "Table", "Tooltip"];
22
+ readonly describes: "A surface holding other content, and the shape every unregistered variant falls back to.";
23
+ }, {
24
+ readonly id: "list-row";
25
+ readonly section: "surface";
26
+ readonly at: string;
27
+ readonly wears: readonly ["Box"];
28
+ readonly describes: "One row of a list — square, quiet, and separated by its neighbours rather than by a shadow.";
29
+ }, {
30
+ readonly id: "framed";
31
+ readonly section: "surface";
32
+ readonly at: string;
33
+ readonly wears: readonly ["Image", "Media", "AspectRatio"];
34
+ readonly describes: "A picture given the same corners as a panel, on a sunken ground so the gap before it loads is not a white hole.";
35
+ }, {
36
+ readonly id: "bubble-them";
37
+ readonly section: "surface";
38
+ readonly at: string;
39
+ readonly wears: readonly ["Box"];
40
+ readonly describes: "A message somebody else sent. The plain half of a conversation.";
41
+ }, {
42
+ readonly id: "bubble-me";
43
+ readonly section: "surface";
44
+ readonly at: string;
45
+ readonly wears: readonly ["Box"];
46
+ readonly describes: "A message the current person sent. Takes the accent, which is how a conversation reads as two voices without a second colour role.";
47
+ }, {
48
+ readonly id: "button-fill";
49
+ readonly section: "button";
50
+ readonly at: string;
51
+ readonly wears: readonly ["Button"];
52
+ readonly describes: "The one action a screen is asking for. The accent behind it, and the only button on a screen that should carry it.";
53
+ }, {
54
+ readonly id: "button-normal";
55
+ readonly section: "button";
56
+ readonly at: string;
57
+ readonly wears: readonly ["Button"];
58
+ readonly describes: "The ordinary button. A surface with a hairline round it — pressable, and asking for nothing in particular.";
59
+ }, {
60
+ readonly id: "button-ghost";
61
+ readonly section: "button";
62
+ readonly at: string;
63
+ readonly wears: readonly ["Button"];
64
+ readonly describes: "Wording that acts. No ground and no line until a pointer is over it, which is what keeps a row of them from reading as a wall of boxes.";
65
+ }, {
66
+ readonly id: "button-border";
67
+ readonly section: "button";
68
+ readonly at: string;
69
+ readonly wears: readonly ["Button"];
70
+ readonly describes: "An action offered beside a filled one. The accent as an edge rather than a ground, so the shape says pressable and the colour says not this one.";
71
+ }, {
72
+ readonly id: "button-destructive";
73
+ readonly section: "button";
74
+ readonly at: string;
75
+ readonly wears: readonly ["Button"];
76
+ readonly describes: "Something that cannot be undone. The same shape as the asking button, in the colour reserved for consequence.";
77
+ }, {
78
+ readonly id: "button-destructive-ghost";
79
+ readonly section: "button";
80
+ readonly at: string;
81
+ readonly wears: readonly ["Button"];
82
+ readonly describes: "A destructive action that is not the point of the screen — delete, sitting quietly at the end of a menu. Carries the negative as ink and gains a ground only under a pointer.";
83
+ }, {
84
+ readonly id: "button-cta";
85
+ readonly section: "button";
86
+ readonly at: string;
87
+ readonly wears: readonly ["Button"];
88
+ readonly describes: "The one thing a landing screen exists to get pressed. Taller than every other button and set in running type rather than label type, which is what makes it read from across the page.";
89
+ }, {
90
+ readonly id: "button-quiet";
91
+ readonly section: "button";
92
+ readonly at: string;
93
+ readonly wears: readonly ["Button"];
94
+ readonly describes: "An action that is available and is not being suggested — cancel, skip, dismiss. Ink that supports rather than states, and a smaller symbol beside it.";
95
+ }, {
96
+ readonly id: "button-glass";
97
+ readonly section: "button";
98
+ readonly at: string;
99
+ readonly wears: readonly ["Button"];
100
+ readonly describes: "A button over a picture or a video, where a solid fill would hide what it is sitting on. What is behind shows through, softened.";
101
+ }, {
102
+ readonly id: "input";
103
+ readonly section: "entry";
104
+ readonly at: string;
105
+ readonly wears: readonly ["Field", "Select", "Slider", "Textarea", "Toggle"];
106
+ readonly describes: "Anything a person types into. Tighter vertical room than a surface, so the text baseline sits where a label expects it.";
107
+ }, {
108
+ readonly id: "choice";
109
+ readonly section: "entry";
110
+ readonly at: string;
111
+ readonly wears: readonly ["RadioGroup"];
112
+ readonly describes: "A set of options laid out to be chosen between. A group is not a control — it cannot be focused or invalid itself, only the radios inside it can — so it takes arrangement and a ground and states nothing it cannot be in.";
113
+ }, {
114
+ readonly id: "tab-bar";
115
+ readonly section: "navigation";
116
+ readonly at: string;
117
+ readonly wears: readonly ["Breadcrumb", "Pagination", "Tabs"];
118
+ readonly describes: "The strip of destinations along one edge. Rounder and less padded than a surface, because it holds pressable things rather than content.";
119
+ }, {
120
+ readonly id: "link-inline";
121
+ readonly section: "navigation";
122
+ readonly at: string;
123
+ readonly wears: readonly ["Link"];
124
+ readonly describes: "Wording that takes you somewhere. Carries the accent so it reads as reachable without an underline, and draws a real ring when a keyboard reaches it.";
125
+ }, {
126
+ readonly id: "chip";
127
+ readonly section: "marker";
128
+ readonly at: string;
129
+ readonly wears: readonly ["Badge"];
130
+ readonly describes: "A small token standing for a value. The tightest room in the set, and pill-shaped like the buttons.";
131
+ }, {
132
+ readonly id: "glyph-plain";
133
+ readonly section: "marker";
134
+ readonly at: string;
135
+ readonly wears: readonly ["Glyph"];
136
+ readonly describes: "A pictogram at the size most controls use, drawn in the ink of whatever it sits beside.";
137
+ }, {
138
+ readonly id: "avatar-round";
139
+ readonly section: "marker";
140
+ readonly at: string;
141
+ readonly wears: readonly ["Avatar"];
142
+ readonly describes: "A person, standing for themselves. Fully round, sunken so it reads as a well rather than a card, and sized to be recognised at a glance.";
143
+ }, {
144
+ readonly id: "rule";
145
+ readonly section: "marker";
146
+ readonly at: string;
147
+ readonly wears: readonly ["Separator"];
148
+ readonly describes: "The line between two things. The thinnest a screen can draw, in the colour that separates without asking to be seen.";
149
+ }, {
150
+ readonly id: "skeleton-block";
151
+ readonly section: "marker";
152
+ readonly at: string;
153
+ readonly wears: readonly ["Skeleton"];
154
+ readonly describes: "The shape of something that has not arrived. Sunken and breathing, which is what says waiting rather than empty.";
155
+ }, {
156
+ readonly id: "spinner-turning";
157
+ readonly section: "marker";
158
+ readonly at: string;
159
+ readonly wears: readonly ["Spinner"];
160
+ readonly describes: "Work with no measurable end. Turns without stopping, in the accent, so it reads as the app doing something rather than the app stuck.";
161
+ }, {
162
+ readonly id: "stat-tile";
163
+ readonly section: "figure";
164
+ readonly at: string;
165
+ readonly wears: readonly ["Gauge", "Progress", "Stat"];
166
+ readonly describes: "A single figure given room to be read at a glance, so its type role is the display one rather than body.";
167
+ }, {
168
+ readonly id: "tap-target";
169
+ readonly section: "gesture";
170
+ readonly at: string;
171
+ readonly wears: readonly ["HitBox"];
172
+ readonly describes: "Anything a finger acts on directly rather than through a control — the one variant a hit box wears. It is where a tap, a press and a carry are answered, because a hit box is the only thing that raises those and nothing accepted it before.";
173
+ }];
174
+ };
@@ -0,0 +1,50 @@
1
+ const at = (id) => `thread/ui/variants/var_${id}.ts`;
2
+ export const VARIANTS = {
3
+ id: 'variant',
4
+ at: 'thread/ui/variants.ts',
5
+ files: 'ui/var_*.ts',
6
+ describes: 'How a thing looks: a material plus the style guide values it names directly, never raw ones, and how that look changes under a state. It says nothing about type, because typography belongs to the role the wording states; what is left here is the look of the box and the colour of what sits in it. Each row names a file prefixed `var_`, and that file is the variant: what it looks like, what it looks like under a state, and which states it reacts to. The row states which elements accept it, and it is worn as the tag, so a variant `button-fill` is written `<Button.buttonFill>` and an element nothing declares is refused. A state is the set of signals holding at once, and two states that can both hold and both set one property must have their combination declared, or which one wins is an accident of file order. An app adds its own to this same list, and a row that goes missing breaks the build, because what the framework offers is not an app’s to withdraw.',
7
+ version: 1,
8
+ cites: [
9
+ {
10
+ on: '2026-08-24',
11
+ said: 'Variants define lots of things. Including how they look in different states. Including how they look in multiple states at once. (hover, pressed) is one variant that covers both hover and pressed, so they look the same when they are simultaneous. (hover) (pressed) (hover, pressed) however have different states for the three situations.',
12
+ },
13
+ {
14
+ on: '2026-08-25',
15
+ said: 'Variants basically say: This is how I look. These are the elements that accept me. These are my behaviours under different states. These are the states I can react to.',
16
+ },
17
+ {
18
+ on: '2026-08-28',
19
+ said: 'fonts.ts as SSOT for everything related to fonts and easy to change fonts throughout the app like tokens, like....the exact same reason for existing that tokens+styleguide have is the same reason we have fonts.ts',
20
+ },
21
+ ],
22
+ declares: [
23
+ { id: 'card', section: 'surface', at: at('card'), wears: ['Accordion', 'Bars', 'Box', 'Donut', 'Empty', 'Funnel', 'Heatmap', 'LineChart', 'Media', 'Menu', 'Scatter', 'Sparkline', 'Surface', 'Table', 'Tooltip'], describes: 'A surface holding other content, and the shape every unregistered variant falls back to.' },
24
+ { id: 'list-row', section: 'surface', at: at('list-row'), wears: ['Box'], describes: 'One row of a list — square, quiet, and separated by its neighbours rather than by a shadow.' },
25
+ { id: 'framed', section: 'surface', at: at('framed'), wears: ['Image', 'Media', 'AspectRatio'], describes: 'A picture given the same corners as a panel, on a sunken ground so the gap before it loads is not a white hole.' },
26
+ { id: 'bubble-them', section: 'surface', at: at('bubble-them'), wears: ['Box'], describes: 'A message somebody else sent. The plain half of a conversation.' },
27
+ { id: 'bubble-me', section: 'surface', at: at('bubble-me'), wears: ['Box'], describes: 'A message the current person sent. Takes the accent, which is how a conversation reads as two voices without a second colour role.' },
28
+ { id: 'button-fill', section: 'button', at: at('button-fill'), wears: ['Button'], describes: 'The one action a screen is asking for. The accent behind it, and the only button on a screen that should carry it.' },
29
+ { id: 'button-normal', section: 'button', at: at('button-normal'), wears: ['Button'], describes: 'The ordinary button. A surface with a hairline round it — pressable, and asking for nothing in particular.' },
30
+ { id: 'button-ghost', section: 'button', at: at('button-ghost'), wears: ['Button'], describes: 'Wording that acts. No ground and no line until a pointer is over it, which is what keeps a row of them from reading as a wall of boxes.' },
31
+ { id: 'button-border', section: 'button', at: at('button-border'), wears: ['Button'], describes: 'An action offered beside a filled one. The accent as an edge rather than a ground, so the shape says pressable and the colour says not this one.' },
32
+ { id: 'button-destructive', section: 'button', at: at('button-destructive'), wears: ['Button'], describes: 'Something that cannot be undone. The same shape as the asking button, in the colour reserved for consequence.' },
33
+ { id: 'button-destructive-ghost', section: 'button', at: at('button-destructive-ghost'), wears: ['Button'], describes: 'A destructive action that is not the point of the screen — delete, sitting quietly at the end of a menu. Carries the negative as ink and gains a ground only under a pointer.' },
34
+ { id: 'button-cta', section: 'button', at: at('button-cta'), wears: ['Button'], describes: 'The one thing a landing screen exists to get pressed. Taller than every other button and set in running type rather than label type, which is what makes it read from across the page.' },
35
+ { id: 'button-quiet', section: 'button', at: at('button-quiet'), wears: ['Button'], describes: 'An action that is available and is not being suggested — cancel, skip, dismiss. Ink that supports rather than states, and a smaller symbol beside it.' },
36
+ { id: 'button-glass', section: 'button', at: at('button-glass'), wears: ['Button'], describes: 'A button over a picture or a video, where a solid fill would hide what it is sitting on. What is behind shows through, softened.' },
37
+ { id: 'input', section: 'entry', at: at('input'), wears: ['Field', 'Select', 'Slider', 'Textarea', 'Toggle'], describes: 'Anything a person types into. Tighter vertical room than a surface, so the text baseline sits where a label expects it.' },
38
+ { id: 'choice', section: 'entry', at: at('choice'), wears: ['RadioGroup'], describes: 'A set of options laid out to be chosen between. A group is not a control — it cannot be focused or invalid itself, only the radios inside it can — so it takes arrangement and a ground and states nothing it cannot be in.' },
39
+ { id: 'tab-bar', section: 'navigation', at: at('tab-bar'), wears: ['Breadcrumb', 'Pagination', 'Tabs'], describes: 'The strip of destinations along one edge. Rounder and less padded than a surface, because it holds pressable things rather than content.' },
40
+ { id: 'link-inline', section: 'navigation', at: at('link-inline'), wears: ['Link'], describes: 'Wording that takes you somewhere. Carries the accent so it reads as reachable without an underline, and draws a real ring when a keyboard reaches it.' },
41
+ { id: 'chip', section: 'marker', at: at('chip'), wears: ['Badge'], describes: 'A small token standing for a value. The tightest room in the set, and pill-shaped like the buttons.' },
42
+ { id: 'glyph-plain', section: 'marker', at: at('glyph-plain'), wears: ['Glyph'], describes: 'A pictogram at the size most controls use, drawn in the ink of whatever it sits beside.' },
43
+ { id: 'avatar-round', section: 'marker', at: at('avatar-round'), wears: ['Avatar'], describes: 'A person, standing for themselves. Fully round, sunken so it reads as a well rather than a card, and sized to be recognised at a glance.' },
44
+ { id: 'rule', section: 'marker', at: at('rule'), wears: ['Separator'], describes: 'The line between two things. The thinnest a screen can draw, in the colour that separates without asking to be seen.' },
45
+ { id: 'skeleton-block', section: 'marker', at: at('skeleton-block'), wears: ['Skeleton'], describes: 'The shape of something that has not arrived. Sunken and breathing, which is what says waiting rather than empty.' },
46
+ { id: 'spinner-turning', section: 'marker', at: at('spinner-turning'), wears: ['Spinner'], describes: 'Work with no measurable end. Turns without stopping, in the accent, so it reads as the app doing something rather than the app stuck.' },
47
+ { id: 'stat-tile', section: 'figure', at: at('stat-tile'), wears: ['Gauge', 'Progress', 'Stat'], describes: 'A single figure given room to be read at a glance, so its type role is the display one rather than body.' },
48
+ { id: 'tap-target', section: 'gesture', at: at('tap-target'), wears: ['HitBox'], describes: 'Anything a finger acts on directly rather than through a control — the one variant a hit box wears. It is where a tap, a press and a carry are answered, because a hit box is the only thing that raises those and nothing accepted it before.' },
49
+ ],
50
+ };
@@ -0,0 +1,128 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { Collector } from './collector.ts';
3
+ import type { ArrangementElement, VariantsFor, Wearing } from './checked.ts';
4
+ import { PRESENTATION_BEHAVIOUR, type Clock, type Presentation, type Surface, type Ticker } from './door.ts';
5
+ import { holds as declared } from './signals.ts';
6
+ declare module 'react' {
7
+ interface HTMLAttributes<T> {
8
+ readonly at?: string;
9
+ }
10
+ interface SVGAttributes<T> {
11
+ readonly at?: string;
12
+ }
13
+ }
14
+ export interface Appearance {
15
+ readonly mode: 'light' | 'dark';
16
+ readonly reduceMotion: boolean;
17
+ }
18
+ export interface UiConfig {
19
+ readonly palette: {
20
+ readonly accent: string;
21
+ readonly surface: string;
22
+ };
23
+ readonly translate: (key: string, params?: Readonly<Record<string, unknown>>) => string;
24
+ readonly appearance: Appearance;
25
+ readonly clock: Clock;
26
+ readonly ticker?: Ticker;
27
+ readonly now?: () => number;
28
+ readonly edgeScroll?: {
29
+ readonly band?: number;
30
+ readonly speed?: number;
31
+ };
32
+ readonly collector?: Collector;
33
+ readonly platform?: string;
34
+ readonly dispatch?: (name: string, input?: Readonly<Record<string, unknown>>) => Promise<unknown>;
35
+ readonly navigateTo?: (screen: string) => void;
36
+ readonly actor?: {
37
+ readonly id: string | null;
38
+ readonly roles: readonly string[];
39
+ readonly entitlements: readonly string[];
40
+ };
41
+ readonly asking?: readonly {
42
+ readonly id: string;
43
+ readonly selector: string;
44
+ }[];
45
+ }
46
+ export declare const UiContext: import("react").Context<UiConfig | null>;
47
+ export declare function UiProvider({ config, children }: {
48
+ config: UiConfig;
49
+ children: ReactNode;
50
+ }): ReactNode;
51
+ export declare function useUi(): UiConfig;
52
+ export interface SurfaceRequest {
53
+ readonly className?: string;
54
+ readonly invokes?: {
55
+ readonly dispatch?: string;
56
+ readonly input?: Readonly<Record<string, unknown>>;
57
+ readonly on?: 'press' | 'shown';
58
+ };
59
+ readonly holds?: readonly ((typeof declared)[number]['id'] | (string & {}))[];
60
+ readonly animates?: boolean;
61
+ readonly measures?: Readonly<Record<string, string | number>>;
62
+ }
63
+ export declare function useSurface(request?: SurfaceRequest): Surface;
64
+ export type Press = {
65
+ readonly dispatch: string;
66
+ readonly input?: Readonly<Record<string, unknown>>;
67
+ readonly navigateTo?: never;
68
+ readonly onPress?: never;
69
+ } | {
70
+ readonly navigateTo: string;
71
+ readonly dispatch?: never;
72
+ readonly input?: never;
73
+ readonly onPress?: never;
74
+ } | {
75
+ readonly onPress: () => void;
76
+ readonly dispatch?: never;
77
+ readonly navigateTo?: never;
78
+ readonly input?: never;
79
+ } | {
80
+ readonly dispatch?: never;
81
+ readonly navigateTo?: never;
82
+ readonly input?: never;
83
+ readonly onPress?: never;
84
+ };
85
+ export declare function pressOf(props: {
86
+ readonly dispatch?: string;
87
+ readonly input?: Readonly<Record<string, unknown>>;
88
+ readonly navigateTo?: string;
89
+ readonly onPress?: () => void;
90
+ }): Press;
91
+ export interface PressOrigin {
92
+ readonly element: string;
93
+ readonly name?: string;
94
+ }
95
+ export declare function usePress(press: Press, origin?: PressOrigin): (() => void) | undefined;
96
+ export declare function useVisibility(active: boolean): (node: HTMLElement | null) => void;
97
+ export interface ScreenOptions {
98
+ readonly as?: Presentation;
99
+ readonly views?: readonly string[];
100
+ readonly unreachable?: boolean;
101
+ }
102
+ type Component<P> = (props: P) => ReactNode;
103
+ export type ElementBody<P> = (props: P, className?: string) => ReactNode;
104
+ type Members<N extends string, P> = {
105
+ readonly [K in VariantsFor<N> | {
106
+ [W in keyof Wearing]: N extends Wearing[W] ? W : never;
107
+ }[keyof Wearing]]: Component<P & {
108
+ readonly at?: string;
109
+ }>;
110
+ };
111
+ export type Element<N extends string, P> = [keyof Members<N, P>] extends [never] ? Component<P & {
112
+ readonly at?: string;
113
+ }> : N extends ArrangementElement ? Component<P & {
114
+ readonly at?: string;
115
+ }> & Members<N, P> : Members<N, P>;
116
+ export declare function element<N extends string, P>(name: N, fn: ElementBody<P>, own?: string): Element<N, P>;
117
+ export declare function composition<P>(own: string, fn: (props: P) => ReactNode): Component<P & {
118
+ readonly at?: string;
119
+ readonly className?: string;
120
+ }>;
121
+ export interface ScreenControls {
122
+ readonly open?: boolean;
123
+ readonly onDismiss?: () => void;
124
+ readonly at?: string;
125
+ }
126
+ export declare function screen<P>(own: string, options: ScreenOptions, fn: Component<P>): Component<P & ScreenControls>;
127
+ export declare function behaviourOf(presentation: Presentation): (typeof PRESENTATION_BEHAVIOUR)[Presentation];
128
+ export {};