@hatiolab/figure-model 0.1.82 → 0.1.83

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 (40) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/index.d.ts +4 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/v3-authoring-actions.d.ts +2 -0
  7. package/dist/v3-authoring-actions.d.ts.map +1 -1
  8. package/dist/v3-authoring-actions.js +4 -2
  9. package/dist/v3-authoring-actions.js.map +1 -1
  10. package/dist/v3-create.d.ts +14 -0
  11. package/dist/v3-create.d.ts.map +1 -1
  12. package/dist/v3-create.js +2 -1
  13. package/dist/v3-create.js.map +1 -1
  14. package/dist/v3-follow.d.ts +28 -0
  15. package/dist/v3-follow.d.ts.map +1 -0
  16. package/dist/v3-follow.js +68 -0
  17. package/dist/v3-follow.js.map +1 -0
  18. package/dist/v3-graph.d.ts.map +1 -1
  19. package/dist/v3-graph.js +12 -1
  20. package/dist/v3-graph.js.map +1 -1
  21. package/dist/v3-kernel-version.d.ts +1 -1
  22. package/dist/v3-kernel-version.js +1 -1
  23. package/dist/v3-proposal.js +2 -2
  24. package/dist/v3-proposal.js.map +1 -1
  25. package/dist/v3-recipe-build.d.ts +27 -0
  26. package/dist/v3-recipe-build.d.ts.map +1 -0
  27. package/dist/v3-recipe-build.js +118 -0
  28. package/dist/v3-recipe-build.js.map +1 -0
  29. package/dist/v3-recipe-from-parts.d.ts +8 -0
  30. package/dist/v3-recipe-from-parts.d.ts.map +1 -0
  31. package/dist/v3-recipe-from-parts.js +178 -0
  32. package/dist/v3-recipe-from-parts.js.map +1 -0
  33. package/dist/v3-recipe.d.ts +23 -0
  34. package/dist/v3-recipe.d.ts.map +1 -1
  35. package/dist/v3-recipe.js +43 -0
  36. package/dist/v3-recipe.js.map +1 -1
  37. package/package.json +2 -4
  38. package/recipes/hinged-door.json +0 -46
  39. package/recipes/roller-row.json +0 -19
  40. package/recipes/sliding-door.json +0 -69
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3-recipe-build.d.ts","sourceRoot":"","sources":["../src/v3-recipe-build.ts"],"names":[],"mappings":"AAaA,OAAO,EAAiB,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACrG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,wHAAwH;AACxH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,KAAK,CAAC,aAAa,GAAG;QAAE,IAAI,CAAC,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC,CAAA;CAC5D;AAED,MAAM,WAAW,aAAa;IAC5B,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACrC,KAAK,EAAE,OAAO,CAAA;CACf;AAaD,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,EAAE,IAAI,SAAS,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAiFpJ"}
@@ -0,0 +1,118 @@
1
+ /*
2
+ * A recipe built from models (ADR-0095, as amended 2026-09-26: model first, verified, then the recipe).
3
+ *
4
+ * A template is authored as figures -- a `host` box and the template's parts fastened to it -- one figure for each
5
+ * combination of its choices (one leaf or two, a lamp or none). Each model is written as a command list
6
+ * (`v3RecipeFromParts`, the host becoming `{target}`), and the lists are merged into one recipe: a command in every model
7
+ * stays as it is; a command in some is kept with the one `when` that says which. The numbers a person sets are then
8
+ * bound: the spec names the command and the value, and the value becomes `{ param, times }` against its default.
9
+ *
10
+ * So what the recipe does is exactly what the models did -- the build refuses a model set it cannot say that way.
11
+ */
12
+ import { V3ContractError } from "./v3-contract.js";
13
+ import { v3RecipeFromParts } from "./v3-recipe-from-parts.js";
14
+ import { parseV3Recipe } from "./v3-recipe.js";
15
+ const fail = (path, message) => {
16
+ throw new V3ContractError('RECIPE_BUILD', path, message);
17
+ };
18
+ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
19
+ /** Whether a value carries every key the pattern gives, all the way down; anything else equal. */
20
+ const matches = (value, pattern) => pattern && typeof pattern === 'object' && !Array.isArray(pattern)
21
+ ? !!value && typeof value === 'object' && Object.entries(pattern).every(([k, v]) => matches(value[k], v))
22
+ : same(value, pattern);
23
+ export function buildV3Recipe(spec, models, host = 'host') {
24
+ if (!models.length)
25
+ fail('models', 'one model or more');
26
+ const choosers = spec.params.filter(p => p.kind === 'choice' || p.kind === 'flag');
27
+ /* The models are every combination of the choices, once each. */
28
+ let combos = [{}];
29
+ for (const p of choosers) {
30
+ const values = p.kind === 'flag' ? [true, false] : [...(p.options ?? [])];
31
+ combos = combos.flatMap(c => values.map(v => ({ ...c, [p.name]: v })));
32
+ }
33
+ const key = (values) => JSON.stringify(choosers.map(p => values[p.name]));
34
+ const byCombo = new Map(models.map(m => [key(m.values), m]));
35
+ if (byCombo.size !== models.length)
36
+ fail('models', 'two models show the same choices');
37
+ for (const c of combos)
38
+ if (!byCombo.has(key(c)))
39
+ fail('models', `no model shows ${JSON.stringify(c)}; one model is needed for each combination of the choices`);
40
+ if (models.length !== combos.length)
41
+ fail('models', `${models.length} models for ${combos.length} combinations of the choices`);
42
+ /* Each model as commands: every part but the host, the host being what it is put onto. */
43
+ const lists = combos.map(values => {
44
+ const m = byCombo.get(key(values));
45
+ if (!m.asset.appearance.some(a => a.target === host))
46
+ fail(`models.${key(values)}`, `the model has no ${host} part to stand for the part it is put onto`);
47
+ const parts = m.asset.appearance.map(a => a.target).filter(t => t !== host);
48
+ const recipe = v3RecipeFromParts(m.asset, parts, { name: spec.name, title: spec.title });
49
+ if (recipe.target !== 'part')
50
+ fail(`models.${key(values)}`, `the template's parts are not fastened to ${host}`);
51
+ return { values, steps: recipe.steps };
52
+ });
53
+ /* One list of every step, in an order each model keeps: the longest model's, the others' inserted after their predecessor. */
54
+ const merged = [];
55
+ for (const { steps } of [...lists].sort((a, b) => b.steps.length - a.steps.length)) {
56
+ let at = -1;
57
+ for (const step of steps) {
58
+ const found = merged.findIndex(s => same(s, step));
59
+ if (found >= 0)
60
+ at = found;
61
+ else
62
+ merged.splice(++at, 0, step);
63
+ }
64
+ }
65
+ const steps = merged.map(step => {
66
+ const where = lists.filter(l => l.steps.some(s => same(s, step))).map(l => l.values);
67
+ if (where.length === lists.length)
68
+ return step;
69
+ /* The one choice whose value is exactly where this step is. */
70
+ for (const p of choosers) {
71
+ const value = where[0][p.name];
72
+ const those = lists.filter(l => l.values[p.name] === value);
73
+ if (where.every(w => w[p.name] === value) && those.length === where.length)
74
+ return { when: { param: p.name, is: value }, ...step };
75
+ }
76
+ return fail(`steps.${step.kind}`, `${JSON.stringify(step).slice(0, 120)} is in the models of ${JSON.stringify(where)}, which no one choice says`);
77
+ });
78
+ /* Numbers a person sets: the value in the models becomes the parameter times its share. */
79
+ for (const p of spec.params) {
80
+ for (const b of p.bind ?? []) {
81
+ const found = steps.filter(s => matches(s, b.step));
82
+ if (!found.length)
83
+ fail(`params.${p.name}.bind`, `no step matches ${JSON.stringify(b.step)}`);
84
+ for (const s of found) {
85
+ const path = b.path.split('.');
86
+ let at = s;
87
+ for (const k of path.slice(0, -1))
88
+ at = (at?.[k] ?? fail(`params.${p.name}.bind`, `${b.path} is not in the step`));
89
+ const last = path[path.length - 1];
90
+ const v = at[last];
91
+ if (typeof v !== 'number')
92
+ fail(`params.${p.name}.bind`, `${b.path} is not a number in the step`);
93
+ if (p.kind !== 'ratio' && p.kind !== 'mm')
94
+ fail(`params.${p.name}`, `${p.name} is a ${p.kind}; only a ratio or a length is bound to a number`);
95
+ const d = p.default;
96
+ /* A share whose default is none (a position at the middle) is the number itself: the model's must be none too. */
97
+ if (d === 0 && v !== 0)
98
+ fail(`params.${p.name}.bind`, `${p.name} is 0 by default, so ${b.path} must be 0 in the models; it is ${String(v)}`);
99
+ const times = d === 0 ? 1 : Math.round((v / d) * 1e9) / 1e9;
100
+ at[last] = times === 1 ? { param: p.name } : { param: p.name, times };
101
+ }
102
+ }
103
+ }
104
+ const params = spec.params.map(({ bind: _bind, ...p }) => p);
105
+ const recipe = {
106
+ name: spec.name,
107
+ title: spec.title,
108
+ ...(spec.description ? { description: spec.description } : {}),
109
+ ...(spec.category ? { category: spec.category } : {}),
110
+ ...(spec.tags ? { tags: spec.tags } : {}),
111
+ target: 'part',
112
+ params,
113
+ steps
114
+ };
115
+ parseV3Recipe(recipe);
116
+ return recipe;
117
+ }
118
+ //# sourceMappingURL=v3-recipe-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3-recipe-build.js","sourceRoot":"","sources":["../src/v3-recipe-build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { V3Asset } from './v3-asset-types.ts';
2
+ import type { V3Recipe } from './v3-recipe.ts';
3
+ export declare function v3RecipeFromParts(asset: V3Asset, parts: readonly string[], meta: {
4
+ name: string;
5
+ title: Record<string, string>;
6
+ description?: Record<string, string>;
7
+ }): V3Recipe;
8
+ //# sourceMappingURL=v3-recipe-from-parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3-recipe-from-parts.d.ts","sourceRoot":"","sources":["../src/v3-recipe-from-parts.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAqC9C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1F,QAAQ,CA4GV"}
@@ -0,0 +1,178 @@
1
+ /*
2
+ * A recipe made from parts already in a figure (ADR-0095): the person builds a door once, chooses its parts, and keeps
3
+ * them as a recipe -- no command list typed by hand.
4
+ *
5
+ * What is written is what the kernel already holds as canon: each part's shape at its measures now, its fastening and
6
+ * motion as the joint record says (ADR-0093), each measure that follows something as the link it is (`v3FollowOf`), its
7
+ * material and when it is shown. Names are the recipe's own: a chosen part becomes `{id}-<its name>`, the one part they
8
+ * hang from outside the choice becomes `{target}`, and a control of theirs `{id}-<its name>`. The common beginning of
9
+ * the chosen names (`sliding-door-1-`) is left off, so a recipe made of a recipe's parts does not stack names.
10
+ *
11
+ * It has no parameters: which numbers are left open is the person's to say afterwards, in the source.
12
+ */
13
+ import { V3ContractError } from "./v3-contract.js";
14
+ import { compileV3Graph } from "./v3-graph.js";
15
+ import { v3FollowOf } from "./v3-follow.js";
16
+ const AXES = ['x', 'y', 'z'];
17
+ /** A shape the recipe can make again: its create kind, its measures in order, and the axes they lie along. */
18
+ const SHAPES = {
19
+ 'box-shape@1': { kind: 'box', keys: ['width', 'height', 'depth'], along: ['x', 'y', 'z'] },
20
+ 'rounded-box@1': { kind: 'rounded-box', keys: ['width', 'height', 'depth', 'round'], along: ['x', 'y', 'z'] },
21
+ 'portal-profile@2': { kind: 'portal', keys: ['width', 'height', 'depth', 'jamb', 'head'], along: ['x', 'y', 'z'] },
22
+ 'hollow-box@2': { kind: 'hollow-box', keys: ['width', 'height', 'depth', 'roundX', 'roundZ', 'wallX', 'wallZ', 'floor'], along: ['x', 'y', 'z'] },
23
+ 'cylinder-shape@1': { kind: 'cylinder', keys: ['radius', 'length'], along: ['x', 'y'] },
24
+ 'sphere-shape@1': { kind: 'sphere', keys: ['radiusX', 'radiusY', 'radiusZ'], along: [] },
25
+ 'frustum-shape@1': { kind: 'frustum', keys: ['radiusTop', 'radiusBottom', 'height'], along: [] }
26
+ };
27
+ const fail = (path, message) => {
28
+ throw new V3ContractError('RECIPE_FROM_PARTS', path, message);
29
+ };
30
+ /** The keys whose value is a name: a part's, a joint's, a control's. A face or an axis is a word, never renamed. */
31
+ const NAMED = new Set(['part', 'id', 'joint', 'input']);
32
+ /**
33
+ * The names in a value renamed, where they stand as names. A part called `left` and the face `left` are the same
34
+ * string; renaming every such string turned a leaf's face into `{id}-left` (a double door's model, 2026-09-26).
35
+ */
36
+ function renamed(value, names) {
37
+ const walk = (v, key) => {
38
+ if (typeof v === 'string')
39
+ return key && NAMED.has(key) ? (names.get(v) ?? v) : v;
40
+ if (Array.isArray(v))
41
+ return v.map(x => walk(x, key));
42
+ if (v && typeof v === 'object')
43
+ return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, walk(x, k)]));
44
+ return v;
45
+ };
46
+ return walk(value);
47
+ }
48
+ export function v3RecipeFromParts(asset, parts, meta) {
49
+ const chosen = new Set(parts);
50
+ if (!chosen.size)
51
+ fail('parts', 'choose the parts to keep as a recipe');
52
+ const model = asset.document.model;
53
+ const joints = (asset.joints ?? []);
54
+ for (const p of chosen)
55
+ if (!asset.appearance.some(a => a.target === p))
56
+ fail(`parts.${p}`, `${p} is not a part`);
57
+ /* Each chosen part is fastened: to the plane, to another chosen part, or to the one part outside they hang from. */
58
+ const jointOf = new Map();
59
+ const outside = new Set();
60
+ for (const p of chosen) {
61
+ const j = joints.find(o => o.body1.part === p);
62
+ if (!j)
63
+ fail(`parts.${p}`, `${p} is not fastened to anything; a recipe puts in parts where they are fastened -- fasten it first`);
64
+ jointOf.set(p, j);
65
+ if ('part' in j.body0 && !chosen.has(j.body0.part))
66
+ outside.add(j.body0.part);
67
+ }
68
+ if (outside.size > 1)
69
+ fail('parts', `the parts hang from ${[...outside].join(' and ')}; a recipe is put onto one part -- choose parts that hang from one`);
70
+ const target = [...outside][0];
71
+ /* A chosen part's measure following a part outside the choice other than the target has nothing to follow when put in. */
72
+ const values = compileV3Graph(asset.document.model).evaluate({ ...asset.designInputs, ...asset.stateDefaults }).values;
73
+ /* The names: the chosen parts' common beginning left off. */
74
+ const list = [...chosen];
75
+ let common = list.length > 1 ? list.reduce((a, b) => {
76
+ let i = 0;
77
+ while (i < a.length && a[i] === b[i])
78
+ i++;
79
+ return a.slice(0, i);
80
+ }) : '';
81
+ common = common.slice(0, common.lastIndexOf('-') + 1);
82
+ /* Only a name a recipe gave (`sliding-door-1-`): parts that merely share a word (`leg-1`, `leg-2`) keep their names. */
83
+ if (!/-\d+-$/.test(common))
84
+ common = '';
85
+ const local = (name) => (common && name.startsWith(common) ? name.slice(common.length) : name) || name;
86
+ const names = new Map();
87
+ for (const p of chosen)
88
+ names.set(p, `{id}-${local(p)}`);
89
+ for (const j of jointOf.values()) {
90
+ names.set(j.id, names.get(j.id) ?? `{id}-${local(j.id)}`);
91
+ if (j.state?.id)
92
+ names.set(j.state.id, `{id}-${local(j.state.id)}`);
93
+ }
94
+ if (target)
95
+ names.set(target, '{target}');
96
+ /* Parents first: a part is fastened after what it hangs from is there. */
97
+ const order = [];
98
+ const visit = (p, path) => {
99
+ if (order.includes(p))
100
+ return;
101
+ if (path.has(p))
102
+ fail(`parts.${p}`, 'the fastenings go round in a loop');
103
+ const j = jointOf.get(p);
104
+ if ('part' in j.body0 && chosen.has(j.body0.part))
105
+ visit(j.body0.part, new Set([...path, p]));
106
+ order.push(p);
107
+ };
108
+ for (const p of list)
109
+ visit(p, new Set());
110
+ const steps = [];
111
+ for (const p of order) {
112
+ const shape = model.nodes.find(n => n.id === `${p}.shape`);
113
+ const how = shape && SHAPES[shape.op];
114
+ if (!how)
115
+ fail(`parts.${p}`, `${p} is a ${shape?.op ?? 'shape'} a recipe cannot make again yet`);
116
+ const dimensions = Object.fromEntries(how.keys.map((key, i) => [key, Math.round((values[shape.args[i]] ?? NaN) * 1000) / 1000]));
117
+ if (Object.values(dimensions).some(v => !Number.isFinite(v)))
118
+ fail(`parts.${p}`, `${p}'s measures could not be read`);
119
+ steps.push({ kind: 'add-part', part: { id: names.get(p), kind: how.kind, dimensions } });
120
+ }
121
+ for (const p of order) {
122
+ const shape = model.nodes.find(n => n.id === `${p}.shape`);
123
+ for (const axis of SHAPES[shape.op].along) {
124
+ const f = v3FollowOf(asset, p, axis);
125
+ if (f.of === 'own' || f.of === 'expression' || f.of === 'input')
126
+ continue;
127
+ const scale = { ...(f.times !== undefined && f.times !== 1 ? { times: f.times } : {}), ...(f.plus ? { plus: f.plus } : {}) };
128
+ if (f.of === 'part') {
129
+ if (f.part !== target && !chosen.has(f.part))
130
+ fail(`parts.${p}.${axis}`, `${p}'s ${axis} follows ${f.part}, which is not in the recipe nor what it is put onto`);
131
+ steps.push({ kind: 'link-dimension', part: names.get(p), axis, source: { of: 'part', part: names.get(f.part), axis: f.axis }, ...scale, narrowRange: true });
132
+ }
133
+ else if (target) {
134
+ /* The figure's size is not the one it goes into: it follows the part it is put onto, in the proportion it has now. */
135
+ const targetShape = model.nodes.find(n => n.id === `${target}.shape`);
136
+ const along = targetShape && SHAPES[targetShape.op]?.along.includes(f.axis);
137
+ const targetMeasure = along ? values[targetShape.args[AXES.indexOf(f.axis)]] : undefined;
138
+ const size = asset.designInputs[`size.${f.axis}`];
139
+ if (!targetMeasure || !size)
140
+ fail(`parts.${p}.${axis}`, `${p}'s ${axis} follows the figure's size, and ${target} has no ${f.axis} measure to follow instead`);
141
+ const times = Math.round(((f.times * size) / targetMeasure) * 1e6) / 1e6;
142
+ steps.push({ kind: 'link-dimension', part: names.get(p), axis, source: { of: 'part', part: '{target}', axis: f.axis }, ...(times !== 1 ? { times } : {}), ...(f.plus ? { plus: f.plus } : {}), narrowRange: true });
143
+ }
144
+ else {
145
+ steps.push({ kind: 'link-dimension', part: names.get(p), axis, source: { of: 'instance', axis: f.axis }, ...scale, narrowRange: true });
146
+ }
147
+ }
148
+ }
149
+ /* A joint that rows its part makes the largest size finite where it goes: narrowed there, as make-repeat is. */
150
+ for (const p of order)
151
+ steps.push({ kind: 'set-joint', joint: renamed(jointOf.get(p), names), ...(jointOf.get(p).repeat ? { narrowRange: true } : {}) });
152
+ for (const p of order) {
153
+ const look = asset.appearance.find(a => a.target === p);
154
+ /* The colours this part uses, and only those: the same part is written the same way whatever else is chosen. */
155
+ const palette = {};
156
+ for (const token of [look.material.token, look.material.emissive?.token].filter(Boolean))
157
+ if (asset.palette[token])
158
+ palette[token] = asset.palette[token];
159
+ steps.push({ kind: 'set-material', target: names.get(p), material: look.material, ...(Object.keys(palette).length ? { palette } : {}) });
160
+ if (look.segments)
161
+ steps.push({ kind: 'set-segments', target: names.get(p), segments: look.segments });
162
+ if (look.visibility) {
163
+ const node = model.nodes.find(n => n.op === 'at-least@1' && Object.values(n.outputs).includes(look.visibility));
164
+ const at = node && model.constants.find(c => c.id === node.args[1]);
165
+ if (node && at)
166
+ steps.push({ kind: 'set-visibility', target: names.get(p), shownWhen: { input: names.get(node.args[0]) ?? node.args[0], atLeast: at.value } });
167
+ }
168
+ }
169
+ return {
170
+ name: meta.name,
171
+ title: meta.title,
172
+ ...(meta.description ? { description: meta.description } : {}),
173
+ target: target ? 'part' : 'figure',
174
+ params: [],
175
+ steps
176
+ };
177
+ }
178
+ //# sourceMappingURL=v3-recipe-from-parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3-recipe-from-parts.js","sourceRoot":"","sources":["../src/v3-recipe-from-parts.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ export interface V3RecipeParam {
12
12
  /** `face` and `choice`: the values it takes. */
13
13
  options?: V3RecipeValue[];
14
14
  label?: Record<string, string>;
15
+ /** What the value does, in a few words per language: shown beside the field and in the catalog. */
16
+ hint?: Record<string, string>;
15
17
  }
16
18
  export interface V3Recipe {
17
19
  name: string;
@@ -55,4 +57,25 @@ export declare function v3RecipeTestRoom(): {
55
57
  * passing the release gate. Throws the kernel's refusal, or `RECIPE_GATE` with the gate's findings.
56
58
  */
57
59
  export declare function checkV3Recipe(value: unknown): V3Recipe;
60
+ /** What a recipe adds, worked out from its steps: for a catalog, so what it says is what the recipe does. */
61
+ export interface V3RecipeDescription {
62
+ /** How many parts it adds: fewest and most over its choices. */
63
+ parts: {
64
+ min: number;
65
+ max: number;
66
+ };
67
+ /** Each part that moves on a joint: sliding or turning, and whose motion it follows. */
68
+ moves: Array<{
69
+ part: string;
70
+ kind: 'slide' | 'turn';
71
+ follows?: string;
72
+ }>;
73
+ /** The controls it adds. */
74
+ controls: string[];
75
+ /** The parts shown only while a control is at least a value. */
76
+ shownByControl: string[];
77
+ /** The parts laid as a row of copies. */
78
+ rows: string[];
79
+ }
80
+ export declare function describeV3Recipe(recipe: V3Recipe): V3RecipeDescription;
58
81
  //# sourceMappingURL=v3-recipe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v3-recipe.d.ts","sourceRoot":"","sources":["../src/v3-recipe.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAA;AAC3E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAErD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,aAAa,CAAA;IACtB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,6GAA6G;IAC7G,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAA;IACzB,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,oDAAoD;IACpD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACtC;AAUD,gHAAgH;AAChH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAoCtD;AA8BD,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAMpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CAAE,GAAG,cAAc,EAAE,CAgChJ;AAED,uHAAuH;AACvH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAKrK;AAED,qHAAqH;AACrH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAOtD"}
1
+ {"version":3,"file":"v3-recipe.d.ts","sourceRoot":"","sources":["../src/v3-recipe.ts"],"names":[],"mappings":"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"}
package/dist/v3-recipe.js CHANGED
@@ -43,6 +43,9 @@ export function parseV3Recipe(value) {
43
43
  if (!KINDS.includes(p.kind))
44
44
  fail(`${at}.kind`, `one of ${KINDS.join(', ')}`);
45
45
  checkValue(p, p.default, `${at}.default`);
46
+ for (const words of ['label', 'hint'])
47
+ if (p[words] !== undefined && (!isObject(p[words]) || !Object.values(p[words]).every(t => typeof t === 'string')))
48
+ fail(`${at}.${words}`, `${words} is words per language`);
46
49
  });
47
50
  if (!Array.isArray(r.steps) || !r.steps.length)
48
51
  fail('steps', 'one step or more');
@@ -191,4 +194,44 @@ export function checkV3Recipe(value) {
191
194
  throw new V3ContractError('RECIPE_GATE', recipe.name, findings.map(f => `${f.code}: ${f.detail}`).join('; '));
192
195
  return recipe;
193
196
  }
197
+ export function describeV3Recipe(recipe) {
198
+ const choosers = recipe.params.filter(p => p.kind === 'choice' || p.kind === 'flag');
199
+ /* Every combination of the choices: a handful, as a recipe has few. */
200
+ let combos = [{}];
201
+ for (const p of choosers) {
202
+ const values = p.kind === 'flag' ? [true, false] : (p.options ?? [p.default]);
203
+ combos = combos.flatMap(c => values.map(v => ({ ...c, [p.name]: v })));
204
+ }
205
+ const holds = (step, values) => {
206
+ const w = step.when;
207
+ return !w || values[w.param] === w.is;
208
+ };
209
+ const counts = combos.map(values => recipe.steps.filter(s => s.kind === 'add-part' && holds(s, values)).length);
210
+ const moves = [];
211
+ const controls = [];
212
+ for (const step of recipe.steps) {
213
+ if (step.kind !== 'set-joint')
214
+ continue;
215
+ const j = step.joint;
216
+ if (j.type !== 'prismatic' && j.type !== 'revolute' && j.type !== 'continuous')
217
+ continue;
218
+ if (moves.some(m => m.part === j.body1.part))
219
+ continue;
220
+ moves.push({ part: j.body1.part, kind: j.type === 'prismatic' ? 'slide' : 'turn', ...(j.mimic ? { follows: j.mimic.joint } : {}) });
221
+ if (!j.mimic) {
222
+ const control = j.state?.id ?? j.id;
223
+ if (!controls.includes(control))
224
+ controls.push(control);
225
+ }
226
+ }
227
+ const shownByControl = [...new Set(recipe.steps.filter(s => s.kind === 'set-visibility' && s.shownWhen).map(s => s.target))];
228
+ /* A row is made by make-repeat, or written as its joint record (a recipe built from a model). */
229
+ const rows = [
230
+ ...new Set([
231
+ ...recipe.steps.filter(s => s.kind === 'make-repeat').map(s => s.part),
232
+ ...recipe.steps.filter(s => s.kind === 'set-joint' && s.joint.repeat).map(s => s.joint.body1.part)
233
+ ])
234
+ ];
235
+ return { parts: { min: Math.min(...counts), max: Math.max(...counts) }, moves, controls, shownByControl, rows };
236
+ }
194
237
  //# sourceMappingURL=v3-recipe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"v3-recipe.js","sourceRoot":"","sources":["../src/v3-recipe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v3-recipe.js","sourceRoot":"","sources":["../src/v3-recipe.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatiolab/figure-model",
3
- "version": "0.1.82",
3
+ "version": "0.1.83",
4
4
  "description": "The figure format (figure-v3-asset-1): a kernel that evaluates a figure from its declared relations, the authoring commands a modeller and an AI share, the release gate and the score.",
5
5
  "keywords": [
6
6
  "figure",
@@ -30,12 +30,10 @@
30
30
  "types": "./dist/index.d.ts",
31
31
  "default": "./dist/index.js"
32
32
  },
33
- "./package.json": "./package.json",
34
- "./recipes/*": "./recipes/*"
33
+ "./package.json": "./package.json"
35
34
  },
36
35
  "files": [
37
36
  "dist",
38
- "recipes",
39
37
  "docs",
40
38
  "README.md",
41
39
  "CHANGELOG.md"
@@ -1,46 +0,0 @@
1
- {
2
- "name": "hinged-door",
3
- "title": { "ko": "여닫이 문", "en": "hinged door" },
4
- "description": {
5
- "ko": "고른 부품의 앞면에 문틀과 여닫이 문짝을 넣습니다. 문틀은 그 부품의 폭과 높이를 따르고, 문짝은 경첩 쪽을 축으로 90° 열립니다.",
6
- "en": "A frame and a hinged leaf on the chosen part's front. The frame follows the part's width and height; the leaf swings 90° about its hinge."
7
- },
8
- "target": "part",
9
- "params": [
10
- { "name": "share", "kind": "ratio", "default": 0.25, "min": 0.05, "max": 0.95, "label": { "ko": "문틀 폭 (부품 폭에 대해)", "en": "frame width (of the part's)" } },
11
- { "name": "height", "kind": "ratio", "default": 0.8, "min": 0.3, "max": 1, "label": { "ko": "문틀 높이 (부품 높이에 대해)", "en": "frame height (of the part's)" } },
12
- { "name": "hinge", "kind": "choice", "default": "left", "options": ["left", "right"], "label": { "ko": "경첩 쪽", "en": "hinge side" } }
13
- ],
14
- "steps": [
15
- { "kind": "add-part", "part": { "id": "{id}-frame", "kind": "portal", "dimensions": { "width": 1000, "height": 2200, "depth": 150, "jamb": 100, "head": 100 } } },
16
- { "kind": "attach", "part": "{id}-frame", "face": "back", "to": { "part": "{target}", "face": "front" }, "align": { "y": "min" } },
17
- { "kind": "link-dimension", "part": "{id}-frame", "axis": "x", "source": { "of": "part", "part": "{target}", "axis": "x" }, "times": { "param": "share" }, "narrowRange": true },
18
- { "kind": "link-dimension", "part": "{id}-frame", "axis": "y", "source": { "of": "part", "part": "{target}", "axis": "y" }, "times": { "param": "height" }, "narrowRange": true },
19
-
20
- { "kind": "add-part", "part": { "id": "{id}-leaf", "kind": "box", "dimensions": { "width": 790, "height": 2090, "depth": 40 } } },
21
- { "kind": "link-dimension", "part": "{id}-leaf", "axis": "x", "source": { "of": "part", "part": "{id}-frame", "axis": "x" }, "plus": -210, "narrowRange": true },
22
- { "kind": "link-dimension", "part": "{id}-leaf", "axis": "y", "source": { "of": "part", "part": "{id}-frame", "axis": "y" }, "plus": -110, "narrowRange": true },
23
- {
24
- "when": { "param": "hinge", "is": "left" },
25
- "kind": "set-joint",
26
- "joint": {
27
- "id": "{id}-leaf", "type": "revolute",
28
- "body0": { "part": "{id}-frame", "face": "opening-left" }, "body1": { "part": "{id}-leaf", "face": "left" },
29
- "origin": { "facing": "meet", "gap": 5, "align": { "y": "min", "z": "max" } },
30
- "axis": "Y", "lowerLimit": -90, "upperLimit": 0,
31
- "state": { "id": "{id}-open" }
32
- }
33
- },
34
- {
35
- "when": { "param": "hinge", "is": "right" },
36
- "kind": "set-joint",
37
- "joint": {
38
- "id": "{id}-leaf", "type": "revolute",
39
- "body0": { "part": "{id}-frame", "face": "opening-right" }, "body1": { "part": "{id}-leaf", "face": "right" },
40
- "origin": { "facing": "meet", "gap": 5, "align": { "y": "min", "z": "max" } },
41
- "axis": "Y", "lowerLimit": 0, "upperLimit": 90,
42
- "state": { "id": "{id}-open" }
43
- }
44
- }
45
- ]
46
- }
@@ -1,19 +0,0 @@
1
- {
2
- "name": "roller-row",
3
- "title": { "ko": "롤러 줄", "en": "roller row" },
4
- "description": {
5
- "ko": "고른 부품의 윗면에 롤러를 한 줄로 깝니다. 롤러는 그 부품의 폭을 가로지르고, 길이를 따라 간격마다 들어갑니다.",
6
- "en": "A row of rollers on the chosen part's top, across its depth, as many as fit along its length at the pitch."
7
- },
8
- "target": "part",
9
- "params": [
10
- { "name": "pitch", "kind": "mm", "default": 200, "min": 20, "max": 2000, "label": { "ko": "롤러 간격 (mm)", "en": "pitch (mm)" } },
11
- { "name": "radius", "kind": "mm", "default": 30, "min": 5, "max": 500, "label": { "ko": "롤러 반지름 (mm)", "en": "roller radius (mm)" } }
12
- ],
13
- "steps": [
14
- { "kind": "add-part", "part": { "id": "{id}-roller", "kind": "cylinder", "dimensions": { "radius": "{radius}", "length": 500 }, "rotation": { "x": 90, "y": 0, "z": 0 } } },
15
- { "kind": "link-dimension", "part": "{id}-roller", "axis": "y", "source": { "of": "part", "part": "{target}", "axis": "z" }, "times": 0.9, "narrowRange": true },
16
- { "kind": "attach", "part": "{id}-roller", "face": "bottom", "to": { "part": "{target}", "face": "top" } },
17
- { "kind": "make-repeat", "part": "{id}-roller", "axis": "x", "pitch": "{pitch}", "narrowRange": true }
18
- ]
19
- }