@womp/kookie-ui 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/AUTHORS +4 -0
  2. package/README.md +1 -1
  3. package/components.css +169 -1
  4. package/dist/cjs/components/chatbar.d.ts +52 -1
  5. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  6. package/dist/cjs/components/chatbar.js +2 -2
  7. package/dist/cjs/components/chatbar.js.map +4 -4
  8. package/dist/cjs/components/index.d.ts +2 -0
  9. package/dist/cjs/components/index.d.ts.map +1 -1
  10. package/dist/cjs/components/index.js +5 -5
  11. package/dist/cjs/components/index.js.map +4 -4
  12. package/dist/cjs/components/message-scroller.d.ts +86 -0
  13. package/dist/cjs/components/message-scroller.d.ts.map +1 -0
  14. package/dist/cjs/components/message-scroller.js +5 -0
  15. package/dist/cjs/components/message-scroller.js.map +7 -0
  16. package/dist/cjs/components/notice.d.ts +67 -0
  17. package/dist/cjs/components/notice.d.ts.map +1 -0
  18. package/dist/cjs/components/notice.js +5 -0
  19. package/dist/cjs/components/notice.js.map +7 -0
  20. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  21. package/dist/cjs/components/sidebar.js +1 -1
  22. package/dist/cjs/components/sidebar.js.map +3 -3
  23. package/dist/cjs/index.js +5 -5
  24. package/dist/cjs/index.js.map +4 -4
  25. package/dist/esm/{chunk-WGWUEU4K.js → chunk-2I7QRVJ5.js} +2 -2
  26. package/dist/esm/{chunk-EHBAK3LQ.js → chunk-43A5GUSI.js} +2 -2
  27. package/dist/esm/{chunk-FEAOFF77.js → chunk-47LMOIW3.js} +2 -2
  28. package/dist/esm/chunk-4JQZUQY7.js +2 -0
  29. package/dist/esm/{chunk-O4CSXNST.js → chunk-4ME6O27S.js} +2 -2
  30. package/dist/esm/{chunk-OEEF6KJG.js → chunk-4XGGX2V2.js} +2 -2
  31. package/dist/esm/{chunk-26I257HE.js → chunk-4XKK32M4.js} +2 -2
  32. package/dist/esm/{chunk-MM5IHQFM.js → chunk-4YFJWXL2.js} +2 -2
  33. package/dist/esm/{chunk-5TAHT6VC.js → chunk-5WRCK4R7.js} +2 -2
  34. package/dist/esm/{chunk-POG3YABW.js → chunk-65GAANJD.js} +2 -2
  35. package/dist/esm/{chunk-UBSLEGQZ.js → chunk-6FLLFCBU.js} +2 -2
  36. package/dist/esm/{chunk-KV4SZP3F.js → chunk-73QGEY2I.js} +2 -2
  37. package/dist/esm/{chunk-WQCB7KSH.js → chunk-7FC7HF76.js} +2 -2
  38. package/dist/esm/{chunk-UNWPH3SO.js → chunk-7RQNB63F.js} +2 -2
  39. package/dist/esm/{chunk-CRBOJ7N7.js → chunk-7UHKEJ7Q.js} +2 -2
  40. package/dist/esm/{chunk-OJSOX3AX.js → chunk-ABSKRHVM.js} +2 -2
  41. package/dist/esm/{chunk-7FKKGUHK.js → chunk-AGSSWWFI.js} +2 -2
  42. package/dist/esm/{chunk-W2LD2YE6.js → chunk-ALWNS44Q.js} +2 -2
  43. package/dist/esm/{chunk-Z7AZNMNX.js → chunk-BW5CO4PZ.js} +2 -2
  44. package/dist/esm/{chunk-KEEPKI2X.js → chunk-CDG5WH4U.js} +2 -2
  45. package/dist/esm/{chunk-IK3MQHA5.js → chunk-CIYF56YS.js} +2 -2
  46. package/dist/esm/{chunk-JDEBKA56.js → chunk-CKMMUHKE.js} +2 -2
  47. package/dist/esm/{chunk-TLGXIWAS.js → chunk-CRTH5LNU.js} +2 -2
  48. package/dist/esm/{chunk-NTNMJX5M.js → chunk-CSKZZOI2.js} +2 -2
  49. package/dist/esm/{chunk-4WU2WKUJ.js → chunk-CTA5ODAO.js} +2 -2
  50. package/dist/esm/{chunk-PDUHBDFC.js → chunk-DSJY5RI3.js} +2 -2
  51. package/dist/esm/{chunk-JDWCQ2XP.js → chunk-E67CIG6A.js} +2 -2
  52. package/dist/esm/{chunk-WIDJYVZF.js → chunk-EPTYNVCU.js} +2 -2
  53. package/dist/esm/{chunk-HMSSFU6I.js → chunk-ERY5TH2M.js} +2 -2
  54. package/dist/esm/{chunk-LJCUPAOI.js → chunk-FG7XM7KJ.js} +2 -2
  55. package/dist/esm/{chunk-ZJ33QP5N.js → chunk-FHOCUZDR.js} +2 -2
  56. package/dist/esm/{chunk-2Q7BJ7YG.js → chunk-GLERJXVS.js} +2 -2
  57. package/dist/esm/{chunk-PYXMGEO7.js → chunk-GO7OHBHW.js} +2 -2
  58. package/dist/esm/{chunk-OQU2SKLN.js → chunk-HF5WY5YE.js} +2 -2
  59. package/dist/esm/{chunk-25X75TI7.js → chunk-HJU4I34X.js} +2 -2
  60. package/dist/esm/{chunk-CBNTPHYK.js → chunk-IHK3H2OM.js} +2 -2
  61. package/dist/esm/{chunk-C5RVO3C3.js → chunk-JDGJSNWT.js} +2 -2
  62. package/dist/esm/chunk-JKS2YXMS.js +1 -0
  63. package/dist/esm/{chunk-PBFSBHBS.js → chunk-JUY7CBSL.js} +2 -2
  64. package/dist/esm/{chunk-F3AXE27Q.js → chunk-K3UAS7RW.js} +2 -2
  65. package/dist/esm/{chunk-FB3PD4Z3.js → chunk-KFR3CK24.js} +2 -2
  66. package/dist/esm/{chunk-AIHQ3MVK.js → chunk-KJUDZCYK.js} +2 -2
  67. package/dist/esm/{chunk-JRFZ535T.js → chunk-KMPE7TJ6.js} +2 -2
  68. package/dist/esm/{chunk-5M7STAH3.js → chunk-KZWNGWIM.js} +2 -2
  69. package/dist/esm/{chunk-H4GR4262.js → chunk-LXWPEDPZ.js} +2 -2
  70. package/dist/esm/chunk-MCQCG6AS.js +2 -0
  71. package/dist/esm/{chunk-JQW4XYBS.js → chunk-MEO7MJMQ.js} +2 -2
  72. package/dist/esm/{chunk-QJVAS7AK.js → chunk-MS5J4MF6.js} +2 -2
  73. package/dist/esm/{chunk-44JZYS7A.js → chunk-MWIIGYAJ.js} +2 -2
  74. package/dist/esm/{chunk-MBCQA7UZ.js → chunk-N4GTDLRD.js} +2 -2
  75. package/dist/esm/{chunk-NV3P2CKH.js → chunk-NIM7DIVH.js} +2 -2
  76. package/dist/esm/{chunk-ZW26J2SA.js → chunk-OGXZHAQL.js} +2 -2
  77. package/dist/esm/{chunk-WJBOOAIO.js → chunk-OLAWVEAI.js} +2 -2
  78. package/dist/esm/{chunk-JQSZF3E2.js → chunk-OMGZG52I.js} +2 -2
  79. package/dist/esm/{chunk-HBIF43PT.js → chunk-PHC3QBV3.js} +2 -2
  80. package/dist/esm/{chunk-OTKQN2KY.js → chunk-PZ7OYATT.js} +2 -2
  81. package/dist/esm/{chunk-P27KV2LS.js → chunk-QWVU2TW4.js} +2 -2
  82. package/dist/esm/chunk-RJP5QUXO.js +2 -0
  83. package/dist/esm/chunk-RJP5QUXO.js.map +7 -0
  84. package/dist/esm/{chunk-6J6YX2VX.js → chunk-RNTCHVFI.js} +2 -2
  85. package/dist/esm/{chunk-IDUVJJYG.js → chunk-S5C5YRBS.js} +2 -2
  86. package/dist/esm/{chunk-RY67WG3O.js → chunk-T4OR62DQ.js} +2 -2
  87. package/dist/esm/{chunk-AO32NT75.js → chunk-UBOOUDS4.js} +2 -2
  88. package/dist/esm/{chunk-DCIQHXAR.js → chunk-VHECAEUP.js} +2 -2
  89. package/dist/esm/{chunk-QEGEUD4D.js → chunk-VNH7BJOA.js} +2 -2
  90. package/dist/esm/{chunk-GGSJXOKR.js → chunk-VR7ZAFYN.js} +2 -2
  91. package/dist/esm/{chunk-ODCVOXEV.js → chunk-VX6ARMWP.js} +2 -2
  92. package/dist/esm/{chunk-G4YKBAZT.js → chunk-VZSQATP6.js} +2 -2
  93. package/dist/esm/chunk-W4WWN3RC.js +2 -0
  94. package/dist/esm/chunk-W4WWN3RC.js.map +7 -0
  95. package/dist/esm/{chunk-YVSM2LGS.js → chunk-WGYUWEQV.js} +2 -2
  96. package/dist/esm/{chunk-7NYODT3Z.js → chunk-WHFJ4JUN.js} +2 -2
  97. package/dist/esm/{chunk-YG66IRW4.js → chunk-X3JM2565.js} +2 -2
  98. package/dist/esm/chunk-XI5YXUCK.js +2 -0
  99. package/dist/esm/{chunk-NQXRWBQM.js → chunk-Y5RCH23Z.js} +2 -2
  100. package/dist/esm/{chunk-WZFVTC7P.js → chunk-YBSRX63K.js} +2 -2
  101. package/dist/esm/chunk-YQRSAP46.js +2 -0
  102. package/dist/esm/chunk-YQRSAP46.js.map +7 -0
  103. package/dist/esm/chunk-YTD3AJAU.js +2 -0
  104. package/dist/esm/chunk-YTD3AJAU.js.map +7 -0
  105. package/dist/esm/{chunk-GDAKJS64.js → chunk-YWENWZOU.js} +2 -2
  106. package/dist/esm/{chunk-7PMMYHZV.js → chunk-ZOY43B55.js} +2 -2
  107. package/dist/esm/{chunk-VTIL55SR.js → chunk-ZZLZGHZQ.js} +2 -2
  108. package/dist/esm/components/_internal/base-button.js +1 -1
  109. package/dist/esm/components/_internal/base-menu.utils.js +1 -1
  110. package/dist/esm/components/_internal/menu-context.js +1 -1
  111. package/dist/esm/components/accordion.js +1 -1
  112. package/dist/esm/components/alert-dialog.js +1 -1
  113. package/dist/esm/components/avatar.js +1 -1
  114. package/dist/esm/components/badge.js +1 -1
  115. package/dist/esm/components/blockquote.js +1 -1
  116. package/dist/esm/components/blockquote.props.js +1 -1
  117. package/dist/esm/components/box.js +1 -1
  118. package/dist/esm/components/button.js +1 -1
  119. package/dist/esm/components/callout.js +1 -1
  120. package/dist/esm/components/card.js +1 -1
  121. package/dist/esm/components/chatbar.d.ts +52 -1
  122. package/dist/esm/components/chatbar.d.ts.map +1 -1
  123. package/dist/esm/components/chatbar.js +1 -1
  124. package/dist/esm/components/checkbox-cards.js +1 -1
  125. package/dist/esm/components/checkbox-group.js +1 -1
  126. package/dist/esm/components/checkbox.js +1 -1
  127. package/dist/esm/components/code.js +1 -1
  128. package/dist/esm/components/code.props.js +1 -1
  129. package/dist/esm/components/combobox.js +1 -1
  130. package/dist/esm/components/container.js +1 -1
  131. package/dist/esm/components/context-menu.js +1 -1
  132. package/dist/esm/components/data-list.js +1 -1
  133. package/dist/esm/components/dialog.js +1 -1
  134. package/dist/esm/components/dropdown-menu.js +1 -1
  135. package/dist/esm/components/em.js +1 -1
  136. package/dist/esm/components/em.props.js +1 -1
  137. package/dist/esm/components/flex.js +1 -1
  138. package/dist/esm/components/grid.js +1 -1
  139. package/dist/esm/components/heading.js +1 -1
  140. package/dist/esm/components/heading.props.js +1 -1
  141. package/dist/esm/components/hover-card.js +1 -1
  142. package/dist/esm/components/icon-button.js +1 -1
  143. package/dist/esm/components/image.js +1 -1
  144. package/dist/esm/components/index.d.ts +2 -0
  145. package/dist/esm/components/index.d.ts.map +1 -1
  146. package/dist/esm/components/index.js +1 -1
  147. package/dist/esm/components/inset.js +1 -1
  148. package/dist/esm/components/kbd.js +1 -1
  149. package/dist/esm/components/link.js +1 -1
  150. package/dist/esm/components/link.props.js +1 -1
  151. package/dist/esm/components/message-scroller.d.ts +86 -0
  152. package/dist/esm/components/message-scroller.d.ts.map +1 -0
  153. package/dist/esm/components/message-scroller.js +2 -0
  154. package/dist/esm/components/message-scroller.js.map +7 -0
  155. package/dist/esm/components/navbar.js +1 -1
  156. package/dist/esm/components/notice.d.ts +67 -0
  157. package/dist/esm/components/notice.d.ts.map +1 -0
  158. package/dist/esm/components/notice.js +2 -0
  159. package/dist/esm/components/notice.js.map +7 -0
  160. package/dist/esm/components/popover.js +1 -1
  161. package/dist/esm/components/progress.js +1 -1
  162. package/dist/esm/components/quote.js +1 -1
  163. package/dist/esm/components/quote.props.js +1 -1
  164. package/dist/esm/components/radio-cards.js +1 -1
  165. package/dist/esm/components/radio-group.js +1 -1
  166. package/dist/esm/components/radio.js +1 -1
  167. package/dist/esm/components/schemas/index.js +1 -1
  168. package/dist/esm/components/scroll-area.js +1 -1
  169. package/dist/esm/components/section.js +1 -1
  170. package/dist/esm/components/segmented-control.js +1 -1
  171. package/dist/esm/components/select.js +1 -1
  172. package/dist/esm/components/separator.js +1 -1
  173. package/dist/esm/components/sheet.js +1 -1
  174. package/dist/esm/components/sidebar.d.ts.map +1 -1
  175. package/dist/esm/components/sidebar.js +1 -1
  176. package/dist/esm/components/skeleton.js +1 -1
  177. package/dist/esm/components/slider.js +1 -1
  178. package/dist/esm/components/spinner.js +1 -1
  179. package/dist/esm/components/strong.js +1 -1
  180. package/dist/esm/components/strong.props.js +1 -1
  181. package/dist/esm/components/switch.js +1 -1
  182. package/dist/esm/components/tab-nav.js +1 -1
  183. package/dist/esm/components/table.js +1 -1
  184. package/dist/esm/components/tabs.js +1 -1
  185. package/dist/esm/components/text-area.js +1 -1
  186. package/dist/esm/components/text-field.js +1 -1
  187. package/dist/esm/components/text.js +1 -1
  188. package/dist/esm/components/text.props.js +1 -1
  189. package/dist/esm/components/theme-panel.js +1 -1
  190. package/dist/esm/components/toggle-button.js +1 -1
  191. package/dist/esm/components/toggle-icon-button.js +1 -1
  192. package/dist/esm/components/toolbar.js +1 -1
  193. package/dist/esm/components/tooltip.js +1 -1
  194. package/dist/esm/components/user-card.js +1 -1
  195. package/dist/esm/components/virtual-menu.js +1 -1
  196. package/dist/esm/helpers/extract-props.js +1 -1
  197. package/dist/esm/helpers/get-margin-styles.js +1 -1
  198. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  199. package/dist/esm/helpers/index.js +1 -1
  200. package/dist/esm/index.js +1 -1
  201. package/dist/esm/props/index.js +1 -1
  202. package/package.json +2 -1
  203. package/src/components/_internal/base-sidebar-menu.css +2 -1
  204. package/src/components/chatbar.css +24 -0
  205. package/src/components/chatbar.tsx +102 -15
  206. package/src/components/index.css +2 -0
  207. package/src/components/index.tsx +7 -0
  208. package/src/components/message-scroller.css +54 -0
  209. package/src/components/message-scroller.tsx +165 -0
  210. package/src/components/notice.css +91 -0
  211. package/src/components/notice.tsx +151 -0
  212. package/src/components/sidebar.tsx +17 -28
  213. package/styles.css +169 -1
  214. package/dist/esm/chunk-3AOFY2B4.js +0 -2
  215. package/dist/esm/chunk-3AOFY2B4.js.map +0 -7
  216. package/dist/esm/chunk-3PTSRBVY.js +0 -2
  217. package/dist/esm/chunk-3PTSRBVY.js.map +0 -7
  218. package/dist/esm/chunk-GM7KMQDI.js +0 -2
  219. package/dist/esm/chunk-QDW5ZG5E.js +0 -1
  220. package/dist/esm/chunk-QEL55MLF.js +0 -2
  221. package/dist/esm/chunk-XDDKT4NF.js +0 -2
  222. /package/dist/esm/{chunk-WGWUEU4K.js.map → chunk-2I7QRVJ5.js.map} +0 -0
  223. /package/dist/esm/{chunk-EHBAK3LQ.js.map → chunk-43A5GUSI.js.map} +0 -0
  224. /package/dist/esm/{chunk-FEAOFF77.js.map → chunk-47LMOIW3.js.map} +0 -0
  225. /package/dist/esm/{chunk-GM7KMQDI.js.map → chunk-4JQZUQY7.js.map} +0 -0
  226. /package/dist/esm/{chunk-O4CSXNST.js.map → chunk-4ME6O27S.js.map} +0 -0
  227. /package/dist/esm/{chunk-OEEF6KJG.js.map → chunk-4XGGX2V2.js.map} +0 -0
  228. /package/dist/esm/{chunk-26I257HE.js.map → chunk-4XKK32M4.js.map} +0 -0
  229. /package/dist/esm/{chunk-MM5IHQFM.js.map → chunk-4YFJWXL2.js.map} +0 -0
  230. /package/dist/esm/{chunk-5TAHT6VC.js.map → chunk-5WRCK4R7.js.map} +0 -0
  231. /package/dist/esm/{chunk-POG3YABW.js.map → chunk-65GAANJD.js.map} +0 -0
  232. /package/dist/esm/{chunk-UBSLEGQZ.js.map → chunk-6FLLFCBU.js.map} +0 -0
  233. /package/dist/esm/{chunk-KV4SZP3F.js.map → chunk-73QGEY2I.js.map} +0 -0
  234. /package/dist/esm/{chunk-WQCB7KSH.js.map → chunk-7FC7HF76.js.map} +0 -0
  235. /package/dist/esm/{chunk-UNWPH3SO.js.map → chunk-7RQNB63F.js.map} +0 -0
  236. /package/dist/esm/{chunk-CRBOJ7N7.js.map → chunk-7UHKEJ7Q.js.map} +0 -0
  237. /package/dist/esm/{chunk-OJSOX3AX.js.map → chunk-ABSKRHVM.js.map} +0 -0
  238. /package/dist/esm/{chunk-7FKKGUHK.js.map → chunk-AGSSWWFI.js.map} +0 -0
  239. /package/dist/esm/{chunk-W2LD2YE6.js.map → chunk-ALWNS44Q.js.map} +0 -0
  240. /package/dist/esm/{chunk-Z7AZNMNX.js.map → chunk-BW5CO4PZ.js.map} +0 -0
  241. /package/dist/esm/{chunk-KEEPKI2X.js.map → chunk-CDG5WH4U.js.map} +0 -0
  242. /package/dist/esm/{chunk-IK3MQHA5.js.map → chunk-CIYF56YS.js.map} +0 -0
  243. /package/dist/esm/{chunk-JDEBKA56.js.map → chunk-CKMMUHKE.js.map} +0 -0
  244. /package/dist/esm/{chunk-TLGXIWAS.js.map → chunk-CRTH5LNU.js.map} +0 -0
  245. /package/dist/esm/{chunk-NTNMJX5M.js.map → chunk-CSKZZOI2.js.map} +0 -0
  246. /package/dist/esm/{chunk-4WU2WKUJ.js.map → chunk-CTA5ODAO.js.map} +0 -0
  247. /package/dist/esm/{chunk-PDUHBDFC.js.map → chunk-DSJY5RI3.js.map} +0 -0
  248. /package/dist/esm/{chunk-JDWCQ2XP.js.map → chunk-E67CIG6A.js.map} +0 -0
  249. /package/dist/esm/{chunk-WIDJYVZF.js.map → chunk-EPTYNVCU.js.map} +0 -0
  250. /package/dist/esm/{chunk-HMSSFU6I.js.map → chunk-ERY5TH2M.js.map} +0 -0
  251. /package/dist/esm/{chunk-LJCUPAOI.js.map → chunk-FG7XM7KJ.js.map} +0 -0
  252. /package/dist/esm/{chunk-ZJ33QP5N.js.map → chunk-FHOCUZDR.js.map} +0 -0
  253. /package/dist/esm/{chunk-2Q7BJ7YG.js.map → chunk-GLERJXVS.js.map} +0 -0
  254. /package/dist/esm/{chunk-PYXMGEO7.js.map → chunk-GO7OHBHW.js.map} +0 -0
  255. /package/dist/esm/{chunk-OQU2SKLN.js.map → chunk-HF5WY5YE.js.map} +0 -0
  256. /package/dist/esm/{chunk-25X75TI7.js.map → chunk-HJU4I34X.js.map} +0 -0
  257. /package/dist/esm/{chunk-CBNTPHYK.js.map → chunk-IHK3H2OM.js.map} +0 -0
  258. /package/dist/esm/{chunk-C5RVO3C3.js.map → chunk-JDGJSNWT.js.map} +0 -0
  259. /package/dist/esm/{chunk-QDW5ZG5E.js.map → chunk-JKS2YXMS.js.map} +0 -0
  260. /package/dist/esm/{chunk-PBFSBHBS.js.map → chunk-JUY7CBSL.js.map} +0 -0
  261. /package/dist/esm/{chunk-F3AXE27Q.js.map → chunk-K3UAS7RW.js.map} +0 -0
  262. /package/dist/esm/{chunk-FB3PD4Z3.js.map → chunk-KFR3CK24.js.map} +0 -0
  263. /package/dist/esm/{chunk-AIHQ3MVK.js.map → chunk-KJUDZCYK.js.map} +0 -0
  264. /package/dist/esm/{chunk-JRFZ535T.js.map → chunk-KMPE7TJ6.js.map} +0 -0
  265. /package/dist/esm/{chunk-5M7STAH3.js.map → chunk-KZWNGWIM.js.map} +0 -0
  266. /package/dist/esm/{chunk-H4GR4262.js.map → chunk-LXWPEDPZ.js.map} +0 -0
  267. /package/dist/esm/{chunk-QEL55MLF.js.map → chunk-MCQCG6AS.js.map} +0 -0
  268. /package/dist/esm/{chunk-JQW4XYBS.js.map → chunk-MEO7MJMQ.js.map} +0 -0
  269. /package/dist/esm/{chunk-QJVAS7AK.js.map → chunk-MS5J4MF6.js.map} +0 -0
  270. /package/dist/esm/{chunk-44JZYS7A.js.map → chunk-MWIIGYAJ.js.map} +0 -0
  271. /package/dist/esm/{chunk-MBCQA7UZ.js.map → chunk-N4GTDLRD.js.map} +0 -0
  272. /package/dist/esm/{chunk-NV3P2CKH.js.map → chunk-NIM7DIVH.js.map} +0 -0
  273. /package/dist/esm/{chunk-ZW26J2SA.js.map → chunk-OGXZHAQL.js.map} +0 -0
  274. /package/dist/esm/{chunk-WJBOOAIO.js.map → chunk-OLAWVEAI.js.map} +0 -0
  275. /package/dist/esm/{chunk-JQSZF3E2.js.map → chunk-OMGZG52I.js.map} +0 -0
  276. /package/dist/esm/{chunk-HBIF43PT.js.map → chunk-PHC3QBV3.js.map} +0 -0
  277. /package/dist/esm/{chunk-OTKQN2KY.js.map → chunk-PZ7OYATT.js.map} +0 -0
  278. /package/dist/esm/{chunk-P27KV2LS.js.map → chunk-QWVU2TW4.js.map} +0 -0
  279. /package/dist/esm/{chunk-6J6YX2VX.js.map → chunk-RNTCHVFI.js.map} +0 -0
  280. /package/dist/esm/{chunk-IDUVJJYG.js.map → chunk-S5C5YRBS.js.map} +0 -0
  281. /package/dist/esm/{chunk-RY67WG3O.js.map → chunk-T4OR62DQ.js.map} +0 -0
  282. /package/dist/esm/{chunk-AO32NT75.js.map → chunk-UBOOUDS4.js.map} +0 -0
  283. /package/dist/esm/{chunk-DCIQHXAR.js.map → chunk-VHECAEUP.js.map} +0 -0
  284. /package/dist/esm/{chunk-QEGEUD4D.js.map → chunk-VNH7BJOA.js.map} +0 -0
  285. /package/dist/esm/{chunk-GGSJXOKR.js.map → chunk-VR7ZAFYN.js.map} +0 -0
  286. /package/dist/esm/{chunk-ODCVOXEV.js.map → chunk-VX6ARMWP.js.map} +0 -0
  287. /package/dist/esm/{chunk-G4YKBAZT.js.map → chunk-VZSQATP6.js.map} +0 -0
  288. /package/dist/esm/{chunk-YVSM2LGS.js.map → chunk-WGYUWEQV.js.map} +0 -0
  289. /package/dist/esm/{chunk-7NYODT3Z.js.map → chunk-WHFJ4JUN.js.map} +0 -0
  290. /package/dist/esm/{chunk-YG66IRW4.js.map → chunk-X3JM2565.js.map} +0 -0
  291. /package/dist/esm/{chunk-XDDKT4NF.js.map → chunk-XI5YXUCK.js.map} +0 -0
  292. /package/dist/esm/{chunk-NQXRWBQM.js.map → chunk-Y5RCH23Z.js.map} +0 -0
  293. /package/dist/esm/{chunk-WZFVTC7P.js.map → chunk-YBSRX63K.js.map} +0 -0
  294. /package/dist/esm/{chunk-GDAKJS64.js.map → chunk-YWENWZOU.js.map} +0 -0
  295. /package/dist/esm/{chunk-7PMMYHZV.js.map → chunk-ZOY43B55.js.map} +0 -0
  296. /package/dist/esm/{chunk-VTIL55SR.js.map → chunk-ZZLZGHZQ.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{a as x}from"./chunk-2CMM7MEL.js";import{a as q}from"./chunk-VR7ZAFYN.js";import{a as j,b as O,c as _,e as k,f as U}from"./chunk-PHC3QBV3.js";import{a as F,b as K,c as $}from"./chunk-WHFJ4JUN.js";import{a as V}from"./chunk-CTA5ODAO.js";import{d as W}from"./chunk-IX5HIHVI.js";import{a as B}from"./chunk-KMPE7TJ6.js";import{b as G}from"./chunk-SEY4NA45.js";import{b as L}from"./chunk-FWB47YCH.js";import{a as E}from"./chunk-E67CIG6A.js";import{a as H}from"./chunk-6FLLFCBU.js";import{a as le}from"./chunk-OS3FCYZY.js";var fe={};le(fe,{Content:()=>Y,Footer:()=>ee,Group:()=>ce,GroupContent:()=>ue,GroupLabel:()=>de,Header:()=>Z,Menu:()=>re,MenuButton:()=>oe,MenuItem:()=>ae,MenuSub:()=>ne,MenuSubContent:()=>ie,MenuSubTrigger:()=>se,Root:()=>Q,Search:()=>pe,Separator:()=>te});import*as e from"react";import d from"classnames";import*as S from"@radix-ui/react-accordion";var J=e.createContext(null);function g(){return e.useContext(J)}var Q=e.forwardRef((t,a)=>{let o=G(),{size:r=x.size.default,variant:s=x.variant.default,menuVariant:c=x.menuVariant.default,layout:u=x.layout.default,presentation:l,panelBackground:R,color:i}=t,{className:p,children:m,...v}=H(t,x),{asChild:T,panelBackground:M,presentation:C,...P}=v,h=i||o.accentColor,n=l==="thin"?"rail":l==="expanded"?"panel":u||"panel",f=typeof r=="object"?r.initial||"2":r,y=e.useMemo(()=>({size:f,menuVariant:c,presentation:l,color:h}),[f,c,l,h]);return e.createElement("div",{...P,ref:a,"data-accent-color":h,className:d("rt-SidebarRoot",p)},e.createElement(J.Provider,{value:y},e.createElement("div",{className:d("rt-SidebarContainer",`rt-variant-${s}`,`rt-r-size-${f}`,`rt-menu-variant-${c}`,n&&`rt-layout-${n}`),"data-accent-color":h,"data-panel-background":R,"data-presentation":l,"data-layout":n},m)))});Q.displayName="Sidebar.Root";var Y=e.forwardRef(({className:t,children:a,role:o="navigation","aria-label":r="Main navigation",id:s,...c},u)=>{let l=g(),R=l?.size??"2",i=l?.menuVariant??"soft";return e.createElement(V,{type:"hover"},e.createElement("div",{...c,ref:u,id:s,role:o,"aria-label":r,className:d("rt-BaseMenuContent","rt-SidebarContent",`rt-r-size-${R}`,`rt-menu-variant-${i}`,t)},e.createElement("div",{className:"rt-BaseMenuViewport"},a)))});Y.displayName="Sidebar.Content";var Z=e.forwardRef(({className:t,asContainer:a=!0,...o},r)=>{let s=g(),c=s?.size??"2",u=s?.menuVariant??"soft";return e.createElement("div",{...o,ref:r,className:d("rt-SidebarHeader",`rt-r-size-${c}`,`rt-menu-variant-${u}`,{"rt-SidebarHeader--container":a},t)})});Z.displayName="Sidebar.Header";var ee=e.forwardRef(({className:t,asContainer:a=!0,...o},r)=>{let s=g(),c=s?.size??"2",u=s?.menuVariant??"soft";return e.createElement("div",{...o,ref:r,className:d("rt-SidebarFooter",`rt-r-size-${c}`,`rt-menu-variant-${u}`,{"rt-SidebarFooter--container":a},t)})});ee.displayName="Sidebar.Footer";var te=e.forwardRef(({className:t,...a},o)=>e.createElement(q,{...a,ref:o,className:d("rt-SidebarSeparator",t)}));te.displayName="Sidebar.Separator";var re=e.forwardRef(({className:t,...a},o)=>e.createElement("ul",{...a,ref:o,className:d("rt-SidebarMenu",t)}));re.displayName="Sidebar.Menu";var ae=e.forwardRef(({className:t,...a},o)=>e.createElement("li",{...a,ref:o,className:d("rt-SidebarMenuItem",t)}));ae.displayName="Sidebar.MenuItem";function me(t){let a=[],o=[];return e.Children.forEach(t,r=>{if(typeof r=="string"||typeof r=="number")o.push(e.createElement("span",{key:o.length,className:"rt-SidebarMenuLabel"},r));else if(e.isValidElement(r)){let s=r;s.type==="svg"||s.props&&s.props.icon||typeof s.type=="function"&&(s.type.displayName?.includes("Icon")||s.type.name?.includes("Icon"))?a.push(r):o.push(r)}else r&&o.push(r)}),{icons:a,labels:o}}function A(t){if(typeof t=="string"||typeof t=="number")return e.createElement("span",{className:"rt-SidebarMenuLabel"},t);if(Array.isArray(t))return t.map((a,o)=>e.createElement(e.Fragment,{key:o},A(a)));if(e.isValidElement(t)){let a=t,o=a.props&&a.props.className||"";if(typeof a.type=="string"&&o.split(" ").includes("rt-SidebarMenuLabel"))return a;let s=A(a.props?.children);return e.cloneElement(a,{...a.props},s)}return t}var oe=e.forwardRef(({asChild:t=!1,isActive:a=!1,shortcut:o,badge:r,className:s,children:c,onKeyDown:u,...l},R)=>{let i=g(),p=i?.size??"2",m=i?.presentation==="thin",v=t?L:"button",T=e.useCallback(n=>{if(n.key==="ArrowDown"||n.key==="ArrowUp"){let f=n.currentTarget.closest(".rt-SidebarContent, .rt-SidebarSearchPopover"),y=f?Array.from(f.querySelectorAll(".rt-SidebarMenuButton")).filter(N=>N.offsetParent!==null):[],b=y.indexOf(n.currentTarget),D=y[b+(n.key==="ArrowDown"?1:-1)];b!==-1&&D&&(n.preventDefault(),D.focus())}u?.(n)},[u]),M=e.useMemo(()=>A(c),[c]),{icons:C,labels:P}=e.useMemo(()=>m?me(c):{icons:[],labels:[]},[m,c]),h=e.useMemo(()=>{if(!t)return null;try{let n=e.Children.only(M),f=n.props?.children,y=e.createElement(e.Fragment,null,f,r&&e.createElement("div",{className:"rt-SidebarMenuBadge"},typeof r=="string"?e.createElement(B,{size:p,variant:"soft"},r):e.createElement(B,{size:r.size||p,variant:r.variant||"soft",color:r.color,radius:r.radius},r.content)),o&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-SidebarMenuShortcut"},e.createElement(E,{size:p},o)));return e.cloneElement(n,{...n.props},y)}catch{return M}},[t,M,r,o,p]);return e.createElement(v,{...l,ref:R,"aria-current":a?"page":void 0,className:d("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton",s),"data-active":a||void 0,onKeyDown:T},t?h:m&&C.length>0?e.createElement(e.Fragment,null,e.createElement("span",{className:"rt-SidebarMenuIconWrapper"},C),P.map((n,f)=>e.createElement(e.Fragment,{key:f},typeof n=="string"||typeof n=="number"?e.createElement("span",{className:"rt-SidebarMenuLabel"},n):n))):e.createElement(e.Fragment,null,M,r&&e.createElement("div",{className:"rt-SidebarMenuBadge"},typeof r=="string"?e.createElement(B,{size:p,variant:"soft"},r):e.createElement(B,{size:r.size||p,variant:r.variant||"soft",color:r.color,radius:r.radius},r.content)),o&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-SidebarMenuShortcut"},e.createElement(E,{size:p},o))))});oe.displayName="Sidebar.MenuButton";var I=e.createContext("accordion"),ne=e.forwardRef(({defaultOpen:t=!1,children:a,...o},r)=>(g()?.presentation==="thin"?"dropdown":"accordion")==="dropdown"?e.createElement("div",{...o,ref:r},e.createElement(j,null,e.createElement(I.Provider,{value:"dropdown"},a))):e.createElement("div",{...o,ref:r},e.createElement(I.Provider,{value:"accordion"},e.createElement(S.Root,{type:"single",collapsible:!0,defaultValue:t?"item":void 0},e.createElement(S.Item,{value:"item"},a)))));ne.displayName="Sidebar.MenuSub";var se=e.forwardRef(({asChild:t=!1,className:a,children:o,...r},s)=>e.useContext(I)==="dropdown"?e.createElement(O,null,e.createElement("button",{...r,ref:s,type:"button","aria-haspopup":"menu",className:d("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarMenuSubTrigger",a)},o)):e.createElement(S.Header,{asChild:!0},e.createElement("div",null,e.createElement(S.Trigger,{...r,ref:s,asChild:t,className:d("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarMenuSubTrigger",a)},t?o:e.createElement(e.Fragment,null,o,e.createElement(W,{className:d("rt-BaseMenuSubTriggerIcon","rt-SidebarMenuSubTriggerIcon")}))))));se.displayName="Sidebar.MenuSubTrigger";var ie=e.forwardRef(({className:t,children:a,...o},r)=>{let s=g();if(e.useContext(I)==="dropdown"){let u=i=>{if(Array.isArray(i))return i.map((p,m)=>e.createElement(e.Fragment,{key:m},u(p)));if(e.isValidElement(i)){if(i.type?.displayName==="Sidebar.MenuButton")return i.props?.children;let m=i.props?.children;if(m!==void 0)return e.cloneElement(i,{...i.props,children:u(m)})}return i},l=e.Children.map(a,(i,p)=>{if(e.isValidElement(i)&&i.type?.displayName==="Sidebar.MenuItem"){let m=i.props?.children,v=u(m);return e.createElement(k,{key:p,asChild:!0},v)}return e.createElement(k,{key:p,asChild:!0},u(i))}),R=s?.size==="3"?"2":s?.size;return e.createElement(_,{size:R,variant:s?.menuVariant,className:d(t)},e.createElement(U,null,l))}return e.createElement(S.Content,{...o,ref:r,className:d("rt-SidebarMenuSubContent",t)},e.createElement("div",{className:"rt-SidebarMenuSubList"},a))});ie.displayName="Sidebar.MenuSubContent";var ce=e.forwardRef(({className:t,...a},o)=>e.createElement("div",{...a,ref:o,className:d("rt-BaseMenuGroup","rt-SidebarGroup",t)}));ce.displayName="Sidebar.Group";var de=e.forwardRef(({asChild:t=!1,className:a,...o},r)=>e.createElement(t?L:"div",{...o,ref:r,className:d("rt-BaseMenuLabel","rt-SidebarGroupLabel",a)}));de.displayName="Sidebar.GroupLabel";var ue=e.forwardRef(({className:t,...a},o)=>e.createElement("div",{...a,ref:o,className:d("rt-SidebarGroupContent",t)}));ue.displayName="Sidebar.GroupContent";var z=({className:t})=>e.createElement("svg",{className:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},e.createElement("circle",{cx:"11",cy:"11",r:"8"}),e.createElement("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})),X=({className:t})=>e.createElement("svg",{className:t,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},e.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),pe=e.forwardRef(({value:t,onValueChange:a,placeholder:o="Search...",children:r,className:s,...c},u)=>{let R=g()?.presentation==="thin",i=e.useRef(null),p=e.useRef(null),v=`${e.useId()}-results`,T=e.useRef(t);T.current=t;let M=e.useRef(a);M.current=a;let C=o.replace(/\.+$/,""),P=e.useCallback(n=>{n.key==="Escape"&&T.current&&(n.preventDefault(),n.stopPropagation(),M.current(""),i.current?.focus())},[]),h=e.useCallback(n=>{let f=p.current;if(!f)return;let y=f.querySelector('[role="group"]');if(!y)return;let b=Array.from(y.querySelectorAll("a, button"));if(b.length===0)return;let D=document.activeElement,N=D===i.current,w=b.indexOf(D);if(n.key.length===1&&!n.ctrlKey&&!n.metaKey&&!n.altKey&&!N&&w!==-1){i.current?.focus();return}switch(n.key){case"ArrowDown":{n.preventDefault(),N||w===-1?b[0]?.focus():w<b.length-1&&b[w+1]?.focus();break}case"ArrowUp":{n.preventDefault(),w<=0?i.current?.focus():b[w-1]?.focus();break}case"Home":{N||(n.preventDefault(),b[0]?.focus());break}case"End":{N||(n.preventDefault(),b[b.length-1]?.focus());break}}},[]);return R?e.createElement("div",{...c,ref:u,className:d("rt-SidebarSearch","rt-SidebarSearch--thin",s)},e.createElement(F,null,e.createElement(K,null,e.createElement("button",{type:"button",className:d("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarSearchTrigger"),"aria-label":C},e.createElement("span",{className:"rt-SidebarMenuIconWrapper"},e.createElement(z,null)),e.createElement("span",{className:"rt-SidebarMenuLabel"},"Search"))),e.createElement($,{side:"right",align:"start",size:"2",width:"280px","aria-label":C},e.createElement("div",{ref:p,className:"rt-SidebarSearchPopover",role:"search",onKeyDown:h},e.createElement("div",{className:"rt-SidebarSearchInputWrapper"},e.createElement(z,{className:"rt-SidebarSearchIcon"}),e.createElement("input",{ref:i,type:"search",className:"rt-SidebarSearchInput",value:t,onChange:n=>a(n.target.value),onKeyDown:P,placeholder:o,"aria-label":C,"aria-controls":r?v:void 0,autoFocus:!0}),t&&e.createElement("button",{type:"button",className:"rt-reset rt-SidebarSearchClear",onClick:()=>{a(""),i.current?.focus()},"aria-label":"Clear search"},e.createElement(X,null))),r&&e.createElement("div",{id:v,role:"group","aria-label":"Search results"},r))))):e.createElement("div",{...c,ref:u,className:d("rt-SidebarSearch","rt-SidebarSearch--expanded",s),role:"search"},e.createElement("div",{className:"rt-SidebarSearchInputWrapper"},e.createElement(z,{className:"rt-SidebarSearchIcon"}),e.createElement("input",{ref:i,type:"search",className:"rt-SidebarSearchInput",value:t,onChange:n=>a(n.target.value),onKeyDown:P,placeholder:o,"aria-label":C}),t&&e.createElement("button",{type:"button",className:"rt-reset rt-SidebarSearchClear",onClick:()=>{a(""),i.current?.focus()},"aria-label":"Clear search"},e.createElement(X,null))))});pe.displayName="Sidebar.Search";export{Q as a,Y as b,Z as c,ee as d,te as e,re as f,ae as g,oe as h,ne as i,se as j,ie as k,ce as l,de as m,ue as n,pe as o,fe as p};
2
+ //# sourceMappingURL=chunk-YQRSAP46.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/sidebar.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from './slot.js';\nimport * as Accordion from '@radix-ui/react-accordion';\nimport * as DropdownMenu from './dropdown-menu.js';\nimport * as Popover from './popover.js';\n\nimport { sidebarPropDefs } from './sidebar.props.js';\nimport { useThemeContext } from './theme.js';\n// import { IconButton } from './icon-button.js';\nimport { ScrollArea } from './scroll-area.js';\nimport { Separator } from './separator.js';\nimport { ThickChevronRightIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Kbd } from './kbd.js';\nimport { Badge } from './badge.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\nimport type { BadgeProps } from './badge.js';\n\n// Badge configuration type for sidebar menu buttons\ntype BadgeConfig = {\n content: React.ReactNode;\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n color?: BadgeProps['color'];\n radius?: BadgeProps['radius'];\n};\n\n// Internal presentational context (not exported) for size/menu variant\ntype SidebarVisualContextValue = {\n size: '1' | '2' | '3';\n menuVariant: 'solid' | 'soft';\n presentation?: 'thin' | 'expanded';\n color?: string;\n};\nconst SidebarVisualContext = React.createContext<SidebarVisualContextValue | null>(null);\nfunction useSidebarVisual() {\n return React.useContext(SidebarVisualContext);\n}\n\n// Sidebar is now independent of Shell - no integration needed\n\n// Main Sidebar component\ntype SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;\ninterface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {\n /**\n * Presentational mode independent of Shell.\n * 'thin' renders a rail-style sidebar, 'expanded' renders a panel-style sidebar.\n * If both `presentation` and `layout` are provided, `presentation` takes precedence.\n */\n presentation?: 'thin' | 'expanded';\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n const {\n size = sidebarPropDefs.size.default,\n variant = sidebarPropDefs.variant.default,\n menuVariant = sidebarPropDefs.menuVariant.default,\n layout = sidebarPropDefs.layout.default,\n presentation,\n // type = sidebarPropDefs.type.default,\n // side = sidebarPropDefs.side.default,\n // collapsible = sidebarPropDefs.collapsible.default,\n panelBackground,\n color,\n } = props;\n\n const { className, children, ...rootProps } = extractProps(props, sidebarPropDefs);\n // Remove internal-only props from DOM\n const { asChild: _, panelBackground: __, presentation: ___, ...safeRootProps } = rootProps;\n const resolvedColor = color || themeContext.accentColor;\n\n // Resolve layout (default to 'panel'). `presentation` takes precedence over `layout`.\n const resolvedLayout = presentation === 'thin' ? 'rail' : presentation === 'expanded' ? 'panel' : layout || 'panel';\n\n // Update context with current props - we'll pass the resolved values\n const resolvedSize = typeof size === 'object' ? size.initial || '2' : size;\n const visualContextValue = React.useMemo(\n () => ({ size: resolvedSize, menuVariant, presentation, color: resolvedColor }),\n [resolvedSize, menuVariant, presentation, resolvedColor],\n );\n return (\n <div {...safeRootProps} ref={forwardedRef} data-accent-color={resolvedColor} className={classNames('rt-SidebarRoot', className)}>\n <SidebarVisualContext.Provider value={visualContextValue}>\n <div\n className={classNames('rt-SidebarContainer', `rt-variant-${variant}`, `rt-r-size-${resolvedSize}`, `rt-menu-variant-${menuVariant}`, resolvedLayout && `rt-layout-${resolvedLayout}`)}\n data-accent-color={resolvedColor}\n data-panel-background={panelBackground}\n data-presentation={presentation}\n data-layout={resolvedLayout}\n >\n {children}\n </div>\n </SidebarVisualContext.Provider>\n </div>\n );\n});\nSidebar.displayName = 'Sidebar.Root';\n\n// Sidebar content area\ninterface SidebarContentProps extends React.ComponentPropsWithoutRef<'div'> {\n id?: string;\n role?: 'navigation' | 'none';\n 'aria-label'?: string;\n}\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(\n ({ className, children, role = 'navigation', 'aria-label': ariaLabel = 'Main navigation', id, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <ScrollArea type=\"hover\">\n <div\n {...props}\n ref={forwardedRef}\n id={id}\n role={role}\n aria-label={ariaLabel}\n className={classNames('rt-BaseMenuContent', 'rt-SidebarContent', `rt-r-size-${size}`, `rt-menu-variant-${menuVariant}`, className)}\n >\n <div className=\"rt-BaseMenuViewport\">{children}</div>\n </div>\n </ScrollArea>\n );\n },\n);\nSidebarContent.displayName = 'Sidebar.Content';\n\n// Sidebar header\ninterface SidebarHeaderProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarHeader',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarHeader--container': asContainer,\n },\n className,\n )}\n />\n );\n});\nSidebarHeader.displayName = 'Sidebar.Header';\n\n// Sidebar footer\ninterface SidebarFooterProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarFooter',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarFooter--container': asContainer,\n },\n className,\n )}\n />\n );\n});\nSidebarFooter.displayName = 'Sidebar.Footer';\n\n// Sidebar trigger button\n// removed Trigger in presentational-only Sidebar\n\n// Removed SidebarInset - not needed\n\n// Sidebar separator\ninterface SidebarSeparatorProps extends ComponentPropsWithout<typeof Separator, RemovedProps> {}\n\nconst SidebarSeparator = React.forwardRef<React.ComponentRef<typeof Separator>, SidebarSeparatorProps>(({ className, ...props }, forwardedRef) => (\n <Separator {...props} ref={forwardedRef} className={classNames('rt-SidebarSeparator', className)} />\n));\nSidebarSeparator.displayName = 'Sidebar.Separator';\n\n// Menu components - styled like dropdown menus, but semantically a navigation list.\n// No menu/menuitem roles: those promise an application menu, which a list of links is not.\ninterface SidebarMenuProps extends React.ComponentPropsWithoutRef<'ul'> {}\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(({ className, ...props }, forwardedRef) => (\n <ul {...props} ref={forwardedRef} className={classNames('rt-SidebarMenu', className)} />\n));\nSidebarMenu.displayName = 'Sidebar.Menu';\n\ninterface SidebarMenuItemProps extends React.ComponentPropsWithoutRef<'li'> {}\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, SidebarMenuItemProps>(({ className, ...props }, forwardedRef) => (\n <li {...props} ref={forwardedRef} className={classNames('rt-SidebarMenuItem', className)} />\n));\nSidebarMenuItem.displayName = 'Sidebar.MenuItem';\n\ninterface SidebarMenuButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n isActive?: boolean;\n shortcut?: React.ReactNode;\n badge?: string | BadgeConfig;\n}\n\n// Extracted to module scope to avoid re-creation on every render\nfunction separateIconsAndLabels(node: React.ReactNode): { icons: React.ReactNode[]; labels: React.ReactNode[] } {\n const icons: React.ReactNode[] = [];\n const labels: React.ReactNode[] = [];\n\n React.Children.forEach(node, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n labels.push(<span key={labels.length} className=\"rt-SidebarMenuLabel\">{child}</span>);\n } else if (React.isValidElement(child)) {\n const el = child as React.ReactElement<any>;\n if (el.type === 'svg' || (el.props && el.props.icon) || (typeof el.type === 'function' && ((el.type as any).displayName?.includes('Icon') || (el.type as any).name?.includes('Icon')))) {\n icons.push(child);\n } else {\n labels.push(child);\n }\n } else if (child) {\n labels.push(child);\n }\n });\n\n return { icons, labels };\n}\n\nfunction wrapTextNodes(node: React.ReactNode): React.ReactNode {\n if (typeof node === 'string' || typeof node === 'number') {\n return <span className=\"rt-SidebarMenuLabel\">{node}</span>;\n }\n if (Array.isArray(node)) {\n return node.map((child, index) => <React.Fragment key={index}>{wrapTextNodes(child)}</React.Fragment>);\n }\n if (React.isValidElement(node)) {\n const el = node as React.ReactElement<any>;\n const className: string = (el.props && (el.props as any).className) || '';\n const isAlreadyLabel = typeof el.type === 'string' && className.split(' ').includes('rt-SidebarMenuLabel');\n if (isAlreadyLabel) return el;\n const newChildren = wrapTextNodes((el.props as any)?.children);\n return React.cloneElement(el, { ...(el.props as any) }, newChildren);\n }\n return node;\n}\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n ({ asChild = false, isActive = false, shortcut, badge, className, children, onKeyDown, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const sidebarSize = visual?.size ?? '2';\n const isThinMode = visual?.presentation === 'thin';\n\n const Comp = asChild ? Slot : 'button';\n\n // Enter and Space are left to the native button or link. Arrow keys move between\n // the visible buttons of the same sidebar, as a convenience on top of Tab.\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n const scope = event.currentTarget.closest('.rt-SidebarContent, .rt-SidebarSearchPopover');\n const buttons = scope\n ? Array.from(scope.querySelectorAll<HTMLElement>('.rt-SidebarMenuButton')).filter((el) => el.offsetParent !== null)\n : [];\n const index = buttons.indexOf(event.currentTarget);\n const next = buttons[index + (event.key === 'ArrowDown' ? 1 : -1)];\n if (index !== -1 && next) {\n event.preventDefault();\n next.focus();\n }\n }\n onKeyDown?.(event);\n },\n [onKeyDown],\n );\n\n // Memoize child processing to avoid re-traversal on every render\n const processedChildren = React.useMemo(() => wrapTextNodes(children), [children]);\n\n // For thin mode, separate icons into a wrapper for targeted background styling\n const { icons, labels } = React.useMemo(\n () => isThinMode ? separateIconsAndLabels(children) : { icons: [] as React.ReactNode[], labels: [] as React.ReactNode[] },\n [isThinMode, children],\n );\n\n // When rendering asChild, Slot expects a single child element. We still want to\n // append optional badge/shortcut inside that element so they render with Link.\n const slottedChildren = React.useMemo(() => {\n if (!asChild) return null;\n try {\n const onlyChild = React.Children.only(processedChildren as React.ReactElement<any>) as React.ReactElement<any>;\n const originalInnerChildren = (onlyChild.props as any)?.children;\n const enhancedInnerChildren = (\n <>\n {originalInnerChildren}\n {badge && (\n <div className=\"rt-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Badge size={sidebarSize} variant=\"soft\">\n {badge}\n </Badge>\n ) : (\n <Badge size={badge.size || sidebarSize} variant={badge.variant || 'soft'} color={badge.color} radius={badge.radius}>\n {badge.content}\n </Badge>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n );\n return React.cloneElement(onlyChild, { ...(onlyChild.props as any) }, enhancedInnerChildren);\n } catch {\n // Fallback: if multiple children were passed incorrectly, just return processedChildren\n return processedChildren as React.ReactNode;\n }\n }, [asChild, processedChildren, badge, shortcut, sidebarSize]);\n\n return (\n <Comp\n {...props}\n ref={forwardedRef}\n aria-current={isActive ? 'page' : undefined}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', className)}\n data-active={isActive || undefined}\n onKeyDown={handleKeyDown}\n >\n {asChild ? (\n slottedChildren\n ) : isThinMode && icons.length > 0 ? (\n <>\n <span className=\"rt-SidebarMenuIconWrapper\">{icons}</span>\n {labels.map((label, index) => (\n <React.Fragment key={index}>\n {typeof label === 'string' || typeof label === 'number' ? (\n <span className=\"rt-SidebarMenuLabel\">{label}</span>\n ) : (\n label\n )}\n </React.Fragment>\n ))}\n </>\n ) : (\n <>\n {processedChildren}\n {badge && (\n <div className=\"rt-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Badge size={sidebarSize} variant=\"soft\">\n {badge}\n </Badge>\n ) : (\n <Badge size={badge.size || sidebarSize} variant={badge.variant || 'soft'} color={badge.color} radius={badge.radius}>\n {badge.content}\n </Badge>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n )}\n </Comp>\n );\n },\n);\nSidebarMenuButton.displayName = 'Sidebar.MenuButton';\n\n// Sub-menu components: Accordion in expanded, Dropdown in thin\nconst SidebarSubMenuModeContext = React.createContext<'accordion' | 'dropdown'>('accordion');\ninterface SidebarMenuSubProps extends React.ComponentPropsWithoutRef<'div'> {\n defaultOpen?: boolean;\n}\n\nconst SidebarMenuSub = React.forwardRef<HTMLDivElement, SidebarMenuSubProps>(({ defaultOpen = false, children, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const mode: 'accordion' | 'dropdown' = visual?.presentation === 'thin' ? 'dropdown' : 'accordion';\n\n if (mode === 'dropdown') {\n return (\n <div {...props} ref={forwardedRef}>\n <DropdownMenu.Root>\n <SidebarSubMenuModeContext.Provider value=\"dropdown\">{children}</SidebarSubMenuModeContext.Provider>\n </DropdownMenu.Root>\n </div>\n );\n }\n\n return (\n <div {...props} ref={forwardedRef}>\n <SidebarSubMenuModeContext.Provider value=\"accordion\">\n <Accordion.Root type=\"single\" collapsible defaultValue={defaultOpen ? 'item' : undefined}>\n <Accordion.Item value=\"item\">{children}</Accordion.Item>\n </Accordion.Root>\n </SidebarSubMenuModeContext.Provider>\n </div>\n );\n});\nSidebarMenuSub.displayName = 'Sidebar.MenuSub';\n\ninterface SidebarMenuSubTriggerProps extends React.ComponentPropsWithoutRef<typeof Accordion.Trigger> {\n asChild?: boolean;\n}\n\nconst SidebarMenuSubTrigger = React.forwardRef<React.ElementRef<typeof Accordion.Trigger>, SidebarMenuSubTriggerProps>(\n ({ asChild = false, className, children, ...props }, forwardedRef) => {\n const mode = React.useContext(SidebarSubMenuModeContext);\n\n if (mode === 'dropdown') {\n return (\n <DropdownMenu.Trigger>\n <button\n {...(props as any)}\n ref={forwardedRef as any}\n type=\"button\"\n aria-haspopup=\"menu\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarMenuSubTrigger', className)}\n >\n {children}\n </button>\n </DropdownMenu.Trigger>\n );\n }\n\n return (\n <Accordion.Header asChild>\n <div>\n <Accordion.Trigger\n {...props}\n ref={forwardedRef}\n asChild={asChild}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarMenuSubTrigger', className)}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n <ThickChevronRightIcon className={classNames('rt-BaseMenuSubTriggerIcon', 'rt-SidebarMenuSubTriggerIcon')} />\n </>\n )}\n </Accordion.Trigger>\n </div>\n </Accordion.Header>\n );\n },\n);\nSidebarMenuSubTrigger.displayName = 'Sidebar.MenuSubTrigger';\n\ninterface SidebarMenuSubContentProps extends React.ComponentPropsWithoutRef<typeof Accordion.Content> {}\n\nconst SidebarMenuSubContent = React.forwardRef<React.ElementRef<typeof Accordion.Content>, SidebarMenuSubContentProps>(({ className, children, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const mode = React.useContext(SidebarSubMenuModeContext);\n\n if (mode === 'dropdown') {\n const unwrapMenuButton = (node: React.ReactNode): React.ReactNode => {\n if (Array.isArray(node)) {\n return node.map((n, i) => <React.Fragment key={i}>{unwrapMenuButton(n)}</React.Fragment>);\n }\n if (React.isValidElement(node)) {\n const typeDisplay = (node.type as any)?.displayName;\n if (typeDisplay === 'Sidebar.MenuButton') {\n return (node.props as any)?.children;\n }\n const child = (node.props as any)?.children;\n if (child !== undefined) {\n return React.cloneElement(node as any, { ...(node.props as any), children: unwrapMenuButton(child) });\n }\n }\n return node;\n };\n\n const normalized = React.Children.map(children as React.ReactNode, (child, index) => {\n if (React.isValidElement(child) && (child.type as any)?.displayName === 'Sidebar.MenuItem') {\n const itemChildren = (child.props as any)?.children;\n const content = unwrapMenuButton(itemChildren);\n return (\n <DropdownMenu.Item key={index} asChild>\n {content as any}\n </DropdownMenu.Item>\n );\n }\n // Fallback: wrap raw nodes too for consistent menu styling\n return (\n <DropdownMenu.Item key={index} asChild>\n {unwrapMenuButton(child) as any}\n </DropdownMenu.Item>\n );\n });\n\n // DropdownMenu only supports sizes 1 and 2, so map size 3 to 2\n const dropdownSize = visual?.size === '3' ? '2' : visual?.size;\n return (\n <DropdownMenu.Content size={dropdownSize} variant={visual?.menuVariant} className={classNames(className)}>\n <DropdownMenu.Group>{normalized}</DropdownMenu.Group>\n </DropdownMenu.Content>\n );\n }\n\n return (\n <Accordion.Content {...props} ref={forwardedRef} className={classNames('rt-SidebarMenuSubContent', className)}>\n <div className=\"rt-SidebarMenuSubList\">{children}</div>\n </Accordion.Content>\n );\n});\nSidebarMenuSubContent.displayName = 'Sidebar.MenuSubContent';\n\n// Group components. The label is plain text: no role, so it isn't announced as an empty group.\ninterface SidebarGroupProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('rt-BaseMenuGroup', 'rt-SidebarGroup', className)} />\n));\nSidebarGroup.displayName = 'Sidebar.Group';\n\ninterface SidebarGroupLabelProps extends React.ComponentPropsWithoutRef<'div'> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(({ asChild = false, className, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : 'div';\n\n return <Comp {...props} ref={forwardedRef} className={classNames('rt-BaseMenuLabel', 'rt-SidebarGroupLabel', className)} />;\n});\nSidebarGroupLabel.displayName = 'Sidebar.GroupLabel';\n\ninterface SidebarGroupContentProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, SidebarGroupContentProps>(({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('rt-SidebarGroupContent', className)} />\n));\nSidebarGroupContent.displayName = 'Sidebar.GroupContent';\n\n// Search component: inline input in expanded, popover trigger in thin\ninterface SidebarSearchProps extends React.ComponentPropsWithoutRef<'div'> {\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n children?: React.ReactNode;\n}\n\nconst SearchIcon = ({ className }: { className?: string }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n);\n\nconst ClearIcon = ({ className }: { className?: string }) => (\n <svg className={className} width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\nconst SidebarSearch = React.forwardRef<HTMLDivElement, SidebarSearchProps>(\n ({ value, onValueChange, placeholder = 'Search...', children, className, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const isThin = visual?.presentation === 'thin';\n const inputRef = React.useRef<HTMLInputElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const searchId = React.useId();\n const resultsId = `${searchId}-results`;\n\n // Stable refs for values used in callbacks \u2014 avoids recreating handlers on every keystroke\n const valueRef = React.useRef(value);\n valueRef.current = value;\n const onValueChangeRef = React.useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n\n // Derive a clean aria-label from placeholder (strip trailing dots/ellipsis)\n const searchLabel = placeholder.replace(/\\.+$/, '');\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape' && valueRef.current) {\n e.preventDefault();\n e.stopPropagation();\n onValueChangeRef.current('');\n inputRef.current?.focus();\n }\n },\n [],\n );\n\n // Arrow key navigation within the popover (input \u2194 results)\n const handlePopoverKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const container = popoverRef.current;\n if (!container) return;\n\n const resultsGroup = container.querySelector('[role=\"group\"]');\n if (!resultsGroup) return;\n\n const items = Array.from(\n resultsGroup.querySelectorAll<HTMLElement>('a, button'),\n );\n if (items.length === 0) return;\n\n const active = document.activeElement as HTMLElement;\n const isOnInput = active === inputRef.current;\n const currentIndex = items.indexOf(active);\n\n // Typing while a result is focused \u2192 redirect focus to input\n if (\n e.key.length === 1 &&\n !e.ctrlKey &&\n !e.metaKey &&\n !e.altKey &&\n !isOnInput &&\n currentIndex !== -1\n ) {\n inputRef.current?.focus();\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (isOnInput || currentIndex === -1) {\n items[0]?.focus();\n } else if (currentIndex < items.length - 1) {\n items[currentIndex + 1]?.focus();\n }\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (currentIndex <= 0) {\n inputRef.current?.focus();\n } else {\n items[currentIndex - 1]?.focus();\n }\n break;\n }\n case 'Home': {\n // Only intercept when focused on a result, not the input (where Home moves cursor)\n if (!isOnInput) {\n e.preventDefault();\n items[0]?.focus();\n }\n break;\n }\n case 'End': {\n if (!isOnInput) {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n break;\n }\n }\n },\n [],\n );\n\n if (isThin) {\n return (\n <div {...props} ref={forwardedRef} className={classNames('rt-SidebarSearch', 'rt-SidebarSearch--thin', className)}>\n <Popover.Root>\n <Popover.Trigger>\n <button\n type=\"button\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarSearchTrigger')}\n aria-label={searchLabel}\n >\n <span className=\"rt-SidebarMenuIconWrapper\">\n <SearchIcon />\n </span>\n <span className=\"rt-SidebarMenuLabel\">Search</span>\n </button>\n </Popover.Trigger>\n <Popover.Content side=\"right\" align=\"start\" size=\"2\" width=\"280px\" aria-label={searchLabel}>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- keyDown manages arrow-key navigation between input and results, which is accessibility-enhancing */}\n <div\n ref={popoverRef}\n className=\"rt-SidebarSearchPopover\"\n role=\"search\"\n onKeyDown={handlePopoverKeyDown}\n >\n <div className=\"rt-SidebarSearchInputWrapper\">\n <SearchIcon className=\"rt-SidebarSearchIcon\" />\n <input\n ref={inputRef}\n type=\"search\"\n className=\"rt-SidebarSearchInput\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={searchLabel}\n aria-controls={children ? resultsId : undefined}\n // eslint-disable-next-line jsx-a11y/no-autofocus -- intentional: popover opens on user action, focusing the input is expected UX\n autoFocus\n />\n {value && (\n <button\n type=\"button\"\n className=\"rt-reset rt-SidebarSearchClear\"\n onClick={() => {\n onValueChange('');\n inputRef.current?.focus();\n }}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n {children && (\n <div id={resultsId} role=\"group\" aria-label=\"Search results\">\n {children}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n }\n\n // Expanded mode: inline input\n return (\n <div {...props} ref={forwardedRef} className={classNames('rt-SidebarSearch', 'rt-SidebarSearch--expanded', className)} role=\"search\">\n <div className=\"rt-SidebarSearchInputWrapper\">\n <SearchIcon className=\"rt-SidebarSearchIcon\" />\n <input\n ref={inputRef}\n type=\"search\"\n className=\"rt-SidebarSearchInput\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={searchLabel}\n />\n {value && (\n <button\n type=\"button\"\n className=\"rt-reset rt-SidebarSearchClear\"\n onClick={() => {\n onValueChange('');\n inputRef.current?.focus();\n }}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nSidebarSearch.displayName = 'Sidebar.Search';\n\n// Export all components following shadcn's pattern\nexport {\n Sidebar as Root,\n SidebarContent as Content,\n SidebarHeader as Header,\n SidebarFooter as Footer,\n SidebarSeparator as Separator,\n SidebarMenu as Menu,\n SidebarMenuItem as MenuItem,\n SidebarMenuButton as MenuButton,\n SidebarMenuSub as MenuSub,\n SidebarMenuSubTrigger as MenuSubTrigger,\n SidebarMenuSubContent as MenuSubContent,\n SidebarGroup as Group,\n SidebarGroupLabel as GroupLabel,\n SidebarGroupContent as GroupContent,\n SidebarSearch as Search,\n};\n\n/**\n * Enhanced Sidebar Header and Footer Usage Examples:\n *\n * 1. Simple default container (backwards compatible):\n * <Sidebar.Header>\n * <Logo />\n * <span>App Name</span>\n * </Sidebar.Header>\n *\n * 2. Custom flex layout:\n * <Sidebar.Header className=\"rt-justify-between rt-gap-3\">\n * <Logo />\n * <Sidebar.MenuButton>\n * <SettingsIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 3. Column layout for multiple rows:\n * <Sidebar.Header className=\"rt-flex-col rt-gap-2\" asContainer={false}>\n * <div className=\"rt-flex rt-items-center rt-gap-2\">\n * <Logo />\n * <span>App Name</span>\n * </div>\n * <Sidebar.MenuButton>\n * <UserAvatar />\n * <span>John Doe</span>\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 4. Interactive footer with menu button:\n * <Sidebar.Footer>\n * <Sidebar.MenuButton>\n * <UserIcon />\n * <span>Settings</span>\n * <ChevronUpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * 5. Custom footer layout:\n * <Sidebar.Footer className=\"rt-justify-between\">\n * <span>v1.0.0</span>\n * <Sidebar.MenuButton>\n * <HelpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * Available utility classes:\n * - Layout: rt-flex-row, rt-flex-col\n * - Alignment: rt-items-center, rt-items-start, rt-items-end\n * - Justification: rt-justify-between, rt-justify-center, rt-justify-start, rt-justify-end\n * - Gap: rt-gap-1, rt-gap-2, rt-gap-3, rt-gap-4\n */\n\nexport type { SidebarProps as RootProps, SidebarContentProps as ContentProps, SidebarHeaderProps as HeaderProps, SidebarFooterProps as FooterProps, BadgeConfig };\n"],
5
+ "mappings": "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",
6
+ "names": ["sidebar_exports", "__export", "SidebarContent", "SidebarFooter", "SidebarGroup", "SidebarGroupContent", "SidebarGroupLabel", "SidebarHeader", "SidebarMenu", "SidebarMenuButton", "SidebarMenuItem", "SidebarMenuSub", "SidebarMenuSubContent", "SidebarMenuSubTrigger", "Sidebar", "SidebarSearch", "SidebarSeparator", "React", "classNames", "Accordion", "SidebarVisualContext", "useSidebarVisual", "Sidebar", "props", "forwardedRef", "themeContext", "useThemeContext", "size", "sidebarPropDefs", "variant", "menuVariant", "layout", "presentation", "panelBackground", "color", "className", "children", "rootProps", "extractProps", "_", "__", "___", "safeRootProps", "resolvedColor", "resolvedLayout", "resolvedSize", "visualContextValue", "classNames", "SidebarContent", "role", "ariaLabel", "id", "visual", "ScrollArea", "SidebarHeader", "asContainer", "SidebarFooter", "SidebarSeparator", "Separator", "SidebarMenu", "SidebarMenuItem", "separateIconsAndLabels", "node", "icons", "labels", "child", "el", "wrapTextNodes", "index", "newChildren", "SidebarMenuButton", "asChild", "isActive", "shortcut", "badge", "onKeyDown", "sidebarSize", "isThinMode", "Comp", "Slot", "handleKeyDown", "event", "scope", "buttons", "next", "processedChildren", "slottedChildren", "onlyChild", "originalInnerChildren", "enhancedInnerChildren", "Badge", "Kbd", "label", "SidebarSubMenuModeContext", "SidebarMenuSub", "defaultOpen", "DropdownMenuRoot", "SidebarMenuSubTrigger", "DropdownMenuTrigger", "ThickChevronRightIcon", "SidebarMenuSubContent", "unwrapMenuButton", "n", "i", "normalized", "itemChildren", "content", "DropdownMenuItem", "dropdownSize", "DropdownMenuContent", "DropdownMenuGroup", "SidebarGroup", "SidebarGroupLabel", "SidebarGroupContent", "SearchIcon", "ClearIcon", "SidebarSearch", "value", "onValueChange", "placeholder", "isThin", "inputRef", "popoverRef", "resultsId", "valueRef", "onValueChangeRef", "searchLabel", "e", "handlePopoverKeyDown", "container", "resultsGroup", "items", "active", "isOnInput", "currentIndex", "PopoverRoot", "PopoverTrigger", "PopoverContent"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as rt}from"./chunk-RJP5QUXO.js";import{a as je}from"./chunk-4XGGX2V2.js";import{a as nt}from"./chunk-CTA5ODAO.js";import{g as tt,j as at}from"./chunk-IX5HIHVI.js";import{a as me}from"./chunk-5WRCK4R7.js";import{a as et}from"./chunk-HF5WY5YE.js";import{a as de}from"./chunk-FHOCUZDR.js";import{a as Be}from"./chunk-AGAQC4HH.js";import{b as U}from"./chunk-FWB47YCH.js";import{a as Ot}from"./chunk-OS3FCYZY.js";var $t={};Ot($t,{AttachTrigger:()=>ft,Attachment:()=>Ue,AttachmentsRow:()=>ht,InlineEnd:()=>pt,InlineStart:()=>mt,Root:()=>ut,Row:()=>bt,RowEnd:()=>Ct,RowStart:()=>Rt,Send:()=>gt,Textarea:()=>dt});import*as e from"react";import L from"classnames";import{LazyMotion as Ft,MotionConfig as Ht,domAnimation as zt,m as he}from"motion/react";import{useComposedRefs as it}from"radix-ui/internal";import{useDropzone as It}from"react-dropzone";var Ve=typeof window<"u"?e.useLayoutEffect:e.useEffect;function ot(n,s){let{placeholder:r}=n;if(!r){s();return}n.placeholder="";try{s()}finally{n.placeholder=r}}var fe={layout:{type:"spring",visualDuration:.15,bounce:.1}},ct=e.createContext(null),$e=e.createContext(""),K=()=>{let n=e.useContext(ct);if(!n)throw new Error("Chatbar context not found. Wrap parts in <Chatbar.Root>.");return n},pe=n=>Array.isArray(n)?n:typeof n=="string"?n.split(",").map(s=>s.trim()).filter(Boolean):[],Dt=(n,s)=>{if(s.length===0)return!0;let r=n.type.toLowerCase(),d=n.name.toLowerCase();for(let f of s){let i=f.toLowerCase();if(i.includes("/")){let[b,c]=i.split("/"),[C,p]=r.split("/");if(b==="*"||b===C&&(c==="*"||c===p))return!0}else if(i.startsWith(".")&&d.endsWith(i))return!0}return!1},Bt=/\.(png|jpe?g|gif|webp|bmp|svg|avif)$/i,lt=(n,s)=>(s||"").toLowerCase().startsWith("image/")||Bt.test(n),We=n=>n.trim().length>0,st=(n,s)=>`${n} ${s}${n===1?"":"s"}`,jt=0,Vt=()=>`chatbar-attachment-${Date.now()}-${++jt}`,ut=e.forwardRef((n,s)=>{let{className:r,style:d,children:f,value:i,defaultValue:b="",onValueChange:c,open:C,defaultOpen:p=!1,onOpenChange:S,expandOn:A="both",minLines:h=3,maxLines:B=6,sendMode:H="whenDirty",disabled:l,readOnly:g,onSubmit:k,size:P="2",variant:E,color:M,radius:z,panelBackground:v,material:N,width:j,maxWidth:re,attachments:y,defaultAttachments:I,onAttachmentsChange:_,accept:be,multiple:F=!0,maxAttachments:G,maxFileSize:q,paste:D=!0,pasteAccept:O,clearOnSubmit:Y=!0,onAttachmentReject:Ee,dropzone:oe=!0,apiRef:Te,onBlurCapture:Re,notices:Ce,context:ge,...Le}=n,t=N||v,R=i!=null,[w,se]=e.useState(b),V=R?i:w,X=C!=null,[ke,ie]=e.useState(p),Q=X?C:ke,Z="attachments"in n,[Ke,vt]=e.useState(()=>I??[]),ce=e.useMemo(()=>Z?y??[]:Ke,[Z,y,Ke]),[_e,yt]=e.useState({text:"",id:0}),le=e.useCallback(a=>yt(o=>({text:a,id:o.id+1})),[]),Ge=e.useRef(null),xt=it(s,Ge),Me=e.useRef(null),Ne=e.useRef(null),ue=e.useRef(!1),ve=e.useRef(!1),ye=e.useRef(void 0),Oe=e.useRef(null),qe=pe(be).join(","),Fe=pe(O).join(","),He=e.useMemo(()=>pe(qe),[qe]),Pt=e.useMemo(()=>Fe?pe(Fe):He,[Fe,He]),Ye={value:V,attachments:ce,accepts:He,pasteAccepts:Pt,multiple:F,maxAttachments:G,maxFileSize:q,disabled:l,readOnly:g,expandOn:A,isValueControlled:R,isOpenControlled:X,isAttachmentsControlled:Z,onValueChange:c,onOpenChange:S,onAttachmentsChange:_,onAttachmentReject:Ee,onSubmit:k},x=e.useRef(Ye);x.current=Ye;let ze=e.useRef(null),W=e.useCallback(()=>ze.current??x.current.attachments,[]),ee=e.useCallback(a=>{x.current.isOpenControlled||ie(a),x.current.onOpenChange?.(a)},[]),xe=e.useCallback(a=>{x.current.isValueControlled||se(a),x.current.onValueChange?.(a)},[]),te=e.useCallback(a=>{ze.current=a,queueMicrotask(()=>{ze.current=null}),x.current.isAttachmentsControlled||vt(a),x.current.onAttachmentsChange?.(a)},[]),Pe=e.useRef(new Set),ae=e.useCallback((a,o,u=x.current.multiple)=>{let m=x.current;if(m.disabled||m.readOnly||a.length===0)return 0;let $=W(),J=[],ne=[],Mt=typeof m.maxAttachments=="number"?Math.max(m.maxAttachments-$.length,0):1/0,Nt=u?1/0:1;for(let T of a){if(J.length>=Mt||J.length>=Nt){ne.push({file:T,reason:"count"});continue}if(typeof m.maxFileSize=="number"&&T.size>m.maxFileSize){ne.push({file:T,reason:"size"});continue}if(!Dt(T,o)){ne.push({file:T,reason:"type"});continue}let De=lt(T.name,T.type)?URL.createObjectURL(T):void 0;De&&Pe.current.add(De),J.push({id:Vt(),name:T.name,size:T.size,type:T.type,file:T,url:De,status:"idle"})}let Se=[];return J.length>0&&(te($.concat(J)),m.expandOn!=="none"&&ee(!0),Se.push(`${st(J.length,"file")} attached.`)),ne.length>0&&(m.onAttachmentReject?.(ne),Se.push(`${st(ne.length,"file")} could not be attached.`)),Se.length>0&&le(Se.join(" ")),J.length},[W,te,ee,le]),Ae=e.useCallback(a=>ae(a,x.current.accepts),[ae]),Xe=e.useCallback(a=>ae(a,x.current.pasteAccepts),[ae]),Je=e.useCallback(a=>{let o=W(),u=o.find(m=>m.id===a);u&&(te(o.filter(m=>m.id!==a)),le(`Removed ${u.name}.`))},[W,te,le]),Qe=e.useCallback(a=>{let o=x.current;if(o.disabled||o.readOnly)return!1;let u=W();if(!We(o.value)&&u.length===0)return!1;let m={value:o.value,attachments:u};if(a&&o.onSubmit)for(let $ of u)$.url&&Pe.current.delete($.url);return o.onSubmit?.(m),a&&(xe(""),te([])),!0},[W,xe,te]);e.useEffect(()=>{let a=Pe.current;if(a.size===0)return;let o=new Set(ce.map(u=>u.url));for(let u of Array.from(a))o.has(u)||(URL.revokeObjectURL(u),a.delete(u))},[ce]),e.useEffect(()=>{let a=Pe.current;return()=>{if(!x.current.isAttachmentsControlled){for(let o of Array.from(a))URL.revokeObjectURL(o);a.clear()}}},[]);let we=e.useCallback(a=>{let o=x.current,u=Ne.current;if(clearTimeout(ye.current),ve.current=!1,!u||o.disabled||o.readOnly)return;let m=a?.accept!=null?pe(a.accept):o.accepts,$=a?.multiple??o.multiple;Oe.current={patterns:m,multiple:$},u.accept=m.join(","),u.multiple=$,ue.current=!0,u.click(),setTimeout(()=>{document.hasFocus()&&(ue.current=!1)},1e3)},[]),Ze=e.useCallback(()=>{ve.current=!0,clearTimeout(ye.current),ye.current=setTimeout(()=>{ve.current=!1},800)},[]);e.useEffect(()=>()=>clearTimeout(ye.current),[]),e.useEffect(()=>{let a=Ne.current,o=()=>{ue.current=!1};return window.addEventListener("focus",o),a?.addEventListener("cancel",o),()=>{window.removeEventListener("focus",o),a?.removeEventListener("cancel",o)}},[]);let At=e.useCallback(a=>{let o=a.currentTarget,u=Array.from(o.files??[]),m=Oe.current;ae(u,m?.patterns??x.current.accepts,m?.multiple),ue.current=!1,Oe.current=null,o.value=""},[ae]),wt=e.useCallback(a=>{Re?.(a);let o=x.current,u=Ge.current;if(!u||o.expandOn==="none")return;let m=a.relatedTarget;m&&u.contains(m)||ue.current||ve.current||!We(o.value)&&W().length===0&&ee(!1)},[Re,ee,W]),St=e.useCallback(a=>{Ae(a)},[Ae]),{getRootProps:Et,isDragActive:Tt}=It({onDrop:St,onDragEnter:()=>le(""),noClick:!0,noKeyboard:!0,noPaste:!0,disabled:!oe||l||g}),Ie=oe&&Tt;e.useImperativeHandle(Te,()=>({focusTextarea:()=>Me.current?.focus({preventScroll:!0}),openFilePicker:()=>we()}),[we]);let Lt=e.useCallback(a=>{if(l||a.pointerType==="mouse"&&a.button!==0)return;let o=a.target;o instanceof Element&&o.closest('button, [role="button"], a[href], input, textarea, select, [contenteditable], [tabindex]:not([tabindex="-1"])')||(a.preventDefault(),Me.current?.focus({preventScroll:!0}))},[l]),kt=e.useMemo(()=>({open:Q,setOpen:ee,setValue:xe,size:P,expandOn:A,minLines:h,maxLines:B,sendMode:H,disabled:l,readOnly:g,paste:D,clearOnSubmit:Y,multiple:F,textareaRef:Me,attachments:ce,removeAttachment:Je,submit:Qe,appendFiles:Ae,appendFilesFromPaste:Xe,openFilePicker:we,beginFilePickerPress:Ze}),[Q,ee,xe,P,A,h,B,H,l,g,D,Y,F,ce,Je,Qe,Ae,Xe,we,Ze]);return e.createElement(ct.Provider,{value:kt},e.createElement($e.Provider,{value:V},e.createElement(Ft,{features:zt},e.createElement(Ht,{reducedMotion:"user"},e.createElement("div",{...Le,ref:xt,className:L("rt-ChatbarRoot",`rt-r-size-${P}`,r),style:{position:"relative",width:j,maxWidth:re,...d},"data-state":Q?"open":"closed","data-disabled":l?"":void 0,"data-readonly":g?"":void 0,"data-drop-active":Ie?"":void 0,"data-accent-color":M,"data-radius":z,"data-panel-background":t,"data-material":t,onBlurCapture:wt},e.createElement("input",{ref:Ne,type:"file",tabIndex:-1,"aria-hidden":!0,style:{display:"none"},onChange:At}),Ce?e.createElement("div",{className:"rt-ChatbarNotices"},e.createElement(rt.Provider,{value:P},Ce)):null,e.createElement("div",{...oe?Et():{},style:{width:"100%",flex:"1 1 auto",minHeight:0},onPointerDown:Lt},e.createElement(he.div,{className:L("rt-ChatbarBox",`rt-variant-${E??"surface"}`),style:{position:"relative"},"data-accent-color":M,"data-radius":z,"data-panel-background":t,"data-material":t,layout:!0,transition:fe},e.createElement(he.div,{className:"rt-ChatbarGrid",layout:"position",transition:fe},f),Ie&&e.createElement("div",{className:"rt-ChatbarDropOverlay","aria-hidden":!0},e.createElement("div",{className:"rt-ChatbarDropContent"},e.createElement(me,{emphasis:"medium",size:P,weight:"medium"},"Drop files here to attach"))))),ge?e.createElement(me,{as:"div",size:P==="3"?"2":"1",emphasis:"medium",className:"rt-ChatbarContext"},ge):null,e.createElement(Be,{role:"status","aria-live":"polite"},Ie?"Drop files here to attach.":e.createElement("span",{key:_e.id},_e.text)))))))});ut.displayName="Chatbar.Root";var dt=e.forwardRef((n,s)=>{let{className:r,style:d,asChild:f,onFocus:i,onChange:b,onPaste:c,onKeyDown:C,onCompositionStart:p,onCompositionEnd:S,submitOnEnter:A=!1,...h}=n,B=K(),H=e.useContext($e),{open:l,minLines:g,maxLines:k,expandOn:P,disabled:E,readOnly:M,setOpen:z,setValue:v,textareaRef:N,paste:j,appendFilesFromPaste:re,size:y,submit:I,clearOnSubmit:_}=B,be=it(s,N),F=e.useRef(0),G=e.useRef(0),q=e.useRef(!1),D=e.useRef({open:l,minLines:g,maxLines:k});Ve(()=>{D.current={open:l,minLines:g,maxLines:k}},[l,g,k]);let O=e.useCallback(()=>{let t=N.current;if(!t)return;let R=window.getComputedStyle(t);F.current=parseFloat(R.lineHeight)||20,G.current=(parseFloat(R.paddingTop)||0)+(parseFloat(R.paddingBottom)||0)},[N]),Y=e.useCallback((t,R)=>{let{minLines:w,maxLines:se}=D.current,V=F.current,X=G.current,ke=Math.ceil((R?w:1)*V)+X,ie=Math.ceil((R?se:1)*V)+X,Q=Math.max(t.scrollHeight,ke);t.style.height=`${Math.min(Q,ie)}px`;let Z=Q>ie;t.style.overflowY=Z?"auto":"hidden",t.style.maxHeight=Z?`${ie}px`:"none"},[]);Ve(()=>{O()},[O,y]),Ve(()=>{let t=N.current;t&&(F.current===0&&O(),ot(t,()=>{t.style.height="auto";let R=l;if(!l&&(P==="overflow"||P==="both")){let w=Math.ceil(F.current)+G.current;t.scrollHeight>w+1&&(R=!0,z(!0))}Y(t,R)}))},[H,l,P,g,k,y,z,N,O,Y]),e.useEffect(()=>{let t=N.current;if(!t||typeof ResizeObserver>"u")return;let R=-1,w=new ResizeObserver(se=>{let V=se[0]?.contentRect.width??0;if(V===R)return;let X=R===-1;R=V,!X&&(O(),ot(t,()=>{t.style.height="auto",Y(t,D.current.open)}))});return w.observe(t),()=>w.disconnect()},[N,O,Y]),e.useEffect(()=>{},[]);let Ee=e.useCallback(t=>{i?.(t),!(E||M)&&(P==="focus"||P==="both")&&!l&&z(!0)},[E,M,P,l,z,i]),oe=e.useCallback(t=>{v(t.currentTarget.value),b?.(t)},[v,b]),Te=e.useCallback(t=>{if(c?.(t),t.defaultPrevented||!j||E||M)return;let R=Array.from(t.clipboardData?.items??[]).filter(w=>w.kind==="file").map(w=>w.getAsFile()).filter(w=>!!w);R.length!==0&&re(R)>0&&t.preventDefault()},[j,E,M,c,re]),Re=e.useCallback(t=>{q.current=!0,p?.(t)},[p]),Ce=e.useCallback(t=>{q.current=!1,S?.(t)},[S]),ge=e.useCallback(t=>{C?.(t),!(t.defaultPrevented||!A)&&(t.key!=="Enter"||t.shiftKey||t.altKey||t.ctrlKey||t.metaKey||q.current||t.nativeEvent.isComposing||t.nativeEvent.keyCode===229||(t.preventDefault(),I(_)))},[A,C,I,_]),Le=f?U:"textarea";return e.createElement(he.div,{className:L("rt-ChatbarField","rt-ChatbarTextarea",r),layout:"position",transition:fe},e.createElement(Le,{...h,ref:be,className:"rt-ChatbarInput",value:H,onChange:oe,onFocus:Ee,onPaste:Te,onKeyDown:ge,onCompositionStart:Re,onCompositionEnd:Ce,disabled:E,readOnly:M,rows:l?g:1,spellCheck:h.spellCheck??!0,autoCorrect:h.autoCorrect??"on",style:d}))});dt.displayName="Chatbar.Textarea";var mt=e.forwardRef((n,s)=>{let{children:r,asChild:d,className:f,...i}=n;return K().open?null:e.createElement(d?U:"div",{...i,ref:s,className:L("rt-ChatbarInlineStart",f)},r)});mt.displayName="Chatbar.InlineStart";var pt=e.forwardRef((n,s)=>{let{children:r,asChild:d,className:f,...i}=n;return K().open?null:e.createElement(d?U:"div",{...i,ref:s,className:L("rt-ChatbarInlineEnd",f)},r)});pt.displayName="Chatbar.InlineEnd";var ht=e.forwardRef((n,s)=>{let{asChild:r,forceMount:d,renderAttachment:f,className:i,...b}=n,c=K();if(c.attachments.length===0&&!d)return null;let C=r?U:"div";return e.createElement(he.div,{layout:"position",transition:fe},e.createElement(C,{...b,ref:s,className:L("rt-ChatbarAttachmentsRow",i),role:"list","aria-label":b["aria-label"]??"Attachments"},e.createElement(nt,{className:"rt-ChatbarScrollArea",scrollbars:"horizontal",size:"1"},e.createElement(de,{align:"center",gap:"2",minWidth:"fit-content"},c.attachments.map(p=>e.createElement(Ue,{key:p.id,attachment:p,asChild:!!f},f?.(p)))))))});ht.displayName="Chatbar.AttachmentsRow";var Wt={uploading:"uploading",error:"failed to upload"},Ue=e.forwardRef((n,s)=>{let{attachment:r,asChild:d,className:f,children:i,...b}=n,c=K(),C=d?U:"div",p=!!r.url&&lt(r.name,r.type),S=`${Math.ceil(r.size/1024)} KB`,A=r.status?Wt[r.status]:void 0,h=c.disabled||c.readOnly,B=H=>{let l=H.currentTarget.closest('[role="listitem"]'),g=l?.parentElement?Array.from(l.parentElement.children):[],k=l?g.indexOf(l):-1,E=(g[k+1]??g[k-1])?.querySelector(".rt-ChatbarAttachmentRemove");E?E.focus():c.textareaRef.current?.focus({preventScroll:!0}),c.removeAttachment(r.id)};return e.createElement(C,{...b,ref:s,className:L("rt-ChatbarAttachment",f),role:"listitem","data-kind":p?"image":"file","data-status":r.status,title:r.name},i??e.createElement(de,{align:"center",gap:"2",pr:p?void 0:"6"},e.createElement("div",{className:"rt-ChatbarAttachmentPreview","aria-hidden":!0},p?e.createElement("img",{className:"rt-ChatbarAttachmentImage",src:r.url,alt:""}):e.createElement(at,null)),p?e.createElement(Be,null,r.name,", ",S,A?`, ${A}`:""):e.createElement(de,{direction:"column",gap:"0",minWidth:"0"},e.createElement(me,{size:c.size,weight:"medium",truncate:!0},r.name),e.createElement(me,{size:"1",color:r.status==="error"?"red":void 0,emphasis:r.status==="error"?void 0:"medium"},S,A?` \xB7 ${A}`:"")),!h&&e.createElement(je,{className:"rt-ChatbarAttachmentRemove","aria-label":`Remove ${r.name}`,size:"1",variant:"classic",color:"gray",onClick:B},e.createElement(tt,null))))});Ue.displayName="Chatbar.Attachment";var ft=e.forwardRef((n,s)=>{let{asChild:r,accept:d,multiple:f,disabled:i,onPointerDown:b,onClick:c,...C}=n,p=K(),S=i||p.disabled||p.readOnly;return e.createElement(r?U:"button",{...C,ref:s,className:L("rt-ChatbarAttachTrigger",C.className),type:C.type??"button","aria-label":C["aria-label"]??"Add attachments",disabled:S,onPointerDown:h=>{b?.(h),!S&&!h.defaultPrevented&&p.beginFilePickerPress()},onClick:h=>{c?.(h),!(S||h.defaultPrevented)&&p.openFilePicker({accept:d,multiple:f})}})});ft.displayName="Chatbar.AttachTrigger";var bt=e.forwardRef((n,s)=>{let{asChild:r,children:d,className:f,...i}=n;if(!K().open)return null;let c=r?U:"div";return e.createElement(he.div,{layout:"position",transition:fe},e.createElement(c,{...i,ref:s,className:L("rt-ChatbarRow",f)},e.createElement(de,{align:"center",justify:"between",width:"100%"},d)))});bt.displayName="Chatbar.Row";var Rt=e.forwardRef((n,s)=>{let{className:r,...d}=n;return e.createElement("div",{...d,ref:s,className:L("rt-ChatbarRowStart",r)})});Rt.displayName="Chatbar.RowStart";var Ct=e.forwardRef((n,s)=>{let{className:r,...d}=n;return e.createElement("div",{...d,ref:s,className:L("rt-ChatbarRowEnd",r)})});Ct.displayName="Chatbar.RowEnd";var gt=e.forwardRef((n,s)=>{let{asChild:r,clearOnSend:d,disabled:f,children:i,style:b,className:c,size:C,variant:p,tabIndex:S,onClick:A,status:h="ready",onStop:B,onRetry:H,stopLabel:l="Stop",retryLabel:g="Retry",stopIcon:k,retryIcon:P,"aria-label":E,"aria-labelledby":M,...z}=n,v=K(),N=e.useContext($e),j=We(N)||v.attachments.length>0,y=j?"send":h==="submitted"||h==="streaming"?"stop":h==="error"?"retry":"send";if(v.sendMode==="never"&&y==="send")return null;let I=y!=="send"||v.sendMode==="always"||j,_=y==="send"?f||v.disabled||v.readOnly||!j:f||v.disabled,F=y==="stop"?{"aria-label":l}:y==="retry"?{"aria-label":g}:M?{"aria-labelledby":M}:{"aria-label":E??"Send"},G=D=>{if(A?.(D),D.defaultPrevented||_)return;if(y==="stop"){B?.();return}if(y==="retry"){H?.();return}let O=d??v.clearOnSubmit;v.submit(O)&&O&&v.textareaRef.current?.focus({preventScroll:!0})},q=y==="stop"?k??(h==="submitted"?e.createElement(et,{size:v.size}):e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0},e.createElement("rect",{x:"7",y:"7",width:"10",height:"10",rx:"2"}))):y==="retry"?P??e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0},e.createElement("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),e.createElement("path",{d:"M3 3v5h5"})):i??e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0},e.createElement("path",{d:"M5 12h14"}),e.createElement("path",{d:"m12 5 7 7-7 7"}));return e.createElement(je,{...z,ref:s,size:C??v.size,variant:p??(v.open||y!=="send"?"solid":"ghost"),disabled:_,className:L("rt-ChatbarSend",c),style:{opacity:I?1:0,pointerEvents:I?void 0:"none",...b},"aria-hidden":I?void 0:!0,tabIndex:I?S:-1,asChild:r,onClick:G,"data-status":h,"data-mode":y,...F},q)});gt.displayName="Chatbar.Send";export{ut as a,dt as b,mt as c,pt as d,ht as e,Ue as f,ft as g,bt as h,Rt as i,Ct as j,gt as k,$t as l};
2
+ //# sourceMappingURL=chunk-YTD3AJAU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/chatbar.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { LazyMotion, MotionConfig, domAnimation, m } from 'motion/react';\nimport { useComposedRefs } from 'radix-ui/internal';\nimport { useDropzone } from 'react-dropzone';\n\nimport { IconButton, type IconButtonProps } from './icon-button.js';\nimport { CloseIcon, FileTextIcon } from './icons.js';\nimport { Flex } from './flex.js';\nimport { ScrollArea } from './scroll-area.js';\nimport { Slot } from './slot.js';\nimport { NoticeSizeContext } from './notice.js';\nimport { Spinner } from './spinner.js';\nimport { Text } from './text.js';\nimport { VisuallyHidden } from './visually-hidden.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { accentColors } from '../props/color.prop.js';\nimport type { radii } from '../props/radius.prop.js';\n\n// Avoid SSR warnings by using an isomorphic layout effect\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * Runs `measure` with the placeholder taken out of layout, so a height read\n * reflects the value alone.\n *\n * A textarea with an empty value lays its placeholder out as real text, so\n * `scrollHeight` reports the placeholder wrapped at whatever width the field\n * has at that instant. That sizes an empty bar to the suggestion showing in it\n * rather than to `minLines`, and when the read lands before the field has its\n * final width -- a panel still animating open, a flex parent whose basis is 0\n * -- it wraps that text at a fraction of the real width and opens the bar at\n * `maxLines`. The first keystroke takes the placeholder out of layout and the\n * height snaps back, which is what made the bug look intermittent rather than\n * simply wrong.\n *\n * The reset to 'auto' and the `scrollHeight` read sit in different functions\n * here, so the whole measurement window is wrapped rather than a single read.\n * Costs one extra style recalc on a path that is already forcing a reflow.\n */\nfunction withoutPlaceholder(el: HTMLTextAreaElement, measure: () => void): void {\n const { placeholder } = el;\n if (!placeholder) {\n measure();\n return;\n }\n el.placeholder = '';\n try {\n measure();\n } finally {\n el.placeholder = placeholder;\n }\n}\n\n// Shared layout spring; hoisted so every motion node receives the same object\nconst LAYOUT_TRANSITION = { layout: { type: 'spring', visualDuration: 0.15, bounce: 0.1 } } as const;\n\ntype ExpandOn = 'none' | 'focus' | 'overflow' | 'both';\ntype SendMode = 'always' | 'whenDirty' | 'never';\n\n// Attachments\n/** Status flag for attachment lifecycle. */\ntype AttachmentStatus = 'idle' | 'uploading' | 'error' | 'done';\n/**\n * Attachment data model used by Chatbar.\n * - `file` exposes the original File object for uploads and processing.\n * - `url` is an object URL used for image previews. Chatbar revokes it when the\n * attachment is removed; once an attachment is handed to `onSubmit`, the\n * consumer owns the URL and is responsible for revoking it.\n */\ninterface ChatbarAttachment {\n id: string;\n name: string;\n size: number;\n type: string;\n /** Original File object for uploads and processing */\n file: File;\n url?: string;\n status?: AttachmentStatus;\n progress?: number;\n meta?: Record<string, unknown>;\n}\n\ntype ChatbarRejectReason = 'type' | 'size' | 'count';\ninterface ChatbarAttachmentRejection {\n file: File;\n reason: ChatbarRejectReason;\n}\n\ninterface ChatbarSubmitPayload {\n value: string;\n attachments: ChatbarAttachment[];\n}\n\ninterface FilePickerOptions {\n accept?: string | string[];\n multiple?: boolean;\n}\n\ninterface ChatbarContextValue {\n open: boolean;\n setOpen(next: boolean): void;\n\n setValue(next: string): void;\n\n size: '1' | '2' | '3';\n expandOn: ExpandOn;\n minLines: number;\n maxLines: number;\n sendMode: SendMode;\n disabled?: boolean;\n readOnly?: boolean;\n paste: boolean;\n clearOnSubmit: boolean;\n multiple: boolean;\n\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n\n attachments: ChatbarAttachment[];\n removeAttachment(id: string): void;\n\n /** Validates and submits; returns false when there was nothing to submit */\n submit(clear: boolean): boolean;\n appendFiles(files: File[]): number;\n appendFilesFromPaste(files: File[]): number;\n openFilePicker(options?: FilePickerOptions): void;\n /** Guards blur-collapse between pointerdown on a picker trigger and its click */\n beginFilePickerPress(): void;\n}\n\nconst ChatbarContext = React.createContext<ChatbarContextValue | null>(null);\n// Value lives in its own context so keystrokes only re-render parts that read it\nconst ChatbarValueContext = React.createContext<string>('');\n\nconst useChatbarContext = () => {\n const ctx = React.useContext(ChatbarContext);\n if (!ctx) throw new Error('Chatbar context not found. Wrap parts in <Chatbar.Root>.');\n return ctx;\n};\n\nconst toArray = (val: string | string[] | undefined) =>\n Array.isArray(val) ? val : typeof val === 'string' ? val.split(',').map((s) => s.trim()).filter(Boolean) : [];\n\nconst matchesAccept = (file: File, patterns: string[]) => {\n if (patterns.length === 0) return true;\n const mime = file.type.toLowerCase();\n const name = file.name.toLowerCase();\n for (const patRaw of patterns) {\n const pat = patRaw.toLowerCase();\n if (pat.includes('/')) {\n const [type, subtype] = pat.split('/');\n const [fmType, fmSubtype] = mime.split('/');\n if (type === '*' || (type === fmType && (subtype === '*' || subtype === fmSubtype))) return true;\n } else if (pat.startsWith('.')) {\n if (name.endsWith(pat)) return true;\n }\n }\n return false;\n};\n\nconst IMAGE_EXT_RE = /\\.(png|jpe?g|gif|webp|bmp|svg|avif)$/i;\nconst isImageLike = (name: string, type: string) => (type || '').toLowerCase().startsWith('image/') || IMAGE_EXT_RE.test(name);\n\nconst hasText = (value: string) => value.trim().length > 0;\n\nconst plural = (n: number, word: string) => `${n} ${word}${n === 1 ? '' : 's'}`;\n\nlet attachmentCounter = 0;\nconst createAttachmentId = () => `chatbar-attachment-${Date.now()}-${++attachmentCounter}`;\n\n/**\n * Chatbar container and state provider.\n *\n * Value & Open\n * - Supports controlled/uncontrolled `value` and `open`.\n *\n * Attachments\n * - Controlled/uncontrolled attachments with client-side filtering.\n * - Filters by `accept`/`pasteAccept`, `multiple`, `maxAttachments`, and `maxFileSize`.\n * - Rejections are reported via `onAttachmentReject`.\n *\n * Submit\n * - `onSubmit({ value, attachments })` emits both message and attachments.\n * - Submitting requires text or at least one attachment.\n * - `clearOnSubmit` clears message and attachments by default.\n */\ninterface ChatbarRootBaseProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n /** When the chatbar expands on its own. `none` leaves open state entirely to the consumer. */\n expandOn?: ExpandOn;\n\n /** Minimum visible lines when expanded (default: 3). The compact state is always one line. */\n minLines?: number;\n /** Maximum number of lines before scrolling (default: 6) */\n maxLines?: number;\n\n /** Controls Send button visibility only. Enter-to-submit is controlled by `Textarea submitOnEnter`. */\n sendMode?: SendMode;\n\n /** Disables text input, submission and every way of adding attachments */\n disabled?: boolean;\n /** Prevents editing, submission and adding attachments */\n readOnly?: boolean;\n\n /** Combined submit payload */\n onSubmit?: (payload: ChatbarSubmitPayload) => void;\n\n size?: '1' | '2' | '3';\n variant?: 'surface' | 'outline' | 'classic' | 'ghost' | 'soft';\n /** Accent color for the control (matches TextArea) */\n color?: (typeof accentColors)[number];\n /** Optional radius override (matches TextArea) */\n radius?: (typeof radii)[number];\n /** Panel/material translucency flags (matches TextArea) */\n panelBackground?: 'solid' | 'translucent';\n material?: 'solid' | 'translucent';\n\n width?: React.CSSProperties['width'];\n maxWidth?: React.CSSProperties['maxWidth'];\n\n // Attachments API\n attachments?: ChatbarAttachment[];\n defaultAttachments?: ChatbarAttachment[];\n onAttachmentsChange?: (attachments: ChatbarAttachment[]) => void;\n accept?: string | string[];\n /** Allow more than one file per pick, paste or drop */\n multiple?: boolean;\n maxAttachments?: number;\n maxFileSize?: number;\n paste?: boolean;\n /** Accepted types for pasted files. Replaces `accept` for paste when set. */\n pasteAccept?: string | string[];\n /** Clear message and attachments after submit */\n clearOnSubmit?: boolean;\n onAttachmentReject?: (rejections: ChatbarAttachmentRejection[]) => void;\n\n /**\n * Enables drag-and-drop file uploads when true.\n *\n * When enabled:\n * - Files can be dropped anywhere on the chatbar\n * - Same validation rules apply (accept, multiple, maxFileSize, maxAttachments)\n * - Visual feedback shows during drag operations\n * - Rejected files trigger onAttachmentReject\n *\n * @default true\n */\n dropzone?: boolean;\n\n /**\n * Optional API ref to control Chatbar imperatively without relying on DOM refs.\n * Provides methods to focus the textarea and open the file picker.\n */\n apiRef?: React.Ref<ChatbarApi>;\n\n /**\n * Messages that need an answer before the next message, such as `Notice` and `Confirmation`.\n * They stack in a column above the chatbar, in the order given, so put the one the next\n * message answers last, nearest the text. They sit outside the box: a button in a notice never\n * submits the message, and pressing one never collapses the chatbar.\n */\n notices?: React.ReactNode;\n /**\n * Short facts that stay true about the conversation, such as the model or the context left.\n * They sit below the chatbar, inset from its sides.\n */\n context?: React.ReactNode;\n}\n\ntype RootElement = React.ElementRef<'div'>;\n/** Imperative API for Chatbar.Root */\nexport interface ChatbarApi {\n /** Focus the textarea input */\n focusTextarea: () => void;\n /** Open the file picker dialog (respects accept/multiple). No-op when disabled or read-only. */\n openFilePicker: () => void;\n}\n/**\n * Chatbar container and state provider.\n *\n * Behavior\n * - Supports controlled and uncontrolled `value` and `open` states via props.\n * - Provides context to subcomponents like `Textarea`, `Row`, and `Send`.\n * - Exposes `data-state`, `data-disabled`, and `data-readonly` attributes for styling.\n *\n * Attachments\n * - Paste-to-attach: when `paste` is enabled, pasting files adds attachments.\n * - Additions and rejections are announced through a polite live region.\n *\n * Dropzone\n * - When `dropzone` is true, enables drag-and-drop file uploads.\n * - Visual feedback via `data-drop-active` attribute during drag operations.\n *\n * Accessibility\n * - Consumers should label the `Textarea` via `aria-label`/`aria-labelledby`.\n */\ninterface RootProps extends ComponentPropsWithout<'div', RemovedProps | 'onSubmit' | 'color'>, ChatbarRootBaseProps {}\n\nconst Root = React.forwardRef<RootElement, RootProps>((props, forwardedRef) => {\n const {\n className,\n style,\n children,\n value: valueProp,\n defaultValue = '',\n onValueChange,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n expandOn = 'both',\n minLines = 3,\n maxLines = 6,\n sendMode = 'whenDirty',\n disabled,\n readOnly,\n onSubmit,\n size = '2',\n variant,\n color,\n radius,\n panelBackground,\n material,\n width,\n maxWidth,\n attachments: attachmentsProp,\n defaultAttachments,\n onAttachmentsChange,\n accept,\n multiple = true,\n maxAttachments,\n maxFileSize,\n paste = true,\n pasteAccept,\n clearOnSubmit = true,\n onAttachmentReject,\n dropzone = true,\n apiRef,\n onBlurCapture,\n notices,\n context,\n ...divProps\n } = props;\n const effectiveMaterial = material || panelBackground;\n\n const isValueControlled = valueProp != null;\n const [valueUncontrolled, setValueUncontrolled] = React.useState<string>(defaultValue);\n const value = isValueControlled ? valueProp : valueUncontrolled;\n\n const isOpenControlled = openProp != null;\n const [openUncontrolled, setOpenUncontrolled] = React.useState<boolean>(defaultOpen);\n const open = isOpenControlled ? openProp : openUncontrolled;\n\n // Treat `attachments` as controlled if the prop is provided, even if its value is `undefined`.\n // This avoids switching between controlled and uncontrolled when a consumer sets\n // `attachments={undefined}` to clear attachments. In that case we normalize to an empty array.\n const isAttachmentsControlled = 'attachments' in props;\n const [attachmentsUncontrolled, setAttachmentsUncontrolled] = React.useState<ChatbarAttachment[]>(() => defaultAttachments ?? []);\n const attachments = React.useMemo(\n () => (isAttachmentsControlled ? (attachmentsProp ?? []) : attachmentsUncontrolled),\n [isAttachmentsControlled, attachmentsProp, attachmentsUncontrolled],\n );\n\n // `id` changes on every announcement so identical messages still update the live region\n const [announcement, setAnnouncementState] = React.useState({ text: '', id: 0 });\n const announce = React.useCallback((text: string) => setAnnouncementState((prev) => ({ text, id: prev.id + 1 })), []);\n\n const rootRef = React.useRef<HTMLDivElement>(null);\n const composedRootRef = useComposedRefs(forwardedRef, rootRef);\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n // Blur-collapse guards: `pickerOpenRef` is true while the native dialog is open,\n // `pressGuardRef` covers the gap between pointerdown on a trigger and its click\n // (Safari blurs the textarea before the click fires).\n const pickerOpenRef = React.useRef(false);\n const pressGuardRef = React.useRef(false);\n const pressGuardTimerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const pickerRef = React.useRef<{ patterns: string[]; multiple: boolean } | null>(null);\n\n const acceptKey = toArray(accept).join(',');\n const pasteAcceptKey = toArray(pasteAccept).join(',');\n const accepts = React.useMemo(() => toArray(acceptKey), [acceptKey]);\n const pasteAccepts = React.useMemo(() => (pasteAcceptKey ? toArray(pasteAcceptKey) : accepts), [pasteAcceptKey, accepts]);\n\n // Latest props/state for stable callbacks. Synced during render (not in an effect) so\n // child layout effects that call setOpen/setValue see this render's handlers.\n const snapshot = {\n value,\n attachments,\n accepts,\n pasteAccepts,\n multiple,\n maxAttachments,\n maxFileSize,\n disabled,\n readOnly,\n expandOn,\n isValueControlled,\n isOpenControlled,\n isAttachmentsControlled,\n onValueChange,\n onOpenChange,\n onAttachmentsChange,\n onAttachmentReject,\n onSubmit,\n };\n const latest = React.useRef(snapshot);\n // eslint-disable-next-line react-hooks/refs -- read only in callbacks/effects; see comment above\n latest.current = snapshot;\n\n // Attachments set during the current event, before Root re-renders. Cleared at the end\n // of the task so a controlled parent that rejects the change is not overridden.\n const pendingAttachmentsRef = React.useRef<ChatbarAttachment[] | null>(null);\n const getAttachments = React.useCallback(() => pendingAttachmentsRef.current ?? latest.current.attachments, []);\n\n const setOpen = React.useCallback((next: boolean) => {\n if (!latest.current.isOpenControlled) setOpenUncontrolled(next);\n latest.current.onOpenChange?.(next);\n }, []);\n\n const setValue = React.useCallback((next: string) => {\n if (!latest.current.isValueControlled) setValueUncontrolled(next);\n latest.current.onValueChange?.(next);\n }, []);\n\n const setAttachments = React.useCallback((next: ChatbarAttachment[]) => {\n // Back-to-back updates in one event must see each other\n pendingAttachmentsRef.current = next;\n queueMicrotask(() => {\n pendingAttachmentsRef.current = null;\n });\n if (!latest.current.isAttachmentsControlled) setAttachmentsUncontrolled(next);\n latest.current.onAttachmentsChange?.(next);\n }, []);\n\n // Object URLs Chatbar created and still owns\n const ownedUrlsRef = React.useRef<Set<string>>(new Set());\n\n const addFiles = React.useCallback(\n (files: File[], patterns: string[], multiple: boolean = latest.current.multiple): number => {\n const cfg = latest.current;\n if (cfg.disabled || cfg.readOnly || files.length === 0) return 0;\n\n const current = getAttachments();\n const next: ChatbarAttachment[] = [];\n const rejected: ChatbarAttachmentRejection[] = [];\n const remainingSlots = typeof cfg.maxAttachments === 'number' ? Math.max(cfg.maxAttachments - current.length, 0) : Infinity;\n const perActionLimit = multiple ? Infinity : 1;\n\n for (const file of files) {\n if (next.length >= remainingSlots || next.length >= perActionLimit) {\n rejected.push({ file, reason: 'count' });\n continue;\n }\n if (typeof cfg.maxFileSize === 'number' && file.size > cfg.maxFileSize) {\n rejected.push({ file, reason: 'size' });\n continue;\n }\n if (!matchesAccept(file, patterns)) {\n rejected.push({ file, reason: 'type' });\n continue;\n }\n const url = isImageLike(file.name, file.type) ? URL.createObjectURL(file) : undefined;\n if (url) ownedUrlsRef.current.add(url);\n next.push({ id: createAttachmentId(), name: file.name, size: file.size, type: file.type, file, url, status: 'idle' });\n }\n\n const messages: string[] = [];\n if (next.length > 0) {\n setAttachments(current.concat(next));\n if (cfg.expandOn !== 'none') setOpen(true);\n messages.push(`${plural(next.length, 'file')} attached.`);\n }\n if (rejected.length > 0) {\n cfg.onAttachmentReject?.(rejected);\n messages.push(`${plural(rejected.length, 'file')} could not be attached.`);\n }\n if (messages.length > 0) announce(messages.join(' '));\n return next.length;\n },\n [getAttachments, setAttachments, setOpen, announce],\n );\n\n const appendFiles = React.useCallback((files: File[]) => addFiles(files, latest.current.accepts), [addFiles]);\n const appendFilesFromPaste = React.useCallback((files: File[]) => addFiles(files, latest.current.pasteAccepts), [addFiles]);\n\n const removeAttachment = React.useCallback(\n (id: string) => {\n const current = getAttachments();\n const removed = current.find((a) => a.id === id);\n if (!removed) return;\n setAttachments(current.filter((a) => a.id !== id));\n announce(`Removed ${removed.name}.`);\n },\n [getAttachments, setAttachments, announce],\n );\n\n const submit = React.useCallback(\n (clear: boolean) => {\n const cfg = latest.current;\n if (cfg.disabled || cfg.readOnly) return false;\n const current = getAttachments();\n if (!hasText(cfg.value) && current.length === 0) return false;\n const payload = { value: cfg.value, attachments: current };\n // Hand preview URLs to the consumer only when they leave the chatbar; URLs still\n // rendered here stay owned so removing them later revokes them\n if (clear && cfg.onSubmit) {\n for (const att of current) if (att.url) ownedUrlsRef.current.delete(att.url);\n }\n cfg.onSubmit?.(payload);\n if (clear) {\n setValue('');\n setAttachments([]);\n }\n return true;\n },\n [getAttachments, setValue, setAttachments],\n );\n\n // Revoke owned object URLs that are no longer referenced by current attachments\n React.useEffect(() => {\n const owned = ownedUrlsRef.current;\n if (owned.size === 0) return;\n const current = new Set(attachments.map((a) => a.url));\n for (const url of Array.from(owned)) {\n if (!current.has(url)) {\n URL.revokeObjectURL(url);\n owned.delete(url);\n }\n }\n }, [attachments]);\n\n // On unmount, revoke URLs only when Chatbar owns the attachment list;\n // controlled attachments may still be rendered by the parent.\n React.useEffect(() => {\n const owned = ownedUrlsRef.current;\n return () => {\n if (latest.current.isAttachmentsControlled) return;\n for (const url of Array.from(owned)) URL.revokeObjectURL(url);\n owned.clear();\n };\n }, []);\n\n const openFilePicker = React.useCallback((options?: FilePickerOptions) => {\n const cfg = latest.current;\n const input = fileInputRef.current;\n // The picker guard takes over from the press guard\n clearTimeout(pressGuardTimerRef.current);\n pressGuardRef.current = false;\n if (!input || cfg.disabled || cfg.readOnly) return;\n const patterns = options?.accept != null ? toArray(options.accept) : cfg.accepts;\n const multiple = options?.multiple ?? cfg.multiple;\n pickerRef.current = { patterns, multiple };\n input.accept = patterns.join(',');\n input.multiple = multiple;\n pickerOpenRef.current = true;\n input.click();\n // Browsers block the dialog outside a user gesture; if the window kept focus,\n // no dialog opened and no focus/cancel/change event will clear the guard\n setTimeout(() => {\n if (document.hasFocus()) pickerOpenRef.current = false;\n }, 1000);\n }, []);\n\n const beginFilePickerPress = React.useCallback(() => {\n // On touch (notably iOS), the compatibility mousedown, blur and click arrive in later\n // tasks than pointerup, so hold the guard until the click or a timeout\n pressGuardRef.current = true;\n clearTimeout(pressGuardTimerRef.current);\n pressGuardTimerRef.current = setTimeout(() => {\n pressGuardRef.current = false;\n }, 800);\n }, []);\n\n React.useEffect(() => () => clearTimeout(pressGuardTimerRef.current), []);\n\n // Clear the picker guard when the dialog closes, whichever way it closes\n React.useEffect(() => {\n const input = fileInputRef.current;\n const reset = () => {\n pickerOpenRef.current = false;\n };\n window.addEventListener('focus', reset);\n input?.addEventListener('cancel', reset);\n return () => {\n window.removeEventListener('focus', reset);\n input?.removeEventListener('cancel', reset);\n };\n }, []);\n\n const handleFileInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const input = event.currentTarget;\n const files = Array.from(input.files ?? []);\n const picker = pickerRef.current;\n addFiles(files, picker?.patterns ?? latest.current.accepts, picker?.multiple);\n pickerOpenRef.current = false;\n pickerRef.current = null;\n // Reset so selecting the same file again still fires change\n input.value = '';\n },\n [addFiles],\n );\n\n const handleBlurCapture = React.useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n onBlurCapture?.(event);\n const cfg = latest.current;\n const rootEl = rootRef.current;\n if (!rootEl || cfg.expandOn === 'none') return;\n const nextTarget = event.relatedTarget as Node | null;\n if (nextTarget && rootEl.contains(nextTarget)) return;\n if (pickerOpenRef.current || pressGuardRef.current) return;\n if (!hasText(cfg.value) && getAttachments().length === 0) setOpen(false);\n },\n [onBlurCapture, setOpen, getAttachments],\n );\n\n const handleDrop = React.useCallback((files: File[]) => {\n appendFiles(files);\n }, [appendFiles]);\n\n // Validation happens in addFiles so drop, paste and picker share one rule set\n const { getRootProps, isDragActive } = useDropzone({\n onDrop: handleDrop,\n // Drop any earlier message so it is not re-announced when the drag hint goes away\n onDragEnter: () => announce(''),\n noClick: true,\n noKeyboard: true,\n // Textarea handles paste itself; letting the dropzone see it attaches twice\n noPaste: true,\n disabled: !dropzone || disabled || readOnly,\n });\n const dragActive = dropzone && isDragActive;\n\n React.useImperativeHandle(\n apiRef,\n () => ({\n focusTextarea: () => textareaRef.current?.focus({ preventScroll: true }),\n openFilePicker: () => openFilePicker(),\n }),\n [openFilePicker],\n );\n\n // Click-to-focus: focus textarea when clicking non-interactive areas inside the container\n const handleContainerPointerDown = React.useCallback(\n (event: React.PointerEvent) => {\n if (disabled) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n const target = event.target;\n if (target instanceof Element && target.closest('button, [role=\"button\"], a[href], input, textarea, select, [contenteditable], [tabindex]:not([tabindex=\"-1\"])')) return;\n event.preventDefault();\n textareaRef.current?.focus({ preventScroll: true });\n },\n [disabled],\n );\n\n const contextValue = React.useMemo<ChatbarContextValue>(\n () => ({\n open,\n setOpen,\n setValue,\n size,\n expandOn,\n minLines,\n maxLines,\n sendMode,\n disabled,\n readOnly,\n paste,\n clearOnSubmit,\n multiple,\n textareaRef,\n attachments,\n removeAttachment,\n submit,\n appendFiles,\n appendFilesFromPaste,\n openFilePicker,\n beginFilePickerPress,\n }),\n [\n open, setOpen, setValue, size, expandOn, minLines, maxLines, sendMode, disabled, readOnly, paste,\n clearOnSubmit, multiple, attachments, removeAttachment, submit, appendFiles, appendFilesFromPaste,\n openFilePicker, beginFilePickerPress,\n ],\n );\n\n return (\n <ChatbarContext.Provider value={contextValue}>\n <ChatbarValueContext.Provider value={value}>\n <LazyMotion features={domAnimation}>\n <MotionConfig reducedMotion=\"user\">\n <div\n {...divProps}\n ref={composedRootRef}\n className={classNames('rt-ChatbarRoot', `rt-r-size-${size}`, className)}\n style={{ position: 'relative', width, maxWidth, ...style }}\n data-state={open ? 'open' : 'closed'}\n data-disabled={disabled ? '' : undefined}\n data-readonly={readOnly ? '' : undefined}\n data-drop-active={dragActive ? '' : undefined}\n data-accent-color={color}\n data-radius={radius}\n data-panel-background={effectiveMaterial}\n data-material={effectiveMaterial}\n onBlurCapture={handleBlurCapture}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n tabIndex={-1}\n aria-hidden\n style={{ display: 'none' }}\n onChange={handleFileInputChange}\n />\n {notices ? (\n <div className=\"rt-ChatbarNotices\">\n <NoticeSizeContext.Provider value={size}>{notices}</NoticeSizeContext.Provider>\n </div>\n ) : null}\n <div {...(dropzone ? getRootProps() : {})} style={{ width: '100%', flex: '1 1 auto', minHeight: 0 }} onPointerDown={handleContainerPointerDown}>\n <m.div\n className={classNames('rt-ChatbarBox', `rt-variant-${variant ?? 'surface'}`)}\n style={{ position: 'relative' }}\n data-accent-color={color}\n data-radius={radius}\n data-panel-background={effectiveMaterial}\n data-material={effectiveMaterial}\n layout\n transition={LAYOUT_TRANSITION}\n >\n <m.div className=\"rt-ChatbarGrid\" layout=\"position\" transition={LAYOUT_TRANSITION}>\n {children}\n </m.div>\n {dragActive && (\n <div className=\"rt-ChatbarDropOverlay\" aria-hidden>\n <div className=\"rt-ChatbarDropContent\">\n <Text emphasis=\"medium\" size={size} weight=\"medium\">\n Drop files here to attach\n </Text>\n </div>\n </div>\n )}\n </m.div>\n </div>\n {context ? (\n <Text as=\"div\" size={size === '3' ? '2' : '1'} emphasis=\"medium\" className=\"rt-ChatbarContext\">\n {context}\n </Text>\n ) : null}\n <VisuallyHidden role=\"status\" aria-live=\"polite\">\n {dragActive ? 'Drop files here to attach.' : <span key={announcement.id}>{announcement.text}</span>}\n </VisuallyHidden>\n </div>\n </MotionConfig>\n </LazyMotion>\n </ChatbarValueContext.Provider>\n </ChatbarContext.Provider>\n );\n});\nRoot.displayName = 'Chatbar.Root';\n\n/**\n * Multi-line text input for Chatbar.\n * - Uses onChange to control value and avoid duplicate updates.\n * - Auto-resizes between minLines and maxLines.\n * - Expands on focus/overflow per `expandOn`.\n * - Paste-to-attach: when `paste` is enabled on Root, pasting files adds attachments.\n * - Provide `aria-label` or `aria-labelledby` for an accessible name.\n */\ninterface TextareaProps extends Omit<React.ComponentPropsWithoutRef<'textarea'>, 'size' | 'rows' | 'value' | 'defaultValue'> {\n asChild?: boolean;\n /**\n * When true, pressing Enter submits (Shift+Enter inserts a newline).\n * Works with every `sendMode`. Defaults to false.\n */\n submitOnEnter?: boolean;\n}\n\n/**\n * Chatbar multi-line text input.\n *\n * Behavior\n * - Controls the Chatbar value via React onChange.\n * - Auto-resizes between minLines and maxLines in a single layout effect, which\n * also opens the Chatbar when content overflows the compact height and\n * `expandOn` is `overflow` or `both`.\n * - Consumer handlers run first; calling `preventDefault` in `onKeyDown` or\n * `onPaste` skips the built-in submit or attach behavior.\n *\n * Accessibility\n * - Consumers should provide labeling via aria-label or aria-labelledby\n * on this component, as no implicit label is rendered.\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>((props, forwardedRef) => {\n const {\n className,\n style,\n asChild,\n onFocus,\n onChange,\n onPaste,\n onKeyDown,\n onCompositionStart,\n onCompositionEnd,\n submitOnEnter = false,\n ...textareaProps\n } = props;\n const ctx = useChatbarContext();\n const value = React.useContext(ChatbarValueContext);\n const { open, minLines, maxLines, expandOn, disabled, readOnly, setOpen, setValue, textareaRef, paste, appendFilesFromPaste, size, submit, clearOnSubmit } = ctx;\n const composedRef = useComposedRefs(forwardedRef, textareaRef);\n\n // Cached metrics to avoid repeated getComputedStyle calls\n const lineHeightRef = React.useRef(0);\n const paddingRef = React.useRef(0);\n const composingRef = React.useRef(false);\n\n const sizingRef = React.useRef({ open, minLines, maxLines });\n // Declared before the sizing effect so it runs first in the same commit\n useIsomorphicLayoutEffect(() => {\n sizingRef.current = { open, minLines, maxLines };\n }, [open, minLines, maxLines]);\n\n const recomputeMetrics = React.useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n const computedStyle = window.getComputedStyle(el);\n lineHeightRef.current = parseFloat(computedStyle.lineHeight) || 20;\n paddingRef.current = (parseFloat(computedStyle.paddingTop) || 0) + (parseFloat(computedStyle.paddingBottom) || 0);\n }, [textareaRef]);\n\n // Sizes `el` for the given open state; caller must have set height to 'auto' first\n const applyHeight = React.useCallback((el: HTMLTextAreaElement, isOpen: boolean) => {\n const { minLines: min, maxLines: max } = sizingRef.current;\n const lineHeight = lineHeightRef.current;\n const padding = paddingRef.current;\n const minHeight = Math.ceil((isOpen ? min : 1) * lineHeight) + padding;\n const maxHeight = Math.ceil((isOpen ? max : 1) * lineHeight) + padding;\n const contentHeight = Math.max(el.scrollHeight, minHeight);\n el.style.height = `${Math.min(contentHeight, maxHeight)}px`;\n const overflowing = contentHeight > maxHeight;\n el.style.overflowY = overflowing ? 'auto' : 'hidden';\n el.style.maxHeight = overflowing ? `${maxHeight}px` : 'none';\n }, []);\n\n // Typography depends on size\n useIsomorphicLayoutEffect(() => {\n recomputeMetrics();\n }, [recomputeMetrics, size]);\n\n // Single place for sizing and overflow auto-open: one height reset, one scrollHeight read\n useIsomorphicLayoutEffect(() => {\n const el = textareaRef.current;\n if (!el) return;\n if (lineHeightRef.current === 0) recomputeMetrics();\n withoutPlaceholder(el, () => {\n el.style.height = 'auto';\n let isOpen = open;\n if (!open && (expandOn === 'overflow' || expandOn === 'both')) {\n const compactHeight = Math.ceil(lineHeightRef.current) + paddingRef.current;\n if (el.scrollHeight > compactHeight + 1) {\n isOpen = true;\n setOpen(true);\n }\n }\n applyHeight(el, isOpen);\n });\n }, [value, open, expandOn, minLines, maxLines, size, setOpen, textareaRef, recomputeMetrics, applyHeight]);\n\n // Width changes re-wrap text; re-measure only when the width actually changes\n React.useEffect(() => {\n const el = textareaRef.current;\n if (!el || typeof ResizeObserver === 'undefined') return;\n let prevWidth = -1;\n const ro = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width === prevWidth) return;\n const first = prevWidth === -1;\n prevWidth = width;\n if (first) return;\n recomputeMetrics();\n withoutPlaceholder(el, () => {\n el.style.height = 'auto';\n applyHeight(el, sizingRef.current.open);\n });\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [textareaRef, recomputeMetrics, applyHeight]);\n\n // Dev-only warning if no accessible name is provided\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') return;\n const hasLabel = textareaProps['aria-label'] != null || textareaProps['aria-labelledby'] != null;\n if (!hasLabel) {\n console.warn('[Chatbar.Textarea] Provide aria-label or aria-labelledby to ensure the control has an accessible name.');\n }\n // warn only on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleFocus = React.useCallback<React.FocusEventHandler<HTMLTextAreaElement>>(\n (event) => {\n onFocus?.(event);\n if (disabled || readOnly) return;\n if ((expandOn === 'focus' || expandOn === 'both') && !open) setOpen(true);\n },\n [disabled, readOnly, expandOn, open, setOpen, onFocus],\n );\n\n const handleChange = React.useCallback<React.ChangeEventHandler<HTMLTextAreaElement>>(\n (event) => {\n setValue(event.currentTarget.value);\n onChange?.(event);\n },\n [setValue, onChange],\n );\n\n const handlePaste = React.useCallback<React.ClipboardEventHandler<HTMLTextAreaElement>>(\n (event) => {\n onPaste?.(event);\n if (event.defaultPrevented || !paste || disabled || readOnly) return;\n const files = Array.from(event.clipboardData?.items ?? [])\n .filter((item) => item.kind === 'file')\n .map((item) => item.getAsFile())\n .filter((f): f is File => !!f);\n if (files.length === 0) return;\n // Suppress the filename/text representation only when a file was actually attached\n if (appendFilesFromPaste(files) > 0) event.preventDefault();\n },\n [paste, disabled, readOnly, onPaste, appendFilesFromPaste],\n );\n\n const handleCompositionStart = React.useCallback<React.CompositionEventHandler<HTMLTextAreaElement>>(\n (event) => {\n composingRef.current = true;\n onCompositionStart?.(event);\n },\n [onCompositionStart],\n );\n\n const handleCompositionEnd = React.useCallback<React.CompositionEventHandler<HTMLTextAreaElement>>(\n (event) => {\n composingRef.current = false;\n onCompositionEnd?.(event);\n },\n [onCompositionEnd],\n );\n\n const handleKeyDown = React.useCallback<React.KeyboardEventHandler<HTMLTextAreaElement>>(\n (event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !submitOnEnter) return;\n if (event.key !== 'Enter' || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;\n // Safari fires the IME-confirming Enter after compositionend with keyCode 229\n if (composingRef.current || event.nativeEvent.isComposing || event.nativeEvent.keyCode === 229) return;\n // Plain Enter never inserts a newline when submitOnEnter is on, even with nothing to send\n event.preventDefault();\n submit(clearOnSubmit);\n },\n [submitOnEnter, onKeyDown, submit, clearOnSubmit],\n );\n\n const Comp = asChild ? Slot : 'textarea';\n return (\n <m.div className={classNames('rt-ChatbarField', 'rt-ChatbarTextarea', className)} layout=\"position\" transition={LAYOUT_TRANSITION}>\n <Comp\n {...textareaProps}\n ref={composedRef}\n className=\"rt-ChatbarInput\"\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n disabled={disabled}\n readOnly={readOnly}\n rows={open ? minLines : 1}\n spellCheck={textareaProps.spellCheck ?? true}\n autoCorrect={textareaProps.autoCorrect ?? 'on'}\n style={style}\n />\n </m.div>\n );\n});\nTextarea.displayName = 'Chatbar.Textarea';\n\ninterface InlineSlotProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n asChild?: boolean;\n children?: React.ReactNode;\n}\n\nconst InlineStart = React.forwardRef<HTMLDivElement, InlineSlotProps>((props, forwardedRef) => {\n const { children, asChild, className, ...divProps } = props;\n const ctx = useChatbarContext();\n if (ctx.open) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarInlineStart', className)}>\n {children}\n </Comp>\n );\n});\nInlineStart.displayName = 'Chatbar.InlineStart';\n\nconst InlineEnd = React.forwardRef<HTMLDivElement, InlineSlotProps>((props, forwardedRef) => {\n const { children, asChild, className, ...divProps } = props;\n const ctx = useChatbarContext();\n if (ctx.open) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarInlineEnd', className)}>\n {children}\n </Comp>\n );\n});\nInlineEnd.displayName = 'Chatbar.InlineEnd';\n\n/**\n * Renders a horizontally scrollable list of attachments above the inline row.\n * Hidden when empty unless `forceMount`. Override per-item with `renderAttachment`.\n */\ninterface AttachmentsRowProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n asChild?: boolean;\n forceMount?: boolean;\n /** If provided, custom-render a tile; otherwise default tile is used */\n renderAttachment?: (attachment: ChatbarAttachment) => React.ReactNode;\n}\n\nconst AttachmentsRow = React.forwardRef<HTMLDivElement, AttachmentsRowProps>((props, forwardedRef) => {\n const { asChild, forceMount, renderAttachment, className, ...divProps } = props;\n const ctx = useChatbarContext();\n if (ctx.attachments.length === 0 && !forceMount) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <m.div layout=\"position\" transition={LAYOUT_TRANSITION}>\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarAttachmentsRow', className)} role=\"list\" aria-label={divProps['aria-label'] ?? 'Attachments'}>\n <ScrollArea className=\"rt-ChatbarScrollArea\" scrollbars=\"horizontal\" size=\"1\">\n <Flex align=\"center\" gap=\"2\" minWidth=\"fit-content\">\n {ctx.attachments.map((att) => (\n <Attachment key={att.id} attachment={att} asChild={!!renderAttachment}>\n {renderAttachment?.(att)}\n </Attachment>\n ))}\n </Flex>\n </ScrollArea>\n </Comp>\n </m.div>\n );\n});\nAttachmentsRow.displayName = 'Chatbar.AttachmentsRow';\n\n/** Default tile renderer for a single attachment. */\ninterface AttachmentProps extends React.ComponentPropsWithoutRef<'div'> {\n attachment: ChatbarAttachment;\n asChild?: boolean;\n}\n\nconst STATUS_LABEL: Partial<Record<AttachmentStatus, string>> = { uploading: 'uploading', error: 'failed to upload' };\n\nconst Attachment = React.forwardRef<HTMLDivElement, AttachmentProps>((props, forwardedRef) => {\n const { attachment, asChild, className, children, ...divProps } = props;\n const ctx = useChatbarContext();\n const Comp = asChild ? Slot : 'div';\n const isImage = !!attachment.url && isImageLike(attachment.name, attachment.type);\n const sizeLabel = `${Math.ceil(attachment.size / 1024)} KB`;\n const statusLabel = attachment.status ? STATUS_LABEL[attachment.status] : undefined;\n const locked = ctx.disabled || ctx.readOnly;\n\n const handleRemove = (event: React.MouseEvent<HTMLButtonElement>) => {\n // Move focus before the tile unmounts so keyboard users are not dropped to <body>\n const tile = event.currentTarget.closest('[role=\"listitem\"]');\n const tiles = tile?.parentElement ? Array.from(tile.parentElement.children) : [];\n const index = tile ? tiles.indexOf(tile) : -1;\n const neighbour = tiles[index + 1] ?? tiles[index - 1];\n const nextButton = neighbour?.querySelector<HTMLButtonElement>('.rt-ChatbarAttachmentRemove');\n if (nextButton) nextButton.focus();\n else ctx.textareaRef.current?.focus({ preventScroll: true });\n ctx.removeAttachment(attachment.id);\n };\n\n return (\n <Comp\n {...divProps}\n ref={forwardedRef}\n className={classNames('rt-ChatbarAttachment', className)}\n role=\"listitem\"\n data-kind={isImage ? 'image' : 'file'}\n data-status={attachment.status}\n title={attachment.name}\n >\n {children ?? (\n <Flex align=\"center\" gap=\"2\" pr={!isImage ? '6' : undefined}>\n <div className=\"rt-ChatbarAttachmentPreview\" aria-hidden>\n {isImage ? <img className=\"rt-ChatbarAttachmentImage\" src={attachment.url} alt=\"\" /> : <FileTextIcon />}\n </div>\n {isImage ? (\n <VisuallyHidden>\n {attachment.name}, {sizeLabel}\n {statusLabel ? `, ${statusLabel}` : ''}\n </VisuallyHidden>\n ) : (\n <Flex direction=\"column\" gap=\"0\" minWidth=\"0\">\n <Text size={ctx.size} weight=\"medium\" truncate>\n {attachment.name}\n </Text>\n <Text\n size=\"1\"\n color={attachment.status === 'error' ? 'red' : undefined}\n emphasis={attachment.status === 'error' ? undefined : 'medium'}\n >\n {sizeLabel}\n {statusLabel ? ` \u00B7 ${statusLabel}` : ''}\n </Text>\n </Flex>\n )}\n {!locked && (\n <IconButton\n className=\"rt-ChatbarAttachmentRemove\"\n aria-label={`Remove ${attachment.name}`}\n size=\"1\"\n variant=\"classic\"\n color=\"gray\"\n onClick={handleRemove}\n >\n <CloseIcon />\n </IconButton>\n )}\n </Flex>\n )}\n </Comp>\n );\n});\nAttachment.displayName = 'Chatbar.Attachment';\n\ninterface AttachTriggerProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n /** Overrides Root `accept` for files chosen through this trigger */\n accept?: string | string[];\n multiple?: boolean;\n}\n\nconst AttachTrigger = React.forwardRef<HTMLButtonElement, AttachTriggerProps>((props, forwardedRef) => {\n const { asChild, accept, multiple, disabled: disabledProp, onPointerDown, onClick, ...buttonProps } = props;\n const ctx = useChatbarContext();\n const disabled = disabledProp || ctx.disabled || ctx.readOnly;\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n {...buttonProps}\n ref={forwardedRef}\n className={classNames('rt-ChatbarAttachTrigger', buttonProps.className)}\n type={buttonProps.type ?? 'button'}\n aria-label={buttonProps['aria-label'] ?? 'Add attachments'}\n disabled={disabled}\n onPointerDown={(event: React.PointerEvent<HTMLButtonElement>) => {\n onPointerDown?.(event);\n if (!disabled && !event.defaultPrevented) ctx.beginFilePickerPress();\n }}\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (disabled || event.defaultPrevented) return;\n ctx.openFilePicker({ accept, multiple });\n }}\n />\n );\n});\nAttachTrigger.displayName = 'Chatbar.AttachTrigger';\n\ninterface RowProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n asChild?: boolean;\n children?: React.ReactNode;\n}\n\nconst Row = React.forwardRef<HTMLDivElement, RowProps>((props, forwardedRef) => {\n const { asChild, children, className, ...divProps } = props;\n const ctx = useChatbarContext();\n if (!ctx.open) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <m.div layout=\"position\" transition={LAYOUT_TRANSITION}>\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRow', className)}>\n <Flex align=\"center\" justify=\"between\" width=\"100%\">\n {children}\n </Flex>\n </Comp>\n </m.div>\n );\n});\nRow.displayName = 'Chatbar.Row';\n\ntype RowSlotProps = React.ComponentPropsWithoutRef<'div'>;\n\nconst RowStart = React.forwardRef<HTMLDivElement, RowSlotProps>((props, forwardedRef) => {\n const { className, ...divProps } = props;\n return <div {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRowStart', className)} />;\n});\nRowStart.displayName = 'Chatbar.RowStart';\n\nconst RowEnd = React.forwardRef<HTMLDivElement, RowSlotProps>((props, forwardedRef) => {\n const { className, ...divProps } = props;\n return <div {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRowEnd', className)} />;\n});\nRowEnd.displayName = 'Chatbar.RowEnd';\n\ntype SendStatus = 'ready' | 'submitted' | 'streaming' | 'error';\n\ntype SendProps = Omit<IconButtonProps, 'aria-label' | 'aria-labelledby'> & {\n /** Optional override for accessible name. Defaults to \"Send\". */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n asChild?: boolean;\n /** Clear message and attachments after sending. Defaults to Root `clearOnSubmit`. */\n clearOnSend?: boolean;\n /**\n * What the button means. `ready` sends. While a reply is `submitted` or `streaming` and the\n * box is empty, the button STOPS the reply (`onStop`); with a draft in the box it still sends,\n * and the app decides whether sending interrupts the reply. After an `error`, an empty box\n * makes it RETRY (`onRetry`). Default `ready`.\n */\n status?: SendStatus;\n /** Called when the button is pressed to stop a reply. */\n onStop?: () => void;\n /** Called when the button is pressed to retry after an error. */\n onRetry?: () => void;\n /** Accessible name while it stops. Default \"Stop\". */\n stopLabel?: string;\n /** Accessible name while it retries. Default \"Retry\". */\n retryLabel?: string;\n /** Glyph while it stops. Defaults to a square, or a spinner while `submitted`. */\n stopIcon?: React.ReactNode;\n /** Glyph while it retries. */\n retryIcon?: React.ReactNode;\n};\n\nconst Send = React.forwardRef<HTMLButtonElement, SendProps>((props, forwardedRef) => {\n const {\n asChild,\n clearOnSend,\n disabled,\n children,\n style,\n className,\n size: sizeProp,\n variant: variantProp,\n tabIndex,\n onClick,\n status = 'ready',\n onStop,\n onRetry,\n stopLabel = 'Stop',\n retryLabel = 'Retry',\n stopIcon,\n retryIcon,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n ...buttonProps\n } = props;\n const ctx = useChatbarContext();\n const value = React.useContext(ChatbarValueContext);\n\n const hasContent = hasText(value) || ctx.attachments.length > 0;\n const running = status === 'submitted' || status === 'streaming';\n const mode: 'send' | 'stop' | 'retry' = hasContent ? 'send' : running ? 'stop' : status === 'error' ? 'retry' : 'send';\n\n if (ctx.sendMode === 'never' && mode === 'send') return null;\n\n const visible = mode !== 'send' || ctx.sendMode === 'always' || hasContent;\n const inactive = mode === 'send' ? disabled || ctx.disabled || ctx.readOnly || !hasContent : disabled || ctx.disabled;\n\n const sendName = ariaLabel ?? 'Send';\n const labelProps: { 'aria-label': string } | { 'aria-labelledby': string } =\n mode === 'stop' ? { 'aria-label': stopLabel } : mode === 'retry' ? { 'aria-label': retryLabel } : ariaLabelledby ? { 'aria-labelledby': ariaLabelledby } : { 'aria-label': sendName };\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || inactive) return;\n if (mode === 'stop') {\n onStop?.();\n return;\n }\n if (mode === 'retry') {\n onRetry?.();\n return;\n }\n const clear = clearOnSend ?? ctx.clearOnSubmit;\n // Clearing hides and disables this button; keep keyboard focus in the composer\n if (ctx.submit(clear) && clear) ctx.textareaRef.current?.focus({ preventScroll: true });\n };\n\n const glyph =\n mode === 'stop' ? (\n stopIcon ?? (status === 'submitted' ? <Spinner size={ctx.size} /> : (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden>\n <rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" rx=\"2\" />\n </svg>\n ))\n ) : mode === 'retry' ? (\n retryIcon ?? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M3 12a9 9 0 1 0 3-6.7L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n )\n ) : (\n children ?? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </svg>\n )\n );\n\n return (\n <IconButton\n {...buttonProps}\n ref={forwardedRef}\n size={sizeProp ?? ctx.size}\n variant={variantProp ?? (ctx.open || mode !== 'send' ? 'solid' : 'ghost')}\n disabled={inactive}\n className={classNames('rt-ChatbarSend', className)}\n style={{ opacity: visible ? 1 : 0, pointerEvents: visible ? undefined : 'none', ...style }}\n // Hidden Send must not be reachable by keyboard or announced\n aria-hidden={visible ? undefined : true}\n tabIndex={visible ? tabIndex : -1}\n asChild={asChild}\n onClick={handleClick}\n data-status={status}\n data-mode={mode}\n {...labelProps}\n >\n {glyph}\n </IconButton>\n );\n});\nSend.displayName = 'Chatbar.Send';\n\nexport { Root, Textarea, InlineStart, InlineEnd, AttachmentsRow, Attachment, AttachTrigger, Row, RowStart, RowEnd, Send };\nexport type {\n RootProps as ChatbarRootProps,\n TextareaProps as ChatbarTextareaProps,\n InlineSlotProps as ChatbarInlineSlotProps,\n AttachmentsRowProps as ChatbarAttachmentsRowProps,\n AttachmentProps as ChatbarAttachmentProps,\n AttachTriggerProps as ChatbarAttachTriggerProps,\n RowProps as ChatbarRowProps,\n RowSlotProps as ChatbarRowSlotProps,\n SendProps as ChatbarSendProps,\n ChatbarAttachment,\n ChatbarAttachmentRejection,\n ChatbarRejectReason,\n ChatbarSubmitPayload,\n AttachmentStatus as ChatbarAttachmentStatus,\n ExpandOn as ChatbarExpandOn,\n SendMode as ChatbarSendMode,\n SendStatus as ChatbarSendStatus,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["chatbar_exports", "__export", "AttachTrigger", "Attachment", "AttachmentsRow", "InlineEnd", "InlineStart", "Root", "Row", "RowEnd", "RowStart", "Send", "Textarea", "React", "classNames", "LazyMotion", "MotionConfig", "domAnimation", "m", "useComposedRefs", "useDropzone", "useIsomorphicLayoutEffect", "withoutPlaceholder", "el", "measure", "placeholder", "LAYOUT_TRANSITION", "ChatbarContext", "ChatbarValueContext", "useChatbarContext", "ctx", "toArray", "val", "matchesAccept", "file", "patterns", "mime", "name", "patRaw", "pat", "type", "subtype", "fmType", "fmSubtype", "IMAGE_EXT_RE", "isImageLike", "hasText", "value", "plural", "word", "attachmentCounter", "createAttachmentId", "Root", "props", "forwardedRef", "className", "style", "children", "valueProp", "defaultValue", "onValueChange", "openProp", "defaultOpen", "onOpenChange", "expandOn", "minLines", "maxLines", "sendMode", "disabled", "readOnly", "onSubmit", "size", "variant", "color", "radius", "panelBackground", "material", "width", "maxWidth", "attachmentsProp", "defaultAttachments", "onAttachmentsChange", "accept", "multiple", "maxAttachments", "maxFileSize", "paste", "pasteAccept", "clearOnSubmit", "onAttachmentReject", "dropzone", "apiRef", "onBlurCapture", "notices", "context", "divProps", "effectiveMaterial", "isValueControlled", "valueUncontrolled", "setValueUncontrolled", "isOpenControlled", "openUncontrolled", "setOpenUncontrolled", "open", "isAttachmentsControlled", "attachmentsUncontrolled", "setAttachmentsUncontrolled", "attachments", "announcement", "setAnnouncementState", "announce", "text", "prev", "rootRef", "composedRootRef", "useComposedRefs", "textareaRef", "fileInputRef", "pickerOpenRef", "pressGuardRef", "pressGuardTimerRef", "pickerRef", "acceptKey", "pasteAcceptKey", "accepts", "pasteAccepts", "snapshot", "latest", "pendingAttachmentsRef", "getAttachments", "setOpen", "next", "setValue", "setAttachments", "ownedUrlsRef", "addFiles", "files", "cfg", "current", "rejected", "remainingSlots", "perActionLimit", "url", "messages", "appendFiles", "appendFilesFromPaste", "removeAttachment", "id", "removed", "a", "submit", "clear", "payload", "att", "owned", "openFilePicker", "options", "input", "beginFilePickerPress", "reset", "handleFileInputChange", "event", "picker", "handleBlurCapture", "rootEl", "nextTarget", "handleDrop", "getRootProps", "isDragActive", "useDropzone", "dragActive", "handleContainerPointerDown", "target", "contextValue", "LazyMotion", "domAnimation", "MotionConfig", "classNames", "NoticeSizeContext", "m", "Text", "VisuallyHidden", "Textarea", "asChild", "onFocus", "onChange", "onPaste", "onKeyDown", "onCompositionStart", "onCompositionEnd", "submitOnEnter", "textareaProps", "composedRef", "lineHeightRef", "paddingRef", "composingRef", "sizingRef", "recomputeMetrics", "computedStyle", "applyHeight", "isOpen", "min", "max", "lineHeight", "padding", "minHeight", "maxHeight", "contentHeight", "overflowing", "compactHeight", "prevWidth", "ro", "entries", "first", "handleFocus", "handleChange", "handlePaste", "item", "f", "handleCompositionStart", "handleCompositionEnd", "handleKeyDown", "Comp", "Slot", "InlineStart", "InlineEnd", "AttachmentsRow", "forceMount", "renderAttachment", "ScrollArea", "Flex", "Attachment", "STATUS_LABEL", "attachment", "isImage", "sizeLabel", "statusLabel", "locked", "handleRemove", "tile", "tiles", "index", "nextButton", "FileTextIcon", "IconButton", "CloseIcon", "AttachTrigger", "disabledProp", "onPointerDown", "onClick", "buttonProps", "Row", "RowStart", "RowEnd", "Send", "clearOnSend", "sizeProp", "variantProp", "tabIndex", "status", "onStop", "onRetry", "stopLabel", "retryLabel", "stopIcon", "retryIcon", "ariaLabel", "ariaLabelledby", "hasContent", "mode", "visible", "inactive", "labelProps", "handleClick", "glyph", "Spinner"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{b as E,d as L}from"./chunk-UNWPH3SO.js";import{b as N}from"./chunk-SEY4NA45.js";import*as e from"react";import S from"classnames";import{useVirtualizer as J}from"@tanstack/react-virtual";var Q=e.memo(function({label:r,isHighlighted:o,id:u,style:x,tabIndex:y,"data-highlighted":m,"data-index":p,onMouseEnter:f,onMouseLeave:v,onClick:h,onKeyDown:g}){return e.createElement("div",{id:u,role:"menuitem",className:S("rt-reset","rt-BaseMenuItem","rt-VirtualMenuItem"),style:x,tabIndex:y,"data-highlighted":m,"data-index":p,onMouseEnter:f,onMouseLeave:v,onClick:h,onKeyDown:g},r)},(n,r)=>!(n.label!==r.label||n["data-highlighted"]!==r["data-highlighted"]||n.style.height!==r.style.height||n.style.transform!==r.style.transform||n.tabIndex!==r.tabIndex||n.id!==r.id));function w({items:n,itemLabel:r,renderItem:o,size:u,estimatedItemSize:x,overscan:y=5,onSelect:m,className:p,style:f,"aria-label":v}){let h=e.useId(),g=e.useRef(null),[T,l]=e.useState(-1),{isInsideMenu:K,size:P,itemHeight:$}=L(),{scaling:k}=N(),I=x??(u?E(u,k):$??E(P??"2",k));if(!r&&!o)throw new Error("VirtualMenu requires either itemLabel or renderItem prop");let A=e.useMemo(()=>r?typeof r=="function"?r:t=>t[r]:null,[r]),c=e.useMemo(()=>n.length===0||T<0?-1:Math.min(T,n.length-1),[T,n.length]),B=e.useMemo(()=>typeof I=="function"?I:()=>I,[I]),M=J({count:n.length,getScrollElement:()=>g.current,estimateSize:B,overscan:y}),j=M.getVirtualItems(),R=e.useRef(n),b=e.useRef(m);R.current=n,b.current=m;let d=e.useRef(M.scrollToIndex);d.current=M.scrollToIndex;let H=e.useRef(c);H.current=c;let q=e.useCallback(t=>{let s=t.currentTarget.dataset.index;s!=null&&l(Number(s))},[]),O=e.useCallback(t=>{let s=t.currentTarget.dataset.index;if(s!=null){let a=Number(s),i=R.current;a>=0&&a<i.length&&b.current?.(i[a],a)}},[]),U=e.useCallback(()=>{},[]),W=e.useCallback(t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();let s=t.currentTarget.dataset.index;if(s!=null){let a=Number(s),i=R.current;a>=0&&a<i.length&&b.current?.(i[a],a)}}},[]),Y=e.useCallback(t=>{let s=R.current,a=H.current;switch(t.key){case"ArrowDown":{t.preventDefault();let i=a<s.length-1?a+1:0;l(i),d.current(i,{align:"auto"});break}case"ArrowUp":{t.preventDefault();let i=a>0?a-1:s.length-1;l(i),d.current(i,{align:"auto"});break}case"Home":{t.preventDefault(),l(0),d.current(0,{align:"start"});break}case"End":{t.preventDefault();let i=s.length-1;l(i),d.current(i,{align:"end"});break}case"Enter":case" ":{t.preventDefault(),a>=0&&a<s.length&&b.current?.(s[a],a);break}case"Tab":{t.preventDefault();break}case"Escape":{t.currentTarget.blur();break}}},[]),V=e.useCallback(t=>`${h}-item-${t}`,[h]),_=e.useMemo(()=>({overflow:"auto",position:"relative",...f}),[f]),C=M.getTotalSize(),F=e.useMemo(()=>({height:`${C}px`,width:"100%",position:"relative"}),[C]);return e.createElement("div",{ref:g,role:K?"group":"menu","aria-label":v,"aria-activedescendant":c>=0?V(c):void 0,tabIndex:0,onKeyDown:Y,className:S("rt-VirtualMenuRoot",p),style:_},e.createElement("div",{className:"rt-VirtualMenuViewport",style:F},j.map(t=>{let s=n[t.index],a=t.index,i=c===a,G={height:t.size,transform:`translateY(${t.start}px)`},D={id:V(a),isHighlighted:i,style:G,tabIndex:i?0:-1,"data-highlighted":i?!0:void 0,"data-index":a,onMouseEnter:q,onMouseLeave:U,onClick:O,onKeyDown:W};return o?e.createElement(o,{key:t.key,item:s,index:a,...D}):e.createElement(Q,{key:t.key,label:A(s),...D})})))}w.displayName="VirtualMenu";var z=e.forwardRef(({className:n,children:r,...o},u)=>e.createElement("div",{ref:u,role:"menuitem",className:S("rt-reset","rt-BaseMenuItem","rt-VirtualMenuItem",n),...o},r));z.displayName="VirtualMenu.Item";var X=e.memo(z,(n,r)=>{let o=n.style,u=r.style;return!(o?.height!==u?.height||o?.transform!==u?.transform||n["data-highlighted"]!==r["data-highlighted"]||n.tabIndex!==r.tabIndex||n.id!==r.id||n.className!==r.className||n.children!==r.children)}),re=Object.assign(w,{Item:X});export{re as a};
2
- //# sourceMappingURL=chunk-GDAKJS64.js.map
1
+ import{b as E,d as L}from"./chunk-7RQNB63F.js";import{b as N}from"./chunk-SEY4NA45.js";import*as e from"react";import S from"classnames";import{useVirtualizer as J}from"@tanstack/react-virtual";var Q=e.memo(function({label:r,isHighlighted:o,id:u,style:x,tabIndex:y,"data-highlighted":m,"data-index":p,onMouseEnter:f,onMouseLeave:v,onClick:h,onKeyDown:g}){return e.createElement("div",{id:u,role:"menuitem",className:S("rt-reset","rt-BaseMenuItem","rt-VirtualMenuItem"),style:x,tabIndex:y,"data-highlighted":m,"data-index":p,onMouseEnter:f,onMouseLeave:v,onClick:h,onKeyDown:g},r)},(n,r)=>!(n.label!==r.label||n["data-highlighted"]!==r["data-highlighted"]||n.style.height!==r.style.height||n.style.transform!==r.style.transform||n.tabIndex!==r.tabIndex||n.id!==r.id));function w({items:n,itemLabel:r,renderItem:o,size:u,estimatedItemSize:x,overscan:y=5,onSelect:m,className:p,style:f,"aria-label":v}){let h=e.useId(),g=e.useRef(null),[T,l]=e.useState(-1),{isInsideMenu:K,size:P,itemHeight:$}=L(),{scaling:k}=N(),I=x??(u?E(u,k):$??E(P??"2",k));if(!r&&!o)throw new Error("VirtualMenu requires either itemLabel or renderItem prop");let A=e.useMemo(()=>r?typeof r=="function"?r:t=>t[r]:null,[r]),c=e.useMemo(()=>n.length===0||T<0?-1:Math.min(T,n.length-1),[T,n.length]),B=e.useMemo(()=>typeof I=="function"?I:()=>I,[I]),M=J({count:n.length,getScrollElement:()=>g.current,estimateSize:B,overscan:y}),j=M.getVirtualItems(),R=e.useRef(n),b=e.useRef(m);R.current=n,b.current=m;let d=e.useRef(M.scrollToIndex);d.current=M.scrollToIndex;let H=e.useRef(c);H.current=c;let q=e.useCallback(t=>{let s=t.currentTarget.dataset.index;s!=null&&l(Number(s))},[]),O=e.useCallback(t=>{let s=t.currentTarget.dataset.index;if(s!=null){let a=Number(s),i=R.current;a>=0&&a<i.length&&b.current?.(i[a],a)}},[]),U=e.useCallback(()=>{},[]),W=e.useCallback(t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();let s=t.currentTarget.dataset.index;if(s!=null){let a=Number(s),i=R.current;a>=0&&a<i.length&&b.current?.(i[a],a)}}},[]),Y=e.useCallback(t=>{let s=R.current,a=H.current;switch(t.key){case"ArrowDown":{t.preventDefault();let i=a<s.length-1?a+1:0;l(i),d.current(i,{align:"auto"});break}case"ArrowUp":{t.preventDefault();let i=a>0?a-1:s.length-1;l(i),d.current(i,{align:"auto"});break}case"Home":{t.preventDefault(),l(0),d.current(0,{align:"start"});break}case"End":{t.preventDefault();let i=s.length-1;l(i),d.current(i,{align:"end"});break}case"Enter":case" ":{t.preventDefault(),a>=0&&a<s.length&&b.current?.(s[a],a);break}case"Tab":{t.preventDefault();break}case"Escape":{t.currentTarget.blur();break}}},[]),V=e.useCallback(t=>`${h}-item-${t}`,[h]),_=e.useMemo(()=>({overflow:"auto",position:"relative",...f}),[f]),C=M.getTotalSize(),F=e.useMemo(()=>({height:`${C}px`,width:"100%",position:"relative"}),[C]);return e.createElement("div",{ref:g,role:K?"group":"menu","aria-label":v,"aria-activedescendant":c>=0?V(c):void 0,tabIndex:0,onKeyDown:Y,className:S("rt-VirtualMenuRoot",p),style:_},e.createElement("div",{className:"rt-VirtualMenuViewport",style:F},j.map(t=>{let s=n[t.index],a=t.index,i=c===a,G={height:t.size,transform:`translateY(${t.start}px)`},D={id:V(a),isHighlighted:i,style:G,tabIndex:i?0:-1,"data-highlighted":i?!0:void 0,"data-index":a,onMouseEnter:q,onMouseLeave:U,onClick:O,onKeyDown:W};return o?e.createElement(o,{key:t.key,item:s,index:a,...D}):e.createElement(Q,{key:t.key,label:A(s),...D})})))}w.displayName="VirtualMenu";var z=e.forwardRef(({className:n,children:r,...o},u)=>e.createElement("div",{ref:u,role:"menuitem",className:S("rt-reset","rt-BaseMenuItem","rt-VirtualMenuItem",n),...o},r));z.displayName="VirtualMenu.Item";var X=e.memo(z,(n,r)=>{let o=n.style,u=r.style;return!(o?.height!==u?.height||o?.transform!==u?.transform||n["data-highlighted"]!==r["data-highlighted"]||n.tabIndex!==r.tabIndex||n.id!==r.id||n.className!==r.className||n.children!==r.children)}),re=Object.assign(w,{Item:X});export{re as a};
2
+ //# sourceMappingURL=chunk-YWENWZOU.js.map
@@ -1,2 +1,2 @@
1
- import{a as c}from"./chunk-JDWCQ2XP.js";import{b as u}from"./chunk-3XSB7YIM.js";import*as a from"react";import f from"classnames";var s=["xl","lg","md","sm","xs","initial"];function m(e,t,n){if(e==null)return n;if(typeof e!="object")return e;let o=e;for(let i=s.indexOf(t);i<s.length;i++){let r=o[s[i]];if(r!==void 0)return r}return n}function h(e,t){let n=typeof e=="object"&&e!==null,{breakpoint:o}=u(n);return m(e,o,t)}function B(e,t,n){return e??t??n.material??n.panelBackground}var d={1:8,2:12,3:12};function A(e,t){let n=t?parseFloat(t)/100:1,o=d[e]??d[2];return-Math.round(o*(Number.isFinite(n)?n:1))}var p={"\u2318":"Meta",cmd:"Meta",command:"Meta",meta:"Meta","\u2325":"Alt",option:"Alt",opt:"Alt",alt:"Alt","\u21E7":"Shift",shift:"Shift","\u2303":"Control",ctrl:"Control",control:"Control","\u232B":"Backspace","\u2326":"Delete","\u23CE":"Enter","\u21B5":"Enter","\u238B":"Escape",esc:"Escape","\u21E5":"Tab","\u2191":"ArrowUp","\u2193":"ArrowDown","\u2190":"ArrowLeft","\u2192":"ArrowRight"},l=new Map;function k(e){let t=l.get(e);if(t!==void 0)return t||void 0;let i=(e.match(/[⌘⌥⇧⌃]|[^\s+⌘⌥⇧⌃]+/gu)??[]).map(r=>p[r]??p[r.toLowerCase()]??(r.length===1?r.toUpperCase():r)).join("+");return l.set(e,i),i||void 0}function N({shortcut:e,className:t}){return a.createElement("div",{"aria-hidden":!0,className:f("rt-BaseMenuShortcut",t)},a.createElement(c,{size:"1"},e))}export{m as a,h as b,B as c,A as d,k as e,N as f};
2
- //# sourceMappingURL=chunk-7PMMYHZV.js.map
1
+ import{a as c}from"./chunk-E67CIG6A.js";import{b as u}from"./chunk-3XSB7YIM.js";import*as a from"react";import f from"classnames";var s=["xl","lg","md","sm","xs","initial"];function m(e,t,n){if(e==null)return n;if(typeof e!="object")return e;let o=e;for(let i=s.indexOf(t);i<s.length;i++){let r=o[s[i]];if(r!==void 0)return r}return n}function h(e,t){let n=typeof e=="object"&&e!==null,{breakpoint:o}=u(n);return m(e,o,t)}function B(e,t,n){return e??t??n.material??n.panelBackground}var d={1:8,2:12,3:12};function A(e,t){let n=t?parseFloat(t)/100:1,o=d[e]??d[2];return-Math.round(o*(Number.isFinite(n)?n:1))}var p={"\u2318":"Meta",cmd:"Meta",command:"Meta",meta:"Meta","\u2325":"Alt",option:"Alt",opt:"Alt",alt:"Alt","\u21E7":"Shift",shift:"Shift","\u2303":"Control",ctrl:"Control",control:"Control","\u232B":"Backspace","\u2326":"Delete","\u23CE":"Enter","\u21B5":"Enter","\u238B":"Escape",esc:"Escape","\u21E5":"Tab","\u2191":"ArrowUp","\u2193":"ArrowDown","\u2190":"ArrowLeft","\u2192":"ArrowRight"},l=new Map;function k(e){let t=l.get(e);if(t!==void 0)return t||void 0;let i=(e.match(/[⌘⌥⇧⌃]|[^\s+⌘⌥⇧⌃]+/gu)??[]).map(r=>p[r]??p[r.toLowerCase()]??(r.length===1?r.toUpperCase():r)).join("+");return l.set(e,i),i||void 0}function N({shortcut:e,className:t}){return a.createElement("div",{"aria-hidden":!0,className:f("rt-BaseMenuShortcut",t)},a.createElement(c,{size:"1"},e))}export{m as a,h as b,B as c,A as d,k as e,N as f};
2
+ //# sourceMappingURL=chunk-ZOY43B55.js.map
@@ -1,2 +1,2 @@
1
- import{a as f}from"./chunk-OQU2SKLN.js";import{a as c}from"./chunk-ZJ33QP5N.js";import{a as B}from"./chunk-AGAQC4HH.js";import{a as b,c as P}from"./chunk-5T6K7VPP.js";import{a as y}from"./chunk-5TXQLK4G.js";import{a as i}from"./chunk-JFWMAYEH.js";import{a as m}from"./chunk-GSTOGDAJ.js";import{a as u}from"./chunk-UBSLEGQZ.js";import*as e from"react";import S from"classnames";import{Slot as j}from"radix-ui";var I=e.forwardRef((o,g)=>{let{size:h=i.size.default}=o,{className:R,children:t,asChild:n,as:a,color:x,radius:C,material:k,panelBackground:w,flush:D,disabled:p=o.loading,...d}=u(o,i,m);y(o.panelBackground);let l=k??w,E=n?j.Root:a||"button",T=n||!a||["button","input","textarea","select"].includes(a),v=!n&&(!a||a==="button"),M="type"in d,z=e.useId(),s=o.loading?`${z}-loading`:void 0,r=e.useMemo(()=>typeof t=="string"?t:e.isValidElement(t)&&typeof t.props?.children=="string"?t.props.children:"button",[t]),N=e.useMemo(()=>o.loading?{"aria-busy":!0,"aria-disabled":!0,"aria-describedby":s,"aria-label":`${r} (loading)`}:{},[o.loading,s,r]);return e.createElement(E,{"data-disabled":p||void 0,"data-accent-color":x,"data-radius":C,"data-material":l,"data-panel-background":l,"data-flush":D?"true":void 0,...d,...N,ref:g,className:S("rt-reset","rt-BaseButton",R),...T&&{disabled:p},...v&&!M?{type:"button"}:{}},o.loading?e.createElement(e.Fragment,null,e.createElement("span",{style:{display:"contents",visibility:"hidden"},"aria-hidden":!0},t),e.createElement(B,null,e.createElement("span",{id:s},r," is loading, please wait..."),t),e.createElement(c,{asChild:!0,align:"center",justify:"center",position:"absolute",inset:"0"},e.createElement("span",null,e.createElement(f,{size:b(h,P),"aria-hidden":"true"})))):t)});I.displayName="BaseButton";export{I as a};
2
- //# sourceMappingURL=chunk-VTIL55SR.js.map
1
+ import{a as f}from"./chunk-HF5WY5YE.js";import{a as c}from"./chunk-FHOCUZDR.js";import{a as B}from"./chunk-AGAQC4HH.js";import{a as b,c as P}from"./chunk-5T6K7VPP.js";import{a as y}from"./chunk-5TXQLK4G.js";import{a as i}from"./chunk-JFWMAYEH.js";import{a as m}from"./chunk-GSTOGDAJ.js";import{a as u}from"./chunk-6FLLFCBU.js";import*as e from"react";import S from"classnames";import{Slot as j}from"radix-ui";var I=e.forwardRef((o,g)=>{let{size:h=i.size.default}=o,{className:R,children:t,asChild:n,as:a,color:x,radius:C,material:k,panelBackground:w,flush:D,disabled:p=o.loading,...d}=u(o,i,m);y(o.panelBackground);let l=k??w,E=n?j.Root:a||"button",T=n||!a||["button","input","textarea","select"].includes(a),v=!n&&(!a||a==="button"),M="type"in d,z=e.useId(),s=o.loading?`${z}-loading`:void 0,r=e.useMemo(()=>typeof t=="string"?t:e.isValidElement(t)&&typeof t.props?.children=="string"?t.props.children:"button",[t]),N=e.useMemo(()=>o.loading?{"aria-busy":!0,"aria-disabled":!0,"aria-describedby":s,"aria-label":`${r} (loading)`}:{},[o.loading,s,r]);return e.createElement(E,{"data-disabled":p||void 0,"data-accent-color":x,"data-radius":C,"data-material":l,"data-panel-background":l,"data-flush":D?"true":void 0,...d,...N,ref:g,className:S("rt-reset","rt-BaseButton",R),...T&&{disabled:p},...v&&!M?{type:"button"}:{}},o.loading?e.createElement(e.Fragment,null,e.createElement("span",{style:{display:"contents",visibility:"hidden"},"aria-hidden":!0},t),e.createElement(B,null,e.createElement("span",{id:s},r," is loading, please wait..."),t),e.createElement(c,{asChild:!0,align:"center",justify:"center",position:"absolute",inset:"0"},e.createElement("span",null,e.createElement(f,{size:b(h,P),"aria-hidden":"true"})))):t)});I.displayName="BaseButton";export{I as a};
2
+ //# sourceMappingURL=chunk-ZZLZGHZQ.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../../chunk-VTIL55SR.js";import"../../chunk-OQU2SKLN.js";import"../../chunk-3KB2XWBE.js";import"../../chunk-ZJ33QP5N.js";import"../../chunk-SMGDH54W.js";import"../../chunk-AGAQC4HH.js";import"../../chunk-5T6K7VPP.js";import"../../chunk-SNR5VFWG.js";import"../../chunk-FWB47YCH.js";import"../../chunk-K53W3ELO.js";import"../../chunk-TTFUM47A.js";import"../../chunk-VX44UTQ5.js";import"../../chunk-ERGJN7FJ.js";import"../../chunk-5TXQLK4G.js";import"../../chunk-JFWMAYEH.js";import"../../chunk-KRJTW535.js";import"../../chunk-GSTOGDAJ.js";import"../../chunk-UBSLEGQZ.js";import"../../chunk-AX5S56DS.js";import"../../chunk-E23RKOQJ.js";import"../../chunk-PBFSBHBS.js";import"../../chunk-WRWNN2NW.js";import"../../chunk-RZCX6IBE.js";import"../../chunk-QM3RCK5P.js";import"../../chunk-NZJGC6ZW.js";import"../../chunk-ZNK6AH2G.js";import"../../chunk-OS3FCYZY.js";export{a as BaseButton};
1
+ import{a}from"../../chunk-ZZLZGHZQ.js";import"../../chunk-HF5WY5YE.js";import"../../chunk-3KB2XWBE.js";import"../../chunk-FHOCUZDR.js";import"../../chunk-SMGDH54W.js";import"../../chunk-AGAQC4HH.js";import"../../chunk-5T6K7VPP.js";import"../../chunk-SNR5VFWG.js";import"../../chunk-FWB47YCH.js";import"../../chunk-K53W3ELO.js";import"../../chunk-TTFUM47A.js";import"../../chunk-VX44UTQ5.js";import"../../chunk-ERGJN7FJ.js";import"../../chunk-5TXQLK4G.js";import"../../chunk-JFWMAYEH.js";import"../../chunk-KRJTW535.js";import"../../chunk-GSTOGDAJ.js";import"../../chunk-6FLLFCBU.js";import"../../chunk-AX5S56DS.js";import"../../chunk-E23RKOQJ.js";import"../../chunk-JUY7CBSL.js";import"../../chunk-WRWNN2NW.js";import"../../chunk-QM3RCK5P.js";import"../../chunk-RZCX6IBE.js";import"../../chunk-NZJGC6ZW.js";import"../../chunk-ZNK6AH2G.js";import"../../chunk-OS3FCYZY.js";export{a as BaseButton};
2
2
  //# sourceMappingURL=base-button.js.map
@@ -1,2 +1,2 @@
1
- "use client";import{a,b,c,d,e,f}from"../../chunk-7PMMYHZV.js";import"../../chunk-JDWCQ2XP.js";import"../../chunk-ARIV4AT5.js";import"../../chunk-3XSB7YIM.js";import"../../chunk-YA5DF67M.js";import"../../chunk-GSTOGDAJ.js";import"../../chunk-UBSLEGQZ.js";import"../../chunk-AX5S56DS.js";import"../../chunk-E23RKOQJ.js";import"../../chunk-PBFSBHBS.js";import"../../chunk-WRWNN2NW.js";import"../../chunk-RZCX6IBE.js";import"../../chunk-QM3RCK5P.js";import"../../chunk-NZJGC6ZW.js";import"../../chunk-OS3FCYZY.js";export{f as MenuShortcut,d as getMenuAlignOffset,c as resolveMenuMaterial,a as resolveResponsiveValue,e as toAriaKeyShortcuts,b as useResolvedResponsiveValue};
1
+ "use client";import{a,b,c,d,e,f}from"../../chunk-ZOY43B55.js";import"../../chunk-E67CIG6A.js";import"../../chunk-ARIV4AT5.js";import"../../chunk-3XSB7YIM.js";import"../../chunk-YA5DF67M.js";import"../../chunk-GSTOGDAJ.js";import"../../chunk-6FLLFCBU.js";import"../../chunk-AX5S56DS.js";import"../../chunk-E23RKOQJ.js";import"../../chunk-JUY7CBSL.js";import"../../chunk-WRWNN2NW.js";import"../../chunk-QM3RCK5P.js";import"../../chunk-RZCX6IBE.js";import"../../chunk-NZJGC6ZW.js";import"../../chunk-OS3FCYZY.js";export{f as MenuShortcut,d as getMenuAlignOffset,c as resolveMenuMaterial,a as resolveResponsiveValue,e as toAriaKeyShortcuts,b as useResolvedResponsiveValue};
2
2
  //# sourceMappingURL=base-menu.utils.js.map
@@ -1,2 +1,2 @@
1
- "use client";import{a,b,c,d}from"../../chunk-UNWPH3SO.js";import"../../chunk-SEY4NA45.js";import"../../chunk-WAURCNAS.js";import"../../chunk-F22ZRNWL.js";import"../../chunk-XYVLQDGR.js";import"../../chunk-5TXQLK4G.js";import"../../chunk-KRJTW535.js";import"../../chunk-7PMMYHZV.js";import"../../chunk-JDWCQ2XP.js";import"../../chunk-ARIV4AT5.js";import"../../chunk-3XSB7YIM.js";import"../../chunk-YA5DF67M.js";import"../../chunk-GSTOGDAJ.js";import"../../chunk-UBSLEGQZ.js";import"../../chunk-AX5S56DS.js";import"../../chunk-E23RKOQJ.js";import"../../chunk-PBFSBHBS.js";import"../../chunk-WRWNN2NW.js";import"../../chunk-RZCX6IBE.js";import"../../chunk-QM3RCK5P.js";import"../../chunk-NZJGC6ZW.js";import"../../chunk-ZNK6AH2G.js";import"../../chunk-OS3FCYZY.js";export{c as MenuProvider,b as getMenuItemHeight,a as menuSizeToItemHeight,d as useMenuContext};
1
+ "use client";import{a,b,c,d}from"../../chunk-7RQNB63F.js";import"../../chunk-SEY4NA45.js";import"../../chunk-WAURCNAS.js";import"../../chunk-F22ZRNWL.js";import"../../chunk-XYVLQDGR.js";import"../../chunk-5TXQLK4G.js";import"../../chunk-KRJTW535.js";import"../../chunk-ZOY43B55.js";import"../../chunk-E67CIG6A.js";import"../../chunk-ARIV4AT5.js";import"../../chunk-3XSB7YIM.js";import"../../chunk-YA5DF67M.js";import"../../chunk-GSTOGDAJ.js";import"../../chunk-6FLLFCBU.js";import"../../chunk-AX5S56DS.js";import"../../chunk-E23RKOQJ.js";import"../../chunk-JUY7CBSL.js";import"../../chunk-WRWNN2NW.js";import"../../chunk-QM3RCK5P.js";import"../../chunk-RZCX6IBE.js";import"../../chunk-NZJGC6ZW.js";import"../../chunk-ZNK6AH2G.js";import"../../chunk-OS3FCYZY.js";export{c as MenuProvider,b as getMenuItemHeight,a as menuSizeToItemHeight,d as useMenuContext};
2
2
  //# sourceMappingURL=menu-context.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e}from"../chunk-NQXRWBQM.js";import"../chunk-EDKQURDU.js";import"../chunk-5TXQLK4G.js";import"../chunk-KRJTW535.js";import"../chunk-UBSLEGQZ.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-PBFSBHBS.js";import"../chunk-WRWNN2NW.js";import"../chunk-RZCX6IBE.js";import"../chunk-QM3RCK5P.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{e as Content,c as Header,b as Item,a as Root,d as Trigger};
1
+ import{a,b,c,d,e}from"../chunk-Y5RCH23Z.js";import"../chunk-EDKQURDU.js";import"../chunk-5TXQLK4G.js";import"../chunk-KRJTW535.js";import"../chunk-6FLLFCBU.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-JUY7CBSL.js";import"../chunk-WRWNN2NW.js";import"../chunk-QM3RCK5P.js";import"../chunk-RZCX6IBE.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{e as Content,c as Header,b as Item,a as Root,d as Trigger};
2
2
  //# sourceMappingURL=accordion.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f,g}from"../chunk-H4GR4262.js";import"../chunk-PYXMGEO7.js";import"../chunk-OTKQN2KY.js";import"../chunk-MJJ7XDIP.js";import"../chunk-5TAHT6VC.js";import"../chunk-26I257HE.js";import"../chunk-G2CKYO2I.js";import"../chunk-AXUDFYLY.js";import"../chunk-KNQBAOMV.js";import"../chunk-FD2TR343.js";import"../chunk-ZE2KAVXW.js";import"../chunk-WYADYDPN.js";import"../chunk-ZWZGUBL4.js";import"../chunk-XKBLNVOD.js";import"../chunk-GCUGJXI2.js";import"../chunk-SEY4NA45.js";import"../chunk-WAURCNAS.js";import"../chunk-F22ZRNWL.js";import"../chunk-XYVLQDGR.js";import"../chunk-VX44UTQ5.js";import"../chunk-ERGJN7FJ.js";import"../chunk-5TXQLK4G.js";import"../chunk-KRJTW535.js";import"../chunk-GSTOGDAJ.js";import"../chunk-UBSLEGQZ.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-PBFSBHBS.js";import"../chunk-WRWNN2NW.js";import"../chunk-RZCX6IBE.js";import"../chunk-QM3RCK5P.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{f as Action,g as Cancel,c as Content,e as Description,a as Root,d as Title,b as Trigger};
1
+ import{a,b,c,d,e,f,g}from"../chunk-LXWPEDPZ.js";import"../chunk-GO7OHBHW.js";import"../chunk-PZ7OYATT.js";import"../chunk-MJJ7XDIP.js";import"../chunk-5WRCK4R7.js";import"../chunk-4XKK32M4.js";import"../chunk-G2CKYO2I.js";import"../chunk-AXUDFYLY.js";import"../chunk-KNQBAOMV.js";import"../chunk-FD2TR343.js";import"../chunk-WYADYDPN.js";import"../chunk-ZE2KAVXW.js";import"../chunk-ZWZGUBL4.js";import"../chunk-XKBLNVOD.js";import"../chunk-GCUGJXI2.js";import"../chunk-SEY4NA45.js";import"../chunk-WAURCNAS.js";import"../chunk-F22ZRNWL.js";import"../chunk-XYVLQDGR.js";import"../chunk-VX44UTQ5.js";import"../chunk-ERGJN7FJ.js";import"../chunk-5TXQLK4G.js";import"../chunk-KRJTW535.js";import"../chunk-GSTOGDAJ.js";import"../chunk-6FLLFCBU.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-JUY7CBSL.js";import"../chunk-WRWNN2NW.js";import"../chunk-QM3RCK5P.js";import"../chunk-RZCX6IBE.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{f as Action,g as Cancel,c as Content,e as Description,a as Root,d as Title,b as Trigger};
2
2
  //# sourceMappingURL=alert-dialog.js.map
@@ -1,2 +1,2 @@
1
- "use client";import{a}from"../chunk-25X75TI7.js";import"../chunk-PS6NEG5A.js";import"../chunk-QFPHEY77.js";import"../chunk-KRJTW535.js";import"../chunk-GSTOGDAJ.js";import"../chunk-UBSLEGQZ.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-PBFSBHBS.js";import"../chunk-WRWNN2NW.js";import"../chunk-RZCX6IBE.js";import"../chunk-QM3RCK5P.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as Avatar};
1
+ "use client";import{a}from"../chunk-HJU4I34X.js";import"../chunk-PS6NEG5A.js";import"../chunk-QFPHEY77.js";import"../chunk-KRJTW535.js";import"../chunk-GSTOGDAJ.js";import"../chunk-6FLLFCBU.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-JUY7CBSL.js";import"../chunk-WRWNN2NW.js";import"../chunk-QM3RCK5P.js";import"../chunk-RZCX6IBE.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as Avatar};
2
2
  //# sourceMappingURL=avatar.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-JRFZ535T.js";import"../chunk-WJBOOAIO.js";import"../chunk-BPVVFHYD.js";import"../chunk-QQ62LO3X.js";import"../chunk-5TAHT6VC.js";import"../chunk-26I257HE.js";import"../chunk-G2CKYO2I.js";import"../chunk-AXUDFYLY.js";import"../chunk-KNQBAOMV.js";import"../chunk-FD2TR343.js";import"../chunk-ZE2KAVXW.js";import"../chunk-WYADYDPN.js";import"../chunk-ZWZGUBL4.js";import"../chunk-SEY4NA45.js";import"../chunk-WAURCNAS.js";import"../chunk-F22ZRNWL.js";import"../chunk-XYVLQDGR.js";import"../chunk-ERGJN7FJ.js";import"../chunk-5TXQLK4G.js";import"../chunk-KRJTW535.js";import"../chunk-GSTOGDAJ.js";import"../chunk-UBSLEGQZ.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-PBFSBHBS.js";import"../chunk-WRWNN2NW.js";import"../chunk-RZCX6IBE.js";import"../chunk-QM3RCK5P.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as Badge};
1
+ import{a}from"../chunk-KMPE7TJ6.js";import"../chunk-OLAWVEAI.js";import"../chunk-BPVVFHYD.js";import"../chunk-QQ62LO3X.js";import"../chunk-5WRCK4R7.js";import"../chunk-4XKK32M4.js";import"../chunk-G2CKYO2I.js";import"../chunk-AXUDFYLY.js";import"../chunk-KNQBAOMV.js";import"../chunk-FD2TR343.js";import"../chunk-WYADYDPN.js";import"../chunk-ZE2KAVXW.js";import"../chunk-ZWZGUBL4.js";import"../chunk-SEY4NA45.js";import"../chunk-WAURCNAS.js";import"../chunk-F22ZRNWL.js";import"../chunk-XYVLQDGR.js";import"../chunk-ERGJN7FJ.js";import"../chunk-5TXQLK4G.js";import"../chunk-KRJTW535.js";import"../chunk-GSTOGDAJ.js";import"../chunk-6FLLFCBU.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-JUY7CBSL.js";import"../chunk-WRWNN2NW.js";import"../chunk-QM3RCK5P.js";import"../chunk-RZCX6IBE.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as Badge};
2
2
  //# sourceMappingURL=badge.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-QJVAS7AK.js";import"../chunk-5TAHT6VC.js";import"../chunk-26I257HE.js";import"../chunk-G2CKYO2I.js";import"../chunk-AXUDFYLY.js";import"../chunk-KNQBAOMV.js";import"../chunk-FD2TR343.js";import"../chunk-ZE2KAVXW.js";import"../chunk-WYADYDPN.js";import"../chunk-ZWZGUBL4.js";import"../chunk-GSTOGDAJ.js";import"../chunk-UBSLEGQZ.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-PBFSBHBS.js";import"../chunk-WRWNN2NW.js";import"../chunk-RZCX6IBE.js";import"../chunk-QM3RCK5P.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as Blockquote};
1
+ import{a}from"../chunk-MS5J4MF6.js";import"../chunk-5WRCK4R7.js";import"../chunk-4XKK32M4.js";import"../chunk-G2CKYO2I.js";import"../chunk-AXUDFYLY.js";import"../chunk-KNQBAOMV.js";import"../chunk-FD2TR343.js";import"../chunk-WYADYDPN.js";import"../chunk-ZE2KAVXW.js";import"../chunk-ZWZGUBL4.js";import"../chunk-GSTOGDAJ.js";import"../chunk-6FLLFCBU.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-JUY7CBSL.js";import"../chunk-WRWNN2NW.js";import"../chunk-QM3RCK5P.js";import"../chunk-RZCX6IBE.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as Blockquote};
2
2
  //# sourceMappingURL=blockquote.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-YVSM2LGS.js";import"../chunk-FD2TR343.js";import"../chunk-ZE2KAVXW.js";import"../chunk-WYADYDPN.js";import"../chunk-ZWZGUBL4.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as blockquotePropDefs};
1
+ import{a}from"../chunk-WGYUWEQV.js";import"../chunk-FD2TR343.js";import"../chunk-WYADYDPN.js";import"../chunk-ZE2KAVXW.js";import"../chunk-ZWZGUBL4.js";import"../chunk-NZJGC6ZW.js";import"../chunk-ZNK6AH2G.js";import"../chunk-OS3FCYZY.js";export{a as blockquotePropDefs};
2
2
  //# sourceMappingURL=blockquote.props.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-MM5IHQFM.js";import"../chunk-FGORMEAO.js";import"../chunk-FWB47YCH.js";import"../chunk-K53W3ELO.js";import"../chunk-TTFUM47A.js";import"../chunk-VX44UTQ5.js";import"../chunk-ERGJN7FJ.js";import"../chunk-GSTOGDAJ.js";import"../chunk-UBSLEGQZ.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-PBFSBHBS.js";import"../chunk-WRWNN2NW.js";import"../chunk-RZCX6IBE.js";import"../chunk-QM3RCK5P.js";import"../chunk-NZJGC6ZW.js";import"../chunk-OS3FCYZY.js";export{a as Box};
1
+ import{a}from"../chunk-4YFJWXL2.js";import"../chunk-FGORMEAO.js";import"../chunk-FWB47YCH.js";import"../chunk-K53W3ELO.js";import"../chunk-TTFUM47A.js";import"../chunk-VX44UTQ5.js";import"../chunk-ERGJN7FJ.js";import"../chunk-GSTOGDAJ.js";import"../chunk-6FLLFCBU.js";import"../chunk-AX5S56DS.js";import"../chunk-E23RKOQJ.js";import"../chunk-JUY7CBSL.js";import"../chunk-WRWNN2NW.js";import"../chunk-QM3RCK5P.js";import"../chunk-RZCX6IBE.js";import"../chunk-NZJGC6ZW.js";import"../chunk-OS3FCYZY.js";export{a as Box};
2
2
  //# sourceMappingURL=box.js.map