react-panel-layout 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/dist/{FloatingPanelFrame-D9Cp2al1.cjs → FloatingPanelFrame-CEmXDvUA.cjs} +2 -2
  2. package/dist/FloatingPanelFrame-CEmXDvUA.cjs.map +1 -0
  3. package/dist/{FloatingPanelFrame-6W5OexYe.js → FloatingPanelFrame-SgYLc6Ud.js} +12 -15
  4. package/dist/FloatingPanelFrame-SgYLc6Ud.js.map +1 -0
  5. package/dist/FloatingWindow-BpdOpg_L.js +400 -0
  6. package/dist/FloatingWindow-BpdOpg_L.js.map +1 -0
  7. package/dist/FloatingWindow-TCDNY5gE.cjs +2 -0
  8. package/dist/FloatingWindow-TCDNY5gE.cjs.map +1 -0
  9. package/dist/GridLayout-B4VRsC0r.cjs +2 -0
  10. package/dist/GridLayout-B4VRsC0r.cjs.map +1 -0
  11. package/dist/GridLayout-BltqeCPK.js +927 -0
  12. package/dist/GridLayout-BltqeCPK.js.map +1 -0
  13. package/dist/HorizontalDivider-B5Z-KZLk.cjs +2 -0
  14. package/dist/HorizontalDivider-B5Z-KZLk.cjs.map +1 -0
  15. package/dist/HorizontalDivider-WF1k_qND.js +30 -0
  16. package/dist/HorizontalDivider-WF1k_qND.js.map +1 -0
  17. package/dist/PanelSystem-Bs8bQwQF.cjs +3 -0
  18. package/dist/PanelSystem-Bs8bQwQF.cjs.map +1 -0
  19. package/dist/PanelSystem-Dr1TBhxM.js +1946 -0
  20. package/dist/PanelSystem-Dr1TBhxM.js.map +1 -0
  21. package/dist/ResizeHandle-CScipO5l.cjs +2 -0
  22. package/dist/ResizeHandle-CScipO5l.cjs.map +1 -0
  23. package/dist/ResizeHandle-CdA_JYfN.js +120 -0
  24. package/dist/ResizeHandle-CdA_JYfN.js.map +1 -0
  25. package/dist/SwipePivotTabBar-BGO9X94m.js +407 -0
  26. package/dist/SwipePivotTabBar-BGO9X94m.js.map +1 -0
  27. package/dist/SwipePivotTabBar-BrQismcZ.cjs +2 -0
  28. package/dist/SwipePivotTabBar-BrQismcZ.cjs.map +1 -0
  29. package/dist/config.cjs +1 -1
  30. package/dist/config.cjs.map +1 -1
  31. package/dist/config.js +11 -9
  32. package/dist/config.js.map +1 -1
  33. package/dist/constants/styles.d.ts +18 -4
  34. package/dist/floating.cjs +1 -1
  35. package/dist/floating.js +1 -1
  36. package/dist/grid/index.d.ts +58 -0
  37. package/dist/grid.cjs +2 -0
  38. package/dist/grid.cjs.map +1 -0
  39. package/dist/grid.js +13 -0
  40. package/dist/grid.js.map +1 -0
  41. package/dist/hooks/gesture/presets.d.ts +33 -0
  42. package/dist/hooks/gesture/testing/createGestureSimulator.d.ts +110 -0
  43. package/dist/hooks/gesture/thresholdValue.d.ts +44 -0
  44. package/dist/hooks/gesture/types.d.ts +254 -0
  45. package/dist/hooks/gesture/useDirectionalLock.d.ts +20 -0
  46. package/dist/hooks/gesture/useEdgeSwipeInput.d.ts +23 -0
  47. package/dist/hooks/gesture/useNativeGestureGuard.d.ts +23 -0
  48. package/dist/hooks/gesture/usePointerTracking.d.ts +22 -0
  49. package/dist/hooks/gesture/useScrollBoundary.d.ts +23 -0
  50. package/dist/hooks/gesture/useSwipeInput.d.ts +5 -0
  51. package/dist/hooks/gesture/utils.d.ts +40 -0
  52. package/dist/hooks/useAnimatedVisibility.d.ts +58 -0
  53. package/dist/hooks/useAnimationFrame.d.ts +84 -0
  54. package/dist/hooks/useSnapAnimation.d.ts +54 -0
  55. package/dist/hooks/useSwipeContentTransform.d.ts +79 -0
  56. package/dist/index.cjs +1 -2
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.d.ts +0 -1
  59. package/dist/index.js +25 -2006
  60. package/dist/index.js.map +1 -1
  61. package/dist/modules/pivot/PivotContent.d.ts +1 -1
  62. package/dist/modules/pivot/SwipePivotContent.d.ts +39 -0
  63. package/dist/modules/pivot/SwipePivotContent.debug.tmp.d.ts +25 -0
  64. package/dist/modules/pivot/SwipePivotContent.test.d.ts +1 -0
  65. package/dist/modules/pivot/SwipePivotTabBar.d.ts +89 -0
  66. package/dist/modules/pivot/index.d.ts +3 -0
  67. package/dist/modules/pivot/scaleInputState.d.ts +37 -0
  68. package/dist/modules/pivot/types.d.ts +73 -2
  69. package/dist/modules/pivot/usePivotSwipeInput.d.ts +68 -0
  70. package/dist/modules/stack/StackContent.d.ts +15 -0
  71. package/dist/modules/stack/SwipeStackContent.d.ts +63 -0
  72. package/dist/modules/stack/SwipeStackOutlet.d.ts +80 -0
  73. package/dist/modules/stack/computeStackContentState.d.ts +99 -0
  74. package/dist/modules/stack/computeSwipeStackTransform.d.ts +76 -0
  75. package/dist/modules/stack/types.d.ts +194 -0
  76. package/dist/modules/stack/useStackAnimationState.d.ts +32 -0
  77. package/dist/modules/stack/useStackNavigation.d.ts +23 -0
  78. package/dist/modules/stack/useStackSwipeInput.d.ts +27 -0
  79. package/dist/panels/index.d.ts +67 -0
  80. package/dist/panels.cjs +2 -0
  81. package/dist/panels.cjs.map +1 -0
  82. package/dist/panels.js +28 -0
  83. package/dist/panels.js.map +1 -0
  84. package/dist/pivot/index.d.ts +3 -0
  85. package/dist/pivot.cjs +1 -1
  86. package/dist/pivot.cjs.map +1 -1
  87. package/dist/pivot.js +20 -2
  88. package/dist/pivot.js.map +1 -1
  89. package/dist/resizer/index.d.ts +57 -0
  90. package/dist/resizer.cjs +2 -0
  91. package/dist/resizer.cjs.map +1 -0
  92. package/dist/resizer.js +8 -0
  93. package/dist/resizer.js.map +1 -0
  94. package/dist/stack/index.d.ts +72 -0
  95. package/dist/stack.cjs +2 -0
  96. package/dist/stack.cjs.map +1 -0
  97. package/dist/stack.js +980 -0
  98. package/dist/stack.js.map +1 -0
  99. package/dist/sticky-header/StickyArea.d.ts +38 -0
  100. package/dist/sticky-header/index.d.ts +4 -4
  101. package/dist/sticky-header/types.d.ts +35 -22
  102. package/dist/sticky-header.cjs +1 -1
  103. package/dist/sticky-header.cjs.map +1 -1
  104. package/dist/sticky-header.js +65 -174
  105. package/dist/sticky-header.js.map +1 -1
  106. package/dist/styles-DPPuJ0sf.js +57 -0
  107. package/dist/styles-DPPuJ0sf.js.map +1 -0
  108. package/dist/styles-qf6ptVLD.cjs +2 -0
  109. package/dist/styles-qf6ptVLD.cjs.map +1 -0
  110. package/dist/types.d.ts +12 -0
  111. package/dist/useContentCache-CO3LYNmz.js +24 -0
  112. package/dist/useContentCache-CO3LYNmz.js.map +1 -0
  113. package/dist/useContentCache-DqXtLrLs.cjs +2 -0
  114. package/dist/useContentCache-DqXtLrLs.cjs.map +1 -0
  115. package/dist/useDocumentPointerEvents-CKdhGXd0.js +46 -0
  116. package/dist/useDocumentPointerEvents-CKdhGXd0.js.map +1 -0
  117. package/dist/useDocumentPointerEvents-ChqrKXDk.cjs +2 -0
  118. package/dist/useDocumentPointerEvents-ChqrKXDk.cjs.map +1 -0
  119. package/dist/useEffectEvent-Dp7HLCf0.js +13 -0
  120. package/dist/useEffectEvent-Dp7HLCf0.js.map +1 -0
  121. package/dist/useEffectEvent-huSsGUnl.cjs +2 -0
  122. package/dist/useEffectEvent-huSsGUnl.cjs.map +1 -0
  123. package/dist/useFloatingState-C4kRaW_R.cjs +2 -0
  124. package/dist/useFloatingState-C4kRaW_R.cjs.map +1 -0
  125. package/dist/useFloatingState-tEfA_wbc.js +74 -0
  126. package/dist/useFloatingState-tEfA_wbc.js.map +1 -0
  127. package/dist/window/index.d.ts +61 -0
  128. package/dist/window.cjs +2 -0
  129. package/dist/window.cjs.map +1 -0
  130. package/dist/window.js +149 -0
  131. package/dist/window.js.map +1 -0
  132. package/docs/design-tokens.md +405 -0
  133. package/package.json +29 -4
  134. package/src/PanelSystemContext.tsx +88 -0
  135. package/src/components/grid/GridLayerList.tsx +172 -0
  136. package/src/components/grid/GridLayerResizeHandles.tsx +145 -0
  137. package/src/components/grid/GridLayout.spec.tsx +743 -0
  138. package/src/components/grid/GridLayout.tsx +130 -0
  139. package/src/components/grid/GridTrackResizeHandle.tsx +87 -0
  140. package/src/components/paneling/FloatingPanelFrame.tsx +203 -0
  141. package/src/components/panels/DropSuggestOverlay.tsx +131 -0
  142. package/src/components/panels/PanelGroupView.tsx +112 -0
  143. package/src/components/pivot/PivotLayer.tsx +27 -0
  144. package/src/components/resizer/HorizontalDivider.tsx +52 -0
  145. package/src/components/resizer/ResizeHandle.tsx +118 -0
  146. package/src/components/tabs/TabBar.tsx +223 -0
  147. package/src/components/tabs/TabBarTab.tsx +133 -0
  148. package/src/components/tabs/TabDragOverlay.tsx +92 -0
  149. package/src/components/window/DialogOverlay.tsx +180 -0
  150. package/src/components/window/Drawer.tsx +282 -0
  151. package/src/components/window/DrawerLayers.tsx +58 -0
  152. package/src/components/window/FloatingWindow.tsx +95 -0
  153. package/src/components/window/PopupLayerPortal.tsx +218 -0
  154. package/src/config/PanelContentDeclaration.tsx +427 -0
  155. package/src/config/index.tsx +52 -0
  156. package/src/config/panelJsx.spec.tsx +54 -0
  157. package/src/config/panelJsxConfig.spec.tsx +54 -0
  158. package/src/config/panelJsxDrawer.spec.tsx +33 -0
  159. package/src/config/panelRouter.spec.ts +68 -0
  160. package/src/config/panelRouter.tsx +155 -0
  161. package/src/constants/styles.ts +261 -0
  162. package/src/demo/Layout.module.css +258 -0
  163. package/src/demo/Layout.tsx +176 -0
  164. package/src/demo/components/CodeBlock.module.css +54 -0
  165. package/src/demo/components/CodeBlock.tsx +34 -0
  166. package/src/demo/components/CodePreview.module.css +37 -0
  167. package/src/demo/components/CodePreview.tsx +31 -0
  168. package/src/demo/components/DataPreview.module.css +177 -0
  169. package/src/demo/components/DataPreview.tsx +115 -0
  170. package/src/demo/components/Story.module.css +68 -0
  171. package/src/demo/components/Story.tsx +54 -0
  172. package/src/demo/components/layout/CodePanel.module.css +183 -0
  173. package/src/demo/components/layout/CodePanel.tsx +149 -0
  174. package/src/demo/components/layout/DemoPage.module.css +60 -0
  175. package/src/demo/components/layout/DemoPage.tsx +56 -0
  176. package/src/demo/components/layout/SingleSamplePage.module.css +11 -0
  177. package/src/demo/components/layout/SingleSamplePage.tsx +35 -0
  178. package/src/demo/components/layout/SplitDemoLayout.module.css +107 -0
  179. package/src/demo/components/layout/SplitDemoLayout.tsx +218 -0
  180. package/src/demo/components/layout/index.ts +11 -0
  181. package/src/demo/components/tab-styles/ChromeTabBar.module.css +75 -0
  182. package/src/demo/components/tab-styles/ChromeTabBar.tsx +111 -0
  183. package/src/demo/components/tab-styles/GitHubTabBar.module.css +81 -0
  184. package/src/demo/components/tab-styles/GitHubTabBar.tsx +109 -0
  185. package/src/demo/components/tab-styles/VSCodeTabBar.module.css +78 -0
  186. package/src/demo/components/tab-styles/VSCodeTabBar.tsx +109 -0
  187. package/src/demo/components/tab-styles/index.ts +6 -0
  188. package/src/demo/components/ui/DemoButton.module.css +63 -0
  189. package/src/demo/components/ui/DemoButton.tsx +32 -0
  190. package/src/demo/components/ui/DemoCard.module.css +15 -0
  191. package/src/demo/components/ui/DemoCard.tsx +30 -0
  192. package/src/demo/components/ui/DemoContainer.module.css +17 -0
  193. package/src/demo/components/ui/DemoContainer.tsx +30 -0
  194. package/src/demo/components/ui/DemoPanel.module.css +23 -0
  195. package/src/demo/components/ui/DemoPanel.tsx +33 -0
  196. package/src/demo/components/ui/PanelText.module.css +18 -0
  197. package/src/demo/components/ui/PanelText.tsx +29 -0
  198. package/src/demo/components/ui/PanelTitle.module.css +18 -0
  199. package/src/demo/components/ui/PanelTitle.tsx +31 -0
  200. package/src/demo/contexts/TabbarDemoConfig.tsx +218 -0
  201. package/src/demo/demo.css +172 -0
  202. package/src/demo/hooks/useMedia.ts +41 -0
  203. package/src/demo/hooks/useShikiHighlight.ts +55 -0
  204. package/src/demo/index.tsx +293 -0
  205. package/src/demo/pages/Drawer/animations/index.tsx +22 -0
  206. package/src/demo/pages/Drawer/basics/index.tsx +17 -0
  207. package/src/demo/pages/Drawer/components/DrawerAnimations.module.css +125 -0
  208. package/src/demo/pages/Drawer/components/DrawerAnimations.tsx +118 -0
  209. package/src/demo/pages/Drawer/components/DrawerBasics.module.css +55 -0
  210. package/src/demo/pages/Drawer/components/DrawerBasics.tsx +76 -0
  211. package/src/demo/pages/Drawer/components/DrawerMenuLayout.module.css +332 -0
  212. package/src/demo/pages/Drawer/components/DrawerMenuLayout.tsx +199 -0
  213. package/src/demo/pages/Drawer/menu/index.tsx +17 -0
  214. package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.module.css +163 -0
  215. package/src/demo/pages/FloatingPanelFrame/ResizableFloatingPanelsPreview.tsx +234 -0
  216. package/src/demo/pages/FloatingPanelFrame/basic/index.tsx +17 -0
  217. package/src/demo/pages/FloatingPanelFrame/complex/index.tsx +26 -0
  218. package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.module.css +16 -0
  219. package/src/demo/pages/FloatingPanelFrame/components/BasicPanel.tsx +24 -0
  220. package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.module.css +54 -0
  221. package/src/demo/pages/FloatingPanelFrame/components/ComplexPanel.tsx +67 -0
  222. package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.module.css +21 -0
  223. package/src/demo/pages/FloatingPanelFrame/components/PanelWithControls.tsx +41 -0
  224. package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.module.css +5 -0
  225. package/src/demo/pages/FloatingPanelFrame/components/PanelWithMeta.tsx +43 -0
  226. package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.module.css +11 -0
  227. package/src/demo/pages/FloatingPanelFrame/components/ScrollablePanel.tsx +42 -0
  228. package/src/demo/pages/FloatingPanelFrame/index.tsx +80 -0
  229. package/src/demo/pages/FloatingPanelFrame/scrollable/index.tsx +30 -0
  230. package/src/demo/pages/FloatingPanelFrame/with-controls/index.tsx +30 -0
  231. package/src/demo/pages/FloatingPanelFrame/with-meta/index.tsx +17 -0
  232. package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.module.css +112 -0
  233. package/src/demo/pages/HorizontalDivider/components/PanelsWithRichContent.tsx +56 -0
  234. package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.module.css +46 -0
  235. package/src/demo/pages/HorizontalDivider/components/SimpleResizablePanels.tsx +29 -0
  236. package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.module.css +54 -0
  237. package/src/demo/pages/HorizontalDivider/components/ThreePanelLayout.tsx +30 -0
  238. package/src/demo/pages/HorizontalDivider/index.module.css +14 -0
  239. package/src/demo/pages/HorizontalDivider/index.tsx +64 -0
  240. package/src/demo/pages/HorizontalDivider/panels-with-rich-content/index.tsx +21 -0
  241. package/src/demo/pages/HorizontalDivider/simple-resizable-panels/index.tsx +21 -0
  242. package/src/demo/pages/HorizontalDivider/three-panel-layout/index.tsx +21 -0
  243. package/src/demo/pages/PanelLayout/PanelLayoutDemo.module.css +174 -0
  244. package/src/demo/pages/PanelLayout/PanelLayoutDemo.tsx +248 -0
  245. package/src/demo/pages/PanelLayout/components/DashboardLayout.module.css +115 -0
  246. package/src/demo/pages/PanelLayout/components/DashboardLayout.tsx +124 -0
  247. package/src/demo/pages/PanelLayout/components/DraggableOverlays.module.css +101 -0
  248. package/src/demo/pages/PanelLayout/components/DraggableOverlays.tsx +122 -0
  249. package/src/demo/pages/PanelLayout/components/IDELayout.module.css +104 -0
  250. package/src/demo/pages/PanelLayout/components/IDELayout.tsx +143 -0
  251. package/src/demo/pages/PanelLayout/components/SimpleGrid.module.css +19 -0
  252. package/src/demo/pages/PanelLayout/components/SimpleGrid.tsx +62 -0
  253. package/src/demo/pages/PanelLayout/dashboard/index.tsx +22 -0
  254. package/src/demo/pages/PanelLayout/draggable-overlays/index.tsx +22 -0
  255. package/src/demo/pages/PanelLayout/ide-layout/index.tsx +22 -0
  256. package/src/demo/pages/PanelLayout/index.tsx +94 -0
  257. package/src/demo/pages/PanelLayout/simple-grid/index.tsx +22 -0
  258. package/src/demo/pages/PanelSystem/PanelSystemPreview.module.css +20 -0
  259. package/src/demo/pages/PanelSystem/PanelSystemPreview.tsx +101 -0
  260. package/src/demo/pages/PanelSystem/preview/index.tsx +18 -0
  261. package/src/demo/pages/PanelSystem/tabbar/index.tsx +129 -0
  262. package/src/demo/pages/Pivot/basics/index.tsx +17 -0
  263. package/src/demo/pages/Pivot/components/Pivot.module.css +278 -0
  264. package/src/demo/pages/Pivot/components/PivotBasics.tsx +103 -0
  265. package/src/demo/pages/Pivot/components/PivotSidebar.tsx +168 -0
  266. package/src/demo/pages/Pivot/components/PivotTabs.tsx +129 -0
  267. package/src/demo/pages/Pivot/components/PivotTransitions.tsx +120 -0
  268. package/src/demo/pages/Pivot/components/SwipePivot.module.css +114 -0
  269. package/src/demo/pages/Pivot/components/SwipePivot.tsx +193 -0
  270. package/src/demo/pages/Pivot/components/SwipeTabsPivot.module.css +203 -0
  271. package/src/demo/pages/Pivot/components/SwipeTabsPivot.tsx +289 -0
  272. package/src/demo/pages/Pivot/sidebar/index.tsx +17 -0
  273. package/src/demo/pages/Pivot/swipe/index.tsx +16 -0
  274. package/src/demo/pages/Pivot/swipe-debug/index.tsx +287 -0
  275. package/src/demo/pages/Pivot/swipe-tabs/index.tsx +15 -0
  276. package/src/demo/pages/Pivot/tabs/index.tsx +17 -0
  277. package/src/demo/pages/Pivot/transitions/index.tsx +17 -0
  278. package/src/demo/pages/ResizeHandle/both-directions/index.tsx +17 -0
  279. package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.module.css +72 -0
  280. package/src/demo/pages/ResizeHandle/components/BothDirectionsDemo.tsx +41 -0
  281. package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.module.css +61 -0
  282. package/src/demo/pages/ResizeHandle/components/HorizontalResizeDemo.tsx +33 -0
  283. package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.module.css +83 -0
  284. package/src/demo/pages/ResizeHandle/components/NestedPanelsDemo.tsx +53 -0
  285. package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.module.css +68 -0
  286. package/src/demo/pages/ResizeHandle/components/VerticalResizeDemo.tsx +33 -0
  287. package/src/demo/pages/ResizeHandle/horizontal/index.tsx +17 -0
  288. package/src/demo/pages/ResizeHandle/index.module.css +11 -0
  289. package/src/demo/pages/ResizeHandle/index.tsx +71 -0
  290. package/src/demo/pages/ResizeHandle/nested-panels/index.tsx +17 -0
  291. package/src/demo/pages/ResizeHandle/vertical/index.tsx +17 -0
  292. package/src/demo/pages/ResponsiveLayout/adaptive-workspace/index.tsx +22 -0
  293. package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.module.css +423 -0
  294. package/src/demo/pages/ResponsiveLayout/components/ResponsiveWorkspace.tsx +398 -0
  295. package/src/demo/pages/Stack/basics/index.tsx +22 -0
  296. package/src/demo/pages/Stack/components/Stack.module.css +234 -0
  297. package/src/demo/pages/Stack/components/StackBasics.tsx +217 -0
  298. package/src/demo/pages/Stack/components/StackTablet.module.css +299 -0
  299. package/src/demo/pages/Stack/components/StackTablet.tsx +401 -0
  300. package/src/demo/pages/Stack/tablet/index.tsx +22 -0
  301. package/src/demo/pages/StickyHeader/basics/index.tsx +17 -0
  302. package/src/demo/pages/StickyHeader/components/StickyHeader.module.css +219 -0
  303. package/src/demo/pages/StickyHeader/components/StickyHeaderBasics.tsx +103 -0
  304. package/src/demo/routes.tsx +193 -0
  305. package/src/demo/styles/animations.css +68 -0
  306. package/src/demo/styles/stack-themes.css +35 -0
  307. package/src/demo/utils/createPanelView.tsx +58 -0
  308. package/src/floating/index.ts +24 -0
  309. package/src/grid/index.ts +75 -0
  310. package/src/hooks/ContentCacheContext.tsx +87 -0
  311. package/src/hooks/gesture/presets.spec.ts +86 -0
  312. package/src/hooks/gesture/presets.ts +95 -0
  313. package/src/hooks/gesture/testing/createGestureSimulator.spec.ts +237 -0
  314. package/src/hooks/gesture/testing/createGestureSimulator.ts +310 -0
  315. package/src/hooks/gesture/thresholdValue.spec.ts +103 -0
  316. package/src/hooks/gesture/thresholdValue.ts +77 -0
  317. package/src/hooks/gesture/types.ts +290 -0
  318. package/src/hooks/gesture/useDirectionalLock.spec.ts +271 -0
  319. package/src/hooks/gesture/useDirectionalLock.ts +115 -0
  320. package/src/hooks/gesture/useEdgeSwipeInput.spec.ts +454 -0
  321. package/src/hooks/gesture/useEdgeSwipeInput.ts +131 -0
  322. package/src/hooks/gesture/useNativeGestureGuard.spec.ts +413 -0
  323. package/src/hooks/gesture/useNativeGestureGuard.ts +133 -0
  324. package/src/hooks/gesture/usePointerTracking.spec.ts +364 -0
  325. package/src/hooks/gesture/usePointerTracking.ts +134 -0
  326. package/src/hooks/gesture/useScrollBoundary.spec.ts +249 -0
  327. package/src/hooks/gesture/useScrollBoundary.ts +113 -0
  328. package/src/hooks/gesture/useSwipeInput.spec.ts +592 -0
  329. package/src/hooks/gesture/useSwipeInput.ts +310 -0
  330. package/src/hooks/gesture/utils.spec.ts +152 -0
  331. package/src/hooks/gesture/utils.ts +87 -0
  332. package/src/hooks/useAnimatedVisibility.spec.ts +257 -0
  333. package/src/hooks/useAnimatedVisibility.ts +146 -0
  334. package/src/hooks/useAnimationFrame.ts +200 -0
  335. package/src/hooks/useCSSMatrix.spec.ts +214 -0
  336. package/src/hooks/useCSSMatrix.ts +262 -0
  337. package/src/hooks/useClonedElementPreview.ts +28 -0
  338. package/src/hooks/useContainerScroll.ts +78 -0
  339. package/src/hooks/useContentCache.spec.tsx +232 -0
  340. package/src/hooks/useContentCache.tsx +127 -0
  341. package/src/hooks/useDocumentPointerEvents.ts +137 -0
  342. package/src/hooks/useDocumentScroll.ts +41 -0
  343. package/src/hooks/useEffectEvent.ts +40 -0
  344. package/src/hooks/useElementComponentWrapper.tsx +63 -0
  345. package/src/hooks/useIntersectionObserver.tsx +125 -0
  346. package/src/hooks/useIsomorphicLayoutEffect.ts +29 -0
  347. package/src/hooks/useResizeObserver.tsx +81 -0
  348. package/src/hooks/useScrollContainer.ts +79 -0
  349. package/src/hooks/useSnapAnimation.ts +128 -0
  350. package/src/hooks/useSwipeContentTransform.spec.ts +133 -0
  351. package/src/hooks/useSwipeContentTransform.ts +235 -0
  352. package/src/hooks/useTransitionState.ts +95 -0
  353. package/src/index.tsx +88 -0
  354. package/src/modules/grid/GridLayoutContext.tsx +57 -0
  355. package/src/modules/grid/LayerInstanceContext.tsx +56 -0
  356. package/src/modules/grid/resizeHandles.ts +157 -0
  357. package/src/modules/grid/trackUtils.ts +146 -0
  358. package/src/modules/grid/useGridPlacements.ts +143 -0
  359. package/src/modules/grid/useGridTracks.ts +156 -0
  360. package/src/modules/grid/useLayerDragHandle.ts +16 -0
  361. package/src/modules/grid/useLayerInteractions.tsx +850 -0
  362. package/src/modules/keybindings/KeybindingsProvider.tsx +111 -0
  363. package/src/modules/panels/dom/DomRegistry.tsx +94 -0
  364. package/src/modules/panels/index.ts +45 -0
  365. package/src/modules/panels/interactions/InteractionsContext.test.tsx +330 -0
  366. package/src/modules/panels/interactions/InteractionsContext.tsx +394 -0
  367. package/src/modules/panels/interactions/dnd.ts +28 -0
  368. package/src/modules/panels/keybindings/KeybindingsInstaller.tsx +15 -0
  369. package/src/modules/panels/layout/adapter.ts +124 -0
  370. package/src/modules/panels/rendering/ContentRegistry.spec.tsx +304 -0
  371. package/src/modules/panels/rendering/ContentRegistry.tsx +205 -0
  372. package/src/modules/panels/rendering/GroupContainer.tsx +65 -0
  373. package/src/modules/panels/rendering/RenderBridge.tsx +115 -0
  374. package/src/modules/panels/rendering/RenderContext.tsx +31 -0
  375. package/src/modules/panels/state/PanelSplitHandles.tsx +147 -0
  376. package/src/modules/panels/state/PanelSystemContext.splitLimits.spec.tsx +50 -0
  377. package/src/modules/panels/state/PanelSystemContext.tsx +289 -0
  378. package/src/modules/panels/state/StateContext.tsx +12 -0
  379. package/src/modules/panels/state/cleanup.ts +37 -0
  380. package/src/modules/panels/state/commands.ts +53 -0
  381. package/src/modules/panels/state/focus/Context.tsx +25 -0
  382. package/src/modules/panels/state/focus/logic.ts +57 -0
  383. package/src/modules/panels/state/groups/Context.tsx +25 -0
  384. package/src/modules/panels/state/groups/logic.ts +105 -0
  385. package/src/modules/panels/state/splitLimits.spec.ts +46 -0
  386. package/src/modules/panels/state/splitLimits.ts +90 -0
  387. package/src/modules/panels/state/state.spec.ts +49 -0
  388. package/src/modules/panels/state/tree/Context.tsx +24 -0
  389. package/src/modules/panels/state/tree/logic.spec.ts +34 -0
  390. package/src/modules/panels/state/tree/logic.ts +138 -0
  391. package/src/modules/panels/state/types.ts +142 -0
  392. package/src/modules/panels/system/PanelSystem.empty-tabbar.spec.tsx +53 -0
  393. package/src/modules/panels/system/PanelSystem.tab-click-activates.spec.tsx +44 -0
  394. package/src/modules/panels/system/PanelSystem.tab-reorder.spec.tsx +64 -0
  395. package/src/modules/panels/system/PanelSystem.tabs-no-dup.spec.tsx +57 -0
  396. package/src/modules/panels/system/PanelSystem.tsx +206 -0
  397. package/src/modules/pivot/PivotContent.spec.tsx +179 -0
  398. package/src/modules/pivot/PivotContent.tsx +77 -0
  399. package/src/modules/pivot/SwipePivotContent.debug.tmp.tsx +237 -0
  400. package/src/modules/pivot/SwipePivotContent.position.spec.tsx +167 -0
  401. package/src/modules/pivot/SwipePivotContent.spec.tsx +464 -0
  402. package/src/modules/pivot/SwipePivotContent.test.tsx +502 -0
  403. package/src/modules/pivot/SwipePivotContent.tsx +197 -0
  404. package/src/modules/pivot/SwipePivotTabBar.spec.tsx +865 -0
  405. package/src/modules/pivot/SwipePivotTabBar.tsx +523 -0
  406. package/src/modules/pivot/index.ts +8 -0
  407. package/src/modules/pivot/scaleInputState.spec.ts +210 -0
  408. package/src/modules/pivot/scaleInputState.ts +66 -0
  409. package/src/modules/pivot/types.ts +139 -0
  410. package/src/modules/pivot/usePivot.spec.ts +621 -0
  411. package/src/modules/pivot/usePivot.spec.tsx +186 -0
  412. package/src/modules/pivot/usePivot.tsx +345 -0
  413. package/src/modules/pivot/usePivotSwipeInput.spec.ts +649 -0
  414. package/src/modules/pivot/usePivotSwipeInput.ts +136 -0
  415. package/src/modules/resizer/useResizeDrag.ts +94 -0
  416. package/src/modules/stack/StackContent.spec.tsx +264 -0
  417. package/src/modules/stack/StackContent.tsx +111 -0
  418. package/src/modules/stack/SwipeStackContent.spec.tsx +1277 -0
  419. package/src/modules/stack/SwipeStackContent.tsx +356 -0
  420. package/src/modules/stack/SwipeStackOutlet.spec.tsx +252 -0
  421. package/src/modules/stack/SwipeStackOutlet.tsx +221 -0
  422. package/src/modules/stack/computeStackContentState.spec.ts +281 -0
  423. package/src/modules/stack/computeStackContentState.ts +304 -0
  424. package/src/modules/stack/computeSwipeStackTransform.spec.ts +186 -0
  425. package/src/modules/stack/computeSwipeStackTransform.ts +145 -0
  426. package/src/modules/stack/types.ts +226 -0
  427. package/src/modules/stack/useStackAnimationState.spec.ts +186 -0
  428. package/src/modules/stack/useStackAnimationState.ts +138 -0
  429. package/src/modules/stack/useStackNavigation.spec.ts +477 -0
  430. package/src/modules/stack/useStackNavigation.tsx +336 -0
  431. package/src/modules/stack/useStackSwipeInput.spec.ts +276 -0
  432. package/src/modules/stack/useStackSwipeInput.ts +139 -0
  433. package/src/modules/window/useDrawerState.ts +81 -0
  434. package/src/modules/window/useFloatingState.spec.ts +252 -0
  435. package/src/modules/window/useFloatingState.ts +141 -0
  436. package/src/panels/index.ts +119 -0
  437. package/src/pivot/index.ts +19 -0
  438. package/src/resizer/index.ts +68 -0
  439. package/src/stack/index.ts +91 -0
  440. package/src/sticky-header/StickyArea.tsx +221 -0
  441. package/src/sticky-header/index.ts +18 -0
  442. package/src/sticky-header/types.ts +68 -0
  443. package/src/types.ts +323 -0
  444. package/src/utils/CSSMatrix.ts +321 -0
  445. package/src/utils/css.ts +65 -0
  446. package/src/utils/dialogUtils.ts +43 -0
  447. package/src/utils/math.ts +18 -0
  448. package/src/utils/polyfills/createDialogPolyfill.ts +18 -0
  449. package/src/utils/typedActions.ts +103 -0
  450. package/src/vite-env.d.ts +6 -0
  451. package/src/window/index.ts +67 -0
  452. package/dist/FloatingPanelFrame-6W5OexYe.js.map +0 -1
  453. package/dist/FloatingPanelFrame-D9Cp2al1.cjs.map +0 -1
  454. package/dist/GridLayout-BzrIDrC9.js +0 -1465
  455. package/dist/GridLayout-BzrIDrC9.js.map +0 -1
  456. package/dist/GridLayout-ZrOhoLLB.cjs +0 -2
  457. package/dist/GridLayout-ZrOhoLLB.cjs.map +0 -1
  458. package/dist/sticky-header/StickyHeader.d.ts +0 -53
  459. package/dist/styles-CA2_zLZt.js +0 -52
  460. package/dist/styles-CA2_zLZt.js.map +0 -1
  461. package/dist/styles-PsqGOEJP.cjs +0 -2
  462. package/dist/styles-PsqGOEJP.cjs.map +0 -1
  463. package/dist/usePivot-BS-DGfwd.cjs +0 -2
  464. package/dist/usePivot-BS-DGfwd.cjs.map +0 -1
  465. package/dist/usePivot-BvOGxLQQ.js +0 -124
  466. package/dist/usePivot-BvOGxLQQ.js.map +0 -1
@@ -0,0 +1,405 @@
1
+ # Design Tokens (CSS Variables)
2
+
3
+ react-panel-layout uses CSS custom properties (CSS variables) for theming. All design tokens are prefixed with `--rpl-` to avoid conflicts with other libraries.
4
+
5
+ ## Overview
6
+
7
+ The library provides a comprehensive set of CSS variables that control the appearance of panels, tabs, and interactive elements. You can customize these variables in your own stylesheet to match your application's design.
8
+
9
+ **No JavaScript configuration needed** - all theming is done purely through CSS.
10
+
11
+ ## CSS Variables Reference
12
+
13
+ ### Colors
14
+
15
+ #### Tab Colors
16
+
17
+ | Variable | Default | Description |
18
+ |----------|---------|-------------|
19
+ | `--rpl-color-tab-fg` | `#d5d7de` | Tab text color |
20
+ | `--rpl-color-tab-active-bg` | `#2b2d35` | Active tab background |
21
+ | `--rpl-color-tabbar-bg` | `#1e1f24` | Tab bar background |
22
+
23
+ #### Panel Colors
24
+
25
+ | Variable | Default | Description |
26
+ |----------|---------|-------------|
27
+ | `--rpl-color-panel-border` | `rgba(0, 0, 0, 0.3)` | Panel border color |
28
+ | `--rpl-color-panel-bg` | `#0b0b0c` | Panel content background |
29
+ | `--rpl-color-primary` | `#2196f3` | Primary accent color (resize handles) |
30
+
31
+ #### Resize Handle Colors
32
+
33
+ | Variable | Default | Description |
34
+ |----------|---------|-------------|
35
+ | `--rpl-color-resize-handle-hover` | `rgba(33, 150, 243, 0.35)` | Divider color when hovered |
36
+ | `--rpl-color-resize-handle-active` | `rgba(33, 150, 243, 0.55)` | Divider color while dragging |
37
+
38
+ #### Drag & Drop Colors
39
+
40
+ | Variable | Default | Description |
41
+ |----------|---------|-------------|
42
+ | `--rpl-color-drop-suggest-border` | `rgba(90, 150, 255, 0.9)` | Drop zone border color |
43
+ | `--rpl-color-drop-suggest-bg` | `rgba(90, 150, 255, 0.15)` | Drop zone background |
44
+ | `--rpl-color-tabdrag-bg` | `rgba(34, 36, 42, 0.95)` | Dragged tab background |
45
+ | `--rpl-color-tabdrag-fg` | `#e9ebf0` | Dragged tab text color |
46
+ | `--rpl-color-tabdrag-border` | `rgba(120, 160, 255, 0.6)` | Dragged tab border |
47
+ | `--rpl-color-tabdrag-shadow` | `0 6px 20px rgba(0, 0, 0, 0.35)` | Dragged tab shadow |
48
+ | `--rpl-color-insert-guide` | `rgba(120, 160, 255, 0.95)` | Tab insert guide color |
49
+ | `--rpl-color-insert-guide-shadow` | `0 0 0 2px rgba(120, 160, 255, 0.2)` | Insert guide shadow |
50
+
51
+ ### Sizing & Spacing
52
+
53
+ #### Tab Sizing
54
+
55
+ | Variable | Default | Description |
56
+ |----------|---------|-------------|
57
+ | `--rpl-size-tab-font` | `12px` | Tab font size |
58
+ | `--rpl-space-tab-padding-y` | `4px` | Tab vertical padding |
59
+ | `--rpl-space-tab-padding-x` | `8px` | Tab horizontal padding |
60
+
61
+ #### Tab Bar Spacing
62
+
63
+ | Variable | Default | Description |
64
+ |----------|---------|-------------|
65
+ | `--rpl-space-tabbar-gap` | `6px` | Gap between tabs |
66
+ | `--rpl-space-tabbar-padding-y` | `4px` | Tab bar vertical padding |
67
+ | `--rpl-space-tabbar-padding-x` | `6px` | Tab bar horizontal padding |
68
+
69
+ #### Border Radius
70
+
71
+ | Variable | Default | Description |
72
+ |----------|---------|-------------|
73
+ | `--rpl-radius-tab` | `4px` | Tab corner radius |
74
+ | `--rpl-radius-suggest` | `6px` | Drop suggestion corner radius |
75
+
76
+ #### Border Widths
77
+
78
+ | Variable | Default | Description |
79
+ |----------|---------|-------------|
80
+ | `--rpl-size-suggest-border` | `2px` | Drop suggestion border width |
81
+
82
+ #### Handle Thicknesses
83
+
84
+ | Variable | Default | Description |
85
+ |----------|---------|-------------|
86
+ | `--rpl-size-grid-handle-thickness` | `4px` | Grid track resize handle thickness |
87
+ | `--rpl-size-resize-handle-thickness` | `4px` | Component resize handle thickness |
88
+ | `--rpl-size-split-handle-thickness` | `6px` | Panel split handle thickness |
89
+
90
+ #### Padding
91
+
92
+ | Variable | Default | Description |
93
+ |----------|---------|-------------|
94
+ | `--rpl-space-drop-suggest-padding` | `6px` | Padding inside drop suggestion zone |
95
+
96
+ ### Z-Index
97
+
98
+ | Variable | Default | Description |
99
+ |----------|---------|-------------|
100
+ | `--rpl-z-overlay` | `9998` | Drop suggestion overlay z-index |
101
+ | `--rpl-z-tabdrag-overlay` | `9999` | Tab drag overlay z-index |
102
+
103
+ ### Pivot Animations
104
+
105
+ | Variable | Default | Description |
106
+ |----------|---------|-------------|
107
+ | `--rpl-pivot-animation-enter` | `none` | Animation when content becomes active |
108
+ | `--rpl-pivot-animation-leave` | `none` | Animation when content becomes inactive |
109
+
110
+ User defines `@keyframes` in their CSS and references via these tokens:
111
+
112
+ ```css
113
+ @keyframes pivotEnter {
114
+ from { opacity: 0; transform: translateY(8px); }
115
+ to { opacity: 1; transform: translateY(0); }
116
+ }
117
+
118
+ @keyframes pivotLeave {
119
+ from { opacity: 1; }
120
+ to { opacity: 0; }
121
+ }
122
+
123
+ :root {
124
+ --rpl-pivot-animation-enter: pivotEnter 150ms ease-out forwards;
125
+ --rpl-pivot-animation-leave: pivotLeave 150ms ease-out forwards;
126
+ }
127
+
128
+ ## Usage
129
+
130
+ ### Basic Import
131
+
132
+ ```tsx
133
+ import 'react-panel-layout/style.css'
134
+ ```
135
+
136
+ The CSS variables are automatically applied when you import the stylesheet.
137
+
138
+ ### Customizing Theme
139
+
140
+ Override CSS variables in your own stylesheet:
141
+
142
+ ```css
143
+ /* Override specific variables */
144
+ :root {
145
+ --rpl-color-primary: #ff6b6b;
146
+ --rpl-color-tab-active-bg: #3a3f4b;
147
+ --rpl-radius-tab: 8px;
148
+ }
149
+ ```
150
+
151
+ ### Scoped Theming
152
+
153
+ Apply different themes to different parts of your app:
154
+
155
+ ```css
156
+ /* Dark theme (default) */
157
+ .dark-theme {
158
+ --rpl-color-tabbar-bg: #1e1f24;
159
+ --rpl-color-panel-bg: #0b0b0c;
160
+ --rpl-color-panel-border: rgba(0, 0, 0, 0.3);
161
+ }
162
+
163
+ /* Light theme */
164
+ .light-theme {
165
+ --rpl-color-tabbar-bg: #f5f5f5;
166
+ --rpl-color-panel-bg: #ffffff;
167
+ --rpl-color-panel-border: rgba(0, 0, 0, 0.1);
168
+ --rpl-color-tab-fg: #1a1a1a;
169
+ --rpl-color-tab-active-bg: #e0e0e0;
170
+ }
171
+ ```
172
+
173
+ ```tsx
174
+ <div className="light-theme">
175
+ <PanelSystem {...props} />
176
+ </div>
177
+ ```
178
+
179
+ ## Examples
180
+
181
+ ### Example 1: Brand Colors
182
+
183
+ ```css
184
+ :root {
185
+ /* Use your brand primary color */
186
+ --rpl-color-primary: #7c3aed;
187
+ --rpl-color-tab-active-bg: #6d28d9;
188
+
189
+ /* Matching drop suggestions */
190
+ --rpl-color-drop-suggest-border: rgba(124, 58, 237, 0.9);
191
+ --rpl-color-drop-suggest-bg: rgba(124, 58, 237, 0.15);
192
+ }
193
+ ```
194
+
195
+ ### Example 2: Larger UI
196
+
197
+ ```css
198
+ :root {
199
+ /* Increase font size and spacing */
200
+ --rpl-size-tab-font: 14px;
201
+ --rpl-space-tab-padding-y: 6px;
202
+ --rpl-space-tab-padding-x: 12px;
203
+ --rpl-space-tabbar-gap: 8px;
204
+
205
+ /* Thicker handles for easier grabbing */
206
+ --rpl-size-split-handle-thickness: 8px;
207
+ --rpl-size-resize-handle-thickness: 6px;
208
+ }
209
+ ```
210
+
211
+ ### Example 3: Minimal Style
212
+
213
+ ```css
214
+ :root {
215
+ /* Remove rounded corners */
216
+ --rpl-radius-tab: 0;
217
+ --rpl-radius-suggest: 0;
218
+
219
+ /* Minimal spacing */
220
+ --rpl-space-tab-padding-y: 2px;
221
+ --rpl-space-tab-padding-x: 6px;
222
+ --rpl-space-tabbar-gap: 2px;
223
+
224
+ /* Subtle colors */
225
+ --rpl-color-panel-border: rgba(0, 0, 0, 0.1);
226
+ --rpl-color-primary: #666;
227
+ }
228
+ ```
229
+
230
+ ### Example 4: High Contrast
231
+
232
+ ```css
233
+ :root {
234
+ /* High contrast colors */
235
+ --rpl-color-tab-fg: #ffffff;
236
+ --rpl-color-tab-active-bg: #000000;
237
+ --rpl-color-tabbar-bg: #1a1a1a;
238
+ --rpl-color-panel-bg: #000000;
239
+ --rpl-color-panel-border: #ffffff;
240
+ --rpl-color-primary: #00ff00;
241
+
242
+ /* Thicker borders for visibility */
243
+ --rpl-size-suggest-border: 3px;
244
+ }
245
+ ```
246
+
247
+ ### Example 5: VS Code Theme
248
+
249
+ ```css
250
+ :root {
251
+ /* VS Code Dark+ colors */
252
+ --rpl-color-tabbar-bg: #2d2d30;
253
+ --rpl-color-tab-fg: #cccccc;
254
+ --rpl-color-tab-active-bg: #1e1e1e;
255
+ --rpl-color-panel-bg: #1e1e1e;
256
+ --rpl-color-panel-border: #3e3e42;
257
+ --rpl-color-primary: #007acc;
258
+
259
+ /* VS Code tab styling */
260
+ --rpl-size-tab-font: 13px;
261
+ --rpl-space-tab-padding-y: 8px;
262
+ --rpl-space-tab-padding-x: 10px;
263
+ --rpl-radius-tab: 0;
264
+ }
265
+ ```
266
+
267
+ ## Best Practices
268
+
269
+ ### 1. Use CSS Custom Properties for Dynamic Themes
270
+
271
+ ```css
272
+ /* Define theme tokens */
273
+ .app {
274
+ --brand-primary: #3b82f6;
275
+ --surface-1: #1f2937;
276
+ --surface-2: #111827;
277
+ }
278
+
279
+ /* Map to panel tokens */
280
+ :root {
281
+ --rpl-color-primary: var(--brand-primary);
282
+ --rpl-color-tabbar-bg: var(--surface-1);
283
+ --rpl-color-panel-bg: var(--surface-2);
284
+ }
285
+ ```
286
+
287
+ ### 2. Respect User Preferences
288
+
289
+ ```css
290
+ @media (prefers-color-scheme: light) {
291
+ :root {
292
+ --rpl-color-tabbar-bg: #f5f5f5;
293
+ --rpl-color-panel-bg: #ffffff;
294
+ --rpl-color-tab-fg: #1a1a1a;
295
+ /* ... other light theme colors */
296
+ }
297
+ }
298
+
299
+ @media (prefers-color-scheme: dark) {
300
+ :root {
301
+ --rpl-color-tabbar-bg: #1e1f24;
302
+ --rpl-color-panel-bg: #0b0b0c;
303
+ --rpl-color-tab-fg: #d5d7de;
304
+ /* ... other dark theme colors */
305
+ }
306
+ }
307
+ ```
308
+
309
+ ### 3. Layer Your Customizations
310
+
311
+ ```css
312
+ /* Base layer - application defaults */
313
+ :root {
314
+ --rpl-color-primary: #3b82f6;
315
+ }
316
+
317
+ /* Component layer - specific component overrides */
318
+ .editor-panels {
319
+ --rpl-color-panel-bg: #1a1a1a;
320
+ --rpl-size-tab-font: 11px;
321
+ }
322
+
323
+ /* State layer - interactive states */
324
+ .editor-panels[data-focus="true"] {
325
+ --rpl-color-panel-border: var(--rpl-color-primary);
326
+ }
327
+ ```
328
+
329
+ ## Troubleshooting
330
+
331
+ ### Theme Not Applying
332
+
333
+ Make sure you're importing the CSS:
334
+
335
+ ```tsx
336
+ import 'react-panel-layout/style.css'
337
+ ```
338
+
339
+ ### Variables Not Working
340
+
341
+ Check that your CSS variables are defined before the component mounts:
342
+
343
+ ```html
344
+ <!-- ❌ Wrong - overrides loaded after component -->
345
+ <PanelSystem />
346
+ <link rel="stylesheet" href="custom-theme.css">
347
+
348
+ <!-- ✅ Correct - overrides loaded before component -->
349
+ <link rel="stylesheet" href="custom-theme.css">
350
+ <PanelSystem />
351
+ ```
352
+
353
+ ### Specificity Issues
354
+
355
+ If variables aren't applying, check CSS specificity:
356
+
357
+ ```css
358
+ /* ❌ May not work if overridden */
359
+ .my-theme {
360
+ --rpl-color-primary: red;
361
+ }
362
+
363
+ /* ✅ Higher specificity */
364
+ .app .my-theme {
365
+ --rpl-color-primary: red;
366
+ }
367
+
368
+ /* ✅ Or use :root for global */
369
+ :root {
370
+ --rpl-color-primary: red;
371
+ }
372
+ ```
373
+
374
+ ## Migration from v0.0.x
375
+
376
+ Previous versions used a `themeTokens` prop on `PanelThemeProvider`. This has been removed in favor of CSS variables.
377
+
378
+ **Before:**
379
+ ```tsx
380
+ <PanelThemeProvider tokens={{
381
+ colorPrimary: '#ff6b6b',
382
+ splitHandleThickness: 8
383
+ }}>
384
+ <PanelSystem {...props} />
385
+ </PanelThemeProvider>
386
+ ```
387
+
388
+ **After:**
389
+ ```css
390
+ :root {
391
+ --rpl-color-primary: #ff6b6b;
392
+ --rpl-size-split-handle-thickness: 8px;
393
+ }
394
+ ```
395
+
396
+ ```tsx
397
+ <PanelSystem {...props} />
398
+ ```
399
+
400
+ Benefits:
401
+ - ✅ No extra provider needed
402
+ - ✅ Better performance (no React re-renders for theme changes)
403
+ - ✅ Standard CSS - works with any CSS preprocessor
404
+ - ✅ Easier to override with media queries
405
+ - ✅ Smaller bundle size
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-panel-layout",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "license": "Unlicense",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -11,9 +11,6 @@
11
11
  "type": "git",
12
12
  "url": "git+https://github.com/trkbt10/react-panel-layout.git"
13
13
  },
14
- "sideEffects": [
15
- "**/*.css"
16
- ],
17
14
  "exports": {
18
15
  ".": {
19
16
  "types": "./dist/index.d.ts",
@@ -40,9 +37,36 @@
40
37
  "import": "./dist/sticky-header.js",
41
38
  "require": "./dist/sticky-header.cjs"
42
39
  },
40
+ "./stack": {
41
+ "types": "./dist/stack/index.d.ts",
42
+ "import": "./dist/stack.js",
43
+ "require": "./dist/stack.cjs"
44
+ },
45
+ "./resizer": {
46
+ "types": "./dist/resizer/index.d.ts",
47
+ "import": "./dist/resizer.js",
48
+ "require": "./dist/resizer.cjs"
49
+ },
50
+ "./grid": {
51
+ "types": "./dist/grid/index.d.ts",
52
+ "import": "./dist/grid.js",
53
+ "require": "./dist/grid.cjs"
54
+ },
55
+ "./window": {
56
+ "types": "./dist/window/index.d.ts",
57
+ "import": "./dist/window.js",
58
+ "require": "./dist/window.cjs"
59
+ },
60
+ "./panels": {
61
+ "types": "./dist/panels/index.d.ts",
62
+ "import": "./dist/panels.js",
63
+ "require": "./dist/panels.cjs"
64
+ },
43
65
  "./package.json": "./package.json"
44
66
  },
45
67
  "files": [
68
+ "src",
69
+ "docs",
46
70
  "dist",
47
71
  "README.md"
48
72
  ],
@@ -80,6 +104,7 @@
80
104
  "react-icons": "^5.5.0",
81
105
  "react-router": "^7.9.4",
82
106
  "rimraf": "^6.0.1",
107
+ "shiki": "^3.20.0",
83
108
  "typescript": "^5.9.3",
84
109
  "typescript-eslint": "^8.46.2",
85
110
  "vite": "^7.1.12",
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @file PanelSystemContext
3
+ *
4
+ * Core provider for panel definitions and registry. Grid-specific layout and
5
+ * interactions are composed by UI layers (e.g., GridLayout) on top of this.
6
+ *
7
+ * Includes content caching to preserve React component state across re-renders.
8
+ * This is essential for maintaining internal state when parent components
9
+ * re-create the layers array.
10
+ */
11
+ import * as React from "react";
12
+ import type { PanelLayoutConfig, LayerDefinition } from "./types";
13
+ import { useContentCache } from "./hooks/useContentCache";
14
+
15
+ export type PanelSystemContextValue = {
16
+ config: PanelLayoutConfig;
17
+ style?: React.CSSProperties;
18
+ layers: {
19
+ /** Raw panel definitions (no grid normalization). */
20
+ defs: LayerDefinition[];
21
+ /** Fast lookup map by id for consumers. */
22
+ layerById: Map<string, LayerDefinition>;
23
+ };
24
+ /**
25
+ * Get cached content for a layer. Returns the same ReactNode reference
26
+ * for the same layer ID to prevent remounting on parent re-renders.
27
+ */
28
+ getCachedContent: (layerId: string) => React.ReactNode | null;
29
+ };
30
+
31
+ const PanelSystemContext = React.createContext<PanelSystemContextValue | null>(null);
32
+
33
+ export const usePanelSystem = (): PanelSystemContextValue => {
34
+ const ctx = React.useContext(PanelSystemContext);
35
+ if (!ctx) {
36
+ throw new Error("usePanelSystem must be used within a PanelSystemProvider.");
37
+ }
38
+ return ctx;
39
+ };
40
+
41
+ export type PanelSystemProviderProps = React.PropsWithChildren<{
42
+ config: PanelLayoutConfig;
43
+ layers: LayerDefinition[];
44
+ style?: React.CSSProperties;
45
+ }>;
46
+
47
+ export const PanelSystemProvider: React.FC<PanelSystemProviderProps> = ({ config, layers, style, children }) => {
48
+ const layerById = React.useMemo(() => {
49
+ const map = new Map<string, LayerDefinition>();
50
+ layers.forEach((layer) => {
51
+ map.set(layer.id, layer);
52
+ });
53
+ return map;
54
+ }, [layers]);
55
+
56
+ // Content resolver for useContentCache
57
+ const resolveContent = React.useCallback(
58
+ (layerId: string): React.ReactNode | null => {
59
+ const layer = layerById.get(layerId);
60
+ return layer?.component ?? null;
61
+ },
62
+ [layerById],
63
+ );
64
+
65
+ // Valid IDs for cache cleanup
66
+ const validIds = React.useMemo(() => layers.map((l) => l.id), [layers]);
67
+
68
+ // Use shared content cache hook
69
+ const { getCachedContent } = useContentCache({
70
+ resolveContent,
71
+ validIds,
72
+ });
73
+
74
+ const value = React.useMemo<PanelSystemContextValue>(
75
+ () => ({
76
+ config,
77
+ style,
78
+ layers: {
79
+ defs: layers,
80
+ layerById,
81
+ },
82
+ getCachedContent,
83
+ }),
84
+ [config, style, layers, layerById, getCachedContent],
85
+ );
86
+
87
+ return <PanelSystemContext.Provider value={value}>{children}</PanelSystemContext.Provider>;
88
+ };