@drewsepsi/nextpi 0.1.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 (303) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +13 -0
  3. package/.next/build/chunks/33f32_323ea524._.js +6766 -0
  4. package/.next/build/chunks/33f32_323ea524._.js.map +47 -0
  5. package/.next/build/chunks/[root-of-the-server]__6ead02f9._.js +500 -0
  6. package/.next/build/chunks/[root-of-the-server]__6ead02f9._.js.map +11 -0
  7. package/.next/build/chunks/[root-of-the-server]__777e9116._.js +206 -0
  8. package/.next/build/chunks/[root-of-the-server]__777e9116._.js.map +8 -0
  9. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_597188b4._.js +13 -0
  10. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_597188b4._.js.map +5 -0
  11. package/.next/build/chunks/[turbopack]_runtime.js +795 -0
  12. package/.next/build/chunks/[turbopack]_runtime.js.map +10 -0
  13. package/.next/build/package.json +1 -0
  14. package/.next/build/postcss.js +6 -0
  15. package/.next/build/postcss.js.map +5 -0
  16. package/.next/build-manifest.json +19 -0
  17. package/.next/cache/.previewinfo +1 -0
  18. package/.next/cache/.rscinfo +1 -0
  19. package/.next/cache/.tsbuildinfo +1 -0
  20. package/.next/diagnostics/build-diagnostics.json +6 -0
  21. package/.next/diagnostics/framework.json +1 -0
  22. package/.next/export-marker.json +6 -0
  23. package/.next/fallback-build-manifest.json +12 -0
  24. package/.next/images-manifest.json +67 -0
  25. package/.next/next-minimal-server.js.nft.json +1 -0
  26. package/.next/next-server.js.nft.json +1 -0
  27. package/.next/package.json +1 -0
  28. package/.next/prerender-manifest.json +114 -0
  29. package/.next/required-server-files.js +324 -0
  30. package/.next/required-server-files.json +324 -0
  31. package/.next/routes-manifest.json +113 -0
  32. package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  33. package/.next/server/app/_global-error/page/build-manifest.json +16 -0
  34. package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  35. package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  36. package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  37. package/.next/server/app/_global-error/page.js +11 -0
  38. package/.next/server/app/_global-error/page.js.map +5 -0
  39. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  40. package/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
  41. package/.next/server/app/_global-error.html +2 -0
  42. package/.next/server/app/_global-error.meta +15 -0
  43. package/.next/server/app/_global-error.rsc +13 -0
  44. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  45. package/.next/server/app/_global-error.segments/_full.segment.rsc +13 -0
  46. package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
  47. package/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
  48. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  49. package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  50. package/.next/server/app/_not-found/page/build-manifest.json +16 -0
  51. package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
  52. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  53. package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  54. package/.next/server/app/_not-found/page.js +14 -0
  55. package/.next/server/app/_not-found/page.js.map +5 -0
  56. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  57. package/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
  58. package/.next/server/app/_not-found.html +1 -0
  59. package/.next/server/app/_not-found.meta +16 -0
  60. package/.next/server/app/_not-found.rsc +15 -0
  61. package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -0
  62. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  63. package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -0
  64. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  65. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
  66. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  67. package/.next/server/app/api/chat/route/app-paths-manifest.json +3 -0
  68. package/.next/server/app/api/chat/route/build-manifest.json +11 -0
  69. package/.next/server/app/api/chat/route/server-reference-manifest.json +4 -0
  70. package/.next/server/app/api/chat/route.js +7 -0
  71. package/.next/server/app/api/chat/route.js.map +5 -0
  72. package/.next/server/app/api/chat/route.js.nft.json +1 -0
  73. package/.next/server/app/api/chat/route_client-reference-manifest.js +2 -0
  74. package/.next/server/app/api/config/route/app-paths-manifest.json +3 -0
  75. package/.next/server/app/api/config/route/build-manifest.json +11 -0
  76. package/.next/server/app/api/config/route/server-reference-manifest.json +4 -0
  77. package/.next/server/app/api/config/route.js +7 -0
  78. package/.next/server/app/api/config/route.js.map +5 -0
  79. package/.next/server/app/api/config/route.js.nft.json +1 -0
  80. package/.next/server/app/api/config/route_client-reference-manifest.js +2 -0
  81. package/.next/server/app/api/files/[...path]/route/app-paths-manifest.json +3 -0
  82. package/.next/server/app/api/files/[...path]/route/build-manifest.json +11 -0
  83. package/.next/server/app/api/files/[...path]/route/server-reference-manifest.json +4 -0
  84. package/.next/server/app/api/files/[...path]/route.js +7 -0
  85. package/.next/server/app/api/files/[...path]/route.js.map +5 -0
  86. package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -0
  87. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +2 -0
  88. package/.next/server/app/api/files/route/app-paths-manifest.json +3 -0
  89. package/.next/server/app/api/files/route/build-manifest.json +11 -0
  90. package/.next/server/app/api/files/route/server-reference-manifest.json +4 -0
  91. package/.next/server/app/api/files/route.js +7 -0
  92. package/.next/server/app/api/files/route.js.map +5 -0
  93. package/.next/server/app/api/files/route.js.nft.json +1 -0
  94. package/.next/server/app/api/files/route_client-reference-manifest.js +2 -0
  95. package/.next/server/app/api/messages/route/app-paths-manifest.json +3 -0
  96. package/.next/server/app/api/messages/route/build-manifest.json +11 -0
  97. package/.next/server/app/api/messages/route/server-reference-manifest.json +4 -0
  98. package/.next/server/app/api/messages/route.js +7 -0
  99. package/.next/server/app/api/messages/route.js.map +5 -0
  100. package/.next/server/app/api/messages/route.js.nft.json +1 -0
  101. package/.next/server/app/api/messages/route_client-reference-manifest.js +2 -0
  102. package/.next/server/app/api/session/route/app-paths-manifest.json +3 -0
  103. package/.next/server/app/api/session/route/build-manifest.json +11 -0
  104. package/.next/server/app/api/session/route/server-reference-manifest.json +4 -0
  105. package/.next/server/app/api/session/route.js +7 -0
  106. package/.next/server/app/api/session/route.js.map +5 -0
  107. package/.next/server/app/api/session/route.js.nft.json +1 -0
  108. package/.next/server/app/api/session/route_client-reference-manifest.js +2 -0
  109. package/.next/server/app/api/stream/route/app-paths-manifest.json +3 -0
  110. package/.next/server/app/api/stream/route/build-manifest.json +11 -0
  111. package/.next/server/app/api/stream/route/server-reference-manifest.json +4 -0
  112. package/.next/server/app/api/stream/route.js +6 -0
  113. package/.next/server/app/api/stream/route.js.map +5 -0
  114. package/.next/server/app/api/stream/route.js.nft.json +1 -0
  115. package/.next/server/app/api/stream/route_client-reference-manifest.js +2 -0
  116. package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
  117. package/.next/server/app/favicon.ico/route/build-manifest.json +11 -0
  118. package/.next/server/app/favicon.ico/route.js +8 -0
  119. package/.next/server/app/favicon.ico/route.js.map +5 -0
  120. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  121. package/.next/server/app/favicon.ico.body +0 -0
  122. package/.next/server/app/favicon.ico.meta +1 -0
  123. package/.next/server/app/index.html +1 -0
  124. package/.next/server/app/index.meta +14 -0
  125. package/.next/server/app/index.rsc +21 -0
  126. package/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
  127. package/.next/server/app/index.segments/_full.segment.rsc +21 -0
  128. package/.next/server/app/index.segments/_head.segment.rsc +6 -0
  129. package/.next/server/app/index.segments/_index.segment.rsc +6 -0
  130. package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  131. package/.next/server/app/page/app-paths-manifest.json +3 -0
  132. package/.next/server/app/page/build-manifest.json +16 -0
  133. package/.next/server/app/page/next-font-manifest.json +11 -0
  134. package/.next/server/app/page/react-loadable-manifest.json +1 -0
  135. package/.next/server/app/page/server-reference-manifest.json +4 -0
  136. package/.next/server/app/page.js +16 -0
  137. package/.next/server/app/page.js.map +5 -0
  138. package/.next/server/app/page.js.nft.json +1 -0
  139. package/.next/server/app/page_client-reference-manifest.js +2 -0
  140. package/.next/server/app-paths-manifest.json +13 -0
  141. package/.next/server/chunks/33f32_next_b78429d5._.js +17 -0
  142. package/.next/server/chunks/33f32_next_b78429d5._.js.map +1 -0
  143. package/.next/server/chunks/33f32_next_dist_esm_build_templates_app-route_5a539e27.js +3 -0
  144. package/.next/server/chunks/33f32_next_dist_esm_build_templates_app-route_5a539e27.js.map +1 -0
  145. package/.next/server/chunks/[externals]_next_dist_b89b5a39._.js +3 -0
  146. package/.next/server/chunks/[externals]_next_dist_b89b5a39._.js.map +1 -0
  147. package/.next/server/chunks/[root-of-the-server]__2554f0b0._.js +17 -0
  148. package/.next/server/chunks/[root-of-the-server]__2554f0b0._.js.map +1 -0
  149. package/.next/server/chunks/[root-of-the-server]__5e671cad._.js +7 -0
  150. package/.next/server/chunks/[root-of-the-server]__5e671cad._.js.map +1 -0
  151. package/.next/server/chunks/[root-of-the-server]__629f5815._.js +3 -0
  152. package/.next/server/chunks/[root-of-the-server]__629f5815._.js.map +1 -0
  153. package/.next/server/chunks/[root-of-the-server]__633f9ccd._.js +3 -0
  154. package/.next/server/chunks/[root-of-the-server]__633f9ccd._.js.map +1 -0
  155. package/.next/server/chunks/[root-of-the-server]__65cdeb73._.js +17 -0
  156. package/.next/server/chunks/[root-of-the-server]__65cdeb73._.js.map +1 -0
  157. package/.next/server/chunks/[root-of-the-server]__bc57ef5b._.js +21 -0
  158. package/.next/server/chunks/[root-of-the-server]__bc57ef5b._.js.map +1 -0
  159. package/.next/server/chunks/[root-of-the-server]__be62c218._.js +17 -0
  160. package/.next/server/chunks/[root-of-the-server]__be62c218._.js.map +1 -0
  161. package/.next/server/chunks/[root-of-the-server]__e87dbf93._.js +3 -0
  162. package/.next/server/chunks/[root-of-the-server]__e87dbf93._.js.map +1 -0
  163. package/.next/server/chunks/[turbopack]_runtime.js +795 -0
  164. package/.next/server/chunks/[turbopack]_runtime.js.map +10 -0
  165. package/.next/server/chunks/c45a0_nextpi__next-internal_server_app_api_files_[___path]_route_actions_16a66e62.js +3 -0
  166. package/.next/server/chunks/c45a0_nextpi__next-internal_server_app_api_files_[___path]_route_actions_16a66e62.js.map +1 -0
  167. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_chat_route_actions_e342cdbf.js +3 -0
  168. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_chat_route_actions_e342cdbf.js.map +1 -0
  169. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_config_route_actions_04d1272c.js +3 -0
  170. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_config_route_actions_04d1272c.js.map +1 -0
  171. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_files_route_actions_a8035013.js +3 -0
  172. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_files_route_actions_a8035013.js.map +1 -0
  173. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_messages_route_actions_4f52ac4b.js +3 -0
  174. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_messages_route_actions_4f52ac4b.js.map +1 -0
  175. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_session_route_actions_ff684c69.js +3 -0
  176. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_session_route_actions_ff684c69.js.map +1 -0
  177. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_stream_route_actions_7a0f6dba.js +3 -0
  178. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_stream_route_actions_7a0f6dba.js.map +1 -0
  179. package/.next/server/chunks/picode_nextpi__next-internal_server_app_favicon_ico_route_actions_2526216f.js +3 -0
  180. package/.next/server/chunks/picode_nextpi__next-internal_server_app_favicon_ico_route_actions_2526216f.js.map +1 -0
  181. package/.next/server/chunks/ssr/33f32_next_dist_580d3573._.js +6 -0
  182. package/.next/server/chunks/ssr/33f32_next_dist_580d3573._.js.map +1 -0
  183. package/.next/server/chunks/ssr/33f32_next_dist_85b0ccc0._.js +4 -0
  184. package/.next/server/chunks/ssr/33f32_next_dist_85b0ccc0._.js.map +1 -0
  185. package/.next/server/chunks/ssr/33f32_next_dist_client_components_a8ffe8d4._.js +3 -0
  186. package/.next/server/chunks/ssr/33f32_next_dist_client_components_a8ffe8d4._.js.map +1 -0
  187. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_forbidden_ad97660b.js +3 -0
  188. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_forbidden_ad97660b.js.map +1 -0
  189. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_global-error_ab28468b.js +3 -0
  190. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_global-error_ab28468b.js.map +1 -0
  191. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_unauthorized_edd1fe08.js +3 -0
  192. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_unauthorized_edd1fe08.js.map +1 -0
  193. package/.next/server/chunks/ssr/33f32_next_dist_esm_build_templates_app-page_5ef96b51.js +4 -0
  194. package/.next/server/chunks/ssr/33f32_next_dist_esm_build_templates_app-page_5ef96b51.js.map +1 -0
  195. package/.next/server/chunks/ssr/33f32_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_33aeae20.js +3 -0
  196. package/.next/server/chunks/ssr/33f32_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_33aeae20.js.map +1 -0
  197. package/.next/server/chunks/ssr/[root-of-the-server]__028106ef._.js +3 -0
  198. package/.next/server/chunks/ssr/[root-of-the-server]__028106ef._.js.map +1 -0
  199. package/.next/server/chunks/ssr/[root-of-the-server]__0dc9a9e1._.js +4 -0
  200. package/.next/server/chunks/ssr/[root-of-the-server]__0dc9a9e1._.js.map +1 -0
  201. package/.next/server/chunks/ssr/[root-of-the-server]__15f57d5d._.js +3 -0
  202. package/.next/server/chunks/ssr/[root-of-the-server]__15f57d5d._.js.map +1 -0
  203. package/.next/server/chunks/ssr/[root-of-the-server]__26f2451b._.js +3 -0
  204. package/.next/server/chunks/ssr/[root-of-the-server]__26f2451b._.js.map +1 -0
  205. package/.next/server/chunks/ssr/[root-of-the-server]__42ddc417._.js +3 -0
  206. package/.next/server/chunks/ssr/[root-of-the-server]__42ddc417._.js.map +1 -0
  207. package/.next/server/chunks/ssr/[root-of-the-server]__6823e2d4._.js +3 -0
  208. package/.next/server/chunks/ssr/[root-of-the-server]__6823e2d4._.js.map +1 -0
  209. package/.next/server/chunks/ssr/[root-of-the-server]__6bf5dd5d._.js +3 -0
  210. package/.next/server/chunks/ssr/[root-of-the-server]__6bf5dd5d._.js.map +1 -0
  211. package/.next/server/chunks/ssr/[root-of-the-server]__7b7d477c._.js +10 -0
  212. package/.next/server/chunks/ssr/[root-of-the-server]__7b7d477c._.js.map +1 -0
  213. package/.next/server/chunks/ssr/[root-of-the-server]__85c46341._.js +3 -0
  214. package/.next/server/chunks/ssr/[root-of-the-server]__85c46341._.js.map +1 -0
  215. package/.next/server/chunks/ssr/[root-of-the-server]__99c61367._.js +3 -0
  216. package/.next/server/chunks/ssr/[root-of-the-server]__99c61367._.js.map +1 -0
  217. package/.next/server/chunks/ssr/[root-of-the-server]__a0bdeac8._.js +3 -0
  218. package/.next/server/chunks/ssr/[root-of-the-server]__a0bdeac8._.js.map +1 -0
  219. package/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
  220. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
  221. package/.next/server/chunks/ssr/_091ac666._.js +3 -0
  222. package/.next/server/chunks/ssr/_091ac666._.js.map +1 -0
  223. package/.next/server/chunks/ssr/picode_nextpi_1e69e558._.js +4 -0
  224. package/.next/server/chunks/ssr/picode_nextpi_1e69e558._.js.map +1 -0
  225. package/.next/server/chunks/ssr/picode_nextpi_4fadcd01._.js +3 -0
  226. package/.next/server/chunks/ssr/picode_nextpi_4fadcd01._.js.map +1 -0
  227. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__global-error_page_actions_91eb1cf1.js +3 -0
  228. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__global-error_page_actions_91eb1cf1.js.map +1 -0
  229. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__not-found_page_actions_0a31df41.js +3 -0
  230. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__not-found_page_actions_0a31df41.js.map +1 -0
  231. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app_page_actions_b14d985f.js +3 -0
  232. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app_page_actions_b14d985f.js.map +1 -0
  233. package/.next/server/chunks/ssr/picode_nextpi_app_77d1bd95._.js +3 -0
  234. package/.next/server/chunks/ssr/picode_nextpi_app_77d1bd95._.js.map +1 -0
  235. package/.next/server/chunks/ssr/picode_nextpi_app_page_tsx_cebd7814._.js +3 -0
  236. package/.next/server/chunks/ssr/picode_nextpi_app_page_tsx_cebd7814._.js.map +1 -0
  237. package/.next/server/functions-config-manifest.json +4 -0
  238. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  239. package/.next/server/middleware-build-manifest.js +20 -0
  240. package/.next/server/middleware-manifest.json +6 -0
  241. package/.next/server/next-font-manifest.js +1 -0
  242. package/.next/server/next-font-manifest.json +15 -0
  243. package/.next/server/pages/404.html +1 -0
  244. package/.next/server/pages/500.html +2 -0
  245. package/.next/server/pages-manifest.json +4 -0
  246. package/.next/server/server-reference-manifest.js +1 -0
  247. package/.next/server/server-reference-manifest.json +5 -0
  248. package/.next/static/PdRtiPZ_ExBLCzmKGXOBT/_buildManifest.js +11 -0
  249. package/.next/static/PdRtiPZ_ExBLCzmKGXOBT/_clientMiddlewareManifest.json +1 -0
  250. package/.next/static/PdRtiPZ_ExBLCzmKGXOBT/_ssgManifest.js +1 -0
  251. package/.next/static/chunks/0ab43a45e07af0f9.js +1 -0
  252. package/.next/static/chunks/265e06106152dcbb.js +1 -0
  253. package/.next/static/chunks/65d5124f3edd1b84.js +1 -0
  254. package/.next/static/chunks/76111d9b2044b643.js +1 -0
  255. package/.next/static/chunks/81dfdd74986c8afe.css +3 -0
  256. package/.next/static/chunks/93b85e5de0842835.js +5 -0
  257. package/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  258. package/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  259. package/.next/static/chunks/cace1b477872431f.js +1 -0
  260. package/.next/static/chunks/turbopack-775e95d747b6e667.js +4 -0
  261. package/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  262. package/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  263. package/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  264. package/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  265. package/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  266. package/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  267. package/.next/static/media/favicon.0b3bf435.ico +0 -0
  268. package/.next/trace +1 -0
  269. package/.next/trace-build +1 -0
  270. package/.next/turbopack +0 -0
  271. package/.next/types/routes.d.ts +79 -0
  272. package/.next/types/validator.ts +133 -0
  273. package/README.md +50 -0
  274. package/app/api/chat/route.ts +28 -0
  275. package/app/api/config/route.ts +25 -0
  276. package/app/api/files/[...path]/route.ts +55 -0
  277. package/app/api/files/route.ts +62 -0
  278. package/app/api/messages/route.ts +26 -0
  279. package/app/api/session/route.ts +55 -0
  280. package/app/api/stream/route.ts +76 -0
  281. package/app/favicon.ico +0 -0
  282. package/app/globals.css +1143 -0
  283. package/app/layout.tsx +46 -0
  284. package/app/page.tsx +1643 -0
  285. package/bin/cli.js +85 -0
  286. package/components/.gitkeep +0 -0
  287. package/components/theme-provider.tsx +71 -0
  288. package/components/ui/button.tsx +67 -0
  289. package/components/ui/file-tree.tsx +560 -0
  290. package/lib/.gitkeep +0 -0
  291. package/lib/agent.ts +105 -0
  292. package/lib/config.ts +50 -0
  293. package/lib/root-path.ts +15 -0
  294. package/lib/session-singleton.ts +48 -0
  295. package/lib/utils.ts +6 -0
  296. package/package.json +72 -0
  297. package/public/.gitkeep +0 -0
  298. package/src/agent.ts +82 -0
  299. package/src/cli.ts +107 -0
  300. package/src/tools.ts +71 -0
  301. package/src/tui.ts +238 -0
  302. package/src/web-server.ts +280 -0
  303. package/tsconfig.json +34 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../picode/nextpi/node_modules/%40radix-ui/react-collection/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/primitive/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-presence/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-collapsible/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-accordion/dist/index.mjs","../../../../../../picode/nextpi/node_modules/clsx/dist/clsx.mjs","../../../../../../picode/nextpi/components/ui/file-tree.tsx","../../../../../../picode/nextpi/app/page.tsx","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-use-layout-effect/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-primitive/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-compose-refs/dist/index.mjs","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/utils.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-use-controllable-state/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-id/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-context/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-direction/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-use-effect-event/dist/index.mjs","../../../../../../picode/nextpi/lib/utils.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-slot/dist/index.mjs","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-collapsible/src/collapsible.tsx","../../../../../../picode/nextpi/node_modules/shared/src/utils/toKebabCase.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/defaultAttributes.ts","../../../../../../picode/nextpi/node_modules/shared/src/utils/hasA11yProp.ts","../../../../../../picode/nextpi/node_modules/shared/src/utils/toCamelCase.ts","../../../../../../picode/nextpi/node_modules/shared/src/utils/mergeClasses.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-use-controllable-state/src/use-controllable-state.tsx","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/chevron-right.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/chevron-up.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/chevron-down.ts","../../../../../../picode/nextpi/node_modules/shared/src/utils/toPascalCase.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-compose-refs/src/compose-refs.tsx","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/chevrons-up-down.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-accordion/src/accordion.tsx","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/trash-2.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/search.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/globe.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/brain.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/refresh-cw.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/square.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/chevrons-down-up.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/user.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/circle-question-mark.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/rotate-ccw.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/x.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/bot.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-collection/src/collection-legacy.tsx","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/command.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/createLucideIcon.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-context/src/create-context.tsx","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/send.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/save.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/file-code.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/wrench.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/triangle-alert.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/folder-open.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/folder.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/play.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/activity.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/file-image.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/file-type.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/file-braces.ts","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/file-plus.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-use-effect-event/src/use-effect-event.tsx","../../../../../../picode/nextpi/node_modules/lucide-react/src/icons/file-text.ts","../../../../../../picode/nextpi/node_modules/%40radix-ui/primitive/src/primitive.tsx","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-slot/src/slot.tsx","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-collection/src/collection.tsx","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-presence/src/presence.tsx","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-use-controllable-state/src/use-controllable-state-reducer.tsx","../../../../../../picode/nextpi/node_modules/%40radix-ui/react-collection/src/ordered-dictionary.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/config-utils.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/tw-join.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/from-theme.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/validators.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/default-config.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../../../../picode/nextpi/node_modules/tailwind-merge/src/lib/tw-merge.ts"],"sourcesContent":["\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/accordion.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ACCORDION_NAME = \"Accordion\";\nvar ACCORDION_KEYS = [\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\"];\nvar [Collection, useCollection, createCollectionScope] = createCollection(ACCORDION_NAME);\nvar [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope\n]);\nvar useCollapsibleScope = createCollapsibleScope();\nvar Accordion = React.forwardRef(\n (props, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps;\n const multipleProps = accordionProps;\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeAccordion, children: type === \"multiple\" ? /* @__PURE__ */ jsx(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });\n }\n);\nAccordion.displayName = ACCORDION_NAME;\nvar [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);\nvar [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false }\n);\nvar AccordionImplSingle = React.forwardRef(\n (props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n collapsible = false,\n ...accordionSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemOpen: setValue,\n onItemClose: React.useCallback(() => collapsible && setValue(\"\"), [collapsible, setValue]),\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })\n }\n );\n }\n);\nvar AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...accordionMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n const handleItemOpen = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleItemClose = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value,\n onItemOpen: handleItemOpen,\n onItemClose: handleItemClose,\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })\n }\n );\n});\nvar [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);\nvar AccordionImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = \"vertical\", ...accordionProps } = props;\n const accordionRef = React.useRef(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n if (triggerIndex === -1) return;\n event.preventDefault();\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n switch (event.key) {\n case \"Home\":\n nextIndex = homeIndex;\n break;\n case \"End\":\n nextIndex = endIndex;\n break;\n case \"ArrowRight\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case \"ArrowDown\":\n if (orientation === \"vertical\") {\n moveNext();\n }\n break;\n case \"ArrowLeft\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case \"ArrowUp\":\n if (orientation === \"vertical\") {\n movePrev();\n }\n break;\n }\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex].ref.current?.focus();\n });\n return /* @__PURE__ */ jsx(\n AccordionImplProvider,\n {\n scope: __scopeAccordion,\n disabled,\n direction: dir,\n orientation,\n children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...accordionProps,\n \"data-orientation\": orientation,\n ref: composedRefs,\n onKeyDown: disabled ? void 0 : handleKeyDown\n }\n ) })\n }\n );\n }\n);\nvar ITEM_NAME = \"AccordionItem\";\nvar [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);\nvar AccordionItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = value && valueContext.value.includes(value) || false;\n const disabled = accordionContext.disabled || props.disabled;\n return /* @__PURE__ */ jsx(\n AccordionItemProvider,\n {\n scope: __scopeAccordion,\n open,\n disabled,\n triggerId,\n children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Root,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(open),\n ...collapsibleScope,\n ...accordionItemProps,\n ref: forwardedRef,\n disabled,\n open,\n onOpenChange: (open2) => {\n if (open2) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }\n }\n )\n }\n );\n }\n);\nAccordionItem.displayName = ITEM_NAME;\nvar HEADER_NAME = \"AccordionHeader\";\nvar AccordionHeader = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return /* @__PURE__ */ jsx(\n Primitive.h3,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(itemContext.open),\n \"data-disabled\": itemContext.disabled ? \"\" : void 0,\n ...headerProps,\n ref: forwardedRef\n }\n );\n }\n);\nAccordionHeader.displayName = HEADER_NAME;\nvar TRIGGER_NAME = \"AccordionTrigger\";\nvar AccordionTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Trigger,\n {\n \"aria-disabled\": itemContext.open && !collapsibleContext.collapsible || void 0,\n \"data-orientation\": accordionContext.orientation,\n id: itemContext.triggerId,\n ...collapsibleScope,\n ...triggerProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nAccordionTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"AccordionContent\";\nvar AccordionContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Content,\n {\n role: \"region\",\n \"aria-labelledby\": itemContext.triggerId,\n \"data-orientation\": accordionContext.orientation,\n ...collapsibleScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n [\"--radix-accordion-content-height\"]: \"var(--radix-collapsible-content-height)\",\n [\"--radix-accordion-content-width\"]: \"var(--radix-collapsible-content-width)\",\n ...props.style\n }\n }\n );\n }\n);\nAccordionContent.displayName = CONTENT_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Accordion;\nvar Item = AccordionItem;\nvar Header = AccordionHeader;\nvar Trigger2 = AccordionTrigger;\nvar Content2 = AccordionContent;\nexport {\n Accordion,\n AccordionContent,\n AccordionHeader,\n AccordionItem,\n AccordionTrigger,\n Content2 as Content,\n Header,\n Item,\n Root2 as Root,\n Trigger2 as Trigger,\n createAccordionScope\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","// Styling updated to use globals.css — visual changes only\n\"use client\"\n\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport {\n FolderIcon,\n FolderOpenIcon,\n FileCodeIcon,\n FileJsonIcon,\n FileTypeIcon,\n FileTextIcon,\n FileImageIcon,\n FileIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\n// File type icon mapping\nconst getFileIcon = (filename: string, isSelected: boolean) => {\n const ext = filename.split('.').pop()?.toLowerCase()\n const baseClass = cn(\"size-4 transition-transform duration-200\", isSelected && \"scale-110\")\n\n switch (ext) {\n case 'tsx':\n case 'ts':\n case 'jsx':\n case 'js':\n return <FileCodeIcon className={cn(baseClass, \"text-sky-400\")} />\n case 'json':\n return <FileJsonIcon className={cn(baseClass, \"text-amber-400\")} />\n case 'css':\n case 'scss':\n case 'less':\n return <FileTypeIcon className={cn(baseClass, \"text-pink-400\")} />\n case 'md':\n case 'mdx':\n return <FileTextIcon className={cn(baseClass, \"text-emerald-400\")} />\n case 'png':\n case 'jpg':\n case 'jpeg':\n case 'svg':\n case 'webp':\n return <FileImageIcon className={cn(baseClass, \"text-purple-400\")} />\n default:\n return <FileIcon className={cn(baseClass, \"text-muted-foreground\")} />\n }\n}\n\ntype TreeViewElement = {\n id: string\n name: string\n type?: \"file\" | \"folder\"\n isSelectable?: boolean\n children?: TreeViewElement[]\n metadata?: {\n size?: string\n modified?: string\n }\n}\n\ntype TreeSortMode =\n | \"default\"\n | \"none\"\n | ((a: TreeViewElement, b: TreeViewElement) => number)\n\ntype TreeContextProps = {\n selectedId: string | undefined\n expandedItems: string[] | undefined\n indicator: boolean\n handleExpand: (id: string) => void\n selectItem: (id: string) => void\n setExpandedItems?: React.Dispatch<React.SetStateAction<string[] | undefined>>\n openIcon?: React.ReactNode\n closeIcon?: React.ReactNode\n direction: \"rtl\" | \"ltr\"\n onFolderContextMenu?: (e: React.MouseEvent, id: string) => void\n}\n\nconst TreeContext = createContext<TreeContextProps | null>(null)\n\nconst useTree = () => {\n const context = useContext(TreeContext)\n if (!context) {\n throw new Error(\"useTree must be used within a TreeProvider\")\n }\n return context\n}\n\ntype Direction = \"rtl\" | \"ltr\" | undefined\n\nconst isFolderElement = (element: TreeViewElement) => {\n if (element.type) {\n return element.type === \"folder\"\n }\n\n return Array.isArray(element.children)\n}\n\nconst mergeExpandedItems = (\n currentItems: string[] | undefined,\n nextItems: string[]\n) => [...new Set([...(currentItems ?? []), ...nextItems])]\n\nconst treeCollator = new Intl.Collator(\"en\", {\n numeric: true,\n sensitivity: \"base\",\n})\n\nconst defaultTreeComparator = (a: TreeViewElement, b: TreeViewElement) => {\n const aIsFolder = isFolderElement(a)\n const bIsFolder = isFolderElement(b)\n\n if (aIsFolder !== bIsFolder) {\n return aIsFolder ? -1 : 1\n }\n\n return treeCollator.compare(a.name, b.name)\n}\n\nconst getTreeComparator = (sort: TreeSortMode) => {\n if (sort === \"none\") {\n return undefined\n }\n\n if (sort === \"default\") {\n return defaultTreeComparator\n }\n\n return sort\n}\n\nconst sortTreeElements = (\n elements: TreeViewElement[],\n sort: TreeSortMode\n): TreeViewElement[] => {\n const comparator = getTreeComparator(sort)\n\n const nextElements = elements.map((element) => {\n if (!Array.isArray(element.children)) {\n return element\n }\n\n return {\n ...element,\n children: sortTreeElements(element.children, sort),\n }\n })\n\n if (!comparator) {\n return nextElements\n }\n\n return [...nextElements].sort(comparator)\n}\n\nconst renderTreeElements = (\n elements: TreeViewElement[],\n sort: TreeSortMode,\n onFolderContextMenu?: (e: React.MouseEvent, id: string) => void\n): React.ReactNode =>\n sortTreeElements(elements, sort).map((element) => {\n if (isFolderElement(element)) {\n return (\n <Folder\n key={element.id}\n value={element.id}\n element={element.name}\n isSelectable={element.isSelectable}\n >\n {Array.isArray(element.children)\n ? renderTreeElements(element.children, sort, onFolderContextMenu)\n : null}\n </Folder>\n )\n }\n\n return (\n <File\n key={element.id}\n value={element.id}\n isSelectable={element.isSelectable}\n fileName={element.name}\n >\n {element.name}\n </File>\n )\n })\n\ntype TreeViewProps = {\n initialSelectedId?: string\n indicator?: boolean\n elements?: TreeViewElement[]\n initialExpandedItems?: string[]\n openIcon?: React.ReactNode\n closeIcon?: React.ReactNode\n sort?: TreeSortMode\n onExpandedItemsChange?: (items: string[] | undefined) => void\n onSelectedIdChange?: (id: string | undefined) => void\n onFolderContextMenu?: (e: React.MouseEvent, id: string) => void\n} & Omit<\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>,\n \"defaultValue\" | \"onValueChange\" | \"type\" | \"value\"\n>\n\nconst Tree = forwardRef<HTMLDivElement, TreeViewProps>(\n (\n {\n className,\n elements,\n initialSelectedId,\n initialExpandedItems,\n onExpandedItemsChange,\n onSelectedIdChange,\n onFolderContextMenu,\n children,\n indicator = true,\n openIcon,\n closeIcon,\n sort = \"default\",\n dir,\n ...props\n },\n ref\n ) => {\n const [selectedId, setSelectedId] = useState<string | undefined>(\n initialSelectedId\n )\n const [expandedItems, setExpandedItems] = useState<string[] | undefined>(\n initialExpandedItems\n )\n\n useEffect(() => {\n setExpandedItems(initialExpandedItems)\n }, [initialExpandedItems])\n\n const selectItem = useCallback((id: string) => {\n setSelectedId(id)\n onSelectedIdChange?.(id)\n }, [onSelectedIdChange])\n\n const handleExpand = useCallback((id: string, expanded?: boolean) => {\n let next: string[] | undefined\n \n setExpandedItems((prev) => {\n const isCurrentlyExpanded = prev?.includes(id)\n const shouldExpand = expanded !== undefined ? expanded : !isCurrentlyExpanded\n\n if (shouldExpand && !isCurrentlyExpanded) {\n next = [...(prev ?? []), id]\n } else if (!shouldExpand && isCurrentlyExpanded) {\n next = prev?.filter((item) => item !== id) ?? []\n } else {\n next = prev\n }\n return next\n })\n\n // Call side effect after state update\n if (next !== undefined) {\n onExpandedItemsChange?.(next)\n }\n }, [onExpandedItemsChange])\n\n const expandSpecificTargetedElements = useCallback(\n (elements?: TreeViewElement[], selectId?: string) => {\n if (!elements || !selectId) return\n const findParent = (\n currentElement: TreeViewElement,\n currentPath: string[] = []\n ) => {\n const isSelectable = currentElement.isSelectable ?? true\n const newPath = [...currentPath, currentElement.id]\n if (currentElement.id === selectId) {\n if (isSelectable) {\n setExpandedItems((prev) => mergeExpandedItems(prev, newPath))\n } else {\n if (newPath.includes(currentElement.id)) {\n newPath.pop()\n setExpandedItems((prev) => mergeExpandedItems(prev, newPath))\n }\n }\n return\n }\n if (\n Array.isArray(currentElement.children) &&\n currentElement.children.length > 0\n ) {\n currentElement.children.forEach((child) => {\n findParent(child, newPath)\n })\n }\n }\n elements.forEach((element) => {\n findParent(element)\n })\n },\n []\n )\n\n useEffect(() => {\n if (initialSelectedId) {\n expandSpecificTargetedElements(elements, initialSelectedId)\n }\n }, [initialSelectedId, elements, expandSpecificTargetedElements])\n\n const direction = dir === \"rtl\" ? \"rtl\" : \"ltr\"\n const treeChildren =\n children ?? (elements ? renderTreeElements(elements, sort) : null)\n\n return (\n <TreeContext.Provider\n value={{\n selectedId,\n expandedItems,\n handleExpand,\n selectItem,\n setExpandedItems,\n indicator,\n openIcon,\n closeIcon,\n direction,\n onFolderContextMenu,\n }}\n >\n <div className={cn(\"size-full\", className)}>\n <div\n ref={ref}\n className=\"relative h-full overflow-auto scrollbar-thin\"\n dir={dir as Direction}\n >\n <AccordionPrimitive.Root\n {...props}\n type=\"multiple\"\n value={expandedItems}\n onValueChange={(newValue) => {\n setExpandedItems?.(newValue)\n onExpandedItemsChange?.(newValue)\n }}\n className=\"flex flex-col\"\n dir={dir as Direction}\n >\n {treeChildren}\n </AccordionPrimitive.Root>\n </div>\n </div>\n </TreeContext.Provider>\n )\n }\n)\n\nTree.displayName = \"Tree\"\n\nconst TreeIndicator = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { direction } = useTree()\n\n return (\n <div\n dir={direction}\n ref={ref}\n className={cn(\n \"bg-border absolute left-1.5 h-full w-px rounded-md py-3 duration-300 ease-in-out hover:bg-muted-foreground/30 rtl:right-1.5\",\n className\n )}\n {...props}\n />\n )\n})\n\nTreeIndicator.displayName = \"TreeIndicator\"\n\ntype FolderProps = {\n expandedItems?: string[]\n element: string\n isSelectable?: boolean\n isSelect?: boolean\n onContextMenu?: (e: React.MouseEvent) => void\n} & React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n\nconst Folder = forwardRef<\n HTMLDivElement,\n FolderProps & React.HTMLAttributes<HTMLDivElement>\n>(\n (\n {\n className,\n element,\n value,\n isSelectable = true,\n isSelect,\n onContextMenu,\n children,\n ...props\n },\n ref\n ) => {\n const {\n direction,\n handleExpand,\n expandedItems,\n setExpandedItems,\n indicator,\n selectedId,\n selectItem,\n onFolderContextMenu,\n } = useTree()\n const isSelected = isSelect ?? selectedId === value\n const isExpanded = expandedItems?.includes(value)\n\n return (\n <AccordionPrimitive.Item\n ref={ref}\n {...props}\n value={value}\n className=\"relative overflow-hidden\"\n >\n <AccordionPrimitive.Trigger\n className={cn(\n \"group flex items-center gap-2 rounded-lg text-sm px-3 py-1.5 w-full text-left transition-all duration-200 ease-out\",\n \"hover:bg-accent hover:translate-x-0.5\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30\",\n className,\n {\n \"bg-accent\": isSelected && isSelectable,\n \"cursor-pointer\": isSelectable,\n \"cursor-not-allowed opacity-40\": !isSelectable,\n }\n )}\n disabled={!isSelectable}\n onClick={() => handleExpand(value)}\n onContextMenu={(e) => {\n if (onFolderContextMenu) {\n onFolderContextMenu(e, value);\n }\n onContextMenu?.(e);\n }}\n >\n {/* Chevron rotates via Radix data-state so it animates smoothly */}\n <ChevronRightIcon\n className=\"size-3.5 text-muted-foreground/50 transition-transform duration-200 ease-out shrink-0 group-data-[state=open]:rotate-90 group-data-[state=open]:text-muted-foreground\"\n />\n {isExpanded\n ? <FolderOpenIcon className=\"size-4 text-amber-500 dark:text-amber-400/90 transition-colors duration-200\" />\n : <FolderIcon className=\"size-4 text-amber-500/70 dark:text-amber-400/70 transition-colors duration-200 group-hover:text-amber-500 dark:group-hover:text-amber-400/90\" />\n }\n <span className={cn(\n \"font-medium truncate transition-colors duration-200\",\n isSelected ? \"text-foreground\" : \"text-foreground/80 group-hover:text-foreground\"\n )}>\n {element}\n </span>\n </AccordionPrimitive.Trigger>\n <AccordionPrimitive.Content\n className=\"overflow-hidden transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n >\n <div className=\"relative\">\n {indicator && (\n <div className=\"absolute left-[1.125rem] top-0 bottom-0 w-px bg-gradient-to-b from-border via-border/40 to-transparent\" />\n )}\n <AccordionPrimitive.Root\n dir={direction}\n type=\"multiple\"\n className=\"ml-[2.25rem] flex flex-col py-1\"\n value={expandedItems}\n onValueChange={(newValue) => {\n // Sync nested accordion changes back to tree context\n setExpandedItems?.(newValue)\n }}\n >\n {children}\n </AccordionPrimitive.Root>\n </div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n )\n }\n)\n\nFolder.displayName = \"Folder\"\n\nconst File = forwardRef<\n HTMLButtonElement,\n {\n value: string\n handleSelect?: (id: string) => void\n isSelectable?: boolean\n isSelect?: boolean\n fileIcon?: React.ReactNode\n fileName?: string\n } & React.ButtonHTMLAttributes<HTMLButtonElement>\n>(\n (\n {\n value,\n className,\n handleSelect,\n onClick,\n isSelectable = true,\n isSelect,\n fileIcon,\n fileName,\n children,\n ...props\n },\n ref\n ) => {\n const { direction, selectedId, selectItem } = useTree()\n const isSelected = isSelect ?? selectedId === value\n const displayName = fileName || (typeof children === 'string' ? children : value)\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={!isSelectable}\n className={cn(\n \"group flex items-center gap-2 rounded-lg px-3 py-1.5 text-sm w-full text-left transition-all duration-200 ease-out\",\n \"hover:bg-accent hover:translate-x-0.5\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30\",\n {\n \"bg-accent\": isSelected && isSelectable,\n },\n isSelectable ? \"cursor-pointer\" : \"cursor-not-allowed opacity-40\",\n direction === \"rtl\" ? \"rtl\" : \"ltr\",\n className\n )}\n onClick={(event) => {\n selectItem(value)\n handleSelect?.(value)\n onClick?.(event)\n }}\n {...props}\n >\n {fileIcon ?? getFileIcon(displayName, isSelected)}\n <span className={cn(\n \"truncate transition-colors duration-200\",\n isSelected ? \"text-foreground\" : \"text-muted-foreground group-hover:text-foreground\"\n )}>\n {children}\n </span>\n </button>\n )\n }\n)\n\nFile.displayName = \"File\"\n\nexport { File, Folder, Tree, type TreeViewElement }\nexport type { TreeSortMode }\n","// Styling updated to use globals.css — visual changes only\n'use client';\n\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport {\n Search,\n RefreshCw,\n Send,\n Terminal,\n Trash2,\n ChevronUp,\n ChevronDown,\n Activity,\n Folder,\n FolderOpen,\n Brain,\n User,\n Bot,\n Wrench,\n FileText,\n Save,\n X,\n FilePlus,\n RotateCcw,\n AlertTriangle,\n Undo,\n ChevronsDownUp,\n ChevronsUpDown,\n Play,\n Square,\n Globe,\n ExternalLink,\n HelpCircle,\n Command,\n Settings,\n} from 'lucide-react';\nimport { Tree, type TreeViewElement } from '@/components/ui/file-tree';\n\n// Types\ninterface Message {\n id: string;\n content: string;\n thinking?: string;\n isUser: boolean;\n isStreaming?: boolean;\n}\n\ninterface Activity {\n id: string;\n name: string;\n type: string;\n status: 'running' | 'success' | 'error';\n details?: string;\n time: string;\n elapsed?: number;\n}\n\ninterface TerminalLine {\n id: string;\n content: string;\n type: 'info' | 'command' | 'output' | 'error' | 'success';\n timestamp: string;\n}\n\ninterface SessionInfo {\n model: string;\n messages: number;\n tokens: number;\n tools: string[];\n}\n\n// Markdown renderer\nfunction renderMarkdown(text: string): string {\n let html = text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n // Code blocks\n html = html.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (match, lang, code) => {\n return `<pre><code class=\"language-${lang || 'text'}\">${code.trim()}</code></pre>`;\n });\n\n // Inline code\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n\n // Headers\n html = html.replace(/^### (.*$)/gm, '<h3>$1</h3>');\n html = html.replace(/^## (.*$)/gm, '<h2>$1</h2>');\n html = html.replace(/^# (.*$)/gm, '<h1>$1</h1>');\n\n // Bold and italic\n html = html.replace(/\\*\\*\\*(.*?)\\*\\*\\*/g, '<strong><em>$1</em></strong>');\n html = html.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n html = html.replace(/\\*(.*?)\\*/g, '<em>$1</em>');\n\n // Links\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>');\n\n // Line breaks\n html = html.replace(/\\n\\n/g, '</p><p>');\n html = html.replace(/\\n/g, '<br>');\n\n if (!html.startsWith('<')) {\n html = `<p>${html}</p>`;\n }\n\n return html;\n}\n\nconst MODELS = [\n { id: 'openrouter/free', name: 'OpenRouter Free (Auto)', description: 'Fast and reliable, uses free models.' },\n { id: 'anthropic/claude-3.5-sonnet', name: 'Claude 3.5 Sonnet', description: 'Very capable, balanced speed & intelligence.' },\n { id: 'anthropic/claude-3-opus', name: 'Claude 3 Opus', description: 'Most powerful Claude model.' },\n { id: 'openai/gpt-4o', name: 'GPT-4o', description: 'Flagship OpenAI model.' },\n { id: 'openai/gpt-4o-mini', name: 'GPT-4o Mini', description: 'Fastest OpenAI model.' },\n { id: 'google/gemini-2.0-flash-exp:free', name: 'Gemini 2.0 Flash', description: \"Google's fastest large model (Free Preview).\" },\n { id: 'google/gemini-pro-1.5', name: 'Gemini 1.5 Pro', description: \"Google's most capable model.\" },\n { id: 'meta-llama/llama-3.2-90b-vision-instruct', name: 'Llama 3.2 90B', description: \"Meta's latest high-performing open model.\" },\n { id: 'qwen/qwen-2.5-72b-instruct', name: 'Qwen 2.5 72B', description: 'Powerful instruction-tuned model from Alibaba.' },\n];\n\nexport default function Home() {\n // State\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n const [currentMessage, setCurrentMessage] = useState('');\n const [currentThinking, setCurrentThinking] = useState('');\n const [activities, setActivities] = useState<Activity[]>([]);\n const [terminalLines, setTerminalLines] = useState<TerminalLine[]>([]);\n const [isTerminalExpanded, setIsTerminalExpanded] = useState(false);\n const [activeTab, setActiveTab] = useState<'activity' | 'files'>('activity');\n const [connectionStatus, setConnectionStatus] = useState<'connecting' | 'connected' | 'error'>('connecting');\n const [sessionInfo, setSessionInfo] = useState<SessionInfo | null>(null);\n const [showThinking, setShowThinking] = useState(true);\n const [fileElements, setFileElements] = useState<TreeViewElement[]>([]);\n const [expandedFolders, setExpandedFolders] = useState<string[]>([]);\n const [selectedFileId, setSelectedFileId] = useState<string | undefined>(undefined);\n const isInitialLoad = useRef(true);\n\n // File Editor State\n const [editingFile, setEditingFile] = useState<{ id: string, name: string } | null>(null);\n const [editorContent, setEditorContent] = useState('');\n const [originalContent, setOriginalContent] = useState('');\n const [isEditorOpen, setIsEditorOpen] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [isDeleteConfirmOpen, setIsDeleteConfirmOpen] = useState(false);\n const [isNewFileModalOpen, setIsNewFileModalOpen] = useState(false);\n const [newFileName, setNewFileName] = useState('');\n const [targetDirectory, setTargetDirectory] = useState<string>('');\n const [contextMenu, setContextMenu] = useState<{ x: number, y: number, folderId: string } | null>(null);\n const [isModelSelectorOpen, setIsModelSelectorOpen] = useState(false);\n\n // Preview State\n const [isPreviewOpen, setIsPreviewOpen] = useState(false);\n const [previewUrl, setPreviewUrl] = useState('http://localhost:3000');\n\n // Settings & Config State\n const [isSettingsOpen, setIsSettingsOpen] = useState(false);\n const [configInfo, setConfigInfo] = useState<{ hasKey: boolean, maskedKey: string | null }>({ hasKey: false, maskedKey: null });\n const [tempApiKey, setTempApiKey] = useState('');\n const [isSavingConfig, setIsSavingConfig] = useState(false);\n const [isHelpOpen, setIsHelpOpen] = useState(false);\n\n // Refs\n const chatRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const eventSourceRef = useRef<EventSource | null>(null);\n const activityTimers = useRef<Map<string, number>>(new Map());\n const accumulatedMessageRef = useRef<string>('');\n const accumulatedThinkingRef = useRef<string>('');\n\n // Scroll to bottom of chat\n const scrollToBottom = useCallback(() => {\n if (chatRef.current) {\n chatRef.current.scrollTop = chatRef.current.scrollHeight;\n }\n }, []);\n\n // Add terminal line\n const addTerminalLine = useCallback((content: string, type: TerminalLine['type'] = 'info') => {\n const timestamp = new Date().toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n\n setTerminalLines(prev => [...prev, {\n id: `term-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`,\n content,\n type,\n timestamp\n }]);\n }, []);\n\n // Add activity\n const addActivity = useCallback((name: string, type: string, details?: string, explicitId?: string) => {\n // Use explicitId (e.g. tool name) when provided so tool_end can find it by the same key\n const id = explicitId ?? `activity-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n const time = new Date().toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit'\n });\n\n const activity: Activity = {\n id,\n name,\n type,\n status: 'running',\n details,\n time,\n elapsed: 0\n };\n\n setActivities(prev => [activity, ...prev]);\n\n // Start elapsed timer\n const startTime = Date.now();\n const timer = window.setInterval(() => {\n setActivities(prev => prev.map(a =>\n a.id === id ? { ...a, elapsed: Math.round((Date.now() - startTime) / 100) / 10 } : a\n ));\n }, 100);\n\n activityTimers.current.set(id, timer);\n return id;\n }, []);\n\n // Get all folders for selection\n const getAllFolders = useCallback((elements: TreeViewElement[]): { id: string, name: string }[] => {\n const folders: { id: string, name: string }[] = [{ id: '', name: 'Project Root' }];\n\n const scan = (items: TreeViewElement[]) => {\n for (const item of items) {\n if (item.type === 'folder') {\n folders.push({ id: item.id, name: item.id });\n if (item.children) scan(item.children);\n }\n }\n };\n\n scan(elements);\n return folders;\n }, []);\n\n const handleAddNewFile = useCallback((dirId: string = '') => {\n setTargetDirectory(dirId);\n setNewFileName('');\n setIsNewFileModalOpen(true);\n setContextMenu(null);\n }, []);\n const handleContextMenu = useCallback((e: React.MouseEvent, folderId: string) => {\n e.preventDefault();\n setContextMenu({ x: e.clientX, y: e.clientY, folderId });\n }, []);\n\n // Fetch config on mount\n useEffect(() => {\n fetch('/api/config')\n .then(res => res.json())\n .then(data => {\n setConfigInfo(data);\n if (!data.hasKey) {\n setIsSettingsOpen(true);\n }\n });\n }, []);\n\n const handleSaveConfig = async () => {\n if (!tempApiKey.trim()) return;\n setIsSavingConfig(true);\n try {\n const res = await fetch('/api/config', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey: tempApiKey })\n });\n if (res.ok) {\n setTempApiKey('');\n const data = await (await fetch('/api/config')).json();\n setConfigInfo(data);\n setIsSettingsOpen(false);\n addTerminalLine('API configuration updated successfully', 'success');\n }\n } catch (err) {\n addTerminalLine('Failed to save API configuration', 'error');\n } finally {\n setIsSavingConfig(false);\n }\n };\n\n useEffect(() => {\n const handleClickOutside = () => setContextMenu(null);\n window.addEventListener('click', handleClickOutside);\n return () => window.removeEventListener('click', handleClickOutside);\n }, []);\n\n const expandAll = useCallback(() => {\n const getAllFolderIds = (elements: TreeViewElement[]): string[] => {\n const ids: string[] = [];\n for (const el of elements) {\n if (el.type === 'folder') {\n ids.push(el.id);\n if (el.children) {\n ids.push(...getAllFolderIds(el.children));\n }\n }\n }\n return ids;\n };\n setExpandedFolders(getAllFolderIds(fileElements));\n }, [fileElements]);\n\n const collapseAll = useCallback(() => {\n setExpandedFolders([]);\n }, []);\n\n\n const toggleAllFolders = useCallback(() => {\n if (expandedFolders.length > 0) {\n collapseAll();\n } else {\n expandAll();\n }\n }, [expandedFolders.length, expandAll, collapseAll]);\n\n // Complete activity\n const completeActivity = useCallback((id: string, success: boolean) => {\n // Clear timer\n const timer = activityTimers.current.get(id);\n if (timer) {\n clearInterval(timer);\n activityTimers.current.delete(id);\n }\n\n setActivities(prev => prev.map(a =>\n a.id === id ? { ...a, status: success ? 'success' : 'error' } : a\n ));\n }, []);\n\n // Load chat history\n const loadMessages = useCallback(async () => {\n try {\n const response = await fetch('/api/messages');\n if (response.ok) {\n const data = await response.json();\n if (data.messages && data.messages.length > 0) {\n setMessages(data.messages);\n }\n }\n } catch (err) {\n console.error('Failed to load messages:', err);\n }\n }, []);\n\n // Load session info\n const loadSessionInfo = useCallback(async () => {\n try {\n const response = await fetch('/api/session');\n if (response.ok) {\n const data = await response.json();\n setSessionInfo(data);\n }\n } catch (err) {\n console.error('Failed to load session info:', err);\n }\n }, []);\n\n // Load file tree\n const loadFileTree = useCallback(async () => {\n try {\n const response = await fetch('/api/files');\n if (response.ok) {\n const data = await response.json();\n setFileElements(data.elements);\n // Only auto-expand if no folders are currently expanded and it's the initial load\n if (isInitialLoad.current && expandedFolders.length === 0) {\n const getIdsToExpand = (elements: TreeViewElement[], depth = 0): string[] => {\n if (depth >= 2) return [];\n const ids: string[] = [];\n for (const el of elements) {\n if (el.type === 'folder') {\n ids.push(el.id);\n if (el.children) {\n ids.push(...getIdsToExpand(el.children, depth + 1));\n }\n }\n }\n return ids;\n };\n setExpandedFolders(getIdsToExpand(data.elements));\n isInitialLoad.current = false;\n }\n }\n } catch (err) {\n console.error('Failed to load file tree:', err);\n }\n }, []);\n\n // Handle file operations\n const handleFileSelect = useCallback(async (id: string | undefined) => {\n if (!id) return;\n\n // Find the element to see if it's a file\n const findElement = (elements: TreeViewElement[], targetId: string): TreeViewElement | null => {\n for (const el of elements) {\n if (el.id === targetId) return el;\n if (el.children) {\n const found = findElement(el.children, targetId);\n if (found) return found;\n }\n }\n return null;\n };\n\n const element = findElement(fileElements, id);\n if (!element || element.type !== 'file') return;\n\n try {\n // The id is the relative path\n const pathSegments = id.replace(/\\\\/g, '/').split('/');\n const response = await fetch(`/api/files/${pathSegments.join('/')}`);\n if (response.ok) {\n const data = await response.json();\n setEditingFile({ id, name: element.name });\n setEditorContent(data.content);\n setOriginalContent(data.content);\n setIsEditorOpen(true);\n } else {\n addTerminalLine(`Failed to load file: ${id}`, 'error');\n }\n } catch (err) {\n console.error('Error loading file:', err);\n addTerminalLine(`Error loading file: ${id}`, 'error');\n }\n }, [fileElements, addTerminalLine]);\n\n const saveFile = async () => {\n if (!editingFile) return;\n setIsSaving(true);\n try {\n const pathSegments = editingFile.id.replace(/\\\\/g, '/').split('/');\n const response = await fetch(`/api/files/${pathSegments.join('/')}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ content: editorContent })\n });\n\n if (response.ok) {\n addTerminalLine(`File saved: ${editingFile.name}`, 'info');\n setOriginalContent(editorContent);\n setIsEditorOpen(false);\n loadFileTree();\n } else {\n const data = await response.json();\n addTerminalLine(`Failed to save file: ${data.error}`, 'error');\n }\n } catch (err) {\n addTerminalLine(`Error saving file: ${(err as Error).message}`, 'error');\n } finally {\n setIsSaving(false);\n }\n };\n\n const deleteFile = async () => {\n if (!editingFile) return;\n\n setIsDeleting(true);\n try {\n const pathSegments = editingFile.id.replace(/\\\\/g, '/').split('/');\n const response = await fetch(`/api/files/${pathSegments.join('/')}`, {\n method: 'DELETE'\n });\n\n if (response.ok) {\n addTerminalLine(`File deleted: ${editingFile.name}`, 'info');\n setIsEditorOpen(false);\n setIsDeleteConfirmOpen(false);\n loadFileTree();\n } else {\n const data = await response.json();\n addTerminalLine(`Failed to delete file: ${data.error}`, 'error');\n }\n } catch (err) {\n addTerminalLine(`Error deleting file: ${(err as Error).message}`, 'error');\n } finally {\n setIsDeleting(false);\n }\n };\n\n const handleExpandedChange = useCallback((items: string[] | undefined) => {\n setExpandedFolders(items || []);\n }, []);\n\n const handleSelectedIdChange = useCallback((id: string | undefined) => {\n setSelectedFileId(id);\n if (id) {\n handleFileSelect(id);\n }\n }, [handleFileSelect]);\n\n // Connect to SSE\n useEffect(() => {\n const connectEventSource = () => {\n if (eventSourceRef.current) {\n eventSourceRef.current.close();\n }\n\n const eventSource = new EventSource('/api/stream');\n eventSourceRef.current = eventSource;\n\n eventSource.onopen = () => {\n setConnectionStatus('connected');\n };\n\n eventSource.onmessage = (e) => {\n const data = JSON.parse(e.data);\n\n switch (data.type) {\n case 'start':\n setIsStreaming(true);\n accumulatedMessageRef.current = '';\n accumulatedThinkingRef.current = '';\n setCurrentMessage('');\n setCurrentThinking('');\n addTerminalLine('Agent started responding', 'info');\n break;\n\n case 'thinking':\n accumulatedThinkingRef.current += data.content;\n setCurrentThinking(accumulatedThinkingRef.current);\n scrollToBottom();\n break;\n\n case 'content':\n accumulatedMessageRef.current += data.content;\n setCurrentMessage(accumulatedMessageRef.current);\n scrollToBottom();\n break;\n\n case 'tool_start':\n // Use tool name as the activity ID so tool_end can look it up\n addActivity(data.tool, 'tool', JSON.stringify(data.args).slice(0, 80), data.tool);\n addTerminalLine(`$ ${data.tool}: ${JSON.stringify(data.args)}`, 'command');\n break;\n\n case 'tool_end':\n completeActivity(data.tool, !data.isError);\n if (data.output) {\n addTerminalLine(data.output.slice(0, 500), 'output');\n }\n if (data.error) {\n addTerminalLine(`Error: ${data.error}`, 'error');\n }\n break;\n\n case 'end':\n setIsStreaming(false);\n // Move accumulated content to a local variable before clearing\n const finalContent = accumulatedMessageRef.current;\n const finalThinking = accumulatedThinkingRef.current;\n\n if (finalContent || finalThinking) {\n setMessages(prev => [...prev, {\n id: `msg-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`,\n content: finalContent,\n thinking: finalThinking,\n isUser: false\n }]);\n }\n\n // Clear refs and state\n accumulatedMessageRef.current = '';\n accumulatedThinkingRef.current = '';\n setCurrentMessage('');\n setCurrentThinking('');\n\n addTerminalLine('Agent finished', 'info');\n loadSessionInfo();\n // Also sync from backend to be absolutely sure we have the full history\n setTimeout(loadMessages, 500);\n break;\n\n case 'compacting':\n addActivity('context-compact', 'tool', 'Compacting conversation');\n addTerminalLine('Compacting context...', 'info');\n break;\n\n case 'retry':\n addActivity(`Retry ${data.attempt}/${data.maxAttempts}`, 'retry', `Delay: ${data.delayMs}ms`);\n addTerminalLine(`Retrying attempt ${data.attempt}/${data.maxAttempts}`, 'info');\n break;\n\n case 'connected':\n setConnectionStatus('connected');\n break;\n }\n };\n\n eventSource.onerror = () => {\n setConnectionStatus('error');\n eventSource.close();\n setTimeout(connectEventSource, 3000);\n };\n };\n\n connectEventSource();\n loadSessionInfo();\n loadMessages(); // Load existing history\n loadFileTree();\n\n return () => {\n eventSourceRef.current?.close();\n // Clear all timers\n activityTimers.current.forEach(timer => clearInterval(timer));\n };\n }, [addActivity, addTerminalLine, completeActivity, loadFileTree, loadSessionInfo, loadMessages]);\n\n // Send message\n const sendMessage = async () => {\n if (!input.trim() || isStreaming) return;\n\n const userMessage = input.trim();\n setInput('');\n\n // Slash command handling\n if (userMessage.startsWith('/')) {\n const command = userMessage.split(' ')[0].toLowerCase();\n\n if (command === '/clear' || command === '/new') {\n addTerminalLine(`Executing command: ${command}`, 'info');\n await resetSession();\n return;\n }\n\n if (command === '/model') {\n setIsModelSelectorOpen(true);\n addTerminalLine('Opening model selector...', 'info');\n return;\n }\n\n // If unrecognized slash command, maybe just inform the user or ignore\n addTerminalLine(`Unknown command: ${command}`, 'error');\n return;\n }\n\n // Add user message\n setMessages(prev => [...prev, {\n id: `msg-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`,\n content: userMessage,\n isUser: true\n }]);\n\n setIsStreaming(true);\n\n try {\n const response = await fetch('/api/chat', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: userMessage })\n });\n\n if (!response.ok) {\n throw new Error('Failed to send message');\n }\n } catch (err: unknown) {\n setIsStreaming(false);\n addTerminalLine(`Error: ${(err as Error).message}`, 'error');\n }\n };\n\n // Select model\n const selectModel = async (modelId: string) => {\n setIsModelSelectorOpen(false);\n addTerminalLine(`Switching to model: ${modelId}`, 'info');\n\n try {\n const response = await fetch('/api/session', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ modelId })\n });\n\n if (response.ok) {\n setMessages([]);\n setCurrentMessage('');\n setActivities([]);\n setTerminalLines([]);\n addTerminalLine(`Switched to ${modelId}`, 'info');\n loadSessionInfo();\n } else {\n addTerminalLine(`Failed to switch model: ${response.statusText}`, 'error');\n }\n } catch (err) {\n console.error('Failed to switch model:', err);\n addTerminalLine('Error switching model', 'error');\n }\n };\n\n // Reset session\n const resetSession = async () => {\n try {\n const response = await fetch('/api/session', { method: 'POST' });\n if (response.ok) {\n setMessages([]);\n setCurrentMessage('');\n setActivities([]);\n setTerminalLines([]);\n addTerminalLine('Session reset', 'info');\n loadSessionInfo();\n }\n } catch (err) {\n console.error('Failed to reset session:', err);\n }\n };\n\n // Handle input keydown\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n\n // Get activity icon\n const getActivityIcon = (type: string) => {\n switch (type) {\n case 'tool': return Wrench;\n case 'retry': return RefreshCw;\n default: return Activity;\n }\n };\n\n return (\n <div className=\"app-wrapper\">\n {/* Sidebar */}\n <aside className=\"sidebar\" role=\"complementary\" aria-label=\"Activity and file browser\">\n {/* Connection Status */}\n <div className=\"connection-status\">\n <span\n className={`status-indicator ${connectionStatus}`}\n role=\"status\"\n aria-label={`Connection: ${connectionStatus}`}\n ></span>\n <span className=\"status-text\">\n {connectionStatus === 'connected' ? 'Connected' :\n connectionStatus === 'connecting' ? 'Connecting…' : 'Disconnected'}\n </span>\n </div>\n\n {/* Tabs */}\n <div className=\"sidebar-tabs\" role=\"tablist\" aria-label=\"Sidebar panels\">\n <button\n className={`sidebar-tab ${activeTab === 'activity' ? 'active' : ''}`}\n onClick={() => setActiveTab('activity')}\n role=\"tab\"\n aria-selected={activeTab === 'activity'}\n aria-controls=\"panel-activity\"\n >\n <Activity size={14} />\n <span>Activity</span>\n </button>\n <button\n className={`sidebar-tab ${activeTab === 'files' ? 'active' : ''}`}\n onClick={() => setActiveTab('files')}\n role=\"tab\"\n aria-selected={activeTab === 'files'}\n aria-controls=\"panel-files\"\n >\n <Folder size={14} />\n <span>Files</span>\n </button>\n </div>\n\n {/* Activity Panel */}\n {activeTab === 'activity' && (\n <div className=\"sidebar-panel active\" id=\"panel-activity\" role=\"tabpanel\">\n <div className=\"panel-header\">\n <h3>Activity Log</h3>\n <button\n className=\"btn-icon\"\n onClick={() => setActivities([])}\n aria-label=\"Clear activity log\"\n >\n <Trash2 size={14} />\n </button>\n </div>\n <div className=\"activity-log\">\n {activities.length === 0 ? (\n <div className=\"activity-empty\">\n {/* Accessible empty state */}\n <span>Waiting for activity…</span>\n </div>\n ) : (\n activities.map(activity => {\n const Icon = getActivityIcon(activity.type);\n return (\n <div key={activity.id} className=\"activity-item\">\n <div className=\"activity-item-header\">\n <Icon\n size={14}\n className={`activity-item-icon ${activity.status === 'running' ? 'running' : ''}`}\n />\n <span className=\"activity-item-name\">{activity.name}</span>\n <span className={`activity-item-status ${activity.status}`}>\n {activity.status === 'running'\n ? `${activity.elapsed?.toFixed(1)}s`\n : activity.status}\n </span>\n </div>\n {activity.details && (\n <div className=\"activity-item-details\">{activity.details}</div>\n )}\n <div className=\"activity-item-time\">{activity.time}</div>\n </div>\n );\n })\n )}\n </div>\n </div>\n )}\n\n {/* Files Panel */}\n {activeTab === 'files' && (\n <div className=\"sidebar-panel active flex flex-col\" id=\"panel-files\" role=\"tabpanel\">\n <div className=\"panel-header\">\n <div className=\"flex items-center gap-2\">\n <FolderOpen size={14} className=\"text-muted-foreground\" />\n <h3>Files</h3>\n </div>\n <div className=\"flex items-center gap-1\">\n <button\n className=\"btn-icon h-8 w-8 bg-muted/50 text-muted-foreground hover:bg-muted hover:text-foreground transition-all duration-200\"\n onClick={toggleAllFolders}\n title={expandedFolders.length > 0 ? \"Collapse All\" : \"Expand All\"}\n >\n {expandedFolders.length > 0 ? <ChevronsDownUp size={16} /> : <ChevronsUpDown size={16} />}\n </button>\n <button\n className=\"btn-icon h-8 w-8 bg-primary/10 text-primary hover:bg-primary hover:text-primary-foreground transition-all duration-200 shadow-sm\"\n onClick={() => {\n setNewFileName('');\n setTargetDirectory('');\n setIsNewFileModalOpen(true);\n }}\n title=\"New File\"\n >\n <FilePlus size={18} />\n </button>\n <span className=\"text-xs text-muted-foreground ml-1\">\n {fileElements.length} {fileElements.length === 1 ? 'item' : 'items'}\n </span>\n </div>\n </div>\n <div className=\"file-browser flex-1 overflow-hidden px-2 py-2\">\n {fileElements.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-muted-foreground text-sm\">\n Loading…\n </div>\n ) : (\n <Tree\n elements={fileElements}\n initialExpandedItems={expandedFolders}\n initialSelectedId={selectedFileId}\n onExpandedItemsChange={handleExpandedChange}\n onSelectedIdChange={handleSelectedIdChange}\n onFolderContextMenu={handleContextMenu}\n className=\"h-full\"\n />\n )}\n </div>\n </div>\n )}\n </aside>\n\n {/* Main Content */}\n <div className=\"app\">\n {/* Header */}\n <header className=\"header\">\n <div className=\"header-brand\">\n <Search className=\"header-icon\" size={18} />\n <h1 className=\"header-title\">NextPi</h1>\n </div>\n\n <div className=\"header-meta\">\n <div className=\"header-info\">\n <span><strong>Model</strong> {sessionInfo?.model || '—'}</span>\n <span><strong>Messages</strong> {sessionInfo?.messages || 0}</span>\n <span><strong>Tokens</strong> ~{sessionInfo?.tokens || 0}</span>\n </div>\n\n <label className=\"thinking-toggle\">\n <input\n type=\"checkbox\"\n checked={showThinking}\n onChange={(e) => setShowThinking(e.target.checked)}\n />\n <Brain size={14} />\n <span>Thinking</span>\n </label>\n\n <button\n className={`thinking-toggle ${isSettingsOpen ? 'bg-accent text-foreground' : ''}`}\n onClick={() => setIsSettingsOpen(true)}\n >\n <Settings size={14} />\n <span>Settings</span>\n </button>\n\n <button\n className={`thinking-toggle ${isHelpOpen ? 'bg-accent text-foreground' : ''}`}\n onClick={() => setIsHelpOpen(true)}\n >\n <HelpCircle size={14} />\n <span>Help</span>\n </button>\n\n <button className=\"btn btn-secondary\" onClick={resetSession} aria-label=\"Start new session\">\n <RefreshCw size={14} />\n <span>New Session</span>\n </button>\n\n <div className=\"w-px h-6 bg-border mx-1\" />\n\n <button\n className={`btn ${isPreviewOpen ? 'bg-destructive/10 text-destructive hover:bg-destructive/20 border-destructive/20' : 'btn-primary'} h-9 px-4 transition-all duration-300 shadow-sm`}\n onClick={() => setIsPreviewOpen(!isPreviewOpen)}\n aria-label={isPreviewOpen ? \"Stop App\" : \"Run App\"}\n >\n {isPreviewOpen ? (\n <>\n <div className=\"size-2 rounded-full bg-destructive animate-pulse mr-2 shadow-[0_0_10px_rgba(239,68,68,0.6)]\" />\n <Square size={14} className=\"mr-2 fill-current opacity-70\" />\n <span>Stop App</span>\n </>\n ) : (\n <>\n <Play size={14} className=\"mr-2 fill-current\" />\n <span>Run App</span>\n </>\n )}\n </button>\n </div>\n </header>\n\n <div className=\"app-content-area\">\n <div className=\"chat-section\">\n <main className=\"chat-container\" ref={chatRef} aria-label=\"Chat messages\" aria-live=\"polite\">\n {messages.length === 0 && !isStreaming && (\n <div className=\"empty-state\">\n <Bot className=\"empty-state-icon\" size={48} />\n <p className=\"empty-state-title\">How can I help you today?</p>\n <p className=\"empty-state-hint\">\n Ask me to research topics, search the web, fetch documentation,\n or help with coding tasks. Use <kbd>Shift+Enter</kbd> for new lines.\n </p>\n </div>\n )}\n\n {messages.map(msg => (\n <div key={msg.id} className={`message message-${msg.isUser ? 'user' : 'assistant'}`}>\n <div className=\"message-header\">\n {msg.isUser ? <User size={14} /> : <Bot size={14} />}\n <span>{msg.isUser ? 'You' : 'Assistant'}</span>\n </div>\n <div className=\"message-bubble\">\n {showThinking && msg.thinking && (\n <div className=\"thinking-block\">\n <div className=\"thinking-header\">\n <Brain size={12} className=\"text-muted-foreground\" />\n <span>Reasoning</span>\n </div>\n <div className=\"thinking-content italic text-muted-foreground/80 leading-relaxed text-sm\">\n {msg.thinking}\n </div>\n </div>\n )}\n <div\n className=\"message-content\"\n dangerouslySetInnerHTML={{\n __html: msg.isUser\n ? msg.content.replace(/</g, '&lt;').replace(/>/g, '&gt;')\n : renderMarkdown(msg.content)\n }}\n />\n </div>\n </div>\n ))}\n\n {(isStreaming && (currentMessage || currentThinking)) && (\n <div className=\"message message-assistant\">\n <div className=\"message-header\">\n <Bot size={14} />\n <span>NextPi</span>\n </div>\n <div className=\"message-bubble\">\n {showThinking && currentThinking && (\n <div className=\"thinking-block\">\n <div className=\"thinking-header\">\n <Brain size={12} className=\"text-muted-foreground\" />\n <span>Reasoning</span>\n </div>\n <div className=\"thinking-content italic text-muted-foreground/80 leading-relaxed text-sm\">\n {currentThinking}\n </div>\n </div>\n )}\n {currentMessage ? (\n <div\n className=\"message-content\"\n dangerouslySetInnerHTML={{ __html: renderMarkdown(currentMessage) }}\n />\n ) : (\n <div className=\"flex gap-2 text-sm text-muted-foreground animate-pulse mt-2 ml-1 items-center\">\n <div className=\"size-1.5 rounded-full bg-current\" />\n Generating...\n </div>\n )}\n </div>\n </div>\n )}\n\n {isStreaming && !currentMessage && !currentThinking && (\n <div className=\"flex gap-2 text-sm text-muted-foreground animate-pulse mt-2 ml-4 mb-4 items-center\">\n <div className=\"size-1.5 rounded-full bg-current\" />\n Thinking...\n </div>\n )}\n </main>\n\n {/* Terminal Panel */}\n <div className={`terminal-panel ${isTerminalExpanded ? 'expanded' : 'collapsed'}`}>\n <div\n className=\"terminal-header\"\n onClick={() => setIsTerminalExpanded(!isTerminalExpanded)}\n role=\"button\"\n tabIndex={0}\n aria-expanded={isTerminalExpanded}\n aria-controls=\"terminal-content\"\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setIsTerminalExpanded(!isTerminalExpanded); } }}\n >\n <div className=\"terminal-title\">\n <Terminal size={14} />\n <span>Terminal Output</span>\n {terminalLines.length > 0 && (\n <span className=\"terminal-badge\">{terminalLines.length}</span>\n )}\n </div>\n <div className=\"terminal-controls\">\n <button\n className=\"btn-icon\"\n onClick={(e) => { e.stopPropagation(); setTerminalLines([]); }}\n aria-label=\"Clear terminal\"\n >\n <Trash2 size={14} />\n </button>\n <button className=\"btn-icon\" aria-label={isTerminalExpanded ? 'Collapse terminal' : 'Expand terminal'}>\n {isTerminalExpanded ? <ChevronDown size={14} /> : <ChevronUp size={14} />}\n </button>\n </div>\n </div>\n <div className=\"terminal-content\" id=\"terminal-content\">\n <div className=\"terminal-lines\">\n {terminalLines.length === 0 ? (\n <div className=\"terminal-line terminal-line-info\">\n Terminal ready. Agent commands will appear here.\n </div>\n ) : (\n terminalLines.map(line => (\n <div key={line.id} className={`terminal-line terminal-line-${line.type}`}>\n <span className=\"terminal-line-timestamp\">[{line.timestamp}]</span>\n {line.content}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n\n {/* Input */}\n <footer className=\"input-area relative\">\n {input.trim().startsWith('/') && (\n\n <div className=\"absolute bottom-full left-4 mb-2 w-48 bg-card border rounded-lg shadow-xl overflow-hidden animate-in slide-in-from-bottom-2 duration-200 z-50\">\n <div className=\"p-2 border-b bg-muted/50 text-[10px] font-bold text-muted-foreground uppercase tracking-wider\">\n Available Commands\n </div>\n <div className=\"p-1\">\n {[\n { cmd: '/clear', desc: 'Clear chat & reset' },\n { cmd: '/new', desc: 'Start new session' },\n { cmd: '/model', desc: 'Select AI model' },\n ].map((s) => (\n <button\n key={s.cmd}\n className=\"w-full flex flex-col items-start px-3 py-1.5 hover:bg-muted rounded-md transition-colors text-left\"\n onClick={async () => {\n if (s.cmd === '/model') {\n setIsModelSelectorOpen(true);\n setInput('');\n } else if (s.cmd === '/clear' || s.cmd === '/new') {\n setInput('');\n await resetSession();\n } else {\n setInput(s.cmd);\n inputRef.current?.focus();\n }\n }}\n\n >\n <span className=\"text-sm font-mono font-semibold text-primary\">{s.cmd}</span>\n <span className=\"text-[10px] text-muted-foreground\">{s.desc}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n <div className=\"input-wrapper\">\n <div className=\"flex items-end gap-3.5\">\n <textarea\n ref={inputRef}\n className=\"message-input\"\n placeholder=\"Ask anything or type / for commands…\"\n rows={1}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={isStreaming}\n aria-label=\"Message input\"\n />\n <button\n className=\"btn-send mb-0.5\"\n onClick={sendMessage}\n disabled={!input.trim() || isStreaming}\n aria-label=\"Send message\"\n >\n <Send size={18} />\n </button>\n </div>\n <span className=\"input-hint\">Enter to send · Shift+Enter for new line</span>\n </div>\n </footer>\n </div>\n\n {isPreviewOpen && (\n <aside className=\"preview-section\">\n <div className=\"preview-header\">\n <div className=\"preview-address-bar\">\n <Globe size={14} />\n <input\n type=\"text\"\n value={previewUrl}\n onChange={(e) => setPreviewUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const url = previewUrl;\n setPreviewUrl('');\n setTimeout(() => setPreviewUrl(url), 10);\n }\n }}\n />\n <button\n className=\"btn-icon h-7 w-7\"\n onClick={() => {\n const url = previewUrl;\n setPreviewUrl('');\n setTimeout(() => setPreviewUrl(url), 10);\n }}\n title=\"Reload Preview\"\n >\n <RefreshCw size={12} />\n </button>\n </div>\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"btn-icon h-8 w-8 text-muted-foreground hover:text-foreground\"\n title=\"Open in new tab\"\n >\n <ExternalLink size={16} />\n </a>\n <button\n className=\"btn-icon h-8 w-8 hover:bg-destructive/10 hover:text-destructive\"\n onClick={() => setIsPreviewOpen(false)}\n title=\"Close Preview\"\n >\n <X size={18} />\n </button>\n </div>\n <div className=\"preview-content\">\n <iframe\n src={previewUrl}\n title=\"App Preview\"\n sandbox=\"allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts\"\n />\n </div>\n </aside>\n )}\n </div>\n </div>\n\n {/* File Editor Modal */}\n {isEditorOpen && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-background/80 backdrop-blur-sm animate-in fade-in duration-200\"\n onClick={(e) => { if (e.target === e.currentTarget) setIsEditorOpen(false); }}\n >\n <div className=\"bg-card w-full max-w-4xl h-[80vh] border rounded-xl shadow-2xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200\">\n {/* Modal Header */}\n <div className=\"px-6 py-4 border-b flex items-center justify-between bg-muted/30\">\n <div className=\"flex items-center gap-3\">\n <FileText className=\"text-sky-400\" size={18} />\n <div>\n <h2 className=\"text-lg font-semibold leading-none\">{editingFile?.name}</h2>\n <p className=\"text-xs text-muted-foreground mt-1\">{editingFile?.id}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"btn-icon text-muted-foreground hover:bg-destructive/10 hover:text-destructive transition-colors mr-2\"\n onClick={() => setIsDeleteConfirmOpen(true)}\n title=\"Delete File\"\n >\n <Trash2 size={18} />\n </button>\n <div className=\"w-px h-6 bg-border mr-1\" />\n {editorContent !== originalContent && (\n <button\n className=\"btn btn-secondary h-9 px-3 animate-in fade-in slide-in-from-right-2 duration-200\"\n onClick={() => setEditorContent(originalContent)}\n disabled={isSaving || isDeleting}\n >\n <RotateCcw size={14} className=\"mr-2\" />\n <span>Revert</span>\n </button>\n )}\n <button\n className=\"btn btn-primary h-9 px-4\"\n onClick={saveFile}\n disabled={isSaving || isDeleting}\n >\n {isSaving ? <RefreshCw size={14} className=\"mr-2 animate-spin\" /> : <Save size={14} className=\"mr-2\" />}\n <span>Save Changes</span>\n </button>\n <div className=\"w-px h-6 bg-border mx-1\" />\n <button\n className=\"btn-icon hover:bg-muted\"\n onClick={() => setIsEditorOpen(false)}\n >\n <X size={20} />\n </button>\n </div>\n </div>\n\n {/* Modal Content */}\n <div className=\"flex-1 overflow-hidden p-4 bg-zinc-950\">\n <textarea\n className=\"w-full h-full bg-transparent text-zinc-300 font-mono text-sm resize-none focus:outline-none scrollbar-thin p-2\"\n spellCheck={false}\n value={editorContent}\n onChange={(e) => setEditorContent(e.target.value)}\n placeholder=\"File is empty...\"\n />\n </div>\n\n {/* Modal Footer */}\n <div className=\"px-6 py-3 border-t bg-muted/30 flex justify-between items-center text-xs text-muted-foreground font-mono\">\n <div>\n {editorContent.length} characters · {editorContent.split('\\n').length} lines\n </div>\n <div>\n UTF-8\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Delete Confirmation Modal */}\n {isDeleteConfirmOpen && (\n <div\n className=\"fixed inset-0 z-[60] flex items-center justify-center bg-background/60 backdrop-blur-md animate-in fade-in duration-200\"\n onClick={(e) => { if (e.target === e.currentTarget) setIsDeleteConfirmOpen(false); }}\n >\n <div className=\"bg-card w-full max-w-sm border rounded-xl shadow-2xl p-6 animate-in zoom-in-95 duration-200\">\n <div className=\"flex items-center gap-3 mb-4 text-destructive\">\n <div className=\"p-2 bg-destructive/10 rounded-lg\">\n <AlertTriangle size={20} />\n </div>\n <h3 className=\"text-lg font-semibold\">Delete File?</h3>\n </div>\n <p className=\"text-sm text-muted-foreground mb-6 leading-relaxed\">\n Are you sure you want to delete <span className=\"font-mono text-foreground font-medium\">{editingFile?.name}</span>? This action is permanent and cannot be undone.\n </p>\n <div className=\"flex justify-end gap-3\">\n <button\n className=\"btn btn-secondary h-9 px-4\"\n onClick={() => setIsDeleteConfirmOpen(false)}\n disabled={isDeleting}\n >\n Cancel\n </button>\n <button\n className=\"btn bg-destructive text-destructive-foreground hover:bg-destructive/90 h-9 px-4 shadow-sm\"\n onClick={deleteFile}\n disabled={isDeleting}\n >\n {isDeleting ? <RefreshCw size={14} className=\"mr-2 animate-spin\" /> : <Trash2 size={14} className=\"mr-2\" />}\n Delete Forever\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* New File Modal */}\n {isNewFileModalOpen && (\n <div\n className=\"fixed inset-0 z-[70] flex items-center justify-center bg-background/60 backdrop-blur-md animate-in fade-in duration-200\"\n onClick={(e) => { if (e.target === e.currentTarget) setIsNewFileModalOpen(false); }}\n >\n <div className=\"bg-card w-full max-w-sm border rounded-xl shadow-2xl p-6 animate-in zoom-in-95 duration-200\">\n <div className=\"flex items-center gap-3 mb-6\">\n <div className=\"p-2 bg-primary/10 rounded-lg text-primary\">\n <FilePlus size={20} />\n </div>\n <h3 className=\"text-lg font-semibold text-foreground\">Create New File</h3>\n </div>\n\n <div className=\"space-y-6\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Target Directory\n </label>\n <div className=\"grid grid-cols-1 gap-2 max-h-40 overflow-y-auto pr-2 scrollbar-thin\">\n {getAllFolders(fileElements).map((folder) => (\n <button\n key={folder.id}\n onClick={() => setTargetDirectory(folder.id)}\n className={`flex items-center gap-2 px-3 py-2 rounded-lg text-sm transition-all ${targetDirectory === folder.id\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'bg-muted/30 text-muted-foreground hover:bg-muted hover:text-foreground'\n }`}\n >\n <Folder size={14} className={targetDirectory === folder.id ? 'text-primary-foreground' : 'text-amber-500/70'} />\n <span className=\"truncate\">{folder.name}</span>\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"filename\" className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n File Name\n </label>\n <input\n id=\"filename\"\n autoFocus\n type=\"text\"\n className=\"w-full bg-muted/50 border border-border rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary/50 transition-all font-mono\"\n placeholder=\"e.g. index.ts\"\n value={newFileName}\n onChange={(e) => setNewFileName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newFileName.trim()) {\n const fullPath = targetDirectory ? `${targetDirectory}/${newFileName.trim()}` : newFileName.trim();\n setEditingFile({ id: fullPath, name: newFileName.trim() });\n setEditorContent('');\n setIsEditorOpen(true);\n setIsNewFileModalOpen(false);\n } else if (e.key === 'Escape') {\n setIsNewFileModalOpen(false);\n }\n }}\n />\n </div>\n </div>\n\n <div className=\"flex justify-end gap-3 mt-8\">\n <button\n className=\"btn btn-secondary h-10 px-4\"\n onClick={() => setIsNewFileModalOpen(false)}\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary h-10 px-6\"\n disabled={!newFileName.trim()}\n onClick={() => {\n const fullPath = targetDirectory ? `${targetDirectory}/${newFileName.trim()}` : newFileName.trim();\n setEditingFile({ id: fullPath, name: newFileName.trim() });\n setEditorContent('');\n setIsEditorOpen(true);\n setIsNewFileModalOpen(false);\n }}\n >\n Create File\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Model Selector Modal */}\n {isModelSelectorOpen && (\n <div\n className=\"fixed inset-0 z-[80] flex items-center justify-center bg-background/60 backdrop-blur-md animate-in fade-in duration-200\"\n onClick={(e) => { if (e.target === e.currentTarget) setIsModelSelectorOpen(false); }}\n >\n <div className=\"bg-card w-full max-w-md border rounded-xl shadow-2xl p-6 animate-in zoom-in-95 duration-200\">\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-primary/10 rounded-lg text-primary\">\n <Bot size={20} />\n </div>\n <h3 className=\"text-lg font-semibold text-foreground\">Select AI Model</h3>\n </div>\n <button\n className=\"btn-icon hover:bg-muted\"\n onClick={() => setIsModelSelectorOpen(false)}\n >\n <X size={20} />\n </button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-2 max-h-[60vh] overflow-y-auto pr-2 scrollbar-thin\">\n {MODELS.map((model) => (\n <button\n key={model.id}\n onClick={() => selectModel(model.id)}\n className={`flex flex-col gap-1 px-4 py-3 rounded-lg text-left transition-all border ${sessionInfo?.model === model.id\n ? 'bg-primary/5 border-primary shadow-sm'\n : 'bg-muted/30 border-transparent hover:bg-muted hover:border-border'\n }`}\n >\n <div className=\"flex items-center justify-between\">\n <span className={`font-medium ${sessionInfo?.model === model.id ? 'text-primary' : 'text-foreground'}`}>\n {model.name}\n </span>\n {sessionInfo?.model === model.id && (\n <span className=\"text-[10px] bg-primary text-primary-foreground px-1.5 py-0.5 rounded-full font-bold uppercase tracking-wider\">\n Active\n </span>\n )}\n </div>\n <span className=\"text-xs text-muted-foreground leading-relaxed\">\n {model.description}\n </span>\n </button>\n ))}\n </div>\n\n <div className=\"mt-6 pt-6 border-t flex justify-center\">\n <p className=\"text-[10px] text-muted-foreground uppercase tracking-widest font-semibold flex items-center gap-2\">\n <RefreshCw size={10} />\n Session will be reset on model change\n </p>\n </div>\n </div>\n </div>\n )}\n\n {/* Context Menu */}\n\n {contextMenu && (\n <div\n className=\"fixed z-[100] bg-card border rounded-xl shadow-2xl py-1.5 min-w-44 animate-in fade-in zoom-in-95 duration-100\"\n style={{ top: contextMenu.y, left: contextMenu.x }}\n onClick={(e) => e.stopPropagation()}\n >\n <button\n className=\"w-full flex items-center gap-2.5 px-3 py-2 text-sm text-foreground hover:bg-primary hover:text-primary-foreground transition-colors text-left\"\n onClick={() => handleAddNewFile(contextMenu.folderId)}\n >\n <FilePlus size={15} />\n <span>Add File here</span>\n </button>\n <div className=\"h-px bg-border my-1 mx-2\" />\n <button\n className=\"w-full flex items-center gap-2.5 px-3 py-2 text-sm text-muted-foreground/60 transition-colors text-left cursor-not-allowed\"\n disabled\n >\n <Folder size={15} />\n <span>New Folder (soon)</span>\n </button>\n </div>\n )}\n\n {/* Settings Modal */}\n {isSettingsOpen && (\n <div className=\"fixed inset-0 z-[150] flex items-center justify-center p-4 bg-background/80 backdrop-blur-sm animate-in fade-in duration-200\">\n <div className=\"bg-card w-full max-w-md border rounded-2xl shadow-2xl overflow-hidden animate-in zoom-in-95 duration-200\">\n <div className=\"p-6\">\n <div className=\"flex items-center gap-3 mb-6\">\n <div className=\"w-10 h-10 rounded-xl bg-primary/10 text-primary flex items-center justify-center\">\n <Settings size={22} />\n </div>\n <div>\n <h2 className=\"text-xl font-semibold tracking-tight\">Settings</h2>\n <p className=\"text-sm text-muted-foreground line-clamp-1\">Configure your NextPi workspace</p>\n </div>\n </div>\n\n <div className=\"space-y-6\">\n <div className=\"space-y-2.5\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-sm font-medium\">OpenRouter API Key</label>\n {configInfo.hasKey && (\n <span className=\"text-[10px] uppercase tracking-wider font-bold text-emerald-500 bg-emerald-500/10 px-1.5 py-0.5 rounded\">Active</span>\n )}\n </div>\n <input\n type=\"password\"\n className=\"w-full px-3.5 py-2.5 bg-background border rounded-xl outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all text-sm\"\n placeholder={configInfo.hasKey ? `Keys ends in ${configInfo.maskedKey?.slice(-4)}` : \"sk-or-v1-...\"}\n value={tempApiKey}\n onChange={(e) => setTempApiKey(e.target.value)}\n />\n <p className=\"text-[11px] text-muted-foreground leading-relaxed\">\n Your key is stored locally in <code className=\"bg-muted px-1 rounded\">~/.nextpi/config.json</code>.\n It is never shared with anyone except OpenRouter.\n </p>\n </div>\n\n <div className=\"flex items-center gap-3 pt-2\">\n <button\n className=\"flex-1 btn btn-primary py-2.5 justify-center\"\n onClick={handleSaveConfig}\n disabled={!tempApiKey.trim() || isSavingConfig}\n >\n {isSavingConfig ? 'Saving...' : 'Save Configuration'}\n </button>\n {configInfo.hasKey && (\n <button\n className=\"btn btn-secondary py-2.5 px-4\"\n onClick={() => {\n setIsSettingsOpen(false);\n setTempApiKey('');\n }}\n >\n Close\n </button>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"px-6 py-4 bg-muted/50 border-t flex items-center justify-between\">\n <span className=\"text-[11px] text-muted-foreground\">NextPi v0.1.0</span>\n <a\n href=\"https://openrouter.ai/keys\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-[11px] text-primary hover:underline flex items-center gap-1\"\n >\n Get a key <ExternalLink size={10} />\n </a>\n </div>\n </div>\n </div>\n )}\n\n {/* Help Modal */}\n {isHelpOpen && (\n <div className=\"fixed inset-0 z-[150] flex items-center justify-center p-4 bg-background/80 backdrop-blur-sm animate-in fade-in duration-200\">\n <div className=\"bg-card w-full max-w-lg border rounded-2xl shadow-2xl overflow-hidden animate-in zoom-in-95 duration-200\">\n <div className=\"p-6\">\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-xl bg-primary/10 text-primary flex items-center justify-center\">\n <HelpCircle size={22} />\n </div>\n <div>\n <h2 className=\"text-xl font-semibold tracking-tight\">Quick Guide</h2>\n <p className=\"text-sm text-muted-foreground\">Master the NextPi workspace</p>\n </div>\n </div>\n <button onClick={() => setIsHelpOpen(false)} className=\"btn-icon\">\n <X size={20} />\n </button>\n </div>\n\n <div className=\"space-y-6\">\n {/* Keyboard Shortcuts */}\n <div className=\"space-y-3\">\n <h3 className=\"text-sm font-bold uppercase tracking-widest text-muted-foreground/50 flex items-center gap-2\">\n <Command size={14} /> Keyboard Shortcuts\n </h3>\n <div className=\"grid grid-cols-2 gap-2\">\n {[\n { key: 'Enter', desc: 'Send Message' },\n { key: 'Shift + Enter', desc: 'New Line' },\n { key: '/', desc: 'Quick Commands' },\n { key: 'Esc', desc: 'Close Modals' },\n ].map(s => (\n <div key={s.key} className=\"flex items-center justify-between p-2.5 bg-muted/30 rounded-xl border border-border/50\">\n <span className=\"text-xs text-muted-foreground\">{s.desc}</span>\n <kbd className=\"px-1.5 py-0.5 bg-background border rounded text-[10px] font-bold shadow-sm\">{s.key}</kbd>\n </div>\n ))}\n </div>\n </div>\n\n {/* Slash Commands */}\n <div className=\"space-y-3\">\n <h3 className=\"text-sm font-bold uppercase tracking-widest text-muted-foreground/50 flex items-center gap-2\">\n <Play size={14} /> Core Concepts\n </h3>\n <div className=\"space-y-2\">\n <div className=\"p-3 bg-primary/[0.03] border border-primary/10 rounded-xl\">\n <p className=\"text-xs leading-relaxed text-foreground/80\">\n <strong>The Agent </strong> is aware of your entire project directory. It can create files, run terminal commands, and research your codebase automatically.\n </p>\n </div>\n <div className=\"p-3 bg-primary/[0.03] border border-primary/10 rounded-xl\">\n <p className=\"text-xs leading-relaxed text-foreground/80\">\n <strong>Thinking Phase </strong> shows the agent's internal reasoning. Toggle it in the header if you want a cleaner view or need to understand its \"logic.\"\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"mt-8 flex justify-center\">\n <button\n className=\"btn btn-primary px-8 py-2.5 rounded-full\"\n onClick={() => setIsHelpOpen(false)}\n >\n Got it!\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nexport const concatArrays = <T, U>(\n array1: readonly T[],\n array2: readonly U[],\n): readonly (T | U)[] => {\n // Pre-allocate for better V8 optimization\n const combinedArray: (T | U)[] = new Array(array1.length + array2.length)\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i]!\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i]!\n }\n return combinedArray\n}\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-effect-event.tsx\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as React from \"react\";\nvar useReactEffectEvent = React[\" useEffectEvent \".trim().toString()];\nvar useReactInsertionEffect = React[\" useInsertionEffect \".trim().toString()];\nfunction useEffectEvent(callback) {\n if (typeof useReactEffectEvent === \"function\") {\n return useReactEffectEvent(callback);\n }\n const ref = React.useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n if (typeof useReactInsertionEffect === \"function\") {\n useReactInsertionEffect(() => {\n ref.current = callback;\n });\n } else {\n useLayoutEffect(() => {\n ref.current = callback;\n });\n }\n return React.useMemo(() => (...args) => ref.current?.(...args), []);\n}\nexport {\n useEffectEvent\n};\n//# sourceMappingURL=index.mjs.map\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Collapsible\n * -----------------------------------------------------------------------------------------------*/\n\nconst COLLAPSIBLE_NAME = 'Collapsible';\n\ntype ScopedProps<P> = P & { __scopeCollapsible?: Scope };\nconst [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\n\ntype CollapsibleContextValue = {\n contentId: string;\n disabled?: boolean;\n open: boolean;\n onOpenToggle(): void;\n};\n\nconst [CollapsibleProvider, useCollapsibleContext] =\n createCollapsibleContext<CollapsibleContextValue>(COLLAPSIBLE_NAME);\n\ntype CollapsibleElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface CollapsibleProps extends PrimitiveDivProps {\n defaultOpen?: boolean;\n open?: boolean;\n disabled?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst Collapsible = React.forwardRef<CollapsibleElement, CollapsibleProps>(\n (props: ScopedProps<CollapsibleProps>, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME,\n });\n\n return (\n <CollapsibleProvider\n scope={__scopeCollapsible}\n disabled={disabled}\n contentId={useId()}\n open={open}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n >\n <Primitive.div\n data-state={getState(open)}\n data-disabled={disabled ? '' : undefined}\n {...collapsibleProps}\n ref={forwardedRef}\n />\n </CollapsibleProvider>\n );\n }\n);\n\nCollapsible.displayName = COLLAPSIBLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'CollapsibleTrigger';\n\ntype CollapsibleTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface CollapsibleTriggerProps extends PrimitiveButtonProps {}\n\nconst CollapsibleTrigger = React.forwardRef<CollapsibleTriggerElement, CollapsibleTriggerProps>(\n (props: ScopedProps<CollapsibleTriggerProps>, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return (\n <Primitive.button\n type=\"button\"\n aria-controls={context.contentId}\n aria-expanded={context.open || false}\n data-state={getState(context.open)}\n data-disabled={context.disabled ? '' : undefined}\n disabled={context.disabled}\n {...triggerProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, context.onOpenToggle)}\n />\n );\n }\n);\n\nCollapsibleTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'CollapsibleContent';\n\ntype CollapsibleContentElement = CollapsibleContentImplElement;\ninterface CollapsibleContentProps extends Omit<CollapsibleContentImplProps, 'present'> {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst CollapsibleContent = React.forwardRef<CollapsibleContentElement, CollapsibleContentProps>(\n (props: ScopedProps<CollapsibleContentProps>, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return (\n <Presence present={forceMount || context.open}>\n {({ present }) => (\n <CollapsibleContentImpl {...contentProps} ref={forwardedRef} present={present} />\n )}\n </Presence>\n );\n }\n);\n\nCollapsibleContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype CollapsibleContentImplElement = React.ComponentRef<typeof Primitive.div>;\ninterface CollapsibleContentImplProps extends PrimitiveDivProps {\n present: boolean;\n}\n\nconst CollapsibleContentImpl = React.forwardRef<\n CollapsibleContentImplElement,\n CollapsibleContentImplProps\n>((props: ScopedProps<CollapsibleContentImplProps>, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef<CollapsibleContentImplElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef<number | undefined>(0);\n const height = heightRef.current;\n const widthRef = React.useRef<number | undefined>(0);\n const width = widthRef.current;\n // when opening we want it to immediately open to retrieve dimensions\n // when closing we delay `present` to retrieve dimensions before closing\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef<Record<string, string>>(undefined);\n\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n return () => cancelAnimationFrame(rAF);\n }, []);\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName,\n };\n // block any animations/transitions so the element renders at its full dimensions\n node.style.transitionDuration = '0s';\n node.style.animationName = 'none';\n\n // get width and height from full dimensions\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n\n // kick off any animations/transitions that were originally set up if it isn't the initial mount\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration!;\n node.style.animationName = originalStylesRef.current.animationName!;\n }\n\n setIsPresent(present);\n }\n /**\n * depends on `context.open` because it will change to `false`\n * when a close is triggered but `present` will be `false` on\n * animation end (so when close finishes). This allows us to\n * retrieve the dimensions *before* closing.\n */\n }, [context.open, present]);\n\n return (\n <Primitive.div\n data-state={getState(context.open)}\n data-disabled={context.disabled ? '' : undefined}\n id={context.contentId}\n hidden={!isOpen}\n {...contentProps}\n ref={composedRefs}\n style={{\n [`--radix-collapsible-content-height` as any]: height ? `${height}px` : undefined,\n [`--radix-collapsible-content-width` as any]: width ? `${width}px` : undefined,\n ...props.style,\n }}\n >\n {isOpen && children}\n </Primitive.div>\n );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst Root = Collapsible;\nconst Trigger = CollapsibleTrigger;\nconst Content = CollapsibleContent;\n\nexport {\n createCollapsibleScope,\n //\n Collapsible,\n CollapsibleTrigger,\n CollapsibleContent,\n //\n Root,\n Trigger,\n Content,\n};\nexport type { CollapsibleProps, CollapsibleTriggerProps, CollapsibleContentProps };\n","/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n","/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n","/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// Prevent bundlers from trying to optimize the import\nconst useInsertionEffect: typeof useLayoutEffect =\n (React as any)[' useInsertionEffect '.trim().toString()] || useLayoutEffect;\n\ntype ChangeHandler<T> = (state: T) => void;\ntype SetStateFn<T> = React.Dispatch<React.SetStateAction<T>>;\n\ninterface UseControllableStateParams<T> {\n prop?: T | undefined;\n defaultProp: T;\n onChange?: ChangeHandler<T>;\n caller?: string;\n}\n\nexport function useControllableState<T>({\n prop,\n defaultProp,\n onChange = () => {},\n caller,\n}: UseControllableStateParams<T>): [T, SetStateFn<T>] {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange,\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n\n // OK to disable conditionally calling hooks here because they will always run\n // consistently in the same environment. Bundlers should be able to remove the\n // code block entirely in production.\n /* eslint-disable react-hooks/rules-of-hooks */\n if (process.env.NODE_ENV !== 'production') {\n const isControlledRef = React.useRef(prop !== undefined);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? 'controlled' : 'uncontrolled';\n const to = isControlled ? 'controlled' : 'uncontrolled';\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n /* eslint-enable react-hooks/rules-of-hooks */\n\n const setValue = React.useCallback<SetStateFn<T>>(\n (nextValue) => {\n if (isControlled) {\n const value = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value !== prop) {\n onChangeRef.current?.(value);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n\n return [value, setValue];\n}\n\nfunction useUncontrolledState<T>({\n defaultProp,\n onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>): [\n Value: T,\n setValue: React.Dispatch<React.SetStateAction<T>>,\n OnChangeRef: React.RefObject<ChangeHandler<T> | undefined>,\n] {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n\n return [value, setValue, onChangeRef];\n}\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm18 15-6-6-6 6', key: '153udz' }]];\n\n/**\n * @component @name ChevronUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTggMTUtNi02LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronUp = createLucideIcon('chevron-up', __iconNode);\n\nexport default ChevronUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == 'function') {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm7 15 5 5 5-5', key: '1hf1tw' }],\n ['path', { d: 'm7 9 5-5 5 5', key: 'sgt6xg' }],\n];\n\n/**\n * @component @name ChevronsUpDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNyAxNSA1IDUgNS01IiAvPgogIDxwYXRoIGQ9Im03IDkgNS01IDUgNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevrons-up-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsUpDown = createLucideIcon('chevrons-up-down', __iconNode);\n\nexport default ChevronsUpDown;\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\nimport { createCollapsibleScope } from '@radix-ui/react-collapsible';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACCORDION_NAME = 'Accordion';\nconst ACCORDION_KEYS = ['Home', 'End', 'ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\n\nconst [Collection, useCollection, createCollectionScope] =\n createCollection<AccordionTriggerElement>(ACCORDION_NAME);\n\ntype ScopedProps<P> = P & { __scopeAccordion?: Scope };\nconst [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope,\n]);\nconst useCollapsibleScope = createCollapsibleScope();\n\ntype AccordionElement = AccordionImplMultipleElement | AccordionImplSingleElement;\ninterface AccordionSingleProps extends AccordionImplSingleProps {\n type: 'single';\n}\ninterface AccordionMultipleProps extends AccordionImplMultipleProps {\n type: 'multiple';\n}\n\nconst Accordion = React.forwardRef<AccordionElement, AccordionSingleProps | AccordionMultipleProps>(\n (props: ScopedProps<AccordionSingleProps | AccordionMultipleProps>, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps as AccordionImplSingleProps;\n const multipleProps = accordionProps as AccordionImplMultipleProps;\n return (\n <Collection.Provider scope={props.__scopeAccordion}>\n {type === 'multiple' ? (\n <AccordionImplMultiple {...multipleProps} ref={forwardedRef} />\n ) : (\n <AccordionImplSingle {...singleProps} ref={forwardedRef} />\n )}\n </Collection.Provider>\n );\n }\n);\n\nAccordion.displayName = ACCORDION_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionValueContextValue = {\n value: string[];\n onItemOpen(value: string): void;\n onItemClose(value: string): void;\n};\n\nconst [AccordionValueProvider, useAccordionValueContext] =\n createAccordionContext<AccordionValueContextValue>(ACCORDION_NAME);\n\nconst [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false }\n);\n\ntype AccordionImplSingleElement = AccordionImplElement;\ninterface AccordionImplSingleProps extends AccordionImplProps {\n /**\n * The controlled stateful value of the accordion item whose content is expanded.\n */\n value?: string;\n /**\n * The value of the item whose content is expanded when the accordion is initially rendered. Use\n * `defaultValue` if you do not need to control the state of an accordion.\n */\n defaultValue?: string;\n /**\n * The callback that fires when the state of the accordion changes.\n */\n onValueChange?(value: string): void;\n /**\n * Whether an accordion item can be collapsed after it has been opened.\n * @default false\n */\n collapsible?: boolean;\n}\n\nconst AccordionImplSingle = React.forwardRef<AccordionImplSingleElement, AccordionImplSingleProps>(\n (props: ScopedProps<AccordionImplSingleProps>, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {},\n collapsible = false,\n ...accordionSingleProps\n } = props;\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? '',\n onChange: onValueChange,\n caller: ACCORDION_NAME,\n });\n\n return (\n <AccordionValueProvider\n scope={props.__scopeAccordion}\n value={React.useMemo(() => (value ? [value] : []), [value])}\n onItemOpen={setValue}\n onItemClose={React.useCallback(() => collapsible && setValue(''), [collapsible, setValue])}\n >\n <AccordionCollapsibleProvider scope={props.__scopeAccordion} collapsible={collapsible}>\n <AccordionImpl {...accordionSingleProps} ref={forwardedRef} />\n </AccordionCollapsibleProvider>\n </AccordionValueProvider>\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplMultipleElement = AccordionImplElement;\ninterface AccordionImplMultipleProps extends AccordionImplProps {\n /**\n * The controlled stateful value of the accordion items whose contents are expanded.\n */\n value?: string[];\n /**\n * The value of the items whose contents are expanded when the accordion is initially rendered. Use\n * `defaultValue` if you do not need to control the state of an accordion.\n */\n defaultValue?: string[];\n /**\n * The callback that fires when the state of the accordion changes.\n */\n onValueChange?(value: string[]): void;\n}\n\nconst AccordionImplMultiple = React.forwardRef<\n AccordionImplMultipleElement,\n AccordionImplMultipleProps\n>((props: ScopedProps<AccordionImplMultipleProps>, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {},\n ...accordionMultipleProps\n } = props;\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME,\n });\n\n const handleItemOpen = React.useCallback(\n (itemValue: string) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n\n const handleItemClose = React.useCallback(\n (itemValue: string) =>\n setValue((prevValue = []) => prevValue.filter((value) => value !== itemValue)),\n [setValue]\n );\n\n return (\n <AccordionValueProvider\n scope={props.__scopeAccordion}\n value={value}\n onItemOpen={handleItemOpen}\n onItemClose={handleItemClose}\n >\n <AccordionCollapsibleProvider scope={props.__scopeAccordion} collapsible={true}>\n <AccordionImpl {...accordionMultipleProps} ref={forwardedRef} />\n </AccordionCollapsibleProvider>\n </AccordionValueProvider>\n );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplContextValue = {\n disabled?: boolean;\n direction: AccordionImplProps['dir'];\n orientation: AccordionImplProps['orientation'];\n};\n\nconst [AccordionImplProvider, useAccordionContext] =\n createAccordionContext<AccordionImplContextValue>(ACCORDION_NAME);\n\ntype AccordionImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface AccordionImplProps extends PrimitiveDivProps {\n /**\n * Whether or not an accordion is disabled from user interaction.\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * The layout in which the Accordion operates.\n * @default vertical\n */\n orientation?: React.AriaAttributes['aria-orientation'];\n /**\n * The language read direction.\n */\n dir?: Direction;\n}\n\nconst AccordionImpl = React.forwardRef<AccordionImplElement, AccordionImplProps>(\n (props: ScopedProps<AccordionImplProps>, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = 'vertical', ...accordionProps } = props;\n const accordionRef = React.useRef<AccordionImplElement>(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === 'ltr';\n\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target as HTMLElement;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n\n if (triggerIndex === -1) return;\n\n // Prevents page scroll while user is navigating\n event.preventDefault();\n\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n\n switch (event.key) {\n case 'Home':\n nextIndex = homeIndex;\n break;\n case 'End':\n nextIndex = endIndex;\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') {\n moveNext();\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') {\n movePrev();\n }\n break;\n }\n\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex]!.ref.current?.focus();\n });\n\n return (\n <AccordionImplProvider\n scope={__scopeAccordion}\n disabled={disabled}\n direction={dir}\n orientation={orientation}\n >\n <Collection.Slot scope={__scopeAccordion}>\n <Primitive.div\n {...accordionProps}\n data-orientation={orientation}\n ref={composedRefs}\n onKeyDown={disabled ? undefined : handleKeyDown}\n />\n </Collection.Slot>\n </AccordionImplProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'AccordionItem';\n\ntype AccordionItemContextValue = { open?: boolean; disabled?: boolean; triggerId: string };\nconst [AccordionItemProvider, useAccordionItemContext] =\n createAccordionContext<AccordionItemContextValue>(ITEM_NAME);\n\ntype AccordionItemElement = React.ComponentRef<typeof CollapsiblePrimitive.Root>;\ntype CollapsibleProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root>;\ninterface AccordionItemProps\n extends Omit<CollapsibleProps, 'open' | 'defaultOpen' | 'onOpenChange'> {\n /**\n * Whether or not an accordion item is disabled from user interaction.\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * A string value for the accordion item. All items within an accordion should use a unique value.\n */\n value: string;\n}\n\n/**\n * `AccordionItem` contains all of the parts of a collapsible section inside of an `Accordion`.\n */\nconst AccordionItem = React.forwardRef<AccordionItemElement, AccordionItemProps>(\n (props: ScopedProps<AccordionItemProps>, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = (value && valueContext.value.includes(value)) || false;\n const disabled = accordionContext.disabled || props.disabled;\n\n return (\n <AccordionItemProvider\n scope={__scopeAccordion}\n open={open}\n disabled={disabled}\n triggerId={triggerId}\n >\n <CollapsiblePrimitive.Root\n data-orientation={accordionContext.orientation}\n data-state={getState(open)}\n {...collapsibleScope}\n {...accordionItemProps}\n ref={forwardedRef}\n disabled={disabled}\n open={open}\n onOpenChange={(open) => {\n if (open) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }}\n />\n </AccordionItemProvider>\n );\n }\n);\n\nAccordionItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst HEADER_NAME = 'AccordionHeader';\n\ntype AccordionHeaderElement = React.ComponentRef<typeof Primitive.h3>;\ntype PrimitiveHeading3Props = React.ComponentPropsWithoutRef<typeof Primitive.h3>;\ninterface AccordionHeaderProps extends PrimitiveHeading3Props {}\n\n/**\n * `AccordionHeader` contains the content for the parts of an `AccordionItem` that will be visible\n * whether or not its content is collapsed.\n */\nconst AccordionHeader = React.forwardRef<AccordionHeaderElement, AccordionHeaderProps>(\n (props: ScopedProps<AccordionHeaderProps>, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return (\n <Primitive.h3\n data-orientation={accordionContext.orientation}\n data-state={getState(itemContext.open)}\n data-disabled={itemContext.disabled ? '' : undefined}\n {...headerProps}\n ref={forwardedRef}\n />\n );\n }\n);\n\nAccordionHeader.displayName = HEADER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'AccordionTrigger';\n\ntype AccordionTriggerElement = React.ComponentRef<typeof CollapsiblePrimitive.Trigger>;\ntype CollapsibleTriggerProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>;\ninterface AccordionTriggerProps extends CollapsibleTriggerProps {}\n\n/**\n * `AccordionTrigger` is the trigger that toggles the collapsed state of an `AccordionItem`. It\n * should always be nested inside of an `AccordionHeader`.\n */\nconst AccordionTrigger = React.forwardRef<AccordionTriggerElement, AccordionTriggerProps>(\n (props: ScopedProps<AccordionTriggerProps>, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return (\n <Collection.ItemSlot scope={__scopeAccordion}>\n <CollapsiblePrimitive.Trigger\n aria-disabled={(itemContext.open && !collapsibleContext.collapsible) || undefined}\n data-orientation={accordionContext.orientation}\n id={itemContext.triggerId}\n {...collapsibleScope}\n {...triggerProps}\n ref={forwardedRef}\n />\n </Collection.ItemSlot>\n );\n }\n);\n\nAccordionTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AccordionContent';\n\ntype AccordionContentElement = React.ComponentRef<typeof CollapsiblePrimitive.Content>;\ntype CollapsibleContentProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>;\ninterface AccordionContentProps extends CollapsibleContentProps {}\n\n/**\n * `AccordionContent` contains the collapsible content for an `AccordionItem`.\n */\nconst AccordionContent = React.forwardRef<AccordionContentElement, AccordionContentProps>(\n (props: ScopedProps<AccordionContentProps>, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return (\n <CollapsiblePrimitive.Content\n role=\"region\"\n aria-labelledby={itemContext.triggerId}\n data-orientation={accordionContext.orientation}\n {...collapsibleScope}\n {...contentProps}\n ref={forwardedRef}\n style={{\n ['--radix-accordion-content-height' as any]: 'var(--radix-collapsible-content-height)',\n ['--radix-accordion-content-width' as any]: 'var(--radix-collapsible-content-width)',\n ...props.style,\n }}\n />\n );\n }\n);\n\nAccordionContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst Root = Accordion;\nconst Item = AccordionItem;\nconst Header = AccordionHeader;\nconst Trigger = AccordionTrigger;\nconst Content = AccordionContent;\n\nexport {\n createAccordionScope,\n //\n Accordion,\n AccordionItem,\n AccordionHeader,\n AccordionTrigger,\n AccordionContent,\n //\n Root,\n Item,\n Header,\n Trigger,\n Content,\n};\nexport type {\n AccordionSingleProps,\n AccordionMultipleProps,\n AccordionItemProps,\n AccordionHeaderProps,\n AccordionTriggerProps,\n AccordionContentProps,\n};\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 11v6', key: 'nco0om' }],\n ['path', { d: 'M14 11v6', key: 'outv1u' }],\n ['path', { d: 'M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6', key: 'miytrc' }],\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2', key: 'e791ji' }],\n];\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTQgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiAvPgogIDxwYXRoIGQ9Ik0zIDZoMTgiIC8+CiAgPHBhdGggZD0iTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('trash-2', __iconNode);\n\nexport default Trash2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm21 21-4.34-4.34', key: '14j7rj' }],\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n];\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMjEgMjEtNC4zNC00LjM0IiAvPgogIDxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon('search', __iconNode);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20', key: '13o1zl' }],\n ['path', { d: 'M2 12h20', key: '9i4pu4' }],\n];\n\n/**\n * @component @name Globe\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNMTIgMmExNC41IDE0LjUgMCAwIDAgMCAyMCAxNC41IDE0LjUgMCAwIDAgMC0yMCIgLz4KICA8cGF0aCBkPSJNMiAxMmgyMCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/globe\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Globe = createLucideIcon('globe', __iconNode);\n\nexport default Globe;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 18V5', key: 'adv99a' }],\n ['path', { d: 'M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4', key: '1e3is1' }],\n ['path', { d: 'M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5', key: '1gqd8o' }],\n ['path', { d: 'M17.997 5.125a4 4 0 0 1 2.526 5.77', key: 'iwvgf7' }],\n ['path', { d: 'M18 18a4 4 0 0 0 2-7.464', key: 'efp6ie' }],\n ['path', { d: 'M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517', key: '1gq6am' }],\n ['path', { d: 'M6 18a4 4 0 0 1-2-7.464', key: 'k1g0md' }],\n ['path', { d: 'M6.003 5.125a4 4 0 0 0-2.526 5.77', key: 'q97ue3' }],\n];\n\n/**\n * @component @name Brain\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMThWNSIgLz4KICA8cGF0aCBkPSJNMTUgMTNhNC4xNyA0LjE3IDAgMCAxLTMtNCA0LjE3IDQuMTcgMCAwIDEtMyA0IiAvPgogIDxwYXRoIGQ9Ik0xNy41OTggNi41QTMgMyAwIDEgMCAxMiA1YTMgMyAwIDEgMC01LjU5OCAxLjUiIC8+CiAgPHBhdGggZD0iTTE3Ljk5NyA1LjEyNWE0IDQgMCAwIDEgMi41MjYgNS43NyIgLz4KICA8cGF0aCBkPSJNMTggMThhNCA0IDAgMCAwIDItNy40NjQiIC8+CiAgPHBhdGggZD0iTTE5Ljk2NyAxNy40ODNBNCA0IDAgMSAxIDEyIDE4YTQgNCAwIDEgMS03Ljk2Ny0uNTE3IiAvPgogIDxwYXRoIGQ9Ik02IDE4YTQgNCAwIDAgMS0yLTcuNDY0IiAvPgogIDxwYXRoIGQ9Ik02LjAwMyA1LjEyNWE0IDQgMCAwIDAtMi41MjYgNS43NyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/brain\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Brain = createLucideIcon('brain', __iconNode);\n\nexport default Brain;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n];\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCIgLz4KICA8cGF0aCBkPSJNMjEgM3Y1aC01IiAvPgogIDxwYXRoIGQ9Ik0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgLz4KICA8cGF0aCBkPSJNOCAxNkgzdjUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/refresh-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCw = createLucideIcon('refresh-cw', __iconNode);\n\nexport default RefreshCw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n];\n\n/**\n * @component @name Square\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Square = createLucideIcon('square', __iconNode);\n\nexport default Square;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm7 20 5-5 5 5', key: '13a0gw' }],\n ['path', { d: 'm7 4 5 5 5-5', key: '1kwcof' }],\n];\n\n/**\n * @component @name ChevronsDownUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNyAyMCA1LTUgNSA1IiAvPgogIDxwYXRoIGQ9Im03IDQgNSA1IDUtNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevrons-down-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsDownUp = createLucideIcon('chevrons-down-up', __iconNode);\n\nexport default ChevronsDownUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n];\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('user', __iconNode);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n];\n\n/**\n * @component @name CircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIC8+CiAgPHBhdGggZD0iTTEyIDE3aC4wMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleQuestionMark = createLucideIcon('circle-question-mark', __iconNode);\n\nexport default CircleQuestionMark;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19h8', key: 'baeox8' }],\n ['path', { d: 'm4 17 6-6-6-6', key: '1yngyt' }],\n];\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTloOCIgLz4KICA8cGF0aCBkPSJtNCAxNyA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('terminal', __iconNode);\n\nexport default Terminal;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '1357e3' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n];\n\n/**\n * @component @name RotateCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IiAvPgogIDxwYXRoIGQ9Ik0zIDN2NWg1IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/rotate-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RotateCcw = createLucideIcon('rotate-ccw', __iconNode);\n\nexport default RotateCcw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 8V4H8', key: 'hb8ula' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2', key: 'enze0r' }],\n ['path', { d: 'M2 14h2', key: 'vft8re' }],\n ['path', { d: 'M20 14h2', key: '4cs60a' }],\n ['path', { d: 'M15 13v2', key: '1xurst' }],\n ['path', { d: 'M9 13v2', key: 'rq6x2g' }],\n];\n\n/**\n * @component @name Bot\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgOFY0SDgiIC8+CiAgPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjEyIiB4PSI0IiB5PSI4IiByeD0iMiIgLz4KICA8cGF0aCBkPSJNMiAxNGgyIiAvPgogIDxwYXRoIGQ9Ik0yMCAxNGgyIiAvPgogIDxwYXRoIGQ9Ik0xNSAxM3YyIiAvPgogIDxwYXRoIGQ9Ik05IDEzdjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/bot\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Bot = createLucideIcon('bot', __iconNode);\n\nexport default Bot;\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>…</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\nfunction createCollection<ItemElement extends HTMLElement, ItemData = {}>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionRef: React.RefObject<CollectionElement | null>;\n itemMap: Map<\n React.RefObject<ItemElement | null>,\n { ref: React.RefObject<ItemElement | null> } & ItemData\n >;\n };\n\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: new Map() }\n );\n\n const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n const { scope, children } = props;\n const ref = React.useRef<CollectionElement>(null);\n const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n return (\n <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n {children}\n </CollectionProviderImpl>\n );\n };\n\n CollectionProvider.displayName = PROVIDER_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n return () => void context.itemMap.delete(ref);\n });\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current!) - orderedNodes.indexOf(b.ref.current!)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n\n return getItems;\n }\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n { d: 'M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3', key: '11bfej' },\n ],\n];\n\n/**\n * @component @name Command\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgNnYxMmEzIDMgMCAxIDAgMy0zSDZhMyAzIDAgMSAwIDMgM1Y2YTMgMyAwIDEgMC0zIDNoMTJhMyAzIDAgMSAwLTMtMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/command\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Command = createLucideIcon('command', __iconNode);\n\nexport default Command;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n const Provider: React.FC<ContextValueType & { children: React.ReactNode }> = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: React.FC<\n ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n > = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\nimport { concatArrays } from './utils'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[] | null\n classGroupId: AnyClassGroupIds | undefined // Always define optional props for consistent shape\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (\n classGroupId: AnyClassGroupIds,\n validator: ClassValidator,\n): ClassValidatorObject => ({\n classGroupId,\n validator,\n})\n\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (\n nextPart: Map<string, ClassPartObject> = new Map(),\n validators: ClassValidatorObject[] | null = null,\n classGroupId?: AnyClassGroupIds,\n): ClassPartObject => ({\n nextPart,\n validators,\n classGroupId,\n})\n\nconst CLASS_PART_SEPARATOR = '-'\n\nconst EMPTY_CONFLICTS: readonly AnyClassGroupIds[] = []\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className)\n }\n\n const classParts = className.split(CLASS_PART_SEPARATOR)\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0\n return getGroupRecursive(classParts, startIndex, classMap)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ): readonly AnyClassGroupIds[] => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId]\n const baseConflicts = conflictingClassGroups[classGroupId]\n\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts)\n }\n // Only modifier conflicts\n return modifierConflicts\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS\n }\n\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n startIndex: number,\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n const classPathsLength = classParts.length - startIndex\n if (classPathsLength === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[startIndex]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject)\n if (result) return result\n }\n\n const validators = classPartObject.validators\n if (validators === null) {\n return undefined\n }\n\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest =\n startIndex === 0\n ? classParts.join(CLASS_PART_SEPARATOR)\n : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR)\n const validatorsLength = validators.length\n\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i]!\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId\n }\n }\n\n return undefined\n}\n\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = (className: string): AnyClassGroupIds | undefined =>\n className.slice(1, -1).indexOf(':') === -1\n ? undefined\n : (() => {\n const content = className.slice(1, -1)\n const colonIndex = content.indexOf(':')\n const property = content.slice(0, colonIndex)\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined\n })()\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, classGroups } = config\n return processClassGroups(classGroups, theme)\n}\n\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (\n classGroups: Record<AnyClassGroupIds, ClassGroup<AnyThemeGroupIds>>,\n theme: ThemeObject<AnyThemeGroupIds>,\n): ClassPartObject => {\n const classMap = createClassPartObject()\n\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId]!\n processClassesRecursively(group, classMap, classGroupId, theme)\n }\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const len = classGroup.length\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i]!\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme)\n }\n}\n\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (\n classDefinition: ClassGroup<AnyThemeGroupIds>[number],\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId)\n return\n }\n\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme)\n return\n }\n\n processObjectDefinition(\n classDefinition as Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject,\n classGroupId,\n theme,\n )\n}\n\nconst processStringDefinition = (\n classDefinition: string,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n) => {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n}\n\nconst processFunctionDefinition = (\n classDefinition: Function,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme)\n return\n }\n\n if (classPartObject.validators === null) {\n classPartObject.validators = []\n }\n classPartObject.validators.push(\n createClassValidatorObject(classGroupId, classDefinition as ClassValidator),\n )\n}\n\nconst processObjectDefinition = (\n classDefinition: Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const entries = Object.entries(classDefinition)\n const len = entries.length\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i]!\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme)\n }\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string): ClassPartObject => {\n let current = classPartObject\n const parts = path.split(CLASS_PART_SEPARATOR)\n const len = parts.length\n\n for (let i = 0; i < len; i++) {\n const part = parts[i]!\n\n let next = current.nextPart.get(part)\n if (!next) {\n next = createClassPartObject()\n current.nextPart.set(part, next)\n }\n current = next\n }\n\n return current\n}\n\n// Type guard maintains monomorphic check\nconst isThemeGetter = (func: Function): func is ThemeGetter =>\n 'isThemeGetter' in func && (func as ThemeGetter).isThemeGetter === true\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z',\n key: '1ffxy3',\n },\n ],\n ['path', { d: 'm21.854 2.147-10.94 10.939', key: '12cjpa' }],\n];\n\n/**\n * @component @name Send\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTQuNTM2IDIxLjY4NmEuNS41IDAgMCAwIC45MzctLjAyNGw2LjUtMTlhLjQ5Ni40OTYgMCAwIDAtLjYzNS0uNjM1bC0xOSA2LjVhLjUuNSAwIDAgMC0uMDI0LjkzN2w3LjkzIDMuMThhMiAyIDAgMCAxIDEuMTEyIDEuMTF6IiAvPgogIDxwYXRoIGQ9Im0yMS44NTQgMi4xNDctMTAuOTQgMTAuOTM5IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/send\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Send = createLucideIcon('send', __iconNode);\n\nexport default Send;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z',\n key: '1c8476',\n },\n ],\n ['path', { d: 'M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7', key: '1ydtos' }],\n ['path', { d: 'M7 3v4a1 1 0 0 0 1 1h7', key: 't51u73' }],\n];\n\n/**\n * @component @name Save\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUuMiAzYTIgMiAwIDAgMSAxLjQuNmwzLjggMy44YTIgMiAwIDAgMSAuNiAxLjRWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yeiIgLz4KICA8cGF0aCBkPSJNMTcgMjF2LTdhMSAxIDAgMCAwLTEtMUg4YTEgMSAwIDAgMC0xIDF2NyIgLz4KICA8cGF0aCBkPSJNNyAzdjRhMSAxIDAgMCAwIDEgMWg3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/save\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Save = createLucideIcon('save', __iconNode);\n\nexport default Save;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M10 12.5 8 15l2 2.5', key: '1tg20x' }],\n ['path', { d: 'm14 12.5 2 2.5-2 2.5', key: 'yinavb' }],\n];\n\n/**\n * @component @name FileCode\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTAgMTIuNSA4IDE1bDIgMi41IiAvPgogIDxwYXRoIGQ9Im0xNCAxMi41IDIgMi41LTIgMi41IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-code\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCode = createLucideIcon('file-code', __iconNode);\n\nexport default FileCode;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z',\n key: '1ngwbx',\n },\n ],\n];\n\n/**\n * @component @name Wrench\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTQuNyA2LjNhMSAxIDAgMCAwIDAgMS40bDEuNiAxLjZhMSAxIDAgMCAwIDEuNCAwbDMuMTA2LTMuMTA1Yy4zMi0uMzIyLjg2My0uMjIuOTgzLjIxOGE2IDYgMCAwIDEtOC4yNTkgNy4wNTdsLTcuOTEgNy45MWExIDEgMCAwIDEtMi45OTktM2w3LjkxLTcuOTFhNiA2IDAgMCAxIDcuMDU3LTguMjU5Yy40MzguMTIuNTQuNjYyLjIxOS45ODR6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/wrench\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Wrench = createLucideIcon('wrench', __iconNode);\n\nexport default Wrench;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3',\n key: 'wmoenq',\n },\n ],\n ['path', { d: 'M12 9v4', key: 'juzpu7' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n];\n\n/**\n * @component @name TriangleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiIC8+CiAgPHBhdGggZD0iTTEyIDl2NCIgLz4KICA8cGF0aCBkPSJNMTIgMTdoLjAxIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/triangle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst TriangleAlert = createLucideIcon('triangle-alert', __iconNode);\n\nexport default TriangleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2',\n key: 'usdka0',\n },\n ],\n];\n\n/**\n * @component @name FolderOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderOpen = createLucideIcon('folder-open', __iconNode);\n\nexport default FolderOpen;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name Folder\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/folder\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Folder = createLucideIcon('folder', __iconNode);\n\nexport default Folder;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n key: '10ikf1',\n },\n ],\n];\n\n/**\n * @component @name Play\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/play\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Play = createLucideIcon('play', __iconNode);\n\nexport default Play;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2',\n key: '169zse',\n },\n ],\n];\n\n/**\n * @component @name Activity\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjIgMTJoLTIuNDhhMiAyIDAgMCAwLTEuOTMgMS40NmwtMi4zNSA4LjM2YS4yNS4yNSAwIDAgMS0uNDggMEw5LjI0IDIuMThhLjI1LjI1IDAgMCAwLS40OCAwbC0yLjM1IDguMzZBMiAyIDAgMCAxIDQuNDkgMTJIMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/activity\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Activity = createLucideIcon('activity', __iconNode);\n\nexport default Activity;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['circle', { cx: '10', cy: '12', r: '2', key: '737tya' }],\n ['path', { d: 'm20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22', key: 'wt3hpn' }],\n];\n\n/**\n * @component @name FileImage\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8Y2lyY2xlIGN4PSIxMCIgY3k9IjEyIiByPSIyIiAvPgogIDxwYXRoIGQ9Im0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-image\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileImage = createLucideIcon('file-image', __iconNode);\n\nexport default FileImage;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M11 18h2', key: '12mj7e' }],\n ['path', { d: 'M12 12v6', key: '3ahymv' }],\n ['path', { d: 'M9 13v-.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 .5.5v.5', key: 'qbrxap' }],\n];\n\n/**\n * @component @name FileType\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTEgMThoMiIgLz4KICA8cGF0aCBkPSJNMTIgMTJ2NiIgLz4KICA8cGF0aCBkPSJNOSAxM3YtLjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgLjUuNXYuNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file-type\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileType = createLucideIcon('file-type', __iconNode);\n\nexport default FileType;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n [\n 'path',\n { d: 'M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1', key: '1oajmo' },\n ],\n [\n 'path',\n { d: 'M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1', key: 'mpwhp6' },\n ],\n];\n\n/**\n * @component @name FileBraces\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTAgMTJhMSAxIDAgMCAwLTEgMXYxYTEgMSAwIDAgMS0xIDEgMSAxIDAgMCAxIDEgMXYxYTEgMSAwIDAgMCAxIDEiIC8+CiAgPHBhdGggZD0iTTE0IDE4YTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0xYTEgMSAwIDAgMC0xLTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/file-braces\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileBraces = createLucideIcon('file-braces', __iconNode);\n\nexport default FileBraces;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M9 15h6', key: 'cctwl0' }],\n ['path', { d: 'M12 18v-6', key: '17g6i2' }],\n];\n\n/**\n * @component @name FilePlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNOSAxNWg2IiAvPgogIDxwYXRoIGQ9Ik0xMiAxOHYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FilePlus = createLucideIcon('file-plus', __iconNode);\n\nexport default FilePlus;\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport * as React from 'react';\n\ntype AnyFunction = (...args: any[]) => any;\n\n// See https://github.com/webpack/webpack/issues/14814\nconst useReactEffectEvent = (React as any)[' useEffectEvent '.trim().toString()];\nconst useReactInsertionEffect = (React as any)[' useInsertionEffect '.trim().toString()];\n\n/**\n * Designed to approximate the behavior on `experimental_useEffectEvent` as best\n * as possible until its stable release, and back-fill it as a shim as needed.\n */\nexport function useEffectEvent<T extends AnyFunction>(callback?: T): T {\n if (typeof useReactEffectEvent === 'function') {\n return useReactEffectEvent(callback);\n }\n\n const ref = React.useRef<AnyFunction | undefined>(() => {\n throw new Error('Cannot call an event handler while rendering.');\n });\n // See https://github.com/webpack/webpack/issues/14814\n if (typeof useReactInsertionEffect === 'function') {\n useReactInsertionEffect(() => {\n ref.current = callback;\n });\n } else {\n useLayoutEffect(() => {\n ref.current = callback;\n });\n }\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => ref.current?.(...args)) as T, []);\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n];\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTAgOUg4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxM0g4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxN0g4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileText = createLucideIcon('file-text', __iconNode);\n\nexport default FileText;\n","/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access window outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access document outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n node: Node | null | undefined,\n activeDescendant = false\n): HTMLElement | null {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n // `activeElement` might be an empty object if we're interacting with elements\n // inside of an iframe.\n return null;\n }\n\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n\n if (activeDescendant) {\n const id = activeElement.getAttribute('aria-activedescendant');\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n\n return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n return element.tagName === 'IFRAME';\n}\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\nimport type { EntryOf } from './ordered-dictionary';\nimport { OrderedDict } from './ordered-dictionary';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\ninterface BaseItemData {\n id?: string;\n}\n\ntype ItemDataWithElement<\n ItemData extends BaseItemData,\n ItemElement extends HTMLElement,\n> = ItemData & {\n element: ItemElement;\n};\n\ntype ItemMap<ItemElement extends HTMLElement, ItemData extends BaseItemData> = OrderedDict<\n ItemElement,\n ItemDataWithElement<ItemData, ItemElement>\n>;\n\nfunction createCollection<\n ItemElement extends HTMLElement,\n ItemData extends BaseItemData = BaseItemData,\n>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionElement: CollectionElement | null;\n collectionRef: React.Ref<CollectionElement | null>;\n collectionRefObject: React.RefObject<CollectionElement | null>;\n itemMap: ItemMap<ItemElement, ItemData>;\n setItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>;\n };\n\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0,\n }\n );\n\n type CollectionState = [\n ItemMap: ItemMap<ItemElement, ItemData>,\n SetItemMap: React.Dispatch<React.SetStateAction<ItemMap<ItemElement, ItemData>>>,\n ];\n\n const CollectionProvider: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state?: CollectionState;\n }> = ({ state, ...props }) => {\n return state ? (\n <CollectionProviderImpl {...props} state={state} />\n ) : (\n <CollectionInit {...props} />\n );\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n\n const CollectionInit: React.FC<{\n children?: React.ReactNode;\n scope: any;\n }> = (props) => {\n const state = useInitCollection();\n return <CollectionProviderImpl {...props} state={state} />;\n };\n CollectionInit.displayName = PROVIDER_NAME + 'Init';\n\n const CollectionProviderImpl: React.FC<{\n children?: React.ReactNode;\n scope: any;\n state: CollectionState;\n }> = (props) => {\n const { scope, children, state } = props;\n const ref = React.useRef<CollectionElement>(null);\n const [collectionElement, setCollectionElement] = React.useState<CollectionElement | null>(\n null\n );\n const composeRefs = useComposedRefs(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n\n React.useEffect(() => {\n if (!collectionElement) return;\n\n const observer = getChildListObserver(() => {\n // setItemMap((map) => {\n // const copy = new OrderedDict(map).toSorted(([, a], [, b]) =>\n // !a.element || !b.element ? 0 : isElementPreceding(a.element, b.element) ? -1 : 1\n // );\n // // check if the order has changed\n // let index = -1;\n // for (const entry of copy) {\n // index++;\n // const key = map.keyAt(index)!;\n // const [copyKey] = entry;\n // if (key !== copyKey) {\n // // order has changed!\n // return copy;\n // }\n // }\n // return map;\n // });\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true,\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n\n return (\n <CollectionContextProvider\n scope={scope}\n itemMap={itemMap}\n setItemMap={setItemMap}\n collectionRef={composeRefs}\n collectionRefObject={ref}\n collectionElement={collectionElement}\n >\n {children}\n </CollectionContextProvider>\n );\n };\n\n CollectionProviderImpl.displayName = PROVIDER_NAME + 'Impl';\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const [element, setElement] = React.useState<ItemElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n const { setItemMap } = context;\n\n const itemDataRef = React.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n\n React.useEffect(() => {\n const itemData = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n\n if (!map.has(element)) {\n map.set(element, { ...(itemData as unknown as ItemData), element });\n return map.toSorted(sortByDocumentPosition);\n }\n\n return map\n .set(element, { ...(itemData as unknown as ItemData), element })\n .toSorted(sortByDocumentPosition);\n });\n\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs as any}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useInitCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useInitCollection() {\n return React.useState<ItemMap<ItemElement, ItemData>>(new OrderedDict());\n }\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const { itemMap } = useCollectionContext(name + 'CollectionConsumer', scope);\n\n return itemMap;\n }\n\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection,\n };\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n\nfunction shallowEqual(a: any, b: any) {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\n\nfunction isElementPreceding(a: Element, b: Element) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n\nfunction sortByDocumentPosition<E extends HTMLElement, T extends BaseItemData>(\n a: EntryOf<ItemMap<E, T>>,\n b: EntryOf<ItemMap<E, T>>\n) {\n return !a[1].element || !b[1].element\n ? 0\n : isElementPreceding(a[1].element, b[1].element)\n ? -1\n : 1;\n}\n\nfunction getChildListObserver(callback: () => void) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n callback();\n return;\n }\n }\n });\n\n return observer;\n}\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n // The event.animationName is unescaped for CSS syntax,\n // so we need to escape it to compare with the animationName computed from the style.\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n stylesRef.current = node ? getComputedStyle(node) : null;\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n Presence,\n //\n Root,\n};\nexport type { PresenceProps };\n","import * as React from 'react';\nimport { useEffectEvent } from '@radix-ui/react-use-effect-event';\n\ntype ChangeHandler<T> = (state: T) => void;\n\ninterface UseControllableStateParams<T> {\n prop: T | undefined;\n defaultProp: T;\n onChange: ChangeHandler<T> | undefined;\n caller: string;\n}\n\ninterface AnyAction {\n type: string;\n}\n\nconst SYNC_STATE = Symbol('RADIX:SYNC_STATE');\n\ninterface SyncStateAction<T> {\n type: typeof SYNC_STATE;\n state: T;\n}\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n userArgs: UseControllableStateParams<T>,\n initialState: S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, I, A extends AnyAction>(\n reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n userArgs: UseControllableStateParams<T>,\n initialArg: I,\n init: (i: I & { state: T }) => S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n userArgs: UseControllableStateParams<T>,\n initialArg: any,\n init?: (i: any) => Omit<S, 'state'>\n): [S & { state: T }, React.Dispatch<A>] {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== undefined;\n\n const onChange = useEffectEvent(onChangeProp);\n\n // OK to disable conditionally calling hooks here because they will always run\n // consistently in the same environment. Bundlers should be able to remove the\n // code block entirely in production.\n /* eslint-disable react-hooks/rules-of-hooks */\n if (process.env.NODE_ENV !== 'production') {\n const isControlledRef = React.useRef(controlledState !== undefined);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? 'controlled' : 'uncontrolled';\n const to = isControlled ? 'controlled' : 'uncontrolled';\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n /* eslint-enable react-hooks/rules-of-hooks */\n\n type InternalState = S & { state: T };\n const args: [InternalState] = [{ ...initialArg, state: defaultProp }];\n if (init) {\n // @ts-expect-error\n args.push(init);\n }\n\n const [internalState, dispatch] = React.useReducer(\n (state: InternalState, action: A | SyncStateAction<T>): InternalState => {\n if (action.type === SYNC_STATE) {\n return { ...state, state: action.state };\n }\n\n const next = reducer(state, action);\n if (isControlled && !Object.is(next.state, state.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n\n const uncontrolledState = internalState.state;\n const prevValueRef = React.useRef(uncontrolledState);\n React.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n\n const state = React.useMemo(() => {\n const isControlled = controlledState !== undefined;\n if (isControlled) {\n return { ...internalState, state: controlledState };\n }\n\n return internalState;\n }, [internalState, controlledState]);\n\n React.useEffect(() => {\n // Sync internal state for controlled components so that reducer is called\n // with the correct state values\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n\n return [state, dispatch as React.Dispatch<A>];\n}\n","// Not a real member because it shouldn't be accessible, but the super class\n// calls `set` which needs to read the instanciation state, so it can't be a\n// private member.\nconst __instanciated = new WeakMap<OrderedDict<any, any>, boolean>();\nexport class OrderedDict<K, V> extends Map<K, V> {\n #keys: K[];\n\n constructor(iterable?: Iterable<readonly [K, V]> | null | undefined);\n constructor(entries?: readonly (readonly [K, V])[] | null) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n\n set(key: K, value: V) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n\n insert(index: number, key: K, value: V) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n\n if (safeIndex === this.size || (has && safeIndex === this.size - 1) || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n\n const size = this.size + (has ? 0 : 1);\n\n // If you insert at, say, -2, without this bit you'd replace the\n // second-to-last item and push the rest up one, which means the new item is\n // 3rd to last. This isn't very intuitive; inserting at -2 is more like\n // saying \"make this item the second to last\".\n if (relativeIndex < 0) {\n actualIndex++;\n }\n\n const keys = [...this.#keys];\n let nextValue: V | undefined;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i]!;\n if (keys[i] === key) {\n nextKey = keys[i + 1]!;\n }\n if (has) {\n // delete first to ensure that the item is moved to the end\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1]!;\n const currentValue = nextValue!;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n\n with(index: number, key: K, value: V) {\n const copy = new OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n\n before(key: K) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key: K, newKey: K, value: V) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n\n after(key: K) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return undefined;\n }\n return this.entryAt(index);\n }\n\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key: K, newKey: K, value: V) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n\n first() {\n return this.entryAt(0);\n }\n\n last() {\n return this.entryAt(-1);\n }\n\n clear() {\n this.#keys = [];\n return super.clear();\n }\n\n delete(key: K) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n\n deleteAt(index: number) {\n const key = this.keyAt(index);\n if (key !== undefined) {\n return this.delete(key);\n }\n return false;\n }\n\n at(index: number) {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return this.get(key);\n }\n }\n\n entryAt(index: number): [K, V] | undefined {\n const key = at(this.#keys, index);\n if (key !== undefined) {\n return [key, this.get(key)!];\n }\n }\n\n indexOf(key: K) {\n return this.#keys.indexOf(key);\n }\n\n keyAt(index: number) {\n return at(this.#keys, index);\n }\n\n from(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n\n keyFrom(key: K, offset: number) {\n const index = this.indexOf(key);\n if (index === -1) {\n return undefined;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n\n find(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return undefined;\n }\n\n findIndex(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => boolean,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n\n filter<KK extends K, VV extends V>(\n predicate: (entry: [K, V], index: number, dict: OrderedDict<K, V>) => entry is [KK, VV],\n thisArg?: any\n ): OrderedDict<KK, VV>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ): OrderedDict<K, V>;\n\n filter(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n const entries: Array<[K, V]> = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new OrderedDict(entries);\n }\n\n map<U>(\n callbackfn: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => U,\n thisArg?: any\n ): OrderedDict<K, U> {\n const entries: [K, U][] = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new OrderedDict(entries);\n }\n\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduce(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduce<U>(\n callbackfn: (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduce<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0)!;\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V]\n ): [K, V];\n reduceRight(\n callbackfn: (\n previousValue: [K, V],\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => [K, V],\n initialValue: [K, V]\n ): [K, V];\n reduceRight<U>(\n callbackfn: (\n previousValue: [K, V],\n currentValue: U,\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n initialValue: U\n ): U;\n\n reduceRight<U>(\n ...args: [\n (\n previousValue: U,\n currentEntry: [K, V],\n currentIndex: number,\n dictionary: OrderedDict<K, V>\n ) => U,\n U?,\n ]\n ) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1)!;\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index)!;\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry as any;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n\n toSorted(compareFn?: (a: [K, V], b: [K, V]) => number): OrderedDict<K, V> {\n const entries = [...this.entries()].sort(compareFn);\n return new OrderedDict(entries);\n }\n\n toReversed(): OrderedDict<K, V> {\n const reversed = new OrderedDict<K, V>();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index)!;\n const element = this.get(key)!;\n reversed.set(key, element);\n }\n return reversed;\n }\n\n toSpliced(start: number, deleteCount?: number): OrderedDict<K, V>;\n toSpliced(start: number, deleteCount: number, ...items: [K, V][]): OrderedDict<K, V>;\n\n toSpliced(...args: [start: number, deleteCount: number, ...items: [K, V][]]) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new OrderedDict(entries);\n }\n\n slice(start?: number, end?: number) {\n const result = new OrderedDict<K, V>();\n let stop = this.size - 1;\n\n if (start === undefined) {\n return result;\n }\n\n if (start < 0) {\n start = start + this.size;\n }\n\n if (end !== undefined && end > 0) {\n stop = end - 1;\n }\n\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index)!;\n const element = this.get(key)!;\n result.set(key, element);\n }\n return result;\n }\n\n every(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n\n some(\n predicate: (entry: [K, V], index: number, dictionary: OrderedDict<K, V>) => unknown,\n thisArg?: any\n ) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n}\n\nexport type KeyOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<infer K, any> ? K : never;\nexport type ValueOf<D extends OrderedDict<any, any>> =\n D extends OrderedDict<any, infer V> ? V : never;\nexport type EntryOf<D extends OrderedDict<any, any>> = [KeyOf<D>, ValueOf<D>];\nexport type KeyFrom<E extends EntryOf<any>> = E[0];\nexport type ValueFrom<E extends EntryOf<any>> = E[1];\n\nfunction at<T>(array: ArrayLike<T>, index: number): T | undefined {\n if ('at' in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? undefined : array[actualIndex];\n}\n\nfunction toSafeIndex(array: ArrayLike<any>, index: number) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\n\nfunction toSafeInteger(number: number) {\n // eslint-disable-next-line no-self-compare\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key extends string, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache implementation using plain objects for simplicity\nexport const createLruCache = <Key extends string, Value>(\n maxCacheSize: number,\n): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache: Record<Key, Value> = Object.create(null)\n let previousCache: Record<Key, Value> = Object.create(null)\n\n const update = (key: Key, value: Value) => {\n cache[key] = value\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = Object.create(null)\n }\n }\n\n return {\n get(key) {\n let value = cache[key]\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nconst MODIFIER_SEPARATOR = ':'\nconst EMPTY_MODIFIERS: string[] = []\n\n// Pre-allocated result object shape for consistency\nconst createResultObject = (\n modifiers: string[],\n hasImportantModifier: boolean,\n baseClassName: string,\n maybePostfixModifierPosition?: number,\n isExternal?: boolean,\n): ParsedClassName => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal,\n})\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { prefix, experimentalParseClassName } = config\n\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = (className: string): ParsedClassName => {\n // Use simple array with push for better performance\n const modifiers: string[] = []\n\n let bracketDepth = 0\n let parenDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n const len = className.length\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index]!\n\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + 1\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') bracketDepth++\n else if (currentCharacter === ']') bracketDepth--\n else if (currentCharacter === '(') parenDepth++\n else if (currentCharacter === ')') parenDepth--\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.slice(modifierStart)\n\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier\n let hasImportantModifier = false\n\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1)\n hasImportantModifier = true\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n ) {\n baseClassName = baseClassNameWithImportantModifier.slice(1)\n hasImportantModifier = true\n }\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return createResultObject(\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n )\n }\n\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n className.startsWith(fullPrefix)\n ? parseClassNameOriginal(className.slice(fullPrefix.length))\n : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true)\n }\n\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n }\n\n return parseClassName\n}\n","import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map<string, number>()\n\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index) // High weights for sensitive mods\n })\n\n return (modifiers: readonly string[]): string[] => {\n const result: string[] = []\n let currentSegment: string[] = []\n\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i]!\n\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '['\n const isOrderSensitive = modifierWeights.has(modifier)\n\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n currentSegment = []\n }\n result.push(modifier)\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier)\n }\n }\n\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n }\n\n return result\n }\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = parseClassName(originalClassName)\n\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n let hasPostfixModifier = !!maybePostfixModifierPosition\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n // Fast path: skip sorting for empty or single modifier\n const variantModifier =\n modifiers.length === 0\n ? ''\n : modifiers.length === 1\n ? modifiers[0]!\n : sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport const twJoin = (...classLists: ClassNameValue[]): string => {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < classLists.length) {\n if ((argument = classLists[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string): string => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createTailwindMerge = (\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge => {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall: (classList: string) => string\n\n const initTailwindMerge = (classList: string) => {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n const tailwindMerge = (classList: string) => {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n functionToCall = initTailwindMerge\n\n return (...args: ClassNameValue[]) => functionToCall(twJoin(...args))\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nconst fallbackThemeArr: ThemeObject<DefaultThemeGroupIds>[DefaultThemeGroupIds] = []\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(\n key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>,\n): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || fallbackThemeArr\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryWeight = (value: string) => getIsArbitraryValue(value, isLabelWeight, isAny)\n\nexport const isArbitraryFamilyName = (value: string) =>\n getIsArbitraryValue(value, isLabelFamilyName, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n getIsArbitraryVariable(value, isLabelShadow, true)\n\nexport const isArbitraryVariableWeight = (value: string) =>\n getIsArbitraryVariable(value, isLabelWeight, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n value: string,\n testLabel: (label: string) => boolean,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst getIsArbitraryVariable = (\n value: string,\n testLabel: (label: string) => boolean,\n shouldMatchNoLabel = false,\n) => {\n const result = arbitraryVariableRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n return shouldMatchNoLabel\n }\n\n return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelWeight = (label: string) => label === 'number' || label === 'weight'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n\n const themeColor = fromTheme('color')\n const themeFont = fromTheme('font')\n const themeText = fromTheme('text')\n const themeFontWeight = fromTheme('font-weight')\n const themeTracking = fromTheme('tracking')\n const themeLeading = fromTheme('leading')\n const themeBreakpoint = fromTheme('breakpoint')\n const themeContainer = fromTheme('container')\n const themeSpacing = fromTheme('spacing')\n const themeRadius = fromTheme('radius')\n const themeShadow = fromTheme('shadow')\n const themeInsetShadow = fromTheme('inset-shadow')\n const themeTextShadow = fromTheme('text-shadow')\n const themeDropShadow = fromTheme('drop-shadow')\n const themeBlur = fromTheme('blur')\n const themePerspective = fromTheme('perspective')\n const themeAspect = fromTheme('aspect')\n const themeEase = fromTheme('ease')\n const themeAnimate = fromTheme('animate')\n\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n\n const scaleBreak = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const scalePosition = () =>\n [\n 'center',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top',\n 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top',\n 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom',\n 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom',\n ] as const\n const scalePositionWithArbitrary = () =>\n [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n const scaleUnambiguousSpacing = () =>\n [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n const scaleGridTemplateColsRows = () =>\n [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridColRowStartAndEnd = () =>\n [\n 'auto',\n { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleGridColRowStartOrEnd = () =>\n [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridAutoColsRows = () =>\n ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n const scaleAlignPrimaryAxis = () =>\n [\n 'start',\n 'end',\n 'center',\n 'between',\n 'around',\n 'evenly',\n 'stretch',\n 'baseline',\n 'center-safe',\n 'end-safe',\n ] as const\n const scaleAlignSecondaryAxis = () =>\n ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n const scaleSizing = () =>\n [\n isFraction,\n 'auto',\n 'full',\n 'dvw',\n 'dvh',\n 'lvw',\n 'lvh',\n 'svw',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingInline = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'dvw',\n 'lvw',\n 'svw',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingBlock = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'lh',\n 'dvh',\n 'lvh',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n const scaleBgPosition = () =>\n [\n ...scalePosition(),\n isArbitraryVariablePosition,\n isArbitraryPosition,\n { position: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n const scaleBgSize = () =>\n [\n 'auto',\n 'cover',\n 'contain',\n isArbitraryVariableSize,\n isArbitrarySize,\n { size: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleGradientStopPosition = () =>\n [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleRadius = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n 'full',\n themeRadius,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleBorderWidth = () =>\n ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n const scaleBlendMode = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const scaleMaskImagePosition = () =>\n [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n const scaleBlur = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeBlur,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n ],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [\n {\n aspect: [\n 'auto',\n 'square',\n isFraction,\n isArbitraryValue,\n isArbitraryVariable,\n themeAspect,\n ],\n },\n ],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [\n { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n ],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': scaleBreak() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': scaleBreak() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: scalePositionWithArbitrary() }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: scaleOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: scaleOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: scaleInset() }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': scaleInset() }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': scaleInset() }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [\n {\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset(),\n },\n ],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [\n {\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset(),\n },\n ],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{ 'inset-bs': scaleInset() }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{ 'inset-be': scaleInset() }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: scaleInset() }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: scaleInset() }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: scaleInset() }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: scaleInset() }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [\n {\n basis: [\n isFraction,\n 'full',\n 'auto',\n themeContainer,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [\n {\n order: [\n isInteger,\n 'first',\n 'last',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: scaleUnambiguousSpacing() }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [\n { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n ],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: scaleUnambiguousSpacing() }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: scaleUnambiguousSpacing() }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{ pbs: scaleUnambiguousSpacing() }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{ pbe: scaleUnambiguousSpacing() }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: scaleUnambiguousSpacing() }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: scaleUnambiguousSpacing() }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: scaleUnambiguousSpacing() }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: scaleUnambiguousSpacing() }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: scaleMargin() }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: scaleMargin() }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: scaleMargin() }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: scaleMargin() }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: scaleMargin() }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{ mbs: scaleMargin() }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{ mbe: scaleMargin() }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: scaleMargin() }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: scaleMargin() }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: scaleMargin() }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: scaleMargin() }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n\n // --------------\n // --- Sizing ---\n // --------------\n\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{ size: scaleSizing() }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{ inline: ['auto', ...scaleSizingInline()] }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{ 'min-inline': ['auto', ...scaleSizingInline()] }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{ 'max-inline': ['none', ...scaleSizingInline()] }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{ block: ['auto', ...scaleSizingBlock()] }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{ 'min-block': ['auto', ...scaleSizingBlock()] }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{ 'max-block': ['none', ...scaleSizingBlock()] }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [\n {\n 'min-w': [\n themeContainer,\n 'screen',\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none',\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n themeContainer,\n 'screen',\n 'none',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n { screen: [themeBreakpoint] },\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n // ------------------\n // --- Typography ---\n // ------------------\n\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [\n { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [\n {\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight],\n },\n ],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [\n {\n 'font-stretch': [\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n isPercent,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [\n { font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont] },\n ],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{ 'font-features': [isArbitraryValue] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [\n { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n ],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [\n { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: scaleColor() }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: scaleColor() }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n {\n decoration: [\n isNumber,\n 'from-font',\n 'auto',\n isArbitraryVariable,\n isArbitraryLength,\n ],\n },\n ],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: scaleColor() }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [\n { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: scaleUnambiguousSpacing() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // -------------------\n // --- Backgrounds ---\n // -------------------\n\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: scaleBgPosition() }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: scaleBgRepeat() }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: scaleBgSize() }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n {\n linear: [\n { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n },\n isArbitraryVariableImage,\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: scaleColor() }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: scaleColor() }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: scaleColor() }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: scaleColor() }],\n\n // ---------------\n // --- Borders ---\n // ---------------\n\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: scaleRadius() }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': scaleRadius() }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': scaleRadius() }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': scaleRadius() }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': scaleRadius() }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': scaleRadius() }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': scaleRadius() }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': scaleRadius() }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': scaleRadius() }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': scaleRadius() }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: scaleBorderWidth() }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{ 'border-bs': scaleBorderWidth() }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{ 'border-be': scaleBorderWidth() }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: scaleColor() }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': scaleColor() }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': scaleColor() }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': scaleColor() }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': scaleColor() }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{ 'border-bs': scaleColor() }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{ 'border-be': scaleColor() }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': scaleColor() }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': scaleColor() }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': scaleColor() }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': scaleColor() }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: scaleColor() }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [\n { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [\n { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: scaleColor() }],\n\n // ---------------\n // --- Effects ---\n // ---------------\n\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [\n {\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{ shadow: scaleColor() }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [\n {\n 'inset-shadow': [\n 'none',\n themeInsetShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{ ring: scaleBorderWidth() }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{ ring: scaleColor() }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [\n {\n 'text-shadow': [\n 'none',\n themeTextShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [\n { 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n 'mask-no-clip',\n ],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n 'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n 'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n 'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n 'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n 'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n 'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n 'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n 'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n 'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n 'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n 'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n 'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n 'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n 'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n 'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n 'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n 'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n 'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n 'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n 'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n 'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n 'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n 'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n 'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n 'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n 'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n 'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n 'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n 'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n 'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n 'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n 'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n 'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n 'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n 'mask-image-radial-size': [\n { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n ],\n 'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n 'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n 'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n 'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n 'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n 'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [\n { 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n ],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{ mask: scaleBgPosition() }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{ mask: scaleBgRepeat() }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{ mask: scaleBgSize() }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // ---------------\n // --- Filters ---\n // ---------------\n\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [\n {\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: scaleBlur() }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [\n {\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeDropShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [\n {\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [\n { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [\n { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [\n { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [\n { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [\n { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [\n { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [\n { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [\n { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n\n // --------------\n // --- Tables ---\n // --------------\n\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n '',\n 'all',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [\n { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------\n // --- Transforms ---\n // ------------------\n\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{ backface: ['hidden', 'visible'] }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [\n { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: scaleRotate() }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{ 'rotate-x': scaleRotate() }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{ 'rotate-y': scaleRotate() }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{ 'rotate-z': scaleRotate() }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: scaleScale() }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': scaleScale() }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': scaleScale() }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{ 'scale-z': scaleScale() }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{ skew: scaleSkew() }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': scaleSkew() }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': scaleSkew() }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [\n { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n ],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{ origin: scalePositionWithArbitrary() }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{ transform: ['3d', 'flat'] }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{ translate: scaleTranslate() }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': scaleTranslate() }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': scaleTranslate() }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{ 'translate-z': scaleTranslate() }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: scaleColor() }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: scaleColor() }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [\n { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n ],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', '', 'y', 'x'] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{ 'scroll-mbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{ 'scroll-mbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{ 'scroll-pbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{ 'scroll-pbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n {\n 'will-change': [\n 'auto',\n 'scroll',\n 'contents',\n 'transform',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n\n // -----------\n // --- SVG ---\n // -----------\n\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: ['none', ...scaleColor()] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [\n {\n stroke: [\n isNumber,\n isArbitraryVariableLength,\n isArbitraryLength,\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: [\n 'inset-x',\n 'inset-y',\n 'inset-bs',\n 'inset-be',\n 'start',\n 'end',\n 'top',\n 'right',\n 'bottom',\n 'left',\n ],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-x',\n 'border-w-y',\n 'border-w-s',\n 'border-w-e',\n 'border-w-bs',\n 'border-w-be',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-x',\n 'border-color-y',\n 'border-color-s',\n 'border-color-e',\n 'border-color-bs',\n 'border-color-be',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mbs',\n 'scroll-mbe',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pbs',\n 'scroll-pbe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n orderSensitiveModifiers: [\n '*',\n '**',\n 'after',\n 'backdrop',\n 'before',\n 'details-content',\n 'file',\n 'first-letter',\n 'first-line',\n 'marker',\n 'placeholder',\n 'selection',\n ],\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { AnyConfig, ConfigExtension, NoInfer } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: AnyConfig,\n {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n overrideConfigProperties(baseConfig.theme, override.theme)\n overrideConfigProperties(baseConfig.classGroups, override.classGroups)\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)\n overrideConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n override.conflictingClassGroupModifiers,\n )\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)\n\n mergeConfigProperties(baseConfig.theme, extend.theme)\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups)\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)\n mergeConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n extend.conflictingClassGroupModifiers,\n )\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key)\n }\n }\n}\n\nconst mergeArrayProperties = <Key extends string>(\n baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n key: Key,\n) => {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n"],"names":["concatArrays","Array","array1","length","array2","i","createClassValidatorObject","validator","createClassPartObject","nextPart","Map","validators","classGroupId","CLASS_PART_SEPARATOR","createClassGroupUtils","config","className","endsWith","classParts","split","startIndex","getGroupRecursive","classMap","getConflictingClassGroupIds","hasPostfixModifier","modifierConflicts","conflictingClassGroupModifiers","conflictingClassGroups","baseConflicts","EMPTY_CONFLICTS","getClassGroupId","classPartObject","classPathsLength","currentClassPart","nextClassPartObject","get","useComposedRefs","result","join","slice","validatorsLength","validatorObj","classRest","undefined","indexOf","content","colonIndex","property","ARBITRARY_PROPERTY_PREFIX","theme","processClassGroups","classGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","getPart","isThemeGetter","processObjectDefinition","Object","entries","key","value","path","parts","part","current","next","set","func","createLruCache","maxCacheSize","cacheSize","create","update","cache","previousCache","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","parseClassName","bracketDepth","parenDepth","postfixModifierPosition","index","currentCharacter","MODIFIER_SEPARATOR","modifierStart","baseClassNameWithImportantModifier","IMPORTANT_MODIFIER","startsWith","prefix","fullPrefix","parseClassNameOriginal","experimentalParseClassName","createSortModifiers","modifierWeights","orderSensitiveModifiers","forEach","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","has","sort","push","createConfigUtils","sortModifiers","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","trim","classNames","originalClassName","substring","variantModifier","modifierId","classId","classGroupsInConflict","conflictGroups","twJoin","classLists","argument","string","resolvedValue","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","initTailwindMerge","previousConfig","createConfigCurrent","cacheSet","functionToCall","tailwindMerge","cachedResult","cacheGet","args","fallbackThemeArr","themeGetter","arbitraryVariableRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","fractionRegex","test","isNumber","Number","isInteger","isPercent","tshirtUnitRegex","isAny","isNever","isShadow","isArbitraryValue","isArbitraryVariable","getIsArbitraryValue","isLabelSize","arbitraryValueRegex","isArbitraryLength","isLabelLength","isLengthOnly","isLabelNumber","isLabelWeight","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isLabelImage","isImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","exec","shouldMatchNoLabel","label","getDefaultConfig","themeColor","fromTheme","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeContainer","themeSpacing","themeRadius","themeInsetShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","position","scaleBgRepeat","repeat","scaleBgSize","isArbitrarySize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","animate","aspect","blur","isTshirtSize","breakpoint","color","container","ease","font","isAnyNonArbitrary","leading","perspective","radius","shadow","spacing","text","tracking","columns","box","display","sr","float","clear","isolation","object","scalePositionWithArbitrary","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","items","baseline","self","p","px","py","ps","pe","pbs","pbe","pt","pr","pb","pl","m","mx","my","ms","me","mbs","mbe","mt","mr","mb","ml","size","inline","block","w","screen","h","isArbitraryWeight","isArbitraryFamilyName","isArbitraryNumber","list","placeholder","decoration","indent","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","isArbitraryImage","from","via","rounded","border","divide","outline","themeShadow","ring","themeTextShadow","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","mergeConfigs","baseConfig","extend","override","overrideProperty","overrideConfigProperties","mergeConfigProperties","mergeArrayProperties","baseObject","overrideKey","overrideValue","overrideObject","mergeObject","mergeValue","concat","extendTailwindMerge","configExtension","createConfig","twMerge"],"mappings":"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","ignoreList":[0,1,2,3,4,5,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]}