react-panel-layout 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/dist/{FloatingPanelFrame-D9Cp2al1.cjs → FloatingPanelFrame-CEmXDvUA.cjs} +2 -2
  2. package/dist/{FloatingPanelFrame-D9Cp2al1.cjs.map → FloatingPanelFrame-CEmXDvUA.cjs.map} +1 -1
  3. package/dist/{FloatingPanelFrame-lLg-Lpg7.js → FloatingPanelFrame-SgYLc6Ud.js} +11 -11
  4. package/dist/{FloatingPanelFrame-lLg-Lpg7.js.map → FloatingPanelFrame-SgYLc6Ud.js.map} +1 -1
  5. package/dist/FloatingWindow-BpdOpg_L.js +400 -0
  6. package/dist/FloatingWindow-BpdOpg_L.js.map +1 -0
  7. package/dist/FloatingWindow-TCDNY5gE.cjs +2 -0
  8. package/dist/FloatingWindow-TCDNY5gE.cjs.map +1 -0
  9. package/dist/GridLayout-B4VRsC0r.cjs +2 -0
  10. package/dist/GridLayout-B4VRsC0r.cjs.map +1 -0
  11. package/dist/GridLayout-BltqeCPK.js +927 -0
  12. package/dist/GridLayout-BltqeCPK.js.map +1 -0
  13. package/dist/HorizontalDivider-B5Z-KZLk.cjs +2 -0
  14. package/dist/HorizontalDivider-B5Z-KZLk.cjs.map +1 -0
  15. package/dist/HorizontalDivider-WF1k_qND.js +30 -0
  16. package/dist/HorizontalDivider-WF1k_qND.js.map +1 -0
  17. package/dist/PanelSystem-Bs8bQwQF.cjs +3 -0
  18. package/dist/PanelSystem-Bs8bQwQF.cjs.map +1 -0
  19. package/dist/PanelSystem-Dr1TBhxM.js +1946 -0
  20. package/dist/PanelSystem-Dr1TBhxM.js.map +1 -0
  21. package/dist/ResizeHandle-CScipO5l.cjs +2 -0
  22. package/dist/ResizeHandle-CScipO5l.cjs.map +1 -0
  23. package/dist/ResizeHandle-CdA_JYfN.js +120 -0
  24. package/dist/ResizeHandle-CdA_JYfN.js.map +1 -0
  25. package/dist/SwipePivotTabBar-BGO9X94m.js +407 -0
  26. package/dist/SwipePivotTabBar-BGO9X94m.js.map +1 -0
  27. package/dist/SwipePivotTabBar-BrQismcZ.cjs +2 -0
  28. package/dist/SwipePivotTabBar-BrQismcZ.cjs.map +1 -0
  29. package/dist/config.cjs +1 -1
  30. package/dist/config.cjs.map +1 -1
  31. package/dist/config.js +11 -9
  32. package/dist/config.js.map +1 -1
  33. package/dist/constants/styles.d.ts +18 -4
  34. package/dist/floating.cjs +1 -1
  35. package/dist/floating.js +1 -1
  36. package/dist/grid/index.d.ts +58 -0
  37. package/dist/grid.cjs +2 -0
  38. package/dist/grid.cjs.map +1 -0
  39. package/dist/grid.js +13 -0
  40. package/dist/grid.js.map +1 -0
  41. package/dist/hooks/gesture/presets.d.ts +33 -0
  42. package/dist/hooks/gesture/testing/createGestureSimulator.d.ts +110 -0
  43. package/dist/hooks/gesture/thresholdValue.d.ts +44 -0
  44. package/dist/hooks/gesture/types.d.ts +254 -0
  45. package/dist/hooks/gesture/useDirectionalLock.d.ts +20 -0
  46. package/dist/hooks/gesture/useEdgeSwipeInput.d.ts +23 -0
  47. package/dist/hooks/gesture/useNativeGestureGuard.d.ts +23 -0
  48. package/dist/hooks/gesture/usePointerTracking.d.ts +22 -0
  49. package/dist/hooks/gesture/useScrollBoundary.d.ts +23 -0
  50. package/dist/hooks/gesture/useSwipeInput.d.ts +5 -0
  51. package/dist/hooks/gesture/utils.d.ts +40 -0
  52. package/dist/hooks/useAnimatedVisibility.d.ts +58 -0
  53. package/dist/hooks/useAnimationFrame.d.ts +84 -0
  54. package/dist/hooks/useSnapAnimation.d.ts +54 -0
  55. package/dist/hooks/useSwipeContentTransform.d.ts +79 -0
  56. package/dist/index.cjs +1 -2
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.d.ts +0 -1
  59. package/dist/index.js +25 -2006
  60. package/dist/index.js.map +1 -1
  61. package/dist/modules/pivot/PivotContent.d.ts +1 -1
  62. package/dist/modules/pivot/SwipePivotContent.d.ts +39 -0
  63. package/dist/modules/pivot/SwipePivotContent.debug.tmp.d.ts +25 -0
  64. package/dist/modules/pivot/SwipePivotContent.test.d.ts +1 -0
  65. package/dist/modules/pivot/SwipePivotTabBar.d.ts +89 -0
  66. package/dist/modules/pivot/index.d.ts +3 -0
  67. package/dist/modules/pivot/scaleInputState.d.ts +37 -0
  68. package/dist/modules/pivot/types.d.ts +67 -2
  69. package/dist/modules/pivot/usePivotSwipeInput.d.ts +68 -0
  70. package/dist/modules/stack/StackContent.d.ts +15 -0
  71. package/dist/modules/stack/SwipeStackContent.d.ts +63 -0
  72. package/dist/modules/stack/SwipeStackOutlet.d.ts +80 -0
  73. package/dist/modules/stack/computeStackContentState.d.ts +99 -0
  74. package/dist/modules/stack/computeSwipeStackTransform.d.ts +76 -0
  75. package/dist/modules/stack/types.d.ts +194 -0
  76. package/dist/modules/stack/useStackAnimationState.d.ts +32 -0
  77. package/dist/modules/stack/useStackNavigation.d.ts +23 -0
  78. package/dist/modules/stack/useStackSwipeInput.d.ts +27 -0
  79. package/dist/panels/index.d.ts +67 -0
  80. package/dist/panels.cjs +2 -0
  81. package/dist/panels.cjs.map +1 -0
  82. package/dist/panels.js +28 -0
  83. package/dist/panels.js.map +1 -0
  84. package/dist/pivot/index.d.ts +3 -0
  85. package/dist/pivot.cjs +1 -1
  86. package/dist/pivot.cjs.map +1 -1
  87. package/dist/pivot.js +20 -2
  88. package/dist/pivot.js.map +1 -1
  89. package/dist/resizer/index.d.ts +57 -0
  90. package/dist/resizer.cjs +2 -0
  91. package/dist/resizer.cjs.map +1 -0
  92. package/dist/resizer.js +8 -0
  93. package/dist/resizer.js.map +1 -0
  94. package/dist/stack/index.d.ts +72 -0
  95. package/dist/stack.cjs +2 -0
  96. package/dist/stack.cjs.map +1 -0
  97. package/dist/stack.js +980 -0
  98. package/dist/stack.js.map +1 -0
  99. package/dist/sticky-header/StickyArea.d.ts +38 -0
  100. package/dist/sticky-header/index.d.ts +4 -4
  101. package/dist/sticky-header/types.d.ts +35 -22
  102. package/dist/sticky-header.cjs +1 -1
  103. package/dist/sticky-header.cjs.map +1 -1
  104. package/dist/sticky-header.js +65 -174
  105. package/dist/sticky-header.js.map +1 -1
  106. package/dist/styles-DPPuJ0sf.js +57 -0
  107. package/dist/styles-DPPuJ0sf.js.map +1 -0
  108. package/dist/styles-qf6ptVLD.cjs +2 -0
  109. package/dist/styles-qf6ptVLD.cjs.map +1 -0
  110. package/dist/useContentCache-CO3LYNmz.js +24 -0
  111. package/dist/useContentCache-CO3LYNmz.js.map +1 -0
  112. package/dist/useContentCache-DqXtLrLs.cjs +2 -0
  113. package/dist/useContentCache-DqXtLrLs.cjs.map +1 -0
  114. package/dist/useDocumentPointerEvents-CKdhGXd0.js +46 -0
  115. package/dist/useDocumentPointerEvents-CKdhGXd0.js.map +1 -0
  116. package/dist/useDocumentPointerEvents-ChqrKXDk.cjs +2 -0
  117. package/dist/useDocumentPointerEvents-ChqrKXDk.cjs.map +1 -0
  118. package/dist/useEffectEvent-Dp7HLCf0.js +13 -0
  119. package/dist/useEffectEvent-Dp7HLCf0.js.map +1 -0
  120. package/dist/useEffectEvent-huSsGUnl.cjs +2 -0
  121. package/dist/useEffectEvent-huSsGUnl.cjs.map +1 -0
  122. package/dist/useFloatingState-C4kRaW_R.cjs +2 -0
  123. package/dist/useFloatingState-C4kRaW_R.cjs.map +1 -0
  124. package/dist/useFloatingState-tEfA_wbc.js +74 -0
  125. package/dist/useFloatingState-tEfA_wbc.js.map +1 -0
  126. package/dist/window/index.d.ts +61 -0
  127. package/dist/window.cjs +2 -0
  128. package/dist/window.cjs.map +1 -0
  129. package/dist/window.js +149 -0
  130. package/dist/window.js.map +1 -0
  131. package/docs/design-tokens.md +405 -0
  132. package/package.json +29 -4
  133. package/src/PanelSystemContext.tsx +88 -0
  134. package/src/components/grid/GridLayerList.tsx +172 -0
  135. package/src/components/grid/GridLayerResizeHandles.tsx +145 -0
  136. package/src/components/grid/GridLayout.spec.tsx +743 -0
  137. package/src/components/grid/GridLayout.tsx +130 -0
  138. package/src/components/grid/GridTrackResizeHandle.tsx +87 -0
  139. package/src/components/paneling/FloatingPanelFrame.tsx +203 -0
  140. package/src/components/panels/DropSuggestOverlay.tsx +131 -0
  141. package/src/components/panels/PanelGroupView.tsx +112 -0
  142. package/src/components/pivot/PivotLayer.tsx +27 -0
  143. package/src/components/resizer/HorizontalDivider.tsx +52 -0
  144. package/src/components/resizer/ResizeHandle.tsx +118 -0
  145. package/src/components/tabs/TabBar.tsx +223 -0
  146. package/src/components/tabs/TabBarTab.tsx +133 -0
  147. package/src/components/tabs/TabDragOverlay.tsx +92 -0
  148. package/src/components/window/DialogOverlay.tsx +180 -0
  149. package/src/components/window/Drawer.tsx +282 -0
  150. package/src/components/window/DrawerLayers.tsx +58 -0
  151. package/src/components/window/FloatingWindow.tsx +95 -0
  152. package/src/components/window/PopupLayerPortal.tsx +218 -0
  153. package/src/config/PanelContentDeclaration.tsx +427 -0
  154. package/src/config/index.tsx +52 -0
  155. package/src/config/panelJsx.spec.tsx +54 -0
  156. package/src/config/panelJsxConfig.spec.tsx +54 -0
  157. package/src/config/panelJsxDrawer.spec.tsx +33 -0
  158. package/src/config/panelRouter.spec.ts +68 -0
  159. package/src/config/panelRouter.tsx +155 -0
  160. package/src/constants/styles.ts +261 -0
  161. package/src/demo/Layout.module.css +258 -0
  162. package/src/demo/Layout.tsx +176 -0
  163. package/src/demo/components/CodeBlock.module.css +54 -0
  164. package/src/demo/components/CodeBlock.tsx +34 -0
  165. package/src/demo/components/CodePreview.module.css +37 -0
  166. package/src/demo/components/CodePreview.tsx +31 -0
  167. package/src/demo/components/DataPreview.module.css +177 -0
  168. package/src/demo/components/DataPreview.tsx +115 -0
  169. package/src/demo/components/Story.module.css +68 -0
  170. package/src/demo/components/Story.tsx +54 -0
  171. package/src/demo/components/layout/CodePanel.module.css +183 -0
  172. package/src/demo/components/layout/CodePanel.tsx +149 -0
  173. package/src/demo/components/layout/DemoPage.module.css +60 -0
  174. package/src/demo/components/layout/DemoPage.tsx +56 -0
  175. package/src/demo/components/layout/SingleSamplePage.module.css +11 -0
  176. package/src/demo/components/layout/SingleSamplePage.tsx +35 -0
  177. package/src/demo/components/layout/SplitDemoLayout.module.css +107 -0
  178. package/src/demo/components/layout/SplitDemoLayout.tsx +218 -0
  179. package/src/demo/components/layout/index.ts +11 -0
  180. package/src/demo/components/tab-styles/ChromeTabBar.module.css +75 -0
  181. package/src/demo/components/tab-styles/ChromeTabBar.tsx +111 -0
  182. package/src/demo/components/tab-styles/GitHubTabBar.module.css +81 -0
  183. package/src/demo/components/tab-styles/GitHubTabBar.tsx +109 -0
  184. package/src/demo/components/tab-styles/VSCodeTabBar.module.css +78 -0
  185. package/src/demo/components/tab-styles/VSCodeTabBar.tsx +109 -0
  186. package/src/demo/components/tab-styles/index.ts +6 -0
  187. package/src/demo/components/ui/DemoButton.module.css +63 -0
  188. package/src/demo/components/ui/DemoButton.tsx +32 -0
  189. package/src/demo/components/ui/DemoCard.module.css +15 -0
  190. package/src/demo/components/ui/DemoCard.tsx +30 -0
  191. package/src/demo/components/ui/DemoContainer.module.css +17 -0
  192. package/src/demo/components/ui/DemoContainer.tsx +30 -0
  193. package/src/demo/components/ui/DemoPanel.module.css +23 -0
  194. package/src/demo/components/ui/DemoPanel.tsx +33 -0
  195. package/src/demo/components/ui/PanelText.module.css +18 -0
  196. package/src/demo/components/ui/PanelText.tsx +29 -0
  197. package/src/demo/components/ui/PanelTitle.module.css +18 -0
  198. package/src/demo/components/ui/PanelTitle.tsx +31 -0
  199. package/src/demo/contexts/TabbarDemoConfig.tsx +218 -0
  200. package/src/demo/demo.css +172 -0
  201. package/src/demo/hooks/useMedia.ts +41 -0
  202. package/src/demo/hooks/useShikiHighlight.ts +55 -0
  203. package/src/demo/index.tsx +293 -0
  204. package/src/demo/pages/Drawer/animations/index.tsx +22 -0
  205. package/src/demo/pages/Drawer/basics/index.tsx +17 -0
  206. package/src/demo/pages/Drawer/components/DrawerAnimations.module.css +125 -0
  207. package/src/demo/pages/Drawer/components/DrawerAnimations.tsx +118 -0
  208. package/src/demo/pages/Drawer/components/DrawerBasics.module.css +55 -0
  209. package/src/demo/pages/Drawer/components/DrawerBasics.tsx +76 -0
  210. package/src/demo/pages/Drawer/components/DrawerMenuLayout.module.css +332 -0
  211. package/src/demo/pages/Drawer/components/DrawerMenuLayout.tsx +199 -0
  212. package/src/demo/pages/Drawer/menu/index.tsx +17 -0
  213. package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.module.css +163 -0
  214. package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.tsx +234 -0
  215. package/src/demo/pages/FloatingPanelFrame/basic/index.tsx +17 -0
  216. package/src/demo/pages/FloatingPanelFrame/complex/index.tsx +26 -0
  217. package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.module.css +16 -0
  218. package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.tsx +24 -0
  219. package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.module.css +54 -0
  220. package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.tsx +67 -0
  221. package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.module.css +21 -0
  222. package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.tsx +41 -0
  223. package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.module.css +5 -0
  224. package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.tsx +43 -0
  225. package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.module.css +11 -0
  226. package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.tsx +42 -0
  227. package/src/demo/pages/FloatingPanelFrame/index.tsx +80 -0
  228. package/src/demo/pages/FloatingPanelFrame/scrollable/index.tsx +30 -0
  229. package/src/demo/pages/FloatingPanelFrame/with-controls/index.tsx +30 -0
  230. package/src/demo/pages/FloatingPanelFrame/with-meta/index.tsx +17 -0
  231. package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.module.css +112 -0
  232. package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.tsx +56 -0
  233. package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.module.css +46 -0
  234. package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.tsx +29 -0
  235. package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.module.css +54 -0
  236. package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.tsx +30 -0
  237. package/src/demo/pages/HorizontalDivider/index.module.css +14 -0
  238. package/src/demo/pages/HorizontalDivider/index.tsx +64 -0
  239. package/src/demo/pages/HorizontalDivider/panels-with-rich-content/index.tsx +21 -0
  240. package/src/demo/pages/HorizontalDivider/simple-resizable-panels/index.tsx +21 -0
  241. package/src/demo/pages/HorizontalDivider/three-panel-layout/index.tsx +21 -0
  242. package/src/demo/pages/PanelLayout/PanelLayoutDemo.module.css +174 -0
  243. package/src/demo/pages/PanelLayout/PanelLayoutDemo.tsx +248 -0
  244. package/src/demo/pages/PanelLayout/components/DashboardLayout.module.css +115 -0
  245. package/src/demo/pages/PanelLayout/components/DashboardLayout.tsx +124 -0
  246. package/src/demo/pages/PanelLayout/components/DraggableOverlays.module.css +101 -0
  247. package/src/demo/pages/PanelLayout/components/DraggableOverlays.tsx +122 -0
  248. package/src/demo/pages/PanelLayout/components/IDELayout.module.css +104 -0
  249. package/src/demo/pages/PanelLayout/components/IDELayout.tsx +143 -0
  250. package/src/demo/pages/PanelLayout/components/SimpleGrid.module.css +19 -0
  251. package/src/demo/pages/PanelLayout/components/SimpleGrid.tsx +62 -0
  252. package/src/demo/pages/PanelLayout/dashboard/index.tsx +22 -0
  253. package/src/demo/pages/PanelLayout/draggable-overlays/index.tsx +22 -0
  254. package/src/demo/pages/PanelLayout/ide-layout/index.tsx +22 -0
  255. package/src/demo/pages/PanelLayout/index.tsx +94 -0
  256. package/src/demo/pages/PanelLayout/simple-grid/index.tsx +22 -0
  257. package/src/demo/pages/PanelSystem/PanelSystemPreview.module.css +20 -0
  258. package/src/demo/pages/PanelSystem/PanelSystemPreview.tsx +101 -0
  259. package/src/demo/pages/PanelSystem/preview/index.tsx +18 -0
  260. package/src/demo/pages/PanelSystem/tabbar/index.tsx +129 -0
  261. package/src/demo/pages/Pivot/basics/index.tsx +17 -0
  262. package/src/demo/pages/Pivot/components/Pivot.module.css +278 -0
  263. package/src/demo/pages/Pivot/components/PivotBasics.tsx +103 -0
  264. package/src/demo/pages/Pivot/components/PivotSidebar.tsx +168 -0
  265. package/src/demo/pages/Pivot/components/PivotTabs.tsx +129 -0
  266. package/src/demo/pages/Pivot/components/PivotTransitions.tsx +120 -0
  267. package/src/demo/pages/Pivot/components/SwipePivot.module.css +114 -0
  268. package/src/demo/pages/Pivot/components/SwipePivot.tsx +193 -0
  269. package/src/demo/pages/Pivot/components/SwipeTabsPivot.module.css +203 -0
  270. package/src/demo/pages/Pivot/components/SwipeTabsPivot.tsx +289 -0
  271. package/src/demo/pages/Pivot/sidebar/index.tsx +17 -0
  272. package/src/demo/pages/Pivot/swipe/index.tsx +16 -0
  273. package/src/demo/pages/Pivot/swipe-debug/index.tsx +287 -0
  274. package/src/demo/pages/Pivot/swipe-tabs/index.tsx +15 -0
  275. package/src/demo/pages/Pivot/tabs/index.tsx +17 -0
  276. package/src/demo/pages/Pivot/transitions/index.tsx +17 -0
  277. package/src/demo/pages/ResizeHandle/both-directions/index.tsx +17 -0
  278. package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.module.css +72 -0
  279. package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.tsx +41 -0
  280. package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.module.css +61 -0
  281. package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.tsx +33 -0
  282. package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.module.css +83 -0
  283. package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.tsx +53 -0
  284. package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.module.css +68 -0
  285. package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.tsx +33 -0
  286. package/src/demo/pages/ResizeHandle/horizontal/index.tsx +17 -0
  287. package/src/demo/pages/ResizeHandle/index.module.css +11 -0
  288. package/src/demo/pages/ResizeHandle/index.tsx +71 -0
  289. package/src/demo/pages/ResizeHandle/nested-panels/index.tsx +17 -0
  290. package/src/demo/pages/ResizeHandle/vertical/index.tsx +17 -0
  291. package/src/demo/pages/ResponsiveLayout/adaptive-workspace/index.tsx +22 -0
  292. package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.module.css +423 -0
  293. package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.tsx +398 -0
  294. package/src/demo/pages/Stack/basics/index.tsx +22 -0
  295. package/src/demo/pages/Stack/components/Stack.module.css +234 -0
  296. package/src/demo/pages/Stack/components/StackBasics.tsx +217 -0
  297. package/src/demo/pages/Stack/components/StackTablet.module.css +299 -0
  298. package/src/demo/pages/Stack/components/StackTablet.tsx +401 -0
  299. package/src/demo/pages/Stack/tablet/index.tsx +22 -0
  300. package/src/demo/pages/StickyHeader/basics/index.tsx +17 -0
  301. package/src/demo/pages/StickyHeader/components/StickyHeader.module.css +219 -0
  302. package/src/demo/pages/StickyHeader/components/StickyHeaderBasics.tsx +103 -0
  303. package/src/demo/routes.tsx +193 -0
  304. package/src/demo/styles/animations.css +68 -0
  305. package/src/demo/styles/stack-themes.css +35 -0
  306. package/src/demo/utils/createPanelView.tsx +58 -0
  307. package/src/floating/index.ts +24 -0
  308. package/src/grid/index.ts +75 -0
  309. package/src/hooks/ContentCacheContext.tsx +87 -0
  310. package/src/hooks/gesture/presets.spec.ts +86 -0
  311. package/src/hooks/gesture/presets.ts +95 -0
  312. package/src/hooks/gesture/testing/createGestureSimulator.spec.ts +237 -0
  313. package/src/hooks/gesture/testing/createGestureSimulator.ts +310 -0
  314. package/src/hooks/gesture/thresholdValue.spec.ts +103 -0
  315. package/src/hooks/gesture/thresholdValue.ts +77 -0
  316. package/src/hooks/gesture/types.ts +290 -0
  317. package/src/hooks/gesture/useDirectionalLock.spec.ts +271 -0
  318. package/src/hooks/gesture/useDirectionalLock.ts +115 -0
  319. package/src/hooks/gesture/useEdgeSwipeInput.spec.ts +454 -0
  320. package/src/hooks/gesture/useEdgeSwipeInput.ts +131 -0
  321. package/src/hooks/gesture/useNativeGestureGuard.spec.ts +413 -0
  322. package/src/hooks/gesture/useNativeGestureGuard.ts +133 -0
  323. package/src/hooks/gesture/usePointerTracking.spec.ts +364 -0
  324. package/src/hooks/gesture/usePointerTracking.ts +134 -0
  325. package/src/hooks/gesture/useScrollBoundary.spec.ts +249 -0
  326. package/src/hooks/gesture/useScrollBoundary.ts +113 -0
  327. package/src/hooks/gesture/useSwipeInput.spec.ts +592 -0
  328. package/src/hooks/gesture/useSwipeInput.ts +310 -0
  329. package/src/hooks/gesture/utils.spec.ts +152 -0
  330. package/src/hooks/gesture/utils.ts +87 -0
  331. package/src/hooks/useAnimatedVisibility.spec.ts +257 -0
  332. package/src/hooks/useAnimatedVisibility.ts +146 -0
  333. package/src/hooks/useAnimationFrame.ts +200 -0
  334. package/src/hooks/useCSSMatrix.spec.ts +214 -0
  335. package/src/hooks/useCSSMatrix.ts +262 -0
  336. package/src/hooks/useClonedElementPreview.ts +28 -0
  337. package/src/hooks/useContainerScroll.ts +78 -0
  338. package/src/hooks/useContentCache.spec.tsx +232 -0
  339. package/src/hooks/useContentCache.tsx +127 -0
  340. package/src/hooks/useDocumentPointerEvents.ts +137 -0
  341. package/src/hooks/useDocumentScroll.ts +41 -0
  342. package/src/hooks/useEffectEvent.ts +40 -0
  343. package/src/hooks/useElementComponentWrapper.tsx +63 -0
  344. package/src/hooks/useIntersectionObserver.tsx +125 -0
  345. package/src/hooks/useIsomorphicLayoutEffect.ts +29 -0
  346. package/src/hooks/useResizeObserver.tsx +81 -0
  347. package/src/hooks/useScrollContainer.ts +79 -0
  348. package/src/hooks/useSnapAnimation.ts +128 -0
  349. package/src/hooks/useSwipeContentTransform.spec.ts +133 -0
  350. package/src/hooks/useSwipeContentTransform.ts +235 -0
  351. package/src/hooks/useTransitionState.ts +95 -0
  352. package/src/index.tsx +88 -0
  353. package/src/modules/grid/GridLayoutContext.tsx +57 -0
  354. package/src/modules/grid/LayerInstanceContext.tsx +56 -0
  355. package/src/modules/grid/resizeHandles.ts +157 -0
  356. package/src/modules/grid/trackUtils.ts +146 -0
  357. package/src/modules/grid/useGridPlacements.ts +143 -0
  358. package/src/modules/grid/useGridTracks.ts +156 -0
  359. package/src/modules/grid/useLayerDragHandle.ts +16 -0
  360. package/src/modules/grid/useLayerInteractions.tsx +850 -0
  361. package/src/modules/keybindings/KeybindingsProvider.tsx +111 -0
  362. package/src/modules/panels/dom/DomRegistry.tsx +94 -0
  363. package/src/modules/panels/index.ts +45 -0
  364. package/src/modules/panels/interactions/InteractionsContext.test.tsx +330 -0
  365. package/src/modules/panels/interactions/InteractionsContext.tsx +394 -0
  366. package/src/modules/panels/interactions/dnd.ts +28 -0
  367. package/src/modules/panels/keybindings/KeybindingsInstaller.tsx +15 -0
  368. package/src/modules/panels/layout/adapter.ts +124 -0
  369. package/src/modules/panels/rendering/ContentRegistry.spec.tsx +304 -0
  370. package/src/modules/panels/rendering/ContentRegistry.tsx +205 -0
  371. package/src/modules/panels/rendering/GroupContainer.tsx +65 -0
  372. package/src/modules/panels/rendering/RenderBridge.tsx +115 -0
  373. package/src/modules/panels/rendering/RenderContext.tsx +31 -0
  374. package/src/modules/panels/state/PanelSplitHandles.tsx +147 -0
  375. package/src/modules/panels/state/PanelSystemContext.splitLimits.spec.tsx +50 -0
  376. package/src/modules/panels/state/PanelSystemContext.tsx +289 -0
  377. package/src/modules/panels/state/StateContext.tsx +12 -0
  378. package/src/modules/panels/state/cleanup.ts +37 -0
  379. package/src/modules/panels/state/commands.ts +53 -0
  380. package/src/modules/panels/state/focus/Context.tsx +25 -0
  381. package/src/modules/panels/state/focus/logic.ts +57 -0
  382. package/src/modules/panels/state/groups/Context.tsx +25 -0
  383. package/src/modules/panels/state/groups/logic.ts +105 -0
  384. package/src/modules/panels/state/splitLimits.spec.ts +46 -0
  385. package/src/modules/panels/state/splitLimits.ts +90 -0
  386. package/src/modules/panels/state/state.spec.ts +49 -0
  387. package/src/modules/panels/state/tree/Context.tsx +24 -0
  388. package/src/modules/panels/state/tree/logic.spec.ts +34 -0
  389. package/src/modules/panels/state/tree/logic.ts +138 -0
  390. package/src/modules/panels/state/types.ts +142 -0
  391. package/src/modules/panels/system/PanelSystem.empty-tabbar.spec.tsx +53 -0
  392. package/src/modules/panels/system/PanelSystem.tab-click-activates.spec.tsx +44 -0
  393. package/src/modules/panels/system/PanelSystem.tab-reorder.spec.tsx +64 -0
  394. package/src/modules/panels/system/PanelSystem.tabs-no-dup.spec.tsx +57 -0
  395. package/src/modules/panels/system/PanelSystem.tsx +206 -0
  396. package/src/modules/pivot/PivotContent.spec.tsx +179 -0
  397. package/src/modules/pivot/PivotContent.tsx +77 -0
  398. package/src/modules/pivot/SwipePivotContent.debug.tmp.tsx +237 -0
  399. package/src/modules/pivot/SwipePivotContent.position.spec.tsx +167 -0
  400. package/src/modules/pivot/SwipePivotContent.spec.tsx +464 -0
  401. package/src/modules/pivot/SwipePivotContent.test.tsx +502 -0
  402. package/src/modules/pivot/SwipePivotContent.tsx +197 -0
  403. package/src/modules/pivot/SwipePivotTabBar.spec.tsx +865 -0
  404. package/src/modules/pivot/SwipePivotTabBar.tsx +523 -0
  405. package/src/modules/pivot/index.ts +8 -0
  406. package/src/modules/pivot/scaleInputState.spec.ts +210 -0
  407. package/src/modules/pivot/scaleInputState.ts +66 -0
  408. package/src/modules/pivot/types.ts +139 -0
  409. package/src/modules/pivot/usePivot.spec.ts +621 -0
  410. package/src/modules/pivot/usePivot.spec.tsx +186 -0
  411. package/src/modules/pivot/usePivot.tsx +345 -0
  412. package/src/modules/pivot/usePivotSwipeInput.spec.ts +649 -0
  413. package/src/modules/pivot/usePivotSwipeInput.ts +136 -0
  414. package/src/modules/resizer/useResizeDrag.ts +94 -0
  415. package/src/modules/stack/StackContent.spec.tsx +264 -0
  416. package/src/modules/stack/StackContent.tsx +111 -0
  417. package/src/modules/stack/SwipeStackContent.spec.tsx +1277 -0
  418. package/src/modules/stack/SwipeStackContent.tsx +356 -0
  419. package/src/modules/stack/SwipeStackOutlet.spec.tsx +252 -0
  420. package/src/modules/stack/SwipeStackOutlet.tsx +221 -0
  421. package/src/modules/stack/computeStackContentState.spec.ts +281 -0
  422. package/src/modules/stack/computeStackContentState.ts +304 -0
  423. package/src/modules/stack/computeSwipeStackTransform.spec.ts +186 -0
  424. package/src/modules/stack/computeSwipeStackTransform.ts +145 -0
  425. package/src/modules/stack/types.ts +226 -0
  426. package/src/modules/stack/useStackAnimationState.spec.ts +186 -0
  427. package/src/modules/stack/useStackAnimationState.ts +138 -0
  428. package/src/modules/stack/useStackNavigation.spec.ts +477 -0
  429. package/src/modules/stack/useStackNavigation.tsx +336 -0
  430. package/src/modules/stack/useStackSwipeInput.spec.ts +276 -0
  431. package/src/modules/stack/useStackSwipeInput.ts +139 -0
  432. package/src/modules/window/useDrawerState.ts +81 -0
  433. package/src/modules/window/useFloatingState.spec.ts +252 -0
  434. package/src/modules/window/useFloatingState.ts +141 -0
  435. package/src/panels/index.ts +119 -0
  436. package/src/pivot/index.ts +19 -0
  437. package/src/resizer/index.ts +68 -0
  438. package/src/stack/index.ts +91 -0
  439. package/src/sticky-header/StickyArea.tsx +221 -0
  440. package/src/sticky-header/index.ts +18 -0
  441. package/src/sticky-header/types.ts +68 -0
  442. package/src/types.ts +323 -0
  443. package/src/utils/CSSMatrix.ts +321 -0
  444. package/src/utils/css.ts +65 -0
  445. package/src/utils/dialogUtils.ts +43 -0
  446. package/src/utils/math.ts +18 -0
  447. package/src/utils/polyfills/createDialogPolyfill.ts +18 -0
  448. package/src/utils/typedActions.ts +103 -0
  449. package/src/vite-env.d.ts +6 -0
  450. package/src/window/index.ts +67 -0
  451. package/dist/GridLayout-BQQ63eA1.cjs +0 -2
  452. package/dist/GridLayout-BQQ63eA1.cjs.map +0 -1
  453. package/dist/GridLayout-CJTKq7Mp.js +0 -1465
  454. package/dist/GridLayout-CJTKq7Mp.js.map +0 -1
  455. package/dist/sticky-header/StickyHeader.d.ts +0 -53
  456. package/dist/styles-CA2_zLZt.js +0 -52
  457. package/dist/styles-CA2_zLZt.js.map +0 -1
  458. package/dist/styles-PsqGOEJP.cjs +0 -2
  459. package/dist/styles-PsqGOEJP.cjs.map +0 -1
  460. package/dist/usePivot-7ctin_P_.cjs +0 -2
  461. package/dist/usePivot-7ctin_P_.cjs.map +0 -1
  462. package/dist/usePivot-CgQxB8rc.js +0 -124
  463. package/dist/usePivot-CgQxB8rc.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @file Dialog positioning utilities
3
+ */
4
+
5
+ export type ViewportInfo = {
6
+ width: number;
7
+ height: number;
8
+ };
9
+
10
+ /**
11
+ * Get viewport dimensions
12
+ */
13
+ export const getViewportInfo = (): ViewportInfo => {
14
+ if (typeof window === "undefined") {
15
+ return { width: 0, height: 0 };
16
+ }
17
+
18
+ return {
19
+ width: window.innerWidth,
20
+ height: window.innerHeight,
21
+ };
22
+ };
23
+
24
+ /**
25
+ * Calculate context menu position to keep it within viewport
26
+ */
27
+ export const calculateContextMenuPosition = (
28
+ anchorX: number,
29
+ anchorY: number,
30
+ menuWidth: number,
31
+ menuHeight: number,
32
+ viewport: ViewportInfo,
33
+ ): { x: number; y: number } => {
34
+ // Adjust horizontal position if menu would overflow
35
+ const x =
36
+ anchorX + menuWidth > viewport.width ? Math.max(0, viewport.width - menuWidth) : anchorX;
37
+
38
+ // Adjust vertical position if menu would overflow
39
+ const y =
40
+ anchorY + menuHeight > viewport.height ? Math.max(0, viewport.height - menuHeight) : anchorY;
41
+
42
+ return { x, y };
43
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @file Primitive math helpers shared across modules.
3
+ */
4
+
5
+ export const clampNumber = (
6
+ value: number,
7
+ min: number = Number.NEGATIVE_INFINITY,
8
+ max: number = Number.POSITIVE_INFINITY,
9
+ ): number => {
10
+ return Math.min(Math.max(value, min), max);
11
+ };
12
+
13
+ export const toFiniteNumberOr = (value: number | undefined, fallback: number): number => {
14
+ if (typeof value !== "number" || !Number.isFinite(value)) {
15
+ return fallback;
16
+ }
17
+ return value;
18
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @file Dialog polyfill for browsers that don't support <dialog> element natively
3
+ */
4
+
5
+ /**
6
+ * Ensure dialog polyfill is loaded if needed
7
+ * This is a placeholder - in production you might want to use a real polyfill like dialog-polyfill
8
+ */
9
+ export const ensureDialogPolyfill = (): void => {
10
+ // Check if browser supports <dialog> element
11
+ if (typeof window === "undefined") {
12
+ return;
13
+ }
14
+
15
+ // Modern browsers already support dialog element
16
+ // If you need to support older browsers, you can load a polyfill here
17
+ // For now, we assume modern browser support
18
+ };
@@ -0,0 +1,103 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any -- Generic action helpers rely on 'any' to avoid over-constraining payload creators */
2
+ /**
3
+ * @file Utilities for defining typed action creators and reducer handler maps without external dependencies.
4
+ */
5
+
6
+ export type AnyAction = { type: string };
7
+
8
+ export type AnyActionCreator = {
9
+ (...args: any[]): AnyAction;
10
+ readonly type: string;
11
+ };
12
+
13
+ type PayloadCreator = (...args: any[]) => any;
14
+
15
+ type ActionFromPayload<Type extends string, Creator extends PayloadCreator> =
16
+ ReturnType<Creator> extends undefined | void
17
+ ? { type: Type }
18
+ : { type: Type; payload: Exclude<ReturnType<Creator>, undefined> };
19
+
20
+ /**
21
+ * Creates a typed action creator with an attached literal `type` property.
22
+ */
23
+ export function createAction<Type extends string>(type: Type): (() => { type: Type }) & { readonly type: Type };
24
+ export function createAction<Type extends string, Creator extends PayloadCreator>(
25
+ type: Type,
26
+ payloadCreator: Creator,
27
+ ): ((...args: Parameters<Creator>) => ActionFromPayload<Type, Creator>) & { readonly type: Type };
28
+ export function createAction<Type extends string, Creator extends PayloadCreator>(
29
+ type: Type,
30
+ payloadCreator?: Creator,
31
+ ) {
32
+ if (!payloadCreator) {
33
+ const actionCreator = (() => ({ type }) as const) as (() => { type: Type }) & { readonly type: Type };
34
+ Object.defineProperty(actionCreator, "type", {
35
+ value: type,
36
+ writable: false,
37
+ enumerable: true,
38
+ });
39
+ return actionCreator;
40
+ }
41
+ const actionCreator = ((...args: Parameters<Creator>) => {
42
+ const payload = payloadCreator(...args);
43
+ if (typeof payload === "undefined") {
44
+ return { type } as const;
45
+ }
46
+ return { type, payload } as const;
47
+ }) as ((...args: Parameters<Creator>) => ActionFromPayload<Type, Creator>) & { readonly type: Type };
48
+ Object.defineProperty(actionCreator, "type", {
49
+ value: type,
50
+ writable: false,
51
+ enumerable: true,
52
+ });
53
+ return actionCreator;
54
+ }
55
+
56
+ export type ActionCreatorsMap = Record<string, AnyActionCreator>;
57
+
58
+ export type ActionUnion<Creators extends ActionCreatorsMap> = ReturnType<Creators[keyof Creators]>;
59
+
60
+ export type CaseReducer<State, Action extends AnyAction, Extra> = (state: State, action: Action, extra: Extra) => State;
61
+
62
+ export type BoundActionCreators<Creators extends ActionCreatorsMap> = {
63
+ [Key in keyof Creators]: (...args: Parameters<Creators[Key]>) => ReturnType<Creators[Key]>;
64
+ };
65
+
66
+ export const bindActionCreators = <Creators extends ActionCreatorsMap>(
67
+ creators: Creators,
68
+ dispatch: (action: ActionUnion<Creators>) => unknown,
69
+ ): BoundActionCreators<Creators> => {
70
+ const bound = {} as BoundActionCreators<Creators>;
71
+ (Object.keys(creators) as Array<keyof Creators>).forEach((key) => {
72
+ const creator = creators[key];
73
+ bound[key] = ((...args: Parameters<typeof creator>) => {
74
+ const action = creator(...args);
75
+ dispatch(action as ActionUnion<Creators>);
76
+ return action;
77
+ }) as BoundActionCreators<Creators>[keyof Creators];
78
+ });
79
+ return bound;
80
+ };
81
+
82
+ export const createActionHandlerMap = <State, Creators extends ActionCreatorsMap, Extra = undefined>(
83
+ creators: Creators,
84
+ handlers: {
85
+ [Key in keyof Creators]?: CaseReducer<State, ReturnType<Creators[Key]>, Extra>;
86
+ },
87
+ ): Record<string, CaseReducer<State, ReturnType<Creators[keyof Creators]>, Extra>> => {
88
+ const map: Record<string, CaseReducer<State, ReturnType<Creators[keyof Creators]>, Extra>> = {};
89
+
90
+ (Object.keys(handlers) as Array<keyof Creators>).forEach((key) => {
91
+ const handler = handlers[key];
92
+ if (!handler) {
93
+ return;
94
+ }
95
+ const creator = creators[key];
96
+ if (!creator) {
97
+ throw new Error(`Missing action creator for key "${String(key)}"`);
98
+ }
99
+ map[creator.type] = handler as CaseReducer<State, ReturnType<Creators[keyof Creators]>, Extra>;
100
+ });
101
+
102
+ return map;
103
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @file Vite environment type declarations
3
+ */
4
+ /// <reference types="vite/client" />
5
+
6
+ declare const __APP_VERSION__: string;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @file Window entry point - Floating window and drawer components
3
+ * @packageDocumentation
4
+ *
5
+ * This is a subpath export entry point for `react-panel-layout/window`.
6
+ *
7
+ * ## Overview
8
+ * Window provides floating panels, drawers, and dialog overlays for modal
9
+ * and non-modal UI patterns. Supports draggable windows, slide-in drawers,
10
+ * and popup portals.
11
+ *
12
+ * ## Installation
13
+ * ```ts
14
+ * import { Drawer, FloatingWindow, useDrawerState } from "react-panel-layout/window";
15
+ * ```
16
+ *
17
+ * ## Drawer Usage
18
+ * ```tsx
19
+ * function App() {
20
+ * const [isOpen, setIsOpen] = useState(false);
21
+ *
22
+ * return (
23
+ * <>
24
+ * <button onClick={() => setIsOpen(true)}>Open Drawer</button>
25
+ * <Drawer
26
+ * id="settings"
27
+ * config={{ anchor: 'right', header: { title: 'Settings' } }}
28
+ * isOpen={isOpen}
29
+ * onClose={() => setIsOpen(false)}
30
+ * >
31
+ * <SettingsPanel />
32
+ * </Drawer>
33
+ * </>
34
+ * );
35
+ * }
36
+ * ```
37
+ *
38
+ * ## Floating Window Usage
39
+ * ```tsx
40
+ * <FloatingWindow
41
+ * id="inspector"
42
+ * config={{
43
+ * draggable: true,
44
+ * chrome: true,
45
+ * header: { title: 'Inspector', showCloseButton: true },
46
+ * }}
47
+ * onClose={handleClose}
48
+ * >
49
+ * <InspectorContent />
50
+ * </FloatingWindow>
51
+ * ```
52
+ */
53
+
54
+ // Components
55
+ export { FloatingWindow } from "../components/window/FloatingWindow.js";
56
+ export { Drawer } from "../components/window/Drawer.js";
57
+ export { DrawerLayers } from "../components/window/DrawerLayers.js";
58
+ export { DialogOverlay } from "../components/window/DialogOverlay.js";
59
+ export { PopupLayerPortal } from "../components/window/PopupLayerPortal.js";
60
+
61
+ // Hooks
62
+ export { useFloatingState } from "../modules/window/useFloatingState.js";
63
+ export { useDrawerState } from "../modules/window/useDrawerState.js";
64
+
65
+ // Types
66
+ export type { FloatingWindowProps } from "../components/window/FloatingWindow.js";
67
+ export type { DrawerProps } from "../components/window/Drawer.js";
@@ -1,2 +0,0 @@
1
- "use strict";const g=require("react/jsx-runtime"),Wt=require("react"),_=require("./FloatingPanelFrame-D9Cp2al1.cjs"),v=require("./styles-PsqGOEJP.cjs"),xt=require("./usePivot-7ctin_P_.cjs"),Bt=require("react-dom"),It=require("./useIsomorphicLayoutEffect-DGRNF4Lf.cjs");function Xt(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,o.get?o:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const i=Xt(Wt),Vt=()=>{const t=new Map;return e=>{if(!e)return;const n=t.get(e);if(n!==void 0)return n;const o=t.size;return t.set(e,o),o}},Zt=Vt(),q=new Map,Kt=t=>{const e=`ovs-threshold:${t.threshold}-rootMargin:${t.rootMargin}-root:${Zt(t.root)}`;if(q.has(e))return q.get(e);const n=new class{#t=new Map;#e=new IntersectionObserver(o=>{o.forEach(r=>{const s=this.#t.get(r.target);s&&s(r)})},t);observe(o,r){return this.#t.set(o,r),this.#e.observe(o),()=>{this.#t.delete(o),this.#e.unobserve(o)}}};return q.set(e,n),n},lt=Object.freeze({x:0,y:0,width:0,height:0,top:0,right:0,bottom:0,left:0});function Ut(t,{threshold:e=0,rootMargin:n="0px",root:o=null}){const[r,s]=i.useState(null);return i.useEffect(()=>{const u=t.current;return u?Kt({threshold:e,rootMargin:n,root:o}).observe(u,a=>{s({isIntersecting:a.isIntersecting,boundingClientRect:a.boundingClientRect,intersectionRatio:a.intersectionRatio,intersectionRect:a.intersectionRect,rootBounds:a.rootBounds,target:a.target,time:a.time})}):void 0},[t,e,n,o]),i.useMemo(()=>({isIntersecting:r?.isIntersecting??!1,boundingClientRect:r?.boundingClientRect??lt,intersectionRatio:r?.intersectionRatio??0,intersectionRect:r?.intersectionRect??lt,rootBounds:r?.rootBounds??null,target:r?.target??t.current,time:r?.time??0}),[r,t])}const dt={position:"fixed",inset:0,background:v.COLOR_DRAWER_BACKDROP},qt={willChange:"transform"},ft={left:{top:0,bottom:0,left:0,transform:"translateX(-100%)"},right:{top:0,bottom:0,right:0,transform:"translateX(100%)"},top:{top:0,left:0,right:0,transform:"translateY(-100%)"},bottom:{bottom:0,left:0,right:0,transform:"translateY(100%)"}},Jt=(t,e,n)=>{if(t==="none")return;const o=e??v.DRAWER_TRANSITION_DURATION,r=n??v.DRAWER_TRANSITION_EASING;return`transform ${o} ${r}`},Qt=(t,e)=>t?e:!1,te=({chrome:t,frameStyle:e,header:n,dismissible:o,onClose:r,children:s})=>t?g.jsxs(_.FloatingPanelFrame,{style:e,children:[g.jsx(ee,{header:n,dismissible:o,onClose:r}),g.jsx(_.FloatingPanelContent,{style:{padding:v.DRAWER_CONTENT_PADDING,flex:1,display:"flex",flexDirection:"column"},children:s})]}):g.jsx(g.Fragment,{children:s}),ee=({header:t,dismissible:e,onClose:n})=>{if(!t)return null;const o=t.showCloseButton??!0,r=Qt(e,o);return g.jsx(i.Activity,{mode:t?"visible":"hidden",children:g.jsxs(_.FloatingPanelHeader,{style:{padding:`${v.DRAWER_HEADER_PADDING_Y} ${v.DRAWER_HEADER_PADDING_X}`,gap:v.DRAWER_HEADER_GAP},children:[g.jsx(i.Activity,{mode:t?"visible":"hidden",children:g.jsx(_.FloatingPanelTitle,{children:t.title})}),g.jsx(i.Activity,{mode:r?"visible":"hidden",children:g.jsx(_.FloatingPanelCloseButton,{onClick:n,"aria-label":"Close drawer",style:{marginLeft:"auto"}})})]})})},Pt=({id:t,config:e,isOpen:n,onClose:o,children:r,zIndex:s,width:u,height:c,position:a})=>{const{dismissible:l=!0,header:p,chrome:f=!0,inline:m=!1,transitionMode:w="css",transitionDuration:C,transitionEasing:R}=e,L=i.useCallback((T,x)=>T||(x?x.left!==void 0?"left":x.right!==void 0?"right":x.top!==void 0?"top":x.bottom!==void 0?"bottom":"right":"right"),[])(e.anchor,a),M={left:"translateX(0)",right:"translateX(0)",top:"translateY(0)",bottom:"translateY(0)"},A=i.useMemo(()=>{const T=Jt(w,C,R),x={...qt,...m?{position:"absolute"}:{position:"fixed"},...ft[L],transform:n?M[L]:ft[L].transform,transition:T};return s!==void 0&&(x.zIndex=s),u!==void 0&&(x.width=typeof u=="number"?`${u}px`:u),c!==void 0&&(x.height=typeof c=="number"?`${c}px`:c),x},[c,m,n,L,C,R,w,u,s]),D=p?.title??e.ariaLabel??"Drawer",y=i.useMemo(()=>{const T=m?{...dt,position:"absolute"}:dt,x=w==="none"?void 0:`opacity ${C??"220ms"} ease`;return{...T,opacity:n?1:0,pointerEvents:n?"auto":"none",transition:x,zIndex:s!==void 0?s-1:void 0}},[m,n,C,w,s]),N=i.useMemo(()=>{const T=L==="left"||L==="right",x={borderRadius:0};return T&&(x.height="100%"),x},[L]);return g.jsxs(g.Fragment,{children:[g.jsx("div",{style:y,onClick:l?o:void 0}),g.jsx("div",{"data-layer-id":t,"data-placement":L,style:A,role:"dialog","aria-modal":l?!0:void 0,"aria-hidden":n?void 0:!0,"aria-label":D,children:g.jsx(te,{chrome:f,frameStyle:N,header:p,dismissible:l,onClose:o,children:r})})]})},ne=(t,e)=>new Promise(n=>{let o=!1;const r=()=>{o||(o=!0,t.removeEventListener("transitionend",s),n())},s=u=>{u.target===t&&r()};t.addEventListener("transitionend",s),setTimeout(r,e+50)}),tt=async(t,e,n,o)=>{switch(e){case"none":t();return;case"css":t(),n&&await ne(n,o);return}},oe=t=>{const[e,n]=i.useState({}),o=i.useRef(t);o.current=t;const r=i.useCallback(async(a,l,p)=>{const{mode:f="none",element:m,duration:w=300}=p??{};await tt(()=>{n(P=>P[a]===l?P:{...P,[a]:l})},f,m?.current,w);const R=o.current;l?R?.onOpen?.(a):R?.onClose?.(a),R?.onTransitionEnd?.(a,l)},[]),s=i.useCallback(a=>e[a]??!1,[e]),u=i.useCallback((a,l)=>r(a,!0,l),[r]),c=i.useCallback((a,l)=>r(a,!1,l),[r]);return{state:s,open:u,close:c}},re=t=>{if(!t)return 300;const e=t.match(/(\d+)/);return e?parseInt(e[1],10):300},se=t=>{const[e,n]=i.useState(()=>{const a={};return t.forEach(l=>{l.drawer&&(a[l.id]=l.drawer.defaultOpen??!1)}),a}),o=i.useMemo(()=>{const a=new Map;return t.forEach(l=>a.set(l.id,l)),a},[t]),r=i.useCallback(async(a,l,p)=>{const f=o.get(a);if(!f?.drawer)return;const m=p?.mode??f.drawer.transitionMode??"css",w=p?.duration??re(f.drawer.transitionDuration),C=p?.element?.current;await tt(()=>{f.drawer?.open===void 0&&n(P=>P[a]===l?P:{...P,[a]:l}),f.drawer?.onStateChange?.(l)},m,C,w)},[o]),s=i.useCallback(a=>{const l=o.get(a);return l?.drawer?.open!==void 0?l.drawer.open:e[a]??!1},[o,e]),u=i.useCallback((a,l)=>r(a,!0,l),[r]),c=i.useCallback((a,l)=>r(a,!1,l),[r]);return{state:s,open:u,close:c}},Lt=({layers:t})=>{const e=se(t),n=i.useMemo(()=>t.filter(r=>r.drawer),[t]),o=i.useMemo(()=>{const r=new Map;return n.forEach(s=>{r.set(s.id,()=>e.close(s.id))}),r},[n,e.close]);return g.jsx(g.Fragment,{children:n.map(r=>{if(!r.drawer)return null;const s=e.state(r.id),u=o.get(r.id);return u?g.jsx(Pt,{id:r.id,config:r.drawer,isOpen:s,onClose:u,zIndex:r.zIndex,width:r.width,height:r.height,position:r.position,children:r.component},r.id):null})})},Dt=i.createContext(null),ie=({value:t,children:e})=>g.jsx(Dt.Provider,{value:t,children:e}),et=()=>{const t=i.useContext(Dt);if(!t)throw new Error("useGridLayoutContext must be used within a GridLayoutProvider.");return t},yt=i.createContext(null),Tt=()=>{const t=i.useContext(yt);if(!t)throw new Error("usePanelSystem must be used within a PanelSystemProvider.");return t},ae=({config:t,layers:e,style:n,children:o})=>{const r=i.useMemo(()=>{const l=new Map;return e.forEach(p=>{l.set(p.id,p)}),l},[e]),s=i.useCallback(l=>r.get(l)?.component??null,[r]),u=i.useMemo(()=>e.map(l=>l.id),[e]),{getCachedContent:c}=xt.useContentCache({resolveContent:s,validIds:u}),a=i.useMemo(()=>({config:t,style:n,layers:{defs:e,layerById:r},getCachedContent:c}),[t,n,e,r,c]);return g.jsx(yt.Provider,{value:a,children:o})},_t=i.createContext(null),Mt=({layerId:t,children:e})=>{const n=i.useMemo(()=>({layerId:t}),[t]);return g.jsx(_t.Provider,{value:n,children:e})},ce=()=>{const t=i.useContext(_t);if(!t)throw new Error("useLayerInstance must be used within a LayerInstanceProvider.");return t},gt=(t,e,n)=>{if(typeof t=="number"&&Number.isFinite(t))return t;throw new Error(`Popup layer "${n}" requires a numeric "${e}" value.`)},Ht=(t,e)=>{if(!t)throw new Error(`Popup layer "${e}" must define position (left/top).`);return{left:gt(t.left,"left",e),top:gt(t.top,"top",e)}},Y=t=>`${Math.round(t)}`,F=t=>{if(t!==void 0)return t?"yes":"no"},ue=(t,e,n,o,r)=>{const s={},u=Ht(e,t);if(typeof n!="number"||typeof o!="number")throw new Error(`Popup layer "${t}" requires numeric width/height.`);s.width=Y(n),s.height=Y(o),s.left=Y(u.left),s.top=Y(u.top);const c=r?.features;if(c){const a=F(c.toolbar),l=F(c.menubar),p=F(c.location),f=F(c.status),m=F(c.resizable),w=F(c.scrollbars);a!==void 0&&(s.toolbar=a),l!==void 0&&(s.menubar=l),p!==void 0&&(s.location=p),f!==void 0&&(s.status=f),m!==void 0&&(s.resizable=m),w!==void 0&&(s.scrollbars=w)}return Object.entries(s).map(([a,l])=>`${a}=${l}`).join(",")},pt=(t,e,n,o,r)=>{const s=Ht(n,e);if(typeof o!="number"||typeof r!="number")throw new Error(`Popup layer "${e}" requires numeric width/height.`);t.moveTo(Math.round(s.left),Math.round(s.top)),t.resizeTo(Math.round(o),Math.round(r))},le=({layer:t})=>{const e=t.floating;if(!e)throw new Error(`Layer "${t.id}" is missing floating configuration required for popup mode.`);if((e.mode??"embedded")!=="popup")throw new Error(`PopupLayerPortal received layer "${t.id}" that is not configured for popup mode.`);const o=i.useRef(null),r=i.useRef(null),[s,u]=i.useState(!1);return i.useEffect(()=>{if(typeof window>"u")return;const c=ue(t.id,t.position,t.width,t.height,e.popup),a=e.popup?.name??t.id,l=de(a,c,{position:t.position,size:{width:t.width,height:t.height}},e.popup);if(!l)throw new Error(`Failed to open popup window for layer "${t.id}".`);const p=l;r.current=p,e.popup?.focus!==!1&&p.focus(),p.document.title||(p.document.title=t.id),p.document.body.innerHTML="";const f=p.document.createElement("div");f.dataset.layerId=t.id,p.document.body.appendChild(f),o.current=f,u(!0),pt(p,t.id,t.position,t.width,t.height);const m=()=>{r.current=null,o.current=null,u(!1)};return p.addEventListener("beforeunload",m),()=>{p.removeEventListener("beforeunload",m),e.popup?.closeOnUnmount!==!1&&p.close(),r.current=null,o.current=null,u(!1)}},[e.popup?.closeOnUnmount,e.popup?.features?.location,e.popup?.features?.menubar,e.popup?.features?.resizable,e.popup?.features?.scrollbars,e.popup?.features?.status,e.popup?.features?.toolbar,e.popup?.focus,e.popup?.name,t.id]),i.useEffect(()=>{const c=r.current;c&&pt(c,t.id,t.position,t.width,t.height)},[t.position?.left,t.position?.top,t.height,t.width,t.id]),!s||!o.current?null:Bt.createPortal(g.jsx(Mt,{layerId:t.id,children:t.component}),o.current)},de=(t,e,n,o)=>{const r=o?.createWindow;return r?r({name:t,features:e,bounds:n}):window.open("",t,e)},fe=({onClick:t})=>g.jsx(_.FloatingPanelControls,{children:g.jsx(_.FloatingPanelCloseButton,{onClick:t,"aria-label":"Close window","data-drag-ignore":"true"})}),ge=({header:t,draggable:e,onClose:n})=>{if(!t)return null;const o=t.showCloseButton??!1,r=e?{"data-drag-handle":"true"}:{},s=e?"grab":void 0;return g.jsxs(_.FloatingPanelHeader,{...r,style:{cursor:s},children:[t.title?g.jsx(_.FloatingPanelTitle,{children:t.title}):null,o?g.jsx(fe,{onClick:n}):null]})},pe=({header:t,draggable:e,chrome:n,onClose:o,children:r})=>n?g.jsxs(_.FloatingPanelFrame,{style:{height:"100%",width:"100%"},children:[g.jsx(ge,{header:t,draggable:e,onClose:o}),g.jsx(_.FloatingPanelContent,{style:{flex:1,display:"flex",flexDirection:"column"},children:r})]}):g.jsx(g.Fragment,{children:r}),nt=({id:t,config:e,onClose:n,children:o})=>{const r=e.chrome??!1,s=e.draggable??!1,u=e.header?.title??e.ariaLabel??"Floating window";return g.jsx("div",{"data-floating-window":t,role:"dialog","aria-label":u,style:{height:"100%",width:"100%"},children:g.jsx(pe,{header:e.header,draggable:s,chrome:r,onClose:n,children:o})})};nt.displayName="FloatingWindow";const Nt={position:"absolute",pointerEvents:"auto",boxSizing:"border-box",background:"transparent",border:"none"},he={...Nt,width:v.GRID_LAYER_CORNER_HIT_SIZE,height:v.GRID_LAYER_CORNER_HIT_SIZE,zIndex:2},me={...Nt,zIndex:1},we={"top-left":{top:0,left:0,transform:"translate(-50%, -50%)",cursor:"nwse-resize"},"top-right":{top:0,right:0,transform:"translate(50%, -50%)",cursor:"nesw-resize"},"bottom-left":{bottom:0,left:0,transform:"translate(-50%, 50%)",cursor:"nesw-resize"},"bottom-right":{bottom:0,right:0,transform:"translate(50%, 50%)",cursor:"nwse-resize"}},be={left:{top:v.GRID_LAYER_CORNER_HIT_SIZE,bottom:v.GRID_LAYER_CORNER_HIT_SIZE,left:0,width:v.GRID_LAYER_EDGE_HIT_THICKNESS,transform:"translateX(-50%)",cursor:"ew-resize"},right:{top:v.GRID_LAYER_CORNER_HIT_SIZE,bottom:v.GRID_LAYER_CORNER_HIT_SIZE,right:0,width:v.GRID_LAYER_EDGE_HIT_THICKNESS,transform:"translateX(50%)",cursor:"ew-resize"},top:{left:v.GRID_LAYER_CORNER_HIT_SIZE,right:v.GRID_LAYER_CORNER_HIT_SIZE,top:0,height:v.GRID_LAYER_EDGE_HIT_THICKNESS,transform:"translateY(-50%)",cursor:"ns-resize"},bottom:{left:v.GRID_LAYER_CORNER_HIT_SIZE,right:v.GRID_LAYER_CORNER_HIT_SIZE,bottom:0,height:v.GRID_LAYER_EDGE_HIT_THICKNESS,transform:"translateY(50%)",cursor:"ns-resize"}},Ee=[{key:"top-left",variant:"corner",horizontal:"left",vertical:"top"},{key:"top-right",variant:"corner",horizontal:"right",vertical:"top"},{key:"bottom-left",variant:"corner",horizontal:"left",vertical:"bottom"},{key:"bottom-right",variant:"corner",horizontal:"right",vertical:"bottom"},{key:"left",variant:"edge",horizontal:"left"},{key:"right",variant:"edge",horizontal:"right"},{key:"top",variant:"edge",vertical:"top"},{key:"bottom",variant:"edge",vertical:"bottom"}],ve=({layerId:t,onPointerDown:e})=>g.jsx(g.Fragment,{children:Ee.map(n=>{const o=n.variant==="corner"?he:me,r=n.variant==="corner"?we[n.key]:be[n.key],s={...o,...r},u=n.variant==="corner"?{"data-resize-corner":n.key}:{"data-resize-edge":n.key};return g.jsx("div",{role:"presentation","aria-hidden":"true",style:s,...u,"data-layer-id":t,onPointerDown:c=>e(n,c)},n.key)})}),Se=({pivot:t})=>{const{Outlet:e}=xt.usePivot({items:t.items,activeId:t.activeId,defaultActiveId:t.defaultActiveId,onActiveChange:t.onActiveChange,transitionMode:t.transitionMode});return g.jsx(e,{})},Ce=(t,e)=>t.pivot?g.jsx(Se,{pivot:t.pivot}):t.cache?e(t.id):t.component,At=i.memo(({layer:t,onClose:e})=>{const{getCachedContent:n}=Tt(),o=Ce(t,n);return t.floating?.chrome?g.jsx(nt,{id:t.id,config:t.floating,onClose:e,children:o}):o});At.displayName="LayerContentRenderer";const kt=i.memo(({layerId:t,isResizable:e,onPointerDown:n})=>e?g.jsx(ve,{layerId:t,onPointerDown:n}):null);kt.displayName="LayerResizeHandles";const Re=(t,e)=>t?"auto":e?"visible":"hidden",jt=i.memo(({layer:t,handleLayerPointerDown:e})=>{const{getLayerRenderState:n}=et(),{style:o,isResizable:r,isResizing:s,onResizeHandlePointerDown:u}=n(t),c=i.useMemo(()=>{const p={};return t.gridArea&&(p.gridArea=t.gridArea),t.gridRow&&(p.gridRow=t.gridRow),t.gridColumn&&(p.gridColumn=t.gridColumn),p},[t.gridArea,t.gridRow,t.gridColumn]),a=i.useMemo(()=>{const p=!!t.floating,f=Re(t.scrollable,p),m={...o,...c,minWidth:0,minHeight:0,overflow:f};return r?{...m,position:"relative"}:m},[o,c,r,t.scrollable,t.floating]),l=i.useCallback(()=>{t.floating?.onClose?.()},[t.floating]);return g.jsxs("div",{"data-layer-id":t.id,"data-draggable":!!t.floating?.draggable,"data-resizable":r,"data-resizing":s,style:a,onPointerDown:e,children:[g.jsx(Mt,{layerId:t.id,children:g.jsx(At,{layer:t,onClose:l})}),g.jsx(kt,{layerId:t.id,isResizable:r,onPointerDown:u})]})});jt.displayName="EmbeddedLayer";const ze=({layers:t})=>{const{handleLayerPointerDown:e}=et();return g.jsx(g.Fragment,{children:t.map(n=>{const o=n.floating?.mode??"embedded";return n.floating&&o==="popup"?g.jsx(le,{layer:n},n.id):g.jsx(jt,{layer:n,handleLayerPointerDown:e},n.id)})})};function j(t){const e=i.useRef(t);return e.current=t,i.useCallback((...n)=>{const o=e.current;if(o)return o(...n)},[])}function J(t,e){const n=j(e.onMove),o=j(e.onUp),r=j(e.onCancel);i.useEffect(()=>{if(t)return e.onMove&&document.addEventListener("pointermove",n,{passive:!1}),e.onUp&&document.addEventListener("pointerup",o),e.onCancel&&document.addEventListener("pointercancel",r),()=>{e.onMove&&document.removeEventListener("pointermove",n),e.onUp&&document.removeEventListener("pointerup",o),e.onCancel&&document.removeEventListener("pointercancel",r)}},[t,e.onMove,e.onUp,e.onCancel,n,o,r])}function xe(t,e,n){i.useEffect(()=>{const o=t.current;if(!(!e||!o||n===void 0))return o.setPointerCapture(n),()=>{o.hasPointerCapture&&o.hasPointerCapture(n)&&o.releasePointerCapture(n)}},[t,e,n])}function Ie(t,e,n=["pointerdown","pointermove","pointerup"]){i.useEffect(()=>{const o=t.current;if(!e||!o)return;const r=s=>{s.preventDefault()};return n.forEach(s=>{o.addEventListener(s,r,{passive:!1})}),()=>{n.forEach(s=>{o.removeEventListener(s,r)})}},[t,e,n])}function Pe(t,e,n){const{onMove:o,onUp:r,onCancel:s,pointerId:u,capturePointer:c=!0,preventDefaults:a=!0}=n;J(e,{onMove:o,onUp:r,onCancel:s}),xe(t,e?c:!1,u),Ie(t,e?a:!1)}const Gt=t=>{const e=i.useRef(null),n=i.useRef(null),o=i.useRef(0),[r,s]=i.useState(!1),u=j(f=>{t.onResize?.(f)}),c=i.useCallback(f=>t.axis==="x"?f.clientX:f.clientY,[t.axis]),a=i.useCallback(f=>{f.preventDefault(),e.current=f.currentTarget,n.current=f.pointerId,o.current=c(f),s(!0)},[c]),l=i.useCallback(f=>{const m=c(f),w=m-o.current;w!==0&&(o.current=m,u(w))},[c,u]),p=i.useCallback(()=>{s(!1),n.current=null},[]);return Pe(e,r,{onMove:l,onUp:p,pointerId:n.current??void 0,capturePointer:!0,preventDefaults:!1}),{ref:e,onPointerDown:a,isDragging:r}},Le=({element:t,component:e})=>i.forwardRef(({children:n,...o},r)=>t?i.cloneElement(t,{...o,ref:r},n??t.props.children):e?g.jsx(e,{...o,ref:r,children:n}):g.jsx("div",{...o,ref:r,children:n}));function Ft({element:t,component:e}){return i.useMemo(()=>Le({element:t,component:e}),[e,t])}const De={position:"absolute",zIndex:v.RESIZE_HANDLE_Z_INDEX},ye={vertical:{width:v.RESIZE_HANDLE_THICKNESS,height:"100%",top:0,cursor:"col-resize"},horizontal:{width:"100%",height:v.RESIZE_HANDLE_THICKNESS,left:0,cursor:"row-resize"}},Te={idle:v.COLOR_RESIZE_HANDLE_IDLE,hovered:v.COLOR_RESIZE_HANDLE_HOVER,dragging:v.COLOR_RESIZE_HANDLE_ACTIVE},$t=({direction:t,onResize:e,component:n,element:o,children:r})=>{const s=t==="vertical"?"x":"y",{ref:u,isDragging:c,onPointerDown:a}=Gt({axis:s,onResize:e}),[l,p]=i.useState(!1),f=i.useCallback(()=>{p(!0)},[]),m=i.useCallback(()=>{p(!1)},[]),w=Ft({element:o,component:n}),C=i.useMemo(()=>c?"dragging":l?"hovered":"idle",[c,l]),R=i.useMemo(()=>({...De,...ye[t],backgroundColor:Te[C],touchAction:"none"}),[t,C]);return g.jsx(w,{ref:u,style:R,role:"separator","aria-orientation":t,"aria-hidden":void 0,"data-resize-handle":"true","data-direction":t,"data-is-dragging":c?"true":void 0,onPointerDown:a,onPointerEnter:f,onPointerLeave:m,children:r})},ht={position:"absolute",pointerEvents:"auto"},mt=({direction:t,trackIndex:e,align:n,gap:o,span:r,onResize:s})=>{const u=t==="col"?"vertical":"horizontal",c=i.useCallback(p=>{const f=n==="start"?-p:p;s(t,e,f)},[n,t,e,s]),a=i.useMemo(()=>t==="col"?{gridColumn:`${e+1} / ${e+2}`,gridRow:`${r.start} / ${r.end}`}:{gridRow:`${e+1} / ${e+2}`,gridColumn:`${r.start} / ${r.end}`},[t,e,r]),l=i.useMemo(()=>{const f=Math.max(0,o)/2+v.GRID_HANDLE_THICKNESS/2;return t==="col"?{...ht,width:v.GRID_HANDLE_THICKNESS,height:"100%",top:0,bottom:0,...n==="start"?{left:-f}:{right:-f}}:{...ht,width:"100%",height:v.GRID_HANDLE_THICKNESS,left:0,right:0,...n==="start"?{top:-f}:{bottom:-f}}},[n,t,o]);return g.jsx("div",{"data-resizable":"true",style:{...a,position:"relative",pointerEvents:"none"},children:g.jsx("div",{"data-direction":u,"data-align":n,"data-handle":"true",style:l,children:g.jsx($t,{direction:u,onResize:c})})})},_e=t=>{const e=new Map;t.forEach((o,r)=>{o.forEach((s,u)=>{if(!s||s===".")return;const c=e.get(s);if(c){const l={rowStart:Math.min(c.rowStart,r),rowEnd:Math.max(c.rowEnd,r),colStart:Math.min(c.colStart,u),colEnd:Math.max(c.colEnd,u)};e.set(s,l);return}const a={rowStart:r,rowEnd:r,colStart:u,colEnd:u};e.set(s,a)})});const n=new Map;return e.forEach((o,r)=>{const s=o.rowStart+1,u=o.rowEnd+2,c=o.colStart+1,a=o.colEnd+2,l={gridArea:r,gridRow:`${s} / ${u}`,gridColumn:`${c} / ${a}`};n.set(r,l)}),n},Me=(t,e)=>{if((t.positionMode??"grid")!=="grid")return t;const o=t.gridArea??t.id,r=e.get(o);if(!r)return t;const s=!t.gridArea,u=!t.gridRow,c=!t.gridColumn;return!s&&!u&&!c?t:{...t,gridArea:s?r.gridArea:t.gridArea,gridRow:u?r.gridRow:t.gridRow,gridColumn:c?r.gridColumn:t.gridColumn}},He=(t,e)=>{const n=i.useMemo(()=>_e(t.areas),[t.areas]),o=i.useMemo(()=>e.map(c=>Me(c,n)),[e,n]),r=i.useMemo(()=>o.filter(c=>c.visible!==!1),[o]),s=i.useMemo(()=>r.filter(c=>!c.drawer),[r]),u=i.useMemo(()=>{const c=new Map;return o.forEach(a=>{c.set(a.id,a)}),c},[o]);return{normalizedLayers:o,visibleLayers:r,regularLayers:s,layerById:u}},Ne=t=>{if(!t)return{rowGap:0,columnGap:0};const e=t.split(/\s+/).map(o=>o.trim()).filter(Boolean),n=o=>{const r=o.match(/^(-?\d+(?:\.\d+)?)px$/);return r?Number.parseFloat(r[1]):0};if(e.length===1){const o=n(e[0]);return{rowGap:o,columnGap:o}}return{rowGap:n(e[0]),columnGap:n(e[1])}},Ae=(t,e)=>{if(!t)return[];const n=getComputedStyle(t);return(e==="col"?n.gridTemplateColumns:n.gridTemplateRows).split(/\s+/).map(r=>parseFloat(r)).filter(r=>!Number.isNaN(r))},ot=(t,e=Number.NEGATIVE_INFINITY,n=Number.POSITIVE_INFINITY)=>Math.min(Math.max(t,e),n),ke=(t,e)=>typeof t!="number"||!Number.isFinite(t)?e:t,V=(t,e)=>`${t}-${e}`,je=(t,e,n,o)=>{const r=V(n,o),s=e[r];return s!==void 0?`minmax(${t.minSize??0}px, ${s}px)`:t.size},wt=(t,e,n)=>t.map((o,r)=>je(o,e,n,r)).join(" "),W=(t,e)=>t.reduce((n,o,r)=>(o.resizable&&o.size.endsWith("px")&&(n[V(e,r)]=parseInt(o.size,10)),n),{}),Ge=({trackSizes:t,track:e,direction:n,trackIndex:o,containerRef:r})=>{const s=V(n,o),u=t[s];if(u!==void 0)return u;const a=Ae(r?.current??null,n)[o];return a!==void 0&&a>0?a:e.size.endsWith("px")?Number.parseInt(e.size,10):300},Fe=(t,e)=>t.reduce((n,o,r)=>r===e?n:o.size.includes("fr")?n+100:n+(o.minSize??50),0),$e=({track:t,tracks:e,trackIndex:n,direction:o,containerRef:r,gapSizes:s})=>{if(!r?.current)return t.maxSize;const u=o==="col"?r.current.offsetWidth:r.current.offsetHeight,c=Fe(e,n),a=e.length-1,l=o==="col"?s.columnGap:s.rowGap,p=a*l,f=u-c-p;return t.maxSize!==void 0?Math.min(t.maxSize,f):f},Oe=(t,e,n)=>ot(t,e??Number.NEGATIVE_INFINITY,n??Number.POSITIVE_INFINITY),bt=(t,e)=>{const n=t.length,o=[];for(let u=0;u<n;u++){const c=t[u],a=c[e],l=c[e+1];a!==l&&o.push(u)}if(o.length===0)return{start:1,end:n+1};const r=Math.min(...o),s=Math.max(...o);return{start:r+1,end:s+2}},Et=(t,e)=>{const n=t[e],o=t[e+1],r=n?.length??0,s=[];for(let a=0;a<r;a++){const l=n?.[a],p=o?.[a];l!==p&&s.push(a)}if(s.length===0)return{start:1,end:r+1};const u=Math.min(...s),c=Math.max(...s);return{start:u+1,end:c+2}},Ye=(t,e)=>{if(t.length===0)return[];const n=e.length;if(t.length===1)return t[0]?.resizable?[{trackIndex:0,align:"end",span:{start:1,end:n+1}}]:[];const o=[];return Array.from({length:t.length-1},(s,u)=>u).forEach(s=>{const u=t[s];if(t[s+1]?.resizable){const a=bt(e,s);o.push({trackIndex:s+1,align:"start",span:a});return}if(u?.resizable){const a=bt(e,s);o.push({trackIndex:s,align:"end",span:a})}}),o},We=(t,e)=>{if(t.length===0)return[];const n=e[0]?.length??0;if(t.length===1)return t[0]?.resizable?[{trackIndex:0,align:"end",span:{start:1,end:n+1}}]:[];const o=[];return Array.from({length:t.length-1},(s,u)=>u).forEach(s=>{const u=t[s];if(t[s+1]?.resizable){const a=Et(e,s);o.push({trackIndex:s+1,align:"start",span:a});return}if(u?.resizable){const a=Et(e,s);o.push({trackIndex:s,align:"end",span:a})}}),o},Be=t=>t!==void 0?{gap:t}:{},Xe=(t,e)=>{const n=Object.keys(e),o={};for(const p of n)o[p]=t[p]??e[p];const r=Object.keys(t),s=r.length!==n.length,u=r.some(p=>!Object.prototype.hasOwnProperty.call(o,p)),c=s?!0:u,a=n.some(p=>t[p]!==o[p]);return(c?!0:a)?o:null},Ve=(t,e,n)=>{const[o,r]=i.useState(()=>({...W(t.columns,"col"),...W(t.rows,"row")}));It.useIsomorphicLayoutEffect(()=>{const f={...W(t.columns,"col"),...W(t.rows,"row")};r(m=>Xe(m,f)??m)},[t.columns,t.rows]);const s=i.useMemo(()=>t.areas.map(f=>`"${f.join(" ")}"`).join(" "),[t.areas]),u=i.useMemo(()=>Ne(t.gap),[t.gap]),c=i.useMemo(()=>Ye(t.columns,t.areas),[t.columns,t.areas]),a=i.useMemo(()=>We(t.rows,t.areas),[t.rows,t.areas]),l=i.useMemo(()=>({...t.style,...e,gridTemplateAreas:s,gridTemplateRows:wt(t.rows,o,"row"),gridTemplateColumns:wt(t.columns,o,"col"),...Be(t.gap)}),[s,t.columns,t.gap,t.rows,t.style,e,o]),p=i.useCallback((f,m,w)=>{const C=f==="row"?t.rows:t.columns,R=C[m];if(!R||!R.resizable)return;const P=Ge({trackSizes:o,track:R,direction:f,trackIndex:m,containerRef:n}),L=$e({track:R,tracks:C,trackIndex:m,direction:f,containerRef:n,gapSizes:u}),M=V(f,m);r(A=>{const D=P+w,y=Oe(D,R.minSize,L);return{...A,[M]:y}})},[t.columns,t.rows,o,n,u]);return{columnHandles:c,rowHandles:a,gapSizes:u,gridStyle:l,handleResize:p}},Ze=t=>t.positionMode?t.positionMode:t.floating?(t.floating.mode??"embedded")==="embedded"?"absolute":"relative":"grid",Ke=t=>({position:t==="grid"?"relative":t}),Ue=(t,e)=>e!=="grid"?{}:{gridArea:t.gridArea,gridRow:t.gridRow,gridColumn:t.gridColumn},qe=t=>t?{top:t.top,right:t.right,bottom:t.bottom,left:t.left}:{},Je=t=>t!==void 0?{zIndex:t}:{},Qe=(t,e)=>({width:t,height:e}),tn=(t,e)=>t.pointerEvents!==void 0?typeof t.pointerEvents=="boolean"?{pointerEvents:t.pointerEvents?"auto":"none"}:{pointerEvents:t.pointerEvents}:e==="absolute"||e==="fixed"?{pointerEvents:"auto"}:{},en=t=>t.floating?t.floating.position??t.floating.defaultPosition??t.position:t.position,nn=t=>{if(t.floating){const e=t.floating.size??t.floating.defaultSize;if(e)return{width:e.width,height:e.height}}return{width:t.width,height:t.height}},on=t=>t.floating?.zIndex!==void 0?t.floating.zIndex:t.zIndex,rn=t=>{const e=Ze(t),n=en(t),o=nn(t),r=on(t);return{...t.style,...Ke(e),...Ue(t,e),...qe(n),...Je(r),...Qe(o.width,o.height),...tn(t,e)}},sn=t=>{const e=t.floating;return e?e.mode??"embedded":null},G=t=>sn(t)!=="embedded"?null:t.floating??null,vt=t=>t instanceof HTMLElement?["INPUT","TEXTAREA","SELECT","BUTTON"].includes(t.tagName):!1,St=(t,e,n)=>{const o=e??Number.NEGATIVE_INFINITY,r=n??Number.POSITIVE_INFINITY;return ot(t,o,r)},Ct=(t,e,n)=>{if(typeof t=="number"&&Number.isFinite(t))return t;throw new Error(`Floating layer "${n}" must provide a numeric "${e}" value when draggable mode is enabled.`)},Rt=t=>{const e=G(t);if(!e)throw new Error(`Floating layer "${t.id}" is missing floating configuration required for dragging.`);const n=e.position??e.defaultPosition??t.position;if(!n)throw new Error(`Floating layer "${t.id}" must define position with left and top values.`);return{left:Ct(n.left,"left",t.id),top:Ct(n.top,"top",t.id)}},an=t=>{const e=G(t);return e?e.constraints??{}:{}},cn=(t,e,n)=>t?t==="left"?e-n:e+n:e,un=(t,e,n)=>t?t==="top"?e-n:e+n:e,ln=(t,e,n)=>!t||t==="right"?e:e+n,dn=(t,e,n)=>!t||t==="bottom"?e:e+n,Q=(t,e)=>t?t.dataset.layerId===e?t:Q(t.parentElement,e):null,rt=(t,e,n)=>!t||n?.(t)?null:e(t)?t:rt(t.parentElement,e,n),fn=t=>t instanceof HTMLElement?rt(t,e=>e.dataset.dragHandle==="true",e=>e.dataset.dragIgnore==="true"):null,zt=t=>t instanceof HTMLElement?rt(t,e=>e.dataset.resizeCorner!==void 0||e.dataset.resizeEdge!==void 0)!==null:!1,B=t=>{const e=G(t);return e?e.resizable===!0:!1},X=t=>{if(!G(t))return null;const n=hn(t);if(!n)throw new Error(`Floating layer "${t.id}" must define width and height when resizable or draggable.`);return{width:n.width,height:n.height}},gn=(t,e,n)=>{const o=t.filter(B).reduce((f,m)=>{if(n===m.id){const C=e[m.id];if(C)return f[m.id]=C,f}const w=X(m);return w&&(f[m.id]=w),f},{}),r=Object.keys(e),s=Object.keys(o),u=r.length!==s.length,c=r.some(f=>!Object.prototype.hasOwnProperty.call(o,f)),a=u?!0:c,l=s.some(f=>{const m=e[f],w=o[f];return!m||!w?!0:m.width!==w.width||m.height!==w.height});return{sizes:o,changed:a?!0:l}},pn=({layers:t,layerById:e,isRootLevel:n})=>{const[o,r]=i.useState(null),[s,u]=i.useState(null),[c,a]=i.useState({}),[l,p]=i.useState({}),f=i.useRef(null),m=i.useRef(null),w=j((h,d)=>{e.get(h)?.floating?.onMove?.(d)}),C=j((h,d)=>{e.get(h)?.floating?.onResize?.(d)});It.useIsomorphicLayoutEffect(()=>{const{sizes:h,changed:d}=gn(t,l,s);d&&p(h)},[t,s]);const R=i.useCallback((h,d,b,E)=>{const S=Rt(d),I=c[h]??{x:0,y:0},z={pointerStartX:E.clientX,pointerStartY:E.clientY,initialTranslationX:I.x,initialTranslationY:I.y,baseLeft:S.left,baseTop:S.top,layerId:h,pointerId:E.pointerId,target:b};if(z.target.setPointerCapture)try{z.target.setPointerCapture(z.pointerId)}catch{}f.current=z,r(h)},[c]),P=i.useCallback(h=>{const d=h.target,b=fn(d);if(!b)return;const E=b.closest("[data-layer-id]")?.getAttribute("data-layer-id");if(!E)return;const S=e.get(E);if(!S)return;const I=G(S);if(!(!I||I.draggable!==!0)&&!vt(h.target)&&!zt(h.target)&&b){const z=Q(b,E);if(!z)return;R(E,S,z,h);return}},[R,e]),L=i.useCallback((h,d)=>{const b=e.get(h),E=b?G(b):null;if(!b||!E||E.draggable!==!0||vt(d.target)||zt(d.target))return;const S=Q(d.currentTarget,h);S&&R(h,b,S,d)},[R,e]),M=i.useCallback((h,d,b)=>{const E=e.get(h);if(!E||!B(E))return;const S=l[h]??X(E);if(!S)return;const I=Rt(E),z=an(E),H=c[h]??{x:0,y:0};if(b.stopPropagation(),b.preventDefault(),b.currentTarget.setPointerCapture)try{b.currentTarget.setPointerCapture(b.pointerId)}catch{}m.current={layerId:h,pointerId:b.pointerId,horizontalEdge:d.horizontal,verticalEdge:d.vertical,startX:b.clientX,startY:b.clientY,startWidth:S.width,startHeight:S.height,startPosition:H,baseLeft:I.left,baseTop:I.top,minWidth:z.minWidth,maxWidth:z.maxWidth,minHeight:z.minHeight,maxHeight:z.maxHeight,target:b.currentTarget},u(h)},[e,c,l]),A=i.useCallback(h=>{const d=f.current;if(!d)return;const b=h.clientX-d.pointerStartX,E=h.clientY-d.pointerStartY,S={x:d.initialTranslationX+b,y:d.initialTranslationY+E};a(I=>({...I,[d.layerId]:S})),w(d.layerId,{left:d.baseLeft+S.x,top:d.baseTop+S.y})},[w]),D=i.useCallback(h=>{const d=m.current;if(!d||d.pointerId!==h.pointerId||!e.get(d.layerId))return;const E=h.clientX-d.startX,S=h.clientY-d.startY,I=cn(d.horizontalEdge,d.startWidth,E),z=un(d.verticalEdge,d.startHeight,S),H=St(I,d.minWidth,d.maxWidth),k=St(z,d.minHeight,d.maxHeight),$=d.startWidth-H,Z=d.startHeight-k,at=ln(d.horizontalEdge,d.startPosition.x,$),Yt=dn(d.verticalEdge,d.startPosition.y,Z),K=l[d.layerId],ct={width:H,height:k};(!K||K.width!==H||K.height!==k)&&(p(U=>({...U,[d.layerId]:ct})),C(d.layerId,ct));const ut=c[d.layerId]??{x:0,y:0},O={x:at,y:Yt};(ut.x!==O.x||ut.y!==O.y)&&(a(U=>({...U,[d.layerId]:O})),w(d.layerId,{left:d.baseLeft+O.x,top:d.baseTop+O.y}))},[e,c,l,w,C]),y=i.useCallback(h=>{const d=f.current;if(d){if(d.pointerId===h.pointerId&&d.target.releasePointerCapture)try{d.target.releasePointerCapture(d.pointerId)}catch{}f.current=null}r(null)},[]),N=i.useCallback(h=>{const d=m.current;if(d){if(d.pointerId===h.pointerId&&d.target.releasePointerCapture)try{d.target.releasePointerCapture(d.pointerId)}catch{}m.current=null}u(null)},[]);J(o!==null,{onMove:A,onUp:y,onCancel:y}),J(s!==null,{onMove:D,onUp:N,onCancel:N});const T=i.useCallback(h=>{const d=rn(h),b=G(h);if(!b||b.draggable!==!0)return d;const E=c[h.id],S=o===h.id,I=s===h.id,z=E?{transform:`translate(${E.x}px, ${E.y}px)`}:{},H=l[h.id],k=B(h)?X(h):null,$=H??k,Z=$?{width:`${$.width}px`,height:`${$.height}px`}:{};return{...d,...Z,...z,...S||I?{cursor:"grabbing"}:{}}},[o,c,l,s]),x=i.useCallback(h=>{if(!B(h))return{isResizable:!1};const b=l[h.id],E=X(h);return(b??E)!==null?{isResizable:!0,onPointerDown:(H,k)=>{M(h.id,H,k)}}:{isResizable:!1}},[M,l]),st=i.useCallback(h=>{const{isResizable:d,onPointerDown:b}=x(h),E=T(h),S=s===h.id;return{style:E,isResizable:d,isResizing:S,onResizeHandlePointerDown:(I,z)=>{b&&b(I,z)}}},[T,x,s]),it=i.useCallback(h=>({"data-drag-handle":"true",role:"button","aria-roledescription":"Drag handle","aria-label":"Drag layer",onPointerDown:d=>{L(h,d)}}),[L]);return{providerValue:i.useMemo(()=>({handleLayerPointerDown:P,getLayerRenderState:st,getLayerHandleProps:it,isRootLevel:n}),[it,st,P,n]),draggingLayerId:o,resizingLayerId:s}},hn=t=>{if(t.floating){const e=t.floating.size??t.floating.defaultSize;if(e)return{width:e.width,height:e.height}}if(typeof t.width=="number"&&typeof t.height=="number")return{width:t.width,height:t.height}},Ot={display:"grid",width:"100%",height:"100%",overflow:"hidden"},mn={touchAction:"none",WebkitTouchCallout:"none",WebkitUserSelect:"none",userSelect:"none"},wn={...Ot,overflow:"visible",height:"auto",minHeight:"100%"},bn=t=>t?wn:Ot,En=({config:t,layers:e,style:n,root:o=!1})=>{const r=i.useRef(null),{isIntersecting:s}=Ut(r,{threshold:0});return g.jsx(ae,{config:t,layers:e,style:n,children:g.jsx(vn,{gridRef:r,isIntersecting:s,isRoot:o})})},vn=({gridRef:t,isIntersecting:e,isRoot:n})=>{const{config:o,style:r,layers:s}=Tt(),{normalizedLayers:u,visibleLayers:c,regularLayers:a,layerById:l}=He(o,s.defs),{columnHandles:p,rowHandles:f,gapSizes:m,gridStyle:w,handleResize:C}=Ve(o,r,t),{providerValue:R,draggingLayerId:P,resizingLayerId:L}=pn({layers:u,layerById:l,isRootLevel:n}),M=P?!0:!!L,A=i.useMemo(()=>({...bn(n),...w,...M?mn:{}}),[w,M,n]);return g.jsxs(g.Fragment,{children:[g.jsxs("div",{ref:t,style:A,"data-dragging":!!P,"data-resizing":!!L,"data-visible":e,children:[g.jsx(ie,{value:R,children:g.jsx(ze,{layers:a})}),p.map(({trackIndex:D,align:y,span:N})=>g.jsx(mt,{direction:"col",trackIndex:D,align:y,gap:m.columnGap,span:N,onResize:C},`col-${D}:${y}`)),f.map(({trackIndex:D,align:y,span:N})=>g.jsx(mt,{direction:"row",trackIndex:D,align:y,gap:m.rowGap,span:N,onResize:C},`row-${D}:${y}`))]}),g.jsx(Lt,{layers:c})]})};exports.Drawer=Pt;exports.DrawerLayers=Lt;exports.FloatingWindow=nt;exports.GridLayout=En;exports.ResizeHandle=$t;exports.clampNumber=ot;exports.runTransition=tt;exports.toFiniteNumberOr=ke;exports.useEffectEvent=j;exports.useElementComponentWrapper=Ft;exports.useGridLayoutContext=et;exports.useLayerInstance=ce;exports.useResizeDrag=Gt;exports.useTransitionState=oe;
2
- //# sourceMappingURL=GridLayout-BQQ63eA1.cjs.map