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,16 @@
1
+ /**
2
+ * @file Swipeable dialog container component.
3
+ *
4
+ * This component extends the base dialog functionality with swipe-to-dismiss
5
+ * and multi-phase animations. It uses native <dialog> element for top layer
6
+ * positioning and custom transform animations.
7
+ */
8
+ import * as React from "react";
9
+ import type { DialogContainerProps } from "./types.js";
10
+ /**
11
+ * Swipeable dialog container with multi-phase animation.
12
+ *
13
+ * Uses native <dialog> for top layer positioning and custom JS animations
14
+ * for swipe-to-dismiss functionality.
15
+ */
16
+ export declare const SwipeDialogContainer: React.FC<DialogContainerProps>;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @file Dialog animation utilities
3
+ *
4
+ * Provides multi-phase animation calculations and viewTransition support
5
+ * for dialog open/close animations with "suck in" effect.
6
+ */
7
+ /**
8
+ * Direction from which the dialog opens.
9
+ * The close animation uses the opposite direction.
10
+ */
11
+ export type DialogOpenDirection = "center" | "top" | "bottom" | "left" | "right";
12
+ /**
13
+ * Transform values for dialog animation.
14
+ */
15
+ export type DialogTransform = {
16
+ /** Translate value in pixels (x or y depending on direction) */
17
+ translate: number;
18
+ /** Scale value (1 = normal, 0.85 = final suck-in) */
19
+ scale: number;
20
+ /** Backdrop opacity (1 = fully visible, 0 = transparent) */
21
+ backdropOpacity: number;
22
+ };
23
+ /**
24
+ * Axis for the dialog animation based on direction.
25
+ */
26
+ export type DialogAnimationAxis = "x" | "y";
27
+ /**
28
+ * Get the animation axis for a given direction.
29
+ */
30
+ export declare function getAnimationAxis(direction: DialogOpenDirection): DialogAnimationAxis;
31
+ /**
32
+ * Get the sign multiplier for translate based on direction.
33
+ * Positive means moving in the positive axis direction.
34
+ */
35
+ export declare function getDirectionSign(direction: DialogOpenDirection): number;
36
+ /**
37
+ * Compute the close animation transform values.
38
+ *
39
+ * The close animation has two phases:
40
+ * - Phase 1 (0-70%): Translate movement with easeOutExpo (natural deceleration)
41
+ * - Phase 2 (70-100%): Scale shrink + accelerated translate with easeInExpo ("suck in" effect)
42
+ *
43
+ * @param progress - Animation progress (0 = open, 1 = fully closed)
44
+ * @param containerSize - Size of the container in the animation direction (width or height)
45
+ * @param direction - Direction the dialog is closing towards
46
+ * @returns Transform values for the current progress
47
+ */
48
+ export declare function computeCloseTransform(progress: number, containerSize: number, direction?: DialogOpenDirection): DialogTransform;
49
+ /**
50
+ * Compute the open animation transform values.
51
+ * This is the reverse of the close animation.
52
+ *
53
+ * @param progress - Animation progress (0 = closed, 1 = fully open)
54
+ * @param containerSize - Size of the container in the animation direction
55
+ * @param direction - Direction the dialog is opening from
56
+ * @returns Transform values for the current progress
57
+ */
58
+ export declare function computeOpenTransform(progress: number, containerSize: number, direction?: DialogOpenDirection): DialogTransform;
59
+ /**
60
+ * Compute transform values during a swipe gesture.
61
+ * This provides real-time feedback as the user swipes.
62
+ *
63
+ * @param displacement - Current swipe displacement in pixels
64
+ * @param containerSize - Size of the container in the animation direction
65
+ * @returns Transform values for current swipe state
66
+ */
67
+ export declare function computeSwipeTransform(displacement: number, containerSize: number): DialogTransform;
68
+ /**
69
+ * Check if the swipe should trigger a dismiss action.
70
+ *
71
+ * @param displacement - Final swipe displacement in pixels
72
+ * @param velocity - Final swipe velocity in px/ms
73
+ * @param containerSize - Size of the container
74
+ * @param threshold - Threshold ratio (0-1) for dismiss (default: 0.3)
75
+ * @returns Whether the dialog should be dismissed
76
+ */
77
+ export declare function shouldDismiss(displacement: number, velocity: number, containerSize: number, threshold?: number): boolean;
78
+ /**
79
+ * Get the close direction based on swipe displacement.
80
+ * The dialog closes in the direction of the swipe.
81
+ *
82
+ * @param displacementX - Horizontal displacement
83
+ * @param displacementY - Vertical displacement
84
+ * @param defaultDirection - Default direction if no clear winner
85
+ * @returns The determined close direction
86
+ */
87
+ export declare function getCloseDirectionFromSwipe(displacementX: number, displacementY: number, defaultDirection?: DialogOpenDirection): DialogOpenDirection;
88
+ /**
89
+ * Check if View Transitions API is supported.
90
+ */
91
+ export declare function supportsViewTransitions(): boolean;
92
+ /**
93
+ * Execute a callback with View Transitions API, with fallback.
94
+ *
95
+ * @param callback - The DOM-changing callback to wrap
96
+ * @returns Promise<boolean> - true if viewTransition was used, false if fallback
97
+ */
98
+ export declare function safeViewTransition(callback: () => void): Promise<boolean>;
99
+ /**
100
+ * Build CSS transform string from transform values.
101
+ *
102
+ * @param transform - Transform values
103
+ * @param axis - Animation axis ('x' or 'y')
104
+ * @returns CSS transform string
105
+ */
106
+ export declare function buildTransformString(transform: DialogTransform, axis: DialogAnimationAxis): string;
107
+ /**
108
+ * Build CSS for backdrop based on transform values.
109
+ *
110
+ * @param transform - Transform values
111
+ * @returns CSS properties for backdrop
112
+ */
113
+ export declare function buildBackdropStyle(transform: DialogTransform): React.CSSProperties;
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @file Dialog module type definitions
3
+ */
4
+ import type * as React from "react";
5
+ import type { Position } from "../../types";
6
+ /**
7
+ * Transition mode for dialog animations
8
+ * - "none": No animation
9
+ * - "css": CSS-based fade/scale animation
10
+ * - "swipe": Swipeable with multi-phase animation
11
+ */
12
+ export type DialogTransitionMode = "none" | "css" | "swipe";
13
+ /**
14
+ * Direction from which the dialog opens.
15
+ * The close animation uses the same direction (swipe down to close if opened from bottom).
16
+ */
17
+ export type DialogOpenDirection = "center" | "top" | "bottom" | "left" | "right";
18
+ /**
19
+ * Base props for DialogContainer component
20
+ */
21
+ export type DialogContainerProps = {
22
+ /** Whether the dialog is visible */
23
+ visible: boolean;
24
+ /** Callback when dialog should close */
25
+ onClose: () => void;
26
+ /** Dialog content */
27
+ children: React.ReactNode;
28
+ /** Position: 'center' for screen center, or Position for absolute coordinates */
29
+ position?: "center" | Position;
30
+ /** Whether clicking backdrop closes the dialog */
31
+ dismissible?: boolean;
32
+ /** Whether pressing Escape closes the dialog */
33
+ closeOnEscape?: boolean;
34
+ /** Whether to prevent body scroll when open */
35
+ preventBodyScroll?: boolean;
36
+ /** Whether to return focus to previous element on close */
37
+ returnFocus?: boolean;
38
+ /** Aria label for the dialog */
39
+ ariaLabel?: string;
40
+ /** ID of element that labels the dialog */
41
+ ariaLabelledBy?: string;
42
+ /** ID of element that describes the dialog */
43
+ ariaDescribedBy?: string;
44
+ /** Transition mode */
45
+ transitionMode?: DialogTransitionMode;
46
+ /** Transition duration (CSS value, e.g. '200ms') */
47
+ transitionDuration?: string;
48
+ /** Transition easing (CSS value, e.g. 'ease-out') */
49
+ transitionEasing?: string;
50
+ /** Whether the dialog can be dismissed by swiping. @default false for "css", true for "swipe" */
51
+ swipeDismissible?: boolean;
52
+ /** Direction the dialog opens from (used for swipe mode). @default "center" */
53
+ openDirection?: DialogOpenDirection;
54
+ /** Whether to use viewTransition API for close animation (when available). @default false */
55
+ useViewTransition?: boolean;
56
+ };
57
+ /**
58
+ * Header configuration for Modal
59
+ */
60
+ export type ModalHeader = {
61
+ /** Title displayed in the header */
62
+ title: string;
63
+ /** Whether to show close button (default: true) */
64
+ showCloseButton?: boolean;
65
+ };
66
+ /**
67
+ * Props for Modal component
68
+ */
69
+ export type ModalProps = Omit<DialogContainerProps, "position"> & {
70
+ /** Header configuration */
71
+ header?: ModalHeader;
72
+ /** Modal width */
73
+ width?: string | number;
74
+ /** Modal height */
75
+ height?: string | number;
76
+ /** Max width (default: 90vw) */
77
+ maxWidth?: string | number;
78
+ /** Max height (default: 85vh) */
79
+ maxHeight?: string | number;
80
+ /** Whether to use FloatingPanelFrame chrome (default: true) */
81
+ chrome?: boolean;
82
+ /** Custom content style */
83
+ contentStyle?: React.CSSProperties;
84
+ };
85
+ /**
86
+ * Options for alert dialog
87
+ */
88
+ export type AlertOptions = {
89
+ /** Optional title */
90
+ title?: string;
91
+ /** Message to display */
92
+ message: string;
93
+ /** OK button label (default: 'OK') */
94
+ okLabel?: string;
95
+ };
96
+ /**
97
+ * Options for confirm dialog
98
+ */
99
+ export type ConfirmOptions = AlertOptions & {
100
+ /** Confirm button label (default: 'OK') */
101
+ confirmLabel?: string;
102
+ /** Cancel button label (default: 'Cancel') */
103
+ cancelLabel?: string;
104
+ };
105
+ /**
106
+ * Options for prompt dialog
107
+ */
108
+ export type PromptOptions = ConfirmOptions & {
109
+ /** Default input value */
110
+ defaultValue?: string;
111
+ /** Placeholder text for input */
112
+ placeholder?: string;
113
+ /** Input type (default: 'text') */
114
+ inputType?: "text" | "password" | "email" | "number";
115
+ };
116
+ /**
117
+ * Internal state for dialog queue
118
+ */
119
+ export type DialogQueueItem = {
120
+ type: "alert";
121
+ options: AlertOptions;
122
+ resolve: (value: void) => void;
123
+ } | {
124
+ type: "confirm";
125
+ options: ConfirmOptions;
126
+ resolve: (value: boolean) => void;
127
+ } | {
128
+ type: "prompt";
129
+ options: PromptOptions;
130
+ resolve: (value: string | null) => void;
131
+ };
132
+ /**
133
+ * Return type of useDialog hook
134
+ */
135
+ export type UseDialogReturn = {
136
+ /** Show an alert dialog */
137
+ alert: (options: AlertOptions | string) => Promise<void>;
138
+ /** Show a confirm dialog */
139
+ confirm: (options: ConfirmOptions | string) => Promise<boolean>;
140
+ /** Show a prompt dialog */
141
+ prompt: (options: PromptOptions | string) => Promise<string | null>;
142
+ /** Outlet component to render dialogs */
143
+ Outlet: React.FC;
144
+ };
145
+ /**
146
+ * Props for useDialog hook
147
+ */
148
+ export type UseDialogProps = {
149
+ /**
150
+ * Custom component to render alert/confirm/prompt dialogs.
151
+ * When provided, replaces the default AlertDialog component.
152
+ */
153
+ alertDialogComponent?: React.ComponentType<AlertDialogProps>;
154
+ };
155
+ /**
156
+ * Props for AlertDialog component (internal)
157
+ */
158
+ export type AlertDialogProps = {
159
+ /** Dialog type */
160
+ type: "alert" | "confirm" | "prompt";
161
+ /** Whether the dialog is visible */
162
+ visible: boolean;
163
+ /** Title */
164
+ title?: string;
165
+ /** Message */
166
+ message: string;
167
+ /** OK/Confirm button label */
168
+ confirmLabel?: string;
169
+ /** Cancel button label */
170
+ cancelLabel?: string;
171
+ /** Placeholder for prompt input */
172
+ placeholder?: string;
173
+ /** Default value for prompt input */
174
+ defaultValue?: string;
175
+ /** Input type for prompt */
176
+ inputType?: "text" | "password" | "email" | "number";
177
+ /** Callback for confirm/OK action */
178
+ onConfirm: (value?: string) => void;
179
+ /** Callback for cancel action */
180
+ onCancel: () => void;
181
+ /** Whether the dialog can be dismissed by swiping. @default false for alert, true for confirm/prompt */
182
+ swipeDismissible?: boolean;
183
+ };
@@ -0,0 +1,39 @@
1
+ import type { UseDialogReturn, UseDialogProps } from "./types";
2
+ /**
3
+ * Hook for imperative alert/confirm/prompt dialogs.
4
+ *
5
+ * Returns functions to show dialogs and an Outlet component that must be rendered.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * function MyComponent() {
10
+ * const { alert, confirm, prompt, Outlet } = useDialog();
11
+ *
12
+ * const handleClick = async () => {
13
+ * await alert("Hello!");
14
+ *
15
+ * const confirmed = await confirm({
16
+ * message: "Are you sure?",
17
+ * confirmLabel: "Yes",
18
+ * cancelLabel: "No",
19
+ * });
20
+ *
21
+ * if (confirmed) {
22
+ * const name = await prompt({
23
+ * message: "Enter your name:",
24
+ * defaultValue: "Anonymous",
25
+ * });
26
+ * console.log("Name:", name);
27
+ * }
28
+ * };
29
+ *
30
+ * return (
31
+ * <>
32
+ * <button onClick={handleClick}>Show dialogs</button>
33
+ * <Outlet />
34
+ * </>
35
+ * );
36
+ * }
37
+ * ```
38
+ */
39
+ export declare const useDialog: (props?: UseDialogProps) => UseDialogReturn;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @file Hook for managing dialog element lifecycle
3
+ */
4
+ import * as React from "react";
5
+ export type UseDialogContainerOptions = {
6
+ /** Whether the dialog is visible */
7
+ visible: boolean;
8
+ /** Callback when dialog should close */
9
+ onClose: () => void;
10
+ /** Whether clicking backdrop closes the dialog (default: true) */
11
+ dismissible?: boolean;
12
+ /** Whether pressing Escape closes the dialog (default: true) */
13
+ closeOnEscape?: boolean;
14
+ /** Whether to return focus to previous element on close (default: true) */
15
+ returnFocus?: boolean;
16
+ /** Whether to prevent body scroll when open (default: true) */
17
+ preventBodyScroll?: boolean;
18
+ };
19
+ export type UseDialogContainerReturn = {
20
+ /** Ref to attach to the dialog element */
21
+ dialogRef: React.RefObject<HTMLDialogElement | null>;
22
+ /** Props to spread onto the dialog element */
23
+ dialogProps: {
24
+ onCancel: (event: React.SyntheticEvent) => void;
25
+ onClick: (event: React.MouseEvent<HTMLDialogElement>) => void;
26
+ };
27
+ };
28
+ /**
29
+ * Hook for managing native dialog element lifecycle
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * function MyDialog({ visible, onClose }) {
34
+ * const { dialogRef, dialogProps } = useDialogContainer({
35
+ * visible,
36
+ * onClose,
37
+ * });
38
+ *
39
+ * return (
40
+ * <dialog ref={dialogRef} {...dialogProps}>
41
+ * <div>Dialog content</div>
42
+ * </dialog>
43
+ * );
44
+ * }
45
+ * ```
46
+ */
47
+ export declare const useDialogContainer: (options: UseDialogContainerOptions) => UseDialogContainerReturn;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @file Hook for detecting swipe gestures to dismiss a dialog.
3
+ *
4
+ * This hook provides free 2D movement during swipe:
5
+ * - User can drag in any direction freely
6
+ * - Close intent is detected on release based on displacement direction
7
+ * - If movement matches close direction and exceeds threshold, dismiss
8
+ * - Otherwise, snap back to original position
9
+ */
10
+ import * as React from "react";
11
+ import { type ContinuousOperationState, type Vector2 } from "../../hooks/gesture/types.js";
12
+ import type { DialogOpenDirection } from "./dialogAnimationUtils.js";
13
+ /**
14
+ * Options for useDialogSwipeInput hook.
15
+ */
16
+ export type UseDialogSwipeInputOptions = {
17
+ /** Ref to the dialog container element */
18
+ containerRef: React.RefObject<HTMLElement | null>;
19
+ /** Direction the dialog opened from (swipe closes in same direction) */
20
+ openDirection: DialogOpenDirection;
21
+ /** Whether swipe dismiss is enabled */
22
+ enabled: boolean;
23
+ /** Callback when swipe exceeds threshold and dialog should dismiss */
24
+ onSwipeDismiss: () => void;
25
+ /** Threshold ratio (0-1) of container size to trigger dismiss. @default 0.3 */
26
+ dismissThreshold?: number;
27
+ };
28
+ /**
29
+ * Result from useDialogSwipeInput hook.
30
+ */
31
+ export type UseDialogSwipeInputResult = {
32
+ /** Current operation state (idle, operating, or ended) */
33
+ state: ContinuousOperationState;
34
+ /** Props to spread on the container element */
35
+ containerProps: React.HTMLAttributes<HTMLElement> & {
36
+ style: React.CSSProperties;
37
+ };
38
+ /** Swipe progress (0-1) towards dismiss threshold */
39
+ progress: number;
40
+ /** Whether user is currently swiping */
41
+ isOperating: boolean;
42
+ /** Current displacement in pixels (primary axis based on openDirection) */
43
+ displacement: number;
44
+ /** Full 2D displacement for free movement transform */
45
+ displacement2D: Vector2;
46
+ };
47
+ /**
48
+ * Hook for detecting swipe gestures to dismiss a dialog.
49
+ *
50
+ * Allows free 2D movement - user can drag in any direction.
51
+ * On release, detects if the movement matches the close direction:
52
+ * - "center" or "bottom": close if moved down significantly
53
+ * - "top": close if moved up significantly
54
+ * - "left": close if moved left significantly
55
+ * - "right": close if moved right significantly
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * const { state, containerProps, displacement2D } = useDialogSwipeInput({
60
+ * containerRef,
61
+ * openDirection: "bottom",
62
+ * enabled: true,
63
+ * onSwipeDismiss: () => setVisible(false),
64
+ * });
65
+ *
66
+ * // Apply 2D transform for free movement
67
+ * style={{ transform: `translate(${displacement2D.x}px, ${displacement2D.y}px)` }}
68
+ * ```
69
+ */
70
+ export declare function useDialogSwipeInput(options: UseDialogSwipeInputOptions): UseDialogSwipeInputResult;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @file Hook for managing dialog transform during swipe and animation.
3
+ *
4
+ * This hook provides:
5
+ * - Real-time transform updates during swipe gestures
6
+ * - Smooth open/close animations with multi-phase easing
7
+ * - Backdrop opacity animation
8
+ * - Support for viewTransition API (optional)
9
+ */
10
+ import * as React from "react";
11
+ import type { ContinuousOperationState } from "../../hooks/gesture/types.js";
12
+ import type { DialogOpenDirection } from "./dialogAnimationUtils.js";
13
+ /**
14
+ * Phase of dialog animation lifecycle.
15
+ */
16
+ export type DialogAnimationPhase = "idle" | "opening" | "open" | "closing" | "closed";
17
+ /**
18
+ * 2D displacement for free movement.
19
+ */
20
+ export type Displacement2D = {
21
+ x: number;
22
+ y: number;
23
+ };
24
+ /**
25
+ * Options for useDialogTransform hook.
26
+ */
27
+ export type UseDialogTransformOptions = {
28
+ /** Ref to the dialog content element */
29
+ elementRef: React.RefObject<HTMLElement | null>;
30
+ /** Ref to the backdrop element */
31
+ backdropRef: React.RefObject<HTMLElement | null>;
32
+ /** Whether the dialog is visible */
33
+ visible: boolean;
34
+ /** Direction the dialog opens from */
35
+ openDirection: DialogOpenDirection;
36
+ /** Current swipe state */
37
+ swipeState: ContinuousOperationState;
38
+ /** Current swipe displacement in pixels (primary axis) */
39
+ displacement: number;
40
+ /** Full 2D displacement for free movement */
41
+ displacement2D: Displacement2D;
42
+ /** Animation duration in ms. @default 350 */
43
+ animationDuration?: number;
44
+ /** Whether to use viewTransition API for close animation */
45
+ useViewTransition?: boolean;
46
+ /** Callback when open animation completes */
47
+ onOpenComplete?: () => void;
48
+ /** Callback when close animation completes */
49
+ onCloseComplete?: () => void;
50
+ };
51
+ /**
52
+ * Result from useDialogTransform hook.
53
+ */
54
+ export type UseDialogTransformResult = {
55
+ /** Current animation phase */
56
+ phase: DialogAnimationPhase;
57
+ /** Whether any animation is running */
58
+ isAnimating: boolean;
59
+ /** Trigger close animation (use instead of setting visible=false directly) */
60
+ triggerClose: () => Promise<void>;
61
+ };
62
+ /**
63
+ * Hook for managing dialog transform during swipe and animation.
64
+ *
65
+ * During swipe: directly updates element transform based on displacement.
66
+ * After swipe: animates to target position (close or snap back).
67
+ * On visible change: animates open/close transition.
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * const { phase, isAnimating, triggerClose } = useDialogTransform({
72
+ * elementRef,
73
+ * backdropRef,
74
+ * visible,
75
+ * openDirection: "bottom",
76
+ * swipeState: inputState,
77
+ * displacement: inputDisplacement,
78
+ * onCloseComplete: () => onClose(),
79
+ * });
80
+ * ```
81
+ */
82
+ export declare function useDialogTransform(options: UseDialogTransformOptions): UseDialogTransformResult;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @file Type definitions for Drawer swipe gesture handling.
3
+ */
4
+ import type * as React from "react";
5
+ import type { ContinuousOperationState } from "../../hooks/gesture/types.js";
6
+ /**
7
+ * Direction for drawer anchor (same as anchor edge).
8
+ */
9
+ export type DrawerSwipeDirection = "left" | "right" | "top" | "bottom";
10
+ /**
11
+ * Options for useDrawerSwipeInput hook.
12
+ */
13
+ export type UseDrawerSwipeInputOptions = {
14
+ /** Container ref for edge detection zone (e.g., GridLayout container) */
15
+ edgeContainerRef: React.RefObject<HTMLElement | null>;
16
+ /** Drawer content ref (for close gesture) */
17
+ drawerContentRef: React.RefObject<HTMLElement | null>;
18
+ /** Drawer direction (anchor edge) */
19
+ direction: DrawerSwipeDirection;
20
+ /** Whether the drawer is currently open */
21
+ isOpen: boolean;
22
+ /** Callback when swipe should open the drawer */
23
+ onSwipeOpen: () => void;
24
+ /** Callback when swipe should close the drawer */
25
+ onSwipeClose: () => void;
26
+ /** Whether edge swipe to open is enabled. @default true */
27
+ enableEdgeSwipeOpen?: boolean;
28
+ /** Whether swipe to close is enabled. @default true */
29
+ enableSwipeClose?: boolean;
30
+ /** Width of edge detection zone in pixels. @default 20 */
31
+ edgeWidth?: number;
32
+ /** Dismiss threshold ratio (0-1). @default 0.3 */
33
+ dismissThreshold?: number;
34
+ };
35
+ /**
36
+ * Result from useDrawerSwipeInput hook.
37
+ */
38
+ export type UseDrawerSwipeInputResult = {
39
+ /** Current operation state */
40
+ state: ContinuousOperationState;
41
+ /** Whether currently opening via edge swipe */
42
+ isOpening: boolean;
43
+ /** Whether currently closing via drag */
44
+ isClosing: boolean;
45
+ /** Progress (0-1) towards open/close threshold */
46
+ progress: number;
47
+ /** Displacement in pixels (primary axis) */
48
+ displacement: number;
49
+ /** Props for edge container (open gesture zone) */
50
+ edgeContainerProps: React.HTMLAttributes<HTMLElement> & {
51
+ style: React.CSSProperties;
52
+ };
53
+ /** Props for drawer content (close gesture zone) */
54
+ drawerContentProps: React.HTMLAttributes<HTMLElement> & {
55
+ style: React.CSSProperties;
56
+ };
57
+ };
58
+ /**
59
+ * Get animation axis from direction.
60
+ */
61
+ export declare function getDrawerAnimationAxis(direction: DrawerSwipeDirection): "x" | "y";
62
+ /**
63
+ * Get the sign for the close swipe direction.
64
+ * Left drawer closes by swiping left (-1).
65
+ * Right drawer closes by swiping right (+1).
66
+ * Top drawer closes by swiping up (-1).
67
+ * Bottom drawer closes by swiping down (+1).
68
+ */
69
+ export declare function getDrawerCloseSwipeSign(direction: DrawerSwipeDirection): 1 | -1;
70
+ /**
71
+ * Get the sign for the open swipe direction.
72
+ * This is the opposite of the close direction.
73
+ */
74
+ export declare function getDrawerOpenSwipeSign(direction: DrawerSwipeDirection): 1 | -1;
@@ -0,0 +1,24 @@
1
+ import type { UseDrawerSwipeInputOptions, UseDrawerSwipeInputResult } from "./types.js";
2
+ /**
3
+ * Hook for detecting swipe gestures to open/close a drawer.
4
+ *
5
+ * When drawer is closed:
6
+ * - Detects edge swipe from the anchor edge to trigger open
7
+ *
8
+ * When drawer is open:
9
+ * - Detects drag gesture within drawer to trigger close
10
+ * - Respects scrollable content boundaries
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * const { state, edgeContainerProps, drawerContentProps } = useDrawerSwipeInput({
15
+ * edgeContainerRef: gridLayoutRef,
16
+ * drawerContentRef: drawerRef,
17
+ * direction: "left",
18
+ * isOpen,
19
+ * onSwipeOpen: () => setOpen(true),
20
+ * onSwipeClose: () => setOpen(false),
21
+ * });
22
+ * ```
23
+ */
24
+ export declare function useDrawerSwipeInput(options: UseDrawerSwipeInputOptions): UseDrawerSwipeInputResult;
@@ -23,7 +23,7 @@ export type PivotContentProps = {
23
23
  /**
24
24
  * Renders pivot content with CSS animation support.
25
25
  *
26
- * When transitionMode="css": Applies enter/leave animations.
26
+ * When transitionMode="css": Applies enter/leave animations with display:none when hidden.
27
27
  * When transitionMode="none": Uses React.Activity for memory optimization.
28
28
  */
29
29
  export declare const PivotContent: React.FC<PivotContentProps>;