@womp/kookie-ui 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/README.md +1 -1
  2. package/components.css +539 -494
  3. package/dist/cjs/components/_internal/base-menu.utils.js +1 -1
  4. package/dist/cjs/components/_internal/base-menu.utils.js.map +3 -3
  5. package/dist/cjs/components/_internal/menu-context.js +1 -1
  6. package/dist/cjs/components/_internal/menu-context.js.map +3 -3
  7. package/dist/cjs/components/_internal/shell-bottom.d.ts +6 -7
  8. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  9. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  10. package/dist/cjs/components/_internal/shell-bottom.js.map +4 -4
  11. package/dist/cjs/components/_internal/shell-handles.d.ts +9 -0
  12. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  13. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  14. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  15. package/dist/cjs/components/_internal/shell-inspector.d.ts +4 -6
  16. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  17. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  18. package/dist/cjs/components/_internal/shell-inspector.js.map +4 -4
  19. package/dist/cjs/components/_internal/shell-pane.d.ts +70 -0
  20. package/dist/cjs/components/_internal/shell-pane.d.ts.map +1 -0
  21. package/dist/cjs/components/_internal/shell-pane.js +2 -0
  22. package/dist/cjs/components/_internal/shell-pane.js.map +7 -0
  23. package/dist/cjs/components/_internal/shell-resizable.d.ts +48 -0
  24. package/dist/cjs/components/_internal/shell-resizable.d.ts.map +1 -0
  25. package/dist/cjs/components/_internal/shell-resizable.js +2 -0
  26. package/dist/cjs/components/_internal/shell-resizable.js.map +7 -0
  27. package/dist/cjs/components/_internal/shell-resize.d.ts +11 -3
  28. package/dist/cjs/components/_internal/shell-resize.d.ts.map +1 -1
  29. package/dist/cjs/components/_internal/shell-resize.js +1 -1
  30. package/dist/cjs/components/_internal/shell-resize.js.map +2 -2
  31. package/dist/cjs/components/_internal/shell-rest.d.ts +27 -0
  32. package/dist/cjs/components/_internal/shell-rest.d.ts.map +1 -0
  33. package/dist/cjs/components/_internal/shell-rest.js +2 -0
  34. package/dist/cjs/components/_internal/shell-rest.js.map +7 -0
  35. package/dist/cjs/components/_internal/shell-sidebar.d.ts +7 -12
  36. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  37. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  38. package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
  39. package/dist/cjs/components/_internal/shell-store.d.ts +99 -0
  40. package/dist/cjs/components/_internal/shell-store.d.ts.map +1 -0
  41. package/dist/cjs/components/_internal/shell-store.js +2 -0
  42. package/dist/cjs/components/_internal/shell-store.js.map +7 -0
  43. package/dist/cjs/components/context-menu.js +1 -1
  44. package/dist/cjs/components/context-menu.js.map +3 -3
  45. package/dist/cjs/components/dropdown-menu.js +1 -1
  46. package/dist/cjs/components/dropdown-menu.js.map +3 -3
  47. package/dist/cjs/components/index.js +5 -5
  48. package/dist/cjs/components/index.js.map +4 -4
  49. package/dist/cjs/components/schemas/index.js +1 -1
  50. package/dist/cjs/components/schemas/index.js.map +3 -3
  51. package/dist/cjs/components/schemas/shell.schema.d.ts +277 -229
  52. package/dist/cjs/components/schemas/shell.schema.d.ts.map +1 -1
  53. package/dist/cjs/components/schemas/shell.schema.js +1 -1
  54. package/dist/cjs/components/schemas/shell.schema.js.map +3 -3
  55. package/dist/cjs/components/shell.context.d.ts +25 -114
  56. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  57. package/dist/cjs/components/shell.context.js +1 -1
  58. package/dist/cjs/components/shell.context.js.map +4 -4
  59. package/dist/cjs/components/shell.d.ts +42 -21
  60. package/dist/cjs/components/shell.d.ts.map +1 -1
  61. package/dist/cjs/components/shell.hooks.d.ts +7 -23
  62. package/dist/cjs/components/shell.hooks.d.ts.map +1 -1
  63. package/dist/cjs/components/shell.hooks.js +1 -1
  64. package/dist/cjs/components/shell.hooks.js.map +4 -4
  65. package/dist/cjs/components/shell.js +1 -1
  66. package/dist/cjs/components/shell.js.map +4 -4
  67. package/dist/cjs/components/shell.types.d.ts +19 -2
  68. package/dist/cjs/components/shell.types.d.ts.map +1 -1
  69. package/dist/cjs/components/shell.types.js +1 -1
  70. package/dist/cjs/components/shell.types.js.map +3 -3
  71. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  72. package/dist/cjs/components/sidebar.js +1 -1
  73. package/dist/cjs/components/sidebar.js.map +3 -3
  74. package/dist/cjs/hooks/use-breakpoint.d.ts +5 -0
  75. package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
  76. package/dist/cjs/hooks/use-breakpoint.js +1 -1
  77. package/dist/cjs/hooks/use-breakpoint.js.map +3 -3
  78. package/dist/cjs/index.js +5 -5
  79. package/dist/cjs/index.js.map +4 -4
  80. package/dist/esm/{chunk-HJU4I34X.js → chunk-25X75TI7.js} +2 -2
  81. package/dist/esm/{chunk-4XKK32M4.js → chunk-26I257HE.js} +2 -2
  82. package/dist/esm/chunk-2EQWBT2S.js +2 -0
  83. package/dist/esm/chunk-2EQWBT2S.js.map +7 -0
  84. package/dist/esm/{chunk-GLERJXVS.js → chunk-2Q7BJ7YG.js} +2 -2
  85. package/dist/esm/chunk-3J6AUDID.js +2 -0
  86. package/dist/esm/chunk-3J6AUDID.js.map +7 -0
  87. package/dist/esm/{chunk-7EWFBWBS.js → chunk-3PTSRBVY.js} +2 -2
  88. package/dist/esm/chunk-3XSB7YIM.js +2 -0
  89. package/dist/esm/{chunk-FMBECDL4.js.map → chunk-3XSB7YIM.js.map} +3 -3
  90. package/dist/esm/{chunk-O2U6RJTB.js → chunk-44JZYS7A.js} +2 -2
  91. package/dist/esm/{chunk-CTA5ODAO.js → chunk-4WU2WKUJ.js} +2 -2
  92. package/dist/esm/{chunk-KZWNGWIM.js → chunk-5M7STAH3.js} +2 -2
  93. package/dist/esm/{chunk-5WRCK4R7.js → chunk-5TAHT6VC.js} +2 -2
  94. package/dist/esm/{chunk-RNTCHVFI.js → chunk-6J6YX2VX.js} +2 -2
  95. package/dist/esm/{chunk-AGSSWWFI.js → chunk-7FKKGUHK.js} +2 -2
  96. package/dist/esm/{chunk-WHFJ4JUN.js → chunk-7NYODT3Z.js} +2 -2
  97. package/dist/esm/{chunk-NVDXXGVW.js → chunk-7PMMYHZV.js} +2 -2
  98. package/dist/esm/chunk-A2XVR7GL.js +2 -0
  99. package/dist/esm/chunk-A2XVR7GL.js.map +7 -0
  100. package/dist/esm/chunk-ADXZNG4F.js +2 -0
  101. package/dist/esm/chunk-ADXZNG4F.js.map +7 -0
  102. package/dist/esm/chunk-AGNIFHOE.js +2 -0
  103. package/dist/esm/chunk-AGNIFHOE.js.map +7 -0
  104. package/dist/esm/{chunk-KJUDZCYK.js → chunk-AIHQ3MVK.js} +2 -2
  105. package/dist/esm/{chunk-UBOOUDS4.js → chunk-AO32NT75.js} +2 -2
  106. package/dist/esm/chunk-BZZXXZ3O.js +2 -0
  107. package/dist/esm/chunk-BZZXXZ3O.js.map +7 -0
  108. package/dist/esm/{chunk-JDGJSNWT.js → chunk-C5RVO3C3.js} +2 -2
  109. package/dist/esm/{chunk-IHK3H2OM.js → chunk-CBNTPHYK.js} +2 -2
  110. package/dist/esm/{chunk-BBJUB52V.js → chunk-CRBOJ7N7.js} +2 -2
  111. package/dist/esm/{chunk-VHECAEUP.js → chunk-DCIQHXAR.js} +2 -2
  112. package/dist/esm/{chunk-43A5GUSI.js → chunk-EHBAK3LQ.js} +2 -2
  113. package/dist/esm/{chunk-K3UAS7RW.js → chunk-F3AXE27Q.js} +2 -2
  114. package/dist/esm/{chunk-KFR3CK24.js → chunk-FB3PD4Z3.js} +2 -2
  115. package/dist/esm/{chunk-MCPRXVKZ.js → chunk-FEAOFF77.js} +2 -2
  116. package/dist/esm/{chunk-VZSQATP6.js → chunk-G4YKBAZT.js} +2 -2
  117. package/dist/esm/{chunk-ECXGQQJB.js → chunk-GDAKJS64.js} +2 -2
  118. package/dist/esm/{chunk-VR7ZAFYN.js → chunk-GGSJXOKR.js} +2 -2
  119. package/dist/esm/chunk-GM7KMQDI.js +2 -0
  120. package/dist/esm/chunk-GMHA5CFH.js +2 -0
  121. package/dist/esm/chunk-GMHA5CFH.js.map +7 -0
  122. package/dist/esm/{chunk-CESYMTJQ.js → chunk-H4GR4262.js} +2 -2
  123. package/dist/esm/{chunk-WXQIIKWV.js → chunk-HBIF43PT.js} +2 -2
  124. package/dist/esm/chunk-HCNO7PX6.js +2 -0
  125. package/dist/esm/chunk-HCNO7PX6.js.map +7 -0
  126. package/dist/esm/{chunk-2264DHUW.js → chunk-HMSSFU6I.js} +2 -2
  127. package/dist/esm/chunk-HWQ3NTJP.js +2 -0
  128. package/dist/esm/chunk-HWQ3NTJP.js.map +7 -0
  129. package/dist/esm/{chunk-S5C5YRBS.js → chunk-IDUVJJYG.js} +2 -2
  130. package/dist/esm/{chunk-CIYF56YS.js → chunk-IK3MQHA5.js} +2 -2
  131. package/dist/esm/{chunk-CKMMUHKE.js → chunk-JDEBKA56.js} +2 -2
  132. package/dist/esm/{chunk-E67CIG6A.js → chunk-JDWCQ2XP.js} +2 -2
  133. package/dist/esm/{chunk-L3BWTV7I.js → chunk-JQSZF3E2.js} +2 -2
  134. package/dist/esm/{chunk-MEO7MJMQ.js → chunk-JQW4XYBS.js} +2 -2
  135. package/dist/esm/{chunk-KMPE7TJ6.js → chunk-JRFZ535T.js} +2 -2
  136. package/dist/esm/{chunk-CDG5WH4U.js → chunk-KEEPKI2X.js} +2 -2
  137. package/dist/esm/{chunk-GAV3NHYL.js → chunk-KV4SZP3F.js} +2 -2
  138. package/dist/esm/{chunk-FG7XM7KJ.js → chunk-LJCUPAOI.js} +2 -2
  139. package/dist/esm/{chunk-N4GTDLRD.js → chunk-MBCQA7UZ.js} +2 -2
  140. package/dist/esm/chunk-MM5IHQFM.js +2 -0
  141. package/dist/esm/{chunk-Y5RCH23Z.js → chunk-NQXRWBQM.js} +2 -2
  142. package/dist/esm/{chunk-CSKZZOI2.js → chunk-NTNMJX5M.js} +2 -2
  143. package/dist/esm/{chunk-V27ZAN3E.js → chunk-NV3P2CKH.js} +2 -2
  144. package/dist/esm/{chunk-4ME6O27S.js → chunk-O4CSXNST.js} +2 -2
  145. package/dist/esm/chunk-ODCVOXEV.js +2 -0
  146. package/dist/esm/{chunk-W2FOBR5Q.js → chunk-OEEF6KJG.js} +2 -2
  147. package/dist/esm/{chunk-ABSKRHVM.js → chunk-OJSOX3AX.js} +2 -2
  148. package/dist/esm/{chunk-JGLAE5G7.js → chunk-OQU2SKLN.js} +2 -2
  149. package/dist/esm/{chunk-PZ7OYATT.js → chunk-OTKQN2KY.js} +2 -2
  150. package/dist/esm/{chunk-QWVU2TW4.js → chunk-P27KV2LS.js} +2 -2
  151. package/dist/esm/{chunk-JUY7CBSL.js → chunk-PBFSBHBS.js} +2 -2
  152. package/dist/esm/{chunk-DSJY5RI3.js → chunk-PDUHBDFC.js} +2 -2
  153. package/dist/esm/{chunk-MTOLKA6S.js → chunk-POG3YABW.js} +2 -2
  154. package/dist/esm/chunk-PYHEBG5I.js +2 -0
  155. package/dist/esm/chunk-PYHEBG5I.js.map +7 -0
  156. package/dist/esm/{chunk-GO7OHBHW.js → chunk-PYXMGEO7.js} +2 -2
  157. package/dist/esm/{chunk-VNH7BJOA.js → chunk-QEGEUD4D.js} +2 -2
  158. package/dist/esm/chunk-QEL55MLF.js +2 -0
  159. package/dist/esm/{chunk-MS5J4MF6.js → chunk-QJVAS7AK.js} +2 -2
  160. package/dist/esm/chunk-ROSWI2CL.js +2 -0
  161. package/dist/esm/chunk-ROSWI2CL.js.map +7 -0
  162. package/dist/esm/{chunk-KCWESYMR.js → chunk-RY67WG3O.js} +2 -2
  163. package/dist/esm/{chunk-IFM4EMZB.js → chunk-TLGXIWAS.js} +2 -2
  164. package/dist/esm/{chunk-6FLLFCBU.js → chunk-UBSLEGQZ.js} +2 -2
  165. package/dist/esm/{chunk-VBI3AWPT.js → chunk-UNWPH3SO.js} +2 -2
  166. package/dist/esm/chunk-V5ZSDDVZ.js +2 -0
  167. package/dist/esm/chunk-V5ZSDDVZ.js.map +7 -0
  168. package/dist/esm/{chunk-X7V3V3W4.js → chunk-VTIL55SR.js} +2 -2
  169. package/dist/esm/chunk-VUNNS3ZU.js +2 -0
  170. package/dist/esm/chunk-VUNNS3ZU.js.map +7 -0
  171. package/dist/esm/{chunk-ALWNS44Q.js → chunk-W2LD2YE6.js} +2 -2
  172. package/dist/esm/{chunk-2I7QRVJ5.js → chunk-WGWUEU4K.js} +2 -2
  173. package/dist/esm/{chunk-EPTYNVCU.js → chunk-WIDJYVZF.js} +2 -2
  174. package/dist/esm/{chunk-OLAWVEAI.js → chunk-WJBOOAIO.js} +2 -2
  175. package/dist/esm/{chunk-7FC7HF76.js → chunk-WQCB7KSH.js} +2 -2
  176. package/dist/esm/{chunk-YBSRX63K.js → chunk-WZFVTC7P.js} +2 -2
  177. package/dist/esm/chunk-XDDKT4NF.js +2 -0
  178. package/dist/esm/{chunk-KFA53SVQ.js → chunk-YA5DF67M.js} +2 -2
  179. package/dist/esm/chunk-YA5DF67M.js.map +7 -0
  180. package/dist/esm/chunk-YAQBIO2B.js +2 -0
  181. package/dist/esm/chunk-YAQBIO2B.js.map +7 -0
  182. package/dist/esm/{chunk-OFUNVHZ5.js → chunk-YG66IRW4.js} +2 -2
  183. package/dist/esm/{chunk-WGYUWEQV.js → chunk-YVSM2LGS.js} +2 -2
  184. package/dist/esm/{chunk-4NTGF22C.js → chunk-Z7AZNMNX.js} +2 -2
  185. package/dist/esm/chunk-ZJ33QP5N.js +2 -0
  186. package/dist/esm/{chunk-OGXZHAQL.js → chunk-ZW26J2SA.js} +2 -2
  187. package/dist/esm/components/_internal/base-button.js +1 -1
  188. package/dist/esm/components/_internal/base-menu.utils.js +1 -1
  189. package/dist/esm/components/_internal/menu-context.js +1 -1
  190. package/dist/esm/components/_internal/shell-bottom.d.ts +6 -7
  191. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  192. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  193. package/dist/esm/components/_internal/shell-handles.d.ts +9 -0
  194. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  195. package/dist/esm/components/_internal/shell-handles.js +1 -1
  196. package/dist/esm/components/_internal/shell-inspector.d.ts +4 -6
  197. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  198. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  199. package/dist/esm/components/_internal/shell-pane.d.ts +70 -0
  200. package/dist/esm/components/_internal/shell-pane.d.ts.map +1 -0
  201. package/dist/esm/components/_internal/shell-pane.js +2 -0
  202. package/dist/esm/components/_internal/shell-resizable.d.ts +48 -0
  203. package/dist/esm/components/_internal/shell-resizable.d.ts.map +1 -0
  204. package/dist/esm/components/_internal/shell-resizable.js +2 -0
  205. package/dist/esm/components/_internal/shell-resizable.js.map +7 -0
  206. package/dist/esm/components/_internal/shell-resize.d.ts +11 -3
  207. package/dist/esm/components/_internal/shell-resize.d.ts.map +1 -1
  208. package/dist/esm/components/_internal/shell-resize.js +1 -1
  209. package/dist/esm/components/_internal/shell-rest.d.ts +27 -0
  210. package/dist/esm/components/_internal/shell-rest.d.ts.map +1 -0
  211. package/dist/esm/components/_internal/shell-rest.js +2 -0
  212. package/dist/esm/components/_internal/shell-rest.js.map +7 -0
  213. package/dist/esm/components/_internal/shell-sidebar.d.ts +7 -12
  214. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  215. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  216. package/dist/esm/components/_internal/shell-store.d.ts +99 -0
  217. package/dist/esm/components/_internal/shell-store.d.ts.map +1 -0
  218. package/dist/esm/components/_internal/shell-store.js +2 -0
  219. package/dist/esm/components/_internal/shell-store.js.map +7 -0
  220. package/dist/esm/components/accordion.js +1 -1
  221. package/dist/esm/components/alert-dialog.js +1 -1
  222. package/dist/esm/components/avatar.js +1 -1
  223. package/dist/esm/components/badge.js +1 -1
  224. package/dist/esm/components/blockquote.js +1 -1
  225. package/dist/esm/components/blockquote.props.js +1 -1
  226. package/dist/esm/components/box.js +1 -1
  227. package/dist/esm/components/button.js +1 -1
  228. package/dist/esm/components/callout.js +1 -1
  229. package/dist/esm/components/card.js +1 -1
  230. package/dist/esm/components/chatbar.js +1 -1
  231. package/dist/esm/components/checkbox-cards.js +1 -1
  232. package/dist/esm/components/checkbox-group.js +1 -1
  233. package/dist/esm/components/checkbox.js +1 -1
  234. package/dist/esm/components/code.js +1 -1
  235. package/dist/esm/components/code.props.js +1 -1
  236. package/dist/esm/components/combobox.js +1 -1
  237. package/dist/esm/components/container.js +1 -1
  238. package/dist/esm/components/context-menu.js +1 -1
  239. package/dist/esm/components/data-list.js +1 -1
  240. package/dist/esm/components/dialog.js +1 -1
  241. package/dist/esm/components/dropdown-menu.js +1 -1
  242. package/dist/esm/components/em.js +1 -1
  243. package/dist/esm/components/em.props.js +1 -1
  244. package/dist/esm/components/flex.js +1 -1
  245. package/dist/esm/components/grid.js +1 -1
  246. package/dist/esm/components/heading.js +1 -1
  247. package/dist/esm/components/heading.props.js +1 -1
  248. package/dist/esm/components/hover-card.js +1 -1
  249. package/dist/esm/components/icon-button.js +1 -1
  250. package/dist/esm/components/image.js +1 -1
  251. package/dist/esm/components/index.js +1 -1
  252. package/dist/esm/components/inset.js +1 -1
  253. package/dist/esm/components/kbd.js +1 -1
  254. package/dist/esm/components/link.js +1 -1
  255. package/dist/esm/components/link.props.js +1 -1
  256. package/dist/esm/components/navbar.js +1 -1
  257. package/dist/esm/components/popover.js +1 -1
  258. package/dist/esm/components/progress.js +1 -1
  259. package/dist/esm/components/quote.js +1 -1
  260. package/dist/esm/components/quote.props.js +1 -1
  261. package/dist/esm/components/radio-cards.js +1 -1
  262. package/dist/esm/components/radio-group.js +1 -1
  263. package/dist/esm/components/radio.js +1 -1
  264. package/dist/esm/components/schemas/index.js +1 -1
  265. package/dist/esm/components/schemas/shell.schema.d.ts +277 -229
  266. package/dist/esm/components/schemas/shell.schema.d.ts.map +1 -1
  267. package/dist/esm/components/schemas/shell.schema.js +1 -1
  268. package/dist/esm/components/scroll-area.js +1 -1
  269. package/dist/esm/components/section.js +1 -1
  270. package/dist/esm/components/segmented-control.js +1 -1
  271. package/dist/esm/components/select.js +1 -1
  272. package/dist/esm/components/separator.js +1 -1
  273. package/dist/esm/components/sheet.js +1 -1
  274. package/dist/esm/components/shell.context.d.ts +25 -114
  275. package/dist/esm/components/shell.context.d.ts.map +1 -1
  276. package/dist/esm/components/shell.context.js +1 -1
  277. package/dist/esm/components/shell.d.ts +42 -21
  278. package/dist/esm/components/shell.d.ts.map +1 -1
  279. package/dist/esm/components/shell.hooks.d.ts +7 -23
  280. package/dist/esm/components/shell.hooks.d.ts.map +1 -1
  281. package/dist/esm/components/shell.hooks.js +1 -1
  282. package/dist/esm/components/shell.js +1 -1
  283. package/dist/esm/components/shell.types.d.ts +19 -2
  284. package/dist/esm/components/shell.types.d.ts.map +1 -1
  285. package/dist/esm/components/shell.types.js +1 -1
  286. package/dist/esm/components/sidebar.d.ts.map +1 -1
  287. package/dist/esm/components/sidebar.js +1 -1
  288. package/dist/esm/components/skeleton.js +1 -1
  289. package/dist/esm/components/slider.js +1 -1
  290. package/dist/esm/components/spinner.js +1 -1
  291. package/dist/esm/components/strong.js +1 -1
  292. package/dist/esm/components/strong.props.js +1 -1
  293. package/dist/esm/components/switch.js +1 -1
  294. package/dist/esm/components/tab-nav.js +1 -1
  295. package/dist/esm/components/table.js +1 -1
  296. package/dist/esm/components/tabs.js +1 -1
  297. package/dist/esm/components/text-area.js +1 -1
  298. package/dist/esm/components/text-field.js +1 -1
  299. package/dist/esm/components/text.js +1 -1
  300. package/dist/esm/components/text.props.js +1 -1
  301. package/dist/esm/components/theme-panel.js +1 -1
  302. package/dist/esm/components/toggle-button.js +1 -1
  303. package/dist/esm/components/toggle-icon-button.js +1 -1
  304. package/dist/esm/components/toolbar.js +1 -1
  305. package/dist/esm/components/tooltip.js +1 -1
  306. package/dist/esm/components/user-card.js +1 -1
  307. package/dist/esm/components/virtual-menu.js +1 -1
  308. package/dist/esm/helpers/extract-props.js +1 -1
  309. package/dist/esm/helpers/get-margin-styles.js +1 -1
  310. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  311. package/dist/esm/helpers/index.js +1 -1
  312. package/dist/esm/hooks/index.js +1 -1
  313. package/dist/esm/hooks/use-breakpoint.d.ts +5 -0
  314. package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
  315. package/dist/esm/hooks/use-breakpoint.js +1 -1
  316. package/dist/esm/index.js +1 -1
  317. package/dist/esm/props/index.js +1 -1
  318. package/package.json +7 -2
  319. package/schemas/index.json +1655 -0
  320. package/schemas/shell-bottom.d.ts +2 -0
  321. package/schemas/shell-bottom.json +180 -76
  322. package/schemas/shell-content.d.ts +2 -0
  323. package/schemas/shell-content.json +11 -5
  324. package/schemas/shell-handle.d.ts +2 -0
  325. package/schemas/shell-handle.json +7 -5
  326. package/schemas/shell-header.d.ts +2 -0
  327. package/schemas/shell-header.json +9 -10
  328. package/schemas/shell-inspector.d.ts +2 -0
  329. package/schemas/shell-inspector.json +183 -79
  330. package/schemas/shell-panel.d.ts +2 -0
  331. package/schemas/shell-panel.json +180 -76
  332. package/schemas/shell-rail.d.ts +2 -0
  333. package/schemas/shell-rail.json +137 -64
  334. package/schemas/shell-root.d.ts +2 -0
  335. package/schemas/shell-root.json +11 -9
  336. package/schemas/shell-sidebar.d.ts +2 -0
  337. package/schemas/shell-sidebar.json +274 -85
  338. package/schemas/shell-trigger.d.ts +2 -0
  339. package/schemas/shell-trigger.json +29 -17
  340. package/src/components/_internal/base-sidebar-menu.css +2 -1
  341. package/src/components/_internal/shell-bottom.tsx +92 -361
  342. package/src/components/_internal/shell-handles.tsx +193 -108
  343. package/src/components/_internal/shell-inspector.tsx +93 -360
  344. package/src/components/_internal/shell-pane.tsx +283 -0
  345. package/src/components/_internal/shell-resizable.tsx +263 -0
  346. package/src/components/_internal/shell-resize.tsx +11 -3
  347. package/src/components/_internal/shell-rest.ts +45 -0
  348. package/src/components/_internal/shell-sidebar.tsx +130 -441
  349. package/src/components/_internal/shell-store.tsx +204 -0
  350. package/src/components/schemas/shell.schema.ts +162 -153
  351. package/src/components/shell.context.tsx +112 -124
  352. package/src/components/shell.css +637 -496
  353. package/src/components/shell.hooks.ts +12 -170
  354. package/src/components/shell.tsx +566 -1497
  355. package/src/components/shell.types.ts +22 -2
  356. package/src/components/sidebar.tsx +17 -28
  357. package/src/hooks/use-breakpoint.ts +9 -0
  358. package/styles.css +539 -494
  359. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts +0 -7
  360. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts.map +0 -1
  361. package/dist/cjs/components/_internal/shell-prop-helpers.js +0 -2
  362. package/dist/cjs/components/_internal/shell-prop-helpers.js.map +0 -7
  363. package/dist/esm/chunk-2SZZ75RJ.js +0 -2
  364. package/dist/esm/chunk-2SZZ75RJ.js.map +0 -7
  365. package/dist/esm/chunk-4JQZUQY7.js +0 -2
  366. package/dist/esm/chunk-5LXFJMFB.js +0 -2
  367. package/dist/esm/chunk-5LXFJMFB.js.map +0 -7
  368. package/dist/esm/chunk-CECQNGUL.js +0 -2
  369. package/dist/esm/chunk-CECQNGUL.js.map +0 -7
  370. package/dist/esm/chunk-CEIK5U6C.js +0 -2
  371. package/dist/esm/chunk-CEIK5U6C.js.map +0 -7
  372. package/dist/esm/chunk-CJ27XP5Z.js +0 -2
  373. package/dist/esm/chunk-CJ27XP5Z.js.map +0 -7
  374. package/dist/esm/chunk-EE2IH2GL.js +0 -2
  375. package/dist/esm/chunk-EE2IH2GL.js.map +0 -7
  376. package/dist/esm/chunk-FMBECDL4.js +0 -2
  377. package/dist/esm/chunk-HSAG7C53.js +0 -2
  378. package/dist/esm/chunk-JJKQ7CGI.js +0 -2
  379. package/dist/esm/chunk-KFA53SVQ.js.map +0 -7
  380. package/dist/esm/chunk-KRDP5SQ7.js +0 -2
  381. package/dist/esm/chunk-KRDP5SQ7.js.map +0 -7
  382. package/dist/esm/chunk-M6DJRFJZ.js +0 -2
  383. package/dist/esm/chunk-M6DJRFJZ.js.map +0 -7
  384. package/dist/esm/chunk-MCQCG6AS.js +0 -2
  385. package/dist/esm/chunk-NIQT45PJ.js +0 -2
  386. package/dist/esm/chunk-NNO7M466.js +0 -2
  387. package/dist/esm/chunk-NNO7M466.js.map +0 -7
  388. package/dist/esm/chunk-SNHEJU2S.js +0 -2
  389. package/dist/esm/chunk-SNHEJU2S.js.map +0 -7
  390. package/dist/esm/chunk-TLWTUKKL.js +0 -2
  391. package/dist/esm/chunk-TLWTUKKL.js.map +0 -7
  392. package/dist/esm/chunk-XI5YXUCK.js +0 -2
  393. package/dist/esm/components/_internal/shell-prop-helpers.d.ts +0 -7
  394. package/dist/esm/components/_internal/shell-prop-helpers.d.ts.map +0 -1
  395. package/dist/esm/components/_internal/shell-prop-helpers.js +0 -2
  396. package/src/components/_internal/shell-prop-helpers.ts +0 -54
  397. /package/dist/esm/{chunk-HJU4I34X.js.map → chunk-25X75TI7.js.map} +0 -0
  398. /package/dist/esm/{chunk-4XKK32M4.js.map → chunk-26I257HE.js.map} +0 -0
  399. /package/dist/esm/{chunk-GLERJXVS.js.map → chunk-2Q7BJ7YG.js.map} +0 -0
  400. /package/dist/esm/{chunk-7EWFBWBS.js.map → chunk-3PTSRBVY.js.map} +0 -0
  401. /package/dist/esm/{chunk-O2U6RJTB.js.map → chunk-44JZYS7A.js.map} +0 -0
  402. /package/dist/esm/{chunk-CTA5ODAO.js.map → chunk-4WU2WKUJ.js.map} +0 -0
  403. /package/dist/esm/{chunk-KZWNGWIM.js.map → chunk-5M7STAH3.js.map} +0 -0
  404. /package/dist/esm/{chunk-5WRCK4R7.js.map → chunk-5TAHT6VC.js.map} +0 -0
  405. /package/dist/esm/{chunk-RNTCHVFI.js.map → chunk-6J6YX2VX.js.map} +0 -0
  406. /package/dist/esm/{chunk-AGSSWWFI.js.map → chunk-7FKKGUHK.js.map} +0 -0
  407. /package/dist/esm/{chunk-WHFJ4JUN.js.map → chunk-7NYODT3Z.js.map} +0 -0
  408. /package/dist/esm/{chunk-NVDXXGVW.js.map → chunk-7PMMYHZV.js.map} +0 -0
  409. /package/dist/esm/{chunk-KJUDZCYK.js.map → chunk-AIHQ3MVK.js.map} +0 -0
  410. /package/dist/esm/{chunk-UBOOUDS4.js.map → chunk-AO32NT75.js.map} +0 -0
  411. /package/dist/esm/{chunk-JDGJSNWT.js.map → chunk-C5RVO3C3.js.map} +0 -0
  412. /package/dist/esm/{chunk-IHK3H2OM.js.map → chunk-CBNTPHYK.js.map} +0 -0
  413. /package/dist/esm/{chunk-BBJUB52V.js.map → chunk-CRBOJ7N7.js.map} +0 -0
  414. /package/dist/esm/{chunk-VHECAEUP.js.map → chunk-DCIQHXAR.js.map} +0 -0
  415. /package/dist/esm/{chunk-43A5GUSI.js.map → chunk-EHBAK3LQ.js.map} +0 -0
  416. /package/dist/esm/{chunk-K3UAS7RW.js.map → chunk-F3AXE27Q.js.map} +0 -0
  417. /package/dist/esm/{chunk-KFR3CK24.js.map → chunk-FB3PD4Z3.js.map} +0 -0
  418. /package/dist/esm/{chunk-MCPRXVKZ.js.map → chunk-FEAOFF77.js.map} +0 -0
  419. /package/dist/esm/{chunk-VZSQATP6.js.map → chunk-G4YKBAZT.js.map} +0 -0
  420. /package/dist/esm/{chunk-ECXGQQJB.js.map → chunk-GDAKJS64.js.map} +0 -0
  421. /package/dist/esm/{chunk-VR7ZAFYN.js.map → chunk-GGSJXOKR.js.map} +0 -0
  422. /package/dist/esm/{chunk-4JQZUQY7.js.map → chunk-GM7KMQDI.js.map} +0 -0
  423. /package/dist/esm/{chunk-CESYMTJQ.js.map → chunk-H4GR4262.js.map} +0 -0
  424. /package/dist/esm/{chunk-WXQIIKWV.js.map → chunk-HBIF43PT.js.map} +0 -0
  425. /package/dist/esm/{chunk-2264DHUW.js.map → chunk-HMSSFU6I.js.map} +0 -0
  426. /package/dist/esm/{chunk-S5C5YRBS.js.map → chunk-IDUVJJYG.js.map} +0 -0
  427. /package/dist/esm/{chunk-CIYF56YS.js.map → chunk-IK3MQHA5.js.map} +0 -0
  428. /package/dist/esm/{chunk-CKMMUHKE.js.map → chunk-JDEBKA56.js.map} +0 -0
  429. /package/dist/esm/{chunk-E67CIG6A.js.map → chunk-JDWCQ2XP.js.map} +0 -0
  430. /package/dist/esm/{chunk-L3BWTV7I.js.map → chunk-JQSZF3E2.js.map} +0 -0
  431. /package/dist/esm/{chunk-MEO7MJMQ.js.map → chunk-JQW4XYBS.js.map} +0 -0
  432. /package/dist/esm/{chunk-KMPE7TJ6.js.map → chunk-JRFZ535T.js.map} +0 -0
  433. /package/dist/esm/{chunk-CDG5WH4U.js.map → chunk-KEEPKI2X.js.map} +0 -0
  434. /package/dist/esm/{chunk-GAV3NHYL.js.map → chunk-KV4SZP3F.js.map} +0 -0
  435. /package/dist/esm/{chunk-FG7XM7KJ.js.map → chunk-LJCUPAOI.js.map} +0 -0
  436. /package/dist/esm/{chunk-N4GTDLRD.js.map → chunk-MBCQA7UZ.js.map} +0 -0
  437. /package/dist/esm/{chunk-JJKQ7CGI.js.map → chunk-MM5IHQFM.js.map} +0 -0
  438. /package/dist/esm/{chunk-Y5RCH23Z.js.map → chunk-NQXRWBQM.js.map} +0 -0
  439. /package/dist/esm/{chunk-CSKZZOI2.js.map → chunk-NTNMJX5M.js.map} +0 -0
  440. /package/dist/esm/{chunk-V27ZAN3E.js.map → chunk-NV3P2CKH.js.map} +0 -0
  441. /package/dist/esm/{chunk-4ME6O27S.js.map → chunk-O4CSXNST.js.map} +0 -0
  442. /package/dist/esm/{chunk-HSAG7C53.js.map → chunk-ODCVOXEV.js.map} +0 -0
  443. /package/dist/esm/{chunk-W2FOBR5Q.js.map → chunk-OEEF6KJG.js.map} +0 -0
  444. /package/dist/esm/{chunk-ABSKRHVM.js.map → chunk-OJSOX3AX.js.map} +0 -0
  445. /package/dist/esm/{chunk-JGLAE5G7.js.map → chunk-OQU2SKLN.js.map} +0 -0
  446. /package/dist/esm/{chunk-PZ7OYATT.js.map → chunk-OTKQN2KY.js.map} +0 -0
  447. /package/dist/esm/{chunk-QWVU2TW4.js.map → chunk-P27KV2LS.js.map} +0 -0
  448. /package/dist/esm/{chunk-JUY7CBSL.js.map → chunk-PBFSBHBS.js.map} +0 -0
  449. /package/dist/esm/{chunk-DSJY5RI3.js.map → chunk-PDUHBDFC.js.map} +0 -0
  450. /package/dist/esm/{chunk-MTOLKA6S.js.map → chunk-POG3YABW.js.map} +0 -0
  451. /package/dist/esm/{chunk-GO7OHBHW.js.map → chunk-PYXMGEO7.js.map} +0 -0
  452. /package/dist/esm/{chunk-VNH7BJOA.js.map → chunk-QEGEUD4D.js.map} +0 -0
  453. /package/dist/esm/{chunk-MCQCG6AS.js.map → chunk-QEL55MLF.js.map} +0 -0
  454. /package/dist/esm/{chunk-MS5J4MF6.js.map → chunk-QJVAS7AK.js.map} +0 -0
  455. /package/dist/esm/{chunk-KCWESYMR.js.map → chunk-RY67WG3O.js.map} +0 -0
  456. /package/dist/esm/{chunk-IFM4EMZB.js.map → chunk-TLGXIWAS.js.map} +0 -0
  457. /package/dist/esm/{chunk-6FLLFCBU.js.map → chunk-UBSLEGQZ.js.map} +0 -0
  458. /package/dist/esm/{chunk-VBI3AWPT.js.map → chunk-UNWPH3SO.js.map} +0 -0
  459. /package/dist/esm/{chunk-X7V3V3W4.js.map → chunk-VTIL55SR.js.map} +0 -0
  460. /package/dist/esm/{chunk-ALWNS44Q.js.map → chunk-W2LD2YE6.js.map} +0 -0
  461. /package/dist/esm/{chunk-2I7QRVJ5.js.map → chunk-WGWUEU4K.js.map} +0 -0
  462. /package/dist/esm/{chunk-EPTYNVCU.js.map → chunk-WIDJYVZF.js.map} +0 -0
  463. /package/dist/esm/{chunk-OLAWVEAI.js.map → chunk-WJBOOAIO.js.map} +0 -0
  464. /package/dist/esm/{chunk-7FC7HF76.js.map → chunk-WQCB7KSH.js.map} +0 -0
  465. /package/dist/esm/{chunk-YBSRX63K.js.map → chunk-WZFVTC7P.js.map} +0 -0
  466. /package/dist/esm/{chunk-XI5YXUCK.js.map → chunk-XDDKT4NF.js.map} +0 -0
  467. /package/dist/esm/{chunk-OFUNVHZ5.js.map → chunk-YG66IRW4.js.map} +0 -0
  468. /package/dist/esm/{chunk-WGYUWEQV.js.map → chunk-YVSM2LGS.js.map} +0 -0
  469. /package/dist/esm/{chunk-4NTGF22C.js.map → chunk-Z7AZNMNX.js.map} +0 -0
  470. /package/dist/esm/{chunk-NIQT45PJ.js.map → chunk-ZJ33QP5N.js.map} +0 -0
  471. /package/dist/esm/{chunk-OGXZHAQL.js.map → chunk-ZW26J2SA.js.map} +0 -0
  472. /package/dist/esm/components/_internal/{shell-prop-helpers.js.map → shell-pane.js.map} +0 -0
@@ -1,53 +1,43 @@
1
+ 'use client';
2
+
1
3
  import * as React from 'react';
2
4
  import classNames from 'classnames';
3
- import * as Sheet from '../sheet.js';
4
- import { VisuallyHidden } from '../visually-hidden.js';
5
- import { useInspectorMode, usePresentation, usePeek, useShellActions, useInset } from '../shell.context.js';
6
- import { useResponsivePresentation, useResponsiveInitialState } from '../shell.hooks.js';
5
+ import { useComposedRefs } from 'radix-ui/internal';
7
6
  import { PaneResizeContext } from './shell-resize.js';
8
7
  import { InspectorHandle, PaneHandle } from './shell-handles.js';
9
- import { _BREAKPOINTS } from '../shell.types.js';
10
- import type { Breakpoint, PaneMode, PaneSizePersistence, PaneBaseProps, CSSPropertiesWithVars } from '../shell.types.js';
11
- import { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';
12
- import { normalizeToPx } from '../../helpers/normalize-to-px.js';
13
-
14
- type InspectorOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };
8
+ import { usePane, paneAttributes, usePresentationTable } from './shell-pane.js';
9
+ import { splitHandles, useResizablePane, type SizeChangeMeta } from './shell-resizable.js';
10
+ import { useInsetRegistration, warnOnce } from './shell-store.js';
11
+ import { detailRest, endAnchoredGrowth, toPaneValue, withoutRemovedPaneProps } from './shell-rest.js';
12
+ import { readBreakpoint } from '../../hooks/use-breakpoint.js';
13
+ import type { Breakpoint, CSSPropertiesWithVars, PaneBaseProps } from '../shell.types.js';
14
+
15
+ type InspectorOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' | 'dismiss' };
15
16
  type InspectorControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; defaultOpen?: never };
16
17
  type InspectorUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; open?: never };
17
- type InspectorSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };
18
18
  type InspectorSizeControlledProps = { size: number | string; defaultSize?: never };
19
19
  type InspectorSizeUncontrolledProps = { defaultSize?: number | string; size?: never };
20
20
  type InspectorPublicProps = PaneBaseProps &
21
21
  (InspectorControlledProps | InspectorUncontrolledProps) &
22
22
  (InspectorSizeControlledProps | InspectorSizeUncontrolledProps) & {
23
- onSizeChange?: (size: number, meta: InspectorSizeChangeMeta) => void;
23
+ onSizeChange?: (size: number, meta: SizeChangeMeta) => void;
24
24
  sizeUpdate?: 'throttle' | 'debounce';
25
25
  sizeUpdateMs?: number;
26
- /** When true, adds margin and triggers gray backdrop on Shell. */
26
+ /** When true, adds margin and triggers the gray backdrop on the Shell. */
27
27
  inset?: boolean;
28
28
  };
29
29
 
30
30
  type InspectorComponent = React.ForwardRefExoticComponent<InspectorPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof InspectorHandle };
31
31
 
32
- const INSPECTOR_DOM_PROP_KEYS = [
33
- 'className',
34
- 'children',
35
- 'defaultOpen',
36
- 'open',
37
- 'onOpenChange',
38
- 'size',
39
- 'defaultSize',
40
- 'onSizeChange',
41
- 'sizeUpdate',
42
- 'sizeUpdateMs',
43
- 'style',
44
- 'inset',
45
- ] as const satisfies readonly (keyof InspectorPublicProps)[];
32
+ const INSPECTOR_PROP_NAMES = { controlled: 'open', default: 'defaultOpen' };
33
+
34
+ /** Since 0.8.0 the Inspector is in the frame from 768px up, the boundary kookie-ui-v2 uses everywhere. It was 1280px. */
35
+ const INSPECTOR_DEFAULT_PRESENTATION = { initial: 'overlay', sm: 'fixed' } as const;
46
36
 
47
- export const Inspector = React.forwardRef<HTMLDivElement, InspectorPublicProps>((initialProps, ref) => {
37
+ export const Inspector = React.forwardRef<HTMLDivElement, InspectorPublicProps>((props, ref) => {
48
38
  const {
49
39
  className,
50
- presentation = { initial: 'overlay', lg: 'fixed' },
40
+ presentation = INSPECTOR_DEFAULT_PRESENTATION,
51
41
  defaultOpen,
52
42
  open,
53
43
  onOpenChange,
@@ -74,348 +64,91 @@ export const Inspector = React.forwardRef<HTMLDivElement, InspectorPublicProps>(
74
64
  size,
75
65
  defaultSize,
76
66
  inset,
77
- } = initialProps;
78
- const inspectorDomProps = extractPaneDomProps(initialProps, INSPECTOR_DOM_PROP_KEYS);
79
- const { inspectorMode, setInspectorMode } = useInspectorMode();
80
- const { currentBreakpointReady } = usePresentation();
81
- const { peekTarget } = usePeek();
82
- const { togglePane } = useShellActions();
83
- const { registerInset, unregisterInset } = useInset();
84
-
85
- // Register/unregister inset
86
- React.useLayoutEffect(() => {
87
- if (inset) {
88
- registerInset('inspector');
89
- return () => unregisterInset('inspector');
90
- }
91
- }, [inset, registerInset, unregisterInset]);
92
- const resolvedPresentation = useResponsivePresentation(presentation);
93
- const isOverlay = resolvedPresentation === 'overlay';
94
- const isStacked = resolvedPresentation === 'stacked';
95
- const localRef = React.useRef<HTMLDivElement | null>(null);
96
- const setRef = React.useCallback(
97
- (node: HTMLDivElement | null) => {
98
- localRef.current = node;
99
- if (typeof ref === 'function') ref(node);
100
- else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;
101
- },
102
- [ref],
103
- );
104
- const childArray = React.Children.toArray(children) as React.ReactElement[];
105
- const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === InspectorHandle);
106
- const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === InspectorHandle));
107
-
108
- // Stable ref for onOpenChange to avoid effect dep churn
109
- const onOpenChangeRef = React.useRef(onOpenChange);
110
- const openRef = React.useRef(open);
111
- React.useLayoutEffect(() => {
112
- onOpenChangeRef.current = onOpenChange;
113
- openRef.current = open;
114
- });
115
-
116
- const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);
117
- const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);
118
- const openIsResponsive = typeof open === 'object' && open !== null;
119
- const { resolvedControlled: resolvedInspectorControlled } = useResponsiveInitialState<PaneMode>({
120
- controlledValue: normalizedControlledOpen,
121
- defaultValue: normalizedDefaultOpen,
122
- currentValue: inspectorMode,
123
- setValue: setInspectorMode,
124
- breakpointReady: currentBreakpointReady,
125
- controlledIsResponsive: openIsResponsive,
126
- onResponsiveChange: (next) => onOpenChangeRef.current?.(next === 'expanded', { reason: 'responsive' }),
127
- onInit: (initial) => {
128
- if (typeof openRef.current === 'undefined') {
129
- onOpenChangeRef.current?.(initial === 'expanded', { reason: 'init' });
130
- }
131
- },
67
+ id,
68
+ ...domProps
69
+ } = props;
70
+
71
+ const { table, attributes } = usePresentationTable(presentation, 'fixed');
72
+ const pane = usePane({
73
+ name: 'inspector',
74
+ label: 'Inspector',
75
+ propNames: INSPECTOR_PROP_NAMES,
76
+ id,
77
+ controlled: toPaneValue(open),
78
+ defaultValue: toPaneValue(defaultOpen),
79
+ presentationTable: table,
80
+ builtIn: detailRest,
81
+ onChange: (value, reason) => onOpenChange?.(value !== 'closed', { reason }),
82
+ onExpand,
83
+ onCollapse,
84
+ size: expandedSize,
132
85
  });
86
+ useInsetRegistration('inspector', inset);
133
87
 
134
- // Ref for debounce cleanup
135
- const debounceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);
136
- // Cleanup debounce timeout on unmount or when dependencies change
137
88
  React.useEffect(() => {
138
- return () => {
139
- if (debounceTimeoutRef.current) {
140
- clearTimeout(debounceTimeoutRef.current);
141
- debounceTimeoutRef.current = null;
142
- }
143
- };
144
- }, [onSizeChange, sizeUpdate, sizeUpdateMs]);
145
- // Throttled/debounced emitter for onSizeChange
146
- const emitSizeChange = React.useMemo(() => {
147
- const cb = onSizeChange as undefined | ((s: number, meta: InspectorSizeChangeMeta) => void);
148
- const strategy = sizeUpdate as undefined | 'throttle' | 'debounce';
149
- const ms = sizeUpdateMs ?? 50;
150
- if (!cb) return () => {};
151
- if (strategy === 'debounce') {
152
- return (s: number, meta: InspectorSizeChangeMeta) => {
153
- if (debounceTimeoutRef.current) clearTimeout(debounceTimeoutRef.current);
154
- debounceTimeoutRef.current = setTimeout(() => {
155
- cb(s, meta);
156
- debounceTimeoutRef.current = null;
157
- }, ms);
158
- };
89
+ if (snapPoints !== undefined || collapseThreshold !== undefined || paneId !== undefined || persistence !== undefined) {
90
+ warnOnce('Shell.Inspector: `snapPoints`, `collapseThreshold`, `paneId` and `persistence` are deprecated and are removed in 1.0. Keep the size in your own state with `size`/`onSizeChange`.');
159
91
  }
160
- if (strategy === 'throttle') {
161
- let last = 0;
162
- return (s: number, meta: InspectorSizeChangeMeta) => {
163
- const now = Date.now();
164
- if (now - last >= ms) {
165
- last = now;
166
- cb(s, meta);
167
- }
168
- };
169
- }
170
- return (s: number, meta: InspectorSizeChangeMeta) => cb(s, meta);
171
- }, [onSizeChange, sizeUpdate, sizeUpdateMs]);
172
-
173
- // Dev guards
174
- const wasControlledRef = React.useRef<boolean | null>(null);
175
- if (process.env.NODE_ENV !== 'production') {
176
- if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {
177
- console.error('Shell.Inspector: Do not pass both `open` and `defaultOpen`. Choose one.');
178
- }
179
- }
180
-
181
- // Warn on controlled/uncontrolled mode switch
182
- React.useEffect(() => {
183
- const isControlled = typeof open !== 'undefined';
184
- if (wasControlledRef.current === null) {
185
- wasControlledRef.current = isControlled;
186
- return;
187
- }
188
- if (wasControlledRef.current !== isControlled) {
189
- console.warn('Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported.');
190
- wasControlledRef.current = isControlled;
191
- }
192
- }, [open]);
193
-
194
- // Emit mode changes. In controlled mode, skip when mode matches the controlled prop.
195
- const lastInspectorModeRef = React.useRef<PaneMode | null>(null);
196
- const lastResolvedInspectorControlledRef = React.useRef<PaneMode | undefined>(undefined);
197
- React.useEffect(() => {
198
- const prevInspectorMode = lastInspectorModeRef.current;
199
- const prevResolvedControlled = lastResolvedInspectorControlledRef.current;
200
- const controlledChanged = prevResolvedControlled !== resolvedInspectorControlled;
201
-
202
- if (prevInspectorMode !== null && prevInspectorMode !== inspectorMode) {
203
- const nextOpen = inspectorMode === 'expanded';
204
- const isControlled = typeof openRef.current !== 'undefined';
205
- const controlledTarget = resolvedInspectorControlled === undefined ? undefined : resolvedInspectorControlled === 'expanded';
206
-
207
- if (!isControlled || (!controlledChanged && nextOpen !== controlledTarget)) {
208
- onOpenChangeRef.current?.(nextOpen, { reason: 'toggle' });
209
- }
210
- }
211
-
212
- lastInspectorModeRef.current = inspectorMode;
213
- lastResolvedInspectorControlledRef.current = resolvedInspectorControlled;
214
- }, [inspectorMode, resolvedInspectorControlled]);
215
-
216
- // Track previous mode to only fire callbacks on actual user-initiated state transitions.
217
- // We wait for breakpointReady to ensure the initial state sync from useResponsiveInitialState
218
- // is complete before enabling callbacks. This avoids spurious callbacks during initialization.
219
- // Use callback refs to avoid re-running effect when inline callbacks change.
220
- const onExpandRef = React.useRef(onExpand);
221
- const onCollapseRef = React.useRef(onCollapse);
222
- React.useLayoutEffect(() => {
223
- onExpandRef.current = onExpand;
224
- onCollapseRef.current = onCollapse;
92
+ }, [snapPoints, collapseThreshold, paneId, persistence]);
93
+
94
+ const elementRef = React.useRef<HTMLElement | null>(null);
95
+ const composedRef = useComposedRefs(ref, pane.setElement, elementRef);
96
+
97
+ const resize = useResizablePane({
98
+ name: 'inspector',
99
+ elementId: pane.id,
100
+ elementRef,
101
+ cssVarName: '--inspector-size',
102
+ orientation: 'vertical',
103
+ edge: 'start',
104
+ growth: endAnchoredGrowth,
105
+ expandedSize,
106
+ minSize,
107
+ maxSize,
108
+ resizable,
109
+ collapsible,
110
+ size,
111
+ defaultSize,
112
+ onSizeChange,
113
+ sizeUpdate,
114
+ sizeUpdateMs,
115
+ onResize,
116
+ onResizeStart,
117
+ onResizeEnd,
118
+ snapPoints,
119
+ snapTolerance,
120
+ collapseThreshold,
121
+ paneId,
122
+ persistence,
123
+ overlaying: pane.overlaying,
124
+ overlayingNow: () => table[readBreakpoint()] === 'overlay',
125
+ requestCollapse: () => pane.setValue('closed', 'toggle'),
126
+ requestToggle: () => pane.toggle('toggle'),
225
127
  });
226
128
 
227
- const prevInspectorModeRef = React.useRef<PaneMode | null>(null);
228
- const hasInitializedRef = React.useRef(false);
229
- React.useEffect(() => {
230
- const currentMode = inspectorMode;
231
-
232
- // Wait for breakpoint to be ready before enabling callbacks
233
- if (!currentBreakpointReady) {
234
- prevInspectorModeRef.current = currentMode;
235
- return;
236
- }
237
-
238
- // Skip the first run after breakpoint is ready - this captures the post-sync state
239
- if (!hasInitializedRef.current) {
240
- hasInitializedRef.current = true;
241
- prevInspectorModeRef.current = currentMode;
242
- return;
243
- }
244
-
245
- const prevMode = prevInspectorModeRef.current;
246
-
247
- // Only fire on actual state transitions
248
- if (prevMode !== null && prevMode !== currentMode) {
249
- if (currentMode === 'expanded') {
250
- onExpandRef.current?.();
251
- } else if (currentMode === 'collapsed') {
252
- onCollapseRef.current?.();
253
- }
254
- prevInspectorModeRef.current = currentMode;
255
- }
256
- }, [inspectorMode, currentBreakpointReady]);
257
-
258
- const isExpanded = inspectorMode === 'expanded';
259
-
260
- const persistenceAdapter = React.useMemo(() => {
261
- if (!paneId || persistence) return persistence;
262
- const key = `kookie-ui:shell:inspector:${paneId}`;
263
- const adapter: PaneSizePersistence = {
264
- load: () => {
265
- if (typeof window === 'undefined') return undefined;
266
- try {
267
- const v = window.localStorage.getItem(key);
268
- return v ? Number(v) : undefined;
269
- } catch (err) {
270
- if (process.env.NODE_ENV !== 'production') {
271
- console.warn('Shell.Inspector: failed to load persisted size', err);
272
- }
273
- return undefined;
274
- }
275
- },
276
- save: (size: number) => {
277
- if (typeof window === 'undefined') return;
278
- try {
279
- window.localStorage.setItem(key, String(size));
280
- } catch (err) {
281
- if (process.env.NODE_ENV !== 'production') {
282
- console.warn('Shell.Inspector: failed to save persisted size', err);
283
- }
284
- }
285
- },
286
- };
287
- return adapter;
288
- }, [paneId, persistence]);
289
-
290
- React.useEffect(() => {
291
- let mounted = true;
292
- if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;
293
- const loaded = persistenceAdapter.load();
294
- const applyLoaded = (value?: number) => {
295
- if (!mounted || typeof value !== 'number' || !localRef.current) return;
296
- localRef.current.style.setProperty('--inspector-size', `${value}px`);
297
- onResize?.(value);
298
- };
299
- if (loaded instanceof Promise) {
300
- loaded.then(applyLoaded).catch((err) => {
301
- if (process.env.NODE_ENV !== 'production') {
302
- console.warn('Shell.Inspector: failed to load persisted size', err);
303
- }
304
- });
305
- } else {
306
- applyLoaded(loaded);
307
- }
308
- return () => {
309
- mounted = false;
310
- };
311
- }, [resizable, persistenceAdapter, onResize, isOverlay]);
312
-
313
- const handleEl =
314
- resizable && !isOverlay && isExpanded ? (
315
- <PaneResizeContext.Provider
316
- value={{
317
- containerRef: localRef,
318
- cssVarName: '--inspector-size',
319
- minSize,
320
- maxSize,
321
- defaultSize: expandedSize,
322
- orientation: 'vertical',
323
- edge: 'start',
324
- computeNext: (client, startClient, startSize) => {
325
- const isRtl = getComputedStyle(localRef.current!).direction === 'rtl';
326
- const delta = client - startClient;
327
- return startSize + (isRtl ? delta : -delta);
328
- },
329
- onResize,
330
- onResizeStart,
331
- onResizeEnd: (size) => {
332
- onResizeEnd?.(size);
333
- emitSizeChange(size, { reason: 'resize' });
334
- persistenceAdapter?.save?.(size);
335
- },
336
- target: 'inspector',
337
- collapsible,
338
- snapPoints,
339
- snapTolerance: snapTolerance ?? 8,
340
- collapseThreshold,
341
- requestCollapse: () => setInspectorMode('collapsed'),
342
- requestToggle: () => togglePane('inspector'),
343
- }}
344
- >
345
- {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}
346
- </PaneResizeContext.Provider>
347
- ) : null;
348
-
349
- // Normalize CSS lengths to px helper
350
- const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'horizontal'), []);
351
-
352
- // Apply defaultSize on mount when uncontrolled
353
- React.useEffect(() => {
354
- if (!localRef.current) return;
355
- if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {
356
- const px = normalizeSizeToPx(defaultSize);
357
- if (typeof px === 'number' && Number.isFinite(px)) {
358
- const minPx = typeof minSize === 'number' ? minSize : undefined;
359
- const maxPx = typeof maxSize === 'number' ? maxSize : undefined;
360
- const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));
361
- localRef.current.style.setProperty('--inspector-size', `${clamped}px`);
362
- emitSizeChange(clamped, { reason: 'init' });
363
- }
364
- }
365
- // eslint-disable-next-line react-hooks/exhaustive-deps
366
- }, []);
367
-
368
- // Controlled size sync
369
- const controlledSize = size;
370
- React.useEffect(() => {
371
- if (!localRef.current) return;
372
- if (typeof controlledSize === 'undefined') return;
373
- const px = normalizeSizeToPx(controlledSize);
374
- if (typeof px === 'number' && Number.isFinite(px)) {
375
- const minPx = typeof minSize === 'number' ? minSize : undefined;
376
- const maxPx = typeof maxSize === 'number' ? maxSize : undefined;
377
- const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));
378
- localRef.current.style.setProperty('--inspector-size', `${clamped}px`);
379
- emitSizeChange(clamped, { reason: 'controlled' });
380
- }
381
- }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);
129
+ const { handles, content } = splitHandles(children, InspectorHandle);
130
+ const handle = resizable && pane.shown !== false && !pane.overlaying ? <PaneResizeContext.Provider value={resize}>{handles.length > 0 ? handles : <PaneHandle />}</PaneResizeContext.Provider> : null;
382
131
 
383
- if (isOverlay) {
384
- const open = inspectorMode === 'expanded';
385
- return (
386
- <Sheet.Root open={open} onOpenChange={(o) => setInspectorMode(o ? 'expanded' : 'collapsed')}>
387
- <Sheet.Content side="end" style={{ padding: 0 }} aria-label="Inspector" aria-describedby={undefined} width={{ initial: `${expandedSize}px` }}>
388
- <VisuallyHidden>
389
- <Sheet.Title>Inspector</Sheet.Title>
390
- </VisuallyHidden>
391
- {contentChildren}
392
- </Sheet.Content>
393
- </Sheet.Root>
394
- );
395
- }
396
-
397
- // Strip control/size props from DOM spread
398
132
  return (
399
133
  <div
400
- {...inspectorDomProps}
401
- ref={setRef}
402
- className={classNames('rt-ShellInspector', className)}
403
- data-mode={inspectorMode}
404
- data-peek={peekTarget === 'inspector' || undefined}
405
- data-presentation={currentBreakpointReady ? resolvedPresentation : undefined}
406
- data-open={(currentBreakpointReady && isStacked && isExpanded) || undefined}
134
+ {...withoutRemovedPaneProps(domProps)}
135
+ id={pane.id}
136
+ ref={composedRef}
137
+ className={classNames('rt-ShellPane', 'rt-ShellInspector', className)}
138
+ {...paneAttributes(pane, attributes)}
407
139
  data-inset={inset || undefined}
408
- style={{
409
- ...style,
410
- '--inspector-size': `${expandedSize}px`,
411
- '--inspector-min-size': `${minSize}px`,
412
- '--inspector-max-size': `${maxSize}px`,
413
- } as CSSPropertiesWithVars}
140
+ tabIndex={pane.overlaying ? -1 : domProps.tabIndex}
141
+ style={
142
+ {
143
+ ...style,
144
+ '--inspector-expanded-size': `${expandedSize}px`,
145
+ '--inspector-min-size': `${minSize}px`,
146
+ '--inspector-max-size': `${maxSize}px`,
147
+ } as CSSPropertiesWithVars
148
+ }
414
149
  >
415
- <div className="rt-ShellInspectorContent" data-visible={isExpanded || undefined}>
416
- {contentChildren}
417
- </div>
418
- {handleEl}
150
+ <div className="rt-ShellInspectorContent">{content}</div>
151
+ {handle}
419
152
  </div>
420
153
  );
421
154
  }) as InspectorComponent;