@threekit-tools/treble 0.0.90-next-09 → 0.0.91

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 (193) hide show
  1. package/dist/Treble/Treble.d.ts +2 -2
  2. package/dist/Treble/Treble.js +2 -2
  3. package/dist/Treble/index.d.ts +1 -1
  4. package/dist/Treble/index.js +1 -1
  5. package/dist/hooks/useNestedConfigurator/index.js +2 -1
  6. package/dist/hooks/useRoomBuilder/RoomBuilderState.d.ts +95 -0
  7. package/dist/hooks/useRoomBuilder/RoomBuilderState.js +1237 -0
  8. package/dist/hooks/useRoomBuilder/constants.d.ts +41 -0
  9. package/dist/hooks/useRoomBuilder/constants.js +48 -0
  10. package/dist/hooks/{useSpaces → useRoomBuilder}/dataHandlers.d.ts +4 -6
  11. package/dist/hooks/{useSpaces → useRoomBuilder}/dataHandlers.js +40 -102
  12. package/dist/hooks/useRoomBuilder/draw.d.ts +55 -0
  13. package/dist/hooks/useRoomBuilder/draw.js +573 -0
  14. package/dist/hooks/useRoomBuilder/findLoops.d.ts +5 -0
  15. package/dist/hooks/{useSpaces/geometry → useRoomBuilder}/findLoops.js +9 -14
  16. package/dist/hooks/useRoomBuilder/geometry.d.ts +33 -0
  17. package/dist/hooks/useRoomBuilder/geometry.js +325 -0
  18. package/dist/hooks/useRoomBuilder/index.d.ts +40 -0
  19. package/dist/hooks/useRoomBuilder/index.js +303 -0
  20. package/dist/hooks/{useSpaces/validators → useRoomBuilder}/messaging.js +1 -1
  21. package/dist/hooks/{useSpaces/themes/index.d.ts → useRoomBuilder/themes.d.ts} +4 -3
  22. package/dist/hooks/useRoomBuilder/themes.js +273 -0
  23. package/dist/hooks/{useSpaces → useRoomBuilder}/types.d.ts +35 -130
  24. package/dist/hooks/{useSpaces → useRoomBuilder}/types.js +1 -13
  25. package/dist/hooks/useRoomBuilder/validators.d.ts +36 -0
  26. package/dist/hooks/useRoomBuilder/validators.js +362 -0
  27. package/dist/hooks/useSpaces/Canvas.d.ts +37 -0
  28. package/dist/hooks/useSpaces/Canvas.js +199 -0
  29. package/dist/icons/AngleSnapping.d.ts +3 -0
  30. package/dist/icons/AngleSnapping.js +28 -0
  31. package/dist/icons/Center.d.ts +3 -0
  32. package/dist/icons/Center.js +24 -0
  33. package/dist/icons/Draw.js +3 -3
  34. package/dist/icons/GridSnapping.d.ts +3 -0
  35. package/dist/icons/GridSnapping.js +28 -0
  36. package/dist/icons/LayoutAlt.d.ts +3 -0
  37. package/dist/icons/LayoutAlt.js +21 -0
  38. package/dist/icons/Magnet.d.ts +3 -0
  39. package/dist/icons/Magnet.js +27 -0
  40. package/dist/icons/Save.d.ts +3 -0
  41. package/dist/icons/Save.js +21 -0
  42. package/dist/icons/UnitCm.d.ts +3 -0
  43. package/dist/icons/UnitCm.js +22 -0
  44. package/dist/icons/UnitFeet.d.ts +3 -0
  45. package/dist/icons/UnitFeet.js +22 -0
  46. package/dist/icons/UnitInch.d.ts +3 -0
  47. package/dist/icons/UnitInch.js +22 -0
  48. package/dist/icons/UnitMeter.d.ts +3 -0
  49. package/dist/icons/UnitMeter.js +21 -0
  50. package/dist/icons/Window.js +4 -4
  51. package/dist/icons/index.js +0 -2
  52. package/dist/icons/types.d.ts +1 -1
  53. package/dist/index.d.ts +2 -4
  54. package/dist/index.js +5 -9
  55. package/dist/store/attributes.d.ts +0 -1
  56. package/dist/store/index.d.ts +0 -10
  57. package/dist/store/index.js +1 -3
  58. package/dist/store/treble.js +17 -21
  59. package/dist/types.d.ts +3 -5
  60. package/package.json +1 -1
  61. package/dist/hooks/useSpaces/SpacesLayout.d.ts +0 -11
  62. package/dist/hooks/useSpaces/SpacesLayout.js +0 -74
  63. package/dist/hooks/useSpaces/SpacesState.d.ts +0 -162
  64. package/dist/hooks/useSpaces/SpacesState.js +0 -1759
  65. package/dist/hooks/useSpaces/constants.d.ts +0 -44
  66. package/dist/hooks/useSpaces/constants.js +0 -105
  67. package/dist/hooks/useSpaces/draw/clearCanvas.d.ts +0 -2
  68. package/dist/hooks/useSpaces/draw/clearCanvas.js +0 -9
  69. package/dist/hooks/useSpaces/draw/drawBackground.d.ts +0 -2
  70. package/dist/hooks/useSpaces/draw/drawBackground.js +0 -12
  71. package/dist/hooks/useSpaces/draw/drawDimensions.d.ts +0 -3
  72. package/dist/hooks/useSpaces/draw/drawDimensions.js +0 -53
  73. package/dist/hooks/useSpaces/draw/drawDoors.d.ts +0 -9
  74. package/dist/hooks/useSpaces/draw/drawDoors.js +0 -93
  75. package/dist/hooks/useSpaces/draw/drawFloor.d.ts +0 -3
  76. package/dist/hooks/useSpaces/draw/drawFloor.js +0 -36
  77. package/dist/hooks/useSpaces/draw/drawGrid.d.ts +0 -3
  78. package/dist/hooks/useSpaces/draw/drawGrid.js +0 -33
  79. package/dist/hooks/useSpaces/draw/drawGuides.d.ts +0 -3
  80. package/dist/hooks/useSpaces/draw/drawGuides.js +0 -23
  81. package/dist/hooks/useSpaces/draw/drawOpenings.d.ts +0 -9
  82. package/dist/hooks/useSpaces/draw/drawOpenings.js +0 -72
  83. package/dist/hooks/useSpaces/draw/drawVertices.d.ts +0 -8
  84. package/dist/hooks/useSpaces/draw/drawVertices.js +0 -61
  85. package/dist/hooks/useSpaces/draw/drawWalls.d.ts +0 -10
  86. package/dist/hooks/useSpaces/draw/drawWalls.js +0 -64
  87. package/dist/hooks/useSpaces/draw/drawWindows.d.ts +0 -9
  88. package/dist/hooks/useSpaces/draw/drawWindows.js +0 -82
  89. package/dist/hooks/useSpaces/draw/index.d.ts +0 -11
  90. package/dist/hooks/useSpaces/draw/index.js +0 -129
  91. package/dist/hooks/useSpaces/geometry/addThicknessToLine.d.ts +0 -3
  92. package/dist/hooks/useSpaces/geometry/addThicknessToLine.js +0 -13
  93. package/dist/hooks/useSpaces/geometry/areLinesEqual.d.ts +0 -3
  94. package/dist/hooks/useSpaces/geometry/areLinesEqual.js +0 -17
  95. package/dist/hooks/useSpaces/geometry/arePointsEqual.d.ts +0 -3
  96. package/dist/hooks/useSpaces/geometry/arePointsEqual.js +0 -8
  97. package/dist/hooks/useSpaces/geometry/arePointsWithinProximity.d.ts +0 -3
  98. package/dist/hooks/useSpaces/geometry/arePointsWithinProximity.js +0 -11
  99. package/dist/hooks/useSpaces/geometry/closestPointOnLine.d.ts +0 -3
  100. package/dist/hooks/useSpaces/geometry/closestPointOnLine.js +0 -13
  101. package/dist/hooks/useSpaces/geometry/doLinesOverlap.d.ts +0 -2
  102. package/dist/hooks/useSpaces/geometry/doLinesOverlap.js +0 -16
  103. package/dist/hooks/useSpaces/geometry/euclideanMod.d.ts +0 -2
  104. package/dist/hooks/useSpaces/geometry/euclideanMod.js +0 -6
  105. package/dist/hooks/useSpaces/geometry/findLoops.d.ts +0 -6
  106. package/dist/hooks/useSpaces/geometry/getAllLineIntersections.d.ts +0 -6
  107. package/dist/hooks/useSpaces/geometry/getAllLineIntersections.js +0 -23
  108. package/dist/hooks/useSpaces/geometry/getAngleOfLineSegment.d.ts +0 -3
  109. package/dist/hooks/useSpaces/geometry/getAngleOfLineSegment.js +0 -7
  110. package/dist/hooks/useSpaces/geometry/getClosestPointOnLineSegment.d.ts +0 -3
  111. package/dist/hooks/useSpaces/geometry/getClosestPointOnLineSegment.js +0 -17
  112. package/dist/hooks/useSpaces/geometry/getDistanceToLine.d.ts +0 -3
  113. package/dist/hooks/useSpaces/geometry/getDistanceToLine.js +0 -10
  114. package/dist/hooks/useSpaces/geometry/getLengthOfLineSegment.d.ts +0 -3
  115. package/dist/hooks/useSpaces/geometry/getLengthOfLineSegment.js +0 -7
  116. package/dist/hooks/useSpaces/geometry/getLineAtOffsetOnLineSegment.d.ts +0 -3
  117. package/dist/hooks/useSpaces/geometry/getLineAtOffsetOnLineSegment.js +0 -17
  118. package/dist/hooks/useSpaces/geometry/getLineOtherPoint.d.ts +0 -3
  119. package/dist/hooks/useSpaces/geometry/getLineOtherPoint.js +0 -11
  120. package/dist/hooks/useSpaces/geometry/getLineSegmentsIntersection.d.ts +0 -3
  121. package/dist/hooks/useSpaces/geometry/getLineSegmentsIntersection.js +0 -43
  122. package/dist/hooks/useSpaces/geometry/getMidpointOfLineSegment.d.ts +0 -3
  123. package/dist/hooks/useSpaces/geometry/getMidpointOfLineSegment.js +0 -9
  124. package/dist/hooks/useSpaces/geometry/getParallelLineSegmentAtDistance.d.ts +0 -3
  125. package/dist/hooks/useSpaces/geometry/getParallelLineSegmentAtDistance.js +0 -20
  126. package/dist/hooks/useSpaces/geometry/getPointAtOffsetOnLineSegment.d.ts +0 -3
  127. package/dist/hooks/useSpaces/geometry/getPointAtOffsetOnLineSegment.js +0 -11
  128. package/dist/hooks/useSpaces/geometry/getPolygonArea.d.ts +0 -3
  129. package/dist/hooks/useSpaces/geometry/getPolygonArea.js +0 -15
  130. package/dist/hooks/useSpaces/geometry/getQuadrilateralArea.d.ts +0 -3
  131. package/dist/hooks/useSpaces/geometry/getQuadrilateralArea.js +0 -16
  132. package/dist/hooks/useSpaces/geometry/getTangetIntersectionAndOffset.d.ts +0 -6
  133. package/dist/hooks/useSpaces/geometry/getTangetIntersectionAndOffset.js +0 -17
  134. package/dist/hooks/useSpaces/geometry/getTriangleArea.d.ts +0 -3
  135. package/dist/hooks/useSpaces/geometry/getTriangleArea.js +0 -9
  136. package/dist/hooks/useSpaces/geometry/getUnitVectorOfLineSegment.d.ts +0 -3
  137. package/dist/hooks/useSpaces/geometry/getUnitVectorOfLineSegment.js +0 -12
  138. package/dist/hooks/useSpaces/geometry/index.d.ts +0 -30
  139. package/dist/hooks/useSpaces/geometry/index.js +0 -64
  140. package/dist/hooks/useSpaces/geometry/isPointInPolygon.d.ts +0 -3
  141. package/dist/hooks/useSpaces/geometry/isPointInPolygon.js +0 -21
  142. package/dist/hooks/useSpaces/geometry/isPointInQuadrilateral.d.ts +0 -3
  143. package/dist/hooks/useSpaces/geometry/isPointInQuadrilateral.js +0 -25
  144. package/dist/hooks/useSpaces/geometry/orderCoordinatesOnLineSegment.d.ts +0 -3
  145. package/dist/hooks/useSpaces/geometry/orderCoordinatesOnLineSegment.js +0 -11
  146. package/dist/hooks/useSpaces/geometry/splitLineAtOffset.d.ts +0 -3
  147. package/dist/hooks/useSpaces/geometry/splitLineAtOffset.js +0 -12
  148. package/dist/hooks/useSpaces/geometry/splitLineAtPoint.d.ts +0 -3
  149. package/dist/hooks/useSpaces/geometry/splitLineAtPoint.js +0 -9
  150. package/dist/hooks/useSpaces/geometry/splitLineAtPoints.d.ts +0 -3
  151. package/dist/hooks/useSpaces/geometry/splitLineAtPoints.js +0 -28
  152. package/dist/hooks/useSpaces/index.d.ts +0 -76
  153. package/dist/hooks/useSpaces/index.js +0 -474
  154. package/dist/hooks/useSpaces/themes/blueprint.d.ts +0 -3
  155. package/dist/hooks/useSpaces/themes/blueprint.js +0 -96
  156. package/dist/hooks/useSpaces/themes/default.d.ts +0 -3
  157. package/dist/hooks/useSpaces/themes/default.js +0 -96
  158. package/dist/hooks/useSpaces/themes/index.js +0 -21
  159. package/dist/hooks/useSpaces/themes/light.d.ts +0 -3
  160. package/dist/hooks/useSpaces/themes/light.js +0 -96
  161. package/dist/hooks/useSpaces/validators/areWallsDuplicated.d.ts +0 -3
  162. package/dist/hooks/useSpaces/validators/areWallsDuplicated.js +0 -61
  163. package/dist/hooks/useSpaces/validators/areWallsIntersecting.d.ts +0 -3
  164. package/dist/hooks/useSpaces/validators/areWallsIntersecting.js +0 -42
  165. package/dist/hooks/useSpaces/validators/areWallsOrphaningFeatures.d.ts +0 -3
  166. package/dist/hooks/useSpaces/validators/areWallsOrphaningFeatures.js +0 -52
  167. package/dist/hooks/useSpaces/validators/areWallsTooShort.d.ts +0 -3
  168. package/dist/hooks/useSpaces/validators/areWallsTooShort.js +0 -37
  169. package/dist/hooks/useSpaces/validators/index.d.ts +0 -15
  170. package/dist/hooks/useSpaces/validators/index.js +0 -40
  171. package/dist/hooks/useSpaces/validators/isFeatureCollidingWithExistingFeature.d.ts +0 -3
  172. package/dist/hooks/useSpaces/validators/isFeatureCollidingWithExistingFeature.js +0 -31
  173. package/dist/hooks/useSpaces/validators/isFeatureOutsideWallBounds.d.ts +0 -3
  174. package/dist/hooks/useSpaces/validators/isFeatureOutsideWallBounds.js +0 -19
  175. package/dist/hooks/useSpaces/validators/isLineTooShort.d.ts +0 -3
  176. package/dist/hooks/useSpaces/validators/isLineTooShort.js +0 -26
  177. package/dist/hooks/useSpaces/validators/isVertexLandingOnFeature.d.ts +0 -4
  178. package/dist/hooks/useSpaces/validators/isVertexLandingOnFeature.js +0 -19
  179. package/dist/hooks/useSpaces/validators/isWallEndingOnFeature.d.ts +0 -3
  180. package/dist/hooks/useSpaces/validators/isWallEndingOnFeature.js +0 -19
  181. package/dist/hooks/useSpaces/validators/isWallIntersectingFeature.d.ts +0 -3
  182. package/dist/hooks/useSpaces/validators/isWallIntersectingFeature.js +0 -41
  183. package/dist/hooks/useSpaces/validators/isWallOverlappingExisitingWalls.d.ts +0 -3
  184. package/dist/hooks/useSpaces/validators/isWallOverlappingExisitingWalls.js +0 -54
  185. package/dist/hooks/useSpaces/validators/isWallTooShort.d.ts +0 -3
  186. package/dist/hooks/useSpaces/validators/isWallTooShort.js +0 -10
  187. package/dist/icons/Player3D.d.ts +0 -3
  188. package/dist/icons/Player3D.js +0 -21
  189. package/dist/store/spaces.d.ts +0 -47
  190. package/dist/store/spaces.js +0 -197
  191. /package/dist/Treble/{snapshot.d.ts → snapshots.d.ts} +0 -0
  192. /package/dist/Treble/{snapshot.js → snapshots.js} +0 -0
  193. /package/dist/hooks/{useSpaces/validators → useRoomBuilder}/messaging.d.ts +0 -0
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.doLinesOverlap = exports.getAllLineIntersections = exports.getTangetIntersectionAndOffset = exports.orderCoordinatesOnLineSegment = exports.splitLineAtOffset = exports.splitLineAtPoints = exports.splitLineAtPoint = exports.getLineSegmentsIntersection = exports.isPointInPolygon = exports.isPointInQuadrilateral = exports.arePointsWithinProximity = exports.addThicknessToLine = exports.getParallelLineSegmentAtDistance = exports.getPolygonArea = exports.closestPointOnLine = exports.getDistanceToLine = exports.getLineMidpoint = exports.getLineAtOffsetOnLineSegment = exports.getPointAtOffsetOnLineSegment = exports.getAngleOfLineSegment = exports.getMidpointOfLineSegment = exports.getLengthOfLineSegment = exports.getLineOtherPoint = exports.areLinesEqual = exports.arePointsEqual = exports.euclideanMod = void 0;
13
+ function euclideanMod(n, m) {
14
+ return ((n % m) + m) % m;
15
+ }
16
+ exports.euclideanMod = euclideanMod;
17
+ function arePointsEqual(point1, point2) {
18
+ if (!point1 || !point2)
19
+ return false;
20
+ return point1[0] === point2[0] && point1[1] === point2[1];
21
+ }
22
+ exports.arePointsEqual = arePointsEqual;
23
+ function areLinesEqual(line1, line2) {
24
+ if (!line1 || !line2)
25
+ return false;
26
+ if ((arePointsEqual(line1[0], line2[0]) &&
27
+ arePointsEqual(line1[1], line2[1])) ||
28
+ (arePointsEqual(line1[0], line2[1]) && arePointsEqual(line1[1], line2[0]))) {
29
+ return true;
30
+ }
31
+ return false;
32
+ }
33
+ exports.areLinesEqual = areLinesEqual;
34
+ function getLineOtherPoint(line, point) {
35
+ var eq0 = arePointsEqual(line[0], point);
36
+ var eq1 = arePointsEqual(line[1], point);
37
+ if (eq0 === eq1)
38
+ console.warn('Unexpected. Is your wall of 0 length?', JSON.parse(JSON.stringify({ line: line, point: point })));
39
+ return eq0 ? line[1] : line[0];
40
+ }
41
+ exports.getLineOtherPoint = getLineOtherPoint;
42
+ function getLengthOfLineSegment(line) {
43
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
44
+ return Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
45
+ }
46
+ exports.getLengthOfLineSegment = getLengthOfLineSegment;
47
+ function getUnitVectorOfLineSegment(line) {
48
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
49
+ var magnitude = getLengthOfLineSegment(line);
50
+ return [(x2 - x1) / magnitude, (y2 - y1) / magnitude];
51
+ }
52
+ function getMidpointOfLineSegment(line) {
53
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
54
+ var xMidpoint = (x1 + x2) / 2;
55
+ var yMidpoint = (y1 + y2) / 2;
56
+ return [xMidpoint, yMidpoint];
57
+ }
58
+ exports.getMidpointOfLineSegment = getMidpointOfLineSegment;
59
+ function getAngleOfLineSegment(line) {
60
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
61
+ return Math.atan2(y2 - y1, x2 - x1);
62
+ }
63
+ exports.getAngleOfLineSegment = getAngleOfLineSegment;
64
+ function getPointAtOffsetOnLineSegment(line, offset) {
65
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
66
+ var d = Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
67
+ var r = offset / d;
68
+ var x = x1 + r * (x2 - x1);
69
+ var y = y1 + r * (y2 - y1);
70
+ return [x, y];
71
+ }
72
+ exports.getPointAtOffsetOnLineSegment = getPointAtOffsetOnLineSegment;
73
+ function getLineAtOffsetOnLineSegment(line, offset, length) {
74
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
75
+ var d = Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
76
+ var startRatio = offset / d;
77
+ var endRatio = (offset + length) / d;
78
+ var startX = x1 + startRatio * (x2 - x1);
79
+ var startY = y1 + startRatio * (y2 - y1);
80
+ var endX = x1 + endRatio * (x2 - x1);
81
+ var endY = y1 + endRatio * (y2 - y1);
82
+ return [
83
+ [startX, startY],
84
+ [endX, endY],
85
+ ];
86
+ }
87
+ exports.getLineAtOffsetOnLineSegment = getLineAtOffsetOnLineSegment;
88
+ function getLineMidpoint(line) {
89
+ var x = (line[0][0] + line[1][0]) / 2;
90
+ var y = (line[0][1] + line[1][1]) / 2;
91
+ return [x, y];
92
+ }
93
+ exports.getLineMidpoint = getLineMidpoint;
94
+ function getDistanceToLine(pointOnLine, angle, point) {
95
+ var x1 = point[0], y1 = point[1];
96
+ var x2 = pointOnLine[0], y2 = pointOnLine[1];
97
+ var dx = Math.cos(angle);
98
+ var dy = Math.sin(angle);
99
+ return (Math.abs((y1 - y2) * dx - (x1 - x2) * dy) / Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)));
100
+ }
101
+ exports.getDistanceToLine = getDistanceToLine;
102
+ function closestPointOnLine(pointOnLine, angle, point) {
103
+ var x1 = point[0], y1 = point[1];
104
+ var x2 = pointOnLine[0], y2 = pointOnLine[1];
105
+ var dx = Math.cos(angle);
106
+ var dy = Math.sin(angle);
107
+ var t = ((x1 - x2) * dx + (y1 - y2) * dy) / (dx * dx + dy * dy);
108
+ var x = x2 + t * dx;
109
+ var y = y2 + t * dy;
110
+ return [x, y];
111
+ }
112
+ exports.closestPointOnLine = closestPointOnLine;
113
+ function getQuadrilateralArea(quadrilateral) {
114
+ var _a = quadrilateral.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3], x3 = _a[4], y3 = _a[5], x4 = _a[6], y4 = _a[7];
115
+ var area = Math.abs((x1 * y2 +
116
+ x2 * y3 +
117
+ x3 * y4 +
118
+ x4 * y1 -
119
+ x2 * y1 -
120
+ x3 * y2 -
121
+ x4 * y3 -
122
+ x1 * y4) /
123
+ 2);
124
+ return area;
125
+ }
126
+ function getTriangleArea(point1, point2, point3) {
127
+ return ((point1[0] * (point2[1] - point3[1]) +
128
+ point2[0] * (point3[1] - point1[1]) +
129
+ point3[0] * (point1[1] - point2[1])) /
130
+ 2);
131
+ }
132
+ function getPolygonArea(polygon) {
133
+ var origin = [0, 0];
134
+ return polygon.reduce(function (sum, point1, i) {
135
+ var point2 = polygon[(i + 1) % polygon.length];
136
+ sum += getTriangleArea(origin, point1, point2);
137
+ return sum;
138
+ }, 0);
139
+ }
140
+ exports.getPolygonArea = getPolygonArea;
141
+ function getParallelLineSegmentAtDistance(line, distance) {
142
+ if (!distance)
143
+ return line;
144
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
145
+ var unitVector = getUnitVectorOfLineSegment(line);
146
+ var _b = distance > 0
147
+ ? [unitVector[1], -unitVector[0]]
148
+ : [-unitVector[1], unitVector[0]], xNormal = _b[0], yNormal = _b[1];
149
+ var length = Math.abs(distance);
150
+ var point1 = [x1 + xNormal * length, y1 + yNormal * length];
151
+ var point2 = [x2 + xNormal * length, y2 + yNormal * length];
152
+ return [point1, point2];
153
+ }
154
+ exports.getParallelLineSegmentAtDistance = getParallelLineSegmentAtDistance;
155
+ function addThicknessToLine(line, thickness) {
156
+ var offset = thickness / 2;
157
+ var _a = getParallelLineSegmentAtDistance(line, offset), point1 = _a[0], point2 = _a[1];
158
+ var _b = getParallelLineSegmentAtDistance(line, -offset), point4 = _b[0], point3 = _b[1];
159
+ return [point1, point2, point3, point4];
160
+ }
161
+ exports.addThicknessToLine = addThicknessToLine;
162
+ function arePointsWithinProximity(point1, point2, proximity) {
163
+ var length = getLengthOfLineSegment([point1, point2]);
164
+ return length <= proximity;
165
+ }
166
+ exports.arePointsWithinProximity = arePointsWithinProximity;
167
+ function isPointInQuadrilateral(quadrilateral, point) {
168
+ var _a = quadrilateral.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3], x3 = _a[4], y3 = _a[5], x4 = _a[6], y4 = _a[7];
169
+ var pointX = point[0], pointY = point[1];
170
+ if (pointX < Math.min(x1, x2, x3, x4) ||
171
+ pointX > Math.max(x1, x2, x3, x4) ||
172
+ pointY < Math.min(y1, y2, y3, y4) ||
173
+ pointY > Math.max(y1, y2, y3, y4)) {
174
+ return false;
175
+ }
176
+ var area = getQuadrilateralArea(quadrilateral);
177
+ var area1 = getTriangleArea(point, quadrilateral[0], quadrilateral[1]);
178
+ var area2 = getTriangleArea(point, quadrilateral[1], quadrilateral[2]);
179
+ var area3 = getTriangleArea(point, quadrilateral[2], quadrilateral[3]);
180
+ var area4 = getTriangleArea(point, quadrilateral[3], quadrilateral[0]);
181
+ var compareArea = Math.abs(area1) + Math.abs(area2) + Math.abs(area3) + Math.abs(area4);
182
+ return Math.abs(Math.round(area) - Math.round(compareArea)) < 2;
183
+ }
184
+ exports.isPointInQuadrilateral = isPointInQuadrilateral;
185
+ function isPointInPolygon(point, polygon) {
186
+ var ray = [
187
+ point,
188
+ [point[0] + Number.MAX_SAFE_INTEGER, point[1]],
189
+ ];
190
+ var intersectCount = 0;
191
+ for (var i = 0; i < polygon.length; i++) {
192
+ var polygonStart = polygon[i];
193
+ var polygonEnd = polygon[(i + 1) % polygon.length];
194
+ if (getLineSegmentsIntersection(ray, [polygonStart, polygonEnd]))
195
+ intersectCount++;
196
+ }
197
+ return intersectCount % 2 === 1;
198
+ }
199
+ exports.isPointInPolygon = isPointInPolygon;
200
+ function getLineSegmentsIntersection(line1, line2) {
201
+ if (arePointsEqual.apply(void 0, line1) || arePointsEqual.apply(void 0, line2))
202
+ return null;
203
+ if (arePointsEqual(line1[0], line2[0]))
204
+ return null;
205
+ if (arePointsEqual(line1[0], line2[1]))
206
+ return null;
207
+ if (arePointsEqual(line1[1], line2[0]))
208
+ return null;
209
+ if (arePointsEqual(line1[1], line2[1]))
210
+ return null;
211
+ var _a = line1.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
212
+ var _b = line2.flat(), x3 = _b[0], y3 = _b[1], x4 = _b[2], y4 = _b[3];
213
+ var a1 = y2 - y1;
214
+ var b1 = x1 - x2;
215
+ var c1 = a1 * x1 + b1 * y1;
216
+ var a2 = y4 - y3;
217
+ var b2 = x3 - x4;
218
+ var c2 = a2 * x3 + b2 * y3;
219
+ var determinant = a1 * b2 - a2 * b1;
220
+ if (determinant === 0)
221
+ return null;
222
+ var x = (b2 * c1 - b1 * c2) / determinant;
223
+ var y = (a1 * c2 - a2 * c1) / determinant;
224
+ if (x < Math.min(x1, x2) ||
225
+ x > Math.max(x1, x2) ||
226
+ x < Math.min(x3, x4) ||
227
+ x > Math.max(x3, x4))
228
+ return null;
229
+ if (y < Math.min(y1, y2) ||
230
+ y > Math.max(y1, y2) ||
231
+ y < Math.min(y3, y4) ||
232
+ y > Math.max(y3, y4))
233
+ return null;
234
+ return [x, y];
235
+ }
236
+ exports.getLineSegmentsIntersection = getLineSegmentsIntersection;
237
+ function splitLineAtPoint(line, point) {
238
+ return [
239
+ [line[0], point],
240
+ [point, line[1]],
241
+ ];
242
+ }
243
+ exports.splitLineAtPoint = splitLineAtPoint;
244
+ function splitLineAtPoints(line, points) {
245
+ if (!points.length)
246
+ return [line];
247
+ var orderedPoints = orderCoordinatesOnLineSegment(__spreadArray(__spreadArray([], line, true), points, true));
248
+ return (orderedPoints[0][0] === line[0][0] ? orderedPoints : orderedPoints.reverse()).reduce(function (output, point, i) {
249
+ if (!i)
250
+ return output;
251
+ else
252
+ output.push([orderedPoints[i - 1], point]);
253
+ return output;
254
+ }, []);
255
+ }
256
+ exports.splitLineAtPoints = splitLineAtPoints;
257
+ function splitLineAtOffset(line, offset) {
258
+ var splitPoint = getPointAtOffsetOnLineSegment(line, offset);
259
+ return splitLineAtPoint(line, splitPoint);
260
+ }
261
+ exports.splitLineAtOffset = splitLineAtOffset;
262
+ function orderCoordinatesOnLineSegment(points) {
263
+ if (!points)
264
+ return [];
265
+ if (points[0][0] === points[1][0])
266
+ return points.sort(function (a, b) { return a[1] - b[1]; });
267
+ else
268
+ return points.sort(function (a, b) { return a[0] - b[0]; });
269
+ }
270
+ exports.orderCoordinatesOnLineSegment = orderCoordinatesOnLineSegment;
271
+ function getClosestPointOnLineSegment(line, point) {
272
+ var _a = line.flat(), x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
273
+ var lineVector = [x2 - x1, y2 - y1];
274
+ var pointVector = [point[0] - x1, point[1] - y1];
275
+ var lineLength = Math.pow(lineVector[0], 2) + Math.pow(lineVector[1], 2);
276
+ var dotProduct = (pointVector[0] * lineVector[0] + pointVector[1] * lineVector[1]) /
277
+ lineLength;
278
+ if (dotProduct < 0)
279
+ return [x1, y1];
280
+ if (dotProduct > 1)
281
+ return [x2, y2];
282
+ else
283
+ return [x1 + dotProduct * lineVector[0], y1 + dotProduct * lineVector[1]];
284
+ }
285
+ function getTangetIntersectionAndOffset(line, point) {
286
+ var interceptPoint = getClosestPointOnLineSegment(line, point);
287
+ if (!interceptPoint)
288
+ return undefined;
289
+ return {
290
+ point: interceptPoint,
291
+ offset: getLengthOfLineSegment([line[0], interceptPoint]),
292
+ };
293
+ }
294
+ exports.getTangetIntersectionAndOffset = getTangetIntersectionAndOffset;
295
+ function getAllLineIntersections(line, lines) {
296
+ var lineStr = [JSON.stringify(line[0]), JSON.stringify(line[1])];
297
+ return lines.reduce(function (output, existingLine, i) {
298
+ if (existingLine === null)
299
+ return output;
300
+ var startStr = JSON.stringify(existingLine[0]);
301
+ var endStr = JSON.stringify(existingLine[1]);
302
+ if (lineStr.includes(startStr) || lineStr.includes(endStr))
303
+ return output;
304
+ var intersectionPoint = getLineSegmentsIntersection(line, existingLine);
305
+ if (!intersectionPoint)
306
+ return output;
307
+ output.push({ index: i, point: intersectionPoint });
308
+ return output;
309
+ }, []);
310
+ }
311
+ exports.getAllLineIntersections = getAllLineIntersections;
312
+ function doLinesOverlap(line1, line2) {
313
+ var start1 = line1[0];
314
+ var end1 = line1[0] + line1[1];
315
+ var start2 = line2[0];
316
+ var end2 = line2[0] + line2[1];
317
+ if (start2 < start1 && start1 < end2)
318
+ return true;
319
+ if (start2 < end1 && end1 < end2)
320
+ return true;
321
+ if (start1 < start2 && start2 < end1 && start1 < end2 && end2 < end1)
322
+ return true;
323
+ return false;
324
+ }
325
+ exports.doLinesOverlap = doLinesOverlap;
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import type { IHydratedAttributeArray } from '../../types';
3
+ import type { IElementName, IElementPublic, IRoomBuilderHookProps } from './types';
4
+ import { IModes, IUnits, IElements } from './types';
5
+ import { IThemes } from './themes';
6
+ interface IUseRoomBuilder {
7
+ canvasRef: React.RefObject<HTMLCanvasElement>;
8
+ [IElements.WALL]?: IHydratedAttributeArray;
9
+ [IElements.WINDOW]?: IHydratedAttributeArray;
10
+ [IElements.DOOR]?: IHydratedAttributeArray;
11
+ [IElements.OPENING]?: IHydratedAttributeArray;
12
+ selectedElement: IElementPublic | null;
13
+ reset: () => void;
14
+ deleteElement: (type: IElementName, index: number) => void;
15
+ dimensions: {
16
+ enabled: boolean;
17
+ handleToggle: (val?: boolean) => void;
18
+ };
19
+ angleSnapping: {
20
+ enabled: boolean;
21
+ handleToggle: (val?: boolean) => void;
22
+ };
23
+ mode: {
24
+ value: IModes;
25
+ options: Array<{
26
+ label: IModes;
27
+ value: IModes;
28
+ selected: boolean;
29
+ handleSelect: () => void;
30
+ }>;
31
+ handleChange: (mode: IModes) => void;
32
+ };
33
+ }
34
+ declare const useRoomBuilder: {
35
+ (props: IRoomBuilderHookProps): IUseRoomBuilder;
36
+ themes: typeof IThemes;
37
+ units: typeof IUnits;
38
+ modes: typeof IModes;
39
+ };
40
+ export default useRoomBuilder;
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ var react_1 = require("react");
41
+ var types_1 = require("./types");
42
+ var useConfigurator_1 = __importDefault(require("../useConfigurator"));
43
+ var RoomBuilderState_1 = __importDefault(require("./RoomBuilderState"));
44
+ var constants_1 = require("./constants");
45
+ var themes_1 = __importStar(require("./themes"));
46
+ var useRoomBuilder = function (props) {
47
+ var _a;
48
+ var attributesState = (0, useConfigurator_1.default)()[0];
49
+ var _b = (0, react_1.useState)(types_1.IModes.DRAW), modeValue = _b[0], setMode = _b[1];
50
+ var _c = (0, react_1.useState)(true), showDimensions = _c[0], setShowDimensions = _c[1];
51
+ var _d = (0, react_1.useState)(true), angleSnappingEnabled = _d[0], setAngleSnappingEnabled = _d[1];
52
+ var _e = (0, react_1.useState)(null), selectedElement = _e[0], setSelectedElement = _e[1];
53
+ var _f = (0, react_1.useState)(null), selectedWallAsset = _f[0], setSelectedWallAsset = _f[1];
54
+ var canvasRef = (0, react_1.useRef)(null);
55
+ var selectElementPending = (0, react_1.useRef)(null);
56
+ var preppedConfig = Object.assign({
57
+ scale: constants_1.SCALE,
58
+ unit: types_1.IUnits.FEET,
59
+ snapProximity: constants_1.SNAP_PROXIMITY,
60
+ styles: ((_a = props.config) === null || _a === void 0 ? void 0 : _a.theme) && themes_1.default[props.config.theme]
61
+ ? themes_1.default[props.config.theme]
62
+ : themes_1.default[themes_1.IThemes.DEFAULT],
63
+ }, props.config);
64
+ var roomBuilderRef = (0, react_1.useRef)(new RoomBuilderState_1.default(__assign(__assign({}, props), { config: preppedConfig })));
65
+ var drawRoom = function () { return roomBuilderRef.current.drawRoom(canvasRef.current); };
66
+ (0, react_1.useEffect)(function () {
67
+ var _a;
68
+ if (!selectedWallAsset &&
69
+ (attributesState === null || attributesState === void 0 ? void 0 : attributesState[props.attributes[types_1.IElements.WALL]]))
70
+ setSelectedWallAsset(((_a = attributesState === null || attributesState === void 0 ? void 0 : attributesState[props.attributes[types_1.IElements.WALL]]) === null || _a === void 0 ? void 0 : _a.values[0].assetId) || null);
71
+ var attributesDelinked = JSON.parse(JSON.stringify(attributesState));
72
+ roomBuilderRef.current.setAttributesToState(attributesDelinked);
73
+ drawRoom();
74
+ }, [attributesState]);
75
+ (0, react_1.useEffect)(function () {
76
+ if (canvasRef === null || canvasRef === void 0 ? void 0 : canvasRef.current) {
77
+ canvasRef.current.addEventListener('mousedown', handleDrawWallStart);
78
+ canvasRef.current.addEventListener('mousemove', handleDrawWallMouseMove);
79
+ document.addEventListener('mouseup', handleDrawWallFinish);
80
+ canvasRef.current.addEventListener('mousemove', handleSelectModeHover);
81
+ canvasRef.current.addEventListener('mousedown', handleSelectElement);
82
+ canvasRef.current.addEventListener('mousemove', handleMoveSelectedElement);
83
+ document.addEventListener('mouseup', handleSetSelectedElement);
84
+ }
85
+ return function () {
86
+ if (canvasRef === null || canvasRef === void 0 ? void 0 : canvasRef.current) {
87
+ canvasRef.current.removeEventListener('mousedown', handleDrawWallStart);
88
+ canvasRef.current.removeEventListener('mousemove', handleDrawWallMouseMove);
89
+ document.removeEventListener('mouseup', handleDrawWallFinish);
90
+ canvasRef.current.removeEventListener('mousemove', handleSelectModeHover);
91
+ canvasRef.current.removeEventListener('mousedown', handleSelectElement);
92
+ canvasRef.current.removeEventListener('mousemove', handleMoveSelectedElement);
93
+ document.removeEventListener('mouseup', handleSetSelectedElement);
94
+ }
95
+ };
96
+ });
97
+ (0, react_1.useEffect)(function () {
98
+ roomBuilderRef.current.showDimensions = showDimensions;
99
+ roomBuilderRef.current.angleSnappingEnabled = angleSnappingEnabled;
100
+ roomBuilderRef.current.selectedElement = selectedElement
101
+ ? {
102
+ type: selectedElement.path[0],
103
+ index: selectedElement.path[1],
104
+ }
105
+ : null;
106
+ drawRoom();
107
+ }, [selectedElement, showDimensions, angleSnappingEnabled]);
108
+ var handleSelectModeHover = function (e) {
109
+ if (!canvasRef.current)
110
+ return;
111
+ if (modeValue !== types_1.IModes.SELECT)
112
+ return;
113
+ if (roomBuilderRef.current.activeElement !== null)
114
+ return;
115
+ var cursorPoint = [e.offsetX, e.offsetY];
116
+ roomBuilderRef.current.highlightElementIfInProximity(canvasRef.current, cursorPoint);
117
+ };
118
+ var handleSelectElement = function (e) {
119
+ if (!canvasRef.current)
120
+ return;
121
+ if (modeValue !== types_1.IModes.SELECT)
122
+ return;
123
+ var cursorPoint = [e.offsetX, e.offsetY];
124
+ roomBuilderRef.current.selectElementIfInProximity(canvasRef.current, cursorPoint);
125
+ var element = roomBuilderRef.current.getClickedElement(cursorPoint);
126
+ if (!element) {
127
+ if (selectedElement !== null)
128
+ setSelectedElement(null);
129
+ return;
130
+ }
131
+ if (roomBuilderRef.current.activeElement ||
132
+ (selectedElement &&
133
+ JSON.stringify(element.path) !== JSON.stringify(selectedElement.path)))
134
+ setSelectedElement(null);
135
+ selectElementPending.current = element;
136
+ };
137
+ var handleMoveSelectedElement = function (e) {
138
+ if (modeValue !== types_1.IModes.SELECT)
139
+ return;
140
+ if (!canvasRef.current)
141
+ return;
142
+ var point = [e.offsetX, e.offsetY];
143
+ roomBuilderRef.current.moveActiveElement(canvasRef.current, point);
144
+ selectElementPending.current = null;
145
+ };
146
+ var handleSetSelectedElement = function (e) {
147
+ var _a;
148
+ if (modeValue !== types_1.IModes.SELECT)
149
+ return;
150
+ if (!canvasRef.current)
151
+ return;
152
+ if (!((_a = canvasRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
153
+ roomBuilderRef.current.cancelMoveActiveElement(canvasRef.current);
154
+ return;
155
+ }
156
+ roomBuilderRef.current.finishMoveActiveElement(canvasRef.current);
157
+ if (selectElementPending.current) {
158
+ setSelectedElement(selectElementPending.current);
159
+ selectElementPending.current = null;
160
+ }
161
+ };
162
+ var handleDrawWallStart = function (e) {
163
+ if (modeValue !== types_1.IModes.DRAW)
164
+ return;
165
+ var cursorPoint = [e.offsetX, e.offsetY];
166
+ roomBuilderRef.current.startDrawNewWall(cursorPoint);
167
+ };
168
+ var handleDrawWallMouseMove = function (e) {
169
+ if (modeValue !== types_1.IModes.DRAW)
170
+ return;
171
+ if (!canvasRef.current)
172
+ return;
173
+ var cursorPoint = [e.offsetX, e.offsetY];
174
+ roomBuilderRef.current.drawNewWall(canvasRef.current, cursorPoint);
175
+ };
176
+ var handleDrawWallFinish = function (e) {
177
+ var _a;
178
+ if (modeValue !== types_1.IModes.DRAW)
179
+ return;
180
+ if (!canvasRef.current)
181
+ return;
182
+ if (!selectedWallAsset)
183
+ return;
184
+ if (!((_a = canvasRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
185
+ roomBuilderRef.current.cancelDrawNewWall(canvasRef.current);
186
+ return;
187
+ }
188
+ roomBuilderRef.current.finishDrawNewWall(canvasRef.current, selectedWallAsset);
189
+ };
190
+ var prepFeatureAttributeForOutput = function (type, attribute) {
191
+ if (!attribute)
192
+ return undefined;
193
+ var values = attribute.values.map(function (val) { return (__assign(__assign({}, val), { add: function (addToWallIndex, offset) {
194
+ return roomBuilderRef.current.addFeature(type, {
195
+ assetId: val.assetId,
196
+ length: constants_1.FEATURE_LENGTH,
197
+ offset: offset,
198
+ }, addToWallIndex);
199
+ } })); });
200
+ var value = attribute.value.map(function (val, i) { return (__assign(__assign({}, val), { delete: function () { return roomBuilderRef.current.deleteFeature(type, i); } })); });
201
+ return __assign(__assign({}, attribute), { values: values, value: value });
202
+ };
203
+ var prepWallAttributeForOutput = function (attribute) {
204
+ if (!attribute)
205
+ return undefined;
206
+ var values = attribute.values.map(function (val) { return (__assign(__assign({}, val), { selected: val.assetId === selectedWallAsset, selectToDraw: function () {
207
+ setMode(types_1.IModes.DRAW);
208
+ setSelectedWallAsset(val.assetId);
209
+ } })); });
210
+ var value = attribute.value.map(function (val, i) { return (__assign(__assign({}, val), { delete: function () { var _a; return (_a = roomBuilderRef.current) === null || _a === void 0 ? void 0 : _a.deleteWall(i); } })); });
211
+ return __assign(__assign({}, attribute), { values: values, value: value });
212
+ };
213
+ var getElementFromAttributeName = function (attributeName) {
214
+ var elementAttr = Object.entries(props.attributes).find(function (_a) {
215
+ var _ = _a[0], attrName = _a[1];
216
+ return attrName === attributeName;
217
+ });
218
+ if (!elementAttr)
219
+ return;
220
+ return elementAttr[0];
221
+ };
222
+ var handleSetMode = function (mode) {
223
+ if (mode === modeValue)
224
+ return;
225
+ drawRoom();
226
+ setMode(mode);
227
+ setSelectedElement(null);
228
+ };
229
+ var handleReset = function () {
230
+ var _a;
231
+ (_a = roomBuilderRef.current) === null || _a === void 0 ? void 0 : _a.deleteAll();
232
+ setSelectedElement(null);
233
+ };
234
+ var handleDeleteElement = function (type, index) {
235
+ var _a;
236
+ var elementType = type;
237
+ if (Object.values(props.attributes).includes(type)) {
238
+ var updatedType = getElementFromAttributeName(type);
239
+ if (!updatedType)
240
+ return;
241
+ elementType = updatedType;
242
+ }
243
+ (_a = roomBuilderRef.current) === null || _a === void 0 ? void 0 : _a.deleteElement(elementType, index);
244
+ setSelectedElement(null);
245
+ };
246
+ var handleToggleDimensions = function (val) {
247
+ if (val === undefined)
248
+ setShowDimensions(!showDimensions);
249
+ else
250
+ setShowDimensions(val);
251
+ setSelectedElement(null);
252
+ };
253
+ var handleToggleAngleSnapping = function (val) {
254
+ if (val === undefined)
255
+ setAngleSnappingEnabled(!angleSnappingEnabled);
256
+ else
257
+ setAngleSnappingEnabled(val);
258
+ setSelectedElement(null);
259
+ };
260
+ return {
261
+ canvasRef: canvasRef,
262
+ selectedElement: selectedElement === null
263
+ ? selectedElement
264
+ : __assign(__assign({}, selectedElement), { path: [
265
+ props.attributes[selectedElement.path[0]],
266
+ selectedElement.path[1],
267
+ ] }),
268
+ mode: {
269
+ value: modeValue,
270
+ options: [types_1.IModes.DRAW, types_1.IModes.SELECT].map(function (el) { return ({
271
+ value: el,
272
+ label: el,
273
+ selected: modeValue === el,
274
+ handleSelect: function () { return handleSetMode(el); },
275
+ }); }),
276
+ handleChange: handleSetMode,
277
+ },
278
+ dimensions: {
279
+ enabled: showDimensions,
280
+ handleToggle: handleToggleDimensions,
281
+ },
282
+ angleSnapping: {
283
+ enabled: angleSnappingEnabled,
284
+ handleToggle: handleToggleAngleSnapping,
285
+ },
286
+ reset: handleReset,
287
+ deleteElement: handleDeleteElement,
288
+ walls: prepWallAttributeForOutput(attributesState === null || attributesState === void 0 ? void 0 : attributesState[props.attributes[types_1.IElements.WALL]]),
289
+ windows: props.attributes[types_1.IElements.WINDOW]
290
+ ? prepFeatureAttributeForOutput(types_1.IElements.WINDOW, attributesState === null || attributesState === void 0 ? void 0 : attributesState[props.attributes[types_1.IElements.WINDOW]])
291
+ : undefined,
292
+ doors: props.attributes[types_1.IElements.DOOR]
293
+ ? prepFeatureAttributeForOutput(types_1.IElements.DOOR, attributesState === null || attributesState === void 0 ? void 0 : attributesState[props.attributes[types_1.IElements.DOOR]])
294
+ : undefined,
295
+ openings: props.attributes[types_1.IElements.OPENING]
296
+ ? prepFeatureAttributeForOutput(types_1.IElements.OPENING, attributesState === null || attributesState === void 0 ? void 0 : attributesState[props.attributes[types_1.IElements.OPENING]])
297
+ : undefined,
298
+ };
299
+ };
300
+ useRoomBuilder.themes = themes_1.IThemes;
301
+ useRoomBuilder.units = types_1.IUnits;
302
+ useRoomBuilder.modes = types_1.IModes;
303
+ exports.default = useRoomBuilder;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.errorMessages = void 0;
4
- var constants_1 = require("../constants");
4
+ var constants_1 = require("./constants");
5
5
  exports.errorMessages = {
6
6
  addWallCollidingWithWall: function () { return 'Wall cannot collide with another wall.'; },
7
7
  addWallCollidingWithFeature: function (feature) {