@crystaldesign/planner-2d-core 26.11.0-beta.10

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 (78) hide show
  1. package/README.md +44 -0
  2. package/build/cjs/index.js +3402 -0
  3. package/build/esm/index.js +3357 -0
  4. package/build/types/planner-2d-core/src/collision/geometry.d.ts +21 -0
  5. package/build/types/planner-2d-core/src/collision/geometry.d.ts.map +1 -0
  6. package/build/types/planner-2d-core/src/core/logger.d.ts +12 -0
  7. package/build/types/planner-2d-core/src/core/logger.d.ts.map +1 -0
  8. package/build/types/planner-2d-core/src/core/units.d.ts +6 -0
  9. package/build/types/planner-2d-core/src/core/units.d.ts.map +1 -0
  10. package/build/types/planner-2d-core/src/core/vectors.d.ts +35 -0
  11. package/build/types/planner-2d-core/src/core/vectors.d.ts.map +1 -0
  12. package/build/types/planner-2d-core/src/docking/DockingPoint.d.ts +38 -0
  13. package/build/types/planner-2d-core/src/docking/DockingPoint.d.ts.map +1 -0
  14. package/build/types/planner-2d-core/src/docking/DockingPointHandler.d.ts +74 -0
  15. package/build/types/planner-2d-core/src/docking/DockingPointHandler.d.ts.map +1 -0
  16. package/build/types/planner-2d-core/src/docking/PlannerElement2D.d.ts +38 -0
  17. package/build/types/planner-2d-core/src/docking/PlannerElement2D.d.ts.map +1 -0
  18. package/build/types/planner-2d-core/src/docking/types.d.ts +26 -0
  19. package/build/types/planner-2d-core/src/docking/types.d.ts.map +1 -0
  20. package/build/types/planner-2d-core/src/index.d.ts +29 -0
  21. package/build/types/planner-2d-core/src/index.d.ts.map +1 -0
  22. package/build/types/planner-2d-core/src/stretch/axis.d.ts +38 -0
  23. package/build/types/planner-2d-core/src/stretch/axis.d.ts.map +1 -0
  24. package/build/types/planner-2d-core/src/stretch/elementTransform.d.ts +8 -0
  25. package/build/types/planner-2d-core/src/stretch/elementTransform.d.ts.map +1 -0
  26. package/build/types/planner-2d-core/src/stretch/normalize.d.ts +19 -0
  27. package/build/types/planner-2d-core/src/stretch/normalize.d.ts.map +1 -0
  28. package/build/types/planner-2d-core/src/stretch/pathTransform.d.ts +17 -0
  29. package/build/types/planner-2d-core/src/stretch/pathTransform.d.ts.map +1 -0
  30. package/build/types/planner-2d-core/src/stretch/points.d.ts +12 -0
  31. package/build/types/planner-2d-core/src/stretch/points.d.ts.map +1 -0
  32. package/build/types/planner-2d-core/src/stretch/resize.d.ts +7 -0
  33. package/build/types/planner-2d-core/src/stretch/resize.d.ts.map +1 -0
  34. package/build/types/planner-2d-core/src/stretch/rounding.d.ts +5 -0
  35. package/build/types/planner-2d-core/src/stretch/rounding.d.ts.map +1 -0
  36. package/build/types/planner-2d-core/src/stretch/state.d.ts +7 -0
  37. package/build/types/planner-2d-core/src/stretch/state.d.ts.map +1 -0
  38. package/build/types/planner-2d-core/src/stretch/stretchAreas.d.ts +7 -0
  39. package/build/types/planner-2d-core/src/stretch/stretchAreas.d.ts.map +1 -0
  40. package/build/types/planner-2d-core/src/stretch/stretchArticleSvg.d.ts +10 -0
  41. package/build/types/planner-2d-core/src/stretch/stretchArticleSvg.d.ts.map +1 -0
  42. package/build/types/planner-2d-core/src/stretch/types.d.ts +54 -0
  43. package/build/types/planner-2d-core/src/stretch/types.d.ts.map +1 -0
  44. package/build/types/planner-2d-core/src/stretch/viewBoxFix.d.ts +7 -0
  45. package/build/types/planner-2d-core/src/stretch/viewBoxFix.d.ts.map +1 -0
  46. package/build/types/planner-2d-core/src/svg/articleSvgParser.d.ts +54 -0
  47. package/build/types/planner-2d-core/src/svg/articleSvgParser.d.ts.map +1 -0
  48. package/build/types/planner-2d-core/src/svg/dom.d.ts +16 -0
  49. package/build/types/planner-2d-core/src/svg/dom.d.ts.map +1 -0
  50. package/build/types/planner-2d-core/src/svg/pathBoundingBox.d.ts +19 -0
  51. package/build/types/planner-2d-core/src/svg/pathBoundingBox.d.ts.map +1 -0
  52. package/build/types/planner-2d-core/src/svg/types.d.ts +32 -0
  53. package/build/types/planner-2d-core/src/svg/types.d.ts.map +1 -0
  54. package/build/types/planner-2d-core/src/testbed/DockingScene.d.ts +47 -0
  55. package/build/types/planner-2d-core/src/testbed/DockingScene.d.ts.map +1 -0
  56. package/build/types/planner-2d-core/src/testbed/SimplePlannerElement.d.ts +64 -0
  57. package/build/types/planner-2d-core/src/testbed/SimplePlannerElement.d.ts.map +1 -0
  58. package/build/types/planner-2d-core/src/tests/collision.test.d.ts +2 -0
  59. package/build/types/planner-2d-core/src/tests/collision.test.d.ts.map +1 -0
  60. package/build/types/planner-2d-core/src/tests/docking.test.d.ts +2 -0
  61. package/build/types/planner-2d-core/src/tests/docking.test.d.ts.map +1 -0
  62. package/build/types/planner-2d-core/src/tests/dockingScene.test.d.ts +2 -0
  63. package/build/types/planner-2d-core/src/tests/dockingScene.test.d.ts.map +1 -0
  64. package/build/types/planner-2d-core/src/tests/fixtures.d.ts +14 -0
  65. package/build/types/planner-2d-core/src/tests/fixtures.d.ts.map +1 -0
  66. package/build/types/planner-2d-core/src/tests/pathBoundingBox.test.d.ts +2 -0
  67. package/build/types/planner-2d-core/src/tests/pathBoundingBox.test.d.ts.map +1 -0
  68. package/build/types/planner-2d-core/src/tests/realArticleSvgs.test.d.ts +2 -0
  69. package/build/types/planner-2d-core/src/tests/realArticleSvgs.test.d.ts.map +1 -0
  70. package/build/types/planner-2d-core/src/tests/stretchDeviations.test.d.ts +2 -0
  71. package/build/types/planner-2d-core/src/tests/stretchDeviations.test.d.ts.map +1 -0
  72. package/build/types/planner-2d-core/src/tests/stretchRegression.test.d.ts +2 -0
  73. package/build/types/planner-2d-core/src/tests/stretchRegression.test.d.ts.map +1 -0
  74. package/build/types/planner-2d-core/src/tests/svgParser.test.d.ts +2 -0
  75. package/build/types/planner-2d-core/src/tests/svgParser.test.d.ts.map +1 -0
  76. package/build/types/planner-2d-core/src/transform/computeDockedTransform.d.ts +24 -0
  77. package/build/types/planner-2d-core/src/transform/computeDockedTransform.d.ts.map +1 -0
  78. package/package.json +24 -0
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @crystaldesign/planner-2d-core
2
+
3
+ Browser-free core of the 2D planner: article SVG parsing, docking logic, dock transform math and collision geometry.
4
+ No fabric.js, no engine, no catalog API — runs in the browser and in plain Node (backend services, unit tests, agent testbeds).
5
+
6
+ Extraction concept and phase plan: [docs/2d-planner-rework/CONCEPT.md](../../docs/2d-planner-rework/CONCEPT.md).
7
+ The ported logic is a behavior-faithful extraction of `web-planner-logic`'s `DockingPointHandler`, the fabric-free
8
+ `SVGUtils` methods and the docking math of `DivaStandardPlanner.updateWorldPos` (phase P1 — web-planner-logic still
9
+ carries its own copy until P2 switches it over to this package).
10
+
11
+ ## Modules
12
+
13
+ | Module | Contents |
14
+ | --- | --- |
15
+ | `svg/` | `getDockingPointLines`, `getPolygonPoints`, `getOltGeometry`/`getOlfGeometry`, `removeOlf`/`removeMask`, `getMinBorder` (DOM-based, Node-safe), `pathBoundingBox` (full command set M L H V C S Q T A Z incl. Bezier extrema and arcs) |
16
+ | `stretch/` | `stretchArticleSvg` — synchronous SAH/SAV stretch engine, behavior-faithful rewrite of the legacy `ccCheckStretchAreas` (OLT-then-OLF double pass, rounding rules, global-scale mode) with axis-abstracted element/path transformers and a `warnings[]` report; deviations: unknown path commands survive, unsupported stretch areas are ignored, viewBox scaling is applied exactly once |
17
+ | `docking/` | `DockingPoint`, `DockingPointHandler` (pairing rules, `checkDPsDoMatch` public), narrow `PlannerElement2D` interface |
18
+ | `transform/` | `computeDockedTransform` — pure world-transform math for a docked element |
19
+ | `collision/` | `segmentsIntersect` (fabric parity), polygon intersection/containment, `outlinesCollide` |
20
+ | `testbed/` | `DockingScene` + `SimplePlannerElement` — SVGs in, docking points/pairings/world positions out |
21
+
22
+ ## Node usage
23
+
24
+ The parser needs a DOM. In the browser nothing is required; in Node a jsdom window is loaded lazily as fallback
25
+ (`configureDom(new JSDOM('').window)` only when a custom DOM should be used):
26
+
27
+ ```ts
28
+ import { DockingScene } from '@crystaldesign/planner-2d-core';
29
+
30
+ const scene = new DockingScene();
31
+ const sofa = scene.addArticle(sofaSvg, { layer: 20 });
32
+ const extension = scene.addArticle(extensionSvg, { layer: 20 });
33
+ const result = scene.tryDock(extension, sofa); // -> { docked, dockingType, rotDeg, worldPosCorner }
34
+ ```
35
+
36
+ Logging is a no-op by default; inject one via `setPlanner2DLogger` (e.g. a DivaUtils/diva-backend-commons logger).
37
+
38
+ ## Testing
39
+
40
+ ```
41
+ ctra test @crystaldesign/planner-2d-core
42
+ ```
43
+
44
+ The suites run under `testEnvironment: node` with explicitly configured jsdom — proving the browser-free contract on every run.