@kushagradhawan/kookie-ui 0.3.21 → 0.3.23

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 (548) hide show
  1. package/components.css +264 -329
  2. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  3. package/dist/cjs/components/_internal/base-button.js +1 -1
  4. package/dist/cjs/components/_internal/base-button.js.map +4 -4
  5. package/dist/cjs/components/_internal/dropdown-menu-drill-down.js +1 -1
  6. package/dist/cjs/components/_internal/dropdown-menu-drill-down.js.map +3 -3
  7. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  8. package/dist/cjs/components/_internal/shell-bottom.js.map +4 -4
  9. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  10. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  11. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  12. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  13. package/dist/cjs/components/_internal/shell-inspector.js.map +4 -4
  14. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  15. package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
  16. package/dist/cjs/components/accordion.d.ts.map +1 -1
  17. package/dist/cjs/components/accordion.js +1 -1
  18. package/dist/cjs/components/accordion.js.map +4 -4
  19. package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
  20. package/dist/cjs/components/alert-dialog.js +1 -1
  21. package/dist/cjs/components/alert-dialog.js.map +4 -4
  22. package/dist/cjs/components/avatar.js +1 -1
  23. package/dist/cjs/components/avatar.js.map +4 -4
  24. package/dist/cjs/components/badge.d.ts.map +1 -1
  25. package/dist/cjs/components/badge.js +1 -1
  26. package/dist/cjs/components/badge.js.map +4 -4
  27. package/dist/cjs/components/blockquote.js +1 -1
  28. package/dist/cjs/components/blockquote.js.map +4 -4
  29. package/dist/cjs/components/box.js +1 -1
  30. package/dist/cjs/components/box.js.map +4 -4
  31. package/dist/cjs/components/button.js +1 -1
  32. package/dist/cjs/components/button.js.map +4 -4
  33. package/dist/cjs/components/callout.js +1 -1
  34. package/dist/cjs/components/callout.js.map +4 -4
  35. package/dist/cjs/components/card.js +1 -1
  36. package/dist/cjs/components/card.js.map +4 -4
  37. package/dist/cjs/components/chatbar.js +2 -2
  38. package/dist/cjs/components/chatbar.js.map +4 -4
  39. package/dist/cjs/components/checkbox-cards.js +1 -1
  40. package/dist/cjs/components/checkbox-cards.js.map +4 -4
  41. package/dist/cjs/components/checkbox-group.js +1 -1
  42. package/dist/cjs/components/checkbox-group.js.map +4 -4
  43. package/dist/cjs/components/checkbox.js +1 -1
  44. package/dist/cjs/components/checkbox.js.map +4 -4
  45. package/dist/cjs/components/code.js +1 -1
  46. package/dist/cjs/components/code.js.map +4 -4
  47. package/dist/cjs/components/combobox.js +1 -1
  48. package/dist/cjs/components/combobox.js.map +4 -4
  49. package/dist/cjs/components/container.js +1 -1
  50. package/dist/cjs/components/container.js.map +4 -4
  51. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  52. package/dist/cjs/components/context-menu.js +1 -1
  53. package/dist/cjs/components/context-menu.js.map +4 -4
  54. package/dist/cjs/components/data-list.js +1 -1
  55. package/dist/cjs/components/data-list.js.map +4 -4
  56. package/dist/cjs/components/dialog.d.ts.map +1 -1
  57. package/dist/cjs/components/dialog.js +1 -1
  58. package/dist/cjs/components/dialog.js.map +4 -4
  59. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  60. package/dist/cjs/components/dropdown-menu.js +1 -1
  61. package/dist/cjs/components/dropdown-menu.js.map +4 -4
  62. package/dist/cjs/components/em.js +1 -1
  63. package/dist/cjs/components/em.js.map +4 -4
  64. package/dist/cjs/components/flex.js +1 -1
  65. package/dist/cjs/components/flex.js.map +4 -4
  66. package/dist/cjs/components/grid.js +1 -1
  67. package/dist/cjs/components/grid.js.map +4 -4
  68. package/dist/cjs/components/heading.js +1 -1
  69. package/dist/cjs/components/heading.js.map +4 -4
  70. package/dist/cjs/components/hover-card.js +1 -1
  71. package/dist/cjs/components/hover-card.js.map +4 -4
  72. package/dist/cjs/components/icon-button.js +2 -2
  73. package/dist/cjs/components/icon-button.js.map +4 -4
  74. package/dist/cjs/components/image.js +1 -1
  75. package/dist/cjs/components/image.js.map +4 -4
  76. package/dist/cjs/components/index.js +5 -5
  77. package/dist/cjs/components/index.js.map +4 -4
  78. package/dist/cjs/components/inset.js +1 -1
  79. package/dist/cjs/components/inset.js.map +4 -4
  80. package/dist/cjs/components/kbd.js +1 -1
  81. package/dist/cjs/components/kbd.js.map +4 -4
  82. package/dist/cjs/components/link.js +1 -1
  83. package/dist/cjs/components/link.js.map +4 -4
  84. package/dist/cjs/components/navbar.js +1 -1
  85. package/dist/cjs/components/navbar.js.map +4 -4
  86. package/dist/cjs/components/popover.js +1 -1
  87. package/dist/cjs/components/popover.js.map +4 -4
  88. package/dist/cjs/components/progress.js +1 -1
  89. package/dist/cjs/components/progress.js.map +4 -4
  90. package/dist/cjs/components/quote.js +1 -1
  91. package/dist/cjs/components/quote.js.map +4 -4
  92. package/dist/cjs/components/radio-cards.js +1 -1
  93. package/dist/cjs/components/radio-cards.js.map +4 -4
  94. package/dist/cjs/components/radio-group.js +1 -1
  95. package/dist/cjs/components/radio-group.js.map +4 -4
  96. package/dist/cjs/components/radio.js +1 -1
  97. package/dist/cjs/components/radio.js.map +4 -4
  98. package/dist/cjs/components/schemas/base-button.schema.d.ts +2 -2
  99. package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
  100. package/dist/cjs/components/schemas/icon-button.schema.d.ts +4 -4
  101. package/dist/cjs/components/schemas/shell.schema.d.ts +2 -2
  102. package/dist/cjs/components/schemas/toggle-button.schema.d.ts +6 -6
  103. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +8 -8
  104. package/dist/cjs/components/scroll-area.js +1 -1
  105. package/dist/cjs/components/scroll-area.js.map +4 -4
  106. package/dist/cjs/components/section.js +1 -1
  107. package/dist/cjs/components/section.js.map +4 -4
  108. package/dist/cjs/components/segmented-control.js +1 -1
  109. package/dist/cjs/components/segmented-control.js.map +4 -4
  110. package/dist/cjs/components/select.js +1 -1
  111. package/dist/cjs/components/select.js.map +4 -4
  112. package/dist/cjs/components/separator.js +1 -1
  113. package/dist/cjs/components/separator.js.map +4 -4
  114. package/dist/cjs/components/sheet.d.ts.map +1 -1
  115. package/dist/cjs/components/sheet.js +1 -1
  116. package/dist/cjs/components/sheet.js.map +4 -4
  117. package/dist/cjs/components/shell.d.ts.map +1 -1
  118. package/dist/cjs/components/shell.js +1 -1
  119. package/dist/cjs/components/shell.js.map +4 -4
  120. package/dist/cjs/components/sidebar.js +1 -1
  121. package/dist/cjs/components/sidebar.js.map +4 -4
  122. package/dist/cjs/components/skeleton.js +1 -1
  123. package/dist/cjs/components/skeleton.js.map +4 -4
  124. package/dist/cjs/components/slider.js +1 -1
  125. package/dist/cjs/components/slider.js.map +4 -4
  126. package/dist/cjs/components/spinner.js +1 -1
  127. package/dist/cjs/components/spinner.js.map +4 -4
  128. package/dist/cjs/components/strong.js +1 -1
  129. package/dist/cjs/components/strong.js.map +4 -4
  130. package/dist/cjs/components/switch.js +1 -1
  131. package/dist/cjs/components/switch.js.map +4 -4
  132. package/dist/cjs/components/tab-nav.js +1 -1
  133. package/dist/cjs/components/tab-nav.js.map +4 -4
  134. package/dist/cjs/components/table.js +1 -1
  135. package/dist/cjs/components/table.js.map +4 -4
  136. package/dist/cjs/components/tabs.js +1 -1
  137. package/dist/cjs/components/tabs.js.map +4 -4
  138. package/dist/cjs/components/text-area.js +1 -1
  139. package/dist/cjs/components/text-area.js.map +4 -4
  140. package/dist/cjs/components/text-field.js +2 -2
  141. package/dist/cjs/components/text-field.js.map +4 -4
  142. package/dist/cjs/components/text.js +1 -1
  143. package/dist/cjs/components/text.js.map +4 -4
  144. package/dist/cjs/components/theme-panel.js +3 -3
  145. package/dist/cjs/components/theme-panel.js.map +4 -4
  146. package/dist/cjs/components/theme.d.ts.map +1 -1
  147. package/dist/cjs/components/theme.js +1 -1
  148. package/dist/cjs/components/theme.js.map +4 -4
  149. package/dist/cjs/components/toggle-button.js +2 -2
  150. package/dist/cjs/components/toggle-button.js.map +4 -4
  151. package/dist/cjs/components/toggle-icon-button.js +3 -3
  152. package/dist/cjs/components/toggle-icon-button.js.map +4 -4
  153. package/dist/cjs/components/toolbar.js +1 -1
  154. package/dist/cjs/components/toolbar.js.map +4 -4
  155. package/dist/cjs/components/tooltip.js +1 -1
  156. package/dist/cjs/components/tooltip.js.map +4 -4
  157. package/dist/cjs/components/user-card.js +1 -1
  158. package/dist/cjs/components/user-card.js.map +4 -4
  159. package/dist/cjs/helpers/compile-prop-defs.d.ts +49 -0
  160. package/dist/cjs/helpers/compile-prop-defs.d.ts.map +1 -0
  161. package/dist/cjs/helpers/compile-prop-defs.js +2 -0
  162. package/dist/cjs/helpers/compile-prop-defs.js.map +7 -0
  163. package/dist/cjs/helpers/extract-props.d.ts.map +1 -1
  164. package/dist/cjs/helpers/extract-props.js +1 -1
  165. package/dist/cjs/helpers/extract-props.js.map +4 -4
  166. package/dist/cjs/helpers/get-margin-styles.d.ts.map +1 -1
  167. package/dist/cjs/helpers/get-margin-styles.js +1 -1
  168. package/dist/cjs/helpers/get-margin-styles.js.map +3 -3
  169. package/dist/cjs/helpers/get-responsive-styles.d.ts +5 -2
  170. package/dist/cjs/helpers/get-responsive-styles.d.ts.map +1 -1
  171. package/dist/cjs/helpers/get-responsive-styles.js +1 -1
  172. package/dist/cjs/helpers/get-responsive-styles.js.map +3 -3
  173. package/dist/cjs/helpers/index.js +2 -2
  174. package/dist/cjs/helpers/index.js.map +4 -4
  175. package/dist/cjs/helpers/use-deprecation-warning.d.ts +10 -0
  176. package/dist/cjs/helpers/use-deprecation-warning.d.ts.map +1 -0
  177. package/dist/cjs/helpers/use-deprecation-warning.js +2 -0
  178. package/dist/cjs/helpers/use-deprecation-warning.js.map +7 -0
  179. package/dist/cjs/hooks/index.js +2 -2
  180. package/dist/cjs/hooks/index.js.map +3 -3
  181. package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -1
  182. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js +1 -1
  183. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js.map +3 -3
  184. package/dist/cjs/hooks/use-breakpoint.d.ts +7 -3
  185. package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
  186. package/dist/cjs/hooks/use-breakpoint.js +1 -1
  187. package/dist/cjs/hooks/use-breakpoint.js.map +3 -3
  188. package/dist/cjs/hooks/use-prop-synced-state.d.ts +14 -0
  189. package/dist/cjs/hooks/use-prop-synced-state.d.ts.map +1 -0
  190. package/dist/cjs/hooks/use-prop-synced-state.js +2 -0
  191. package/dist/cjs/hooks/use-prop-synced-state.js.map +7 -0
  192. package/dist/cjs/index.js +5 -5
  193. package/dist/cjs/index.js.map +4 -4
  194. package/dist/esm/{chunk-RQ2ZPMHJ.js → chunk-22HGLMPQ.js} +2 -2
  195. package/dist/esm/{chunk-WYA4IRU6.js → chunk-25WZA7ZU.js} +2 -2
  196. package/dist/esm/chunk-2UPAYDKR.js +2 -0
  197. package/dist/esm/chunk-2UPAYDKR.js.map +7 -0
  198. package/dist/esm/{chunk-XHQGMOXV.js → chunk-36ZQVP7F.js} +2 -2
  199. package/dist/esm/{chunk-K3R4AH3E.js → chunk-3MWWP4MW.js} +2 -2
  200. package/dist/esm/{chunk-HQ35PM4O.js → chunk-43A5GUSI.js} +2 -2
  201. package/dist/esm/{chunk-Z5DQ6FSA.js → chunk-4AQTUBVP.js} +2 -2
  202. package/dist/esm/{chunk-25U7DENY.js → chunk-4BBOHEF4.js} +2 -2
  203. package/dist/esm/chunk-4CKDU6FY.js +2 -0
  204. package/dist/esm/chunk-4CKDU6FY.js.map +7 -0
  205. package/dist/esm/{chunk-ZSEFZM5H.js → chunk-4IY2PR6N.js} +2 -2
  206. package/dist/esm/{chunk-QLIELX4I.js → chunk-4ME6O27S.js} +2 -2
  207. package/dist/esm/chunk-4XJY6FIK.js +2 -0
  208. package/dist/esm/chunk-4XJY6FIK.js.map +7 -0
  209. package/dist/esm/{chunk-JQOFJNCV.js → chunk-4YFJWXL2.js} +2 -2
  210. package/dist/esm/{chunk-DNI4QRXQ.js → chunk-5IBGFL6O.js} +2 -2
  211. package/dist/esm/chunk-5TXQLK4G.js +2 -0
  212. package/dist/esm/chunk-5TXQLK4G.js.map +7 -0
  213. package/dist/esm/{chunk-IPJUHVM6.js → chunk-666GX7O5.js} +2 -2
  214. package/dist/esm/chunk-6FLLFCBU.js +2 -0
  215. package/dist/esm/chunk-6FLLFCBU.js.map +7 -0
  216. package/dist/esm/{chunk-DJBPM5QK.js → chunk-7FC7HF76.js} +2 -2
  217. package/dist/esm/{chunk-SVLY6B5F.js → chunk-7QDTSBJF.js} +2 -2
  218. package/dist/esm/chunk-AX5S56DS.js +2 -0
  219. package/dist/esm/chunk-AX5S56DS.js.map +7 -0
  220. package/dist/esm/{chunk-DK5MHD6I.js → chunk-B24BDVG2.js} +2 -2
  221. package/dist/esm/{chunk-WZCZHCVE.js → chunk-BJYUPIXO.js} +2 -2
  222. package/dist/esm/{chunk-BJTJUIYJ.js → chunk-CRWYCLTE.js} +2 -2
  223. package/dist/esm/{chunk-OHJVFZMH.js → chunk-CSKZZOI2.js} +2 -2
  224. package/dist/esm/chunk-D5N627TH.js +2 -0
  225. package/dist/esm/chunk-D5N627TH.js.map +7 -0
  226. package/dist/esm/{chunk-ADYTQCZX.js → chunk-D6B7IMZU.js} +2 -2
  227. package/dist/esm/chunk-DL2O3GKG.js +2 -0
  228. package/dist/esm/chunk-DL2O3GKG.js.map +7 -0
  229. package/dist/esm/{chunk-USGTBZ43.js → chunk-E67CIG6A.js} +2 -2
  230. package/dist/esm/{chunk-42HFGCHX.js → chunk-ETMLMDW4.js} +2 -2
  231. package/dist/esm/{chunk-7CBAHIVG.js → chunk-F2HYQ3ZR.js} +2 -2
  232. package/dist/esm/{chunk-YUZPSUJE.js → chunk-F7IYL2VW.js} +2 -2
  233. package/dist/esm/{chunk-FVCWNSRU.js → chunk-FHOCUZDR.js} +2 -2
  234. package/dist/esm/{chunk-7MURQ6CR.js → chunk-FLFAXVFB.js} +2 -2
  235. package/dist/esm/{chunk-APRBRAOT.js → chunk-FOEZLQTW.js} +2 -2
  236. package/dist/esm/{chunk-WNSPLWRV.js → chunk-GJSGKE7B.js} +2 -2
  237. package/dist/esm/{chunk-OGOOZLUD.js → chunk-GLERJXVS.js} +2 -2
  238. package/dist/esm/{chunk-6VGPTAHM.js → chunk-GWXVETMF.js} +2 -2
  239. package/dist/esm/{chunk-ES7MK2MM.js → chunk-GYBLXQ4R.js} +2 -2
  240. package/dist/esm/{chunk-4OBMRJHC.js → chunk-H7ST535H.js} +2 -2
  241. package/dist/esm/{chunk-QLZ5XAW6.js → chunk-HF5WY5YE.js} +2 -2
  242. package/dist/esm/chunk-ICIGZ3N7.js +2 -0
  243. package/dist/esm/chunk-ICIGZ3N7.js.map +7 -0
  244. package/dist/esm/{chunk-RDP4UQ42.js → chunk-IEWCQU2S.js} +2 -2
  245. package/dist/esm/{chunk-XLOHPURR.js → chunk-IHK3H2OM.js} +2 -2
  246. package/dist/esm/{chunk-3F6I7YOR.js → chunk-JDGJSNWT.js} +2 -2
  247. package/dist/esm/chunk-JQQIPEGY.js +2 -0
  248. package/dist/esm/chunk-JQQIPEGY.js.map +7 -0
  249. package/dist/esm/chunk-JR2YOGII.js +2 -0
  250. package/dist/esm/chunk-JR2YOGII.js.map +7 -0
  251. package/dist/esm/chunk-JUY7CBSL.js +2 -0
  252. package/dist/esm/chunk-JUY7CBSL.js.map +7 -0
  253. package/dist/esm/{chunk-VF5TRT3H.js → chunk-KKM6T5P7.js} +2 -2
  254. package/dist/esm/{chunk-ZHYOJNWV.js → chunk-LKAK5GXF.js} +2 -2
  255. package/dist/esm/chunk-LOGJJF4I.js +2 -0
  256. package/dist/esm/chunk-LOGJJF4I.js.map +7 -0
  257. package/dist/esm/{chunk-JCYI4NTV.js → chunk-MBCBP73P.js} +2 -2
  258. package/dist/esm/{chunk-UYNYUR7O.js → chunk-MBE2YSBU.js} +2 -2
  259. package/dist/esm/chunk-MHANZINI.js +2 -0
  260. package/dist/esm/chunk-MHANZINI.js.map +7 -0
  261. package/dist/esm/chunk-MRECKC4D.js +2 -0
  262. package/dist/esm/chunk-MRECKC4D.js.map +7 -0
  263. package/dist/esm/{chunk-H2G446JG.js → chunk-NMKPFUNP.js} +2 -2
  264. package/dist/esm/{chunk-4N5JU7XQ.js → chunk-O3CDWEZA.js} +2 -2
  265. package/dist/esm/{chunk-TEULZKBM.js → chunk-OGXZHAQL.js} +2 -2
  266. package/dist/esm/{chunk-2AEELIG6.js → chunk-OWAUCLRT.js} +2 -2
  267. package/dist/esm/{chunk-7CXVHFMQ.js → chunk-P7HYVJSU.js} +2 -2
  268. package/dist/esm/{chunk-4532RT2B.js → chunk-P7IAHW4V.js} +2 -2
  269. package/dist/esm/{chunk-M3ZYJANH.js → chunk-PQZXQ4ST.js} +2 -2
  270. package/dist/esm/{chunk-SGU4HUHF.js → chunk-PTLFMWCN.js} +2 -2
  271. package/dist/esm/chunk-S2HA3W3V.js +2 -0
  272. package/dist/esm/chunk-S2HA3W3V.js.map +7 -0
  273. package/dist/esm/{chunk-E6IWYD3U.js → chunk-S5C5YRBS.js} +2 -2
  274. package/dist/esm/{chunk-A24PYRVV.js → chunk-SO67YEVQ.js} +2 -2
  275. package/dist/esm/chunk-TLWTUKKL.js +2 -0
  276. package/dist/esm/chunk-TLWTUKKL.js.map +7 -0
  277. package/dist/esm/{chunk-HACQF6F4.js → chunk-TOOSHJOA.js} +2 -2
  278. package/dist/esm/{chunk-QOWA5LK5.js → chunk-U2X2CAW4.js} +2 -2
  279. package/dist/esm/{chunk-U7AASKZI.js → chunk-UVCH7QKO.js} +2 -2
  280. package/dist/esm/{chunk-GWYFT3EI.js → chunk-VLO7NXSP.js} +2 -2
  281. package/dist/esm/{chunk-DXI5P5O4.js → chunk-VX6ARMWP.js} +2 -2
  282. package/dist/esm/chunk-WAURCNAS.js +2 -0
  283. package/dist/esm/chunk-WAURCNAS.js.map +7 -0
  284. package/dist/esm/{chunk-EJWAAFCI.js → chunk-WO43WW3A.js} +2 -2
  285. package/dist/esm/{chunk-GLC4QJBF.js → chunk-WTYNFBFV.js} +2 -2
  286. package/dist/esm/{chunk-6FAICIYS.js → chunk-XMRIRFM7.js} +2 -2
  287. package/dist/esm/chunk-YV2KYHGR.js +2 -0
  288. package/dist/esm/chunk-YV2KYHGR.js.map +7 -0
  289. package/dist/esm/{chunk-UIEUZLZZ.js → chunk-ZY6SQWHT.js} +2 -2
  290. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  291. package/dist/esm/components/_internal/base-button.js +1 -1
  292. package/dist/esm/components/_internal/dropdown-menu-drill-down.js +1 -1
  293. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  294. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  295. package/dist/esm/components/_internal/shell-handles.js +1 -1
  296. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  297. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  298. package/dist/esm/components/accordion.d.ts.map +1 -1
  299. package/dist/esm/components/accordion.js +1 -1
  300. package/dist/esm/components/alert-dialog.d.ts.map +1 -1
  301. package/dist/esm/components/alert-dialog.js +1 -1
  302. package/dist/esm/components/avatar.js +1 -1
  303. package/dist/esm/components/badge.d.ts.map +1 -1
  304. package/dist/esm/components/badge.js +1 -1
  305. package/dist/esm/components/blockquote.js +1 -1
  306. package/dist/esm/components/box.js +1 -1
  307. package/dist/esm/components/button.js +1 -1
  308. package/dist/esm/components/callout.js +1 -1
  309. package/dist/esm/components/card.js +1 -1
  310. package/dist/esm/components/chatbar.js +1 -1
  311. package/dist/esm/components/checkbox-cards.js +1 -1
  312. package/dist/esm/components/checkbox-group.js +1 -1
  313. package/dist/esm/components/checkbox.js +1 -1
  314. package/dist/esm/components/code.js +1 -1
  315. package/dist/esm/components/combobox.js +1 -1
  316. package/dist/esm/components/container.js +1 -1
  317. package/dist/esm/components/context-menu.d.ts.map +1 -1
  318. package/dist/esm/components/context-menu.js +1 -1
  319. package/dist/esm/components/data-list.js +1 -1
  320. package/dist/esm/components/dialog.d.ts.map +1 -1
  321. package/dist/esm/components/dialog.js +1 -1
  322. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  323. package/dist/esm/components/dropdown-menu.js +1 -1
  324. package/dist/esm/components/em.js +1 -1
  325. package/dist/esm/components/flex.js +1 -1
  326. package/dist/esm/components/grid.js +1 -1
  327. package/dist/esm/components/heading.js +1 -1
  328. package/dist/esm/components/hover-card.js +1 -1
  329. package/dist/esm/components/icon-button.js +1 -1
  330. package/dist/esm/components/image.js +1 -1
  331. package/dist/esm/components/index.js +1 -1
  332. package/dist/esm/components/inset.js +1 -1
  333. package/dist/esm/components/kbd.js +1 -1
  334. package/dist/esm/components/link.js +1 -1
  335. package/dist/esm/components/navbar.js +1 -1
  336. package/dist/esm/components/popover.js +1 -1
  337. package/dist/esm/components/progress.js +1 -1
  338. package/dist/esm/components/quote.js +1 -1
  339. package/dist/esm/components/radio-cards.js +1 -1
  340. package/dist/esm/components/radio-group.js +1 -1
  341. package/dist/esm/components/radio.js +1 -1
  342. package/dist/esm/components/schemas/base-button.schema.d.ts +2 -2
  343. package/dist/esm/components/schemas/button.schema.d.ts +2 -2
  344. package/dist/esm/components/schemas/icon-button.schema.d.ts +4 -4
  345. package/dist/esm/components/schemas/shell.schema.d.ts +2 -2
  346. package/dist/esm/components/schemas/toggle-button.schema.d.ts +6 -6
  347. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +8 -8
  348. package/dist/esm/components/scroll-area.js +1 -1
  349. package/dist/esm/components/section.js +1 -1
  350. package/dist/esm/components/segmented-control.js +1 -1
  351. package/dist/esm/components/select.js +1 -1
  352. package/dist/esm/components/separator.js +1 -1
  353. package/dist/esm/components/sheet.d.ts.map +1 -1
  354. package/dist/esm/components/sheet.js +1 -1
  355. package/dist/esm/components/shell.d.ts.map +1 -1
  356. package/dist/esm/components/shell.js +1 -1
  357. package/dist/esm/components/sidebar.js +1 -1
  358. package/dist/esm/components/skeleton.js +1 -1
  359. package/dist/esm/components/slider.js +1 -1
  360. package/dist/esm/components/spinner.js +1 -1
  361. package/dist/esm/components/strong.js +1 -1
  362. package/dist/esm/components/switch.js +1 -1
  363. package/dist/esm/components/tab-nav.js +1 -1
  364. package/dist/esm/components/table.js +1 -1
  365. package/dist/esm/components/tabs.js +1 -1
  366. package/dist/esm/components/text-area.js +1 -1
  367. package/dist/esm/components/text-field.js +1 -1
  368. package/dist/esm/components/text.js +1 -1
  369. package/dist/esm/components/theme-panel.js +1 -1
  370. package/dist/esm/components/theme.d.ts.map +1 -1
  371. package/dist/esm/components/theme.js +1 -1
  372. package/dist/esm/components/toggle-button.js +1 -1
  373. package/dist/esm/components/toggle-icon-button.js +1 -1
  374. package/dist/esm/components/toolbar.js +1 -1
  375. package/dist/esm/components/tooltip.js +1 -1
  376. package/dist/esm/components/user-card.js +1 -1
  377. package/dist/esm/helpers/compile-prop-defs.d.ts +49 -0
  378. package/dist/esm/helpers/compile-prop-defs.d.ts.map +1 -0
  379. package/dist/esm/helpers/compile-prop-defs.js +2 -0
  380. package/dist/esm/helpers/compile-prop-defs.js.map +7 -0
  381. package/dist/esm/helpers/extract-props.d.ts.map +1 -1
  382. package/dist/esm/helpers/extract-props.js +1 -1
  383. package/dist/esm/helpers/get-margin-styles.d.ts.map +1 -1
  384. package/dist/esm/helpers/get-margin-styles.js +1 -1
  385. package/dist/esm/helpers/get-responsive-styles.d.ts +5 -2
  386. package/dist/esm/helpers/get-responsive-styles.d.ts.map +1 -1
  387. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  388. package/dist/esm/helpers/index.js +1 -1
  389. package/dist/esm/helpers/use-deprecation-warning.d.ts +10 -0
  390. package/dist/esm/helpers/use-deprecation-warning.d.ts.map +1 -0
  391. package/dist/esm/helpers/use-deprecation-warning.js +2 -0
  392. package/dist/esm/helpers/use-deprecation-warning.js.map +7 -0
  393. package/dist/esm/hooks/index.js +1 -1
  394. package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -1
  395. package/dist/esm/hooks/use-body-pointer-events-cleanup.js +1 -1
  396. package/dist/esm/hooks/use-breakpoint.d.ts +7 -3
  397. package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
  398. package/dist/esm/hooks/use-breakpoint.js +1 -1
  399. package/dist/esm/hooks/use-prop-synced-state.d.ts +14 -0
  400. package/dist/esm/hooks/use-prop-synced-state.d.ts.map +1 -0
  401. package/dist/esm/hooks/use-prop-synced-state.js +2 -0
  402. package/dist/esm/hooks/use-prop-synced-state.js.map +7 -0
  403. package/dist/esm/index.js +1 -1
  404. package/package.json +2 -1
  405. package/schemas/base-button.json +0 -1
  406. package/schemas/button.json +0 -1
  407. package/schemas/icon-button.json +0 -1
  408. package/schemas/index.json +0 -6
  409. package/schemas/toggle-button.json +0 -1
  410. package/schemas/toggle-icon-button.json +0 -1
  411. package/src/components/_internal/base-button.css +2 -2
  412. package/src/components/_internal/base-button.tsx +3 -58
  413. package/src/components/_internal/base-card.css +19 -4
  414. package/src/components/_internal/base-checkbox.css +2 -2
  415. package/src/components/_internal/base-dialog.css +7 -13
  416. package/src/components/_internal/base-menu.css +7 -0
  417. package/src/components/_internal/base-radio.css +2 -2
  418. package/src/components/_internal/base-sidebar.css +7 -0
  419. package/src/components/_internal/base-tab-list.css +2 -2
  420. package/src/components/_internal/shell-handles.tsx +27 -0
  421. package/src/components/accordion.css +6 -6
  422. package/src/components/accordion.tsx +2 -8
  423. package/src/components/alert-dialog.tsx +22 -20
  424. package/src/components/avatar.css +2 -2
  425. package/src/components/badge.css +2 -2
  426. package/src/components/badge.tsx +2 -8
  427. package/src/components/callout.css +2 -2
  428. package/src/components/chatbar.css +1 -1
  429. package/src/components/context-menu.tsx +2 -8
  430. package/src/components/dialog.tsx +46 -72
  431. package/src/components/dropdown-menu.tsx +2 -8
  432. package/src/components/popover.css +7 -0
  433. package/src/components/progress.css +21 -8
  434. package/src/components/segmented-control.css +2 -2
  435. package/src/components/select.css +9 -2
  436. package/src/components/sheet.tsx +31 -28
  437. package/src/components/shell.css +106 -69
  438. package/src/components/shell.tsx +168 -97
  439. package/src/components/slider.css +2 -2
  440. package/src/components/switch.css +2 -2
  441. package/src/components/table.css +7 -0
  442. package/src/components/text-area.css +2 -2
  443. package/src/components/text-field.css +2 -2
  444. package/src/components/theme.tsx +35 -34
  445. package/src/helpers/compile-prop-defs.ts +121 -0
  446. package/src/helpers/extract-props.ts +104 -83
  447. package/src/helpers/get-margin-styles.ts +38 -71
  448. package/src/helpers/get-responsive-styles.ts +37 -38
  449. package/src/helpers/use-deprecation-warning.ts +26 -0
  450. package/src/hooks/use-body-pointer-events-cleanup.ts +36 -6
  451. package/src/hooks/use-breakpoint.ts +94 -53
  452. package/src/hooks/use-prop-synced-state.ts +24 -0
  453. package/src/styles/tokens/blur.css +28 -0
  454. package/src/styles/tokens/color.css +3 -3
  455. package/src/styles/tokens/constants.css +11 -0
  456. package/styles.css +280 -332
  457. package/tokens/base.css +13 -3
  458. package/tokens.css +16 -3
  459. package/dist/esm/chunk-2SS3FA3N.js +0 -2
  460. package/dist/esm/chunk-2SS3FA3N.js.map +0 -7
  461. package/dist/esm/chunk-5U2Q23K3.js +0 -2
  462. package/dist/esm/chunk-5U2Q23K3.js.map +0 -7
  463. package/dist/esm/chunk-6ELPYR73.js +0 -2
  464. package/dist/esm/chunk-6ELPYR73.js.map +0 -7
  465. package/dist/esm/chunk-DZ4H2KTP.js +0 -2
  466. package/dist/esm/chunk-DZ4H2KTP.js.map +0 -7
  467. package/dist/esm/chunk-H4MMVAGQ.js +0 -2
  468. package/dist/esm/chunk-H4MMVAGQ.js.map +0 -7
  469. package/dist/esm/chunk-HURTSXRY.js +0 -2
  470. package/dist/esm/chunk-HURTSXRY.js.map +0 -7
  471. package/dist/esm/chunk-ITRVKLYU.js +0 -2
  472. package/dist/esm/chunk-ITRVKLYU.js.map +0 -7
  473. package/dist/esm/chunk-KCAFSCOV.js +0 -2
  474. package/dist/esm/chunk-KCAFSCOV.js.map +0 -7
  475. package/dist/esm/chunk-KMPBTEZH.js +0 -2
  476. package/dist/esm/chunk-KMPBTEZH.js.map +0 -7
  477. package/dist/esm/chunk-LN5SP46K.js +0 -2
  478. package/dist/esm/chunk-LN5SP46K.js.map +0 -7
  479. package/dist/esm/chunk-Q73Y5O5P.js +0 -2
  480. package/dist/esm/chunk-Q73Y5O5P.js.map +0 -7
  481. package/dist/esm/chunk-RMBS6CAO.js +0 -2
  482. package/dist/esm/chunk-RMBS6CAO.js.map +0 -7
  483. package/dist/esm/chunk-UUX42HBM.js +0 -2
  484. package/dist/esm/chunk-UUX42HBM.js.map +0 -7
  485. package/dist/esm/chunk-X7BD5FLE.js +0 -2
  486. package/dist/esm/chunk-X7BD5FLE.js.map +0 -7
  487. package/dist/esm/chunk-YEA646GM.js +0 -2
  488. package/dist/esm/chunk-YEA646GM.js.map +0 -7
  489. package/dist/esm/chunk-ZMEXIPWM.js +0 -2
  490. package/dist/esm/chunk-ZMEXIPWM.js.map +0 -7
  491. /package/dist/esm/{chunk-RQ2ZPMHJ.js.map → chunk-22HGLMPQ.js.map} +0 -0
  492. /package/dist/esm/{chunk-WYA4IRU6.js.map → chunk-25WZA7ZU.js.map} +0 -0
  493. /package/dist/esm/{chunk-XHQGMOXV.js.map → chunk-36ZQVP7F.js.map} +0 -0
  494. /package/dist/esm/{chunk-K3R4AH3E.js.map → chunk-3MWWP4MW.js.map} +0 -0
  495. /package/dist/esm/{chunk-HQ35PM4O.js.map → chunk-43A5GUSI.js.map} +0 -0
  496. /package/dist/esm/{chunk-Z5DQ6FSA.js.map → chunk-4AQTUBVP.js.map} +0 -0
  497. /package/dist/esm/{chunk-25U7DENY.js.map → chunk-4BBOHEF4.js.map} +0 -0
  498. /package/dist/esm/{chunk-ZSEFZM5H.js.map → chunk-4IY2PR6N.js.map} +0 -0
  499. /package/dist/esm/{chunk-QLIELX4I.js.map → chunk-4ME6O27S.js.map} +0 -0
  500. /package/dist/esm/{chunk-JQOFJNCV.js.map → chunk-4YFJWXL2.js.map} +0 -0
  501. /package/dist/esm/{chunk-DNI4QRXQ.js.map → chunk-5IBGFL6O.js.map} +0 -0
  502. /package/dist/esm/{chunk-IPJUHVM6.js.map → chunk-666GX7O5.js.map} +0 -0
  503. /package/dist/esm/{chunk-DJBPM5QK.js.map → chunk-7FC7HF76.js.map} +0 -0
  504. /package/dist/esm/{chunk-SVLY6B5F.js.map → chunk-7QDTSBJF.js.map} +0 -0
  505. /package/dist/esm/{chunk-DK5MHD6I.js.map → chunk-B24BDVG2.js.map} +0 -0
  506. /package/dist/esm/{chunk-WZCZHCVE.js.map → chunk-BJYUPIXO.js.map} +0 -0
  507. /package/dist/esm/{chunk-BJTJUIYJ.js.map → chunk-CRWYCLTE.js.map} +0 -0
  508. /package/dist/esm/{chunk-OHJVFZMH.js.map → chunk-CSKZZOI2.js.map} +0 -0
  509. /package/dist/esm/{chunk-ADYTQCZX.js.map → chunk-D6B7IMZU.js.map} +0 -0
  510. /package/dist/esm/{chunk-USGTBZ43.js.map → chunk-E67CIG6A.js.map} +0 -0
  511. /package/dist/esm/{chunk-42HFGCHX.js.map → chunk-ETMLMDW4.js.map} +0 -0
  512. /package/dist/esm/{chunk-7CBAHIVG.js.map → chunk-F2HYQ3ZR.js.map} +0 -0
  513. /package/dist/esm/{chunk-YUZPSUJE.js.map → chunk-F7IYL2VW.js.map} +0 -0
  514. /package/dist/esm/{chunk-FVCWNSRU.js.map → chunk-FHOCUZDR.js.map} +0 -0
  515. /package/dist/esm/{chunk-7MURQ6CR.js.map → chunk-FLFAXVFB.js.map} +0 -0
  516. /package/dist/esm/{chunk-APRBRAOT.js.map → chunk-FOEZLQTW.js.map} +0 -0
  517. /package/dist/esm/{chunk-WNSPLWRV.js.map → chunk-GJSGKE7B.js.map} +0 -0
  518. /package/dist/esm/{chunk-OGOOZLUD.js.map → chunk-GLERJXVS.js.map} +0 -0
  519. /package/dist/esm/{chunk-6VGPTAHM.js.map → chunk-GWXVETMF.js.map} +0 -0
  520. /package/dist/esm/{chunk-ES7MK2MM.js.map → chunk-GYBLXQ4R.js.map} +0 -0
  521. /package/dist/esm/{chunk-4OBMRJHC.js.map → chunk-H7ST535H.js.map} +0 -0
  522. /package/dist/esm/{chunk-QLZ5XAW6.js.map → chunk-HF5WY5YE.js.map} +0 -0
  523. /package/dist/esm/{chunk-RDP4UQ42.js.map → chunk-IEWCQU2S.js.map} +0 -0
  524. /package/dist/esm/{chunk-XLOHPURR.js.map → chunk-IHK3H2OM.js.map} +0 -0
  525. /package/dist/esm/{chunk-3F6I7YOR.js.map → chunk-JDGJSNWT.js.map} +0 -0
  526. /package/dist/esm/{chunk-VF5TRT3H.js.map → chunk-KKM6T5P7.js.map} +0 -0
  527. /package/dist/esm/{chunk-ZHYOJNWV.js.map → chunk-LKAK5GXF.js.map} +0 -0
  528. /package/dist/esm/{chunk-JCYI4NTV.js.map → chunk-MBCBP73P.js.map} +0 -0
  529. /package/dist/esm/{chunk-UYNYUR7O.js.map → chunk-MBE2YSBU.js.map} +0 -0
  530. /package/dist/esm/{chunk-H2G446JG.js.map → chunk-NMKPFUNP.js.map} +0 -0
  531. /package/dist/esm/{chunk-4N5JU7XQ.js.map → chunk-O3CDWEZA.js.map} +0 -0
  532. /package/dist/esm/{chunk-TEULZKBM.js.map → chunk-OGXZHAQL.js.map} +0 -0
  533. /package/dist/esm/{chunk-2AEELIG6.js.map → chunk-OWAUCLRT.js.map} +0 -0
  534. /package/dist/esm/{chunk-7CXVHFMQ.js.map → chunk-P7HYVJSU.js.map} +0 -0
  535. /package/dist/esm/{chunk-4532RT2B.js.map → chunk-P7IAHW4V.js.map} +0 -0
  536. /package/dist/esm/{chunk-M3ZYJANH.js.map → chunk-PQZXQ4ST.js.map} +0 -0
  537. /package/dist/esm/{chunk-SGU4HUHF.js.map → chunk-PTLFMWCN.js.map} +0 -0
  538. /package/dist/esm/{chunk-E6IWYD3U.js.map → chunk-S5C5YRBS.js.map} +0 -0
  539. /package/dist/esm/{chunk-A24PYRVV.js.map → chunk-SO67YEVQ.js.map} +0 -0
  540. /package/dist/esm/{chunk-HACQF6F4.js.map → chunk-TOOSHJOA.js.map} +0 -0
  541. /package/dist/esm/{chunk-QOWA5LK5.js.map → chunk-U2X2CAW4.js.map} +0 -0
  542. /package/dist/esm/{chunk-U7AASKZI.js.map → chunk-UVCH7QKO.js.map} +0 -0
  543. /package/dist/esm/{chunk-GWYFT3EI.js.map → chunk-VLO7NXSP.js.map} +0 -0
  544. /package/dist/esm/{chunk-DXI5P5O4.js.map → chunk-VX6ARMWP.js.map} +0 -0
  545. /package/dist/esm/{chunk-EJWAAFCI.js.map → chunk-WO43WW3A.js.map} +0 -0
  546. /package/dist/esm/{chunk-GLC4QJBF.js.map → chunk-WTYNFBFV.js.map} +0 -0
  547. /package/dist/esm/{chunk-6FAICIYS.js.map → chunk-XMRIRFM7.js.map} +0 -0
  548. /package/dist/esm/{chunk-UIEUZLZZ.js.map → chunk-ZY6SQWHT.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{a as s}from"./chunk-VK7RNXUO.js";import{a as n}from"./chunk-7CBAHIVG.js";import*as e from"react";import{Toggle as f}from"radix-ui";var m=e.forwardRef(({pressed:o,onPressedChange:r,defaultPressed:a,children:t,...g},p)=>{let l=e.useCallback(()=>typeof t=="string"?t:e.isValidElement(t)&&typeof t.props?.children=="string"?t.props.children:"Toggle button",[t]),{handlePressedChange:u}=s({pressed:o,onPressedChange:r,getAccessibleName:l,componentName:"ToggleButton"});return e.createElement(f.Root,{pressed:o,onPressedChange:u,defaultPressed:a,asChild:!0},e.createElement(n,{...g,ref:p},t))});m.displayName="ToggleButton";export{m as a};
2
- //# sourceMappingURL=chunk-RQ2ZPMHJ.js.map
1
+ import{a as s}from"./chunk-VK7RNXUO.js";import{a as n}from"./chunk-F2HYQ3ZR.js";import*as e from"react";import{Toggle as f}from"radix-ui";var m=e.forwardRef(({pressed:o,onPressedChange:r,defaultPressed:a,children:t,...g},p)=>{let l=e.useCallback(()=>typeof t=="string"?t:e.isValidElement(t)&&typeof t.props?.children=="string"?t.props.children:"Toggle button",[t]),{handlePressedChange:u}=s({pressed:o,onPressedChange:r,getAccessibleName:l,componentName:"ToggleButton"});return e.createElement(f.Root,{pressed:o,onPressedChange:u,defaultPressed:a,asChild:!0},e.createElement(n,{...g,ref:p},t))});m.displayName="ToggleButton";export{m as a};
2
+ //# sourceMappingURL=chunk-22HGLMPQ.js.map
@@ -1,2 +1,2 @@
1
- import{a,b as i}from"./chunk-IX5HIHVI.js";import{a as c}from"./chunk-GSTOGDAJ.js";import{a as t}from"./chunk-KMPBTEZH.js";import{a as p}from"./chunk-UMX5MGLG.js";import*as e from"react";import P from"classnames";import{Checkbox as s}from"radix-ui";import{useControllableState as b}from"radix-ui/internal";var y=e.forwardRef((h,m)=>{let{className:n,color:k,material:C,checked:f,defaultChecked:o,onCheckedChange:d,...l}=t(h,p,c),[r,x]=b({prop:f,defaultProp:o??!1,onChange:d});return e.createElement(s.Root,{"data-accent-color":k,"data-material":C,...l,defaultChecked:o,checked:r,onCheckedChange:x,asChild:!1,ref:m,className:P("rt-reset","rt-BaseCheckboxRoot","rt-CheckboxRoot",n)},e.createElement(s.Indicator,{asChild:!0,className:"rt-BaseCheckboxIndicator rt-CheckboxIndicator"},r==="indeterminate"?e.createElement(a,null):e.createElement(i,null)))});y.displayName="Checkbox";export{y as a};
2
- //# sourceMappingURL=chunk-WYA4IRU6.js.map
1
+ import{a,b as i}from"./chunk-IX5HIHVI.js";import{a as c}from"./chunk-GSTOGDAJ.js";import{a as t}from"./chunk-6FLLFCBU.js";import{a as p}from"./chunk-UMX5MGLG.js";import*as e from"react";import P from"classnames";import{Checkbox as s}from"radix-ui";import{useControllableState as b}from"radix-ui/internal";var y=e.forwardRef((h,m)=>{let{className:n,color:k,material:C,checked:f,defaultChecked:o,onCheckedChange:d,...l}=t(h,p,c),[r,x]=b({prop:f,defaultProp:o??!1,onChange:d});return e.createElement(s.Root,{"data-accent-color":k,"data-material":C,...l,defaultChecked:o,checked:r,onCheckedChange:x,asChild:!1,ref:m,className:P("rt-reset","rt-BaseCheckboxRoot","rt-CheckboxRoot",n)},e.createElement(s.Indicator,{asChild:!0,className:"rt-BaseCheckboxIndicator rt-CheckboxIndicator"},r==="indeterminate"?e.createElement(a,null):e.createElement(i,null)))});y.displayName="Checkbox";export{y as a};
2
+ //# sourceMappingURL=chunk-25WZA7ZU.js.map
@@ -0,0 +1,2 @@
1
+ import{a as f}from"./chunk-HF5WY5YE.js";import{a as c}from"./chunk-FHOCUZDR.js";import{a as b,c as P}from"./chunk-5T6K7VPP.js";import{a as B}from"./chunk-AGAQC4HH.js";import{a as y}from"./chunk-5TXQLK4G.js";import{a as m}from"./chunk-GSTOGDAJ.js";import{a as u}from"./chunk-6FLLFCBU.js";import{a as i}from"./chunk-D2AZAGGP.js";import*as e from"react";import S from"classnames";import{Slot as j}from"radix-ui";var I=e.forwardRef((o,g)=>{let{size:h=i.size.default}=o,{className:R,children:t,asChild:n,as:a,color:x,radius:C,material:k,panelBackground:w,flush:D,disabled:p=o.loading,...d}=u(o,i,m);y(o.panelBackground);let l=k??w,E=n?j.Root:a||"button",T=n||!a||["button","input","textarea","select"].includes(a),v=!n&&(!a||a==="button"),M="type"in d,z=e.useId(),s=o.loading?`${z}-loading`:void 0,r=e.useMemo(()=>typeof t=="string"?t:e.isValidElement(t)&&typeof t.props?.children=="string"?t.props.children:"button",[t]),N=e.useMemo(()=>o.loading?{"aria-busy":!0,"aria-disabled":!0,"aria-describedby":s,"aria-label":`${r} (loading)`}:{},[o.loading,s,r]);return e.createElement(E,{"data-disabled":p||void 0,"data-accent-color":x,"data-radius":C,"data-material":l,"data-panel-background":l,"data-flush":D?"true":void 0,...d,...N,ref:g,className:S("rt-reset","rt-BaseButton",R),...T&&{disabled:p},...v&&!M?{type:"button"}:{}},o.loading?e.createElement(e.Fragment,null,e.createElement("span",{style:{display:"contents",visibility:"hidden"},"aria-hidden":!0},t),e.createElement(B,null,e.createElement("span",{id:s},r," is loading, please wait..."),t),e.createElement(c,{asChild:!0,align:"center",justify:"center",position:"absolute",inset:"0"},e.createElement("span",null,e.createElement(f,{size:b(h,P),"aria-hidden":"true"})))):t)});I.displayName="BaseButton";export{I as a};
2
+ //# sourceMappingURL=chunk-2UPAYDKR.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/_internal/base-button.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\n\nimport { baseButtonPropDefs } from './base-button.props.js';\nimport { Flex } from '../flex.js';\nimport { Spinner } from '../spinner.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { extractProps } from '../../helpers/extract-props.js';\nimport { useDeprecatedPanelBackgroundWarning } from '../../helpers/use-deprecation-warning.js';\nimport { mapResponsiveProp, mapButtonSizeToSpinnerSize } from '../../helpers/map-prop-values.js';\nimport { marginPropDefs } from '../../props/margin.props.js';\n\nimport type { MarginProps } from '../../props/margin.props.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../../props/prop-def.js';\n\ntype BaseButtonElement = React.ElementRef<'button'>;\ntype BaseButtonOwnProps = GetPropDefTypes<typeof baseButtonPropDefs>;\n\n/**\n * Polymorphic BaseButton props that support rendering as different HTML elements\n * Uses the proper ComponentPropsWithout pattern for type safety\n * @template C - The element type to render as (defaults to 'button')\n */\ntype PolymorphicBaseButtonProps<C extends React.ElementType = 'button'> = {\n /** Element type to render as (e.g., 'a', 'span', etc.) */\n as?: C;\n} & BaseButtonOwnProps &\n MarginProps &\n ComponentPropsWithout<C, RemovedProps | keyof BaseButtonOwnProps | keyof MarginProps | 'as'>;\n\n/**\n * BaseButton props interface that combines all available props\n */\ninterface BaseButtonProps extends PolymorphicBaseButtonProps {}\n\n/**\n * BaseButton component that provides the core button functionality\n *\n * This is the foundational button component that handles all the complex logic\n * including loading states, accessibility, performance optimizations, and\n * polymorphic rendering. It's used by Button, IconButton, and other button\n * variants to ensure consistent behavior across the design system.\n *\n * Key features:\n * - Loading state with spinner and accessibility announcements\n * - Performance optimizations for backdrop-filter effects\n * - Comprehensive accessibility support\n * - Polymorphic rendering support\n * - Material/panel background handling\n *\n * @example\n * ```tsx\n * // Basic usage\n * <BaseButton>Click me</BaseButton>\n *\n * // With loading state\n * <BaseButton loading>Processing...</BaseButton>\n *\n * // Polymorphic rendering\n * <BaseButton as=\"a\" href=\"/link\">Link Button</BaseButton>\n * ```\n */\nconst BaseButton = React.forwardRef<BaseButtonElement, BaseButtonProps>((props, forwardedRef) => {\n const { size = baseButtonPropDefs.size.default } = props;\n\n // Extract button-specific props from the combined props object\n const {\n className,\n children,\n asChild,\n as,\n color,\n radius,\n material,\n panelBackground,\n flush,\n disabled = props.loading, // Loading state automatically disables the button\n ...baseButtonProps\n } = extractProps(props, baseButtonPropDefs, marginPropDefs);\n\n useDeprecatedPanelBackgroundWarning(props.panelBackground);\n\n // Material takes precedence over panelBackground for backward compatibility\n const effectiveMaterial = material ?? panelBackground;\n\n // asChild takes precedence over as prop for Radix Slot integration\n // When asChild is true, we use Slot.Root to merge props onto the child element\n // When asChild is false, we render as the specified element (or button by default)\n const Comp = asChild ? Slot.Root : (as || 'button');\n\n // Only pass disabled for elements that support it\n // This prevents invalid HTML attributes on unsupported elements\n const shouldPassDisabled = asChild || !as || ['button', 'input', 'textarea', 'select'].includes(as);\n\n // Determine if we are rendering a real <button> element so we can set a safe\n // default type. Native <button> defaults to type=\"submit\" which can cause\n // accidental form submissions. We default to type=\"button\" unless the user\n // explicitly provided a type or we're using asChild (unknown underlying node).\n const isNativeButtonElement = !asChild && (!as || as === 'button');\n const hasExplicitTypeAttribute = 'type' in (baseButtonProps as Record<string, unknown>);\n\n // Generate unique ID for loading announcements\n const loadingId = React.useId();\n const describedById = props.loading ? `${loadingId}-loading` : undefined;\n\n // Extract button text for accessibility announcements\n const buttonText = React.useMemo(() => {\n if (typeof children === 'string') return children;\n if (React.isValidElement(children) && typeof (children.props as any)?.children === 'string') {\n return (children.props as any).children;\n }\n return 'button';\n }, [children]);\n\n // Enhanced accessibility props for loading state\n // These ensure screen readers announce the loading state properly\n const accessibilityProps = React.useMemo(() => {\n if (props.loading) {\n return {\n 'aria-busy': true,\n 'aria-disabled': true,\n 'aria-describedby': describedById,\n 'aria-label': `${buttonText} (loading)`,\n };\n }\n return {};\n }, [props.loading, describedById, buttonText]);\n\n return (\n <Comp\n // The `data-disabled` attribute enables correct styles when doing `<Button asChild disabled>`\n data-disabled={disabled || undefined}\n data-accent-color={color}\n data-radius={radius}\n data-material={effectiveMaterial}\n data-panel-background={effectiveMaterial}\n data-flush={flush ? 'true' : undefined}\n {...baseButtonProps}\n {...accessibilityProps}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-BaseButton', className)}\n {...(shouldPassDisabled && { disabled })}\n {...(isNativeButtonElement && !hasExplicitTypeAttribute ? { type: 'button' } : {})}\n >\n {props.loading ? (\n <>\n {/**\n * We need a wrapper to set `visibility: hidden` to hide the button content whilst we show the `Spinner`.\n * The button is a flex container with a `gap`, so we use `display: contents` to ensure the correct flex layout.\n *\n * However, `display: contents` removes the content from the accessibility tree in some browsers,\n * so we force remove it with `aria-hidden` and re-add it in the tree with `VisuallyHidden`\n */}\n <span style={{ display: 'contents', visibility: 'hidden' }} aria-hidden>\n {children}\n </span>\n\n {/* Enhanced accessibility for loading state */}\n <VisuallyHidden>\n <span id={describedById}>{buttonText} is loading, please wait...</span>\n {children}\n </VisuallyHidden>\n\n {/* Centered spinner overlay during loading state */}\n <Flex asChild align=\"center\" justify=\"center\" position=\"absolute\" inset=\"0\">\n <span>\n <Spinner size={mapResponsiveProp(size, mapButtonSizeToSpinnerSize)} aria-hidden=\"true\" />\n </span>\n </Flex>\n </>\n ) : (\n children\n )}\n </Comp>\n );\n});\nBaseButton.displayName = 'BaseButton';\n\nexport { BaseButton };\nexport type { BaseButtonProps };\n"],
5
+ "mappings": "uUAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,QAAAC,MAAY,WA8DrB,IAAMC,EAAmB,aAA+C,CAACC,EAAOC,IAAiB,CAC/F,GAAM,CAAE,KAAAC,EAAOC,EAAmB,KAAK,OAAQ,EAAIH,EAG7C,CACJ,UAAAI,EACA,SAAAC,EACA,QAAAC,EACA,GAAAC,EACA,MAAAC,EACA,OAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,SAAAC,EAAWb,EAAM,QACjB,GAAGc,CACL,EAAIC,EAAaf,EAAOG,EAAoBa,CAAc,EAE1DC,EAAoCjB,EAAM,eAAe,EAGzD,IAAMkB,EAAoBR,GAAYC,EAKhCQ,EAAOb,EAAUc,EAAK,KAAQb,GAAM,SAIpCc,EAAqBf,GAAW,CAACC,GAAM,CAAC,SAAU,QAAS,WAAY,QAAQ,EAAE,SAASA,CAAE,EAM5Fe,EAAwB,CAAChB,IAAY,CAACC,GAAMA,IAAO,UACnDgB,EAA2B,SAAWT,EAGtCU,EAAkB,QAAM,EACxBC,EAAgBzB,EAAM,QAAU,GAAGwB,CAAS,WAAa,OAGzDE,EAAmB,UAAQ,IAC3B,OAAOrB,GAAa,SAAiBA,EAC/B,iBAAeA,CAAQ,GAAK,OAAQA,EAAS,OAAe,UAAa,SACzEA,EAAS,MAAc,SAE1B,SACN,CAACA,CAAQ,CAAC,EAIPsB,EAA2B,UAAQ,IACnC3B,EAAM,QACD,CACL,YAAa,GACb,gBAAiB,GACjB,mBAAoByB,EACpB,aAAc,GAAGC,CAAU,YAC7B,EAEK,CAAC,EACP,CAAC1B,EAAM,QAASyB,EAAeC,CAAU,CAAC,EAE7C,OACE,gBAACP,EAAA,CAEC,gBAAeN,GAAY,OAC3B,oBAAmBL,EACnB,cAAaC,EACb,gBAAeS,EACf,wBAAuBA,EACvB,aAAYN,EAAQ,OAAS,OAC5B,GAAGE,EACH,GAAGa,EACJ,IAAK1B,EACL,UAAW2B,EAAW,WAAY,gBAAiBxB,CAAS,EAC3D,GAAIiB,GAAsB,CAAE,SAAAR,CAAS,EACrC,GAAIS,GAAyB,CAACC,EAA2B,CAAE,KAAM,QAAS,EAAI,CAAC,GAE/EvB,EAAM,QACL,gCAQE,gBAAC,QAAK,MAAO,CAAE,QAAS,WAAY,WAAY,QAAS,EAAG,cAAW,IACpEK,CACH,EAGA,gBAACwB,EAAA,KACC,gBAAC,QAAK,GAAIJ,GAAgBC,EAAW,6BAA2B,EAC/DrB,CACH,EAGA,gBAACyB,EAAA,CAAK,QAAO,GAAC,MAAM,SAAS,QAAQ,SAAS,SAAS,WAAW,MAAM,KACtE,gBAAC,YACC,gBAACC,EAAA,CAAQ,KAAMC,EAAkB9B,EAAM+B,CAA0B,EAAG,cAAY,OAAO,CACzF,CACF,CACF,EAEA5B,CAEJ,CAEJ,CAAC,EACDN,EAAW,YAAc",
6
+ "names": ["React", "classNames", "Slot", "BaseButton", "props", "forwardedRef", "size", "baseButtonPropDefs", "className", "children", "asChild", "as", "color", "radius", "material", "panelBackground", "flush", "disabled", "baseButtonProps", "extractProps", "marginPropDefs", "useDeprecatedPanelBackgroundWarning", "effectiveMaterial", "Comp", "Slot", "shouldPassDisabled", "isNativeButtonElement", "hasExplicitTypeAttribute", "loadingId", "describedById", "buttonText", "accessibilityProps", "classNames", "VisuallyHidden", "Flex", "Spinner", "mapResponsiveProp", "mapButtonSizeToSpinnerSize"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as r}from"./chunk-BPVVFHYD.js";import{c as i}from"./chunk-LN5SP46K.js";import{a as p}from"./chunk-4OBMRJHC.js";import{a as e}from"./chunk-KMPBTEZH.js";import*as o from"react";import v from"classnames";import{Tooltip as t}from"radix-ui";var u=o.forwardRef((n,s)=>{let{children:l,className:m,open:a,defaultOpen:f,onOpenChange:P,delayDuration:T,disableHoverableContent:c,content:d,container:R,forceMount:C,...y}=e(n,r),h={open:a,defaultOpen:f,onOpenChange:P,delayDuration:T,disableHoverableContent:c};return o.createElement(t.Root,{...h},o.createElement(t.Trigger,{asChild:!0},l),o.createElement(t.Portal,{container:R,forceMount:C},o.createElement(i,{asChild:!0},o.createElement(t.Content,{sideOffset:4,collisionPadding:10,...y,asChild:!1,ref:s,className:v("rt-TooltipContent",m)},o.createElement(p,{as:"p",className:"rt-TooltipText",size:"1"},d),o.createElement(t.Arrow,{className:"rt-TooltipArrow"})))))});u.displayName="Tooltip";export{u as a};
2
- //# sourceMappingURL=chunk-XHQGMOXV.js.map
1
+ import{a as r}from"./chunk-BPVVFHYD.js";import{c as i}from"./chunk-LOGJJF4I.js";import{a as p}from"./chunk-H7ST535H.js";import{a as e}from"./chunk-6FLLFCBU.js";import*as o from"react";import v from"classnames";import{Tooltip as t}from"radix-ui";var u=o.forwardRef((n,s)=>{let{children:l,className:m,open:a,defaultOpen:f,onOpenChange:P,delayDuration:T,disableHoverableContent:c,content:d,container:R,forceMount:C,...y}=e(n,r),h={open:a,defaultOpen:f,onOpenChange:P,delayDuration:T,disableHoverableContent:c};return o.createElement(t.Root,{...h},o.createElement(t.Trigger,{asChild:!0},l),o.createElement(t.Portal,{container:R,forceMount:C},o.createElement(i,{asChild:!0},o.createElement(t.Content,{sideOffset:4,collisionPadding:10,...y,asChild:!1,ref:s,className:v("rt-TooltipContent",m)},o.createElement(p,{as:"p",className:"rt-TooltipText",size:"1"},d),o.createElement(t.Arrow,{className:"rt-TooltipArrow"})))))});u.displayName="Tooltip";export{u as a};
2
+ //# sourceMappingURL=chunk-36ZQVP7F.js.map
@@ -1,2 +1,2 @@
1
- import{a as c}from"./chunk-Y3A6ZU24.js";import{a as N}from"./chunk-FVCWNSRU.js";import{b as v}from"./chunk-FWB47YCH.js";import{a as m}from"./chunk-KMPBTEZH.js";import{a as R}from"./chunk-3XT5P2HO.js";var d={};R(d,{Actions:()=>P,Logo:()=>b,Navigation:()=>f,Root:()=>l});import*as o from"react";import p from"classnames";var l=o.forwardRef((e,s)=>{let{children:i,className:n,...a}=m(e,c),r=e.position??"fixed",t=e.size??"2";return o.createElement("header",{...a,ref:s,className:p("rt-NavbarRoot",n),"data-position":r,"data-size":t},o.createElement("div",{className:"rt-NavbarContainer"},i))});l.displayName="Navbar.Root";var b=o.forwardRef(({asChild:e,gap:s="2",align:i="center",justify:n="start",className:a,...r},t)=>e?o.createElement(v,{ref:t,className:p("rt-NavbarLogo",a),...r}):o.createElement(N,{ref:t,gap:s,align:i,justify:n,className:p("rt-NavbarLogo",a),...r}));b.displayName="Navbar.Logo";var f=o.forwardRef(({asChild:e,gap:s="4",align:i="center",justify:n="center",className:a,...r},t)=>e?o.createElement(v,{ref:t,className:p("rt-NavbarNavigation",a),role:"navigation",...r}):o.createElement(N,{ref:t,gap:s,align:i,justify:n,className:p("rt-NavbarNavigation",a),role:"navigation",...r}));f.displayName="Navbar.Navigation";var P=o.forwardRef(({asChild:e,gap:s="4",align:i="center",justify:n="end",className:a,...r},t)=>e?o.createElement(v,{ref:t,className:p("rt-NavbarActions",a),...r}):o.createElement(N,{ref:t,gap:s,align:i,justify:n,className:p("rt-NavbarActions",a),...r}));P.displayName="Navbar.Actions";export{l as a,b,f as c,P as d,d as e};
2
- //# sourceMappingURL=chunk-K3R4AH3E.js.map
1
+ import{a as c}from"./chunk-Y3A6ZU24.js";import{a as N}from"./chunk-FHOCUZDR.js";import{b as v}from"./chunk-FWB47YCH.js";import{a as m}from"./chunk-6FLLFCBU.js";import{a as R}from"./chunk-3XT5P2HO.js";var d={};R(d,{Actions:()=>P,Logo:()=>b,Navigation:()=>f,Root:()=>l});import*as o from"react";import p from"classnames";var l=o.forwardRef((e,s)=>{let{children:i,className:n,...a}=m(e,c),r=e.position??"fixed",t=e.size??"2";return o.createElement("header",{...a,ref:s,className:p("rt-NavbarRoot",n),"data-position":r,"data-size":t},o.createElement("div",{className:"rt-NavbarContainer"},i))});l.displayName="Navbar.Root";var b=o.forwardRef(({asChild:e,gap:s="2",align:i="center",justify:n="start",className:a,...r},t)=>e?o.createElement(v,{ref:t,className:p("rt-NavbarLogo",a),...r}):o.createElement(N,{ref:t,gap:s,align:i,justify:n,className:p("rt-NavbarLogo",a),...r}));b.displayName="Navbar.Logo";var f=o.forwardRef(({asChild:e,gap:s="4",align:i="center",justify:n="center",className:a,...r},t)=>e?o.createElement(v,{ref:t,className:p("rt-NavbarNavigation",a),role:"navigation",...r}):o.createElement(N,{ref:t,gap:s,align:i,justify:n,className:p("rt-NavbarNavigation",a),role:"navigation",...r}));f.displayName="Navbar.Navigation";var P=o.forwardRef(({asChild:e,gap:s="4",align:i="center",justify:n="end",className:a,...r},t)=>e?o.createElement(v,{ref:t,className:p("rt-NavbarActions",a),...r}):o.createElement(N,{ref:t,gap:s,align:i,justify:n,className:p("rt-NavbarActions",a),...r}));P.displayName="Navbar.Actions";export{l as a,b,f as c,P as d,d as e};
2
+ //# sourceMappingURL=chunk-3MWWP4MW.js.map
@@ -1,2 +1,2 @@
1
- import{a as t}from"./chunk-XI5YXUCK.js";import{a as r}from"./chunk-KMPBTEZH.js";import*as o from"react";import a from"classnames";import{Slot as g}from"radix-ui";var P=o.forwardRef((e,p)=>{let{asChild:s,className:n,...m}=r(e,t),f=s?g.Root:"strong";return o.createElement(f,{...m,ref:p,className:a("rt-Strong",n)})});P.displayName="Strong";export{P as a};
2
- //# sourceMappingURL=chunk-HQ35PM4O.js.map
1
+ import{a as t}from"./chunk-XI5YXUCK.js";import{a as r}from"./chunk-6FLLFCBU.js";import*as o from"react";import a from"classnames";import{Slot as g}from"radix-ui";var P=o.forwardRef((e,p)=>{let{asChild:s,className:n,...m}=r(e,t),f=s?g.Root:"strong";return o.createElement(f,{...m,ref:p,className:a("rt-Strong",n)})});P.displayName="Strong";export{P as a};
2
+ //# sourceMappingURL=chunk-43A5GUSI.js.map
@@ -1,2 +1,2 @@
1
- import{a as p}from"./chunk-GSTOGDAJ.js";import{a}from"./chunk-KMPBTEZH.js";import{a as m}from"./chunk-CBR3VIRS.js";import{a as l}from"./chunk-3XT5P2HO.js";var R={};l(R,{Content:()=>g,List:()=>P,Root:()=>b,Trigger:()=>f});import*as e from"react";import i from"classnames";import{Tabs as n}from"radix-ui";var b=e.forwardRef((s,o)=>{let{className:r,...t}=a(s,p);return e.createElement(n.Root,{...t,ref:o,className:i("rt-TabsRoot",r)})});b.displayName="Tabs.Root";var P=e.forwardRef((s,o)=>{let{className:r,color:t,panelBackground:T,...c}=a(s,m,p);return e.createElement(n.List,{"data-accent-color":t,"data-panel-background":T,...c,asChild:!1,ref:o,className:i("rt-BaseTabList","rt-TabsList",r)})});P.displayName="Tabs.List";var f=e.forwardRef((s,o)=>{let{className:r,children:t,...T}=s;return e.createElement(n.Trigger,{...T,asChild:!1,ref:o,className:i("rt-reset","rt-BaseTabListTrigger","rt-TabsTrigger",r)},e.createElement("span",{className:"rt-BaseTabListTriggerInner rt-TabsTriggerInner"},t),e.createElement("span",{className:"rt-BaseTabListTriggerInnerHidden rt-TabsTriggerInnerHidden"},t))});f.displayName="Tabs.Trigger";var g=e.forwardRef((s,o)=>{let{className:r,...t}=a(s,p);return e.createElement(n.Content,{...t,ref:o,className:i("rt-TabsContent",r),"aria-live":"polite","aria-atomic":"true"})});g.displayName="Tabs.Content";export{b as a,P as b,f as c,g as d,R as e};
2
- //# sourceMappingURL=chunk-Z5DQ6FSA.js.map
1
+ import{a as p}from"./chunk-GSTOGDAJ.js";import{a}from"./chunk-6FLLFCBU.js";import{a as m}from"./chunk-CBR3VIRS.js";import{a as l}from"./chunk-3XT5P2HO.js";var R={};l(R,{Content:()=>g,List:()=>P,Root:()=>b,Trigger:()=>f});import*as e from"react";import i from"classnames";import{Tabs as n}from"radix-ui";var b=e.forwardRef((s,o)=>{let{className:r,...t}=a(s,p);return e.createElement(n.Root,{...t,ref:o,className:i("rt-TabsRoot",r)})});b.displayName="Tabs.Root";var P=e.forwardRef((s,o)=>{let{className:r,color:t,panelBackground:T,...c}=a(s,m,p);return e.createElement(n.List,{"data-accent-color":t,"data-panel-background":T,...c,asChild:!1,ref:o,className:i("rt-BaseTabList","rt-TabsList",r)})});P.displayName="Tabs.List";var f=e.forwardRef((s,o)=>{let{className:r,children:t,...T}=s;return e.createElement(n.Trigger,{...T,asChild:!1,ref:o,className:i("rt-reset","rt-BaseTabListTrigger","rt-TabsTrigger",r)},e.createElement("span",{className:"rt-BaseTabListTriggerInner rt-TabsTriggerInner"},t),e.createElement("span",{className:"rt-BaseTabListTriggerInnerHidden rt-TabsTriggerInnerHidden"},t))});f.displayName="Tabs.Trigger";var g=e.forwardRef((s,o)=>{let{className:r,...t}=a(s,p);return e.createElement(n.Content,{...t,ref:o,className:i("rt-TabsContent",r),"aria-live":"polite","aria-atomic":"true"})});g.displayName="Tabs.Content";export{b as a,P as b,f as c,g as d,R as e};
2
+ //# sourceMappingURL=chunk-4AQTUBVP.js.map
@@ -1,2 +1,2 @@
1
- import{a as be}from"./chunk-2LYX5S7H.js";import{a as pe,c as fe}from"./chunk-5LXFJMFB.js";import{l as ie,n as le,p as de,r as ce,v as ue}from"./chunk-SNHEJU2S.js";import{a as re,c as se,d as ae}from"./chunk-UUX42HBM.js";import{a as Re,e as S}from"./chunk-Q73Y5O5P.js";import{b as he,c as I}from"./chunk-CECQNGUL.js";import{a as me}from"./chunk-NNO7M466.js";import{a as oe}from"./chunk-AGAQC4HH.js";import*as t from"react";import Ue from"classnames";var Le=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style","inset"],ye=t.forwardRef((U,p)=>{let{className:ze,presentation:Pe="fixed",defaultOpen:L,open:a,onOpenChange:_,expandedSize:C=200,minSize:l=100,maxSize:d=400,resizable:B=!1,collapsible:Se=!0,onExpand:$,onCollapse:A,onResize:v,onResizeStart:Ce,onResizeEnd:Be,snapPoints:ve,snapTolerance:ge,collapseThreshold:xe,paneId:g,persistence:x,children:Me,style:Ee,size:j,defaultSize:F,onSizeChange:M,sizeUpdate:E,sizeUpdateMs:O=50,inset:T}=U,Oe=he(U,Le),{bottomMode:s,setBottomMode:N}=ie(),{currentBreakpointReady:f}=le(),{peekTarget:Te}=de(),{togglePane:Ne}=ce(),{registerInset:q,unregisterInset:K}=ue();t.useLayoutEffect(()=>{if(T)return q("bottom"),()=>K("bottom")},[T,q,K]);let w=pe(Pe),R=w==="overlay",we=w==="stacked",i=t.useRef(null),ke=t.useCallback(e=>{i.current=e,typeof p=="function"?p(e):p&&(p.current=e)},[p]),W=t.Children.toArray(Me),Y=W.filter(e=>t.isValidElement(e)&&e.type===S),G=W.filter(e=>!(t.isValidElement(e)&&e.type===S)),h=t.useRef(_),k=t.useRef(a);t.useLayoutEffect(()=>{h.current=_,k.current=a});let De=t.useMemo(()=>I(a),[a]),Ve=t.useMemo(()=>I(L),[L]),He=typeof a=="object"&&a!==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"})}}),c=t.useRef(null);t.useEffect(()=>()=>{c.current&&(clearTimeout(c.current),c.current=null)},[M,E,O]);let b=t.useMemo(()=>{let e=M,o=E,r=O??50;if(!e)return()=>{};if(o==="debounce")return(n,u)=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{e(n,u),c.current=null},r)};if(o==="throttle"){let n=0;return(u,te)=>{let ne=Date.now();ne-n>=r&&(n=ne,e(u,te))}}return(n,u)=>e(n,u)},[M,E,O]),y=t.useRef(null);t.useEffect(()=>{let e=typeof a<"u";if(y.current===null){y.current=e;return}y.current!==e&&(console.warn("Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported."),y.current=e)},[a]);let J=t.useRef(null),Q=t.useRef(void 0);t.useEffect(()=>{let e=J.current,r=Q.current!==m;if(e!==null&&e!==s){let n=s==="expanded";(!(typeof k.current<"u")||!r&&n!==(m===void 0?void 0:m==="expanded"))&&h.current?.(n,{reason:"toggle"})}J.current=s,Q.current=m},[s,m]);let X=t.useRef($),Z=t.useRef(A);t.useLayoutEffect(()=>{X.current=$,Z.current=A});let z=t.useRef(null),ee=t.useRef(!1);t.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",P=t.useMemo(()=>{if(!g||x)return x;let e=`kookie-ui:shell:bottom:${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]);t.useEffect(()=>{let e=!0;if(!B||!P?.load||R)return;let o=P.load(),r=n=>{!e||typeof n!="number"||!i.current||(i.current.style.setProperty("--bottom-size",`${n}px`),v?.(n))};return o instanceof Promise?o.then(r).catch(n=>{}):r(o),()=>{e=!1}},[B,P,v,R]);let Ie=B&&!R&&D?t.createElement(me.Provider,{value:{containerRef:i,cssVarName:"--bottom-size",minSize:l,maxSize:d,defaultSize:C,orientation:"horizontal",edge:"start",computeNext:(e,o,r)=>{let n=e-o;return r-n},onResize:v,onResizeStart:Ce,onResizeEnd:e=>{Be?.(e),b(e,{reason:"resize"}),P?.save?.(e)},target:"bottom",collapsible:Se,snapPoints:ve,snapTolerance:ge??8,collapseThreshold:xe,requestCollapse:()=>N("collapsed"),requestToggle:()=>Ne("bottom")}},Y.length>0?Y.map((e,o)=>t.cloneElement(e,{key:e.key??o})):t.createElement(Re,null)):null,V=t.useCallback(e=>be(e,"vertical"),[]);t.useEffect(()=>{if(i.current&&typeof j>"u"&&typeof F<"u"){let e=V(F);if(typeof e=="number"&&Number.isFinite(e)){let n=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));i.current.style.setProperty("--bottom-size",`${n}px`),b(n,{reason:"init"})}}},[]);let H=j;return t.useEffect(()=>{if(!i.current||typeof H>"u")return;let e=V(H);if(typeof e=="number"&&Number.isFinite(e)){let n=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));i.current.style.setProperty("--bottom-size",`${n}px`),b(n,{reason:"controlled"})}},[H,l,d,V,b]),R?t.createElement(re,{open:s==="expanded",onOpenChange:o=>N(o?"expanded":"collapsed")},t.createElement(se,{side:"bottom",style:{padding:0},"aria-label":"Bottom panel","aria-describedby":void 0,height:{initial:`${C}px`}},t.createElement(oe,null,t.createElement(ae,null,"Bottom panel")),G)):t.createElement("div",{...Oe,ref:ke,className:Ue("rt-ShellBottom",ze),"data-mode":s,"data-peek":Te==="bottom"||void 0,"data-presentation":f?w:void 0,"data-open":f&&we&&D||void 0,"data-inset":T||void 0,style:{...Ee,"--bottom-size":`${C}px`,"--bottom-min-size":`${l}px`,"--bottom-max-size":`${d}px`}},t.createElement("div",{className:"rt-ShellBottomContent","data-visible":D||void 0},G),Ie)});ye.displayName="Shell.Bottom";ye.Handle=S;export{ye as a};
2
- //# sourceMappingURL=chunk-25U7DENY.js.map
1
+ import{a as be}from"./chunk-2LYX5S7H.js";import{a as pe,c as fe}from"./chunk-5LXFJMFB.js";import{l as ie,n as le,p as de,r as ce,v as ue}from"./chunk-SNHEJU2S.js";import{a as re,c as se,d as ae}from"./chunk-MRECKC4D.js";import{a as Re,e as S}from"./chunk-TLWTUKKL.js";import{b as he,c as I}from"./chunk-CECQNGUL.js";import{a as me}from"./chunk-NNO7M466.js";import{a as oe}from"./chunk-AGAQC4HH.js";import*as t from"react";import Ue from"classnames";var Le=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style","inset"],ye=t.forwardRef((U,p)=>{let{className:ze,presentation:Pe="fixed",defaultOpen:L,open:a,onOpenChange:_,expandedSize:C=200,minSize:l=100,maxSize:d=400,resizable:B=!1,collapsible:Se=!0,onExpand:$,onCollapse:A,onResize:v,onResizeStart:Ce,onResizeEnd:Be,snapPoints:ve,snapTolerance:ge,collapseThreshold:xe,paneId:g,persistence:x,children:Me,style:Ee,size:j,defaultSize:F,onSizeChange:M,sizeUpdate:E,sizeUpdateMs:O=50,inset:T}=U,Oe=he(U,Le),{bottomMode:s,setBottomMode:N}=ie(),{currentBreakpointReady:f}=le(),{peekTarget:Te}=de(),{togglePane:Ne}=ce(),{registerInset:q,unregisterInset:K}=ue();t.useLayoutEffect(()=>{if(T)return q("bottom"),()=>K("bottom")},[T,q,K]);let w=pe(Pe),R=w==="overlay",we=w==="stacked",i=t.useRef(null),ke=t.useCallback(e=>{i.current=e,typeof p=="function"?p(e):p&&(p.current=e)},[p]),W=t.Children.toArray(Me),Y=W.filter(e=>t.isValidElement(e)&&e.type===S),G=W.filter(e=>!(t.isValidElement(e)&&e.type===S)),h=t.useRef(_),k=t.useRef(a);t.useLayoutEffect(()=>{h.current=_,k.current=a});let De=t.useMemo(()=>I(a),[a]),Ve=t.useMemo(()=>I(L),[L]),He=typeof a=="object"&&a!==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"})}}),c=t.useRef(null);t.useEffect(()=>()=>{c.current&&(clearTimeout(c.current),c.current=null)},[M,E,O]);let b=t.useMemo(()=>{let e=M,o=E,r=O??50;if(!e)return()=>{};if(o==="debounce")return(n,u)=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{e(n,u),c.current=null},r)};if(o==="throttle"){let n=0;return(u,te)=>{let ne=Date.now();ne-n>=r&&(n=ne,e(u,te))}}return(n,u)=>e(n,u)},[M,E,O]),y=t.useRef(null);t.useEffect(()=>{let e=typeof a<"u";if(y.current===null){y.current=e;return}y.current!==e&&(console.warn("Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported."),y.current=e)},[a]);let J=t.useRef(null),Q=t.useRef(void 0);t.useEffect(()=>{let e=J.current,r=Q.current!==m;if(e!==null&&e!==s){let n=s==="expanded";(!(typeof k.current<"u")||!r&&n!==(m===void 0?void 0:m==="expanded"))&&h.current?.(n,{reason:"toggle"})}J.current=s,Q.current=m},[s,m]);let X=t.useRef($),Z=t.useRef(A);t.useLayoutEffect(()=>{X.current=$,Z.current=A});let z=t.useRef(null),ee=t.useRef(!1);t.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",P=t.useMemo(()=>{if(!g||x)return x;let e=`kookie-ui:shell:bottom:${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]);t.useEffect(()=>{let e=!0;if(!B||!P?.load||R)return;let o=P.load(),r=n=>{!e||typeof n!="number"||!i.current||(i.current.style.setProperty("--bottom-size",`${n}px`),v?.(n))};return o instanceof Promise?o.then(r).catch(n=>{}):r(o),()=>{e=!1}},[B,P,v,R]);let Ie=B&&!R&&D?t.createElement(me.Provider,{value:{containerRef:i,cssVarName:"--bottom-size",minSize:l,maxSize:d,defaultSize:C,orientation:"horizontal",edge:"start",computeNext:(e,o,r)=>{let n=e-o;return r-n},onResize:v,onResizeStart:Ce,onResizeEnd:e=>{Be?.(e),b(e,{reason:"resize"}),P?.save?.(e)},target:"bottom",collapsible:Se,snapPoints:ve,snapTolerance:ge??8,collapseThreshold:xe,requestCollapse:()=>N("collapsed"),requestToggle:()=>Ne("bottom")}},Y.length>0?Y.map((e,o)=>t.cloneElement(e,{key:e.key??o})):t.createElement(Re,null)):null,V=t.useCallback(e=>be(e,"vertical"),[]);t.useEffect(()=>{if(i.current&&typeof j>"u"&&typeof F<"u"){let e=V(F);if(typeof e=="number"&&Number.isFinite(e)){let n=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));i.current.style.setProperty("--bottom-size",`${n}px`),b(n,{reason:"init"})}}},[]);let H=j;return t.useEffect(()=>{if(!i.current||typeof H>"u")return;let e=V(H);if(typeof e=="number"&&Number.isFinite(e)){let n=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));i.current.style.setProperty("--bottom-size",`${n}px`),b(n,{reason:"controlled"})}},[H,l,d,V,b]),R?t.createElement(re,{open:s==="expanded",onOpenChange:o=>N(o?"expanded":"collapsed")},t.createElement(se,{side:"bottom",style:{padding:0},"aria-label":"Bottom panel","aria-describedby":void 0,height:{initial:`${C}px`}},t.createElement(oe,null,t.createElement(ae,null,"Bottom panel")),G)):t.createElement("div",{...Oe,ref:ke,className:Ue("rt-ShellBottom",ze),"data-mode":s,"data-peek":Te==="bottom"||void 0,"data-presentation":f?w:void 0,"data-open":f&&we&&D||void 0,"data-inset":T||void 0,style:{...Ee,"--bottom-size":`${C}px`,"--bottom-min-size":`${l}px`,"--bottom-max-size":`${d}px`}},t.createElement("div",{className:"rt-ShellBottomContent","data-visible":D||void 0},G),Ie)});ye.displayName="Shell.Bottom";ye.Handle=S;export{ye as a};
2
+ //# sourceMappingURL=chunk-4BBOHEF4.js.map
@@ -0,0 +1,2 @@
1
+ import{a as Se}from"./chunk-4BBOHEF4.js";import{a as Ee}from"./chunk-O3CDWEZA.js";import{a as Me}from"./chunk-VLO7NXSP.js";import{a as cn}from"./chunk-2LYX5S7H.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 Ve,c as He,d as Fe}from"./chunk-MRECKC4D.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-4XJY6FIK.js";import{a as Ie}from"./chunk-KFA53SVQ.js";import{a as On}from"./chunk-3XT5P2HO.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-4CKDU6FY.js.map
@@ -0,0 +1,7 @@
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 +1,2 @@
1
- import{a as R}from"./chunk-GSIE6SUD.js";import{a as m}from"./chunk-DXI5P5O4.js";import{b as p}from"./chunk-LN5SP46K.js";import{a as n}from"./chunk-GSTOGDAJ.js";import{a as d}from"./chunk-KMPBTEZH.js";import{a as v}from"./chunk-3XT5P2HO.js";var x={};v(x,{Item:()=>l,Root:()=>P});import*as o from"react";import C from"classnames";import{RadioGroup as f}from"radix-ui";var c=o.createContext(void 0),y=()=>o.useContext(c),P=o.forwardRef((e,r)=>{let a=p(),t=e.panelBackground??a.panelBackground,{className:s,color:i,panelBackground:I,...u}=d(e,R,n);return o.createElement(c.Provider,{value:{size:e.size,variant:e.variant}},o.createElement(m,{asChild:!0},o.createElement(f.Root,{"data-accent-color":i,"data-panel-background":t,...u,ref:r,className:C("rt-RadioCardsRoot",s)})))});P.displayName="RadioCards.Root";var l=o.forwardRef(({className:e,...r},a)=>{let t=y(),s=t?.variant?`rt-variant-${t.variant}`:void 0,i=t?.size?`rt-r-size-${t.size}`:void 0;return o.createElement(f.Item,{...r,asChild:!1,ref:a,className:C("rt-reset","rt-BaseCard","rt-RadioCardsItem",s,i,e)})});l.displayName="RadioCards.Item";export{P as a,l as b,x as c};
2
- //# sourceMappingURL=chunk-ZSEFZM5H.js.map
1
+ import{a as R}from"./chunk-GSIE6SUD.js";import{a as m}from"./chunk-VX6ARMWP.js";import{b as p}from"./chunk-LOGJJF4I.js";import{a as n}from"./chunk-GSTOGDAJ.js";import{a as d}from"./chunk-6FLLFCBU.js";import{a as v}from"./chunk-3XT5P2HO.js";var x={};v(x,{Item:()=>l,Root:()=>P});import*as o from"react";import C from"classnames";import{RadioGroup as f}from"radix-ui";var c=o.createContext(void 0),y=()=>o.useContext(c),P=o.forwardRef((e,r)=>{let a=p(),t=e.panelBackground??a.panelBackground,{className:s,color:i,panelBackground:I,...u}=d(e,R,n);return o.createElement(c.Provider,{value:{size:e.size,variant:e.variant}},o.createElement(m,{asChild:!0},o.createElement(f.Root,{"data-accent-color":i,"data-panel-background":t,...u,ref:r,className:C("rt-RadioCardsRoot",s)})))});P.displayName="RadioCards.Root";var l=o.forwardRef(({className:e,...r},a)=>{let t=y(),s=t?.variant?`rt-variant-${t.variant}`:void 0,i=t?.size?`rt-r-size-${t.size}`:void 0;return o.createElement(f.Item,{...r,asChild:!1,ref:a,className:C("rt-reset","rt-BaseCard","rt-RadioCardsItem",s,i,e)})});l.displayName="RadioCards.Item";export{P as a,l as b,x as c};
2
+ //# sourceMappingURL=chunk-4IY2PR6N.js.map
@@ -1,2 +1,2 @@
1
- import{a as m}from"./chunk-PPNWGWN3.js";import{a as i}from"./chunk-PS6NEG5A.js";import{a as n}from"./chunk-K53W3ELO.js";import{a as e}from"./chunk-VX44UTQ5.js";import{a as p}from"./chunk-ERGJN7FJ.js";import{a as s}from"./chunk-GSTOGDAJ.js";import{a as r}from"./chunk-KMPBTEZH.js";import*as o from"react";import a from"classnames";import{Slot as w}from"radix-ui";var x=o.forwardRef(({width:f,minWidth:P,maxWidth:c,height:l,minHeight:C,maxHeight:y,...d},h)=>{let{asChild:t,children:u,className:R,...v}=r(d,m,n,s),{className:N,style:g}=r({width:f,minWidth:P,maxWidth:c,height:l,minHeight:C,maxHeight:y},p,e),D=t?w.Root:"div";return o.createElement(D,{...v,ref:h,className:a("rt-Container",R)},i({asChild:t,children:u},j=>o.createElement("div",{className:a("rt-ContainerInner",N),style:g},j)))});x.displayName="Container";export{x as a};
2
- //# sourceMappingURL=chunk-QLIELX4I.js.map
1
+ import{a as m}from"./chunk-PPNWGWN3.js";import{a as i}from"./chunk-PS6NEG5A.js";import{a as n}from"./chunk-K53W3ELO.js";import{a as e}from"./chunk-VX44UTQ5.js";import{a as p}from"./chunk-ERGJN7FJ.js";import{a as s}from"./chunk-GSTOGDAJ.js";import{a as r}from"./chunk-6FLLFCBU.js";import*as o from"react";import a from"classnames";import{Slot as w}from"radix-ui";var x=o.forwardRef(({width:f,minWidth:P,maxWidth:c,height:l,minHeight:C,maxHeight:y,...d},h)=>{let{asChild:t,children:u,className:R,...v}=r(d,m,n,s),{className:N,style:g}=r({width:f,minWidth:P,maxWidth:c,height:l,minHeight:C,maxHeight:y},p,e),D=t?w.Root:"div";return o.createElement(D,{...v,ref:h,className:a("rt-Container",R)},i({asChild:t,children:u},j=>o.createElement("div",{className:a("rt-ContainerInner",N),style:g},j)))});x.displayName="Container";export{x as a};
2
+ //# sourceMappingURL=chunk-4ME6O27S.js.map
@@ -0,0 +1,2 @@
1
+ import{a as u}from"./chunk-KFA53SVQ.js";import*as i from"react";var d=Object.entries(u),f=null,r=new Set,n=null;function a(){return f??(f=d.map(([t,e])=>[t,window.matchMedia(e)])),f}function s(){let t="initial";for(let[e,c]of a())c.matches&&(t=e);return t}function o(){let t=s();t!==n&&(n=t,r.forEach(e=>e()))}function p(t){if(typeof window>"u")return()=>{};if(r.size===0){n=s();for(let[,e]of a())typeof e.addEventListener=="function"?e.addEventListener("change",o):e.addListener?.(o)}return r.add(t),()=>{if(r.delete(t),!(r.size>0)){for(let[,e]of a())try{typeof e.removeEventListener=="function"?e.removeEventListener("change",o):e.removeListener?.(o)}catch{}n=null}}}function l(){return typeof window>"u"?"initial":(n??(n=s()),n)}function y(){return"initial"}var m=()=>!0,k=()=>!1;function h(){let t=i.useSyncExternalStore(p,l,y),e=i.useSyncExternalStore(p,m,k);return i.useMemo(()=>({breakpoint:t,ready:e}),[t,e])}export{h as a};
2
+ //# sourceMappingURL=chunk-4XJY6FIK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/hooks/use-breakpoint.ts"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport { _BREAKPOINTS, type Breakpoint } from '../components/shell.types.js';\n\nconst QUERIES = Object.entries(_BREAKPOINTS) as Array<[Breakpoint, string]>;\n\ntype Listener = () => void;\n\n/**\n * One set of `MediaQueryList`s and one set of listeners for the whole\n * application. Every component that asks for the breakpoint used to create and\n * subscribe to its own copy of all five queries.\n */\nlet mediaQueryLists: Array<[Breakpoint, MediaQueryList]> | null = null;\nconst listeners = new Set<Listener>();\nlet cachedBreakpoint: Breakpoint | null = null;\n\nfunction getMediaQueryLists() {\n mediaQueryLists ??= QUERIES.map(([name, query]) => [name, window.matchMedia(query)] as [Breakpoint, MediaQueryList]);\n return mediaQueryLists;\n}\n\nfunction computeBreakpoint(): Breakpoint {\n // The largest matching query wins; `_BREAKPOINTS` is ordered smallest first.\n let matched: Breakpoint = 'initial';\n for (const [name, mql] of getMediaQueryLists()) {\n if (mql.matches) matched = name;\n }\n return matched;\n}\n\nfunction handleChange() {\n const next = computeBreakpoint();\n if (next === cachedBreakpoint) return;\n cachedBreakpoint = next;\n listeners.forEach((listener) => listener());\n}\n\nfunction subscribe(listener: Listener) {\n if (typeof window === 'undefined') return () => {};\n\n if (listeners.size === 0) {\n cachedBreakpoint = computeBreakpoint();\n for (const [, mql] of getMediaQueryLists()) {\n // Safari below 14 only has the deprecated listener API.\n if (typeof mql.addEventListener === 'function') mql.addEventListener('change', handleChange);\n else mql.addListener?.(handleChange);\n }\n }\n\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\n if (listeners.size > 0) return;\n\n for (const [, mql] of getMediaQueryLists()) {\n try {\n if (typeof mql.removeEventListener === 'function') mql.removeEventListener('change', handleChange);\n else mql.removeListener?.(handleChange);\n } catch (error) {\n // Removal can throw in edge cases, e.g. the list was already torn down.\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[useBreakpoint] MediaQueryList cleanup warning:', error);\n }\n }\n }\n cachedBreakpoint = null;\n };\n}\n\n/**\n * `getSnapshot` must return a referentially stable value between changes, so it\n * reads the cache that `handleChange` maintains rather than recomputing.\n */\nfunction getSnapshot(): Breakpoint {\n if (typeof window === 'undefined') return 'initial';\n cachedBreakpoint ??= computeBreakpoint();\n return cachedBreakpoint;\n}\n\nfunction getServerSnapshot(): Breakpoint {\n return 'initial';\n}\n\nconst getReadySnapshot = () => true;\nconst getReadyServerSnapshot = () => false;\n\n/**\n * The current breakpoint, and whether it has been resolved against a real\n * viewport yet (`false` on the server and during hydration).\n *\n * Reads through `useSyncExternalStore` rather than settling into state from an\n * effect. On a client render the very first pass already has the real\n * breakpoint, instead of rendering the whole shell at `initial` and correcting\n * it after the browser has painted.\n */\nexport function useBreakpoint(): { breakpoint: Breakpoint; ready: boolean } {\n const breakpoint = React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const ready = React.useSyncExternalStore(subscribe, getReadySnapshot, getReadyServerSnapshot);\n\n return React.useMemo(() => ({ breakpoint, ready }), [breakpoint, ready]);\n}\n"],
5
+ "mappings": "wCAEA,UAAYA,MAAW,QAGvB,IAAMC,EAAU,OAAO,QAAQC,CAAY,EASvCC,EAA8D,KAC5DC,EAAY,IAAI,IAClBC,EAAsC,KAE1C,SAASC,GAAqB,CAC5B,OAAAH,MAAoBF,EAAQ,IAAI,CAAC,CAACM,EAAMC,CAAK,IAAM,CAACD,EAAM,OAAO,WAAWC,CAAK,CAAC,CAAiC,GAC5GL,CACT,CAEA,SAASM,GAAgC,CAEvC,IAAIC,EAAsB,UAC1B,OAAW,CAACH,EAAMI,CAAG,IAAKL,EAAmB,EACvCK,EAAI,UAASD,EAAUH,GAE7B,OAAOG,CACT,CAEA,SAASE,GAAe,CACtB,IAAMC,EAAOJ,EAAkB,EAC3BI,IAASR,IACbA,EAAmBQ,EACnBT,EAAU,QAASU,GAAaA,EAAS,CAAC,EAC5C,CAEA,SAASC,EAAUD,EAAoB,CACrC,GAAI,OAAO,OAAW,IAAa,MAAO,IAAM,CAAC,EAEjD,GAAIV,EAAU,OAAS,EAAG,CACxBC,EAAmBI,EAAkB,EACrC,OAAW,CAAC,CAAEE,CAAG,IAAKL,EAAmB,EAEnC,OAAOK,EAAI,kBAAqB,WAAYA,EAAI,iBAAiB,SAAUC,CAAY,EACtFD,EAAI,cAAcC,CAAY,CAEvC,CAEA,OAAAR,EAAU,IAAIU,CAAQ,EAEf,IAAM,CAEX,GADAV,EAAU,OAAOU,CAAQ,EACrB,EAAAV,EAAU,KAAO,GAErB,QAAW,CAAC,CAAEO,CAAG,IAAKL,EAAmB,EACvC,GAAI,CACE,OAAOK,EAAI,qBAAwB,WAAYA,EAAI,oBAAoB,SAAUC,CAAY,EAC5FD,EAAI,iBAAiBC,CAAY,CACxC,MAAgB,CAKhB,CAEFP,EAAmB,KACrB,CACF,CAMA,SAASW,GAA0B,CACjC,OAAI,OAAO,OAAW,IAAoB,WAC1CX,MAAqBI,EAAkB,GAChCJ,EACT,CAEA,SAASY,GAAgC,CACvC,MAAO,SACT,CAEA,IAAMC,EAAmB,IAAM,GACzBC,EAAyB,IAAM,GAW9B,SAASC,GAA4D,CAC1E,IAAMC,EAAmB,uBAAqBN,EAAWC,EAAaC,CAAiB,EACjFK,EAAc,uBAAqBP,EAAWG,EAAkBC,CAAsB,EAE5F,OAAa,UAAQ,KAAO,CAAE,WAAAE,EAAY,MAAAC,CAAM,GAAI,CAACD,EAAYC,CAAK,CAAC,CACzE",
6
+ "names": ["React", "QUERIES", "_BREAKPOINTS", "mediaQueryLists", "listeners", "cachedBreakpoint", "getMediaQueryLists", "name", "query", "computeBreakpoint", "matched", "mql", "handleChange", "next", "listener", "subscribe", "getSnapshot", "getServerSnapshot", "getReadySnapshot", "getReadyServerSnapshot", "useBreakpoint", "breakpoint", "ready"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as e}from"./chunk-FGORMEAO.js";import{b as t}from"./chunk-FWB47YCH.js";import{a as r}from"./chunk-K53W3ELO.js";import{a as s}from"./chunk-GSTOGDAJ.js";import{a as p}from"./chunk-KMPBTEZH.js";import*as o from"react";import f from"classnames";var B=o.forwardRef((m,a)=>{let{className:n,asChild:i,as:P="div",...x}=p(m,e,r,s);return o.createElement(i?t:P,{...x,ref:a,className:f("rt-Box",n)})});B.displayName="Box";export{B as a};
2
- //# sourceMappingURL=chunk-JQOFJNCV.js.map
1
+ import{a as e}from"./chunk-FGORMEAO.js";import{b as t}from"./chunk-FWB47YCH.js";import{a as r}from"./chunk-K53W3ELO.js";import{a as s}from"./chunk-GSTOGDAJ.js";import{a as p}from"./chunk-6FLLFCBU.js";import*as o from"react";import f from"classnames";var B=o.forwardRef((m,a)=>{let{className:n,asChild:i,as:P="div",...x}=p(m,e,r,s);return o.createElement(i?t:P,{...x,ref:a,className:f("rt-Box",n)})});B.displayName="Box";export{B as a};
2
+ //# sourceMappingURL=chunk-4YFJWXL2.js.map