@ethlete/cli 3.0.0-next.24 → 3.0.0-next.25

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 (111) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/design/define-call.ts +43 -0
  3. package/design/define-part.ts +28 -8
  4. package/design/embed-page.ts +37 -4
  5. package/design/icon-sheet.ts +151 -0
  6. package/design/mark-part.ts +79 -2
  7. package/design/motion-runtime.ts +212 -5
  8. package/design/spring.ts +53 -0
  9. package/design/token-sheet.ts +87 -0
  10. package/design/web/frame.ts +139 -24
  11. package/package.json +1 -1
  12. package/src/lib/design/calls-tsconfig.js +1 -2
  13. package/src/lib/design/calls-tsconfig.js.map +1 -1
  14. package/src/lib/design/design-command.js +34 -4
  15. package/src/lib/design/design-command.js.map +1 -1
  16. package/src/lib/design/force-interactions.d.ts +2 -1
  17. package/src/lib/design/force-interactions.js +7 -4
  18. package/src/lib/design/force-interactions.js.map +1 -1
  19. package/src/lib/design/mcp-command.d.ts +60 -0
  20. package/src/lib/design/mcp-command.js +327 -0
  21. package/src/lib/design/mcp-command.js.map +1 -0
  22. package/src/lib/design/motion-command.d.ts +71 -0
  23. package/src/lib/design/motion-command.js +314 -0
  24. package/src/lib/design/motion-command.js.map +1 -0
  25. package/src/lib/design/motion-endpoint.d.ts +61 -0
  26. package/src/lib/design/motion-endpoint.js +133 -0
  27. package/src/lib/design/motion-endpoint.js.map +1 -0
  28. package/src/lib/design/motion-flow.d.ts +5 -0
  29. package/src/lib/design/motion-flow.js +29 -0
  30. package/src/lib/design/motion-flow.js.map +1 -0
  31. package/src/lib/design/motion-shot.d.ts +43 -0
  32. package/src/lib/design/motion-shot.js +97 -0
  33. package/src/lib/design/motion-shot.js.map +1 -0
  34. package/src/lib/design/ready-shots.d.ts +7 -0
  35. package/src/lib/design/ready-shots.js +22 -1
  36. package/src/lib/design/ready-shots.js.map +1 -1
  37. package/src/lib/design/render-packages.d.ts +9 -0
  38. package/src/lib/design/render-packages.js +13 -3
  39. package/src/lib/design/render-packages.js.map +1 -1
  40. package/src/lib/design/render.js +3 -3
  41. package/src/lib/design/render.js.map +1 -1
  42. package/src/lib/design/serve.js +34 -3
  43. package/src/lib/design/serve.js.map +1 -1
  44. package/src/lib/design/shot-command.d.ts +8 -2
  45. package/src/lib/design/shot-command.js +12 -8
  46. package/src/lib/design/shot-command.js.map +1 -1
  47. package/src/lib/design/shot.d.ts +16 -0
  48. package/src/lib/design/shot.js +68 -4
  49. package/src/lib/design/shot.js.map +1 -1
  50. package/src/lib/design/sketch-command.js +78 -16
  51. package/src/lib/design/sketch-command.js.map +1 -1
  52. package/src/lib/design/studio-api.d.ts +19 -0
  53. package/src/lib/design/studio-api.js +52 -1
  54. package/src/lib/design/studio-api.js.map +1 -1
  55. package/src/lib/design/system/complete-command.d.ts +1 -1
  56. package/src/lib/design/system/complete-command.js +76 -6
  57. package/src/lib/design/system/complete-command.js.map +1 -1
  58. package/src/lib/design/system/complete.d.ts +107 -9
  59. package/src/lib/design/system/complete.js +592 -141
  60. package/src/lib/design/system/complete.js.map +1 -1
  61. package/src/lib/design/system/exceptions.d.ts +59 -0
  62. package/src/lib/design/system/exceptions.js +132 -0
  63. package/src/lib/design/system/exceptions.js.map +1 -0
  64. package/src/lib/design/system/flows/flow.d.ts +3 -0
  65. package/src/lib/design/system/flows/flow.js +5 -3
  66. package/src/lib/design/system/flows/flow.js.map +1 -1
  67. package/src/lib/design/system/handoff.d.ts +11 -0
  68. package/src/lib/design/system/handoff.js +30 -0
  69. package/src/lib/design/system/handoff.js.map +1 -0
  70. package/src/lib/design/system/inventory-approval.d.ts +41 -0
  71. package/src/lib/design/system/inventory-approval.js +71 -0
  72. package/src/lib/design/system/inventory-approval.js.map +1 -0
  73. package/src/lib/design/system/inventory.d.ts +65 -0
  74. package/src/lib/design/system/inventory.js +168 -0
  75. package/src/lib/design/system/inventory.js.map +1 -0
  76. package/src/lib/design/system/list-system.js +9 -2
  77. package/src/lib/design/system/list-system.js.map +1 -1
  78. package/src/lib/design/system/render-check.js +19 -1
  79. package/src/lib/design/system/render-check.js.map +1 -1
  80. package/src/lib/design/system/resolve-product.d.ts +2 -3
  81. package/src/lib/design/system/resolve-product.js +4 -6
  82. package/src/lib/design/system/resolve-product.js.map +1 -1
  83. package/src/lib/design/system/rules/stale-replace.js +41 -2
  84. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  85. package/src/lib/design/system/rules/token-selectors.js +1 -1
  86. package/src/lib/design/system/rules/token-selectors.js.map +1 -1
  87. package/src/lib/design/system/sketch/host-edit.d.ts +4 -0
  88. package/src/lib/design/system/sketch/host-edit.js +68 -0
  89. package/src/lib/design/system/sketch/host-edit.js.map +1 -0
  90. package/src/lib/design/system/sketch/merge.d.ts +3 -2
  91. package/src/lib/design/system/sketch/merge.js +47 -12
  92. package/src/lib/design/system/sketch/merge.js.map +1 -1
  93. package/src/lib/design/system/sketch/merged-parts.d.ts +10 -0
  94. package/src/lib/design/system/sketch/merged-parts.js +24 -3
  95. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  96. package/src/lib/design/system/sketch/no-visible-change.d.ts +6 -0
  97. package/src/lib/design/system/sketch/no-visible-change.js +25 -1
  98. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  99. package/src/lib/design/system/sketch/overlay.js +11 -3
  100. package/src/lib/design/system/sketch/overlay.js.map +1 -1
  101. package/src/lib/design/system/sketch/sketch.d.ts +32 -0
  102. package/src/lib/design/system/sketch/sketch.js +73 -18
  103. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  104. package/src/lib/design/system/sketch/unused-closure.d.ts +12 -0
  105. package/src/lib/design/system/sketch/unused-closure.js +185 -0
  106. package/src/lib/design/system/sketch/unused-closure.js.map +1 -0
  107. package/src/lib/design/system/system-modules.js +6 -9
  108. package/src/lib/design/system/system-modules.js.map +1 -1
  109. package/src/lib/design/system/system-tsconfig.d.ts +2 -1
  110. package/src/lib/design/system/system-tsconfig.js +9 -5
  111. package/src/lib/design/system/system-tsconfig.js.map +1 -1
@@ -0,0 +1,71 @@
1
+ import { MotionMode, MotionPictures } from './motion-shot';
2
+ import { DesignFlow, FlowLine } from './system/flows/flow';
3
+ export declare const MOTION_USAGE: string;
4
+ type DeclaredMotion = {
5
+ from: string;
6
+ to: string;
7
+ at?: number[];
8
+ interrupt?: number;
9
+ };
10
+ /** The JSON `motion shots` writes next to its sheet: per mode the end, the keyframe times and the tracks. */
11
+ export declare const motionReportOf: (options: {
12
+ product: string;
13
+ part: string;
14
+ motion: string;
15
+ declared: DeclaredMotion;
16
+ preset: string | null;
17
+ width: number | null;
18
+ drawn: Partial<Record<MotionMode, MotionPictures>>;
19
+ }) => {
20
+ product: string;
21
+ part: string;
22
+ motion: string;
23
+ from: string;
24
+ to: string;
25
+ interrupt: number | null;
26
+ preset: string | null;
27
+ width: number | null;
28
+ modes: {
29
+ [k: string]: {
30
+ end: number;
31
+ keyframes: number[];
32
+ tracks: unknown[];
33
+ };
34
+ };
35
+ };
36
+ /** The JSON `motion flow` writes next to its sheet: the line, its ends, and per mode the end, the keyframe times and the tracks. */
37
+ export declare const flowReportOf: (options: {
38
+ product: string;
39
+ flow: DesignFlow;
40
+ line: FlowLine;
41
+ preset: string;
42
+ drawn: Partial<Record<MotionMode, MotionPictures>>;
43
+ }) => {
44
+ product: string;
45
+ flow: string;
46
+ line: string;
47
+ label: string | null;
48
+ from: string;
49
+ to: string;
50
+ preset: string;
51
+ modes: {
52
+ [k: string]: {
53
+ end: number;
54
+ keyframes: number[];
55
+ tracks: unknown[];
56
+ };
57
+ };
58
+ };
59
+ /** One line per mode: when the motion ends and what runs, or that it runs no animation. */
60
+ export declare const motionSummaryOf: (drawn: Partial<Record<MotionMode, MotionPictures>>) => string[];
61
+ /**
62
+ * `et design motion shots <layer>/<name> <motion>` draws a motion of a part at each keyframe time, in full and reduced
63
+ * motion, into one contact sheet PNG with a row per mode, writes its tracks as JSON next to it, and prints both paths.
64
+ * `et design motion flow` draws a flow line the same way.
65
+ */
66
+ export declare const designMotion: (options: {
67
+ target: string;
68
+ argv: string[];
69
+ invocation: string;
70
+ }) => Promise<number>;
71
+ export {};
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.designMotion = exports.motionSummaryOf = exports.flowReportOf = exports.motionReportOf = exports.MOTION_USAGE = void 0;
13
+ const fs_1 = require("fs");
14
+ const path_1 = require("path");
15
+ const contact_sheet_1 = require("./contact-sheet");
16
+ const motion_flow_1 = require("./motion-flow");
17
+ const motion_shot_1 = require("./motion-shot");
18
+ const paths_1 = require("./paths");
19
+ const serve_1 = require("./serve");
20
+ const shot_1 = require("./shot");
21
+ const shot_command_1 = require("./shot-command");
22
+ const flow_1 = require("./system/flows/flow");
23
+ const cli_args_1 = require("./system/sketch/cli-args");
24
+ const system_modules_1 = require("./system/system-modules");
25
+ const thumb_1 = require("./thumb");
26
+ exports.MOTION_USAGE = `motion shots <layer>/<name> <motion> [--variant <key>] [--mode <${motion_shot_1.MOTION_MODES.join('|')}>] [--preset <preset> | --width <px>] [--scale <1-4>] [--product <name>] [--surface <name>] [--color <name>] [--out <file>]
27
+ motion flow <flow> <line id | part#state→part#state> [--mode <${motion_shot_1.MOTION_MODES.join('|')}>] [--preset <preset>] [--scale <1-4>] [--product <name>] [--surface <name>] [--color <name>] [--out <file>]`;
28
+ const motionsOf = (part) => {
29
+ const motions = part === null || part === void 0 ? void 0 : part.motions;
30
+ return motions && typeof motions === 'object' ? motions : {};
31
+ };
32
+ /** The JSON `motion shots` writes next to its sheet: per mode the end, the keyframe times and the tracks. */
33
+ const motionReportOf = (options) => {
34
+ var _a;
35
+ return ({
36
+ product: options.product,
37
+ part: options.part,
38
+ motion: options.motion,
39
+ from: options.declared.from,
40
+ to: options.declared.to,
41
+ interrupt: (_a = options.declared.interrupt) !== null && _a !== void 0 ? _a : null,
42
+ preset: options.preset,
43
+ width: options.width,
44
+ modes: Object.fromEntries(Object.entries(options.drawn).map(([mode, { end, tracks, keyframes }]) => [
45
+ mode,
46
+ { end, keyframes: keyframes.map((keyframe) => keyframe.ms), tracks },
47
+ ])),
48
+ });
49
+ };
50
+ exports.motionReportOf = motionReportOf;
51
+ /** The JSON `motion flow` writes next to its sheet: the line, its ends, and per mode the end, the keyframe times and the tracks. */
52
+ const flowReportOf = (options) => {
53
+ var _a;
54
+ return ({
55
+ product: options.product,
56
+ flow: options.flow.name,
57
+ line: (0, motion_flow_1.flowLineAddressOf)(options.line),
58
+ label: (_a = options.line.label) !== null && _a !== void 0 ? _a : null,
59
+ from: (0, flow_1.flowStateKeyOf)(options.line.from),
60
+ to: (0, flow_1.flowStateKeyOf)(options.line.to),
61
+ preset: options.preset,
62
+ modes: Object.fromEntries(Object.entries(options.drawn).map(([mode, { end, tracks, keyframes }]) => [
63
+ mode,
64
+ { end, keyframes: keyframes.map((keyframe) => keyframe.ms), tracks },
65
+ ])),
66
+ });
67
+ };
68
+ exports.flowReportOf = flowReportOf;
69
+ /** One line per mode: when the motion ends and what runs, or that it runs no animation. */
70
+ const motionSummaryOf = (drawn) => Object.entries(drawn).map(([mode, { end, tracks, keyframes }]) => tracks.length === 0
71
+ ? `${mode}: runs no animation`
72
+ : `${mode}: ends at ${end} ms, ${tracks.length} track${tracks.length === 1 ? '' : 's'}, keyframes at ${keyframes.map((keyframe) => keyframe.ms).join(', ')} ms`);
73
+ exports.motionSummaryOf = motionSummaryOf;
74
+ const MOTION_FLAGS = [
75
+ '--product',
76
+ '--variant',
77
+ '--mode',
78
+ '--preset',
79
+ '--width',
80
+ '--scale',
81
+ '--surface',
82
+ '--color',
83
+ '--out',
84
+ ];
85
+ const themeParamsOf = (values) => {
86
+ const params = new URLSearchParams();
87
+ for (const name of ['surface', 'color', 'scale']) {
88
+ const value = values[`--${name}`];
89
+ if (value)
90
+ params.set(name, value);
91
+ }
92
+ return params;
93
+ };
94
+ /** Opens a design server and a shooter, lets `draw` draw each mode, and writes the contact sheet and the JSON report. */
95
+ const writeMotionSheet = (options) => __awaiter(void 0, void 0, void 0, function* () {
96
+ var _a;
97
+ const { target, config, system } = options;
98
+ const queue = (0, thumb_1.createDrawQueue)({ target });
99
+ const server = yield (0, serve_1.createDesignServer)({ target, config, listen: true, port: 0 });
100
+ try {
101
+ yield server.listen();
102
+ const { port } = (_a = server.httpServer) === null || _a === void 0 ? void 0 : _a.address();
103
+ const shooter = (0, shot_1.createPartShooter)({ target, base: `http://localhost:${port}`, system });
104
+ try {
105
+ const sheet = yield options.draw({ server, shooter });
106
+ if (typeof sheet === 'string') {
107
+ console.error(sheet);
108
+ return 1;
109
+ }
110
+ const rows = Object.entries(sheet.drawn).map(([shown, { keyframes }]) => keyframes.map(({ ms, png }) => ({ label: `${shown} ${ms} ms`, png })));
111
+ const out = (0, path_1.resolve)(target, sheet.out);
112
+ const json = out.replace(/(\.png)?$/u, '.json');
113
+ const { png } = yield queue.run((browser) => (0, contact_sheet_1.contactSheetOf)({ browser, rows }));
114
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(out), { recursive: true });
115
+ (0, fs_1.writeFileSync)(out, png);
116
+ (0, fs_1.writeFileSync)(json, `${JSON.stringify(sheet.report, null, 2)}\n`);
117
+ console.log(out);
118
+ console.log(json);
119
+ for (const line of (0, exports.motionSummaryOf)(sheet.drawn))
120
+ console.log(line);
121
+ return 0;
122
+ }
123
+ finally {
124
+ yield shooter.close();
125
+ }
126
+ }
127
+ catch (error) {
128
+ console.error(error instanceof Error ? error.message : String(error));
129
+ return 1;
130
+ }
131
+ finally {
132
+ yield queue.close();
133
+ yield server.close();
134
+ }
135
+ });
136
+ const modesOf = (mode) => (mode ? [mode] : motion_shot_1.MOTION_MODES);
137
+ /**
138
+ * `et design motion flow <flow> <line>` draws a flow line with `"transition": "view"`: the `from` page morphs to the `to`
139
+ * page inside a View Transition, shot in the whole preset viewport at each keyframe time, in full and reduced motion.
140
+ */
141
+ const designMotionFlow = (options) => {
142
+ var _a, _b, _c, _d;
143
+ const { target, config, args, usage } = options;
144
+ const [, flowName, address, ...extra] = args.positional;
145
+ const mode = args.values['--mode'];
146
+ const scale = Number((_a = args.values['--scale']) !== null && _a !== void 0 ? _a : 1);
147
+ if (!flowName ||
148
+ !address ||
149
+ extra.length > 0 ||
150
+ args.flags.size > 0 ||
151
+ args.values['--width'] !== undefined ||
152
+ args.values['--variant'] !== undefined ||
153
+ (mode !== undefined && !motion_shot_1.MOTION_MODES.includes(mode)) ||
154
+ !(Number.isInteger(scale) && scale >= 1 && scale <= 4)) {
155
+ console.error(usage);
156
+ return Promise.resolve(2);
157
+ }
158
+ const resolved = (0, cli_args_1.oneProductOf)({ target, config, asked: args.values['--product'] });
159
+ if (typeof resolved === 'string') {
160
+ console.error(resolved);
161
+ return Promise.resolve(1);
162
+ }
163
+ const product = resolved.name;
164
+ const { flows, unreadable } = (0, flow_1.listFlows)(resolved.dir);
165
+ const flow = flows.find((found) => found.name === flowName);
166
+ if (!flow) {
167
+ const broken = unreadable.find((entry) => entry.file.endsWith(`/${flowName}.json`));
168
+ console.error(broken
169
+ ? `design-explore: flows/${flowName}.json ${broken.problem}`
170
+ : `design-explore: product "${product}" has no flow "${flowName}" (flows: ${flows.map((found) => found.name).join(', ') || 'none'})`);
171
+ return Promise.resolve(1);
172
+ }
173
+ const line = (0, motion_flow_1.flowLineOf)(flow, address);
174
+ if (typeof line === 'string') {
175
+ console.error(`design-explore: ${line}`);
176
+ return Promise.resolve(1);
177
+ }
178
+ const system = (0, system_modules_1.createSystemModules)({ target, config });
179
+ const preset = (_b = args.values['--preset']) !== null && _b !== void 0 ? _b : Object.keys((_d = (_c = system.productOf(product)) === null || _c === void 0 ? void 0 : _c.presets) !== null && _d !== void 0 ? _d : {})[0];
180
+ if (!preset) {
181
+ console.error(`design-explore: product "${product}" has no preset - a flow line is drawn in a preset viewport`);
182
+ return Promise.resolve(1);
183
+ }
184
+ const params = themeParamsOf(args.values);
185
+ const name = (0, motion_flow_1.flowLineAddressOf)(line);
186
+ return writeMotionSheet({
187
+ target,
188
+ config,
189
+ system,
190
+ draw: (_a) => __awaiter(void 0, [_a], void 0, function* ({ shooter }) {
191
+ var _b;
192
+ const drawn = {};
193
+ for (const shown of modesOf(mode)) {
194
+ drawn[shown] = yield shooter.motionOf({
195
+ product,
196
+ part: line.from.part,
197
+ state: line.from.state,
198
+ preset,
199
+ width: null,
200
+ sketch: null,
201
+ interaction: null,
202
+ motion: name,
203
+ flowTo: line.to,
204
+ mode: shown,
205
+ params,
206
+ });
207
+ }
208
+ return {
209
+ drawn,
210
+ out: (_b = args.values['--out']) !== null && _b !== void 0 ? _b : `${(0, paths_1.workRootOf)(target)}/shots/${product}-flow-${flow.name}-${name.replace(/[^A-Za-z0-9._-]+/gu, '-')}.png`,
211
+ report: (0, exports.flowReportOf)({ product, flow, line, preset, drawn }),
212
+ };
213
+ }),
214
+ });
215
+ };
216
+ /**
217
+ * `et design motion shots <layer>/<name> <motion>` draws a motion of a part at each keyframe time, in full and reduced
218
+ * motion, into one contact sheet PNG with a row per mode, writes its tracks as JSON next to it, and prints both paths.
219
+ * `et design motion flow` draws a flow line the same way.
220
+ */
221
+ const designMotion = (options) => __awaiter(void 0, void 0, void 0, function* () {
222
+ var _a, _b;
223
+ const { target, argv, invocation } = options;
224
+ const args = (0, cli_args_1.argsOf)(argv, MOTION_FLAGS);
225
+ const usage = `usage: ${invocation} ${exports.MOTION_USAGE}`;
226
+ if (typeof args === 'string') {
227
+ console.error(`${args}\n${usage}`);
228
+ return 2;
229
+ }
230
+ const [command, part, motion, ...extra] = args.positional;
231
+ const mode = args.values['--mode'];
232
+ const width = args.values['--width'] === undefined ? null : Number(args.values['--width']);
233
+ const preset = (_a = args.values['--preset']) !== null && _a !== void 0 ? _a : null;
234
+ const scale = Number((_b = args.values['--scale']) !== null && _b !== void 0 ? _b : 1);
235
+ const config = (0, cli_args_1.configOf)(target);
236
+ if (command === 'flow') {
237
+ if (typeof config === 'string') {
238
+ console.error(config);
239
+ return 1;
240
+ }
241
+ return designMotionFlow({ target, config, args, usage });
242
+ }
243
+ if (command !== 'shots' ||
244
+ !part ||
245
+ !motion ||
246
+ extra.length > 0 ||
247
+ args.flags.size > 0 ||
248
+ (mode !== undefined && !motion_shot_1.MOTION_MODES.includes(mode)) ||
249
+ (width !== null && !(Number.isInteger(width) && width > 0)) ||
250
+ (preset && width) ||
251
+ !(Number.isInteger(scale) && scale >= 1 && scale <= 4)) {
252
+ console.error(usage);
253
+ return 2;
254
+ }
255
+ if (typeof config === 'string') {
256
+ console.error(config);
257
+ return 1;
258
+ }
259
+ const resolved = (0, shot_command_1.shotProductOf)({ target, config, asked: args.values['--product'], part });
260
+ if (typeof resolved === 'string') {
261
+ console.error(resolved);
262
+ return 1;
263
+ }
264
+ const product = resolved.name;
265
+ const system = (0, system_modules_1.createSystemModules)({ target, config });
266
+ const variant = args.values['--variant'];
267
+ const sketch = variant === undefined ? null : { target: part, variant };
268
+ const found = system.partOf({ product, part, sketch });
269
+ if (!found) {
270
+ console.error(sketch
271
+ ? `design-explore: variant "${variant}" of the sketch on ${part} in product "${product}" has no part "${part}"`
272
+ : `design-explore: product "${product}" has no part "${part}"`);
273
+ return 1;
274
+ }
275
+ return writeMotionSheet({
276
+ target,
277
+ config,
278
+ system,
279
+ draw: (_a) => __awaiter(void 0, [_a], void 0, function* ({ server, shooter }) {
280
+ var _b, _c, _d, _e;
281
+ const module = (yield server.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file: found.file, product, sketch })));
282
+ const motions = motionsOf(module.default);
283
+ const declared = motions[motion];
284
+ if (!declared)
285
+ return `design-explore: ${part} has no motion "${motion}" (motions: ${Object.keys(motions).join(', ') || 'none'})`;
286
+ const presets = (_c = (_b = system.productOf(product)) === null || _b === void 0 ? void 0 : _b.presets) !== null && _c !== void 0 ? _c : {};
287
+ const chosenPreset = preset !== null && preset !== void 0 ? preset : (part.startsWith('pages/') ? ((_d = Object.keys(presets)[0]) !== null && _d !== void 0 ? _d : null) : null);
288
+ const params = themeParamsOf(args.values);
289
+ const drawn = {};
290
+ for (const shown of modesOf(mode)) {
291
+ drawn[shown] = yield shooter.motionOf({
292
+ product,
293
+ part,
294
+ state: declared.from,
295
+ preset: chosenPreset,
296
+ width: chosenPreset ? null : width,
297
+ sketch,
298
+ interaction: null,
299
+ motion,
300
+ at: declared.at,
301
+ mode: shown,
302
+ params,
303
+ });
304
+ }
305
+ return {
306
+ drawn,
307
+ out: (_e = args.values['--out']) !== null && _e !== void 0 ? _e : `${(0, paths_1.workRootOf)(target)}/shots/${product}-${part.replace('/', '-')}-motion-${motion}.png`,
308
+ report: (0, exports.motionReportOf)({ product, part, motion, declared, preset: chosenPreset, width, drawn }),
309
+ };
310
+ }),
311
+ });
312
+ });
313
+ exports.designMotion = designMotion;
314
+ //# sourceMappingURL=motion-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-command.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/design/motion-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { IncomingMessage, ServerResponse } from 'http';
2
+ import { MotionMode, MotionPictures } from './motion-shot';
3
+ import { PartAddress } from './shot';
4
+ import { SketchVariant, SystemModules } from './system/system-modules';
5
+ export type DeclaredMotion = {
6
+ from: string;
7
+ to: string;
8
+ at?: number[];
9
+ };
10
+ export type MotionDraw = PartAddress & {
11
+ motion: string;
12
+ at?: readonly number[];
13
+ mode: MotionMode;
14
+ params: URLSearchParams;
15
+ };
16
+ /** The JSON `GET /__design/motion` answers: one mode of a motion, its tracks and a URL per keyframe image. */
17
+ export type MotionAnswer = {
18
+ product: string;
19
+ part: string;
20
+ motion: string;
21
+ from: string;
22
+ to: string;
23
+ mode: MotionMode;
24
+ preset: string | null;
25
+ width: number | null;
26
+ end: number;
27
+ tracks: unknown[];
28
+ keyframes: {
29
+ ms: number;
30
+ src: string;
31
+ }[];
32
+ };
33
+ type MotionSource = {
34
+ system: SystemModules;
35
+ motionOf: (draw: MotionDraw) => Promise<MotionPictures>;
36
+ declaredOf: (address: {
37
+ product: string;
38
+ part: string;
39
+ sketch: SketchVariant | null;
40
+ }) => Promise<Record<string, DeclaredMotion>>;
41
+ };
42
+ export declare class MotionRequestError extends Error {
43
+ constructor();
44
+ }
45
+ /**
46
+ * Draws one mode of a motion through `motionOf` and answers its JSON. A page without a preset or width draws at the
47
+ * first product preset, as `et design motion shots` does.
48
+ */
49
+ export declare const motionAnswerOf: (options: MotionSource & {
50
+ url: URL;
51
+ }) => Promise<{
52
+ answer: MotionAnswer;
53
+ pictures: MotionPictures;
54
+ ms: number | null;
55
+ }>;
56
+ /**
57
+ * `GET /__design/motion?product=&part=&motion=` answers a {@link MotionAnswer}; with `&frame=<ms>` it answers the PNG of
58
+ * that keyframe. Takes `sketch`+`variant`, `mode`, `preset` or `width`, `scale`, `surface` and `color` like the shot.
59
+ */
60
+ export declare const motionMiddleware: (source: MotionSource) => (request: IncomingMessage, response: ServerResponse) => void;
61
+ export {};
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.motionMiddleware = exports.motionAnswerOf = exports.MotionRequestError = void 0;
13
+ const motion_shot_1 = require("./motion-shot");
14
+ const studio_api_1 = require("./studio-api");
15
+ const thumb_1 = require("./thumb");
16
+ class MotionRequestError extends Error {
17
+ constructor() {
18
+ super('design-explore: pass product, part, motion, and optionally sketch and variant, mode (full|reduced), preset or width, and frame=<ms>');
19
+ }
20
+ }
21
+ exports.MotionRequestError = MotionRequestError;
22
+ const askedOf = (params) => {
23
+ const product = params.get('product');
24
+ const part = params.get('part');
25
+ const motion = params.get('motion');
26
+ const sketch = params.get('sketch');
27
+ const variant = params.get('variant');
28
+ const preset = params.get('preset');
29
+ const width = params.get('width');
30
+ const mode = params.get('mode');
31
+ const frame = params.get('frame');
32
+ const pixels = width === null ? null : Number(width);
33
+ const ms = frame === null ? null : Number(frame);
34
+ if (!product ||
35
+ !part ||
36
+ !motion ||
37
+ (mode !== null && !motion_shot_1.MOTION_MODES.includes(mode)) ||
38
+ (pixels !== null && !(Number.isInteger(pixels) && pixels > 0)) ||
39
+ (preset && pixels !== null) ||
40
+ (ms !== null && !Number.isFinite(ms)))
41
+ return null;
42
+ return {
43
+ product,
44
+ part,
45
+ motion,
46
+ sketch: sketch && variant ? { target: sketch, variant } : null,
47
+ preset,
48
+ width: pixels,
49
+ mode: (mode !== null && mode !== void 0 ? mode : 'full'),
50
+ ms,
51
+ };
52
+ };
53
+ /**
54
+ * Draws one mode of a motion through `motionOf` and answers its JSON. A page without a preset or width draws at the
55
+ * first product preset, as `et design motion shots` does.
56
+ */
57
+ const motionAnswerOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
58
+ var _a, _b, _c, _d;
59
+ const { system, url } = options;
60
+ const asked = askedOf(url.searchParams);
61
+ if (!asked)
62
+ throw new MotionRequestError();
63
+ const { product, part, motion, sketch, mode } = asked;
64
+ const motions = yield options.declaredOf({ product, part, sketch });
65
+ const declared = motions[motion];
66
+ if (!declared) {
67
+ throw new thumb_1.ThumbMissingError(`design-explore: ${part} has no motion "${motion}" (motions: ${Object.keys(motions).join(', ') || 'none'})`);
68
+ }
69
+ const presets = (_b = (_a = system.productOf(product)) === null || _a === void 0 ? void 0 : _a.presets) !== null && _b !== void 0 ? _b : {};
70
+ const preset = (_c = asked.preset) !== null && _c !== void 0 ? _c : (part.startsWith('pages/') && asked.width === null ? ((_d = Object.keys(presets)[0]) !== null && _d !== void 0 ? _d : null) : null);
71
+ const width = preset ? null : asked.width;
72
+ const pictures = yield options.motionOf({
73
+ product,
74
+ part,
75
+ state: declared.from,
76
+ preset,
77
+ width,
78
+ sketch,
79
+ interaction: null,
80
+ motion,
81
+ at: declared.at,
82
+ mode,
83
+ params: url.searchParams,
84
+ });
85
+ const srcOf = (ms) => {
86
+ const params = new URLSearchParams(url.searchParams);
87
+ params.set('frame', String(ms));
88
+ return `${studio_api_1.MOTION_PATH}?${params}`;
89
+ };
90
+ const answer = {
91
+ product,
92
+ part,
93
+ motion,
94
+ from: declared.from,
95
+ to: declared.to,
96
+ mode,
97
+ preset,
98
+ width,
99
+ end: pictures.end,
100
+ tracks: pictures.tracks,
101
+ keyframes: pictures.keyframes.map(({ ms }) => ({ ms, src: srcOf(ms) })),
102
+ };
103
+ return { answer, pictures, ms: asked.ms };
104
+ });
105
+ exports.motionAnswerOf = motionAnswerOf;
106
+ /**
107
+ * `GET /__design/motion?product=&part=&motion=` answers a {@link MotionAnswer}; with `&frame=<ms>` it answers the PNG of
108
+ * that keyframe. Takes `sketch`+`variant`, `mode`, `preset` or `width`, `scale`, `surface` and `color` like the shot.
109
+ */
110
+ const motionMiddleware = (source) => (request, response) => {
111
+ var _a;
112
+ const url = new URL((_a = request.url) !== null && _a !== void 0 ? _a : '', 'http://localhost');
113
+ const answered = (0, exports.motionAnswerOf)(Object.assign(Object.assign({}, source), { url }));
114
+ answered.catch((error) => {
115
+ if (error instanceof MotionRequestError)
116
+ (0, thumb_1.send)(response, { status: 400, type: 'text/plain; charset=utf-8', body: error.message });
117
+ else
118
+ (0, thumb_1.sendShot)(response, Promise.reject(error));
119
+ });
120
+ void answered.then(({ answer, pictures, ms }) => {
121
+ if (ms === null) {
122
+ (0, thumb_1.send)(response, { status: 200, type: 'application/json', body: JSON.stringify(answer) });
123
+ return;
124
+ }
125
+ const keyframe = pictures.keyframes.find((candidate) => candidate.ms === ms);
126
+ if (keyframe)
127
+ (0, thumb_1.send)(response, { status: 200, type: 'image/png', body: keyframe.png });
128
+ else
129
+ (0, thumb_1.sendShot)(response, Promise.reject(new thumb_1.ThumbMissingError(`design-explore: ${ms} ms is not a keyframe - the keyframes are at ${answer.keyframes.map((frame) => frame.ms).join(', ')} ms`)));
130
+ }, () => undefined);
131
+ };
132
+ exports.motionMiddleware = motionMiddleware;
133
+ //# sourceMappingURL=motion-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-endpoint.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/design/motion-endpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { DesignFlow, FlowLine } from './system/flows/flow';
2
+ /** How `et design motion flow` names a line: its `id`, else `<part>#<state>→<part>#<state>`. */
3
+ export declare const flowLineAddressOf: (line: FlowLine) => string;
4
+ /** The line of `flow` that `address` names and that animates, or why there is none. */
5
+ export declare const flowLineOf: (flow: DesignFlow, address: string) => FlowLine | string;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flowLineOf = exports.flowLineAddressOf = void 0;
4
+ const flow_1 = require("./system/flows/flow");
5
+ const ARROW = /→|->/u;
6
+ /** How `et design motion flow` names a line: its `id`, else `<part>#<state>→<part>#<state>`. */
7
+ const flowLineAddressOf = (line) => { var _a; return (_a = line.id) !== null && _a !== void 0 ? _a : `${(0, flow_1.flowStateKeyOf)(line.from)}→${(0, flow_1.flowStateKeyOf)(line.to)}`; };
8
+ exports.flowLineAddressOf = flowLineAddressOf;
9
+ /** The line of `flow` that `address` names and that animates, or why there is none. */
10
+ const flowLineOf = (flow, address) => {
11
+ const animated = flow.lines.filter((line) => line.transition === 'view').map(exports.flowLineAddressOf);
12
+ const known = `animated lines: ${animated.join(', ') || 'none - give a line "transition": "view"'}`;
13
+ const [from, to, ...rest] = address.split(ARROW).map((end) => end.trim());
14
+ const found = flow.lines.filter((line) => to === undefined || rest.length > 0
15
+ ? line.id === address
16
+ : (0, flow_1.flowStateKeyOf)(line.from) === from && (0, flow_1.flowStateKeyOf)(line.to) === to);
17
+ const [line, ...more] = found;
18
+ if (!line)
19
+ return `flow "${flow.name}" has no line "${address}" (${known})`;
20
+ if (more.length > 0)
21
+ return `flow "${flow.name}" has ${found.length} lines ${address} - give each its own "id" and name it`;
22
+ if (to !== undefined && line.id)
23
+ return `line ${address} of flow "${flow.name}" has the id "${line.id}" - name it by that`;
24
+ if (line.transition !== 'view')
25
+ return `line ${address} of flow "${flow.name}" does not animate - give it "transition": "view" (${known})`;
26
+ return line;
27
+ };
28
+ exports.flowLineOf = flowLineOf;
29
+ //# sourceMappingURL=motion-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-flow.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/design/motion-flow.ts"],"names":[],"mappings":";;;AAAA,8CAA2E;AAE3E,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,gGAAgG;AACzF,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAAE,EAAE,WAClD,OAAA,MAAA,IAAI,CAAC,EAAE,mCAAI,GAAG,IAAA,qBAAc,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAA,qBAAc,EAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA,EAAA,CAAC;AAD1D,QAAA,iBAAiB,qBACyC;AAEvE,uFAAuF;AAChF,MAAM,UAAU,GAAG,CAAC,IAAgB,EAAE,OAAe,EAAqB,EAAE;IACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,yBAAiB,CAAC,CAAC;IAChG,MAAM,KAAK,GAAG,mBAAmB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,yCAAyC,EAAE,CAAC;IACpG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO;QACrB,CAAC,CAAC,IAAA,qBAAc,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAA,qBAAc,EAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CACzE,CAAC;IACF,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAE9B,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,IAAI,CAAC,IAAI,kBAAkB,OAAO,MAAM,KAAK,GAAG,CAAC;IAC5E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QACjB,OAAO,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,MAAM,UAAU,OAAO,uCAAuC,CAAC;IACzG,IAAI,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE;QAC7B,OAAO,QAAQ,OAAO,aAAa,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC5F,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;QAC5B,OAAO,QAAQ,OAAO,aAAa,IAAI,CAAC,IAAI,sDAAsD,KAAK,GAAG,CAAC;IAE7G,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AApBW,QAAA,UAAU,cAoBrB"}