@prestack/thread-ui 0.1.0 → 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 +373 -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
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
export declare const WOBBLE: {
|
|
2
|
-
readonly id:
|
|
3
|
-
readonly runs:
|
|
4
|
-
readonly eases:
|
|
2
|
+
readonly id: 'wobble';
|
|
3
|
+
readonly runs: 'motion-slow';
|
|
4
|
+
readonly eases: 'ease-in-out';
|
|
5
5
|
readonly stops: {
|
|
6
6
|
readonly '0%': readonly [{
|
|
7
|
-
readonly property:
|
|
8
|
-
readonly is:
|
|
7
|
+
readonly property: 'transform';
|
|
8
|
+
readonly is: 'transform-rest';
|
|
9
9
|
}];
|
|
10
10
|
readonly '25%': readonly [{
|
|
11
|
-
readonly property:
|
|
12
|
-
readonly is:
|
|
11
|
+
readonly property: 'transform';
|
|
12
|
+
readonly is: 'transform-tilt';
|
|
13
13
|
}];
|
|
14
14
|
readonly '50%': readonly [{
|
|
15
|
-
readonly property:
|
|
16
|
-
readonly is:
|
|
15
|
+
readonly property: 'transform';
|
|
16
|
+
readonly is: 'transform-rest';
|
|
17
17
|
}];
|
|
18
18
|
readonly '75%': readonly [{
|
|
19
|
-
readonly property:
|
|
20
|
-
readonly is:
|
|
19
|
+
readonly property: 'transform';
|
|
20
|
+
readonly is: 'transform-tilt-back';
|
|
21
21
|
}];
|
|
22
22
|
readonly '100%': readonly [{
|
|
23
|
-
readonly property:
|
|
24
|
-
readonly is:
|
|
23
|
+
readonly property: 'transform';
|
|
24
|
+
readonly is: 'transform-rest';
|
|
25
25
|
}];
|
|
26
26
|
};
|
|
27
27
|
};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
export declare const ZOOM_IN: {
|
|
2
|
-
readonly id:
|
|
3
|
-
readonly runs:
|
|
4
|
-
readonly eases:
|
|
5
|
-
readonly fills:
|
|
2
|
+
readonly id: 'zoom-in';
|
|
3
|
+
readonly runs: 'motion-normal';
|
|
4
|
+
readonly eases: 'ease-out';
|
|
5
|
+
readonly fills: 'backwards';
|
|
6
6
|
readonly stops: {
|
|
7
7
|
readonly '0%': readonly [{
|
|
8
|
-
readonly property:
|
|
9
|
-
readonly is:
|
|
8
|
+
readonly property: 'opacity';
|
|
9
|
+
readonly is: 'opacity-none';
|
|
10
10
|
}, {
|
|
11
|
-
readonly property:
|
|
12
|
-
readonly is:
|
|
11
|
+
readonly property: 'transform';
|
|
12
|
+
readonly is: 'transform-grow';
|
|
13
13
|
}];
|
|
14
14
|
readonly '100%': readonly [{
|
|
15
|
-
readonly property:
|
|
16
|
-
readonly is:
|
|
15
|
+
readonly property: 'opacity';
|
|
16
|
+
readonly is: 'opacity-full';
|
|
17
17
|
}, {
|
|
18
|
-
readonly property:
|
|
19
|
-
readonly is:
|
|
18
|
+
readonly property: 'transform';
|
|
19
|
+
readonly is: 'transform-rest';
|
|
20
20
|
}];
|
|
21
21
|
};
|
|
22
22
|
};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
export declare const ZOOM_OUT: {
|
|
2
|
-
readonly id:
|
|
3
|
-
readonly runs:
|
|
4
|
-
readonly eases:
|
|
5
|
-
readonly fills:
|
|
2
|
+
readonly id: 'zoom-out';
|
|
3
|
+
readonly runs: 'motion-quick';
|
|
4
|
+
readonly eases: 'ease-in';
|
|
5
|
+
readonly fills: 'forwards';
|
|
6
6
|
readonly stops: {
|
|
7
7
|
readonly '0%': readonly [{
|
|
8
|
-
readonly property:
|
|
9
|
-
readonly is:
|
|
8
|
+
readonly property: 'opacity';
|
|
9
|
+
readonly is: 'opacity-full';
|
|
10
10
|
}, {
|
|
11
|
-
readonly property:
|
|
12
|
-
readonly is:
|
|
11
|
+
readonly property: 'transform';
|
|
12
|
+
readonly is: 'transform-rest';
|
|
13
13
|
}];
|
|
14
14
|
readonly '100%': readonly [{
|
|
15
|
-
readonly property:
|
|
16
|
-
readonly is:
|
|
15
|
+
readonly property: 'opacity';
|
|
16
|
+
readonly is: 'opacity-none';
|
|
17
17
|
}, {
|
|
18
|
-
readonly property:
|
|
19
|
-
readonly is:
|
|
18
|
+
readonly property: 'transform';
|
|
19
|
+
readonly is: 'transform-grow';
|
|
20
20
|
}];
|
|
21
21
|
};
|
|
22
22
|
};
|
package/dist/ui/animations.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { Threaded } from '@prestack/thread/core/thread';
|
|
2
2
|
import { type Holds, type Token } from './token.ts';
|
|
3
3
|
export declare const BOUND: {
|
|
4
|
-
readonly opacity: readonly [
|
|
5
|
-
readonly transform: readonly [
|
|
6
|
-
readonly filter: readonly [
|
|
7
|
-
readonly backdropFilter: readonly [
|
|
8
|
-
readonly background: readonly [
|
|
9
|
-
readonly color: readonly [
|
|
10
|
-
readonly borderColor: readonly [
|
|
11
|
-
readonly boxShadow: readonly [
|
|
4
|
+
readonly opacity: readonly ['opacity'];
|
|
5
|
+
readonly transform: readonly ['transform'];
|
|
6
|
+
readonly filter: readonly ['filter'];
|
|
7
|
+
readonly backdropFilter: readonly ['blur'];
|
|
8
|
+
readonly background: readonly ['colour', 'gradient'];
|
|
9
|
+
readonly color: readonly ['colour'];
|
|
10
|
+
readonly borderColor: readonly ['colour'];
|
|
11
|
+
readonly boxShadow: readonly ['shadow'];
|
|
12
12
|
};
|
|
13
13
|
type Property = keyof typeof BOUND;
|
|
14
14
|
type SettingFor<P extends Property> = {
|
package/dist/ui/animations.js
CHANGED
|
@@ -6,13 +6,13 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
6
6
|
}
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
|
-
import { existsSync, writeFileSync } from
|
|
9
|
+
import { existsSync, writeFileSync } from '@prestack/thread/integrations/disk';
|
|
10
10
|
import { basename, join } from 'node:path';
|
|
11
11
|
import { argv, stdout } from 'node:process';
|
|
12
12
|
import { pathToFileURL } from 'node:url';
|
|
13
|
-
import { exit, invoked } from
|
|
14
|
-
import { findTree, inTree, strayFiles } from
|
|
15
|
-
import { held, sheeted } from
|
|
13
|
+
import { exit, invoked } from '@prestack/thread/core/invoked';
|
|
14
|
+
import { findTree, inTree, strayFiles } from '@prestack/thread/core/tree';
|
|
15
|
+
import { held, sheeted } from './token.js';
|
|
16
16
|
const here = 'thread/ui/animations.ts';
|
|
17
17
|
export const BOUND = {
|
|
18
18
|
opacity: ['opacity'],
|
package/dist/ui/animations.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, readdirSync, writeFileSync } from '@prestack/thread/
|
|
1
|
+
import { existsSync, readdirSync, writeFileSync } from '@prestack/thread/integrations/disk'
|
|
2
2
|
import { basename, dirname, join } from 'node:path'
|
|
3
3
|
import { argv, stdout } from 'node:process'
|
|
4
4
|
import { pathToFileURL } from 'node:url'
|
package/dist/ui/attach.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { named } from
|
|
2
|
-
import { ANIMATIONS } from
|
|
3
|
-
import { COMPOSITIONS } from
|
|
4
|
-
import { FONTS } from
|
|
5
|
-
import { ICONS } from
|
|
6
|
-
import { LOCALIZATIONS } from
|
|
7
|
-
import { ELEMENTS } from
|
|
8
|
-
import { MATERIALS } from
|
|
9
|
-
import { MODES } from
|
|
10
|
-
import { SCREENS } from
|
|
11
|
-
import { STYLEGUIDES } from
|
|
12
|
-
import { SIGNALS } from
|
|
13
|
-
import { THEMES } from
|
|
14
|
-
import { TOKENS } from
|
|
15
|
-
import { VARIANTS } from
|
|
1
|
+
import { named } from '@prestack/thread/core/scope';
|
|
2
|
+
import { ANIMATIONS } from './animations.js';
|
|
3
|
+
import { COMPOSITIONS } from './compositions.js';
|
|
4
|
+
import { FONTS } from './fonts.js';
|
|
5
|
+
import { ICONS } from './icons.js';
|
|
6
|
+
import { LOCALIZATIONS } from './localizations.js';
|
|
7
|
+
import { ELEMENTS } from './elements.js';
|
|
8
|
+
import { MATERIALS } from './materials.js';
|
|
9
|
+
import { MODES } from './modes.js';
|
|
10
|
+
import { SCREENS } from './screens.js';
|
|
11
|
+
import { STYLEGUIDES } from './styleguides.js';
|
|
12
|
+
import { SIGNALS } from './signals.js';
|
|
13
|
+
import { THEMES } from './themes.js';
|
|
14
|
+
import { TOKENS } from './tokens.js';
|
|
15
|
+
import { VARIANTS } from './variants.js';
|
|
16
16
|
const SEEDED = {
|
|
17
17
|
attaches: ['@prestack/thread'],
|
|
18
18
|
id: 'ui',
|
|
@@ -48,19 +48,19 @@ const SHIPPED = [
|
|
|
48
48
|
into: 'ui.ts',
|
|
49
49
|
list: 'GENERATORS',
|
|
50
50
|
id: 'i18n-generator',
|
|
51
|
-
source: " {\n id: 'i18n-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/i18n.js',\n describes: 'The generator of an app\\'s wording — it reads the languages the app declares and every message key its interface names, and writes one file per language holding a line for each. It cannot invent a sentence, so a key it has just found arrives holding nothing; run with `--check`, the mode the gate runs it in, it writes nothing and refuses a language file that is not what the declarations produce, and refuses any key left unanswered. It also writes the module the app imports, which states the keys the interface uses as a type, so a language missing one is a compiler error before it is a gate error.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n derives: [\n {\n id: 'wording',\n at: 'app/_generated/wording.ts',\n describes: 'Every language this app is in, as one module the layout hands to the provider, with the keys the interface names stated as a type so a language missing one is a compiler error.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n },\n ],\n },",
|
|
51
|
+
source: " {\n id: 'i18n-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/i18n.js',\n describes: 'The generator of an app\\'s wording — it reads the languages the app declares and every message key its interface names, and writes one file per language holding a line for each. It cannot invent a sentence, so a key it has just found arrives holding nothing; run with `--check`, the mode the gate runs it in, it writes nothing and refuses a language file that is not what the declarations produce, and refuses any key left unanswered. It also writes the module the app imports, which states the keys the interface uses as a type, so a language missing one is a compiler error before it is a gate error.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n derives: [\n {\n id: 'wording',\n at: 'app/_generated/wording.ts',\n describes: 'Every language this app is in, as one module the layout hands to the provider, with the keys the interface names stated as a type so a language missing one is a compiler error. That type is written as an assignment rather than a satisfies clause, because satisfies would also refuse the extra keys a filled wording always carries.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n },\n ],\n },",
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
into: 'ui.ts',
|
|
55
55
|
list: 'GENERATORS',
|
|
56
56
|
id: 'routes-generator',
|
|
57
|
-
source: " {\n id: 'routes-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/routes.js',\n describes: 'The generator of the routes, the map, the pages a browser reaches, and the root layout. Nobody types a route. The first page an app declares answers `/`, every other page answers its own name, and a sheet, popover, overlay or toast has no route, so the page under each route follows from the screens sheet. It reads every `navigateTo` the screens and their compositions hold and writes the map: from which screen, through which button, to which screen. A button is the only thing that makes a link. A press that names a sheet, popover, overlay or toast is a link like any other, and the client half opens that screen where somebody already is. A name no screen has, a destination not written out as a name, and a route typed into a screen are each refused by name. The layout imports what the other generators produce. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a hand edit to any of these files, exactly as the stylesheet is refused.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n derives: [\n {\n id: 'layout',\n at: 'app/layout.tsx',\n describes: 'The root layout — it imports what the other generators produce and hands the wording to the provider, so the one file every page passes through is a consequence of the declarations rather than something somebody keeps in step with them.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'door',\n at: 'app/_generated/door.tsx',\n describes: 'This app\\'s own client half. It is written when the app has operations a page can reach, or screens a press can move between. The provider takes something to run an operation with and something to move between screens with, and the layout cannot hand either over: the layout is a server component and the provider is a client one, and a function does not cross that line — \"Functions cannot be passed directly to Client Components\", measured 2026-09-01 as a page that returned 500 on every request while the gate was green. So both are made on the side that uses them. This file imports what the operations half derived and the map, and hands them over itself. The layout renders this and passes only the actor, which is data and crosses the way data does.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'bundler',\n at: 'next.config.js',\n describes: '
|
|
57
|
+
source: " {\n id: 'routes-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/routes.js',\n describes: 'The generator of the routes, the map, the pages a browser reaches, and the root layout. Nobody types a route. The first page an app declares answers `/`, every other page answers its own name, and a sheet, popover, overlay or toast has no route, so the page under each route follows from the screens sheet. It reads every `navigateTo` the screens and their compositions hold and writes the map: from which screen, through which button, to which screen. A button is the only thing that makes a link. A press that names a sheet, popover, overlay or toast is a link like any other, and the client half opens that screen where somebody already is. A name no screen has, a destination not written out as a name, and a route typed into a screen are each refused by name. The layout imports what the other generators produce. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a hand edit to any of these files, exactly as the stylesheet is refused.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n derives: [\n {\n id: 'layout',\n at: 'app/layout.tsx',\n describes: 'The root layout — it imports what the other generators produce and hands the wording to the provider, so the one file every page passes through is a consequence of the declarations rather than something somebody keeps in step with them.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'door',\n at: 'app/_generated/door.tsx',\n describes: 'This app\\'s own client half. It is written when the app has operations a page can reach, or screens a press can move between. The provider takes something to run an operation with and something to move between screens with, and the layout cannot hand either over: the layout is a server component and the provider is a client one, and a function does not cross that line — \"Functions cannot be passed directly to Client Components\", measured 2026-09-01 as a page that returned 500 on every request while the gate was green. So both are made on the side that uses them. This file imports what the operations half derived and the map, and hands them over itself. The layout renders this and passes only the actor, which is data and crosses the way data does.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'bundler',\n at: 'next.config.js',\n describes: 'What Next reads to serve this app. It is written whenever the manifest runs Next, whether or not this app declares a screen, because it states three things a served app needs and one of them is that Next may not write files of its own into a tree where every file is declared. It also refuses to compile anything until the gate has passed, and names where the bundler resolves from when the packages live outside this app — which is when a bundler cannot see them and every import fails at run time while the compiler is content. It opens the disk itself rather than through the disk this framework declares, because Next reads this file before any TypeScript in this tree has been loaded — a file that gates the build cannot import the thing it is gating.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'map',\n at: 'app/_generated/map.ts',\n describes: 'Every screen this app has, where each one lives, and every way from one to another: from which screen, through which button, to which screen. It is read off every `navigateTo` the screens and their compositions hold, so a button is the only thing that makes a link. The client half moves through it: a press that names a page goes to the address held here, and a press that names a sheet, popover, overlay or toast opens it where somebody already is. A screen no button reaches is printed by `thread routes` rather than found by somebody looking for it.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n ],\n },",
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
into: 'ui.ts',
|
|
61
61
|
list: 'GENERATORS',
|
|
62
62
|
id: 'dev-generator',
|
|
63
|
-
source: " {\n id: 'dev-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/dev.js',\n describes: 'The command that runs the app, and the only one here that puts a pixel on a screen — until it existed the framework could build an interface nothing in it could start, because a gate answers whether declarations agree with files and cannot answer whether a button is where somebody says it is not. It is two halves in one word. First it settles this tree: every generator the declarations name is run until the checks stop complaining, which is what `thread create` and `thread run trial` already did and what starting the app was alone in not doing — an app had `thread gate` in front of `next dev`, and a gate refuses a stale file rather than writing it. Then it runs the
|
|
63
|
+
source: " {\n id: 'dev-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/dev.js',\n describes: 'The command that runs the app, and the only one here that puts a pixel on a screen — until it existed the framework could build an interface nothing in it could start, because a gate answers whether declarations agree with files and cannot answer whether a button is where somebody says it is not. It is two halves in one word. First it settles this tree: every generator the declarations name is run until the checks stop complaining, which is what `thread create` and `thread run trial` already did and what starting the app was alone in not doing — an app had `thread gate` in front of `next dev`, and a gate refuses a stale file rather than writing it. Then it runs the gate, and then starts Next itself, because Next is what this package installs to serve an app and the manifest carries no script for it. The generators are read off the rows, and `next dev` is the one thing written down here: this package serves an app with Next and nothing else. `--ship` swaps the entry for the build. Alone among the generators it carries no `runs:`, because a server stays up until it is stopped and a gate step that never returns is a gate that hangs.',\n version: 1,\n by: 'thread dev',\n },",
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
into: 'ui.ts',
|
|
@@ -84,7 +84,7 @@ const SHIPPED = [
|
|
|
84
84
|
into: 'ui.ts',
|
|
85
85
|
list: 'GENERATORS',
|
|
86
86
|
id: 'icons-generator',
|
|
87
|
-
source: " {\n id: 'icons-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/icons.js',\n describes: 'The generator of the icon module — it reads which library the icon rows name and which meanings they declare, and writes the one module that imports exactly those symbols and installs them. A meaning is what an element asks for, so changing the library row redraws every icon in the app and rewrites nothing else. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a generated file that does not match the rows.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n derives: [\n {\n id: 'symbols',\n at: 'app/_generated/icons.ts',\n describes: 'The one module importing exactly the symbols the icon rows name, from the one library they name.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n },\n ],\n },",
|
|
87
|
+
source: " {\n id: 'icons-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/icons.js',\n describes: 'The generator of the icon module — it reads which library the icon rows name and which meanings they declare, and writes the one module that imports exactly those symbols and installs them. A meaning is what an element asks for, so changing the library row redraws every icon in the app and rewrites nothing else. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a generated file that does not match the rows.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n derives: [\n {\n id: 'symbols',\n at: 'app/_generated/icons.ts',\n describes: 'The one module importing exactly the symbols the icon rows name, from the one library they name. The layout renders it rather than merely importing it, because a bare import of a client module from a server layout is a reference that never runs — the install never happens and every icon on the page refuses.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n },\n ],\n },",
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
90
|
into: 'ui.ts',
|
|
@@ -210,7 +210,7 @@ function stated(rows, always = []) {
|
|
|
210
210
|
return Object.keys(SHAPES).filter((key) => held.has(key));
|
|
211
211
|
}
|
|
212
212
|
function inside(node) {
|
|
213
|
-
return [...(node.holds ?? []), ...(node.declares ?? [])];
|
|
213
|
+
return [...(node.holds ?? []), ...(node.declares ?? []), ...(node.derives ?? [])];
|
|
214
214
|
}
|
|
215
215
|
function quoted(value) {
|
|
216
216
|
return `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`;
|
|
@@ -315,14 +315,9 @@ const ARRANGES = {
|
|
|
315
315
|
styleguide: ['themes'],
|
|
316
316
|
element: ['tag', 'raises', 'carries', 'always', 'places', 'works', 'measures', 'reads', 'gives', 'keeps', 'animates', 'shows', 'called', 'wires', 'dresses'],
|
|
317
317
|
};
|
|
318
|
-
const TEACHING = {
|
|
319
|
-
composition: `export { TEACHES, catalogue } from '${named('ui')}/compositions'`,
|
|
320
|
-
screen: `export { TEACHES, screening as catalogue } from '${named('ui')}/compositions'`,
|
|
321
|
-
};
|
|
322
318
|
function source(node, file, rows) {
|
|
323
319
|
const extra = stated(rows, ARRANGES[node.id] ?? []).map((key) => SHAPES[key] ?? '');
|
|
324
|
-
const
|
|
325
|
-
const authors = node.declares !== undefined || rows.some((one) => one.at !== undefined && one.at !== node.at);
|
|
320
|
+
const authors = node.declares !== undefined || node.derives !== undefined || rows.some((one) => one.at !== undefined && one.at !== node.at);
|
|
326
321
|
const values = node.holds !== undefined || rows.some((one) => one.at === undefined || one.at === node.at);
|
|
327
322
|
const own = node.id
|
|
328
323
|
.split('-')
|
|
@@ -356,7 +351,7 @@ export const ${node.id.toUpperCase()}: ${bespoke ? own : 'Threaded'} = {
|
|
|
356
351
|
version: 1,
|
|
357
352
|
${held.join('\n')}
|
|
358
353
|
}
|
|
359
|
-
|
|
354
|
+
`;
|
|
360
355
|
}
|
|
361
356
|
const LISTS = [
|
|
362
357
|
{ node: TOKENS, file: 'tokens.ts' },
|
|
@@ -409,56 +404,6 @@ ${SEEDED.declares.split('\n').slice(1, -1).map((line) => line.slice(4)).join('\n
|
|
|
409
404
|
|
|
410
405
|
export const GENERATORS: readonly Threaded[] = []
|
|
411
406
|
`;
|
|
412
|
-
const RETIRED = [
|
|
413
|
-
{
|
|
414
|
-
into: 'tokens.ts',
|
|
415
|
-
list: 'holds',
|
|
416
|
-
id: 'font',
|
|
417
|
-
why: 'a font is not a token — the fonts sheet holds faces, sizes and appearance directly, so there is no variable of this kind for a style guide to give a value to',
|
|
418
|
-
},
|
|
419
|
-
...['sm', 'md', 'lg'].map((one) => ({
|
|
420
|
-
into: 'styleguides.ts',
|
|
421
|
-
list: 'holds',
|
|
422
|
-
id: `icon-${one}`,
|
|
423
|
-
why: 'the style guide holds no icon size — `icons.ts` does, and it is the one place a symbol is measured. These rows and a constant inside the package were both claiming to decide it, and the constant was what anything actually drew at, so changing the row moved the CSS variable and left every icon the size it already was',
|
|
424
|
-
})),
|
|
425
|
-
...['link', 'glyph', 'avatar', 'skeleton', 'spinner'].map((one) => ({
|
|
426
|
-
into: 'variants.ts',
|
|
427
|
-
list: 'declares',
|
|
428
|
-
id: one,
|
|
429
|
-
why: `a variant sharing a word with the element that wears it — \`${one}\` was coined twice, once as the element and once as the look, with two different meanings. The framework's own rule refuses that, and an app made entirely by these commands failed its own descent on five words this package had shipped. Renamed to \`${one}-\` plus what distinguishes it`,
|
|
430
|
-
})),
|
|
431
|
-
...['icon', 'icon-ghost', 'icon-border', 'label-icon', 'elevated'].map((one) => ({
|
|
432
|
-
into: 'variants.ts',
|
|
433
|
-
list: 'declares',
|
|
434
|
-
id: `button-${one}`,
|
|
435
|
-
why: 'a variant may not decide what a button CONTAINS — a symbol, a word or both is the composition\'s to arrange, and four variants existed only to answer it. `button-ghost`, `button-fill` and the rest each serve every shape of content. `button-elevated` is withdrawn as simply poor',
|
|
436
|
-
})),
|
|
437
|
-
...['filled', 'outlined', 'plain'].map((one) => ({
|
|
438
|
-
into: 'materials.ts',
|
|
439
|
-
list: 'declares',
|
|
440
|
-
id: one,
|
|
441
|
-
why: 'not a material — a background, an ink and a border width are three style guide rows, and wrapping them in a material only added a second place to look. A material is for what composes into one appearance worth naming: glass, a real relief, a glaze. The variants that wore these now name the rows directly',
|
|
442
|
-
})),
|
|
443
|
-
...['primary', 'secondary'].map((one) => ({
|
|
444
|
-
into: 'variants.ts',
|
|
445
|
-
list: 'declares',
|
|
446
|
-
id: `button-${one}`,
|
|
447
|
-
why: 'a second name for something the button family already carries — `button-primary` is `button-fill` and `button-secondary` is `button-border`. Two names for one look is the defect this framework refuses everywhere else, and it was shipping it in the one place an app looks first',
|
|
448
|
-
})),
|
|
449
|
-
...['sans', 'serif', 'mono', 'display'].map((one) => ({
|
|
450
|
-
into: 'styleguides.ts',
|
|
451
|
-
list: 'holds',
|
|
452
|
-
id: `font-${one}`,
|
|
453
|
-
why: 'the style guide holds no font — a font is not a token value, and the fonts sheet is the source for faces',
|
|
454
|
-
})),
|
|
455
|
-
...['display', 'heading', 'body', 'label'].map((one) => ({
|
|
456
|
-
into: 'variants.ts',
|
|
457
|
-
list: 'declares',
|
|
458
|
-
id: one,
|
|
459
|
-
why: 'a type role, not a variant — it set a face, a size and a weight, all of which the fonts sheet now decides',
|
|
460
|
-
})),
|
|
461
|
-
];
|
|
462
407
|
export const ATTACH = {
|
|
463
408
|
attaches: SEEDED.attaches,
|
|
464
409
|
id: SEEDED.id,
|
|
@@ -488,7 +433,6 @@ export const ATTACH = {
|
|
|
488
433
|
...LISTS.flatMap((one) => sectioned(one)),
|
|
489
434
|
...SHIPPED,
|
|
490
435
|
],
|
|
491
|
-
retires: RETIRED,
|
|
492
436
|
declares: SEEDED.declares,
|
|
493
437
|
writes: [
|
|
494
438
|
{ file: 'ui.ts', source: UI_SOURCE },
|
package/dist/ui/attach.ts
CHANGED
|
@@ -53,19 +53,19 @@ const SHIPPED: readonly { readonly into: string; readonly list: string; readonly
|
|
|
53
53
|
into: 'ui.ts',
|
|
54
54
|
list: 'GENERATORS',
|
|
55
55
|
id: 'i18n-generator',
|
|
56
|
-
source: " {\n id: 'i18n-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/i18n.js',\n describes: 'The generator of an app\\'s wording — it reads the languages the app declares and every message key its interface names, and writes one file per language holding a line for each. It cannot invent a sentence, so a key it has just found arrives holding nothing; run with `--check`, the mode the gate runs it in, it writes nothing and refuses a language file that is not what the declarations produce, and refuses any key left unanswered. It also writes the module the app imports, which states the keys the interface uses as a type, so a language missing one is a compiler error before it is a gate error.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n derives: [\n {\n id: 'wording',\n at: 'app/_generated/wording.ts',\n describes: 'Every language this app is in, as one module the layout hands to the provider, with the keys the interface names stated as a type so a language missing one is a compiler error.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n },\n ],\n },",
|
|
56
|
+
source: " {\n id: 'i18n-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/i18n.js',\n describes: 'The generator of an app\\'s wording — it reads the languages the app declares and every message key its interface names, and writes one file per language holding a line for each. It cannot invent a sentence, so a key it has just found arrives holding nothing; run with `--check`, the mode the gate runs it in, it writes nothing and refuses a language file that is not what the declarations produce, and refuses any key left unanswered. It also writes the module the app imports, which states the keys the interface uses as a type, so a language missing one is a compiler error before it is a gate error.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n derives: [\n {\n id: 'wording',\n at: 'app/_generated/wording.ts',\n describes: 'Every language this app is in, as one module the layout hands to the provider, with the keys the interface names stated as a type so a language missing one is a compiler error. That type is written as an assignment rather than a satisfies clause, because satisfies would also refuse the extra keys a filled wording always carries.',\n version: 1,\n by: 'thread i18n',\n runs: 'thread i18n --check',\n },\n ],\n },",
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
into: 'ui.ts',
|
|
60
60
|
list: 'GENERATORS',
|
|
61
61
|
id: 'routes-generator',
|
|
62
|
-
source: " {\n id: 'routes-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/routes.js',\n describes: 'The generator of the routes, the map, the pages a browser reaches, and the root layout. Nobody types a route. The first page an app declares answers `/`, every other page answers its own name, and a sheet, popover, overlay or toast has no route, so the page under each route follows from the screens sheet. It reads every `navigateTo` the screens and their compositions hold and writes the map: from which screen, through which button, to which screen. A button is the only thing that makes a link. A press that names a sheet, popover, overlay or toast is a link like any other, and the client half opens that screen where somebody already is. A name no screen has, a destination not written out as a name, and a route typed into a screen are each refused by name. The layout imports what the other generators produce. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a hand edit to any of these files, exactly as the stylesheet is refused.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n derives: [\n {\n id: 'layout',\n at: 'app/layout.tsx',\n describes: 'The root layout — it imports what the other generators produce and hands the wording to the provider, so the one file every page passes through is a consequence of the declarations rather than something somebody keeps in step with them.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'door',\n at: 'app/_generated/door.tsx',\n describes: 'This app\\'s own client half. It is written when the app has operations a page can reach, or screens a press can move between. The provider takes something to run an operation with and something to move between screens with, and the layout cannot hand either over: the layout is a server component and the provider is a client one, and a function does not cross that line — \"Functions cannot be passed directly to Client Components\", measured 2026-09-01 as a page that returned 500 on every request while the gate was green. So both are made on the side that uses them. This file imports what the operations half derived and the map, and hands them over itself. The layout renders this and passes only the actor, which is data and crosses the way data does.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'bundler',\n at: 'next.config.js',\n describes: '
|
|
62
|
+
source: " {\n id: 'routes-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/routes.js',\n describes: 'The generator of the routes, the map, the pages a browser reaches, and the root layout. Nobody types a route. The first page an app declares answers `/`, every other page answers its own name, and a sheet, popover, overlay or toast has no route, so the page under each route follows from the screens sheet. It reads every `navigateTo` the screens and their compositions hold and writes the map: from which screen, through which button, to which screen. A button is the only thing that makes a link. A press that names a sheet, popover, overlay or toast is a link like any other, and the client half opens that screen where somebody already is. A name no screen has, a destination not written out as a name, and a route typed into a screen are each refused by name. The layout imports what the other generators produce. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a hand edit to any of these files, exactly as the stylesheet is refused.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n derives: [\n {\n id: 'layout',\n at: 'app/layout.tsx',\n describes: 'The root layout — it imports what the other generators produce and hands the wording to the provider, so the one file every page passes through is a consequence of the declarations rather than something somebody keeps in step with them.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'door',\n at: 'app/_generated/door.tsx',\n describes: 'This app\\'s own client half. It is written when the app has operations a page can reach, or screens a press can move between. The provider takes something to run an operation with and something to move between screens with, and the layout cannot hand either over: the layout is a server component and the provider is a client one, and a function does not cross that line — \"Functions cannot be passed directly to Client Components\", measured 2026-09-01 as a page that returned 500 on every request while the gate was green. So both are made on the side that uses them. This file imports what the operations half derived and the map, and hands them over itself. The layout renders this and passes only the actor, which is data and crosses the way data does.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'bundler',\n at: 'next.config.js',\n describes: 'What Next reads to serve this app. It is written whenever the manifest runs Next, whether or not this app declares a screen, because it states three things a served app needs and one of them is that Next may not write files of its own into a tree where every file is declared. It also refuses to compile anything until the gate has passed, and names where the bundler resolves from when the packages live outside this app — which is when a bundler cannot see them and every import fails at run time while the compiler is content. It opens the disk itself rather than through the disk this framework declares, because Next reads this file before any TypeScript in this tree has been loaded — a file that gates the build cannot import the thing it is gating.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n {\n id: 'map',\n at: 'app/_generated/map.ts',\n describes: 'Every screen this app has, where each one lives, and every way from one to another: from which screen, through which button, to which screen. It is read off every `navigateTo` the screens and their compositions hold, so a button is the only thing that makes a link. The client half moves through it: a press that names a page goes to the address held here, and a press that names a sheet, popover, overlay or toast opens it where somebody already is. A screen no button reaches is printed by `thread routes` rather than found by somebody looking for it.',\n version: 1,\n by: 'thread routes',\n runs: 'thread routes --check',\n },\n ],\n },",
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
into: 'ui.ts',
|
|
66
66
|
list: 'GENERATORS',
|
|
67
67
|
id: 'dev-generator',
|
|
68
|
-
source: " {\n id: 'dev-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/dev.js',\n describes: 'The command that runs the app, and the only one here that puts a pixel on a screen — until it existed the framework could build an interface nothing in it could start, because a gate answers whether declarations agree with files and cannot answer whether a button is where somebody says it is not. It is two halves in one word. First it settles this tree: every generator the declarations name is run until the checks stop complaining, which is what `thread create` and `thread run trial` already did and what starting the app was alone in not doing — an app had `thread gate` in front of `next dev`, and a gate refuses a stale file rather than writing it. Then it runs the
|
|
68
|
+
source: " {\n id: 'dev-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/dev.js',\n describes: 'The command that runs the app, and the only one here that puts a pixel on a screen — until it existed the framework could build an interface nothing in it could start, because a gate answers whether declarations agree with files and cannot answer whether a button is where somebody says it is not. It is two halves in one word. First it settles this tree: every generator the declarations name is run until the checks stop complaining, which is what `thread create` and `thread run trial` already did and what starting the app was alone in not doing — an app had `thread gate` in front of `next dev`, and a gate refuses a stale file rather than writing it. Then it runs the gate, and then starts Next itself, because Next is what this package installs to serve an app and the manifest carries no script for it. The generators are read off the rows, and `next dev` is the one thing written down here: this package serves an app with Next and nothing else. `--ship` swaps the entry for the build. Alone among the generators it carries no `runs:`, because a server stays up until it is stopped and a gate step that never returns is a gate that hangs.',\n version: 1,\n by: 'thread dev',\n },",
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
into: 'ui.ts',
|
|
@@ -89,7 +89,7 @@ const SHIPPED: readonly { readonly into: string; readonly list: string; readonly
|
|
|
89
89
|
into: 'ui.ts',
|
|
90
90
|
list: 'GENERATORS',
|
|
91
91
|
id: 'icons-generator',
|
|
92
|
-
source: " {\n id: 'icons-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/icons.js',\n describes: 'The generator of the icon module — it reads which library the icon rows name and which meanings they declare, and writes the one module that imports exactly those symbols and installs them. A meaning is what an element asks for, so changing the library row redraws every icon in the app and rewrites nothing else. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a generated file that does not match the rows.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n derives: [\n {\n id: 'symbols',\n at: 'app/_generated/icons.ts',\n describes: 'The one module importing exactly the symbols the icon rows name, from the one library they name.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n },\n ],\n },",
|
|
92
|
+
source: " {\n id: 'icons-generator',\n at: 'node_modules/@prestack/thread-ui/dist/ui/generators/icons.js',\n describes: 'The generator of the icon module — it reads which library the icon rows name and which meanings they declare, and writes the one module that imports exactly those symbols and installs them. A meaning is what an element asks for, so changing the library row redraws every icon in the app and rewrites nothing else. Run with `--check`, the mode the gate runs it in, it writes nothing and refuses a generated file that does not match the rows.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n derives: [\n {\n id: 'symbols',\n at: 'app/_generated/icons.ts',\n describes: 'The one module importing exactly the symbols the icon rows name, from the one library they name. The layout renders it rather than merely importing it, because a bare import of a client module from a server layout is a reference that never runs — the install never happens and every icon on the page refuses.',\n version: 1,\n by: 'thread icons',\n runs: 'thread icons --check',\n },\n ],\n },",
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
95
|
into: 'ui.ts',
|
|
@@ -272,11 +272,12 @@ interface Node {
|
|
|
272
272
|
readonly describes: string
|
|
273
273
|
readonly files?: string
|
|
274
274
|
readonly declares?: readonly Row[]
|
|
275
|
+
readonly derives?: readonly Row[]
|
|
275
276
|
readonly holds?: readonly Row[]
|
|
276
277
|
}
|
|
277
278
|
|
|
278
279
|
function inside(node: Node): readonly Row[] {
|
|
279
|
-
return [...(node.holds ?? []), ...(node.declares ?? [])]
|
|
280
|
+
return [...(node.holds ?? []), ...(node.declares ?? []), ...(node.derives ?? [])]
|
|
280
281
|
}
|
|
281
282
|
|
|
282
283
|
function quoted(value: string): string {
|
|
@@ -397,16 +398,10 @@ const ARRANGES: Readonly<Record<string, readonly string[]>> = {
|
|
|
397
398
|
element: ['tag', 'raises', 'carries', 'always', 'places', 'works', 'measures', 'reads', 'gives', 'keeps', 'animates', 'shows', 'called', 'wires', 'dresses'],
|
|
398
399
|
}
|
|
399
400
|
|
|
400
|
-
const TEACHING: Readonly<Record<string, string>> = {
|
|
401
|
-
composition: `export { TEACHES, catalogue } from '${named('ui')}/compositions'`,
|
|
402
|
-
screen: `export { TEACHES, screening as catalogue } from '${named('ui')}/compositions'`,
|
|
403
|
-
}
|
|
404
|
-
|
|
405
401
|
function source(node: Node, file: string, rows: readonly Row[]): string {
|
|
406
402
|
const extra = stated(rows, ARRANGES[node.id] ?? []).map((key) => SHAPES[key] ?? '')
|
|
407
|
-
const taught = TEACHING[node.id]
|
|
408
403
|
|
|
409
|
-
const authors = node.declares !== undefined || rows.some((one) => one.at !== undefined && one.at !== node.at)
|
|
404
|
+
const authors = node.declares !== undefined || node.derives !== undefined || rows.some((one) => one.at !== undefined && one.at !== node.at)
|
|
410
405
|
const values = node.holds !== undefined || rows.some((one) => one.at === undefined || one.at === node.at)
|
|
411
406
|
|
|
412
407
|
const own = node.id
|
|
@@ -449,7 +444,7 @@ export const ${node.id.toUpperCase()}: ${bespoke ? own : 'Threaded'} = {
|
|
|
449
444
|
version: 1,
|
|
450
445
|
${held.join('\n')}
|
|
451
446
|
}
|
|
452
|
-
|
|
447
|
+
`
|
|
453
448
|
}
|
|
454
449
|
|
|
455
450
|
const LISTS: readonly { readonly node: Node; readonly file: string; readonly rows?: readonly Row[] }[] = [
|
|
@@ -513,58 +508,6 @@ ${SEEDED.declares.split('\n').slice(1, -1).map((line) => line.slice(4)).join('\n
|
|
|
513
508
|
export const GENERATORS: readonly Threaded[] = []
|
|
514
509
|
`
|
|
515
510
|
|
|
516
|
-
const RETIRED = [
|
|
517
|
-
{
|
|
518
|
-
into: 'tokens.ts',
|
|
519
|
-
list: 'holds',
|
|
520
|
-
id: 'font',
|
|
521
|
-
why: 'a font is not a token — the fonts sheet holds faces, sizes and appearance directly, so there is no variable of this kind for a style guide to give a value to',
|
|
522
|
-
},
|
|
523
|
-
...(['sm', 'md', 'lg'] as const).map((one) => ({
|
|
524
|
-
into: 'styleguides.ts',
|
|
525
|
-
list: 'holds',
|
|
526
|
-
id: `icon-${one}`,
|
|
527
|
-
why: 'the style guide holds no icon size — `icons.ts` does, and it is the one place a symbol is measured. These rows and a constant inside the package were both claiming to decide it, and the constant was what anything actually drew at, so changing the row moved the CSS variable and left every icon the size it already was',
|
|
528
|
-
})),
|
|
529
|
-
...(['link', 'glyph', 'avatar', 'skeleton', 'spinner'] as const).map((one) => ({
|
|
530
|
-
into: 'variants.ts',
|
|
531
|
-
list: 'declares',
|
|
532
|
-
id: one,
|
|
533
|
-
why: `a variant sharing a word with the element that wears it — \`${one}\` was coined twice, once as the element and once as the look, with two different meanings. The framework's own rule refuses that, and an app made entirely by these commands failed its own descent on five words this package had shipped. Renamed to \`${one}-\` plus what distinguishes it`,
|
|
534
|
-
})),
|
|
535
|
-
|
|
536
|
-
...(['icon', 'icon-ghost', 'icon-border', 'label-icon', 'elevated'] as const).map((one) => ({
|
|
537
|
-
into: 'variants.ts',
|
|
538
|
-
list: 'declares',
|
|
539
|
-
id: `button-${one}`,
|
|
540
|
-
why: 'a variant may not decide what a button CONTAINS — a symbol, a word or both is the composition\'s to arrange, and four variants existed only to answer it. `button-ghost`, `button-fill` and the rest each serve every shape of content. `button-elevated` is withdrawn as simply poor',
|
|
541
|
-
})),
|
|
542
|
-
...(['filled', 'outlined', 'plain'] as const).map((one) => ({
|
|
543
|
-
into: 'materials.ts',
|
|
544
|
-
list: 'declares',
|
|
545
|
-
id: one,
|
|
546
|
-
why: 'not a material — a background, an ink and a border width are three style guide rows, and wrapping them in a material only added a second place to look. A material is for what composes into one appearance worth naming: glass, a real relief, a glaze. The variants that wore these now name the rows directly',
|
|
547
|
-
})),
|
|
548
|
-
...(['primary', 'secondary'] as const).map((one) => ({
|
|
549
|
-
into: 'variants.ts',
|
|
550
|
-
list: 'declares',
|
|
551
|
-
id: `button-${one}`,
|
|
552
|
-
why: 'a second name for something the button family already carries — `button-primary` is `button-fill` and `button-secondary` is `button-border`. Two names for one look is the defect this framework refuses everywhere else, and it was shipping it in the one place an app looks first',
|
|
553
|
-
})),
|
|
554
|
-
...(['sans', 'serif', 'mono', 'display'] as const).map((one) => ({
|
|
555
|
-
into: 'styleguides.ts',
|
|
556
|
-
list: 'holds',
|
|
557
|
-
id: `font-${one}`,
|
|
558
|
-
why: 'the style guide holds no font — a font is not a token value, and the fonts sheet is the source for faces',
|
|
559
|
-
})),
|
|
560
|
-
...(['display', 'heading', 'body', 'label'] as const).map((one) => ({
|
|
561
|
-
into: 'variants.ts',
|
|
562
|
-
list: 'declares',
|
|
563
|
-
id: one,
|
|
564
|
-
why: 'a type role, not a variant — it set a face, a size and a weight, all of which the fonts sheet now decides',
|
|
565
|
-
})),
|
|
566
|
-
]
|
|
567
|
-
|
|
568
511
|
export const ATTACH: Attaching = {
|
|
569
512
|
attaches: SEEDED.attaches,
|
|
570
513
|
id: SEEDED.id,
|
|
@@ -595,7 +538,6 @@ export const ATTACH: Attaching = {
|
|
|
595
538
|
...LISTS.flatMap((one) => sectioned(one)),
|
|
596
539
|
...SHIPPED,
|
|
597
540
|
],
|
|
598
|
-
retires: RETIRED,
|
|
599
541
|
declares: SEEDED.declares,
|
|
600
542
|
writes: [
|
|
601
543
|
{ file: 'ui.ts', source: UI_SOURCE },
|
package/dist/ui/charts.d.ts
CHANGED
|
@@ -12,9 +12,6 @@ export declare const str: (row: Row, key: string) => string;
|
|
|
12
12
|
export declare function useRamp(count: number): readonly string[];
|
|
13
13
|
export declare function placed(element: string, place: string): string;
|
|
14
14
|
export declare function measured(held: Readonly<Record<string, string | number>>): Record<string, string | number>;
|
|
15
|
-
export declare function EmptyFrame({ className }: {
|
|
16
|
-
className?: string;
|
|
17
|
-
}): React.ReactElement;
|
|
18
15
|
export interface SeriesProps extends ChartBase {
|
|
19
16
|
readonly value: string;
|
|
20
17
|
readonly at: string;
|
package/dist/ui/charts.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { useUi } from "./wrappers.js";
|
|
2
|
+
import { seriesRamp } from './series.js';
|
|
3
|
+
import { classOfElement } from './variant.js';
|
|
4
|
+
import { useUi } from './wrappers.js';
|
|
6
5
|
export const num = (row, key) => {
|
|
7
6
|
const v = row[key];
|
|
8
7
|
return typeof v === 'number' ? v : Number(v ?? 0);
|
|
@@ -21,9 +20,6 @@ export function measured(held) {
|
|
|
21
20
|
out[`--${name}`] = value;
|
|
22
21
|
return out;
|
|
23
22
|
}
|
|
24
|
-
export function EmptyFrame({ className }) {
|
|
25
|
-
return _jsx("div", { className: className, "data-empty": "true" });
|
|
26
|
-
}
|
|
27
23
|
export function polyline(values, width, height) {
|
|
28
24
|
if (values.length === 0)
|
|
29
25
|
return '';
|
package/dist/ui/charts.tsx
CHANGED
|
@@ -41,10 +41,6 @@ export function measured(held: Readonly<Record<string, string | number>>): Recor
|
|
|
41
41
|
return out
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
export function EmptyFrame({ className }: { className?: string }): React.ReactElement {
|
|
45
|
-
return <div className={className} data-empty="true" />
|
|
46
|
-
}
|
|
47
|
-
|
|
48
44
|
export interface SeriesProps extends ChartBase {
|
|
49
45
|
readonly value: string
|
|
50
46
|
readonly at: string
|
package/dist/ui/checked.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export type VariantsFor<E extends string> = Shipped extends infer One ? One exte
|
|
|
11
11
|
} ? E extends One['wears'][number] ? Camel<One['id']> : never : never : never;
|
|
12
12
|
type Pascal<S extends string> = S extends `${infer Head}-${infer Rest}` ? `${Capitalize<Head>}${Pascal<Rest>}` : Capitalize<S>;
|
|
13
13
|
type Camel<S extends string> = S extends `${infer Head}-${infer Rest}` ? `${Head}${Pascal<Rest>}` : S;
|
|
14
|
-
export type ArrangementElement = (typeof ELEMENTS)['
|
|
14
|
+
export type ArrangementElement = (typeof ELEMENTS)['derives'][number] extends infer One ? One extends {
|
|
15
15
|
readonly arranges: true;
|
|
16
16
|
readonly id: infer Id extends string;
|
|
17
17
|
} ? Pascal<Id> : never : never;
|
package/dist/ui/checked.ts
CHANGED
|
@@ -21,7 +21,7 @@ type Pascal<S extends string> = S extends `${infer Head}-${infer Rest}`
|
|
|
21
21
|
|
|
22
22
|
type Camel<S extends string> = S extends `${infer Head}-${infer Rest}` ? `${Head}${Pascal<Rest>}` : S
|
|
23
23
|
|
|
24
|
-
export type ArrangementElement = (typeof ELEMENTS)['
|
|
24
|
+
export type ArrangementElement = (typeof ELEMENTS)['derives'][number] extends infer One
|
|
25
25
|
? One extends { readonly arranges: true; readonly id: infer Id extends string }
|
|
26
26
|
? Pascal<Id>
|
|
27
27
|
: never
|
package/dist/ui/collector.js
CHANGED
|
@@ -23,7 +23,7 @@ export function createCollector(options) {
|
|
|
23
23
|
const body = JSON.stringify({ events: batch });
|
|
24
24
|
if (options.beacon !== undefined && options.beacon(options.endpoint, body))
|
|
25
25
|
return;
|
|
26
|
-
const doFetch = options.fetch
|
|
26
|
+
const doFetch = options.fetch;
|
|
27
27
|
if (doFetch === undefined) {
|
|
28
28
|
dropped += batch.length;
|
|
29
29
|
return;
|
package/dist/ui/collector.ts
CHANGED
|
@@ -82,7 +82,7 @@ export function createCollector(options: CollectorOptions): Collector {
|
|
|
82
82
|
|
|
83
83
|
if (options.beacon !== undefined && options.beacon(options.endpoint, body)) return
|
|
84
84
|
|
|
85
|
-
const doFetch = options.fetch
|
|
85
|
+
const doFetch = options.fetch
|
|
86
86
|
if (doFetch === undefined) {
|
|
87
87
|
dropped += batch.length
|
|
88
88
|
return
|