@hatiolab/figure-model 0.1.76 → 0.1.78

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 (135) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +60 -138
  3. package/dist/index.d.ts +1 -13
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +3 -26
  6. package/dist/index.js.map +1 -1
  7. package/dist/v3-asset-types.d.ts +1 -2
  8. package/dist/v3-asset-types.d.ts.map +1 -1
  9. package/dist/v3-asset.js +1 -1
  10. package/dist/v3-asset.js.map +1 -1
  11. package/dist/v3-authoring-actions.d.ts +9 -12
  12. package/dist/v3-authoring-actions.d.ts.map +1 -1
  13. package/dist/v3-authoring-actions.js +4 -5
  14. package/dist/v3-authoring-actions.js.map +1 -1
  15. package/dist/v3-capabilities.js +4 -1
  16. package/dist/v3-capabilities.js.map +1 -1
  17. package/dist/v3-cost.d.ts.map +1 -1
  18. package/dist/v3-cost.js +3 -5
  19. package/dist/v3-cost.js.map +1 -1
  20. package/dist/v3-create.d.ts +1 -1
  21. package/dist/v3-create.d.ts.map +1 -1
  22. package/dist/v3-examples.js +1 -1
  23. package/dist/v3-gate.d.ts +7 -8
  24. package/dist/v3-gate.d.ts.map +1 -1
  25. package/dist/v3-gate.js +11 -14
  26. package/dist/v3-gate.js.map +1 -1
  27. package/dist/v3-graph.d.ts +1 -2
  28. package/dist/v3-graph.d.ts.map +1 -1
  29. package/dist/v3-graph.js +5 -7
  30. package/dist/v3-graph.js.map +1 -1
  31. package/dist/v3-instance-size.d.ts +3 -5
  32. package/dist/v3-instance-size.d.ts.map +1 -1
  33. package/dist/v3-instance-size.js +2 -4
  34. package/dist/v3-instance-size.js.map +1 -1
  35. package/dist/v3-kernel-version.d.ts +1 -1
  36. package/dist/v3-kernel-version.js +1 -1
  37. package/dist/v3-part-edit.d.ts +4 -5
  38. package/dist/v3-part-edit.d.ts.map +1 -1
  39. package/dist/v3-part-edit.js +2 -2
  40. package/dist/v3-part-edit.js.map +1 -1
  41. package/dist/v3-proposal.js +1 -1
  42. package/dist/v3-proposal.js.map +1 -1
  43. package/dist/v3-release-contract.js +1 -1
  44. package/dist/v3-release-contract.js.map +1 -1
  45. package/dist/v3-score.d.ts +4 -5
  46. package/dist/v3-score.d.ts.map +1 -1
  47. package/dist/v3-score.js +7 -8
  48. package/dist/v3-score.js.map +1 -1
  49. package/dist/v3-words.d.ts +105 -0
  50. package/dist/v3-words.d.ts.map +1 -0
  51. package/dist/v3-words.js +107 -0
  52. package/dist/v3-words.js.map +1 -0
  53. package/docs/assembly-constraints-v3.md +13 -23
  54. package/docs/v3-asset-persistence.md +4 -4
  55. package/docs/v3-common-kernel-experiment.md +1 -1
  56. package/docs/v3-core-semantics.md +3 -3
  57. package/docs/v3-cutover.md +5 -3
  58. package/docs/v3-design.md +13 -26
  59. package/docs/v3-editor-integration.md +2 -2
  60. package/docs/v3-full-conveyor-validation.md +3 -3
  61. package/docs/v3-layout-system.md +1 -1
  62. package/docs/v3-minimal-model.md +0 -1
  63. package/docs/v3-motion-contract.md +21 -56
  64. package/docs/v3-runtime-extraction.md +7 -7
  65. package/docs/v3-sample-validation-expanded.md +1 -1
  66. package/docs/v3-sample-validation.md +1 -1
  67. package/docs/v3-shape-dimension-contract.md +23 -57
  68. package/docs/v3-status.md +5 -5
  69. package/docs/v3-storage-integration.md +4 -4
  70. package/package.json +2 -20
  71. package/dist/blueprint-shape.d.ts +0 -10
  72. package/dist/blueprint-shape.d.ts.map +0 -1
  73. package/dist/blueprint-shape.js +0 -194
  74. package/dist/blueprint-shape.js.map +0 -1
  75. package/dist/blueprint.d.ts +0 -73
  76. package/dist/blueprint.d.ts.map +0 -1
  77. package/dist/blueprint.js +0 -388
  78. package/dist/blueprint.js.map +0 -1
  79. package/dist/cost-chart.d.ts +0 -35
  80. package/dist/cost-chart.d.ts.map +0 -1
  81. package/dist/cost-chart.js +0 -150
  82. package/dist/cost-chart.js.map +0 -1
  83. package/dist/cost.d.ts +0 -162
  84. package/dist/cost.d.ts.map +0 -1
  85. package/dist/cost.js +0 -194
  86. package/dist/cost.js.map +0 -1
  87. package/dist/gate.d.ts +0 -65
  88. package/dist/gate.d.ts.map +0 -1
  89. package/dist/gate.js +0 -284
  90. package/dist/gate.js.map +0 -1
  91. package/dist/grouping.d.ts +0 -121
  92. package/dist/grouping.d.ts.map +0 -1
  93. package/dist/grouping.js +0 -224
  94. package/dist/grouping.js.map +0 -1
  95. package/dist/keys.d.ts +0 -45
  96. package/dist/keys.d.ts.map +0 -1
  97. package/dist/keys.js +0 -84
  98. package/dist/keys.js.map +0 -1
  99. package/dist/origin.d.ts +0 -33
  100. package/dist/origin.d.ts.map +0 -1
  101. package/dist/origin.js +0 -46
  102. package/dist/origin.js.map +0 -1
  103. package/dist/release-contract.d.ts +0 -38
  104. package/dist/release-contract.d.ts.map +0 -1
  105. package/dist/release-contract.js +0 -246
  106. package/dist/release-contract.js.map +0 -1
  107. package/dist/sizing.d.ts +0 -231
  108. package/dist/sizing.d.ts.map +0 -1
  109. package/dist/sizing.js +0 -550
  110. package/dist/sizing.js.map +0 -1
  111. package/dist/types.d.ts +0 -1233
  112. package/dist/types.d.ts.map +0 -1
  113. package/dist/types.js +0 -547
  114. package/dist/types.js.map +0 -1
  115. package/dist/v3-from-v2.d.ts +0 -203
  116. package/dist/v3-from-v2.d.ts.map +0 -1
  117. package/dist/v3-from-v2.js +0 -2053
  118. package/dist/v3-from-v2.js.map +0 -1
  119. package/dist/v3-mesh-compare.d.ts +0 -24
  120. package/dist/v3-mesh-compare.d.ts.map +0 -1
  121. package/dist/v3-mesh-compare.js +0 -55
  122. package/dist/v3-mesh-compare.js.map +0 -1
  123. package/dist/validate.d.ts +0 -7
  124. package/dist/validate.d.ts.map +0 -1
  125. package/dist/validate.js +0 -1119
  126. package/dist/validate.js.map +0 -1
  127. package/dist/visual-evidence.d.ts +0 -21
  128. package/dist/visual-evidence.d.ts.map +0 -1
  129. package/dist/visual-evidence.js +0 -52
  130. package/dist/visual-evidence.js.map +0 -1
  131. package/docs/design.md +0 -193
  132. package/docs/format-survey.md +0 -108
  133. package/docs/format.md +0 -704
  134. package/docs/sizing.md +0 -183
  135. package/docs/validation.md +0 -357
@@ -1,203 +0,0 @@
1
- import { type V3WorldBox } from './v3-gate.ts';
2
- import { type InstanceScale } from './sizing.ts';
3
- import type { AnimationChannel, 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
- /**
18
- * Something the converter normalised on purpose, with the value before and after. Not a loss: the V3 asset draws
19
- * what V2 drew. The report keeps it so nobody has to rediscover why a number differs from the source.
20
- */
21
- export interface V3ConversionNote {
22
- code: string;
23
- part?: string;
24
- detail: string;
25
- }
26
- /**
27
- * How the V3 asset was produced: written by the converter from the V2 rules, or re-authored by a person
28
- * (ADR-0087 ruling 1). This says nothing about whether it matches or what was lost; those are `compareV2WithV3`
29
- * and `lost` / `rangeChanges` (designer's ruling, 2026-09-22: method, verification and preservation are three
30
- * separate facts).
31
- */
32
- export type V3ConversionMethod = 'mechanical' | 're-authored';
33
- /**
34
- * A change to the range of inputs the asset accepts, compared with V2. This is a behaviour-contract change, not a
35
- * remark: an instance V2 drew (however badly) is one V3 refuses.
36
- */
37
- export interface V3RangeChange {
38
- input: string;
39
- /** What V2 accepted, in words. */
40
- v2: string;
41
- /** The V3 input range. */
42
- v3: {
43
- min: number;
44
- max: number;
45
- };
46
- part?: string;
47
- reason: string;
48
- }
49
- export type V3ConversionResult = {
50
- status: 'converted';
51
- method: V3ConversionMethod;
52
- asset: V3Asset;
53
- lost: V3ConversionLoss[];
54
- rangeChanges: V3RangeChange[];
55
- notes: V3ConversionNote[];
56
- } | {
57
- status: 'refused';
58
- refusals: V3ConversionRefusal[];
59
- lost: V3ConversionLoss[];
60
- rangeChanges: V3RangeChange[];
61
- notes: V3ConversionNote[];
62
- };
63
- export interface V3ConversionOptions {
64
- /** Colour of every palette token the source uses. The converter invents no colours. */
65
- palette: Record<string, string>;
66
- /** What that palette is called, for the report (ADR-0087 ruling 5). Without it the report carries a hash. */
67
- paletteId?: string;
68
- /** Asset name. Defaults to the V2 `type`. */
69
- name?: string;
70
- /**
71
- * Re-authoring the converter may do for a person (ADR-0087 ruling 1, V3 designer's approval 2026-09-22 for
72
- * candidates). `rotatedFollows: 'nearest-axis'`: a part rotated off the axes whose size follows the instance is
73
- * given rigid dimensions that follow the world axis each local axis lies nearest to, instead of V2's shear. The
74
- * result is marked `re-authored`, matches V2 where the in-plane factors agree, and differs elsewhere by design.
75
- */
76
- reauthor?: {
77
- rotatedFollows?: 'nearest-axis';
78
- /**
79
- * Re-authoring a tilted part as rigid and fastened to what it is mounted on (designer's ruling
80
- * 2026-09-22: keep the shape and the tilt, connect it to its mounting).
81
- *
82
- * V2 makes such a part follow the instance, and a rotation that mixes two axes scaling differently shears
83
- * it. V2 has no rule for "the position follows but the size does not", so this cannot be said in a V2
84
- * source; it is said here. The part keeps its authored dimensions and tilt, and its centre rides the named
85
- * part's face, so the gap between them is the gap the author drew at every instance size.
86
- */
87
- attach?: Array<{
88
- part: string;
89
- to: string;
90
- }>;
91
- };
92
- /**
93
- * What the figure declares it occupies (V3 designer's ruling 2026-09-22).
94
- *
95
- * `'authored'` (the default) keeps V2's box: the declared volume is the authored size, so a part that
96
- * reaches past it is still reported by the gate. Conversion stays faithful and the existing debt stays
97
- * visible.
98
- *
99
- * `'measured'` declares the volume the parts actually need, as an expression in the size. This changes what
100
- * the figure tells a scene it fills, so it is a deliberate act per asset, not something conversion does on
101
- * its own.
102
- */
103
- occupancy?: 'authored' | 'measured';
104
- }
105
- /** A short stable fingerprint of the palette, so a report can say which colours it snapshotted. */
106
- export declare function paletteHash(palette: Record<string, string>): string;
107
- /** The V3 design inputs that stand for the instance size, in mm. */
108
- export declare const V3_SIZE_INPUTS: Readonly<Record<Axis, string>>;
109
- /** Rx·Ry·Rz for degrees, the order V2 (`three` 'XYZ') and V3 `rigid@1` share. */
110
- export declare function eulerXYZ(rotation: Partial<Vec3> | undefined): number[][];
111
- /**
112
- * Convert one validated V2 source to a V3 asset that places every part where V2 places it, at every
113
- * instance size in the input range. See the file comment for what is refused and what is listed as lost.
114
- */
115
- export declare function convertV2ToV3(source: unknown, options: V3ConversionOptions): V3ConversionResult;
116
- /** One placed body in the world, from either side, in the bottom-origin asset frame. */
117
- export type WorldBox = V3WorldBox;
118
- /** Values that move a V2 figure: parameter values by name and, per animation clip, an elapsed time in seconds. */
119
- export interface V2MotionState {
120
- parameters?: Record<string, number>;
121
- clipTime?: Record<string, number>;
122
- }
123
- type Mat = number[][];
124
- /** Rotation about a unit axis by degrees (Rodrigues), the matrix three's setFromAxisAngle builds. */
125
- export declare function axisAngle(axis: Vec3, deg: number): Mat;
126
- /** V2's clip length: the last key time across its channels, in seconds. */
127
- export declare function v2ClipDuration(clip: {
128
- channels: AnimationChannel[];
129
- }): number;
130
- /**
131
- * Where V2 draws every part (and copy) at an instance scale and a motion state, as oriented world boxes.
132
- * Motion follows things-scene: a translation channel shifts the part in the figure frame by the part's world
133
- * factor; a rotation channel turns it about its own centre in its own frame (R_part·R_ch·R_part⁻¹); a joint turns
134
- * everything in its frame about its sized origin, parents first (ADR-0066).
135
- */
136
- export declare function v2WorldBoxes(source: FigureSource, scale: InstanceScale, state?: V2MotionState, options?: {
137
- points?: boolean;
138
- }): WorldBox[];
139
- /** Where a converted V3 asset draws every part at an instance size, as world boxes. */
140
- export declare function v3WorldBoxes(asset: V3Asset, size: Vec3, stateOverrides?: Record<string, number>, options?: {
141
- points?: boolean;
142
- }): WorldBox[];
143
- /**
144
- * Instance scales at which a repeated part's copy count changes, one just below and one just above each
145
- * boundary near the base count (completion criterion: repeat-count boundaries).
146
- */
147
- export declare function repeatBoundaryScales(source: FigureSource): InstanceScale[];
148
- export interface V3SameDifference {
149
- part: string;
150
- scale: InstanceScale;
151
- /** Which motion state was being compared; `rest` when none. */
152
- state: string;
153
- what: string;
154
- v2: string;
155
- v3: string;
156
- }
157
- export interface V3SameReport {
158
- /** True when no difference was found over the checked scales and states. Not a guarantee over all inputs. */
159
- same: boolean;
160
- /** Instance scales checked. */
161
- scales: InstanceScale[];
162
- /** Motion states checked; `rest` is always first. */
163
- states: string[];
164
- boxesCompared: number;
165
- /**
166
- * How the surfaces were sampled, so the report says what a Hausdorff gap under tolerance does and does not
167
- * prove: a bound at these sample points, not the maximum error over the whole surface.
168
- */
169
- sampling: {
170
- toleranceMm: number;
171
- toleranceDeg: number;
172
- mesh: boolean;
173
- cornerDivisions: number;
174
- sphereGrid: string;
175
- cylinderSegments: string;
176
- };
177
- differences: V3SameDifference[];
178
- }
179
- export declare const SAME_TOLERANCE_MM = 1;
180
- export declare const SAME_TOLERANCE_DEG = 0.1;
181
- export interface V3CompareOptions {
182
- factor?: number;
183
- /** Also check at half size on every axis combination (completion criterion: shrunken sizes). */
184
- shrink?: boolean;
185
- /** Extra instance scales, e.g. `repeatBoundaryScales(source)`. */
186
- extraScales?: InstanceScale[];
187
- /** Compare sampled surfaces too, not only oriented boxes. Default true. */
188
- mesh?: boolean;
189
- /** Motion states to compare beyond rest, each with a label for the report. */
190
- states?: Array<{
191
- label: string;
192
- } & V2MotionState>;
193
- }
194
- /** The V3 state overrides that stand for a V2 motion state: parameters by name, drivers at their clip's time. */
195
- export declare function v3StateOverrides(asset: V3Asset, state: V2MotionState): Record<string, number>;
196
- /**
197
- * "The same" (ADR-0087 decision 2): the V2 source and the V3 asset draw the same parts, each with the same
198
- * centre and local dimensions within 1 mm and the same rotation within 0.1° (as a relative angle), with the same
199
- * material, at the base size and at every combination of doubled axes, at rest and at every motion state given.
200
- */
201
- export declare function compareV2WithV3(source: FigureSource, asset: V3Asset, options?: V3CompareOptions | number): V3SameReport;
202
- export {};
203
- //# sourceMappingURL=v3-from-v2.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"v3-from-v2.d.ts","sourceRoot":"","sources":["../src/v3-from-v2.ts"],"names":[],"mappings":"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"}