@reekon-tools/boldr-cad 1.5.0 → 1.7.0

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 (185) hide show
  1. package/README.md +12 -1
  2. package/dist/app/state.d.ts +3 -3
  3. package/dist/data/provider.d.ts +2 -1
  4. package/dist/data/sync.js +4 -1
  5. package/dist/data/sync.js.map +1 -1
  6. package/dist/editor/actions.js +122 -19
  7. package/dist/editor/actions.js.map +1 -1
  8. package/dist/editor/advance.d.ts +2 -0
  9. package/dist/editor/advance.js +23 -0
  10. package/dist/editor/advance.js.map +1 -0
  11. package/dist/editor/dimSize.d.ts +13 -0
  12. package/dist/editor/dimSize.js +50 -0
  13. package/dist/editor/dimSize.js.map +1 -0
  14. package/dist/editor/gestures.js +30 -7
  15. package/dist/editor/gestures.js.map +1 -1
  16. package/dist/editor/keypad.d.ts +8 -0
  17. package/dist/editor/keypad.js +15 -1
  18. package/dist/editor/keypad.js.map +1 -1
  19. package/dist/editor/keys.js +2 -1
  20. package/dist/editor/keys.js.map +1 -1
  21. package/dist/editor/laser.d.ts +13 -2
  22. package/dist/editor/laser.js +42 -14
  23. package/dist/editor/laser.js.map +1 -1
  24. package/dist/editor/linkActions.d.ts +29 -11
  25. package/dist/editor/linkActions.js +76 -29
  26. package/dist/editor/linkActions.js.map +1 -1
  27. package/dist/editor/links.d.ts +13 -0
  28. package/dist/editor/links.js +7 -1
  29. package/dist/editor/links.js.map +1 -1
  30. package/dist/editor/mode.d.ts +2 -1
  31. package/dist/editor/mode.js +7 -5
  32. package/dist/editor/mode.js.map +1 -1
  33. package/dist/editor/ports.d.ts +9 -0
  34. package/dist/editor/ports.js +2 -0
  35. package/dist/editor/ports.js.map +1 -1
  36. package/dist/editor/selection.js +1 -1
  37. package/dist/editor/selection.js.map +1 -1
  38. package/dist/editor/tooltips.js +1 -0
  39. package/dist/editor/tooltips.js.map +1 -1
  40. package/dist/index.d.ts +2 -1
  41. package/dist/index.js +2 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/model/clockwise.d.ts +11 -0
  44. package/dist/model/clockwise.js +123 -0
  45. package/dist/model/clockwise.js.map +1 -0
  46. package/dist/model/constraints.js +2 -0
  47. package/dist/model/constraints.js.map +1 -1
  48. package/dist/model/geom.d.ts +2 -0
  49. package/dist/model/geom.js +11 -0
  50. package/dist/model/geom.js.map +1 -1
  51. package/dist/model/links.d.ts +6 -1
  52. package/dist/model/links.js +6 -1
  53. package/dist/model/links.js.map +1 -1
  54. package/dist/model/scale.js +3 -0
  55. package/dist/model/scale.js.map +1 -1
  56. package/dist/model/settings.d.ts +2 -0
  57. package/dist/model/settings.js +1 -1
  58. package/dist/model/settings.js.map +1 -1
  59. package/dist/model/sketch.d.ts +5 -1
  60. package/dist/model/sketch.js +19 -18
  61. package/dist/model/sketch.js.map +1 -1
  62. package/dist/model/trim.d.ts +54 -0
  63. package/dist/model/trim.js +219 -0
  64. package/dist/model/trim.js.map +1 -0
  65. package/dist/model/types.d.ts +24 -2
  66. package/dist/react/BottomBar.js +94 -25
  67. package/dist/react/BottomBar.js.map +1 -1
  68. package/dist/react/CadEditor.js +18 -9
  69. package/dist/react/CadEditor.js.map +1 -1
  70. package/dist/react/Drawer.js +3 -2
  71. package/dist/react/Drawer.js.map +1 -1
  72. package/dist/react/PlanCanvas.native.js +15 -9
  73. package/dist/react/PlanCanvas.native.js.map +1 -1
  74. package/dist/react/PlanCanvas.web.js +17 -5
  75. package/dist/react/PlanCanvas.web.js.map +1 -1
  76. package/dist/react/ShapeMenu.js +3 -2
  77. package/dist/react/ShapeMenu.js.map +1 -1
  78. package/dist/react/ToolTip.js +3 -2
  79. package/dist/react/ToolTip.js.map +1 -1
  80. package/dist/react/TopBar.js +4 -3
  81. package/dist/react/TopBar.js.map +1 -1
  82. package/dist/react/editorBox.d.ts +8 -0
  83. package/dist/react/editorBox.js +10 -0
  84. package/dist/react/editorBox.js.map +1 -0
  85. package/dist/react/host.d.ts +7 -1
  86. package/dist/react/host.js +12 -2
  87. package/dist/react/host.js.map +1 -1
  88. package/dist/react/pageLock.native.d.ts +2 -0
  89. package/dist/react/pageLock.native.js +2 -0
  90. package/dist/react/pageLock.native.js.map +1 -1
  91. package/dist/react/pageLock.web.d.ts +6 -0
  92. package/dist/react/pageLock.web.js +12 -3
  93. package/dist/react/pageLock.web.js.map +1 -1
  94. package/dist/react/ports.js +10 -4
  95. package/dist/react/ports.js.map +1 -1
  96. package/dist/react/saving.d.ts +7 -1
  97. package/dist/react/saving.js +10 -2
  98. package/dist/react/saving.js.map +1 -1
  99. package/dist/react/store.d.ts +5 -2
  100. package/dist/react/store.js +4 -1
  101. package/dist/react/store.js.map +1 -1
  102. package/dist/render/draw.d.ts +7 -0
  103. package/dist/render/draw.js +41 -15
  104. package/dist/render/draw.js.map +1 -1
  105. package/dist/render/linkTile.js +2 -2
  106. package/dist/render/linkTile.js.map +1 -1
  107. package/dist/render/navigate.d.ts +11 -6
  108. package/dist/render/navigate.js +34 -20
  109. package/dist/render/navigate.js.map +1 -1
  110. package/dist/render/snap.d.ts +5 -0
  111. package/dist/render/snap.js +84 -14
  112. package/dist/render/snap.js.map +1 -1
  113. package/dist/render/view.js +7 -2
  114. package/dist/render/view.js.map +1 -1
  115. package/dist/solver/equations.js +30 -16
  116. package/dist/solver/equations.js.map +1 -1
  117. package/dist/tools/dim.d.ts +6 -0
  118. package/dist/tools/dim.js +28 -4
  119. package/dist/tools/dim.js.map +1 -1
  120. package/dist/tools/modify.d.ts +32 -4
  121. package/dist/tools/modify.js +247 -97
  122. package/dist/tools/modify.js.map +1 -1
  123. package/dist/tools/registry.d.ts +2 -0
  124. package/dist/tools/registry.js +8 -0
  125. package/dist/tools/registry.js.map +1 -1
  126. package/dist/tools/select.d.ts +11 -8
  127. package/dist/tools/select.js +51 -19
  128. package/dist/tools/select.js.map +1 -1
  129. package/package.json +1 -1
  130. package/src/app/state.ts +3 -3
  131. package/src/data/provider.ts +2 -2
  132. package/src/data/sync.ts +4 -1
  133. package/src/editor/actions.ts +98 -16
  134. package/src/editor/advance.ts +23 -0
  135. package/src/editor/dimSize.ts +53 -0
  136. package/src/editor/gestures.ts +31 -9
  137. package/src/editor/keypad.ts +17 -1
  138. package/src/editor/keys.ts +2 -1
  139. package/src/editor/laser.ts +45 -14
  140. package/src/editor/linkActions.ts +87 -26
  141. package/src/editor/links.ts +17 -1
  142. package/src/editor/mode.ts +7 -5
  143. package/src/editor/ports.ts +10 -0
  144. package/src/editor/selection.ts +1 -1
  145. package/src/editor/tooltips.ts +1 -0
  146. package/src/index.ts +2 -2
  147. package/src/model/clockwise.ts +121 -0
  148. package/src/model/constraints.ts +1 -0
  149. package/src/model/geom.ts +10 -0
  150. package/src/model/links.ts +6 -1
  151. package/src/model/scale.ts +2 -0
  152. package/src/model/settings.ts +3 -1
  153. package/src/model/sketch.ts +14 -7
  154. package/src/model/trim.ts +188 -0
  155. package/src/model/types.ts +19 -2
  156. package/src/react/BottomBar.tsx +109 -25
  157. package/src/react/CadEditor.tsx +19 -9
  158. package/src/react/Drawer.tsx +3 -2
  159. package/src/react/PlanCanvas.native.tsx +25 -12
  160. package/src/react/PlanCanvas.web.tsx +17 -5
  161. package/src/react/ShapeMenu.tsx +3 -2
  162. package/src/react/ToolTip.tsx +3 -2
  163. package/src/react/TopBar.tsx +4 -3
  164. package/src/react/editorBox.ts +20 -0
  165. package/src/react/host.ts +12 -2
  166. package/src/react/pageLock.native.ts +2 -0
  167. package/src/react/pageLock.web.ts +12 -3
  168. package/src/react/ports.ts +10 -4
  169. package/src/react/saving.ts +10 -2
  170. package/src/react/store.ts +5 -2
  171. package/src/render/draw.ts +38 -16
  172. package/src/render/linkTile.ts +2 -2
  173. package/src/render/navigate.ts +31 -20
  174. package/src/render/snap.ts +80 -15
  175. package/src/render/view.ts +6 -2
  176. package/src/solver/equations.ts +30 -16
  177. package/src/tools/dim.ts +28 -4
  178. package/src/tools/modify.ts +205 -69
  179. package/src/tools/registry.ts +8 -0
  180. package/src/tools/select.ts +47 -20
  181. package/src/ui/domPorts.ts +2 -0
  182. package/dist/react/LaserTray.d.ts +0 -4
  183. package/dist/react/LaserTray.js +0 -26
  184. package/dist/react/LaserTray.js.map +0 -1
  185. package/src/react/LaserTray.tsx +0 -42
package/README.md CHANGED
@@ -261,10 +261,11 @@ For tests and prototypes, `memoryProvider()` is an in-memory provider with
261
261
  ### Measuring devices
262
262
 
263
263
  ```ts
264
- import { setLaserConnected, laserReading, surveyClose, surveyCursor, surveyPoint } from '@reekon-tools/boldr-cad';
264
+ import { setLaserConnected, laserReading, laserReadingOverwrites, surveyClose, surveyCursor, surveyPoint } from '@reekon-tools/boldr-cad';
265
265
 
266
266
  setLaserConnected(true); // shows the reading tray, enables the keypad's Laser key
267
267
  laserReading(inches, capture); // into an open keypad, onto the selected wall, or into the tray
268
+ laserReadingOverwrites(inches); // would it replace a length already measured? (asks only; changes nothing)
268
269
  surveyPoint(x, y, capture); // a templating device's point (BOLDR's T1R): builds the drawing
269
270
  surveyClose(); // its "close" button: closes the open run back to its first point
270
271
  surveyCursor({ x, y }); // its live point: a ring where the next one would land (null hides it)
@@ -273,6 +274,16 @@ surveyCursor({ x, y }); // its live point: a ring where the next one wou
273
274
  `laserReading` returns `false` when no drawing is open to take the value, so
274
275
  the host can handle it instead.
275
276
 
277
+ **Warning before an overwrite.** A host that warns before a reading replaces a
278
+ measured length (BOLDR's mobile app does; BOLDR Web doesn't) asks
279
+ `laserReadingOverwrites(inches)` first. It's true when the reading would change
280
+ a length or diameter already entered: on the selected line, wall edge or curve,
281
+ or through the host's own keypad opened on that dimension (a phone's, which
282
+ applies a reading at once). It's false for the editor's own keypad, where a
283
+ reading waits in the display to be applied, and for a dimension linked to a job
284
+ measurement, which the editor asks about itself. Hold the reading, ask, and call
285
+ `laserReading` once the person agrees.
286
+
276
287
  **Templating devices.** `surveyPoint(x, y, capture)` takes a point in inches,
277
288
  on the plan's axes, **x right and y up**. Turning the device's own frame into
278
289
  that is the host's job, and it decides whether templates come out mirrored: a
@@ -29,14 +29,14 @@ export interface Guide {
29
29
  from?: string;
30
30
  label?: string;
31
31
  }
32
- export type SnapKind = 'point' | 'mid' | 'online' | 'oncircle' | 'inter' | 'free' | 'grid';
32
+ export type SnapKind = 'point' | 'mid' | 'online' | 'oncircle' | 'inter' | 'onface' | 'facecorner' | 'free' | 'grid';
33
33
  export interface Snap {
34
34
  x: number;
35
35
  y: number;
36
36
  kind: SnapKind;
37
- /** point id (point), line id (mid/online), curve id (oncircle) */
37
+ /** point id (point), line id (mid/online), curve id (oncircle), a wall's edge id (onface: '<line id>|<side>', edgeOf) */
38
38
  ref?: string | null;
39
- /** the two lines for an intersection */
39
+ /** the two lines for an intersection; the two walls' edges where their faces meet (facecorner) */
40
40
  refs?: [string, string];
41
41
  label?: string;
42
42
  guides: Guide[];
@@ -6,10 +6,11 @@ export interface CadFileMeta {
6
6
  version: 1;
7
7
  /** page ids, in order */
8
8
  pageOrder: string[];
9
- /** drawing settings everyone sees the same way */
9
+ /** drawing settings everyone sees the same way (`chipPct`: its measurement tiles' size, percent; unset 100) */
10
10
  settings?: {
11
11
  wallH?: number;
12
12
  layers?: Partial<Layers>;
13
+ chipPct?: number;
13
14
  };
14
15
  }
15
16
  /** One page as stored. Its images' src are uploaded images' addresses, never inline image data. */
package/dist/data/sync.js CHANGED
@@ -141,7 +141,8 @@ export function openCadDrawing(provider, opts = {}) {
141
141
  const queue = (fn) => { chain = chain.then(fn).catch(fail); };
142
142
  const metaOf = (p) => ({
143
143
  format: 'boldr-cad', version: 1, pageOrder: p.pages.map(pg => pg.id),
144
- settings: { wallH: settings.wallH, layers: { ...settings.layers } },
144
+ // (the measurement tiles' size only once it isn't 100%: a drawing never resized keeps the record it had)
145
+ settings: { wallH: settings.wallH, layers: { ...settings.layers }, ...(settings.chipPct !== 100 ? { chipPct: settings.chipPct } : {}) },
145
146
  });
146
147
  const docOf = (pg) => ({ name: pg.name, sk: pg.sk, underlays: pg.underlays, rev: { clientId, seq: ++seq } });
147
148
  /** Take in pages and the record someone else changed, where nothing local is unsaved. */
@@ -213,6 +214,8 @@ export function openCadDrawing(provider, opts = {}) {
213
214
  settings.wallH = st.wallH;
214
215
  if (st?.layers)
215
216
  settings.layers = Object.assign(defaultLayers(), st.layers);
217
+ // (this file's, never one opened before it)
218
+ settings.chipPct = st?.chipPct ?? 100;
216
219
  // the record as this editor would write it (a record missing newer settings isn't an unsaved change)
217
220
  if (file?.meta)
218
221
  savedMeta = JSON.stringify(metaOf(project));
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/data/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAoB,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGzD;;;;;EAKE;AAEF,sGAAsG;AACtG,MAAM,OAAO,cAAe,SAAQ,KAAK;IAClB,MAAM;IAA3B,YAAqB,MAA4B;QAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;sBAAvJ,MAAM;IAAkJ,CAAC;CAC/K;AAgCD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAa;IACzC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAEtC,MAAM,QAAQ,GAAG,CAAC,CAAyE,EAAE,EAAE,CAC7F,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAmC,CAAC,EAAE,CAAC,CAAC;AACvG,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAE/G,MAAM,UAAU,cAAc,CAAC,QAAyB,EAAE,IAAI,GAAmB,EAAE;IACjF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAG,CAAC,EAAE,IAAmE,EAAE,KAA6C,CAAC;IAChI,gGAAgG;IAChG,IAAI,aAAa,GAAG,KAAK,EAAE,cAAc,GAAG,KAAK,CAAC;IAClD,oGAAoG;IACpG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,wDAAwD;IACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,8DAA8D;IAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,SAAS,GAAG,EAAE,EAAE,OAAO,GAAmB,IAAI,EAAE,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9G,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;IACnC,6FAA6F;IAC7F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,iHAAiH;IACjH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,MAAM,GAAG,EAAE,EAAE,SAAS,GAAwB,IAAI,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IAE1F;;;;;OAKG;IACH,SAAS,gBAAgB,CAAC,CAAU;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChE,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC9B,uEAAuE;gBACvE,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;oBAAC,IAAI,CAAC,CAAC,aAAa;wBAAE,OAAO,CAAC,CAAC,aAAa,CAAC;oBAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACpG,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3E,IAAI,CAAC,CAAC,CAAC,aAAa;oBAAE,SAAS;gBAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;oBAC9E,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC;oBAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACvB,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACD,wGAAwG;QACxG,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClJ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAAC,MAAM,GAAG,EAAE,CAAC;YAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAAC,CAAC;IAC5H,CAAC;IAED,gGAAgG;IAChG,SAAS,kBAAkB,CAAC,MAA2C;QACrE,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,EAAE,CAAC,KAAK;gBAAE,SAAS;YAChC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;gBAAE,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnE,IAAI,CAAC,CAAC,aAAa,KAAK,EAAE;wBAAE,SAAS;oBACrC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;wBAAE,SAAS;oBACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC;oBACvE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,8CAA8C;oBAC3E,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrB,wHAAwH;wBACxH,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;wBACZ,IAAI,OAAO,EAAE,CAAC;4BAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;4BAAC,OAAO,EAAE,CAAC;4BAAC,WAAW,EAAE,CAAC;4BAAC,eAAe,EAAE,CAAC;wBAAC,CAAC;wBAChG,SAAS;oBACX,CAAC;oBACD,yGAAyG;oBACzG,IAAI,OAAO;wBAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;wBAC5B,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,EAAuB,EAAE,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnF,MAAM,MAAM,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACpE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE;KACpE,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,EAAQ,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAE/H,yFAAyF;IACzF,SAAS,MAAM;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK;YAAE,OAAO;QAC/B,IAAI,OAAO,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,CAAC;QACxC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK,QAAQ;gBAAE,SAAS,CAAC,4BAA4B;YAC1E,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS,CAAC,8DAA8D;YAC7F,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,yEAAyE;YAC9F,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS,CAAC,oCAAoC;gBAC/G,+GAA+G;gBAC/G,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3C,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1E,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,EAAE,KAAK,KAAK,CAAC,SAAS;oBAAE,UAAU,GAAG,IAAI,CAAC;YAChD,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS,CAAC,4DAA4D;;gBAC3F,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACpB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YACrF,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;YAAC,CAAC;QACjG,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;QAAC,CAAC;QACrF,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,UAAU,EAAE,CAAC;YAAC,OAAO,EAAE,CAAC;YAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QACjE,YAAY,EAAE,CAAC;QAAC,SAAS,EAAE,CAAC;QAAC,YAAY,EAAE,CAAC;QAAC,iBAAiB,EAAE,CAAC;QAAC,eAAe,EAAE,CAAC;QAAC,WAAW,EAAE,CAAC;QAAC,YAAY,EAAE,CAAC;IACrH,CAAC;IAED,MAAM,WAAW,GAAgB;QAC/B,IAAI;YACF,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;YAChC,IAAI,EAAE,EAAE,KAAK;gBAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACzC,IAAI,EAAE,EAAE,MAAM;gBAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5E,qGAAqG;YACrG,IAAI,IAAI,EAAE,IAAI;gBAAE,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI;YACF,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,IAAI,OAAO,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/B,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACpB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC1B,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACxC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClD,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;oBAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpH,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBACH,uGAAuG;wBACvG,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;4BAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;gCAAE,SAAS;4BACzC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;4BACpE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BACvB,0FAA0F;4BAC1F,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS;gCAAE,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;oCAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;4BAC/D,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC/B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC/B,WAAW,EAAE,CAAC;wBAChB,CAAC;wBACD,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,6EAA6E;wBAC7E,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;4BAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACxF,MAAM,CAAC,CAAC;oBACV,CAAC;4BAAS,CAAC;wBAAC,IAAI,EAAE,CAAC;oBAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjB,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;wBAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;4BAAS,CAAC;wBAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;gBAC3F,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,SAAS,CAAC;gBACtB,SAAS,GAAG,EAAE,CAAC;gBACf,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAAC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBAAC,IAAI,SAAS,KAAK,EAAE;4BAAE,SAAS,GAAG,GAAG,CAAC;wBAAC,MAAM,CAAC,CAAC;oBAAC,CAAC;gBACvG,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAC/D,iHAAiH;YACjH,2GAA2G;YAC3G,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa;gBAAE,OAAO;YAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;YACjE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,cAAc,IAAI,CAAC,KAAK;gBAAE,OAAO;YAC3E,KAAK,GAAG,IAAI,CAAC;YACb,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1G,6EAA6E;YAC7E,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClK,KAAK,MAAM,EAAE,IAAI,GAAG;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,IAAI;gBAAE,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,6GAA6G;YAC7G,yGAAyG;YACzG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC;gBAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvB,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClG,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC;gBACN,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK;gBACpC,aAAa,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,eAAe;oBAAE,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5G,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxE,UAAU,EAAE,GAAG,EAAE;oBACf,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC9D,IAAI,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACrB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACvE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACjF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;gBACjD,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK;YAAE,MAAM,EAAE,CAAC;;YAAM,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvI,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK;YAAE,MAAM,EAAE,CAAC;;YAAM,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,SAAS,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7E,mEAAmE;QACnE,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,KAAK,EAAE,CAAC;;YAC7B,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/data/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAoB,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGzD;;;;;EAKE;AAEF,sGAAsG;AACtG,MAAM,OAAO,cAAe,SAAQ,KAAK;IAClB,MAAM;IAA3B,YAAqB,MAA4B;QAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;sBAAvJ,MAAM;IAAkJ,CAAC;CAC/K;AAgCD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAa;IACzC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAEtC,MAAM,QAAQ,GAAG,CAAC,CAAyE,EAAE,EAAE,CAC7F,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAmC,CAAC,EAAE,CAAC,CAAC;AACvG,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAE/G,MAAM,UAAU,cAAc,CAAC,QAAyB,EAAE,IAAI,GAAmB,EAAE;IACjF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAG,CAAC,EAAE,IAAmE,EAAE,KAA6C,CAAC;IAChI,gGAAgG;IAChG,IAAI,aAAa,GAAG,KAAK,EAAE,cAAc,GAAG,KAAK,CAAC;IAClD,oGAAoG;IACpG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,wDAAwD;IACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,8DAA8D;IAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,SAAS,GAAG,EAAE,EAAE,OAAO,GAAmB,IAAI,EAAE,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9G,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;IACnC,6FAA6F;IAC7F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,iHAAiH;IACjH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,MAAM,GAAG,EAAE,EAAE,SAAS,GAAwB,IAAI,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IAE1F;;;;;OAKG;IACH,SAAS,gBAAgB,CAAC,CAAU;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChE,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC9B,uEAAuE;gBACvE,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;oBAAC,IAAI,CAAC,CAAC,aAAa;wBAAE,OAAO,CAAC,CAAC,aAAa,CAAC;oBAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACpG,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3E,IAAI,CAAC,CAAC,CAAC,aAAa;oBAAE,SAAS;gBAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;oBAC9E,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC;oBAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACvB,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACD,wGAAwG;QACxG,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClJ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAAC,MAAM,GAAG,EAAE,CAAC;YAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAAC,CAAC;IAC5H,CAAC;IAED,gGAAgG;IAChG,SAAS,kBAAkB,CAAC,MAA2C;QACrE,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,EAAE,CAAC,KAAK;gBAAE,SAAS;YAChC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;gBAAE,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnE,IAAI,CAAC,CAAC,aAAa,KAAK,EAAE;wBAAE,SAAS;oBACrC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;wBAAE,SAAS;oBACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC;oBACvE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,8CAA8C;oBAC3E,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrB,wHAAwH;wBACxH,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;wBACZ,IAAI,OAAO,EAAE,CAAC;4BAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;4BAAC,OAAO,EAAE,CAAC;4BAAC,WAAW,EAAE,CAAC;4BAAC,eAAe,EAAE,CAAC;wBAAC,CAAC;wBAChG,SAAS;oBACX,CAAC;oBACD,yGAAyG;oBACzG,IAAI,OAAO;wBAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;wBAC5B,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,EAAuB,EAAE,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnF,MAAM,MAAM,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACpE,yGAAyG;QACzG,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KACxI,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,EAAQ,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAE/H,yFAAyF;IACzF,SAAS,MAAM;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK;YAAE,OAAO;QAC/B,IAAI,OAAO,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,CAAC;QACxC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK,QAAQ;gBAAE,SAAS,CAAC,4BAA4B;YAC1E,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS,CAAC,8DAA8D;YAC7F,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,yEAAyE;YAC9F,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS,CAAC,oCAAoC;gBAC/G,+GAA+G;gBAC/G,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3C,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1E,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,EAAE,KAAK,KAAK,CAAC,SAAS;oBAAE,UAAU,GAAG,IAAI,CAAC;YAChD,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS,CAAC,4DAA4D;;gBAC3F,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACpB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YACrF,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;YAAC,CAAC;QACjG,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;QAAC,CAAC;QACrF,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,UAAU,EAAE,CAAC;YAAC,OAAO,EAAE,CAAC;YAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QACjE,YAAY,EAAE,CAAC;QAAC,SAAS,EAAE,CAAC;QAAC,YAAY,EAAE,CAAC;QAAC,iBAAiB,EAAE,CAAC;QAAC,eAAe,EAAE,CAAC;QAAC,WAAW,EAAE,CAAC;QAAC,YAAY,EAAE,CAAC;IACrH,CAAC;IAED,MAAM,WAAW,GAAgB;QAC/B,IAAI;YACF,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;YAChC,IAAI,EAAE,EAAE,KAAK;gBAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACzC,IAAI,EAAE,EAAE,MAAM;gBAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5E,4CAA4C;YAC5C,QAAQ,CAAC,OAAO,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;YACtC,qGAAqG;YACrG,IAAI,IAAI,EAAE,IAAI;gBAAE,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI;YACF,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,IAAI,OAAO,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/B,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACpB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC1B,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACxC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClD,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;oBAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpH,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBACH,uGAAuG;wBACvG,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;4BAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;gCAAE,SAAS;4BACzC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;4BACpE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BACvB,0FAA0F;4BAC1F,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS;gCAAE,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;oCAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;4BAC/D,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC/B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC/B,WAAW,EAAE,CAAC;wBAChB,CAAC;wBACD,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,6EAA6E;wBAC7E,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;4BAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACxF,MAAM,CAAC,CAAC;oBACV,CAAC;4BAAS,CAAC;wBAAC,IAAI,EAAE,CAAC;oBAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjB,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;wBAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;4BAAS,CAAC;wBAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;gBAC3F,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,SAAS,CAAC;gBACtB,SAAS,GAAG,EAAE,CAAC;gBACf,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAAC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBAAC,IAAI,SAAS,KAAK,EAAE;4BAAE,SAAS,GAAG,GAAG,CAAC;wBAAC,MAAM,CAAC,CAAC;oBAAC,CAAC;gBACvG,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAC/D,iHAAiH;YACjH,2GAA2G;YAC3G,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa;gBAAE,OAAO;YAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;YACjE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,cAAc,IAAI,CAAC,KAAK;gBAAE,OAAO;YAC3E,KAAK,GAAG,IAAI,CAAC;YACb,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1G,6EAA6E;YAC7E,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClK,KAAK,MAAM,EAAE,IAAI,GAAG;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,IAAI;gBAAE,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,6GAA6G;YAC7G,yGAAyG;YACzG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC;gBAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvB,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClG,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC;gBACN,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK;gBACpC,aAAa,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,eAAe;oBAAE,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5G,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxE,UAAU,EAAE,GAAG,EAAE;oBACf,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC9D,IAAI,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACrB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACvE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACjF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;gBACjD,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK;YAAE,MAAM,EAAE,CAAC;;YAAM,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvI,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK;YAAE,MAAM,EAAE,CAAC;;YAAM,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,SAAS,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7E,mEAAmE;QACnE,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,KAAK,EAAE,CAAC;;YAC7B,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { afterEdit, holdFaces, solveSketch, tryAddConstraint, undo } from '../app/edit';
2
2
  import { ed } from '../app/state';
3
- import { CONS_LABEL, measure } from '../model/constraints';
3
+ import { CONS_LABEL, consLabel, measure } from '../model/constraints';
4
4
  import { dropHistory, pushHistory } from '../model/history';
5
5
  import { createsCycle, edgePoint, facingEdges, flipDoor, nearerEdge } from '../model/openings';
6
6
  import { roomSideOf } from '../model/elevation';
@@ -19,7 +19,8 @@ import { setTool, tools } from '../tools/registry';
19
19
  import { fmtLen } from '../units';
20
20
  import { elevOpen, fitState, OPENING_SIZES, openElevation, overflow, restoreFit, TOO_SHORT, wallAction, wallBar, wallDelete, wallPlus } from './elevation';
21
21
  import { pushedOut } from '../model/facesolve';
22
- import { dismissPopovers, editRoomName, openKeypad, openPalette, toast, toggleImageOpacity, toggleImageRotation, toggleTileSize, updateCtx, updateTopBar } from './ports';
22
+ import { dismissPopovers, editRoomName, openKeypad, openPalette, toast, toggleDimSize, toggleImageOpacity, toggleImageRotation, toggleTileSize, updateCtx, updateTopBar } from './ports';
23
+ import { dimSizeVisible } from './dimSize';
23
24
  import { cornerLines, edgePair, selInfo } from './selection';
24
25
  import { restackImage } from './project';
25
26
  import { imageById } from '../model/images';
@@ -29,7 +30,8 @@ export const iconAlone = (it) => !!(it.lead || it.bare);
29
30
  /** Points a Lock on the current selection would pin (the origin is always fixed). */
30
31
  function lockTargets() {
31
32
  const sk = SK(), s = selInfo(), ids = new Set(s.points);
32
- s.lines.forEach(id => { ids.add(sk.lines[id].a); ids.add(sk.lines[id].b); });
33
+ // (a straight wall's edge: its wall, as if picked whole)
34
+ withEdges(sk, s).forEach(id => { ids.add(sk.lines[id].a); ids.add(sk.lines[id].b); });
33
35
  s.curves.forEach(id => { const ci = curveInfo(sk, id); if (ci)
34
36
  ids.add(ci.o.c); });
35
37
  return [...ids].filter(id => sk.points[id] && !sk.points[id].origin && !sk.points[id].anchor);
@@ -167,23 +169,28 @@ function ctxItems() {
167
169
  const P = s.points.length, L = s.lines.length, C = s.curves.length;
168
170
  /**
169
171
  * What the selected lines and curves are, and its divider: walls — one straight wall's wall view, and their Thickness;
170
- * otherwise To wall, and Guide (Solid, when they all are guides). A wall is always solid; on a wall face, Guide alone.
172
+ * otherwise To wall, and Guide (Solid, when they all are guides). A wall is always solid, so with one among them
173
+ * there's no Guide (the user's call, 2026-11-03: a wall and a line picked together offered it) — only Solid, for a
174
+ * wall that's a guide from before; on a wall face, Guide alone. `walls`: the walls of picked edges, as if picked whole.
171
175
  */
172
- const kind = () => {
173
- const objs = [...s.lines.map(id => sk.lines[id]), ...s.curves.map(id => curveInfo(sk, id)?.o)].filter((o) => !!o);
176
+ const kind = (walls = []) => {
177
+ const objs = [...s.lines.map(id => sk.lines[id]), ...walls.map(id => sk.lines[id]), ...s.curves.map(id => curveInfo(sk, id)?.o)].filter((o) => !!o);
174
178
  if (!objs.length)
175
179
  return;
176
- if (objs.every(o => o.kind === 'wall' && !o.constr)) {
180
+ if (objs.every(o => o.kind === 'wall')) {
177
181
  if (wall)
178
182
  return;
179
183
  if (s.n === 1 && L === 1)
180
184
  add('elev', 'Elevation', 'elev');
181
185
  add('thick', 'Thickness', 'thick');
186
+ if (objs.some(o => o.constr))
187
+ add('constr', 'Solid', 'constr');
182
188
  }
183
189
  else {
184
190
  if (!wall)
185
191
  add('wall', 'To wall', 'kind');
186
- add('constr', objs.every(o => o.constr) ? 'Solid' : 'Guide', 'constr');
192
+ if (!objs.some(o => o.kind === 'wall'))
193
+ add('constr', objs.every(o => o.constr) ? 'Solid' : 'Guide', 'constr');
187
194
  }
188
195
  items.push('sep');
189
196
  };
@@ -196,6 +203,28 @@ function ctxItems() {
196
203
  if (sk.lines[id])
197
204
  add('elev', 'Elevation', 'elev');
198
205
  }
206
+ else if (s.n === 2 && straightEdges(sk, s).length === s.wfaces.length) {
207
+ /*
208
+ A straight wall's edge with a point or a line: the bar the wall picked whole has (the user's call, 2026-11-03:
209
+ "add equal, lock, and to wall to both bottom bars"), each acting on what's picked — the point On face; Parallel
210
+ and Perpendicular, the wall (a face runs with its centreline); Collinear, the line along the face (both its ends
211
+ on it); Equal, the face's length, corner to corner. (Two edges: no Collinear — their faces flush is another thing.)
212
+ */
213
+ // (the two edges of one wall: nothing but the + — its thickness)
214
+ const pair = new Set(withEdges(sk, s)).size === 2;
215
+ if (P === 1 || pair)
216
+ add('lock', 'Lock', 'lock', { key: '⇧F' });
217
+ if (P === 1)
218
+ add('online', 'On face', 'online', { key: '⇧O' });
219
+ else if (pair) {
220
+ kind(straightEdges(sk, s).map(([id]) => id));
221
+ add('par', 'Parallel', 'par', { key: '⇧P' });
222
+ add('perp', 'Perpendicular', 'perp', { key: '⇧R' });
223
+ if (L === 1)
224
+ add('col', 'Collinear', 'col', { key: '⇧L' });
225
+ add('eq', 'Equal', 'eq', { key: '⇧E' });
226
+ }
227
+ }
199
228
  return items;
200
229
  }
201
230
  if (s.n === 1 && s.dims.length) {
@@ -216,12 +245,17 @@ function ctxItems() {
216
245
  if (fc.length && items.length)
217
246
  items.push('sep');
218
247
  fc.forEach((ch, i) => add(ch.icon, ch.short, 'dimFace' + i, { on: onChoice(c, ch) }));
248
+ // (every measurement tile in the file: a slider above the bar, as a tile's Size — editor/dimSize.ts)
249
+ if (dimSizeVisible())
250
+ add('tilesize', 'Size', 'dimSize');
219
251
  return items;
220
252
  }
221
253
  if (s.n === 1 && s.odims.length) {
222
254
  const [op, part] = s.odims[0].split('|'), d = part.startsWith('d:') ? (sk.openings[op]?.dims || []).find(x => x.id === part.slice(2)) : null;
223
255
  if (d)
224
256
  add('ref', d.driving ? 'Reference' : 'Drive', 'odimRef');
257
+ if (dimSizeVisible())
258
+ add('tilesize', 'Size', 'dimSize');
225
259
  return items;
226
260
  }
227
261
  // a constraint badge: nothing to offer but delete (the trash), so the bar stays empty
@@ -465,6 +499,10 @@ export function deleteSelection() {
465
499
  afterEdit();
466
500
  toast(imgIds.size && !rest.length ? (imgIds.size > 1 ? 'Images removed' : 'Image removed') : 'Deleted', { action: { label: 'Undo', fn: () => undo() } });
467
501
  }
502
+ /** The picked edges of straight walls, as [wall, side] (a curved wall's edge has no line to stand for it). */
503
+ const straightEdges = (sk, s) => s.wfaces.map(edgeOf).filter(([id]) => !!sk.lines[id]);
504
+ /** The picked lines, and the walls of the picked straight edges. */
505
+ const withEdges = (sk, s) => [...s.lines, ...straightEdges(sk, s).map(([id]) => id)];
468
506
  function consFromSel(type) {
469
507
  const sk = SK(), s = selInfo(), L = s.lines.map(id => sk.lines[id]);
470
508
  switch (type) {
@@ -476,13 +514,28 @@ function consFromSel(type) {
476
514
  return { type, a: s.points[0], b: s.points[1] };
477
515
  return null;
478
516
  case 'par':
479
- case 'perp':
517
+ case 'perp': {
518
+ // (a wall's edge: its wall — the same thing, square to something)
519
+ const ls = withEdges(sk, s);
520
+ return ls.length === 2 && ls[0] !== ls[1] ? { type, l1: ls[0], l2: ls[1] } : null;
521
+ }
480
522
  case 'col':
481
- case 'eq':
482
523
  return s.lines.length === 2 ? { type, l1: s.lines[0], l2: s.lines[1] } : null;
524
+ case 'eq': {
525
+ // (a wall's edge: that face's length, corner to corner)
526
+ const ls = withEdges(sk, s), f = straightEdges(sk, s);
527
+ if (ls.length !== 2 || ls[0] === ls[1])
528
+ return null;
529
+ return f.length ? { type, l1: ls[0], l2: ls[1], faces: ls.map((_, i) => (i < s.lines.length ? 0 : f[i - s.lines.length][1])) } : { type, l1: ls[0], l2: ls[1] };
530
+ }
483
531
  case 'mid':
484
- case 'online':
532
+ case 'online': {
533
+ // (a point and a wall's edge: on that face)
534
+ const f = straightEdges(sk, s);
535
+ if (type === 'online' && s.n === 2 && s.points.length === 1 && f.length === 1)
536
+ return { type, p: s.points[0], l: f[0][0], face: f[0][1] };
485
537
  return s.points.length === 1 && s.lines.length === 1 ? { type, p: s.points[0], l: s.lines[0] } : null;
538
+ }
486
539
  case 'oncircle':
487
540
  return s.points.length === 1 && s.curves.length === 1 ? { type, p: s.points[0], c: s.curves[0] } : null;
488
541
  case 'tan': {
@@ -559,7 +612,46 @@ function applyMulti(type, list, points = false) {
559
612
  toast(CONS_LABEL[type] + ' added to ' + nLines + '.');
560
613
  afterEdit();
561
614
  }
615
+ /** A line and a straight wall's edge picked: the line along that face, both its ends on it (Collinear, with a face). */
616
+ function alongFace() {
617
+ const sk = SK(), s = selInfo(), f = straightEdges(sk, s);
618
+ if (s.n !== 2 || s.lines.length !== 1 || f.length !== 1 || f[0][0] === s.lines[0])
619
+ return null;
620
+ const [l, face] = f[0], ln = sk.lines[s.lines[0]];
621
+ return [ln.a, ln.b].map(p => ({ type: 'online', p, l, face }));
622
+ }
623
+ /** A line along a face (alongFace), as one undo step: its ends on it, or the conflict sheet for the first that can't be. */
624
+ function applyAlong(list) {
625
+ pushHistory();
626
+ let added = 0;
627
+ const failed = [];
628
+ for (const c of list) {
629
+ const r = tryAddConstraint(c, { silent: true });
630
+ if (r.ok)
631
+ added++;
632
+ else if (r.conflict)
633
+ failed.push(c);
634
+ }
635
+ if (!added && !failed.length) {
636
+ dropHistory();
637
+ toast('It’s already along that face.', { warn: true });
638
+ afterEdit();
639
+ return;
640
+ }
641
+ if (!added)
642
+ dropHistory();
643
+ if (failed.length)
644
+ tryAddConstraint(failed[0], { onResolved: () => afterEdit() });
645
+ else
646
+ toast(CONS_LABEL.col + ' added');
647
+ afterEdit();
648
+ }
562
649
  function applyCons(type) {
650
+ const along = type === 'col' ? alongFace() : null;
651
+ if (along) {
652
+ applyAlong(along);
653
+ return;
654
+ }
563
655
  const multi = multiLineCons(type), s = selInfo(), points = s.points.length > 2 && s.n === s.points.length;
564
656
  if (multi && (multi.length > 1 || s.lines.length > 2 || points)) {
565
657
  applyMulti(type, multi, points);
@@ -575,7 +667,7 @@ function applyCons(type) {
575
667
  if (!r.ok)
576
668
  dropHistory();
577
669
  else
578
- toast(CONS_LABEL[c.type] + ' added');
670
+ toast(consLabel(c) + ' added');
579
671
  afterEdit();
580
672
  }
581
673
  /** Run a bottom-bar action. `anchor` is the button pressed, for actions that open a popover next to it. */
@@ -723,14 +815,22 @@ export function applyCtxAction(act, anchor) {
723
815
  requestDraw();
724
816
  break;
725
817
  }
726
- case 'constr':
818
+ case 'constr': {
819
+ // all guides, or all solid again if they all are — one setting for the whole selection, as To wall is (flipping
820
+ // each swapped a guide and a line picked together). A wall is always solid: never made a guide, and one that's a
821
+ // guide from before goes back to solid
822
+ const objs = [...s.lines.filter(id => !sk.lines[id].anchor).map(id => sk.lines[id]), ...s.curves.map(id => curveInfo(sk, id)?.o)]
823
+ .filter((o) => !!o);
824
+ const lines = objs.filter(o => o.kind !== 'wall'), walls = objs.filter(o => o.kind === 'wall' && o.constr);
825
+ if (!lines.length && !walls.length)
826
+ return;
827
+ const guide = !lines.every(o => o.constr);
727
828
  pushHistory();
728
- s.lines.forEach(id => { if (!sk.lines[id].anchor)
729
- sk.lines[id].constr = !sk.lines[id].constr; });
730
- s.curves.forEach(id => { const ci = curveInfo(sk, id); if (ci)
731
- ci.o.constr = !ci.o.constr; });
829
+ lines.forEach(o => { o.constr = guide; });
830
+ walls.forEach(o => { o.constr = false; });
732
831
  afterEdit();
733
832
  return;
833
+ }
734
834
  case 'kind': {
735
835
  // one setting for the whole selection: all walls, unless they all are already (then all lines)
736
836
  const targets = [...s.lines.map(id => sk.lines[id]), ...s.curves.map(id => curveInfo(sk, id)?.o).filter((o) => !!o)];
@@ -773,9 +873,9 @@ export function applyCtxAction(act, anchor) {
773
873
  return;
774
874
  }
775
875
  case 'thick':
776
- // straight and curved walls in the selection
876
+ // straight and curved walls in the selection (an edge's: its wall)
777
877
  thicknessPrompt([
778
- ...s.lines.map(id => sk.lines[id]).filter(l => l.kind === 'wall'),
878
+ ...withEdges(sk, s).map(id => sk.lines[id]).filter(l => l.kind === 'wall'),
779
879
  ...s.curves.map(id => curveInfo(sk, id)?.o).filter((o) => !!o && o.kind === 'wall'),
780
880
  ]);
781
881
  return;
@@ -862,6 +962,9 @@ export function applyCtxAction(act, anchor) {
862
962
  case 'linkSize':
863
963
  toggleTileSize(anchor);
864
964
  return;
965
+ case 'dimSize':
966
+ toggleDimSize(anchor);
967
+ return;
865
968
  case 'dimLinkOpen':
866
969
  if (s.dims.length === 1)
867
970
  openDimLink(s.dims[0]);