@womp/kookie-ui 0.36.0 → 0.37.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 (285) hide show
  1. package/components.css +0 -20
  2. package/dist/cjs/components/_internal/base-menu.utils.js +1 -1
  3. package/dist/cjs/components/_internal/base-menu.utils.js.map +2 -2
  4. package/dist/cjs/components/_internal/menu-context.js +1 -1
  5. package/dist/cjs/components/_internal/menu-context.js.map +2 -2
  6. package/dist/cjs/components/_internal/pane-chrome.js +1 -1
  7. package/dist/cjs/components/_internal/pane-chrome.js.map +2 -2
  8. package/dist/cjs/components/_internal/shell-bottom.d.ts +3 -3
  9. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  10. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  11. package/dist/cjs/components/_internal/shell-bottom.js.map +3 -3
  12. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  13. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  14. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  15. package/dist/cjs/components/_internal/shell-inspector.d.ts +3 -3
  16. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  17. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  18. package/dist/cjs/components/_internal/shell-inspector.js.map +3 -3
  19. package/dist/cjs/components/_internal/shell-pane.d.ts +2 -7
  20. package/dist/cjs/components/_internal/shell-pane.d.ts.map +1 -1
  21. package/dist/cjs/components/_internal/shell-pane.js +1 -1
  22. package/dist/cjs/components/_internal/shell-pane.js.map +3 -3
  23. package/dist/cjs/components/_internal/shell-resizable.d.ts +3 -9
  24. package/dist/cjs/components/_internal/shell-resizable.d.ts.map +1 -1
  25. package/dist/cjs/components/_internal/shell-resizable.js +1 -1
  26. package/dist/cjs/components/_internal/shell-resizable.js.map +3 -3
  27. package/dist/cjs/components/_internal/shell-resize.d.ts +0 -4
  28. package/dist/cjs/components/_internal/shell-resize.d.ts.map +1 -1
  29. package/dist/cjs/components/_internal/shell-resize.js +1 -1
  30. package/dist/cjs/components/_internal/shell-resize.js.map +2 -2
  31. package/dist/cjs/components/_internal/shell-rest.d.ts +1 -6
  32. package/dist/cjs/components/_internal/shell-rest.d.ts.map +1 -1
  33. package/dist/cjs/components/_internal/shell-rest.js +1 -1
  34. package/dist/cjs/components/_internal/shell-rest.js.map +3 -3
  35. package/dist/cjs/components/_internal/shell-sidebar.d.ts +3 -3
  36. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  37. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  38. package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
  39. package/dist/cjs/components/_internal/shell-store.d.ts +0 -10
  40. package/dist/cjs/components/_internal/shell-store.d.ts.map +1 -1
  41. package/dist/cjs/components/_internal/shell-store.js +1 -1
  42. package/dist/cjs/components/_internal/shell-store.js.map +3 -3
  43. package/dist/cjs/components/accordion.js +1 -1
  44. package/dist/cjs/components/accordion.js.map +1 -1
  45. package/dist/cjs/components/accordion.props.d.ts +4 -3
  46. package/dist/cjs/components/accordion.props.d.ts.map +1 -1
  47. package/dist/cjs/components/accordion.props.js +1 -1
  48. package/dist/cjs/components/accordion.props.js.map +1 -1
  49. package/dist/cjs/components/checkbox-group.js +1 -1
  50. package/dist/cjs/components/checkbox-group.js.map +3 -3
  51. package/dist/cjs/components/checkbox-group.primitive.d.ts +0 -10
  52. package/dist/cjs/components/checkbox-group.primitive.d.ts.map +1 -1
  53. package/dist/cjs/components/checkbox-group.primitive.js +1 -1
  54. package/dist/cjs/components/checkbox-group.primitive.js.map +3 -3
  55. package/dist/cjs/components/context-menu.d.ts +1 -5
  56. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  57. package/dist/cjs/components/context-menu.js +1 -1
  58. package/dist/cjs/components/context-menu.js.map +3 -3
  59. package/dist/cjs/components/dropdown-menu.js +1 -1
  60. package/dist/cjs/components/dropdown-menu.js.map +2 -2
  61. package/dist/cjs/components/index.js +2 -2
  62. package/dist/cjs/components/index.js.map +4 -4
  63. package/dist/cjs/components/navigator.js.map +2 -2
  64. package/dist/cjs/components/schemas/index.d.ts +1 -1
  65. package/dist/cjs/components/schemas/index.d.ts.map +1 -1
  66. package/dist/cjs/components/schemas/index.js +1 -1
  67. package/dist/cjs/components/schemas/index.js.map +3 -3
  68. package/dist/cjs/components/schemas/shell.schema.d.ts +6 -112
  69. package/dist/cjs/components/schemas/shell.schema.d.ts.map +1 -1
  70. package/dist/cjs/components/schemas/shell.schema.js +1 -1
  71. package/dist/cjs/components/schemas/shell.schema.js.map +3 -3
  72. package/dist/cjs/components/separator.js +1 -1
  73. package/dist/cjs/components/separator.js.map +2 -2
  74. package/dist/cjs/components/shell.context.d.ts +1 -45
  75. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  76. package/dist/cjs/components/shell.context.js +1 -1
  77. package/dist/cjs/components/shell.context.js.map +4 -4
  78. package/dist/cjs/components/shell.d.ts +7 -37
  79. package/dist/cjs/components/shell.d.ts.map +1 -1
  80. package/dist/cjs/components/shell.js +1 -1
  81. package/dist/cjs/components/shell.js.map +4 -4
  82. package/dist/cjs/components/shell.types.d.ts +6 -27
  83. package/dist/cjs/components/shell.types.d.ts.map +1 -1
  84. package/dist/cjs/components/shell.types.js +1 -1
  85. package/dist/cjs/components/shell.types.js.map +2 -2
  86. package/dist/cjs/components/sidebar.js +1 -1
  87. package/dist/cjs/components/sidebar.js.map +2 -2
  88. package/dist/cjs/components/toolbar.js +1 -1
  89. package/dist/cjs/components/toolbar.js.map +2 -2
  90. package/dist/cjs/hooks/use-breakpoint.js +1 -1
  91. package/dist/cjs/hooks/use-breakpoint.js.map +2 -2
  92. package/dist/cjs/index.js +4 -4
  93. package/dist/cjs/index.js.map +4 -4
  94. package/dist/cjs/props/index.js +1 -1
  95. package/dist/cjs/props/index.js.map +1 -1
  96. package/dist/esm/{chunk-5RLGDXOM.js → chunk-2K46JPUL.js} +2 -2
  97. package/dist/esm/chunk-3DBHPBG6.js +3 -0
  98. package/dist/esm/{chunk-ASBTPKH3.js.map → chunk-3DBHPBG6.js.map} +2 -2
  99. package/dist/esm/chunk-3K7E4XL3.js +3 -0
  100. package/dist/esm/chunk-3K7E4XL3.js.map +7 -0
  101. package/dist/esm/chunk-3LR7KMBE.js +3 -0
  102. package/dist/esm/chunk-3LR7KMBE.js.map +7 -0
  103. package/dist/esm/chunk-5U2LEJLU.js +3 -0
  104. package/dist/esm/chunk-5U2LEJLU.js.map +7 -0
  105. package/dist/esm/{chunk-IN6D33TU.js → chunk-5XO3PLDH.js} +2 -2
  106. package/dist/esm/{chunk-COLJWVN7.js → chunk-AQR42GKA.js} +2 -2
  107. package/dist/esm/{chunk-FTNZWAPB.js → chunk-ARPUPT4M.js} +2 -2
  108. package/dist/esm/{chunk-ISCZ57VL.js → chunk-DJGZ4K3V.js} +2 -2
  109. package/dist/esm/{chunk-PMXIQ5B4.js → chunk-FKCKELUB.js} +2 -2
  110. package/dist/esm/chunk-H7GH3DTF.js +3 -0
  111. package/dist/esm/chunk-H7GH3DTF.js.map +7 -0
  112. package/dist/esm/{chunk-E6MOZSYV.js → chunk-HNOT2HS4.js} +2 -2
  113. package/dist/esm/chunk-LBAC2X4U.js +3 -0
  114. package/dist/esm/{chunk-5BXCPANF.js.map → chunk-LBAC2X4U.js.map} +3 -3
  115. package/dist/esm/{chunk-MAA6LEE2.js → chunk-MDQ7ZHOS.js} +1 -1
  116. package/dist/esm/chunk-MDQ7ZHOS.js.map +7 -0
  117. package/dist/esm/chunk-MQA3BKF4.js +3 -0
  118. package/dist/esm/chunk-MQA3BKF4.js.map +7 -0
  119. package/dist/esm/chunk-MXNPCJPV.js +3 -0
  120. package/dist/esm/chunk-MXNPCJPV.js.map +7 -0
  121. package/dist/esm/chunk-QBVTI32A.js +2 -0
  122. package/dist/esm/chunk-QBVTI32A.js.map +7 -0
  123. package/dist/esm/{chunk-EB4AG3OL.js → chunk-REELD6CT.js} +2 -2
  124. package/dist/esm/chunk-RYXIRZQW.js +3 -0
  125. package/dist/esm/chunk-RYXIRZQW.js.map +7 -0
  126. package/dist/esm/chunk-S66WR5R7.js +3 -0
  127. package/dist/esm/{chunk-MXEOE4LA.js.map → chunk-S66WR5R7.js.map} +2 -2
  128. package/dist/esm/chunk-SECVO3CW.js +3 -0
  129. package/dist/esm/chunk-SECVO3CW.js.map +7 -0
  130. package/dist/esm/chunk-SHDZYFUN.js +3 -0
  131. package/dist/esm/chunk-SHDZYFUN.js.map +7 -0
  132. package/dist/esm/{chunk-3M5ZM67R.js → chunk-TCFBNE6A.js} +2 -2
  133. package/dist/esm/chunk-U7P64MXD.js +3 -0
  134. package/dist/esm/chunk-U7P64MXD.js.map +7 -0
  135. package/dist/esm/chunk-UFYQC5XY.js +3 -0
  136. package/dist/esm/chunk-UFYQC5XY.js.map +7 -0
  137. package/dist/esm/{chunk-G66WDIIV.js → chunk-WJKCXGVN.js} +2 -2
  138. package/dist/esm/chunk-XBDAE77C.js +3 -0
  139. package/dist/esm/chunk-XBDAE77C.js.map +7 -0
  140. package/dist/esm/{chunk-SIYOLE6P.js → chunk-YM47BXKK.js} +2 -2
  141. package/dist/esm/components/_internal/base-menu.utils.js +1 -1
  142. package/dist/esm/components/_internal/menu-context.js +1 -1
  143. package/dist/esm/components/_internal/pane-chrome.js +1 -1
  144. package/dist/esm/components/_internal/shell-bottom.d.ts +3 -3
  145. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  146. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  147. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  148. package/dist/esm/components/_internal/shell-handles.js +1 -1
  149. package/dist/esm/components/_internal/shell-inspector.d.ts +3 -3
  150. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  151. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  152. package/dist/esm/components/_internal/shell-pane.d.ts +2 -7
  153. package/dist/esm/components/_internal/shell-pane.d.ts.map +1 -1
  154. package/dist/esm/components/_internal/shell-pane.js +1 -1
  155. package/dist/esm/components/_internal/shell-resizable.d.ts +3 -9
  156. package/dist/esm/components/_internal/shell-resizable.d.ts.map +1 -1
  157. package/dist/esm/components/_internal/shell-resizable.js +1 -1
  158. package/dist/esm/components/_internal/shell-resize.d.ts +0 -4
  159. package/dist/esm/components/_internal/shell-resize.d.ts.map +1 -1
  160. package/dist/esm/components/_internal/shell-resize.js +1 -1
  161. package/dist/esm/components/_internal/shell-rest.d.ts +1 -6
  162. package/dist/esm/components/_internal/shell-rest.d.ts.map +1 -1
  163. package/dist/esm/components/_internal/shell-rest.js +1 -1
  164. package/dist/esm/components/_internal/shell-sidebar.d.ts +3 -3
  165. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  166. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  167. package/dist/esm/components/_internal/shell-store.d.ts +0 -10
  168. package/dist/esm/components/_internal/shell-store.d.ts.map +1 -1
  169. package/dist/esm/components/_internal/shell-store.js +1 -1
  170. package/dist/esm/components/accordion.js +1 -1
  171. package/dist/esm/components/accordion.props.d.ts +4 -3
  172. package/dist/esm/components/accordion.props.d.ts.map +1 -1
  173. package/dist/esm/components/accordion.props.js +1 -1
  174. package/dist/esm/components/checkbox-group.js +1 -1
  175. package/dist/esm/components/checkbox-group.primitive.d.ts +0 -10
  176. package/dist/esm/components/checkbox-group.primitive.d.ts.map +1 -1
  177. package/dist/esm/components/checkbox-group.primitive.js +1 -1
  178. package/dist/esm/components/context-menu.d.ts +1 -5
  179. package/dist/esm/components/context-menu.d.ts.map +1 -1
  180. package/dist/esm/components/context-menu.js +1 -1
  181. package/dist/esm/components/dropdown-menu.js +1 -1
  182. package/dist/esm/components/index.js +1 -1
  183. package/dist/esm/components/navigator.js +1 -1
  184. package/dist/esm/components/schemas/index.d.ts +1 -1
  185. package/dist/esm/components/schemas/index.d.ts.map +1 -1
  186. package/dist/esm/components/schemas/index.js +1 -1
  187. package/dist/esm/components/schemas/index.js.map +2 -2
  188. package/dist/esm/components/schemas/shell.schema.d.ts +6 -112
  189. package/dist/esm/components/schemas/shell.schema.d.ts.map +1 -1
  190. package/dist/esm/components/schemas/shell.schema.js +1 -1
  191. package/dist/esm/components/separator.js +1 -1
  192. package/dist/esm/components/shell.context.d.ts +1 -45
  193. package/dist/esm/components/shell.context.d.ts.map +1 -1
  194. package/dist/esm/components/shell.context.js +1 -1
  195. package/dist/esm/components/shell.d.ts +7 -37
  196. package/dist/esm/components/shell.d.ts.map +1 -1
  197. package/dist/esm/components/shell.js +1 -1
  198. package/dist/esm/components/shell.types.d.ts +6 -27
  199. package/dist/esm/components/shell.types.d.ts.map +1 -1
  200. package/dist/esm/components/shell.types.js +1 -1
  201. package/dist/esm/components/sidebar.js +1 -1
  202. package/dist/esm/components/toolbar.js +1 -1
  203. package/dist/esm/components/virtual-menu.js +1 -1
  204. package/dist/esm/hooks/use-breakpoint.js +1 -1
  205. package/dist/esm/index.js +1 -1
  206. package/dist/esm/props/index.js +1 -1
  207. package/package.json +1 -1
  208. package/schemas/index.json +13 -335
  209. package/schemas/shell-bottom.json +2 -63
  210. package/schemas/shell-inspector.json +2 -63
  211. package/schemas/shell-panel.json +2 -63
  212. package/schemas/shell-rail.json +2 -38
  213. package/schemas/shell-sidebar.json +5 -102
  214. package/schemas/shell-trigger.json +0 -6
  215. package/src/components/_internal/shell-bottom.tsx +6 -26
  216. package/src/components/_internal/shell-handles.tsx +2 -32
  217. package/src/components/_internal/shell-inspector.tsx +6 -26
  218. package/src/components/_internal/shell-pane.tsx +7 -56
  219. package/src/components/_internal/shell-resizable.tsx +6 -81
  220. package/src/components/_internal/shell-resize.tsx +0 -4
  221. package/src/components/_internal/shell-rest.ts +2 -11
  222. package/src/components/_internal/shell-sidebar.tsx +8 -30
  223. package/src/components/_internal/shell-store.tsx +1 -34
  224. package/src/components/accordion.props.tsx +2 -4
  225. package/src/components/checkbox-group.primitive.tsx +0 -12
  226. package/src/components/context-menu.tsx +1 -6
  227. package/src/components/schemas/index.ts +0 -1
  228. package/src/components/schemas/shell.schema.ts +3 -20
  229. package/src/components/shell.context.tsx +5 -112
  230. package/src/components/shell.css +1 -29
  231. package/src/components/shell.tsx +12 -97
  232. package/src/components/shell.types.ts +6 -28
  233. package/styles.css +0 -20
  234. package/dist/cjs/components/shell.hooks.d.ts +0 -10
  235. package/dist/cjs/components/shell.hooks.d.ts.map +0 -1
  236. package/dist/cjs/components/shell.hooks.js +0 -3
  237. package/dist/cjs/components/shell.hooks.js.map +0 -7
  238. package/dist/esm/chunk-2VSRZ4IT.js +0 -3
  239. package/dist/esm/chunk-2VSRZ4IT.js.map +0 -7
  240. package/dist/esm/chunk-2WFN4D52.js +0 -3
  241. package/dist/esm/chunk-2WFN4D52.js.map +0 -7
  242. package/dist/esm/chunk-4OJRLS5N.js +0 -3
  243. package/dist/esm/chunk-4OJRLS5N.js.map +0 -7
  244. package/dist/esm/chunk-4TTRPCGG.js +0 -3
  245. package/dist/esm/chunk-4TTRPCGG.js.map +0 -7
  246. package/dist/esm/chunk-5BXCPANF.js +0 -3
  247. package/dist/esm/chunk-ASBTPKH3.js +0 -3
  248. package/dist/esm/chunk-B447PNRD.js +0 -3
  249. package/dist/esm/chunk-B447PNRD.js.map +0 -7
  250. package/dist/esm/chunk-BJVXB3PN.js +0 -3
  251. package/dist/esm/chunk-BJVXB3PN.js.map +0 -7
  252. package/dist/esm/chunk-DNY4WWZF.js +0 -3
  253. package/dist/esm/chunk-DNY4WWZF.js.map +0 -7
  254. package/dist/esm/chunk-HQT32HQ6.js +0 -3
  255. package/dist/esm/chunk-HQT32HQ6.js.map +0 -7
  256. package/dist/esm/chunk-I77CYEBT.js +0 -2
  257. package/dist/esm/chunk-I77CYEBT.js.map +0 -7
  258. package/dist/esm/chunk-KGCGT4MJ.js +0 -3
  259. package/dist/esm/chunk-KGCGT4MJ.js.map +0 -7
  260. package/dist/esm/chunk-M26LLCQC.js +0 -3
  261. package/dist/esm/chunk-M26LLCQC.js.map +0 -7
  262. package/dist/esm/chunk-MAA6LEE2.js.map +0 -7
  263. package/dist/esm/chunk-MXEOE4LA.js +0 -3
  264. package/dist/esm/chunk-TS4QCDSI.js +0 -3
  265. package/dist/esm/chunk-TS4QCDSI.js.map +0 -7
  266. package/dist/esm/chunk-XOAOSRTH.js +0 -3
  267. package/dist/esm/chunk-XOAOSRTH.js.map +0 -7
  268. package/dist/esm/chunk-XUCR7L4G.js +0 -3
  269. package/dist/esm/chunk-XUCR7L4G.js.map +0 -7
  270. package/dist/esm/components/shell.hooks.d.ts +0 -10
  271. package/dist/esm/components/shell.hooks.d.ts.map +0 -1
  272. package/dist/esm/components/shell.hooks.js +0 -3
  273. package/dist/esm/components/shell.hooks.js.map +0 -7
  274. package/src/components/shell.hooks.ts +0 -20
  275. /package/dist/esm/{chunk-5RLGDXOM.js.map → chunk-2K46JPUL.js.map} +0 -0
  276. /package/dist/esm/{chunk-IN6D33TU.js.map → chunk-5XO3PLDH.js.map} +0 -0
  277. /package/dist/esm/{chunk-COLJWVN7.js.map → chunk-AQR42GKA.js.map} +0 -0
  278. /package/dist/esm/{chunk-FTNZWAPB.js.map → chunk-ARPUPT4M.js.map} +0 -0
  279. /package/dist/esm/{chunk-ISCZ57VL.js.map → chunk-DJGZ4K3V.js.map} +0 -0
  280. /package/dist/esm/{chunk-PMXIQ5B4.js.map → chunk-FKCKELUB.js.map} +0 -0
  281. /package/dist/esm/{chunk-E6MOZSYV.js.map → chunk-HNOT2HS4.js.map} +0 -0
  282. /package/dist/esm/{chunk-EB4AG3OL.js.map → chunk-REELD6CT.js.map} +0 -0
  283. /package/dist/esm/{chunk-3M5ZM67R.js.map → chunk-TCFBNE6A.js.map} +0 -0
  284. /package/dist/esm/{chunk-G66WDIIV.js.map → chunk-WJKCXGVN.js.map} +0 -0
  285. /package/dist/esm/{chunk-SIYOLE6P.js.map → chunk-YM47BXKK.js.map} +0 -0
@@ -3,7 +3,7 @@
3
3
  import * as React from 'react';
4
4
  import { useLayoutEffect } from 'radix-ui/internal';
5
5
  import { normalizeToPx } from '../../helpers/normalize-to-px.js';
6
- import type { PaneName, PaneSizePersistence } from '../shell.types.js';
6
+ import type { PaneName } from '../shell.types.js';
7
7
  import type { PaneResizeContextValue } from './shell-resize.js';
8
8
 
9
9
  export type SizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };
@@ -30,16 +30,10 @@ export type ResizableOptions = {
30
30
  onResize: ((size: number) => void) | undefined;
31
31
  onResizeStart: ((size: number) => void) | undefined;
32
32
  onResizeEnd: ((size: number) => void) | undefined;
33
- snapPoints: number[] | undefined;
34
- snapTolerance: number | undefined;
35
- collapseThreshold: number | undefined;
36
- paneId: string | undefined;
37
- persistence: PaneSizePersistence | undefined;
38
- /** Whether the pane is presented as an overlay right now. An overlay keeps its designed size and persists nothing. */
33
+ /** Whether the pane is presented as an overlay right now. An overlay keeps its designed size. */
39
34
  overlaying: boolean;
40
35
  /** The same question asked at effect time, for a pane whose presentation is learnt after its first render. */
41
36
  overlayingNow: () => boolean;
42
- requestCollapse: () => void;
43
37
  requestToggle: () => void;
44
38
  };
45
39
 
@@ -63,9 +57,9 @@ export function useInitialPaneSize(size: number | string | undefined, defaultSiz
63
57
  return initial;
64
58
  }
65
59
 
66
- /** Everything a resizable pane shares: size props, persistence, and the handle's context. */
60
+ /** Everything a resizable pane shares: size props and the handle's context. */
67
61
  export function useResizablePane(options: ResizableOptions): PaneResizeContextValue {
68
- const { name, elementRef, cssVarName, orientation, minSize, maxSize, resizable, size, defaultSize, paneId, persistence } = options;
62
+ const { name, elementRef, cssVarName, orientation, minSize, maxSize, size, defaultSize } = options;
69
63
 
70
64
  // The latest callbacks, so the size emitter does not change identity when a
71
65
  // consumer passes an inline function. A controlled `size` is reported again
@@ -107,7 +101,7 @@ export function useResizablePane(options: ResizableOptions): PaneResizeContextVa
107
101
  /**
108
102
  * The one way a size reaches the pane: the size variable, and the value
109
103
  * every handle of this pane announces. Once anything but `expandedSize` has
110
- * written a size (a default, a controlled value, a persisted value or a
104
+ * written a size (a default, a controlled value or a
111
105
  * resize), the pane owns that size and a new `expandedSize` leaves it alone.
112
106
  */
113
107
  const ownedRef = React.useRef(false);
@@ -154,65 +148,6 @@ export function useResizablePane(options: ResizableOptions): PaneResizeContextVa
154
148
  emitSizeChange(clamped, { reason: 'controlled' });
155
149
  }, [size, minSize, maxSize, options.overlaying, toPx, writeSize, emitSizeChange]);
156
150
 
157
- // A persistence adapter from `paneId` when none is given. A given one is read through
158
- // `latest`, so an inline object (the documented shape) does not reload the size every render.
159
- const hasPersistence = persistence !== undefined;
160
- const adapter = React.useMemo<PaneSizePersistence | undefined>(() => {
161
- if (hasPersistence) {
162
- return {
163
- load: () => latest.current.persistence?.load?.(),
164
- save: (value: number) => latest.current.persistence?.save?.(value),
165
- };
166
- }
167
- if (!paneId) return undefined;
168
- const key = `kookie-ui:shell:${name}:${paneId}`;
169
- return {
170
- load: () => {
171
- if (typeof window === 'undefined') return undefined;
172
- try {
173
- const stored = window.localStorage.getItem(key);
174
- return stored ? Number(stored) : undefined;
175
- } catch (err) {
176
- if (process.env.NODE_ENV !== 'production') console.warn(`Shell.${name}: failed to load persisted size`, err);
177
- return undefined;
178
- }
179
- },
180
- save: (value: number) => {
181
- if (typeof window === 'undefined') return;
182
- try {
183
- window.localStorage.setItem(key, String(value));
184
- } catch (err) {
185
- if (process.env.NODE_ENV !== 'production') console.warn(`Shell.${name}: failed to save persisted size`, err);
186
- }
187
- },
188
- };
189
- }, [name, paneId, hasPersistence]);
190
-
191
- // Persisted size, loaded in a layout effect and clamped, so a reload does
192
- // not paint the default and then jump. Only where the pane is in the frame:
193
- // an overlay keeps its designed size.
194
- useLayoutEffect(() => {
195
- if (!resizable || !adapter?.load || latest.current.overlayingNow()) return undefined;
196
- let mounted = true;
197
- const apply = (value: number | undefined) => {
198
- if (!mounted || typeof value !== 'number' || !Number.isFinite(value)) return;
199
- const clamped = clampTo(value, minSize, maxSize);
200
- writeSize(clamped, true);
201
- latest.current.onResize?.(clamped);
202
- };
203
- const loaded = adapter.load();
204
- if (loaded instanceof Promise) {
205
- loaded.then(apply).catch((err) => {
206
- if (process.env.NODE_ENV !== 'production') console.warn(`Shell.${name}: failed to load persisted size`, err);
207
- });
208
- } else {
209
- apply(loaded);
210
- }
211
- return () => {
212
- mounted = false;
213
- };
214
- }, [resizable, adapter, options.overlaying, writeSize, minSize, maxSize, name]);
215
-
216
151
  // What the handle announces before any effect has run: the same starting size the pane's
217
152
  // first render uses, so the server HTML already states a value.
218
153
  const [startSize] = React.useState(() => {
@@ -230,11 +165,9 @@ export function useResizablePane(options: ResizableOptions): PaneResizeContextVa
230
165
  (value: number) => {
231
166
  latest.current.onResizeEnd?.(value);
232
167
  emitSizeChange(value, { reason: 'resize' });
233
- adapter?.save?.(value);
234
168
  },
235
- [emitSizeChange, adapter],
169
+ [emitSizeChange],
236
170
  );
237
- const requestCollapse = React.useCallback(() => latest.current.requestCollapse(), []);
238
171
  const requestToggle = React.useCallback(() => latest.current.requestToggle(), []);
239
172
 
240
173
  return React.useMemo(
@@ -254,10 +187,6 @@ export function useResizablePane(options: ResizableOptions): PaneResizeContextVa
254
187
  onResizeEnd,
255
188
  target: name,
256
189
  collapsible: options.collapsible,
257
- snapPoints: options.snapPoints,
258
- snapTolerance: options.snapTolerance ?? 8,
259
- collapseThreshold: options.collapseThreshold,
260
- requestCollapse,
261
190
  requestToggle,
262
191
  }),
263
192
  [
@@ -276,10 +205,6 @@ export function useResizablePane(options: ResizableOptions): PaneResizeContextVa
276
205
  onResizeEnd,
277
206
  name,
278
207
  options.collapsible,
279
- options.snapPoints,
280
- options.snapTolerance,
281
- options.collapseThreshold,
282
- requestCollapse,
283
208
  requestToggle,
284
209
  ],
285
210
  );
@@ -24,10 +24,6 @@ export interface PaneResizeContextValue {
24
24
  onResizeEnd?: (size: number) => void;
25
25
  target: PaneName;
26
26
  collapsible: boolean;
27
- snapPoints?: number[];
28
- snapTolerance: number;
29
- collapseThreshold?: number;
30
- requestCollapse?: () => void;
31
27
  requestToggle?: () => void;
32
28
  }
33
29
 
@@ -4,6 +4,8 @@ import type { PaneValue } from './shell-store.js';
4
4
  type ResponsiveBoolean = boolean | Partial<Record<Breakpoint, boolean>>;
5
5
 
6
6
  /** `open`/`defaultOpen` as the pane's own value type. */
7
+ export function toPaneValue(value: boolean | undefined): PaneValue | undefined;
8
+ export function toPaneValue(value: ResponsiveBoolean | undefined): PaneValue | Partial<Record<Breakpoint, PaneValue>> | undefined;
7
9
  export function toPaneValue(value: ResponsiveBoolean | undefined): PaneValue | Partial<Record<Breakpoint, PaneValue>> | undefined {
8
10
  if (value === undefined) return undefined;
9
11
  if (typeof value === 'boolean') return value ? 'open' : 'closed';
@@ -32,14 +34,3 @@ export const endAnchoredGrowth = (isRtl: boolean): 1 | -1 => (isRtl ? 1 : -1);
32
34
 
33
35
  /** A pane anchored at the block end grows as its top edge moves up. */
34
36
  export const bottomAnchoredGrowth = (): 1 | -1 => -1;
35
-
36
- /**
37
- * `height` and `resizer` left PaneBaseProps in 0.8.0: no pane ever read them.
38
- * A call site written against 0.7 can still pass them, so they are dropped
39
- * here rather than reaching the DOM as invalid attributes.
40
- */
41
- export function withoutRemovedPaneProps<T extends object>(props: T): T {
42
- if (!('height' in props) && !('resizer' in props)) return props;
43
- const { height: _height, resizer: _resizer, ...rest } = props as T & { height?: unknown; resizer?: unknown };
44
- return rest as T;
45
- }
@@ -7,15 +7,15 @@ import { PaneResizeContext } from './shell-resize.js';
7
7
  import { PaneHandle, SidebarHandle } from './shell-handles.js';
8
8
  import { usePane, paneAttributes, usePresentationTable } from './shell-pane.js';
9
9
  import { splitHandles, useInitialPaneSize, useResizablePane, type SizeChangeMeta } from './shell-resizable.js';
10
- import { useFrameRegistration, warnOnce, type PaneValue } from './shell-store.js';
11
- import { navigationRest, startAnchoredGrowth, withoutRemovedPaneProps } from './shell-rest.js';
10
+ import { useFrameRegistration, type PaneValue } from './shell-store.js';
11
+ import { navigationRest, startAnchoredGrowth } from './shell-rest.js';
12
12
  import { readBreakpoint } from '../../hooks/use-breakpoint.js';
13
13
  import { PaneChromeScope } from './pane-chrome.js';
14
14
  import { PageScope } from './page-scope.js';
15
- import type { Breakpoint, CSSPropertiesWithVars, PaneBaseProps, Responsive, SidebarMode } from '../shell.types.js';
15
+ import type { Breakpoint, CSSPropertiesWithVars, PaneBaseProps, PaneOpenChangeReason, Responsive, SidebarMode } from '../shell.types.js';
16
16
 
17
- type SidebarStateChangeMeta = { reason: 'init' | 'toggle' | 'responsive' | 'dismiss' };
18
- type SidebarControlledProps = { state: Responsive<SidebarMode>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; defaultState?: never };
17
+ type SidebarStateChangeMeta = { reason: PaneOpenChangeReason };
18
+ type SidebarControlledProps = { state: SidebarMode; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; defaultState?: never };
19
19
  type SidebarUncontrolledProps = { defaultState?: SidebarMode | Partial<Record<Breakpoint, SidebarMode>>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; state?: never };
20
20
  type SidebarPublicProps = PaneBaseProps & {
21
21
  size?: number | string;
@@ -37,6 +37,8 @@ type SidebarComponent = React.ForwardRefExoticComponent<SidebarPublicProps & Rea
37
37
  const toValue = (mode: SidebarMode): PaneValue => (mode === 'collapsed' ? 'closed' : 'open');
38
38
  const toMode = (value: PaneValue): SidebarMode => (value === 'closed' ? 'collapsed' : 'expanded');
39
39
 
40
+ function modeToValue(state: SidebarMode | undefined): PaneValue | undefined;
41
+ function modeToValue(state: Responsive<SidebarMode> | undefined): PaneValue | Partial<Record<Breakpoint, PaneValue>> | undefined;
40
42
  function modeToValue(state: Responsive<SidebarMode> | undefined): PaneValue | Partial<Record<Breakpoint, PaneValue>> | undefined {
41
43
  if (state === undefined) return undefined;
42
44
  if (typeof state === 'string') return toValue(state);
@@ -62,16 +64,9 @@ export const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>((pro
62
64
  maxSize = 400,
63
65
  resizable = false,
64
66
  collapsible = true,
65
- onExpand,
66
- onCollapse,
67
67
  onResize,
68
68
  onResizeStart,
69
69
  onResizeEnd,
70
- snapPoints,
71
- snapTolerance,
72
- collapseThreshold,
73
- paneId,
74
- persistence,
75
70
  children,
76
71
  style,
77
72
  state,
@@ -98,17 +93,10 @@ export const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>((pro
98
93
  presentationTable: table,
99
94
  builtIn: navigationRest,
100
95
  onChange: (value, reason) => onStateChange?.(toMode(value), { reason }),
101
- onExpand,
102
- onCollapse,
103
96
  size: expandedSize,
104
97
  });
105
98
  useFrameRegistration('sidebar', flush);
106
99
 
107
- React.useEffect(() => {
108
- if (snapPoints !== undefined || collapseThreshold !== undefined || paneId !== undefined || persistence !== undefined) {
109
- warnOnce('Shell.Sidebar: `snapPoints`, `collapseThreshold`, `paneId` and `persistence` are deprecated and are removed in 1.0. Keep the size in your own state with `size`/`onSizeChange`.');
110
- }
111
- }, [snapPoints, collapseThreshold, paneId, persistence]);
112
100
 
113
101
  const elementRef = React.useRef<HTMLElement | null>(null);
114
102
  const composedRef = useComposedRefs(ref, pane.setElement, elementRef);
@@ -134,14 +122,8 @@ export const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>((pro
134
122
  onResize,
135
123
  onResizeStart,
136
124
  onResizeEnd,
137
- snapPoints,
138
- snapTolerance,
139
- collapseThreshold,
140
- paneId,
141
- persistence,
142
125
  overlaying: pane.overlaying,
143
126
  overlayingNow: () => table[readBreakpoint()] === 'overlay',
144
- requestCollapse: () => pane.setValue('closed', 'toggle'),
145
127
  requestToggle: () => pane.toggle('toggle'),
146
128
  });
147
129
 
@@ -151,13 +133,10 @@ export const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>((pro
151
133
  <PaneResizeContext.Provider value={resize}>{handles.length > 0 ? handles : <PaneHandle />}</PaneResizeContext.Provider>
152
134
  ) : null;
153
135
 
154
- // A peek previews the width the next toggle opens to.
155
- const peekWidth = pane.peeking ? `var(--sidebar-size, ${expandedSize}px)` : undefined;
156
-
157
136
  const initialSize = useInitialPaneSize(size, defaultSize, minSize, maxSize);
158
137
  return (
159
138
  <div
160
- {...withoutRemovedPaneProps(domProps)}
139
+ {...domProps}
161
140
  role={domProps.role ?? 'navigation'}
162
141
  id={pane.id}
163
142
  ref={composedRef}
@@ -172,7 +151,6 @@ export const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>((pro
172
151
  ...(initialSize ? { '--sidebar-size': initialSize } : {}),
173
152
  '--sidebar-min-size': `${minSize}px`,
174
153
  '--sidebar-max-size': `${maxSize}px`,
175
- ...(peekWidth ? { '--peek-sidebar-width': peekWidth } : {}),
176
154
  } as CSSPropertiesWithVars
177
155
  }
178
156
  >
@@ -117,12 +117,10 @@ export type ShellStore = {
117
117
  * it, would be a new identity on every read.
118
118
  */
119
119
  version: number;
120
- /** The pane a hovered Trigger is previewing, if any. Layout only. */
121
- peek: PaneName | null;
122
120
  };
123
121
 
124
122
  export function createShellStore(): ShellStore {
125
- return { entries: new Map(), listeners: new Set(), version: 0, peek: null };
123
+ return { entries: new Map(), listeners: new Set(), version: 0 };
126
124
  }
127
125
 
128
126
  export function notifyShellStore(store: ShellStore) {
@@ -137,12 +135,6 @@ export function subscribeShellStore(store: ShellStore, listener: () => void) {
137
135
  };
138
136
  }
139
137
 
140
- export function setShellPeek(store: ShellStore, peek: PaneName | null) {
141
- if (store.peek === peek) return;
142
- store.peek = peek;
143
- notifyShellStore(store);
144
- }
145
-
146
138
  export const ShellStoreContext = React.createContext<ShellStore | null>(null);
147
139
 
148
140
  export function useShellStore(part: string): ShellStore {
@@ -158,19 +150,6 @@ export function usePaneEntry(store: ShellStore, name: PaneName): PaneEntry | und
158
150
  return React.useSyncExternalStore(subscribe, getSnapshot, () => undefined);
159
151
  }
160
152
 
161
- /**
162
- * Whether this pane is the one being previewed. A boolean per pane rather than
163
- * the peek target itself, so hovering one Trigger re-renders one pane, not all.
164
- */
165
- export function usePeeking(store: ShellStore, name: PaneName): boolean {
166
- const subscribe = React.useCallback((listener: () => void) => subscribeShellStore(store, listener), [store]);
167
- return React.useSyncExternalStore(
168
- subscribe,
169
- () => store.peek === name,
170
- () => false,
171
- );
172
- }
173
-
174
153
  /* ── Off the frame ─────────────────────────────────────────────────────────── */
175
154
 
176
155
  export type FramePaneId = 'rail' | 'panel' | 'sidebar' | 'content' | 'inspector' | 'bottom';
@@ -191,15 +170,3 @@ export function useFrameRegistration(id: FramePaneId, flush: boolean) {
191
170
  return () => unregisterOffFrame(id);
192
171
  }, [id, flush, registerOffFrame, unregisterOffFrame]);
193
172
  }
194
-
195
- /* ── Development warnings ──────────────────────────────────────────────────── */
196
-
197
- const warned = new Set<string>();
198
-
199
- /** A deprecation warning, once per message per page load. Development only. */
200
- export function warnOnce(message: string) {
201
- if (process.env.NODE_ENV === 'production') return;
202
- if (warned.has(message)) return;
203
- warned.add(message);
204
- console.warn(`[kookie-ui] ${message}`);
205
- }
@@ -2,7 +2,7 @@ import { asChildPropDef } from '../props/as-child.prop.js';
2
2
  import { colorPropDef } from '../props/color.prop.js';
3
3
  import { radiusPropDef } from '../props/radius.prop.js';
4
4
 
5
- import type { PropDef } from '../props/prop-def.js';
5
+ import type { GetPropDefTypes, PropDef } from '../props/prop-def.js';
6
6
 
7
7
  const sizes = ['1', '2', '3', '4'] as const;
8
8
  const variants = ['raised', 'soft', 'surface', 'outline', 'ghost'] as const;
@@ -53,9 +53,7 @@ export {
53
53
  export type AccordionRootOwnProps = {
54
54
  size?: (typeof sizes)[number];
55
55
  variant?: (typeof variants)[number];
56
- color?: string;
57
- radius?: string;
58
- };
56
+ } & GetPropDefTypes<typeof colorPropDef & typeof radiusPropDef>;
59
57
 
60
58
  export type AccordionItemOwnProps = {
61
59
  asChild?: boolean;
@@ -37,16 +37,6 @@ interface CheckboxGroupProps extends PrimitiveDivProps {
37
37
  required?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['required'];
38
38
  disabled?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['disabled'];
39
39
  dir?: 'ltr' | 'rtl';
40
- /**
41
- * @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,
42
- * so there is no arrow-key navigation to orient.
43
- */
44
- orientation?: 'horizontal' | 'vertical';
45
- /**
46
- * @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,
47
- * so there is no arrow-key navigation to loop.
48
- */
49
- loop?: boolean;
50
40
  defaultValue?: string[];
51
41
  value?: CheckboxGroupContextValue['value'];
52
42
  onValueChange?: (value: string[]) => void;
@@ -61,9 +51,7 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
61
51
  value: valueProp,
62
52
  required = false,
63
53
  disabled = false,
64
- orientation: _orientation,
65
54
  dir,
66
- loop: _loop,
67
55
  onValueChange,
68
56
  ...groupProps
69
57
  } = props;
@@ -38,7 +38,7 @@ import {
38
38
  } from './_internal/base-menu.utils.js';
39
39
 
40
40
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
41
- import type { GetPropDefTypes, Responsive } from '../props/prop-def.js';
41
+ import type { GetPropDefTypes } from '../props/prop-def.js';
42
42
 
43
43
  interface ContextMenuRootProps
44
44
  extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Root> {}
@@ -95,10 +95,6 @@ interface ContextMenuContentProps
95
95
  * Use this when rendering virtualized lists inside the context menu.
96
96
  */
97
97
  virtualized?: boolean;
98
- /**
99
- * @deprecated Has no effect. ContextMenu submenus always cascade.
100
- */
101
- submenuBehavior?: Responsive<'cascade' | 'drill-down'>;
102
98
  }
103
99
  const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMenuContentProps>(
104
100
  (ownProps, forwardedRef) => {
@@ -113,7 +109,6 @@ const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMe
113
109
  color,
114
110
  container,
115
111
  forceMount,
116
- submenuBehavior: _submenuBehavior,
117
112
  virtualized = false,
118
113
  ...contentProps
119
114
  } = extractProps(props, contextMenuContentPropDefs);
@@ -74,7 +74,6 @@ export type {
74
74
  ResponsiveMode,
75
75
  ResponsiveSidebarMode,
76
76
  ResponsivePresentation,
77
- PaneSizePersistence,
78
77
  } from './shell.schema.js';
79
78
 
80
79
  /**
@@ -24,7 +24,7 @@ const PaneModeSchema = z.enum(['expanded', 'collapsed']).describe('Pane state mo
24
24
  const SidebarModeSchema = z.enum(['collapsed', 'expanded']).describe('Sidebar state');
25
25
  const PresentationValueSchema = z.enum(['fixed', 'overlay', 'stacked']).describe('Presentation mode');
26
26
  const _BreakpointSchema = z.enum(['initial', 'xs', 'sm', 'md', 'lg', 'xl']).describe('Responsive breakpoint');
27
- const PaneTargetSchema = z.enum(['left', 'rail', 'panel', 'sidebar', 'inspector', 'bottom']).describe('Pane target. `left` is deprecated: use `rail`.');
27
+ const PaneTargetSchema = z.enum(['rail', 'panel', 'sidebar', 'inspector', 'bottom']).describe('Pane target');
28
28
  const TriggerActionSchema = z.enum(['toggle', 'expand', 'collapse']).describe('Trigger action');
29
29
  const OpenChangeReasonSchema = z.enum(['toggle', 'dismiss']).describe('Why the state changed: `toggle` for a trigger or the resize handle, `dismiss` for Escape or the scrim');
30
30
  const SizeChangeReasonSchema = z.enum(['init', 'resize', 'controlled']).describe('Why the size changed');
@@ -49,21 +49,13 @@ const ResponsiveSidebarModeSchema = responsive(SidebarModeSchema).describe('Resp
49
49
  const ResponsivePresentationSchema = responsive(PresentationValueSchema).describe('Responsive presentation configuration');
50
50
  const ResponsiveOpenSchema = responsive(z.boolean()).describe('Responsive open state');
51
51
 
52
- // Size persistence adapter (deprecated)
53
- const PaneSizePersistenceSchema = z
54
- .object({
55
- load: z.function({ output: z.union([z.number(), z.promise(z.number()), z.undefined()]) }).optional(),
56
- save: z.function({ input: [z.number()], output: z.union([z.void(), z.promise(z.void())]) }).optional(),
57
- })
58
- .describe('Deprecated, removed in 1.0. Keep the size in your own state with `size`/`onSizeChange`.');
59
-
60
52
  const StyleSchema = z
61
53
  .record(z.string(), z.union([z.string(), z.number()]))
62
54
  .optional()
63
55
  .describe('Inline styles');
64
56
 
65
57
  const OpenPropsSchema = {
66
- open: z.union([z.boolean(), ResponsiveOpenSchema]).optional().describe('The open state, when controlled. A responsive object is deprecated.'),
58
+ open: z.boolean().optional().describe('The open state, when controlled'),
67
59
  defaultOpen: z
68
60
  .union([z.boolean(), ResponsiveOpenSchema])
69
61
  .optional()
@@ -80,8 +72,6 @@ const PaneBaseShape = {
80
72
  presentation: ResponsivePresentationSchema.optional(),
81
73
  expandedSize: z.number().optional(),
82
74
  flush: z.boolean().optional().describe('Whether the pane joins the app frame. Defaults to true. `false` pulls it off the frame as a card.'),
83
- onExpand: z.function({ output: z.void() }).optional().describe('Deprecated: use `onOpenChange`'),
84
- onCollapse: z.function({ output: z.void() }).optional().describe('Deprecated: use `onOpenChange`'),
85
75
  className: z.string().optional().describe('Additional CSS class name'),
86
76
  style: StyleSchema,
87
77
  children: z.any().optional(),
@@ -107,11 +97,6 @@ const ResizeShape = {
107
97
  .describe('Called during a drag, at most once per animation frame'),
108
98
  onResizeStart: z.function({ input: [z.number()], output: z.void() }).optional(),
109
99
  onResizeEnd: z.function({ input: [z.number()], output: z.void() }).optional(),
110
- snapPoints: z.array(z.number()).optional().describe('Deprecated, removed in 1.0'),
111
- snapTolerance: z.number().optional().describe('Deprecated, removed in 1.0'),
112
- collapseThreshold: z.number().optional().describe('Deprecated, removed in 1.0'),
113
- paneId: z.string().optional().describe('Deprecated, removed in 1.0'),
114
- persistence: PaneSizePersistenceSchema.optional(),
115
100
  };
116
101
 
117
102
  /**
@@ -183,7 +168,7 @@ export const ShellSidebarSchema = z
183
168
  .object({
184
169
  ...PaneBaseShape,
185
170
  ...ResizeShape,
186
- state: z.union([SidebarModeSchema, ResponsiveSidebarModeSchema]).optional().describe('The state, when controlled. A responsive object is deprecated.'),
171
+ state: SidebarModeSchema.optional().describe('The state, when controlled'),
187
172
  defaultState: ResponsiveSidebarModeSchema.optional().describe('The starting state. With no value the sidebar is open where it is in the frame and closed where it is an overlay.'),
188
173
  onStateChange: z
189
174
  .function({ input: [SidebarModeSchema, z.object({ reason: OpenChangeReasonSchema })], output: z.void() })
@@ -251,7 +236,6 @@ export const ShellTriggerSchema = z
251
236
  .object({
252
237
  target: PaneTargetSchema.describe('Which pane to drive'),
253
238
  action: TriggerActionSchema.default('toggle').describe('Action to perform'),
254
- peekOnHover: z.boolean().default(false).describe('Deprecated, removed in 1.0. Shows a preview of a closed pane on hover.'),
255
239
  type: z.enum(['button', 'submit', 'reset']).default('button').describe('The button type'),
256
240
  className: z.string().optional().describe('Additional CSS class name'),
257
241
  style: StyleSchema,
@@ -298,7 +282,6 @@ export type TriggerAction = z.infer<typeof TriggerActionSchema>;
298
282
  export type ResponsiveMode = z.infer<typeof _ResponsiveModeSchema>;
299
283
  export type ResponsiveSidebarMode = z.infer<typeof ResponsiveSidebarModeSchema>;
300
284
  export type ResponsivePresentation = z.infer<typeof ResponsivePresentationSchema>;
301
- export type PaneSizePersistence = z.infer<typeof PaneSizePersistenceSchema>;
302
285
 
303
286
  /**
304
287
  * Development-only helper to validate and normalize Shell props
@@ -1,34 +1,18 @@
1
1
  'use client';
2
2
 
3
3
  /**
4
- * Since 0.8.0 the Shell has two contexts: the pane registry (the store) and
5
- * the set of panes off the frame. They live in `_internal/shell-store.tsx`. This module keeps
6
- * the two hooks consumers can reach: `useSidebarMode`, and the deprecated
7
- * `useShell`.
4
+ * The Shell has two contexts: the pane registry (the store) and the set of panes off the frame.
5
+ * They live in `_internal/shell-store.tsx`. This module keeps the hook consumers can reach:
6
+ * `useSidebarMode`.
8
7
  */
9
8
  import * as React from 'react';
10
- import { useBreakpoint } from '../hooks/use-breakpoint.js';
11
- import type { Breakpoint, PaneMode, PaneName, PaneTarget, PresentationValue, SidebarMode } from './shell.types.js';
12
- import { setShellPeek, subscribeShellStore, useShellStore, warnOnce, type PaneValue, type ShellStore } from './_internal/shell-store.js';
9
+ import type { SidebarMode } from './shell.types.js';
10
+ import { subscribeShellStore, useShellStore, type PaneValue } from './_internal/shell-store.js';
13
11
 
14
12
  const toSidebarMode = (value: PaneValue | undefined): SidebarMode | undefined => (value === undefined ? undefined : value === 'closed' ? 'collapsed' : 'expanded');
15
13
 
16
14
  const fromSidebarMode = (mode: SidebarMode): PaneValue => (mode === 'collapsed' ? 'closed' : 'open');
17
15
 
18
- const toPaneMode = (value: PaneValue | undefined): PaneMode => (value === undefined || value === 'closed' ? 'collapsed' : 'expanded');
19
-
20
- const paneName = (target: PaneTarget): PaneName => (target === 'left' ? 'rail' : target);
21
-
22
- /** Re-renders on every change to the registry. For the deprecated whole-shell reader only. */
23
- function useStoreVersion(store: ShellStore) {
24
- const subscribe = React.useCallback((listener: () => void) => subscribeShellStore(store, listener), [store]);
25
- return React.useSyncExternalStore(
26
- subscribe,
27
- () => store.version,
28
- () => 0,
29
- );
30
- }
31
-
32
16
  /**
33
17
  * The Sidebar's mode, and a setter. The setter is a user action: it reports
34
18
  * through the Sidebar's `onStateChange` the way a Trigger does.
@@ -49,94 +33,3 @@ export function useSidebarMode(): { sidebarMode: SidebarMode; setSidebarMode: (m
49
33
  );
50
34
  return { sidebarMode: toSidebarMode(value) ?? 'expanded', setSidebarMode };
51
35
  }
52
-
53
- export interface ShellContextValue {
54
- leftMode: PaneMode;
55
- setLeftMode: (mode: PaneMode) => void;
56
- /** The Rail's open state, resolved, when it is controlled. */
57
- leftControlledOpen?: boolean;
58
- panelMode: PaneMode;
59
- setPanelMode: (mode: PaneMode) => void;
60
- sidebarMode: SidebarMode;
61
- setSidebarMode: (mode: SidebarMode) => void;
62
- inspectorMode: PaneMode;
63
- setInspectorMode: (mode: PaneMode) => void;
64
- bottomMode: PaneMode;
65
- setBottomMode: (mode: PaneMode) => void;
66
- peekTarget: PaneTarget | null;
67
- setPeekTarget: (target: PaneTarget | null) => void;
68
- peekPane: (target: PaneTarget) => void;
69
- clearPeek: () => void;
70
- /** Whether a Rail is mounted. */
71
- hasLeft: boolean;
72
- /** No effect since 0.8.0: the registry knows which panes are mounted. */
73
- setHasLeft: (has: boolean) => void;
74
- /** Whether a Sidebar is mounted. */
75
- hasSidebar: boolean;
76
- /** No effect since 0.8.0: the registry knows which panes are mounted. */
77
- setHasSidebar: (has: boolean) => void;
78
- currentBreakpoint: Breakpoint;
79
- currentBreakpointReady: boolean;
80
- /** The Rail's presentation at the current breakpoint, when known. */
81
- leftResolvedPresentation?: PresentationValue;
82
- togglePane: (target: PaneTarget) => void;
83
- expandPane: (target: PaneTarget) => void;
84
- collapsePane: (target: PaneTarget) => void;
85
- }
86
-
87
- const noop = () => {};
88
-
89
- /**
90
- * @deprecated The whole-shell reader re-renders its consumer on every change
91
- * to any pane. Use `Shell.Trigger` to drive a pane, `Shell.useSidebarMode`
92
- * for the Sidebar, and each pane's `open`/`onOpenChange` for its state.
93
- * Removed in 1.0.
94
- *
95
- * Keeps 0.7's shape. The setters act as a user would: they report through
96
- * the pane's own callback with `reason: 'toggle'`, and a controlled pane
97
- * changes only when the app passes the new value.
98
- */
99
- export function useShell(): ShellContextValue {
100
- const store = useShellStore('useShell');
101
- React.useEffect(() => {
102
- warnOnce("Shell.useShell is deprecated and is removed in 1.0. Use Shell.Trigger, Shell.useSidebarMode, or a pane's own open/onOpenChange.");
103
- }, []);
104
- useStoreVersion(store);
105
- const { breakpoint, ready } = useBreakpoint();
106
- const actions = React.useMemo(() => {
107
- const setMode = (name: PaneName) => (mode: PaneMode) => store.entries.get(name)?.setValue(mode === 'collapsed' ? 'closed' : 'open', 'toggle');
108
- const setPeekTarget = (target: PaneTarget | null) => setShellPeek(store, target === null ? null : paneName(target));
109
- return {
110
- setLeftMode: setMode('rail'),
111
- setPanelMode: setMode('panel'),
112
- setInspectorMode: setMode('inspector'),
113
- setBottomMode: setMode('bottom'),
114
- setSidebarMode: (mode: SidebarMode) => store.entries.get('sidebar')?.setValue(fromSidebarMode(mode), 'toggle'),
115
- setPeekTarget,
116
- peekPane: (target: PaneTarget) => setPeekTarget(target),
117
- clearPeek: () => setPeekTarget(null),
118
- setHasLeft: noop,
119
- setHasSidebar: noop,
120
- togglePane: (target: PaneTarget) => store.entries.get(paneName(target))?.toggle('toggle'),
121
- expandPane: (target: PaneTarget) => store.entries.get(paneName(target))?.setValue('open', 'toggle'),
122
- collapsePane: (target: PaneTarget) => store.entries.get(paneName(target))?.setValue('closed', 'toggle'),
123
- };
124
- }, [store]);
125
- const value = (name: PaneName) => store.entries.get(name)?.value;
126
- const rail = store.entries.get('rail');
127
- return {
128
- leftMode: toPaneMode(value('rail')),
129
- leftControlledOpen: rail?.value === undefined ? undefined : rail.value !== 'closed',
130
- panelMode: toPaneMode(value('panel')),
131
- sidebarMode: toSidebarMode(value('sidebar')) ?? 'expanded',
132
- inspectorMode: toPaneMode(value('inspector')),
133
- bottomMode: toPaneMode(value('bottom')),
134
- peekTarget: store.peek,
135
- hasLeft: store.entries.has('rail'),
136
- hasSidebar: store.entries.has('sidebar'),
137
- currentBreakpoint: breakpoint,
138
- currentBreakpointReady: ready,
139
- leftResolvedPresentation: rail?.presentation,
140
- ...actions,
141
- };
142
- }