@prestack/thread-ui 0.1.1 → 0.1.2

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 (343) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/dist/ui/animations/anm_appear.d.ts +8 -8
  3. package/dist/ui/animations/anm_blur_in.d.ts +12 -12
  4. package/dist/ui/animations/anm_blur_out.d.ts +12 -12
  5. package/dist/ui/animations/anm_dismiss.d.ts +12 -12
  6. package/dist/ui/animations/anm_drop.d.ts +12 -12
  7. package/dist/ui/animations/anm_fall.d.ts +12 -12
  8. package/dist/ui/animations/anm_flash.d.ts +9 -9
  9. package/dist/ui/animations/anm_glow.d.ts +8 -8
  10. package/dist/ui/animations/anm_lift.d.ts +8 -8
  11. package/dist/ui/animations/anm_nudge.d.ts +8 -8
  12. package/dist/ui/animations/anm_pop_in.d.ts +16 -16
  13. package/dist/ui/animations/anm_pop_out.d.ts +16 -16
  14. package/dist/ui/animations/anm_press.d.ts +9 -9
  15. package/dist/ui/animations/anm_pulse.d.ts +10 -10
  16. package/dist/ui/animations/anm_rise.d.ts +12 -12
  17. package/dist/ui/animations/anm_shake.d.ts +11 -11
  18. package/dist/ui/animations/anm_slide_in_left.d.ts +12 -12
  19. package/dist/ui/animations/anm_slide_in_right.d.ts +12 -12
  20. package/dist/ui/animations/anm_slide_out_left.d.ts +12 -12
  21. package/dist/ui/animations/anm_slide_out_right.d.ts +12 -12
  22. package/dist/ui/animations/anm_spin.d.ts +8 -8
  23. package/dist/ui/animations/anm_swell.d.ts +8 -8
  24. package/dist/ui/animations/anm_wobble.d.ts +13 -13
  25. package/dist/ui/animations/anm_zoom_in.d.ts +12 -12
  26. package/dist/ui/animations/anm_zoom_out.d.ts +12 -12
  27. package/dist/ui/animations.d.ts +8 -8
  28. package/dist/ui/animations.js +4 -4
  29. package/dist/ui/animations.ts +1 -1
  30. package/dist/ui/attach.js +22 -78
  31. package/dist/ui/attach.ts +8 -66
  32. package/dist/ui/charts.d.ts +0 -3
  33. package/dist/ui/charts.js +3 -7
  34. package/dist/ui/charts.tsx +0 -4
  35. package/dist/ui/checked.d.ts +1 -1
  36. package/dist/ui/checked.ts +1 -1
  37. package/dist/ui/collector.js +1 -1
  38. package/dist/ui/collector.ts +1 -1
  39. package/dist/ui/compositions.d.ts +9 -3
  40. package/dist/ui/compositions.js +9 -158
  41. package/dist/ui/compositions.ts +6 -170
  42. package/dist/ui/content.js +4 -7
  43. package/dist/ui/content.tsx +4 -15
  44. package/dist/ui/controls.js +1 -1
  45. package/dist/ui/door.d.ts +1 -1
  46. package/dist/ui/elements/accordion.d.ts +2 -1
  47. package/dist/ui/elements/accordion.js +4 -4
  48. package/dist/ui/elements/accordion.tsx +2 -1
  49. package/dist/ui/elements/aspect-ratio.d.ts +2 -1
  50. package/dist/ui/elements/aspect-ratio.js +1 -1
  51. package/dist/ui/elements/aspect-ratio.tsx +2 -1
  52. package/dist/ui/elements/avatar.d.ts +2 -1
  53. package/dist/ui/elements/avatar.js +3 -3
  54. package/dist/ui/elements/avatar.tsx +2 -1
  55. package/dist/ui/elements/badge.d.ts +2 -1
  56. package/dist/ui/elements/badge.js +3 -3
  57. package/dist/ui/elements/badge.tsx +2 -1
  58. package/dist/ui/elements/bars.d.ts +2 -1
  59. package/dist/ui/elements/bars.js +5 -5
  60. package/dist/ui/elements/bars.tsx +2 -1
  61. package/dist/ui/elements/bars.works.js +3 -3
  62. package/dist/ui/elements/box.d.ts +2 -1
  63. package/dist/ui/elements/box.js +1 -1
  64. package/dist/ui/elements/box.tsx +2 -1
  65. package/dist/ui/elements/breadcrumb.d.ts +2 -1
  66. package/dist/ui/elements/breadcrumb.js +5 -5
  67. package/dist/ui/elements/breadcrumb.tsx +2 -1
  68. package/dist/ui/elements/breadcrumb.works.js +1 -1
  69. package/dist/ui/elements/button.d.ts +2 -1
  70. package/dist/ui/elements/button.js +3 -3
  71. package/dist/ui/elements/button.tsx +2 -1
  72. package/dist/ui/elements/button.works.js +2 -2
  73. package/dist/ui/elements/column.d.ts +2 -1
  74. package/dist/ui/elements/column.js +1 -1
  75. package/dist/ui/elements/column.tsx +2 -1
  76. package/dist/ui/elements/consent.d.ts +2 -1
  77. package/dist/ui/elements/consent.js +10 -10
  78. package/dist/ui/elements/consent.tsx +2 -1
  79. package/dist/ui/elements/consent.works.js +1 -1
  80. package/dist/ui/elements/donut.d.ts +2 -1
  81. package/dist/ui/elements/donut.js +4 -4
  82. package/dist/ui/elements/donut.tsx +2 -1
  83. package/dist/ui/elements/donut.works.js +2 -2
  84. package/dist/ui/elements/each.d.ts +2 -1
  85. package/dist/ui/elements/each.js +3 -3
  86. package/dist/ui/elements/each.tsx +2 -1
  87. package/dist/ui/elements/each.works.js +2 -2
  88. package/dist/ui/elements/empty.d.ts +2 -1
  89. package/dist/ui/elements/empty.js +2 -2
  90. package/dist/ui/elements/empty.tsx +2 -1
  91. package/dist/ui/elements/field.d.ts +2 -1
  92. package/dist/ui/elements/field.js +3 -3
  93. package/dist/ui/elements/field.tsx +2 -1
  94. package/dist/ui/elements/field.works.js +1 -1
  95. package/dist/ui/elements/funnel.d.ts +2 -1
  96. package/dist/ui/elements/funnel.js +5 -5
  97. package/dist/ui/elements/funnel.tsx +2 -1
  98. package/dist/ui/elements/funnel.works.js +3 -3
  99. package/dist/ui/elements/gauge.d.ts +2 -1
  100. package/dist/ui/elements/gauge.js +3 -3
  101. package/dist/ui/elements/gauge.tsx +2 -1
  102. package/dist/ui/elements/gauge.works.js +1 -1
  103. package/dist/ui/elements/glyph.d.ts +2 -1
  104. package/dist/ui/elements/glyph.js +3 -3
  105. package/dist/ui/elements/glyph.tsx +2 -1
  106. package/dist/ui/elements/glyph.works.js +1 -1
  107. package/dist/ui/elements/grid.d.ts +2 -1
  108. package/dist/ui/elements/grid.js +1 -1
  109. package/dist/ui/elements/grid.tsx +2 -1
  110. package/dist/ui/elements/heatmap.d.ts +2 -1
  111. package/dist/ui/elements/heatmap.js +5 -5
  112. package/dist/ui/elements/heatmap.tsx +2 -1
  113. package/dist/ui/elements/heatmap.works.js +1 -1
  114. package/dist/ui/elements/hit-box.d.ts +2 -1
  115. package/dist/ui/elements/hit-box.js +2 -2
  116. package/dist/ui/elements/hit-box.tsx +2 -1
  117. package/dist/ui/elements/hit-box.works.d.ts +2 -2
  118. package/dist/ui/elements/hit-box.works.js +5 -5
  119. package/dist/ui/elements/hit-box.works.tsx +2 -1
  120. package/dist/ui/elements/image.d.ts +2 -1
  121. package/dist/ui/elements/image.js +2 -2
  122. package/dist/ui/elements/image.tsx +2 -1
  123. package/dist/ui/elements/line-chart.d.ts +2 -1
  124. package/dist/ui/elements/line-chart.js +4 -4
  125. package/dist/ui/elements/line-chart.tsx +2 -1
  126. package/dist/ui/elements/line-chart.works.js +2 -2
  127. package/dist/ui/elements/link.d.ts +2 -1
  128. package/dist/ui/elements/link.js +3 -3
  129. package/dist/ui/elements/link.tsx +2 -1
  130. package/dist/ui/elements/link.works.js +1 -1
  131. package/dist/ui/elements/media.d.ts +2 -1
  132. package/dist/ui/elements/media.js +2 -2
  133. package/dist/ui/elements/media.tsx +2 -1
  134. package/dist/ui/elements/menu.d.ts +2 -1
  135. package/dist/ui/elements/menu.js +5 -5
  136. package/dist/ui/elements/menu.tsx +2 -1
  137. package/dist/ui/elements/menu.works.d.ts +2 -1
  138. package/dist/ui/elements/menu.works.js +5 -5
  139. package/dist/ui/elements/menu.works.tsx +2 -1
  140. package/dist/ui/elements/money.d.ts +3 -1
  141. package/dist/ui/elements/money.js +10 -5
  142. package/dist/ui/elements/money.tsx +12 -3
  143. package/dist/ui/elements/money.works.js +1 -1
  144. package/dist/ui/elements/pagination.d.ts +2 -1
  145. package/dist/ui/elements/pagination.js +5 -5
  146. package/dist/ui/elements/pagination.tsx +2 -1
  147. package/dist/ui/elements/progress.d.ts +2 -1
  148. package/dist/ui/elements/progress.js +3 -3
  149. package/dist/ui/elements/progress.tsx +2 -1
  150. package/dist/ui/elements/radio-group.d.ts +2 -1
  151. package/dist/ui/elements/radio-group.js +4 -4
  152. package/dist/ui/elements/radio-group.tsx +2 -1
  153. package/dist/ui/elements/radio-group.works.js +1 -1
  154. package/dist/ui/elements/row.d.ts +2 -1
  155. package/dist/ui/elements/row.js +1 -1
  156. package/dist/ui/elements/row.tsx +2 -1
  157. package/dist/ui/elements/scatter.d.ts +2 -1
  158. package/dist/ui/elements/scatter.js +3 -3
  159. package/dist/ui/elements/scatter.tsx +2 -1
  160. package/dist/ui/elements/scatter.works.js +1 -1
  161. package/dist/ui/elements/select.d.ts +2 -1
  162. package/dist/ui/elements/select.js +4 -4
  163. package/dist/ui/elements/select.tsx +2 -1
  164. package/dist/ui/elements/separator.d.ts +2 -1
  165. package/dist/ui/elements/separator.js +2 -2
  166. package/dist/ui/elements/separator.tsx +2 -1
  167. package/dist/ui/elements/skeleton.d.ts +2 -1
  168. package/dist/ui/elements/skeleton.js +2 -2
  169. package/dist/ui/elements/skeleton.tsx +2 -1
  170. package/dist/ui/elements/slider.d.ts +2 -1
  171. package/dist/ui/elements/slider.js +3 -3
  172. package/dist/ui/elements/slider.tsx +2 -1
  173. package/dist/ui/elements/sparkline.d.ts +2 -1
  174. package/dist/ui/elements/sparkline.js +3 -3
  175. package/dist/ui/elements/sparkline.tsx +2 -1
  176. package/dist/ui/elements/sparkline.works.js +1 -1
  177. package/dist/ui/elements/spinner.d.ts +2 -1
  178. package/dist/ui/elements/spinner.js +2 -2
  179. package/dist/ui/elements/spinner.tsx +2 -1
  180. package/dist/ui/elements/stack.d.ts +2 -1
  181. package/dist/ui/elements/stack.js +1 -1
  182. package/dist/ui/elements/stack.tsx +2 -1
  183. package/dist/ui/elements/stat.d.ts +2 -1
  184. package/dist/ui/elements/stat.js +3 -3
  185. package/dist/ui/elements/stat.tsx +2 -1
  186. package/dist/ui/elements/stat.works.js +1 -1
  187. package/dist/ui/elements/surface.d.ts +2 -1
  188. package/dist/ui/elements/surface.js +2 -2
  189. package/dist/ui/elements/surface.tsx +2 -1
  190. package/dist/ui/elements/surface.works.js +1 -1
  191. package/dist/ui/elements/table.d.ts +2 -1
  192. package/dist/ui/elements/table.js +4 -4
  193. package/dist/ui/elements/table.tsx +2 -1
  194. package/dist/ui/elements/table.works.js +1 -1
  195. package/dist/ui/elements/tabs.d.ts +2 -1
  196. package/dist/ui/elements/tabs.js +4 -4
  197. package/dist/ui/elements/tabs.tsx +2 -1
  198. package/dist/ui/elements/tabs.works.js +1 -1
  199. package/dist/ui/elements/text.d.ts +2 -1
  200. package/dist/ui/elements/text.js +2 -2
  201. package/dist/ui/elements/text.tsx +2 -1
  202. package/dist/ui/elements/textarea.d.ts +2 -1
  203. package/dist/ui/elements/textarea.js +4 -4
  204. package/dist/ui/elements/textarea.tsx +2 -1
  205. package/dist/ui/elements/time.d.ts +3 -1
  206. package/dist/ui/elements/time.js +7 -4
  207. package/dist/ui/elements/time.tsx +9 -2
  208. package/dist/ui/elements/time.works.d.ts +1 -0
  209. package/dist/ui/elements/time.works.js +7 -3
  210. package/dist/ui/elements/time.works.ts +6 -2
  211. package/dist/ui/elements/toggle.d.ts +2 -1
  212. package/dist/ui/elements/toggle.js +3 -3
  213. package/dist/ui/elements/toggle.tsx +2 -1
  214. package/dist/ui/elements/tooltip.d.ts +2 -1
  215. package/dist/ui/elements/tooltip.js +2 -2
  216. package/dist/ui/elements/tooltip.tsx +2 -1
  217. package/dist/ui/elements/tooltip.works.js +2 -2
  218. package/dist/ui/elements/value.d.ts +3 -1
  219. package/dist/ui/elements/value.js +10 -5
  220. package/dist/ui/elements/value.tsx +12 -3
  221. package/dist/ui/elements/value.works.js +1 -1
  222. package/dist/ui/elements.d.ts +15 -11
  223. package/dist/ui/elements.js +6 -6
  224. package/dist/ui/elements.ts +7 -7
  225. package/dist/ui/fonts.d.ts +1 -1
  226. package/dist/ui/fonts.js +1 -1
  227. package/dist/ui/generators/dev.d.ts +1 -2
  228. package/dist/ui/generators/dev.js +33 -37
  229. package/dist/ui/generators/dev.ts +30 -37
  230. package/dist/ui/generators/elements.d.ts +1 -0
  231. package/dist/ui/generators/elements.js +11 -9
  232. package/dist/ui/generators/elements.ts +12 -9
  233. package/dist/ui/generators/i18n.js +6 -23
  234. package/dist/ui/generators/i18n.ts +1 -18
  235. package/dist/ui/generators/icons.js +5 -14
  236. package/dist/ui/generators/icons.ts +1 -10
  237. package/dist/ui/generators/react.js +4 -5
  238. package/dist/ui/generators/react.ts +2 -3
  239. package/dist/ui/generators/routes.js +66 -51
  240. package/dist/ui/generators/routes.ts +67 -46
  241. package/dist/ui/generators/show.js +9 -6
  242. package/dist/ui/generators/show.ts +4 -2
  243. package/dist/ui/generators/styles.js +12 -16
  244. package/dist/ui/generators/styles.ts +1 -5
  245. package/dist/ui/generators/variants.js +3 -3
  246. package/dist/ui/generators/variants.ts +1 -1
  247. package/dist/ui/i18n/catalogs/en.js +1 -1
  248. package/dist/ui/i18n/format.js +1 -1
  249. package/dist/ui/i18n/translator.js +2 -2
  250. package/dist/ui/material.d.ts +11 -11
  251. package/dist/ui/material.js +1 -1
  252. package/dist/ui/materials/mat_bordered.d.ts +13 -13
  253. package/dist/ui/materials/mat_bordered.js +1 -1
  254. package/dist/ui/materials/mat_ceramic.d.ts +13 -13
  255. package/dist/ui/materials/mat_ceramic.js +1 -1
  256. package/dist/ui/materials/mat_clay.d.ts +13 -13
  257. package/dist/ui/materials/mat_clay.js +1 -1
  258. package/dist/ui/materials/mat_elevated.d.ts +13 -13
  259. package/dist/ui/materials/mat_elevated.js +1 -1
  260. package/dist/ui/materials/mat_flat.d.ts +25 -25
  261. package/dist/ui/materials/mat_flat.js +1 -1
  262. package/dist/ui/materials/mat_glass.d.ts +17 -17
  263. package/dist/ui/materials/mat_glass.js +1 -1
  264. package/dist/ui/materials/mat_lit.d.ts +13 -13
  265. package/dist/ui/materials/mat_lit.js +1 -1
  266. package/dist/ui/materials/mat_moulded.d.ts +9 -9
  267. package/dist/ui/materials/mat_moulded.js +1 -1
  268. package/dist/ui/materials.d.ts +30 -30
  269. package/dist/ui/materials.js +3 -3
  270. package/dist/ui/materials.ts +1 -1
  271. package/dist/ui/modes.d.ts +2 -2
  272. package/dist/ui/presented.js +5 -5
  273. package/dist/ui/provider.d.ts +3 -0
  274. package/dist/ui/provider.js +9 -10
  275. package/dist/ui/provider.tsx +7 -5
  276. package/dist/ui/screens.js +6 -6
  277. package/dist/ui/screens.ts +1 -1
  278. package/dist/ui/scroll-lock.js +1 -1
  279. package/dist/ui/series.js +1 -1
  280. package/dist/ui/styleguide.js +1 -1
  281. package/dist/ui/tokens.d.ts +2 -2
  282. package/dist/ui/tokens.js +3 -3
  283. package/dist/ui/tokens.ts +1 -1
  284. package/dist/ui/validators.js +1 -1
  285. package/dist/ui/variant.d.ts +37 -37
  286. package/dist/ui/variant.js +2 -2
  287. package/dist/ui/variants/var_avatar-round.d.ts +13 -13
  288. package/dist/ui/variants/var_avatar-round.js +1 -1
  289. package/dist/ui/variants/var_bubble-me.d.ts +12 -12
  290. package/dist/ui/variants/var_bubble-me.js +1 -1
  291. package/dist/ui/variants/var_bubble-them.d.ts +10 -10
  292. package/dist/ui/variants/var_bubble-them.js +1 -1
  293. package/dist/ui/variants/var_button-border.d.ts +61 -61
  294. package/dist/ui/variants/var_button-border.js +1 -1
  295. package/dist/ui/variants/var_button-cta.d.ts +61 -61
  296. package/dist/ui/variants/var_button-cta.js +1 -1
  297. package/dist/ui/variants/var_button-destructive-ghost.d.ts +59 -59
  298. package/dist/ui/variants/var_button-destructive-ghost.js +1 -1
  299. package/dist/ui/variants/var_button-destructive.d.ts +61 -61
  300. package/dist/ui/variants/var_button-destructive.js +1 -1
  301. package/dist/ui/variants/var_button-fill.d.ts +61 -61
  302. package/dist/ui/variants/var_button-fill.js +1 -1
  303. package/dist/ui/variants/var_button-ghost.d.ts +59 -59
  304. package/dist/ui/variants/var_button-ghost.js +1 -1
  305. package/dist/ui/variants/var_button-glass.d.ts +40 -40
  306. package/dist/ui/variants/var_button-glass.js +1 -1
  307. package/dist/ui/variants/var_button-normal.d.ts +61 -61
  308. package/dist/ui/variants/var_button-normal.js +1 -1
  309. package/dist/ui/variants/var_button-quiet.d.ts +63 -63
  310. package/dist/ui/variants/var_button-quiet.js +1 -1
  311. package/dist/ui/variants/var_card.d.ts +17 -17
  312. package/dist/ui/variants/var_card.js +1 -1
  313. package/dist/ui/variants/var_chip.d.ts +10 -10
  314. package/dist/ui/variants/var_chip.js +1 -1
  315. package/dist/ui/variants/var_choice.d.ts +15 -15
  316. package/dist/ui/variants/var_choice.js +1 -1
  317. package/dist/ui/variants/var_framed.d.ts +5 -5
  318. package/dist/ui/variants/var_framed.js +1 -1
  319. package/dist/ui/variants/var_glyph-plain.d.ts +7 -7
  320. package/dist/ui/variants/var_glyph-plain.js +1 -1
  321. package/dist/ui/variants/var_input.d.ts +30 -30
  322. package/dist/ui/variants/var_input.js +1 -1
  323. package/dist/ui/variants/var_link-inline.d.ts +17 -17
  324. package/dist/ui/variants/var_link-inline.js +1 -1
  325. package/dist/ui/variants/var_list-row.d.ts +22 -22
  326. package/dist/ui/variants/var_list-row.js +1 -1
  327. package/dist/ui/variants/var_rule.d.ts +5 -5
  328. package/dist/ui/variants/var_rule.js +1 -1
  329. package/dist/ui/variants/var_skeleton-block.d.ts +9 -9
  330. package/dist/ui/variants/var_skeleton-block.js +1 -1
  331. package/dist/ui/variants/var_spinner-turning.d.ts +9 -9
  332. package/dist/ui/variants/var_spinner-turning.js +1 -1
  333. package/dist/ui/variants/var_stat-tile.d.ts +10 -10
  334. package/dist/ui/variants/var_stat-tile.js +1 -1
  335. package/dist/ui/variants/var_tab-bar.d.ts +14 -14
  336. package/dist/ui/variants/var_tab-bar.js +1 -1
  337. package/dist/ui/variants/var_tap-target.d.ts +11 -11
  338. package/dist/ui/variants/var_tap-target.js +1 -1
  339. package/dist/ui/variants.d.ts +88 -88
  340. package/dist/ui/wrappers.d.ts +7 -6
  341. package/dist/ui/wrappers.js +16 -14
  342. package/dist/ui/wrappers.tsx +21 -18
  343. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';
4
- import { PRESENTATION_BEHAVIOUR } from "./door.js";
5
- import { selectorOf } from "./signals.js";
6
- import { Presented } from "./presented.js";
7
- import { useRenderLoopDetector } from "./render-loop.js";
4
+ import { PRESENTATION_BEHAVIOUR } from './door.js';
5
+ import { selectorOf } from './signals.js';
6
+ import { Presented } from './presented.js';
7
+ import { useRenderLoopDetector } from './render-loop.js';
8
8
  export const UiContext = createContext(null);
9
9
  const MISSING = 'No UI context. Every element resolves its look, its text and its clock through the door, so it ' +
10
10
  'must render inside <UiProvider>. An element rendering without one would silently have no theme ' +
@@ -121,8 +121,10 @@ const NO_DISPATCH = 'No dispatch. An operation runs one way here and that way is
121
121
  'reads as a dead control and is a wiring gap.';
122
122
  const NO_NAVIGATE = 'No navigateTo. Moving between screens is its own thing, supplied beside dispatch rather than through it, so a ' +
123
123
  'thing that names a screen must render inside a <UiProvider> whose config supplies it.';
124
- export function usePress(press, origin) {
125
- const { collector, dispatch, navigateTo } = useUi();
124
+ export function pressing(ui, press, origin) {
125
+ const { collector, dispatch, navigateTo } = ui;
126
+ const asked = press.dispatch;
127
+ const carried = press.input;
126
128
  const reported = (run) => {
127
129
  if (collector === undefined || origin === undefined)
128
130
  return run;
@@ -146,17 +148,18 @@ export function usePress(press, origin) {
146
148
  navigateTo(where);
147
149
  });
148
150
  }
149
- if (press.dispatch !== undefined) {
150
- const named = press.dispatch;
151
- const input = press.input;
151
+ if (asked !== undefined) {
152
152
  return reported(() => {
153
153
  if (dispatch === undefined)
154
154
  throw new Error(NO_DISPATCH);
155
- void dispatch(named, input);
155
+ void dispatch(asked, carried);
156
156
  });
157
157
  }
158
158
  return undefined;
159
159
  }
160
+ export function usePress(press, origin) {
161
+ return pressing(useUi(), press, origin);
162
+ }
160
163
  export function useVisibility(active) {
161
164
  const { clock } = useUi();
162
165
  return useMemo(() => {
@@ -214,13 +217,12 @@ function useViews(views) {
214
217
  const [held, setHeld] = useState({});
215
218
  const [wrong, setWrong] = useState(undefined);
216
219
  useEffect(() => {
217
- const wanted = named === '' ? [] : named.split(' ');
218
- if (wanted.length === 0)
220
+ if (views.length === 0)
219
221
  return undefined;
220
222
  if (dispatch === undefined)
221
223
  throw new Error(NO_DISPATCH);
222
224
  let live = true;
223
- void Promise.all(wanted.map(async (one) => [one, await dispatch(one)]))
225
+ void Promise.all(views.map(async (one) => [one, await dispatch(one)]))
224
226
  .then((all) => {
225
227
  if (live)
226
228
  setHeld(Object.fromEntries(all));
@@ -235,7 +237,7 @@ function useViews(views) {
235
237
  }, [named, dispatch]);
236
238
  const all = useMemo(() => {
237
239
  const found = {};
238
- for (const one of named === '' ? [] : named.split(' '))
240
+ for (const one of views)
239
241
  found[one] = held[one];
240
242
  return found;
241
243
  }, [named, held]);
@@ -3,7 +3,7 @@
3
3
  import { createContext, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'
4
4
 
5
5
  import type { Collector } from './collector.ts'
6
- import type { ArrangementElement, VariantsFor, Wearing } from './checked.ts'
6
+ import type { ArrangementElement, Dispatching, VariantsFor, Wearing } from './checked.ts'
7
7
 
8
8
  import { PRESENTATION_BEHAVIOUR, type Clock, type Presentation, type Surface, type Ticker } from './door.ts'
9
9
  import { holds as declared, selectorOf } from './signals.ts'
@@ -43,7 +43,7 @@ export interface UiConfig {
43
43
 
44
44
  readonly platform?: string
45
45
 
46
- readonly dispatch?: (name: string, input?: Readonly<Record<string, unknown>>) => Promise<unknown>
46
+ readonly dispatch?: (name: keyof Dispatching, input?: Readonly<Record<string, unknown>>) => Promise<unknown>
47
47
 
48
48
  readonly navigateTo?: (screen: string) => void
49
49
 
@@ -75,7 +75,7 @@ export interface SurfaceRequest {
75
75
 
76
76
  readonly className?: string
77
77
 
78
- readonly invokes?: { readonly dispatch?: string; readonly input?: Readonly<Record<string, unknown>>; readonly on?: 'press' | 'shown' }
78
+ readonly invokes?: { readonly dispatch?: keyof Dispatching; readonly input?: Readonly<Record<string, unknown>>; readonly on?: 'press' | 'shown' }
79
79
 
80
80
  readonly holds?: readonly ((typeof declared)[number]['id'] | (string & {}))[]
81
81
 
@@ -135,7 +135,7 @@ export function useSurface(request: SurfaceRequest = {}): Surface {
135
135
  for (const [name, value] of Object.entries(request.measures ?? {})) measures[`--${name}`] = value
136
136
 
137
137
  const asked = request.invokes
138
- const named = asked?.dispatch
138
+ const named: keyof Dispatching | undefined = asked?.dispatch
139
139
  const carried = asked?.input
140
140
  const when = asked?.on ?? 'press'
141
141
 
@@ -180,13 +180,13 @@ export function useSurface(request: SurfaceRequest = {}): Surface {
180
180
  }
181
181
 
182
182
  export type Press =
183
- | { readonly dispatch: string; readonly input?: Readonly<Record<string, unknown>>; readonly navigateTo?: never; readonly onPress?: never }
183
+ | { readonly dispatch: keyof Dispatching; readonly input?: Readonly<Record<string, unknown>>; readonly navigateTo?: never; readonly onPress?: never }
184
184
  | { readonly navigateTo: string; readonly dispatch?: never; readonly input?: never; readonly onPress?: never }
185
185
  | { readonly onPress: () => void; readonly dispatch?: never; readonly navigateTo?: never; readonly input?: never }
186
186
  | { readonly dispatch?: never; readonly navigateTo?: never; readonly input?: never; readonly onPress?: never }
187
187
 
188
188
  export function pressOf(props: {
189
- readonly dispatch?: string
189
+ readonly dispatch?: keyof Dispatching
190
190
  readonly input?: Readonly<Record<string, unknown>>
191
191
  readonly navigateTo?: string
192
192
  readonly onPress?: () => void
@@ -213,8 +213,10 @@ const NO_NAVIGATE =
213
213
  'No navigateTo. Moving between screens is its own thing, supplied beside dispatch rather than through it, so a ' +
214
214
  'thing that names a screen must render inside a <UiProvider> whose config supplies it.'
215
215
 
216
- export function usePress(press: Press, origin?: PressOrigin): (() => void) | undefined {
217
- const { collector, dispatch, navigateTo } = useUi()
216
+ export function pressing(ui: ReturnType<typeof useUi>, press: Press, origin?: PressOrigin): (() => void) | undefined {
217
+ const { collector, dispatch, navigateTo } = ui
218
+ const asked: keyof Dispatching | undefined = press.dispatch
219
+ const carried = press.input
218
220
 
219
221
  const reported = (run: () => void): (() => void) => {
220
222
  if (collector === undefined || origin === undefined) return run
@@ -239,18 +241,20 @@ export function usePress(press: Press, origin?: PressOrigin): (() => void) | und
239
241
  })
240
242
  }
241
243
 
242
- if (press.dispatch !== undefined) {
243
- const named = press.dispatch
244
- const input = press.input
244
+ if (asked !== undefined) {
245
245
  return reported(() => {
246
246
  if (dispatch === undefined) throw new Error(NO_DISPATCH)
247
- void dispatch(named, input)
247
+ void dispatch(asked, carried)
248
248
  })
249
249
  }
250
250
 
251
251
  return undefined
252
252
  }
253
253
 
254
+ export function usePress(press: Press, origin?: PressOrigin): (() => void) | undefined {
255
+ return pressing(useUi(), press, origin)
256
+ }
257
+
254
258
  export function useVisibility(active: boolean): (node: HTMLElement | null) => void {
255
259
  const { clock } = useUi()
256
260
  return useMemo(() => {
@@ -267,7 +271,7 @@ export function useVisibility(active: boolean): (node: HTMLElement | null) => vo
267
271
 
268
272
  export interface ScreenOptions {
269
273
  readonly as?: Presentation
270
- readonly views?: readonly string[]
274
+ readonly views?: readonly (keyof Dispatching)[]
271
275
 
272
276
  readonly unreachable?: boolean
273
277
  }
@@ -359,18 +363,17 @@ export function useView<T>(id: string): T | undefined {
359
363
  return held[id] as T | undefined
360
364
  }
361
365
 
362
- function useViews(views: readonly string[]): Readonly<Record<string, unknown>> {
366
+ function useViews(views: readonly (keyof Dispatching)[]): Readonly<Record<string, unknown>> {
363
367
  const { dispatch } = useUi()
364
368
  const named = views.join(' ')
365
369
  const [held, setHeld] = useState<Readonly<Record<string, unknown>>>({})
366
370
  const [wrong, setWrong] = useState<Error | undefined>(undefined)
367
371
 
368
372
  useEffect(() => {
369
- const wanted = named === '' ? [] : named.split(' ')
370
- if (wanted.length === 0) return undefined
373
+ if (views.length === 0) return undefined
371
374
  if (dispatch === undefined) throw new Error(NO_DISPATCH)
372
375
  let live = true
373
- void Promise.all(wanted.map(async (one) => [one, await dispatch(one)] as const))
376
+ void Promise.all(views.map(async (one: keyof Dispatching) => [one, await dispatch(one)] as const))
374
377
  .then((all) => {
375
378
  if (live) setHeld(Object.fromEntries(all))
376
379
  })
@@ -384,7 +387,7 @@ function useViews(views: readonly string[]): Readonly<Record<string, unknown>> {
384
387
 
385
388
  const all = useMemo(() => {
386
389
  const found: Record<string, unknown> = {}
387
- for (const one of named === '' ? [] : named.split(' ')) found[one] = held[one]
390
+ for (const one of views) found[one] = held[one]
388
391
  return found
389
392
  }, [named, held])
390
393
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prestack/thread-ui",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -17,6 +17,6 @@
17
17
  "react-dom": "^19.0.0",
18
18
  "typescript": "^6.0.0",
19
19
  "zod": "^4.5.4",
20
- "@prestack/thread": "^0.1.3"
20
+ "@prestack/thread": "^0.1.4"
21
21
  }
22
22
  }