@womp/kookie-ui 0.3.24 → 0.3.26

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 +159 -114
  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 -0
  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 +22 -20
  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 +28 -4
  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 +175 -117
  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-D2IX5LU6.js +0 -2
  466. package/dist/esm/chunk-D2IX5LU6.js.map +0 -7
  467. package/dist/esm/chunk-DZ4H2KTP.js +0 -2
  468. package/dist/esm/chunk-DZ4H2KTP.js.map +0 -7
  469. package/dist/esm/chunk-H4MMVAGQ.js +0 -2
  470. package/dist/esm/chunk-H4MMVAGQ.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-OKJNS7Z7.js +0 -2
  480. package/dist/esm/chunk-OKJNS7Z7.js.map +0 -7
  481. package/dist/esm/chunk-Q73Y5O5P.js +0 -2
  482. package/dist/esm/chunk-Q73Y5O5P.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
package/tokens/base.css CHANGED
@@ -176,9 +176,9 @@
176
176
  --color-panel: var(--color-panel-translucent);
177
177
  --color-surface: var(--color-surface-translucent);
178
178
  --color-dialog: var(--color-dialog-translucent);
179
- --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
180
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
181
- --backdrop-filter-dialog: blur(var(--backdrop-blur-dialog));
179
+ --backdrop-filter-panel: var(--backdrop-filter-panel-enabled);
180
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
181
+ --backdrop-filter-dialog: var(--backdrop-filter-dialog-enabled);
182
182
  --material-blend: 60%;
183
183
  --material-alpha: 1;
184
184
  }
@@ -1598,6 +1598,16 @@
1598
1598
  }
1599
1599
  [data-blur='none'] {
1600
1600
  --blur-factor: 0;
1601
+ --backdrop-filter-components-enabled: none;
1602
+ --backdrop-filter-panel-enabled: none;
1603
+ --backdrop-filter-dialog-enabled: none;
1604
+ }
1605
+ @media (prefers-reduced-transparency: reduce) {
1606
+ .radix-themes {
1607
+ --backdrop-filter-components-enabled: none;
1608
+ --backdrop-filter-panel-enabled: none;
1609
+ --backdrop-filter-dialog-enabled: none;
1610
+ }
1601
1611
  }
1602
1612
  [data-blur='small'] {
1603
1613
  --blur-factor: 0.75;
package/tokens.css CHANGED
@@ -3309,6 +3309,9 @@
3309
3309
  --backdrop-blur-components: var(--blur-4);
3310
3310
  --backdrop-blur-panel: var(--blur-5);
3311
3311
  --backdrop-blur-dialog: var(--blur-6);
3312
+ --backdrop-filter-components-enabled: blur(var(--backdrop-blur-components));
3313
+ --backdrop-filter-panel-enabled: blur(var(--backdrop-blur-panel));
3314
+ --backdrop-filter-dialog-enabled: blur(var(--backdrop-blur-dialog));
3312
3315
  --surface-opacity-light: var(--opacity-5);
3313
3316
  --surface-opacity-heavy: var(--opacity-6);
3314
3317
  --surface-opacity-dark: var(--opacity-7);
@@ -3558,9 +3561,9 @@
3558
3561
  --color-panel: var(--color-panel-translucent);
3559
3562
  --color-surface: var(--color-surface-translucent);
3560
3563
  --color-dialog: var(--color-dialog-translucent);
3561
- --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
3562
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
3563
- --backdrop-filter-dialog: blur(var(--backdrop-blur-dialog));
3564
+ --backdrop-filter-panel: var(--backdrop-filter-panel-enabled);
3565
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
3566
+ --backdrop-filter-dialog: var(--backdrop-filter-dialog-enabled);
3564
3567
  --material-blend: 60%;
3565
3568
  --material-alpha: 1;
3566
3569
  }
@@ -4980,6 +4983,16 @@
4980
4983
  }
4981
4984
  [data-blur='none'] {
4982
4985
  --blur-factor: 0;
4986
+ --backdrop-filter-components-enabled: none;
4987
+ --backdrop-filter-panel-enabled: none;
4988
+ --backdrop-filter-dialog-enabled: none;
4989
+ }
4990
+ @media (prefers-reduced-transparency: reduce) {
4991
+ .radix-themes {
4992
+ --backdrop-filter-components-enabled: none;
4993
+ --backdrop-filter-panel-enabled: none;
4994
+ --backdrop-filter-dialog-enabled: none;
4995
+ }
4983
4996
  }
4984
4997
  [data-blur='small'] {
4985
4998
  --blur-factor: 0.75;
@@ -1,2 +0,0 @@
1
- import{a as h}from"./chunk-USGTBZ43.js";import{a as b}from"./chunk-WNSPLWRV.js";import{b as I,d as G}from"./chunk-IX5HIHVI.js";import{a as E}from"./chunk-MJJ7XDIP.js";import{b as N,c as R}from"./chunk-LN5SP46K.js";import{a as f}from"./chunk-KMPBTEZH.js";import{b as m,d as v,e as y,f as T}from"./chunk-HUKPWYG2.js";import{a as U}from"./chunk-3XT5P2HO.js";var H={};U(H,{CheckboxItem:()=>_,Content:()=>W,Group:()=>O,Item:()=>D,Label:()=>L,RadioGroup:()=>V,RadioItem:()=>z,Root:()=>k,Separator:()=>F,Sub:()=>A,SubContent:()=>j,SubTrigger:()=>K,Trigger:()=>B});import*as e from"react";import s from"classnames";import{ContextMenu as r,Slot as g}from"radix-ui";var k=t=>e.createElement(r.Root,{...t});k.displayName="ContextMenu.Root";var B=e.forwardRef(({children:t,...n},o)=>e.createElement(r.Trigger,{...n,ref:o,asChild:!0},E(t)));B.displayName="ContextMenu.Trigger";var w=e.createContext({}),W=e.forwardRef((t,n)=>{let o=N();e.useEffect(()=>{t.panelBackground!==void 0&&console.warn("Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.")},[t.panelBackground]);let u=t.material??t.panelBackground??o.panelBackground,a=e.useMemo(()=>({material:u,accentColor:o.accentColor}),[u,o.accentColor]),{size:i=m.size.default,variant:C=m.variant.default,highContrast:c=m.highContrast.default,material:p=a.material}=t,{className:x,children:l,color:M,container:S,forceMount:d,material:J,panelBackground:Q,...q}=f(t,m),P=e.useMemo(()=>M||a.accentColor,[M,a.accentColor]);return e.createElement(r.Portal,{container:S,forceMount:d},e.createElement(R,{asChild:!0},e.createElement(r.Content,{"data-accent-color":P,"data-material":p,"data-panel-background":p,alignOffset:-Number(i)*4,collisionPadding:10,...q,asChild:!1,ref:n,className:s("rt-PopperContent","rt-BaseMenuContent","rt-ContextMenuContent",x)},e.createElement(b,{type:"auto"},e.createElement("div",{className:s("rt-BaseMenuViewport","rt-ContextMenuViewport")},e.createElement(w.Provider,{value:e.useMemo(()=>({size:i,variant:C,color:P,highContrast:c,material:p}),[i,C,P,c,p])},l))))))});W.displayName="ContextMenu.Content";var L=e.forwardRef(({className:t,...n},o)=>e.createElement(r.Label,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuLabel","rt-ContextMenuLabel",t)}));L.displayName="ContextMenu.Label";var D=e.forwardRef((t,n)=>{let{className:o,children:u,color:a=v.color.default,shortcut:i,...C}=t;return e.createElement(r.Item,{"data-accent-color":a,...C,ref:n,className:s("rt-reset","rt-BaseMenuItem","rt-ContextMenuItem",o)},e.createElement(g.Slottable,null,u),i&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-ContextMenuShortcut"},e.createElement(h,{size:"1"},i)))});D.displayName="ContextMenu.Item";var O=e.forwardRef(({className:t,...n},o)=>e.createElement(r.Group,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuGroup","rt-ContextMenuGroup",t)}));O.displayName="ContextMenu.Group";var V=e.forwardRef(({className:t,...n},o)=>e.createElement(r.RadioGroup,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuRadioGroup","rt-ContextMenuRadioGroup",t)}));V.displayName="ContextMenu.RadioGroup";var z=e.forwardRef((t,n)=>{let{children:o,className:u,color:a=T.color.default,...i}=t;return e.createElement(r.RadioItem,{...i,asChild:!1,ref:n,"data-accent-color":a,className:s("rt-BaseMenuItem","rt-BaseMenuRadioItem","rt-ContextMenuItem","rt-ContextMenuRadioItem",u)},e.createElement(g.Slottable,null,o),e.createElement(r.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator"},e.createElement(I,{className:"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon"})))});z.displayName="ContextMenu.RadioItem";var _=e.forwardRef((t,n)=>{let{children:o,className:u,shortcut:a,color:i=y.color.default,...C}=t;return e.createElement(r.CheckboxItem,{...C,asChild:!1,ref:n,"data-accent-color":i,className:s("rt-BaseMenuItem","rt-BaseMenuCheckboxItem","rt-ContextMenuItem","rt-ContextMenuCheckboxItem",u)},e.createElement(g.Slottable,null,o),e.createElement(r.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator"},e.createElement(I,{className:"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon"})),a&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-ContextMenuShortcut"},e.createElement(h,{size:"1"},a)))});_.displayName="ContextMenu.CheckboxItem";var A=t=>e.createElement(r.Sub,{...t});A.displayName="ContextMenu.Sub";var K=e.forwardRef((t,n)=>{let{className:o,children:u,...a}=t;return e.createElement(r.SubTrigger,{...a,asChild:!1,ref:n,className:s("rt-BaseMenuItem","rt-BaseMenuSubTrigger","rt-ContextMenuItem","rt-ContextMenuSubTrigger",o)},u,e.createElement("div",{className:"rt-BaseMenuShortcut rt-ContextMenuShortcut"},e.createElement(G,{className:"rt-BaseMenuSubTriggerIcon rt-ContextMenuSubTriggerIcon"})))});K.displayName="ContextMenu.SubTrigger";var j=e.forwardRef((t,n)=>{let{size:o,variant:u,color:a,highContrast:i,material:C}=e.useContext(w),{className:c,children:p,container:x,forceMount:l,material:M,panelBackground:S,...d}=f({size:o,variant:u,color:a,highContrast:i,material:C,...t},m);return e.createElement(r.Portal,{container:x,forceMount:l},e.createElement(R,{asChild:!0},e.createElement(r.SubContent,{"data-accent-color":a,"data-material":C,"data-panel-background":C,alignOffset:-Number(o)*4,sideOffset:1,collisionPadding:10,...d,asChild:!1,ref:n,className:s("rt-PopperContent","rt-BaseMenuContent","rt-BaseMenuSubContent","rt-ContextMenuContent","rt-ContextMenuSubContent",c)},e.createElement(b,{type:"auto"},e.createElement("div",{className:s("rt-BaseMenuViewport","rt-ContextMenuViewport")},p)))))});j.displayName="ContextMenu.SubContent";var F=e.forwardRef(({className:t,...n},o)=>e.createElement(r.Separator,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuSeparator","rt-ContextMenuSeparator",t)}));F.displayName="ContextMenu.Separator";export{k as a,B as b,W as c,L as d,D as e,O as f,V as g,z as h,_ as i,A as j,K as k,j as l,F as m,H as n};
2
- //# sourceMappingURL=chunk-2SS3FA3N.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/context-menu.tsx"],
4
- "sourcesContent": ["/**\n * Context Menu component that provides right-click menu functionality.\n * Requires client-side rendering due to event handling and portal usage.\n */\n'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ContextMenu as ContextMenuPrimitive, Slot } from 'radix-ui';\n\nimport { ScrollArea } from './scroll-area.js';\nimport {\n contextMenuContentPropDefs,\n contextMenuItemPropDefs,\n contextMenuCheckboxItemPropDefs,\n contextMenuRadioItemPropDefs,\n} from './context-menu.props.js';\nimport { Theme, useThemeContext } from './theme.js';\nimport { ThickCheckIcon, ThickChevronRightIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\nimport { Kbd } from './kbd.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ninterface ContextMenuRootProps\n extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Root> {}\nconst ContextMenuRoot: React.FC<ContextMenuRootProps> = (props) => (\n <ContextMenuPrimitive.Root {...props} />\n);\nContextMenuRoot.displayName = 'ContextMenu.Root';\n\ntype ContextMenuTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.Trigger>;\ninterface ContextMenuTriggerProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Trigger, RemovedProps> {}\nconst ContextMenuTrigger = React.forwardRef<ContextMenuTriggerElement, ContextMenuTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </ContextMenuPrimitive.Trigger>\n ),\n);\nContextMenuTrigger.displayName = 'ContextMenu.Trigger';\n\ntype ContextMenuContentOwnProps = GetPropDefTypes<typeof contextMenuContentPropDefs>;\ntype ContextMenuContentContextValue = ContextMenuContentOwnProps;\nconst ContextMenuContentContext = React.createContext<ContextMenuContentContextValue>({});\ntype ContextMenuContentElement = React.ElementRef<typeof ContextMenuPrimitive.Content>;\ninterface ContextMenuContentProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Content, RemovedProps>,\n ContextMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Portal>['container'];\n}\nconst ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMenuContentProps>(\n (props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n // Show deprecation warning for panelBackground when used\n React.useEffect(() => {\n if (props.panelBackground !== undefined) {\n console.warn(\n 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',\n );\n }\n }, [props.panelBackground]);\n\n // Material takes precedence over panelBackground\n const effectiveMaterial =\n props.material ?? props.panelBackground ?? themeContext.panelBackground;\n\n // Memoize theme context values to prevent unnecessary re-renders\n const memoizedThemeContext = React.useMemo(\n () => ({\n material: effectiveMaterial,\n accentColor: themeContext.accentColor,\n }),\n [effectiveMaterial, themeContext.accentColor],\n );\n\n const {\n size = contextMenuContentPropDefs.size.default,\n variant = contextMenuContentPropDefs.variant.default,\n highContrast = contextMenuContentPropDefs.highContrast.default,\n material = memoizedThemeContext.material,\n } = props;\n const {\n className,\n children,\n color,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n ...contentProps\n } = extractProps(props, contextMenuContentPropDefs);\n\n // Memoize color resolution to prevent unnecessary re-renders\n const resolvedColor = React.useMemo(\n () => color || memoizedThemeContext.accentColor,\n [color, memoizedThemeContext.accentColor],\n );\n return (\n <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <ContextMenuPrimitive.Content\n data-accent-color={resolvedColor}\n data-material={material}\n data-panel-background={material}\n alignOffset={-Number(size) * 4}\n collisionPadding={10}\n {...contentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-ContextMenuContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-ContextMenuViewport')}>\n <ContextMenuContentContext.Provider\n value={React.useMemo(\n () => ({ size, variant, color: resolvedColor, highContrast, material }),\n [size, variant, resolvedColor, highContrast, material],\n )}\n >\n {children}\n </ContextMenuContentContext.Provider>\n </div>\n </ScrollArea>\n </ContextMenuPrimitive.Content>\n </Theme>\n </ContextMenuPrimitive.Portal>\n );\n },\n);\nContextMenuContent.displayName = 'ContextMenu.Content';\n\ntype ContextMenuLabelElement = React.ElementRef<typeof ContextMenuPrimitive.Label>;\ninterface ContextMenuLabelProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Label, RemovedProps> {}\nconst ContextMenuLabel = React.forwardRef<ContextMenuLabelElement, ContextMenuLabelProps>(\n ({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Label\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuLabel', 'rt-ContextMenuLabel', className)}\n />\n ),\n);\nContextMenuLabel.displayName = 'ContextMenu.Label';\n\ntype ContextMenuItemElement = React.ElementRef<typeof ContextMenuPrimitive.Item>;\ntype ContextMenuItemOwnProps = GetPropDefTypes<typeof contextMenuItemPropDefs>;\ninterface ContextMenuItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Item, RemovedProps>,\n ContextMenuItemOwnProps {}\nconst ContextMenuItem = React.forwardRef<ContextMenuItemElement, ContextMenuItemProps>(\n (props, forwardedRef) => {\n const {\n className,\n children,\n color = contextMenuItemPropDefs.color.default,\n shortcut,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.Item\n data-accent-color={color}\n {...itemProps}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-ContextMenuItem', className)}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-ContextMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </ContextMenuPrimitive.Item>\n );\n },\n);\nContextMenuItem.displayName = 'ContextMenu.Item';\n\ntype ContextMenuGroupElement = React.ElementRef<typeof ContextMenuPrimitive.Group>;\ninterface ContextMenuGroupProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Group, RemovedProps> {}\nconst ContextMenuGroup = React.forwardRef<ContextMenuGroupElement, ContextMenuGroupProps>(\n ({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Group\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuGroup', 'rt-ContextMenuGroup', className)}\n />\n ),\n);\nContextMenuGroup.displayName = 'ContextMenu.Group';\n\ntype ContextMenuRadioGroupElement = React.ElementRef<typeof ContextMenuPrimitive.RadioGroup>;\ninterface ContextMenuRadioGroupProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.RadioGroup, RemovedProps> {}\nconst ContextMenuRadioGroup = React.forwardRef<\n ContextMenuRadioGroupElement,\n ContextMenuRadioGroupProps\n>(({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.RadioGroup\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuRadioGroup', 'rt-ContextMenuRadioGroup', className)}\n />\n));\nContextMenuRadioGroup.displayName = 'ContextMenu.RadioGroup';\n\ntype ContextMenuRadioItemElement = React.ElementRef<typeof ContextMenuPrimitive.RadioItem>;\ntype ContextMenuRadioItemOwnProps = GetPropDefTypes<typeof contextMenuRadioItemPropDefs>;\ninterface ContextMenuRadioItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.RadioItem, RemovedProps>,\n ContextMenuRadioItemOwnProps {}\nconst ContextMenuRadioItem = React.forwardRef<\n ContextMenuRadioItemElement,\n ContextMenuRadioItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n color = contextMenuRadioItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.RadioItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuRadioItem',\n 'rt-ContextMenuItem',\n 'rt-ContextMenuRadioItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <ContextMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator\">\n <ThickCheckIcon className=\"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon\" />\n </ContextMenuPrimitive.ItemIndicator>\n </ContextMenuPrimitive.RadioItem>\n );\n});\nContextMenuRadioItem.displayName = 'ContextMenu.RadioItem';\n\ntype ContextMenuCheckboxItemElement = React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>;\ntype ContextMenuCheckboxItemOwnProps = GetPropDefTypes<typeof contextMenuCheckboxItemPropDefs>;\ninterface ContextMenuCheckboxItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.CheckboxItem, RemovedProps>,\n ContextMenuCheckboxItemOwnProps {}\nconst ContextMenuCheckboxItem = React.forwardRef<\n ContextMenuCheckboxItemElement,\n ContextMenuCheckboxItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n shortcut,\n color = contextMenuCheckboxItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.CheckboxItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuCheckboxItem',\n 'rt-ContextMenuItem',\n 'rt-ContextMenuCheckboxItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <ContextMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator\">\n <ThickCheckIcon className=\"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon\" />\n </ContextMenuPrimitive.ItemIndicator>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-ContextMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </ContextMenuPrimitive.CheckboxItem>\n );\n});\nContextMenuCheckboxItem.displayName = 'ContextMenu.CheckboxItem';\n\ninterface ContextMenuSubProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Sub, RemovedProps> {}\nconst ContextMenuSub: React.FC<ContextMenuSubProps> = (props) => (\n <ContextMenuPrimitive.Sub {...props} />\n);\nContextMenuSub.displayName = 'ContextMenu.Sub';\n\ntype ContextMenuSubTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>;\ninterface ContextMenuSubTriggerProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.SubTrigger, RemovedProps> {}\nconst ContextMenuSubTrigger = React.forwardRef<\n ContextMenuSubTriggerElement,\n ContextMenuSubTriggerProps\n>((props, forwardedRef) => {\n const { className, children, ...subTriggerProps } = props;\n return (\n <ContextMenuPrimitive.SubTrigger\n {...subTriggerProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuSubTrigger',\n 'rt-ContextMenuItem',\n 'rt-ContextMenuSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"rt-BaseMenuShortcut rt-ContextMenuShortcut\">\n <ThickChevronRightIcon className=\"rt-BaseMenuSubTriggerIcon rt-ContextMenuSubTriggerIcon\" />\n </div>\n </ContextMenuPrimitive.SubTrigger>\n );\n});\nContextMenuSubTrigger.displayName = 'ContextMenu.SubTrigger';\n\ntype ContextMenuSubContentElement = React.ElementRef<typeof ContextMenuPrimitive.SubContent>;\ninterface ContextMenuSubContentProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.SubContent, RemovedProps>,\n ContextMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Portal>['container'];\n}\nconst ContextMenuSubContent = React.forwardRef<\n ContextMenuSubContentElement,\n ContextMenuSubContentProps\n>((props, forwardedRef) => {\n const { size, variant, color, highContrast, material } = React.useContext(ContextMenuContentContext);\n\n const {\n className,\n children,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n ...subContentProps\n } = extractProps(\n { size, variant, color, highContrast, material, ...props },\n contextMenuContentPropDefs,\n );\n return (\n <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <ContextMenuPrimitive.SubContent\n data-accent-color={color}\n data-material={material}\n data-panel-background={material}\n alignOffset={-Number(size) * 4}\n // Side offset accounts for the outer solid box-shadow\n sideOffset={1}\n collisionPadding={10}\n {...subContentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-BaseMenuSubContent',\n 'rt-ContextMenuContent',\n 'rt-ContextMenuSubContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-ContextMenuViewport')}>\n {children}\n </div>\n </ScrollArea>\n </ContextMenuPrimitive.SubContent>\n </Theme>\n </ContextMenuPrimitive.Portal>\n );\n});\nContextMenuSubContent.displayName = 'ContextMenu.SubContent';\n\ntype ContextMenuSeparatorElement = React.ElementRef<typeof ContextMenuPrimitive.Separator>;\ninterface ContextMenuSeparatorProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Separator, RemovedProps> {}\nconst ContextMenuSeparator = React.forwardRef<\n ContextMenuSeparatorElement,\n ContextMenuSeparatorProps\n>(({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Separator\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuSeparator', 'rt-ContextMenuSeparator', className)}\n />\n));\nContextMenuSeparator.displayName = 'ContextMenu.Separator';\n\nexport {\n ContextMenuRoot as Root,\n ContextMenuTrigger as Trigger,\n ContextMenuContent as Content,\n ContextMenuLabel as Label,\n ContextMenuItem as Item,\n ContextMenuGroup as Group,\n ContextMenuRadioGroup as RadioGroup,\n ContextMenuRadioItem as RadioItem,\n ContextMenuCheckboxItem as CheckboxItem,\n ContextMenuSub as Sub,\n ContextMenuSubTrigger as SubTrigger,\n ContextMenuSubContent as SubContent,\n ContextMenuSeparator as Separator,\n};\n\nexport type {\n ContextMenuRootProps as RootProps,\n ContextMenuTriggerProps as TriggerProps,\n ContextMenuContentProps as ContentProps,\n ContextMenuLabelProps as LabelProps,\n ContextMenuItemProps as ItemProps,\n ContextMenuGroupProps as GroupProps,\n ContextMenuRadioGroupProps as RadioGroupProps,\n ContextMenuRadioItemProps as RadioItemProps,\n ContextMenuCheckboxItemProps as CheckboxItemProps,\n ContextMenuSubProps as SubProps,\n ContextMenuSubTriggerProps as SubTriggerProps,\n ContextMenuSubContentProps as SubContentProps,\n ContextMenuSeparatorProps as SeparatorProps,\n};\n"],
5
- "mappings": "mWAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,EAAA,YAAAC,EAAA,UAAAC,EAAA,SAAAC,EAAA,UAAAC,EAAA,eAAAC,EAAA,cAAAC,EAAA,SAAAC,EAAA,cAAAC,EAAA,QAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,YAAAC,IAMA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,eAAeC,EAAsB,QAAAC,MAAY,WAoB1D,IAAMC,EAAmDC,GACvD,gBAACC,EAAqB,KAArB,CAA2B,GAAGD,EAAO,EAExCD,EAAgB,YAAc,mBAK9B,IAAMG,EAA2B,aAC/B,CAAC,CAAE,SAAAC,EAAU,GAAGH,CAAM,EAAGI,IACvB,gBAACH,EAAqB,QAArB,CAA8B,GAAGD,EAAO,IAAKI,EAAc,QAAO,IAChEC,EAAoBF,CAAQ,CAC/B,CAEJ,EACAD,EAAmB,YAAc,sBAIjC,IAAMI,EAAkC,gBAA8C,CAAC,CAAC,EAOlFC,EAA2B,aAC/B,CAACP,EAAOI,IAAiB,CACvB,IAAMI,EAAeC,EAAgB,EAG/B,YAAU,IAAM,CAChBT,EAAM,kBAAoB,QAC5B,QAAQ,KACN,yHACF,CAEJ,EAAG,CAACA,EAAM,eAAe,CAAC,EAG1B,IAAMU,EACJV,EAAM,UAAYA,EAAM,iBAAmBQ,EAAa,gBAGpDG,EAA6B,UACjC,KAAO,CACL,SAAUD,EACV,YAAaF,EAAa,WAC5B,GACA,CAACE,EAAmBF,EAAa,WAAW,CAC9C,EAEM,CACJ,KAAAI,EAAOC,EAA2B,KAAK,QACvC,QAAAC,EAAUD,EAA2B,QAAQ,QAC7C,aAAAE,EAAeF,EAA2B,aAAa,QACvD,SAAAG,EAAWL,EAAqB,QAClC,EAAIX,EACE,CACJ,UAAAiB,EACA,SAAAd,EACA,MAAAe,EACA,UAAAC,EACA,WAAAC,EACA,SAAUC,EACV,gBAAiBC,EACjB,GAAGC,CACL,EAAIC,EAAaxB,EAAOa,CAA0B,EAG5CY,EAAsB,UAC1B,IAAMP,GAASP,EAAqB,YACpC,CAACO,EAAOP,EAAqB,WAAW,CAC1C,EACA,OACE,gBAACV,EAAqB,OAArB,CAA4B,UAAWkB,EAAW,WAAYC,GAC7D,gBAACM,EAAA,CAAM,QAAO,IACZ,gBAACzB,EAAqB,QAArB,CACC,oBAAmBwB,EACnB,gBAAeT,EACf,wBAAuBA,EACvB,YAAa,CAAC,OAAOJ,CAAI,EAAI,EAC7B,iBAAkB,GACjB,GAAGW,EACJ,QAAS,GACT,IAAKnB,EACL,UAAWuB,EACT,mBACA,qBACA,wBACAV,CACF,GAEA,gBAACW,EAAA,CAAW,KAAK,QACf,gBAAC,OAAI,UAAWD,EAAW,sBAAuB,wBAAwB,GACxE,gBAACrB,EAA0B,SAA1B,CACC,MAAa,UACX,KAAO,CAAE,KAAAM,EAAM,QAAAE,EAAS,MAAOW,EAAe,aAAAV,EAAc,SAAAC,CAAS,GACrE,CAACJ,EAAME,EAASW,EAAeV,EAAcC,CAAQ,CACvD,GAECb,CACH,CACF,CACF,CACF,CACF,CACF,CAEJ,CACF,EACAI,EAAmB,YAAc,sBAKjC,IAAMsB,EAAyB,aAC7B,CAAC,CAAE,UAAAZ,EAAW,GAAGjB,CAAM,EAAGI,IACxB,gBAACH,EAAqB,MAArB,CACE,GAAGD,EACJ,QAAS,GACT,IAAKI,EACL,UAAWuB,EAAW,mBAAoB,sBAAuBV,CAAS,EAC5E,CAEJ,EACAY,EAAiB,YAAc,oBAO/B,IAAMC,EAAwB,aAC5B,CAAC9B,EAAOI,IAAiB,CACvB,GAAM,CACJ,UAAAa,EACA,SAAAd,EACA,MAAAe,EAAQa,EAAwB,MAAM,QACtC,SAAAC,EACA,GAAGC,CACL,EAAIjC,EACJ,OACE,gBAACC,EAAqB,KAArB,CACC,oBAAmBiB,EAClB,GAAGe,EACJ,IAAK7B,EACL,UAAWuB,EAAW,WAAY,kBAAmB,qBAAsBV,CAAS,GAEpF,gBAACiB,EAAK,UAAL,KAAgB/B,CAAS,EACzB6B,GACC,gBAAC,OAAI,UAAU,8CACb,gBAACG,EAAA,CAAI,KAAK,KAAKH,CAAS,CAC1B,CAEJ,CAEJ,CACF,EACAF,EAAgB,YAAc,mBAK9B,IAAMM,EAAyB,aAC7B,CAAC,CAAE,UAAAnB,EAAW,GAAGjB,CAAM,EAAGI,IACxB,gBAACH,EAAqB,MAArB,CACE,GAAGD,EACJ,QAAS,GACT,IAAKI,EACL,UAAWuB,EAAW,mBAAoB,sBAAuBV,CAAS,EAC5E,CAEJ,EACAmB,EAAiB,YAAc,oBAK/B,IAAMC,EAA8B,aAGlC,CAAC,CAAE,UAAApB,EAAW,GAAGjB,CAAM,EAAGI,IAC1B,gBAACH,EAAqB,WAArB,CACE,GAAGD,EACJ,QAAS,GACT,IAAKI,EACL,UAAWuB,EAAW,wBAAyB,2BAA4BV,CAAS,EACtF,CACD,EACDoB,EAAsB,YAAc,yBAOpC,IAAMC,EAA6B,aAGjC,CAACtC,EAAOI,IAAiB,CACzB,GAAM,CACJ,SAAAD,EACA,UAAAc,EACA,MAAAC,EAAQqB,EAA6B,MAAM,QAC3C,GAAGN,CACL,EAAIjC,EACJ,OACE,gBAACC,EAAqB,UAArB,CACE,GAAGgC,EACJ,QAAS,GACT,IAAK7B,EACL,oBAAmBc,EACnB,UAAWS,EACT,kBACA,uBACA,qBACA,0BACAV,CACF,GAEA,gBAACiB,EAAK,UAAL,KAAgB/B,CAAS,EAC1B,gBAACF,EAAqB,cAArB,CAAmC,UAAU,wDAC5C,gBAACuC,EAAA,CAAe,UAAU,+DAA+D,CAC3F,CACF,CAEJ,CAAC,EACDF,EAAqB,YAAc,wBAOnC,IAAMG,EAAgC,aAGpC,CAACzC,EAAOI,IAAiB,CACzB,GAAM,CACJ,SAAAD,EACA,UAAAc,EACA,SAAAe,EACA,MAAAd,EAAQwB,EAAgC,MAAM,QAC9C,GAAGT,CACL,EAAIjC,EACJ,OACE,gBAACC,EAAqB,aAArB,CACE,GAAGgC,EACJ,QAAS,GACT,IAAK7B,EACL,oBAAmBc,EACnB,UAAWS,EACT,kBACA,0BACA,qBACA,6BACAV,CACF,GAEA,gBAACiB,EAAK,UAAL,KAAgB/B,CAAS,EAC1B,gBAACF,EAAqB,cAArB,CAAmC,UAAU,wDAC5C,gBAACuC,EAAA,CAAe,UAAU,+DAA+D,CAC3F,EACCR,GACC,gBAAC,OAAI,UAAU,8CACb,gBAACG,EAAA,CAAI,KAAK,KAAKH,CAAS,CAC1B,CAEJ,CAEJ,CAAC,EACDS,EAAwB,YAAc,2BAItC,IAAME,EAAiD3C,GACrD,gBAACC,EAAqB,IAArB,CAA0B,GAAGD,EAAO,EAEvC2C,EAAe,YAAc,kBAK7B,IAAMC,EAA8B,aAGlC,CAAC5C,EAAOI,IAAiB,CACzB,GAAM,CAAE,UAAAa,EAAW,SAAAd,EAAU,GAAG0C,CAAgB,EAAI7C,EACpD,OACE,gBAACC,EAAqB,WAArB,CACE,GAAG4C,EACJ,QAAS,GACT,IAAKzC,EACL,UAAWuB,EACT,kBACA,wBACA,qBACA,2BACAV,CACF,GAECd,EACD,gBAAC,OAAI,UAAU,8CACb,gBAAC2C,EAAA,CAAsB,UAAU,yDAAyD,CAC5F,CACF,CAEJ,CAAC,EACDF,EAAsB,YAAc,yBAQpC,IAAMG,EAA8B,aAGlC,CAAC/C,EAAOI,IAAiB,CACzB,GAAM,CAAE,KAAAQ,EAAM,QAAAE,EAAS,MAAAI,EAAO,aAAAH,EAAc,SAAAC,CAAS,EAAU,aAAWV,CAAyB,EAE7F,CACJ,UAAAW,EACA,SAAAd,EACA,UAAAgB,EACA,WAAAC,EACA,SAAUC,EACV,gBAAiBC,EACjB,GAAG0B,CACL,EAAIxB,EACF,CAAE,KAAAZ,EAAM,QAAAE,EAAS,MAAAI,EAAO,aAAAH,EAAc,SAAAC,EAAU,GAAGhB,CAAM,EACzDa,CACF,EACA,OACE,gBAACZ,EAAqB,OAArB,CAA4B,UAAWkB,EAAW,WAAYC,GAC7D,gBAACM,EAAA,CAAM,QAAO,IACZ,gBAACzB,EAAqB,WAArB,CACC,oBAAmBiB,EACnB,gBAAeF,EACf,wBAAuBA,EACvB,YAAa,CAAC,OAAOJ,CAAI,EAAI,EAE7B,WAAY,EACZ,iBAAkB,GACjB,GAAGoC,EACJ,QAAS,GACT,IAAK5C,EACL,UAAWuB,EACT,mBACA,qBACA,wBACA,wBACA,2BACAV,CACF,GAEA,gBAACW,EAAA,CAAW,KAAK,QACf,gBAAC,OAAI,UAAWD,EAAW,sBAAuB,wBAAwB,GACvExB,CACH,CACF,CACF,CACF,CACF,CAEJ,CAAC,EACD4C,EAAsB,YAAc,yBAKpC,IAAME,EAA6B,aAGjC,CAAC,CAAE,UAAAhC,EAAW,GAAGjB,CAAM,EAAGI,IAC1B,gBAACH,EAAqB,UAArB,CACE,GAAGD,EACJ,QAAS,GACT,IAAKI,EACL,UAAWuB,EAAW,uBAAwB,0BAA2BV,CAAS,EACpF,CACD,EACDgC,EAAqB,YAAc",
6
- "names": ["context_menu_exports", "__export", "ContextMenuCheckboxItem", "ContextMenuContent", "ContextMenuGroup", "ContextMenuItem", "ContextMenuLabel", "ContextMenuRadioGroup", "ContextMenuRadioItem", "ContextMenuRoot", "ContextMenuSeparator", "ContextMenuSub", "ContextMenuSubContent", "ContextMenuSubTrigger", "ContextMenuTrigger", "React", "classNames", "ContextMenuPrimitive", "Slot", "ContextMenuRoot", "props", "ContextMenuPrimitive", "ContextMenuTrigger", "children", "forwardedRef", "requireReactElement", "ContextMenuContentContext", "ContextMenuContent", "themeContext", "useThemeContext", "effectiveMaterial", "memoizedThemeContext", "size", "baseMenuContentPropDefs", "variant", "highContrast", "material", "className", "color", "container", "forceMount", "_", "__", "contentProps", "extractProps", "resolvedColor", "Theme", "classNames", "ScrollArea", "ContextMenuLabel", "ContextMenuItem", "baseMenuItemPropDefs", "shortcut", "itemProps", "Slot", "Kbd", "ContextMenuGroup", "ContextMenuRadioGroup", "ContextMenuRadioItem", "baseMenuRadioItemPropDefs", "ThickCheckIcon", "ContextMenuCheckboxItem", "baseMenuCheckboxItemPropDefs", "ContextMenuSub", "ContextMenuSubTrigger", "subTriggerProps", "ThickChevronRightIcon", "ContextMenuSubContent", "subContentProps", "ContextMenuSeparator"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as t}from"./chunk-GSTOGDAJ.js";import{a as e}from"./chunk-E23RKOQJ.js";import{a as s}from"./chunk-ZMEXIPWM.js";import y from"classnames";var r=t.m.values;function S(m){let[a,o]=s({className:"rt-r-m",customProperties:["--margin"],propValues:r,value:m.m}),[l,i]=s({className:"rt-r-mx",customProperties:["--margin-left","--margin-right"],propValues:r,value:m.mx}),[p,u]=s({className:"rt-r-my",customProperties:["--margin-top","--margin-bottom"],propValues:r,value:m.my}),[n,c]=s({className:"rt-r-mt",customProperties:["--margin-top"],propValues:r,value:m.mt}),[g,P]=s({className:"rt-r-mr",customProperties:["--margin-right"],propValues:r,value:m.mr}),[N,C]=s({className:"rt-r-mb",customProperties:["--margin-bottom"],propValues:r,value:m.mb}),[f,v]=s({className:"rt-r-ml",customProperties:["--margin-left"],propValues:r,value:m.ml});return[y(a,l,p,n,g,N,f),e(o,i,u,c,P,C,v)]}export{S as a};
2
- //# sourceMappingURL=chunk-5U2Q23K3.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/helpers/get-margin-styles.ts"],
4
- "sourcesContent": ["import classNames from 'classnames';\n\nimport { getResponsiveStyles } from './get-responsive-styles.js';\nimport { mergeStyles } from './merge-styles.js';\nimport { marginPropDefs } from '../props/margin.props.js';\n\nimport type { MarginProps } from '../props/margin.props.js';\n\nconst marginValues = marginPropDefs.m.values;\n\nexport function getMarginStyles(props: MarginProps) {\n const [mClassNames, mCustomProperties] = getResponsiveStyles({\n className: 'rt-r-m',\n customProperties: ['--margin'],\n propValues: marginValues,\n value: props.m,\n });\n\n const [mxClassNames, mxCustomProperties] = getResponsiveStyles({\n className: 'rt-r-mx',\n customProperties: ['--margin-left', '--margin-right'],\n propValues: marginValues,\n value: props.mx,\n });\n\n const [myClassNames, myCustomProperties] = getResponsiveStyles({\n className: 'rt-r-my',\n customProperties: ['--margin-top', '--margin-bottom'],\n propValues: marginValues,\n value: props.my,\n });\n\n const [mtClassNames, mtCustomProperties] = getResponsiveStyles({\n className: 'rt-r-mt',\n customProperties: ['--margin-top'],\n propValues: marginValues,\n value: props.mt,\n });\n\n const [mrClassNames, mrCustomProperties] = getResponsiveStyles({\n className: 'rt-r-mr',\n customProperties: ['--margin-right'],\n propValues: marginValues,\n value: props.mr,\n });\n\n const [mbClassNames, mbCustomProperties] = getResponsiveStyles({\n className: 'rt-r-mb',\n customProperties: ['--margin-bottom'],\n propValues: marginValues,\n value: props.mb,\n });\n\n const [mlClassNames, mlCustomProperties] = getResponsiveStyles({\n className: 'rt-r-ml',\n customProperties: ['--margin-left'],\n propValues: marginValues,\n value: props.ml,\n });\n\n return [\n classNames(\n mClassNames,\n mxClassNames,\n myClassNames,\n mtClassNames,\n mrClassNames,\n mbClassNames,\n mlClassNames\n ),\n mergeStyles(\n mCustomProperties,\n mxCustomProperties,\n myCustomProperties,\n mtCustomProperties,\n mrCustomProperties,\n mbCustomProperties,\n mlCustomProperties\n ),\n ] as const;\n}\n"],
5
- "mappings": "wHAAA,OAAOA,MAAgB,aAQvB,IAAMC,EAAeC,EAAe,EAAE,OAE/B,SAASC,EAAgBC,EAAoB,CAClD,GAAM,CAACC,EAAaC,CAAiB,EAAIC,EAAoB,CAC3D,UAAW,SACX,iBAAkB,CAAC,UAAU,EAC7B,WAAYN,EACZ,MAAOG,EAAM,CACf,CAAC,EAEK,CAACI,EAAcC,CAAkB,EAAIF,EAAoB,CAC7D,UAAW,UACX,iBAAkB,CAAC,gBAAiB,gBAAgB,EACpD,WAAYN,EACZ,MAAOG,EAAM,EACf,CAAC,EAEK,CAACM,EAAcC,CAAkB,EAAIJ,EAAoB,CAC7D,UAAW,UACX,iBAAkB,CAAC,eAAgB,iBAAiB,EACpD,WAAYN,EACZ,MAAOG,EAAM,EACf,CAAC,EAEK,CAACQ,EAAcC,CAAkB,EAAIN,EAAoB,CAC7D,UAAW,UACX,iBAAkB,CAAC,cAAc,EACjC,WAAYN,EACZ,MAAOG,EAAM,EACf,CAAC,EAEK,CAACU,EAAcC,CAAkB,EAAIR,EAAoB,CAC7D,UAAW,UACX,iBAAkB,CAAC,gBAAgB,EACnC,WAAYN,EACZ,MAAOG,EAAM,EACf,CAAC,EAEK,CAACY,EAAcC,CAAkB,EAAIV,EAAoB,CAC7D,UAAW,UACX,iBAAkB,CAAC,iBAAiB,EACpC,WAAYN,EACZ,MAAOG,EAAM,EACf,CAAC,EAEK,CAACc,EAAcC,CAAkB,EAAIZ,EAAoB,CAC7D,UAAW,UACX,iBAAkB,CAAC,eAAe,EAClC,WAAYN,EACZ,MAAOG,EAAM,EACf,CAAC,EAED,MAAO,CACLgB,EACEf,EACAG,EACAE,EACAE,EACAE,EACAE,EACAE,CACF,EACAG,EACEf,EACAG,EACAE,EACAE,EACAE,EACAE,EACAE,CACF,CACF,CACF",
6
- "names": ["classNames", "marginValues", "marginPropDefs", "getMarginStyles", "props", "mClassNames", "mCustomProperties", "getResponsiveStyles", "mxClassNames", "mxCustomProperties", "myClassNames", "myCustomProperties", "mtClassNames", "mtCustomProperties", "mrClassNames", "mrCustomProperties", "mbClassNames", "mbCustomProperties", "mlClassNames", "mlCustomProperties", "classNames", "mergeStyles"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as d}from"./chunk-XHQGMOXV.js";import{a as l}from"./chunk-MJ47O7KH.js";import{a as s}from"./chunk-GSTOGDAJ.js";import{a as i}from"./chunk-KMPBTEZH.js";import*as e from"react";import C from"classnames";import{Slot as h}from"radix-ui";var T=e.forwardRef((m,c)=>{let{asChild:t,className:f,children:g,color:P,radius:u,material:r,panelBackground:o,tooltip:a,tooltipSide:b="top",tooltipAlign:B="center",tooltipDelayDuration:y,tooltipDisableHoverableContent:R,...D}=i(m,l,s),p=e.useMemo(()=>r??o,[r,o]);e.useEffect(()=>{o!==void 0&&console.warn("Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.")},[o]);let v=e.useMemo(()=>t?h.Root:"span",[t]),n=e.createElement(v,{"data-accent-color":P,"data-radius":u,"data-material":p,"data-panel-background":p,...D,ref:c,className:C("rt-reset","rt-Badge",f)},g);return a?e.createElement(d,{content:a,side:b,align:B,delayDuration:y,disableHoverableContent:R},n):n});T.displayName="Badge";export{T as a};
2
- //# sourceMappingURL=chunk-6ELPYR73.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/badge.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\n\nimport { badgePropDefs } from './badge.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { marginPropDefs } from '../props/margin.props.js';\nimport { Tooltip } from './tooltip.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 BadgeElement = React.ElementRef<'span'>;\ntype BadgeOwnProps = GetPropDefTypes<typeof badgePropDefs>;\n\n// Tooltip props that can be passed to Badge\ninterface BadgeTooltipProps {\n tooltip?: React.ReactNode;\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n tooltipAlign?: 'start' | 'center' | 'end';\n tooltipDelayDuration?: number;\n tooltipDisableHoverableContent?: boolean;\n}\n\ninterface BadgeProps\n extends ComponentPropsWithout<'span', RemovedProps>,\n MarginProps,\n BadgeOwnProps,\n BadgeTooltipProps {}\n\nconst Badge = React.forwardRef<BadgeElement, BadgeProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n children,\n color,\n radius,\n material,\n panelBackground,\n tooltip,\n tooltipSide = 'top',\n tooltipAlign = 'center',\n tooltipDelayDuration,\n tooltipDisableHoverableContent,\n ...badgeProps\n } = extractProps(props, badgePropDefs, marginPropDefs);\n\n // Memoize material calculation for performance\n const effectiveMaterial = React.useMemo(\n () => material ?? panelBackground,\n [material, panelBackground],\n );\n\n // Show deprecation warning for panelBackground when used\n React.useEffect(() => {\n if (panelBackground !== undefined) {\n console.warn(\n 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',\n );\n }\n }, [panelBackground]);\n\n // Memoize component variable to prevent unnecessary re-renders\n const Comp = React.useMemo(() => (asChild ? Slot.Root : 'span'), [asChild]);\n\n const badge = (\n <Comp\n data-accent-color={color}\n data-radius={radius}\n data-material={effectiveMaterial}\n data-panel-background={effectiveMaterial}\n {...badgeProps}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-Badge', className)}\n >\n {children}\n </Comp>\n );\n\n // If no tooltip is provided, return the badge as-is\n if (!tooltip) {\n return badge;\n }\n\n // Wrap with Tooltip when tooltip content is provided\n return (\n <Tooltip\n content={tooltip}\n side={tooltipSide}\n align={tooltipAlign}\n delayDuration={tooltipDelayDuration}\n disableHoverableContent={tooltipDisableHoverableContent}\n >\n {badge}\n </Tooltip>\n );\n});\nBadge.displayName = 'Badge';\n\nexport { Badge };\nexport type { BadgeProps };\n"],
5
- "mappings": "gKAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,QAAAC,MAAY,WA6BrB,IAAMC,EAAc,aAAqC,CAACC,EAAOC,IAAiB,CAChF,GAAM,CACJ,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,QAAAC,EACA,YAAAC,EAAc,MACd,aAAAC,EAAe,SACf,qBAAAC,EACA,+BAAAC,EACA,GAAGC,CACL,EAAIC,EAAaf,EAAOgB,EAAeC,CAAc,EAG/CC,EAA0B,UAC9B,IAAMX,GAAYC,EAClB,CAACD,EAAUC,CAAe,CAC5B,EAGM,YAAU,IAAM,CAChBA,IAAoB,QACtB,QAAQ,KACN,yHACF,CAEJ,EAAG,CAACA,CAAe,CAAC,EAGpB,IAAMW,EAAa,UAAQ,IAAOjB,EAAUkB,EAAK,KAAO,OAAS,CAAClB,CAAO,CAAC,EAEpEmB,EACJ,gBAACF,EAAA,CACC,oBAAmBd,EACnB,cAAaC,EACb,gBAAeY,EACf,wBAAuBA,EACtB,GAAGJ,EACJ,IAAKb,EACL,UAAWqB,EAAW,WAAY,WAAYnB,CAAS,GAEtDC,CACH,EAIF,OAAKK,EAMH,gBAACc,EAAA,CACC,QAASd,EACT,KAAMC,EACN,MAAOC,EACP,cAAeC,EACf,wBAAyBC,GAExBQ,CACH,EAbOA,CAeX,CAAC,EACDtB,EAAM,YAAc",
6
- "names": ["React", "classNames", "Slot", "Badge", "props", "forwardedRef", "asChild", "className", "children", "color", "radius", "material", "panelBackground", "tooltip", "tooltipSide", "tooltipAlign", "tooltipDelayDuration", "tooltipDisableHoverableContent", "badgeProps", "extractProps", "badgePropDefs", "marginPropDefs", "effectiveMaterial", "Comp", "Slot", "badge", "classNames", "Tooltip"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as Se}from"./chunk-25U7DENY.js";import{a as Ee}from"./chunk-4N5JU7XQ.js";import{a as Me}from"./chunk-GWYFT3EI.js";import{a as dn}from"./chunk-2LYX5S7H.js";import{a as Le,c as ke}from"./chunk-5LXFJMFB.js";import{a as Re,b as Fe,c as je,d as Ue,e as We,f as $e,g as qe,h as Oe,i as Ge,j as Xe,k as Ke,l as Ye,m as Je,o as Qe,p as Ze,q as en,r as nn,s as tn,u as on,v as Te}from"./chunk-SNHEJU2S.js";import{a as Ie,c as Ve,d as He}from"./chunk-UUX42HBM.js";import{a as rn,b as be}from"./chunk-Q73Y5O5P.js";import{a as ln,b as sn,c as he}from"./chunk-CECQNGUL.js";import{a as an}from"./chunk-NNO7M466.js";import{a as Ae}from"./chunk-AGAQC4HH.js";import{a as we}from"./chunk-YEA646GM.js";import{a as vn}from"./chunk-3XT5P2HO.js";var kn={};vn(kn,{Bottom:()=>Se,Content:()=>xe,Header:()=>ze,Inspector:()=>Ee,Left:()=>Ce,Panel:()=>ie,Rail:()=>de,Root:()=>pn,Sidebar:()=>Me,Trigger:()=>un,useResponsivePresentation:()=>Le,useShell:()=>Re,useSidebarMode:()=>Oe});import*as e from"react";import se from"classnames";var gn=Symbol("rtShellSlot");function ce(n,a){return n[gn]=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 On(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 f=n.sidebarMode==="collapsed"?"expanded":n.sidebarMode==="expanded"?"collapsed":"expanded";return{...n,sidebarMode:f}}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 cn(n){let a=e.Children.toArray(n),f=a.some(c=>e.isValidElement(c)&&c.type?.displayName==="Shell.Panel"&&!!c.props?.defaultOpen),v=a.find(c=>e.isValidElement(c)&&c.type?.displayName==="Shell.Rail"),p=v?v.props?.defaultOpen:void 0,m=v?p===void 0?!0:typeof p=="boolean"?p:typeof p=="object"?p.initial??Object.values(p)[0]??!0:!0:!1,T=a.some(c=>e.isValidElement(c)&&c.type?.displayName==="Shell.Inspector"&&!!c.props?.defaultOpen),L=a.some(c=>e.isValidElement(c)&&c.type?.displayName==="Shell.Inspector"&&typeof c.props?.open<"u"&&!!c.props?.open),d=a.some(c=>{if(!e.isValidElement(c)||c.type?.displayName!=="Shell.Panel")return!1;let r=c.props?.open;return typeof r>"u"?!1:typeof r=="boolean"?r:typeof r=="object"&&r!==null?r.initial??Object.values(r)[0]??!1:!1}),u=()=>{let c=a.find(S=>e.isValidElement(S)&&S.type?.displayName==="Shell.Sidebar");if(!c)return"expanded";let r=c.props;if(typeof r?.state<"u"){if(typeof r.state=="string")return r.state;if(typeof r.state=="object")return r.state.initial??Object.values(r.state)[0]??"expanded"}if(typeof r?.defaultState<"u"){if(typeof r.defaultState=="string")return r.defaultState;if(typeof r.defaultState=="object")return r.defaultState.initial??Object.values(r.defaultState)[0]??"expanded"}return"expanded"},P=()=>{let c=a.find(S=>e.isValidElement(S)&&S.type?.displayName==="Shell.Bottom");if(!c)return"collapsed";let r=c.props;if(typeof r?.open<"u"){if(typeof r.open=="boolean")return r.open?"expanded":"collapsed";if(typeof r.open=="object")return r.open.initial??Object.values(r.open)[0]?"expanded":"collapsed"}return typeof r?.defaultOpen<"u"&&r.defaultOpen?"expanded":"collapsed"};return{hasPanelDefaultOpen:f,leftMode:f||d||m?"expanded":"collapsed",panelMode:f||d?"expanded":"collapsed",sidebarMode:u(),inspectorMode:T||L?"expanded":"collapsed",bottomMode:P()}}var pn=e.forwardRef(({className:n,children:a,height:f="full",...v},p)=>{let{breakpoint:m,ready:T}=we(),L=e.useRef(!1),[d,u]=e.useReducer(On,a,t=>{let{hasPanelDefaultOpen:s,...C}=cn(t);return L.current=s,C}),P=e.useCallback(t=>u({type:"SET_LEFT_MODE",mode:t}),[]),c=e.useCallback(t=>u({type:"SET_PANEL_MODE",mode:t}),[]),r=e.useCallback(t=>u({type:"SET_SIDEBAR_MODE",mode:t}),[]),S=e.useCallback(t=>u({type:"SET_INSPECTOR_MODE",mode:t}),[]),I=e.useCallback(t=>u({type:"SET_BOTTOM_MODE",mode:t}),[]),[R,D]=e.useState(!1),[l,N]=e.useState(!1),V=e.useRef(t=>t==="collapsed"?"thin":t==="thin"?"expanded":"collapsed"),G=e.useCallback(t=>{V.current=t},[]);e.useLayoutEffect(()=>{l&&R&&console.warn("Shell: Sidebar cannot coexist with Rail or Panel. Use either Rail+Panel OR Sidebar.")},[l,R]);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(s=>j(s,de)||j(s,ie)),[a]),k=e.useMemo(()=>e.Children.toArray(a).some(s=>j(s,Me)),[a]),_=e.useRef({left:W,sidebar:k});if(_.current.left!==W||_.current.sidebar!==k){let t=W&&!_.current.left,s=k&&!_.current.sidebar;if(_.current={left:W,sidebar:k},t||s){let{hasPanelDefaultOpen:C,...w}=cn(a);t&&(L.current=C,w.leftMode!==d.leftMode&&u({type:"SET_LEFT_MODE",mode:w.leftMode}),w.panelMode!==d.panelMode&&u({type:"SET_PANEL_MODE",mode:w.panelMode})),s&&w.sidebarMode!==d.sidebarMode&&u({type:"SET_SIDEBAR_MODE",mode:w.sidebarMode})}}let i=e.useRef(d.sidebarMode);i.current=d.sidebarMode;let X=e.useCallback(t=>{if(t==="sidebar"){let s=V.current(i.current);r(s);return}u({type:"TOGGLE_PANE",target:t})},[r]),K=e.useCallback(t=>{if(t==="sidebar")return r("expanded");u({type:"EXPAND_PANE",target:t})},[r]),$=e.useCallback(t=>{if(t==="sidebar")return r("collapsed");u({type:"COLLAPSE_PANE",target:t})},[r]),le=e.useMemo(()=>({leftMode:d.leftMode,setLeftMode:P,panelMode:d.panelMode,setPanelMode:c,sidebarMode:d.sidebarMode,setSidebarMode:r,inspectorMode:d.inspectorMode,setInspectorMode:S,bottomMode:d.bottomMode,setBottomMode:I,hasLeft:R,setHasLeft:D,hasSidebar:l,setHasSidebar:N,currentBreakpoint:m,currentBreakpointReady:T,leftResolvedPresentation:H,togglePane:X,expandPane:K,collapsePane:$,setSidebarToggleComputer:G,onLeftPres:J,onRailDefaults:Q,onPanelDefaults:Z}),[d.leftMode,P,d.panelMode,c,d.sidebarMode,r,d.inspectorMode,S,d.bottomMode,I,R,l,m,T,H,X,K,$,G,J,Q,Z]),{headerEls:me,railEls:M,panelEls:b,sidebarEls:B,contentEls:A,inspectorEls:E,bottomEls:oe}=e.useMemo(()=>{let t={headerEls:[],railEls:[],panelEls:[],sidebarEls:[],contentEls:[],inspectorEls:[],bottomEls:[]};for(let s of e.Children.toArray(a))j(s,ze)?t.headerEls.push(s):j(s,de)?t.railEls.push(s):j(s,ie)?t.panelEls.push(s):j(s,Me)?t.sidebarEls.push(s):j(s,xe)?t.contentEls.push(s):j(s,Ee)?t.inspectorEls.push(s):j(s,Se)&&t.bottomEls.push(s);return t},[a]),z=M[0]?.props?.open,x=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[m]!==void 0)return t[m];let s=["xl","lg","md","sm","xs","initial"],C=s.indexOf(m);for(let w=C+1;w<s.length;w++){let fe=s[w];if(t[fe]!==void 0)return t[fe]}},[z,m]),F=b[0]?.props?.open,h=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[m]!==void 0)return t[m];let s=["xl","lg","md","sm","xs","initial"],C=s.indexOf(m);for(let w=C+1;w<s.length;w++){let fe=s[w];if(t[fe]!==void 0)return t[fe]}},[F,m]),pe=e.useRef(0),ee=e.useRef(0),ae=e.useRef(0),ue=e.useRef(x),o=e.useRef(h);e.useLayoutEffect(()=>{if(x===void 0){ue.current=void 0;return}ue.current!==x&&(ue.current=x,ee.current=++pe.current)},[x]),e.useLayoutEffect(()=>{if(h===void 0){o.current=void 0;return}o.current!==h&&(o.current=h,ae.current=++pe.current)},[h]),e.useLayoutEffect(()=>{typeof x>"u"||P(x?"expanded":"collapsed")},[x,P]);let y=M[0]?.props?.onOpenChange,g=b[0]?.props?.onOpenChange,O=e.useRef(null);e.useLayoutEffect(()=>{if(x!==!1||h!==!0){O.current=null;return}let t=ae.current>ee.current,s=t?"open-rail":"close-panel",C=O.current;C&&C.railSeq===ee.current&&C.panelSeq===ae.current&&C.action===s||(O.current={railSeq:ee.current,panelSeq:ae.current,action:s},t?y?.(!0,{reason:"panel"}):g?.(!1,{reason:"left"}))},[x,h,y,g]);let ne=x,De=e.useMemo(()=>f==="full"?{height:"100vh"}:f==="auto"?{height:"auto"}:typeof f=="string"?{height:f}:typeof f=="number"?{height:`${f}px`}:{},[f]),[re,te]=e.useState(null),Pe=e.useCallback(t=>te(t),[]),ye=e.useCallback(()=>te(null),[]),fn=e.useMemo(()=>({currentBreakpoint:m,currentBreakpointReady:T,leftResolvedPresentation:H}),[m,T,H]),Rn=e.useMemo(()=>({leftMode:d.leftMode,setLeftMode:P}),[d.leftMode,P]),Mn=e.useMemo(()=>({panelMode:d.panelMode,setPanelMode:c}),[d.panelMode,c]),mn=e.useMemo(()=>({sidebarMode:d.sidebarMode,setSidebarMode:r}),[d.sidebarMode,r]),Pn=e.useMemo(()=>({inspectorMode:d.inspectorMode,setInspectorMode:S}),[d.inspectorMode,S]),yn=e.useMemo(()=>({bottomMode:d.bottomMode,setBottomMode:I}),[d.bottomMode,I]),bn=e.useMemo(()=>({hasLeft:R,setHasLeft:D,hasSidebar:l,setHasSidebar:N}),[R,D,l,N]),[ve,Ne]=e.useState(new Set),_e=e.useCallback(t=>{Ne(s=>{if(s.has(t))return s;let C=new Set(s);return C.add(t),C})},[]),Be=e.useCallback(t=>{Ne(s=>{if(!s.has(t))return s;let C=new Set(s);return C.delete(t),C})},[]),ge=ve.size>0,hn=e.useMemo(()=>({insetPanes:ve,registerInset:_e,unregisterInset:Be,hasAnyInset:ge}),[ve,_e,Be,ge]),Sn=e.useMemo(()=>({peekTarget:re,setPeekTarget:te,peekPane:Pe,clearPeek:ye}),[re,te,Pe,ye]),En=e.useMemo(()=>({togglePane:X,expandPane:K,collapsePane:$,setSidebarToggleComputer:G}),[X,K,$,G]),Cn=e.useMemo(()=>({...le,leftControlledOpen:ne,peekTarget:re,setPeekTarget:te,peekPane:Pe,clearPeek:ye}),[le,ne,re,te,Pe,ye]),xn=e.useMemo(()=>{if(!W||k)return null;let t=M[0],s=b[0],C=!!t?.props?.inset||!!s?.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:C}:{defaultOpen:L.current?!0:void 0,inset:C};return e.createElement(Ce,{...w},M,b)},[W,k,M,b]);return e.createElement("div",{...v,ref:p,className:se("rt-ShellRoot",n),style:{...De,...v.style}},e.createElement(Fe,{value:Cn},e.createElement(Je.Provider,{value:fn},e.createElement(je.Provider,{value:Rn},e.createElement(We.Provider,{value:Mn},e.createElement(qe.Provider,{value:mn},e.createElement(Ge.Provider,{value:Pn},e.createElement(Ke.Provider,{value:yn},e.createElement(tn.Provider,{value:bn},e.createElement(Qe.Provider,{value:Sn},e.createElement(en.Provider,{value:En},e.createElement(on.Provider,{value:hn},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},xn??B,A,E),oe))))))))))))});pn.displayName="Shell.Root";var ze=e.forwardRef(({className:n,height:a=64,style:f,...v},p)=>e.createElement("header",{...v,ref:p,className:se("rt-ShellHeader",n),style:{...f,"--shell-header-height":`${a}px`}}));ze.displayName="Shell.Header";var Tn=["open","defaultOpen","onOpenChange","mode","defaultMode","onModeChange"],Ce=e.forwardRef((n,a)=>{let{className:f,presentation:v={initial:"fixed",sm:"fixed"},collapsible:p=!0,onExpand:m,onCollapse:T,children:L,style:d,inset:u,...P}=n,{registerInset:c,unregisterInset:r}=Te();e.useEffect(()=>{if(u)return c("left"),()=>r("left")},[u,c,r]);let S=P.open,I=P.defaultOpen,R=P.onOpenChange,D=ln(P,Tn),l=Re(),{setHasLeft:N}=l,V=Le(v),G=V==="overlay",H=V==="stacked",Y=e.useRef(null);e.useEffect(()=>{l.onLeftPres?.(V)},[l,V]);let J=e.useCallback(M=>{Y.current=M,typeof a=="function"?a(M):a&&(a.current=M)},[a]);e.useEffect(()=>(N(!0),()=>N(!1)),[N]);let U=e.useRef(null),q=e.useRef(void 0),Q=e.useMemo(()=>{if(!(typeof S>"u"))return S?"expanded":"collapsed"},[S]),Z=e.useMemo(()=>he(I),[I]),W=e.useRef(R),k=e.useRef(S);e.useLayoutEffect(()=>{W.current=R,k.current=S});let{resolvedControlled:_}=ke({controlledValue:Q,defaultValue:Z,currentValue:l.leftMode,setValue:l.setLeftMode,breakpointReady:l.currentBreakpointReady,onInit:M=>W.current?.(M==="expanded",{reason:"init"})}),i=e.useRef(null);e.useEffect(()=>{let M=U.current,b=i.current,A=q.current!==_;if(M!==null&&M!==l.leftMode){let E=typeof k.current<"u",oe=_===void 0?void 0:_==="expanded",z=l.leftMode==="expanded";if(!E||!A&&z!==oe){let x="toggle";b!==null&&b!==l.panelMode&&M==="collapsed"&&l.leftMode==="expanded"&&l.panelMode==="expanded"&&(x="panel"),W.current?.(z,{reason:x})}}U.current=l.leftMode,i.current=l.panelMode,q.current=_},[l.leftMode,l.panelMode,_]);let X=e.useRef(m),K=e.useRef(T);e.useLayoutEffect(()=>{X.current=m,K.current=T});let $=e.useRef(null),le=e.useRef(!1);e.useEffect(()=>{let M=l.leftMode;if(!l.currentBreakpointReady){$.current=M;return}if(!le.current){le.current=!0,$.current=M;return}let b=$.current;b!==null&&b!==M&&(M==="expanded"?X.current?.():M==="collapsed"&&K.current?.(),$.current=M)},[l.leftMode,l.currentBreakpointReady]);let me=l.leftMode==="expanded";if(G){let M=l.leftMode==="expanded",b=e.Children.toArray(L),B=b.find(h=>j(h,de)),A=b.find(h=>j(h,ie)),E=typeof B?.props?.expandedSize=="number"?B.props.expandedSize:64,oe=typeof A?.props?.expandedSize=="number"?A.props.expandedSize:288,z=!!B,x=!!A,F=(z?E:0)+(l.panelMode==="expanded"&&x?oe:0);return e.createElement(Ie,{open:M,onOpenChange:h=>l.setLeftMode(h?"expanded":"collapsed")},e.createElement(Ve,{side:"start",style:{padding:0},"aria-label":"Navigation","aria-describedby":void 0,width:{initial:`${F}px`}},e.createElement(Ae,null,e.createElement(He,null,"Navigation")),e.createElement("div",{className:"rt-ShellLeft"},L)))}if(H){let M=l.leftMode==="expanded",b=e.Children.toArray(L),B=b.find(h=>j(h,de)),A=b.find(h=>j(h,ie)),E=typeof B?.props?.expandedSize=="number"?B.props.expandedSize:64,oe=typeof A?.props?.expandedSize=="number"?A.props.expandedSize:288,z=!!B,F=!!A&&(l.panelMode==="expanded"||l.peekTarget==="panel");return e.createElement("div",{...D,ref:J,className:se("rt-ShellLeft",f),"data-mode":l.leftMode,"data-peek":l.peekTarget==="left"||l.peekTarget==="rail"||l.peekTarget==="panel"||void 0,"data-presentation":V,"data-inset":u||void 0,style:{...d},"data-open":M||void 0},L)}return e.createElement("div",{...D,ref:J,className:se("rt-ShellLeft",f),"data-mode":l.leftMode,"data-peek":l.peekTarget==="left"||l.peekTarget==="rail"||l.peekTarget==="panel"||void 0,"data-presentation":V,"data-inset":u||void 0,style:{...d}},L)});Ce.displayName="Shell.Left";ce(Ce,"Shell.Left");var de=e.forwardRef((n,a)=>{let{className:f,presentation:v,expandedSize:p=64,collapsible:m,onExpand:T,onCollapse:L,children:d,style:u,open:P,defaultOpen:c,onOpenChange:r,inset:S,...I}=n,R=Re(),D=e.useRef(null);e.useEffect(()=>{let N=typeof P<"u";if(D.current===null){D.current=N;return}D.current!==N&&(console.warn("Shell.Rail: Switching between controlled and uncontrolled `open` is not supported."),D.current=N)},[P]),e.useEffect(()=>{R.onRailDefaults?.(p)},[R,p]);let l=R.leftMode==="expanded";return e.createElement("div",{...I,ref:a,className:se("rt-ShellRail",f),"data-mode":R.leftMode,"data-peek":R.currentBreakpointReady&&R.leftResolvedPresentation!=="overlay"&&R.peekTarget==="rail"||void 0,style:{...u,"--rail-size":`${p}px`}},e.createElement("div",{className:"rt-ShellRailContent","data-visible":R.currentBreakpointReady&&(l||R.leftResolvedPresentation!=="overlay"&&R.peekTarget==="rail")||void 0},d))});de.displayName="Shell.Rail";ce(de,"Shell.Rail");var Ln=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],ie=ce(e.forwardRef((n,a)=>{let{className:f,defaultOpen:v,open:p,onOpenChange:m,size:T,defaultSize:L,expandedSize:d=288,minSize:u,maxSize:P,resizable:c,collapsible:r=!0,onExpand:S,onCollapse:I,onResize:R,onResizeStart:D,onResizeEnd:l,snapPoints:N,snapTolerance:V,collapseThreshold:G,paneId:H,persistence:Y,children:J,style:U,onSizeChange:q,sizeUpdate:Q,sizeUpdateMs:Z=50}=n,W=sn(n,Ln),k=e.useRef(null);e.useLayoutEffect(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null)},[q,Q,Z]);let _=e.useMemo(()=>{if(!q)return()=>{};if(Q==="debounce")return(y,g)=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{q?.(y,g),k.current=null},Z)};if(Q==="throttle"){let o=0;return(y,g)=>{let O=Date.now();O-o>=Z&&(o=O,q?.(y,g))}}return(o,y)=>q?.(o,y)},[q,Q,Z]),i=Re(),X=e.useRef(null),K=e.useRef(null),$=e.useRef(void 0),le=e.useMemo(()=>he(p),[p]),me=e.useMemo(()=>he(v),[v]),M=typeof p=="object"&&p!==null,b=e.useRef(m);e.useLayoutEffect(()=>{b.current=m});let{resolvedControlled:B}=ke({controlledValue:le,defaultValue:me,currentValue:i.panelMode,setValue:o=>{o==="expanded"&&i.leftMode!=="expanded"&&i.leftControlledOpen!==!1&&i.setLeftMode("expanded"),i.setPanelMode(o)},breakpointReady:i.currentBreakpointReady,controlledIsResponsive:M,onResponsiveChange:o=>b.current?.(o==="expanded",{reason:"responsive"}),onInit:o=>{typeof p>"u"&&b.current?.(o==="expanded",{reason:"init"})}}),A=e.useRef(null);e.useEffect(()=>{let o=typeof p<"u";if(A.current===null){A.current=o;return}A.current!==o&&(console.warn("Shell.Panel: Switching between controlled and uncontrolled `open` is not supported."),A.current=o)},[p]),e.useEffect(()=>{i.onPanelDefaults?.(d)},[i,d]);let E=e.useRef(null),oe=e.useCallback(o=>{E.current=o,typeof a=="function"?a(o):a&&(a.current=o)},[a]),z=e.Children.toArray(J),x=z.filter(o=>e.isValidElement(o)&&o.type===be),F=z.filter(o=>!(e.isValidElement(o)&&o.type===be)),h=i.leftResolvedPresentation==="overlay",pe=e.useCallback(o=>dn(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(!c||!ee?.load||h)return;let y=await ee.load();o&&typeof y=="number"&&E.current&&(E.current.style.setProperty("--panel-size",`${y}px`),R?.(y))})(),()=>{o=!1}},[c,ee,R,h]),e.useEffect(()=>{E.current&&h&&E.current.style.setProperty("--panel-size",`${d}px`)},[h,d]),e.useEffect(()=>{if(E.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 u=="number"?u:void 0)??o,o));E.current.style.setProperty("--panel-size",`${O}px`),_(O,{reason:"init"})}}},[]),e.useEffect(()=>{if(!E.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 u=="number"?u:void 0)??o,o));E.current.style.setProperty("--panel-size",`${O}px`),_(O,{reason:"controlled"})}},[T,u,P,pe,_]),e.useEffect(()=>{if(E.current&&i.leftResolvedPresentation!=="overlay"&&i.leftMode==="expanded"&&i.panelMode==="expanded"){let o=E.current.parentElement||null;try{o?.style.removeProperty("width")}catch{}}},[i.leftResolvedPresentation,i.leftMode,i.panelMode]);let ae=i.leftMode==="expanded"&&i.panelMode==="expanded";e.useEffect(()=>{let o=X.current,y=K.current,O=$.current!==B;if(o!==null&&o!==i.panelMode){let ne=i.panelMode==="expanded";if(!(typeof p<"u")||!O&&ne!==(B===void 0?void 0:B==="expanded")){let te="toggle";y!==i.leftMode&&i.leftMode==="collapsed"&&!ne&&(te="left"),b.current?.(ne,{reason:te})}}X.current=i.panelMode,K.current=i.leftMode,$.current=B},[i.panelMode,i.leftMode,p,B]);let ue=c&&i.leftResolvedPresentation!=="overlay"&&ae?e.createElement(an.Provider,{value:{containerRef:E,cssVarName:"--panel-size",minSize:typeof u=="number"?u:100,maxSize:typeof P=="number"?P:800,defaultSize:d,orientation:"vertical",edge:"end",computeNext:(o,y,g)=>{let O=getComputedStyle(E.current).direction==="rtl",ne=o-y;return g+(O?-ne:ne)},onResize:R,onResizeStart:o=>{let g=E.current?.parentElement;try{g?.style.removeProperty("width")}catch{}D?.(o)},onResizeEnd:o=>{l?.(o),_(o,{reason:"resize"}),ee?.save?.(o)},target:"panel",collapsible:!!r,snapPoints:N,snapTolerance:V??8,collapseThreshold:G,requestCollapse:()=>i.setPanelMode("collapsed"),requestToggle:()=>i.togglePane("panel")}},x.length>0?x.map((o,y)=>e.cloneElement(o,{key:o.key??y})):e.createElement(rn,null)):null;return e.createElement("div",{...W,ref:oe,className:se("rt-ShellPanel",f),"data-mode":i.panelMode,"data-visible":i.currentBreakpointReady&&(ae||i.leftResolvedPresentation!=="overlay"&&i.peekTarget==="panel")||void 0,"data-peek":i.currentBreakpointReady&&i.leftResolvedPresentation!=="overlay"&&i.peekTarget==="panel"||void 0,style:{...U,"--panel-size":`${d}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,...f},v)=>{let{registerInset:p,unregisterInset:m}=Te();return e.useEffect(()=>{if(a)return p("content"),()=>m("content")},[a,p,m]),e.createElement("main",{...f,ref:v,className:se("rt-ShellContent",n),"data-inset":a||void 0})});xe.displayName="Shell.Content";ce(xe,"Shell.Content");var un=e.forwardRef(({target:n,action:a="toggle",peekOnHover:f,onClick:v,onMouseEnter:p,onMouseLeave:m,children:T,...L},d)=>{let{leftMode:u}=Ue(),{panelMode:P}=$e(),{sidebarMode:c}=Oe(),{inspectorMode:r}=Xe(),{bottomMode:S}=Ye(),{peekTarget:I,clearPeek:R,peekPane:D}=Ze(),{togglePane:l,expandPane:N,collapsePane:V}=nn(),G=e.useCallback(U=>{switch(v?.(U),I===n&&R(),a){case"toggle":l(n);break;case"expand":N(n);break;case"collapse":V(n);break}},[I,R,l,N,V,n,a,v]),H=(()=>{switch(n){case"left":case"rail":return u==="collapsed";case"panel":return u==="collapsed"||P==="collapsed";case"sidebar":return c==="collapsed";case"inspector":return r==="collapsed";case"bottom":return S==="collapsed"}})(),Y=e.useCallback(U=>{p?.(U),!(!f||!H)&&D(n)},[p,f,H,D,n]),J=e.useCallback(U=>{m?.(U),f&&I===n&&R()},[m,f,I,R,n]);return e.createElement("button",{...L,ref:d,onClick:G,onMouseEnter:Y,onMouseLeave:J,"data-shell-trigger":n,"data-shell-action":a,"aria-expanded":!H},T)});un.displayName="Shell.Trigger";export{pn as a,ze as b,Ce as c,de as d,ie as e,xe as f,un as g,kn as h};
2
- //# sourceMappingURL=chunk-D2IX5LU6.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/shell.tsx"],
4
- "sourcesContent": ["/**\n * Shell Component - Layout Engine + Chrome\n *\n * Philosophy:\n * - Shell = layout engine + chrome\n * - Manages layout state: expanded/collapsed, fixed/overlay, sizes\n * - Does not manage content/navigation state\n * - Provides unstyled primitives (slots, triggers)\n * - Enforces composition rules (Rail \u2194 Panel dependency, Sidebar exclusivity)\n *\n * Core Slots:\n * - Header: global top bar\n * - Rail: slim nav strip\n * - Panel: sidebar next to rail\n * - Sidebar: alternative to Rail+Panel (exclusive)\n * - Content: main work area\n * - Inspector: right-side panel\n * - Bottom: bottom panel\n *\n * Composition Rules:\n * - Rail + Panel: valid together (Rail collapse \u2192 Panel collapse)\n * - Sidebar: cannot coexist with Rail or Panel\n * - Content: always required\n * - Inspector/Bottom: optional, independent\n */\n'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from './sheet.js';\nimport { VisuallyHidden } from './visually-hidden.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from './shell.hooks.js';\nimport { PaneResizeContext } from './_internal/shell-resize.js';\nimport { PaneHandle, PanelHandle } from './_internal/shell-handles.js';\nimport { omitPaneProps, extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './_internal/shell-prop-helpers.js';\nimport { Sidebar } from './_internal/shell-sidebar.js';\nimport { Bottom } from './_internal/shell-bottom.js';\nimport { Inspector } from './_internal/shell-inspector.js';\nimport 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 */\nfunction readPaneStateFromChildren(initialChildren: React.ReactNode): 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 (sidebarProps.state.initial ?? Object.values(sidebarProps.state)[0] ?? '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 (sidebarProps.defaultState.initial ?? Object.values(sidebarProps.defaultState)[0] ?? '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 const { hasPanelDefaultOpen, ...modes } = readPaneStateFromChildren(children);\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", "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", "i", "bp", "firstPanelOpen", "resolvedFirstPanelOpen", "controlSeqRef", "lastRailChangeRef", "lastPanelChangeRef", "lastRailOpenRef", "lastPanelOpenRef", "railOnOpenChange", "panelOnOpenChange", "lastConflictRef", "panelWins", "lastConflict", "leftControlledOpen", "heightStyle", "peekTarget", "setPeekTarget", "peekPane", "clearPeek", "presentationCtxValue", "leftModeCtxValue", "panelModeCtxValue", "sidebarModeCtxValue", "inspectorModeCtxValue", "bottomModeCtxValue", "compositionCtxValue", "insetPanes", "setInsetPanes", "registerInset", "id", "prev", "unregisterInset", "hasAnyInset", "insetCtxValue", "peekCtxValue", "actionsCtxValue", "shellContextValue", "leftContent", "firstRail", "firstPanel", "leftInset", "passthroughProps", "Left", "classNames", "ShellProvider", "PresentationContext", "LeftModeContext", "PanelModeContext", "SidebarModeContext", "InspectorModeContext", "BottomModeContext", "CompositionContext", "PeekContext", "ActionsContext", "InsetContext", "style", "LEFT_DOM_OMIT_PROPS", "initialProps", "presentation", "_collapsible", "onExpand", "onCollapse", "inset", "restProps", "useInset", "propsOpen", "propsDefaultOpen", "propsOnOpenChange", "domProps", "omitPaneProps", "shell", "useShell", "resolvedPresentation", "useResponsivePresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "lastLeftModeRef", "lastResolvedLeftControlledRef", "normalizedLeftControlled", "normalizedLeftDefault", "mapResponsiveBooleanToPaneMode", "propsOnOpenChangeRef", "propsOpenRef", "resolvedLeftControlled", "useResponsiveInitialState", "initial", "prevPanelModeRef", "prevLeftMode", "prevPanelMode", "controlledChanged", "isControlled", "controlledTarget", "nextOpen", "reason", "onExpandRef", "onCollapseRef", "prevLeftModeForCallbackRef", "hasLeftInitializedRef", "currentMode", "prevMode", "_isExpanded", "open", "panelEl", "railSize", "panelSize", "hasRail", "hasPanel", "overlayPx", "o", "VisuallyHidden", "Title", "_railSize", "_panelSize", "_hasRail", "_includePanel", "expandedSize", "collapsible", "defaultOpen", "onOpenChange", "_inset", "wasControlledRef", "isExpanded", "PANEL_DOM_PROP_KEYS", "defaultSize", "minSize", "maxSize", "resizable", "_onExpand", "_onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "panelDomProps", "extractPaneDomProps", "debounceTimeoutRef", "emitSizeChange", "s", "meta", "last", "now", "prevLeftModeRef", "lastResolvedPanelControlledRef", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "onOpenChangeRef", "resolvedPanelControlled", "handleChildren", "PanelHandle", "contentChildren", "normalizeSizeToPx", "value", "normalizeToPx", "persistenceAdapter", "key", "v", "mounted", "loaded", "px", "clamped", "leftEl", "prevPanel", "prevLeft", "handleEl", "PaneResizeContext", "client", "startClient", "startSize", "isRtl", "delta", "PaneHandle", "Trigger", "peekOnHover", "onClick", "onMouseEnter", "onMouseLeave", "leftMode", "useLeftMode", "panelMode", "usePanelMode", "sidebarMode", "useSidebarMode", "inspectorMode", "useInspectorMode", "bottomMode", "useBottomMode", "usePeek", "useShellActions", "handleClick", "event", "isCollapsed", "handleMouseEnter", "handleMouseLeave"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as g}from"./chunk-QLZ5XAW6.js";import{a as P}from"./chunk-FVCWNSRU.js";import{a as R,c as T}from"./chunk-5T6K7VPP.js";import{a as h}from"./chunk-AGAQC4HH.js";import{a as B}from"./chunk-GSTOGDAJ.js";import{a as b}from"./chunk-KMPBTEZH.js";import{a as p}from"./chunk-D2AZAGGP.js";import*as e from"react";import W from"classnames";import{Slot as G}from"radix-ui";import{composeRefs as $}from"radix-ui/internal";var A=e.forwardRef((t,w)=>{let{size:v=p.size.default}=t,{className:C,children:o,asChild:s,as:r,color:x,radius:E,material:M,panelBackground:k,flush:D,disabled:d=t.loading,...c}=b(t,p,B);e.useEffect(()=>{t.panelBackground!==void 0&&console.warn("Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.")},[t.panelBackground]);let a=M??k,m=e.useRef(null),f=e.useRef(a);f.current=a,e.useEffect(()=>{let n=m.current;if(!n)return;if(a==="translucent"){n.style.setProperty("will-change","backdrop-filter");let u,V=()=>{let F=getComputedStyle(n).getPropertyValue("--duration-2")||"75ms",H=parseInt(F)||75;u=setTimeout(()=>{n&&f.current!=="translucent"&&n.style.setProperty("will-change","auto")},H)},y=new MutationObserver(V);return y.observe(n,{attributes:!0,attributeFilter:["data-material"]}),()=>{u&&clearTimeout(u),y.disconnect(),n.style.setProperty("will-change","auto")}}else n.style.setProperty("will-change","auto")},[a]);let S=s?G.Root:r||"button",z=s||!r||["button","input","textarea","select"].includes(r),I=!s&&(!r||r==="button"),N="type"in c,j=e.useId(),i=t.loading?`${j}-loading`:void 0,l=e.useMemo(()=>typeof o=="string"?o:e.isValidElement(o)&&typeof o.props?.children=="string"?o.props.children:"button",[o]),O=e.useMemo(()=>t.loading?{"aria-busy":!0,"aria-disabled":!0,"aria-describedby":i,"aria-label":`${l} (loading)`}:{},[t.loading,i,l]);return e.createElement(S,{"data-disabled":d||void 0,"data-accent-color":x,"data-radius":E,"data-material":a,"data-panel-background":a,"data-flush":D?"true":void 0,...c,...O,ref:$(m,w),className:W("rt-reset","rt-BaseButton",C),...z&&{disabled:d},...I&&!N?{type:"button"}:{}},t.loading?e.createElement(e.Fragment,null,e.createElement("span",{style:{display:"contents",visibility:"hidden"},"aria-hidden":!0},o),e.createElement(h,null,e.createElement("span",{id:i},l," is loading, please wait..."),o),e.createElement(P,{asChild:!0,align:"center",justify:"center",position:"absolute",inset:"0"},e.createElement("span",null,e.createElement(g,{size:R(v,T),"aria-hidden":"true"})))):o)});A.displayName="BaseButton";export{A as a};
2
- //# sourceMappingURL=chunk-DZ4H2KTP.js.map
@@ -1,7 +0,0 @@
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';\nimport { composeRefs } from 'radix-ui/internal';\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 { 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 // Show deprecation warning for panelBackground when used\n // This helps developers migrate to the new material prop\n React.useEffect(() => {\n if (props.panelBackground !== undefined) {\n console.warn('Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.');\n }\n }, [props.panelBackground]);\n\n // Material takes precedence over panelBackground for backward compatibility\n const effectiveMaterial = material ?? panelBackground;\n\n // Will-change cleanup for backdrop-filter performance optimization\n // This prevents layout thrashing when using translucent materials\n const buttonRef = React.useRef<HTMLElement>(null);\n\n // Use a ref to track current material value to avoid stale closures in setTimeout\n const materialRef = React.useRef(effectiveMaterial);\n materialRef.current = effectiveMaterial;\n\n React.useEffect(() => {\n const button = buttonRef.current;\n if (!button) return;\n\n const hasTranslucentMaterial = effectiveMaterial === 'translucent';\n\n if (hasTranslucentMaterial) {\n // Add will-change when material is translucent to optimize rendering\n button.style.setProperty('will-change', 'backdrop-filter');\n\n // Track timeout for cleanup\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n // Clean up will-change after transition completes to prevent memory leaks\n const cleanup = () => {\n const transitionDuration = getComputedStyle(button).getPropertyValue('--duration-2') || '75ms';\n const duration = parseInt(transitionDuration) || 75;\n\n timeoutId = setTimeout(() => {\n // Use ref to get current value, not stale closure value\n if (button && materialRef.current !== 'translucent') {\n button.style.setProperty('will-change', 'auto');\n }\n }, duration);\n };\n\n // Listen for material changes to clean up will-change property\n const observer = new MutationObserver(cleanup);\n observer.observe(button, { attributes: true, attributeFilter: ['data-material'] });\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n observer.disconnect();\n button.style.setProperty('will-change', 'auto');\n };\n } else {\n // Remove will-change when material is not translucent\n button.style.setProperty('will-change', 'auto');\n }\n }, [effectiveMaterial]);\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={composeRefs(buttonRef, 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": "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",
6
- "names": ["React", "classNames", "Slot", "composeRefs", "BaseButton", "props", "forwardedRef", "size", "baseButtonPropDefs", "className", "children", "asChild", "as", "color", "radius", "material", "panelBackground", "flush", "disabled", "baseButtonProps", "extractProps", "marginPropDefs", "effectiveMaterial", "buttonRef", "materialRef", "button", "timeoutId", "cleanup", "transitionDuration", "duration", "observer", "Comp", "Slot", "shouldPassDisabled", "isNativeButtonElement", "hasExplicitTypeAttribute", "loadingId", "describedById", "buttonText", "accessibilityProps", "composeRefs", "classNames", "VisuallyHidden", "Flex", "Spinner", "mapResponsiveProp", "mapButtonSizeToSpinnerSize"]
7
- }