@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.
Files changed (209) hide show
  1. package/CHANGELOG.md +375 -0
  2. package/dist/ui/attach.js +6 -7
  3. package/dist/ui/compositions.d.ts +0 -8
  4. package/dist/ui/compositions.js +3 -166
  5. package/dist/ui/generators/routes.js +1 -0
  6. package/package.json +2 -2
  7. package/dist/ui/animations/anm_appear.ts +0 -13
  8. package/dist/ui/animations/anm_blur_in.ts +0 -19
  9. package/dist/ui/animations/anm_blur_out.ts +0 -18
  10. package/dist/ui/animations/anm_dismiss.ts +0 -18
  11. package/dist/ui/animations/anm_drop.ts +0 -19
  12. package/dist/ui/animations/anm_fall.ts +0 -18
  13. package/dist/ui/animations/anm_flash.ts +0 -18
  14. package/dist/ui/animations/anm_glow.ts +0 -16
  15. package/dist/ui/animations/anm_lift.ts +0 -16
  16. package/dist/ui/animations/anm_nudge.ts +0 -16
  17. package/dist/ui/animations/anm_pop_in.ts +0 -23
  18. package/dist/ui/animations/anm_pop_out.ts +0 -22
  19. package/dist/ui/animations/anm_press.ts +0 -12
  20. package/dist/ui/animations/anm_pulse.ts +0 -13
  21. package/dist/ui/animations/anm_rise.ts +0 -19
  22. package/dist/ui/animations/anm_shake.ts +0 -13
  23. package/dist/ui/animations/anm_slide_in_left.ts +0 -19
  24. package/dist/ui/animations/anm_slide_in_right.ts +0 -19
  25. package/dist/ui/animations/anm_slide_out_left.ts +0 -18
  26. package/dist/ui/animations/anm_slide_out_right.ts +0 -18
  27. package/dist/ui/animations/anm_spin.ts +0 -12
  28. package/dist/ui/animations/anm_swell.ts +0 -16
  29. package/dist/ui/animations/anm_wobble.ts +0 -24
  30. package/dist/ui/animations/anm_zoom_in.ts +0 -19
  31. package/dist/ui/animations/anm_zoom_out.ts +0 -18
  32. package/dist/ui/animations.ts +0 -308
  33. package/dist/ui/attach.ts +0 -553
  34. package/dist/ui/charts.tsx +0 -69
  35. package/dist/ui/checked.ts +0 -32
  36. package/dist/ui/collector.ts +0 -140
  37. package/dist/ui/compositions.ts +0 -613
  38. package/dist/ui/consent.ts +0 -55
  39. package/dist/ui/content.tsx +0 -27
  40. package/dist/ui/contrast.ts +0 -27
  41. package/dist/ui/controls.tsx +0 -25
  42. package/dist/ui/disclosure.tsx +0 -20
  43. package/dist/ui/dismiss-layer.ts +0 -87
  44. package/dist/ui/door.ts +0 -140
  45. package/dist/ui/drag.ts +0 -316
  46. package/dist/ui/elements/accordion.tsx +0 -47
  47. package/dist/ui/elements/accordion.works.ts +0 -66
  48. package/dist/ui/elements/aspect-ratio.tsx +0 -31
  49. package/dist/ui/elements/aspect-ratio.works.ts +0 -5
  50. package/dist/ui/elements/avatar.tsx +0 -34
  51. package/dist/ui/elements/avatar.works.ts +0 -16
  52. package/dist/ui/elements/badge.tsx +0 -33
  53. package/dist/ui/elements/badge.works.ts +0 -9
  54. package/dist/ui/elements/bars.tsx +0 -50
  55. package/dist/ui/elements/bars.works.ts +0 -29
  56. package/dist/ui/elements/box.tsx +0 -36
  57. package/dist/ui/elements/breadcrumb.tsx +0 -38
  58. package/dist/ui/elements/breadcrumb.works.ts +0 -24
  59. package/dist/ui/elements/button.tsx +0 -46
  60. package/dist/ui/elements/button.works.tsx +0 -52
  61. package/dist/ui/elements/column.tsx +0 -29
  62. package/dist/ui/elements/consent.tsx +0 -71
  63. package/dist/ui/elements/consent.works.tsx +0 -132
  64. package/dist/ui/elements/donut.tsx +0 -45
  65. package/dist/ui/elements/donut.works.ts +0 -42
  66. package/dist/ui/elements/each.tsx +0 -34
  67. package/dist/ui/elements/each.works.tsx +0 -82
  68. package/dist/ui/elements/empty.tsx +0 -33
  69. package/dist/ui/elements/field.tsx +0 -45
  70. package/dist/ui/elements/field.works.ts +0 -65
  71. package/dist/ui/elements/funnel.tsx +0 -50
  72. package/dist/ui/elements/funnel.works.ts +0 -37
  73. package/dist/ui/elements/gauge.tsx +0 -40
  74. package/dist/ui/elements/gauge.works.ts +0 -42
  75. package/dist/ui/elements/glyph.tsx +0 -30
  76. package/dist/ui/elements/glyph.works.tsx +0 -42
  77. package/dist/ui/elements/grid.tsx +0 -29
  78. package/dist/ui/elements/heatmap.tsx +0 -48
  79. package/dist/ui/elements/heatmap.works.ts +0 -24
  80. package/dist/ui/elements/hit-box.tsx +0 -47
  81. package/dist/ui/elements/hit-box.works.tsx +0 -576
  82. package/dist/ui/elements/image.tsx +0 -29
  83. package/dist/ui/elements/line-chart.tsx +0 -45
  84. package/dist/ui/elements/line-chart.works.ts +0 -41
  85. package/dist/ui/elements/link.tsx +0 -38
  86. package/dist/ui/elements/link.works.ts +0 -25
  87. package/dist/ui/elements/media.tsx +0 -57
  88. package/dist/ui/elements/menu.tsx +0 -51
  89. package/dist/ui/elements/menu.works.tsx +0 -154
  90. package/dist/ui/elements/money.tsx +0 -36
  91. package/dist/ui/elements/money.works.ts +0 -9
  92. package/dist/ui/elements/pagination.tsx +0 -39
  93. package/dist/ui/elements/pagination.works.ts +0 -20
  94. package/dist/ui/elements/progress.tsx +0 -34
  95. package/dist/ui/elements/progress.works.ts +0 -8
  96. package/dist/ui/elements/radio-group.tsx +0 -50
  97. package/dist/ui/elements/radio-group.works.ts +0 -33
  98. package/dist/ui/elements/row.tsx +0 -29
  99. package/dist/ui/elements/scatter.tsx +0 -42
  100. package/dist/ui/elements/scatter.works.ts +0 -38
  101. package/dist/ui/elements/select.tsx +0 -43
  102. package/dist/ui/elements/select.works.ts +0 -5
  103. package/dist/ui/elements/separator.tsx +0 -31
  104. package/dist/ui/elements/skeleton.tsx +0 -31
  105. package/dist/ui/elements/slider.tsx +0 -34
  106. package/dist/ui/elements/slider.works.ts +0 -5
  107. package/dist/ui/elements/sparkline.tsx +0 -37
  108. package/dist/ui/elements/sparkline.works.ts +0 -32
  109. package/dist/ui/elements/spinner.tsx +0 -33
  110. package/dist/ui/elements/stack.tsx +0 -29
  111. package/dist/ui/elements/stat.tsx +0 -36
  112. package/dist/ui/elements/stat.works.ts +0 -14
  113. package/dist/ui/elements/surface.tsx +0 -36
  114. package/dist/ui/elements/surface.works.ts +0 -9
  115. package/dist/ui/elements/table.tsx +0 -62
  116. package/dist/ui/elements/table.works.ts +0 -30
  117. package/dist/ui/elements/tabs.tsx +0 -47
  118. package/dist/ui/elements/tabs.works.ts +0 -84
  119. package/dist/ui/elements/text.tsx +0 -33
  120. package/dist/ui/elements/textarea.tsx +0 -38
  121. package/dist/ui/elements/textarea.works.ts +0 -5
  122. package/dist/ui/elements/time.tsx +0 -40
  123. package/dist/ui/elements/time.works.ts +0 -29
  124. package/dist/ui/elements/toggle.tsx +0 -34
  125. package/dist/ui/elements/toggle.works.ts +0 -5
  126. package/dist/ui/elements/tooltip.tsx +0 -40
  127. package/dist/ui/elements/tooltip.works.ts +0 -77
  128. package/dist/ui/elements/value.tsx +0 -38
  129. package/dist/ui/elements/value.works.ts +0 -9
  130. package/dist/ui/elements.ts +0 -127
  131. package/dist/ui/focus-scope.ts +0 -121
  132. package/dist/ui/fonts.ts +0 -355
  133. package/dist/ui/generators/dev.d.ts +0 -1
  134. package/dist/ui/generators/dev.js +0 -62
  135. package/dist/ui/generators/dev.ts +0 -75
  136. package/dist/ui/generators/elements.ts +0 -796
  137. package/dist/ui/generators/i18n.ts +0 -283
  138. package/dist/ui/generators/icons.ts +0 -207
  139. package/dist/ui/generators/react.ts +0 -267
  140. package/dist/ui/generators/routes.ts +0 -847
  141. package/dist/ui/generators/show.ts +0 -261
  142. package/dist/ui/generators/styles.ts +0 -677
  143. package/dist/ui/generators/variants.ts +0 -196
  144. package/dist/ui/i18n/catalogs/en.ts +0 -191
  145. package/dist/ui/i18n/format.ts +0 -221
  146. package/dist/ui/i18n/locales.ts +0 -33
  147. package/dist/ui/i18n/parse.ts +0 -315
  148. package/dist/ui/i18n/translator.ts +0 -31
  149. package/dist/ui/i18n/types.ts +0 -96
  150. package/dist/ui/icons.ts +0 -331
  151. package/dist/ui/islands/map.ts +0 -58
  152. package/dist/ui/localizations.ts +0 -75
  153. package/dist/ui/material.ts +0 -236
  154. package/dist/ui/materials/mat_bordered.ts +0 -13
  155. package/dist/ui/materials/mat_ceramic.ts +0 -13
  156. package/dist/ui/materials/mat_clay.ts +0 -13
  157. package/dist/ui/materials/mat_elevated.ts +0 -24
  158. package/dist/ui/materials/mat_flat.ts +0 -34
  159. package/dist/ui/materials/mat_glass.ts +0 -20
  160. package/dist/ui/materials/mat_lit.ts +0 -13
  161. package/dist/ui/materials/mat_moulded.ts +0 -11
  162. package/dist/ui/materials.ts +0 -197
  163. package/dist/ui/modes.ts +0 -44
  164. package/dist/ui/navigation.tsx +0 -29
  165. package/dist/ui/positioning.ts +0 -90
  166. package/dist/ui/presented.tsx +0 -119
  167. package/dist/ui/provider.tsx +0 -184
  168. package/dist/ui/render-loop.ts +0 -133
  169. package/dist/ui/roving-focus.ts +0 -161
  170. package/dist/ui/screens.ts +0 -141
  171. package/dist/ui/scroll-lock.ts +0 -28
  172. package/dist/ui/series.ts +0 -97
  173. package/dist/ui/signals.ts +0 -386
  174. package/dist/ui/styleguide.ts +0 -231
  175. package/dist/ui/styleguides.ts +0 -374
  176. package/dist/ui/themes.ts +0 -22
  177. package/dist/ui/token.ts +0 -78
  178. package/dist/ui/tokens/shadow.ts +0 -25
  179. package/dist/ui/tokens.ts +0 -234
  180. package/dist/ui/validators.ts +0 -232
  181. package/dist/ui/variant.ts +0 -349
  182. package/dist/ui/variants/var_avatar-round.ts +0 -14
  183. package/dist/ui/variants/var_bubble-me.ts +0 -14
  184. package/dist/ui/variants/var_bubble-them.ts +0 -13
  185. package/dist/ui/variants/var_button-border.ts +0 -76
  186. package/dist/ui/variants/var_button-cta.ts +0 -76
  187. package/dist/ui/variants/var_button-destructive-ghost.ts +0 -72
  188. package/dist/ui/variants/var_button-destructive.ts +0 -76
  189. package/dist/ui/variants/var_button-fill.ts +0 -76
  190. package/dist/ui/variants/var_button-ghost.ts +0 -72
  191. package/dist/ui/variants/var_button-glass.ts +0 -55
  192. package/dist/ui/variants/var_button-normal.ts +0 -76
  193. package/dist/ui/variants/var_button-quiet.ts +0 -74
  194. package/dist/ui/variants/var_card.ts +0 -17
  195. package/dist/ui/variants/var_chip.ts +0 -13
  196. package/dist/ui/variants/var_choice.ts +0 -15
  197. package/dist/ui/variants/var_framed.ts +0 -10
  198. package/dist/ui/variants/var_glyph-plain.ts +0 -11
  199. package/dist/ui/variants/var_input.ts +0 -43
  200. package/dist/ui/variants/var_link-inline.ts +0 -29
  201. package/dist/ui/variants/var_list-row.ts +0 -34
  202. package/dist/ui/variants/var_rule.ts +0 -10
  203. package/dist/ui/variants/var_skeleton-block.ts +0 -12
  204. package/dist/ui/variants/var_spinner-turning.ts +0 -12
  205. package/dist/ui/variants/var_stat-tile.ts +0 -13
  206. package/dist/ui/variants/var_tab-bar.ts +0 -15
  207. package/dist/ui/variants/var_tap-target.ts +0 -25
  208. package/dist/ui/variants.ts +0 -64
  209. package/dist/ui/wrappers.tsx +0 -429
@@ -1,11 +1,10 @@
1
1
  import { existsSync, readFileSync, readdirSync, rmSync, writeFileSync } from '@prestack/thread/integrations/disk';
2
- import { basename, dirname, join, relative } from 'node:path';
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 { THING, named as packageOf } from '@prestack/thread/core/scope';
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 = (held.text ?? '').replace(NAMED_IMPORT, (whole, quote, said) => {
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));
@@ -494,6 +494,7 @@ function config(root, external) {
494
494
  return [
495
495
  ...gate(false),
496
496
  'export default {',
497
+ " output: 'standalone',",
497
498
  ...(turbopack.length === 0 ? [] : [' turbopack: {', ...turbopack, ' },']),
498
499
  ...(external.length === 0
499
500
  ? []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prestack/thread-ui",
3
- "version": "0.1.10",
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.21"
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