@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.
- package/CHANGELOG.md +174 -0
- package/dist/ui/animations/anm_appear.d.ts +8 -8
- package/dist/ui/animations/anm_blur_in.d.ts +12 -12
- package/dist/ui/animations/anm_blur_out.d.ts +12 -12
- package/dist/ui/animations/anm_dismiss.d.ts +12 -12
- package/dist/ui/animations/anm_drop.d.ts +12 -12
- package/dist/ui/animations/anm_fall.d.ts +12 -12
- package/dist/ui/animations/anm_flash.d.ts +9 -9
- package/dist/ui/animations/anm_glow.d.ts +8 -8
- package/dist/ui/animations/anm_lift.d.ts +8 -8
- package/dist/ui/animations/anm_nudge.d.ts +8 -8
- package/dist/ui/animations/anm_pop_in.d.ts +16 -16
- package/dist/ui/animations/anm_pop_out.d.ts +16 -16
- package/dist/ui/animations/anm_press.d.ts +9 -9
- package/dist/ui/animations/anm_pulse.d.ts +10 -10
- package/dist/ui/animations/anm_rise.d.ts +12 -12
- package/dist/ui/animations/anm_shake.d.ts +11 -11
- package/dist/ui/animations/anm_slide_in_left.d.ts +12 -12
- package/dist/ui/animations/anm_slide_in_right.d.ts +12 -12
- package/dist/ui/animations/anm_slide_out_left.d.ts +12 -12
- package/dist/ui/animations/anm_slide_out_right.d.ts +12 -12
- package/dist/ui/animations/anm_spin.d.ts +8 -8
- package/dist/ui/animations/anm_swell.d.ts +8 -8
- package/dist/ui/animations/anm_wobble.d.ts +13 -13
- package/dist/ui/animations/anm_zoom_in.d.ts +12 -12
- package/dist/ui/animations/anm_zoom_out.d.ts +12 -12
- package/dist/ui/animations.d.ts +8 -8
- package/dist/ui/animations.js +4 -4
- package/dist/ui/animations.ts +1 -1
- package/dist/ui/attach.js +22 -78
- package/dist/ui/attach.ts +8 -66
- package/dist/ui/charts.d.ts +0 -3
- package/dist/ui/charts.js +3 -7
- package/dist/ui/charts.tsx +0 -4
- package/dist/ui/checked.d.ts +1 -1
- package/dist/ui/checked.ts +1 -1
- package/dist/ui/collector.js +1 -1
- package/dist/ui/collector.ts +1 -1
- package/dist/ui/compositions.d.ts +9 -3
- package/dist/ui/compositions.js +9 -158
- package/dist/ui/compositions.ts +6 -170
- package/dist/ui/content.js +4 -7
- package/dist/ui/content.tsx +4 -15
- package/dist/ui/controls.js +1 -1
- package/dist/ui/door.d.ts +1 -1
- package/dist/ui/elements/accordion.d.ts +2 -1
- package/dist/ui/elements/accordion.js +4 -4
- package/dist/ui/elements/accordion.tsx +2 -1
- package/dist/ui/elements/aspect-ratio.d.ts +2 -1
- package/dist/ui/elements/aspect-ratio.js +1 -1
- package/dist/ui/elements/aspect-ratio.tsx +2 -1
- package/dist/ui/elements/avatar.d.ts +2 -1
- package/dist/ui/elements/avatar.js +3 -3
- package/dist/ui/elements/avatar.tsx +2 -1
- package/dist/ui/elements/badge.d.ts +2 -1
- package/dist/ui/elements/badge.js +3 -3
- package/dist/ui/elements/badge.tsx +2 -1
- package/dist/ui/elements/bars.d.ts +2 -1
- package/dist/ui/elements/bars.js +5 -5
- package/dist/ui/elements/bars.tsx +2 -1
- package/dist/ui/elements/bars.works.js +3 -3
- package/dist/ui/elements/box.d.ts +2 -1
- package/dist/ui/elements/box.js +1 -1
- package/dist/ui/elements/box.tsx +2 -1
- package/dist/ui/elements/breadcrumb.d.ts +2 -1
- package/dist/ui/elements/breadcrumb.js +5 -5
- package/dist/ui/elements/breadcrumb.tsx +2 -1
- package/dist/ui/elements/breadcrumb.works.js +1 -1
- package/dist/ui/elements/button.d.ts +2 -1
- package/dist/ui/elements/button.js +3 -3
- package/dist/ui/elements/button.tsx +2 -1
- package/dist/ui/elements/button.works.js +2 -2
- package/dist/ui/elements/column.d.ts +2 -1
- package/dist/ui/elements/column.js +1 -1
- package/dist/ui/elements/column.tsx +2 -1
- package/dist/ui/elements/consent.d.ts +2 -1
- package/dist/ui/elements/consent.js +10 -10
- package/dist/ui/elements/consent.tsx +2 -1
- package/dist/ui/elements/consent.works.js +1 -1
- package/dist/ui/elements/donut.d.ts +2 -1
- package/dist/ui/elements/donut.js +4 -4
- package/dist/ui/elements/donut.tsx +2 -1
- package/dist/ui/elements/donut.works.js +2 -2
- package/dist/ui/elements/each.d.ts +2 -1
- package/dist/ui/elements/each.js +3 -3
- package/dist/ui/elements/each.tsx +2 -1
- package/dist/ui/elements/each.works.js +2 -2
- package/dist/ui/elements/empty.d.ts +2 -1
- package/dist/ui/elements/empty.js +2 -2
- package/dist/ui/elements/empty.tsx +2 -1
- package/dist/ui/elements/field.d.ts +2 -1
- package/dist/ui/elements/field.js +3 -3
- package/dist/ui/elements/field.tsx +2 -1
- package/dist/ui/elements/field.works.js +1 -1
- package/dist/ui/elements/funnel.d.ts +2 -1
- package/dist/ui/elements/funnel.js +5 -5
- package/dist/ui/elements/funnel.tsx +2 -1
- package/dist/ui/elements/funnel.works.js +3 -3
- package/dist/ui/elements/gauge.d.ts +2 -1
- package/dist/ui/elements/gauge.js +3 -3
- package/dist/ui/elements/gauge.tsx +2 -1
- package/dist/ui/elements/gauge.works.js +1 -1
- package/dist/ui/elements/glyph.d.ts +2 -1
- package/dist/ui/elements/glyph.js +3 -3
- package/dist/ui/elements/glyph.tsx +2 -1
- package/dist/ui/elements/glyph.works.js +1 -1
- package/dist/ui/elements/grid.d.ts +2 -1
- package/dist/ui/elements/grid.js +1 -1
- package/dist/ui/elements/grid.tsx +2 -1
- package/dist/ui/elements/heatmap.d.ts +2 -1
- package/dist/ui/elements/heatmap.js +5 -5
- package/dist/ui/elements/heatmap.tsx +2 -1
- package/dist/ui/elements/heatmap.works.js +1 -1
- package/dist/ui/elements/hit-box.d.ts +2 -1
- package/dist/ui/elements/hit-box.js +2 -2
- package/dist/ui/elements/hit-box.tsx +2 -1
- package/dist/ui/elements/hit-box.works.d.ts +2 -2
- package/dist/ui/elements/hit-box.works.js +5 -5
- package/dist/ui/elements/hit-box.works.tsx +2 -1
- package/dist/ui/elements/image.d.ts +2 -1
- package/dist/ui/elements/image.js +2 -2
- package/dist/ui/elements/image.tsx +2 -1
- package/dist/ui/elements/line-chart.d.ts +2 -1
- package/dist/ui/elements/line-chart.js +4 -4
- package/dist/ui/elements/line-chart.tsx +2 -1
- package/dist/ui/elements/line-chart.works.js +2 -2
- package/dist/ui/elements/link.d.ts +2 -1
- package/dist/ui/elements/link.js +3 -3
- package/dist/ui/elements/link.tsx +2 -1
- package/dist/ui/elements/link.works.js +1 -1
- package/dist/ui/elements/media.d.ts +2 -1
- package/dist/ui/elements/media.js +2 -2
- package/dist/ui/elements/media.tsx +2 -1
- package/dist/ui/elements/menu.d.ts +2 -1
- package/dist/ui/elements/menu.js +5 -5
- package/dist/ui/elements/menu.tsx +2 -1
- package/dist/ui/elements/menu.works.d.ts +2 -1
- package/dist/ui/elements/menu.works.js +5 -5
- package/dist/ui/elements/menu.works.tsx +2 -1
- package/dist/ui/elements/money.d.ts +3 -1
- package/dist/ui/elements/money.js +10 -5
- package/dist/ui/elements/money.tsx +12 -3
- package/dist/ui/elements/money.works.js +1 -1
- package/dist/ui/elements/pagination.d.ts +2 -1
- package/dist/ui/elements/pagination.js +5 -5
- package/dist/ui/elements/pagination.tsx +2 -1
- package/dist/ui/elements/progress.d.ts +2 -1
- package/dist/ui/elements/progress.js +3 -3
- package/dist/ui/elements/progress.tsx +2 -1
- package/dist/ui/elements/radio-group.d.ts +2 -1
- package/dist/ui/elements/radio-group.js +4 -4
- package/dist/ui/elements/radio-group.tsx +2 -1
- package/dist/ui/elements/radio-group.works.js +1 -1
- package/dist/ui/elements/row.d.ts +2 -1
- package/dist/ui/elements/row.js +1 -1
- package/dist/ui/elements/row.tsx +2 -1
- package/dist/ui/elements/scatter.d.ts +2 -1
- package/dist/ui/elements/scatter.js +3 -3
- package/dist/ui/elements/scatter.tsx +2 -1
- package/dist/ui/elements/scatter.works.js +1 -1
- package/dist/ui/elements/select.d.ts +2 -1
- package/dist/ui/elements/select.js +4 -4
- package/dist/ui/elements/select.tsx +2 -1
- package/dist/ui/elements/separator.d.ts +2 -1
- package/dist/ui/elements/separator.js +2 -2
- package/dist/ui/elements/separator.tsx +2 -1
- package/dist/ui/elements/skeleton.d.ts +2 -1
- package/dist/ui/elements/skeleton.js +2 -2
- package/dist/ui/elements/skeleton.tsx +2 -1
- package/dist/ui/elements/slider.d.ts +2 -1
- package/dist/ui/elements/slider.js +3 -3
- package/dist/ui/elements/slider.tsx +2 -1
- package/dist/ui/elements/sparkline.d.ts +2 -1
- package/dist/ui/elements/sparkline.js +3 -3
- package/dist/ui/elements/sparkline.tsx +2 -1
- package/dist/ui/elements/sparkline.works.js +1 -1
- package/dist/ui/elements/spinner.d.ts +2 -1
- package/dist/ui/elements/spinner.js +2 -2
- package/dist/ui/elements/spinner.tsx +2 -1
- package/dist/ui/elements/stack.d.ts +2 -1
- package/dist/ui/elements/stack.js +1 -1
- package/dist/ui/elements/stack.tsx +2 -1
- package/dist/ui/elements/stat.d.ts +2 -1
- package/dist/ui/elements/stat.js +3 -3
- package/dist/ui/elements/stat.tsx +2 -1
- package/dist/ui/elements/stat.works.js +1 -1
- package/dist/ui/elements/surface.d.ts +2 -1
- package/dist/ui/elements/surface.js +2 -2
- package/dist/ui/elements/surface.tsx +2 -1
- package/dist/ui/elements/surface.works.js +1 -1
- package/dist/ui/elements/table.d.ts +2 -1
- package/dist/ui/elements/table.js +4 -4
- package/dist/ui/elements/table.tsx +2 -1
- package/dist/ui/elements/table.works.js +1 -1
- package/dist/ui/elements/tabs.d.ts +2 -1
- package/dist/ui/elements/tabs.js +4 -4
- package/dist/ui/elements/tabs.tsx +2 -1
- package/dist/ui/elements/tabs.works.js +1 -1
- package/dist/ui/elements/text.d.ts +2 -1
- package/dist/ui/elements/text.js +2 -2
- package/dist/ui/elements/text.tsx +2 -1
- package/dist/ui/elements/textarea.d.ts +2 -1
- package/dist/ui/elements/textarea.js +4 -4
- package/dist/ui/elements/textarea.tsx +2 -1
- package/dist/ui/elements/time.d.ts +3 -1
- package/dist/ui/elements/time.js +7 -4
- package/dist/ui/elements/time.tsx +9 -2
- package/dist/ui/elements/time.works.d.ts +1 -0
- package/dist/ui/elements/time.works.js +7 -3
- package/dist/ui/elements/time.works.ts +6 -2
- package/dist/ui/elements/toggle.d.ts +2 -1
- package/dist/ui/elements/toggle.js +3 -3
- package/dist/ui/elements/toggle.tsx +2 -1
- package/dist/ui/elements/tooltip.d.ts +2 -1
- package/dist/ui/elements/tooltip.js +2 -2
- package/dist/ui/elements/tooltip.tsx +2 -1
- package/dist/ui/elements/tooltip.works.js +2 -2
- package/dist/ui/elements/value.d.ts +3 -1
- package/dist/ui/elements/value.js +10 -5
- package/dist/ui/elements/value.tsx +12 -3
- package/dist/ui/elements/value.works.js +1 -1
- package/dist/ui/elements.d.ts +15 -11
- package/dist/ui/elements.js +6 -6
- package/dist/ui/elements.ts +7 -7
- package/dist/ui/fonts.d.ts +1 -1
- package/dist/ui/fonts.js +1 -1
- package/dist/ui/generators/dev.d.ts +1 -2
- package/dist/ui/generators/dev.js +33 -37
- package/dist/ui/generators/dev.ts +30 -37
- package/dist/ui/generators/elements.d.ts +1 -0
- package/dist/ui/generators/elements.js +11 -9
- package/dist/ui/generators/elements.ts +12 -9
- package/dist/ui/generators/i18n.js +6 -23
- package/dist/ui/generators/i18n.ts +1 -18
- package/dist/ui/generators/icons.js +5 -14
- package/dist/ui/generators/icons.ts +1 -10
- package/dist/ui/generators/react.js +4 -5
- package/dist/ui/generators/react.ts +2 -3
- package/dist/ui/generators/routes.js +66 -51
- package/dist/ui/generators/routes.ts +67 -46
- package/dist/ui/generators/show.js +9 -6
- package/dist/ui/generators/show.ts +4 -2
- package/dist/ui/generators/styles.js +12 -16
- package/dist/ui/generators/styles.ts +1 -5
- package/dist/ui/generators/variants.js +3 -3
- package/dist/ui/generators/variants.ts +1 -1
- package/dist/ui/i18n/catalogs/en.js +1 -1
- package/dist/ui/i18n/format.js +1 -1
- package/dist/ui/i18n/translator.js +2 -2
- package/dist/ui/material.d.ts +11 -11
- package/dist/ui/material.js +1 -1
- package/dist/ui/materials/mat_bordered.d.ts +13 -13
- package/dist/ui/materials/mat_bordered.js +1 -1
- package/dist/ui/materials/mat_ceramic.d.ts +13 -13
- package/dist/ui/materials/mat_ceramic.js +1 -1
- package/dist/ui/materials/mat_clay.d.ts +13 -13
- package/dist/ui/materials/mat_clay.js +1 -1
- package/dist/ui/materials/mat_elevated.d.ts +13 -13
- package/dist/ui/materials/mat_elevated.js +1 -1
- package/dist/ui/materials/mat_flat.d.ts +25 -25
- package/dist/ui/materials/mat_flat.js +1 -1
- package/dist/ui/materials/mat_glass.d.ts +17 -17
- package/dist/ui/materials/mat_glass.js +1 -1
- package/dist/ui/materials/mat_lit.d.ts +13 -13
- package/dist/ui/materials/mat_lit.js +1 -1
- package/dist/ui/materials/mat_moulded.d.ts +9 -9
- package/dist/ui/materials/mat_moulded.js +1 -1
- package/dist/ui/materials.d.ts +30 -30
- package/dist/ui/materials.js +3 -3
- package/dist/ui/materials.ts +1 -1
- package/dist/ui/modes.d.ts +2 -2
- package/dist/ui/presented.js +5 -5
- package/dist/ui/provider.d.ts +3 -0
- package/dist/ui/provider.js +9 -10
- package/dist/ui/provider.tsx +7 -5
- package/dist/ui/screens.js +6 -6
- package/dist/ui/screens.ts +1 -1
- package/dist/ui/scroll-lock.js +1 -1
- package/dist/ui/series.js +1 -1
- package/dist/ui/styleguide.js +1 -1
- package/dist/ui/tokens.d.ts +2 -2
- package/dist/ui/tokens.js +3 -3
- package/dist/ui/tokens.ts +1 -1
- package/dist/ui/validators.js +1 -1
- package/dist/ui/variant.d.ts +37 -37
- package/dist/ui/variant.js +2 -2
- package/dist/ui/variants/var_avatar-round.d.ts +13 -13
- package/dist/ui/variants/var_avatar-round.js +1 -1
- package/dist/ui/variants/var_bubble-me.d.ts +12 -12
- package/dist/ui/variants/var_bubble-me.js +1 -1
- package/dist/ui/variants/var_bubble-them.d.ts +10 -10
- package/dist/ui/variants/var_bubble-them.js +1 -1
- package/dist/ui/variants/var_button-border.d.ts +61 -61
- package/dist/ui/variants/var_button-border.js +1 -1
- package/dist/ui/variants/var_button-cta.d.ts +61 -61
- package/dist/ui/variants/var_button-cta.js +1 -1
- package/dist/ui/variants/var_button-destructive-ghost.d.ts +59 -59
- package/dist/ui/variants/var_button-destructive-ghost.js +1 -1
- package/dist/ui/variants/var_button-destructive.d.ts +61 -61
- package/dist/ui/variants/var_button-destructive.js +1 -1
- package/dist/ui/variants/var_button-fill.d.ts +61 -61
- package/dist/ui/variants/var_button-fill.js +1 -1
- package/dist/ui/variants/var_button-ghost.d.ts +59 -59
- package/dist/ui/variants/var_button-ghost.js +1 -1
- package/dist/ui/variants/var_button-glass.d.ts +40 -40
- package/dist/ui/variants/var_button-glass.js +1 -1
- package/dist/ui/variants/var_button-normal.d.ts +61 -61
- package/dist/ui/variants/var_button-normal.js +1 -1
- package/dist/ui/variants/var_button-quiet.d.ts +63 -63
- package/dist/ui/variants/var_button-quiet.js +1 -1
- package/dist/ui/variants/var_card.d.ts +17 -17
- package/dist/ui/variants/var_card.js +1 -1
- package/dist/ui/variants/var_chip.d.ts +10 -10
- package/dist/ui/variants/var_chip.js +1 -1
- package/dist/ui/variants/var_choice.d.ts +15 -15
- package/dist/ui/variants/var_choice.js +1 -1
- package/dist/ui/variants/var_framed.d.ts +5 -5
- package/dist/ui/variants/var_framed.js +1 -1
- package/dist/ui/variants/var_glyph-plain.d.ts +7 -7
- package/dist/ui/variants/var_glyph-plain.js +1 -1
- package/dist/ui/variants/var_input.d.ts +30 -30
- package/dist/ui/variants/var_input.js +1 -1
- package/dist/ui/variants/var_link-inline.d.ts +17 -17
- package/dist/ui/variants/var_link-inline.js +1 -1
- package/dist/ui/variants/var_list-row.d.ts +22 -22
- package/dist/ui/variants/var_list-row.js +1 -1
- package/dist/ui/variants/var_rule.d.ts +5 -5
- package/dist/ui/variants/var_rule.js +1 -1
- package/dist/ui/variants/var_skeleton-block.d.ts +9 -9
- package/dist/ui/variants/var_skeleton-block.js +1 -1
- package/dist/ui/variants/var_spinner-turning.d.ts +9 -9
- package/dist/ui/variants/var_spinner-turning.js +1 -1
- package/dist/ui/variants/var_stat-tile.d.ts +10 -10
- package/dist/ui/variants/var_stat-tile.js +1 -1
- package/dist/ui/variants/var_tab-bar.d.ts +14 -14
- package/dist/ui/variants/var_tab-bar.js +1 -1
- package/dist/ui/variants/var_tap-target.d.ts +11 -11
- package/dist/ui/variants/var_tap-target.js +1 -1
- package/dist/ui/variants.d.ts +88 -88
- package/dist/ui/wrappers.d.ts +7 -6
- package/dist/ui/wrappers.js +16 -14
- package/dist/ui/wrappers.tsx +21 -18
- package/package.json +2 -2
package/dist/ui/wrappers.js
CHANGED
|
@@ -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
|
|
5
|
-
import { selectorOf } from
|
|
6
|
-
import { Presented } from
|
|
7
|
-
import { useRenderLoopDetector } from
|
|
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
|
|
125
|
-
const { collector, dispatch, navigateTo } =
|
|
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 (
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
|
240
|
+
for (const one of views)
|
|
239
241
|
found[one] = held[one];
|
|
240
242
|
return found;
|
|
241
243
|
}, [named, held]);
|
package/dist/ui/wrappers.tsx
CHANGED
|
@@ -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:
|
|
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?:
|
|
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:
|
|
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?:
|
|
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
|
|
217
|
-
const { collector, dispatch, navigateTo } =
|
|
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 (
|
|
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(
|
|
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
|
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.
|
|
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.
|
|
20
|
+
"@prestack/thread": "^0.1.4"
|
|
21
21
|
}
|
|
22
22
|
}
|