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
package/dist/stack.js ADDED
@@ -0,0 +1,721 @@
1
+ import { jsx as P, Fragment as j, jsxs as q } from "react/jsx-runtime";
2
+ import * as r from "react";
3
+ import { S as J, s as Q, t as Z, u as z } from "./styles-NkjuMOVS.js";
4
+ import { u as ee } from "./useIsomorphicLayoutEffect-DhmEnmZ_.js";
5
+ import { u as te } from "./useContentCache-CO3LYNmz.js";
6
+ import { u as ne, a as re, m as se, I as ie } from "./useNativeGestureGuard-CGYo6O0r.js";
7
+ function ce(t) {
8
+ const { wasActive: e, isActive: n, transitionMode: i } = t;
9
+ return i !== "css" || e === n ? null : n ? "push" : "pop";
10
+ }
11
+ function oe(t) {
12
+ const {
13
+ displayMode: e,
14
+ depth: n,
15
+ navigationDepth: i,
16
+ isActive: o,
17
+ isAnimatingOut: c,
18
+ isRevealing: u,
19
+ revealDepth: s
20
+ } = t;
21
+ return e === "overlay" ? o || c || u && n === s ? "visible" : "hidden" : n <= i || c ? "visible" : "hidden";
22
+ }
23
+ function ae(t) {
24
+ const { depth: e, activeDepth: n, displayMode: i, isRevealing: o, revealDepth: c } = t, u = e === n, s = e < n;
25
+ if (o && u && c !== null)
26
+ return `translateX(${0.3 * 100}%)`;
27
+ if (u)
28
+ return "translateX(0)";
29
+ if (s)
30
+ switch (i) {
31
+ case "overlay":
32
+ return "translateX(0)";
33
+ case "slide":
34
+ return "translateX(-30%)";
35
+ case "stack": {
36
+ const l = (n - e) * -5, f = 1 - (n - e) * 0.05;
37
+ return `translateX(${l}%) scale(${f})`;
38
+ }
39
+ }
40
+ return "translateX(100%)";
41
+ }
42
+ function ue(t, e, n) {
43
+ return e === void 0 || e <= 0 || !n ? t : `translateX(${e * 100}%)`;
44
+ }
45
+ function le(t) {
46
+ if (t === "css")
47
+ return `transform ${J} ${Q}`;
48
+ }
49
+ function fe(t) {
50
+ const {
51
+ depth: e,
52
+ isActive: n,
53
+ wasActive: i,
54
+ currentAnimationType: o,
55
+ displayMode: c,
56
+ transitionMode: u,
57
+ navigationState: s,
58
+ swipeProgress: l
59
+ } = t, m = ce({
60
+ wasActive: i,
61
+ isActive: n,
62
+ transitionMode: u
63
+ }) ?? o, v = m === "pop", a = oe({
64
+ displayMode: c,
65
+ depth: e,
66
+ navigationDepth: s.depth,
67
+ isActive: n,
68
+ isAnimatingOut: v,
69
+ isRevealing: s.isRevealing,
70
+ revealDepth: s.revealDepth
71
+ }), g = ae({
72
+ depth: e,
73
+ activeDepth: s.depth,
74
+ displayMode: c,
75
+ isRevealing: s.isRevealing,
76
+ revealDepth: s.revealDepth
77
+ }), R = ue(g, l, n), A = (() => {
78
+ if (u === "css") {
79
+ if (m === "push")
80
+ return Z;
81
+ if (m === "pop")
82
+ return z;
83
+ }
84
+ })(), d = le(u);
85
+ return {
86
+ nextAnimationType: m,
87
+ visibility: a,
88
+ transform: R,
89
+ animation: A,
90
+ transition: d,
91
+ zIndex: e,
92
+ pointerEvents: n ? "auto" : "none"
93
+ };
94
+ }
95
+ const pe = {
96
+ position: "absolute",
97
+ inset: 0,
98
+ width: "100%",
99
+ height: "100%"
100
+ }, de = r.memo(
101
+ ({ id: t, depth: e, isActive: n, displayMode: i, transitionMode: o, navigationState: c, swipeProgress: u, children: s }) => {
102
+ const l = r.useRef(null), f = r.useRef(n), [m, v] = r.useState(null), a = fe({
103
+ depth: e,
104
+ isActive: n,
105
+ wasActive: f.current,
106
+ currentAnimationType: m,
107
+ displayMode: i,
108
+ transitionMode: o,
109
+ navigationState: c,
110
+ swipeProgress: u
111
+ });
112
+ ee(() => {
113
+ const d = f.current;
114
+ f.current = n, d !== n && v(a.nextAnimationType);
115
+ }, [n, a.nextAnimationType]);
116
+ const g = r.useCallback((d) => {
117
+ d.target === d.currentTarget && v(null);
118
+ }, []), R = r.useMemo(() => {
119
+ const d = {
120
+ ...pe,
121
+ transform: a.transform,
122
+ pointerEvents: a.pointerEvents,
123
+ zIndex: a.zIndex,
124
+ visibility: a.visibility
125
+ };
126
+ return a.animation !== void 0 && (d.animation = a.animation), a.transition !== void 0 && (d.transition = a.transition), d;
127
+ }, [
128
+ a.transform,
129
+ a.pointerEvents,
130
+ a.zIndex,
131
+ a.visibility,
132
+ a.animation,
133
+ a.transition
134
+ ]), A = /* @__PURE__ */ P(
135
+ "div",
136
+ {
137
+ ref: l,
138
+ "data-stack-content": t,
139
+ "data-depth": e,
140
+ "data-active": n ? "true" : "false",
141
+ style: R,
142
+ onAnimationEnd: g,
143
+ children: s
144
+ }
145
+ );
146
+ return o === "none" ? /* @__PURE__ */ P(r.Activity, { mode: n ? "visible" : "hidden", children: A }) : A;
147
+ }
148
+ );
149
+ function me(t, e) {
150
+ switch (e.type) {
151
+ case "push":
152
+ return [...t, e.id];
153
+ case "go": {
154
+ if (e.direction >= 0)
155
+ return t;
156
+ const i = t.length - 1 + e.direction;
157
+ return i < 0 ? t : t.slice(0, i + 1);
158
+ }
159
+ case "move":
160
+ return e.targetDepth < 0 || e.targetDepth >= t.length ? t : t.slice(0, e.targetDepth + 1);
161
+ case "replace":
162
+ return t.length === 0 ? [e.id] : [...t.slice(0, -1), e.id];
163
+ }
164
+ }
165
+ const G = r.createContext(null), he = r.memo(() => {
166
+ const t = r.useContext(G);
167
+ if (!t)
168
+ throw new Error("StackOutlet must be used within useStackNavigation");
169
+ const [, e] = r.useReducer((s) => s + 1, 0);
170
+ r.useEffect(() => t.subscribe(e), [t]);
171
+ const { panels: n, navigationState: i, displayMode: o, transitionMode: c } = t.getState(), u = r.useMemo(() => i.stack.map((s, l) => {
172
+ const f = n.find((m) => m.id === s);
173
+ return f ? { panel: f, depth: l } : null;
174
+ }).filter((s) => s !== null), [i.stack, n]);
175
+ return /* @__PURE__ */ P(j, { children: u.map(({ panel: s, depth: l }) => /* @__PURE__ */ P(
176
+ de,
177
+ {
178
+ id: s.id,
179
+ depth: l,
180
+ isActive: l === i.depth,
181
+ displayMode: o,
182
+ transitionMode: c,
183
+ navigationState: i,
184
+ children: s.cache ? t.getCachedContent(s.id) : s.content
185
+ },
186
+ s.id
187
+ )) });
188
+ });
189
+ function Ve(t) {
190
+ const {
191
+ panels: e,
192
+ initialPanelId: n,
193
+ displayMode: i,
194
+ transitionMode: o = "css",
195
+ onPanelChange: c
196
+ } = t, u = n ?? e[0]?.id;
197
+ if (!u)
198
+ throw new Error("useStackNavigation: No panels provided");
199
+ const [s, l] = r.useReducer(
200
+ me,
201
+ [u]
202
+ ), f = r.useRef(s);
203
+ f.current = s;
204
+ const m = r.useRef(s);
205
+ r.useEffect(() => {
206
+ const p = m.current;
207
+ if (m.current = s, c && s !== p) {
208
+ const C = s.length - 1, b = s[C];
209
+ b !== void 0 && c(b, C);
210
+ }
211
+ }, [s, c]);
212
+ const [v, a] = r.useState({ isRevealing: !1, revealDepth: null }), g = s.length - 1, R = r.useMemo(() => ({
213
+ stack: s,
214
+ depth: g,
215
+ isRevealing: v.isRevealing,
216
+ revealDepth: v.revealDepth
217
+ }), [s, g, v.isRevealing, v.revealDepth]), A = s[g], d = g > 0 ? s[g - 1] : null, h = r.useCallback((p) => {
218
+ e.find((b) => b.id === p) && l({ type: "push", id: p });
219
+ }, [e]), y = r.useCallback((p) => {
220
+ l({ type: "go", direction: p });
221
+ }, []), k = r.useCallback((p) => {
222
+ l({ type: "move", targetDepth: p });
223
+ }, []), M = r.useCallback((p) => {
224
+ e.find((b) => b.id === p) && l({ type: "replace", id: p });
225
+ }, [e]), w = r.useCallback((p) => p >= 0 ? !1 : f.current.length - 1 + p >= 0, []), _ = r.useCallback((p) => {
226
+ const C = f.current.length - 1, b = p ?? C - 1;
227
+ b < 0 || b >= C || a({ isRevealing: !0, revealDepth: b });
228
+ }, []), F = r.useCallback(() => {
229
+ f.current.length - 1 !== 0 && a({ isRevealing: !0, revealDepth: 0 });
230
+ }, []), x = r.useCallback(() => {
231
+ a({ isRevealing: !1, revealDepth: null });
232
+ }, []), N = r.useCallback((p) => {
233
+ const C = f.current, b = C.indexOf(p), X = C.length - 1, L = b === X;
234
+ return {
235
+ "data-stack-panel": p,
236
+ "data-depth": b,
237
+ "data-active": L ? "true" : "false",
238
+ "aria-hidden": !L
239
+ };
240
+ }, []), T = r.useCallback(() => {
241
+ const p = f.current, C = p.length - 1, b = C > 0, X = C > 0 ? p[C - 1] : null, L = X ? e.find((Y) => Y.id === X) : null, H = L?.title ? `Back to ${L.title}` : "Go back";
242
+ return {
243
+ onClick: () => y(-1),
244
+ disabled: !b,
245
+ "aria-label": H
246
+ };
247
+ }, [e, y]), D = r.useMemo(
248
+ () => ({
249
+ position: "relative",
250
+ width: "100%",
251
+ height: "100%",
252
+ overflow: "hidden"
253
+ }),
254
+ []
255
+ ), I = r.useRef({
256
+ panels: e,
257
+ navigationState: R,
258
+ displayMode: i,
259
+ transitionMode: o
260
+ });
261
+ I.current = {
262
+ panels: e,
263
+ navigationState: R,
264
+ displayMode: i,
265
+ transitionMode: o
266
+ };
267
+ const E = r.useRef(/* @__PURE__ */ new Set());
268
+ r.useEffect(() => {
269
+ E.current.forEach((p) => p());
270
+ }, [R, i, o]);
271
+ const U = r.useCallback(
272
+ (p) => I.current.panels.find((b) => b.id === p)?.content ?? null,
273
+ []
274
+ ), S = r.useMemo(() => e.map((p) => p.id), [e]), { getCachedContent: O } = te({
275
+ resolveContent: U,
276
+ validIds: S
277
+ }), $ = r.useMemo(
278
+ () => ({
279
+ getState: () => I.current,
280
+ subscribe: (p) => (E.current.add(p), () => E.current.delete(p)),
281
+ getCachedContent: O
282
+ }),
283
+ [O]
284
+ ), W = r.useMemo(() => {
285
+ const p = () => /* @__PURE__ */ P(G.Provider, { value: $, children: /* @__PURE__ */ P("div", { style: D, "data-stack-container": !0, children: /* @__PURE__ */ P(he, {}) }) });
286
+ return p.displayName = "StackOutlet", p;
287
+ }, [$, D]);
288
+ return {
289
+ state: R,
290
+ push: h,
291
+ go: y,
292
+ move: k,
293
+ replace: M,
294
+ revealParent: _,
295
+ revealRoot: F,
296
+ dismissReveal: x,
297
+ getPanelProps: N,
298
+ getBackButtonProps: T,
299
+ canGo: w,
300
+ currentPanelId: A,
301
+ previousPanelId: d,
302
+ Outlet: W
303
+ };
304
+ }
305
+ function Ke(t) {
306
+ const {
307
+ containerRef: e,
308
+ navigation: n,
309
+ edge: i = "left",
310
+ edgeWidth: o = 20,
311
+ enabled: c = !0
312
+ } = t, [u, s] = r.useState(null), l = r.useCallback(
313
+ (d) => {
314
+ s(null), i === "left" && d.direction === 1 && n.canGo(-1) && n.go(-1);
315
+ },
316
+ [i, n]
317
+ ), { isEdgeGesture: f, state: m, containerProps: v } = ne({
318
+ containerRef: e,
319
+ edge: i,
320
+ edgeWidth: o,
321
+ enabled: c ? n.canGo(-1) : !1,
322
+ // Only enable if can go back
323
+ onSwipeEnd: l
324
+ });
325
+ r.useEffect(() => {
326
+ f && (m.phase === "swiping" || m.phase === "tracking") ? s(m) : m.phase === "idle" && s(null);
327
+ }, [f, m]);
328
+ const { containerProps: a } = re({
329
+ containerRef: e,
330
+ active: f,
331
+ preventEdgeBack: !0,
332
+ preventOverscroll: !0,
333
+ edgeWidth: o
334
+ }), g = r.useMemo(() => {
335
+ if (!u || !e.current)
336
+ return 0;
337
+ const d = e.current.clientWidth;
338
+ if (d === 0)
339
+ return 0;
340
+ const h = u.displacement.x;
341
+ if (i === "left" && h <= 0 || i === "right" && h >= 0)
342
+ return 0;
343
+ const y = Math.abs(h);
344
+ return Math.min(y / d, 1);
345
+ }, [u, e, i]), R = r.useMemo(
346
+ () => se(v, a),
347
+ [v, a]
348
+ );
349
+ return {
350
+ isEdgeSwiping: f,
351
+ progress: g,
352
+ inputState: f ? m : ie,
353
+ containerProps: R
354
+ };
355
+ }
356
+ const V = {
357
+ /** Ease out expo (similar to cubic-bezier(0.22, 1, 0.36, 1)) */
358
+ easeOutExpo: (t) => t === 1 ? 1 : 1 - Math.pow(2, -10 * t)
359
+ }, ve = 300;
360
+ function ge(t) {
361
+ const {
362
+ duration: e = ve,
363
+ easing: n = V.easeOutExpo,
364
+ onFrame: i,
365
+ onComplete: o
366
+ } = t, [c, u] = r.useState(!1), s = r.useRef(null), l = r.useRef(null), f = r.useRef(i), m = r.useRef(o);
367
+ r.useEffect(() => {
368
+ f.current = i, m.current = o;
369
+ }, [i, o]);
370
+ const v = r.useCallback(() => {
371
+ s.current !== null && (cancelAnimationFrame(s.current), s.current = null), l.current = null, u(!1);
372
+ }, []), a = r.useCallback(() => {
373
+ v(), u(!0), l.current = null;
374
+ const g = (R) => {
375
+ l.current === null && (l.current = R);
376
+ const A = R - l.current, d = Math.min(A / e, 1), h = n(d), y = d >= 1, k = {
377
+ progress: d,
378
+ easedProgress: h,
379
+ elapsed: A,
380
+ isComplete: y
381
+ };
382
+ f.current?.(k), y ? (s.current = null, l.current = null, u(!1), m.current?.()) : s.current = requestAnimationFrame(g);
383
+ };
384
+ s.current = requestAnimationFrame(g);
385
+ }, [e, n, v]);
386
+ return r.useEffect(() => () => {
387
+ s.current !== null && cancelAnimationFrame(s.current);
388
+ }, []), {
389
+ isAnimating: c,
390
+ start: a,
391
+ cancel: v
392
+ };
393
+ }
394
+ function Re(t, e, n) {
395
+ return t + (e - t) * n;
396
+ }
397
+ const Ae = 300, B = (t) => t === "horizontal" ? "translateX" : "translateY", ye = (t, e, n, i) => t || e === void 0 || e <= 0 || n === void 0 || n === i ? null : { from: n, to: i }, be = (t, e, n, i, o, c, u) => t === e ? { type: "none" } : i ? { type: "none" } : o ? { type: "none" } : c ? Math.abs(n - t) <= 1 ? { type: "snap", position: t } : u ? n > t ? { type: "snap", position: t } : { type: "animate", animation: { from: n, to: t } } : { type: "animate", animation: { from: n, to: t } } : { type: "snap", position: t }, Ce = (t, e, n) => t === void 0 || t === e || t <= 0 ? null : n;
398
+ function ke(t) {
399
+ const {
400
+ elementRef: e,
401
+ targetPx: n,
402
+ displacement: i,
403
+ isOperating: o,
404
+ axis: c = "horizontal",
405
+ animationDuration: u = Ae,
406
+ containerSize: s,
407
+ animateOnTargetChange: l = !1,
408
+ initialPx: f,
409
+ skipTargetChangeAnimation: m = !1
410
+ } = t, v = f ?? n, a = r.useRef(v), g = r.useRef(null), R = r.useRef(n), A = r.useRef(s), d = r.useRef(null), h = r.useRef(!1), y = ye(
411
+ h.current,
412
+ s,
413
+ f,
414
+ n
415
+ );
416
+ y !== null && (d.current = y, h.current = !0);
417
+ const k = be(
418
+ n,
419
+ R.current,
420
+ a.current,
421
+ o,
422
+ g.current !== null,
423
+ l,
424
+ m
425
+ );
426
+ k.type === "animate" ? (d.current = k.animation, R.current = n) : k.type === "snap" && (a.current = k.position, R.current = n);
427
+ const M = Ce(
428
+ s,
429
+ A.current,
430
+ n
431
+ );
432
+ M !== null && (a.current = M, A.current = s);
433
+ const w = r.useCallback(
434
+ ({ easedProgress: T }) => {
435
+ const D = e.current, I = g.current;
436
+ if (!D || !I)
437
+ return;
438
+ const E = Re(I.from, I.to, T);
439
+ a.current = E, D.style.transform = `${B(c)}(${E}px)`;
440
+ },
441
+ [c, e]
442
+ ), _ = r.useCallback(() => {
443
+ g.current = null, a.current = n, R.current = n;
444
+ }, [n]), { isAnimating: F, start: x, cancel: N } = ge({
445
+ duration: u,
446
+ easing: V.easeOutExpo,
447
+ onFrame: w,
448
+ onComplete: _
449
+ });
450
+ return r.useLayoutEffect(() => {
451
+ if (o) {
452
+ N(), g.current = null, d.current = null;
453
+ return;
454
+ }
455
+ if (d.current) {
456
+ const I = d.current;
457
+ g.current = I, d.current = null;
458
+ const E = e.current;
459
+ E && (E.style.transform = `${B(c)}(${I.from}px)`), x();
460
+ return;
461
+ }
462
+ const T = a.current;
463
+ Math.abs(T - n) > 1 ? (g.current = { from: T, to: n }, x()) : (a.current = n, R.current = n);
464
+ }, [o, n, x, N]), r.useLayoutEffect(() => {
465
+ const T = e.current;
466
+ if (!T || F || g.current !== null || d.current !== null)
467
+ return;
468
+ const D = n + i;
469
+ a.current = D, T.style.transform = `${B(c)}(${D}px)`;
470
+ }, [n, i, c, F, e]), {
471
+ isAnimating: F,
472
+ currentPx: a.current,
473
+ animationDirection: g.current
474
+ };
475
+ }
476
+ function Te(t, e) {
477
+ const n = r.useRef(e), i = r.useRef(t), o = r.useRef(!1), u = n.current && !e, s = t !== i.current, l = e && s, v = o.current || l || u && s, a = e ? i.current : t;
478
+ return r.useLayoutEffect(() => {
479
+ e ? l && (o.current = !0) : (o.current = !1, i.current = t), n.current = e;
480
+ }), {
481
+ value: a,
482
+ changedDuringOperation: v,
483
+ operationJustEnded: u
484
+ };
485
+ }
486
+ const K = -0.3;
487
+ function De(t) {
488
+ return Math.max(0, t);
489
+ }
490
+ function Ie(t, e, n = K) {
491
+ if (e <= 0)
492
+ return 0;
493
+ const i = Math.max(0, t), o = Math.min(i / e, 1), c = n * e, u = Math.abs(n) * o * e;
494
+ return c + u;
495
+ }
496
+ function Se(t) {
497
+ const { depth: e, navigationDepth: n, isActive: i, isOperating: o, isAnimating: c } = t;
498
+ return !!(i || e === n - 1 && (o || c));
499
+ }
500
+ function Ee(t, e) {
501
+ return t === e ? "active" : t === e - 1 ? "behind" : "hidden";
502
+ }
503
+ const Me = 300, we = 0.05, xe = 0.1, Oe = {
504
+ position: "absolute",
505
+ inset: 0,
506
+ width: "100%",
507
+ height: "100%"
508
+ }, Pe = (t, e) => t.phase === "idle" ? 0 : e === "horizontal" ? t.displacement.x : t.displacement.y, Ne = "-5px 0 15px rgba(0, 0, 0, 0.1)", _e = r.memo(
509
+ ({
510
+ id: t,
511
+ depth: e,
512
+ navigationDepth: n,
513
+ isActive: i,
514
+ operationState: o,
515
+ containerSize: c,
516
+ axis: u = "horizontal",
517
+ behindOffset: s = K,
518
+ animationDuration: l = Me,
519
+ animateOnMount: f = !1,
520
+ showShadow: m = !0,
521
+ displayMode: v = "overlay",
522
+ showDimming: a = !0,
523
+ children: g
524
+ }) => {
525
+ const R = r.useRef(null), A = Pe(o, u), d = o.phase === "operating", h = Ee(e, n), { value: y, changedDuringOperation: k } = Te(
526
+ h,
527
+ A > 0
528
+ ), M = r.useMemo(() => {
529
+ switch (y) {
530
+ case "active":
531
+ return 0;
532
+ case "behind":
533
+ return s * c;
534
+ case "hidden":
535
+ return c;
536
+ }
537
+ }, [y, s, c]), w = r.useMemo(() => {
538
+ if (A <= 0)
539
+ return 0;
540
+ switch (y) {
541
+ case "active":
542
+ return De(A);
543
+ case "behind": {
544
+ const S = Ie(A, c, s), O = s * c;
545
+ return S - O;
546
+ }
547
+ case "hidden":
548
+ return 0;
549
+ }
550
+ }, [y, A, c, s]), _ = r.useMemo(() => {
551
+ if (f && h === "active" && e > 0)
552
+ return c;
553
+ }, [f, h, e, c]), { isAnimating: F } = ke({
554
+ elementRef: R,
555
+ targetPx: M,
556
+ displacement: w,
557
+ isOperating: d,
558
+ axis: u,
559
+ animationDuration: l,
560
+ containerSize: c,
561
+ // Animate when targetPx changes (button navigation)
562
+ animateOnTargetChange: !0,
563
+ // For push animation: start from off-screen
564
+ initialPx: _,
565
+ // Skip backward animation if role changed during the operation.
566
+ // This handles over-swipe where panel moves beyond 100% and needs to snap back.
567
+ // useSwipeContentTransform allows forward animations (normal swipe-to-complete)
568
+ // but skips backward animations (over-swipe snap).
569
+ skipTargetChangeAnimation: k
570
+ }), x = Se({
571
+ depth: e,
572
+ navigationDepth: n,
573
+ isActive: i,
574
+ isOperating: d,
575
+ isAnimating: F
576
+ }), N = r.useMemo(() => c <= 0 || A <= 0 ? 0 : Math.min(A / c, 1), [A, c]), T = r.useMemo(() => {
577
+ if (v !== "stack")
578
+ return 1;
579
+ const S = n - e;
580
+ if (h === "active")
581
+ return 1;
582
+ if (h === "behind") {
583
+ const O = 1 - S * we;
584
+ return O + N * (1 - O);
585
+ }
586
+ return 1;
587
+ }, [v, h, e, n, N]), D = r.useMemo(() => !a || h !== "behind" ? 0 : xe * (1 - N), [a, h, N]);
588
+ r.useLayoutEffect(() => {
589
+ const S = R.current;
590
+ S && (S.style.visibility = x ? "visible" : "hidden");
591
+ }, [x]), r.useLayoutEffect(() => {
592
+ const S = R.current;
593
+ if (!S || v !== "stack")
594
+ return;
595
+ const O = S.style.transform;
596
+ if (O.includes("translateX")) {
597
+ const $ = O.match(/translateX\([^)]+\)/);
598
+ $ && (S.style.transform = `${$[0]} scale(${T})`);
599
+ } else
600
+ S.style.transform = `scale(${T})`;
601
+ }, [T, v]);
602
+ const I = m ? e > 0 && h === "active" : !1, E = r.useMemo(
603
+ () => ({
604
+ ...Oe,
605
+ pointerEvents: i ? "auto" : "none",
606
+ willChange: "transform",
607
+ zIndex: e,
608
+ visibility: x ? "visible" : "hidden",
609
+ boxShadow: I ? Ne : void 0
610
+ }),
611
+ [i, e, x, I]
612
+ ), U = r.useMemo(() => D <= 0 ? null : {
613
+ position: "absolute",
614
+ inset: 0,
615
+ backgroundColor: `rgba(0, 0, 0, ${D})`,
616
+ pointerEvents: "none",
617
+ zIndex: 1
618
+ }, [D]);
619
+ return /* @__PURE__ */ q(
620
+ "div",
621
+ {
622
+ ref: R,
623
+ "data-stack-content": t,
624
+ "data-depth": e,
625
+ "data-active": i ? "true" : "false",
626
+ "data-role": h,
627
+ style: E,
628
+ children: [
629
+ g,
630
+ U != null ? /* @__PURE__ */ P("div", { style: U, "data-dimming-overlay": !0 }) : null
631
+ ]
632
+ }
633
+ );
634
+ }
635
+ ), Fe = 300;
636
+ function $e(t, e, n) {
637
+ const { stack: i, depth: o } = e, c = [o];
638
+ o > 0 && c.push(o - 1);
639
+ const u = [];
640
+ for (const s of c) {
641
+ const l = i[s], f = t.find((m) => m.id === l);
642
+ f && u.push({ panel: f, depth: s, isExiting: !1 });
643
+ }
644
+ if (n != null && !u.some((l) => l.panel.id === n)) {
645
+ const l = t.find((f) => f.id === n);
646
+ l && u.push({ panel: l, depth: o + 1, isExiting: !0 });
647
+ }
648
+ return u.sort((s, l) => s.depth - l.depth);
649
+ }
650
+ const We = r.memo(
651
+ ({
652
+ panels: t,
653
+ navigationState: e,
654
+ operationState: n,
655
+ containerSize: i,
656
+ getCachedContent: o,
657
+ behindOffset: c,
658
+ animateOnMount: u = !1,
659
+ animationDuration: s = Fe,
660
+ showShadow: l,
661
+ displayMode: f,
662
+ showDimming: m
663
+ }) => {
664
+ const [v, a] = r.useState(null), g = r.useRef(e.depth), R = r.useRef(e.stack);
665
+ r.useLayoutEffect(() => {
666
+ const h = g.current, y = R.current, { depth: k, stack: M } = e;
667
+ if (g.current = k, R.current = M, k < h) {
668
+ const w = y[h];
669
+ if (w != null) {
670
+ a(w);
671
+ const _ = setTimeout(() => {
672
+ a(null);
673
+ }, s);
674
+ return () => clearTimeout(_);
675
+ }
676
+ }
677
+ }, [e.depth, e.stack, s]);
678
+ const A = r.useMemo(
679
+ () => $e(t, e, v),
680
+ [t, e, v]
681
+ ), d = r.useMemo(
682
+ () => ({
683
+ position: "relative",
684
+ width: "100%",
685
+ height: "100%",
686
+ overflow: "hidden"
687
+ }),
688
+ []
689
+ );
690
+ return /* @__PURE__ */ P("div", { style: d, "data-swipe-stack-container": !0, children: A.map(({ panel: h, depth: y, isExiting: k }) => {
691
+ const M = y === e.depth && !k, w = o?.(h.id) ?? h.content;
692
+ return /* @__PURE__ */ P(
693
+ _e,
694
+ {
695
+ id: h.id,
696
+ depth: y,
697
+ navigationDepth: e.depth,
698
+ isActive: M,
699
+ operationState: n,
700
+ containerSize: i,
701
+ behindOffset: c,
702
+ animateOnMount: u,
703
+ animationDuration: s,
704
+ showShadow: l,
705
+ displayMode: f,
706
+ showDimming: m,
707
+ children: w
708
+ },
709
+ h.id
710
+ );
711
+ }) });
712
+ }
713
+ );
714
+ export {
715
+ de as StackContent,
716
+ _e as SwipeStackContent,
717
+ We as SwipeStackOutlet,
718
+ Ve as useStackNavigation,
719
+ Ke as useStackSwipeInput
720
+ };
721
+ //# sourceMappingURL=stack.js.map