@witchcraft/layout 1.0.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 (336) hide show
  1. package/README.md +474 -0
  2. package/dist/module.d.mts +14 -0
  3. package/dist/module.json +9 -0
  4. package/dist/module.mjs +26 -0
  5. package/dist/runtime/components/LayoutDecos.d.vue.ts +0 -0
  6. package/dist/runtime/components/LayoutDecos.vue +54 -0
  7. package/dist/runtime/components/LayoutDecos.vue.d.ts +0 -0
  8. package/dist/runtime/components/LayoutEdges.d.vue.ts +0 -0
  9. package/dist/runtime/components/LayoutEdges.vue +145 -0
  10. package/dist/runtime/components/LayoutEdges.vue.d.ts +0 -0
  11. package/dist/runtime/components/LayoutFrame.d.vue.ts +0 -0
  12. package/dist/runtime/components/LayoutFrame.vue +41 -0
  13. package/dist/runtime/components/LayoutFrame.vue.d.ts +0 -0
  14. package/dist/runtime/components/LayoutShapeSquare.d.vue.ts +0 -0
  15. package/dist/runtime/components/LayoutShapeSquare.vue +36 -0
  16. package/dist/runtime/components/LayoutShapeSquare.vue.d.ts +0 -0
  17. package/dist/runtime/components/LayoutWindow.d.vue.ts +0 -0
  18. package/dist/runtime/components/LayoutWindow.vue +183 -0
  19. package/dist/runtime/components/LayoutWindow.vue.d.ts +0 -0
  20. package/dist/runtime/composables/useFrames.d.ts +0 -0
  21. package/dist/runtime/composables/useFrames.js +184 -0
  22. package/dist/runtime/demo/App.d.vue.ts +0 -0
  23. package/dist/runtime/demo/App.vue +123 -0
  24. package/dist/runtime/demo/App.vue.d.ts +0 -0
  25. package/dist/runtime/demo/DemoControls.d.vue.ts +0 -0
  26. package/dist/runtime/demo/DemoControls.vue +14 -0
  27. package/dist/runtime/demo/DemoControls.vue.d.ts +0 -0
  28. package/dist/runtime/demo/README.md +1 -0
  29. package/dist/runtime/demo/main.d.ts +0 -0
  30. package/dist/runtime/demo/main.js +4 -0
  31. package/dist/runtime/demo/sharedLayoutInstance.d.ts +0 -0
  32. package/dist/runtime/demo/sharedLayoutInstance.js +5 -0
  33. package/dist/runtime/demo/tailwind.css +1 -0
  34. package/dist/runtime/drag/CloseAction.d.ts +0 -0
  35. package/dist/runtime/drag/CloseAction.js +121 -0
  36. package/dist/runtime/drag/DragActionHandler.d.ts +0 -0
  37. package/dist/runtime/drag/DragActionHandler.js +83 -0
  38. package/dist/runtime/drag/DragDirectionStore.d.ts +0 -0
  39. package/dist/runtime/drag/DragDirectionStore.js +45 -0
  40. package/dist/runtime/drag/SplitAction.d.ts +0 -0
  41. package/dist/runtime/drag/SplitAction.js +110 -0
  42. package/dist/runtime/drag/types.d.ts +0 -0
  43. package/dist/runtime/drag/types.js +0 -0
  44. package/dist/runtime/helpers/addPointsToIntersection.d.ts +0 -0
  45. package/dist/runtime/helpers/addPointsToIntersection.js +7 -0
  46. package/dist/runtime/helpers/assertEdgeSorted.d.ts +0 -0
  47. package/dist/runtime/helpers/assertEdgeSorted.js +7 -0
  48. package/dist/runtime/helpers/assertItemIn.d.ts +0 -0
  49. package/dist/runtime/helpers/assertItemIn.js +8 -0
  50. package/dist/runtime/helpers/assertItemNotIn.d.ts +0 -0
  51. package/dist/runtime/helpers/assertItemNotIn.js +7 -0
  52. package/dist/runtime/helpers/assertLayoutHasActiveWindow.d.ts +0 -0
  53. package/dist/runtime/helpers/assertLayoutHasActiveWindow.js +7 -0
  54. package/dist/runtime/helpers/assertValidWinAndFrame.d.ts +0 -0
  55. package/dist/runtime/helpers/assertValidWinAndFrame.js +5 -0
  56. package/dist/runtime/helpers/assertValidWinAndFrameIds.d.ts +0 -0
  57. package/dist/runtime/helpers/assertValidWinAndFrameIds.js +6 -0
  58. package/dist/runtime/helpers/assertWindowHasActiveFrame.d.ts +0 -0
  59. package/dist/runtime/helpers/assertWindowHasActiveFrame.js +7 -0
  60. package/dist/runtime/helpers/clampNumber.d.ts +0 -0
  61. package/dist/runtime/helpers/clampNumber.js +3 -0
  62. package/dist/runtime/helpers/cloneFrame.d.ts +0 -0
  63. package/dist/runtime/helpers/cloneFrame.js +3 -0
  64. package/dist/runtime/helpers/cloneFrames.d.ts +0 -0
  65. package/dist/runtime/helpers/cloneFrames.js +16 -0
  66. package/dist/runtime/helpers/containsEdge.d.ts +0 -0
  67. package/dist/runtime/helpers/containsEdge.js +13 -0
  68. package/dist/runtime/helpers/convertLayoutWindowToWorkspace.d.ts +0 -0
  69. package/dist/runtime/helpers/convertLayoutWindowToWorkspace.js +10 -0
  70. package/dist/runtime/helpers/copySize.d.ts +0 -0
  71. package/dist/runtime/helpers/copySize.js +5 -0
  72. package/dist/runtime/helpers/createEdge.d.ts +0 -0
  73. package/dist/runtime/helpers/createEdge.js +13 -0
  74. package/dist/runtime/helpers/dirToOrientation.d.ts +0 -0
  75. package/dist/runtime/helpers/dirToOrientation.js +10 -0
  76. package/dist/runtime/helpers/dirToSide.d.ts +0 -0
  77. package/dist/runtime/helpers/dirToSide.js +5 -0
  78. package/dist/runtime/helpers/doEdgesOverlap.d.ts +0 -0
  79. package/dist/runtime/helpers/doEdgesOverlap.js +22 -0
  80. package/dist/runtime/helpers/doesEdgeContinueEdge.d.ts +0 -0
  81. package/dist/runtime/helpers/doesEdgeContinueEdge.js +17 -0
  82. package/dist/runtime/helpers/edgeToPoints.d.ts +0 -0
  83. package/dist/runtime/helpers/edgeToPoints.js +3 -0
  84. package/dist/runtime/helpers/findDraggableEdge.d.ts +0 -0
  85. package/dist/runtime/helpers/findDraggableEdge.js +13 -0
  86. package/dist/runtime/helpers/findFrameDraggableEdges.d.ts +0 -0
  87. package/dist/runtime/helpers/findFrameDraggableEdges.js +18 -0
  88. package/dist/runtime/helpers/frameToEdges.d.ts +0 -0
  89. package/dist/runtime/helpers/frameToEdges.js +21 -0
  90. package/dist/runtime/helpers/frameToPoints.d.ts +0 -0
  91. package/dist/runtime/helpers/frameToPoints.js +7 -0
  92. package/dist/runtime/helpers/getEdgeOrientation.d.ts +0 -0
  93. package/dist/runtime/helpers/getEdgeOrientation.js +4 -0
  94. package/dist/runtime/helpers/getEdgeSharedDirection.d.ts +0 -0
  95. package/dist/runtime/helpers/getEdgeSharedDirection.js +7 -0
  96. package/dist/runtime/helpers/getEdgeSide.d.ts +0 -0
  97. package/dist/runtime/helpers/getEdgeSide.js +16 -0
  98. package/dist/runtime/helpers/getFrameById.d.ts +0 -0
  99. package/dist/runtime/helpers/getFrameById.js +5 -0
  100. package/dist/runtime/helpers/getFrameConstant.d.ts +0 -0
  101. package/dist/runtime/helpers/getFrameConstant.js +15 -0
  102. package/dist/runtime/helpers/getIntersections.d.ts +0 -0
  103. package/dist/runtime/helpers/getIntersections.js +63 -0
  104. package/dist/runtime/helpers/getIntersectionsCss.d.ts +0 -0
  105. package/dist/runtime/helpers/getIntersectionsCss.js +56 -0
  106. package/dist/runtime/helpers/getMoveEdgeInfo.d.ts +0 -0
  107. package/dist/runtime/helpers/getMoveEdgeInfo.js +42 -0
  108. package/dist/runtime/helpers/getResizeLimit.d.ts +0 -0
  109. package/dist/runtime/helpers/getResizeLimit.js +39 -0
  110. package/dist/runtime/helpers/getShapeSquareCss.d.ts +0 -0
  111. package/dist/runtime/helpers/getShapeSquareCss.js +17 -0
  112. package/dist/runtime/helpers/getSideTouching.d.ts +0 -0
  113. package/dist/runtime/helpers/getSideTouching.js +7 -0
  114. package/dist/runtime/helpers/getVisualEdgeCss.d.ts +0 -0
  115. package/dist/runtime/helpers/getVisualEdgeCss.js +40 -0
  116. package/dist/runtime/helpers/getVisualEdges.d.ts +0 -0
  117. package/dist/runtime/helpers/getVisualEdges.js +89 -0
  118. package/dist/runtime/helpers/getVisualEdgesCss.d.ts +0 -0
  119. package/dist/runtime/helpers/getVisualEdgesCss.js +4 -0
  120. package/dist/runtime/helpers/getWinAndFrameById.d.ts +0 -0
  121. package/dist/runtime/helpers/getWinAndFrameById.js +14 -0
  122. package/dist/runtime/helpers/getWinByFrameUuid.d.ts +0 -0
  123. package/dist/runtime/helpers/getWinByFrameUuid.js +13 -0
  124. package/dist/runtime/helpers/getWinById.d.ts +0 -0
  125. package/dist/runtime/helpers/getWinById.js +5 -0
  126. package/dist/runtime/helpers/getWindowConstant.d.ts +0 -0
  127. package/dist/runtime/helpers/getWindowConstant.js +14 -0
  128. package/dist/runtime/helpers/inRange.d.ts +0 -0
  129. package/dist/runtime/helpers/inRange.js +3 -0
  130. package/dist/runtime/helpers/index.d.ts +0 -0
  131. package/dist/runtime/helpers/index.js +62 -0
  132. package/dist/runtime/helpers/isEdgeEqual.d.ts +0 -0
  133. package/dist/runtime/helpers/isEdgeEqual.js +11 -0
  134. package/dist/runtime/helpers/isEdgeParallel.d.ts +0 -0
  135. package/dist/runtime/helpers/isEdgeParallel.js +7 -0
  136. package/dist/runtime/helpers/isPointEqual.d.ts +0 -0
  137. package/dist/runtime/helpers/isPointEqual.js +3 -0
  138. package/dist/runtime/helpers/isSizeAboveMin.d.ts +0 -0
  139. package/dist/runtime/helpers/isSizeAboveMin.js +3 -0
  140. package/dist/runtime/helpers/isSizeEqual.d.ts +0 -0
  141. package/dist/runtime/helpers/isSizeEqual.js +3 -0
  142. package/dist/runtime/helpers/isWindowEdge.d.ts +0 -0
  143. package/dist/runtime/helpers/isWindowEdge.js +7 -0
  144. package/dist/runtime/helpers/isWindowEdgePoint.d.ts +0 -0
  145. package/dist/runtime/helpers/isWindowEdgePoint.js +5 -0
  146. package/dist/runtime/helpers/moveEdge.d.ts +0 -0
  147. package/dist/runtime/helpers/moveEdge.js +8 -0
  148. package/dist/runtime/helpers/numberToScaledPercent.d.ts +0 -0
  149. package/dist/runtime/helpers/numberToScaledPercent.js +5 -0
  150. package/dist/runtime/helpers/numberToScaledSize.d.ts +0 -0
  151. package/dist/runtime/helpers/numberToScaledSize.js +19 -0
  152. package/dist/runtime/helpers/oppositeSide.d.ts +0 -0
  153. package/dist/runtime/helpers/oppositeSide.js +30 -0
  154. package/dist/runtime/helpers/resizeByEdge.d.ts +0 -0
  155. package/dist/runtime/helpers/resizeByEdge.js +29 -0
  156. package/dist/runtime/helpers/sideToDirection.d.ts +0 -0
  157. package/dist/runtime/helpers/sideToDirection.js +11 -0
  158. package/dist/runtime/helpers/sideToOrientation.d.ts +0 -0
  159. package/dist/runtime/helpers/sideToOrientation.js +10 -0
  160. package/dist/runtime/helpers/splitEdge.d.ts +0 -0
  161. package/dist/runtime/helpers/splitEdge.js +20 -0
  162. package/dist/runtime/helpers/toCoord.d.ts +0 -0
  163. package/dist/runtime/helpers/toCoord.js +10 -0
  164. package/dist/runtime/helpers/toId.d.ts +0 -0
  165. package/dist/runtime/helpers/toId.js +4 -0
  166. package/dist/runtime/helpers/toWindowCoord.d.ts +0 -0
  167. package/dist/runtime/helpers/toWindowCoord.js +14 -0
  168. package/dist/runtime/helpers/unionEdges.d.ts +0 -0
  169. package/dist/runtime/helpers/unionEdges.js +8 -0
  170. package/dist/runtime/helpers/updateWindowSizeWithEvent.d.ts +0 -0
  171. package/dist/runtime/helpers/updateWindowSizeWithEvent.js +8 -0
  172. package/dist/runtime/index.d.ts +0 -0
  173. package/dist/runtime/index.js +5 -0
  174. package/dist/runtime/layout/closeFrame.d.ts +0 -0
  175. package/dist/runtime/layout/closeFrame.js +13 -0
  176. package/dist/runtime/layout/closeFrames.d.ts +0 -0
  177. package/dist/runtime/layout/closeFrames.js +8 -0
  178. package/dist/runtime/layout/createSplitDecoEdge.d.ts +0 -0
  179. package/dist/runtime/layout/createSplitDecoEdge.js +24 -0
  180. package/dist/runtime/layout/createSplitDecoFromDrag.d.ts +0 -0
  181. package/dist/runtime/layout/createSplitDecoFromDrag.js +14 -0
  182. package/dist/runtime/layout/debugFrame.d.ts +0 -0
  183. package/dist/runtime/layout/debugFrame.js +4 -0
  184. package/dist/runtime/layout/findFramesTouchingEdge.d.ts +0 -0
  185. package/dist/runtime/layout/findFramesTouchingEdge.js +33 -0
  186. package/dist/runtime/layout/findSafeSplitEdge.d.ts +0 -0
  187. package/dist/runtime/layout/findSafeSplitEdge.js +20 -0
  188. package/dist/runtime/layout/findVisualEdge.d.ts +0 -0
  189. package/dist/runtime/layout/findVisualEdge.js +9 -0
  190. package/dist/runtime/layout/frameCreate.d.ts +0 -0
  191. package/dist/runtime/layout/frameCreate.js +13 -0
  192. package/dist/runtime/layout/frameSplit.d.ts +0 -0
  193. package/dist/runtime/layout/frameSplit.js +9 -0
  194. package/dist/runtime/layout/getCloseFrameInfo.d.ts +0 -0
  195. package/dist/runtime/layout/getCloseFrameInfo.js +103 -0
  196. package/dist/runtime/layout/getFrameSplitInfo.d.ts +0 -0
  197. package/dist/runtime/layout/getFrameSplitInfo.js +40 -0
  198. package/dist/runtime/layout/getFrameTo.d.ts +0 -0
  199. package/dist/runtime/layout/getFrameTo.js +47 -0
  200. package/dist/runtime/layout/index.d.ts +0 -0
  201. package/dist/runtime/layout/index.js +22 -0
  202. package/dist/runtime/layout/isPointInFrame.d.ts +0 -0
  203. package/dist/runtime/layout/isPointInFrame.js +4 -0
  204. package/dist/runtime/layout/layoutAddWindow.d.ts +0 -0
  205. package/dist/runtime/layout/layoutAddWindow.js +4 -0
  206. package/dist/runtime/layout/layoutCreate.d.ts +0 -0
  207. package/dist/runtime/layout/layoutCreate.js +7 -0
  208. package/dist/runtime/layout/layoutRemoveWindow.d.ts +0 -0
  209. package/dist/runtime/layout/layoutRemoveWindow.js +5 -0
  210. package/dist/runtime/layout/resizeFrame.d.ts +0 -0
  211. package/dist/runtime/layout/resizeFrame.js +69 -0
  212. package/dist/runtime/layout/windowAddFrame.d.ts +0 -0
  213. package/dist/runtime/layout/windowAddFrame.js +4 -0
  214. package/dist/runtime/layout/windowCreate.d.ts +0 -0
  215. package/dist/runtime/layout/windowCreate.js +13 -0
  216. package/dist/runtime/layout/windowRemoveFrame.d.ts +0 -0
  217. package/dist/runtime/layout/windowRemoveFrame.js +5 -0
  218. package/dist/runtime/layout/windowSetActiveFrame.d.ts +0 -0
  219. package/dist/runtime/layout/windowSetActiveFrame.js +5 -0
  220. package/dist/runtime/settings.d.ts +0 -0
  221. package/dist/runtime/settings.js +54 -0
  222. package/dist/runtime/types/index.d.ts +0 -0
  223. package/dist/runtime/types/index.js +120 -0
  224. package/dist/runtime/utils/KnownError.d.ts +0 -0
  225. package/dist/runtime/utils/KnownError.js +9 -0
  226. package/dist/types.d.mts +5 -0
  227. package/package.json +153 -0
  228. package/src/module.ts +43 -0
  229. package/src/runtime/components/LayoutDecos.vue +62 -0
  230. package/src/runtime/components/LayoutEdges.vue +172 -0
  231. package/src/runtime/components/LayoutFrame.vue +47 -0
  232. package/src/runtime/components/LayoutShapeSquare.vue +38 -0
  233. package/src/runtime/components/LayoutWindow.vue +223 -0
  234. package/src/runtime/composables/useFrames.ts +251 -0
  235. package/src/runtime/demo/App.vue +140 -0
  236. package/src/runtime/demo/DemoControls.vue +17 -0
  237. package/src/runtime/demo/README.md +1 -0
  238. package/src/runtime/demo/main.ts +9 -0
  239. package/src/runtime/demo/sharedLayoutInstance.ts +7 -0
  240. package/src/runtime/demo/tailwind.css +4 -0
  241. package/src/runtime/drag/CloseAction.ts +158 -0
  242. package/src/runtime/drag/DragActionHandler.ts +146 -0
  243. package/src/runtime/drag/DragDirectionStore.ts +63 -0
  244. package/src/runtime/drag/SplitAction.ts +147 -0
  245. package/src/runtime/drag/types.ts +107 -0
  246. package/src/runtime/helpers/addPointsToIntersection.ts +9 -0
  247. package/src/runtime/helpers/assertEdgeSorted.ts +11 -0
  248. package/src/runtime/helpers/assertItemIn.ts +13 -0
  249. package/src/runtime/helpers/assertItemNotIn.ts +10 -0
  250. package/src/runtime/helpers/assertLayoutHasActiveWindow.ts +9 -0
  251. package/src/runtime/helpers/assertValidWinAndFrame.ts +16 -0
  252. package/src/runtime/helpers/assertValidWinAndFrameIds.ts +9 -0
  253. package/src/runtime/helpers/assertWindowHasActiveFrame.ts +9 -0
  254. package/src/runtime/helpers/clampNumber.ts +9 -0
  255. package/src/runtime/helpers/cloneFrame.ts +5 -0
  256. package/src/runtime/helpers/cloneFrames.ts +20 -0
  257. package/src/runtime/helpers/containsEdge.ts +16 -0
  258. package/src/runtime/helpers/convertLayoutWindowToWorkspace.ts +18 -0
  259. package/src/runtime/helpers/copySize.ts +7 -0
  260. package/src/runtime/helpers/createEdge.ts +19 -0
  261. package/src/runtime/helpers/dirToOrientation.ts +12 -0
  262. package/src/runtime/helpers/dirToSide.ts +7 -0
  263. package/src/runtime/helpers/doEdgesOverlap.ts +25 -0
  264. package/src/runtime/helpers/doesEdgeContinueEdge.ts +20 -0
  265. package/src/runtime/helpers/edgeToPoints.ts +5 -0
  266. package/src/runtime/helpers/findDraggableEdge.ts +24 -0
  267. package/src/runtime/helpers/findFrameDraggableEdges.ts +32 -0
  268. package/src/runtime/helpers/frameToEdges.ts +32 -0
  269. package/src/runtime/helpers/frameToPoints.ts +14 -0
  270. package/src/runtime/helpers/getEdgeOrientation.ts +6 -0
  271. package/src/runtime/helpers/getEdgeSharedDirection.ts +10 -0
  272. package/src/runtime/helpers/getEdgeSide.ts +27 -0
  273. package/src/runtime/helpers/getFrameById.ts +15 -0
  274. package/src/runtime/helpers/getFrameConstant.ts +22 -0
  275. package/src/runtime/helpers/getIntersections.ts +87 -0
  276. package/src/runtime/helpers/getIntersectionsCss.ts +65 -0
  277. package/src/runtime/helpers/getMoveEdgeInfo.ts +69 -0
  278. package/src/runtime/helpers/getResizeLimit.ts +60 -0
  279. package/src/runtime/helpers/getShapeSquareCss.ts +28 -0
  280. package/src/runtime/helpers/getSideTouching.ts +9 -0
  281. package/src/runtime/helpers/getVisualEdgeCss.ts +53 -0
  282. package/src/runtime/helpers/getVisualEdges.ts +155 -0
  283. package/src/runtime/helpers/getVisualEdgesCss.ts +13 -0
  284. package/src/runtime/helpers/getWinAndFrameById.ts +28 -0
  285. package/src/runtime/helpers/getWinByFrameUuid.ts +19 -0
  286. package/src/runtime/helpers/getWinById.ts +12 -0
  287. package/src/runtime/helpers/getWindowConstant.ts +21 -0
  288. package/src/runtime/helpers/inRange.ts +5 -0
  289. package/src/runtime/helpers/index.ts +64 -0
  290. package/src/runtime/helpers/isEdgeEqual.ts +14 -0
  291. package/src/runtime/helpers/isEdgeParallel.ts +10 -0
  292. package/src/runtime/helpers/isPointEqual.ts +5 -0
  293. package/src/runtime/helpers/isSizeAboveMin.ts +8 -0
  294. package/src/runtime/helpers/isSizeEqual.ts +5 -0
  295. package/src/runtime/helpers/isWindowEdge.ts +11 -0
  296. package/src/runtime/helpers/isWindowEdgePoint.ts +8 -0
  297. package/src/runtime/helpers/moveEdge.ts +21 -0
  298. package/src/runtime/helpers/numberToScaledPercent.ts +19 -0
  299. package/src/runtime/helpers/numberToScaledSize.ts +28 -0
  300. package/src/runtime/helpers/oppositeSide.ts +45 -0
  301. package/src/runtime/helpers/resizeByEdge.ts +45 -0
  302. package/src/runtime/helpers/sideToDirection.ts +15 -0
  303. package/src/runtime/helpers/sideToOrientation.ts +12 -0
  304. package/src/runtime/helpers/splitEdge.ts +23 -0
  305. package/src/runtime/helpers/toCoord.ts +13 -0
  306. package/src/runtime/helpers/toId.ts +9 -0
  307. package/src/runtime/helpers/toWindowCoord.ts +23 -0
  308. package/src/runtime/helpers/unionEdges.ts +11 -0
  309. package/src/runtime/helpers/updateWindowSizeWithEvent.ts +10 -0
  310. package/src/runtime/index.ts +5 -0
  311. package/src/runtime/layout/closeFrame.ts +33 -0
  312. package/src/runtime/layout/closeFrames.ts +14 -0
  313. package/src/runtime/layout/createSplitDecoEdge.ts +34 -0
  314. package/src/runtime/layout/createSplitDecoFromDrag.ts +24 -0
  315. package/src/runtime/layout/debugFrame.ts +6 -0
  316. package/src/runtime/layout/findFramesTouchingEdge.ts +92 -0
  317. package/src/runtime/layout/findSafeSplitEdge.ts +39 -0
  318. package/src/runtime/layout/findVisualEdge.ts +11 -0
  319. package/src/runtime/layout/frameCreate.ts +23 -0
  320. package/src/runtime/layout/frameSplit.ts +31 -0
  321. package/src/runtime/layout/getCloseFrameInfo.ts +193 -0
  322. package/src/runtime/layout/getFrameSplitInfo.ts +65 -0
  323. package/src/runtime/layout/getFrameTo.ts +65 -0
  324. package/src/runtime/layout/index.ts +24 -0
  325. package/src/runtime/layout/isPointInFrame.ts +7 -0
  326. package/src/runtime/layout/layoutAddWindow.ts +6 -0
  327. package/src/runtime/layout/layoutCreate.ts +12 -0
  328. package/src/runtime/layout/layoutRemoveWindow.ts +7 -0
  329. package/src/runtime/layout/resizeFrame.ts +106 -0
  330. package/src/runtime/layout/windowAddFrame.ts +10 -0
  331. package/src/runtime/layout/windowCreate.ts +18 -0
  332. package/src/runtime/layout/windowRemoveFrame.ts +7 -0
  333. package/src/runtime/layout/windowSetActiveFrame.ts +7 -0
  334. package/src/runtime/settings.ts +63 -0
  335. package/src/runtime/types/index.ts +293 -0
  336. package/src/runtime/utils/KnownError.ts +24 -0
@@ -0,0 +1,89 @@
1
+ import { multisplice, MULTISPLICE_ITEM } from "@alanscodelog/utils/multisplice";
2
+ import { addPointsToIntersection } from "./addPointsToIntersection.js";
3
+ import { assertEdgeSorted } from "./assertEdgeSorted.js";
4
+ import { containsEdge } from "./containsEdge.js";
5
+ import { doEdgesOverlap } from "./doEdgesOverlap.js";
6
+ import { frameToEdges } from "./frameToEdges.js";
7
+ import { frameToPoints } from "./frameToPoints.js";
8
+ import { inRange } from "./inRange.js";
9
+ import { splitEdge } from "./splitEdge.js";
10
+ import { unionEdges } from "./unionEdges.js";
11
+ import { getMaxInt } from "../settings.js";
12
+ export function getVisualEdges(frames, {
13
+ separateByDir = false,
14
+ includeWindowEdges = false
15
+ } = {}) {
16
+ let extVertEdges = [];
17
+ let extHorzEdges = [];
18
+ const intersections = {
19
+ // x: {y: count}
20
+ };
21
+ const max = getMaxInt();
22
+ for (const frame of frames) {
23
+ const frameEdges = frameToEdges(frame);
24
+ addPointsToIntersection(intersections, Object.values(frameToPoints(frame)));
25
+ secondlabel: for (const edge of Object.values(frameEdges)) {
26
+ const dir = edge === frameEdges.left || edge === frameEdges.right ? "vertical" : "horizontal";
27
+ const startKey = dir === "vertical" ? "startX" : "startY";
28
+ const endKey = dir === "vertical" ? "endX" : "endY";
29
+ const arr = dir === "vertical" ? extVertEdges : extHorzEdges;
30
+ const indexes = [];
31
+ const edges = [];
32
+ for (const [i, e] of arr.entries()) {
33
+ if (containsEdge(edge, e, dir)) {
34
+ continue secondlabel;
35
+ }
36
+ if (doEdgesOverlap(e, edge, dir)) {
37
+ indexes.push(i);
38
+ edges.push(e);
39
+ }
40
+ }
41
+ if (indexes.length > 0) {
42
+ multisplice(arr, indexes, 1);
43
+ edges.push(edge);
44
+ const newEdge = unionEdges(edges, dir);
45
+ arr.push(newEdge);
46
+ } else if (includeWindowEdges || edge[startKey] !== 0 && edge[endKey] !== max) {
47
+ arr.push(edge);
48
+ }
49
+ }
50
+ }
51
+ const changesV = {};
52
+ for (const [i, edge] of extVertEdges.entries()) {
53
+ const possibleIntersections = intersections[edge.startX];
54
+ assertEdgeSorted(edge);
55
+ if (possibleIntersections) {
56
+ const splits = Object.keys(possibleIntersections).filter((_y) => {
57
+ const y = Number.parseInt(_y, 10);
58
+ const isIntersection = possibleIntersections[_y] === 4;
59
+ return isIntersection && inRange(y, edge.startY, edge.endY);
60
+ }).map((_) => Number.parseInt(_, 10));
61
+ if (splits.length === 0) continue;
62
+ changesV[i] = splitEdge(extVertEdges[i], "vertical", splits);
63
+ }
64
+ }
65
+ extVertEdges = multisplice(
66
+ extVertEdges,
67
+ Object.keys(changesV),
68
+ 1,
69
+ Object.values(changesV),
70
+ { insert: MULTISPLICE_ITEM.MATCH_INDEX }
71
+ ).array.flat();
72
+ const changesH = {};
73
+ for (const [i, edge] of extHorzEdges.entries()) {
74
+ const splits = Object.keys(intersections).filter((x) => intersections[x][edge.startY] === 4).map((_) => Number.parseInt(_, 10));
75
+ if (splits.length === 0) continue;
76
+ changesH[i] = splitEdge(extHorzEdges[i], "horizontal", splits);
77
+ }
78
+ extHorzEdges = multisplice(
79
+ extHorzEdges,
80
+ Object.keys(changesH),
81
+ 1,
82
+ Object.values(changesH),
83
+ { insert: MULTISPLICE_ITEM.MATCH_INDEX }
84
+ ).array.flat();
85
+ if (separateByDir) {
86
+ return { vertical: extVertEdges, horizontal: extHorzEdges };
87
+ }
88
+ return extVertEdges.concat(extHorzEdges);
89
+ }
File without changes
@@ -0,0 +1,4 @@
1
+ import { getVisualEdgeCss } from "./getVisualEdgeCss.js";
2
+ export function getVisualEdgesCss(edges, opts = {}) {
3
+ return edges.map((edge) => getVisualEdgeCss(edge, opts));
4
+ }
File without changes
@@ -0,0 +1,14 @@
1
+ import { getFrameConstant } from "./getFrameConstant.js";
2
+ import { getWinByFrameUuid } from "./getWinByFrameUuid.js";
3
+ import { getWindowConstant } from "./getWindowConstant.js";
4
+ export function getWinAndFrameById(layout, winId, frameId, assert = false) {
5
+ let win;
6
+ if (winId === void 0) {
7
+ win = getWinByFrameUuid(layout, frameId, assert);
8
+ } else {
9
+ win = layout.windows[getWindowConstant(layout, winId, assert)];
10
+ }
11
+ const maybeFrameId = win !== void 0 ? getFrameConstant(win, frameId, assert) : void 0;
12
+ const frame = win?.frames[maybeFrameId];
13
+ return { win, frame };
14
+ }
File without changes
@@ -0,0 +1,13 @@
1
+ import { LAYOUT_ERROR } from "../types/index.js";
2
+ import { KnownError } from "../utils/KnownError.js";
3
+ export function getWinByFrameUuid(layout, frameId, assert = false) {
4
+ for (const win of Object.values(layout.windows)) {
5
+ if (win.frames[frameId]) {
6
+ return win;
7
+ }
8
+ }
9
+ if (assert) {
10
+ throw new KnownError(LAYOUT_ERROR.INVALID_ID, "Could not find window with frame with that id.", { id: frameId });
11
+ }
12
+ return void 0;
13
+ }
File without changes
@@ -0,0 +1,5 @@
1
+ import { getWindowConstant } from "./getWindowConstant.js";
2
+ export function getWinById(layout, winId, assert = false) {
3
+ const winId_ = getWindowConstant(layout, winId, assert);
4
+ return layout.windows[winId_];
5
+ }
File without changes
@@ -0,0 +1,14 @@
1
+ import { assertItemIn } from "./assertItemIn.js";
2
+ import { assertLayoutHasActiveWindow } from "./assertLayoutHasActiveWindow.js";
3
+ export function getWindowConstant(layout, constant, assert = false) {
4
+ switch (constant) {
5
+ case "ACTIVE": {
6
+ if (assert) assertLayoutHasActiveWindow(layout);
7
+ return layout.activeWindow;
8
+ }
9
+ default: {
10
+ if (assert) assertItemIn(layout.windows, constant);
11
+ return constant;
12
+ }
13
+ }
14
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ export function inRange(coord, lowerLimit, upperLimit, inclusive = true) {
2
+ return inclusive ? coord >= lowerLimit && coord <= upperLimit : coord > lowerLimit && coord < upperLimit;
3
+ }
File without changes
@@ -0,0 +1,62 @@
1
+ export { addPointsToIntersection } from "./addPointsToIntersection.js";
2
+ export { assertEdgeSorted } from "./assertEdgeSorted.js";
3
+ export { assertItemIn } from "./assertItemIn.js";
4
+ export { assertItemNotIn } from "./assertItemNotIn.js";
5
+ export { assertLayoutHasActiveWindow } from "./assertLayoutHasActiveWindow.js";
6
+ export { assertValidWinAndFrame } from "./assertValidWinAndFrame.js";
7
+ export { assertValidWinAndFrameIds } from "./assertValidWinAndFrameIds.js";
8
+ export { assertWindowHasActiveFrame } from "./assertWindowHasActiveFrame.js";
9
+ export { clampNumber } from "./clampNumber.js";
10
+ export { cloneFrame } from "./cloneFrame.js";
11
+ export { cloneFrames } from "./cloneFrames.js";
12
+ export { containsEdge } from "./containsEdge.js";
13
+ export { convertLayoutWindowToWorkspace } from "./convertLayoutWindowToWorkspace.js";
14
+ export { copySize } from "./copySize.js";
15
+ export { createEdge } from "./createEdge.js";
16
+ export { dirToOrientation } from "./dirToOrientation.js";
17
+ export { dirToSide } from "./dirToSide.js";
18
+ export { doEdgesOverlap } from "./doEdgesOverlap.js";
19
+ export { doesEdgeContinueEdge } from "./doesEdgeContinueEdge.js";
20
+ export { edgeToPoints } from "./edgeToPoints.js";
21
+ export { findDraggableEdge } from "./findDraggableEdge.js";
22
+ export { findFrameDraggableEdges } from "./findFrameDraggableEdges.js";
23
+ export { frameToEdges } from "./frameToEdges.js";
24
+ export { frameToPoints } from "./frameToPoints.js";
25
+ export { getEdgeOrientation } from "./getEdgeOrientation.js";
26
+ export { getEdgeSharedDirection } from "./getEdgeSharedDirection.js";
27
+ export { getEdgeSide } from "./getEdgeSide.js";
28
+ export { getFrameById } from "./getFrameById.js";
29
+ export { getFrameConstant } from "./getFrameConstant.js";
30
+ export { getIntersections } from "./getIntersections.js";
31
+ export { getIntersectionsCss } from "./getIntersectionsCss.js";
32
+ export { getMoveEdgeInfo } from "./getMoveEdgeInfo.js";
33
+ export { getResizeLimit } from "./getResizeLimit.js";
34
+ export { getShapeSquareCss } from "./getShapeSquareCss.js";
35
+ export { getSideTouching } from "./getSideTouching.js";
36
+ export { getVisualEdgeCss } from "./getVisualEdgeCss.js";
37
+ export { getVisualEdges } from "./getVisualEdges.js";
38
+ export { getVisualEdgesCss } from "./getVisualEdgesCss.js";
39
+ export { getWinAndFrameById } from "./getWinAndFrameById.js";
40
+ export { getWinByFrameUuid } from "./getWinByFrameUuid.js";
41
+ export { getWinById } from "./getWinById.js";
42
+ export { getWindowConstant } from "./getWindowConstant.js";
43
+ export { inRange } from "./inRange.js";
44
+ export { isEdgeEqual } from "./isEdgeEqual.js";
45
+ export { isEdgeParallel } from "./isEdgeParallel.js";
46
+ export { isPointEqual } from "./isPointEqual.js";
47
+ export { isSizeAboveMin } from "./isSizeAboveMin.js";
48
+ export { isSizeEqual } from "./isSizeEqual.js";
49
+ export { isWindowEdge } from "./isWindowEdge.js";
50
+ export { isWindowEdgePoint } from "./isWindowEdgePoint.js";
51
+ export { moveEdge } from "./moveEdge.js";
52
+ export { numberToScaledPercent } from "./numberToScaledPercent.js";
53
+ export { numberToScaledSize } from "./numberToScaledSize.js";
54
+ export { oppositeSide } from "./oppositeSide.js";
55
+ export { resizeByEdge } from "./resizeByEdge.js";
56
+ export { sideToDirection } from "./sideToDirection.js";
57
+ export { sideToOrientation } from "./sideToOrientation.js";
58
+ export { splitEdge } from "./splitEdge.js";
59
+ export { toCoord } from "./toCoord.js";
60
+ export { toId } from "./toId.js";
61
+ export { toWindowCoord } from "./toWindowCoord.js";
62
+ export { unionEdges } from "./unionEdges.js";
File without changes
@@ -0,0 +1,11 @@
1
+ import { getEdgeOrientation } from "./getEdgeOrientation.js";
2
+ import { isEdgeParallel } from "./isEdgeParallel.js";
3
+ export function isEdgeEqual(edgeA, edgeB, orientation) {
4
+ orientation ??= getEdgeOrientation(edgeA);
5
+ if (!isEdgeParallel(edgeA, edgeB)) return false;
6
+ if (orientation === "horizontal") {
7
+ return edgeA.startY === edgeB.startY && edgeB.endY === edgeA.endY;
8
+ } else {
9
+ return edgeA.startX === edgeB.startX && edgeB.endX === edgeA.endX;
10
+ }
11
+ }
File without changes
@@ -0,0 +1,7 @@
1
+ import { getEdgeSharedDirection } from "./getEdgeSharedDirection.js";
2
+ export function isEdgeParallel(edgeA, edgeB, dir) {
3
+ const sharedDir = getEdgeSharedDirection(edgeA, edgeB);
4
+ if (dir === void 0) return sharedDir !== false;
5
+ if (dir === sharedDir) return true;
6
+ return false;
7
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ export function isPointEqual(pointA, pointB) {
2
+ return pointA.x === pointB.x && pointA.y === pointB.y;
3
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ export function isSizeAboveMin(size, min) {
2
+ return size.width >= min.width && size.height >= min.height;
3
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ export function isSizeEqual(sizeA, sizeB) {
2
+ return sizeA.width === sizeB.width && sizeA.height === sizeB.height;
3
+ }
File without changes
@@ -0,0 +1,7 @@
1
+ import { getEdgeOrientation } from "./getEdgeOrientation.js";
2
+ import { getMaxInt } from "../settings.js";
3
+ export function isWindowEdge(edge, edgeDirection) {
4
+ edgeDirection ??= getEdgeOrientation(edge);
5
+ const max = getMaxInt();
6
+ return edgeDirection === "vertical" && (edge.startX === 0 || edge.startX === max) || edgeDirection === "horizontal" && (edge.startY === 0 || edge.startY === max);
7
+ }
File without changes
@@ -0,0 +1,5 @@
1
+ import { getMaxInt } from "../settings.js";
2
+ export function isWindowEdgePoint(point) {
3
+ const max = getMaxInt();
4
+ return point.x === 0 || point.x === max || (point.y === 0 || point.y === max);
5
+ }
File without changes
@@ -0,0 +1,8 @@
1
+ import { getMoveEdgeInfo } from "./getMoveEdgeInfo.js";
2
+ import { resizeByEdge } from "./resizeByEdge.js";
3
+ import { getMarginSize } from "../settings.js";
4
+ export function moveEdge(touchingFrames, edge, position, margin = getMarginSize()) {
5
+ if (!edge || !touchingFrames) return;
6
+ const { pos, dir, distance } = getMoveEdgeInfo(touchingFrames, edge, position, margin);
7
+ resizeByEdge(touchingFrames, edge, dir, pos, distance);
8
+ }
@@ -0,0 +1,5 @@
1
+ import { snapNumber } from "@alanscodelog/utils/snapNumber";
2
+ import { getMaxInt } from "../settings.js";
3
+ export function numberToScaledPercent(num, max, scale = getMaxInt()) {
4
+ return snapNumber(num / max * scale, 1);
5
+ }
File without changes
@@ -0,0 +1,19 @@
1
+ import { unreachable } from "@alanscodelog/utils/unreachable";
2
+ import { numberToScaledPercent } from "./numberToScaledPercent.js";
3
+ import { getMaxInt } from "../settings.js";
4
+ export function numberToScaledSize(win, size, scale = getMaxInt()) {
5
+ const scaledSize = {
6
+ width: numberToScaledPercent(
7
+ typeof size === "number" ? size : size.pxWidth,
8
+ win.pxWidth,
9
+ scale
10
+ ),
11
+ height: numberToScaledPercent(
12
+ typeof size === "number" ? size : size.pxHeight,
13
+ win.pxHeight,
14
+ scale
15
+ )
16
+ };
17
+ if (scaledSize.width > scale) unreachable();
18
+ return scaledSize;
19
+ }
File without changes
@@ -0,0 +1,30 @@
1
+ import { unreachable } from "@alanscodelog/utils/unreachable";
2
+ export function oppositeSide(dir) {
3
+ switch (dir) {
4
+ case "x":
5
+ return "y";
6
+ case "y":
7
+ return "x";
8
+ case "width":
9
+ return "height";
10
+ case "height":
11
+ return "width";
12
+ case "left":
13
+ return "right";
14
+ case "right":
15
+ return "left";
16
+ case "up":
17
+ return "down";
18
+ case "top":
19
+ return "bottom";
20
+ case "bottom":
21
+ return "top";
22
+ case "down":
23
+ return "up";
24
+ case "horizontal":
25
+ return "vertical";
26
+ case "vertical":
27
+ return "horizontal";
28
+ }
29
+ unreachable();
30
+ }
File without changes
@@ -0,0 +1,29 @@
1
+ export function resizeByEdge(touchingFrames, edge, dir, newPos, distance) {
2
+ if (distance === 0) return;
3
+ for (const frame of touchingFrames) {
4
+ if (dir === "up" || dir === "down") {
5
+ const isAbove = frame.y < edge.startY;
6
+ if (isAbove) {
7
+ frame.height = newPos - frame.y;
8
+ } else {
9
+ frame.height = frame.y + frame.height - newPos;
10
+ frame.y = newPos;
11
+ }
12
+ } else {
13
+ const isLeft = frame.x < edge.startX;
14
+ if (isLeft) {
15
+ frame.width = newPos - frame.x;
16
+ } else {
17
+ frame.width = frame.x + frame.width - newPos;
18
+ frame.x = newPos;
19
+ }
20
+ }
21
+ }
22
+ if (dir === "up" || dir === "down") {
23
+ edge.startY = newPos;
24
+ edge.endY = newPos;
25
+ } else {
26
+ edge.startX = newPos;
27
+ edge.endX = newPos;
28
+ }
29
+ }
File without changes
@@ -0,0 +1,11 @@
1
+ export function sideToDirection(side) {
2
+ switch (side) {
3
+ case "left":
4
+ case "right":
5
+ return side;
6
+ case "top":
7
+ return "up";
8
+ case "bottom":
9
+ return "down";
10
+ }
11
+ }
File without changes
@@ -0,0 +1,10 @@
1
+ export function sideToOrientation(dir) {
2
+ switch (dir) {
3
+ case "left":
4
+ case "right":
5
+ return "vertical";
6
+ case "top":
7
+ case "bottom":
8
+ return "horizontal";
9
+ }
10
+ }
File without changes
@@ -0,0 +1,20 @@
1
+ import { last } from "@alanscodelog/utils/last";
2
+ export function splitEdge(edge, edgeDirection, splits) {
3
+ const startKey = edgeDirection === "horizontal" ? "startX" : "startY";
4
+ const endKey = edgeDirection === "horizontal" ? "endX" : "endY";
5
+ const newEdges = [];
6
+ if (splits.length === 0) throw new Error("There must be at least one split position.");
7
+ for (const [i, splitPos] of splits.entries()) {
8
+ if (i === 0) {
9
+ newEdges.push({ ...edge, [startKey]: edge[startKey], [endKey]: splitPos });
10
+ } else {
11
+ const prevEdge2 = newEdges[i - 1];
12
+ newEdges.push({ ...prevEdge2, [startKey]: prevEdge2[endKey], [endKey]: splitPos });
13
+ }
14
+ }
15
+ const prevEdge = last(newEdges);
16
+ if (prevEdge[endKey] !== edge[endKey]) {
17
+ newEdges.push({ ...prevEdge, [startKey]: prevEdge[endKey], [endKey]: edge[endKey] });
18
+ }
19
+ return newEdges;
20
+ }
File without changes
@@ -0,0 +1,10 @@
1
+ export function toCoord(dir) {
2
+ switch (dir) {
3
+ case "left":
4
+ case "right":
5
+ case "horizontal":
6
+ return "x";
7
+ default:
8
+ return "y";
9
+ }
10
+ }
File without changes
@@ -0,0 +1,4 @@
1
+ import { unreachable } from "@alanscodelog/utils/unreachable";
2
+ export function toId(item) {
3
+ return typeof item === "string" ? item : typeof item.id === "string" ? item.id : unreachable();
4
+ }
File without changes
@@ -0,0 +1,14 @@
1
+ import { snapNumber } from "@alanscodelog/utils/snapNumber";
2
+ import { numberToScaledPercent } from "./numberToScaledPercent.js";
3
+ import { getSnapPoint } from "../settings.js";
4
+ export function toWindowCoord(win, e, snapAmount = getSnapPoint()) {
5
+ const x = numberToScaledPercent(e.clientX - win.pxX, win.pxWidth);
6
+ const y = numberToScaledPercent(e.clientY - win.pxY, win.pxHeight);
7
+ if (snapAmount) {
8
+ return {
9
+ x: snapNumber(x, snapAmount.x),
10
+ y: snapNumber(y, snapAmount.x)
11
+ };
12
+ }
13
+ return { x, y };
14
+ }
File without changes
@@ -0,0 +1,8 @@
1
+ import { last } from "@alanscodelog/utils/last";
2
+ export function unionEdges(edges, dir) {
3
+ const startKey = dir === "horizontal" ? "startX" : "startY";
4
+ const endKey = dir === "horizontal" ? "endX" : "endY";
5
+ edges.sort((a, b) => a[startKey] - b[startKey]);
6
+ const newEdge = { ...edges[0], [startKey]: edges[0][startKey], [endKey]: last(edges)[endKey] };
7
+ return newEdge;
8
+ }
@@ -0,0 +1,8 @@
1
+ const props = ["pxWidth", "pxHeight", "pxX", "pxY"];
2
+ export function updateWindowWithEvent(win, event) {
3
+ for (const prop of props) {
4
+ if (event[prop] && win[prop] !== event[prop]) {
5
+ win[prop] = event[prop];
6
+ }
7
+ }
8
+ }
File without changes
@@ -0,0 +1,5 @@
1
+ export * from "./types/index.js";
2
+ export * from "./layout/index.js";
3
+ export * from "./helpers/index.js";
4
+ export * from "./utils/KnownError.js";
5
+ export * from "./settings.js";
File without changes
@@ -0,0 +1,13 @@
1
+ import { closeFrames } from "./closeFrames.js";
2
+ import { getCloseFrameInfo } from "./getCloseFrameInfo.js";
3
+ import { getMarginSize } from "../settings.js";
4
+ export function closeFrame(win, visualEdges, frame, closeDirOrSide, closeBy = "dir", force = false, minSize = getMarginSize()) {
5
+ const canClose = getCloseFrameInfo(Object.values(win.frames), visualEdges, frame, closeDirOrSide, closeBy, force, minSize);
6
+ if (canClose instanceof Error) {
7
+ return canClose;
8
+ }
9
+ const { deletedFrames, modifiedFrames } = canClose;
10
+ closeFrames(win, deletedFrames, modifiedFrames);
11
+ win.activeFrame = modifiedFrames[0].id;
12
+ return deletedFrames;
13
+ }
File without changes
@@ -0,0 +1,8 @@
1
+ export function closeFrames(win, deletedFrames, modifiedFrames) {
2
+ for (const f of deletedFrames) {
3
+ delete win.frames[f.id];
4
+ }
5
+ for (const mod of modifiedFrames) {
6
+ win.frames[mod.id] = mod;
7
+ }
8
+ }
File without changes
@@ -0,0 +1,24 @@
1
+ import { findSafeSplitEdgeAndPosition } from "./findSafeSplitEdge.js";
2
+ import { getMarginSize, getSnapPoint } from "../settings.js";
3
+ export function createSplitDecoEdge(frames, deco, snapAmount = getSnapPoint(), minSize = getMarginSize()) {
4
+ const frame = frames[deco.id];
5
+ const { edge, position } = findSafeSplitEdgeAndPosition(frame, deco.direction, deco.position, snapAmount, minSize);
6
+ const newFrame = { x: frame.x, y: frame.y, width: frame.width, height: frame.height };
7
+ switch (deco.direction) {
8
+ case "right":
9
+ newFrame.x = position;
10
+ newFrame.width = frame.x + frame.width - position;
11
+ break;
12
+ case "left":
13
+ newFrame.width = position - frame.x;
14
+ break;
15
+ case "down":
16
+ newFrame.y = position;
17
+ newFrame.height = frame.y + frame.height - position;
18
+ break;
19
+ case "up":
20
+ newFrame.height = position - frame.y;
21
+ break;
22
+ }
23
+ return { edge, newFrame };
24
+ }
@@ -0,0 +1,14 @@
1
+ import { createSplitDecoEdge } from "./createSplitDecoEdge.js";
2
+ import { dirToOrientation } from "../helpers/dirToOrientation.js";
3
+ import { getMarginSize, getSnapPoint } from "../settings.js";
4
+ export function createSplitDecoFromDrag(frames, frame, dragDirection, dragPoint, snapAmount = getSnapPoint(), minSize = getMarginSize()) {
5
+ const orientation = dirToOrientation(dragDirection);
6
+ const deco = {
7
+ type: "split",
8
+ id: frame.id,
9
+ position: dragPoint[orientation === "horizontal" ? "x" : "y"],
10
+ direction: dragDirection
11
+ };
12
+ deco.shapes = createSplitDecoEdge(frames, deco, snapAmount, minSize);
13
+ return deco;
14
+ }
File without changes
@@ -0,0 +1,4 @@
1
+ export function debugFrame(frame) {
2
+ const f = frame;
3
+ return `id: ${f.id.slice(0, 4)}, x: ${f.x}, y: ${f.y}, w: ${f.width}, h: ${f.height}`;
4
+ }