@womp/kookie-ui 0.7.0 → 0.8.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 (464) hide show
  1. package/components.css +538 -493
  2. package/dist/cjs/components/_internal/base-menu.utils.js +1 -1
  3. package/dist/cjs/components/_internal/base-menu.utils.js.map +3 -3
  4. package/dist/cjs/components/_internal/menu-context.js +1 -1
  5. package/dist/cjs/components/_internal/menu-context.js.map +3 -3
  6. package/dist/cjs/components/_internal/shell-bottom.d.ts +6 -7
  7. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  9. package/dist/cjs/components/_internal/shell-bottom.js.map +4 -4
  10. package/dist/cjs/components/_internal/shell-handles.d.ts +9 -0
  11. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  13. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  14. package/dist/cjs/components/_internal/shell-inspector.d.ts +4 -6
  15. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  16. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  17. package/dist/cjs/components/_internal/shell-inspector.js.map +4 -4
  18. package/dist/cjs/components/_internal/shell-pane.d.ts +70 -0
  19. package/dist/cjs/components/_internal/shell-pane.d.ts.map +1 -0
  20. package/dist/cjs/components/_internal/shell-pane.js +2 -0
  21. package/dist/cjs/components/_internal/shell-pane.js.map +7 -0
  22. package/dist/cjs/components/_internal/shell-resizable.d.ts +48 -0
  23. package/dist/cjs/components/_internal/shell-resizable.d.ts.map +1 -0
  24. package/dist/cjs/components/_internal/shell-resizable.js +2 -0
  25. package/dist/cjs/components/_internal/shell-resizable.js.map +7 -0
  26. package/dist/cjs/components/_internal/shell-resize.d.ts +11 -3
  27. package/dist/cjs/components/_internal/shell-resize.d.ts.map +1 -1
  28. package/dist/cjs/components/_internal/shell-resize.js +1 -1
  29. package/dist/cjs/components/_internal/shell-resize.js.map +2 -2
  30. package/dist/cjs/components/_internal/shell-rest.d.ts +27 -0
  31. package/dist/cjs/components/_internal/shell-rest.d.ts.map +1 -0
  32. package/dist/cjs/components/_internal/shell-rest.js +2 -0
  33. package/dist/cjs/components/_internal/shell-rest.js.map +7 -0
  34. package/dist/cjs/components/_internal/shell-sidebar.d.ts +7 -12
  35. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  36. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  37. package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
  38. package/dist/cjs/components/_internal/shell-store.d.ts +99 -0
  39. package/dist/cjs/components/_internal/shell-store.d.ts.map +1 -0
  40. package/dist/cjs/components/_internal/shell-store.js +2 -0
  41. package/dist/cjs/components/_internal/shell-store.js.map +7 -0
  42. package/dist/cjs/components/context-menu.js +1 -1
  43. package/dist/cjs/components/context-menu.js.map +3 -3
  44. package/dist/cjs/components/dropdown-menu.js +1 -1
  45. package/dist/cjs/components/dropdown-menu.js.map +3 -3
  46. package/dist/cjs/components/index.js +5 -5
  47. package/dist/cjs/components/index.js.map +4 -4
  48. package/dist/cjs/components/schemas/index.js +1 -1
  49. package/dist/cjs/components/schemas/index.js.map +3 -3
  50. package/dist/cjs/components/schemas/shell.schema.d.ts +277 -229
  51. package/dist/cjs/components/schemas/shell.schema.d.ts.map +1 -1
  52. package/dist/cjs/components/schemas/shell.schema.js +1 -1
  53. package/dist/cjs/components/schemas/shell.schema.js.map +3 -3
  54. package/dist/cjs/components/shell.context.d.ts +25 -114
  55. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  56. package/dist/cjs/components/shell.context.js +1 -1
  57. package/dist/cjs/components/shell.context.js.map +4 -4
  58. package/dist/cjs/components/shell.d.ts +42 -21
  59. package/dist/cjs/components/shell.d.ts.map +1 -1
  60. package/dist/cjs/components/shell.hooks.d.ts +7 -23
  61. package/dist/cjs/components/shell.hooks.d.ts.map +1 -1
  62. package/dist/cjs/components/shell.hooks.js +1 -1
  63. package/dist/cjs/components/shell.hooks.js.map +4 -4
  64. package/dist/cjs/components/shell.js +1 -1
  65. package/dist/cjs/components/shell.js.map +4 -4
  66. package/dist/cjs/components/shell.types.d.ts +19 -2
  67. package/dist/cjs/components/shell.types.d.ts.map +1 -1
  68. package/dist/cjs/components/shell.types.js +1 -1
  69. package/dist/cjs/components/shell.types.js.map +3 -3
  70. package/dist/cjs/components/sidebar.js.map +3 -3
  71. package/dist/cjs/hooks/use-breakpoint.d.ts +5 -0
  72. package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
  73. package/dist/cjs/hooks/use-breakpoint.js +1 -1
  74. package/dist/cjs/hooks/use-breakpoint.js.map +3 -3
  75. package/dist/cjs/index.js +5 -5
  76. package/dist/cjs/index.js.map +4 -4
  77. package/dist/esm/{chunk-HJU4I34X.js → chunk-25X75TI7.js} +2 -2
  78. package/dist/esm/{chunk-4XKK32M4.js → chunk-26I257HE.js} +2 -2
  79. package/dist/esm/chunk-2EQWBT2S.js +2 -0
  80. package/dist/esm/chunk-2EQWBT2S.js.map +7 -0
  81. package/dist/esm/{chunk-GLERJXVS.js → chunk-2Q7BJ7YG.js} +2 -2
  82. package/dist/esm/{chunk-CJ27XP5Z.js → chunk-3AOFY2B4.js} +2 -2
  83. package/dist/esm/chunk-3J6AUDID.js +2 -0
  84. package/dist/esm/chunk-3J6AUDID.js.map +7 -0
  85. package/dist/esm/{chunk-7EWFBWBS.js → chunk-3PTSRBVY.js} +2 -2
  86. package/dist/esm/chunk-3XSB7YIM.js +2 -0
  87. package/dist/esm/{chunk-FMBECDL4.js.map → chunk-3XSB7YIM.js.map} +3 -3
  88. package/dist/esm/{chunk-O2U6RJTB.js → chunk-44JZYS7A.js} +2 -2
  89. package/dist/esm/{chunk-CTA5ODAO.js → chunk-4WU2WKUJ.js} +2 -2
  90. package/dist/esm/{chunk-KZWNGWIM.js → chunk-5M7STAH3.js} +2 -2
  91. package/dist/esm/{chunk-5WRCK4R7.js → chunk-5TAHT6VC.js} +2 -2
  92. package/dist/esm/{chunk-RNTCHVFI.js → chunk-6J6YX2VX.js} +2 -2
  93. package/dist/esm/{chunk-AGSSWWFI.js → chunk-7FKKGUHK.js} +2 -2
  94. package/dist/esm/{chunk-WHFJ4JUN.js → chunk-7NYODT3Z.js} +2 -2
  95. package/dist/esm/{chunk-NVDXXGVW.js → chunk-7PMMYHZV.js} +2 -2
  96. package/dist/esm/chunk-A2XVR7GL.js +2 -0
  97. package/dist/esm/chunk-A2XVR7GL.js.map +7 -0
  98. package/dist/esm/chunk-ADXZNG4F.js +2 -0
  99. package/dist/esm/chunk-ADXZNG4F.js.map +7 -0
  100. package/dist/esm/chunk-AGNIFHOE.js +2 -0
  101. package/dist/esm/chunk-AGNIFHOE.js.map +7 -0
  102. package/dist/esm/{chunk-KJUDZCYK.js → chunk-AIHQ3MVK.js} +2 -2
  103. package/dist/esm/{chunk-UBOOUDS4.js → chunk-AO32NT75.js} +2 -2
  104. package/dist/esm/chunk-BZZXXZ3O.js +2 -0
  105. package/dist/esm/chunk-BZZXXZ3O.js.map +7 -0
  106. package/dist/esm/{chunk-JDGJSNWT.js → chunk-C5RVO3C3.js} +2 -2
  107. package/dist/esm/{chunk-IHK3H2OM.js → chunk-CBNTPHYK.js} +2 -2
  108. package/dist/esm/{chunk-BBJUB52V.js → chunk-CRBOJ7N7.js} +2 -2
  109. package/dist/esm/{chunk-VHECAEUP.js → chunk-DCIQHXAR.js} +2 -2
  110. package/dist/esm/{chunk-43A5GUSI.js → chunk-EHBAK3LQ.js} +2 -2
  111. package/dist/esm/{chunk-K3UAS7RW.js → chunk-F3AXE27Q.js} +2 -2
  112. package/dist/esm/{chunk-KFR3CK24.js → chunk-FB3PD4Z3.js} +2 -2
  113. package/dist/esm/{chunk-MCPRXVKZ.js → chunk-FEAOFF77.js} +2 -2
  114. package/dist/esm/{chunk-VZSQATP6.js → chunk-G4YKBAZT.js} +2 -2
  115. package/dist/esm/{chunk-ECXGQQJB.js → chunk-GDAKJS64.js} +2 -2
  116. package/dist/esm/{chunk-VR7ZAFYN.js → chunk-GGSJXOKR.js} +2 -2
  117. package/dist/esm/chunk-GM7KMQDI.js +2 -0
  118. package/dist/esm/chunk-GMHA5CFH.js +2 -0
  119. package/dist/esm/chunk-GMHA5CFH.js.map +7 -0
  120. package/dist/esm/{chunk-CESYMTJQ.js → chunk-H4GR4262.js} +2 -2
  121. package/dist/esm/{chunk-WXQIIKWV.js → chunk-HBIF43PT.js} +2 -2
  122. package/dist/esm/chunk-HCNO7PX6.js +2 -0
  123. package/dist/esm/chunk-HCNO7PX6.js.map +7 -0
  124. package/dist/esm/{chunk-2264DHUW.js → chunk-HMSSFU6I.js} +2 -2
  125. package/dist/esm/chunk-HWQ3NTJP.js +2 -0
  126. package/dist/esm/chunk-HWQ3NTJP.js.map +7 -0
  127. package/dist/esm/{chunk-S5C5YRBS.js → chunk-IDUVJJYG.js} +2 -2
  128. package/dist/esm/{chunk-CIYF56YS.js → chunk-IK3MQHA5.js} +2 -2
  129. package/dist/esm/{chunk-CKMMUHKE.js → chunk-JDEBKA56.js} +2 -2
  130. package/dist/esm/{chunk-E67CIG6A.js → chunk-JDWCQ2XP.js} +2 -2
  131. package/dist/esm/{chunk-L3BWTV7I.js → chunk-JQSZF3E2.js} +2 -2
  132. package/dist/esm/{chunk-MEO7MJMQ.js → chunk-JQW4XYBS.js} +2 -2
  133. package/dist/esm/{chunk-KMPE7TJ6.js → chunk-JRFZ535T.js} +2 -2
  134. package/dist/esm/{chunk-CDG5WH4U.js → chunk-KEEPKI2X.js} +2 -2
  135. package/dist/esm/{chunk-GAV3NHYL.js → chunk-KV4SZP3F.js} +2 -2
  136. package/dist/esm/{chunk-FG7XM7KJ.js → chunk-LJCUPAOI.js} +2 -2
  137. package/dist/esm/{chunk-N4GTDLRD.js → chunk-MBCQA7UZ.js} +2 -2
  138. package/dist/esm/chunk-MM5IHQFM.js +2 -0
  139. package/dist/esm/{chunk-Y5RCH23Z.js → chunk-NQXRWBQM.js} +2 -2
  140. package/dist/esm/{chunk-CSKZZOI2.js → chunk-NTNMJX5M.js} +2 -2
  141. package/dist/esm/{chunk-V27ZAN3E.js → chunk-NV3P2CKH.js} +2 -2
  142. package/dist/esm/{chunk-4ME6O27S.js → chunk-O4CSXNST.js} +2 -2
  143. package/dist/esm/chunk-ODCVOXEV.js +2 -0
  144. package/dist/esm/{chunk-W2FOBR5Q.js → chunk-OEEF6KJG.js} +2 -2
  145. package/dist/esm/{chunk-ABSKRHVM.js → chunk-OJSOX3AX.js} +2 -2
  146. package/dist/esm/{chunk-JGLAE5G7.js → chunk-OQU2SKLN.js} +2 -2
  147. package/dist/esm/{chunk-PZ7OYATT.js → chunk-OTKQN2KY.js} +2 -2
  148. package/dist/esm/{chunk-QWVU2TW4.js → chunk-P27KV2LS.js} +2 -2
  149. package/dist/esm/{chunk-JUY7CBSL.js → chunk-PBFSBHBS.js} +2 -2
  150. package/dist/esm/{chunk-DSJY5RI3.js → chunk-PDUHBDFC.js} +2 -2
  151. package/dist/esm/{chunk-MTOLKA6S.js → chunk-POG3YABW.js} +2 -2
  152. package/dist/esm/chunk-PYHEBG5I.js +2 -0
  153. package/dist/esm/chunk-PYHEBG5I.js.map +7 -0
  154. package/dist/esm/{chunk-GO7OHBHW.js → chunk-PYXMGEO7.js} +2 -2
  155. package/dist/esm/{chunk-VNH7BJOA.js → chunk-QEGEUD4D.js} +2 -2
  156. package/dist/esm/chunk-QEL55MLF.js +2 -0
  157. package/dist/esm/{chunk-MS5J4MF6.js → chunk-QJVAS7AK.js} +2 -2
  158. package/dist/esm/chunk-ROSWI2CL.js +2 -0
  159. package/dist/esm/chunk-ROSWI2CL.js.map +7 -0
  160. package/dist/esm/{chunk-KCWESYMR.js → chunk-RY67WG3O.js} +2 -2
  161. package/dist/esm/{chunk-IFM4EMZB.js → chunk-TLGXIWAS.js} +2 -2
  162. package/dist/esm/{chunk-6FLLFCBU.js → chunk-UBSLEGQZ.js} +2 -2
  163. package/dist/esm/{chunk-VBI3AWPT.js → chunk-UNWPH3SO.js} +2 -2
  164. package/dist/esm/chunk-V5ZSDDVZ.js +2 -0
  165. package/dist/esm/chunk-V5ZSDDVZ.js.map +7 -0
  166. package/dist/esm/{chunk-X7V3V3W4.js → chunk-VTIL55SR.js} +2 -2
  167. package/dist/esm/{chunk-ALWNS44Q.js → chunk-W2LD2YE6.js} +2 -2
  168. package/dist/esm/{chunk-2I7QRVJ5.js → chunk-WGWUEU4K.js} +2 -2
  169. package/dist/esm/{chunk-EPTYNVCU.js → chunk-WIDJYVZF.js} +2 -2
  170. package/dist/esm/{chunk-OLAWVEAI.js → chunk-WJBOOAIO.js} +2 -2
  171. package/dist/esm/{chunk-7FC7HF76.js → chunk-WQCB7KSH.js} +2 -2
  172. package/dist/esm/{chunk-YBSRX63K.js → chunk-WZFVTC7P.js} +2 -2
  173. package/dist/esm/chunk-XDDKT4NF.js +2 -0
  174. package/dist/esm/{chunk-KFA53SVQ.js → chunk-YA5DF67M.js} +2 -2
  175. package/dist/esm/chunk-YA5DF67M.js.map +7 -0
  176. package/dist/esm/chunk-YAQBIO2B.js +2 -0
  177. package/dist/esm/chunk-YAQBIO2B.js.map +7 -0
  178. package/dist/esm/{chunk-OFUNVHZ5.js → chunk-YG66IRW4.js} +2 -2
  179. package/dist/esm/{chunk-WGYUWEQV.js → chunk-YVSM2LGS.js} +2 -2
  180. package/dist/esm/{chunk-4NTGF22C.js → chunk-Z7AZNMNX.js} +2 -2
  181. package/dist/esm/chunk-ZJ33QP5N.js +2 -0
  182. package/dist/esm/{chunk-OGXZHAQL.js → chunk-ZW26J2SA.js} +2 -2
  183. package/dist/esm/components/_internal/base-button.js +1 -1
  184. package/dist/esm/components/_internal/base-menu.utils.js +1 -1
  185. package/dist/esm/components/_internal/menu-context.js +1 -1
  186. package/dist/esm/components/_internal/shell-bottom.d.ts +6 -7
  187. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  188. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  189. package/dist/esm/components/_internal/shell-handles.d.ts +9 -0
  190. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  191. package/dist/esm/components/_internal/shell-handles.js +1 -1
  192. package/dist/esm/components/_internal/shell-inspector.d.ts +4 -6
  193. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  194. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  195. package/dist/esm/components/_internal/shell-pane.d.ts +70 -0
  196. package/dist/esm/components/_internal/shell-pane.d.ts.map +1 -0
  197. package/dist/esm/components/_internal/shell-pane.js +2 -0
  198. package/dist/esm/components/_internal/shell-resizable.d.ts +48 -0
  199. package/dist/esm/components/_internal/shell-resizable.d.ts.map +1 -0
  200. package/dist/esm/components/_internal/shell-resizable.js +2 -0
  201. package/dist/esm/components/_internal/shell-resizable.js.map +7 -0
  202. package/dist/esm/components/_internal/shell-resize.d.ts +11 -3
  203. package/dist/esm/components/_internal/shell-resize.d.ts.map +1 -1
  204. package/dist/esm/components/_internal/shell-resize.js +1 -1
  205. package/dist/esm/components/_internal/shell-rest.d.ts +27 -0
  206. package/dist/esm/components/_internal/shell-rest.d.ts.map +1 -0
  207. package/dist/esm/components/_internal/shell-rest.js +2 -0
  208. package/dist/esm/components/_internal/shell-rest.js.map +7 -0
  209. package/dist/esm/components/_internal/shell-sidebar.d.ts +7 -12
  210. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  211. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  212. package/dist/esm/components/_internal/shell-store.d.ts +99 -0
  213. package/dist/esm/components/_internal/shell-store.d.ts.map +1 -0
  214. package/dist/esm/components/_internal/shell-store.js +2 -0
  215. package/dist/esm/components/_internal/shell-store.js.map +7 -0
  216. package/dist/esm/components/accordion.js +1 -1
  217. package/dist/esm/components/alert-dialog.js +1 -1
  218. package/dist/esm/components/avatar.js +1 -1
  219. package/dist/esm/components/badge.js +1 -1
  220. package/dist/esm/components/blockquote.js +1 -1
  221. package/dist/esm/components/blockquote.props.js +1 -1
  222. package/dist/esm/components/box.js +1 -1
  223. package/dist/esm/components/button.js +1 -1
  224. package/dist/esm/components/callout.js +1 -1
  225. package/dist/esm/components/card.js +1 -1
  226. package/dist/esm/components/chatbar.js +1 -1
  227. package/dist/esm/components/checkbox-cards.js +1 -1
  228. package/dist/esm/components/checkbox-group.js +1 -1
  229. package/dist/esm/components/checkbox.js +1 -1
  230. package/dist/esm/components/code.js +1 -1
  231. package/dist/esm/components/code.props.js +1 -1
  232. package/dist/esm/components/combobox.js +1 -1
  233. package/dist/esm/components/container.js +1 -1
  234. package/dist/esm/components/context-menu.js +1 -1
  235. package/dist/esm/components/data-list.js +1 -1
  236. package/dist/esm/components/dialog.js +1 -1
  237. package/dist/esm/components/dropdown-menu.js +1 -1
  238. package/dist/esm/components/em.js +1 -1
  239. package/dist/esm/components/em.props.js +1 -1
  240. package/dist/esm/components/flex.js +1 -1
  241. package/dist/esm/components/grid.js +1 -1
  242. package/dist/esm/components/heading.js +1 -1
  243. package/dist/esm/components/heading.props.js +1 -1
  244. package/dist/esm/components/hover-card.js +1 -1
  245. package/dist/esm/components/icon-button.js +1 -1
  246. package/dist/esm/components/image.js +1 -1
  247. package/dist/esm/components/index.js +1 -1
  248. package/dist/esm/components/inset.js +1 -1
  249. package/dist/esm/components/kbd.js +1 -1
  250. package/dist/esm/components/link.js +1 -1
  251. package/dist/esm/components/link.props.js +1 -1
  252. package/dist/esm/components/navbar.js +1 -1
  253. package/dist/esm/components/popover.js +1 -1
  254. package/dist/esm/components/progress.js +1 -1
  255. package/dist/esm/components/quote.js +1 -1
  256. package/dist/esm/components/quote.props.js +1 -1
  257. package/dist/esm/components/radio-cards.js +1 -1
  258. package/dist/esm/components/radio-group.js +1 -1
  259. package/dist/esm/components/radio.js +1 -1
  260. package/dist/esm/components/schemas/index.js +1 -1
  261. package/dist/esm/components/schemas/shell.schema.d.ts +277 -229
  262. package/dist/esm/components/schemas/shell.schema.d.ts.map +1 -1
  263. package/dist/esm/components/schemas/shell.schema.js +1 -1
  264. package/dist/esm/components/scroll-area.js +1 -1
  265. package/dist/esm/components/section.js +1 -1
  266. package/dist/esm/components/segmented-control.js +1 -1
  267. package/dist/esm/components/select.js +1 -1
  268. package/dist/esm/components/separator.js +1 -1
  269. package/dist/esm/components/sheet.js +1 -1
  270. package/dist/esm/components/shell.context.d.ts +25 -114
  271. package/dist/esm/components/shell.context.d.ts.map +1 -1
  272. package/dist/esm/components/shell.context.js +1 -1
  273. package/dist/esm/components/shell.d.ts +42 -21
  274. package/dist/esm/components/shell.d.ts.map +1 -1
  275. package/dist/esm/components/shell.hooks.d.ts +7 -23
  276. package/dist/esm/components/shell.hooks.d.ts.map +1 -1
  277. package/dist/esm/components/shell.hooks.js +1 -1
  278. package/dist/esm/components/shell.js +1 -1
  279. package/dist/esm/components/shell.types.d.ts +19 -2
  280. package/dist/esm/components/shell.types.d.ts.map +1 -1
  281. package/dist/esm/components/shell.types.js +1 -1
  282. package/dist/esm/components/sidebar.js +1 -1
  283. package/dist/esm/components/skeleton.js +1 -1
  284. package/dist/esm/components/slider.js +1 -1
  285. package/dist/esm/components/spinner.js +1 -1
  286. package/dist/esm/components/strong.js +1 -1
  287. package/dist/esm/components/strong.props.js +1 -1
  288. package/dist/esm/components/switch.js +1 -1
  289. package/dist/esm/components/tab-nav.js +1 -1
  290. package/dist/esm/components/table.js +1 -1
  291. package/dist/esm/components/tabs.js +1 -1
  292. package/dist/esm/components/text-area.js +1 -1
  293. package/dist/esm/components/text-field.js +1 -1
  294. package/dist/esm/components/text.js +1 -1
  295. package/dist/esm/components/text.props.js +1 -1
  296. package/dist/esm/components/theme-panel.js +1 -1
  297. package/dist/esm/components/toggle-button.js +1 -1
  298. package/dist/esm/components/toggle-icon-button.js +1 -1
  299. package/dist/esm/components/toolbar.js +1 -1
  300. package/dist/esm/components/tooltip.js +1 -1
  301. package/dist/esm/components/user-card.js +1 -1
  302. package/dist/esm/components/virtual-menu.js +1 -1
  303. package/dist/esm/helpers/extract-props.js +1 -1
  304. package/dist/esm/helpers/get-margin-styles.js +1 -1
  305. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  306. package/dist/esm/helpers/index.js +1 -1
  307. package/dist/esm/hooks/index.js +1 -1
  308. package/dist/esm/hooks/use-breakpoint.d.ts +5 -0
  309. package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
  310. package/dist/esm/hooks/use-breakpoint.js +1 -1
  311. package/dist/esm/index.js +1 -1
  312. package/dist/esm/props/index.js +1 -1
  313. package/package.json +7 -2
  314. package/schemas/index.json +1655 -0
  315. package/schemas/shell-bottom.d.ts +2 -0
  316. package/schemas/shell-bottom.json +180 -76
  317. package/schemas/shell-content.d.ts +2 -0
  318. package/schemas/shell-content.json +11 -5
  319. package/schemas/shell-handle.d.ts +2 -0
  320. package/schemas/shell-handle.json +7 -5
  321. package/schemas/shell-header.d.ts +2 -0
  322. package/schemas/shell-header.json +9 -10
  323. package/schemas/shell-inspector.d.ts +2 -0
  324. package/schemas/shell-inspector.json +183 -79
  325. package/schemas/shell-panel.d.ts +2 -0
  326. package/schemas/shell-panel.json +180 -76
  327. package/schemas/shell-rail.d.ts +2 -0
  328. package/schemas/shell-rail.json +137 -64
  329. package/schemas/shell-root.d.ts +2 -0
  330. package/schemas/shell-root.json +11 -9
  331. package/schemas/shell-sidebar.d.ts +2 -0
  332. package/schemas/shell-sidebar.json +274 -85
  333. package/schemas/shell-trigger.d.ts +2 -0
  334. package/schemas/shell-trigger.json +29 -17
  335. package/src/components/_internal/shell-bottom.tsx +92 -361
  336. package/src/components/_internal/shell-handles.tsx +193 -108
  337. package/src/components/_internal/shell-inspector.tsx +93 -360
  338. package/src/components/_internal/shell-pane.tsx +283 -0
  339. package/src/components/_internal/shell-resizable.tsx +263 -0
  340. package/src/components/_internal/shell-resize.tsx +11 -3
  341. package/src/components/_internal/shell-rest.ts +45 -0
  342. package/src/components/_internal/shell-sidebar.tsx +130 -441
  343. package/src/components/_internal/shell-store.tsx +204 -0
  344. package/src/components/schemas/shell.schema.ts +162 -153
  345. package/src/components/shell.context.tsx +112 -124
  346. package/src/components/shell.css +637 -496
  347. package/src/components/shell.hooks.ts +12 -170
  348. package/src/components/shell.tsx +566 -1497
  349. package/src/components/shell.types.ts +22 -2
  350. package/src/hooks/use-breakpoint.ts +9 -0
  351. package/styles.css +538 -493
  352. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts +0 -7
  353. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts.map +0 -1
  354. package/dist/cjs/components/_internal/shell-prop-helpers.js +0 -2
  355. package/dist/cjs/components/_internal/shell-prop-helpers.js.map +0 -7
  356. package/dist/esm/chunk-2SZZ75RJ.js +0 -2
  357. package/dist/esm/chunk-2SZZ75RJ.js.map +0 -7
  358. package/dist/esm/chunk-4JQZUQY7.js +0 -2
  359. package/dist/esm/chunk-5LXFJMFB.js +0 -2
  360. package/dist/esm/chunk-5LXFJMFB.js.map +0 -7
  361. package/dist/esm/chunk-CECQNGUL.js +0 -2
  362. package/dist/esm/chunk-CECQNGUL.js.map +0 -7
  363. package/dist/esm/chunk-CEIK5U6C.js +0 -2
  364. package/dist/esm/chunk-CEIK5U6C.js.map +0 -7
  365. package/dist/esm/chunk-EE2IH2GL.js +0 -2
  366. package/dist/esm/chunk-EE2IH2GL.js.map +0 -7
  367. package/dist/esm/chunk-FMBECDL4.js +0 -2
  368. package/dist/esm/chunk-HSAG7C53.js +0 -2
  369. package/dist/esm/chunk-JJKQ7CGI.js +0 -2
  370. package/dist/esm/chunk-KFA53SVQ.js.map +0 -7
  371. package/dist/esm/chunk-KRDP5SQ7.js +0 -2
  372. package/dist/esm/chunk-KRDP5SQ7.js.map +0 -7
  373. package/dist/esm/chunk-M6DJRFJZ.js +0 -2
  374. package/dist/esm/chunk-M6DJRFJZ.js.map +0 -7
  375. package/dist/esm/chunk-MCQCG6AS.js +0 -2
  376. package/dist/esm/chunk-NIQT45PJ.js +0 -2
  377. package/dist/esm/chunk-NNO7M466.js +0 -2
  378. package/dist/esm/chunk-NNO7M466.js.map +0 -7
  379. package/dist/esm/chunk-SNHEJU2S.js +0 -2
  380. package/dist/esm/chunk-SNHEJU2S.js.map +0 -7
  381. package/dist/esm/chunk-TLWTUKKL.js +0 -2
  382. package/dist/esm/chunk-TLWTUKKL.js.map +0 -7
  383. package/dist/esm/chunk-XI5YXUCK.js +0 -2
  384. package/dist/esm/components/_internal/shell-prop-helpers.d.ts +0 -7
  385. package/dist/esm/components/_internal/shell-prop-helpers.d.ts.map +0 -1
  386. package/dist/esm/components/_internal/shell-prop-helpers.js +0 -2
  387. package/src/components/_internal/shell-prop-helpers.ts +0 -54
  388. /package/dist/esm/{chunk-HJU4I34X.js.map → chunk-25X75TI7.js.map} +0 -0
  389. /package/dist/esm/{chunk-4XKK32M4.js.map → chunk-26I257HE.js.map} +0 -0
  390. /package/dist/esm/{chunk-GLERJXVS.js.map → chunk-2Q7BJ7YG.js.map} +0 -0
  391. /package/dist/esm/{chunk-CJ27XP5Z.js.map → chunk-3AOFY2B4.js.map} +0 -0
  392. /package/dist/esm/{chunk-7EWFBWBS.js.map → chunk-3PTSRBVY.js.map} +0 -0
  393. /package/dist/esm/{chunk-O2U6RJTB.js.map → chunk-44JZYS7A.js.map} +0 -0
  394. /package/dist/esm/{chunk-CTA5ODAO.js.map → chunk-4WU2WKUJ.js.map} +0 -0
  395. /package/dist/esm/{chunk-KZWNGWIM.js.map → chunk-5M7STAH3.js.map} +0 -0
  396. /package/dist/esm/{chunk-5WRCK4R7.js.map → chunk-5TAHT6VC.js.map} +0 -0
  397. /package/dist/esm/{chunk-RNTCHVFI.js.map → chunk-6J6YX2VX.js.map} +0 -0
  398. /package/dist/esm/{chunk-AGSSWWFI.js.map → chunk-7FKKGUHK.js.map} +0 -0
  399. /package/dist/esm/{chunk-WHFJ4JUN.js.map → chunk-7NYODT3Z.js.map} +0 -0
  400. /package/dist/esm/{chunk-NVDXXGVW.js.map → chunk-7PMMYHZV.js.map} +0 -0
  401. /package/dist/esm/{chunk-KJUDZCYK.js.map → chunk-AIHQ3MVK.js.map} +0 -0
  402. /package/dist/esm/{chunk-UBOOUDS4.js.map → chunk-AO32NT75.js.map} +0 -0
  403. /package/dist/esm/{chunk-JDGJSNWT.js.map → chunk-C5RVO3C3.js.map} +0 -0
  404. /package/dist/esm/{chunk-IHK3H2OM.js.map → chunk-CBNTPHYK.js.map} +0 -0
  405. /package/dist/esm/{chunk-BBJUB52V.js.map → chunk-CRBOJ7N7.js.map} +0 -0
  406. /package/dist/esm/{chunk-VHECAEUP.js.map → chunk-DCIQHXAR.js.map} +0 -0
  407. /package/dist/esm/{chunk-43A5GUSI.js.map → chunk-EHBAK3LQ.js.map} +0 -0
  408. /package/dist/esm/{chunk-K3UAS7RW.js.map → chunk-F3AXE27Q.js.map} +0 -0
  409. /package/dist/esm/{chunk-KFR3CK24.js.map → chunk-FB3PD4Z3.js.map} +0 -0
  410. /package/dist/esm/{chunk-MCPRXVKZ.js.map → chunk-FEAOFF77.js.map} +0 -0
  411. /package/dist/esm/{chunk-VZSQATP6.js.map → chunk-G4YKBAZT.js.map} +0 -0
  412. /package/dist/esm/{chunk-ECXGQQJB.js.map → chunk-GDAKJS64.js.map} +0 -0
  413. /package/dist/esm/{chunk-VR7ZAFYN.js.map → chunk-GGSJXOKR.js.map} +0 -0
  414. /package/dist/esm/{chunk-4JQZUQY7.js.map → chunk-GM7KMQDI.js.map} +0 -0
  415. /package/dist/esm/{chunk-CESYMTJQ.js.map → chunk-H4GR4262.js.map} +0 -0
  416. /package/dist/esm/{chunk-WXQIIKWV.js.map → chunk-HBIF43PT.js.map} +0 -0
  417. /package/dist/esm/{chunk-2264DHUW.js.map → chunk-HMSSFU6I.js.map} +0 -0
  418. /package/dist/esm/{chunk-S5C5YRBS.js.map → chunk-IDUVJJYG.js.map} +0 -0
  419. /package/dist/esm/{chunk-CIYF56YS.js.map → chunk-IK3MQHA5.js.map} +0 -0
  420. /package/dist/esm/{chunk-CKMMUHKE.js.map → chunk-JDEBKA56.js.map} +0 -0
  421. /package/dist/esm/{chunk-E67CIG6A.js.map → chunk-JDWCQ2XP.js.map} +0 -0
  422. /package/dist/esm/{chunk-L3BWTV7I.js.map → chunk-JQSZF3E2.js.map} +0 -0
  423. /package/dist/esm/{chunk-MEO7MJMQ.js.map → chunk-JQW4XYBS.js.map} +0 -0
  424. /package/dist/esm/{chunk-KMPE7TJ6.js.map → chunk-JRFZ535T.js.map} +0 -0
  425. /package/dist/esm/{chunk-CDG5WH4U.js.map → chunk-KEEPKI2X.js.map} +0 -0
  426. /package/dist/esm/{chunk-GAV3NHYL.js.map → chunk-KV4SZP3F.js.map} +0 -0
  427. /package/dist/esm/{chunk-FG7XM7KJ.js.map → chunk-LJCUPAOI.js.map} +0 -0
  428. /package/dist/esm/{chunk-N4GTDLRD.js.map → chunk-MBCQA7UZ.js.map} +0 -0
  429. /package/dist/esm/{chunk-JJKQ7CGI.js.map → chunk-MM5IHQFM.js.map} +0 -0
  430. /package/dist/esm/{chunk-Y5RCH23Z.js.map → chunk-NQXRWBQM.js.map} +0 -0
  431. /package/dist/esm/{chunk-CSKZZOI2.js.map → chunk-NTNMJX5M.js.map} +0 -0
  432. /package/dist/esm/{chunk-V27ZAN3E.js.map → chunk-NV3P2CKH.js.map} +0 -0
  433. /package/dist/esm/{chunk-4ME6O27S.js.map → chunk-O4CSXNST.js.map} +0 -0
  434. /package/dist/esm/{chunk-HSAG7C53.js.map → chunk-ODCVOXEV.js.map} +0 -0
  435. /package/dist/esm/{chunk-W2FOBR5Q.js.map → chunk-OEEF6KJG.js.map} +0 -0
  436. /package/dist/esm/{chunk-ABSKRHVM.js.map → chunk-OJSOX3AX.js.map} +0 -0
  437. /package/dist/esm/{chunk-JGLAE5G7.js.map → chunk-OQU2SKLN.js.map} +0 -0
  438. /package/dist/esm/{chunk-PZ7OYATT.js.map → chunk-OTKQN2KY.js.map} +0 -0
  439. /package/dist/esm/{chunk-QWVU2TW4.js.map → chunk-P27KV2LS.js.map} +0 -0
  440. /package/dist/esm/{chunk-JUY7CBSL.js.map → chunk-PBFSBHBS.js.map} +0 -0
  441. /package/dist/esm/{chunk-DSJY5RI3.js.map → chunk-PDUHBDFC.js.map} +0 -0
  442. /package/dist/esm/{chunk-MTOLKA6S.js.map → chunk-POG3YABW.js.map} +0 -0
  443. /package/dist/esm/{chunk-GO7OHBHW.js.map → chunk-PYXMGEO7.js.map} +0 -0
  444. /package/dist/esm/{chunk-VNH7BJOA.js.map → chunk-QEGEUD4D.js.map} +0 -0
  445. /package/dist/esm/{chunk-MCQCG6AS.js.map → chunk-QEL55MLF.js.map} +0 -0
  446. /package/dist/esm/{chunk-MS5J4MF6.js.map → chunk-QJVAS7AK.js.map} +0 -0
  447. /package/dist/esm/{chunk-KCWESYMR.js.map → chunk-RY67WG3O.js.map} +0 -0
  448. /package/dist/esm/{chunk-IFM4EMZB.js.map → chunk-TLGXIWAS.js.map} +0 -0
  449. /package/dist/esm/{chunk-6FLLFCBU.js.map → chunk-UBSLEGQZ.js.map} +0 -0
  450. /package/dist/esm/{chunk-VBI3AWPT.js.map → chunk-UNWPH3SO.js.map} +0 -0
  451. /package/dist/esm/{chunk-X7V3V3W4.js.map → chunk-VTIL55SR.js.map} +0 -0
  452. /package/dist/esm/{chunk-ALWNS44Q.js.map → chunk-W2LD2YE6.js.map} +0 -0
  453. /package/dist/esm/{chunk-2I7QRVJ5.js.map → chunk-WGWUEU4K.js.map} +0 -0
  454. /package/dist/esm/{chunk-EPTYNVCU.js.map → chunk-WIDJYVZF.js.map} +0 -0
  455. /package/dist/esm/{chunk-OLAWVEAI.js.map → chunk-WJBOOAIO.js.map} +0 -0
  456. /package/dist/esm/{chunk-7FC7HF76.js.map → chunk-WQCB7KSH.js.map} +0 -0
  457. /package/dist/esm/{chunk-YBSRX63K.js.map → chunk-WZFVTC7P.js.map} +0 -0
  458. /package/dist/esm/{chunk-XI5YXUCK.js.map → chunk-XDDKT4NF.js.map} +0 -0
  459. /package/dist/esm/{chunk-OFUNVHZ5.js.map → chunk-YG66IRW4.js.map} +0 -0
  460. /package/dist/esm/{chunk-WGYUWEQV.js.map → chunk-YVSM2LGS.js.map} +0 -0
  461. /package/dist/esm/{chunk-4NTGF22C.js.map → chunk-Z7AZNMNX.js.map} +0 -0
  462. /package/dist/esm/{chunk-NIQT45PJ.js.map → chunk-ZJ33QP5N.js.map} +0 -0
  463. /package/dist/esm/{chunk-OGXZHAQL.js.map → chunk-ZW26J2SA.js.map} +0 -0
  464. /package/dist/esm/components/_internal/{shell-prop-helpers.js.map → shell-pane.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- import type { Breakpoint, PaneMode } from '../shell.types.js';
2
- type KeyList<T> = readonly (keyof T)[];
3
- export declare function omitPaneProps<T extends object, K extends KeyList<T>>(source: T, keys: K): Omit<T, K[number]>;
4
- export declare function extractPaneDomProps<T extends object, Extra extends KeyList<T> | undefined = undefined>(source: T, extraKeys?: Extra): Omit<T, keyof T>;
5
- export declare function mapResponsiveBooleanToPaneMode(value?: boolean | Partial<Record<Breakpoint, boolean>>): PaneMode | Partial<Record<Breakpoint, PaneMode>> | undefined;
6
- export {};
7
- //# sourceMappingURL=shell-prop-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell-prop-helpers.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-prop-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE9D,KAAK,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AAEvC,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAQrE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CACpC;AAuBD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,oBAGnI;AAED,wBAAgB,8BAA8B,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAYnK"}
@@ -1,2 +0,0 @@
1
- "use strict";var r=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(e,n)=>{for(var o in n)r(e,o,{get:n[o],enumerable:!0})},f=(e,n,o,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of p(n))!l.call(e,t)&&t!==o&&r(e,t,{get:()=>n[t],enumerable:!(a=d(n,t))||a.enumerable});return e};var y=e=>f(r({},"__esModule",{value:!0}),e);var x={};c(x,{extractPaneDomProps:()=>T,mapResponsiveBooleanToPaneMode:()=>P,omitPaneProps:()=>i});module.exports=y(x);function i(e,n){let o=new Set(n),a={};return Object.keys(e).forEach(t=>{o.has(t)||(a[t]=e[t])}),a}var s=["presentation","expandedSize","minSize","maxSize","resizable","collapsible","onExpand","onCollapse","onResize","resizer","onResizeStart","onResizeEnd","snapPoints","snapTolerance","collapseThreshold","paneId","persistence","inset"];function T(e,n){let o=n?[...s,...n]:[...s];return i(e,o)}function P(e){if(e!=null){if(typeof e=="object"){let n={};return Object.entries(e).forEach(([o,a])=>{typeof a=="boolean"&&(n[o]=a?"expanded":"collapsed")}),n}return e?"expanded":"collapsed"}}
2
- //# sourceMappingURL=shell-prop-helpers.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/_internal/shell-prop-helpers.ts"],
4
- "sourcesContent": ["import type { Breakpoint, PaneMode } from '../shell.types.js';\n\ntype KeyList<T> = readonly (keyof T)[];\n\nexport function omitPaneProps<T extends object, K extends KeyList<T>>(source: T, keys: K) {\n const omitSet = new Set<keyof T>(keys as readonly (keyof T)[]);\n const result: Partial<T> = {};\n (Object.keys(source) as Array<keyof T>).forEach((key) => {\n if (!omitSet.has(key)) {\n result[key] = source[key];\n }\n });\n return result as Omit<T, K[number]>;\n}\n\nconst PANE_BASE_INTERNAL_PROPS = [\n 'presentation',\n 'expandedSize',\n 'minSize',\n 'maxSize',\n 'resizable',\n 'collapsible',\n 'onExpand',\n 'onCollapse',\n 'onResize',\n 'resizer',\n 'onResizeStart',\n 'onResizeEnd',\n 'snapPoints',\n 'snapTolerance',\n 'collapseThreshold',\n 'paneId',\n 'persistence',\n 'inset',\n] as const;\n\nexport function extractPaneDomProps<T extends object, Extra extends KeyList<T> | undefined = undefined>(source: T, extraKeys?: Extra) {\n const omitKeys = extraKeys ? [...PANE_BASE_INTERNAL_PROPS, ...extraKeys] : [...PANE_BASE_INTERNAL_PROPS];\n return omitPaneProps(source, omitKeys as ReadonlyArray<keyof T>);\n}\n\nexport function mapResponsiveBooleanToPaneMode(value?: boolean | Partial<Record<Breakpoint, boolean>>): PaneMode | Partial<Record<Breakpoint, PaneMode>> | undefined {\n if (value == null) return undefined;\n if (typeof value === 'object') {\n const mapped: Partial<Record<Breakpoint, PaneMode>> = {};\n (Object.entries(value) as Array<[string, boolean]>).forEach(([bp, val]) => {\n if (typeof val === 'boolean') {\n mapped[bp as Breakpoint] = val ? 'expanded' : 'collapsed';\n }\n });\n return mapped;\n }\n return value ? 'expanded' : 'collapsed';\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,EAAA,mCAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAL,GAIO,SAASI,EAAsDE,EAAWC,EAAS,CACxF,IAAMC,EAAU,IAAI,IAAaD,CAA4B,EACvDE,EAAqB,CAAC,EAC5B,OAAC,OAAO,KAAKH,CAAM,EAAqB,QAASI,GAAQ,CAClDF,EAAQ,IAAIE,CAAG,IAClBD,EAAOC,CAAG,EAAIJ,EAAOI,CAAG,EAE5B,CAAC,EACMD,CACT,CAEA,IAAME,EAA2B,CAC/B,eACA,eACA,UACA,UACA,YACA,cACA,WACA,aACA,WACA,UACA,gBACA,cACA,aACA,gBACA,oBACA,SACA,cACA,OACF,EAEO,SAAST,EAAwFI,EAAWM,EAAmB,CACpI,IAAMC,EAAWD,EAAY,CAAC,GAAGD,EAA0B,GAAGC,CAAS,EAAI,CAAC,GAAGD,CAAwB,EACvG,OAAOP,EAAcE,EAAQO,CAAkC,CACjE,CAEO,SAASV,EAA+BW,EAAsH,CACnK,GAAIA,GAAS,KACb,IAAI,OAAOA,GAAU,SAAU,CAC7B,IAAMC,EAAgD,CAAC,EACvD,OAAC,OAAO,QAAQD,CAAK,EAA+B,QAAQ,CAAC,CAACE,EAAIC,CAAG,IAAM,CACrE,OAAOA,GAAQ,YACjBF,EAAOC,CAAgB,EAAIC,EAAM,WAAa,YAElD,CAAC,EACMF,CACT,CACA,OAAOD,EAAQ,WAAa,YAC9B",
6
- "names": ["shell_prop_helpers_exports", "__export", "extractPaneDomProps", "mapResponsiveBooleanToPaneMode", "omitPaneProps", "__toCommonJS", "source", "keys", "omitSet", "result", "key", "PANE_BASE_INTERNAL_PROPS", "extraKeys", "omitKeys", "value", "mapped", "bp", "val"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as Se}from"./chunk-M6DJRFJZ.js";import{a as Ee}from"./chunk-CEIK5U6C.js";import{a as Me}from"./chunk-EE2IH2GL.js";import{a as cn}from"./chunk-2LYX5S7H.js";import{a as Ve,c as He,d as Fe}from"./chunk-QWVU2TW4.js";import{a as Le,c as ke}from"./chunk-5LXFJMFB.js";import{a as Re,b as je,c as Ue,d as We,e as $e,f as qe,g as Ge,h as Oe,i as Ke,j as Xe,k as Ye,l as Je,m as Qe,o as Ze,p as en,q as nn,r as tn,s as on,u as an,v as Te}from"./chunk-SNHEJU2S.js";import{a as ln,b as be}from"./chunk-TLWTUKKL.js";import{a as sn,b as dn,c as he}from"./chunk-CECQNGUL.js";import{a as rn}from"./chunk-NNO7M466.js";import{a as Ae}from"./chunk-AGAQC4HH.js";import{a as we}from"./chunk-FMBECDL4.js";import{a as Ie}from"./chunk-KFA53SVQ.js";import{a as On}from"./chunk-OS3FCYZY.js";var Nn={};On(Nn,{Bottom:()=>Se,Content:()=>xe,Header:()=>ze,Inspector:()=>Ee,Left:()=>Ce,Panel:()=>ie,Rail:()=>de,Root:()=>fn,Sidebar:()=>Me,Trigger:()=>Rn,useResponsivePresentation:()=>Le,useShell:()=>Re,useSidebarMode:()=>Oe});import*as e from"react";import se from"classnames";var Tn=Symbol("rtShellSlot");function ce(n,a){return n[Tn]=a,n}var j=(n,a)=>e.isValidElement(n)&&(n.type===a||n.type?.displayName===a.displayName);ce(Me,"Shell.Sidebar");ce(Ee,"Shell.Inspector");ce(Se,"Shell.Bottom");function Ln(n,a){switch(a.type){case"SET_LEFT_MODE":return a.mode==="collapsed"?n.leftMode==="collapsed"&&n.panelMode==="collapsed"?n:{...n,leftMode:"collapsed",panelMode:"collapsed"}:n.leftMode===a.mode?n:{...n,leftMode:a.mode};case"SET_PANEL_MODE":return a.mode==="expanded"&&n.leftMode!=="expanded"?{...n,leftMode:"expanded",panelMode:"expanded"}:n.panelMode===a.mode?n:{...n,panelMode:a.mode};case"SET_SIDEBAR_MODE":return n.sidebarMode===a.mode?n:{...n,sidebarMode:a.mode};case"SET_INSPECTOR_MODE":return n.inspectorMode===a.mode?n:{...n,inspectorMode:a.mode};case"SET_BOTTOM_MODE":return n.bottomMode===a.mode?n:{...n,bottomMode:a.mode};case"TOGGLE_PANE":switch(a.target){case"left":case"rail":return{...n,leftMode:n.leftMode==="expanded"?"collapsed":"expanded",panelMode:n.leftMode==="expanded"?"collapsed":n.panelMode};case"panel":return n.leftMode==="collapsed"?{...n,leftMode:"expanded",panelMode:"expanded"}:{...n,panelMode:n.panelMode==="expanded"?"collapsed":"expanded"};case"sidebar":{let p=n.sidebarMode==="collapsed"?"expanded":n.sidebarMode==="expanded"?"collapsed":"expanded";return{...n,sidebarMode:p}}case"inspector":return{...n,inspectorMode:n.inspectorMode==="expanded"?"collapsed":"expanded"};case"bottom":return{...n,bottomMode:n.bottomMode==="expanded"?"collapsed":"expanded"};default:return n}case"EXPAND_PANE":switch(a.target){case"left":case"rail":return n.leftMode==="expanded"?n:{...n,leftMode:"expanded"};case"panel":return n.leftMode==="expanded"&&n.panelMode==="expanded"?n:{...n,leftMode:"expanded",panelMode:"expanded"};case"sidebar":return n.sidebarMode==="expanded"?n:{...n,sidebarMode:"expanded"};case"inspector":return n.inspectorMode==="expanded"?n:{...n,inspectorMode:"expanded"};case"bottom":return n.bottomMode==="expanded"?n:{...n,bottomMode:"expanded"};default:return n}case"COLLAPSE_PANE":switch(a.target){case"left":case"rail":return n.leftMode==="collapsed"&&n.panelMode==="collapsed"?n:{...n,leftMode:"collapsed",panelMode:"collapsed"};case"panel":return n.panelMode==="collapsed"?n:{...n,panelMode:"collapsed"};case"sidebar":return n.sidebarMode==="collapsed"?n:{...n,sidebarMode:"collapsed"};case"inspector":return n.inspectorMode==="collapsed"?n:{...n,inspectorMode:"collapsed"};case"bottom":return n.bottomMode==="collapsed"?n:{...n,bottomMode:"collapsed"};default:return n}}return n}function pn(n,a){if(a===void 0)return n.initial??Object.values(n)[0];if(n[a]!==void 0)return n[a];let y=[...Object.keys(Ie)].reverse().concat("initial");for(let u=y.indexOf(a)+1;u<y.length;u++)if(n[y[u]]!==void 0)return n[y[u]]}function un(n,a){let p=e.Children.toArray(n),y=p.some(s=>e.isValidElement(s)&&s.type?.displayName==="Shell.Panel"&&!!s.props?.defaultOpen),u=p.find(s=>e.isValidElement(s)&&s.type?.displayName==="Shell.Rail"),f=u?u.props?.defaultOpen:void 0,T=u?f===void 0?!0:typeof f=="boolean"?f:typeof f=="object"?f.initial??Object.values(f)[0]??!0:!0:!1,L=p.some(s=>e.isValidElement(s)&&s.type?.displayName==="Shell.Inspector"&&!!s.props?.defaultOpen),i=p.some(s=>e.isValidElement(s)&&s.type?.displayName==="Shell.Inspector"&&typeof s.props?.open<"u"&&!!s.props?.open),R=p.some(s=>{if(!e.isValidElement(s)||s.type?.displayName!=="Shell.Panel")return!1;let d=s.props?.open;return typeof d>"u"?!1:typeof d=="boolean"?d:typeof d=="object"&&d!==null?d.initial??Object.values(d)[0]??!1:!1}),P=()=>{let s=p.find(h=>e.isValidElement(h)&&h.type?.displayName==="Shell.Sidebar");if(!s)return"expanded";let d=s.props;if(typeof d?.state<"u"){if(typeof d.state=="string")return d.state;if(typeof d.state=="object")return pn(d.state,a)??"expanded"}if(typeof d?.defaultState<"u"){if(typeof d.defaultState=="string")return d.defaultState;if(typeof d.defaultState=="object")return pn(d.defaultState,a)??"expanded"}return"expanded"},N=()=>{let s=p.find(h=>e.isValidElement(h)&&h.type?.displayName==="Shell.Bottom");if(!s)return"collapsed";let d=s.props;if(typeof d?.open<"u"){if(typeof d.open=="boolean")return d.open?"expanded":"collapsed";if(typeof d.open=="object")return d.open.initial??Object.values(d.open)[0]?"expanded":"collapsed"}return typeof d?.defaultOpen<"u"&&d.defaultOpen?"expanded":"collapsed"};return{hasPanelDefaultOpen:y,leftMode:y||R||T?"expanded":"collapsed",panelMode:y||R?"expanded":"collapsed",sidebarMode:P(),inspectorMode:L||i?"expanded":"collapsed",bottomMode:N()}}var fn=e.forwardRef(({className:n,children:a,height:p="full",...y},u)=>{let{breakpoint:f,ready:T}=we(),L=e.useRef(!1),[i,R]=e.useReducer(Ln,a,t=>{let{hasPanelDefaultOpen:l,...x}=un(t);return L.current=l,x}),P=e.useCallback(t=>R({type:"SET_LEFT_MODE",mode:t}),[]),N=e.useCallback(t=>R({type:"SET_PANEL_MODE",mode:t}),[]),s=e.useCallback(t=>R({type:"SET_SIDEBAR_MODE",mode:t}),[]),d=e.useCallback(t=>R({type:"SET_INSPECTOR_MODE",mode:t}),[]),h=e.useCallback(t=>R({type:"SET_BOTTOM_MODE",mode:t}),[]),[M,D]=e.useState(!1),[r,_]=e.useState(!1),V=e.useRef(t=>t==="collapsed"?"thin":t==="thin"?"expanded":"collapsed"),G=e.useCallback(t=>{V.current=t},[]);e.useLayoutEffect(()=>{r&&M&&console.warn("Shell: Sidebar cannot coexist with Rail or Panel. Use either Rail+Panel OR Sidebar.")},[r,M]);let[H,Y]=e.useState(void 0),J=e.useCallback(t=>Y(t),[]),U=e.useRef(64),q=e.useRef(288),Q=e.useCallback(t=>{U.current=t},[]),Z=e.useCallback(t=>{q.current=t},[]),W=e.useMemo(()=>e.Children.toArray(a).some(l=>j(l,de)||j(l,ie)),[a]),k=e.useMemo(()=>e.Children.toArray(a).some(l=>j(l,Me)),[a]),B=e.useRef({left:W,sidebar:k});if(B.current.left!==W||B.current.sidebar!==k){let t=W&&!B.current.left,l=k&&!B.current.sidebar;if(B.current={left:W,sidebar:k},t||l){let{hasPanelDefaultOpen:x,...w}=un(a,f);t&&(L.current=x,w.leftMode!==i.leftMode&&R({type:"SET_LEFT_MODE",mode:w.leftMode}),w.panelMode!==i.panelMode&&R({type:"SET_PANEL_MODE",mode:w.panelMode})),l&&w.sidebarMode!==i.sidebarMode&&R({type:"SET_SIDEBAR_MODE",mode:w.sidebarMode})}}let c=e.useRef(i.sidebarMode);c.current=i.sidebarMode;let K=e.useCallback(t=>{if(t==="sidebar"){let l=V.current(c.current);s(l);return}R({type:"TOGGLE_PANE",target:t})},[s]),X=e.useCallback(t=>{if(t==="sidebar")return s("expanded");R({type:"EXPAND_PANE",target:t})},[s]),$=e.useCallback(t=>{if(t==="sidebar")return s("collapsed");R({type:"COLLAPSE_PANE",target:t})},[s]),le=e.useMemo(()=>({leftMode:i.leftMode,setLeftMode:P,panelMode:i.panelMode,setPanelMode:N,sidebarMode:i.sidebarMode,setSidebarMode:s,inspectorMode:i.inspectorMode,setInspectorMode:d,bottomMode:i.bottomMode,setBottomMode:h,hasLeft:M,setHasLeft:D,hasSidebar:r,setHasSidebar:_,currentBreakpoint:f,currentBreakpointReady:T,leftResolvedPresentation:H,togglePane:K,expandPane:X,collapsePane:$,setSidebarToggleComputer:G,onLeftPres:J,onRailDefaults:Q,onPanelDefaults:Z}),[i.leftMode,P,i.panelMode,N,i.sidebarMode,s,i.inspectorMode,d,i.bottomMode,h,M,r,f,T,H,K,X,$,G,J,Q,Z]),{headerEls:me,railEls:m,panelEls:S,sidebarEls:A,contentEls:I,inspectorEls:C,bottomEls:oe}=e.useMemo(()=>{let t={headerEls:[],railEls:[],panelEls:[],sidebarEls:[],contentEls:[],inspectorEls:[],bottomEls:[]};for(let l of e.Children.toArray(a))j(l,ze)?t.headerEls.push(l):j(l,de)?t.railEls.push(l):j(l,ie)?t.panelEls.push(l):j(l,Me)?t.sidebarEls.push(l):j(l,xe)?t.contentEls.push(l):j(l,Ee)?t.inspectorEls.push(l):j(l,Se)&&t.bottomEls.push(l);return t},[a]),z=m[0]?.props?.open,v=e.useMemo(()=>{if(typeof z>"u")return;if(typeof z=="boolean")return z;if(typeof z!="object"||z===null)return!!z;let t=z;if(t[f]!==void 0)return t[f];let l=["xl","lg","md","sm","xs","initial"],x=l.indexOf(f);for(let w=x+1;w<l.length;w++){let fe=l[w];if(t[fe]!==void 0)return t[fe]}},[z,f]),F=S[0]?.props?.open,E=e.useMemo(()=>{if(typeof F>"u")return;if(typeof F=="boolean")return F;if(typeof F!="object"||F===null)return!!F;let t=F;if(t[f]!==void 0)return t[f];let l=["xl","lg","md","sm","xs","initial"],x=l.indexOf(f);for(let w=x+1;w<l.length;w++){let fe=l[w];if(t[fe]!==void 0)return t[fe]}},[F,f]),pe=e.useRef(0),ee=e.useRef(0),ae=e.useRef(0),ue=e.useRef(v),o=e.useRef(E);e.useLayoutEffect(()=>{if(v===void 0){ue.current=void 0;return}ue.current!==v&&(ue.current=v,ee.current=++pe.current)},[v]),e.useLayoutEffect(()=>{if(E===void 0){o.current=void 0;return}o.current!==E&&(o.current=E,ae.current=++pe.current)},[E]),e.useLayoutEffect(()=>{typeof v>"u"||P(v?"expanded":"collapsed")},[v,P]);let b=m[0]?.props?.onOpenChange,g=S[0]?.props?.onOpenChange,O=e.useRef(null);e.useLayoutEffect(()=>{if(v!==!1||E!==!0){O.current=null;return}let t=ae.current>ee.current,l=t?"open-rail":"close-panel",x=O.current;x&&x.railSeq===ee.current&&x.panelSeq===ae.current&&x.action===l||(O.current={railSeq:ee.current,panelSeq:ae.current,action:l},t?b?.(!0,{reason:"panel"}):g?.(!1,{reason:"left"}))},[v,E,b,g]);let ne=v,Ne=e.useMemo(()=>p==="full"?{height:"100vh"}:p==="auto"?{height:"auto"}:typeof p=="string"?{height:p}:typeof p=="number"?{height:`${p}px`}:{},[p]),[re,te]=e.useState(null),Pe=e.useCallback(t=>te(t),[]),ye=e.useCallback(()=>te(null),[]),Mn=e.useMemo(()=>({currentBreakpoint:f,currentBreakpointReady:T,leftResolvedPresentation:H}),[f,T,H]),mn=e.useMemo(()=>({leftMode:i.leftMode,setLeftMode:P}),[i.leftMode,P]),Pn=e.useMemo(()=>({panelMode:i.panelMode,setPanelMode:N}),[i.panelMode,N]),yn=e.useMemo(()=>({sidebarMode:i.sidebarMode,setSidebarMode:s}),[i.sidebarMode,s]),bn=e.useMemo(()=>({inspectorMode:i.inspectorMode,setInspectorMode:d}),[i.inspectorMode,d]),hn=e.useMemo(()=>({bottomMode:i.bottomMode,setBottomMode:h}),[i.bottomMode,h]),Sn=e.useMemo(()=>({hasLeft:M,setHasLeft:D,hasSidebar:r,setHasSidebar:_}),[M,D,r,_]),[ve,De]=e.useState(new Set),_e=e.useCallback(t=>{De(l=>{if(l.has(t))return l;let x=new Set(l);return x.add(t),x})},[]),Be=e.useCallback(t=>{De(l=>{if(!l.has(t))return l;let x=new Set(l);return x.delete(t),x})},[]),ge=ve.size>0,En=e.useMemo(()=>({insetPanes:ve,registerInset:_e,unregisterInset:Be,hasAnyInset:ge}),[ve,_e,Be,ge]),Cn=e.useMemo(()=>({peekTarget:re,setPeekTarget:te,peekPane:Pe,clearPeek:ye}),[re,te,Pe,ye]),xn=e.useMemo(()=>({togglePane:K,expandPane:X,collapsePane:$,setSidebarToggleComputer:G}),[K,X,$,G]),vn=e.useMemo(()=>({...le,leftControlledOpen:ne,peekTarget:re,setPeekTarget:te,peekPane:Pe,clearPeek:ye}),[le,ne,re,te,Pe,ye]),gn=e.useMemo(()=>{if(!W||k)return null;let t=m[0],l=S[0],x=!!t?.props?.inset||!!l?.props?.inset,w=t?{onOpenChange:t.props?.onOpenChange,open:t.props?.open,defaultOpen:t.props?.defaultOpen,presentation:t.props?.presentation,collapsible:t.props?.collapsible,onExpand:t.props?.onExpand,onCollapse:t.props?.onCollapse,inset:x}:{defaultOpen:L.current?!0:void 0,inset:x};return e.createElement(Ce,{...w},m,S)},[W,k,m,S]);return e.createElement("div",{...y,ref:u,className:se("rt-ShellRoot",n),style:{...Ne,...y.style}},e.createElement(je,{value:vn},e.createElement(Qe.Provider,{value:Mn},e.createElement(Ue.Provider,{value:mn},e.createElement($e.Provider,{value:Pn},e.createElement(Ge.Provider,{value:yn},e.createElement(Ke.Provider,{value:bn},e.createElement(Ye.Provider,{value:hn},e.createElement(on.Provider,{value:Sn},e.createElement(Ze.Provider,{value:Cn},e.createElement(nn.Provider,{value:xn},e.createElement(an.Provider,{value:En},me,e.createElement("div",{className:"rt-ShellBody","data-peek-target":re??void 0,"data-has-inset":ge||void 0,style:re==="rail"||re==="panel"?{"--peek-rail-width":`${U.current}px`}:void 0},gn??A,I,C),oe))))))))))))});fn.displayName="Shell.Root";var ze=e.forwardRef(({className:n,height:a=64,style:p,...y},u)=>e.createElement("header",{...y,ref:u,className:se("rt-ShellHeader",n),style:{...p,"--shell-header-height":`${a}px`}}));ze.displayName="Shell.Header";var kn=["open","defaultOpen","onOpenChange","mode","defaultMode","onModeChange"],Ce=e.forwardRef((n,a)=>{let{className:p,presentation:y={initial:"fixed",sm:"fixed"},collapsible:u=!0,onExpand:f,onCollapse:T,children:L,style:i,inset:R,...P}=n,{registerInset:N,unregisterInset:s}=Te();e.useEffect(()=>{if(R)return N("left"),()=>s("left")},[R,N,s]);let d=P.open,h=P.defaultOpen,M=P.onOpenChange,D=sn(P,kn),r=Re(),{setHasLeft:_}=r,V=Le(y),G=V==="overlay",H=V==="stacked",Y=e.useRef(null);e.useEffect(()=>{r.onLeftPres?.(V)},[r,V]);let J=e.useCallback(m=>{Y.current=m,typeof a=="function"?a(m):a&&(a.current=m)},[a]);e.useEffect(()=>(_(!0),()=>_(!1)),[_]);let U=e.useRef(null),q=e.useRef(void 0),Q=e.useMemo(()=>{if(!(typeof d>"u"))return d?"expanded":"collapsed"},[d]),Z=e.useMemo(()=>he(h),[h]),W=e.useRef(M),k=e.useRef(d);e.useLayoutEffect(()=>{W.current=M,k.current=d});let{resolvedControlled:B}=ke({controlledValue:Q,defaultValue:Z,currentValue:r.leftMode,setValue:r.setLeftMode,breakpointReady:r.currentBreakpointReady,onInit:m=>W.current?.(m==="expanded",{reason:"init"})}),c=e.useRef(null);e.useEffect(()=>{let m=U.current,S=c.current,I=q.current!==B;if(m!==null&&m!==r.leftMode){let C=typeof k.current<"u",oe=B===void 0?void 0:B==="expanded",z=r.leftMode==="expanded";if(!C||!I&&z!==oe){let v="toggle";S!==null&&S!==r.panelMode&&m==="collapsed"&&r.leftMode==="expanded"&&r.panelMode==="expanded"&&(v="panel"),W.current?.(z,{reason:v})}}U.current=r.leftMode,c.current=r.panelMode,q.current=B},[r.leftMode,r.panelMode,B]);let K=e.useRef(f),X=e.useRef(T);e.useLayoutEffect(()=>{K.current=f,X.current=T});let $=e.useRef(null),le=e.useRef(!1);e.useEffect(()=>{let m=r.leftMode;if(!r.currentBreakpointReady){$.current=m;return}if(!le.current){le.current=!0,$.current=m;return}let S=$.current;S!==null&&S!==m&&(m==="expanded"?K.current?.():m==="collapsed"&&X.current?.(),$.current=m)},[r.leftMode,r.currentBreakpointReady]);let me=r.leftMode==="expanded";if(G){let m=r.leftMode==="expanded",S=e.Children.toArray(L),A=S.find(E=>j(E,de)),I=S.find(E=>j(E,ie)),C=typeof A?.props?.expandedSize=="number"?A.props.expandedSize:64,oe=typeof I?.props?.expandedSize=="number"?I.props.expandedSize:288,z=!!A,v=!!I,F=(z?C:0)+(r.panelMode==="expanded"&&v?oe:0);return e.createElement(Ve,{open:m,onOpenChange:E=>r.setLeftMode(E?"expanded":"collapsed")},e.createElement(He,{side:"start",style:{padding:0},"aria-label":"Navigation","aria-describedby":void 0,width:{initial:`${F}px`}},e.createElement(Ae,null,e.createElement(Fe,null,"Navigation")),e.createElement("div",{className:"rt-ShellLeft"},L)))}if(H){let m=r.leftMode==="expanded",S=e.Children.toArray(L),A=S.find(E=>j(E,de)),I=S.find(E=>j(E,ie)),C=typeof A?.props?.expandedSize=="number"?A.props.expandedSize:64,oe=typeof I?.props?.expandedSize=="number"?I.props.expandedSize:288,z=!!A,F=!!I&&(r.panelMode==="expanded"||r.peekTarget==="panel");return e.createElement("div",{...D,ref:J,className:se("rt-ShellLeft",p),"data-mode":r.leftMode,"data-peek":r.peekTarget==="left"||r.peekTarget==="rail"||r.peekTarget==="panel"||void 0,"data-presentation":V,"data-inset":R||void 0,style:{...i},"data-open":m||void 0},L)}return e.createElement("div",{...D,ref:J,className:se("rt-ShellLeft",p),"data-mode":r.leftMode,"data-peek":r.peekTarget==="left"||r.peekTarget==="rail"||r.peekTarget==="panel"||void 0,"data-presentation":V,"data-inset":R||void 0,style:{...i}},L)});Ce.displayName="Shell.Left";ce(Ce,"Shell.Left");var de=e.forwardRef((n,a)=>{let{className:p,presentation:y,expandedSize:u=64,collapsible:f,onExpand:T,onCollapse:L,children:i,style:R,open:P,defaultOpen:N,onOpenChange:s,inset:d,...h}=n,M=Re(),D=e.useRef(null);e.useEffect(()=>{let _=typeof P<"u";if(D.current===null){D.current=_;return}D.current!==_&&(console.warn("Shell.Rail: Switching between controlled and uncontrolled `open` is not supported."),D.current=_)},[P]),e.useEffect(()=>{M.onRailDefaults?.(u)},[M,u]);let r=M.leftMode==="expanded";return e.createElement("div",{...h,ref:a,className:se("rt-ShellRail",p),"data-mode":M.leftMode,"data-peek":M.currentBreakpointReady&&M.leftResolvedPresentation!=="overlay"&&M.peekTarget==="rail"||void 0,style:{...R,"--rail-size":`${u}px`}},e.createElement("div",{className:"rt-ShellRailContent","data-visible":M.currentBreakpointReady&&(r||M.leftResolvedPresentation!=="overlay"&&M.peekTarget==="rail")||void 0},i))});de.displayName="Shell.Rail";ce(de,"Shell.Rail");var zn=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],ie=ce(e.forwardRef((n,a)=>{let{className:p,defaultOpen:y,open:u,onOpenChange:f,size:T,defaultSize:L,expandedSize:i=288,minSize:R,maxSize:P,resizable:N,collapsible:s=!0,onExpand:d,onCollapse:h,onResize:M,onResizeStart:D,onResizeEnd:r,snapPoints:_,snapTolerance:V,collapseThreshold:G,paneId:H,persistence:Y,children:J,style:U,onSizeChange:q,sizeUpdate:Q,sizeUpdateMs:Z=50}=n,W=dn(n,zn),k=e.useRef(null);e.useLayoutEffect(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null)},[q,Q,Z]);let B=e.useMemo(()=>{if(!q)return()=>{};if(Q==="debounce")return(b,g)=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{q?.(b,g),k.current=null},Z)};if(Q==="throttle"){let o=0;return(b,g)=>{let O=Date.now();O-o>=Z&&(o=O,q?.(b,g))}}return(o,b)=>q?.(o,b)},[q,Q,Z]),c=Re(),K=e.useRef(null),X=e.useRef(null),$=e.useRef(void 0),le=e.useMemo(()=>he(u),[u]),me=e.useMemo(()=>he(y),[y]),m=typeof u=="object"&&u!==null,S=e.useRef(f);e.useLayoutEffect(()=>{S.current=f});let{resolvedControlled:A}=ke({controlledValue:le,defaultValue:me,currentValue:c.panelMode,setValue:o=>{o==="expanded"&&c.leftMode!=="expanded"&&c.leftControlledOpen!==!1&&c.setLeftMode("expanded"),c.setPanelMode(o)},breakpointReady:c.currentBreakpointReady,controlledIsResponsive:m,onResponsiveChange:o=>S.current?.(o==="expanded",{reason:"responsive"}),onInit:o=>{typeof u>"u"&&S.current?.(o==="expanded",{reason:"init"})}}),I=e.useRef(null);e.useEffect(()=>{let o=typeof u<"u";if(I.current===null){I.current=o;return}I.current!==o&&(console.warn("Shell.Panel: Switching between controlled and uncontrolled `open` is not supported."),I.current=o)},[u]),e.useEffect(()=>{c.onPanelDefaults?.(i)},[c,i]);let C=e.useRef(null),oe=e.useCallback(o=>{C.current=o,typeof a=="function"?a(o):a&&(a.current=o)},[a]),z=e.Children.toArray(J),v=z.filter(o=>e.isValidElement(o)&&o.type===be),F=z.filter(o=>!(e.isValidElement(o)&&o.type===be)),E=c.leftResolvedPresentation==="overlay",pe=e.useCallback(o=>cn(o,"horizontal"),[]),ee=e.useMemo(()=>{if(!H||Y)return Y;let o=`kookie-ui:shell:panel:${H}`;return{load:()=>{if(!(typeof window>"u"))try{let g=window.localStorage.getItem(o);return g?Number(g):void 0}catch{return}},save:g=>{if(!(typeof window>"u"))try{window.localStorage.setItem(o,String(g))}catch{}}}},[H,Y]);e.useEffect(()=>{let o=!0;return(async()=>{if(!N||!ee?.load||E)return;let b=await ee.load();o&&typeof b=="number"&&C.current&&(C.current.style.setProperty("--panel-size",`${b}px`),M?.(b))})(),()=>{o=!1}},[N,ee,M,E]),e.useEffect(()=>{C.current&&E&&C.current.style.setProperty("--panel-size",`${i}px`)},[E,i]),e.useEffect(()=>{if(C.current&&typeof T>"u"&&typeof L<"u"){let o=pe(L);if(typeof o=="number"&&Number.isFinite(o)){let O=Math.min((typeof P=="number"?P:void 0)??o,Math.max((typeof R=="number"?R:void 0)??o,o));C.current.style.setProperty("--panel-size",`${O}px`),B(O,{reason:"init"})}}},[]),e.useEffect(()=>{if(!C.current||typeof T>"u")return;let o=pe(T);if(typeof o=="number"&&Number.isFinite(o)){let O=Math.min((typeof P=="number"?P:void 0)??o,Math.max((typeof R=="number"?R:void 0)??o,o));C.current.style.setProperty("--panel-size",`${O}px`),B(O,{reason:"controlled"})}},[T,R,P,pe,B]),e.useEffect(()=>{if(C.current&&c.leftResolvedPresentation!=="overlay"&&c.leftMode==="expanded"&&c.panelMode==="expanded"){let o=C.current.parentElement||null;try{o?.style.removeProperty("width")}catch{}}},[c.leftResolvedPresentation,c.leftMode,c.panelMode]);let ae=c.leftMode==="expanded"&&c.panelMode==="expanded";e.useEffect(()=>{let o=K.current,b=X.current,O=$.current!==A;if(o!==null&&o!==c.panelMode){let ne=c.panelMode==="expanded";if(!(typeof u<"u")||!O&&ne!==(A===void 0?void 0:A==="expanded")){let te="toggle";b!==c.leftMode&&c.leftMode==="collapsed"&&!ne&&(te="left"),S.current?.(ne,{reason:te})}}K.current=c.panelMode,X.current=c.leftMode,$.current=A},[c.panelMode,c.leftMode,u,A]);let ue=N&&c.leftResolvedPresentation!=="overlay"&&ae?e.createElement(rn.Provider,{value:{containerRef:C,cssVarName:"--panel-size",minSize:typeof R=="number"?R:100,maxSize:typeof P=="number"?P:800,defaultSize:i,orientation:"vertical",edge:"end",computeNext:(o,b,g)=>{let O=getComputedStyle(C.current).direction==="rtl",ne=o-b;return g+(O?-ne:ne)},onResize:M,onResizeStart:o=>{let g=C.current?.parentElement;try{g?.style.removeProperty("width")}catch{}D?.(o)},onResizeEnd:o=>{r?.(o),B(o,{reason:"resize"}),ee?.save?.(o)},target:"panel",collapsible:!!s,snapPoints:_,snapTolerance:V??8,collapseThreshold:G,requestCollapse:()=>c.setPanelMode("collapsed"),requestToggle:()=>c.togglePane("panel")}},v.length>0?v.map((o,b)=>e.cloneElement(o,{key:o.key??b})):e.createElement(ln,null)):null;return e.createElement("div",{...W,ref:oe,className:se("rt-ShellPanel",p),"data-mode":c.panelMode,"data-visible":c.currentBreakpointReady&&(ae||c.leftResolvedPresentation!=="overlay"&&c.peekTarget==="panel")||void 0,"data-peek":c.currentBreakpointReady&&c.leftResolvedPresentation!=="overlay"&&c.peekTarget==="panel"||void 0,style:{...U,"--panel-size":`${i}px`}},e.createElement("div",{className:"rt-ShellPanelContent","data-visible":ae||void 0},F),ue)}),"Shell.Panel");ie.displayName="Shell.Panel";ie.Handle=be;var xe=e.forwardRef(({className:n,inset:a,...p},y)=>{let{registerInset:u,unregisterInset:f}=Te();return e.useEffect(()=>{if(a)return u("content"),()=>f("content")},[a,u,f]),e.createElement("main",{...p,ref:y,className:se("rt-ShellContent",n),"data-inset":a||void 0})});xe.displayName="Shell.Content";ce(xe,"Shell.Content");var Rn=e.forwardRef(({target:n,action:a="toggle",peekOnHover:p,onClick:y,onMouseEnter:u,onMouseLeave:f,children:T,...L},i)=>{let{leftMode:R}=We(),{panelMode:P}=qe(),{sidebarMode:N}=Oe(),{inspectorMode:s}=Xe(),{bottomMode:d}=Je(),{peekTarget:h,clearPeek:M,peekPane:D}=en(),{togglePane:r,expandPane:_,collapsePane:V}=tn(),G=e.useCallback(U=>{switch(y?.(U),h===n&&M(),a){case"toggle":r(n);break;case"expand":_(n);break;case"collapse":V(n);break}},[h,M,r,_,V,n,a,y]),H=(()=>{switch(n){case"left":case"rail":return R==="collapsed";case"panel":return R==="collapsed"||P==="collapsed";case"sidebar":return N==="collapsed";case"inspector":return s==="collapsed";case"bottom":return d==="collapsed"}})(),Y=e.useCallback(U=>{u?.(U),!(!p||!H)&&D(n)},[u,p,H,D,n]),J=e.useCallback(U=>{f?.(U),p&&h===n&&M()},[f,p,h,M,n]);return e.createElement("button",{...L,ref:i,onClick:G,onMouseEnter:Y,onMouseLeave:J,"data-shell-trigger":n,"data-shell-action":a,"aria-expanded":!H},T)});Rn.displayName="Shell.Trigger";export{fn as a,ze as b,Ce as c,de as d,ie as e,xe as f,Rn as g,Nn as h};
2
- //# sourceMappingURL=chunk-2SZZ75RJ.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/shell.tsx"],
4
- "sourcesContent": ["/**\n * Shell Component - Layout Engine + Chrome\n *\n * Philosophy:\n * - Shell = layout engine + chrome\n * - Manages layout state: expanded/collapsed, fixed/overlay, sizes\n * - Does not manage content/navigation state\n * - Provides unstyled primitives (slots, triggers)\n * - Enforces composition rules (Rail \u2194 Panel dependency, Sidebar exclusivity)\n *\n * Core Slots:\n * - Header: global top bar\n * - Rail: slim nav strip\n * - Panel: sidebar next to rail\n * - Sidebar: alternative to Rail+Panel (exclusive)\n * - Content: main work area\n * - Inspector: right-side panel\n * - Bottom: bottom panel\n *\n * Composition Rules:\n * - Rail + Panel: valid together (Rail collapse \u2192 Panel collapse)\n * - Sidebar: cannot coexist with Rail or Panel\n * - Content: always required\n * - Inspector/Bottom: optional, independent\n */\n'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from './sheet.js';\nimport { VisuallyHidden } from './visually-hidden.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from './shell.hooks.js';\nimport { PaneResizeContext } from './_internal/shell-resize.js';\nimport { PaneHandle, PanelHandle } from './_internal/shell-handles.js';\nimport { omitPaneProps, extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './_internal/shell-prop-helpers.js';\nimport { Sidebar } from './_internal/shell-sidebar.js';\nimport { Bottom } from './_internal/shell-bottom.js';\nimport { Inspector } from './_internal/shell-inspector.js';\nimport { _BREAKPOINTS } from './shell.types.js';\nimport type { PresentationValue, ResponsivePresentation, PaneMode, SidebarMode, PaneSizePersistence, Breakpoint, PaneTarget, Responsive, PaneBaseProps, CSSPropertiesWithVars } from './shell.types.js';\nimport { normalizeToPx } from '../helpers/normalize-to-px.js';\nimport { useBreakpoint } from '../hooks/use-breakpoint.js';\nimport {\n ShellProvider,\n useShell,\n LeftModeContext,\n useLeftMode,\n PanelModeContext,\n usePanelMode,\n SidebarModeContext,\n useSidebarMode,\n InspectorModeContext,\n useInspectorMode,\n BottomModeContext,\n useBottomMode,\n PresentationContext,\n PeekContext,\n usePeek,\n ActionsContext,\n useShellActions,\n CompositionContext,\n InsetContext,\n useInset,\n type InsetPaneId,\n} from './shell.context.js';\n\n// Shell context is provided via ShellProvider (see shell.context.tsx)\n\n// Pane resize context moved to ./_internal/shell-resize\n\n// Local PaneHandle moved to ./_internal/shell-handles\n// Removed local PaneHandle implementation; using internal PaneHandle\n\n// Composed Handle wrappers per pane\n// Handles moved to ./_internal/shell-handles\n\n// Hook to resolve responsive presentation\n// useResponsivePresentation moved to shell.hooks.ts\n\n// Hook to resolve responsive mode defaults\n// Removed: defaultMode responsiveness\n\n// useBreakpoint hook moved to ../hooks/use-breakpoint.ts\n\n// Reducer-based pane state management to simplify cascading rules\ntype PaneState = {\n leftMode: PaneMode;\n panelMode: PaneMode;\n sidebarMode: SidebarMode;\n inspectorMode: PaneMode;\n bottomMode: PaneMode;\n};\n\ntype PaneAction =\n | { type: 'SET_LEFT_MODE'; mode: PaneMode }\n | { type: 'SET_PANEL_MODE'; mode: PaneMode }\n | { type: 'SET_SIDEBAR_MODE'; mode: SidebarMode }\n | { type: 'SET_INSPECTOR_MODE'; mode: PaneMode }\n | { type: 'SET_BOTTOM_MODE'; mode: PaneMode }\n | { type: 'TOGGLE_PANE'; target: PaneTarget }\n | { type: 'EXPAND_PANE'; target: PaneTarget }\n | { type: 'COLLAPSE_PANE'; target: PaneTarget };\n\nconst SHELL_SLOT = Symbol('rtShellSlot');\n\nfunction assignShellSlot<T extends React.ComponentType<any>>(component: T, slot: string): T {\n (component as any)[SHELL_SLOT] = slot;\n return component;\n}\n\n/**\n * Check if an element matches a component by type or displayName.\n * Uses displayName comparison to handle minification scenarios.\n */\nconst isShellComponentType = (el: React.ReactElement, comp: React.ComponentType & { displayName?: string }): boolean =>\n React.isValidElement(el) && (el.type === comp || (el as any).type?.displayName === comp.displayName);\n\n// Tag imported slot components so isType remains stable after minification\nassignShellSlot(Sidebar as any, 'Shell.Sidebar');\nassignShellSlot(Inspector as any, 'Shell.Inspector');\nassignShellSlot(Bottom as any, 'Shell.Bottom');\n\nfunction paneReducer(state: PaneState, action: PaneAction): PaneState {\n switch (action.type) {\n case 'SET_LEFT_MODE': {\n if (action.mode === 'collapsed') {\n if (state.leftMode === 'collapsed' && state.panelMode === 'collapsed') return state;\n return { ...state, leftMode: 'collapsed', panelMode: 'collapsed' };\n }\n if (state.leftMode === action.mode) return state;\n return { ...state, leftMode: action.mode };\n }\n case 'SET_PANEL_MODE': {\n if (action.mode === 'expanded' && state.leftMode !== 'expanded') {\n return { ...state, leftMode: 'expanded', panelMode: 'expanded' };\n }\n if (state.panelMode === action.mode) return state;\n return { ...state, panelMode: action.mode };\n }\n case 'SET_SIDEBAR_MODE':\n if (state.sidebarMode === action.mode) return state;\n return { ...state, sidebarMode: action.mode };\n case 'SET_INSPECTOR_MODE':\n if (state.inspectorMode === action.mode) return state;\n return { ...state, inspectorMode: action.mode };\n case 'SET_BOTTOM_MODE':\n if (state.bottomMode === action.mode) return state;\n return { ...state, bottomMode: action.mode };\n case 'TOGGLE_PANE': {\n switch (action.target) {\n case 'left':\n case 'rail':\n return { ...state, leftMode: state.leftMode === 'expanded' ? 'collapsed' : 'expanded', panelMode: state.leftMode === 'expanded' ? 'collapsed' : state.panelMode };\n case 'panel': {\n if (state.leftMode === 'collapsed') {\n return { ...state, leftMode: 'expanded', panelMode: 'expanded' };\n }\n return { ...state, panelMode: state.panelMode === 'expanded' ? 'collapsed' : 'expanded' };\n }\n case 'sidebar': {\n const next: SidebarMode = state.sidebarMode === 'collapsed' ? 'expanded' : state.sidebarMode === 'expanded' ? 'collapsed' : 'expanded';\n return { ...state, sidebarMode: next };\n }\n case 'inspector':\n return { ...state, inspectorMode: state.inspectorMode === 'expanded' ? 'collapsed' : 'expanded' };\n case 'bottom':\n return { ...state, bottomMode: state.bottomMode === 'expanded' ? 'collapsed' : 'expanded' };\n default:\n return state;\n }\n }\n case 'EXPAND_PANE': {\n switch (action.target) {\n case 'left':\n case 'rail':\n if (state.leftMode === 'expanded') return state;\n return { ...state, leftMode: 'expanded' };\n case 'panel':\n if (state.leftMode === 'expanded' && state.panelMode === 'expanded') return state;\n return { ...state, leftMode: 'expanded', panelMode: 'expanded' };\n case 'sidebar':\n if (state.sidebarMode === 'expanded') return state;\n return { ...state, sidebarMode: 'expanded' };\n case 'inspector':\n if (state.inspectorMode === 'expanded') return state;\n return { ...state, inspectorMode: 'expanded' };\n case 'bottom':\n if (state.bottomMode === 'expanded') return state;\n return { ...state, bottomMode: 'expanded' };\n default:\n return state;\n }\n }\n case 'COLLAPSE_PANE': {\n switch (action.target) {\n case 'left':\n case 'rail':\n if (state.leftMode === 'collapsed' && state.panelMode === 'collapsed') return state;\n return { ...state, leftMode: 'collapsed', panelMode: 'collapsed' };\n case 'panel':\n if (state.panelMode === 'collapsed') return state;\n return { ...state, panelMode: 'collapsed' };\n case 'sidebar':\n if (state.sidebarMode === 'collapsed') return state;\n return { ...state, sidebarMode: 'collapsed' };\n case 'inspector':\n if (state.inspectorMode === 'collapsed') return state;\n return { ...state, inspectorMode: 'collapsed' };\n case 'bottom':\n if (state.bottomMode === 'collapsed') return state;\n return { ...state, bottomMode: 'collapsed' };\n default:\n return state;\n }\n }\n }\n return state;\n}\n\n// Root Component\ninterface ShellRootProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n height?: 'full' | 'auto' | string | number;\n}\n\n/**\n * Read the pane modes a set of Shell children asks for.\n *\n * Runs once at mount, for the reducer's initial state, and again whenever a\n * pane family enters after mount. Pure - it only reads the children's props.\n */\n/**\n * Pick the entry of a responsive map that applies at `breakpoint`, falling\n * back down the scale the way useResponsiveValue does. With no breakpoint it\n * takes `initial`, which is what the mount path has always done.\n */\nfunction pickResponsive<T>(map: Partial<Record<Breakpoint, T>>, breakpoint?: Breakpoint): T | undefined {\n if (breakpoint === undefined) return (map.initial ?? Object.values(map)[0]) as T | undefined;\n if (map[breakpoint] !== undefined) return map[breakpoint];\n\n const bpKeys = Object.keys(_BREAKPOINTS) as Array<keyof typeof _BREAKPOINTS>;\n const order: Breakpoint[] = ([...bpKeys].reverse() as Breakpoint[]).concat('initial' as Breakpoint);\n for (let i = order.indexOf(breakpoint) + 1; i < order.length; i++) {\n if (map[order[i]] !== undefined) return map[order[i]];\n }\n return undefined;\n}\n\nfunction readPaneStateFromChildren(initialChildren: React.ReactNode, breakpoint?: Breakpoint): PaneState & { hasPanelDefaultOpen: boolean } {\n const childArray = React.Children.toArray(initialChildren) as React.ReactElement[];\n\n // Compute initial defaults from immediate children (one-time, uncontrolled defaults)\n const hasPanelDefaultOpen = childArray.some(\n (el) => React.isValidElement(el) && (el as any).type?.displayName === 'Shell.Panel' && Boolean((el as any).props?.defaultOpen),\n );\n\n // Rail defaults to open (true) unless explicitly set to false\n // Supports responsive objects: { initial: false, md: true }\n const railEl = childArray.find((el) => React.isValidElement(el) && (el as any).type?.displayName === 'Shell.Rail');\n const railDefaultOpen = railEl ? (railEl as any).props?.defaultOpen : undefined;\n const hasRailDefaultOpen = (() => {\n if (!railEl) return false;\n if (railDefaultOpen === undefined) return true; // Default to open\n if (typeof railDefaultOpen === 'boolean') return railDefaultOpen;\n // Responsive object - use 'initial' value, or first defined value, or default true\n if (typeof railDefaultOpen === 'object') {\n return railDefaultOpen.initial ?? Object.values(railDefaultOpen)[0] ?? true;\n }\n return true;\n })();\n\n const hasInspectorDefaultOpen = childArray.some(\n (el) => React.isValidElement(el) && (el as any).type?.displayName === 'Shell.Inspector' && Boolean((el as any).props?.defaultOpen),\n );\n const hasInspectorOpenControlled = childArray.some(\n (el) =>\n React.isValidElement(el) &&\n (el as any).type?.displayName === 'Shell.Inspector' &&\n typeof (el as any).props?.open !== 'undefined' &&\n Boolean((el as any).props?.open),\n );\n\n // Detect Panel controlled open state for initial reducer state\n const hasPanelOpenControlled = childArray.some((el) => {\n if (!React.isValidElement(el) || (el as any).type?.displayName !== 'Shell.Panel') return false;\n const openProp = (el as any).props?.open;\n if (typeof openProp === 'undefined') return false;\n if (typeof openProp === 'boolean') return openProp;\n // Responsive object - check 'initial' or first truthy value\n if (typeof openProp === 'object' && openProp !== null) {\n return openProp.initial ?? Object.values(openProp)[0] ?? false;\n }\n return false;\n });\n\n // Detect Sidebar initial state from props\n const getSidebarInitialState = (): SidebarMode => {\n const sidebarEl = childArray.find((el) => React.isValidElement(el) && (el as any).type?.displayName === 'Shell.Sidebar');\n if (!sidebarEl) return 'expanded';\n const sidebarProps = (sidebarEl as any).props;\n // Check controlled state first\n if (typeof sidebarProps?.state !== 'undefined') {\n if (typeof sidebarProps.state === 'string') return sidebarProps.state as SidebarMode;\n // Responsive object - use 'initial' breakpoint or first defined value\n if (typeof sidebarProps.state === 'object') {\n return (pickResponsive<SidebarMode>(sidebarProps.state, breakpoint) ?? 'expanded') as SidebarMode;\n }\n }\n // Check defaultState\n if (typeof sidebarProps?.defaultState !== 'undefined') {\n if (typeof sidebarProps.defaultState === 'string') return sidebarProps.defaultState as SidebarMode;\n if (typeof sidebarProps.defaultState === 'object') {\n return (pickResponsive<SidebarMode>(sidebarProps.defaultState, breakpoint) ?? 'expanded') as SidebarMode;\n }\n }\n return 'expanded';\n };\n\n // Detect Bottom initial state from props\n const getBottomInitialState = (): PaneMode => {\n const bottomEl = childArray.find((el) => React.isValidElement(el) && (el as any).type?.displayName === 'Shell.Bottom');\n if (!bottomEl) return 'collapsed';\n const bottomProps = (bottomEl as any).props;\n // Check controlled open first\n if (typeof bottomProps?.open !== 'undefined') {\n if (typeof bottomProps.open === 'boolean') return bottomProps.open ? 'expanded' : 'collapsed';\n // Responsive object - use 'initial' breakpoint or first defined value\n if (typeof bottomProps.open === 'object') {\n const val = bottomProps.open.initial ?? Object.values(bottomProps.open)[0];\n return val ? 'expanded' : 'collapsed';\n }\n }\n // Check defaultOpen\n if (typeof bottomProps?.defaultOpen !== 'undefined') {\n return bottomProps.defaultOpen ? 'expanded' : 'collapsed';\n }\n return 'collapsed';\n };\n\n return {\n hasPanelDefaultOpen,\n leftMode: hasPanelDefaultOpen || hasPanelOpenControlled || hasRailDefaultOpen ? 'expanded' : ('collapsed' as PaneMode),\n panelMode: hasPanelDefaultOpen || hasPanelOpenControlled ? 'expanded' : ('collapsed' as PaneMode),\n sidebarMode: getSidebarInitialState(),\n inspectorMode: hasInspectorDefaultOpen || hasInspectorOpenControlled ? 'expanded' : ('collapsed' as PaneMode),\n bottomMode: getBottomInitialState(),\n };\n}\n\nconst Root = React.forwardRef<HTMLDivElement, ShellRootProps>(({ className, children, height = 'full', ...props }, ref) => {\n const { breakpoint: currentBreakpoint, ready: currentBreakpointReady } = useBreakpoint();\n\n // Store hasPanelDefaultOpen for use in passthrough props (computed once during lazy init)\n const hasPanelDefaultOpenRef = React.useRef<boolean>(false);\n\n // Pane state management via reducer with lazy initialization\n // This computation only runs once on mount, not on every render\n const [paneState, dispatchPane] = React.useReducer(paneReducer, children, (initialChildren) => {\n const { hasPanelDefaultOpen, ...modes } = readPaneStateFromChildren(initialChildren);\n // Store for use in passthrough props\n hasPanelDefaultOpenRef.current = hasPanelDefaultOpen;\n return modes;\n });\n const setLeftMode = React.useCallback((mode: PaneMode) => dispatchPane({ type: 'SET_LEFT_MODE', mode }), []);\n const setPanelMode = React.useCallback((mode: PaneMode) => dispatchPane({ type: 'SET_PANEL_MODE', mode }), []);\n const setSidebarMode = React.useCallback((mode: SidebarMode) => dispatchPane({ type: 'SET_SIDEBAR_MODE', mode }), []);\n const setInspectorMode = React.useCallback((mode: PaneMode) => dispatchPane({ type: 'SET_INSPECTOR_MODE', mode }), []);\n const setBottomMode = React.useCallback((mode: PaneMode) => dispatchPane({ type: 'SET_BOTTOM_MODE', mode }), []);\n\n // Removed: defaultMode responsiveness and manual change tracking\n\n // Composition detection\n const [hasLeft, setHasLeft] = React.useState(false);\n const [hasSidebar, setHasSidebar] = React.useState(false);\n\n // Customizable sidebar toggle sequencing\n const sidebarToggleComputerRef = React.useRef<(current: SidebarMode) => SidebarMode>((current) => (current === 'collapsed' ? 'thin' : current === 'thin' ? 'expanded' : 'collapsed'));\n const setSidebarToggleComputer = React.useCallback((fn: (current: SidebarMode) => SidebarMode) => {\n sidebarToggleComputerRef.current = fn;\n }, []);\n\n // Reducer handles left\u2192panel cascade; no effect needed\n\n // Composition validation\n React.useLayoutEffect(() => {\n if (hasSidebar && hasLeft) {\n console.warn('Shell: Sidebar cannot coexist with Rail or Panel. Use either Rail+Panel OR Sidebar.');\n }\n }, [hasSidebar, hasLeft]);\n\n // Left presentation + defaults from children\n const [devLeftPres, setDevLeftPres] = React.useState<PresentationValue | undefined>(undefined);\n const onLeftPres = React.useCallback((p: PresentationValue) => setDevLeftPres(p), []);\n const railDefaultSizeRef = React.useRef<number>(64);\n const panelDefaultSizeRef = React.useRef<number>(288);\n const onRailDefaults = React.useCallback((size: number) => {\n railDefaultSizeRef.current = size;\n }, []);\n const onPanelDefaults = React.useCallback((size: number) => {\n panelDefaultSizeRef.current = size;\n }, []);\n\n // Determine children presence for left composition\n const hasLeftChildren = React.useMemo(() => {\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n return childArray.some((el) => isShellComponentType(el, Rail) || isShellComponentType(el, Panel));\n }, [children]);\n\n const hasSidebarChildren = React.useMemo(() => {\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n return childArray.some((el) => isShellComponentType(el, Sidebar));\n }, [children]);\n\n // Re-read the defaults when a pane family enters after mount.\n //\n // The initial modes are computed once, from the children present at mount.\n // That is right until an app swaps families at runtime - a Sidebar giving\n // way to Rail+Panel on one route, and back on the next. The entering pane\n // then renders against the mode left behind by the family that just went:\n // a Rail mounting 'collapsed', at width 0, with its content faded out, put\n // right one layout effect later. The reader sees a flicker in place where\n // the pane should have been there already.\n //\n // Adjusting state during render keeps this out of the paint: React re-runs\n // Root before the children render, so the entering pane never sees the\n // mode of the family it replaced. The ref guard is what makes the update\n // terminate - it fires only on the edge, never on a steady render.\n const enteredFamilyRef = React.useRef({ left: hasLeftChildren, sidebar: hasSidebarChildren });\n if (enteredFamilyRef.current.left !== hasLeftChildren || enteredFamilyRef.current.sidebar !== hasSidebarChildren) {\n const leftEntered = hasLeftChildren && !enteredFamilyRef.current.left;\n const sidebarEntered = hasSidebarChildren && !enteredFamilyRef.current.sidebar;\n enteredFamilyRef.current = { left: hasLeftChildren, sidebar: hasSidebarChildren };\n\n if (leftEntered || sidebarEntered) {\n // The live breakpoint, not the mount default: a responsive\n // defaultState like { initial: 'collapsed', md: 'expanded' } must be\n // read for the width the reader is on. Taking `initial` would send a\n // desktop sidebar in collapsed and let its own start-up effect open it\n // again after the paint, which is the blink this whole block exists to\n // remove.\n const { hasPanelDefaultOpen, ...modes } = readPaneStateFromChildren(children, currentBreakpoint as Breakpoint);\n if (leftEntered) {\n hasPanelDefaultOpenRef.current = hasPanelDefaultOpen;\n // Only when the mode actually differs, so a family that enters\n // already in the right mode dispatches nothing.\n if (modes.leftMode !== paneState.leftMode) dispatchPane({ type: 'SET_LEFT_MODE', mode: modes.leftMode });\n if (modes.panelMode !== paneState.panelMode) dispatchPane({ type: 'SET_PANEL_MODE', mode: modes.panelMode });\n }\n if (sidebarEntered && modes.sidebarMode !== paneState.sidebarMode) {\n dispatchPane({ type: 'SET_SIDEBAR_MODE', mode: modes.sidebarMode });\n }\n }\n }\n\n // Keep a ref to sidebar mode so togglePane doesn't depend on it,\n // preventing ActionsContext churn on every sidebar mode change\n const sidebarModeRef = React.useRef(paneState.sidebarMode);\n sidebarModeRef.current = paneState.sidebarMode;\n\n const togglePane = React.useCallback(\n (target: PaneTarget) => {\n if (target === 'sidebar') {\n const next = sidebarToggleComputerRef.current(sidebarModeRef.current as SidebarMode);\n setSidebarMode(next);\n return;\n }\n dispatchPane({ type: 'TOGGLE_PANE', target });\n },\n [setSidebarMode],\n );\n\n const expandPane = React.useCallback(\n (target: PaneTarget) => {\n if (target === 'sidebar') return setSidebarMode('expanded');\n dispatchPane({ type: 'EXPAND_PANE', target });\n },\n [setSidebarMode],\n );\n\n const collapsePane = React.useCallback(\n (target: PaneTarget) => {\n if (target === 'sidebar') return setSidebarMode('collapsed');\n dispatchPane({ type: 'COLLAPSE_PANE', target });\n },\n [setSidebarMode],\n );\n\n const baseContextValue = React.useMemo(\n () => ({\n leftMode: paneState.leftMode,\n setLeftMode,\n panelMode: paneState.panelMode,\n setPanelMode,\n sidebarMode: paneState.sidebarMode,\n setSidebarMode,\n inspectorMode: paneState.inspectorMode,\n setInspectorMode,\n bottomMode: paneState.bottomMode,\n setBottomMode,\n hasLeft,\n setHasLeft,\n hasSidebar,\n setHasSidebar,\n currentBreakpoint,\n currentBreakpointReady,\n leftResolvedPresentation: devLeftPres,\n togglePane,\n expandPane,\n collapsePane,\n setSidebarToggleComputer,\n onLeftPres,\n onRailDefaults,\n onPanelDefaults,\n }),\n [\n paneState.leftMode,\n setLeftMode,\n paneState.panelMode,\n setPanelMode,\n paneState.sidebarMode,\n setSidebarMode,\n paneState.inspectorMode,\n setInspectorMode,\n paneState.bottomMode,\n setBottomMode,\n hasLeft,\n hasSidebar,\n currentBreakpoint,\n currentBreakpointReady,\n devLeftPres,\n togglePane,\n expandPane,\n collapsePane,\n setSidebarToggleComputer,\n onLeftPres,\n onRailDefaults,\n onPanelDefaults,\n ],\n );\n\n // Organize children by type \u2014 single pass instead of 7 filter calls\n const { headerEls, railEls, panelEls, sidebarEls, contentEls, inspectorEls, bottomEls } = React.useMemo(() => {\n const result = {\n headerEls: [] as React.ReactElement[],\n railEls: [] as React.ReactElement[],\n panelEls: [] as React.ReactElement[],\n sidebarEls: [] as React.ReactElement[],\n contentEls: [] as React.ReactElement[],\n inspectorEls: [] as React.ReactElement[],\n bottomEls: [] as React.ReactElement[],\n };\n for (const el of React.Children.toArray(children) as React.ReactElement[]) {\n if (isShellComponentType(el, Header)) result.headerEls.push(el);\n else if (isShellComponentType(el, Rail)) result.railEls.push(el);\n else if (isShellComponentType(el, Panel)) result.panelEls.push(el);\n else if (isShellComponentType(el, Sidebar)) result.sidebarEls.push(el);\n else if (isShellComponentType(el, Content)) result.contentEls.push(el);\n else if (isShellComponentType(el, Inspector)) result.inspectorEls.push(el);\n else if (isShellComponentType(el, Bottom)) result.bottomEls.push(el);\n }\n return result;\n }, [children]);\n\n // Controlled sync in Root: mirror first Rail/Panel open if provided\n const firstRailOpen = (railEls[0] as any)?.props?.open;\n const resolvedFirstRailOpen = React.useMemo(() => {\n if (typeof firstRailOpen === 'undefined') return undefined;\n if (typeof firstRailOpen === 'boolean') return firstRailOpen;\n if (typeof firstRailOpen !== 'object' || firstRailOpen === null) return Boolean(firstRailOpen);\n\n const responsive = firstRailOpen as Partial<Record<Breakpoint, boolean>>;\n if (responsive[currentBreakpoint] !== undefined) return responsive[currentBreakpoint];\n\n const fallbackOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const startIdx = fallbackOrder.indexOf(currentBreakpoint);\n for (let i = startIdx + 1; i < fallbackOrder.length; i++) {\n const bp = fallbackOrder[i];\n if (responsive[bp] !== undefined) return responsive[bp];\n }\n return undefined;\n }, [firstRailOpen, currentBreakpoint]);\n\n const firstPanelOpen = (panelEls[0] as any)?.props?.open;\n const resolvedFirstPanelOpen = React.useMemo(() => {\n if (typeof firstPanelOpen === 'undefined') return undefined;\n if (typeof firstPanelOpen === 'boolean') return firstPanelOpen;\n if (typeof firstPanelOpen !== 'object' || firstPanelOpen === null) return Boolean(firstPanelOpen);\n\n const responsive = firstPanelOpen as Partial<Record<Breakpoint, boolean>>;\n if (responsive[currentBreakpoint] !== undefined) return responsive[currentBreakpoint];\n\n const fallbackOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const startIdx = fallbackOrder.indexOf(currentBreakpoint);\n for (let i = startIdx + 1; i < fallbackOrder.length; i++) {\n const bp = fallbackOrder[i];\n if (responsive[bp] !== undefined) return responsive[bp];\n }\n return undefined;\n }, [firstPanelOpen, currentBreakpoint]);\n\n const controlSeqRef = React.useRef(0);\n const lastRailChangeRef = React.useRef(0);\n const lastPanelChangeRef = React.useRef(0);\n const lastRailOpenRef = React.useRef<boolean | undefined>(resolvedFirstRailOpen);\n const lastPanelOpenRef = React.useRef<boolean | undefined>(resolvedFirstPanelOpen);\n\n React.useLayoutEffect(() => {\n if (resolvedFirstRailOpen === undefined) {\n lastRailOpenRef.current = undefined;\n return;\n }\n if (lastRailOpenRef.current === resolvedFirstRailOpen) return;\n lastRailOpenRef.current = resolvedFirstRailOpen;\n lastRailChangeRef.current = ++controlSeqRef.current;\n }, [resolvedFirstRailOpen]);\n\n React.useLayoutEffect(() => {\n if (resolvedFirstPanelOpen === undefined) {\n lastPanelOpenRef.current = undefined;\n return;\n }\n if (lastPanelOpenRef.current === resolvedFirstPanelOpen) return;\n lastPanelOpenRef.current = resolvedFirstPanelOpen;\n lastPanelChangeRef.current = ++controlSeqRef.current;\n }, [resolvedFirstPanelOpen]);\n\n React.useLayoutEffect(() => {\n if (typeof resolvedFirstRailOpen === 'undefined') return;\n setLeftMode(resolvedFirstRailOpen ? 'expanded' : 'collapsed');\n }, [resolvedFirstRailOpen, setLeftMode]);\n\n const railOnOpenChange = (railEls[0] as any)?.props?.onOpenChange as\n | ((open: boolean, meta: { reason: 'init' | 'toggle' | 'responsive' | 'panel' }) => void)\n | undefined;\n const panelOnOpenChange = (panelEls[0] as any)?.props?.onOpenChange as\n | ((open: boolean, meta: { reason: 'toggle' | 'left' | 'init' | 'responsive' }) => void)\n | undefined;\n const lastConflictRef = React.useRef<{ railSeq: number; panelSeq: number; action: 'open-rail' | 'close-panel' } | null>(null);\n\n React.useLayoutEffect(() => {\n if (resolvedFirstRailOpen !== false || resolvedFirstPanelOpen !== true) {\n lastConflictRef.current = null;\n return;\n }\n\n const panelWins = lastPanelChangeRef.current > lastRailChangeRef.current;\n const action: 'open-rail' | 'close-panel' = panelWins ? 'open-rail' : 'close-panel';\n const lastConflict = lastConflictRef.current;\n if (lastConflict && lastConflict.railSeq === lastRailChangeRef.current && lastConflict.panelSeq === lastPanelChangeRef.current && lastConflict.action === action) {\n return;\n }\n lastConflictRef.current = { railSeq: lastRailChangeRef.current, panelSeq: lastPanelChangeRef.current, action };\n\n if (panelWins) {\n railOnOpenChange?.(true, { reason: 'panel' });\n } else {\n panelOnOpenChange?.(false, { reason: 'left' });\n }\n }, [resolvedFirstRailOpen, resolvedFirstPanelOpen, railOnOpenChange, panelOnOpenChange]);\n\n const leftControlledOpen = resolvedFirstRailOpen;\n\n const heightStyle = React.useMemo(() => {\n if (height === 'full') return { height: '100vh' };\n if (height === 'auto') return { height: 'auto' };\n if (typeof height === 'string') return { height };\n if (typeof height === 'number') return { height: `${height}px` };\n return {};\n }, [height]);\n\n // Peek state (layout-only overlay without mode changes)\n const [peekTarget, setPeekTarget] = React.useState<PaneTarget | null>(null);\n const peekPane = React.useCallback((target: PaneTarget) => setPeekTarget(target), []);\n const clearPeek = React.useCallback(() => setPeekTarget(null), []);\n\n // Memoized slice context values to avoid notifying unrelated consumers\n const presentationCtxValue = React.useMemo(() => ({ currentBreakpoint, currentBreakpointReady, leftResolvedPresentation: devLeftPres }), [currentBreakpoint, currentBreakpointReady, devLeftPres]);\n const leftModeCtxValue = React.useMemo(() => ({ leftMode: paneState.leftMode, setLeftMode }), [paneState.leftMode, setLeftMode]);\n const panelModeCtxValue = React.useMemo(() => ({ panelMode: paneState.panelMode, setPanelMode }), [paneState.panelMode, setPanelMode]);\n const sidebarModeCtxValue = React.useMemo(() => ({ sidebarMode: paneState.sidebarMode, setSidebarMode }), [paneState.sidebarMode, setSidebarMode]);\n const inspectorModeCtxValue = React.useMemo(() => ({ inspectorMode: paneState.inspectorMode, setInspectorMode }), [paneState.inspectorMode, setInspectorMode]);\n const bottomModeCtxValue = React.useMemo(() => ({ bottomMode: paneState.bottomMode, setBottomMode }), [paneState.bottomMode, setBottomMode]);\n const compositionCtxValue = React.useMemo(() => ({ hasLeft, setHasLeft, hasSidebar, setHasSidebar }), [hasLeft, setHasLeft, hasSidebar, setHasSidebar]);\n\n // Inset state management\n const [insetPanes, setInsetPanes] = React.useState<Set<InsetPaneId>>(new Set());\n const registerInset = React.useCallback((id: InsetPaneId) => {\n setInsetPanes((prev) => {\n if (prev.has(id)) return prev;\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n }, []);\n const unregisterInset = React.useCallback((id: InsetPaneId) => {\n setInsetPanes((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n const hasAnyInset = insetPanes.size > 0;\n const insetCtxValue = React.useMemo(\n () => ({ insetPanes, registerInset, unregisterInset, hasAnyInset }),\n [insetPanes, registerInset, unregisterInset, hasAnyInset],\n );\n const peekCtxValue = React.useMemo(() => ({ peekTarget, setPeekTarget, peekPane, clearPeek }), [peekTarget, setPeekTarget, peekPane, clearPeek]);\n const actionsCtxValue = React.useMemo(() => ({ togglePane, expandPane, collapsePane, setSidebarToggleComputer }), [togglePane, expandPane, collapsePane, setSidebarToggleComputer]);\n\n // Memoized full context value for ShellProvider to prevent unnecessary effect re-runs\n const shellContextValue = React.useMemo(\n () => ({\n ...baseContextValue,\n leftControlledOpen,\n peekTarget,\n setPeekTarget,\n peekPane,\n clearPeek,\n }),\n [baseContextValue, leftControlledOpen, peekTarget, setPeekTarget, peekPane, clearPeek],\n );\n\n // Memoize the Left content to avoid recreating the IIFE on every render\n const leftContent = React.useMemo(() => {\n if (!hasLeftChildren || hasSidebarChildren) return null;\n const firstRail = railEls[0] as any;\n const firstPanel = panelEls[0] as any;\n const leftInset = Boolean(firstRail?.props?.inset) || Boolean(firstPanel?.props?.inset);\n const passthroughProps = firstRail\n ? {\n // Notification passthrough used by Left; not spread to DOM in Left\n onOpenChange: firstRail.props?.onOpenChange,\n open: firstRail.props?.open,\n defaultOpen: firstRail.props?.defaultOpen,\n presentation: firstRail.props?.presentation,\n collapsible: firstRail.props?.collapsible,\n onExpand: firstRail.props?.onExpand,\n onCollapse: firstRail.props?.onCollapse,\n inset: leftInset,\n }\n : { defaultOpen: hasPanelDefaultOpenRef.current ? true : undefined, inset: leftInset };\n return (\n <Left {...(passthroughProps as any)}>\n {railEls}\n {panelEls}\n </Left>\n );\n }, [hasLeftChildren, hasSidebarChildren, railEls, panelEls]);\n\n return (\n <div {...props} ref={ref} className={classNames('rt-ShellRoot', className)} style={{ ...heightStyle, ...props.style }}>\n <ShellProvider value={shellContextValue}>\n <PresentationContext.Provider value={presentationCtxValue}>\n <LeftModeContext.Provider value={leftModeCtxValue}>\n <PanelModeContext.Provider value={panelModeCtxValue}>\n <SidebarModeContext.Provider value={sidebarModeCtxValue}>\n <InspectorModeContext.Provider value={inspectorModeCtxValue}>\n <BottomModeContext.Provider value={bottomModeCtxValue}>\n <CompositionContext.Provider value={compositionCtxValue}>\n <PeekContext.Provider value={peekCtxValue}>\n <ActionsContext.Provider value={actionsCtxValue}>\n <InsetContext.Provider value={insetCtxValue}>\n {headerEls}\n <div\n className=\"rt-ShellBody\"\n data-peek-target={peekTarget ?? undefined}\n data-has-inset={hasAnyInset || undefined}\n style={\n peekTarget === 'rail' || peekTarget === 'panel'\n ? ({\n '--peek-rail-width': `${railDefaultSizeRef.current}px`,\n } as CSSPropertiesWithVars)\n : undefined\n }\n >\n {leftContent ?? sidebarEls}\n {contentEls}\n {inspectorEls}\n </div>\n {bottomEls}\n </InsetContext.Provider>\n </ActionsContext.Provider>\n </PeekContext.Provider>\n </CompositionContext.Provider>\n </BottomModeContext.Provider>\n </InspectorModeContext.Provider>\n </SidebarModeContext.Provider>\n </PanelModeContext.Provider>\n </LeftModeContext.Provider>\n </PresentationContext.Provider>\n </ShellProvider>\n </div>\n );\n}) as PanelComponent;\nRoot.displayName = 'Shell.Root';\n\n// Header\ninterface ShellHeaderProps extends React.ComponentPropsWithoutRef<'header'> {\n height?: number;\n}\n\nconst Header = React.forwardRef<HTMLElement, ShellHeaderProps>(({ className, height = 64, style, ...props }, ref) => (\n <header\n {...props}\n ref={ref}\n className={classNames('rt-ShellHeader', className)}\n style={{\n ...style,\n '--shell-header-height': `${height}px`,\n } as CSSPropertiesWithVars}\n />\n));\nHeader.displayName = 'Shell.Header';\n\n// Pane Props Interface (shared by Panel, Sidebar, Inspector, Bottom)\ntype PaneProps = PaneBaseProps;\n\n// Left container (auto-created for Rail+Panel)\ninterface LeftProps extends React.ComponentPropsWithoutRef<'div'> {\n presentation?: ResponsivePresentation;\n // New: passthrough from Rail\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, meta: { reason: 'init' | 'toggle' | 'panel' | 'responsive' }) => void;\n collapsible?: boolean;\n onExpand?: () => void;\n onCollapse?: () => void;\n mode?: never;\n defaultMode?: never;\n onModeChange?: never;\n /** When true, adds margin and triggers gray backdrop on Shell. */\n inset?: boolean;\n}\n\n// Rail (special case)\ntype LeftOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' | 'panel' };\n\ntype RailControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: LeftOpenChangeMeta) => void; defaultOpen?: never };\ntype RailUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: LeftOpenChangeMeta) => void; open?: never };\n\ntype RailProps = React.ComponentPropsWithoutRef<'div'> & {\n presentation?: ResponsivePresentation;\n expandedSize?: number;\n collapsible?: boolean;\n onExpand?: () => void;\n onCollapse?: () => void;\n /** When true, adds margin to Rail+Panel and triggers gray backdrop on Shell. */\n inset?: boolean;\n} & (RailControlledProps | RailUncontrolledProps);\n\n// Left container - behaves like Inspector but contains Rail+Panel\nconst LEFT_DOM_OMIT_PROPS = ['open', 'defaultOpen', 'onOpenChange', 'mode', 'defaultMode', 'onModeChange'] as const;\n\nconst Left = React.forwardRef<HTMLDivElement, LeftProps>((initialProps, ref) => {\n const { className, presentation = { initial: 'fixed', sm: 'fixed' }, collapsible: _collapsible = true, onExpand, onCollapse, children, style, inset, ...restProps } = initialProps;\n const { registerInset, unregisterInset } = useInset();\n\n // Register/unregister inset\n React.useEffect(() => {\n if (inset) {\n registerInset('left');\n return () => unregisterInset('left');\n }\n }, [inset, registerInset, unregisterInset]);\n const propsOpen = restProps.open;\n const propsDefaultOpen = restProps.defaultOpen;\n const propsOnOpenChange = restProps.onOpenChange;\n const domProps = omitPaneProps(restProps, LEFT_DOM_OMIT_PROPS);\n const shell = useShell();\n const { setHasLeft } = shell;\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\n const localRef = React.useRef<HTMLDivElement | null>(null);\n // Publish resolved presentation so Root can gate peeking in overlay\n React.useEffect(() => {\n shell.onLeftPres?.(resolvedPresentation);\n }, [shell, resolvedPresentation]);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n\n // Register with shell\n React.useEffect(() => {\n setHasLeft(true);\n return () => setHasLeft(false);\n }, [setHasLeft]);\n\n const lastLeftModeRef = React.useRef<PaneMode | null>(null);\n const lastResolvedLeftControlledRef = React.useRef<PaneMode | undefined>(undefined);\n const normalizedLeftControlled = React.useMemo(() => {\n if (typeof propsOpen === 'undefined') return undefined;\n return propsOpen ? 'expanded' : 'collapsed';\n }, [propsOpen]);\n const normalizedLeftDefault = React.useMemo(() => mapResponsiveBooleanToPaneMode(propsDefaultOpen), [propsDefaultOpen]);\n\n // Stable refs for notification callbacks to avoid effect dep churn\n const propsOnOpenChangeRef = React.useRef(propsOnOpenChange);\n const propsOpenRef = React.useRef(propsOpen);\n React.useLayoutEffect(() => {\n propsOnOpenChangeRef.current = propsOnOpenChange;\n propsOpenRef.current = propsOpen;\n });\n\n const { resolvedControlled: resolvedLeftControlled } = useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedLeftControlled,\n defaultValue: normalizedLeftDefault,\n currentValue: shell.leftMode,\n setValue: shell.setLeftMode,\n breakpointReady: shell.currentBreakpointReady,\n onInit: (initial) => propsOnOpenChangeRef.current?.(initial === 'expanded', { reason: 'init' }),\n });\n\n // Emit mode changes for user/internal transitions.\n // In controlled mode, skip when the mode matches the controlled prop (prop-driven sync).\n const prevPanelModeRef = React.useRef<PaneMode | null>(null);\n React.useEffect(() => {\n const prevLeftMode = lastLeftModeRef.current;\n const prevPanelMode = prevPanelModeRef.current;\n\n const prevResolvedControlled = lastResolvedLeftControlledRef.current;\n const controlledChanged = prevResolvedControlled !== resolvedLeftControlled;\n\n if (prevLeftMode !== null && prevLeftMode !== shell.leftMode) {\n const isControlled = typeof propsOpenRef.current !== 'undefined';\n const controlledTarget = resolvedLeftControlled === undefined ? undefined : resolvedLeftControlled === 'expanded';\n const nextOpen = shell.leftMode === 'expanded';\n\n // In controlled mode, only notify when internal mode diverges from the\n // controlled prop \u2014 that means a trigger/cascade changed it, not a prop sync.\n if (!isControlled || (!controlledChanged && nextOpen !== controlledTarget)) {\n let reason: LeftOpenChangeMeta['reason'] = 'toggle';\n const panelDrivenOpen = prevPanelMode !== null && prevPanelMode !== shell.panelMode && prevLeftMode === 'collapsed' && shell.leftMode === 'expanded' && shell.panelMode === 'expanded';\n if (panelDrivenOpen) {\n reason = 'panel';\n }\n propsOnOpenChangeRef.current?.(nextOpen, { reason });\n }\n }\n\n lastLeftModeRef.current = shell.leftMode;\n prevPanelModeRef.current = shell.panelMode;\n lastResolvedLeftControlledRef.current = resolvedLeftControlled;\n }, [shell.leftMode, shell.panelMode, resolvedLeftControlled]);\n\n // Emit expand/collapse events.\n // Use callback refs to avoid re-running effect when inline callbacks change,\n // matching the pattern used by Inspector and Bottom.\n const onExpandRef = React.useRef(onExpand);\n const onCollapseRef = React.useRef(onCollapse);\n React.useLayoutEffect(() => {\n onExpandRef.current = onExpand;\n onCollapseRef.current = onCollapse;\n });\n\n const prevLeftModeForCallbackRef = React.useRef<PaneMode | null>(null);\n const hasLeftInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.leftMode;\n\n if (!shell.currentBreakpointReady) {\n prevLeftModeForCallbackRef.current = currentMode;\n return;\n }\n\n if (!hasLeftInitializedRef.current) {\n hasLeftInitializedRef.current = true;\n prevLeftModeForCallbackRef.current = currentMode;\n return;\n }\n\n const prevMode = prevLeftModeForCallbackRef.current;\n\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpandRef.current?.();\n } else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevLeftModeForCallbackRef.current = currentMode;\n }\n }, [shell.leftMode, shell.currentBreakpointReady]);\n\n const _isExpanded = shell.leftMode === 'expanded';\n\n // Left is not resizable; width derives from Rail/Panel.\n\n if (isOverlay) {\n const open = shell.leftMode === 'expanded';\n // Compute overlay width from child Rail/Panel expanded sizes\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const railEl = childArray.find((el) => isShellComponentType(el, Rail));\n const panelEl = childArray.find((el) => isShellComponentType(el, Panel));\n const railSize = typeof (railEl as any)?.props?.expandedSize === 'number' ? (railEl as any).props.expandedSize : 64;\n const panelSize = typeof (panelEl as any)?.props?.expandedSize === 'number' ? (panelEl as any).props.expandedSize : 288;\n const hasRail = Boolean(railEl);\n const hasPanel = Boolean(panelEl);\n const overlayPx = (hasRail ? railSize : 0) + (shell.panelMode === 'expanded' && hasPanel ? panelSize : 0);\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setLeftMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content\n side=\"start\"\n style={{ padding: 0 }}\n aria-label=\"Navigation\"\n aria-describedby={undefined}\n width={{\n initial: `${overlayPx}px`,\n }}\n >\n <VisuallyHidden>\n <Sheet.Title>Navigation</Sheet.Title>\n </VisuallyHidden>\n <div className=\"rt-ShellLeft\">{children}</div>\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n if (isStacked) {\n const open = shell.leftMode === 'expanded';\n // Compute floating width from child Rail/Panel expanded sizes (like overlay)\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const railEl = childArray.find((el) => isShellComponentType(el, Rail));\n const panelEl = childArray.find((el) => isShellComponentType(el, Panel));\n const _railSize = typeof (railEl as any)?.props?.expandedSize === 'number' ? (railEl as any).props.expandedSize : 64;\n const _panelSize = typeof (panelEl as any)?.props?.expandedSize === 'number' ? (panelEl as any).props.expandedSize : 288;\n const _hasRail = Boolean(railEl);\n const _hasPanel = Boolean(panelEl);\n const _includePanel = _hasPanel && (shell.panelMode === 'expanded' || shell.peekTarget === 'panel');\n\n // Strip control props from DOM spread\n return (\n <div\n {...domProps}\n ref={setRef}\n className={classNames('rt-ShellLeft', className)}\n data-mode={shell.leftMode}\n data-peek={shell.peekTarget === 'left' || shell.peekTarget === 'rail' || shell.peekTarget === 'panel' || undefined}\n data-presentation={resolvedPresentation}\n data-inset={inset || undefined}\n style={{\n ...style,\n }}\n data-open={open || undefined}\n >\n {children}\n </div>\n );\n }\n\n // Strip control/legacy props from DOM spread\n return (\n <div\n {...domProps}\n ref={setRef}\n className={classNames('rt-ShellLeft', className)}\n data-mode={shell.leftMode}\n data-peek={shell.peekTarget === 'left' || shell.peekTarget === 'rail' || shell.peekTarget === 'panel' || undefined}\n data-presentation={resolvedPresentation}\n data-inset={inset || undefined}\n style={{\n ...style,\n }}\n >\n {children}\n </div>\n );\n});\nLeft.displayName = 'Shell.Left';\nassignShellSlot(Left as any, 'Shell.Left');\n\nconst Rail = React.forwardRef<HTMLDivElement, RailProps>((initialProps, ref) => {\n const { className, presentation, expandedSize = 64, collapsible, onExpand, onCollapse, children, style, open, defaultOpen, onOpenChange, inset: _inset, ...domProps } = initialProps;\n const shell = useShell();\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Rail: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n }\n\n // Warn on controlled/uncontrolled mode switch\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Rail: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n // Register expanded size with Left container\n React.useEffect(() => {\n shell.onRailDefaults?.(expandedSize);\n }, [shell, expandedSize]);\n\n const isExpanded = shell.leftMode === 'expanded';\n\n // Strip unknown open/defaultOpen props from DOM by not spreading them\n return (\n <div\n {...domProps}\n ref={ref}\n className={classNames('rt-ShellRail', className)}\n data-mode={shell.leftMode}\n data-peek={(shell.currentBreakpointReady && shell.leftResolvedPresentation !== 'overlay' && shell.peekTarget === 'rail') || undefined}\n style={{\n ...style,\n '--rail-size': `${expandedSize}px`,\n } as CSSPropertiesWithVars}\n >\n <div className=\"rt-ShellRailContent\" data-visible={(shell.currentBreakpointReady && (isExpanded || (shell.leftResolvedPresentation !== 'overlay' && shell.peekTarget === 'rail'))) || undefined}>\n {children}\n </div>\n </div>\n );\n});\nRail.displayName = 'Shell.Rail';\nassignShellSlot(Rail as any, 'Shell.Rail');\n\n// Panel\ntype HandleComponent = React.ForwardRefExoticComponent<React.ComponentPropsWithoutRef<'div'> & React.RefAttributes<HTMLDivElement>>;\n\ntype PanelOpenChangeMeta = { reason: 'toggle' | 'left' | 'init' | 'responsive' };\ntype PanelControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: PanelOpenChangeMeta) => void; defaultOpen?: never };\ntype PanelUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: PanelOpenChangeMeta) => void; open?: never };\n\ntype PanelSizeControlledProps = { size: number | string; defaultSize?: never };\ntype PanelSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\n\ntype PanelSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype PanelPublicProps = Omit<PaneProps, 'presentation' | 'defaultMode'> &\n (PanelControlledProps | PanelUncontrolledProps) &\n (PanelSizeControlledProps | PanelSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: PanelSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n /** When true, adds margin to Rail+Panel and triggers gray backdrop on Shell. */\n inset?: boolean;\n };\ntype PanelComponent = React.ForwardRefExoticComponent<PanelPublicProps & React.RefAttributes<HTMLDivElement>> & {\n Handle: HandleComponent;\n};\n\ntype _SidebarComponent = React.ForwardRefExoticComponent<\n (Omit<PaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {\n state?: Responsive<SidebarMode>;\n defaultState?: SidebarMode;\n onStateChange?: (mode: SidebarMode) => void;\n thinSize?: number;\n toggleModes?: 'both' | 'single';\n }) &\n React.RefAttributes<HTMLDivElement>\n> & { Handle: HandleComponent };\n\ntype _InspectorComponent = React.ForwardRefExoticComponent<PaneProps & React.RefAttributes<HTMLDivElement>> & { Handle: HandleComponent };\n\ntype _BottomComponent = React.ForwardRefExoticComponent<PaneProps & React.RefAttributes<HTMLDivElement>> & { Handle: HandleComponent };\n\nconst PANEL_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n] as const satisfies readonly (keyof PanelPublicProps)[];\n\nconst Panel = assignShellSlot(\n React.forwardRef<HTMLDivElement, PanelPublicProps>((initialProps, ref) => {\n const {\n className,\n defaultOpen,\n open,\n onOpenChange,\n size,\n defaultSize,\n expandedSize = 288,\n minSize,\n maxSize,\n resizable,\n collapsible = true,\n onExpand: _onExpand,\n onCollapse: _onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n } = initialProps;\n const panelDomProps = extractPaneDomProps(initialProps, PANEL_DOM_PROP_KEYS);\n // Ref for debounce cleanup\n const debounceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n // Cleanup debounce timeout on unmount or when dependencies change\n React.useLayoutEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = null;\n }\n };\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n // Throttled/debounced emitter for onSizeChange\n const emitSizeChange = React.useMemo(() => {\n if (!onSizeChange) return () => {};\n if (sizeUpdate === 'debounce') {\n const fn = (s: number, meta: PanelSizeChangeMeta) => {\n if (debounceTimeoutRef.current) clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = setTimeout(() => {\n onSizeChange?.(s, meta);\n debounceTimeoutRef.current = null;\n }, sizeUpdateMs);\n };\n return fn;\n }\n if (sizeUpdate === 'throttle') {\n let last = 0;\n return (s: number, meta: PanelSizeChangeMeta) => {\n const now = Date.now();\n if (now - last >= sizeUpdateMs) {\n last = now;\n onSizeChange?.(s, meta);\n }\n };\n }\n return (s: number, meta: PanelSizeChangeMeta) => onSizeChange?.(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n const shell = useShell();\n const prevPanelModeRef = React.useRef<PaneMode | null>(null);\n const prevLeftModeRef = React.useRef<PaneMode | null>(null);\n const lastResolvedPanelControlledRef = React.useRef<PaneMode | undefined>(undefined);\n // Dev-only runtime guard\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Panel: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n if (typeof size !== 'undefined' && typeof defaultSize !== 'undefined') {\n console.error('Shell.Panel: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n // Normalize responsive open/defaultOpen to PaneMode\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n\n // Stable ref for onOpenChange to avoid effect dep churn\n const onOpenChangeRef = React.useRef(onOpenChange);\n React.useLayoutEffect(() => {\n onOpenChangeRef.current = onOpenChange;\n });\n\n // Use responsive initial state hook for proper breakpoint handling\n const { resolvedControlled: resolvedPanelControlled } = useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: shell.panelMode,\n setValue: (mode) => {\n // Ensure Left is expanded when Panel is expanded unless Rail is controlled closed\n if (mode === 'expanded' && shell.leftMode !== 'expanded' && shell.leftControlledOpen !== false) {\n shell.setLeftMode('expanded');\n }\n shell.setPanelMode(mode);\n },\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChangeRef.current?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof open === 'undefined') {\n onOpenChangeRef.current?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\n\n // Dev-only warning if switching controlled/uncontrolled between renders\n const wasControlledRef = React.useRef<boolean | null>(null);\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Panel: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n React.useEffect(() => {\n shell.onPanelDefaults?.(expandedSize);\n }, [shell, expandedSize]);\n const localRef = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === PanelHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === PanelHandle));\n\n const isOverlay = shell.leftResolvedPresentation === 'overlay';\n\n // Normalize CSS lengths to px helper\n const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'horizontal'), []);\n\n // Derive a default persistence adapter from paneId if none provided\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:panel:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n try {\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Panel: failed to load persisted size', err);\n }\n return undefined;\n }\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, String(size));\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Panel: failed to save persisted size', err);\n }\n }\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n // Load persisted size if configured (only in fixed presentation)\n React.useEffect(() => {\n let mounted = true;\n (async () => {\n if (!resizable || !persistenceAdapter?.load || isOverlay) return;\n const loaded = await persistenceAdapter.load();\n if (mounted && typeof loaded === 'number' && localRef.current) {\n localRef.current.style.setProperty('--panel-size', `${loaded}px`);\n onResize?.(loaded);\n }\n })();\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n // In overlay, ensure panel uses the fixed expandedSize, ignoring any persisted size\n React.useEffect(() => {\n if (!localRef.current) return;\n if (isOverlay) {\n localRef.current.style.setProperty('--panel-size', `${expandedSize}px`);\n }\n }, [isOverlay, expandedSize]);\n\n // Apply defaultSize on mount when uncontrolled\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {\n const px = normalizeSizeToPx(defaultSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n // Clamp to min/max if provided\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--panel-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'init' });\n }\n }\n // Intentionally run only on mount - defaultSize is an uncontrolled initial value\n // that should not trigger re-application when props change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Controlled size sync\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof size === 'undefined') return;\n const px = normalizeSizeToPx(size);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--panel-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [size, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n // Ensure Left container width is auto whenever Panel is expanded in fixed presentation\n React.useEffect(() => {\n if (!localRef.current) return;\n if (shell.leftResolvedPresentation !== 'overlay' && shell.leftMode === 'expanded' && shell.panelMode === 'expanded') {\n const leftEl = (localRef.current.parentElement as HTMLElement) || null;\n try {\n leftEl?.style.removeProperty('width');\n } catch (e) {\n // Style manipulation can fail in edge cases (e.g., detached elements)\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[Shell.Panel] Style cleanup warning:', e);\n }\n }\n }\n }, [shell.leftResolvedPresentation, shell.leftMode, shell.panelMode]);\n\n const isExpanded = shell.leftMode === 'expanded' && shell.panelMode === 'expanded';\n\n // Notify on internal toggles and left cascade.\n // In controlled mode, skip when the mode matches the controlled prop (prop-driven sync).\n React.useEffect(() => {\n const prevPanel = prevPanelModeRef.current;\n const prevLeft = prevLeftModeRef.current;\n const prevResolvedControlled = lastResolvedPanelControlledRef.current;\n const controlledChanged = prevResolvedControlled !== resolvedPanelControlled;\n if (prevPanel !== null && prevPanel !== shell.panelMode) {\n const nextOpen = shell.panelMode === 'expanded';\n const isControlled = typeof open !== 'undefined';\n const controlledTarget = resolvedPanelControlled === undefined ? undefined : resolvedPanelControlled === 'expanded';\n\n if (!isControlled || (!controlledChanged && nextOpen !== controlledTarget)) {\n let reason: PanelOpenChangeMeta['reason'] = 'toggle';\n if (prevLeft !== shell.leftMode && shell.leftMode === 'collapsed' && !nextOpen) {\n reason = 'left';\n }\n onOpenChangeRef.current?.(nextOpen, { reason });\n }\n }\n prevPanelModeRef.current = shell.panelMode;\n prevLeftModeRef.current = shell.leftMode;\n lastResolvedPanelControlledRef.current = resolvedPanelControlled;\n }, [shell.panelMode, shell.leftMode, open, resolvedPanelControlled]);\n\n // Provide resizer handle when fixed (not overlay)\n const handleEl =\n resizable && shell.leftResolvedPresentation !== 'overlay' && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--panel-size',\n minSize: typeof minSize === 'number' ? minSize : 100,\n maxSize: typeof maxSize === 'number' ? maxSize : 800,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'end',\n computeNext: (client, startClient, startSize) => {\n const isRtl = getComputedStyle(localRef.current!).direction === 'rtl';\n const delta = client - startClient;\n return startSize + (isRtl ? -delta : delta);\n },\n onResize,\n onResizeStart: (size) => {\n // Ensure Left container is not stuck with a fixed width in stacked\n const panelEl = localRef.current as HTMLElement | null;\n const leftEl = panelEl?.parentElement as HTMLElement | null;\n try {\n leftEl?.style.removeProperty('width');\n } catch (e) {\n // Style manipulation can fail in edge cases\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[Shell.Panel] Resize start style cleanup warning:', e);\n }\n }\n onResizeStart?.(size);\n },\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'panel',\n collapsible: Boolean(collapsible),\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setPanelMode('collapsed'),\n requestToggle: () => shell.togglePane('panel'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n return (\n <div\n {...panelDomProps}\n ref={setRef}\n className={classNames('rt-ShellPanel', className)}\n data-mode={shell.panelMode}\n data-visible={(shell.currentBreakpointReady && (isExpanded || (shell.leftResolvedPresentation !== 'overlay' && shell.peekTarget === 'panel'))) || undefined}\n data-peek={(shell.currentBreakpointReady && shell.leftResolvedPresentation !== 'overlay' && shell.peekTarget === 'panel') || undefined}\n style={{\n ...style,\n '--panel-size': `${expandedSize}px`,\n } as CSSPropertiesWithVars}\n >\n <div className=\"rt-ShellPanelContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n }),\n 'Shell.Panel',\n) as PanelComponent;\nPanel.displayName = 'Shell.Panel';\nPanel.Handle = PanelHandle;\n\n// Sidebar moved to ./_internal/shell-sidebar\n\n// Content (always required)\ninterface ShellContentProps extends React.ComponentPropsWithoutRef<'main'> {\n /** When true, adds margin and triggers gray backdrop on Shell. */\n inset?: boolean;\n}\n\nconst Content = React.forwardRef<HTMLElement, ShellContentProps>(({ className, inset, ...props }, ref) => {\n const { registerInset, unregisterInset } = useInset();\n\n // Register/unregister inset\n React.useEffect(() => {\n if (inset) {\n registerInset('content');\n return () => unregisterInset('content');\n }\n }, [inset, registerInset, unregisterInset]);\n\n return <main {...props} ref={ref} className={classNames('rt-ShellContent', className)} data-inset={inset || undefined} />;\n});\nContent.displayName = 'Shell.Content';\nassignShellSlot(Content as any, 'Shell.Content');\n\n// Inspector moved to ./_internal/shell-inspector\n\n// Bottom\n// Bottom moved to ./_internal/shell-bottom\n// (Bottom implementation extracted)\n\n// Trigger\n// PaneTarget type moved to shell.types.ts\ntype TriggerAction = 'toggle' | 'expand' | 'collapse';\n\ninterface TriggerProps extends React.ComponentPropsWithoutRef<'button'> {\n target: PaneTarget;\n action?: TriggerAction;\n /**\n * Whether to show peek preview on hover when the target pane is collapsed.\n * Defaults to false.\n */\n peekOnHover?: boolean;\n}\n\nconst Trigger = React.forwardRef<HTMLButtonElement, TriggerProps>(({ target, action = 'toggle', peekOnHover, onClick, onMouseEnter, onMouseLeave, children, ...props }, ref) => {\n // Slice hooks \u2014 Trigger only re-renders when its target pane's slice changes,\n // not on every unrelated shell state update (peek, composition, presentation, etc.)\n const { leftMode } = useLeftMode();\n const { panelMode } = usePanelMode();\n const { sidebarMode } = useSidebarMode();\n const { inspectorMode } = useInspectorMode();\n const { bottomMode } = useBottomMode();\n const { peekTarget, clearPeek, peekPane } = usePeek();\n const { togglePane, expandPane, collapsePane } = useShellActions();\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n\n // Clear any active peek on this target before toggling to avoid sticky peek state\n if (peekTarget === target) {\n clearPeek();\n }\n\n switch (action) {\n case 'toggle':\n togglePane(target);\n break;\n case 'expand':\n expandPane(target);\n break;\n case 'collapse':\n collapsePane(target);\n break;\n }\n },\n [peekTarget, clearPeek, togglePane, expandPane, collapsePane, target, action, onClick],\n );\n\n const isCollapsed = (() => {\n switch (target) {\n case 'left':\n case 'rail':\n return leftMode === 'collapsed';\n case 'panel':\n return leftMode === 'collapsed' || panelMode === 'collapsed';\n case 'sidebar':\n return sidebarMode === 'collapsed';\n case 'inspector':\n return inspectorMode === 'collapsed';\n case 'bottom':\n return bottomMode === 'collapsed';\n }\n })();\n\n const handleMouseEnter = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onMouseEnter?.(event);\n if (!peekOnHover || !isCollapsed) return;\n peekPane(target);\n },\n [onMouseEnter, peekOnHover, isCollapsed, peekPane, target],\n );\n\n const handleMouseLeave = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onMouseLeave?.(event);\n if (!peekOnHover) return;\n if (peekTarget === target) {\n clearPeek();\n }\n },\n [onMouseLeave, peekOnHover, peekTarget, clearPeek, target],\n );\n\n return (\n <button\n {...props}\n ref={ref}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n data-shell-trigger={target}\n data-shell-action={action}\n aria-expanded={!isCollapsed}\n >\n {children}\n </button>\n );\n});\nTrigger.displayName = 'Shell.Trigger';\n\n// Exports\nexport {\n Root,\n Header,\n Left,\n Rail,\n Panel,\n Sidebar,\n Content,\n Inspector,\n Bottom,\n Trigger,\n useShell,\n useSidebarMode,\n useResponsivePresentation,\n type PaneMode,\n type SidebarMode,\n type ResponsivePresentation,\n type PaneTarget,\n type TriggerAction,\n};\n"],
5
- "mappings": "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",
6
- "names": ["shell_exports", "__export", "Bottom", "Content", "Header", "Inspector", "Left", "Panel", "Rail", "Root", "Sidebar", "Trigger", "useResponsivePresentation", "useShell", "useSidebarMode", "React", "classNames", "SHELL_SLOT", "assignShellSlot", "component", "slot", "isShellComponentType", "el", "comp", "Sidebar", "Inspector", "Bottom", "paneReducer", "state", "action", "next", "pickResponsive", "map", "breakpoint", "order", "_BREAKPOINTS", "i", "readPaneStateFromChildren", "initialChildren", "childArray", "hasPanelDefaultOpen", "railEl", "railDefaultOpen", "hasRailDefaultOpen", "hasInspectorDefaultOpen", "hasInspectorOpenControlled", "hasPanelOpenControlled", "openProp", "getSidebarInitialState", "sidebarEl", "sidebarProps", "getBottomInitialState", "bottomEl", "bottomProps", "Root", "className", "children", "height", "props", "ref", "currentBreakpoint", "currentBreakpointReady", "useBreakpoint", "hasPanelDefaultOpenRef", "paneState", "dispatchPane", "modes", "setLeftMode", "mode", "setPanelMode", "setSidebarMode", "setInspectorMode", "setBottomMode", "hasLeft", "setHasLeft", "hasSidebar", "setHasSidebar", "sidebarToggleComputerRef", "current", "setSidebarToggleComputer", "fn", "devLeftPres", "setDevLeftPres", "onLeftPres", "p", "railDefaultSizeRef", "panelDefaultSizeRef", "onRailDefaults", "size", "onPanelDefaults", "hasLeftChildren", "Rail", "Panel", "hasSidebarChildren", "enteredFamilyRef", "leftEntered", "sidebarEntered", "sidebarModeRef", "togglePane", "target", "expandPane", "collapsePane", "baseContextValue", "headerEls", "railEls", "panelEls", "sidebarEls", "contentEls", "inspectorEls", "bottomEls", "result", "Header", "Content", "firstRailOpen", "resolvedFirstRailOpen", "responsive", "fallbackOrder", "startIdx", "bp", "firstPanelOpen", "resolvedFirstPanelOpen", "controlSeqRef", "lastRailChangeRef", "lastPanelChangeRef", "lastRailOpenRef", "lastPanelOpenRef", "railOnOpenChange", "panelOnOpenChange", "lastConflictRef", "panelWins", "lastConflict", "leftControlledOpen", "heightStyle", "peekTarget", "setPeekTarget", "peekPane", "clearPeek", "presentationCtxValue", "leftModeCtxValue", "panelModeCtxValue", "sidebarModeCtxValue", "inspectorModeCtxValue", "bottomModeCtxValue", "compositionCtxValue", "insetPanes", "setInsetPanes", "registerInset", "id", "prev", "unregisterInset", "hasAnyInset", "insetCtxValue", "peekCtxValue", "actionsCtxValue", "shellContextValue", "leftContent", "firstRail", "firstPanel", "leftInset", "passthroughProps", "Left", "classNames", "ShellProvider", "PresentationContext", "LeftModeContext", "PanelModeContext", "SidebarModeContext", "InspectorModeContext", "BottomModeContext", "CompositionContext", "PeekContext", "ActionsContext", "InsetContext", "style", "LEFT_DOM_OMIT_PROPS", "initialProps", "presentation", "_collapsible", "onExpand", "onCollapse", "inset", "restProps", "useInset", "propsOpen", "propsDefaultOpen", "propsOnOpenChange", "domProps", "omitPaneProps", "shell", "useShell", "resolvedPresentation", "useResponsivePresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "lastLeftModeRef", "lastResolvedLeftControlledRef", "normalizedLeftControlled", "normalizedLeftDefault", "mapResponsiveBooleanToPaneMode", "propsOnOpenChangeRef", "propsOpenRef", "resolvedLeftControlled", "useResponsiveInitialState", "initial", "prevPanelModeRef", "prevLeftMode", "prevPanelMode", "controlledChanged", "isControlled", "controlledTarget", "nextOpen", "reason", "onExpandRef", "onCollapseRef", "prevLeftModeForCallbackRef", "hasLeftInitializedRef", "currentMode", "prevMode", "_isExpanded", "open", "panelEl", "railSize", "panelSize", "hasRail", "hasPanel", "overlayPx", "o", "VisuallyHidden", "Title", "_railSize", "_panelSize", "_hasRail", "_includePanel", "expandedSize", "collapsible", "defaultOpen", "onOpenChange", "_inset", "wasControlledRef", "isExpanded", "PANEL_DOM_PROP_KEYS", "defaultSize", "minSize", "maxSize", "resizable", "_onExpand", "_onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "panelDomProps", "extractPaneDomProps", "debounceTimeoutRef", "emitSizeChange", "s", "meta", "last", "now", "prevLeftModeRef", "lastResolvedPanelControlledRef", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "onOpenChangeRef", "resolvedPanelControlled", "handleChildren", "PanelHandle", "contentChildren", "normalizeSizeToPx", "value", "normalizeToPx", "persistenceAdapter", "key", "v", "mounted", "loaded", "px", "clamped", "leftEl", "prevPanel", "prevLeft", "handleEl", "PaneResizeContext", "client", "startClient", "startSize", "isRtl", "delta", "PaneHandle", "Trigger", "peekOnHover", "onClick", "onMouseEnter", "onMouseLeave", "leftMode", "useLeftMode", "panelMode", "usePanelMode", "sidebarMode", "useSidebarMode", "inspectorMode", "useInspectorMode", "bottomMode", "useBottomMode", "usePeek", "useShellActions", "handleClick", "event", "isCollapsed", "handleMouseEnter", "handleMouseLeave"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as o}from"./chunk-WYADYDPN.js";import{a as p}from"./chunk-ZE2KAVXW.js";import{a as r}from"./chunk-NZJGC6ZW.js";var m={...r,...p,...o};export{m as a};
2
- //# sourceMappingURL=chunk-4JQZUQY7.js.map
@@ -1,2 +0,0 @@
1
- import{a as R}from"./chunk-SNHEJU2S.js";import{a as p}from"./chunk-KFA53SVQ.js";import*as t from"react";function C(e){let{currentBreakpoint:o}=R();return t.useMemo(()=>{if(typeof e=="string")return e;if(e[o])return e[o];let i=[...Object.keys(p)].reverse().concat("initial"),a=i.indexOf(o);for(let f=a+1;f<i.length;f++){let u=i[f];if(e[u])return e[u]}return"fixed"},[e,o])}function m(e){let{currentBreakpoint:o}=R();return t.useMemo(()=>{if(e==null)return;if(typeof e!="object")return e;let n=e;if(n[o]!==void 0)return n[o];let a=[...Object.keys(p)].reverse().concat("initial"),f=a.indexOf(o);for(let u=f+1;u<a.length;u++){let c=a[u];if(n[c]!==void 0)return n[c]}},[e,o])}function E({controlledValue:e,defaultValue:o,currentValue:n,setValue:i,breakpointReady:a,onInit:f,onResponsiveChange:u,controlledIsResponsive:c=!1}){let s=m(e),l=m(o),T=t.useRef(void 0),r=t.useRef(null),y=t.useRef(s),k=t.useRef(n),v=t.useRef(i);t.useLayoutEffect(()=>{y.current=s,k.current=n,v.current=i}),t.useEffect(()=>{if(s===void 0)return;let S=T.current!==s;if(T.current=s,n===s){r.current&&(clearTimeout(r.current),r.current=null),c&&u?.(s);return}if(S){r.current&&(clearTimeout(r.current),r.current=null),i(s),c&&u?.(s);return}r.current||(r.current=setTimeout(()=>{r.current=null;let d=y.current,b=k.current;d!==void 0&&b!==d&&v.current(d)},0))},[s,n,i,u,c]),t.useEffect(()=>()=>{r.current&&(clearTimeout(r.current),r.current=null)},[]);let B=t.useRef(!1);return t.useEffect(()=>{B.current||a&&(typeof e<"u"||l!==void 0&&(B.current=!0,n!==l&&i(l),f?.(l)))},[a,e,l,n,i,f]),{resolvedControlled:s,resolvedDefault:l}}export{C as a,m as b,E as c};
2
- //# sourceMappingURL=chunk-5LXFJMFB.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/shell.hooks.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nimport type { Breakpoint, PresentationValue, ResponsivePresentation } from './shell.types.js';\nimport { _BREAKPOINTS } from './shell.types.js';\nimport { useShell } from './shell.context.js';\n\nfunction useResponsivePresentation(presentation: ResponsivePresentation): PresentationValue {\n const { currentBreakpoint } = useShell();\n\n return React.useMemo(() => {\n if (typeof presentation === 'string') {\n return presentation;\n }\n\n if (presentation[currentBreakpoint]) {\n return presentation[currentBreakpoint]!;\n }\n\n const bpKeys = Object.keys(_BREAKPOINTS) as Array<keyof typeof _BREAKPOINTS>;\n const order: Breakpoint[] = ([...bpKeys].reverse() as Breakpoint[]).concat('initial' as Breakpoint);\n const startIdx = order.indexOf(currentBreakpoint as Breakpoint);\n\n for (let i = startIdx + 1; i < order.length; i++) {\n const bp = order[i];\n if (presentation[bp]) {\n return presentation[bp]!;\n }\n }\n\n return 'fixed';\n }, [presentation, currentBreakpoint]);\n}\n\n/**\n * Resolve a responsive value (T or responsive map keyed by breakpoints) against the current Shell breakpoint.\n * If no value is defined for the current breakpoint, search smaller breakpoints down to 'initial'.\n * Returns undefined when passed a responsive map with no matching key across the chain.\n */\nfunction useResponsiveValue<T>(value: T | Partial<Record<Breakpoint, T>> | undefined): T | undefined {\n const { currentBreakpoint } = useShell();\n\n return React.useMemo(() => {\n if (value == null) return undefined;\n // Primitive value\n if (typeof value !== 'object') {\n return value as T;\n }\n\n const map = value as Partial<Record<Breakpoint, T>>;\n if (map[currentBreakpoint as Breakpoint] !== undefined) {\n return map[currentBreakpoint as Breakpoint] as T;\n }\n\n const bpKeys = Object.keys(_BREAKPOINTS) as Array<keyof typeof _BREAKPOINTS>;\n const order: Breakpoint[] = ([...bpKeys].reverse() as Breakpoint[]).concat('initial' as Breakpoint);\n const startIdx = order.indexOf(currentBreakpoint as Breakpoint);\n\n for (let i = startIdx + 1; i < order.length; i++) {\n const bp = order[i];\n if (map[bp] !== undefined) {\n return map[bp] as T;\n }\n }\n\n return undefined;\n }, [value, currentBreakpoint]);\n}\n\ntype ResponsiveStateValue<T> = T | Partial<Record<Breakpoint, T>>;\n\ninterface UseResponsiveInitialStateOptions<T> {\n controlledValue?: ResponsiveStateValue<T>;\n defaultValue?: ResponsiveStateValue<T>;\n currentValue: T;\n setValue: (value: T) => void;\n breakpointReady: boolean;\n onInit?: (value: T) => void;\n onResponsiveChange?: (value: T) => void;\n controlledIsResponsive?: boolean;\n}\n\ninterface UseResponsiveInitialStateResult<T> {\n resolvedControlled?: T;\n resolvedDefault?: T;\n}\n\nfunction useResponsiveInitialState<T>({\n controlledValue,\n defaultValue,\n currentValue,\n setValue,\n breakpointReady,\n onInit,\n onResponsiveChange,\n controlledIsResponsive = false,\n}: UseResponsiveInitialStateOptions<T>): UseResponsiveInitialStateResult<T> {\n const resolvedControlled = useResponsiveValue(controlledValue);\n const resolvedDefault = useResponsiveValue(defaultValue);\n\n const lastControlledRef = React.useRef<T | undefined>(undefined);\n const pendingSyncRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const latestControlledRef = React.useRef<T | undefined>(resolvedControlled);\n const latestValueRef = React.useRef(currentValue);\n const setValueRef = React.useRef(setValue);\n\n React.useLayoutEffect(() => {\n latestControlledRef.current = resolvedControlled;\n latestValueRef.current = currentValue;\n setValueRef.current = setValue;\n });\n\n React.useEffect(() => {\n if (resolvedControlled === undefined) return;\n\n const prevControlled = lastControlledRef.current;\n const controlledChanged = prevControlled !== resolvedControlled;\n lastControlledRef.current = resolvedControlled;\n\n if (currentValue === resolvedControlled) {\n if (pendingSyncRef.current) {\n clearTimeout(pendingSyncRef.current);\n pendingSyncRef.current = null;\n }\n if (controlledIsResponsive) {\n onResponsiveChange?.(resolvedControlled);\n }\n return;\n }\n\n if (controlledChanged) {\n if (pendingSyncRef.current) {\n clearTimeout(pendingSyncRef.current);\n pendingSyncRef.current = null;\n }\n setValue(resolvedControlled);\n if (controlledIsResponsive) {\n onResponsiveChange?.(resolvedControlled);\n }\n return;\n }\n\n if (!pendingSyncRef.current) {\n pendingSyncRef.current = setTimeout(() => {\n pendingSyncRef.current = null;\n const latestControlled = latestControlledRef.current;\n const latestValue = latestValueRef.current;\n if (latestControlled === undefined) return;\n if (latestValue === latestControlled) return;\n setValueRef.current(latestControlled);\n }, 0);\n }\n }, [resolvedControlled, currentValue, setValue, onResponsiveChange, controlledIsResponsive]);\n\n React.useEffect(() => {\n return () => {\n if (pendingSyncRef.current) {\n clearTimeout(pendingSyncRef.current);\n pendingSyncRef.current = null;\n }\n };\n }, []);\n\n const didInitRef = React.useRef(false);\n React.useEffect(() => {\n if (didInitRef.current) return;\n if (!breakpointReady) return;\n if (typeof controlledValue !== 'undefined') return;\n if (resolvedDefault === undefined) return;\n didInitRef.current = true;\n if (currentValue !== resolvedDefault) {\n setValue(resolvedDefault);\n }\n onInit?.(resolvedDefault);\n }, [breakpointReady, controlledValue, resolvedDefault, currentValue, setValue, onInit]);\n\n return { resolvedControlled, resolvedDefault };\n}\n\nexport { useResponsivePresentation, useResponsiveValue, useResponsiveInitialState };\n"],
5
- "mappings": "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",
6
- "names": ["React", "useResponsivePresentation", "presentation", "currentBreakpoint", "useShell", "order", "_BREAKPOINTS", "startIdx", "i", "bp", "useResponsiveValue", "value", "map", "useResponsiveInitialState", "controlledValue", "defaultValue", "currentValue", "setValue", "breakpointReady", "onInit", "onResponsiveChange", "controlledIsResponsive", "resolvedControlled", "resolvedDefault", "lastControlledRef", "pendingSyncRef", "latestControlledRef", "latestValueRef", "setValueRef", "controlledChanged", "latestControlled", "latestValue", "didInitRef"]
7
- }
@@ -1,2 +0,0 @@
1
- function s(e,n){let o=new Set(n),t={};return Object.keys(e).forEach(a=>{o.has(a)||(t[a]=e[a])}),t}var r=["presentation","expandedSize","minSize","maxSize","resizable","collapsible","onExpand","onCollapse","onResize","resizer","onResizeStart","onResizeEnd","snapPoints","snapTolerance","collapseThreshold","paneId","persistence","inset"];function i(e,n){let o=n?[...r,...n]:[...r];return s(e,o)}function d(e){if(e!=null){if(typeof e=="object"){let n={};return Object.entries(e).forEach(([o,t])=>{typeof t=="boolean"&&(n[o]=t?"expanded":"collapsed")}),n}return e?"expanded":"collapsed"}}export{s as a,i as b,d as c};
2
- //# sourceMappingURL=chunk-CECQNGUL.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/_internal/shell-prop-helpers.ts"],
4
- "sourcesContent": ["import type { Breakpoint, PaneMode } from '../shell.types.js';\n\ntype KeyList<T> = readonly (keyof T)[];\n\nexport function omitPaneProps<T extends object, K extends KeyList<T>>(source: T, keys: K) {\n const omitSet = new Set<keyof T>(keys as readonly (keyof T)[]);\n const result: Partial<T> = {};\n (Object.keys(source) as Array<keyof T>).forEach((key) => {\n if (!omitSet.has(key)) {\n result[key] = source[key];\n }\n });\n return result as Omit<T, K[number]>;\n}\n\nconst PANE_BASE_INTERNAL_PROPS = [\n 'presentation',\n 'expandedSize',\n 'minSize',\n 'maxSize',\n 'resizable',\n 'collapsible',\n 'onExpand',\n 'onCollapse',\n 'onResize',\n 'resizer',\n 'onResizeStart',\n 'onResizeEnd',\n 'snapPoints',\n 'snapTolerance',\n 'collapseThreshold',\n 'paneId',\n 'persistence',\n 'inset',\n] as const;\n\nexport function extractPaneDomProps<T extends object, Extra extends KeyList<T> | undefined = undefined>(source: T, extraKeys?: Extra) {\n const omitKeys = extraKeys ? [...PANE_BASE_INTERNAL_PROPS, ...extraKeys] : [...PANE_BASE_INTERNAL_PROPS];\n return omitPaneProps(source, omitKeys as ReadonlyArray<keyof T>);\n}\n\nexport function mapResponsiveBooleanToPaneMode(value?: boolean | Partial<Record<Breakpoint, boolean>>): PaneMode | Partial<Record<Breakpoint, PaneMode>> | undefined {\n if (value == null) return undefined;\n if (typeof value === 'object') {\n const mapped: Partial<Record<Breakpoint, PaneMode>> = {};\n (Object.entries(value) as Array<[string, boolean]>).forEach(([bp, val]) => {\n if (typeof val === 'boolean') {\n mapped[bp as Breakpoint] = val ? 'expanded' : 'collapsed';\n }\n });\n return mapped;\n }\n return value ? 'expanded' : 'collapsed';\n}\n"],
5
- "mappings": "AAIO,SAASA,EAAsDC,EAAWC,EAAS,CACxF,IAAMC,EAAU,IAAI,IAAaD,CAA4B,EACvDE,EAAqB,CAAC,EAC5B,OAAC,OAAO,KAAKH,CAAM,EAAqB,QAASI,GAAQ,CAClDF,EAAQ,IAAIE,CAAG,IAClBD,EAAOC,CAAG,EAAIJ,EAAOI,CAAG,EAE5B,CAAC,EACMD,CACT,CAEA,IAAME,EAA2B,CAC/B,eACA,eACA,UACA,UACA,YACA,cACA,WACA,aACA,WACA,UACA,gBACA,cACA,aACA,gBACA,oBACA,SACA,cACA,OACF,EAEO,SAASC,EAAwFN,EAAWO,EAAmB,CACpI,IAAMC,EAAWD,EAAY,CAAC,GAAGF,EAA0B,GAAGE,CAAS,EAAI,CAAC,GAAGF,CAAwB,EACvG,OAAON,EAAcC,EAAQQ,CAAkC,CACjE,CAEO,SAASC,EAA+BC,EAAsH,CACnK,GAAIA,GAAS,KACb,IAAI,OAAOA,GAAU,SAAU,CAC7B,IAAMC,EAAgD,CAAC,EACvD,OAAC,OAAO,QAAQD,CAAK,EAA+B,QAAQ,CAAC,CAACE,EAAIC,CAAG,IAAM,CACrE,OAAOA,GAAQ,YACjBF,EAAOC,CAAgB,EAAIC,EAAM,WAAa,YAElD,CAAC,EACMF,CACT,CACA,OAAOD,EAAQ,WAAa,YAC9B",
6
- "names": ["omitPaneProps", "source", "keys", "omitSet", "result", "key", "PANE_BASE_INTERNAL_PROPS", "extractPaneDomProps", "extraKeys", "omitKeys", "mapResponsiveBooleanToPaneMode", "value", "mapped", "bp", "val"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as ye}from"./chunk-2LYX5S7H.js";import{a as re,c as se,d as ae}from"./chunk-QWVU2TW4.js";import{a as ue,c as fe}from"./chunk-5LXFJMFB.js";import{j as ie,n as ce,p as le,r as de,v as pe}from"./chunk-SNHEJU2S.js";import{a as Re,d as C}from"./chunk-TLWTUKKL.js";import{b as he,c as U}from"./chunk-CECQNGUL.js";import{a as me}from"./chunk-NNO7M466.js";import{a as oe}from"./chunk-AGAQC4HH.js";import*as n from"react";import Le from"classnames";var Be=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style","inset"],Pe=n.forwardRef((L,u)=>{let{className:ze,presentation:Se={initial:"overlay",lg:"fixed"},defaultOpen:B,open:c,onOpenChange:_,expandedSize:I=320,minSize:l=200,maxSize:d=500,resizable:b=!1,collapsible:Ce=!0,onExpand:$,onCollapse:A,onResize:v,onResizeStart:Ie,onResizeEnd:be,snapPoints:ve,snapTolerance:ge,collapseThreshold:xe,paneId:g,persistence:x,children:Me,style:Ee,onSizeChange:M,sizeUpdate:E,sizeUpdateMs:O=50,size:j,defaultSize:F,inset:T}=L,Oe=he(L,Be),{inspectorMode:s,setInspectorMode:N}=ie(),{currentBreakpointReady:f}=ce(),{peekTarget:Te}=le(),{togglePane:Ne}=de(),{registerInset:q,unregisterInset:K}=pe();n.useLayoutEffect(()=>{if(T)return q("inspector"),()=>K("inspector")},[T,q,K]);let w=ue(Se),R=w==="overlay",we=w==="stacked",a=n.useRef(null),ke=n.useCallback(e=>{a.current=e,typeof u=="function"?u(e):u&&(u.current=e)},[u]),W=n.Children.toArray(Me),Y=W.filter(e=>n.isValidElement(e)&&e.type===C),G=W.filter(e=>!(n.isValidElement(e)&&e.type===C)),h=n.useRef(_),k=n.useRef(c);n.useLayoutEffect(()=>{h.current=_,k.current=c});let De=n.useMemo(()=>U(c),[c]),Ve=n.useMemo(()=>U(B),[B]),He=typeof c=="object"&&c!==null,{resolvedControlled:m}=fe({controlledValue:De,defaultValue:Ve,currentValue:s,setValue:N,breakpointReady:f,controlledIsResponsive:He,onResponsiveChange:e=>h.current?.(e==="expanded",{reason:"responsive"}),onInit:e=>{typeof k.current>"u"&&h.current?.(e==="expanded",{reason:"init"})}}),p=n.useRef(null);n.useEffect(()=>()=>{p.current&&(clearTimeout(p.current),p.current=null)},[M,E,O]);let y=n.useMemo(()=>{let e=M,o=E,r=O??50;if(!e)return()=>{};if(o==="debounce")return(t,i)=>{p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{e(t,i),p.current=null},r)};if(o==="throttle"){let t=0;return(i,ne)=>{let te=Date.now();te-t>=r&&(t=te,e(i,ne))}}return(t,i)=>e(t,i)},[M,E,O]),P=n.useRef(null);n.useEffect(()=>{let e=typeof c<"u";if(P.current===null){P.current=e;return}P.current!==e&&(console.warn("Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported."),P.current=e)},[c]);let J=n.useRef(null),Q=n.useRef(void 0);n.useEffect(()=>{let e=J.current,r=Q.current!==m;if(e!==null&&e!==s){let t=s==="expanded";(!(typeof k.current<"u")||!r&&t!==(m===void 0?void 0:m==="expanded"))&&h.current?.(t,{reason:"toggle"})}J.current=s,Q.current=m},[s,m]);let X=n.useRef($),Z=n.useRef(A);n.useLayoutEffect(()=>{X.current=$,Z.current=A});let z=n.useRef(null),ee=n.useRef(!1);n.useEffect(()=>{let e=s;if(!f){z.current=e;return}if(!ee.current){ee.current=!0,z.current=e;return}let o=z.current;o!==null&&o!==e&&(e==="expanded"?X.current?.():e==="collapsed"&&Z.current?.(),z.current=e)},[s,f]);let D=s==="expanded",S=n.useMemo(()=>{if(!g||x)return x;let e=`kookie-ui:shell:inspector:${g}`;return{load:()=>{if(!(typeof window>"u"))try{let r=window.localStorage.getItem(e);return r?Number(r):void 0}catch{return}},save:r=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(r))}catch{}}}},[g,x]);n.useEffect(()=>{let e=!0;if(!b||!S?.load||R)return;let o=S.load(),r=t=>{!e||typeof t!="number"||!a.current||(a.current.style.setProperty("--inspector-size",`${t}px`),v?.(t))};return o instanceof Promise?o.then(r).catch(t=>{}):r(o),()=>{e=!1}},[b,S,v,R]);let Ue=b&&!R&&D?n.createElement(me.Provider,{value:{containerRef:a,cssVarName:"--inspector-size",minSize:l,maxSize:d,defaultSize:I,orientation:"vertical",edge:"start",computeNext:(e,o,r)=>{let t=getComputedStyle(a.current).direction==="rtl",i=e-o;return r+(t?i:-i)},onResize:v,onResizeStart:Ie,onResizeEnd:e=>{be?.(e),y(e,{reason:"resize"}),S?.save?.(e)},target:"inspector",collapsible:Ce,snapPoints:ve,snapTolerance:ge??8,collapseThreshold:xe,requestCollapse:()=>N("collapsed"),requestToggle:()=>Ne("inspector")}},Y.length>0?Y.map((e,o)=>n.cloneElement(e,{key:e.key??o})):n.createElement(Re,null)):null,V=n.useCallback(e=>ye(e,"horizontal"),[]);n.useEffect(()=>{if(a.current&&typeof j>"u"&&typeof F<"u"){let e=V(F);if(typeof e=="number"&&Number.isFinite(e)){let t=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));a.current.style.setProperty("--inspector-size",`${t}px`),y(t,{reason:"init"})}}},[]);let H=j;return n.useEffect(()=>{if(!a.current||typeof H>"u")return;let e=V(H);if(typeof e=="number"&&Number.isFinite(e)){let t=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));a.current.style.setProperty("--inspector-size",`${t}px`),y(t,{reason:"controlled"})}},[H,l,d,V,y]),R?n.createElement(re,{open:s==="expanded",onOpenChange:o=>N(o?"expanded":"collapsed")},n.createElement(se,{side:"end",style:{padding:0},"aria-label":"Inspector","aria-describedby":void 0,width:{initial:`${I}px`}},n.createElement(oe,null,n.createElement(ae,null,"Inspector")),G)):n.createElement("div",{...Oe,ref:ke,className:Le("rt-ShellInspector",ze),"data-mode":s,"data-peek":Te==="inspector"||void 0,"data-presentation":f?w:void 0,"data-open":f&&we&&D||void 0,"data-inset":T||void 0,style:{...Ee,"--inspector-size":`${I}px`,"--inspector-min-size":`${l}px`,"--inspector-max-size":`${d}px`}},n.createElement("div",{className:"rt-ShellInspectorContent","data-visible":D||void 0},G),Ue)});Pe.displayName="Shell.Inspector";Pe.Handle=C;export{Pe as a};
2
- //# sourceMappingURL=chunk-CEIK5U6C.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/_internal/shell-inspector.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useInspectorMode, usePresentation, usePeek, useShellActions, useInset } from '../shell.context.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { InspectorHandle, PaneHandle } from './shell-handles.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, PaneBaseProps, CSSPropertiesWithVars } from '../shell.types.js';\nimport { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';\nimport { normalizeToPx } from '../../helpers/normalize-to-px.js';\n\ntype InspectorOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype InspectorControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; defaultOpen?: never };\ntype InspectorUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; open?: never };\ntype InspectorSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype InspectorSizeControlledProps = { size: number | string; defaultSize?: never };\ntype InspectorSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\ntype InspectorPublicProps = PaneBaseProps &\n (InspectorControlledProps | InspectorUncontrolledProps) &\n (InspectorSizeControlledProps | InspectorSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: InspectorSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n /** When true, adds margin and triggers gray backdrop on Shell. */\n inset?: boolean;\n };\n\ntype InspectorComponent = React.ForwardRefExoticComponent<InspectorPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof InspectorHandle };\n\nconst INSPECTOR_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n 'inset',\n] as const satisfies readonly (keyof InspectorPublicProps)[];\n\nexport const Inspector = React.forwardRef<HTMLDivElement, InspectorPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = { initial: 'overlay', lg: 'fixed' },\n defaultOpen,\n open,\n onOpenChange,\n expandedSize = 320,\n minSize = 200,\n maxSize = 500,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n size,\n defaultSize,\n inset,\n } = initialProps;\n const inspectorDomProps = extractPaneDomProps(initialProps, INSPECTOR_DOM_PROP_KEYS);\n const { inspectorMode, setInspectorMode } = useInspectorMode();\n const { currentBreakpointReady } = usePresentation();\n const { peekTarget } = usePeek();\n const { togglePane } = useShellActions();\n const { registerInset, unregisterInset } = useInset();\n\n // Register/unregister inset\n React.useLayoutEffect(() => {\n if (inset) {\n registerInset('inspector');\n return () => unregisterInset('inspector');\n }\n }, [inset, registerInset, unregisterInset]);\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\n const localRef = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === InspectorHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === InspectorHandle));\n\n // Stable ref for onOpenChange to avoid effect dep churn\n const onOpenChangeRef = React.useRef(onOpenChange);\n const openRef = React.useRef(open);\n React.useLayoutEffect(() => {\n onOpenChangeRef.current = onOpenChange;\n openRef.current = open;\n });\n\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n const { resolvedControlled: resolvedInspectorControlled } = useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: inspectorMode,\n setValue: setInspectorMode,\n breakpointReady: currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChangeRef.current?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof openRef.current === 'undefined') {\n onOpenChangeRef.current?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\n\n // Ref for debounce cleanup\n const debounceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n // Cleanup debounce timeout on unmount or when dependencies change\n React.useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = null;\n }\n };\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n // Throttled/debounced emitter for onSizeChange\n const emitSizeChange = React.useMemo(() => {\n const cb = onSizeChange as undefined | ((s: number, meta: InspectorSizeChangeMeta) => void);\n const strategy = sizeUpdate as undefined | 'throttle' | 'debounce';\n const ms = sizeUpdateMs ?? 50;\n if (!cb) return () => {};\n if (strategy === 'debounce') {\n return (s: number, meta: InspectorSizeChangeMeta) => {\n if (debounceTimeoutRef.current) clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = setTimeout(() => {\n cb(s, meta);\n debounceTimeoutRef.current = null;\n }, ms);\n };\n }\n if (strategy === 'throttle') {\n let last = 0;\n return (s: number, meta: InspectorSizeChangeMeta) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n cb(s, meta);\n }\n };\n }\n return (s: number, meta: InspectorSizeChangeMeta) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Inspector: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n }\n\n // Warn on controlled/uncontrolled mode switch\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n // Emit mode changes. In controlled mode, skip when mode matches the controlled prop.\n const lastInspectorModeRef = React.useRef<PaneMode | null>(null);\n const lastResolvedInspectorControlledRef = React.useRef<PaneMode | undefined>(undefined);\n React.useEffect(() => {\n const prevInspectorMode = lastInspectorModeRef.current;\n const prevResolvedControlled = lastResolvedInspectorControlledRef.current;\n const controlledChanged = prevResolvedControlled !== resolvedInspectorControlled;\n\n if (prevInspectorMode !== null && prevInspectorMode !== inspectorMode) {\n const nextOpen = inspectorMode === 'expanded';\n const isControlled = typeof openRef.current !== 'undefined';\n const controlledTarget = resolvedInspectorControlled === undefined ? undefined : resolvedInspectorControlled === 'expanded';\n\n if (!isControlled || (!controlledChanged && nextOpen !== controlledTarget)) {\n onOpenChangeRef.current?.(nextOpen, { reason: 'toggle' });\n }\n }\n\n lastInspectorModeRef.current = inspectorMode;\n lastResolvedInspectorControlledRef.current = resolvedInspectorControlled;\n }, [inspectorMode, resolvedInspectorControlled]);\n\n // Track previous mode to only fire callbacks on actual user-initiated state transitions.\n // We wait for breakpointReady to ensure the initial state sync from useResponsiveInitialState\n // is complete before enabling callbacks. This avoids spurious callbacks during initialization.\n // Use callback refs to avoid re-running effect when inline callbacks change.\n const onExpandRef = React.useRef(onExpand);\n const onCollapseRef = React.useRef(onCollapse);\n React.useLayoutEffect(() => {\n onExpandRef.current = onExpand;\n onCollapseRef.current = onCollapse;\n });\n\n const prevInspectorModeRef = React.useRef<PaneMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = inspectorMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!currentBreakpointReady) {\n prevInspectorModeRef.current = currentMode;\n return;\n }\n\n // Skip the first run after breakpoint is ready - this captures the post-sync state\n if (!hasInitializedRef.current) {\n hasInitializedRef.current = true;\n prevInspectorModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevInspectorModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpandRef.current?.();\n } else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevInspectorModeRef.current = currentMode;\n }\n }, [inspectorMode, currentBreakpointReady]);\n\n const isExpanded = inspectorMode === 'expanded';\n\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:inspector:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n try {\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Inspector: failed to load persisted size', err);\n }\n return undefined;\n }\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, String(size));\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Inspector: failed to save persisted size', err);\n }\n }\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;\n const loaded = persistenceAdapter.load();\n const applyLoaded = (value?: number) => {\n if (!mounted || typeof value !== 'number' || !localRef.current) return;\n localRef.current.style.setProperty('--inspector-size', `${value}px`);\n onResize?.(value);\n };\n if (loaded instanceof Promise) {\n loaded.then(applyLoaded).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Inspector: failed to load persisted size', err);\n }\n });\n } else {\n applyLoaded(loaded);\n }\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n const handleEl =\n resizable && !isOverlay && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--inspector-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'start',\n computeNext: (client, startClient, startSize) => {\n const isRtl = getComputedStyle(localRef.current!).direction === 'rtl';\n const delta = client - startClient;\n return startSize + (isRtl ? delta : -delta);\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'inspector',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => setInspectorMode('collapsed'),\n requestToggle: () => togglePane('inspector'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n // Normalize CSS lengths to px helper\n const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'horizontal'), []);\n\n // Apply defaultSize on mount when uncontrolled\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {\n const px = normalizeSizeToPx(defaultSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--inspector-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'init' });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Controlled size sync\n const controlledSize = size;\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof controlledSize === 'undefined') return;\n const px = normalizeSizeToPx(controlledSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--inspector-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = inspectorMode === 'expanded';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => setInspectorMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content side=\"end\" style={{ padding: 0 }} aria-label=\"Inspector\" aria-describedby={undefined} width={{ initial: `${expandedSize}px` }}>\n <VisuallyHidden>\n <Sheet.Title>Inspector</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n // Strip control/size props from DOM spread\n return (\n <div\n {...inspectorDomProps}\n ref={setRef}\n className={classNames('rt-ShellInspector', className)}\n data-mode={inspectorMode}\n data-peek={peekTarget === 'inspector' || undefined}\n data-presentation={currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(currentBreakpointReady && isStacked && isExpanded) || undefined}\n data-inset={inset || undefined}\n style={{\n ...style,\n '--inspector-size': `${expandedSize}px`,\n '--inspector-min-size': `${minSize}px`,\n '--inspector-max-size': `${maxSize}px`,\n } as CSSPropertiesWithVars}\n >\n <div className=\"rt-ShellInspectorContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as InspectorComponent;\n\nInspector.displayName = 'Shell.Inspector';\nInspector.Handle = InspectorHandle;\n"],
5
- "mappings": "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",
6
- "names": ["React", "classNames", "INSPECTOR_DOM_PROP_KEYS", "Inspector", "initialProps", "ref", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "size", "defaultSize", "inset", "inspectorDomProps", "extractPaneDomProps", "inspectorMode", "setInspectorMode", "useInspectorMode", "currentBreakpointReady", "usePresentation", "peekTarget", "usePeek", "togglePane", "useShellActions", "registerInset", "unregisterInset", "useInset", "resolvedPresentation", "useResponsivePresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "InspectorHandle", "contentChildren", "onOpenChangeRef", "openRef", "normalizedControlledOpen", "mapResponsiveBooleanToPaneMode", "normalizedDefaultOpen", "openIsResponsive", "resolvedInspectorControlled", "useResponsiveInitialState", "next", "initial", "debounceTimeoutRef", "emitSizeChange", "cb", "strategy", "ms", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "lastInspectorModeRef", "lastResolvedInspectorControlledRef", "prevInspectorMode", "controlledChanged", "nextOpen", "onExpandRef", "onCollapseRef", "prevInspectorModeRef", "hasInitializedRef", "currentMode", "prevMode", "isExpanded", "persistenceAdapter", "key", "v", "mounted", "loaded", "applyLoaded", "value", "err", "handleEl", "PaneResizeContext", "client", "startClient", "startSize", "isRtl", "delta", "i", "PaneHandle", "normalizeSizeToPx", "normalizeToPx", "px", "clamped", "controlledSize", "Root", "Content", "VisuallyHidden", "Title", "classNames"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as ze}from"./chunk-2LYX5S7H.js";import{a as ce,c as ue,d as fe}from"./chunk-QWVU2TW4.js";import{a as ye,c as Pe}from"./chunk-5LXFJMFB.js";import{h as pe,n as be,p as Se,r as me,t as Re,v as he}from"./chunk-SNHEJU2S.js";import{a as ge,c as E}from"./chunk-TLWTUKKL.js";import{b as ve}from"./chunk-CECQNGUL.js";import{a as Me}from"./chunk-NNO7M466.js";import{a as le}from"./chunk-AGAQC4HH.js";import*as t from"react";import qe from"classnames";var Ke=["className","children","state","defaultState","onStateChange","thinSize","toggleModes","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style","inset"],Ce=t.forwardRef((_,S)=>{let{className:xe,presentation:Ee={initial:"overlay",md:"fixed"},expandedSize:d=288,minSize:l=200,maxSize:c=400,resizable:w=!1,collapsible:we=!0,onExpand:W,onCollapse:j,onResize:T,onResizeStart:Te,onResizeEnd:ke,snapPoints:Ne,snapTolerance:De,collapseThreshold:Ve,paneId:k,persistence:N,children:Ie,style:He,thinSize:p=64,toggleModes:R,state:u,defaultState:h,onStateChange:F,size:q,defaultSize:K,onSizeChange:D,sizeUpdate:V,sizeUpdateMs:I=50,inset:H}=_,Oe=ve(_,Ke),{sidebarMode:a,setSidebarMode:O}=pe(),{currentBreakpointReady:m}=be(),{peekTarget:$}=Se(),{togglePane:$e,setSidebarToggleComputer:y}=me(),{setHasSidebar:L}=Re(),{registerInset:Y,unregisterInset:G}=he();t.useLayoutEffect(()=>{if(H)return Y("sidebar"),()=>G("sidebar")},[H,Y,G]);let U=ye(Ee),b=U==="overlay",Le=U==="stacked",s=t.useRef(null),Ue=t.useCallback(e=>{s.current=e,typeof S=="function"?S(e):S&&(S.current=e)},[S]),J=t.Children.toArray(Ie),Q=J.filter(e=>t.isValidElement(e)&&e.type===E),X=J.filter(e=>!(t.isValidElement(e)&&e.type===E)),f=t.useRef(null);t.useEffect(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null)},[D,V,I]);let P=t.useMemo(()=>{let e=D,n=V,r=I??50;if(!e)return()=>{};if(n==="debounce")return(o,i)=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{e(o,i),f.current=null},r)};if(n==="throttle"){let o=0;return(i,Fe)=>{let de=Date.now();de-o>=r&&(o=de,e(i,Fe))}}return(o,i)=>e(o,i)},[D,V,I]),Ae=t.useId();t.useEffect(()=>(L(!0),()=>{L(!1)}),[L,Ae]);let M=t.useRef(null);t.useEffect(()=>{let e=typeof u<"u";if(M.current===null){M.current=e;return}M.current!==e&&(console.warn("Shell.Sidebar: Switching between controlled and uncontrolled `state` is not supported."),M.current=e)},[u]);let g=t.useRef(F),Z=t.useRef(u);t.useLayoutEffect(()=>{g.current=F,Z.current=u});let Be=typeof u=="object"&&u!==null,{resolvedControlled:v,resolvedDefault:ee}=Pe({controlledValue:u,defaultValue:h,currentValue:a,setValue:O,breakpointReady:m,controlledIsResponsive:Be,onResponsiveChange:e=>g.current?.(e,{reason:"responsive"}),onInit:e=>g.current?.(e,{reason:"init"})}),te=t.useRef(null),ne=t.useRef(void 0);t.useEffect(()=>{let e=a,n=te.current,o=ne.current!==v;n!==null&&n!==e&&(!(typeof Z.current<"u")||!o&&e!==v)&&g.current?.(e,{reason:"toggle"}),te.current=e,ne.current=v},[a,v]);let re=t.useRef(W),oe=t.useRef(j);t.useLayoutEffect(()=>{re.current=W,oe.current=j});let z=t.useRef(null),ae=t.useRef(!1);t.useEffect(()=>{let e=a;if(!m){z.current=e;return}if(!ae.current){ae.current=!0,z.current=e;return}let n=z.current;n!==null&&n!==e&&(n==="collapsed"&&e!=="collapsed"?re.current?.():e==="collapsed"&&oe.current?.(),z.current=e)},[a,m]);let se=a!=="collapsed",C=t.useMemo(()=>{if(!k||N)return N;let e=`kookie-ui:shell:sidebar:${k}`;return{load:()=>{if(!(typeof window>"u"))try{let r=window.localStorage.getItem(e);return r?Number(r):void 0}catch{return}},save:r=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(r))}catch{}}}},[k,N]);t.useEffect(()=>{let e=!0;return(async()=>{if(!w||!C?.load||b)return;let n=await C.load();e&&typeof n=="number"&&s.current&&(s.current.style.setProperty("--sidebar-size",`${n}px`),T?.(n))})(),()=>{e=!1}},[w,C,T,b]);let x=t.useCallback(()=>{let e=ee??(typeof h=="string"?h:void 0)??"expanded";return e==="thin"||e==="expanded"?e:"expanded"},[ee,h]);t.useEffect(()=>{if(!y)return;let e=R??"both";return y(r=>{if(e==="both")return r==="collapsed"?"thin":r==="thin"?"expanded":"collapsed";let o=x();return r==="collapsed"?o:r===o?"collapsed":o}),()=>{y?.(r=>r==="collapsed"?"thin":r==="thin"?"expanded":"collapsed")}},[y,R,x]);let ie=t.useRef(d),_e=t.useRef("expanded");t.useEffect(()=>{a!=="collapsed"&&(_e.current=a,ie.current=a==="thin"?p:d)},[a,p,d]);let We=w&&!b&&a==="expanded"?t.createElement(Me.Provider,{value:{containerRef:s,cssVarName:"--sidebar-size",minSize:l,maxSize:c,defaultSize:d,orientation:"vertical",edge:"end",computeNext:(e,n,r)=>{let o=getComputedStyle(s.current).direction==="rtl",i=e-n;return r+(o?-i:i)},onResize:T,onResizeStart:Te,onResizeEnd:e=>{ke?.(e),P(e,{reason:"resize"}),C?.save?.(e)},target:"sidebar",collapsible:we,snapPoints:Ne,snapTolerance:De??8,collapseThreshold:Ve,requestCollapse:()=>O("collapsed"),requestToggle:()=>$e("sidebar")}},Q.length>0?Q.map((e,n)=>t.cloneElement(e,{key:e.key??n})):t.createElement(ge,null)):null,A=t.useCallback(e=>ze(e,"horizontal"),[]);t.useEffect(()=>{if(s.current&&typeof q>"u"&&typeof K<"u"){let e=A(K);if(typeof e=="number"&&Number.isFinite(e)){let o=Math.min((typeof c=="number"?c:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));s.current.style.setProperty("--sidebar-size",`${o}px`),P(o,{reason:"init"})}}},[]);let B=q;t.useEffect(()=>{if(!s.current||typeof B>"u")return;let e=A(B);if(typeof e=="number"&&Number.isFinite(e)){let o=Math.min((typeof c=="number"?c:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));s.current.style.setProperty("--sidebar-size",`${o}px`),P(o,{reason:"controlled"})}},[B,l,c,A,P]);let je=t.useMemo(()=>{if(!($==="sidebar"&&a==="collapsed"&&!b))return;let e=R??"both",n=a,r;if(e==="both")r=n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed";else{let o=x();r=n==="collapsed"?o:"collapsed"}return r==="thin"?{"--peek-sidebar-width":`${p}px`}:{"--peek-sidebar-width":`var(--sidebar-size, ${d}px)`}},[$,a,b,R,x,p,d]);if(b){let e=a!=="collapsed";return t.createElement(ce,{open:e,onOpenChange:n=>O(n?"expanded":"collapsed")},t.createElement(ue,{side:"start",style:{padding:0},"aria-label":"Navigation","aria-describedby":void 0,width:{initial:`${e?a==="thin"?p:d:ie.current}px`}},t.createElement(le,null,t.createElement(fe,null,"Navigation")),X))}return t.createElement("div",{...Oe,ref:Ue,className:qe("rt-ShellSidebar",xe),"data-mode":a,"data-peek":$==="sidebar"||void 0,"data-presentation":m?U:void 0,"data-open":m&&Le&&se||void 0,"data-inset":H||void 0,style:{...He,"--sidebar-size":`${d}px`,"--sidebar-thin-size":`${p}px`,"--sidebar-min-size":`${l}px`,"--sidebar-max-size":`${c}px`,...je}},t.createElement("div",{className:"rt-ShellSidebarContent","data-visible":se||void 0},X),We)});Ce.displayName="Shell.Sidebar";Ce.Handle=E;export{Ce as a};
2
- //# sourceMappingURL=chunk-EE2IH2GL.js.map