@prestack/thread-ui 0.1.10 → 0.1.12
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 +375 -0
- package/dist/ui/attach.js +6 -7
- package/dist/ui/compositions.d.ts +0 -8
- package/dist/ui/compositions.js +3 -166
- package/dist/ui/generators/routes.js +1 -0
- package/package.json +2 -2
- package/dist/ui/animations/anm_appear.ts +0 -13
- package/dist/ui/animations/anm_blur_in.ts +0 -19
- package/dist/ui/animations/anm_blur_out.ts +0 -18
- package/dist/ui/animations/anm_dismiss.ts +0 -18
- package/dist/ui/animations/anm_drop.ts +0 -19
- package/dist/ui/animations/anm_fall.ts +0 -18
- package/dist/ui/animations/anm_flash.ts +0 -18
- package/dist/ui/animations/anm_glow.ts +0 -16
- package/dist/ui/animations/anm_lift.ts +0 -16
- package/dist/ui/animations/anm_nudge.ts +0 -16
- package/dist/ui/animations/anm_pop_in.ts +0 -23
- package/dist/ui/animations/anm_pop_out.ts +0 -22
- package/dist/ui/animations/anm_press.ts +0 -12
- package/dist/ui/animations/anm_pulse.ts +0 -13
- package/dist/ui/animations/anm_rise.ts +0 -19
- package/dist/ui/animations/anm_shake.ts +0 -13
- package/dist/ui/animations/anm_slide_in_left.ts +0 -19
- package/dist/ui/animations/anm_slide_in_right.ts +0 -19
- package/dist/ui/animations/anm_slide_out_left.ts +0 -18
- package/dist/ui/animations/anm_slide_out_right.ts +0 -18
- package/dist/ui/animations/anm_spin.ts +0 -12
- package/dist/ui/animations/anm_swell.ts +0 -16
- package/dist/ui/animations/anm_wobble.ts +0 -24
- package/dist/ui/animations/anm_zoom_in.ts +0 -19
- package/dist/ui/animations/anm_zoom_out.ts +0 -18
- package/dist/ui/animations.ts +0 -308
- package/dist/ui/attach.ts +0 -553
- package/dist/ui/charts.tsx +0 -69
- package/dist/ui/checked.ts +0 -32
- package/dist/ui/collector.ts +0 -140
- package/dist/ui/compositions.ts +0 -613
- package/dist/ui/consent.ts +0 -55
- package/dist/ui/content.tsx +0 -27
- package/dist/ui/contrast.ts +0 -27
- package/dist/ui/controls.tsx +0 -25
- package/dist/ui/disclosure.tsx +0 -20
- package/dist/ui/dismiss-layer.ts +0 -87
- package/dist/ui/door.ts +0 -140
- package/dist/ui/drag.ts +0 -316
- package/dist/ui/elements/accordion.tsx +0 -47
- package/dist/ui/elements/accordion.works.ts +0 -66
- package/dist/ui/elements/aspect-ratio.tsx +0 -31
- package/dist/ui/elements/aspect-ratio.works.ts +0 -5
- package/dist/ui/elements/avatar.tsx +0 -34
- package/dist/ui/elements/avatar.works.ts +0 -16
- package/dist/ui/elements/badge.tsx +0 -33
- package/dist/ui/elements/badge.works.ts +0 -9
- package/dist/ui/elements/bars.tsx +0 -50
- package/dist/ui/elements/bars.works.ts +0 -29
- package/dist/ui/elements/box.tsx +0 -36
- package/dist/ui/elements/breadcrumb.tsx +0 -38
- package/dist/ui/elements/breadcrumb.works.ts +0 -24
- package/dist/ui/elements/button.tsx +0 -46
- package/dist/ui/elements/button.works.tsx +0 -52
- package/dist/ui/elements/column.tsx +0 -29
- package/dist/ui/elements/consent.tsx +0 -71
- package/dist/ui/elements/consent.works.tsx +0 -132
- package/dist/ui/elements/donut.tsx +0 -45
- package/dist/ui/elements/donut.works.ts +0 -42
- package/dist/ui/elements/each.tsx +0 -34
- package/dist/ui/elements/each.works.tsx +0 -82
- package/dist/ui/elements/empty.tsx +0 -33
- package/dist/ui/elements/field.tsx +0 -45
- package/dist/ui/elements/field.works.ts +0 -65
- package/dist/ui/elements/funnel.tsx +0 -50
- package/dist/ui/elements/funnel.works.ts +0 -37
- package/dist/ui/elements/gauge.tsx +0 -40
- package/dist/ui/elements/gauge.works.ts +0 -42
- package/dist/ui/elements/glyph.tsx +0 -30
- package/dist/ui/elements/glyph.works.tsx +0 -42
- package/dist/ui/elements/grid.tsx +0 -29
- package/dist/ui/elements/heatmap.tsx +0 -48
- package/dist/ui/elements/heatmap.works.ts +0 -24
- package/dist/ui/elements/hit-box.tsx +0 -47
- package/dist/ui/elements/hit-box.works.tsx +0 -576
- package/dist/ui/elements/image.tsx +0 -29
- package/dist/ui/elements/line-chart.tsx +0 -45
- package/dist/ui/elements/line-chart.works.ts +0 -41
- package/dist/ui/elements/link.tsx +0 -38
- package/dist/ui/elements/link.works.ts +0 -25
- package/dist/ui/elements/media.tsx +0 -57
- package/dist/ui/elements/menu.tsx +0 -51
- package/dist/ui/elements/menu.works.tsx +0 -154
- package/dist/ui/elements/money.tsx +0 -36
- package/dist/ui/elements/money.works.ts +0 -9
- package/dist/ui/elements/pagination.tsx +0 -39
- package/dist/ui/elements/pagination.works.ts +0 -20
- package/dist/ui/elements/progress.tsx +0 -34
- package/dist/ui/elements/progress.works.ts +0 -8
- package/dist/ui/elements/radio-group.tsx +0 -50
- package/dist/ui/elements/radio-group.works.ts +0 -33
- package/dist/ui/elements/row.tsx +0 -29
- package/dist/ui/elements/scatter.tsx +0 -42
- package/dist/ui/elements/scatter.works.ts +0 -38
- package/dist/ui/elements/select.tsx +0 -43
- package/dist/ui/elements/select.works.ts +0 -5
- package/dist/ui/elements/separator.tsx +0 -31
- package/dist/ui/elements/skeleton.tsx +0 -31
- package/dist/ui/elements/slider.tsx +0 -34
- package/dist/ui/elements/slider.works.ts +0 -5
- package/dist/ui/elements/sparkline.tsx +0 -37
- package/dist/ui/elements/sparkline.works.ts +0 -32
- package/dist/ui/elements/spinner.tsx +0 -33
- package/dist/ui/elements/stack.tsx +0 -29
- package/dist/ui/elements/stat.tsx +0 -36
- package/dist/ui/elements/stat.works.ts +0 -14
- package/dist/ui/elements/surface.tsx +0 -36
- package/dist/ui/elements/surface.works.ts +0 -9
- package/dist/ui/elements/table.tsx +0 -62
- package/dist/ui/elements/table.works.ts +0 -30
- package/dist/ui/elements/tabs.tsx +0 -47
- package/dist/ui/elements/tabs.works.ts +0 -84
- package/dist/ui/elements/text.tsx +0 -33
- package/dist/ui/elements/textarea.tsx +0 -38
- package/dist/ui/elements/textarea.works.ts +0 -5
- package/dist/ui/elements/time.tsx +0 -40
- package/dist/ui/elements/time.works.ts +0 -29
- package/dist/ui/elements/toggle.tsx +0 -34
- package/dist/ui/elements/toggle.works.ts +0 -5
- package/dist/ui/elements/tooltip.tsx +0 -40
- package/dist/ui/elements/tooltip.works.ts +0 -77
- package/dist/ui/elements/value.tsx +0 -38
- package/dist/ui/elements/value.works.ts +0 -9
- package/dist/ui/elements.ts +0 -127
- package/dist/ui/focus-scope.ts +0 -121
- package/dist/ui/fonts.ts +0 -355
- package/dist/ui/generators/dev.d.ts +0 -1
- package/dist/ui/generators/dev.js +0 -62
- package/dist/ui/generators/dev.ts +0 -75
- package/dist/ui/generators/elements.ts +0 -796
- package/dist/ui/generators/i18n.ts +0 -283
- package/dist/ui/generators/icons.ts +0 -207
- package/dist/ui/generators/react.ts +0 -267
- package/dist/ui/generators/routes.ts +0 -847
- package/dist/ui/generators/show.ts +0 -261
- package/dist/ui/generators/styles.ts +0 -677
- package/dist/ui/generators/variants.ts +0 -196
- package/dist/ui/i18n/catalogs/en.ts +0 -191
- package/dist/ui/i18n/format.ts +0 -221
- package/dist/ui/i18n/locales.ts +0 -33
- package/dist/ui/i18n/parse.ts +0 -315
- package/dist/ui/i18n/translator.ts +0 -31
- package/dist/ui/i18n/types.ts +0 -96
- package/dist/ui/icons.ts +0 -331
- package/dist/ui/islands/map.ts +0 -58
- package/dist/ui/localizations.ts +0 -75
- package/dist/ui/material.ts +0 -236
- package/dist/ui/materials/mat_bordered.ts +0 -13
- package/dist/ui/materials/mat_ceramic.ts +0 -13
- package/dist/ui/materials/mat_clay.ts +0 -13
- package/dist/ui/materials/mat_elevated.ts +0 -24
- package/dist/ui/materials/mat_flat.ts +0 -34
- package/dist/ui/materials/mat_glass.ts +0 -20
- package/dist/ui/materials/mat_lit.ts +0 -13
- package/dist/ui/materials/mat_moulded.ts +0 -11
- package/dist/ui/materials.ts +0 -197
- package/dist/ui/modes.ts +0 -44
- package/dist/ui/navigation.tsx +0 -29
- package/dist/ui/positioning.ts +0 -90
- package/dist/ui/presented.tsx +0 -119
- package/dist/ui/provider.tsx +0 -184
- package/dist/ui/render-loop.ts +0 -133
- package/dist/ui/roving-focus.ts +0 -161
- package/dist/ui/screens.ts +0 -141
- package/dist/ui/scroll-lock.ts +0 -28
- package/dist/ui/series.ts +0 -97
- package/dist/ui/signals.ts +0 -386
- package/dist/ui/styleguide.ts +0 -231
- package/dist/ui/styleguides.ts +0 -374
- package/dist/ui/themes.ts +0 -22
- package/dist/ui/token.ts +0 -78
- package/dist/ui/tokens/shadow.ts +0 -25
- package/dist/ui/tokens.ts +0 -234
- package/dist/ui/validators.ts +0 -232
- package/dist/ui/variant.ts +0 -349
- package/dist/ui/variants/var_avatar-round.ts +0 -14
- package/dist/ui/variants/var_bubble-me.ts +0 -14
- package/dist/ui/variants/var_bubble-them.ts +0 -13
- package/dist/ui/variants/var_button-border.ts +0 -76
- package/dist/ui/variants/var_button-cta.ts +0 -76
- package/dist/ui/variants/var_button-destructive-ghost.ts +0 -72
- package/dist/ui/variants/var_button-destructive.ts +0 -76
- package/dist/ui/variants/var_button-fill.ts +0 -76
- package/dist/ui/variants/var_button-ghost.ts +0 -72
- package/dist/ui/variants/var_button-glass.ts +0 -55
- package/dist/ui/variants/var_button-normal.ts +0 -76
- package/dist/ui/variants/var_button-quiet.ts +0 -74
- package/dist/ui/variants/var_card.ts +0 -17
- package/dist/ui/variants/var_chip.ts +0 -13
- package/dist/ui/variants/var_choice.ts +0 -15
- package/dist/ui/variants/var_framed.ts +0 -10
- package/dist/ui/variants/var_glyph-plain.ts +0 -11
- package/dist/ui/variants/var_input.ts +0 -43
- package/dist/ui/variants/var_link-inline.ts +0 -29
- package/dist/ui/variants/var_list-row.ts +0 -34
- package/dist/ui/variants/var_rule.ts +0 -10
- package/dist/ui/variants/var_skeleton-block.ts +0 -12
- package/dist/ui/variants/var_spinner-turning.ts +0 -12
- package/dist/ui/variants/var_stat-tile.ts +0 -13
- package/dist/ui/variants/var_tab-bar.ts +0 -15
- package/dist/ui/variants/var_tap-target.ts +0 -25
- package/dist/ui/variants.ts +0 -64
- package/dist/ui/wrappers.tsx +0 -429
package/dist/ui/compositions.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { existsSync, readFileSync, readdirSync, rmSync, writeFileSync } from '@prestack/thread/integrations/disk';
|
|
2
|
-
import { basename,
|
|
2
|
+
import { basename, join, relative } from 'node:path';
|
|
3
3
|
import { argv, stdout } from 'node:process';
|
|
4
|
-
import ts from 'typescript';
|
|
5
4
|
import { SHAPED } from '@prestack/thread/core/init';
|
|
6
5
|
import { exit, invoked } from '@prestack/thread/core/invoked';
|
|
7
6
|
import { quoted, valuesIn } from '@prestack/thread/core/rows';
|
|
8
|
-
import {
|
|
7
|
+
import { named as packageOf } from '@prestack/thread/core/scope';
|
|
9
8
|
import { findTree, inTree } from '@prestack/thread/core/tree';
|
|
10
9
|
import { COMPILED } from '@prestack/thread/operations/capabilities';
|
|
11
10
|
import { compiled } from './generators/react.js';
|
|
@@ -112,21 +111,6 @@ const REFUSED = {
|
|
|
112
111
|
export function compiledAt(at) {
|
|
113
112
|
return `${COMPILED}/${slashed(at)}`;
|
|
114
113
|
}
|
|
115
|
-
const ENDINGS = ['.tsx', '.ts'];
|
|
116
|
-
function beside(root, where, said) {
|
|
117
|
-
if (!said.startsWith(`${HOME}/`))
|
|
118
|
-
return undefined;
|
|
119
|
-
const tail = said.slice(HOME.length + 1);
|
|
120
|
-
for (const ending of ENDINGS) {
|
|
121
|
-
const at = `${COMPILED}/ui/${tail}${ending}`;
|
|
122
|
-
if (!existsSync(join(root, at)))
|
|
123
|
-
continue;
|
|
124
|
-
const out = slashed(relative(dirname(where), at));
|
|
125
|
-
return out.startsWith('.') ? out : `./${out}`;
|
|
126
|
-
}
|
|
127
|
-
return undefined;
|
|
128
|
-
}
|
|
129
|
-
const NAMED_IMPORT = /(['"])(@[^'"]+)\1/g;
|
|
130
114
|
export function settled(root, rows, checking, by, kept) {
|
|
131
115
|
const said = [];
|
|
132
116
|
for (const row of rows) {
|
|
@@ -140,10 +124,7 @@ export function settled(root, rows, checking, by, kept) {
|
|
|
140
124
|
}
|
|
141
125
|
const where = compiledAt(row.at);
|
|
142
126
|
kept.add(where);
|
|
143
|
-
const text =
|
|
144
|
-
const found = beside(root, where, said);
|
|
145
|
-
return found === undefined ? whole : `${quote}${found}${quote}`;
|
|
146
|
-
});
|
|
127
|
+
const text = held.text ?? '';
|
|
147
128
|
const at = join(root, where);
|
|
148
129
|
if (!checking) {
|
|
149
130
|
writeFileSync(at, text, 'utf8');
|
|
@@ -156,133 +137,6 @@ export function settled(root, rows, checking, by, kept) {
|
|
|
156
137
|
}
|
|
157
138
|
return said;
|
|
158
139
|
}
|
|
159
|
-
const ORG = packageOf('ui').split('/')[0] ?? '';
|
|
160
|
-
const CORE = packageOf('core');
|
|
161
|
-
const FROM_CORE = `${COMPILED}/${THING}/`;
|
|
162
|
-
export function reachedIn(at, text) {
|
|
163
|
-
const file = ts.createSourceFile(at, text, ts.ScriptTarget.Latest, false, at.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
164
|
-
const found = [];
|
|
165
|
-
for (const one of file.statements) {
|
|
166
|
-
if (!ts.isImportDeclaration(one) && !ts.isExportDeclaration(one))
|
|
167
|
-
continue;
|
|
168
|
-
const said = one.moduleSpecifier;
|
|
169
|
-
if (said === undefined || !ts.isStringLiteral(said))
|
|
170
|
-
continue;
|
|
171
|
-
found.push({ from: said.text, typed: ts.isImportDeclaration(one) ? one.importClause?.isTypeOnly === true : one.isTypeOnly });
|
|
172
|
-
}
|
|
173
|
-
return found;
|
|
174
|
-
}
|
|
175
|
-
export const RUNTIME = ['wrappers.tsx', 'drag.ts', 'provider.tsx', 'islands/map.ts'];
|
|
176
|
-
const NODE = /^node:/;
|
|
177
|
-
function installs(root) {
|
|
178
|
-
try {
|
|
179
|
-
const held = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
|
|
180
|
-
return new Set([...Object.keys(held.dependencies ?? {}), ...Object.keys(held.devDependencies ?? {})]);
|
|
181
|
-
}
|
|
182
|
-
catch {
|
|
183
|
-
return new Set();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
function packaging(said) {
|
|
187
|
-
return said.startsWith('@') ? said.split('/').slice(0, 2).join('/') : (said.split('/')[0] ?? said);
|
|
188
|
-
}
|
|
189
|
-
export function emitting(root, entries, checking, kept) {
|
|
190
|
-
const has = installs(root);
|
|
191
|
-
const from = join(root, 'node_modules', packageOf('ui'), 'dist', 'ui');
|
|
192
|
-
const said = [];
|
|
193
|
-
if (!existsSync(from)) {
|
|
194
|
-
return [
|
|
195
|
-
`this app declares an interface and ${packageOf('ui')} is not installed, so there is nothing to emit it from. ` +
|
|
196
|
-
`Install it and run \`thread attach ${packageOf('ui')}\` again.`,
|
|
197
|
-
];
|
|
198
|
-
}
|
|
199
|
-
const seen = new Set();
|
|
200
|
-
const core = join(root, 'node_modules', CORE, 'dist');
|
|
201
|
-
const copied = (path) => {
|
|
202
|
-
const file = join(core, `${path}.ts`);
|
|
203
|
-
if (!existsSync(file))
|
|
204
|
-
return undefined;
|
|
205
|
-
const text = readFileSync(file, 'utf8');
|
|
206
|
-
if (reachedIn(path, text).length > 0)
|
|
207
|
-
return undefined;
|
|
208
|
-
const where = `${FROM_CORE}${path}.ts`;
|
|
209
|
-
if (seen.has(where))
|
|
210
|
-
return where;
|
|
211
|
-
seen.add(where);
|
|
212
|
-
kept.add(where);
|
|
213
|
-
const to = join(root, where);
|
|
214
|
-
if (checking) {
|
|
215
|
-
if (!existsSync(to) || readFileSync(to, 'utf8') !== text) {
|
|
216
|
-
said.push(`${where} is not what this app emits from ${CORE}. An emitted file that differs from its source is a hand ` +
|
|
217
|
-
'edit wearing a generated name. Run `thread compositions` and commit what it writes.');
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
writeFileSync(to, text, 'utf8');
|
|
222
|
-
}
|
|
223
|
-
return where;
|
|
224
|
-
};
|
|
225
|
-
const walk = (at) => {
|
|
226
|
-
if (seen.has(at))
|
|
227
|
-
return;
|
|
228
|
-
seen.add(at);
|
|
229
|
-
const file = join(from, at);
|
|
230
|
-
if (!existsSync(file)) {
|
|
231
|
-
said.push(`${at} is part of the interface this app emits, and the installed ${packageOf('ui')} does not hold it. ` +
|
|
232
|
-
'Upgrade the framework packages and run this again.');
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
const text = readFileSync(file, 'utf8');
|
|
236
|
-
const where = `${COMPILED}/ui/${at}`;
|
|
237
|
-
let shipped = text;
|
|
238
|
-
for (const one of reachedIn(at, text)) {
|
|
239
|
-
const named = one.from;
|
|
240
|
-
if (named.startsWith('.')) {
|
|
241
|
-
const next = slashed(join(dirname(at), named));
|
|
242
|
-
if (next.startsWith('..')) {
|
|
243
|
-
said.push(`${at} reaches \`${named}\`, which is outside the interface this app emits.`);
|
|
244
|
-
continue;
|
|
245
|
-
}
|
|
246
|
-
walk(next);
|
|
247
|
-
continue;
|
|
248
|
-
}
|
|
249
|
-
if (one.typed)
|
|
250
|
-
continue;
|
|
251
|
-
if (!named.startsWith(`${ORG}/`)) {
|
|
252
|
-
const held = packaging(named);
|
|
253
|
-
if (NODE.test(named) || has.has(held))
|
|
254
|
-
continue;
|
|
255
|
-
said.push(`${at} reaches ${held}, and this app installs nothing by that name. An emitted interface brings ` +
|
|
256
|
-
`what it reaches with it, so ${held} has to arrive when ` +
|
|
257
|
-
`thread attach ${packageOf('ui')} runs.`);
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
const copy = named.startsWith(`${CORE}/`) ? copied(named.slice(CORE.length + 1)) : undefined;
|
|
261
|
-
if (copy !== undefined) {
|
|
262
|
-
const near = slashed(relative(dirname(where), copy));
|
|
263
|
-
const pointed = near.startsWith('.') ? near : `./${near}`;
|
|
264
|
-
shipped = shipped.split(`'${named}'`).join(`'${pointed}'`).split(`"${named}"`).join(`"${pointed}"`);
|
|
265
|
-
continue;
|
|
266
|
-
}
|
|
267
|
-
said.push(`${at} reaches \`${named}\`, so emitting it would leave this app importing the framework while it runs. ` +
|
|
268
|
-
'It reaches what is emitted beside it, or nothing of this framework at all.');
|
|
269
|
-
}
|
|
270
|
-
kept.add(where);
|
|
271
|
-
const to = join(root, where);
|
|
272
|
-
if (checking) {
|
|
273
|
-
if (!existsSync(to) || readFileSync(to, 'utf8') !== shipped) {
|
|
274
|
-
said.push(`${where} is not what this app emits from ${packageOf('ui')}. An emitted file that differs from ` +
|
|
275
|
-
'its source is a hand edit wearing a generated name. Run `thread compositions` and commit what it writes.');
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
writeFileSync(to, shipped, 'utf8');
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
for (const one of entries)
|
|
283
|
-
walk(one);
|
|
284
|
-
return said;
|
|
285
|
-
}
|
|
286
140
|
export function stale(root, kept, checking) {
|
|
287
141
|
const said = [];
|
|
288
142
|
const walk = (at) => {
|
|
@@ -311,18 +165,8 @@ export function stale(root, kept, checking) {
|
|
|
311
165
|
const SHEET = 'compiled.ts';
|
|
312
166
|
const EMITS = 'thread compositions';
|
|
313
167
|
export const SCREENED_BY = 'thread screens';
|
|
314
|
-
const SHIPS = `${COMPILED}/ui/`;
|
|
315
168
|
const idFor = (at) => `compiled-${at.slice(COMPILED.length + 1).replace(/\.[^./]+$/, '').split('/').join('-')}`;
|
|
316
169
|
function meaning(at, by) {
|
|
317
|
-
if (at.startsWith(FROM_CORE)) {
|
|
318
|
-
return ('`' + at.slice(FROM_CORE.length) + '` from ' + CORE + ', copied into this app beside the interface that imports it. ' +
|
|
319
|
-
'It imports nothing itself, so a page runs it with nothing of the framework installed. `' + by + '` writes it, so an ' +
|
|
320
|
-
'edit made here is refused.');
|
|
321
|
-
}
|
|
322
|
-
if (at.startsWith(SHIPS)) {
|
|
323
|
-
return ('`' + at.slice(SHIPS.length) + '` from ' + packageOf('ui') + ', copied into this app so a page runs it with nothing of ' +
|
|
324
|
-
'the framework installed. `' + by + '` writes it, so an edit made here is refused.');
|
|
325
|
-
}
|
|
326
170
|
return ('`' + at.slice(COMPILED.length + 1) + '` as React runs it, compiled from the file a person wrote: a variant worn as a ' +
|
|
327
171
|
'tag has become its class, and a named place the class its arrangement declares. `' + by + '` writes it, so an ' +
|
|
328
172
|
'edit made here is refused.');
|
|
@@ -477,12 +321,6 @@ function run() {
|
|
|
477
321
|
stdout.write(`thread: seeded ${one.path}\n`);
|
|
478
322
|
}
|
|
479
323
|
}
|
|
480
|
-
const parts = sheetOf(tree, 'elements.ts', 'ELEMENT', 'ELEMENTS');
|
|
481
|
-
const shipped = `node_modules/${packageOf('ui')}/dist/ui/`;
|
|
482
|
-
const entries = [
|
|
483
|
-
...RUNTIME,
|
|
484
|
-
...parts.flatMap((one) => (one.at ?? '').startsWith(shipped) ? [(one.at ?? '').slice(shipped.length).replace(/\.js$/, '.tsx')] : []),
|
|
485
|
-
];
|
|
486
324
|
const screened = new Set();
|
|
487
325
|
for (const one of sheetOf(tree, 'screens.ts', 'SCREEN', 'SCREENS')) {
|
|
488
326
|
if (one.at !== undefined && one.at !== '')
|
|
@@ -491,7 +329,6 @@ function run() {
|
|
|
491
329
|
const kept = new Set(screened);
|
|
492
330
|
const found = [
|
|
493
331
|
...undeclared(tree, rows),
|
|
494
|
-
...emitting(tree.at, entries, checking, kept),
|
|
495
332
|
...settled(tree.at, rows, checking, EMITS, kept),
|
|
496
333
|
];
|
|
497
334
|
found.push(...declaring(tree, [...kept], checking, screened));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prestack/thread-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
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.23"
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const APPEAR = {
|
|
4
|
-
id: 'appear',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
|
|
8
|
-
fills: 'backwards',
|
|
9
|
-
stops: {
|
|
10
|
-
'0%': [{ property: 'opacity', is: 'opacity-none' }],
|
|
11
|
-
'100%': [{ property: 'opacity', is: 'opacity-full' }],
|
|
12
|
-
},
|
|
13
|
-
} as const satisfies Animation
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const BLUR_IN = {
|
|
4
|
-
id: 'blur-in',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
|
|
8
|
-
fills: 'backwards',
|
|
9
|
-
stops: {
|
|
10
|
-
'0%': [
|
|
11
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
12
|
-
{ property: 'filter', is: 'filter-blurred' },
|
|
13
|
-
],
|
|
14
|
-
'100%': [
|
|
15
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
16
|
-
{ property: 'filter', is: 'filter-sharp' },
|
|
17
|
-
],
|
|
18
|
-
},
|
|
19
|
-
} as const satisfies Animation
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const BLUR_OUT = {
|
|
4
|
-
id: 'blur-out',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-in',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
11
|
-
{ property: 'filter', is: 'filter-sharp' },
|
|
12
|
-
],
|
|
13
|
-
'100%': [
|
|
14
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
15
|
-
{ property: 'filter', is: 'filter-blurred' },
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
} as const satisfies Animation
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const DISMISS = {
|
|
4
|
-
id: 'dismiss',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-in',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
11
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
12
|
-
],
|
|
13
|
-
'100%': [
|
|
14
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
15
|
-
{ property: 'transform', is: 'transform-shrink' },
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
} as const satisfies Animation
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const DROP = {
|
|
4
|
-
id: 'drop',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
|
|
8
|
-
fills: 'backwards',
|
|
9
|
-
stops: {
|
|
10
|
-
'0%': [
|
|
11
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
12
|
-
{ property: 'transform', is: 'transform-above' },
|
|
13
|
-
],
|
|
14
|
-
'100%': [
|
|
15
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
16
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
17
|
-
],
|
|
18
|
-
},
|
|
19
|
-
} as const satisfies Animation
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const FALL = {
|
|
4
|
-
id: 'fall',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-in',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
11
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
12
|
-
],
|
|
13
|
-
'100%': [
|
|
14
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
15
|
-
{ property: 'transform', is: 'transform-below' },
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
} as const satisfies Animation
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const FLASH = {
|
|
4
|
-
id: 'flash',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
stops: {
|
|
8
|
-
'0%': [
|
|
9
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
10
|
-
],
|
|
11
|
-
'40%': [
|
|
12
|
-
{ property: 'opacity', is: 'opacity-muted' },
|
|
13
|
-
],
|
|
14
|
-
'100%': [
|
|
15
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
} as const satisfies Animation
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const GLOW = {
|
|
4
|
-
id: 'glow',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'boxShadow', is: 'shadow-0' },
|
|
11
|
-
],
|
|
12
|
-
'100%': [
|
|
13
|
-
{ property: 'boxShadow', is: 'shadow-glow' },
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
} as const satisfies Animation
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const LIFT = {
|
|
4
|
-
id: 'lift',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
11
|
-
],
|
|
12
|
-
'100%': [
|
|
13
|
-
{ property: 'transform', is: 'transform-lift' },
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
} as const satisfies Animation
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const NUDGE = {
|
|
4
|
-
id: 'nudge',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
11
|
-
],
|
|
12
|
-
'100%': [
|
|
13
|
-
{ property: 'transform', is: 'transform-right' },
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
} as const satisfies Animation
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const POP_IN = {
|
|
4
|
-
id: 'pop-in',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-spring',
|
|
7
|
-
|
|
8
|
-
fills: 'backwards',
|
|
9
|
-
stops: {
|
|
10
|
-
'0%': [
|
|
11
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
12
|
-
{ property: 'transform', is: 'transform-shrink' },
|
|
13
|
-
],
|
|
14
|
-
'70%': [
|
|
15
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
16
|
-
{ property: 'transform', is: 'transform-swell' },
|
|
17
|
-
],
|
|
18
|
-
'100%': [
|
|
19
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
20
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
21
|
-
],
|
|
22
|
-
},
|
|
23
|
-
} as const satisfies Animation
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const POP_OUT = {
|
|
4
|
-
id: 'pop-out',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-in',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
11
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
12
|
-
],
|
|
13
|
-
'30%': [
|
|
14
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
15
|
-
{ property: 'transform', is: 'transform-swell' },
|
|
16
|
-
],
|
|
17
|
-
'100%': [
|
|
18
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
19
|
-
{ property: 'transform', is: 'transform-shrink' },
|
|
20
|
-
],
|
|
21
|
-
},
|
|
22
|
-
} as const satisfies Animation
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const PRESS = {
|
|
4
|
-
id: 'press',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
stops: {
|
|
8
|
-
'0%': [{ property: 'transform', is: 'transform-rest' }],
|
|
9
|
-
'50%': [{ property: 'transform', is: 'transform-press' }],
|
|
10
|
-
'100%': [{ property: 'transform', is: 'transform-rest' }],
|
|
11
|
-
},
|
|
12
|
-
} as const satisfies Animation
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const PULSE = {
|
|
4
|
-
id: 'pulse',
|
|
5
|
-
runs: 'motion-slow',
|
|
6
|
-
eases: 'ease-in-out',
|
|
7
|
-
repeats: 'infinite',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [{ property: 'opacity', is: 'opacity-full' }],
|
|
10
|
-
'50%': [{ property: 'opacity', is: 'opacity-muted' }],
|
|
11
|
-
'100%': [{ property: 'opacity', is: 'opacity-full' }],
|
|
12
|
-
},
|
|
13
|
-
} as const satisfies Animation
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const RISE = {
|
|
4
|
-
id: 'rise',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
|
|
8
|
-
fills: 'backwards',
|
|
9
|
-
stops: {
|
|
10
|
-
'0%': [
|
|
11
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
12
|
-
{ property: 'transform', is: 'transform-below' },
|
|
13
|
-
],
|
|
14
|
-
'100%': [
|
|
15
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
16
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
17
|
-
],
|
|
18
|
-
},
|
|
19
|
-
} as const satisfies Animation
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const SHAKE = {
|
|
4
|
-
id: 'shake',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-in-out',
|
|
7
|
-
stops: {
|
|
8
|
-
'0%': [{ property: 'transform', is: 'transform-rest' }],
|
|
9
|
-
'25%': [{ property: 'transform', is: 'transform-left' }],
|
|
10
|
-
'75%': [{ property: 'transform', is: 'transform-right' }],
|
|
11
|
-
'100%': [{ property: 'transform', is: 'transform-rest' }],
|
|
12
|
-
},
|
|
13
|
-
} as const satisfies Animation
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const SLIDE_IN_LEFT = {
|
|
4
|
-
id: 'slide-in-left',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
|
|
8
|
-
fills: 'backwards',
|
|
9
|
-
stops: {
|
|
10
|
-
'0%': [
|
|
11
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
12
|
-
{ property: 'transform', is: 'transform-far-left' },
|
|
13
|
-
],
|
|
14
|
-
'100%': [
|
|
15
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
16
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
17
|
-
],
|
|
18
|
-
},
|
|
19
|
-
} as const satisfies Animation
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const SLIDE_IN_RIGHT = {
|
|
4
|
-
id: 'slide-in-right',
|
|
5
|
-
runs: 'motion-normal',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
|
|
8
|
-
fills: 'backwards',
|
|
9
|
-
stops: {
|
|
10
|
-
'0%': [
|
|
11
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
12
|
-
{ property: 'transform', is: 'transform-far-right' },
|
|
13
|
-
],
|
|
14
|
-
'100%': [
|
|
15
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
16
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
17
|
-
],
|
|
18
|
-
},
|
|
19
|
-
} as const satisfies Animation
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const SLIDE_OUT_LEFT = {
|
|
4
|
-
id: 'slide-out-left',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-in',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
11
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
12
|
-
],
|
|
13
|
-
'100%': [
|
|
14
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
15
|
-
{ property: 'transform', is: 'transform-far-left' },
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
} as const satisfies Animation
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const SLIDE_OUT_RIGHT = {
|
|
4
|
-
id: 'slide-out-right',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-in',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'opacity', is: 'opacity-full' },
|
|
11
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
12
|
-
],
|
|
13
|
-
'100%': [
|
|
14
|
-
{ property: 'opacity', is: 'opacity-none' },
|
|
15
|
-
{ property: 'transform', is: 'transform-far-right' },
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
} as const satisfies Animation
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const SPIN = {
|
|
4
|
-
id: 'spin',
|
|
5
|
-
runs: 'motion-slow',
|
|
6
|
-
eases: 'ease-steady',
|
|
7
|
-
repeats: 'infinite',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [{ property: 'transform', is: 'transform-rest' }],
|
|
10
|
-
'100%': [{ property: 'transform', is: 'transform-turn' }],
|
|
11
|
-
},
|
|
12
|
-
} as const satisfies Animation
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Animation } from '../animations.ts'
|
|
2
|
-
|
|
3
|
-
export const SWELL = {
|
|
4
|
-
id: 'swell',
|
|
5
|
-
runs: 'motion-quick',
|
|
6
|
-
eases: 'ease-out',
|
|
7
|
-
fills: 'forwards',
|
|
8
|
-
stops: {
|
|
9
|
-
'0%': [
|
|
10
|
-
{ property: 'transform', is: 'transform-rest' },
|
|
11
|
-
],
|
|
12
|
-
'100%': [
|
|
13
|
-
{ property: 'transform', is: 'transform-swell' },
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
} as const satisfies Animation
|