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,321 @@
1
+ /**
2
+ * @file CSSMatrix - Immutable 4x4 matrix for CSS 3D transforms
3
+ *
4
+ * Each operation returns a new instance, preserving the original matrix.
5
+ *
6
+ * @example
7
+ * const mtrx = matrix().translate(0, 10);
8
+ * const a = mtrx.rotateX(Math.PI / 2);
9
+ * const b = mtrx.rotateY(Math.PI);
10
+ * // a and b are independent transformations from mtrx
11
+ */
12
+
13
+ /**
14
+ * Matrix type with transformation methods
15
+ */
16
+ export type CSSMatrix = {
17
+ readonly translate: (x?: number, y?: number, z?: number) => CSSMatrix;
18
+ readonly translate3d: (x: number, y: number, z: number) => CSSMatrix;
19
+ readonly translateX: (x: number) => CSSMatrix;
20
+ readonly translateY: (y: number) => CSSMatrix;
21
+ readonly translateZ: (z: number) => CSSMatrix;
22
+ readonly scale: (x?: number, y?: number, z?: number) => CSSMatrix;
23
+ readonly scale3d: (x: number, y: number, z: number) => CSSMatrix;
24
+ readonly scaleX: (x: number) => CSSMatrix;
25
+ readonly scaleY: (y: number) => CSSMatrix;
26
+ readonly scaleZ: (z: number) => CSSMatrix;
27
+ readonly rotateX: (angle: number) => CSSMatrix;
28
+ readonly rotateY: (angle: number) => CSSMatrix;
29
+ readonly rotateZ: (angle: number) => CSSMatrix;
30
+ readonly rotate: (angle: number, x: number, y: number, z: number) => CSSMatrix;
31
+ readonly rotate3d: (x: number, y: number, z: number, angle: number) => CSSMatrix;
32
+ readonly skew: (angleX?: number, angleY?: number) => CSSMatrix;
33
+ readonly skewX: (angle: number) => CSSMatrix;
34
+ readonly skewY: (angle: number) => CSSMatrix;
35
+ readonly perspective: (distance: number) => CSSMatrix;
36
+ readonly toCSS: () => string;
37
+ readonly toArray: () => readonly number[];
38
+ readonly toString: () => string;
39
+ };
40
+
41
+ /**
42
+ * Multiply two 4x4 matrices (a * b)
43
+ * Matrices are in column-major order
44
+ */
45
+ const multiplyMatrices = (a: readonly number[], b: readonly number[]): number[] => {
46
+ const result = new Array(16);
47
+
48
+ for (let col = 0; col < 4; col++) {
49
+ for (let row = 0; row < 4; row++) {
50
+ result[col * 4 + row] =
51
+ a[0 * 4 + row] * b[col * 4 + 0] +
52
+ a[1 * 4 + row] * b[col * 4 + 1] +
53
+ a[2 * 4 + row] * b[col * 4 + 2] +
54
+ a[3 * 4 + row] * b[col * 4 + 3];
55
+ }
56
+ }
57
+
58
+ return result;
59
+ };
60
+
61
+ /**
62
+ * Create a CSSMatrix object from raw values
63
+ * Values are stored in column-major order (OpenGL/CSS convention)
64
+ */
65
+ const createMatrix = (values: readonly number[]): CSSMatrix => {
66
+ if (values.length !== 16) {
67
+ throw new Error('Matrix must have exactly 16 values');
68
+ }
69
+
70
+ // Freeze the values to ensure immutability
71
+ const m = Object.freeze([...values]);
72
+
73
+ /**
74
+ * Helper to create a new matrix by multiplying with a transform matrix
75
+ */
76
+ const applyTransform = (transformValues: number[]): CSSMatrix => {
77
+ const result = multiplyMatrices(m, transformValues);
78
+ return createMatrix(result);
79
+ };
80
+
81
+ return Object.freeze({
82
+ translate: (x = 0, y = 0, z = 0) => {
83
+ return applyTransform([
84
+ 1, 0, 0, 0,
85
+ 0, 1, 0, 0,
86
+ 0, 0, 1, 0,
87
+ x, y, z, 1,
88
+ ]);
89
+ },
90
+
91
+ translate3d: (x, y, z) => {
92
+ return applyTransform([
93
+ 1, 0, 0, 0,
94
+ 0, 1, 0, 0,
95
+ 0, 0, 1, 0,
96
+ x, y, z, 1,
97
+ ]);
98
+ },
99
+
100
+ translateX: (x) => {
101
+ return applyTransform([
102
+ 1, 0, 0, 0,
103
+ 0, 1, 0, 0,
104
+ 0, 0, 1, 0,
105
+ x, 0, 0, 1,
106
+ ]);
107
+ },
108
+
109
+ translateY: (y) => {
110
+ return applyTransform([
111
+ 1, 0, 0, 0,
112
+ 0, 1, 0, 0,
113
+ 0, 0, 1, 0,
114
+ 0, y, 0, 1,
115
+ ]);
116
+ },
117
+
118
+ translateZ: (z) => {
119
+ return applyTransform([
120
+ 1, 0, 0, 0,
121
+ 0, 1, 0, 0,
122
+ 0, 0, 1, 0,
123
+ 0, 0, z, 1,
124
+ ]);
125
+ },
126
+
127
+ scale: (x = 1, y = 1, z = 1) => {
128
+ return applyTransform([
129
+ x, 0, 0, 0,
130
+ 0, y, 0, 0,
131
+ 0, 0, z, 0,
132
+ 0, 0, 0, 1,
133
+ ]);
134
+ },
135
+
136
+ scale3d: (x, y, z) => {
137
+ return applyTransform([
138
+ x, 0, 0, 0,
139
+ 0, y, 0, 0,
140
+ 0, 0, z, 0,
141
+ 0, 0, 0, 1,
142
+ ]);
143
+ },
144
+
145
+ scaleX: (x) => {
146
+ return applyTransform([
147
+ x, 0, 0, 0,
148
+ 0, 1, 0, 0,
149
+ 0, 0, 1, 0,
150
+ 0, 0, 0, 1,
151
+ ]);
152
+ },
153
+
154
+ scaleY: (y) => {
155
+ return applyTransform([
156
+ 1, 0, 0, 0,
157
+ 0, y, 0, 0,
158
+ 0, 0, 1, 0,
159
+ 0, 0, 0, 1,
160
+ ]);
161
+ },
162
+
163
+ scaleZ: (z) => {
164
+ return applyTransform([
165
+ 1, 0, 0, 0,
166
+ 0, 1, 0, 0,
167
+ 0, 0, z, 0,
168
+ 0, 0, 0, 1,
169
+ ]);
170
+ },
171
+
172
+ rotateX: (angle) => {
173
+ const c = Math.cos(angle);
174
+ const s = Math.sin(angle);
175
+ return applyTransform([
176
+ 1, 0, 0, 0,
177
+ 0, c, s, 0,
178
+ 0, -s, c, 0,
179
+ 0, 0, 0, 1,
180
+ ]);
181
+ },
182
+
183
+ rotateY: (angle) => {
184
+ const c = Math.cos(angle);
185
+ const s = Math.sin(angle);
186
+ return applyTransform([
187
+ c, 0, -s, 0,
188
+ 0, 1, 0, 0,
189
+ s, 0, c, 0,
190
+ 0, 0, 0, 1,
191
+ ]);
192
+ },
193
+
194
+ rotateZ: (angle) => {
195
+ const c = Math.cos(angle);
196
+ const s = Math.sin(angle);
197
+ return applyTransform([
198
+ c, s, 0, 0,
199
+ -s, c, 0, 0,
200
+ 0, 0, 1, 0,
201
+ 0, 0, 0, 1,
202
+ ]);
203
+ },
204
+
205
+ rotate: (angle, x, y, z) => {
206
+ // Normalize the axis
207
+ const len = Math.sqrt(x * x + y * y + z * z);
208
+ if (len === 0) {
209
+ return createMatrix(m);
210
+ }
211
+
212
+ x /= len;
213
+ y /= len;
214
+ z /= len;
215
+
216
+ const c = Math.cos(angle);
217
+ const s = Math.sin(angle);
218
+ const t = 1 - c;
219
+
220
+ return applyTransform([
221
+ t * x * x + c, t * x * y + s * z, t * x * z - s * y, 0,
222
+ t * x * y - s * z, t * y * y + c, t * y * z + s * x, 0,
223
+ t * x * z + s * y, t * y * z - s * x, t * z * z + c, 0,
224
+ 0, 0, 0, 1,
225
+ ]);
226
+ },
227
+
228
+ rotate3d: (x, y, z, angle) => {
229
+ // Normalize the axis
230
+ const len = Math.sqrt(x * x + y * y + z * z);
231
+ if (len === 0) {
232
+ return createMatrix(m);
233
+ }
234
+
235
+ x /= len;
236
+ y /= len;
237
+ z /= len;
238
+
239
+ const c = Math.cos(angle);
240
+ const s = Math.sin(angle);
241
+ const t = 1 - c;
242
+
243
+ return applyTransform([
244
+ t * x * x + c, t * x * y + s * z, t * x * z - s * y, 0,
245
+ t * x * y - s * z, t * y * y + c, t * y * z + s * x, 0,
246
+ t * x * z + s * y, t * y * z - s * x, t * z * z + c, 0,
247
+ 0, 0, 0, 1,
248
+ ]);
249
+ },
250
+
251
+ skew: (angleX = 0, angleY = 0) => {
252
+ const tanX = Math.tan(angleX);
253
+ const tanY = Math.tan(angleY);
254
+ return applyTransform([
255
+ 1, tanY, 0, 0,
256
+ tanX, 1, 0, 0,
257
+ 0, 0, 1, 0,
258
+ 0, 0, 0, 1,
259
+ ]);
260
+ },
261
+
262
+ skewX: (angle) => {
263
+ const tanX = Math.tan(angle);
264
+ return applyTransform([
265
+ 1, 0, 0, 0,
266
+ tanX, 1, 0, 0,
267
+ 0, 0, 1, 0,
268
+ 0, 0, 0, 1,
269
+ ]);
270
+ },
271
+
272
+ skewY: (angle) => {
273
+ const tanY = Math.tan(angle);
274
+ return applyTransform([
275
+ 1, tanY, 0, 0,
276
+ 0, 1, 0, 0,
277
+ 0, 0, 1, 0,
278
+ 0, 0, 0, 1,
279
+ ]);
280
+ },
281
+
282
+ perspective: (distance) => {
283
+ if (distance === 0) {
284
+ throw new Error('Perspective distance cannot be zero');
285
+ }
286
+ return applyTransform([
287
+ 1, 0, 0, 0,
288
+ 0, 1, 0, 0,
289
+ 0, 0, 1, -1 / distance,
290
+ 0, 0, 0, 1,
291
+ ]);
292
+ },
293
+
294
+ toCSS: () => {
295
+ return `matrix3d(${m.join(', ')})`;
296
+ },
297
+
298
+ toArray: () => m,
299
+
300
+ toString: () => {
301
+ return [
302
+ `[${m[0]}, ${m[4]}, ${m[8]}, ${m[12]}]`,
303
+ `[${m[1]}, ${m[5]}, ${m[9]}, ${m[13]}]`,
304
+ `[${m[2]}, ${m[6]}, ${m[10]}, ${m[14]}]`,
305
+ `[${m[3]}, ${m[7]}, ${m[11]}, ${m[15]}]`,
306
+ ].join('\n');
307
+ },
308
+ });
309
+ };
310
+
311
+ /**
312
+ * Factory function to create a new identity matrix
313
+ */
314
+ export const matrix = (): CSSMatrix => {
315
+ return createMatrix([
316
+ 1, 0, 0, 0,
317
+ 0, 1, 0, 0,
318
+ 0, 0, 1, 0,
319
+ 0, 0, 0, 1,
320
+ ]);
321
+ };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @file Generic CSS parsing and measurement utilities.
3
+ */
4
+
5
+ export type ParsedGap = {
6
+ rowGap: number;
7
+ columnGap: number;
8
+ };
9
+
10
+ /**
11
+ * Parses a CSS gap value string into row and column gap numbers.
12
+ * Supports single value (applied to both) or two values (row column).
13
+ * Only handles px units; other units return 0.
14
+ */
15
+ export const parseGapValue = (gapValue?: string): ParsedGap => {
16
+ if (!gapValue) {
17
+ return { rowGap: 0, columnGap: 0 };
18
+ }
19
+
20
+ const tokens = gapValue
21
+ .split(/\s+/)
22
+ .map((token) => token.trim())
23
+ .filter(Boolean);
24
+
25
+ const parseToken = (token: string): number => {
26
+ const match = token.match(/^(-?\d+(?:\.\d+)?)px$/);
27
+ if (!match) {
28
+ return 0;
29
+ }
30
+ return Number.parseFloat(match[1]);
31
+ };
32
+
33
+ if (tokens.length === 1) {
34
+ const parsed = parseToken(tokens[0]);
35
+ return { rowGap: parsed, columnGap: parsed };
36
+ }
37
+
38
+ return {
39
+ rowGap: parseToken(tokens[0]),
40
+ columnGap: parseToken(tokens[1]),
41
+ };
42
+ };
43
+
44
+ export type GridDirection = "col" | "row";
45
+
46
+ /**
47
+ * Measures actual rendered grid track sizes from computed style.
48
+ * Returns pixel values parsed from gridTemplateColumns or gridTemplateRows.
49
+ */
50
+ export const measureGridTrackSizes = (
51
+ containerEl: HTMLElement | null,
52
+ direction: GridDirection,
53
+ ): number[] => {
54
+ if (!containerEl) {
55
+ return [];
56
+ }
57
+ const style = getComputedStyle(containerEl);
58
+ const template = direction === "col" ? style.gridTemplateColumns : style.gridTemplateRows;
59
+
60
+ // Computed style returns resolved pixel values like "370px 500px"
61
+ return template
62
+ .split(/\s+/)
63
+ .map((s) => parseFloat(s))
64
+ .filter((n) => !Number.isNaN(n));
65
+ };
@@ -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,69 @@
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
+ export { SwipeSafeZone } from "../components/gesture/SwipeSafeZone.js";
61
+
62
+ // Hooks
63
+ export { useFloatingState } from "../modules/window/useFloatingState.js";
64
+ export { useDrawerState } from "../modules/window/useDrawerState.js";
65
+
66
+ // Types
67
+ export type { FloatingWindowProps } from "../components/window/FloatingWindow.js";
68
+ export type { DrawerProps } from "../components/window/Drawer.js";
69
+ export type { SwipeSafeZoneProps } from "../components/gesture/SwipeSafeZone.js";