@hatiolab/figure-model 0.1.31 → 0.1.33

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 (49) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/sizing.d.ts +11 -0
  6. package/dist/sizing.d.ts.map +1 -1
  7. package/dist/sizing.js +8 -4
  8. package/dist/sizing.js.map +1 -1
  9. package/dist/v3-asset-types.d.ts +24 -2
  10. package/dist/v3-asset-types.d.ts.map +1 -1
  11. package/dist/v3-asset.d.ts.map +1 -1
  12. package/dist/v3-asset.js +17 -3
  13. package/dist/v3-asset.js.map +1 -1
  14. package/dist/v3-capabilities.d.ts.map +1 -1
  15. package/dist/v3-capabilities.js +13 -1
  16. package/dist/v3-capabilities.js.map +1 -1
  17. package/dist/v3-create.d.ts +36 -0
  18. package/dist/v3-create.d.ts.map +1 -1
  19. package/dist/v3-create.js +108 -7
  20. package/dist/v3-create.js.map +1 -1
  21. package/dist/v3-editor-workspace.d.ts +34 -1
  22. package/dist/v3-editor-workspace.d.ts.map +1 -1
  23. package/dist/v3-editor-workspace.js +62 -13
  24. package/dist/v3-editor-workspace.js.map +1 -1
  25. package/dist/v3-from-v2.d.ts +70 -0
  26. package/dist/v3-from-v2.d.ts.map +1 -0
  27. package/dist/v3-from-v2.js +595 -0
  28. package/dist/v3-from-v2.js.map +1 -0
  29. package/dist/v3-gate.d.ts +35 -0
  30. package/dist/v3-gate.d.ts.map +1 -0
  31. package/dist/v3-gate.js +131 -0
  32. package/dist/v3-gate.js.map +1 -0
  33. package/dist/v3-graph-types.d.ts +1 -1
  34. package/dist/v3-graph-types.d.ts.map +1 -1
  35. package/dist/v3-graph.d.ts +8 -0
  36. package/dist/v3-graph.d.ts.map +1 -1
  37. package/dist/v3-graph.js +99 -10
  38. package/dist/v3-graph.js.map +1 -1
  39. package/dist/v3-part-edit.d.ts.map +1 -1
  40. package/dist/v3-part-edit.js +12 -4
  41. package/dist/v3-part-edit.js.map +1 -1
  42. package/docs/prototypes/v3-asset-samples.mjs +1 -1
  43. package/docs/prototypes/v3-asset.schema.json +1 -1
  44. package/docs/v3-asset-persistence.md +3 -1
  45. package/docs/v3-design.md +3 -0
  46. package/docs/v3-operator-contracts.md +4 -0
  47. package/docs/v3-review-2026-09-22.md +127 -0
  48. package/docs/v3-status.md +9 -0
  49. package/package.json +1 -1
package/dist/v3-create.js CHANGED
@@ -3,17 +3,73 @@ import { V3ContractError } from "./v3-contract.js";
3
3
  /** New assets start empty. A box is created only by an explicit authoring action. */
4
4
  export function createV3Asset(name) {
5
5
  const asset = {
6
- version: 'figure-v3-asset-experiment-1', name,
6
+ version: 'figure-v3-asset-1',
7
+ name,
7
8
  document: {
8
9
  version: 'figure-v3-prototype-1',
9
10
  model: { version: 'r3-spatial-1', inputs: [], constants: [], nodes: [] },
10
11
  capabilities: { version: 'r3-capability-3', assetFrame: 'asset', bindings: [] }
11
12
  },
12
- designInputs: {}, stateDefaults: {}, palette: { 'palette.primary': '#477b9e' }, appearance: []
13
+ designInputs: {},
14
+ stateDefaults: {},
15
+ palette: { 'palette.primary': '#477b9e' },
16
+ appearance: []
13
17
  };
14
18
  compileV3Asset(asset);
15
19
  return asset;
16
20
  }
21
+ /** Authoring recipes use existing providers; they introduce no extra evaluation rules. */
22
+ export function addV3Primitive(source, part) {
23
+ const recipes = {
24
+ box: { op: 'box-shape@1', keys: ['width', 'height', 'depth'] },
25
+ cylinder: { op: 'cylinder-shape@1', keys: ['radius', 'length'] },
26
+ 'rounded-box': { op: 'rounded-box@1', keys: ['width', 'height', 'depth', 'round'] },
27
+ portal: {
28
+ op: 'portal-profile@1',
29
+ keys: ['left', 'right', 'bottom', 'top', 'openingLeft', 'openingRight', 'openingTop', 'depth']
30
+ }
31
+ };
32
+ if (!part || !Object.hasOwn(recipes, part.kind))
33
+ throw new V3ContractError('PROVIDER', 'part', 'unknown primitive');
34
+ const recipe = recipes[part.kind];
35
+ if (!part.dimensions ||
36
+ Object.keys(part.dimensions).length !== recipe.keys.length ||
37
+ recipe.keys.some(k => !Object.hasOwn(part.dimensions, k)))
38
+ throw new V3ContractError('SCHEMA', part.id, 'provider dimensions must match declared fields');
39
+ const asset = addV3Box(source, {
40
+ id: part.id,
41
+ size: { x: 1, y: 1, z: 1 },
42
+ position: part.position,
43
+ ...(part.rotation ? { rotation: part.rotation } : {}),
44
+ ...(part.material ? { material: part.material } : {})
45
+ });
46
+ const model = asset.document.model, removed = new Set(['x', 'y', 'z'].map(a => part.id + '.size.' + a));
47
+ model.inputs = model.inputs.filter(i => !removed.has(i.id));
48
+ for (const id of removed)
49
+ delete asset.designInputs[id];
50
+ const shape = model.nodes.find(n => n.id === part.id + '.shape');
51
+ shape.op = recipe.op;
52
+ shape.args = [];
53
+ const existing = new Set([
54
+ ...model.inputs.map(i => i.id),
55
+ ...model.constants.map(c => c.id),
56
+ ...model.nodes.flatMap(n => [n.id, ...Object.values(n.outputs)])
57
+ ]);
58
+ for (const key of recipe.keys) {
59
+ const id = part.id + '.dimension.' + key, value = part.dimensions[key];
60
+ if (existing.has(id))
61
+ throw new V3ContractError('DUPLICATE_WRITER', id, 'input already exists');
62
+ if (!Number.isFinite(value))
63
+ throw new V3ContractError('NON_FINITE', id, 'finite dimension required');
64
+ model.inputs.push({ id, unit: 'mm', min: -Number.MAX_VALUE, max: Number.MAX_VALUE, role: 'design' });
65
+ asset.designInputs[id] = value;
66
+ shape.args.push(id);
67
+ }
68
+ if (part.kind === 'cylinder')
69
+ asset.appearance.find(a => a.target === part.id).segments = 12;
70
+ compileV3Asset(asset);
71
+ return asset;
72
+ }
17
73
  /** Pure authoring operation. Expands to standard graph operators, not a second runtime geometry model. */
18
74
  export function addV3Box(source, box) {
19
75
  compileV3Asset(source);
@@ -21,9 +77,31 @@ export function addV3Box(source, box) {
21
77
  throw new V3ContractError('ID', 'box', 'letter-led part ID required');
22
78
  }
23
79
  const asset = structuredClone(source), model = asset.document.model, prefix = box.id;
24
- const keys = ['size.x', 'size.y', 'size.z', 'position.x', 'position.y', 'position.z', 'rotation.x', 'rotation.y', 'rotation.z'];
25
- const reserved = new Set([prefix, `${prefix}.shape`, `${prefix}.shapeValue`, `${prefix}.pose`, `${prefix}.poseValue`, `${prefix}.placed`, ...keys.map(k => `${prefix}.${k}`)]);
26
- const existing = [...model.inputs.map(i => i.id), ...model.constants.map(c => c.id), ...model.nodes.flatMap(n => [n.id, ...Object.values(n.outputs)])];
80
+ const keys = [
81
+ 'size.x',
82
+ 'size.y',
83
+ 'size.z',
84
+ 'position.x',
85
+ 'position.y',
86
+ 'position.z',
87
+ 'rotation.x',
88
+ 'rotation.y',
89
+ 'rotation.z'
90
+ ];
91
+ const reserved = new Set([
92
+ prefix,
93
+ `${prefix}.shape`,
94
+ `${prefix}.shapeValue`,
95
+ `${prefix}.pose`,
96
+ `${prefix}.poseValue`,
97
+ `${prefix}.placed`,
98
+ ...keys.map(k => `${prefix}.${k}`)
99
+ ]);
100
+ const existing = [
101
+ ...model.inputs.map(i => i.id),
102
+ ...model.constants.map(c => c.id),
103
+ ...model.nodes.flatMap(n => [n.id, ...Object.values(n.outputs)])
104
+ ];
27
105
  if (existing.some(id => reserved.has(id)))
28
106
  throw new V3ContractError('DUPLICATE_PART', prefix, 'part IDs overlap existing graph identifiers');
29
107
  const rotation = box.rotation ?? { x: 0, y: 0, z: 0 };
@@ -37,12 +115,35 @@ export function addV3Box(source, box) {
37
115
  throw new V3ContractError('GEOMETRY_DOMAIN', `${prefix}.${group}.${axis}`, 'finite value and positive size required');
38
116
  const id = `${prefix}.${group}.${axis}`;
39
117
  // These are broad authoring limits, not a rendering safety/performance guarantee.
40
- model.inputs.push({ id, unit: group === 'rotation' ? 'deg' : 'mm', min: group === 'size' ? Number.MIN_VALUE : -Number.MAX_VALUE, max: Number.MAX_VALUE, role: 'design' });
118
+ model.inputs.push({
119
+ id,
120
+ unit: group === 'rotation' ? 'deg' : 'mm',
121
+ min: group === 'size' ? Number.MIN_VALUE : -Number.MAX_VALUE,
122
+ max: Number.MAX_VALUE,
123
+ role: 'design'
124
+ });
41
125
  asset.designInputs[id] = value;
42
126
  }
43
127
  }
44
128
  const local = `${prefix}.local`;
45
- model.nodes.push({ id: `${prefix}.shape`, op: 'box-shape@1', args: keys.slice(0, 3).map(k => `${prefix}.${k}`), outputs: { shape: `${prefix}.shapeValue` }, params: { frame: local } }, { id: `${prefix}.pose`, op: 'rigid@1', args: keys.slice(3).map(k => `${prefix}.${k}`), outputs: { pose: `${prefix}.poseValue` }, params: { from: local, to: asset.document.capabilities.assetFrame } }, { id: prefix, op: 'place@1', args: [`${prefix}.shapeValue`, `${prefix}.poseValue`], outputs: { placed: `${prefix}.placed` } });
129
+ model.nodes.push({
130
+ id: `${prefix}.shape`,
131
+ op: 'box-shape@1',
132
+ args: keys.slice(0, 3).map(k => `${prefix}.${k}`),
133
+ outputs: { shape: `${prefix}.shapeValue` },
134
+ params: { frame: local }
135
+ }, {
136
+ id: `${prefix}.pose`,
137
+ op: 'rigid@1',
138
+ args: keys.slice(3).map(k => `${prefix}.${k}`),
139
+ outputs: { pose: `${prefix}.poseValue` },
140
+ params: { from: local, to: asset.document.capabilities.assetFrame }
141
+ }, {
142
+ id: prefix,
143
+ op: 'place@1',
144
+ args: [`${prefix}.shapeValue`, `${prefix}.poseValue`],
145
+ outputs: { placed: `${prefix}.placed` }
146
+ });
46
147
  asset.appearance.push({ target: prefix, material: structuredClone(box.material ?? { token: 'palette.primary' }) });
47
148
  compileV3Asset(asset);
48
149
  return asset;
@@ -1 +1 @@
1
- {"version":3,"file":"v3-create.js","sourceRoot":"","sources":["../src/v3-create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v3-create.js","sourceRoot":"","sources":["../src/v3-create.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { V3EditRequest, V3EditControl } from './v3-authoring-session.ts';
2
- import type { V3BoxCreation } from './v3-create.ts';
2
+ import type { V3BoxCreation, V3PrimitiveCreation } from './v3-create.ts';
3
3
  import type { V3PartEdit } from './v3-part-edit.ts';
4
4
  export interface V3WorkspaceExport {
5
5
  context: string;
@@ -197,6 +197,39 @@ export declare function createV3EditorWorkspace(): {
197
197
  bindings: import("./v3-asset-types.ts").V3EvaluatedBinding[];
198
198
  palette: Record<string, string>;
199
199
  };
200
+ addPrimitive({ context, part, ...q }: V3EditControl & {
201
+ context: string;
202
+ part: V3PrimitiveCreation;
203
+ }): {
204
+ context: null;
205
+ name: null;
206
+ fields: never[];
207
+ geometry: never[];
208
+ bindings: never[];
209
+ dirty: boolean;
210
+ revision: null;
211
+ canUndo?: undefined;
212
+ canRedo?: undefined;
213
+ palette?: undefined;
214
+ } | {
215
+ context: string;
216
+ name: string;
217
+ revision: number;
218
+ dirty: boolean;
219
+ canUndo: boolean;
220
+ canRedo: boolean;
221
+ fields: {
222
+ value: number;
223
+ id: string;
224
+ unit: import("./v3-graph-types.ts").V3Unit;
225
+ min: number;
226
+ max: number;
227
+ role?: "design" | "state";
228
+ }[];
229
+ geometry: import("./v3-asset-types.ts").V3AssetGeometry[];
230
+ bindings: import("./v3-asset-types.ts").V3EvaluatedBinding[];
231
+ palette: Record<string, string>;
232
+ };
200
233
  editPart({ context, edit, ...q }: V3EditControl & {
201
234
  context: string;
202
235
  edit: V3PartEdit;
@@ -1 +1 @@
1
- {"version":3,"file":"v3-editor-workspace.d.ts","sourceRoot":"","sources":["../src/v3-editor-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,MAAM,WAAW,iBAAiB;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACtF,MAAM,WAAW,cAAc;IAAG,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE;AAIlE,+FAA+F;AAC/F,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAkC1B,MAAM,6BAA+B,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAO1B,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAC1B,aAAa,GAAG;QAAC,OAAO,EAAC,MAAM,CAAA;KAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAClC,aAAa,GAAG;QAAC,OAAO,EAAC,MAAM,CAAA;KAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAK3B,aAAa,GAAG;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,GAAG,EAAC,aAAa,CAAA;KAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAK/C,aAAa,GAAG;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,IAAI,EAAC,UAAU,CAAA;KAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BASzD,aAAa,GAAG;QAAC,OAAO,EAAC,MAAM,CAAA;KAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAKhC,aAAa,GAAG;QAAC,OAAO,EAAC,MAAM,CAAA;KAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAKR;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,oBAAoB,CAAC,EAAC,OAAO,CAAA;KAAC,GAAG,iBAAiB;kDAIrE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO5D;AACD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC1E,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"v3-editor-workspace.d.ts","sourceRoot":"","sources":["../src/v3-editor-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AACD,MAAM,WAAW,cAAc;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAeD,+FAA+F;AAC/F,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA4DxB,MAAM,6BAAoC,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAgB3B,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAM3B,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAGrC,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAO7B,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,aAAa,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAQhD,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,mBAAmB,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAQlE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAe/D,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAanC,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAgBxD;QACD,OAAO,EAAE,MAAM,CAAA;QACf,oBAAoB,CAAC,EAAE,OAAO,CAAA;KAC/B,GAAG,iBAAiB;kDAQyB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBlE;AACD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC1E,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA"}
@@ -1,9 +1,11 @@
1
1
  import { parseV3Asset, serializeV3Asset, compileV3Asset, captureV3AuthoredInputs } from "./v3-asset.js";
2
2
  import { createV3AuthoringSession } from "./v3-authoring-session.js";
3
- import { addV3Box } from "./v3-create.js";
3
+ import { addV3Box, addV3Primitive } from "./v3-create.js";
4
4
  import { editV3Part } from "./v3-part-edit.js";
5
5
  import { V3ContractError } from "./v3-contract.js";
6
- function fail(code, message) { throw new V3ContractError(code, 'workspace', message); }
6
+ function fail(code, message) {
7
+ throw new V3ContractError(code, 'workspace', message);
8
+ }
7
9
  /** One history for structural and input edits. No persistence or authentication is implied. */
8
10
  export function createV3EditorWorkspace() {
9
11
  let active = null, epoch = 0;
@@ -20,11 +22,17 @@ export function createV3EditorWorkspace() {
20
22
  if (q.expectedRevision !== a.revision)
21
23
  fail('REVISION_CONFLICT', 'editor changed since request');
22
24
  }
23
- function dirty() { return !!active && serializeV3Asset(active.asset) !== serializeV3Asset(active.baseline); }
24
- function leave(discard) { if (dirty() && !discard)
25
- fail('UNSAVED_DESIGN', 'current asset has unsaved design edits'); }
25
+ function dirty() {
26
+ return !!active && serializeV3Asset(active.asset) !== serializeV3Asset(active.baseline);
27
+ }
28
+ function leave(discard) {
29
+ if (dirty() && !discard)
30
+ fail('UNSAVED_DESIGN', 'current asset has unsaved design edits');
31
+ }
26
32
  const snapshot = (a) => structuredClone({ asset: a.asset, inputs: a.inputs });
27
- function validate(s) { compileV3Asset(captureV3AuthoredInputs(s.asset, s.inputs, { captureStateDefaults: true })).evaluate(); }
33
+ function validate(s) {
34
+ compileV3Asset(captureV3AuthoredInputs(s.asset, s.inputs, { captureStateDefaults: true })).evaluate();
35
+ }
28
36
  function install(a, next) {
29
37
  validate(next);
30
38
  a.undo.push(snapshot(a));
@@ -39,7 +47,18 @@ export function createV3EditorWorkspace() {
39
47
  if (!active)
40
48
  return { context: null, name: null, fields: [], geometry: [], bindings: [], dirty: false, revision: null };
41
49
  const a = active, rendered = compileV3Asset(captureV3AuthoredInputs(a.asset, a.inputs, { captureStateDefaults: true })).evaluate();
42
- return { context: a.context, name: a.asset.name, revision: a.revision, dirty: dirty(), canUndo: a.undo.length > 0, canRedo: a.redo.length > 0, fields: a.asset.document.model.inputs.map(i => ({ ...i, value: a.inputs[i.id] })), geometry: rendered.geometry, bindings: rendered.bindings, palette: rendered.palette };
50
+ return {
51
+ context: a.context,
52
+ name: a.asset.name,
53
+ revision: a.revision,
54
+ dirty: dirty(),
55
+ canUndo: a.undo.length > 0,
56
+ canRedo: a.redo.length > 0,
57
+ fields: a.asset.document.model.inputs.map(i => ({ ...i, value: a.inputs[i.id] })),
58
+ geometry: rendered.geometry,
59
+ bindings: rendered.bindings,
60
+ palette: rendered.palette
61
+ };
43
62
  }
44
63
  function candidate(a, q) {
45
64
  control(a, q);
@@ -54,11 +73,26 @@ export function createV3EditorWorkspace() {
54
73
  leave(discardDesignChanges);
55
74
  const asset = parseV3Asset(text), inputs = { ...asset.designInputs, ...asset.stateDefaults };
56
75
  validate({ asset, inputs });
57
- active = { asset, inputs, baseline: structuredClone(asset), revision: 0, context: `asset-context-${++epoch}`, undo: [], redo: [] };
76
+ active = {
77
+ asset,
78
+ inputs,
79
+ baseline: structuredClone(asset),
80
+ revision: 0,
81
+ context: `asset-context-${++epoch}`,
82
+ undo: [],
83
+ redo: []
84
+ };
85
+ return read();
86
+ },
87
+ close({ discardDesignChanges = false } = {}) {
88
+ leave(discardDesignChanges);
89
+ active = null;
90
+ epoch++;
58
91
  return read();
59
92
  },
60
- close({ discardDesignChanges = false } = {}) { leave(discardDesignChanges); active = null; epoch++; return read(); },
61
- preview({ context, ...q }) { return candidate(current(context), q); },
93
+ preview({ context, ...q }) {
94
+ return candidate(current(context), q);
95
+ },
62
96
  apply({ context, ...q }) {
63
97
  const a = current(context), c = candidate(a, q);
64
98
  if (c.changes.length)
@@ -72,12 +106,22 @@ export function createV3EditorWorkspace() {
72
106
  install(a, { asset, inputs });
73
107
  return read();
74
108
  },
109
+ addPrimitive({ context, part, ...q }) {
110
+ const a = current(context);
111
+ control(a, q);
112
+ const asset = addV3Primitive(a.asset, part), inputs = { ...asset.designInputs, ...asset.stateDefaults, ...a.inputs };
113
+ install(a, { asset, inputs });
114
+ return read();
115
+ },
75
116
  editPart({ context, edit, ...q }) {
76
117
  const a = current(context);
77
118
  control(a, q);
78
119
  const asset = editV3Part(a.asset, edit);
79
120
  if (serializeV3Asset(asset) !== serializeV3Asset(a.asset)) {
80
- const inputs = Object.fromEntries(asset.document.model.inputs.map(i => [i.id, a.inputs[i.id] ?? asset.designInputs[i.id] ?? asset.stateDefaults[i.id]]));
121
+ const inputs = Object.fromEntries(asset.document.model.inputs.map(i => [
122
+ i.id,
123
+ a.inputs[i.id] ?? asset.designInputs[i.id] ?? asset.stateDefaults[i.id]
124
+ ]));
81
125
  install(a, { asset, inputs });
82
126
  }
83
127
  return read();
@@ -112,14 +156,19 @@ export function createV3EditorWorkspace() {
112
156
  },
113
157
  export({ context, captureStateDefaults = false }) {
114
158
  const a = current(context);
115
- return { context, revision: a.revision, text: serializeV3Asset(captureV3AuthoredInputs(a.asset, a.inputs, { captureStateDefaults })) };
159
+ return {
160
+ context,
161
+ revision: a.revision,
162
+ text: serializeV3Asset(captureV3AuthoredInputs(a.asset, a.inputs, { captureStateDefaults }))
163
+ };
116
164
  },
117
165
  acknowledgeSaved({ context, revision, text }) {
118
166
  const a = current(context);
119
167
  if (revision !== a.revision)
120
168
  fail('REVISION_CONFLICT', 'edited since export');
121
169
  const saved = parseV3Asset(text), ordinary = captureV3AuthoredInputs(a.asset, a.inputs), withPose = captureV3AuthoredInputs(a.asset, a.inputs, { captureStateDefaults: true });
122
- if (serializeV3Asset(saved) !== serializeV3Asset(ordinary) && serializeV3Asset(saved) !== serializeV3Asset(withPose))
170
+ if (serializeV3Asset(saved) !== serializeV3Asset(ordinary) &&
171
+ serializeV3Asset(saved) !== serializeV3Asset(withPose))
123
172
  fail('SAVE_MISMATCH', 'acknowledgement does not match current asset');
124
173
  a.asset = saved;
125
174
  a.baseline = structuredClone(saved);
@@ -1 +1 @@
1
- {"version":3,"file":"v3-editor-workspace.js","sourceRoot":"","sources":["../src/v3-editor-workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v3-editor-workspace.js","sourceRoot":"","sources":["../src/v3-editor-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { type V3WorldBox } from './v3-gate.ts';
2
+ import { type InstanceScale } from './sizing.ts';
3
+ import type { Axis, FigureSource, Vec3 } from './types.ts';
4
+ import type { V3Asset } from './v3-asset-types.ts';
5
+ /** A rule the converter cannot write in V3. The asset is not converted. */
6
+ export interface V3ConversionRefusal {
7
+ code: string;
8
+ part?: string;
9
+ detail: string;
10
+ }
11
+ /** Something the V3 asset does not carry over from the V2 source. Listed, never dropped quietly. */
12
+ export interface V3ConversionLoss {
13
+ code: string;
14
+ part?: string;
15
+ detail: string;
16
+ }
17
+ export type V3ConversionResult = {
18
+ status: 'converted';
19
+ asset: V3Asset;
20
+ lost: V3ConversionLoss[];
21
+ } | {
22
+ status: 'refused';
23
+ refusals: V3ConversionRefusal[];
24
+ lost: V3ConversionLoss[];
25
+ };
26
+ export interface V3ConversionOptions {
27
+ /** Colour of every palette token the source uses. The converter invents no colours. */
28
+ palette: Record<string, string>;
29
+ /** Asset name. Defaults to the V2 `type`. */
30
+ name?: string;
31
+ }
32
+ /** The V3 design inputs that stand for the instance size, in mm. */
33
+ export declare const V3_SIZE_INPUTS: Readonly<Record<Axis, string>>;
34
+ /** Rx·Ry·Rz for degrees, the order V2 (`three` 'XYZ') and V3 `rigid@1` share. */
35
+ export declare function eulerXYZ(rotation: Partial<Vec3> | undefined): number[][];
36
+ /**
37
+ * Convert one validated V2 source to a V3 asset that places every part where V2 places it, at every
38
+ * instance size in the input range. See the file comment for what is refused and what is listed as lost.
39
+ */
40
+ export declare function convertV2ToV3(source: unknown, options: V3ConversionOptions): V3ConversionResult;
41
+ /** One placed body in the world, from either side, in the bottom-origin asset frame. */
42
+ export type WorldBox = V3WorldBox;
43
+ /** Where V2 draws every part (and copy) at an instance scale, as world boxes. */
44
+ export declare function v2WorldBoxes(source: FigureSource, scale: InstanceScale): WorldBox[];
45
+ /** Where a converted V3 asset draws every part at an instance size, as world boxes. */
46
+ export declare function v3WorldBoxes(asset: V3Asset, size: Vec3): WorldBox[];
47
+ export interface V3SameDifference {
48
+ part: string;
49
+ scale: InstanceScale;
50
+ what: string;
51
+ v2: string;
52
+ v3: string;
53
+ }
54
+ export interface V3SameReport {
55
+ same: boolean;
56
+ /** Instance scales checked: the base and every combination of doubled axes. */
57
+ scales: InstanceScale[];
58
+ boxesCompared: number;
59
+ differences: V3SameDifference[];
60
+ }
61
+ /** ADR-0087 decision 2 tolerances. */
62
+ export declare const SAME_TOLERANCE_MM = 1;
63
+ export declare const SAME_TOLERANCE_DEG = 0.1;
64
+ /**
65
+ * "The same" (ADR-0087 decision 2): the V2 source and the V3 asset draw the same parts, each at the same
66
+ * centre and world extents within 1 mm and the same rotation within 0.1°, with the same material, at the
67
+ * base size and at every combination of doubled axes.
68
+ */
69
+ export declare function compareV2WithV3(source: FigureSource, asset: V3Asset, factor?: number): V3SameReport;
70
+ //# sourceMappingURL=v3-from-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3-from-v2.d.ts","sourceRoot":"","sources":["../src/v3-from-v2.ts"],"names":[],"mappings":"AA4BA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAK3E,OAAO,EAQL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,IAAI,EAAuB,YAAY,EAAgB,IAAI,EAAE,MAAM,YAAY,CAAA;AAC7F,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,qBAAqB,CAAA;AAG5E,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,oGAAoG;AACpG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,gBAAgB,EAAE,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAAC,IAAI,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAA;AAEpF,MAAM,WAAW,mBAAmB;IAClC,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,oEAAoE;AACpE,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4D,CAAA;AA4EtH,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE,EAAE,CAaxE;AA0CD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAmU/F;AAOD,wFAAwF;AACxF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAA;AAEjC,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,CAqBnF;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,CAInE;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,aAAa,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,+EAA+E;IAC/E,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,gBAAgB,EAAE,CAAA;CAChC;AAED,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAClC,eAAO,MAAM,kBAAkB,MAAM,CAAA;AAUrC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAI,GAAG,YAAY,CAuD9F"}