@hatiolab/figure-model 0.5.0 → 0.5.2

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 (136) hide show
  1. package/dist/asset-types.d.ts +1 -1
  2. package/dist/asset-types.d.ts.map +1 -1
  3. package/dist/asset.d.ts.map +1 -1
  4. package/dist/asset.js +6 -5
  5. package/dist/asset.js.map +1 -1
  6. package/dist/authoring-actions.d.ts +2 -795
  7. package/dist/authoring-actions.d.ts.map +1 -1
  8. package/dist/authoring-actions.js +66 -3777
  9. package/dist/authoring-actions.js.map +1 -1
  10. package/dist/authoring-bindings.d.ts +35 -0
  11. package/dist/authoring-bindings.d.ts.map +1 -0
  12. package/dist/authoring-bindings.js +241 -0
  13. package/dist/authoring-bindings.js.map +1 -0
  14. package/dist/authoring-dimensions.d.ts +10 -0
  15. package/dist/authoring-dimensions.d.ts.map +1 -0
  16. package/dist/authoring-dimensions.js +88 -0
  17. package/dist/authoring-dimensions.js.map +1 -0
  18. package/dist/authoring-fastening.d.ts +24 -0
  19. package/dist/authoring-fastening.d.ts.map +1 -0
  20. package/dist/authoring-fastening.js +562 -0
  21. package/dist/authoring-fastening.js.map +1 -0
  22. package/dist/authoring-geometry.d.ts +119 -0
  23. package/dist/authoring-geometry.d.ts.map +1 -0
  24. package/dist/authoring-geometry.js +419 -0
  25. package/dist/authoring-geometry.js.map +1 -0
  26. package/dist/authoring-nodes.d.ts +77 -0
  27. package/dist/authoring-nodes.d.ts.map +1 -0
  28. package/dist/authoring-nodes.js +310 -0
  29. package/dist/authoring-nodes.js.map +1 -0
  30. package/dist/authoring-occupancy.d.ts +28 -0
  31. package/dist/authoring-occupancy.d.ts.map +1 -0
  32. package/dist/authoring-occupancy.js +784 -0
  33. package/dist/authoring-occupancy.js.map +1 -0
  34. package/dist/authoring-proportion.d.ts +27 -0
  35. package/dist/authoring-proportion.d.ts.map +1 -0
  36. package/dist/authoring-proportion.js +378 -0
  37. package/dist/authoring-proportion.js.map +1 -0
  38. package/dist/authoring-size.d.ts +17 -0
  39. package/dist/authoring-size.d.ts.map +1 -0
  40. package/dist/authoring-size.js +140 -0
  41. package/dist/authoring-size.js.map +1 -0
  42. package/dist/authoring-types.d.ts +753 -0
  43. package/dist/authoring-types.d.ts.map +1 -0
  44. package/dist/authoring-types.js +42 -0
  45. package/dist/authoring-types.js.map +1 -0
  46. package/dist/command-preview.d.ts +1 -1
  47. package/dist/command-preview.d.ts.map +1 -1
  48. package/dist/command-preview.js +1 -0
  49. package/dist/command-preview.js.map +1 -1
  50. package/dist/contract.d.ts +142 -3
  51. package/dist/contract.d.ts.map +1 -1
  52. package/dist/contract.js +1 -1
  53. package/dist/contract.js.map +1 -1
  54. package/dist/cost.d.ts.map +1 -1
  55. package/dist/cost.js +3 -0
  56. package/dist/cost.js.map +1 -1
  57. package/dist/create.d.ts +36 -0
  58. package/dist/create.d.ts.map +1 -1
  59. package/dist/create.js +60 -0
  60. package/dist/create.js.map +1 -1
  61. package/dist/document.d.ts.map +1 -1
  62. package/dist/document.js +4 -3
  63. package/dist/document.js.map +1 -1
  64. package/dist/editor-workspace.d.ts +3 -3
  65. package/dist/editor-workspace.d.ts.map +1 -1
  66. package/dist/examples.d.ts.map +1 -1
  67. package/dist/examples.js +3 -1
  68. package/dist/examples.js.map +1 -1
  69. package/dist/gate.d.ts.map +1 -1
  70. package/dist/gate.js +2 -0
  71. package/dist/gate.js.map +1 -1
  72. package/dist/graph-types.d.ts +3 -2
  73. package/dist/graph-types.d.ts.map +1 -1
  74. package/dist/graph.d.ts.map +1 -1
  75. package/dist/graph.js +13 -7
  76. package/dist/graph.js.map +1 -1
  77. package/dist/index.d.ts +10 -4
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +8 -2
  80. package/dist/index.js.map +1 -1
  81. package/dist/joint-list.js +1 -1
  82. package/dist/joint-list.js.map +1 -1
  83. package/dist/joint-part-edits.d.ts +40 -0
  84. package/dist/joint-part-edits.d.ts.map +1 -0
  85. package/dist/joint-part-edits.js +488 -0
  86. package/dist/joint-part-edits.js.map +1 -0
  87. package/dist/joint-writing.d.ts +50 -0
  88. package/dist/joint-writing.d.ts.map +1 -0
  89. package/dist/joint-writing.js +847 -0
  90. package/dist/joint-writing.js.map +1 -0
  91. package/dist/json.d.ts.map +1 -1
  92. package/dist/json.js +11 -8
  93. package/dist/json.js.map +1 -1
  94. package/dist/kernel-version.d.ts +1 -1
  95. package/dist/kernel-version.js +1 -1
  96. package/dist/package.d.ts +15 -3
  97. package/dist/package.d.ts.map +1 -1
  98. package/dist/package.js +58 -0
  99. package/dist/package.js.map +1 -1
  100. package/dist/part-edit.d.ts +1 -1
  101. package/dist/part-edit.d.ts.map +1 -1
  102. package/dist/part-edit.js +7 -4
  103. package/dist/part-edit.js.map +1 -1
  104. package/dist/proposal.d.ts +1 -1
  105. package/dist/proposal.d.ts.map +1 -1
  106. package/dist/proposal.js +5 -2
  107. package/dist/proposal.js.map +1 -1
  108. package/dist/render-batches.d.ts +10 -2
  109. package/dist/render-batches.d.ts.map +1 -1
  110. package/dist/render-batches.js +19 -5
  111. package/dist/render-batches.js.map +1 -1
  112. package/dist/resize-plan.d.ts +1 -1
  113. package/dist/resize-plan.d.ts.map +1 -1
  114. package/dist/robots.d.ts.map +1 -1
  115. package/dist/robots.js +3 -1
  116. package/dist/robots.js.map +1 -1
  117. package/dist/room.d.ts +1 -1
  118. package/dist/room.d.ts.map +1 -1
  119. package/dist/room.js +2 -1
  120. package/dist/room.js.map +1 -1
  121. package/dist/shape-edit.js +4 -4
  122. package/dist/shape-edit.js.map +1 -1
  123. package/dist/shape-ops.d.ts +62 -7
  124. package/dist/shape-ops.d.ts.map +1 -1
  125. package/dist/shape-ops.js +117 -8
  126. package/dist/shape-ops.js.map +1 -1
  127. package/dist/slot-layout-presets.d.ts +102 -0
  128. package/dist/slot-layout-presets.d.ts.map +1 -0
  129. package/dist/slot-layout-presets.js +185 -0
  130. package/dist/slot-layout-presets.js.map +1 -0
  131. package/dist/slot-layout.d.ts +16 -1
  132. package/dist/slot-layout.d.ts.map +1 -1
  133. package/dist/slot-layout.js.map +1 -1
  134. package/docs/modeller-interaction-performance-2026-10-07.md +40 -8
  135. package/docs/shape-contract.md +46 -0
  136. package/package.json +1 -1
@@ -0,0 +1,140 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ /*
5
+ * The size range a figure declares for its instances, and the check that a command keeps within it.
6
+ */
7
+ import { figurePartsExtentOf } from "./gate.js";
8
+ import { AXES } from "./words.js";
9
+ import { FIGURE_INSTANCE_SIZE_INPUTS, figureInstanceSizeLimitsOf, foldInstanceSizeRange } from "./instance-size.js";
10
+ import { fail, round6, sizeInputOf } from "./authoring-nodes.js";
11
+ export function declareInstanceSize(asset, a) {
12
+ const m = asset.document.model;
13
+ const declared = AXES.filter(axis => sizeInputOf(m, axis));
14
+ if (declared.length && !a.replace)
15
+ fail('INSTANCE_SIZE_DECLARED', 'size', `the instance size is already declared (${declared.map(x => FIGURE_INSTANCE_SIZE_INPUTS[x]).join(', ')}); pass replace to change its range`);
16
+ if (!a.range || typeof a.range !== 'object')
17
+ fail('SCHEMA', 'size', 'a range per axis is required');
18
+ let measured;
19
+ const authoredOf = (axis) => {
20
+ const given = a.at?.[axis];
21
+ if (given !== undefined)
22
+ return given;
23
+ const existing = asset.designInputs[FIGURE_INSTANCE_SIZE_INPUTS[axis]];
24
+ if (typeof existing === 'number')
25
+ return existing;
26
+ /* The parts as they rest, not the room their joints carry them through (a door's swing). */
27
+ if (!measured)
28
+ measured = figurePartsExtentOf(asset);
29
+ return measured[axis];
30
+ };
31
+ for (const axis of AXES) {
32
+ const r = a.range[axis];
33
+ const at = authoredOf(axis);
34
+ const path = FIGURE_INSTANCE_SIZE_INPUTS[axis];
35
+ if (!r || ![r.min, r.max, at].every(Number.isFinite))
36
+ fail('SCHEMA', path, 'finite min, max and size required');
37
+ if (!(r.min > 0))
38
+ fail('INSTANCE_SIZE_RANGE', path, `the smallest size must be above zero; got ${r.min}`, {
39
+ reason: 'size-min-not-positive',
40
+ axis,
41
+ min: r.min
42
+ });
43
+ if (!(r.min <= at && at <= r.max))
44
+ fail('INSTANCE_SIZE_RANGE', path, `the authored size ${at} mm must lie within ${r.min}…${r.max} mm`, {
45
+ reason: 'size-outside-range',
46
+ axis,
47
+ at,
48
+ min: r.min,
49
+ max: r.max
50
+ });
51
+ const input = sizeInputOf(m, axis);
52
+ if (input)
53
+ Object.assign(input, { min: r.min, max: r.max });
54
+ else
55
+ m.inputs.push({ id: path, unit: 'mm', min: r.min, max: r.max, role: 'design' });
56
+ asset.designInputs[path] = at;
57
+ }
58
+ return asset;
59
+ }
60
+ /**
61
+ * Every command leaves a figure that can take each size it declares: the kernel is asked at the ends of the declared
62
+ * range, and a size the figure cannot take is refused by name with the size it can go to. This is where a link that
63
+ * makes a part 200 mm shorter than the instance is caught when the instance may be 1 mm wide — the kernel alone
64
+ * accepts it, and the board then fails to draw the figure at small sizes.
65
+ */
66
+ /** Where the declared size range reaches past what the figure holds: per axis, the bound it would need, and who sets it. */
67
+ function sizeRangeGaps(asset) {
68
+ const m = asset.document.model;
69
+ if (!AXES.every(axis => sizeInputOf(m, axis)))
70
+ return [];
71
+ const range = Object.fromEntries(AXES.map(axis => [axis, { min: sizeInputOf(m, axis).min, max: sizeInputOf(m, axis).max }]));
72
+ const limits = figureInstanceSizeLimitsOf(asset, range);
73
+ const { range: holds } = foldInstanceSizeRange(range, limits);
74
+ const gaps = [];
75
+ for (const axis of AXES) {
76
+ const who = limits.find(l => l.axis === axis)?.part;
77
+ if (holds[axis].min > range[axis].min)
78
+ gaps.push({ axis, bound: 'min', need: holds[axis].min, declared: range[axis].min, who });
79
+ if (holds[axis].max < range[axis].max)
80
+ gaps.push({ axis, bound: 'max', need: holds[axis].max, declared: range[axis].max, who });
81
+ }
82
+ return gaps;
83
+ }
84
+ /** The declared size range folded to what the figure allows, as asked; the authored size must stay inside. */
85
+ export function narrowDeclaredSize(asset) {
86
+ const m = asset.document.model;
87
+ /* A figure that declares no size has no range to reach past: there is nothing to narrow, and the link stands as it is. */
88
+ if (!AXES.every(axis => sizeInputOf(m, axis)))
89
+ return;
90
+ for (const gap of sizeRangeGaps(asset)) {
91
+ const input = sizeInputOf(m, gap.axis);
92
+ const at = asset.designInputs[FIGURE_INSTANCE_SIZE_INPUTS[gap.axis]];
93
+ if (gap.bound === 'min' ? at < gap.need : at > gap.need)
94
+ fail('INSTANCE_SIZE_RANGE', FIGURE_INSTANCE_SIZE_INPUTS[gap.axis], `the figure is authored at ${at} mm, where a length is already gone; change the link or the size`, {
95
+ reason: 'size-already-gone',
96
+ axis: gap.axis,
97
+ at,
98
+ bound: gap.bound,
99
+ need: gap.need
100
+ });
101
+ if (gap.bound === 'min')
102
+ input.min = gap.need;
103
+ else
104
+ input.max = gap.need;
105
+ }
106
+ }
107
+ /**
108
+ * After a command, the declared size range must still hold at its ends. A gap the figure already had before the
109
+ * command -- a range the conversion declared too wide (FORMATION_TRAY: X from 1 mm, its cells gone below 8.8 mm) -- is
110
+ * not the command's doing: it is refused only if it made a gap or widened one. Refusing every command for it had
111
+ * blocked even choosing a detail level (user, 2026-09-24).
112
+ */
113
+ export function holdsOverDeclaredSize(asset, before) {
114
+ const now = sizeRangeGaps(asset);
115
+ if (!now.length)
116
+ return;
117
+ const was = before ? sizeRangeGaps(before) : [];
118
+ for (const gap of now) {
119
+ const prior = was.find(g => g.axis === gap.axis && g.bound === gap.bound);
120
+ const worse = !prior ||
121
+ (gap.bound === 'min'
122
+ ? gap.need > prior.need + 1e-9 || gap.declared < prior.declared
123
+ : gap.need < prior.need - 1e-9 || gap.declared > prior.declared);
124
+ if (!worse)
125
+ continue;
126
+ const path = FIGURE_INSTANCE_SIZE_INPUTS[gap.axis];
127
+ const by = gap.who ? ` (${gap.who})` : '';
128
+ const details = {
129
+ reason: 'size-cannot-reach',
130
+ axis: gap.axis,
131
+ bound: gap.bound,
132
+ need: round6(gap.need),
133
+ ...(gap.who ? { part: gap.who } : {})
134
+ };
135
+ if (gap.bound === 'min')
136
+ fail('INSTANCE_SIZE_RANGE', path, `below ${round6(gap.need)} mm a length goes to zero${by}; declare the smallest size at ${round6(gap.need)} mm or more`, details);
137
+ fail('INSTANCE_SIZE_RANGE', path, `above ${round6(gap.need)} mm the figure cannot be drawn${by}; declare the largest size at ${round6(gap.need)} mm or less`, details);
138
+ }
139
+ }
140
+ //# sourceMappingURL=authoring-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-size.js","sourceRoot":"","sources":["../src/authoring-size.ts"],"names":[],"mappings":"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"}