react-panel-layout 0.5.2 → 0.6.1

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 (541) hide show
  1. package/dist/{FloatingPanelFrame-lLg-Lpg7.js → FloatingPanelFrame-3eU9AwPo.js} +11 -11
  2. package/dist/{FloatingPanelFrame-lLg-Lpg7.js.map → FloatingPanelFrame-3eU9AwPo.js.map} +1 -1
  3. package/dist/{FloatingPanelFrame-D9Cp2al1.cjs → FloatingPanelFrame-CEmXDvUA.cjs} +2 -2
  4. package/dist/{FloatingPanelFrame-D9Cp2al1.cjs.map → FloatingPanelFrame-CEmXDvUA.cjs.map} +1 -1
  5. package/dist/FloatingWindow-CUXnEtrb.js +827 -0
  6. package/dist/FloatingWindow-CUXnEtrb.js.map +1 -0
  7. package/dist/FloatingWindow-DMwyK0eK.cjs +2 -0
  8. package/dist/FloatingWindow-DMwyK0eK.cjs.map +1 -0
  9. package/dist/GridLayout-DKTg_N61.cjs +2 -0
  10. package/dist/GridLayout-DKTg_N61.cjs.map +1 -0
  11. package/dist/GridLayout-UWNxXw77.js +926 -0
  12. package/dist/GridLayout-UWNxXw77.js.map +1 -0
  13. package/dist/HorizontalDivider-DdxzfV0l.js +30 -0
  14. package/dist/HorizontalDivider-DdxzfV0l.js.map +1 -0
  15. package/dist/HorizontalDivider-_pgV4Mcv.cjs +2 -0
  16. package/dist/HorizontalDivider-_pgV4Mcv.cjs.map +1 -0
  17. package/dist/PanelSystem-BqUzNtf2.js +1946 -0
  18. package/dist/PanelSystem-BqUzNtf2.js.map +1 -0
  19. package/dist/PanelSystem-D603LKKv.cjs +3 -0
  20. package/dist/PanelSystem-D603LKKv.cjs.map +1 -0
  21. package/dist/ResizeHandle-CBcAS918.cjs +2 -0
  22. package/dist/ResizeHandle-CBcAS918.cjs.map +1 -0
  23. package/dist/ResizeHandle-CXjc1meV.js +119 -0
  24. package/dist/ResizeHandle-CXjc1meV.js.map +1 -0
  25. package/dist/SwipePivotTabBar-DWrCuwEI.js +411 -0
  26. package/dist/SwipePivotTabBar-DWrCuwEI.js.map +1 -0
  27. package/dist/SwipePivotTabBar-fjjXkpj7.cjs +2 -0
  28. package/dist/SwipePivotTabBar-fjjXkpj7.cjs.map +1 -0
  29. package/dist/components/gesture/SwipeSafeZone.d.ts +40 -0
  30. package/dist/components/window/Drawer.d.ts +3 -1
  31. package/dist/components/window/DrawerLayers.d.ts +1 -1
  32. package/dist/components/window/drawerStyles.d.ts +69 -0
  33. package/dist/components/window/drawerSwipeConfig.d.ts +29 -0
  34. package/dist/components/window/useDrawerSwipeTransform.d.ts +23 -0
  35. package/dist/config.cjs +1 -1
  36. package/dist/config.cjs.map +1 -1
  37. package/dist/config.js +11 -9
  38. package/dist/config.js.map +1 -1
  39. package/dist/constants/styles.d.ts +35 -4
  40. package/dist/dialog/index.d.ts +69 -0
  41. package/dist/floating.cjs +1 -1
  42. package/dist/floating.js +1 -1
  43. package/dist/grid/index.d.ts +58 -0
  44. package/dist/grid.cjs +2 -0
  45. package/dist/grid.cjs.map +1 -0
  46. package/dist/grid.js +13 -0
  47. package/dist/grid.js.map +1 -0
  48. package/dist/hooks/gesture/presets.d.ts +33 -0
  49. package/dist/hooks/gesture/testing/createGestureSimulator.d.ts +117 -0
  50. package/dist/hooks/gesture/thresholdValue.d.ts +44 -0
  51. package/dist/hooks/gesture/types.d.ts +297 -0
  52. package/dist/hooks/gesture/useDirectionalLock.d.ts +20 -0
  53. package/dist/hooks/gesture/useEdgeSwipeInput.d.ts +23 -0
  54. package/dist/hooks/gesture/useNativeGestureGuard.d.ts +23 -0
  55. package/dist/hooks/gesture/usePointerTracking.d.ts +22 -0
  56. package/dist/hooks/gesture/useScrollBoundary.d.ts +23 -0
  57. package/dist/hooks/gesture/useSwipeInput.d.ts +5 -0
  58. package/dist/hooks/gesture/utils.d.ts +59 -0
  59. package/dist/hooks/useAnimatedVisibility.d.ts +58 -0
  60. package/dist/hooks/useAnimationFrame.d.ts +86 -0
  61. package/dist/hooks/useOperationContinuity.d.ts +64 -0
  62. package/dist/hooks/useResizeObserver.d.ts +33 -1
  63. package/dist/hooks/useSharedElementTransition.d.ts +112 -0
  64. package/dist/hooks/useSnapAnimation.d.ts +54 -0
  65. package/dist/hooks/useSwipeContentTransform.d.ts +86 -0
  66. package/dist/index.cjs +1 -2
  67. package/dist/index.cjs.map +1 -1
  68. package/dist/index.d.ts +0 -1
  69. package/dist/index.js +25 -2006
  70. package/dist/index.js.map +1 -1
  71. package/dist/modules/dialog/AlertDialog.d.ts +9 -0
  72. package/dist/modules/dialog/DialogContainer.d.ts +37 -0
  73. package/dist/modules/dialog/Modal.d.ts +26 -0
  74. package/dist/modules/dialog/SwipeDialogContainer.d.ts +16 -0
  75. package/dist/modules/dialog/dialogAnimationUtils.d.ts +113 -0
  76. package/dist/modules/dialog/types.d.ts +183 -0
  77. package/dist/modules/dialog/useDialog.d.ts +39 -0
  78. package/dist/modules/dialog/useDialogContainer.d.ts +47 -0
  79. package/dist/modules/dialog/useDialogSwipeInput.d.ts +70 -0
  80. package/dist/modules/dialog/useDialogTransform.d.ts +82 -0
  81. package/dist/modules/drawer/types.d.ts +74 -0
  82. package/dist/modules/drawer/useDrawerSwipeInput.d.ts +24 -0
  83. package/dist/modules/pivot/PivotContent.d.ts +1 -1
  84. package/dist/modules/pivot/SwipePivotContent.d.ts +39 -0
  85. package/dist/modules/pivot/SwipePivotContent.debug.tmp.d.ts +25 -0
  86. package/dist/modules/pivot/SwipePivotContent.test.d.ts +1 -0
  87. package/dist/modules/pivot/SwipePivotTabBar.d.ts +92 -0
  88. package/dist/modules/pivot/index.d.ts +3 -0
  89. package/dist/modules/pivot/scaleInputState.d.ts +37 -0
  90. package/dist/modules/pivot/types.d.ts +67 -2
  91. package/dist/modules/pivot/usePivotSwipeInput.d.ts +68 -0
  92. package/dist/modules/stack/StackContent.d.ts +15 -0
  93. package/dist/modules/stack/SwipeStackContent.d.ts +66 -0
  94. package/dist/modules/stack/SwipeStackOutlet.d.ts +80 -0
  95. package/dist/modules/stack/computeStackContentState.d.ts +99 -0
  96. package/dist/modules/stack/computeSwipeStackTransform.d.ts +76 -0
  97. package/dist/modules/stack/types.d.ts +194 -0
  98. package/dist/modules/stack/useStackAnimationState.d.ts +32 -0
  99. package/dist/modules/stack/useStackNavigation.d.ts +23 -0
  100. package/dist/modules/stack/useStackSwipeInput.d.ts +27 -0
  101. package/dist/panels/index.d.ts +67 -0
  102. package/dist/panels.cjs +2 -0
  103. package/dist/panels.cjs.map +1 -0
  104. package/dist/panels.js +28 -0
  105. package/dist/panels.js.map +1 -0
  106. package/dist/pivot/index.d.ts +3 -0
  107. package/dist/pivot.cjs +1 -1
  108. package/dist/pivot.cjs.map +1 -1
  109. package/dist/pivot.js +20 -2
  110. package/dist/pivot.js.map +1 -1
  111. package/dist/resizer/index.d.ts +57 -0
  112. package/dist/resizer.cjs +2 -0
  113. package/dist/resizer.cjs.map +1 -0
  114. package/dist/resizer.js +8 -0
  115. package/dist/resizer.js.map +1 -0
  116. package/dist/stack/index.d.ts +72 -0
  117. package/dist/stack.cjs +2 -0
  118. package/dist/stack.cjs.map +1 -0
  119. package/dist/stack.js +721 -0
  120. package/dist/stack.js.map +1 -0
  121. package/dist/sticky-header/StickyArea.d.ts +38 -0
  122. package/dist/sticky-header/calculateStickyMetrics.d.ts +28 -0
  123. package/dist/sticky-header/index.d.ts +4 -4
  124. package/dist/sticky-header/types.d.ts +35 -22
  125. package/dist/sticky-header.cjs +1 -1
  126. package/dist/sticky-header.cjs.map +1 -1
  127. package/dist/sticky-header.js +73 -174
  128. package/dist/sticky-header.js.map +1 -1
  129. package/dist/styles-NkjuMOVS.js +57 -0
  130. package/dist/styles-NkjuMOVS.js.map +1 -0
  131. package/dist/styles-qf6ptVLD.cjs +2 -0
  132. package/dist/styles-qf6ptVLD.cjs.map +1 -0
  133. package/dist/types.d.ts +16 -0
  134. package/dist/useContentCache-CO3LYNmz.js +24 -0
  135. package/dist/useContentCache-CO3LYNmz.js.map +1 -0
  136. package/dist/useContentCache-DqXtLrLs.cjs +2 -0
  137. package/dist/useContentCache-DqXtLrLs.cjs.map +1 -0
  138. package/dist/useDocumentPointerEvents-DXxw3qWj.js +54 -0
  139. package/dist/useDocumentPointerEvents-DXxw3qWj.js.map +1 -0
  140. package/dist/useDocumentPointerEvents-DxDSOtip.cjs +2 -0
  141. package/dist/useDocumentPointerEvents-DxDSOtip.cjs.map +1 -0
  142. package/dist/useFloatingState-C4kRaW_R.cjs +2 -0
  143. package/dist/useFloatingState-C4kRaW_R.cjs.map +1 -0
  144. package/dist/useFloatingState-tEfA_wbc.js +74 -0
  145. package/dist/useFloatingState-tEfA_wbc.js.map +1 -0
  146. package/dist/useNativeGestureGuard-C7TSqEkr.cjs +2 -0
  147. package/dist/useNativeGestureGuard-C7TSqEkr.cjs.map +1 -0
  148. package/dist/useNativeGestureGuard-CGYo6O0r.js +347 -0
  149. package/dist/useNativeGestureGuard-CGYo6O0r.js.map +1 -0
  150. package/dist/window/index.d.ts +63 -0
  151. package/dist/window.cjs +2 -0
  152. package/dist/window.cjs.map +1 -0
  153. package/dist/window.js +160 -0
  154. package/dist/window.js.map +1 -0
  155. package/docs/design-tokens.md +405 -0
  156. package/package.json +34 -4
  157. package/src/PanelSystemContext.tsx +88 -0
  158. package/src/components/gesture/SwipeSafeZone.tsx +69 -0
  159. package/src/components/grid/GridLayerList.tsx +172 -0
  160. package/src/components/grid/GridLayerResizeHandles.tsx +145 -0
  161. package/src/components/grid/GridLayout.spec.tsx +743 -0
  162. package/src/components/grid/GridLayout.tsx +130 -0
  163. package/src/components/grid/GridTrackResizeHandle.tsx +87 -0
  164. package/src/components/paneling/FloatingPanelFrame.tsx +203 -0
  165. package/src/components/panels/DropSuggestOverlay.tsx +131 -0
  166. package/src/components/panels/PanelGroupView.tsx +112 -0
  167. package/src/components/pivot/PivotLayer.tsx +27 -0
  168. package/src/components/resizer/HorizontalDivider.tsx +52 -0
  169. package/src/components/resizer/ResizeHandle.tsx +118 -0
  170. package/src/components/tabs/TabBar.tsx +223 -0
  171. package/src/components/tabs/TabBarTab.tsx +133 -0
  172. package/src/components/tabs/TabDragOverlay.tsx +92 -0
  173. package/src/components/window/DialogOverlay.tsx +180 -0
  174. package/src/components/window/Drawer.tsx +369 -0
  175. package/src/components/window/DrawerLayers.tsx +68 -0
  176. package/src/components/window/FloatingWindow.tsx +95 -0
  177. package/src/components/window/PopupLayerPortal.tsx +218 -0
  178. package/src/components/window/drawerStyles.spec.ts +263 -0
  179. package/src/components/window/drawerStyles.ts +228 -0
  180. package/src/components/window/drawerSwipeConfig.spec.ts +131 -0
  181. package/src/components/window/drawerSwipeConfig.ts +112 -0
  182. package/src/components/window/useDrawerSwipeTransform.spec.ts +234 -0
  183. package/src/components/window/useDrawerSwipeTransform.ts +129 -0
  184. package/src/config/PanelContentDeclaration.tsx +427 -0
  185. package/src/config/index.tsx +52 -0
  186. package/src/config/panelJsx.spec.tsx +54 -0
  187. package/src/config/panelJsxConfig.spec.tsx +54 -0
  188. package/src/config/panelJsxDrawer.spec.tsx +33 -0
  189. package/src/config/panelRouter.spec.ts +68 -0
  190. package/src/config/panelRouter.tsx +155 -0
  191. package/src/constants/styles.ts +280 -0
  192. package/src/demo/Layout.module.css +258 -0
  193. package/src/demo/Layout.tsx +176 -0
  194. package/src/demo/components/CodeBlock.module.css +54 -0
  195. package/src/demo/components/CodeBlock.tsx +34 -0
  196. package/src/demo/components/CodePreview.module.css +37 -0
  197. package/src/demo/components/CodePreview.tsx +31 -0
  198. package/src/demo/components/DataPreview.module.css +177 -0
  199. package/src/demo/components/DataPreview.tsx +115 -0
  200. package/src/demo/components/Story.module.css +68 -0
  201. package/src/demo/components/Story.tsx +54 -0
  202. package/src/demo/components/layout/CodePanel.module.css +183 -0
  203. package/src/demo/components/layout/CodePanel.tsx +149 -0
  204. package/src/demo/components/layout/DemoPage.module.css +60 -0
  205. package/src/demo/components/layout/DemoPage.tsx +56 -0
  206. package/src/demo/components/layout/SingleSamplePage.module.css +11 -0
  207. package/src/demo/components/layout/SingleSamplePage.tsx +35 -0
  208. package/src/demo/components/layout/SplitDemoLayout.module.css +107 -0
  209. package/src/demo/components/layout/SplitDemoLayout.tsx +218 -0
  210. package/src/demo/components/layout/index.ts +11 -0
  211. package/src/demo/components/tab-styles/ChromeTabBar.module.css +75 -0
  212. package/src/demo/components/tab-styles/ChromeTabBar.tsx +111 -0
  213. package/src/demo/components/tab-styles/GitHubTabBar.module.css +81 -0
  214. package/src/demo/components/tab-styles/GitHubTabBar.tsx +109 -0
  215. package/src/demo/components/tab-styles/VSCodeTabBar.module.css +78 -0
  216. package/src/demo/components/tab-styles/VSCodeTabBar.tsx +109 -0
  217. package/src/demo/components/tab-styles/index.ts +6 -0
  218. package/src/demo/components/ui/DemoButton.module.css +63 -0
  219. package/src/demo/components/ui/DemoButton.tsx +32 -0
  220. package/src/demo/components/ui/DemoCard.module.css +15 -0
  221. package/src/demo/components/ui/DemoCard.tsx +30 -0
  222. package/src/demo/components/ui/DemoContainer.module.css +17 -0
  223. package/src/demo/components/ui/DemoContainer.tsx +30 -0
  224. package/src/demo/components/ui/DemoPanel.module.css +23 -0
  225. package/src/demo/components/ui/DemoPanel.tsx +33 -0
  226. package/src/demo/components/ui/PanelText.module.css +18 -0
  227. package/src/demo/components/ui/PanelText.tsx +29 -0
  228. package/src/demo/components/ui/PanelTitle.module.css +18 -0
  229. package/src/demo/components/ui/PanelTitle.tsx +31 -0
  230. package/src/demo/contexts/TabbarDemoConfig.tsx +218 -0
  231. package/src/demo/demo.css +172 -0
  232. package/src/demo/hooks/useMedia.ts +41 -0
  233. package/src/demo/hooks/useShikiHighlight.ts +55 -0
  234. package/src/demo/index.tsx +293 -0
  235. package/src/demo/pages/Dialog/alerts/index.tsx +22 -0
  236. package/src/demo/pages/Dialog/card/index.tsx +22 -0
  237. package/src/demo/pages/Dialog/components/AlertDialogDemo.tsx +124 -0
  238. package/src/demo/pages/Dialog/components/CardExpandDemo.module.css +243 -0
  239. package/src/demo/pages/Dialog/components/CardExpandDemo.tsx +204 -0
  240. package/src/demo/pages/Dialog/components/CustomAlertDialogDemo.tsx +219 -0
  241. package/src/demo/pages/Dialog/components/DialogDemos.module.css +77 -0
  242. package/src/demo/pages/Dialog/components/ModalBasics.tsx +45 -0
  243. package/src/demo/pages/Dialog/components/SwipeDialogDemo.module.css +77 -0
  244. package/src/demo/pages/Dialog/components/SwipeDialogDemo.tsx +181 -0
  245. package/src/demo/pages/Dialog/custom-alert/index.tsx +22 -0
  246. package/src/demo/pages/Dialog/modal/index.tsx +17 -0
  247. package/src/demo/pages/Dialog/swipe/index.tsx +22 -0
  248. package/src/demo/pages/Drawer/animations/index.tsx +22 -0
  249. package/src/demo/pages/Drawer/basics/index.tsx +17 -0
  250. package/src/demo/pages/Drawer/components/DrawerAnimations.module.css +125 -0
  251. package/src/demo/pages/Drawer/components/DrawerAnimations.tsx +118 -0
  252. package/src/demo/pages/Drawer/components/DrawerBasics.module.css +55 -0
  253. package/src/demo/pages/Drawer/components/DrawerBasics.tsx +76 -0
  254. package/src/demo/pages/Drawer/components/DrawerMenuLayout.module.css +332 -0
  255. package/src/demo/pages/Drawer/components/DrawerMenuLayout.tsx +199 -0
  256. package/src/demo/pages/Drawer/components/DrawerSwipe.module.css +316 -0
  257. package/src/demo/pages/Drawer/components/DrawerSwipe.tsx +178 -0
  258. package/src/demo/pages/Drawer/menu/index.tsx +17 -0
  259. package/src/demo/pages/Drawer/swipe/index.tsx +17 -0
  260. package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.module.css +163 -0
  261. package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.tsx +234 -0
  262. package/src/demo/pages/FloatingPanelFrame/basic/index.tsx +17 -0
  263. package/src/demo/pages/FloatingPanelFrame/complex/index.tsx +26 -0
  264. package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.module.css +16 -0
  265. package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.tsx +24 -0
  266. package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.module.css +54 -0
  267. package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.tsx +67 -0
  268. package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.module.css +21 -0
  269. package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.tsx +41 -0
  270. package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.module.css +5 -0
  271. package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.tsx +43 -0
  272. package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.module.css +11 -0
  273. package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.tsx +42 -0
  274. package/src/demo/pages/FloatingPanelFrame/index.tsx +80 -0
  275. package/src/demo/pages/FloatingPanelFrame/scrollable/index.tsx +30 -0
  276. package/src/demo/pages/FloatingPanelFrame/with-controls/index.tsx +30 -0
  277. package/src/demo/pages/FloatingPanelFrame/with-meta/index.tsx +17 -0
  278. package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.module.css +112 -0
  279. package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.tsx +56 -0
  280. package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.module.css +46 -0
  281. package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.tsx +29 -0
  282. package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.module.css +54 -0
  283. package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.tsx +30 -0
  284. package/src/demo/pages/HorizontalDivider/index.module.css +14 -0
  285. package/src/demo/pages/HorizontalDivider/index.tsx +64 -0
  286. package/src/demo/pages/HorizontalDivider/panels-with-rich-content/index.tsx +21 -0
  287. package/src/demo/pages/HorizontalDivider/simple-resizable-panels/index.tsx +21 -0
  288. package/src/demo/pages/HorizontalDivider/three-panel-layout/index.tsx +21 -0
  289. package/src/demo/pages/PanelLayout/PanelLayoutDemo.module.css +174 -0
  290. package/src/demo/pages/PanelLayout/PanelLayoutDemo.tsx +248 -0
  291. package/src/demo/pages/PanelLayout/components/DashboardLayout.module.css +115 -0
  292. package/src/demo/pages/PanelLayout/components/DashboardLayout.tsx +124 -0
  293. package/src/demo/pages/PanelLayout/components/DraggableOverlays.module.css +101 -0
  294. package/src/demo/pages/PanelLayout/components/DraggableOverlays.tsx +122 -0
  295. package/src/demo/pages/PanelLayout/components/IDELayout.module.css +104 -0
  296. package/src/demo/pages/PanelLayout/components/IDELayout.tsx +143 -0
  297. package/src/demo/pages/PanelLayout/components/SimpleGrid.module.css +19 -0
  298. package/src/demo/pages/PanelLayout/components/SimpleGrid.tsx +62 -0
  299. package/src/demo/pages/PanelLayout/dashboard/index.tsx +22 -0
  300. package/src/demo/pages/PanelLayout/draggable-overlays/index.tsx +22 -0
  301. package/src/demo/pages/PanelLayout/ide-layout/index.tsx +22 -0
  302. package/src/demo/pages/PanelLayout/index.tsx +94 -0
  303. package/src/demo/pages/PanelLayout/simple-grid/index.tsx +22 -0
  304. package/src/demo/pages/PanelSystem/PanelSystemPreview.module.css +20 -0
  305. package/src/demo/pages/PanelSystem/PanelSystemPreview.tsx +101 -0
  306. package/src/demo/pages/PanelSystem/preview/index.tsx +18 -0
  307. package/src/demo/pages/PanelSystem/tabbar/index.tsx +129 -0
  308. package/src/demo/pages/Pivot/basics/index.tsx +17 -0
  309. package/src/demo/pages/Pivot/components/Pivot.module.css +278 -0
  310. package/src/demo/pages/Pivot/components/PivotBasics.tsx +103 -0
  311. package/src/demo/pages/Pivot/components/PivotSidebar.tsx +168 -0
  312. package/src/demo/pages/Pivot/components/PivotTabs.tsx +129 -0
  313. package/src/demo/pages/Pivot/components/PivotTransitions.tsx +120 -0
  314. package/src/demo/pages/Pivot/components/SwipePivot.module.css +114 -0
  315. package/src/demo/pages/Pivot/components/SwipePivot.tsx +193 -0
  316. package/src/demo/pages/Pivot/components/SwipeTabsPivot.module.css +203 -0
  317. package/src/demo/pages/Pivot/components/SwipeTabsPivot.tsx +320 -0
  318. package/src/demo/pages/Pivot/sidebar/index.tsx +17 -0
  319. package/src/demo/pages/Pivot/swipe/index.tsx +16 -0
  320. package/src/demo/pages/Pivot/swipe-debug/index.tsx +287 -0
  321. package/src/demo/pages/Pivot/swipe-tabs/index.tsx +15 -0
  322. package/src/demo/pages/Pivot/tabs/index.tsx +17 -0
  323. package/src/demo/pages/Pivot/transitions/index.tsx +17 -0
  324. package/src/demo/pages/ResizeHandle/both-directions/index.tsx +17 -0
  325. package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.module.css +72 -0
  326. package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.tsx +41 -0
  327. package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.module.css +61 -0
  328. package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.tsx +33 -0
  329. package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.module.css +83 -0
  330. package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.tsx +53 -0
  331. package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.module.css +68 -0
  332. package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.tsx +33 -0
  333. package/src/demo/pages/ResizeHandle/horizontal/index.tsx +17 -0
  334. package/src/demo/pages/ResizeHandle/index.module.css +11 -0
  335. package/src/demo/pages/ResizeHandle/index.tsx +71 -0
  336. package/src/demo/pages/ResizeHandle/nested-panels/index.tsx +17 -0
  337. package/src/demo/pages/ResizeHandle/vertical/index.tsx +17 -0
  338. package/src/demo/pages/ResponsiveLayout/adaptive-workspace/index.tsx +22 -0
  339. package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.module.css +423 -0
  340. package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.tsx +398 -0
  341. package/src/demo/pages/Stack/basics/index.tsx +22 -0
  342. package/src/demo/pages/Stack/components/Stack.module.css +234 -0
  343. package/src/demo/pages/Stack/components/StackBasics.spec.tsx +152 -0
  344. package/src/demo/pages/Stack/components/StackBasics.tsx +301 -0
  345. package/src/demo/pages/Stack/components/StackTablet.module.css +299 -0
  346. package/src/demo/pages/Stack/components/StackTablet.spec.tsx +120 -0
  347. package/src/demo/pages/Stack/components/StackTablet.tsx +422 -0
  348. package/src/demo/pages/Stack/tablet/index.tsx +22 -0
  349. package/src/demo/pages/StickyHeader/basics/index.tsx +17 -0
  350. package/src/demo/pages/StickyHeader/components/StickyHeader.module.css +219 -0
  351. package/src/demo/pages/StickyHeader/components/StickyHeaderBasics.tsx +103 -0
  352. package/src/demo/routes.tsx +214 -0
  353. package/src/demo/styles/animations.css +68 -0
  354. package/src/demo/styles/stack-themes.css +35 -0
  355. package/src/demo/utils/createPanelView.tsx +58 -0
  356. package/src/dialog/index.ts +85 -0
  357. package/src/floating/index.ts +24 -0
  358. package/src/grid/index.ts +75 -0
  359. package/src/hooks/ContentCacheContext.tsx +87 -0
  360. package/src/hooks/gesture/presets.spec.ts +86 -0
  361. package/src/hooks/gesture/presets.ts +95 -0
  362. package/src/hooks/gesture/testing/createGestureSimulator.spec.ts +241 -0
  363. package/src/hooks/gesture/testing/createGestureSimulator.ts +385 -0
  364. package/src/hooks/gesture/thresholdValue.spec.ts +103 -0
  365. package/src/hooks/gesture/thresholdValue.ts +77 -0
  366. package/src/hooks/gesture/types.ts +367 -0
  367. package/src/hooks/gesture/useDirectionalLock.spec.ts +271 -0
  368. package/src/hooks/gesture/useDirectionalLock.ts +115 -0
  369. package/src/hooks/gesture/useEdgeSwipeInput.spec.ts +462 -0
  370. package/src/hooks/gesture/useEdgeSwipeInput.ts +131 -0
  371. package/src/hooks/gesture/useNativeGestureGuard.spec.ts +473 -0
  372. package/src/hooks/gesture/useNativeGestureGuard.ts +135 -0
  373. package/src/hooks/gesture/usePointerTracking.spec.ts +364 -0
  374. package/src/hooks/gesture/usePointerTracking.ts +134 -0
  375. package/src/hooks/gesture/useScrollBoundary.spec.ts +249 -0
  376. package/src/hooks/gesture/useScrollBoundary.ts +113 -0
  377. package/src/hooks/gesture/useSwipeInput.spec.ts +592 -0
  378. package/src/hooks/gesture/useSwipeInput.ts +310 -0
  379. package/src/hooks/gesture/utils.spec.ts +152 -0
  380. package/src/hooks/gesture/utils.ts +178 -0
  381. package/src/hooks/useAnimatedVisibility.spec.ts +277 -0
  382. package/src/hooks/useAnimatedVisibility.ts +172 -0
  383. package/src/hooks/useAnimationFrame.ts +208 -0
  384. package/src/hooks/useCSSMatrix.spec.ts +214 -0
  385. package/src/hooks/useCSSMatrix.ts +262 -0
  386. package/src/hooks/useClonedElementPreview.ts +28 -0
  387. package/src/hooks/useContainerScroll.ts +78 -0
  388. package/src/hooks/useContentCache.spec.tsx +232 -0
  389. package/src/hooks/useContentCache.tsx +127 -0
  390. package/src/hooks/useDocumentPointerEvents.ts +137 -0
  391. package/src/hooks/useDocumentScroll.ts +41 -0
  392. package/src/hooks/useEffectEvent.ts +40 -0
  393. package/src/hooks/useElementComponentWrapper.tsx +63 -0
  394. package/src/hooks/useIntersectionObserver.tsx +125 -0
  395. package/src/hooks/useIsomorphicLayoutEffect.ts +29 -0
  396. package/src/hooks/useOperationContinuity.spec.ts +387 -0
  397. package/src/hooks/useOperationContinuity.ts +135 -0
  398. package/src/hooks/useResizeObserver.spec.tsx +277 -0
  399. package/src/hooks/useResizeObserver.tsx +150 -0
  400. package/src/hooks/useScrollContainer.ts +73 -0
  401. package/src/hooks/useSharedElementTransition.ts +333 -0
  402. package/src/hooks/useSnapAnimation.ts +128 -0
  403. package/src/hooks/useSwipeContentTransform.spec.ts +133 -0
  404. package/src/hooks/useSwipeContentTransform.ts +373 -0
  405. package/src/hooks/useTransitionState.ts +95 -0
  406. package/src/index.tsx +88 -0
  407. package/src/modules/dialog/AlertDialog.spec.tsx +387 -0
  408. package/src/modules/dialog/AlertDialog.tsx +221 -0
  409. package/src/modules/dialog/DialogContainer.spec.tsx +228 -0
  410. package/src/modules/dialog/DialogContainer.tsx +188 -0
  411. package/src/modules/dialog/Modal.spec.tsx +220 -0
  412. package/src/modules/dialog/Modal.tsx +182 -0
  413. package/src/modules/dialog/SwipeDialogContainer.tsx +208 -0
  414. package/src/modules/dialog/dialogAnimationUtils.spec.ts +253 -0
  415. package/src/modules/dialog/dialogAnimationUtils.ts +297 -0
  416. package/src/modules/dialog/types.ts +186 -0
  417. package/src/modules/dialog/useDialog.spec.tsx +447 -0
  418. package/src/modules/dialog/useDialog.ts +214 -0
  419. package/src/modules/dialog/useDialogContainer.spec.ts +331 -0
  420. package/src/modules/dialog/useDialogContainer.ts +150 -0
  421. package/src/modules/dialog/useDialogSwipeInput.spec.ts +157 -0
  422. package/src/modules/dialog/useDialogSwipeInput.ts +319 -0
  423. package/src/modules/dialog/useDialogTransform.spec.ts +370 -0
  424. package/src/modules/dialog/useDialogTransform.ts +407 -0
  425. package/src/modules/drawer/types.ts +102 -0
  426. package/src/modules/drawer/useDrawerSwipeInput.spec.ts +566 -0
  427. package/src/modules/drawer/useDrawerSwipeInput.ts +399 -0
  428. package/src/modules/grid/GridLayoutContext.tsx +57 -0
  429. package/src/modules/grid/LayerInstanceContext.tsx +56 -0
  430. package/src/modules/grid/resizeHandles.ts +157 -0
  431. package/src/modules/grid/trackUtils.ts +146 -0
  432. package/src/modules/grid/useGridPlacements.ts +143 -0
  433. package/src/modules/grid/useGridTracks.ts +156 -0
  434. package/src/modules/grid/useLayerDragHandle.ts +16 -0
  435. package/src/modules/grid/useLayerInteractions.tsx +850 -0
  436. package/src/modules/keybindings/KeybindingsProvider.tsx +111 -0
  437. package/src/modules/panels/dom/DomRegistry.tsx +94 -0
  438. package/src/modules/panels/index.ts +45 -0
  439. package/src/modules/panels/interactions/InteractionsContext.test.tsx +330 -0
  440. package/src/modules/panels/interactions/InteractionsContext.tsx +394 -0
  441. package/src/modules/panels/interactions/dnd.ts +28 -0
  442. package/src/modules/panels/keybindings/KeybindingsInstaller.tsx +15 -0
  443. package/src/modules/panels/layout/adapter.ts +124 -0
  444. package/src/modules/panels/rendering/ContentRegistry.spec.tsx +311 -0
  445. package/src/modules/panels/rendering/ContentRegistry.tsx +205 -0
  446. package/src/modules/panels/rendering/GroupContainer.tsx +65 -0
  447. package/src/modules/panels/rendering/RenderBridge.tsx +115 -0
  448. package/src/modules/panels/rendering/RenderContext.tsx +31 -0
  449. package/src/modules/panels/state/PanelSplitHandles.tsx +147 -0
  450. package/src/modules/panels/state/PanelSystemContext.splitLimits.spec.tsx +50 -0
  451. package/src/modules/panels/state/PanelSystemContext.tsx +289 -0
  452. package/src/modules/panels/state/StateContext.tsx +12 -0
  453. package/src/modules/panels/state/cleanup.ts +37 -0
  454. package/src/modules/panels/state/commands.ts +53 -0
  455. package/src/modules/panels/state/focus/Context.tsx +25 -0
  456. package/src/modules/panels/state/focus/logic.ts +57 -0
  457. package/src/modules/panels/state/groups/Context.tsx +25 -0
  458. package/src/modules/panels/state/groups/logic.ts +105 -0
  459. package/src/modules/panels/state/splitLimits.spec.ts +46 -0
  460. package/src/modules/panels/state/splitLimits.ts +90 -0
  461. package/src/modules/panels/state/state.spec.ts +49 -0
  462. package/src/modules/panels/state/tree/Context.tsx +24 -0
  463. package/src/modules/panels/state/tree/logic.spec.ts +34 -0
  464. package/src/modules/panels/state/tree/logic.ts +138 -0
  465. package/src/modules/panels/state/types.ts +142 -0
  466. package/src/modules/panels/system/PanelSystem.empty-tabbar.spec.tsx +53 -0
  467. package/src/modules/panels/system/PanelSystem.tab-click-activates.spec.tsx +44 -0
  468. package/src/modules/panels/system/PanelSystem.tab-reorder.spec.tsx +64 -0
  469. package/src/modules/panels/system/PanelSystem.tabs-no-dup.spec.tsx +57 -0
  470. package/src/modules/panels/system/PanelSystem.tsx +206 -0
  471. package/src/modules/pivot/PivotContent.spec.tsx +179 -0
  472. package/src/modules/pivot/PivotContent.tsx +77 -0
  473. package/src/modules/pivot/SwipePivotContent.debug.tmp.tsx +237 -0
  474. package/src/modules/pivot/SwipePivotContent.position.spec.tsx +171 -0
  475. package/src/modules/pivot/SwipePivotContent.spec.tsx +494 -0
  476. package/src/modules/pivot/SwipePivotContent.test.tsx +502 -0
  477. package/src/modules/pivot/SwipePivotContent.tsx +197 -0
  478. package/src/modules/pivot/SwipePivotTabBar.spec.tsx +882 -0
  479. package/src/modules/pivot/SwipePivotTabBar.tsx +583 -0
  480. package/src/modules/pivot/index.ts +8 -0
  481. package/src/modules/pivot/scaleInputState.spec.ts +219 -0
  482. package/src/modules/pivot/scaleInputState.ts +66 -0
  483. package/src/modules/pivot/types.ts +139 -0
  484. package/src/modules/pivot/usePivot.spec.ts +635 -0
  485. package/src/modules/pivot/usePivot.spec.tsx +186 -0
  486. package/src/modules/pivot/usePivot.tsx +345 -0
  487. package/src/modules/pivot/usePivotSwipeInput.spec.ts +708 -0
  488. package/src/modules/pivot/usePivotSwipeInput.ts +136 -0
  489. package/src/modules/resizer/useResizeDrag.ts +94 -0
  490. package/src/modules/stack/StackContent.spec.tsx +264 -0
  491. package/src/modules/stack/StackContent.tsx +111 -0
  492. package/src/modules/stack/SwipeStackContent.spec.tsx +1564 -0
  493. package/src/modules/stack/SwipeStackContent.tsx +366 -0
  494. package/src/modules/stack/SwipeStackOutlet.spec.tsx +250 -0
  495. package/src/modules/stack/SwipeStackOutlet.tsx +221 -0
  496. package/src/modules/stack/computeStackContentState.spec.ts +281 -0
  497. package/src/modules/stack/computeStackContentState.ts +304 -0
  498. package/src/modules/stack/computeSwipeStackTransform.spec.ts +186 -0
  499. package/src/modules/stack/computeSwipeStackTransform.ts +145 -0
  500. package/src/modules/stack/swipeTransitionContinuity.spec.tsx +1133 -0
  501. package/src/modules/stack/types.ts +226 -0
  502. package/src/modules/stack/useStackAnimationState.spec.ts +188 -0
  503. package/src/modules/stack/useStackAnimationState.ts +143 -0
  504. package/src/modules/stack/useStackNavigation.spec.ts +672 -0
  505. package/src/modules/stack/useStackNavigation.tsx +393 -0
  506. package/src/modules/stack/useStackSwipeInput.spec.ts +309 -0
  507. package/src/modules/stack/useStackSwipeInput.ts +139 -0
  508. package/src/modules/window/useDrawerState.ts +81 -0
  509. package/src/modules/window/useFloatingState.spec.ts +252 -0
  510. package/src/modules/window/useFloatingState.ts +141 -0
  511. package/src/panels/index.ts +119 -0
  512. package/src/pivot/index.ts +19 -0
  513. package/src/resizer/index.ts +68 -0
  514. package/src/stack/index.ts +91 -0
  515. package/src/sticky-header/StickyArea.tsx +193 -0
  516. package/src/sticky-header/calculateStickyMetrics.spec.ts +105 -0
  517. package/src/sticky-header/calculateStickyMetrics.ts +50 -0
  518. package/src/sticky-header/index.ts +18 -0
  519. package/src/sticky-header/types.ts +68 -0
  520. package/src/types.ts +341 -0
  521. package/src/utils/CSSMatrix.ts +321 -0
  522. package/src/utils/css.ts +65 -0
  523. package/src/utils/dialogUtils.ts +43 -0
  524. package/src/utils/math.ts +18 -0
  525. package/src/utils/polyfills/createDialogPolyfill.ts +18 -0
  526. package/src/utils/typedActions.ts +103 -0
  527. package/src/vite-env.d.ts +6 -0
  528. package/src/window/index.ts +69 -0
  529. package/dist/GridLayout-BQQ63eA1.cjs +0 -2
  530. package/dist/GridLayout-BQQ63eA1.cjs.map +0 -1
  531. package/dist/GridLayout-CJTKq7Mp.js +0 -1465
  532. package/dist/GridLayout-CJTKq7Mp.js.map +0 -1
  533. package/dist/sticky-header/StickyHeader.d.ts +0 -53
  534. package/dist/styles-CA2_zLZt.js +0 -52
  535. package/dist/styles-CA2_zLZt.js.map +0 -1
  536. package/dist/styles-PsqGOEJP.cjs +0 -2
  537. package/dist/styles-PsqGOEJP.cjs.map +0 -1
  538. package/dist/usePivot-7ctin_P_.cjs +0 -2
  539. package/dist/usePivot-7ctin_P_.cjs.map +0 -1
  540. package/dist/usePivot-CgQxB8rc.js +0 -124
  541. package/dist/usePivot-CgQxB8rc.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridLayout-UWNxXw77.js","sources":["../src/hooks/useIntersectionObserver.tsx","../src/components/grid/GridLayerResizeHandles.tsx","../src/components/pivot/PivotLayer.tsx","../src/components/grid/GridLayerList.tsx","../src/components/grid/GridTrackResizeHandle.tsx","../src/modules/grid/useGridPlacements.ts","../src/utils/css.ts","../src/utils/math.ts","../src/modules/grid/trackUtils.ts","../src/modules/grid/resizeHandles.ts","../src/modules/grid/useGridTracks.ts","../src/modules/grid/useLayerInteractions.tsx","../src/components/grid/GridLayout.tsx"],"sourcesContent":["/**\n * @file Shared useIntersectionObserver hook with cached observer instances.\n */\nimport * as React from \"react\";\n\nconst createIdGenerator = () => {\n const map = new Map<object, number>();\n return (ref: object | null | undefined) => {\n if (!ref) {\n return undefined;\n }\n const existing = map.get(ref);\n if (existing !== undefined) {\n return existing;\n }\n const nextId = map.size;\n map.set(ref, nextId);\n return nextId;\n };\n};\n\nconst getId = createIdGenerator();\ntype Unobserve = () => void;\ntype Callback = (entry: IntersectionObserverEntry) => void;\ntype SharedObserver = {\n observe: (target: Element, callback: Callback) => Unobserve;\n};\nconst observerCache = new Map<string, SharedObserver>();\nconst getSharedObserver = (options: IntersectionObserverInit) => {\n const observerKey = `ovs-threshold:${options.threshold}-rootMargin:${options.rootMargin}-root:${getId(options.root)}`;\n\n if (observerCache.has(observerKey)) {\n return observerCache.get(observerKey)!;\n }\n const observer = new (class {\n #callbackMap = new Map<Element, Callback>();\n #intersectionObserver = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const callback = this.#callbackMap.get(entry.target);\n if (callback) {\n callback(entry);\n }\n });\n }, options);\n observe(target: Element, callback: Callback) {\n this.#callbackMap.set(target, callback);\n this.#intersectionObserver.observe(target);\n return () => {\n this.#callbackMap.delete(target);\n this.#intersectionObserver.unobserve(target);\n };\n }\n })();\n observerCache.set(observerKey, observer);\n\n return observer;\n};\nconst voidClientRect = Object.freeze({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n}) as DOMRectReadOnly;\n/**\n * Observe intersection changes for a given element reference using shared observers.\n *\n * @param ref - Ref holding the element to observe.\n * @param options - Intersection observer configuration.\n * @returns Latest intersection entry snapshot with sensible defaults.\n */\nexport function useIntersectionObserver<T extends HTMLElement>(\n ref: React.RefObject<T | null>,\n { threshold = 0, rootMargin = \"0px\", root = null }: IntersectionObserverInit,\n): {\n readonly boundingClientRect: DOMRectReadOnly;\n readonly intersectionRatio: number;\n readonly intersectionRect: DOMRectReadOnly;\n readonly isIntersecting: boolean;\n readonly rootBounds: DOMRectReadOnly | null;\n readonly target: Element | null;\n readonly time: DOMHighResTimeStamp;\n} {\n const [intersection, setIntersection] = React.useState<IntersectionObserverEntry | null>(null);\n\n React.useEffect(() => {\n const target = ref.current;\n if (!target) {\n return;\n }\n\n const observer = getSharedObserver({\n threshold,\n rootMargin,\n root,\n });\n\n return observer.observe(target, (entry) => {\n setIntersection({\n isIntersecting: entry.isIntersecting,\n boundingClientRect: entry.boundingClientRect,\n intersectionRatio: entry.intersectionRatio,\n intersectionRect: entry.intersectionRect,\n rootBounds: entry.rootBounds,\n target: entry.target,\n time: entry.time,\n });\n });\n }, [ref, threshold, rootMargin, root]);\n\n return React.useMemo(() => {\n return {\n isIntersecting: intersection?.isIntersecting ?? false,\n boundingClientRect: intersection?.boundingClientRect ?? voidClientRect,\n intersectionRatio: intersection?.intersectionRatio ?? 0,\n intersectionRect: intersection?.intersectionRect ?? voidClientRect,\n rootBounds: intersection?.rootBounds ?? null,\n target: intersection?.target ?? ref.current,\n time: intersection?.time ?? 0,\n };\n }, [intersection, ref]);\n}\n","/**\n * @file Presentational resize handles for floating layers (corner + edge).\n */\nimport * as React from \"react\";\nimport { GRID_LAYER_CORNER_HIT_SIZE, GRID_LAYER_EDGE_HIT_THICKNESS } from \"../../constants/styles\";\n\nconst resizeHandleBaseStyle: React.CSSProperties = {\n position: \"absolute\",\n pointerEvents: \"auto\",\n boxSizing: \"border-box\",\n background: \"transparent\",\n border: \"none\",\n};\n\nconst cornerHandleStyle: React.CSSProperties = {\n ...resizeHandleBaseStyle,\n width: GRID_LAYER_CORNER_HIT_SIZE,\n height: GRID_LAYER_CORNER_HIT_SIZE,\n zIndex: 2,\n};\n\nconst edgeHandleStyle: React.CSSProperties = {\n ...resizeHandleBaseStyle,\n zIndex: 1,\n};\n\nconst cornerPositions: Record<string, React.CSSProperties> = {\n \"top-left\": {\n top: 0,\n left: 0,\n transform: \"translate(-50%, -50%)\",\n cursor: \"nwse-resize\",\n },\n \"top-right\": {\n top: 0,\n right: 0,\n transform: \"translate(50%, -50%)\",\n cursor: \"nesw-resize\",\n },\n \"bottom-left\": {\n bottom: 0,\n left: 0,\n transform: \"translate(-50%, 50%)\",\n cursor: \"nesw-resize\",\n },\n \"bottom-right\": {\n bottom: 0,\n right: 0,\n transform: \"translate(50%, 50%)\",\n cursor: \"nwse-resize\",\n },\n};\n\nconst edgePositions: Record<string, React.CSSProperties> = {\n left: {\n top: GRID_LAYER_CORNER_HIT_SIZE,\n bottom: GRID_LAYER_CORNER_HIT_SIZE,\n left: 0,\n width: GRID_LAYER_EDGE_HIT_THICKNESS,\n transform: \"translateX(-50%)\",\n cursor: \"ew-resize\",\n },\n right: {\n top: GRID_LAYER_CORNER_HIT_SIZE,\n bottom: GRID_LAYER_CORNER_HIT_SIZE,\n right: 0,\n width: GRID_LAYER_EDGE_HIT_THICKNESS,\n transform: \"translateX(50%)\",\n cursor: \"ew-resize\",\n },\n top: {\n left: GRID_LAYER_CORNER_HIT_SIZE,\n right: GRID_LAYER_CORNER_HIT_SIZE,\n top: 0,\n height: GRID_LAYER_EDGE_HIT_THICKNESS,\n transform: \"translateY(-50%)\",\n cursor: \"ns-resize\",\n },\n bottom: {\n left: GRID_LAYER_CORNER_HIT_SIZE,\n right: GRID_LAYER_CORNER_HIT_SIZE,\n bottom: 0,\n height: GRID_LAYER_EDGE_HIT_THICKNESS,\n transform: \"translateY(50%)\",\n cursor: \"ns-resize\",\n },\n};\n\nexport type HorizontalEdge = \"left\" | \"right\";\nexport type VerticalEdge = \"top\" | \"bottom\";\n\nexport type ResizeHandleConfig =\n | {\n key: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\n variant: \"corner\";\n horizontal: HorizontalEdge;\n vertical: VerticalEdge;\n }\n | {\n key: \"left\" | \"right\" | \"top\" | \"bottom\";\n variant: \"edge\";\n horizontal?: HorizontalEdge;\n vertical?: VerticalEdge;\n };\n\nconst RESIZE_HANDLE_CONFIGS: ReadonlyArray<ResizeHandleConfig> = [\n { key: \"top-left\", variant: \"corner\", horizontal: \"left\", vertical: \"top\" },\n { key: \"top-right\", variant: \"corner\", horizontal: \"right\", vertical: \"top\" },\n { key: \"bottom-left\", variant: \"corner\", horizontal: \"left\", vertical: \"bottom\" },\n { key: \"bottom-right\", variant: \"corner\", horizontal: \"right\", vertical: \"bottom\" },\n { key: \"left\", variant: \"edge\", horizontal: \"left\" },\n { key: \"right\", variant: \"edge\", horizontal: \"right\" },\n { key: \"top\", variant: \"edge\", vertical: \"top\" },\n { key: \"bottom\", variant: \"edge\", vertical: \"bottom\" },\n];\n\nexport type GridLayerResizeHandlesProps = {\n layerId: string;\n onPointerDown: (config: ResizeHandleConfig, event: React.PointerEvent<HTMLDivElement>) => void;\n};\n\nexport const GridLayerResizeHandles: React.FC<GridLayerResizeHandlesProps> = ({ layerId, onPointerDown }) => {\n return (\n <>\n {RESIZE_HANDLE_CONFIGS.map((config) => {\n const baseStyle = config.variant === \"corner\" ? cornerHandleStyle : edgeHandleStyle;\n const positionStyle = config.variant === \"corner\" ? cornerPositions[config.key] : edgePositions[config.key];\n const combinedStyle = { ...baseStyle, ...positionStyle };\n const datasetProps =\n config.variant === \"corner\" ? { \"data-resize-corner\": config.key } : { \"data-resize-edge\": config.key };\n return (\n <div\n key={config.key}\n role=\"presentation\"\n aria-hidden=\"true\"\n style={combinedStyle}\n {...datasetProps}\n data-layer-id={layerId}\n onPointerDown={(event) => onPointerDown(config, event)}\n />\n );\n })}\n </>\n );\n};\n","/**\n * @file PivotLayer component for rendering pivot behavior within GridLayout.\n * This component bridges the usePivot hook with the GridLayout layer system.\n */\nimport * as React from \"react\";\nimport type { PivotBehavior } from \"../../types\";\nimport { usePivot } from \"../../modules/pivot\";\n\nexport type PivotLayerProps = {\n pivot: PivotBehavior;\n};\n\n/**\n * Internal component that renders pivot content using React.Activity.\n * Used by GridLayerList when a layer has pivot behavior.\n */\nexport const PivotLayer: React.FC<PivotLayerProps> = ({ pivot }) => {\n const { Outlet } = usePivot({\n items: pivot.items,\n activeId: pivot.activeId,\n defaultActiveId: pivot.defaultActiveId,\n onActiveChange: pivot.onActiveChange,\n transitionMode: pivot.transitionMode,\n });\n\n return <Outlet />;\n};\n","/**\n * @file Layer list rendering inside the grid layout.\n *\n * Uses content caching from PanelSystemContext to preserve component state\n * when parent components re-render and recreate the layers array.\n */\nimport * as React from \"react\";\nimport type { LayerDefinition } from \"../../types\";\nimport { useGridLayoutContext } from \"../../modules/grid/GridLayoutContext\";\nimport type { ResizeHandleConfig } from \"../../modules/grid/GridLayoutContext\";\nimport { LayerInstanceProvider } from \"../../modules/grid/LayerInstanceContext\";\nimport { usePanelSystem } from \"../../PanelSystemContext\";\nimport { PopupLayerPortal } from \"../window/PopupLayerPortal\";\nimport { FloatingWindow } from \"../window/FloatingWindow\";\nimport { GridLayerResizeHandles } from \"./GridLayerResizeHandles\";\nimport { PivotLayer } from \"../pivot/PivotLayer\";\n\ntype GridLayerListProps = {\n layers: LayerDefinition[];\n};\n\n/**\n * Resolves layer content based on pivot and cache settings.\n * Pivot layers use PivotLayer component, others use cache or direct content.\n */\nconst resolveLayerContent = (\n layer: LayerDefinition,\n getCachedContent: (layerId: string) => React.ReactNode | null,\n): React.ReactNode => {\n if (layer.pivot) {\n return <PivotLayer pivot={layer.pivot} />;\n }\n if (layer.cache) {\n return getCachedContent(layer.id);\n }\n return layer.component;\n};\n\n/**\n * Renders layer content with optional FloatingWindow chrome.\n * Handles both chrome and non-chrome layers.\n * Uses cached content only when layer.cache is true.\n */\nconst LayerContentRenderer = React.memo<{\n layer: LayerDefinition;\n onClose: () => void;\n}>(({ layer, onClose }) => {\n const { getCachedContent } = usePanelSystem();\n\n const content = resolveLayerContent(layer, getCachedContent);\n\n if (!layer.floating?.chrome) {\n return content;\n }\n\n return (\n <FloatingWindow id={layer.id} config={layer.floating} onClose={onClose}>\n {content}\n </FloatingWindow>\n );\n});\nLayerContentRenderer.displayName = \"LayerContentRenderer\";\n\n/**\n * Renders resize handles if the layer is resizable.\n */\nconst LayerResizeHandles = React.memo<{\n layerId: string;\n isResizable: boolean;\n onPointerDown: (config: ResizeHandleConfig, event: React.PointerEvent<HTMLDivElement>) => void;\n}>(({ layerId, isResizable, onPointerDown }) => {\n if (!isResizable) {\n return null;\n }\n return <GridLayerResizeHandles layerId={layerId} onPointerDown={onPointerDown} />;\n});\nLayerResizeHandles.displayName = \"LayerResizeHandles\";\n\n/**\n * Determines the overflow style for a layer based on scrollable flag and floating status.\n * - scrollable: auto (enable scrolling within container)\n * - floating: visible (allow box-shadow to render outside bounds)\n * - Not scrollable and not floating: hidden (prevent overflow)\n */\nconst resolveOverflowStyle = (\n scrollable: boolean | undefined,\n isFloating: boolean,\n): React.CSSProperties[\"overflow\"] => {\n if (scrollable) {\n return \"auto\";\n }\n if (isFloating) {\n return \"visible\";\n }\n return \"hidden\";\n};\n\n/**\n * Renders a single embedded layer (non-popup).\n */\nconst EmbeddedLayer = React.memo<{\n layer: LayerDefinition;\n handleLayerPointerDown: (e: React.PointerEvent<HTMLDivElement>) => void;\n}>(({ layer, handleLayerPointerDown }) => {\n const { getLayerRenderState } = useGridLayoutContext();\n const { style, isResizable, isResizing, onResizeHandlePointerDown } = getLayerRenderState(layer);\n\n const gridPlacementStyle = React.useMemo<React.CSSProperties>(() => {\n const placement: React.CSSProperties = {};\n if (layer.gridArea) {\n placement.gridArea = layer.gridArea;\n }\n if (layer.gridRow) {\n placement.gridRow = layer.gridRow;\n }\n if (layer.gridColumn) {\n placement.gridColumn = layer.gridColumn;\n }\n return placement;\n }, [layer.gridArea, layer.gridRow, layer.gridColumn]);\n\n const combinedStyle = React.useMemo<React.CSSProperties>(() => {\n // min-width/height: 0 allows grid items to shrink below content size\n const isFloating = Boolean(layer.floating);\n const overflow = resolveOverflowStyle(layer.scrollable, isFloating);\n const baseStyle: React.CSSProperties = {\n ...style,\n ...gridPlacementStyle,\n minWidth: 0,\n minHeight: 0,\n overflow,\n };\n return isResizable ? { ...baseStyle, position: \"relative\" } : baseStyle;\n }, [style, gridPlacementStyle, isResizable, layer.scrollable, layer.floating]);\n\n const handleClose = React.useCallback(() => {\n layer.floating?.onClose?.();\n }, [layer.floating]);\n\n return (\n <div\n data-layer-id={layer.id}\n data-draggable={Boolean(layer.floating?.draggable)}\n data-resizable={isResizable}\n data-resizing={isResizing}\n style={combinedStyle}\n onPointerDown={handleLayerPointerDown}\n >\n <LayerInstanceProvider layerId={layer.id}>\n <LayerContentRenderer layer={layer} onClose={handleClose} />\n </LayerInstanceProvider>\n <LayerResizeHandles layerId={layer.id} isResizable={isResizable} onPointerDown={onResizeHandlePointerDown} />\n </div>\n );\n});\nEmbeddedLayer.displayName = \"EmbeddedLayer\";\n\nexport const GridLayerList: React.FC<GridLayerListProps> = ({ layers }) => {\n const { handleLayerPointerDown } = useGridLayoutContext();\n\n return (\n <>\n {layers.map((layer) => {\n const floatingMode = layer.floating?.mode ?? \"embedded\";\n if (layer.floating && floatingMode === \"popup\") {\n return <PopupLayerPortal key={layer.id} layer={layer} />;\n }\n return <EmbeddedLayer key={layer.id} layer={layer} handleLayerPointerDown={handleLayerPointerDown} />;\n })}\n </>\n );\n};\n","/**\n * @file Internal renderer for grid resize handles.\n */\nimport * as React from \"react\";\nimport { ResizeHandle } from \"../resizer/ResizeHandle\";\nimport { GRID_HANDLE_THICKNESS } from \"../../constants/styles\";\n\ntype TrackDirection = \"row\" | \"col\";\n\ntype GridTrackResizeHandleProps = {\n direction: TrackDirection;\n trackIndex: number;\n align: \"start\" | \"end\";\n gap: number;\n span: { start: number; end: number };\n onResize: (direction: TrackDirection, index: number, delta: number) => void;\n};\n\nconst resizeHandleWrapperBaseStyle: React.CSSProperties = {\n position: \"absolute\",\n pointerEvents: \"auto\",\n};\n\nexport const GridTrackResizeHandle: React.FC<GridTrackResizeHandleProps> = ({\n direction,\n trackIndex,\n align,\n gap,\n span,\n onResize,\n}) => {\n const resizeDirection = direction === \"col\" ? \"vertical\" : \"horizontal\";\n\n const handleResize = React.useCallback(\n (delta: number) => {\n const signedDelta = align === \"start\" ? -delta : delta;\n onResize(direction, trackIndex, signedDelta);\n },\n [align, direction, trackIndex, onResize],\n );\n\n const placementStyle = React.useMemo<React.CSSProperties>(() => {\n if (direction === \"col\") {\n return {\n gridColumn: `${trackIndex + 1} / ${trackIndex + 2}`,\n gridRow: `${span.start} / ${span.end}`,\n };\n }\n return {\n gridRow: `${trackIndex + 1} / ${trackIndex + 2}`,\n gridColumn: `${span.start} / ${span.end}`,\n };\n }, [direction, trackIndex, span]);\n\n const wrapperStyle = React.useMemo<React.CSSProperties>(() => {\n const halfGap = Math.max(0, gap) / 2;\n const offset = halfGap + GRID_HANDLE_THICKNESS / 2;\n\n if (direction === \"col\") {\n return {\n ...resizeHandleWrapperBaseStyle,\n width: GRID_HANDLE_THICKNESS,\n height: \"100%\",\n top: 0,\n bottom: 0,\n ...(align === \"start\" ? { left: -offset } : { right: -offset }),\n };\n }\n\n return {\n ...resizeHandleWrapperBaseStyle,\n width: \"100%\",\n height: GRID_HANDLE_THICKNESS,\n left: 0,\n right: 0,\n ...(align === \"start\" ? { top: -offset } : { bottom: -offset }),\n };\n }, [align, direction, gap]);\n\n return (\n <div data-resizable=\"true\" style={{ ...placementStyle, position: \"relative\", pointerEvents: \"none\" }}>\n <div data-direction={resizeDirection} data-align={align} data-handle=\"true\" style={wrapperStyle}>\n <ResizeHandle direction={resizeDirection} onResize={handleResize} />\n </div>\n </div>\n );\n};\n","/**\n * @file Hooks for deriving grid placements and layer collections.\n */\nimport * as React from \"react\";\nimport type { LayerDefinition, PanelLayoutConfig } from \"../../types\";\n\ntype GridPlacement = {\n gridArea: string;\n gridRow: string;\n gridColumn: string;\n};\n\nconst computeGridPlacements = (areas: PanelLayoutConfig[\"areas\"]): Map<string, GridPlacement> => {\n type Bounds = {\n rowStart: number;\n rowEnd: number;\n colStart: number;\n colEnd: number;\n };\n\n const boundsByArea = new Map<string, Bounds>();\n\n areas.forEach((row, rowIndex) => {\n row.forEach((area, colIndex) => {\n if (!area || area === \".\") {\n return;\n }\n\n const existing = boundsByArea.get(area);\n if (existing) {\n const nextBounds: Bounds = {\n rowStart: Math.min(existing.rowStart, rowIndex),\n rowEnd: Math.max(existing.rowEnd, rowIndex),\n colStart: Math.min(existing.colStart, colIndex),\n colEnd: Math.max(existing.colEnd, colIndex),\n };\n\n boundsByArea.set(area, nextBounds);\n return;\n }\n\n const initialBounds: Bounds = {\n rowStart: rowIndex,\n rowEnd: rowIndex,\n colStart: colIndex,\n colEnd: colIndex,\n };\n\n boundsByArea.set(area, initialBounds);\n });\n });\n\n const placements = new Map<string, GridPlacement>();\n boundsByArea.forEach((bounds, area) => {\n const rowStart = bounds.rowStart + 1;\n const rowEnd = bounds.rowEnd + 2;\n const colStart = bounds.colStart + 1;\n const colEnd = bounds.colEnd + 2;\n\n const placement: GridPlacement = {\n gridArea: area,\n gridRow: `${rowStart} / ${rowEnd}`,\n gridColumn: `${colStart} / ${colEnd}`,\n };\n\n placements.set(area, placement);\n });\n\n return placements;\n};\n\nconst normalizeLayerForGrid = (\n layer: LayerDefinition,\n placements: Map<string, GridPlacement>,\n): LayerDefinition => {\n const mode = layer.positionMode ?? \"grid\";\n if (mode !== \"grid\") {\n return layer;\n }\n\n const placementKey = layer.gridArea ?? layer.id;\n const placement = placements.get(placementKey);\n\n if (!placement) {\n return layer;\n }\n\n const needsGridArea = !layer.gridArea;\n const needsRow = !layer.gridRow;\n const needsColumn = !layer.gridColumn;\n\n if (!needsGridArea && !needsRow && !needsColumn) {\n return layer;\n }\n\n return {\n ...layer,\n gridArea: needsGridArea ? placement.gridArea : layer.gridArea,\n gridRow: needsRow ? placement.gridRow : layer.gridRow,\n gridColumn: needsColumn ? placement.gridColumn : layer.gridColumn,\n };\n};\n\nexport const useGridPlacements = (\n config: PanelLayoutConfig,\n layers: LayerDefinition[],\n): {\n normalizedLayers: LayerDefinition[];\n visibleLayers: LayerDefinition[];\n regularLayers: LayerDefinition[];\n layerById: Map<string, LayerDefinition>;\n} => {\n const placements = React.useMemo(() => computeGridPlacements(config.areas), [config.areas]);\n\n const normalizedLayers = React.useMemo(() => {\n return layers.map((layer) => normalizeLayerForGrid(layer, placements));\n }, [layers, placements]);\n\n const visibleLayers = React.useMemo(\n () => normalizedLayers.filter((layer) => layer.visible !== false),\n [normalizedLayers],\n );\n\n const regularLayers = React.useMemo(\n () => visibleLayers.filter((layer) => !layer.drawer),\n [visibleLayers],\n );\n\n const layerById = React.useMemo(() => {\n const map = new Map<string, LayerDefinition>();\n normalizedLayers.forEach((layer) => {\n map.set(layer.id, layer);\n });\n return map;\n }, [normalizedLayers]);\n\n return {\n normalizedLayers,\n visibleLayers,\n regularLayers,\n layerById,\n };\n};\n","/**\n * @file Generic CSS parsing and measurement utilities.\n */\n\nexport type ParsedGap = {\n rowGap: number;\n columnGap: number;\n};\n\n/**\n * Parses a CSS gap value string into row and column gap numbers.\n * Supports single value (applied to both) or two values (row column).\n * Only handles px units; other units return 0.\n */\nexport const parseGapValue = (gapValue?: string): ParsedGap => {\n if (!gapValue) {\n return { rowGap: 0, columnGap: 0 };\n }\n\n const tokens = gapValue\n .split(/\\s+/)\n .map((token) => token.trim())\n .filter(Boolean);\n\n const parseToken = (token: string): number => {\n const match = token.match(/^(-?\\d+(?:\\.\\d+)?)px$/);\n if (!match) {\n return 0;\n }\n return Number.parseFloat(match[1]);\n };\n\n if (tokens.length === 1) {\n const parsed = parseToken(tokens[0]);\n return { rowGap: parsed, columnGap: parsed };\n }\n\n return {\n rowGap: parseToken(tokens[0]),\n columnGap: parseToken(tokens[1]),\n };\n};\n\nexport type GridDirection = \"col\" | \"row\";\n\n/**\n * Measures actual rendered grid track sizes from computed style.\n * Returns pixel values parsed from gridTemplateColumns or gridTemplateRows.\n */\nexport const measureGridTrackSizes = (\n containerEl: HTMLElement | null,\n direction: GridDirection,\n): number[] => {\n if (!containerEl) {\n return [];\n }\n const style = getComputedStyle(containerEl);\n const template = direction === \"col\" ? style.gridTemplateColumns : style.gridTemplateRows;\n\n // Computed style returns resolved pixel values like \"370px 500px\"\n return template\n .split(/\\s+/)\n .map((s) => parseFloat(s))\n .filter((n) => !Number.isNaN(n));\n};\n","/**\n * @file Primitive math helpers shared across modules.\n */\n\nexport const clampNumber = (\n value: number,\n min: number = Number.NEGATIVE_INFINITY,\n max: number = Number.POSITIVE_INFINITY,\n): number => {\n return Math.min(Math.max(value, min), max);\n};\n\nexport const toFiniteNumberOr = (value: number | undefined, fallback: number): number => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n return value;\n};\n","/**\n * @file Grid track sizing utilities.\n */\nimport type * as React from \"react\";\nimport type { GridTrack } from \"../../types\";\nimport { clampNumber } from \"../../utils/math\";\nimport { measureGridTrackSizes, type GridDirection, type ParsedGap } from \"../../utils/css\";\n\nexport type TrackDirection = GridDirection;\n\nexport const createTrackKey = (direction: TrackDirection, index: number): string => {\n return `${direction}-${index}`;\n};\n\nexport const getTrackSize = (\n track: GridTrack,\n trackSizes: Record<string, number>,\n direction: TrackDirection,\n index: number,\n): string => {\n const key = createTrackKey(direction, index);\n const currentSize = trackSizes[key];\n if (currentSize !== undefined) {\n // Use minmax() to ensure the track can shrink if container is smaller\n // This prevents overflow when container width is less than the resized size\n const minSize = track.minSize ?? 0;\n return `minmax(${minSize}px, ${currentSize}px)`;\n }\n return track.size;\n};\n\nexport const buildTrackTemplateString = (\n tracks: GridTrack[],\n trackSizes: Record<string, number>,\n direction: TrackDirection,\n): string => {\n return tracks.map((track, index) => getTrackSize(track, trackSizes, direction, index)).join(\" \");\n};\n\nexport const extractInitialTrackSizes = (\n tracks: GridTrack[],\n direction: TrackDirection,\n): Record<string, number> => {\n return tracks.reduce<Record<string, number>>((acc, track, index) => {\n if (track.resizable && track.size.endsWith(\"px\")) {\n acc[createTrackKey(direction, index)] = parseInt(track.size, 10);\n }\n return acc;\n }, {});\n};\n\nexport type ResolveTrackSizeParams = {\n trackSizes: Record<string, number>;\n track: GridTrack;\n direction: TrackDirection;\n trackIndex: number;\n containerRef: React.RefObject<HTMLElement | null> | undefined;\n};\n\nexport const resolveCurrentTrackSize = ({\n trackSizes,\n track,\n direction,\n trackIndex,\n containerRef,\n}: ResolveTrackSizeParams): number => {\n const key = createTrackKey(direction, trackIndex);\n const storedSize = trackSizes[key];\n\n if (storedSize !== undefined) {\n return storedSize;\n }\n\n // Try to measure actual rendered size from DOM\n const measuredSizes = measureGridTrackSizes(containerRef?.current ?? null, direction);\n const measuredSize = measuredSizes[trackIndex];\n if (measuredSize !== undefined && measuredSize > 0) {\n return measuredSize;\n }\n\n // Fallback: parse simple px value from track definition\n if (track.size.endsWith(\"px\")) {\n return Number.parseInt(track.size, 10);\n }\n\n return 300;\n};\n\nconst calculateOtherTracksMinSpace = (tracks: GridTrack[], excludeIndex: number): number => {\n return tracks.reduce((sum, t, idx) => {\n if (idx === excludeIndex) {\n return sum;\n }\n // For fr tracks, assume minimum of 100px; for fixed tracks, use their minSize or parsed size\n if (t.size.includes(\"fr\")) {\n return sum + 100;\n }\n return sum + (t.minSize ?? 50);\n }, 0);\n};\n\nexport type EffectiveMaxSizeParams = {\n track: GridTrack;\n tracks: GridTrack[];\n trackIndex: number;\n direction: TrackDirection;\n containerRef: React.RefObject<HTMLElement | null> | undefined;\n gapSizes: ParsedGap;\n};\n\nexport const calculateEffectiveMaxSize = ({\n track,\n tracks,\n trackIndex,\n direction,\n containerRef,\n gapSizes,\n}: EffectiveMaxSizeParams): number | undefined => {\n if (!containerRef?.current) {\n return track.maxSize;\n }\n\n const containerSize =\n direction === \"col\" ? containerRef.current.offsetWidth : containerRef.current.offsetHeight;\n\n const otherTracksMinSpace = calculateOtherTracksMinSpace(tracks, trackIndex);\n\n const gapCount = tracks.length - 1;\n const gapSize = direction === \"col\" ? gapSizes.columnGap : gapSizes.rowGap;\n const totalGapSpace = gapCount * gapSize;\n\n const dynamicMax = containerSize - otherTracksMinSpace - totalGapSpace;\n\n if (track.maxSize !== undefined) {\n return Math.min(track.maxSize, dynamicMax);\n }\n return dynamicMax;\n};\n\nexport const applyTrackConstraints = (\n size: number,\n minSize?: number,\n maxSize?: number,\n): number => {\n return clampNumber(size, minSize ?? Number.NEGATIVE_INFINITY, maxSize ?? Number.POSITIVE_INFINITY);\n};\n","/**\n * @file Resize handle configuration computation for grid tracks.\n */\nimport type { GridTrack } from \"../../types\";\n\nexport type TrackHandleConfig = {\n trackIndex: number;\n align: \"start\" | \"end\";\n span: { start: number; end: number };\n};\n\n/**\n * Computes the valid row span for a column boundary.\n * Returns the contiguous range of rows where the adjacent areas differ.\n */\nconst computeColumnBoundarySpan = (\n areas: string[][],\n boundaryIndex: number,\n): { start: number; end: number } => {\n const rowCount = areas.length;\n\n // Find rows where left and right areas differ at this boundary\n const validRows: number[] = [];\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row = areas[rowIndex];\n const leftArea = row[boundaryIndex];\n const rightArea = row[boundaryIndex + 1];\n if (leftArea !== rightArea) {\n validRows.push(rowIndex);\n }\n }\n\n if (validRows.length === 0) {\n // Fallback: full span if no valid rows found (shouldn't happen for resizable columns)\n return { start: 1, end: rowCount + 1 };\n }\n\n // Convert to 1-indexed grid lines\n const minRow = Math.min(...validRows);\n const maxRow = Math.max(...validRows);\n return { start: minRow + 1, end: maxRow + 2 };\n};\n\n/**\n * Computes the valid column span for a row boundary.\n * Returns the contiguous range of columns where the adjacent areas differ.\n */\nconst computeRowBoundarySpan = (\n areas: string[][],\n boundaryIndex: number,\n): { start: number; end: number } => {\n const topRow = areas[boundaryIndex];\n const bottomRow = areas[boundaryIndex + 1];\n const colCount = topRow?.length ?? 0;\n\n // Find columns where top and bottom areas differ at this boundary\n const validCols: number[] = [];\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n const topArea = topRow?.[colIndex];\n const bottomArea = bottomRow?.[colIndex];\n if (topArea !== bottomArea) {\n validCols.push(colIndex);\n }\n }\n\n if (validCols.length === 0) {\n // Fallback: full span if no valid columns found\n return { start: 1, end: colCount + 1 };\n }\n\n // Convert to 1-indexed grid lines\n const minCol = Math.min(...validCols);\n const maxCol = Math.max(...validCols);\n return { start: minCol + 1, end: maxCol + 2 };\n};\n\nexport const computeColumnResizeHandles = (\n tracks: GridTrack[],\n areas: string[][],\n): TrackHandleConfig[] => {\n if (tracks.length === 0) {\n return [];\n }\n\n const rowCount = areas.length;\n\n if (tracks.length === 1) {\n const onlyTrack = tracks[0];\n if (onlyTrack?.resizable) {\n const fullSpan = { start: 1, end: rowCount + 1 };\n return [{ trackIndex: 0, align: \"end\", span: fullSpan }];\n }\n return [];\n }\n\n const handles: TrackHandleConfig[] = [];\n\n const boundaryIndexes = Array.from({ length: tracks.length - 1 }, (_, index) => index);\n boundaryIndexes.forEach((boundaryIndex) => {\n const leftTrack = tracks[boundaryIndex];\n const rightTrack = tracks[boundaryIndex + 1];\n\n if (rightTrack?.resizable) {\n const span = computeColumnBoundarySpan(areas, boundaryIndex);\n handles.push({ trackIndex: boundaryIndex + 1, align: \"start\", span });\n return;\n }\n\n if (leftTrack?.resizable) {\n const span = computeColumnBoundarySpan(areas, boundaryIndex);\n handles.push({ trackIndex: boundaryIndex, align: \"end\", span });\n }\n });\n\n return handles;\n};\n\nexport const computeRowResizeHandles = (\n tracks: GridTrack[],\n areas: string[][],\n): TrackHandleConfig[] => {\n if (tracks.length === 0) {\n return [];\n }\n\n const colCount = areas[0]?.length ?? 0;\n\n if (tracks.length === 1) {\n const onlyTrack = tracks[0];\n if (onlyTrack?.resizable) {\n const fullSpan = { start: 1, end: colCount + 1 };\n return [{ trackIndex: 0, align: \"end\", span: fullSpan }];\n }\n return [];\n }\n\n const handles: TrackHandleConfig[] = [];\n\n const boundaryIndexes = Array.from({ length: tracks.length - 1 }, (_, index) => index);\n boundaryIndexes.forEach((boundaryIndex) => {\n const topTrack = tracks[boundaryIndex];\n const bottomTrack = tracks[boundaryIndex + 1];\n\n if (bottomTrack?.resizable) {\n const span = computeRowBoundarySpan(areas, boundaryIndex);\n handles.push({ trackIndex: boundaryIndex + 1, align: \"start\", span });\n return;\n }\n\n if (topTrack?.resizable) {\n const span = computeRowBoundarySpan(areas, boundaryIndex);\n handles.push({ trackIndex: boundaryIndex, align: \"end\", span });\n }\n });\n\n return handles;\n};\n","/**\n * @file Track sizing and resize handle hooks for the grid layout.\n */\nimport * as React from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../../hooks/useIsomorphicLayoutEffect\";\nimport type { PanelLayoutConfig } from \"../../types\";\nimport { parseGapValue, type ParsedGap } from \"../../utils/css\";\nimport {\n type TrackDirection,\n createTrackKey,\n buildTrackTemplateString,\n extractInitialTrackSizes,\n resolveCurrentTrackSize,\n calculateEffectiveMaxSize,\n applyTrackConstraints,\n} from \"./trackUtils\";\nimport {\n type TrackHandleConfig,\n computeColumnResizeHandles,\n computeRowResizeHandles,\n} from \"./resizeHandles\";\n\n// Re-export types for external consumers\nexport type { TrackHandleConfig } from \"./resizeHandles\";\nexport type { TrackDirection } from \"./trackUtils\";\n\nconst getGapStyle = (gap?: string): React.CSSProperties => {\n return gap !== undefined ? { gap } : {};\n};\n\n/**\n * Merges new track sizes with existing ones, preserving user-resized values.\n * Only applies initial values for newly added tracks.\n */\nconst mergeTrackSizes = (\n prev: Record<string, number>,\n initialSizes: Record<string, number>,\n): Record<string, number> | null => {\n const nextKeys = Object.keys(initialSizes);\n\n // Preserve existing values; use initial values only for new tracks\n const merged: Record<string, number> = {};\n for (const key of nextKeys) {\n merged[key] = prev[key] ?? initialSizes[key];\n }\n\n // Check if there are any changes\n const prevKeys = Object.keys(prev);\n const keysChangedByLength = prevKeys.length !== nextKeys.length;\n const keysChangedByMissing = prevKeys.some(\n (key) => !Object.prototype.hasOwnProperty.call(merged, key),\n );\n const keysChanged = keysChangedByLength ? true : keysChangedByMissing;\n const valuesChanged = nextKeys.some((key) => prev[key] !== merged[key]);\n\n const hasChanges = keysChanged ? true : valuesChanged;\n return hasChanges ? merged : null;\n};\n\nexport const useGridTracks = (\n config: PanelLayoutConfig,\n styleProp?: React.CSSProperties,\n containerRef?: React.RefObject<HTMLElement | null>,\n): {\n columnHandles: TrackHandleConfig[];\n rowHandles: TrackHandleConfig[];\n gapSizes: ParsedGap;\n gridStyle: React.CSSProperties;\n handleResize: (direction: TrackDirection, trackIndex: number, delta: number) => void;\n} => {\n const [trackSizes, setTrackSizes] = React.useState<Record<string, number>>(() => ({\n ...extractInitialTrackSizes(config.columns, \"col\"),\n ...extractInitialTrackSizes(config.rows, \"row\"),\n }));\n\n useIsomorphicLayoutEffect(() => {\n const initialSizes = {\n ...extractInitialTrackSizes(config.columns, \"col\"),\n ...extractInitialTrackSizes(config.rows, \"row\"),\n };\n\n setTrackSizes((prev) => {\n const merged = mergeTrackSizes(prev, initialSizes);\n return merged ?? prev;\n });\n }, [config.columns, config.rows]);\n\n const areasString = React.useMemo(() => {\n return config.areas.map((row) => `\"${row.join(\" \")}\"`).join(\" \");\n }, [config.areas]);\n\n const gapSizes = React.useMemo(() => parseGapValue(config.gap), [config.gap]);\n\n const columnHandles = React.useMemo(\n () => computeColumnResizeHandles(config.columns, config.areas),\n [config.columns, config.areas],\n );\n\n const rowHandles = React.useMemo(\n () => computeRowResizeHandles(config.rows, config.areas),\n [config.rows, config.areas],\n );\n\n const gridStyle = React.useMemo((): React.CSSProperties => {\n return {\n ...config.style,\n ...styleProp,\n gridTemplateAreas: areasString,\n gridTemplateRows: buildTrackTemplateString(config.rows, trackSizes, \"row\"),\n gridTemplateColumns: buildTrackTemplateString(config.columns, trackSizes, \"col\"),\n ...getGapStyle(config.gap),\n };\n }, [areasString, config.columns, config.gap, config.rows, config.style, styleProp, trackSizes]);\n\n const handleResize = React.useCallback(\n (direction: TrackDirection, trackIndex: number, delta: number) => {\n const tracks = direction === \"row\" ? config.rows : config.columns;\n const track = tracks[trackIndex];\n if (!track || !track.resizable) {\n return;\n }\n\n const currentSize = resolveCurrentTrackSize({\n trackSizes,\n track,\n direction,\n trackIndex,\n containerRef,\n });\n const effectiveMaxSize = calculateEffectiveMaxSize({\n track,\n tracks,\n trackIndex,\n direction,\n containerRef,\n gapSizes,\n });\n\n const key = createTrackKey(direction, trackIndex);\n setTrackSizes((prev) => {\n const newSize = currentSize + delta;\n const constrained = applyTrackConstraints(newSize, track.minSize, effectiveMaxSize);\n return { ...prev, [key]: constrained };\n });\n },\n [config.columns, config.rows, trackSizes, containerRef, gapSizes],\n );\n\n return {\n columnHandles,\n rowHandles,\n gapSizes,\n gridStyle,\n handleResize,\n };\n};\n","/**\n * @file Drag and resize interaction management for floating grid layers.\n */\nimport * as React from \"react\";\nimport { useDocumentPointerEvents } from \"../../hooks/useDocumentPointerEvents\";\nimport { useEffectEvent } from \"../../hooks/useEffectEvent\";\nimport { useIsomorphicLayoutEffect } from \"../../hooks/useIsomorphicLayoutEffect\";\nimport type { LayerDefinition, WindowPosition, WindowSize } from \"../../types\";\nimport { clampNumber } from \"../../utils/math\";\n// Inline style computation previously in layerStyles to keep hook-local logic\nimport type { CSSProperties } from \"react\";\nimport type { GridLayerHandleProps, GridLayoutContextValue, ResizeHandleConfig } from \"./GridLayoutContext\";\n// UI components should not be imported here; expose pointer handlers instead.\n\ntype LayerSize = {\n width: number;\n height: number;\n};\n\ntype DragState = {\n pointerStartX: number;\n pointerStartY: number;\n initialTranslationX: number;\n initialTranslationY: number;\n baseLeft: number;\n baseTop: number;\n layerId: string;\n pointerId: number;\n target: HTMLElement;\n};\n\ntype HorizontalEdge = \"left\" | \"right\";\ntype VerticalEdge = \"top\" | \"bottom\";\n\ntype ResizeState = {\n layerId: string;\n pointerId: number;\n horizontalEdge?: HorizontalEdge;\n verticalEdge?: VerticalEdge;\n startX: number;\n startY: number;\n startWidth: number;\n startHeight: number;\n startPosition: { x: number; y: number };\n baseLeft: number;\n baseTop: number;\n minWidth?: number;\n maxWidth?: number;\n minHeight?: number;\n maxHeight?: number;\n target: HTMLElement;\n};\n\n// ------------------------------------------------------------------------------------------\n// Inline layer style computation (was layerStyles.ts)\n// ------------------------------------------------------------------------------------------\nconst resolvePositionMode = (layer: LayerDefinition): LayerDefinition[\"positionMode\"] => {\n if (layer.positionMode) {\n return layer.positionMode;\n }\n if (layer.floating) {\n const floatingMode = layer.floating.mode ?? \"embedded\";\n return floatingMode === \"embedded\" ? \"absolute\" : \"relative\";\n }\n return \"grid\";\n};\n\nconst getPositionModeStyle = (mode: LayerDefinition[\"positionMode\"]): CSSProperties => {\n return { position: mode === \"grid\" ? \"relative\" : mode };\n};\n\nconst getGridAreaStyle = (layer: LayerDefinition, mode: LayerDefinition[\"positionMode\"]): CSSProperties => {\n if (mode !== \"grid\") {\n return {};\n }\n return {\n gridArea: layer.gridArea,\n gridRow: layer.gridRow,\n gridColumn: layer.gridColumn,\n };\n};\n\nconst getAbsolutePositionStyle = (position?: WindowPosition | LayerDefinition[\"position\"]): CSSProperties => {\n if (!position) {\n return {};\n }\n\n return {\n top: position.top,\n right: position.right,\n bottom: position.bottom,\n left: position.left,\n };\n};\n\nconst getZIndexStyle = (zIndex?: number): CSSProperties => {\n return zIndex !== undefined ? { zIndex } : {};\n};\n\nconst getDimensionsStyle = (width?: number | string, height?: number | string): CSSProperties => {\n return {\n width,\n height,\n };\n};\n\nconst getPointerEventsStyle = (layer: LayerDefinition, mode: LayerDefinition[\"positionMode\"]): CSSProperties => {\n if (layer.pointerEvents !== undefined) {\n if (typeof layer.pointerEvents === \"boolean\") {\n return { pointerEvents: layer.pointerEvents ? \"auto\" : \"none\" };\n }\n return { pointerEvents: layer.pointerEvents };\n }\n\n if (mode === \"absolute\" || mode === \"fixed\") {\n return { pointerEvents: \"auto\" };\n }\n\n return {};\n};\n\nconst resolveEffectivePosition = (\n layer: LayerDefinition,\n): WindowPosition | LayerDefinition[\"position\"] | undefined => {\n // For floating layers, prioritize floating.position/defaultPosition\n if (layer.floating) {\n return layer.floating.position ?? layer.floating.defaultPosition ?? layer.position;\n }\n return layer.position;\n};\n\nconst resolveEffectiveSize = (\n layer: LayerDefinition,\n): {\n width?: number | string;\n height?: number | string;\n} => {\n // For floating layers, prioritize floating.size/defaultSize\n if (layer.floating) {\n const floatingSize = layer.floating.size ?? layer.floating.defaultSize;\n if (floatingSize) {\n return {\n width: floatingSize.width,\n height: floatingSize.height,\n };\n }\n }\n return {\n width: layer.width,\n height: layer.height,\n };\n};\n\nconst resolveEffectiveZIndex = (layer: LayerDefinition): number | undefined => {\n // For floating layers, prioritize floating.zIndex\n if (layer.floating?.zIndex !== undefined) {\n return layer.floating.zIndex;\n }\n return layer.zIndex;\n};\n\nconst buildLayerStyleObject = (layer: LayerDefinition): CSSProperties => {\n const resolvedMode = resolvePositionMode(layer);\n const effectivePosition = resolveEffectivePosition(layer);\n const effectiveSize = resolveEffectiveSize(layer);\n const effectiveZIndex = resolveEffectiveZIndex(layer);\n\n return {\n ...layer.style,\n ...getPositionModeStyle(resolvedMode),\n ...getGridAreaStyle(layer, resolvedMode),\n ...getAbsolutePositionStyle(effectivePosition),\n ...getZIndexStyle(effectiveZIndex),\n ...getDimensionsStyle(effectiveSize.width, effectiveSize.height),\n ...getPointerEventsStyle(layer, resolvedMode),\n };\n};\n\nconst resolveFloatingMode = (layer: LayerDefinition): \"embedded\" | \"popup\" | null => {\n const floating = layer.floating;\n if (!floating) {\n return null;\n }\n const mode = floating.mode ?? \"embedded\";\n return mode;\n};\n\nconst getEmbeddedFloatingConfig = (layer: LayerDefinition) => {\n const mode = resolveFloatingMode(layer);\n if (mode !== \"embedded\") {\n return null;\n }\n return layer.floating ?? null;\n};\n\nconst isInteractiveElement = (target: EventTarget | null): target is HTMLElement => {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\", \"BUTTON\"].includes(target.tagName);\n};\n\n\nconst clampDimension = (value: number, min?: number, max?: number): number => {\n const resolvedMin = min ?? Number.NEGATIVE_INFINITY;\n const resolvedMax = max ?? Number.POSITIVE_INFINITY;\n return clampNumber(value, resolvedMin, resolvedMax);\n};\n\nconst ensureNumericOffset = (value: number | string | undefined, key: keyof WindowPosition, layerId: string): number => {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n throw new Error(\n `Floating layer \"${layerId}\" must provide a numeric \"${key}\" value when draggable mode is enabled.`,\n );\n};\n\nconst resolveDragAnchor = (layer: LayerDefinition): { left: number; top: number } => {\n const floating = getEmbeddedFloatingConfig(layer);\n if (!floating) {\n throw new Error(`Floating layer \"${layer.id}\" is missing floating configuration required for dragging.`);\n }\n // Prioritize floating.position/defaultPosition over layer.position\n const position = floating.position ?? floating.defaultPosition ?? layer.position;\n if (!position) {\n throw new Error(`Floating layer \"${layer.id}\" must define position with left and top values.`);\n }\n return {\n left: ensureNumericOffset(position.left, \"left\", layer.id),\n top: ensureNumericOffset(position.top, \"top\", layer.id),\n };\n};\n\nconst resolveFloatingConstraints = (\n layer: LayerDefinition,\n): { minWidth?: number; maxWidth?: number; minHeight?: number; maxHeight?: number } => {\n const floating = getEmbeddedFloatingConfig(layer);\n if (!floating) {\n return {};\n }\n return floating.constraints ?? {};\n};\n\nconst resolveHorizontalSizeCandidate = (\n edge: HorizontalEdge | undefined,\n startSize: number,\n delta: number,\n): number => {\n if (!edge) {\n return startSize;\n }\n return edge === \"left\" ? startSize - delta : startSize + delta;\n};\n\nconst resolveVerticalSizeCandidate = (edge: VerticalEdge | undefined, startSize: number, delta: number): number => {\n if (!edge) {\n return startSize;\n }\n return edge === \"top\" ? startSize - delta : startSize + delta;\n};\n\nconst resolveHorizontalPosition = (\n edge: HorizontalEdge | undefined,\n startPosition: number,\n delta: number,\n): number => {\n if (!edge || edge === \"right\") {\n return startPosition;\n }\n return startPosition + delta;\n};\n\nconst resolveVerticalPosition = (\n edge: VerticalEdge | undefined,\n startPosition: number,\n delta: number,\n): number => {\n if (!edge || edge === \"bottom\") {\n return startPosition;\n }\n return startPosition + delta;\n};\n\nconst findLayerElementById = (element: HTMLElement | null, layerId: string): HTMLElement | null => {\n if (!element) {\n return null;\n }\n if (element.dataset.layerId === layerId) {\n return element;\n }\n return findLayerElementById(element.parentElement, layerId);\n};\n\nconst findAncestor = (\n element: HTMLElement | null,\n predicate: (node: HTMLElement) => boolean,\n stopPredicate?: (node: HTMLElement) => boolean,\n): HTMLElement | null => {\n if (!element) {\n return null;\n }\n if (stopPredicate?.(element)) {\n return null;\n }\n if (predicate(element)) {\n return element;\n }\n return findAncestor(element.parentElement, predicate, stopPredicate);\n};\n\nconst findDragHandleElement = (target: EventTarget | null): HTMLElement | null => {\n if (!(target instanceof HTMLElement)) {\n return null;\n }\n\n return findAncestor(\n target,\n (node) => node.dataset.dragHandle === \"true\",\n (node) => node.dataset.dragIgnore === \"true\",\n );\n};\n\nconst isResizeControl = (target: EventTarget | null): boolean => {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n return (\n findAncestor(\n target,\n (node) => node.dataset.resizeCorner !== undefined || node.dataset.resizeEdge !== undefined,\n ) !== null\n );\n};\n\nconst shouldRenderFloatingResize = (layer: LayerDefinition): boolean => {\n const floating = getEmbeddedFloatingConfig(layer);\n if (!floating) {\n return false;\n }\n return floating.resizable === true;\n};\n\nconst getLayerSizeFromDefinition = (layer: LayerDefinition): LayerSize | null => {\n const floating = getEmbeddedFloatingConfig(layer);\n if (!floating) {\n return null;\n }\n const size = getNumericLayerSize(layer);\n if (!size) {\n throw new Error(`Floating layer \"${layer.id}\" must define width and height when resizable or draggable.`);\n }\n return {\n width: size.width,\n height: size.height,\n };\n};\n\n// No-op placeholder: rendering is handled in component layer\n\nconst computeResizableLayerSizes = (\n layers: LayerDefinition[],\n previousSizes: Record<string, LayerSize>,\n activeResizeLayerId: string | null,\n): { sizes: Record<string, LayerSize>; changed: boolean } => {\n const nextSizes = layers\n .filter(shouldRenderFloatingResize)\n .reduce<Record<string, LayerSize>>((accumulator, layer) => {\n if (activeResizeLayerId === layer.id) {\n const existing = previousSizes[layer.id];\n if (existing) {\n accumulator[layer.id] = existing;\n return accumulator;\n }\n }\n\n const parsedSize = getLayerSizeFromDefinition(layer);\n if (!parsedSize) {\n return accumulator;\n }\n\n accumulator[layer.id] = parsedSize;\n return accumulator;\n }, {});\n\n const previousKeys = Object.keys(previousSizes);\n const nextKeys = Object.keys(nextSizes);\n\n const keysChangedByLength = previousKeys.length !== nextKeys.length;\n const keysChangedByMissing = previousKeys.some((key) => {\n return !Object.prototype.hasOwnProperty.call(nextSizes, key);\n });\n const keysChanged = keysChangedByLength ? true : keysChangedByMissing;\n\n const sizeChanged = nextKeys.some((key) => {\n const previous = previousSizes[key];\n const next = nextSizes[key];\n if (!previous || !next) {\n return true;\n }\n return previous.width !== next.width || previous.height !== next.height;\n });\n\n const changed = keysChanged ? true : sizeChanged;\n\n return {\n sizes: nextSizes,\n changed,\n };\n};\n\ntype UseLayerInteractionsArgs = {\n layers: LayerDefinition[];\n layerById: Map<string, LayerDefinition>;\n isRootLevel: boolean;\n};\n\nexport const useLayerInteractions = ({\n layers,\n layerById,\n isRootLevel,\n}: UseLayerInteractionsArgs): {\n providerValue: GridLayoutContextValue;\n draggingLayerId: string | null;\n resizingLayerId: string | null;\n} => {\n const [draggingLayerId, setDraggingLayerId] = React.useState<string | null>(null);\n const [resizingLayerId, setResizingLayerId] = React.useState<string | null>(null);\n\n const [layerPositions, setLayerPositions] = React.useState<Record<string, { x: number; y: number }>>({});\n const [layerSizes, setLayerSizes] = React.useState<Record<string, LayerSize>>({});\n\n const dragStartRef = React.useRef<DragState | null>(null);\n const resizeStartRef = React.useRef<ResizeState | null>(null);\n\n const notifyFloatingMove = useEffectEvent((layerId: string, position: WindowPosition) => {\n const layer = layerById.get(layerId);\n const floating = layer?.floating;\n floating?.onMove?.(position);\n });\n\n const notifyFloatingResize = useEffectEvent((layerId: string, size: WindowSize) => {\n const layer = layerById.get(layerId);\n const floating = layer?.floating;\n floating?.onResize?.(size);\n });\n\n useIsomorphicLayoutEffect(() => {\n const { sizes, changed } = computeResizableLayerSizes(layers, layerSizes, resizingLayerId);\n if (!changed) {\n return;\n }\n setLayerSizes(sizes);\n }, [layers, resizingLayerId]);\n\n const beginLayerDrag = React.useCallback(\n (layerId: string, layer: LayerDefinition, target: HTMLElement, event: React.PointerEvent) => {\n const anchor = resolveDragAnchor(layer);\n const translation = layerPositions[layerId] ?? { x: 0, y: 0 };\n const dragState: DragState = {\n pointerStartX: event.clientX,\n pointerStartY: event.clientY,\n initialTranslationX: translation.x,\n initialTranslationY: translation.y,\n baseLeft: anchor.left,\n baseTop: anchor.top,\n layerId,\n pointerId: event.pointerId,\n target: target as HTMLElement,\n };\n\n if (dragState.target.setPointerCapture) {\n try {\n dragState.target.setPointerCapture(dragState.pointerId);\n } catch {\n // Ignore pointer capture errors\n }\n }\n\n dragStartRef.current = dragState;\n setDraggingLayerId(layerId);\n },\n [layerPositions],\n );\n\n const handleLayerPointerDown = React.useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n const target = event.target;\n const dragHandle = findDragHandleElement(target);\n if (!dragHandle) {\n return;\n }\n\n const layerId = dragHandle.closest('[data-layer-id]')?.getAttribute(\"data-layer-id\");\n if (!layerId) {\n return;\n }\n const layer = layerById.get(layerId);\n if (!layer) {\n return;\n }\n const floating = getEmbeddedFloatingConfig(layer);\n if (!floating || floating.draggable !== true) {\n return;\n }\n\n if (isInteractiveElement(event.target)) {\n return;\n }\n\n if (isResizeControl(event.target)) {\n return;\n }\n\n if (dragHandle) {\n const layerElement = findLayerElementById(dragHandle as HTMLElement, layerId);\n if (!layerElement) {\n return;\n }\n beginLayerDrag(layerId, layer, layerElement, event);\n return;\n }\n },\n [beginLayerDrag, layerById],\n );\n\n const handleDragHandlePointerDown = React.useCallback(\n (layerId: string, event: React.PointerEvent<HTMLElement>) => {\n const layer = layerById.get(layerId);\n const floating = layer ? getEmbeddedFloatingConfig(layer) : null;\n if (!layer || !floating || floating.draggable !== true) {\n return;\n }\n\n if (isInteractiveElement(event.target)) {\n return;\n }\n\n if (isResizeControl(event.target)) {\n return;\n }\n\n const layerElement = findLayerElementById(event.currentTarget as HTMLElement, layerId);\n if (!layerElement) {\n return;\n }\n\n beginLayerDrag(layerId, layer, layerElement, event);\n },\n [beginLayerDrag, layerById],\n );\n\n const handleResizePointerDown = React.useCallback(\n (layerId: string, config: ResizeHandleConfig, event: React.PointerEvent<HTMLDivElement>) => {\n const layer = layerById.get(layerId);\n if (!layer || !shouldRenderFloatingResize(layer)) {\n return;\n }\n\n const sizeEntry = layerSizes[layerId] ?? getLayerSizeFromDefinition(layer);\n if (!sizeEntry) {\n return;\n }\n\n const baseAnchor = resolveDragAnchor(layer);\n const constraints = resolveFloatingConstraints(layer);\n\n const initialPosition = layerPositions[layerId] ?? { x: 0, y: 0 };\n\n event.stopPropagation();\n event.preventDefault();\n\n if (event.currentTarget.setPointerCapture) {\n try {\n event.currentTarget.setPointerCapture(event.pointerId);\n } catch {\n // Pointer capture may be unsupported; ignore gracefully.\n }\n }\n\n resizeStartRef.current = {\n layerId,\n pointerId: event.pointerId,\n horizontalEdge: config.horizontal,\n verticalEdge: config.vertical,\n startX: event.clientX,\n startY: event.clientY,\n startWidth: sizeEntry.width,\n startHeight: sizeEntry.height,\n startPosition: initialPosition,\n baseLeft: baseAnchor.left,\n baseTop: baseAnchor.top,\n minWidth: constraints.minWidth,\n maxWidth: constraints.maxWidth,\n minHeight: constraints.minHeight,\n maxHeight: constraints.maxHeight,\n target: event.currentTarget,\n };\n\n setResizingLayerId(layerId);\n },\n [layerById, layerPositions, layerSizes],\n );\n\n const handleDragPointerMove = React.useCallback(\n (event: PointerEvent) => {\n const dragStart = dragStartRef.current;\n if (!dragStart) {\n return;\n }\n\n const deltaX = event.clientX - dragStart.pointerStartX;\n const deltaY = event.clientY - dragStart.pointerStartY;\n const newPos = {\n x: dragStart.initialTranslationX + deltaX,\n y: dragStart.initialTranslationY + deltaY,\n };\n\n setLayerPositions((prev) => ({ ...prev, [dragStart.layerId]: newPos }));\n notifyFloatingMove(dragStart.layerId, {\n left: dragStart.baseLeft + newPos.x,\n top: dragStart.baseTop + newPos.y,\n });\n },\n [notifyFloatingMove],\n );\n\n const handleResizePointerMove = React.useCallback(\n (event: PointerEvent) => {\n const resizeStart = resizeStartRef.current;\n if (!resizeStart || resizeStart.pointerId !== event.pointerId) {\n return;\n }\n\n const layer = layerById.get(resizeStart.layerId);\n if (!layer) {\n return;\n }\n\n const deltaX = event.clientX - resizeStart.startX;\n const deltaY = event.clientY - resizeStart.startY;\n\n const widthCandidate = resolveHorizontalSizeCandidate(resizeStart.horizontalEdge, resizeStart.startWidth, deltaX);\n const heightCandidate = resolveVerticalSizeCandidate(resizeStart.verticalEdge, resizeStart.startHeight, deltaY);\n\n const nextWidth = clampDimension(widthCandidate, resizeStart.minWidth, resizeStart.maxWidth);\n const nextHeight = clampDimension(heightCandidate, resizeStart.minHeight, resizeStart.maxHeight);\n\n const widthDelta = resizeStart.startWidth - nextWidth;\n const heightDelta = resizeStart.startHeight - nextHeight;\n\n const nextPositionX = resolveHorizontalPosition(\n resizeStart.horizontalEdge,\n resizeStart.startPosition.x,\n widthDelta,\n );\n const nextPositionY = resolveVerticalPosition(resizeStart.verticalEdge, resizeStart.startPosition.y, heightDelta);\n\n const currentSize = layerSizes[resizeStart.layerId];\n const nextSize: WindowSize = { width: nextWidth, height: nextHeight };\n const sizeChanged =\n !currentSize || currentSize.width !== nextWidth || currentSize.height !== nextHeight;\n if (sizeChanged) {\n setLayerSizes((prev) => ({\n ...prev,\n [resizeStart.layerId]: nextSize,\n }));\n notifyFloatingResize(resizeStart.layerId, nextSize);\n }\n\n const currentPosition = layerPositions[resizeStart.layerId] ?? { x: 0, y: 0 };\n const nextPosition = { x: nextPositionX, y: nextPositionY };\n const positionChanged =\n currentPosition.x !== nextPosition.x || currentPosition.y !== nextPosition.y;\n if (positionChanged) {\n setLayerPositions((prev) => ({\n ...prev,\n [resizeStart.layerId]: nextPosition,\n }));\n notifyFloatingMove(resizeStart.layerId, {\n left: resizeStart.baseLeft + nextPosition.x,\n top: resizeStart.baseTop + nextPosition.y,\n });\n }\n },\n [layerById, layerPositions, layerSizes, notifyFloatingMove, notifyFloatingResize],\n );\n\n const finishDrag = React.useCallback((event: PointerEvent) => {\n const dragStart = dragStartRef.current;\n if (dragStart) {\n if (dragStart.pointerId === event.pointerId && dragStart.target.releasePointerCapture) {\n try {\n dragStart.target.releasePointerCapture(dragStart.pointerId);\n } catch {\n // Ignore release errors (e.g., already released).\n }\n }\n dragStartRef.current = null;\n }\n setDraggingLayerId(null);\n }, []);\n\n const finishResize = React.useCallback((event: PointerEvent) => {\n const resizeStart = resizeStartRef.current;\n if (resizeStart) {\n if (resizeStart.pointerId === event.pointerId && resizeStart.target.releasePointerCapture) {\n try {\n resizeStart.target.releasePointerCapture(resizeStart.pointerId);\n } catch {\n // Ignore pointer capture release errors.\n }\n }\n resizeStartRef.current = null;\n }\n setResizingLayerId(null);\n }, []);\n\n useDocumentPointerEvents(draggingLayerId !== null, {\n onMove: handleDragPointerMove,\n onUp: finishDrag,\n onCancel: finishDrag,\n });\n\n useDocumentPointerEvents(resizingLayerId !== null, {\n onMove: handleResizePointerMove,\n onUp: finishResize,\n onCancel: finishResize,\n });\n\n const buildDraggableLayerStyle = React.useCallback(\n (layer: LayerDefinition): React.CSSProperties => {\n const baseStyle = buildLayerStyleObject(layer);\n\n const floating = getEmbeddedFloatingConfig(layer);\n if (!floating || floating.draggable !== true) {\n return baseStyle;\n }\n\n const position = layerPositions[layer.id];\n const isDragging = draggingLayerId === layer.id;\n const isResizing = resizingLayerId === layer.id;\n const transformStyle = position ? { transform: `translate(${position.x}px, ${position.y}px)` } : {};\n const storedSize = layerSizes[layer.id];\n const fallbackSize = shouldRenderFloatingResize(layer) ? getLayerSizeFromDefinition(layer) : null;\n const sizeRecord = storedSize ?? fallbackSize;\n const sizeStyle = sizeRecord ? { width: `${sizeRecord.width}px`, height: `${sizeRecord.height}px` } : {};\n const cursorStyle = isDragging || isResizing ? { cursor: \"grabbing\" } : {};\n\n return {\n ...baseStyle,\n ...sizeStyle,\n ...transformStyle,\n ...cursorStyle,\n };\n },\n [draggingLayerId, layerPositions, layerSizes, resizingLayerId],\n );\n\n const getResizeHandleState = React.useCallback(\n (layer: LayerDefinition): { isResizable: boolean; onPointerDown?: (config: ResizeHandleConfig, event: React.PointerEvent<HTMLDivElement>) => void } => {\n const canResize = shouldRenderFloatingResize(layer);\n if (!canResize) {\n return { isResizable: false };\n }\n\n const storedLayerSize = layerSizes[layer.id];\n const fallbackLayerSize = getLayerSizeFromDefinition(layer);\n const sizeForHandle = storedLayerSize ?? fallbackLayerSize;\n const show = sizeForHandle !== null;\n if (!show) {\n return { isResizable: false };\n }\n\n const onPointerDown = (config: ResizeHandleConfig, event: React.PointerEvent<HTMLDivElement>) => {\n handleResizePointerDown(layer.id, config, event);\n };\n\n return { isResizable: true, onPointerDown };\n },\n [handleResizePointerDown, layerSizes],\n );\n\n const getLayerRenderState = React.useCallback(\n (layer: LayerDefinition) => {\n const { isResizable, onPointerDown } = getResizeHandleState(layer);\n const style = buildDraggableLayerStyle(layer);\n const isResizing = resizingLayerId === layer.id;\n\n return {\n style,\n isResizable,\n isResizing,\n onResizeHandlePointerDown: (config: ResizeHandleConfig, event: React.PointerEvent<HTMLDivElement>) => {\n if (onPointerDown) {\n onPointerDown(config, event);\n }\n },\n };\n },\n [buildDraggableLayerStyle, getResizeHandleState, resizingLayerId],\n );\n\n const getLayerHandleProps = React.useCallback(\n (layerId: string): GridLayerHandleProps => {\n return {\n \"data-drag-handle\": \"true\",\n role: \"button\",\n \"aria-roledescription\": \"Drag handle\",\n \"aria-label\": \"Drag layer\",\n onPointerDown: (event: React.PointerEvent<HTMLElement>) => {\n handleDragHandlePointerDown(layerId, event);\n },\n };\n },\n [handleDragHandlePointerDown],\n );\n\n const providerValue = React.useMemo<GridLayoutContextValue>(\n () => ({\n handleLayerPointerDown,\n getLayerRenderState,\n getLayerHandleProps,\n isRootLevel,\n }),\n [getLayerHandleProps, getLayerRenderState, handleLayerPointerDown, isRootLevel],\n );\n\n return {\n providerValue,\n draggingLayerId,\n resizingLayerId,\n };\n};\n\n/* Debug note: Reviewed GridLayout.module.css and LayerInstanceContext to keep drag handle integration consistent. */\nconst getNumericLayerSize = (layer: LayerDefinition): LayerSize | undefined => {\n // For floating layers, prioritize floating.size/defaultSize\n if (layer.floating) {\n const floatingSize = layer.floating.size ?? layer.floating.defaultSize;\n if (floatingSize) {\n return { width: floatingSize.width, height: floatingSize.height };\n }\n }\n if (typeof layer.width === \"number\" && typeof layer.height === \"number\") {\n return { width: layer.width, height: layer.height };\n }\n return undefined;\n};\n","/**\n * @file Top-level grid layout component that consumes PanelSystemContext core.\n */\nimport * as React from \"react\";\nimport { useIntersectionObserver } from \"../../hooks/useIntersectionObserver\";\nimport type { LayerDefinition, PanelLayoutConfig } from \"../../types\";\nimport { DrawerLayers } from \"../window/DrawerLayers\";\nimport { GridLayerList } from \"./GridLayerList\";\nimport { GridTrackResizeHandle } from \"./GridTrackResizeHandle\";\nimport { PanelSystemProvider, usePanelSystem } from \"../../PanelSystemContext\";\nimport { useGridPlacements } from \"../../modules/grid/useGridPlacements\";\nimport { useGridTracks } from \"../../modules/grid/useGridTracks\";\nimport { useLayerInteractions } from \"../../modules/grid/useLayerInteractions\";\nimport { GridLayoutProvider } from \"../../modules/grid/GridLayoutContext\";\n\nconst gridLayoutBaseStyle: React.CSSProperties = {\n display: \"grid\",\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n};\n\nconst gridLayoutDraggingStyle: React.CSSProperties = {\n touchAction: \"none\",\n WebkitTouchCallout: \"none\",\n WebkitUserSelect: \"none\",\n userSelect: \"none\",\n};\n\nconst gridLayoutRootLevelStyle: React.CSSProperties = {\n ...gridLayoutBaseStyle,\n overflow: \"visible\",\n height: \"auto\",\n minHeight: \"100%\",\n};\n\nconst resolveGridBaseStyle = (isRootLevel: boolean): React.CSSProperties => {\n return isRootLevel ? gridLayoutRootLevelStyle : gridLayoutBaseStyle;\n};\n\nexport type GridLayoutProps = {\n config: PanelLayoutConfig;\n layers: LayerDefinition[];\n style?: React.CSSProperties;\n /**\n * When true, enables browser-native scrolling for scrollable layers.\n * Use this when GridLayout is at the root level of the application.\n */\n root?: boolean;\n};\n\nexport const GridLayout: React.FC<GridLayoutProps> = ({ config, layers, style: styleProp, root = false }) => {\n const gridRef = React.useRef<HTMLDivElement | null>(null);\n const { isIntersecting } = useIntersectionObserver(gridRef, { threshold: 0 });\n\n return (\n <PanelSystemProvider config={config} layers={layers} style={styleProp}>\n <GridLayoutInner gridRef={gridRef} isIntersecting={isIntersecting} isRoot={root} />\n </PanelSystemProvider>\n );\n};\n\nconst GridLayoutInner: React.FC<{\n gridRef: React.RefObject<HTMLDivElement | null>;\n isIntersecting: boolean;\n isRoot: boolean;\n}> = ({ gridRef, isIntersecting, isRoot }) => {\n const { config, style, layers } = usePanelSystem();\n const { normalizedLayers, visibleLayers, regularLayers, layerById } = useGridPlacements(config, layers.defs);\n const { columnHandles, rowHandles, gapSizes, gridStyle, handleResize } = useGridTracks(config, style, gridRef);\n const { providerValue, draggingLayerId, resizingLayerId } = useLayerInteractions({\n layers: normalizedLayers,\n layerById,\n isRootLevel: isRoot,\n });\n\n const isDraggingOrResizing = draggingLayerId ? true : Boolean(resizingLayerId);\n const combinedStyle = React.useMemo(() => {\n const baseStyle = resolveGridBaseStyle(isRoot);\n return {\n ...baseStyle,\n ...gridStyle,\n ...(isDraggingOrResizing ? gridLayoutDraggingStyle : {}),\n };\n }, [gridStyle, isDraggingOrResizing, isRoot]);\n\n return (\n <>\n <div\n ref={gridRef}\n style={combinedStyle}\n data-dragging={Boolean(draggingLayerId)}\n data-resizing={Boolean(resizingLayerId)}\n data-visible={isIntersecting}\n >\n <GridLayoutProvider value={providerValue}>\n <GridLayerList layers={regularLayers} />\n </GridLayoutProvider>\n\n {columnHandles.map(({ trackIndex, align, span }) => (\n <GridTrackResizeHandle\n key={`col-${trackIndex}:${align}`}\n direction=\"col\"\n trackIndex={trackIndex}\n align={align}\n gap={gapSizes.columnGap}\n span={span}\n onResize={handleResize}\n />\n ))}\n\n {rowHandles.map(({ trackIndex, align, span }) => (\n <GridTrackResizeHandle\n key={`row-${trackIndex}:${align}`}\n direction=\"row\"\n trackIndex={trackIndex}\n align={align}\n gap={gapSizes.rowGap}\n span={span}\n onResize={handleResize}\n />\n ))}\n </div>\n\n <DrawerLayers layers={visibleLayers} />\n </>\n );\n};\n\n/* Debug note: Refactored to consume PanelSystemContext core for consistent separation. */\n"],"names":["createIdGenerator","map","ref","existing","nextId","getId","observerCache","getSharedObserver","options","observerKey","observer","#callbackMap","#intersectionObserver","entries","entry","callback","target","voidClientRect","useIntersectionObserver","threshold","rootMargin","root","intersection","setIntersection","React","resizeHandleBaseStyle","cornerHandleStyle","GRID_LAYER_CORNER_HIT_SIZE","edgeHandleStyle","cornerPositions","edgePositions","GRID_LAYER_EDGE_HIT_THICKNESS","RESIZE_HANDLE_CONFIGS","GridLayerResizeHandles","layerId","onPointerDown","jsx","Fragment","config","baseStyle","positionStyle","combinedStyle","datasetProps","event","PivotLayer","pivot","Outlet","usePivot","resolveLayerContent","layer","getCachedContent","LayerContentRenderer","onClose","usePanelSystem","content","FloatingWindow","LayerResizeHandles","isResizable","resolveOverflowStyle","scrollable","isFloating","EmbeddedLayer","handleLayerPointerDown","getLayerRenderState","useGridLayoutContext","style","isResizing","onResizeHandlePointerDown","gridPlacementStyle","placement","overflow","handleClose","jsxs","LayerInstanceProvider","GridLayerList","layers","floatingMode","PopupLayerPortal","resizeHandleWrapperBaseStyle","GridTrackResizeHandle","direction","trackIndex","align","gap","span","onResize","resizeDirection","handleResize","delta","signedDelta","placementStyle","wrapperStyle","offset","GRID_HANDLE_THICKNESS","ResizeHandle","computeGridPlacements","areas","boundsByArea","row","rowIndex","area","colIndex","nextBounds","initialBounds","placements","bounds","rowStart","rowEnd","colStart","colEnd","normalizeLayerForGrid","placementKey","needsGridArea","needsRow","needsColumn","useGridPlacements","normalizedLayers","visibleLayers","regularLayers","layerById","parseGapValue","gapValue","tokens","token","parseToken","match","parsed","measureGridTrackSizes","containerEl","s","n","clampNumber","value","min","max","toFiniteNumberOr","fallback","createTrackKey","index","getTrackSize","track","trackSizes","key","currentSize","buildTrackTemplateString","tracks","extractInitialTrackSizes","acc","resolveCurrentTrackSize","containerRef","storedSize","measuredSize","calculateOtherTracksMinSpace","excludeIndex","sum","t","idx","calculateEffectiveMaxSize","gapSizes","containerSize","otherTracksMinSpace","gapCount","gapSize","totalGapSpace","dynamicMax","applyTrackConstraints","size","minSize","maxSize","computeColumnBoundarySpan","boundaryIndex","rowCount","validRows","leftArea","rightArea","minRow","maxRow","computeRowBoundarySpan","topRow","bottomRow","colCount","validCols","topArea","bottomArea","minCol","maxCol","computeColumnResizeHandles","handles","_","leftTrack","computeRowResizeHandles","topTrack","getGapStyle","mergeTrackSizes","prev","initialSizes","nextKeys","merged","prevKeys","keysChangedByLength","keysChangedByMissing","keysChanged","valuesChanged","useGridTracks","styleProp","setTrackSizes","useIsomorphicLayoutEffect","areasString","columnHandles","rowHandles","gridStyle","effectiveMaxSize","newSize","constrained","resolvePositionMode","getPositionModeStyle","mode","getGridAreaStyle","getAbsolutePositionStyle","position","getZIndexStyle","zIndex","getDimensionsStyle","width","height","getPointerEventsStyle","resolveEffectivePosition","resolveEffectiveSize","floatingSize","resolveEffectiveZIndex","buildLayerStyleObject","resolvedMode","effectivePosition","effectiveSize","effectiveZIndex","resolveFloatingMode","floating","getEmbeddedFloatingConfig","isInteractiveElement","clampDimension","resolvedMin","resolvedMax","ensureNumericOffset","resolveDragAnchor","resolveFloatingConstraints","resolveHorizontalSizeCandidate","edge","startSize","resolveVerticalSizeCandidate","resolveHorizontalPosition","startPosition","resolveVerticalPosition","findLayerElementById","element","findAncestor","predicate","stopPredicate","findDragHandleElement","node","isResizeControl","shouldRenderFloatingResize","getLayerSizeFromDefinition","getNumericLayerSize","computeResizableLayerSizes","previousSizes","activeResizeLayerId","nextSizes","accumulator","parsedSize","previousKeys","sizeChanged","previous","next","useLayerInteractions","isRootLevel","draggingLayerId","setDraggingLayerId","resizingLayerId","setResizingLayerId","layerPositions","setLayerPositions","layerSizes","setLayerSizes","dragStartRef","resizeStartRef","notifyFloatingMove","useEffectEvent","notifyFloatingResize","sizes","changed","beginLayerDrag","anchor","translation","dragState","dragHandle","layerElement","handleDragHandlePointerDown","handleResizePointerDown","sizeEntry","baseAnchor","constraints","initialPosition","handleDragPointerMove","dragStart","deltaX","deltaY","newPos","handleResizePointerMove","resizeStart","widthCandidate","heightCandidate","nextWidth","nextHeight","widthDelta","heightDelta","nextPositionX","nextPositionY","nextSize","currentPosition","nextPosition","finishDrag","finishResize","useDocumentPointerEvents","buildDraggableLayerStyle","isDragging","transformStyle","fallbackSize","sizeRecord","sizeStyle","getResizeHandleState","storedLayerSize","fallbackLayerSize","getLayerHandleProps","gridLayoutBaseStyle","gridLayoutDraggingStyle","gridLayoutRootLevelStyle","resolveGridBaseStyle","GridLayout","gridRef","isIntersecting","PanelSystemProvider","GridLayoutInner","isRoot","providerValue","isDraggingOrResizing","GridLayoutProvider","DrawerLayers"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import * as s from "react";
3
+ import { u as E } from "./ResizeHandle-CXjc1meV.js";
4
+ import { a as u, b as v, c as D, H as g } from "./styles-NkjuMOVS.js";
5
+ const R = (r) => ({
6
+ width: g,
7
+ cursor: "col-resize",
8
+ position: "relative",
9
+ userSelect: "none",
10
+ backgroundColor: r === "drag" ? u : r === "hover" ? v : D
11
+ }), I = ({ onResize: r, component: e, element: t }) => {
12
+ const { ref: d, isDragging: i, onPointerDown: c } = E({
13
+ axis: "x",
14
+ onResize: r
15
+ }), [l, a] = s.useState(!1), o = {
16
+ ref: d,
17
+ style: R(i ? "drag" : l ? "hover" : "idle"),
18
+ role: "separator",
19
+ "aria-orientation": "vertical",
20
+ "data-dragging": i ? "true" : void 0,
21
+ onPointerDown: c,
22
+ onPointerEnter: () => a(!0),
23
+ onPointerLeave: () => a(!1)
24
+ };
25
+ return t ? s.cloneElement(t, o) : e ? /* @__PURE__ */ n(e, { ...o }) : /* @__PURE__ */ n("div", { ...o });
26
+ };
27
+ export {
28
+ I as H
29
+ };
30
+ //# sourceMappingURL=HorizontalDivider-DdxzfV0l.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HorizontalDivider-DdxzfV0l.js","sources":["../src/components/resizer/HorizontalDivider.tsx"],"sourcesContent":["/**\n * @file Horizontal divider component\n */\nimport * as React from \"react\";\nimport { useResizeDrag } from \"../../modules/resizer/useResizeDrag\";\nimport { HORIZONTAL_DIVIDER_WIDTH, COLOR_RESIZE_HANDLE_IDLE, COLOR_RESIZE_HANDLE_HOVER, COLOR_RESIZE_HANDLE_ACTIVE } from \"../../constants/styles\";\n\nexport type HorizontalDividerProps = {\n onResize: (deltaX: number) => void;\n /** Custom component for the divider */\n component?: React.ComponentType<React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> }>;\n /** Custom element for the divider */\n element?: React.ReactElement;\n};\n\nconst buildDividerStyle = (state: \"idle\" | \"hover\" | \"drag\"): React.CSSProperties => {\n const backgroundColor = state === \"drag\" ? COLOR_RESIZE_HANDLE_ACTIVE : state === \"hover\" ? COLOR_RESIZE_HANDLE_HOVER : COLOR_RESIZE_HANDLE_IDLE;\n return {\n width: HORIZONTAL_DIVIDER_WIDTH,\n cursor: \"col-resize\",\n position: \"relative\",\n userSelect: \"none\",\n backgroundColor,\n };\n};\n\nexport const HorizontalDivider: React.FC<HorizontalDividerProps> = ({ onResize, component: Component, element }) => {\n const { ref, isDragging, onPointerDown } = useResizeDrag<HTMLDivElement>({\n axis: \"x\",\n onResize: onResize,\n });\n const [hovered, setHovered] = React.useState(false);\n\n const dividerProps = {\n ref,\n style: buildDividerStyle(isDragging ? \"drag\" : hovered ? \"hover\" : \"idle\"),\n role: \"separator\" as const,\n \"aria-orientation\": \"vertical\" as const,\n \"data-dragging\": isDragging ? \"true\" : undefined,\n onPointerDown,\n onPointerEnter: () => setHovered(true),\n onPointerLeave: () => setHovered(false),\n };\n\n if (element) {\n return React.cloneElement(element, dividerProps);\n }\n if (Component) {\n return <Component {...dividerProps} />;\n }\n return <div {...dividerProps} />;\n};\n"],"names":["buildDividerStyle","state","HORIZONTAL_DIVIDER_WIDTH","COLOR_RESIZE_HANDLE_ACTIVE","COLOR_RESIZE_HANDLE_HOVER","COLOR_RESIZE_HANDLE_IDLE","HorizontalDivider","onResize","Component","element","ref","isDragging","onPointerDown","useResizeDrag","hovered","setHovered","React","dividerProps","jsx"],"mappings":";;;;AAeA,MAAMA,IAAoB,CAACC,OAElB;AAAA,EACL,OAAOC;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,iBANsBD,MAAU,SAASE,IAA6BF,MAAU,UAAUG,IAA4BC;AAMtH,IAISC,IAAsD,CAAC,EAAE,UAAAC,GAAU,WAAWC,GAAW,SAAAC,QAAc;AAClH,QAAM,EAAE,KAAAC,GAAK,YAAAC,GAAY,eAAAC,EAAA,IAAkBC,EAA8B;AAAA,IACvE,MAAM;AAAA,IACN,UAAAN;AAAA,EAAA,CACD,GACK,CAACO,GAASC,CAAU,IAAIC,EAAM,SAAS,EAAK,GAE5CC,IAAe;AAAA,IACnB,KAAAP;AAAA,IACA,OAAOV,EAAkBW,IAAa,SAASG,IAAU,UAAU,MAAM;AAAA,IACzE,MAAM;AAAA,IACN,oBAAoB;AAAA,IACpB,iBAAiBH,IAAa,SAAS;AAAA,IACvC,eAAAC;AAAA,IACA,gBAAgB,MAAMG,EAAW,EAAI;AAAA,IACrC,gBAAgB,MAAMA,EAAW,EAAK;AAAA,EAAA;AAGxC,SAAIN,IACKO,EAAM,aAAaP,GAASQ,CAAY,IAE7CT,IACK,gBAAAU,EAACV,GAAA,EAAW,GAAGS,EAAA,CAAc,IAE/B,gBAAAC,EAAC,OAAA,EAAK,GAAGD,EAAA,CAAc;AAChC;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const c=require("react/jsx-runtime"),g=require("react"),D=require("./ResizeHandle-CBcAS918.cjs"),n=require("./styles-qf6ptVLD.cjs");function E(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const u=E(g),f=e=>{const r=e==="drag"?n.COLOR_RESIZE_HANDLE_ACTIVE:e==="hover"?n.COLOR_RESIZE_HANDLE_HOVER:n.COLOR_RESIZE_HANDLE_IDLE;return{width:n.HORIZONTAL_DIVIDER_WIDTH,cursor:"col-resize",position:"relative",userSelect:"none",backgroundColor:r}},v=({onResize:e,component:r,element:t})=>{const{ref:o,isDragging:s,onPointerDown:l}=D.useResizeDrag({axis:"x",onResize:e}),[d,a]=u.useState(!1),i={ref:o,style:f(s?"drag":d?"hover":"idle"),role:"separator","aria-orientation":"vertical","data-dragging":s?"true":void 0,onPointerDown:l,onPointerEnter:()=>a(!0),onPointerLeave:()=>a(!1)};return t?u.cloneElement(t,i):r?c.jsx(r,{...i}):c.jsx("div",{...i})};exports.HorizontalDivider=v;
2
+ //# sourceMappingURL=HorizontalDivider-_pgV4Mcv.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HorizontalDivider-_pgV4Mcv.cjs","sources":["../src/components/resizer/HorizontalDivider.tsx"],"sourcesContent":["/**\n * @file Horizontal divider component\n */\nimport * as React from \"react\";\nimport { useResizeDrag } from \"../../modules/resizer/useResizeDrag\";\nimport { HORIZONTAL_DIVIDER_WIDTH, COLOR_RESIZE_HANDLE_IDLE, COLOR_RESIZE_HANDLE_HOVER, COLOR_RESIZE_HANDLE_ACTIVE } from \"../../constants/styles\";\n\nexport type HorizontalDividerProps = {\n onResize: (deltaX: number) => void;\n /** Custom component for the divider */\n component?: React.ComponentType<React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> }>;\n /** Custom element for the divider */\n element?: React.ReactElement;\n};\n\nconst buildDividerStyle = (state: \"idle\" | \"hover\" | \"drag\"): React.CSSProperties => {\n const backgroundColor = state === \"drag\" ? COLOR_RESIZE_HANDLE_ACTIVE : state === \"hover\" ? COLOR_RESIZE_HANDLE_HOVER : COLOR_RESIZE_HANDLE_IDLE;\n return {\n width: HORIZONTAL_DIVIDER_WIDTH,\n cursor: \"col-resize\",\n position: \"relative\",\n userSelect: \"none\",\n backgroundColor,\n };\n};\n\nexport const HorizontalDivider: React.FC<HorizontalDividerProps> = ({ onResize, component: Component, element }) => {\n const { ref, isDragging, onPointerDown } = useResizeDrag<HTMLDivElement>({\n axis: \"x\",\n onResize: onResize,\n });\n const [hovered, setHovered] = React.useState(false);\n\n const dividerProps = {\n ref,\n style: buildDividerStyle(isDragging ? \"drag\" : hovered ? \"hover\" : \"idle\"),\n role: \"separator\" as const,\n \"aria-orientation\": \"vertical\" as const,\n \"data-dragging\": isDragging ? \"true\" : undefined,\n onPointerDown,\n onPointerEnter: () => setHovered(true),\n onPointerLeave: () => setHovered(false),\n };\n\n if (element) {\n return React.cloneElement(element, dividerProps);\n }\n if (Component) {\n return <Component {...dividerProps} />;\n }\n return <div {...dividerProps} />;\n};\n"],"names":["buildDividerStyle","state","backgroundColor","COLOR_RESIZE_HANDLE_ACTIVE","COLOR_RESIZE_HANDLE_HOVER","COLOR_RESIZE_HANDLE_IDLE","HORIZONTAL_DIVIDER_WIDTH","HorizontalDivider","onResize","Component","element","ref","isDragging","onPointerDown","useResizeDrag","hovered","setHovered","React","dividerProps","jsx"],"mappings":"2aAeMA,EAAqBC,GAA0D,CACnF,MAAMC,EAAkBD,IAAU,OAASE,EAAAA,2BAA6BF,IAAU,QAAUG,EAAAA,0BAA4BC,EAAAA,yBACxH,MAAO,CACL,MAAOC,EAAAA,yBACP,OAAQ,aACR,SAAU,WACV,WAAY,OACZ,gBAAAJ,CAAA,CAEJ,EAEaK,EAAsD,CAAC,CAAE,SAAAC,EAAU,UAAWC,EAAW,QAAAC,KAAc,CAClH,KAAM,CAAE,IAAAC,EAAK,WAAAC,EAAY,cAAAC,CAAA,EAAkBC,EAAAA,cAA8B,CACvE,KAAM,IACN,SAAAN,CAAA,CACD,EACK,CAACO,EAASC,CAAU,EAAIC,EAAM,SAAS,EAAK,EAE5CC,EAAe,CACnB,IAAAP,EACA,MAAOX,EAAkBY,EAAa,OAASG,EAAU,QAAU,MAAM,EACzE,KAAM,YACN,mBAAoB,WACpB,gBAAiBH,EAAa,OAAS,OACvC,cAAAC,EACA,eAAgB,IAAMG,EAAW,EAAI,EACrC,eAAgB,IAAMA,EAAW,EAAK,CAAA,EAGxC,OAAIN,EACKO,EAAM,aAAaP,EAASQ,CAAY,EAE7CT,EACKU,MAACV,EAAA,CAAW,GAAGS,CAAA,CAAc,EAE/BC,MAAC,MAAA,CAAK,GAAGD,CAAA,CAAc,CAChC"}