clawmini 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/.gemini/settings.json +46 -0
  2. package/.prettierrc +7 -0
  3. package/GEMINI.md +11 -0
  4. package/README.md +137 -0
  5. package/dist/adapter-discord/index.d.mts +5 -0
  6. package/dist/adapter-discord/index.d.mts.map +1 -0
  7. package/dist/adapter-discord/index.mjs +456 -0
  8. package/dist/adapter-discord/index.mjs.map +1 -0
  9. package/dist/chats-DKgTeU7i.mjs +91 -0
  10. package/dist/chats-DKgTeU7i.mjs.map +1 -0
  11. package/dist/chats-Zd_HXDHx.mjs +29 -0
  12. package/dist/chats-Zd_HXDHx.mjs.map +1 -0
  13. package/dist/cli/index.d.mts +1 -0
  14. package/dist/cli/index.mjs +850 -0
  15. package/dist/cli/index.mjs.map +1 -0
  16. package/dist/cli/lite.d.mts +1 -0
  17. package/dist/cli/lite.mjs +4434 -0
  18. package/dist/cli/lite.mjs.map +1 -0
  19. package/dist/daemon/index.d.mts +5 -0
  20. package/dist/daemon/index.d.mts.map +1 -0
  21. package/dist/daemon/index.mjs +1222 -0
  22. package/dist/daemon/index.mjs.map +1 -0
  23. package/dist/fetch-BjZVyU3Z.mjs +37 -0
  24. package/dist/fetch-BjZVyU3Z.mjs.map +1 -0
  25. package/dist/fs-B5wW0oaH.mjs +14 -0
  26. package/dist/fs-B5wW0oaH.mjs.map +1 -0
  27. package/dist/lite-Dl7WXyaH.mjs +80 -0
  28. package/dist/lite-Dl7WXyaH.mjs.map +1 -0
  29. package/dist/rolldown-runtime-95iHPtFO.mjs +18 -0
  30. package/dist/web/_app/env.js +1 -0
  31. package/dist/web/_app/immutable/assets/0.GI4C4dpV.css +1 -0
  32. package/dist/web/_app/immutable/chunks/B5abRDXp.js +1 -0
  33. package/dist/web/_app/immutable/chunks/B8yYFADm.js +1 -0
  34. package/dist/web/_app/immutable/chunks/BPy8HLo7.js +5 -0
  35. package/dist/web/_app/immutable/chunks/Bi0jeV7Q.js +1 -0
  36. package/dist/web/_app/immutable/chunks/BmUXQ3wy.js +2 -0
  37. package/dist/web/_app/immutable/chunks/C3k55nDF.js +1 -0
  38. package/dist/web/_app/immutable/chunks/COekwvP2.js +1 -0
  39. package/dist/web/_app/immutable/chunks/CSvS_NwK.js +1 -0
  40. package/dist/web/_app/immutable/chunks/CpaGRn9L.js +1 -0
  41. package/dist/web/_app/immutable/chunks/CyNaE55B.js +1 -0
  42. package/dist/web/_app/immutable/chunks/DG5RZBw-.js +2 -0
  43. package/dist/web/_app/immutable/chunks/Dc-UOHw9.js +1 -0
  44. package/dist/web/_app/immutable/chunks/DcrmIfTj.js +1 -0
  45. package/dist/web/_app/immutable/chunks/ZkLyk0mE.js +1 -0
  46. package/dist/web/_app/immutable/entry/app.B-vZe7PN.js +2 -0
  47. package/dist/web/_app/immutable/entry/start.oP1AgKhs.js +1 -0
  48. package/dist/web/_app/immutable/nodes/0.B5WFN0zw.js +1 -0
  49. package/dist/web/_app/immutable/nodes/1.D1wtJb2k.js +1 -0
  50. package/dist/web/_app/immutable/nodes/2.CK3CLC0f.js +1 -0
  51. package/dist/web/_app/immutable/nodes/3.BB5wCoBf.js +4 -0
  52. package/dist/web/_app/immutable/nodes/4.Dr2jvAXK.js +1 -0
  53. package/dist/web/_app/immutable/nodes/5.BJl7oM3b.js +1 -0
  54. package/dist/web/_app/version.json +1 -0
  55. package/dist/web/index.html +37 -0
  56. package/dist/web/robots.txt +3 -0
  57. package/dist/workspace-CSgfo_2J.mjs +383 -0
  58. package/dist/workspace-CSgfo_2J.mjs.map +1 -0
  59. package/docs/01_chats/development_log.md +36 -0
  60. package/docs/01_chats/notes.md +27 -0
  61. package/docs/01_chats/prd.md +47 -0
  62. package/docs/01_chats/questions.md +19 -0
  63. package/docs/01_chats/tickets.md +67 -0
  64. package/docs/02_sessions/development_log.md +79 -0
  65. package/docs/02_sessions/notes.md +40 -0
  66. package/docs/02_sessions/prd.md +75 -0
  67. package/docs/02_sessions/questions.md +7 -0
  68. package/docs/02_sessions/tickets.md +68 -0
  69. package/docs/03_web_interface/development_log.md +60 -0
  70. package/docs/03_web_interface/notes.md +29 -0
  71. package/docs/03_web_interface/prd.md +42 -0
  72. package/docs/03_web_interface/questions.md +8 -0
  73. package/docs/03_web_interface/tickets.md +59 -0
  74. package/docs/04_agents/development_log.md +54 -0
  75. package/docs/04_agents/notes.md +45 -0
  76. package/docs/04_agents/prd.md +47 -0
  77. package/docs/04_agents/questions.md +13 -0
  78. package/docs/04_agents/tickets.md +107 -0
  79. package/docs/05_routers/development_log.md +13 -0
  80. package/docs/05_routers/notes.md +40 -0
  81. package/docs/05_routers/prd.md +55 -0
  82. package/docs/05_routers/questions.md +21 -0
  83. package/docs/05_routers/tickets.md +109 -0
  84. package/docs/06_agent_templates/development_log.md +38 -0
  85. package/docs/06_agent_templates/notes.md +25 -0
  86. package/docs/06_agent_templates/prd.md +34 -0
  87. package/docs/06_agent_templates/questions.md +11 -0
  88. package/docs/06_agent_templates/tickets.md +49 -0
  89. package/docs/06_cron/development_log.md +51 -0
  90. package/docs/06_cron/notes.md +14 -0
  91. package/docs/06_cron/prd.md +92 -0
  92. package/docs/06_cron/questions.md +15 -0
  93. package/docs/06_cron/tickets.md +75 -0
  94. package/docs/07_web_chat_ux/development_log.md +30 -0
  95. package/docs/07_web_chat_ux/notes.md +25 -0
  96. package/docs/07_web_chat_ux/prd.md +46 -0
  97. package/docs/07_web_chat_ux/questions.md +7 -0
  98. package/docs/07_web_chat_ux/tickets.md +48 -0
  99. package/docs/08_agent_api/development_log.md +52 -0
  100. package/docs/08_agent_api/notes.md +31 -0
  101. package/docs/08_agent_api/prd.md +56 -0
  102. package/docs/08_agent_api/questions.md +14 -0
  103. package/docs/08_agent_api/tickets.md +104 -0
  104. package/docs/09_agent_fallbacks/development_log.md +52 -0
  105. package/docs/09_agent_fallbacks/notes.md +40 -0
  106. package/docs/09_agent_fallbacks/prd.md +55 -0
  107. package/docs/09_agent_fallbacks/questions.md +10 -0
  108. package/docs/09_agent_fallbacks/tickets.md +88 -0
  109. package/docs/09_discord_adapter/development_log.md +95 -0
  110. package/docs/09_discord_adapter/notes.md +18 -0
  111. package/docs/09_discord_adapter/prd.md +57 -0
  112. package/docs/09_discord_adapter/questions.md +16 -0
  113. package/docs/09_discord_adapter/tickets.md +116 -0
  114. package/docs/10_file_attachments/development_log.md +55 -0
  115. package/docs/10_file_attachments/notes.md +59 -0
  116. package/docs/10_file_attachments/prd.md +73 -0
  117. package/docs/10_file_attachments/questions.md +15 -0
  118. package/docs/10_file_attachments/tickets.md +88 -0
  119. package/docs/11_message_verbosity/development_log.md +43 -0
  120. package/docs/11_message_verbosity/notes.md +26 -0
  121. package/docs/11_message_verbosity/prd.md +44 -0
  122. package/docs/11_message_verbosity/questions.md +8 -0
  123. package/docs/11_message_verbosity/tickets.md +33 -0
  124. package/docs/12_environments/development_log.md +43 -0
  125. package/docs/12_environments/notes.md +45 -0
  126. package/docs/12_environments/prd.md +113 -0
  127. package/docs/12_environments/questions.md +17 -0
  128. package/docs/12_environments/tickets.md +87 -0
  129. package/docs/12_setup_flow_improvements/development_log.md +40 -0
  130. package/docs/12_setup_flow_improvements/notes.md +34 -0
  131. package/docs/12_setup_flow_improvements/prd.md +35 -0
  132. package/docs/12_setup_flow_improvements/questions.md +8 -0
  133. package/docs/12_setup_flow_improvements/tickets.md +122 -0
  134. package/docs/13_discord_typing_indicators/development_log.md +38 -0
  135. package/docs/13_discord_typing_indicators/notes.md +18 -0
  136. package/docs/13_discord_typing_indicators/prd.md +41 -0
  137. package/docs/13_discord_typing_indicators/questions.md +6 -0
  138. package/docs/13_discord_typing_indicators/tickets.md +60 -0
  139. package/docs/14_interruptions/development_log.md +50 -0
  140. package/docs/14_interruptions/notes.md +38 -0
  141. package/docs/14_interruptions/prd.md +46 -0
  142. package/docs/14_interruptions/questions.md +12 -0
  143. package/docs/14_interruptions/tickets.md +69 -0
  144. package/docs/15_sandbox_policies/development_log.md +95 -0
  145. package/docs/15_sandbox_policies/notes.md +33 -0
  146. package/docs/15_sandbox_policies/prd.md +163 -0
  147. package/docs/15_sandbox_policies/questions.md +10 -0
  148. package/docs/15_sandbox_policies/tickets.md +196 -0
  149. package/docs/CHECKS.md +9 -0
  150. package/docs/guides/discord_adapter_setup.md +69 -0
  151. package/docs/guides/sandbox_policies.md +76 -0
  152. package/eslint.config.js +47 -0
  153. package/napkin.md +21 -0
  154. package/package.json +50 -0
  155. package/scripts/create_worktree.sh +49 -0
  156. package/scripts/get_pr_comments.sh +36 -0
  157. package/src/adapter-discord/client.test.ts +65 -0
  158. package/src/adapter-discord/client.ts +41 -0
  159. package/src/adapter-discord/config.test.ts +156 -0
  160. package/src/adapter-discord/config.ts +61 -0
  161. package/src/adapter-discord/forwarder.test.ts +493 -0
  162. package/src/adapter-discord/forwarder.ts +246 -0
  163. package/src/adapter-discord/index.test.ts +399 -0
  164. package/src/adapter-discord/index.ts +147 -0
  165. package/src/adapter-discord/state.test.ts +65 -0
  166. package/src/adapter-discord/state.ts +44 -0
  167. package/src/cli/client.ts +46 -0
  168. package/src/cli/commands/agents.ts +138 -0
  169. package/src/cli/commands/chats.ts +79 -0
  170. package/src/cli/commands/down.ts +32 -0
  171. package/src/cli/commands/environments.ts +39 -0
  172. package/src/cli/commands/export-lite.ts +62 -0
  173. package/src/cli/commands/init.ts +79 -0
  174. package/src/cli/commands/jobs.ts +141 -0
  175. package/src/cli/commands/messages.ts +103 -0
  176. package/src/cli/commands/up.ts +26 -0
  177. package/src/cli/commands/web-api/agents.ts +138 -0
  178. package/src/cli/commands/web-api/chats.ts +213 -0
  179. package/src/cli/commands/web-api/utils.ts +27 -0
  180. package/src/cli/commands/web.ts +105 -0
  181. package/src/cli/e2e/adapter-discord.test.ts +76 -0
  182. package/src/cli/e2e/agents.test.ts +140 -0
  183. package/src/cli/e2e/basic.test.ts +43 -0
  184. package/src/cli/e2e/cron.test.ts +132 -0
  185. package/src/cli/e2e/daemon.test.ts +293 -0
  186. package/src/cli/e2e/environments.test.ts +66 -0
  187. package/src/cli/e2e/export-lite-func.test.ts +155 -0
  188. package/src/cli/e2e/export-lite.test.ts +51 -0
  189. package/src/cli/e2e/fallbacks.test.ts +169 -0
  190. package/src/cli/e2e/global-setup.ts +15 -0
  191. package/src/cli/e2e/init.test.ts +70 -0
  192. package/src/cli/e2e/messages.test.ts +294 -0
  193. package/src/cli/e2e/requests.test.ts +165 -0
  194. package/src/cli/e2e/utils.ts +66 -0
  195. package/src/cli/index.test.ts +7 -0
  196. package/src/cli/index.ts +29 -0
  197. package/src/cli/lite.ts +247 -0
  198. package/src/cli/utils.ts +4 -0
  199. package/src/daemon/auth.test.ts +50 -0
  200. package/src/daemon/auth.ts +69 -0
  201. package/src/daemon/chats.ts +26 -0
  202. package/src/daemon/cron.test.ts +28 -0
  203. package/src/daemon/cron.ts +159 -0
  204. package/src/daemon/events.ts +15 -0
  205. package/src/daemon/index.ts +212 -0
  206. package/src/daemon/message-agent.test.ts +132 -0
  207. package/src/daemon/message-extraction.test.ts +166 -0
  208. package/src/daemon/message-fallbacks.test.ts +313 -0
  209. package/src/daemon/message-interruption.test.ts +125 -0
  210. package/src/daemon/message-queue.test.ts +143 -0
  211. package/src/daemon/message-router.test.ts +106 -0
  212. package/src/daemon/message-session.test.ts +127 -0
  213. package/src/daemon/message-test-utils.ts +41 -0
  214. package/src/daemon/message-typing.test.ts +93 -0
  215. package/src/daemon/message-verbosity.test.ts +127 -0
  216. package/src/daemon/message.ts +600 -0
  217. package/src/daemon/observation.test.ts +118 -0
  218. package/src/daemon/policy-request-service.test.ts +87 -0
  219. package/src/daemon/policy-request-service.ts +62 -0
  220. package/src/daemon/policy-utils.test.ts +138 -0
  221. package/src/daemon/policy-utils.ts +152 -0
  222. package/src/daemon/queue.test.ts +89 -0
  223. package/src/daemon/queue.ts +87 -0
  224. package/src/daemon/request-store.test.ts +103 -0
  225. package/src/daemon/request-store.ts +96 -0
  226. package/src/daemon/router-policy-request.test.ts +99 -0
  227. package/src/daemon/router.test.ts +380 -0
  228. package/src/daemon/router.ts +510 -0
  229. package/src/daemon/routers/slash-command.test.ts +145 -0
  230. package/src/daemon/routers/slash-command.ts +58 -0
  231. package/src/daemon/routers/slash-interrupt.test.ts +30 -0
  232. package/src/daemon/routers/slash-interrupt.ts +7 -0
  233. package/src/daemon/routers/slash-new.test.ts +59 -0
  234. package/src/daemon/routers/slash-new.ts +14 -0
  235. package/src/daemon/routers/slash-policies.test.ts +167 -0
  236. package/src/daemon/routers/slash-policies.ts +131 -0
  237. package/src/daemon/routers/slash-stop.test.ts +30 -0
  238. package/src/daemon/routers/slash-stop.ts +3 -0
  239. package/src/daemon/routers/types.ts +10 -0
  240. package/src/daemon/routers/utils.ts +22 -0
  241. package/src/daemon/routers.test.ts +141 -0
  242. package/src/daemon/routers.ts +115 -0
  243. package/src/daemon/utils/spawn.ts +61 -0
  244. package/src/shared/agent-utils.ts +30 -0
  245. package/src/shared/chats.test.ts +112 -0
  246. package/src/shared/chats.ts +164 -0
  247. package/src/shared/config.test.ts +90 -0
  248. package/src/shared/config.ts +100 -0
  249. package/src/shared/event-source.ts +121 -0
  250. package/src/shared/fetch.ts +45 -0
  251. package/src/shared/lite.ts +129 -0
  252. package/src/shared/policies.ts +24 -0
  253. package/src/shared/utils/env.ts +27 -0
  254. package/src/shared/utils/fs.ts +13 -0
  255. package/src/shared/workspace.test.ts +345 -0
  256. package/src/shared/workspace.ts +500 -0
  257. package/templates/environments/cladding/env.json +7 -0
  258. package/templates/environments/macos/env.json +8 -0
  259. package/templates/environments/macos/sandbox.sb +21 -0
  260. package/templates/environments/macos-proxy/allowlist.txt +1 -0
  261. package/templates/environments/macos-proxy/env.json +14 -0
  262. package/templates/environments/macos-proxy/proxy.mjs +86 -0
  263. package/templates/environments/macos-proxy/sandbox.sb +34 -0
  264. package/templates/gemini/settings.json +11 -0
  265. package/templates/gemini-claw/.gemini/hooks/clawmini-logging.sh +17 -0
  266. package/templates/gemini-claw/.gemini/settings.json +24 -0
  267. package/templates/gemini-claw/.gemini/skills/clawmini-jobs/SKILL.md +40 -0
  268. package/templates/gemini-claw/.gemini/system.md +98 -0
  269. package/templates/gemini-claw/BOOTSTRAP.md +54 -0
  270. package/templates/gemini-claw/GEMINI.md +107 -0
  271. package/templates/gemini-claw/HEARTBEAT.md +3 -0
  272. package/templates/gemini-claw/MEMORY.md +2 -0
  273. package/templates/gemini-claw/SOUL.md +42 -0
  274. package/templates/gemini-claw/TOOLS.md +38 -0
  275. package/templates/gemini-claw/USER.md +15 -0
  276. package/templates/gemini-claw/memory/.gitkeep +0 -0
  277. package/templates/gemini-claw/settings.json +24 -0
  278. package/templates/opencode/settings.json +11 -0
  279. package/tsconfig.json +42 -0
  280. package/tsdown.config.ts +19 -0
  281. package/vitest.config.ts +9 -0
  282. package/web/.svelte-kit/ambient.d.ts +382 -0
  283. package/web/.svelte-kit/generated/client/app.js +35 -0
  284. package/web/.svelte-kit/generated/client/matchers.js +1 -0
  285. package/web/.svelte-kit/generated/client/nodes/0.js +3 -0
  286. package/web/.svelte-kit/generated/client/nodes/1.js +1 -0
  287. package/web/.svelte-kit/generated/client/nodes/2.js +1 -0
  288. package/web/.svelte-kit/generated/client/nodes/3.js +1 -0
  289. package/web/.svelte-kit/generated/client/nodes/4.js +3 -0
  290. package/web/.svelte-kit/generated/client/nodes/5.js +3 -0
  291. package/web/.svelte-kit/generated/client-optimized/app.js +35 -0
  292. package/web/.svelte-kit/generated/client-optimized/matchers.js +1 -0
  293. package/web/.svelte-kit/generated/client-optimized/nodes/0.js +3 -0
  294. package/web/.svelte-kit/generated/client-optimized/nodes/1.js +1 -0
  295. package/web/.svelte-kit/generated/client-optimized/nodes/2.js +1 -0
  296. package/web/.svelte-kit/generated/client-optimized/nodes/3.js +1 -0
  297. package/web/.svelte-kit/generated/client-optimized/nodes/4.js +3 -0
  298. package/web/.svelte-kit/generated/client-optimized/nodes/5.js +3 -0
  299. package/web/.svelte-kit/generated/root.js +3 -0
  300. package/web/.svelte-kit/generated/root.svelte +68 -0
  301. package/web/.svelte-kit/generated/server/internal.js +53 -0
  302. package/web/.svelte-kit/non-ambient.d.ts +46 -0
  303. package/web/.svelte-kit/output/client/.vite/manifest.json +251 -0
  304. package/web/.svelte-kit/output/client/_app/immutable/assets/0.GI4C4dpV.css +1 -0
  305. package/web/.svelte-kit/output/client/_app/immutable/chunks/B5abRDXp.js +1 -0
  306. package/web/.svelte-kit/output/client/_app/immutable/chunks/B8yYFADm.js +1 -0
  307. package/web/.svelte-kit/output/client/_app/immutable/chunks/BPy8HLo7.js +5 -0
  308. package/web/.svelte-kit/output/client/_app/immutable/chunks/Bi0jeV7Q.js +1 -0
  309. package/web/.svelte-kit/output/client/_app/immutable/chunks/BmUXQ3wy.js +2 -0
  310. package/web/.svelte-kit/output/client/_app/immutable/chunks/C3k55nDF.js +1 -0
  311. package/web/.svelte-kit/output/client/_app/immutable/chunks/COekwvP2.js +1 -0
  312. package/web/.svelte-kit/output/client/_app/immutable/chunks/CSvS_NwK.js +1 -0
  313. package/web/.svelte-kit/output/client/_app/immutable/chunks/CpaGRn9L.js +1 -0
  314. package/web/.svelte-kit/output/client/_app/immutable/chunks/CyNaE55B.js +1 -0
  315. package/web/.svelte-kit/output/client/_app/immutable/chunks/DG5RZBw-.js +2 -0
  316. package/web/.svelte-kit/output/client/_app/immutable/chunks/Dc-UOHw9.js +1 -0
  317. package/web/.svelte-kit/output/client/_app/immutable/chunks/DcrmIfTj.js +1 -0
  318. package/web/.svelte-kit/output/client/_app/immutable/chunks/ZkLyk0mE.js +1 -0
  319. package/web/.svelte-kit/output/client/_app/immutable/entry/app.B-vZe7PN.js +2 -0
  320. package/web/.svelte-kit/output/client/_app/immutable/entry/start.oP1AgKhs.js +1 -0
  321. package/web/.svelte-kit/output/client/_app/immutable/nodes/0.B5WFN0zw.js +1 -0
  322. package/web/.svelte-kit/output/client/_app/immutable/nodes/1.D1wtJb2k.js +1 -0
  323. package/web/.svelte-kit/output/client/_app/immutable/nodes/2.CK3CLC0f.js +1 -0
  324. package/web/.svelte-kit/output/client/_app/immutable/nodes/3.BB5wCoBf.js +4 -0
  325. package/web/.svelte-kit/output/client/_app/immutable/nodes/4.Dr2jvAXK.js +1 -0
  326. package/web/.svelte-kit/output/client/_app/immutable/nodes/5.BJl7oM3b.js +1 -0
  327. package/web/.svelte-kit/output/client/_app/version.json +1 -0
  328. package/web/.svelte-kit/output/client/robots.txt +3 -0
  329. package/web/.svelte-kit/output/prerendered/dependencies/_app/env.js +1 -0
  330. package/web/.svelte-kit/output/server/.vite/manifest.json +215 -0
  331. package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.GI4C4dpV.css +1 -0
  332. package/web/.svelte-kit/output/server/chunks/Icon.js +153 -0
  333. package/web/.svelte-kit/output/server/chunks/bot.js +2753 -0
  334. package/web/.svelte-kit/output/server/chunks/client.js +47 -0
  335. package/web/.svelte-kit/output/server/chunks/environment.js +34 -0
  336. package/web/.svelte-kit/output/server/chunks/exports.js +231 -0
  337. package/web/.svelte-kit/output/server/chunks/false.js +4 -0
  338. package/web/.svelte-kit/output/server/chunks/index-server.js +20 -0
  339. package/web/.svelte-kit/output/server/chunks/index.js +24 -0
  340. package/web/.svelte-kit/output/server/chunks/internal.js +133 -0
  341. package/web/.svelte-kit/output/server/chunks/plus.js +81 -0
  342. package/web/.svelte-kit/output/server/chunks/root.js +4076 -0
  343. package/web/.svelte-kit/output/server/chunks/shared.js +789 -0
  344. package/web/.svelte-kit/output/server/chunks/utils.js +43 -0
  345. package/web/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +11 -0
  346. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +3944 -0
  347. package/web/.svelte-kit/output/server/entries/pages/_layout.ts.js +28 -0
  348. package/web/.svelte-kit/output/server/entries/pages/_page.svelte.js +7 -0
  349. package/web/.svelte-kit/output/server/entries/pages/agents/_page.svelte.js +379 -0
  350. package/web/.svelte-kit/output/server/entries/pages/chats/_id_/_page.svelte.js +292 -0
  351. package/web/.svelte-kit/output/server/entries/pages/chats/_id_/_page.ts.js +17 -0
  352. package/web/.svelte-kit/output/server/entries/pages/chats/_id_/settings/_page.svelte.js +259 -0
  353. package/web/.svelte-kit/output/server/entries/pages/chats/_id_/settings/_page.ts.js +17 -0
  354. package/web/.svelte-kit/output/server/index.js +3748 -0
  355. package/web/.svelte-kit/output/server/internal.js +14 -0
  356. package/web/.svelte-kit/output/server/manifest-full.js +63 -0
  357. package/web/.svelte-kit/output/server/manifest.js +63 -0
  358. package/web/.svelte-kit/output/server/nodes/0.js +13 -0
  359. package/web/.svelte-kit/output/server/nodes/1.js +8 -0
  360. package/web/.svelte-kit/output/server/nodes/2.js +8 -0
  361. package/web/.svelte-kit/output/server/nodes/3.js +8 -0
  362. package/web/.svelte-kit/output/server/nodes/4.js +13 -0
  363. package/web/.svelte-kit/output/server/nodes/5.js +13 -0
  364. package/web/.svelte-kit/output/server/remote-entry.js +557 -0
  365. package/web/.svelte-kit/tsconfig.json +67 -0
  366. package/web/.svelte-kit/types/route_meta_data.json +17 -0
  367. package/web/.svelte-kit/types/src/routes/$types.d.ts +26 -0
  368. package/web/.svelte-kit/types/src/routes/agents/$types.d.ts +18 -0
  369. package/web/.svelte-kit/types/src/routes/chats/[id]/$types.d.ts +21 -0
  370. package/web/.svelte-kit/types/src/routes/chats/[id]/proxy+page.ts +20 -0
  371. package/web/.svelte-kit/types/src/routes/chats/[id]/settings/$types.d.ts +21 -0
  372. package/web/.svelte-kit/types/src/routes/chats/[id]/settings/proxy+page.ts +19 -0
  373. package/web/.svelte-kit/types/src/routes/proxy+layout.ts +35 -0
  374. package/web/README.md +42 -0
  375. package/web/components.json +16 -0
  376. package/web/package.json +41 -0
  377. package/web/src/app.css +121 -0
  378. package/web/src/app.d.ts +13 -0
  379. package/web/src/app.html +11 -0
  380. package/web/src/demo.spec.ts +7 -0
  381. package/web/src/lib/app-state.svelte.ts +3 -0
  382. package/web/src/lib/assets/favicon.svg +1 -0
  383. package/web/src/lib/components/app/app-sidebar-test-wrapper.svelte +10 -0
  384. package/web/src/lib/components/app/app-sidebar.svelte +171 -0
  385. package/web/src/lib/components/app/app-sidebar.svelte.spec.ts +13 -0
  386. package/web/src/lib/components/ui/button/button.svelte +82 -0
  387. package/web/src/lib/components/ui/button/index.ts +17 -0
  388. package/web/src/lib/components/ui/dialog/dialog-close.svelte +7 -0
  389. package/web/src/lib/components/ui/dialog/dialog-content.svelte +45 -0
  390. package/web/src/lib/components/ui/dialog/dialog-description.svelte +17 -0
  391. package/web/src/lib/components/ui/dialog/dialog-footer.svelte +20 -0
  392. package/web/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
  393. package/web/src/lib/components/ui/dialog/dialog-overlay.svelte +20 -0
  394. package/web/src/lib/components/ui/dialog/dialog-portal.svelte +7 -0
  395. package/web/src/lib/components/ui/dialog/dialog-title.svelte +17 -0
  396. package/web/src/lib/components/ui/dialog/dialog-trigger.svelte +7 -0
  397. package/web/src/lib/components/ui/dialog/dialog.svelte +7 -0
  398. package/web/src/lib/components/ui/dialog/index.ts +34 -0
  399. package/web/src/lib/components/ui/input/index.ts +7 -0
  400. package/web/src/lib/components/ui/input/input.svelte +52 -0
  401. package/web/src/lib/components/ui/separator/index.ts +7 -0
  402. package/web/src/lib/components/ui/separator/separator.svelte +21 -0
  403. package/web/src/lib/components/ui/sheet/index.ts +34 -0
  404. package/web/src/lib/components/ui/sheet/sheet-close.svelte +7 -0
  405. package/web/src/lib/components/ui/sheet/sheet-content.svelte +60 -0
  406. package/web/src/lib/components/ui/sheet/sheet-description.svelte +17 -0
  407. package/web/src/lib/components/ui/sheet/sheet-footer.svelte +20 -0
  408. package/web/src/lib/components/ui/sheet/sheet-header.svelte +20 -0
  409. package/web/src/lib/components/ui/sheet/sheet-overlay.svelte +20 -0
  410. package/web/src/lib/components/ui/sheet/sheet-portal.svelte +7 -0
  411. package/web/src/lib/components/ui/sheet/sheet-title.svelte +17 -0
  412. package/web/src/lib/components/ui/sheet/sheet-trigger.svelte +7 -0
  413. package/web/src/lib/components/ui/sheet/sheet.svelte +7 -0
  414. package/web/src/lib/components/ui/sidebar/constants.ts +6 -0
  415. package/web/src/lib/components/ui/sidebar/context.svelte.ts +79 -0
  416. package/web/src/lib/components/ui/sidebar/index.ts +75 -0
  417. package/web/src/lib/components/ui/sidebar/sidebar-content.svelte +24 -0
  418. package/web/src/lib/components/ui/sidebar/sidebar-footer.svelte +21 -0
  419. package/web/src/lib/components/ui/sidebar/sidebar-group-action.svelte +36 -0
  420. package/web/src/lib/components/ui/sidebar/sidebar-group-content.svelte +21 -0
  421. package/web/src/lib/components/ui/sidebar/sidebar-group-label.svelte +34 -0
  422. package/web/src/lib/components/ui/sidebar/sidebar-group.svelte +21 -0
  423. package/web/src/lib/components/ui/sidebar/sidebar-header.svelte +21 -0
  424. package/web/src/lib/components/ui/sidebar/sidebar-input.svelte +21 -0
  425. package/web/src/lib/components/ui/sidebar/sidebar-inset.svelte +24 -0
  426. package/web/src/lib/components/ui/sidebar/sidebar-menu-action.svelte +43 -0
  427. package/web/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte +29 -0
  428. package/web/src/lib/components/ui/sidebar/sidebar-menu-button.svelte +103 -0
  429. package/web/src/lib/components/ui/sidebar/sidebar-menu-item.svelte +21 -0
  430. package/web/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte +36 -0
  431. package/web/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte +43 -0
  432. package/web/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte +21 -0
  433. package/web/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte +25 -0
  434. package/web/src/lib/components/ui/sidebar/sidebar-menu.svelte +21 -0
  435. package/web/src/lib/components/ui/sidebar/sidebar-provider.svelte +53 -0
  436. package/web/src/lib/components/ui/sidebar/sidebar-rail.svelte +36 -0
  437. package/web/src/lib/components/ui/sidebar/sidebar-separator.svelte +19 -0
  438. package/web/src/lib/components/ui/sidebar/sidebar-trigger.svelte +35 -0
  439. package/web/src/lib/components/ui/sidebar/sidebar.svelte +104 -0
  440. package/web/src/lib/components/ui/skeleton/index.ts +7 -0
  441. package/web/src/lib/components/ui/skeleton/skeleton.svelte +17 -0
  442. package/web/src/lib/components/ui/switch/index.ts +7 -0
  443. package/web/src/lib/components/ui/switch/switch.svelte +29 -0
  444. package/web/src/lib/components/ui/textarea/index.ts +7 -0
  445. package/web/src/lib/components/ui/textarea/textarea.svelte +23 -0
  446. package/web/src/lib/components/ui/tooltip/index.ts +19 -0
  447. package/web/src/lib/components/ui/tooltip/tooltip-content.svelte +52 -0
  448. package/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +7 -0
  449. package/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +7 -0
  450. package/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +7 -0
  451. package/web/src/lib/components/ui/tooltip/tooltip.svelte +7 -0
  452. package/web/src/lib/hooks/is-mobile.svelte.ts +9 -0
  453. package/web/src/lib/index.ts +1 -0
  454. package/web/src/lib/types.ts +23 -0
  455. package/web/src/lib/utils.ts +13 -0
  456. package/web/src/routes/+layout.svelte +67 -0
  457. package/web/src/routes/+layout.ts +34 -0
  458. package/web/src/routes/+page.svelte +7 -0
  459. package/web/src/routes/agents/+page.svelte +206 -0
  460. package/web/src/routes/chats/[id]/+page.svelte +406 -0
  461. package/web/src/routes/chats/[id]/+page.ts +19 -0
  462. package/web/src/routes/chats/[id]/page.svelte.spec.ts +102 -0
  463. package/web/src/routes/chats/[id]/settings/+page.svelte +165 -0
  464. package/web/src/routes/chats/[id]/settings/+page.ts +18 -0
  465. package/web/src/routes/page.svelte.spec.ts +13 -0
  466. package/web/static/robots.txt +3 -0
  467. package/web/svelte.config.js +21 -0
  468. package/web/tsconfig.json +20 -0
  469. package/web/vite.config.ts +41 -0
@@ -0,0 +1,3944 @@
1
+ import { s as setContext, g as getContext, d as derived, a as attributes, c as clsx, b as bind_props, p as props_id, e as attr, f as spread_props, o as on, h as escape_html, i as stringify, j as attr_class, k as sanitize_props, l as slot, m as ensure_array_like } from "../../chunks/root.js";
2
+ import "clsx";
3
+ import { c as cn, B as Button, I as Icon$1 } from "../../chunks/Icon.js";
4
+ import { M as MediaQuery, c as createSubscriber, d as defaultWindow, a as createId, D as DialogTriggerState, b as boxWith, m as mergeProps, s as simpleBox, C as Context, e as attachRef, u as useId, w as watch, f as cssToStyleObj, i as isNotNull, g as styleToString, h as getWindow, S as Scroll_lock, F as Focus_scope, E as Escape_layer, j as Dismissible_layer, T as Text_selection_layer, k as getDocument, l as isElement, P as PresenceManager, n as DOMContext, o as isFocusVisible, p as boolToEmptyStrOrUndef, q as createBitsAttrs, r as noop, t as Portal, I as Icon, v as Dialog, x as Dialog_overlay, y as Dialog_content, z as Dialog_close, X, A as Dialog_title, B as Dialog_description, G as Bot, H as Dialog$1, J as Dialog_content$1, K as Dialog_header, L as Dialog_title$1, N as Dialog_description$1, O as Dialog_footer } from "../../chunks/bot.js";
5
+ import { computePosition, offset, shift, limitShift, flip, size, arrow, hide } from "@floating-ui/dom";
6
+ import { tv } from "tailwind-variants";
7
+ import { p as page } from "../../chunks/index.js";
8
+ import { I as Input, P as Plus } from "../../chunks/plus.js";
9
+ import { i as invalidate, g as goto } from "../../chunks/client.js";
10
+ const DEFAULT_MOBILE_BREAKPOINT = 768;
11
+ class IsMobile extends MediaQuery {
12
+ constructor(breakpoint = DEFAULT_MOBILE_BREAKPOINT) {
13
+ super(`max-width: ${breakpoint - 1}px`);
14
+ }
15
+ }
16
+ const SIDEBAR_COOKIE_NAME = "sidebar:state";
17
+ const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
18
+ const SIDEBAR_WIDTH = "16rem";
19
+ const SIDEBAR_WIDTH_MOBILE = "18rem";
20
+ const SIDEBAR_WIDTH_ICON = "3rem";
21
+ const SIDEBAR_KEYBOARD_SHORTCUT = "b";
22
+ class SidebarState {
23
+ props;
24
+ #open = derived(() => this.props.open());
25
+ get open() {
26
+ return this.#open();
27
+ }
28
+ set open($$value) {
29
+ return this.#open($$value);
30
+ }
31
+ openMobile = false;
32
+ setOpen;
33
+ #isMobile;
34
+ #state = derived(() => this.open ? "expanded" : "collapsed");
35
+ get state() {
36
+ return this.#state();
37
+ }
38
+ set state($$value) {
39
+ return this.#state($$value);
40
+ }
41
+ constructor(props) {
42
+ this.setOpen = props.setOpen;
43
+ this.#isMobile = new IsMobile();
44
+ this.props = props;
45
+ }
46
+ // Convenience getter for checking if the sidebar is mobile
47
+ // without this, we would need to use `sidebar.isMobile.current` everywhere
48
+ get isMobile() {
49
+ return this.#isMobile.current;
50
+ }
51
+ // Event handler to apply to the `<svelte:window>`
52
+ handleShortcutKeydown = (e) => {
53
+ if (e.key === SIDEBAR_KEYBOARD_SHORTCUT && (e.metaKey || e.ctrlKey)) {
54
+ e.preventDefault();
55
+ this.toggle();
56
+ }
57
+ };
58
+ setOpenMobile = (value) => {
59
+ this.openMobile = value;
60
+ };
61
+ toggle = () => {
62
+ return this.#isMobile.current ? this.openMobile = !this.openMobile : this.setOpen(!this.open);
63
+ };
64
+ }
65
+ const SYMBOL_KEY = "scn-sidebar";
66
+ function setSidebar(props) {
67
+ return setContext(Symbol.for(SYMBOL_KEY), new SidebarState(props));
68
+ }
69
+ function useSidebar() {
70
+ return getContext(Symbol.for(SYMBOL_KEY));
71
+ }
72
+ function Sidebar_content($$renderer, $$props) {
73
+ $$renderer.component(($$renderer2) => {
74
+ let {
75
+ ref = null,
76
+ class: className,
77
+ children,
78
+ $$slots,
79
+ $$events,
80
+ ...restProps
81
+ } = $$props;
82
+ $$renderer2.push(`<div${attributes({
83
+ "data-slot": "sidebar-content",
84
+ "data-sidebar": "content",
85
+ class: clsx(cn("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className)),
86
+ ...restProps
87
+ })}>`);
88
+ children?.($$renderer2);
89
+ $$renderer2.push(`<!----></div>`);
90
+ bind_props($$props, { ref });
91
+ });
92
+ }
93
+ function Sidebar_group_content($$renderer, $$props) {
94
+ $$renderer.component(($$renderer2) => {
95
+ let {
96
+ ref = null,
97
+ class: className,
98
+ children,
99
+ $$slots,
100
+ $$events,
101
+ ...restProps
102
+ } = $$props;
103
+ $$renderer2.push(`<div${attributes({
104
+ "data-slot": "sidebar-group-content",
105
+ "data-sidebar": "group-content",
106
+ class: clsx(cn("w-full text-sm", className)),
107
+ ...restProps
108
+ })}>`);
109
+ children?.($$renderer2);
110
+ $$renderer2.push(`<!----></div>`);
111
+ bind_props($$props, { ref });
112
+ });
113
+ }
114
+ function Sidebar_group_label($$renderer, $$props) {
115
+ $$renderer.component(($$renderer2) => {
116
+ let {
117
+ ref = null,
118
+ children,
119
+ child,
120
+ class: className,
121
+ $$slots,
122
+ $$events,
123
+ ...restProps
124
+ } = $$props;
125
+ const mergedProps = derived(() => ({
126
+ class: cn("text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0", className),
127
+ "data-slot": "sidebar-group-label",
128
+ "data-sidebar": "group-label",
129
+ ...restProps
130
+ }));
131
+ if (child) {
132
+ $$renderer2.push("<!--[0-->");
133
+ child($$renderer2, { props: mergedProps() });
134
+ $$renderer2.push(`<!---->`);
135
+ } else {
136
+ $$renderer2.push("<!--[-1-->");
137
+ $$renderer2.push(`<div${attributes({ ...mergedProps() })}>`);
138
+ children?.($$renderer2);
139
+ $$renderer2.push(`<!----></div>`);
140
+ }
141
+ $$renderer2.push(`<!--]-->`);
142
+ bind_props($$props, { ref });
143
+ });
144
+ }
145
+ function Sidebar_group($$renderer, $$props) {
146
+ $$renderer.component(($$renderer2) => {
147
+ let {
148
+ ref = null,
149
+ class: className,
150
+ children,
151
+ $$slots,
152
+ $$events,
153
+ ...restProps
154
+ } = $$props;
155
+ $$renderer2.push(`<div${attributes({
156
+ "data-slot": "sidebar-group",
157
+ "data-sidebar": "group",
158
+ class: clsx(cn("relative flex w-full min-w-0 flex-col p-2", className)),
159
+ ...restProps
160
+ })}>`);
161
+ children?.($$renderer2);
162
+ $$renderer2.push(`<!----></div>`);
163
+ bind_props($$props, { ref });
164
+ });
165
+ }
166
+ function Sidebar_header($$renderer, $$props) {
167
+ $$renderer.component(($$renderer2) => {
168
+ let {
169
+ ref = null,
170
+ class: className,
171
+ children,
172
+ $$slots,
173
+ $$events,
174
+ ...restProps
175
+ } = $$props;
176
+ $$renderer2.push(`<div${attributes({
177
+ "data-slot": "sidebar-header",
178
+ "data-sidebar": "header",
179
+ class: clsx(cn("flex flex-col gap-2 p-2", className)),
180
+ ...restProps
181
+ })}>`);
182
+ children?.($$renderer2);
183
+ $$renderer2.push(`<!----></div>`);
184
+ bind_props($$props, { ref });
185
+ });
186
+ }
187
+ function Sidebar_inset($$renderer, $$props) {
188
+ $$renderer.component(($$renderer2) => {
189
+ let {
190
+ ref = null,
191
+ class: className,
192
+ children,
193
+ $$slots,
194
+ $$events,
195
+ ...restProps
196
+ } = $$props;
197
+ $$renderer2.push(`<main${attributes({
198
+ "data-slot": "sidebar-inset",
199
+ class: clsx(cn("bg-background relative flex w-full flex-1 flex-col", "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2", className)),
200
+ ...restProps
201
+ })}>`);
202
+ children?.($$renderer2);
203
+ $$renderer2.push(`<!----></main>`);
204
+ bind_props($$props, { ref });
205
+ });
206
+ }
207
+ function isFunction(value) {
208
+ return typeof value === "function";
209
+ }
210
+ function get$1(value) {
211
+ if (isFunction(value)) {
212
+ return value();
213
+ }
214
+ return value;
215
+ }
216
+ class ElementSize {
217
+ // no need to use `$state` here since we are using createSubscriber
218
+ #size = { width: 0, height: 0 };
219
+ #observed = false;
220
+ #options;
221
+ #node;
222
+ #window;
223
+ // we use a derived here to extract the width so that if the width doesn't change we don't get a state update
224
+ // which we would get if we would just use a getter since the version of the subscriber will be changing
225
+ #width = derived(() => {
226
+ this.#subscribe()?.();
227
+ return this.getSize().width;
228
+ });
229
+ // we use a derived here to extract the height so that if the height doesn't change we don't get a state update
230
+ // which we would get if we would just use a getter since the version of the subscriber will be changing
231
+ #height = derived(() => {
232
+ this.#subscribe()?.();
233
+ return this.getSize().height;
234
+ });
235
+ // we need to use a derived here because the class will be created before the node is bound to the ref
236
+ #subscribe = derived(() => {
237
+ const node$ = get$1(this.#node);
238
+ if (!node$) return;
239
+ return createSubscriber();
240
+ });
241
+ constructor(node, options = { box: "border-box" }) {
242
+ this.#window = options.window ?? defaultWindow;
243
+ this.#options = options;
244
+ this.#node = node;
245
+ this.#size = { width: 0, height: 0 };
246
+ }
247
+ calculateSize() {
248
+ const element = get$1(this.#node);
249
+ if (!element || !this.#window) {
250
+ return;
251
+ }
252
+ const offsetWidth = element.offsetWidth;
253
+ const offsetHeight = element.offsetHeight;
254
+ if (this.#options.box === "border-box") {
255
+ return { width: offsetWidth, height: offsetHeight };
256
+ }
257
+ const style = this.#window.getComputedStyle(element);
258
+ const paddingWidth = parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
259
+ const paddingHeight = parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);
260
+ const borderWidth = parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);
261
+ const borderHeight = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
262
+ const contentWidth = offsetWidth - paddingWidth - borderWidth;
263
+ const contentHeight = offsetHeight - paddingHeight - borderHeight;
264
+ return { width: contentWidth, height: contentHeight };
265
+ }
266
+ getSize() {
267
+ return this.#observed ? this.#size : this.calculateSize() ?? this.#size;
268
+ }
269
+ get current() {
270
+ this.#subscribe()?.();
271
+ return this.getSize();
272
+ }
273
+ get width() {
274
+ return this.#width();
275
+ }
276
+ get height() {
277
+ return this.#height();
278
+ }
279
+ }
280
+ function onDestroyEffect(fn) {
281
+ }
282
+ function Dialog_trigger$1($$renderer, $$props) {
283
+ $$renderer.component(($$renderer2) => {
284
+ const uid = props_id($$renderer2);
285
+ let {
286
+ id = createId(uid),
287
+ ref = null,
288
+ children,
289
+ child,
290
+ disabled = false,
291
+ $$slots,
292
+ $$events,
293
+ ...restProps
294
+ } = $$props;
295
+ const triggerState = DialogTriggerState.create({
296
+ id: boxWith(() => id),
297
+ ref: boxWith(() => ref, (v) => ref = v),
298
+ disabled: boxWith(() => Boolean(disabled))
299
+ });
300
+ const mergedProps = derived(() => mergeProps(restProps, triggerState.props));
301
+ if (child) {
302
+ $$renderer2.push("<!--[0-->");
303
+ child($$renderer2, { props: mergedProps() });
304
+ $$renderer2.push(`<!---->`);
305
+ } else {
306
+ $$renderer2.push("<!--[-1-->");
307
+ $$renderer2.push(`<button${attributes({ ...mergedProps() })}>`);
308
+ children?.($$renderer2);
309
+ $$renderer2.push(`<!----></button>`);
310
+ }
311
+ $$renderer2.push(`<!--]-->`);
312
+ bind_props($$props, { ref });
313
+ });
314
+ }
315
+ function get(valueOrGetValue) {
316
+ return typeof valueOrGetValue === "function" ? valueOrGetValue() : valueOrGetValue;
317
+ }
318
+ function getDPR(element) {
319
+ if (typeof window === "undefined") return 1;
320
+ const win = element.ownerDocument.defaultView || window;
321
+ return win.devicePixelRatio || 1;
322
+ }
323
+ function roundByDPR(element, value) {
324
+ const dpr = getDPR(element);
325
+ return Math.round(value * dpr) / dpr;
326
+ }
327
+ function getFloatingContentCSSVars(name) {
328
+ return {
329
+ [`--bits-${name}-content-transform-origin`]: `var(--bits-floating-transform-origin)`,
330
+ [`--bits-${name}-content-available-width`]: `var(--bits-floating-available-width)`,
331
+ [`--bits-${name}-content-available-height`]: `var(--bits-floating-available-height)`,
332
+ [`--bits-${name}-anchor-width`]: `var(--bits-floating-anchor-width)`,
333
+ [`--bits-${name}-anchor-height`]: `var(--bits-floating-anchor-height)`
334
+ };
335
+ }
336
+ function useFloating(options) {
337
+ const openOption = derived(() => get(options.open) ?? true);
338
+ const middlewareOption = derived(() => get(options.middleware));
339
+ const transformOption = derived(() => get(options.transform) ?? true);
340
+ const placementOption = derived(() => get(options.placement) ?? "bottom");
341
+ const strategyOption = derived(() => get(options.strategy) ?? "absolute");
342
+ const sideOffsetOption = derived(() => get(options.sideOffset) ?? 0);
343
+ const alignOffsetOption = derived(() => get(options.alignOffset) ?? 0);
344
+ const reference = options.reference;
345
+ let x = 0;
346
+ let y = 0;
347
+ const floating = simpleBox(null);
348
+ let strategy = strategyOption();
349
+ let placement = placementOption();
350
+ let middlewareData = {};
351
+ let isPositioned = false;
352
+ const floatingStyles = derived(() => {
353
+ const xVal = floating.current ? roundByDPR(floating.current, x) : x;
354
+ const yVal = floating.current ? roundByDPR(floating.current, y) : y;
355
+ if (transformOption()) {
356
+ return {
357
+ position: strategy,
358
+ left: "0",
359
+ top: "0",
360
+ transform: `translate(${xVal}px, ${yVal}px)`,
361
+ ...floating.current && getDPR(floating.current) >= 1.5 && { willChange: "transform" }
362
+ };
363
+ }
364
+ return { position: strategy, left: `${xVal}px`, top: `${yVal}px` };
365
+ });
366
+ function update() {
367
+ if (reference.current === null || floating.current === null) return;
368
+ computePosition(reference.current, floating.current, {
369
+ middleware: middlewareOption(),
370
+ placement: placementOption(),
371
+ strategy: strategyOption()
372
+ }).then((position) => {
373
+ const referenceNode = reference.current;
374
+ const referenceHidden = isReferenceHidden(referenceNode);
375
+ if (referenceHidden) {
376
+ middlewareData = {
377
+ ...middlewareData,
378
+ hide: {
379
+ // oxlint-disable-next-line no-explicit-any
380
+ ...middlewareData.hide,
381
+ referenceHidden: true
382
+ }
383
+ };
384
+ return;
385
+ }
386
+ if (!openOption() && x !== 0 && y !== 0) {
387
+ const maxExpectedOffset = Math.max(Math.abs(sideOffsetOption()), Math.abs(alignOffsetOption()), 15);
388
+ if (position.x <= maxExpectedOffset && position.y <= maxExpectedOffset) return;
389
+ }
390
+ x = position.x;
391
+ y = position.y;
392
+ strategy = position.strategy;
393
+ placement = position.placement;
394
+ middlewareData = position.middlewareData;
395
+ isPositioned = true;
396
+ });
397
+ }
398
+ return {
399
+ floating,
400
+ reference,
401
+ get strategy() {
402
+ return strategy;
403
+ },
404
+ get placement() {
405
+ return placement;
406
+ },
407
+ get middlewareData() {
408
+ return middlewareData;
409
+ },
410
+ get isPositioned() {
411
+ return isPositioned;
412
+ },
413
+ get floatingStyles() {
414
+ return floatingStyles();
415
+ },
416
+ get update() {
417
+ return update;
418
+ }
419
+ };
420
+ }
421
+ function isReferenceHidden(node) {
422
+ if (!(node instanceof Element)) return false;
423
+ if (!node.isConnected) return true;
424
+ if (node instanceof HTMLElement && node.hidden) return true;
425
+ return node.getClientRects().length === 0;
426
+ }
427
+ const OPPOSITE_SIDE = { top: "bottom", right: "left", bottom: "top", left: "right" };
428
+ const FloatingRootContext = new Context("Floating.Root");
429
+ const FloatingContentContext = new Context("Floating.Content");
430
+ const FloatingTooltipRootContext = new Context("Floating.Root");
431
+ class FloatingRootState {
432
+ static create(tooltip = false) {
433
+ return tooltip ? FloatingTooltipRootContext.set(new FloatingRootState()) : FloatingRootContext.set(new FloatingRootState());
434
+ }
435
+ anchorNode = simpleBox(null);
436
+ customAnchorNode = simpleBox(null);
437
+ triggerNode = simpleBox(null);
438
+ constructor() {
439
+ }
440
+ }
441
+ class FloatingContentState {
442
+ static create(opts, tooltip = false) {
443
+ return tooltip ? FloatingContentContext.set(new FloatingContentState(opts, FloatingTooltipRootContext.get())) : FloatingContentContext.set(new FloatingContentState(opts, FloatingRootContext.get()));
444
+ }
445
+ opts;
446
+ root;
447
+ // nodes
448
+ contentRef = simpleBox(null);
449
+ wrapperRef = simpleBox(null);
450
+ arrowRef = simpleBox(null);
451
+ contentAttachment = attachRef(this.contentRef);
452
+ wrapperAttachment = attachRef(this.wrapperRef);
453
+ arrowAttachment = attachRef(this.arrowRef);
454
+ // ids
455
+ arrowId = simpleBox(useId());
456
+ #transformedStyle = derived(() => {
457
+ if (typeof this.opts.style === "string") return cssToStyleObj(this.opts.style);
458
+ if (!this.opts.style) return {};
459
+ });
460
+ #updatePositionStrategy = void 0;
461
+ #arrowSize = new ElementSize(() => this.arrowRef.current ?? void 0);
462
+ #arrowWidth = derived(() => this.#arrowSize?.width ?? 0);
463
+ #arrowHeight = derived(() => this.#arrowSize?.height ?? 0);
464
+ #desiredPlacement = derived(() => this.opts.side?.current + (this.opts.align.current !== "center" ? `-${this.opts.align.current}` : ""));
465
+ #boundary = derived(() => Array.isArray(this.opts.collisionBoundary.current) ? this.opts.collisionBoundary.current : [this.opts.collisionBoundary.current]);
466
+ #hasExplicitBoundaries = derived(() => this.#boundary().length > 0);
467
+ get hasExplicitBoundaries() {
468
+ return this.#hasExplicitBoundaries();
469
+ }
470
+ set hasExplicitBoundaries($$value) {
471
+ return this.#hasExplicitBoundaries($$value);
472
+ }
473
+ #detectOverflowOptions = derived(() => ({
474
+ padding: this.opts.collisionPadding.current,
475
+ boundary: this.#boundary().filter(isNotNull),
476
+ altBoundary: this.hasExplicitBoundaries
477
+ }));
478
+ get detectOverflowOptions() {
479
+ return this.#detectOverflowOptions();
480
+ }
481
+ set detectOverflowOptions($$value) {
482
+ return this.#detectOverflowOptions($$value);
483
+ }
484
+ #availableWidth = void 0;
485
+ #availableHeight = void 0;
486
+ #anchorWidth = void 0;
487
+ #anchorHeight = void 0;
488
+ #middleware = derived(() => [
489
+ offset({
490
+ mainAxis: this.opts.sideOffset.current + this.#arrowHeight(),
491
+ alignmentAxis: this.opts.alignOffset.current
492
+ }),
493
+ this.opts.avoidCollisions.current && shift({
494
+ mainAxis: true,
495
+ crossAxis: false,
496
+ limiter: this.opts.sticky.current === "partial" ? limitShift() : void 0,
497
+ ...this.detectOverflowOptions
498
+ }),
499
+ this.opts.avoidCollisions.current && flip({ ...this.detectOverflowOptions }),
500
+ size({
501
+ ...this.detectOverflowOptions,
502
+ apply: ({ rects, availableWidth, availableHeight }) => {
503
+ const { width: anchorWidth, height: anchorHeight } = rects.reference;
504
+ this.#availableWidth = availableWidth;
505
+ this.#availableHeight = availableHeight;
506
+ this.#anchorWidth = anchorWidth;
507
+ this.#anchorHeight = anchorHeight;
508
+ }
509
+ }),
510
+ this.arrowRef.current && arrow({
511
+ element: this.arrowRef.current,
512
+ padding: this.opts.arrowPadding.current
513
+ }),
514
+ transformOrigin({
515
+ arrowWidth: this.#arrowWidth(),
516
+ arrowHeight: this.#arrowHeight()
517
+ }),
518
+ this.opts.hideWhenDetached.current && hide({ strategy: "referenceHidden", ...this.detectOverflowOptions })
519
+ ].filter(Boolean));
520
+ get middleware() {
521
+ return this.#middleware();
522
+ }
523
+ set middleware($$value) {
524
+ return this.#middleware($$value);
525
+ }
526
+ floating;
527
+ #placedSide = derived(() => getSideFromPlacement(this.floating.placement));
528
+ get placedSide() {
529
+ return this.#placedSide();
530
+ }
531
+ set placedSide($$value) {
532
+ return this.#placedSide($$value);
533
+ }
534
+ #placedAlign = derived(() => getAlignFromPlacement(this.floating.placement));
535
+ get placedAlign() {
536
+ return this.#placedAlign();
537
+ }
538
+ set placedAlign($$value) {
539
+ return this.#placedAlign($$value);
540
+ }
541
+ #arrowX = derived(() => this.floating.middlewareData.arrow?.x ?? 0);
542
+ get arrowX() {
543
+ return this.#arrowX();
544
+ }
545
+ set arrowX($$value) {
546
+ return this.#arrowX($$value);
547
+ }
548
+ #arrowY = derived(() => this.floating.middlewareData.arrow?.y ?? 0);
549
+ get arrowY() {
550
+ return this.#arrowY();
551
+ }
552
+ set arrowY($$value) {
553
+ return this.#arrowY($$value);
554
+ }
555
+ #cannotCenterArrow = derived(() => this.floating.middlewareData.arrow?.centerOffset !== 0);
556
+ get cannotCenterArrow() {
557
+ return this.#cannotCenterArrow();
558
+ }
559
+ set cannotCenterArrow($$value) {
560
+ return this.#cannotCenterArrow($$value);
561
+ }
562
+ contentZIndex;
563
+ #arrowBaseSide = derived(() => OPPOSITE_SIDE[this.placedSide]);
564
+ get arrowBaseSide() {
565
+ return this.#arrowBaseSide();
566
+ }
567
+ set arrowBaseSide($$value) {
568
+ return this.#arrowBaseSide($$value);
569
+ }
570
+ #wrapperProps = derived(() => ({
571
+ id: this.opts.wrapperId.current,
572
+ "data-bits-floating-content-wrapper": "",
573
+ style: {
574
+ ...this.floating.floatingStyles,
575
+ transform: this.floating.isPositioned ? this.floating.floatingStyles.transform : "translate(0, -200%)",
576
+ minWidth: "max-content",
577
+ zIndex: this.contentZIndex,
578
+ "--bits-floating-transform-origin": `${this.floating.middlewareData.transformOrigin?.x} ${this.floating.middlewareData.transformOrigin?.y}`,
579
+ "--bits-floating-available-width": `${this.#availableWidth}px`,
580
+ "--bits-floating-available-height": `${this.#availableHeight}px`,
581
+ "--bits-floating-anchor-width": `${this.#anchorWidth}px`,
582
+ "--bits-floating-anchor-height": `${this.#anchorHeight}px`,
583
+ ...this.floating.middlewareData.hide?.referenceHidden && { visibility: "hidden", "pointer-events": "none" },
584
+ ...this.#transformedStyle()
585
+ },
586
+ dir: this.opts.dir.current,
587
+ ...this.wrapperAttachment
588
+ }));
589
+ get wrapperProps() {
590
+ return this.#wrapperProps();
591
+ }
592
+ set wrapperProps($$value) {
593
+ return this.#wrapperProps($$value);
594
+ }
595
+ #props = derived(() => ({
596
+ "data-side": this.placedSide,
597
+ "data-align": this.placedAlign,
598
+ style: styleToString({ ...this.#transformedStyle() }),
599
+ ...this.contentAttachment
600
+ }));
601
+ get props() {
602
+ return this.#props();
603
+ }
604
+ set props($$value) {
605
+ return this.#props($$value);
606
+ }
607
+ #arrowStyle = derived(() => ({
608
+ position: "absolute",
609
+ left: this.arrowX ? `${this.arrowX}px` : void 0,
610
+ top: this.arrowY ? `${this.arrowY}px` : void 0,
611
+ [this.arrowBaseSide]: 0,
612
+ "transform-origin": { top: "", right: "0 0", bottom: "center 0", left: "100% 0" }[this.placedSide],
613
+ transform: {
614
+ top: "translateY(100%)",
615
+ right: "translateY(50%) rotate(90deg) translateX(-50%)",
616
+ bottom: "rotate(180deg)",
617
+ left: "translateY(50%) rotate(-90deg) translateX(50%)"
618
+ }[this.placedSide],
619
+ visibility: this.cannotCenterArrow ? "hidden" : void 0
620
+ }));
621
+ get arrowStyle() {
622
+ return this.#arrowStyle();
623
+ }
624
+ set arrowStyle($$value) {
625
+ return this.#arrowStyle($$value);
626
+ }
627
+ constructor(opts, root) {
628
+ this.opts = opts;
629
+ this.root = root;
630
+ this.#updatePositionStrategy = opts.updatePositionStrategy;
631
+ if (opts.customAnchor) {
632
+ this.root.customAnchorNode.current = opts.customAnchor.current;
633
+ }
634
+ watch(() => opts.customAnchor.current, (customAnchor) => {
635
+ this.root.customAnchorNode.current = customAnchor;
636
+ });
637
+ this.floating = useFloating({
638
+ strategy: () => this.opts.strategy.current,
639
+ placement: () => this.#desiredPlacement(),
640
+ middleware: () => this.middleware,
641
+ reference: this.root.anchorNode,
642
+ open: () => this.opts.enabled.current,
643
+ sideOffset: () => this.opts.sideOffset.current,
644
+ alignOffset: () => this.opts.alignOffset.current
645
+ });
646
+ watch(() => this.contentRef.current, (contentNode) => {
647
+ if (!contentNode || !this.opts.enabled.current) return;
648
+ const win = getWindow(contentNode);
649
+ const rafId = win.requestAnimationFrame(() => {
650
+ if (this.contentRef.current !== contentNode || !this.opts.enabled.current) return;
651
+ const zIndex = win.getComputedStyle(contentNode).zIndex;
652
+ if (zIndex !== this.contentZIndex) {
653
+ this.contentZIndex = zIndex;
654
+ }
655
+ });
656
+ return () => {
657
+ win.cancelAnimationFrame(rafId);
658
+ };
659
+ });
660
+ }
661
+ }
662
+ class FloatingArrowState {
663
+ static create(opts) {
664
+ return new FloatingArrowState(opts, FloatingContentContext.get());
665
+ }
666
+ opts;
667
+ content;
668
+ constructor(opts, content) {
669
+ this.opts = opts;
670
+ this.content = content;
671
+ }
672
+ #props = derived(() => ({
673
+ id: this.opts.id.current,
674
+ style: this.content.arrowStyle,
675
+ "data-side": this.content.placedSide,
676
+ ...this.content.arrowAttachment
677
+ }));
678
+ get props() {
679
+ return this.#props();
680
+ }
681
+ set props($$value) {
682
+ return this.#props($$value);
683
+ }
684
+ }
685
+ function transformOrigin(options) {
686
+ return {
687
+ name: "transformOrigin",
688
+ options,
689
+ fn(data) {
690
+ const { placement, rects, middlewareData } = data;
691
+ const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;
692
+ const isArrowHidden = cannotCenterArrow;
693
+ const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;
694
+ const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;
695
+ const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
696
+ const noArrowAlign = { start: "0%", center: "50%", end: "100%" }[placedAlign];
697
+ const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;
698
+ const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;
699
+ let x = "";
700
+ let y = "";
701
+ if (placedSide === "bottom") {
702
+ x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
703
+ y = `${-arrowHeight}px`;
704
+ } else if (placedSide === "top") {
705
+ x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
706
+ y = `${rects.floating.height + arrowHeight}px`;
707
+ } else if (placedSide === "right") {
708
+ x = `${-arrowHeight}px`;
709
+ y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
710
+ } else if (placedSide === "left") {
711
+ x = `${rects.floating.width + arrowHeight}px`;
712
+ y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
713
+ }
714
+ return { data: { x, y } };
715
+ }
716
+ };
717
+ }
718
+ function getSideAndAlignFromPlacement(placement) {
719
+ const [side, align = "center"] = placement.split("-");
720
+ return [side, align];
721
+ }
722
+ function getSideFromPlacement(placement) {
723
+ return getSideAndAlignFromPlacement(placement)[0];
724
+ }
725
+ function getAlignFromPlacement(placement) {
726
+ return getSideAndAlignFromPlacement(placement)[1];
727
+ }
728
+ function Floating_layer($$renderer, $$props) {
729
+ $$renderer.component(($$renderer2) => {
730
+ let { children, tooltip = false } = $$props;
731
+ FloatingRootState.create(tooltip);
732
+ children?.($$renderer2);
733
+ $$renderer2.push(`<!---->`);
734
+ });
735
+ }
736
+ function Arrow($$renderer, $$props) {
737
+ $$renderer.component(($$renderer2) => {
738
+ let {
739
+ id = useId(),
740
+ children,
741
+ child,
742
+ width = 10,
743
+ height = 5,
744
+ $$slots,
745
+ $$events,
746
+ ...restProps
747
+ } = $$props;
748
+ const mergedProps = derived(() => mergeProps(restProps, { id }));
749
+ if (child) {
750
+ $$renderer2.push("<!--[0-->");
751
+ child($$renderer2, { props: mergedProps() });
752
+ $$renderer2.push(`<!---->`);
753
+ } else {
754
+ $$renderer2.push("<!--[-1-->");
755
+ $$renderer2.push(`<span${attributes({ ...mergedProps() })}>`);
756
+ if (children) {
757
+ $$renderer2.push("<!--[0-->");
758
+ children?.($$renderer2);
759
+ $$renderer2.push(`<!---->`);
760
+ } else {
761
+ $$renderer2.push("<!--[-1-->");
762
+ $$renderer2.push(`<svg${attr("width", width)}${attr("height", height)} viewBox="0 0 30 10" preserveAspectRatio="none" data-arrow=""><polygon points="0,0 30,0 15,10" fill="currentColor"></polygon></svg>`);
763
+ }
764
+ $$renderer2.push(`<!--]--></span>`);
765
+ }
766
+ $$renderer2.push(`<!--]-->`);
767
+ });
768
+ }
769
+ function Floating_layer_arrow($$renderer, $$props) {
770
+ $$renderer.component(($$renderer2) => {
771
+ let { id = useId(), ref = null, $$slots, $$events, ...restProps } = $$props;
772
+ const arrowState = FloatingArrowState.create({
773
+ id: boxWith(() => id),
774
+ ref: boxWith(() => ref, (v) => ref = v)
775
+ });
776
+ const mergedProps = derived(() => mergeProps(restProps, arrowState.props));
777
+ Arrow($$renderer2, spread_props([mergedProps()]));
778
+ bind_props($$props, { ref });
779
+ });
780
+ }
781
+ function Floating_layer_content($$renderer, $$props) {
782
+ $$renderer.component(($$renderer2) => {
783
+ let {
784
+ content,
785
+ side = "bottom",
786
+ sideOffset = 0,
787
+ align = "center",
788
+ alignOffset = 0,
789
+ id,
790
+ arrowPadding = 0,
791
+ avoidCollisions = true,
792
+ collisionBoundary = [],
793
+ collisionPadding = 0,
794
+ hideWhenDetached = false,
795
+ onPlaced = () => {
796
+ },
797
+ sticky = "partial",
798
+ updatePositionStrategy = "optimized",
799
+ strategy = "fixed",
800
+ dir = "ltr",
801
+ style = {},
802
+ wrapperId = useId(),
803
+ customAnchor = null,
804
+ enabled,
805
+ tooltip = false
806
+ } = $$props;
807
+ const contentState = FloatingContentState.create(
808
+ {
809
+ side: boxWith(() => side),
810
+ sideOffset: boxWith(() => sideOffset),
811
+ align: boxWith(() => align),
812
+ alignOffset: boxWith(() => alignOffset),
813
+ id: boxWith(() => id),
814
+ arrowPadding: boxWith(() => arrowPadding),
815
+ avoidCollisions: boxWith(() => avoidCollisions),
816
+ collisionBoundary: boxWith(() => collisionBoundary),
817
+ collisionPadding: boxWith(() => collisionPadding),
818
+ hideWhenDetached: boxWith(() => hideWhenDetached),
819
+ onPlaced: boxWith(() => onPlaced),
820
+ sticky: boxWith(() => sticky),
821
+ updatePositionStrategy: boxWith(() => updatePositionStrategy),
822
+ strategy: boxWith(() => strategy),
823
+ dir: boxWith(() => dir),
824
+ style: boxWith(() => style),
825
+ enabled: boxWith(() => enabled),
826
+ wrapperId: boxWith(() => wrapperId),
827
+ customAnchor: boxWith(() => customAnchor)
828
+ },
829
+ tooltip
830
+ );
831
+ const mergedProps = derived(() => mergeProps(contentState.wrapperProps, { style: { pointerEvents: "auto" } }));
832
+ content?.($$renderer2, { props: contentState.props, wrapperProps: mergedProps() });
833
+ $$renderer2.push(`<!---->`);
834
+ });
835
+ }
836
+ function Floating_layer_content_static($$renderer, $$props) {
837
+ $$renderer.component(($$renderer2) => {
838
+ let { content } = $$props;
839
+ content?.($$renderer2, { props: {}, wrapperProps: {} });
840
+ $$renderer2.push(`<!---->`);
841
+ });
842
+ }
843
+ function Popper_content($$renderer, $$props) {
844
+ let {
845
+ content,
846
+ isStatic = false,
847
+ onPlaced,
848
+ $$slots,
849
+ $$events,
850
+ ...restProps
851
+ } = $$props;
852
+ if (isStatic) {
853
+ $$renderer.push("<!--[0-->");
854
+ Floating_layer_content_static($$renderer, { content });
855
+ } else {
856
+ $$renderer.push("<!--[-1-->");
857
+ Floating_layer_content($$renderer, spread_props([{ content, onPlaced }, restProps]));
858
+ }
859
+ $$renderer.push(`<!--]-->`);
860
+ }
861
+ function Popper_layer_inner($$renderer, $$props) {
862
+ $$renderer.component(($$renderer2) => {
863
+ let {
864
+ popper,
865
+ onEscapeKeydown,
866
+ escapeKeydownBehavior,
867
+ preventOverflowTextSelection,
868
+ id,
869
+ onPointerDown,
870
+ onPointerUp,
871
+ side,
872
+ sideOffset,
873
+ align,
874
+ alignOffset,
875
+ arrowPadding,
876
+ avoidCollisions,
877
+ collisionBoundary,
878
+ collisionPadding,
879
+ sticky,
880
+ hideWhenDetached,
881
+ updatePositionStrategy,
882
+ strategy,
883
+ dir,
884
+ preventScroll,
885
+ wrapperId,
886
+ style,
887
+ onPlaced,
888
+ onInteractOutside,
889
+ onCloseAutoFocus,
890
+ onOpenAutoFocus,
891
+ onFocusOutside,
892
+ interactOutsideBehavior = "close",
893
+ loop,
894
+ trapFocus = true,
895
+ isValidEvent = () => false,
896
+ customAnchor = null,
897
+ isStatic = false,
898
+ enabled,
899
+ ref,
900
+ tooltip = false,
901
+ contentPointerEvents = "auto",
902
+ $$slots,
903
+ $$events,
904
+ ...restProps
905
+ } = $$props;
906
+ {
907
+ let content = function($$renderer3, { props: floatingProps, wrapperProps }) {
908
+ if (restProps.forceMount && enabled) {
909
+ $$renderer3.push("<!--[0-->");
910
+ Scroll_lock($$renderer3, { preventScroll });
911
+ } else if (!restProps.forceMount) {
912
+ $$renderer3.push("<!--[1-->");
913
+ Scroll_lock($$renderer3, { preventScroll });
914
+ } else {
915
+ $$renderer3.push("<!--[-1-->");
916
+ }
917
+ $$renderer3.push(`<!--]--> `);
918
+ {
919
+ let focusScope = function($$renderer4, { props: focusScopeProps }) {
920
+ Escape_layer($$renderer4, {
921
+ onEscapeKeydown,
922
+ escapeKeydownBehavior,
923
+ enabled,
924
+ ref,
925
+ children: ($$renderer5) => {
926
+ {
927
+ let children = function($$renderer6, { props: dismissibleProps }) {
928
+ Text_selection_layer($$renderer6, {
929
+ id,
930
+ preventOverflowTextSelection,
931
+ onPointerDown,
932
+ onPointerUp,
933
+ enabled,
934
+ ref,
935
+ children: ($$renderer7) => {
936
+ popper?.($$renderer7, {
937
+ props: mergeProps(restProps, floatingProps, dismissibleProps, focusScopeProps, { style: { pointerEvents: contentPointerEvents } }),
938
+ wrapperProps
939
+ });
940
+ $$renderer7.push(`<!---->`);
941
+ }
942
+ });
943
+ };
944
+ Dismissible_layer($$renderer5, {
945
+ id,
946
+ onInteractOutside,
947
+ onFocusOutside,
948
+ interactOutsideBehavior,
949
+ isValidEvent,
950
+ enabled,
951
+ ref,
952
+ children
953
+ });
954
+ }
955
+ }
956
+ });
957
+ };
958
+ Focus_scope($$renderer3, {
959
+ onOpenAutoFocus,
960
+ onCloseAutoFocus,
961
+ loop,
962
+ enabled,
963
+ trapFocus,
964
+ forceMount: restProps.forceMount,
965
+ ref,
966
+ focusScope
967
+ });
968
+ }
969
+ $$renderer3.push(`<!---->`);
970
+ };
971
+ Popper_content($$renderer2, {
972
+ isStatic,
973
+ id,
974
+ side,
975
+ sideOffset,
976
+ align,
977
+ alignOffset,
978
+ arrowPadding,
979
+ avoidCollisions,
980
+ collisionBoundary,
981
+ collisionPadding,
982
+ sticky,
983
+ hideWhenDetached,
984
+ updatePositionStrategy,
985
+ strategy,
986
+ dir,
987
+ wrapperId,
988
+ style,
989
+ onPlaced,
990
+ customAnchor,
991
+ enabled,
992
+ tooltip,
993
+ content,
994
+ $$slots: { content: true }
995
+ });
996
+ }
997
+ });
998
+ }
999
+ function Popper_layer($$renderer, $$props) {
1000
+ let {
1001
+ popper,
1002
+ open,
1003
+ onEscapeKeydown,
1004
+ escapeKeydownBehavior,
1005
+ preventOverflowTextSelection,
1006
+ id,
1007
+ onPointerDown,
1008
+ onPointerUp,
1009
+ side,
1010
+ sideOffset,
1011
+ align,
1012
+ alignOffset,
1013
+ arrowPadding,
1014
+ avoidCollisions,
1015
+ collisionBoundary,
1016
+ collisionPadding,
1017
+ sticky,
1018
+ hideWhenDetached,
1019
+ updatePositionStrategy,
1020
+ strategy,
1021
+ dir,
1022
+ preventScroll,
1023
+ wrapperId,
1024
+ style,
1025
+ onPlaced,
1026
+ onInteractOutside,
1027
+ onCloseAutoFocus,
1028
+ onOpenAutoFocus,
1029
+ onFocusOutside,
1030
+ interactOutsideBehavior = "close",
1031
+ loop,
1032
+ trapFocus = true,
1033
+ isValidEvent = () => false,
1034
+ customAnchor = null,
1035
+ isStatic = false,
1036
+ ref,
1037
+ shouldRender,
1038
+ $$slots,
1039
+ $$events,
1040
+ ...restProps
1041
+ } = $$props;
1042
+ if (shouldRender) {
1043
+ $$renderer.push("<!--[0-->");
1044
+ Popper_layer_inner($$renderer, spread_props([
1045
+ {
1046
+ popper,
1047
+ onEscapeKeydown,
1048
+ escapeKeydownBehavior,
1049
+ preventOverflowTextSelection,
1050
+ id,
1051
+ onPointerDown,
1052
+ onPointerUp,
1053
+ side,
1054
+ sideOffset,
1055
+ align,
1056
+ alignOffset,
1057
+ arrowPadding,
1058
+ avoidCollisions,
1059
+ collisionBoundary,
1060
+ collisionPadding,
1061
+ sticky,
1062
+ hideWhenDetached,
1063
+ updatePositionStrategy,
1064
+ strategy,
1065
+ dir,
1066
+ preventScroll,
1067
+ wrapperId,
1068
+ style,
1069
+ onPlaced,
1070
+ customAnchor,
1071
+ isStatic,
1072
+ enabled: open,
1073
+ onInteractOutside,
1074
+ onCloseAutoFocus,
1075
+ onOpenAutoFocus,
1076
+ interactOutsideBehavior,
1077
+ loop,
1078
+ trapFocus,
1079
+ isValidEvent,
1080
+ onFocusOutside,
1081
+ forceMount: false,
1082
+ ref
1083
+ },
1084
+ restProps
1085
+ ]));
1086
+ } else {
1087
+ $$renderer.push("<!--[-1-->");
1088
+ }
1089
+ $$renderer.push(`<!--]-->`);
1090
+ }
1091
+ function Popper_layer_force_mount($$renderer, $$props) {
1092
+ let {
1093
+ popper,
1094
+ onEscapeKeydown,
1095
+ escapeKeydownBehavior,
1096
+ preventOverflowTextSelection,
1097
+ id,
1098
+ onPointerDown,
1099
+ onPointerUp,
1100
+ side,
1101
+ sideOffset,
1102
+ align,
1103
+ alignOffset,
1104
+ arrowPadding,
1105
+ avoidCollisions,
1106
+ collisionBoundary,
1107
+ collisionPadding,
1108
+ sticky,
1109
+ hideWhenDetached,
1110
+ updatePositionStrategy,
1111
+ strategy,
1112
+ dir,
1113
+ preventScroll,
1114
+ wrapperId,
1115
+ style,
1116
+ onPlaced,
1117
+ onInteractOutside,
1118
+ onCloseAutoFocus,
1119
+ onOpenAutoFocus,
1120
+ onFocusOutside,
1121
+ interactOutsideBehavior = "close",
1122
+ loop,
1123
+ trapFocus = true,
1124
+ isValidEvent = () => false,
1125
+ customAnchor = null,
1126
+ isStatic = false,
1127
+ enabled,
1128
+ $$slots,
1129
+ $$events,
1130
+ ...restProps
1131
+ } = $$props;
1132
+ Popper_layer_inner($$renderer, spread_props([
1133
+ {
1134
+ popper,
1135
+ onEscapeKeydown,
1136
+ escapeKeydownBehavior,
1137
+ preventOverflowTextSelection,
1138
+ id,
1139
+ onPointerDown,
1140
+ onPointerUp,
1141
+ side,
1142
+ sideOffset,
1143
+ align,
1144
+ alignOffset,
1145
+ arrowPadding,
1146
+ avoidCollisions,
1147
+ collisionBoundary,
1148
+ collisionPadding,
1149
+ sticky,
1150
+ hideWhenDetached,
1151
+ updatePositionStrategy,
1152
+ strategy,
1153
+ dir,
1154
+ preventScroll,
1155
+ wrapperId,
1156
+ style,
1157
+ onPlaced,
1158
+ customAnchor,
1159
+ isStatic,
1160
+ enabled,
1161
+ onInteractOutside,
1162
+ onCloseAutoFocus,
1163
+ onOpenAutoFocus,
1164
+ interactOutsideBehavior,
1165
+ loop,
1166
+ trapFocus,
1167
+ isValidEvent,
1168
+ onFocusOutside
1169
+ },
1170
+ restProps,
1171
+ { forceMount: true }
1172
+ ]));
1173
+ }
1174
+ function isPointInPolygon(point, polygon) {
1175
+ const [x, y] = point;
1176
+ let isInside = false;
1177
+ const length = polygon.length;
1178
+ for (let i = 0, j = length - 1; i < length; j = i++) {
1179
+ const [xi, yi] = polygon[i] ?? [0, 0];
1180
+ const [xj, yj] = polygon[j] ?? [0, 0];
1181
+ const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;
1182
+ if (intersect) {
1183
+ isInside = !isInside;
1184
+ }
1185
+ }
1186
+ return isInside;
1187
+ }
1188
+ function isInsideRect(point, rect) {
1189
+ return point[0] >= rect.left && point[0] <= rect.right && point[1] >= rect.top && point[1] <= rect.bottom;
1190
+ }
1191
+ function getSide(triggerRect, contentRect) {
1192
+ const triggerCenterX = triggerRect.left + triggerRect.width / 2;
1193
+ const triggerCenterY = triggerRect.top + triggerRect.height / 2;
1194
+ const contentCenterX = contentRect.left + contentRect.width / 2;
1195
+ const contentCenterY = contentRect.top + contentRect.height / 2;
1196
+ const deltaX = contentCenterX - triggerCenterX;
1197
+ const deltaY = contentCenterY - triggerCenterY;
1198
+ if (Math.abs(deltaX) > Math.abs(deltaY)) {
1199
+ return deltaX > 0 ? "right" : "left";
1200
+ }
1201
+ return deltaY > 0 ? "bottom" : "top";
1202
+ }
1203
+ class SafePolygon {
1204
+ #opts;
1205
+ #buffer;
1206
+ #transitIntentTimeout;
1207
+ // tracks the cursor position when leaving trigger or content
1208
+ #exitPoint = null;
1209
+ // tracks what we're moving toward: "content" when leaving trigger, "trigger" when leaving content
1210
+ #exitTarget = null;
1211
+ #transitTargets = [];
1212
+ #trackedTriggerNode = null;
1213
+ #leaveFallbackRafId = null;
1214
+ #transitIntentTimeoutId = null;
1215
+ #cancelLeaveFallback() {
1216
+ if (this.#leaveFallbackRafId !== null) {
1217
+ cancelAnimationFrame(this.#leaveFallbackRafId);
1218
+ this.#leaveFallbackRafId = null;
1219
+ }
1220
+ }
1221
+ #scheduleLeaveFallback() {
1222
+ this.#cancelLeaveFallback();
1223
+ this.#leaveFallbackRafId = requestAnimationFrame(() => {
1224
+ this.#leaveFallbackRafId = null;
1225
+ if (!this.#exitPoint || !this.#exitTarget) return;
1226
+ this.#clearTracking();
1227
+ this.#opts.onPointerExit();
1228
+ });
1229
+ }
1230
+ #cancelTransitIntentTimeout() {
1231
+ if (this.#transitIntentTimeoutId !== null) {
1232
+ clearTimeout(this.#transitIntentTimeoutId);
1233
+ this.#transitIntentTimeoutId = null;
1234
+ }
1235
+ }
1236
+ #scheduleTransitIntentTimeout() {
1237
+ if (this.#transitIntentTimeout === null) return;
1238
+ this.#cancelTransitIntentTimeout();
1239
+ this.#transitIntentTimeoutId = window.setTimeout(
1240
+ () => {
1241
+ this.#transitIntentTimeoutId = null;
1242
+ if (!this.#exitPoint || !this.#exitTarget) return;
1243
+ this.#clearTracking();
1244
+ this.#opts.onPointerExit();
1245
+ },
1246
+ this.#transitIntentTimeout
1247
+ );
1248
+ }
1249
+ constructor(opts) {
1250
+ this.#opts = opts;
1251
+ this.#buffer = opts.buffer ?? 1;
1252
+ const transitIntentTimeout = opts.transitIntentTimeout;
1253
+ this.#transitIntentTimeout = typeof transitIntentTimeout === "number" && transitIntentTimeout > 0 ? transitIntentTimeout : null;
1254
+ watch([opts.triggerNode, opts.contentNode, opts.enabled], ([triggerNode, contentNode, enabled]) => {
1255
+ if (!triggerNode || !contentNode || !enabled) {
1256
+ this.#trackedTriggerNode = null;
1257
+ this.#clearTracking();
1258
+ return;
1259
+ }
1260
+ if (this.#trackedTriggerNode && this.#trackedTriggerNode !== triggerNode) {
1261
+ this.#clearTracking();
1262
+ }
1263
+ this.#trackedTriggerNode = triggerNode;
1264
+ const doc = getDocument(triggerNode);
1265
+ const handlePointerMove = (e) => {
1266
+ this.#onPointerMove([e.clientX, e.clientY], triggerNode, contentNode);
1267
+ };
1268
+ const handleTriggerLeave = (e) => {
1269
+ const target = e.relatedTarget;
1270
+ if (isElement(target) && contentNode.contains(target)) {
1271
+ return;
1272
+ }
1273
+ const ignoredTargets = this.#opts.ignoredTargets?.() ?? [];
1274
+ if (isElement(target) && ignoredTargets.some((n) => n === target || n.contains(target))) {
1275
+ return;
1276
+ }
1277
+ this.#transitTargets = isElement(target) && ignoredTargets.length > 0 ? ignoredTargets.filter((n) => target.contains(n)) : [];
1278
+ this.#exitPoint = [e.clientX, e.clientY];
1279
+ this.#exitTarget = "content";
1280
+ this.#scheduleLeaveFallback();
1281
+ };
1282
+ const handleTriggerEnter = () => {
1283
+ this.#clearTracking();
1284
+ };
1285
+ const handleContentEnter = () => {
1286
+ this.#clearTracking();
1287
+ };
1288
+ const handleContentLeave = (e) => {
1289
+ const target = e.relatedTarget;
1290
+ if (isElement(target) && triggerNode.contains(target)) {
1291
+ return;
1292
+ }
1293
+ this.#exitPoint = [e.clientX, e.clientY];
1294
+ this.#exitTarget = "trigger";
1295
+ this.#scheduleLeaveFallback();
1296
+ };
1297
+ return [
1298
+ on(doc, "pointermove", handlePointerMove),
1299
+ on(triggerNode, "pointerleave", handleTriggerLeave),
1300
+ on(triggerNode, "pointerenter", handleTriggerEnter),
1301
+ on(contentNode, "pointerenter", handleContentEnter),
1302
+ on(contentNode, "pointerleave", handleContentLeave)
1303
+ ].reduce(
1304
+ (acc, cleanup) => () => {
1305
+ acc();
1306
+ cleanup();
1307
+ },
1308
+ () => {
1309
+ }
1310
+ );
1311
+ });
1312
+ }
1313
+ #onPointerMove(clientPoint, triggerNode, contentNode) {
1314
+ if (!this.#exitPoint || !this.#exitTarget) return;
1315
+ this.#cancelLeaveFallback();
1316
+ this.#scheduleTransitIntentTimeout();
1317
+ const triggerRect = triggerNode.getBoundingClientRect();
1318
+ const contentRect = contentNode.getBoundingClientRect();
1319
+ if (this.#exitTarget === "content" && isInsideRect(clientPoint, contentRect)) {
1320
+ this.#clearTracking();
1321
+ return;
1322
+ }
1323
+ if (this.#exitTarget === "trigger" && isInsideRect(clientPoint, triggerRect)) {
1324
+ this.#clearTracking();
1325
+ return;
1326
+ }
1327
+ if (this.#exitTarget === "content" && this.#transitTargets.length > 0) {
1328
+ for (const transitTarget of this.#transitTargets) {
1329
+ const transitRect = transitTarget.getBoundingClientRect();
1330
+ if (isInsideRect(clientPoint, transitRect)) return;
1331
+ const transitSide = getSide(triggerRect, transitRect);
1332
+ const transitCorridor = this.#getCorridorPolygon(triggerRect, transitRect, transitSide);
1333
+ if (transitCorridor && isPointInPolygon(clientPoint, transitCorridor)) return;
1334
+ }
1335
+ }
1336
+ const side = getSide(triggerRect, contentRect);
1337
+ const corridorPoly = this.#getCorridorPolygon(triggerRect, contentRect, side);
1338
+ if (corridorPoly && isPointInPolygon(clientPoint, corridorPoly)) {
1339
+ return;
1340
+ }
1341
+ const targetRect = this.#exitTarget === "content" ? contentRect : triggerRect;
1342
+ const safePoly = this.#getSafePolygon(this.#exitPoint, targetRect, side, this.#exitTarget);
1343
+ if (isPointInPolygon(clientPoint, safePoly)) {
1344
+ return;
1345
+ }
1346
+ this.#clearTracking();
1347
+ this.#opts.onPointerExit();
1348
+ }
1349
+ #clearTracking() {
1350
+ this.#exitPoint = null;
1351
+ this.#exitTarget = null;
1352
+ this.#transitTargets = [];
1353
+ this.#cancelLeaveFallback();
1354
+ this.#cancelTransitIntentTimeout();
1355
+ }
1356
+ /**
1357
+ * Creates a rectangular corridor between trigger and content
1358
+ * This prevents closing when cursor is in the gap between them
1359
+ */
1360
+ #getCorridorPolygon(triggerRect, contentRect, side) {
1361
+ const buffer = this.#buffer;
1362
+ switch (side) {
1363
+ case "top":
1364
+ return [
1365
+ [
1366
+ Math.min(triggerRect.left, contentRect.left) - buffer,
1367
+ triggerRect.top
1368
+ ],
1369
+ [
1370
+ Math.min(triggerRect.left, contentRect.left) - buffer,
1371
+ contentRect.bottom
1372
+ ],
1373
+ [
1374
+ Math.max(triggerRect.right, contentRect.right) + buffer,
1375
+ contentRect.bottom
1376
+ ],
1377
+ [
1378
+ Math.max(triggerRect.right, contentRect.right) + buffer,
1379
+ triggerRect.top
1380
+ ]
1381
+ ];
1382
+ case "bottom":
1383
+ return [
1384
+ [
1385
+ Math.min(triggerRect.left, contentRect.left) - buffer,
1386
+ triggerRect.bottom
1387
+ ],
1388
+ [
1389
+ Math.min(triggerRect.left, contentRect.left) - buffer,
1390
+ contentRect.top
1391
+ ],
1392
+ [
1393
+ Math.max(triggerRect.right, contentRect.right) + buffer,
1394
+ contentRect.top
1395
+ ],
1396
+ [
1397
+ Math.max(triggerRect.right, contentRect.right) + buffer,
1398
+ triggerRect.bottom
1399
+ ]
1400
+ ];
1401
+ case "left":
1402
+ return [
1403
+ [
1404
+ triggerRect.left,
1405
+ Math.min(triggerRect.top, contentRect.top) - buffer
1406
+ ],
1407
+ [
1408
+ contentRect.right,
1409
+ Math.min(triggerRect.top, contentRect.top) - buffer
1410
+ ],
1411
+ [
1412
+ contentRect.right,
1413
+ Math.max(triggerRect.bottom, contentRect.bottom) + buffer
1414
+ ],
1415
+ [
1416
+ triggerRect.left,
1417
+ Math.max(triggerRect.bottom, contentRect.bottom) + buffer
1418
+ ]
1419
+ ];
1420
+ case "right":
1421
+ return [
1422
+ [
1423
+ triggerRect.right,
1424
+ Math.min(triggerRect.top, contentRect.top) - buffer
1425
+ ],
1426
+ [
1427
+ contentRect.left,
1428
+ Math.min(triggerRect.top, contentRect.top) - buffer
1429
+ ],
1430
+ [
1431
+ contentRect.left,
1432
+ Math.max(triggerRect.bottom, contentRect.bottom) + buffer
1433
+ ],
1434
+ [
1435
+ triggerRect.right,
1436
+ Math.max(triggerRect.bottom, contentRect.bottom) + buffer
1437
+ ]
1438
+ ];
1439
+ }
1440
+ }
1441
+ /**
1442
+ * Creates a triangular/trapezoidal safe zone from the exit point to the target
1443
+ */
1444
+ #getSafePolygon(exitPoint, targetRect, side, exitTarget) {
1445
+ const buffer = this.#buffer * 4;
1446
+ const [x, y] = exitPoint;
1447
+ const effectiveSide = exitTarget === "trigger" ? this.#flipSide(side) : side;
1448
+ switch (effectiveSide) {
1449
+ case "top":
1450
+ return [
1451
+ [x - buffer, y + buffer],
1452
+ [x + buffer, y + buffer],
1453
+ [targetRect.right + buffer, targetRect.bottom],
1454
+ [targetRect.right + buffer, targetRect.top],
1455
+ [targetRect.left - buffer, targetRect.top],
1456
+ [targetRect.left - buffer, targetRect.bottom]
1457
+ ];
1458
+ case "bottom":
1459
+ return [
1460
+ [x - buffer, y - buffer],
1461
+ [x + buffer, y - buffer],
1462
+ [targetRect.right + buffer, targetRect.top],
1463
+ [targetRect.right + buffer, targetRect.bottom],
1464
+ [targetRect.left - buffer, targetRect.bottom],
1465
+ [targetRect.left - buffer, targetRect.top]
1466
+ ];
1467
+ case "left":
1468
+ return [
1469
+ [x + buffer, y - buffer],
1470
+ [x + buffer, y + buffer],
1471
+ [targetRect.right, targetRect.bottom + buffer],
1472
+ [targetRect.left, targetRect.bottom + buffer],
1473
+ [targetRect.left, targetRect.top - buffer],
1474
+ [targetRect.right, targetRect.top - buffer]
1475
+ ];
1476
+ case "right":
1477
+ return [
1478
+ [x - buffer, y - buffer],
1479
+ [x - buffer, y + buffer],
1480
+ [targetRect.left, targetRect.bottom + buffer],
1481
+ [targetRect.right, targetRect.bottom + buffer],
1482
+ [targetRect.right, targetRect.top - buffer],
1483
+ [targetRect.left, targetRect.top - buffer]
1484
+ ];
1485
+ }
1486
+ }
1487
+ #flipSide(side) {
1488
+ switch (side) {
1489
+ case "top":
1490
+ return "bottom";
1491
+ case "bottom":
1492
+ return "top";
1493
+ case "left":
1494
+ return "right";
1495
+ case "right":
1496
+ return "left";
1497
+ }
1498
+ }
1499
+ }
1500
+ class TimeoutFn {
1501
+ #interval;
1502
+ #cb;
1503
+ #timer = null;
1504
+ constructor(cb, interval) {
1505
+ this.#cb = cb;
1506
+ this.#interval = interval;
1507
+ this.stop = this.stop.bind(this);
1508
+ this.start = this.start.bind(this);
1509
+ onDestroyEffect(this.stop);
1510
+ }
1511
+ #clear() {
1512
+ if (this.#timer !== null) {
1513
+ window.clearTimeout(this.#timer);
1514
+ this.#timer = null;
1515
+ }
1516
+ }
1517
+ stop() {
1518
+ this.#clear();
1519
+ }
1520
+ start(...args) {
1521
+ this.#clear();
1522
+ this.#timer = window.setTimeout(() => {
1523
+ this.#timer = null;
1524
+ this.#cb(...args);
1525
+ }, this.#interval);
1526
+ }
1527
+ }
1528
+ const tooltipAttrs = createBitsAttrs({ component: "tooltip", parts: ["content", "trigger"] });
1529
+ const TooltipProviderContext = new Context("Tooltip.Provider");
1530
+ const TooltipRootContext = new Context("Tooltip.Root");
1531
+ class TooltipTriggerRegistryState {
1532
+ triggers = /* @__PURE__ */ new Map();
1533
+ activeTriggerId = null;
1534
+ #activeTriggerNode = derived(() => {
1535
+ const activeTriggerId = this.activeTriggerId;
1536
+ if (activeTriggerId === null) return null;
1537
+ return this.triggers.get(activeTriggerId)?.node ?? null;
1538
+ });
1539
+ get activeTriggerNode() {
1540
+ return this.#activeTriggerNode();
1541
+ }
1542
+ set activeTriggerNode($$value) {
1543
+ return this.#activeTriggerNode($$value);
1544
+ }
1545
+ #activePayload = derived(() => {
1546
+ const activeTriggerId = this.activeTriggerId;
1547
+ if (activeTriggerId === null) return null;
1548
+ return this.triggers.get(activeTriggerId)?.payload ?? null;
1549
+ });
1550
+ get activePayload() {
1551
+ return this.#activePayload();
1552
+ }
1553
+ set activePayload($$value) {
1554
+ return this.#activePayload($$value);
1555
+ }
1556
+ register = (record) => {
1557
+ const next = new Map(this.triggers);
1558
+ next.set(record.id, record);
1559
+ this.triggers = next;
1560
+ this.#coerceActiveTrigger();
1561
+ };
1562
+ update = (record) => {
1563
+ const next = new Map(this.triggers);
1564
+ next.set(record.id, record);
1565
+ this.triggers = next;
1566
+ this.#coerceActiveTrigger();
1567
+ };
1568
+ unregister = (id) => {
1569
+ if (!this.triggers.has(id)) return;
1570
+ const next = new Map(this.triggers);
1571
+ next.delete(id);
1572
+ this.triggers = next;
1573
+ if (this.activeTriggerId === id) {
1574
+ this.activeTriggerId = null;
1575
+ }
1576
+ };
1577
+ setActiveTrigger = (id) => {
1578
+ if (id === null) {
1579
+ this.activeTriggerId = null;
1580
+ return;
1581
+ }
1582
+ if (!this.triggers.has(id)) {
1583
+ this.activeTriggerId = null;
1584
+ return;
1585
+ }
1586
+ this.activeTriggerId = id;
1587
+ };
1588
+ get = (id) => {
1589
+ return this.triggers.get(id);
1590
+ };
1591
+ has = (id) => {
1592
+ return this.triggers.has(id);
1593
+ };
1594
+ getFirstTriggerId = () => {
1595
+ const firstEntry = this.triggers.entries().next();
1596
+ if (firstEntry.done) return null;
1597
+ return firstEntry.value[0];
1598
+ };
1599
+ #coerceActiveTrigger = () => {
1600
+ const activeTriggerId = this.activeTriggerId;
1601
+ if (activeTriggerId === null) return;
1602
+ if (!this.triggers.has(activeTriggerId)) {
1603
+ this.activeTriggerId = null;
1604
+ }
1605
+ };
1606
+ }
1607
+ class TooltipProviderState {
1608
+ static create(opts) {
1609
+ return TooltipProviderContext.set(new TooltipProviderState(opts));
1610
+ }
1611
+ opts;
1612
+ isOpenDelayed = true;
1613
+ isPointerInTransit = simpleBox(false);
1614
+ #timerFn;
1615
+ #openTooltip = null;
1616
+ constructor(opts) {
1617
+ this.opts = opts;
1618
+ this.#timerFn = new TimeoutFn(
1619
+ () => {
1620
+ this.isOpenDelayed = true;
1621
+ },
1622
+ this.opts.skipDelayDuration.current
1623
+ );
1624
+ }
1625
+ #startTimer = () => {
1626
+ const skipDuration = this.opts.skipDelayDuration.current;
1627
+ if (skipDuration === 0) {
1628
+ this.isOpenDelayed = true;
1629
+ return;
1630
+ } else {
1631
+ this.#timerFn.start();
1632
+ }
1633
+ };
1634
+ #clearTimer = () => {
1635
+ this.#timerFn.stop();
1636
+ };
1637
+ onOpen = (tooltip) => {
1638
+ if (this.#openTooltip && this.#openTooltip !== tooltip) {
1639
+ this.#openTooltip.handleClose();
1640
+ }
1641
+ this.#clearTimer();
1642
+ this.isOpenDelayed = false;
1643
+ this.#openTooltip = tooltip;
1644
+ };
1645
+ onClose = (tooltip) => {
1646
+ if (this.#openTooltip === tooltip) {
1647
+ this.#openTooltip = null;
1648
+ }
1649
+ this.#startTimer();
1650
+ };
1651
+ isTooltipOpen = (tooltip) => {
1652
+ return this.#openTooltip === tooltip;
1653
+ };
1654
+ }
1655
+ class TooltipRootState {
1656
+ static create(opts) {
1657
+ return TooltipRootContext.set(new TooltipRootState(opts, TooltipProviderContext.get()));
1658
+ }
1659
+ opts;
1660
+ provider;
1661
+ #delayDuration = derived(() => this.opts.delayDuration.current ?? this.provider.opts.delayDuration.current);
1662
+ get delayDuration() {
1663
+ return this.#delayDuration();
1664
+ }
1665
+ set delayDuration($$value) {
1666
+ return this.#delayDuration($$value);
1667
+ }
1668
+ #disableHoverableContent = derived(() => this.opts.disableHoverableContent.current ?? this.provider.opts.disableHoverableContent.current);
1669
+ get disableHoverableContent() {
1670
+ return this.#disableHoverableContent();
1671
+ }
1672
+ set disableHoverableContent($$value) {
1673
+ return this.#disableHoverableContent($$value);
1674
+ }
1675
+ #disableCloseOnTriggerClick = derived(() => this.opts.disableCloseOnTriggerClick.current ?? this.provider.opts.disableCloseOnTriggerClick.current);
1676
+ get disableCloseOnTriggerClick() {
1677
+ return this.#disableCloseOnTriggerClick();
1678
+ }
1679
+ set disableCloseOnTriggerClick($$value) {
1680
+ return this.#disableCloseOnTriggerClick($$value);
1681
+ }
1682
+ #disabled = derived(() => this.opts.disabled.current ?? this.provider.opts.disabled.current);
1683
+ get disabled() {
1684
+ return this.#disabled();
1685
+ }
1686
+ set disabled($$value) {
1687
+ return this.#disabled($$value);
1688
+ }
1689
+ #ignoreNonKeyboardFocus = derived(() => this.opts.ignoreNonKeyboardFocus.current ?? this.provider.opts.ignoreNonKeyboardFocus.current);
1690
+ get ignoreNonKeyboardFocus() {
1691
+ return this.#ignoreNonKeyboardFocus();
1692
+ }
1693
+ set ignoreNonKeyboardFocus($$value) {
1694
+ return this.#ignoreNonKeyboardFocus($$value);
1695
+ }
1696
+ registry;
1697
+ tether;
1698
+ contentNode = null;
1699
+ contentPresence;
1700
+ #wasOpenDelayed = false;
1701
+ #timerFn;
1702
+ #stateAttr = derived(() => {
1703
+ if (!this.opts.open.current) return "closed";
1704
+ return this.#wasOpenDelayed ? "delayed-open" : "instant-open";
1705
+ });
1706
+ get stateAttr() {
1707
+ return this.#stateAttr();
1708
+ }
1709
+ set stateAttr($$value) {
1710
+ return this.#stateAttr($$value);
1711
+ }
1712
+ constructor(opts, provider) {
1713
+ this.opts = opts;
1714
+ this.provider = provider;
1715
+ this.tether = opts.tether.current?.state ?? null;
1716
+ this.registry = this.tether?.registry ?? new TooltipTriggerRegistryState();
1717
+ this.#timerFn = new TimeoutFn(
1718
+ () => {
1719
+ this.#wasOpenDelayed = true;
1720
+ this.opts.open.current = true;
1721
+ },
1722
+ this.delayDuration ?? 0
1723
+ );
1724
+ if (this.tether) {
1725
+ this.tether.root = this;
1726
+ }
1727
+ this.contentPresence = new PresenceManager({
1728
+ open: this.opts.open,
1729
+ ref: boxWith(() => this.contentNode),
1730
+ onComplete: () => {
1731
+ this.opts.onOpenChangeComplete.current(this.opts.open.current);
1732
+ }
1733
+ });
1734
+ watch(() => this.delayDuration, () => {
1735
+ if (this.delayDuration === void 0) return;
1736
+ this.#timerFn = new TimeoutFn(
1737
+ () => {
1738
+ this.#wasOpenDelayed = true;
1739
+ this.opts.open.current = true;
1740
+ },
1741
+ this.delayDuration
1742
+ );
1743
+ });
1744
+ watch(
1745
+ () => this.opts.open.current,
1746
+ (isOpen) => {
1747
+ if (isOpen) {
1748
+ this.ensureActiveTrigger();
1749
+ this.provider.onOpen(this);
1750
+ } else {
1751
+ this.provider.onClose(this);
1752
+ }
1753
+ },
1754
+ { lazy: true }
1755
+ );
1756
+ watch(() => this.opts.triggerId.current, (triggerId) => {
1757
+ if (triggerId === this.registry.activeTriggerId) return;
1758
+ this.registry.setActiveTrigger(triggerId);
1759
+ });
1760
+ watch(() => this.registry.activeTriggerId, (activeTriggerId) => {
1761
+ if (this.opts.triggerId.current === activeTriggerId) return;
1762
+ this.opts.triggerId.current = activeTriggerId;
1763
+ });
1764
+ }
1765
+ handleOpen = () => {
1766
+ this.#timerFn.stop();
1767
+ this.#wasOpenDelayed = false;
1768
+ this.ensureActiveTrigger();
1769
+ this.opts.open.current = true;
1770
+ };
1771
+ handleClose = () => {
1772
+ this.#timerFn.stop();
1773
+ this.opts.open.current = false;
1774
+ };
1775
+ #handleDelayedOpen = () => {
1776
+ this.#timerFn.stop();
1777
+ const shouldSkipDelay = !this.provider.isOpenDelayed;
1778
+ const delayDuration = this.delayDuration ?? 0;
1779
+ if (shouldSkipDelay || delayDuration === 0) {
1780
+ this.#wasOpenDelayed = false;
1781
+ this.opts.open.current = true;
1782
+ } else {
1783
+ this.#timerFn.start();
1784
+ }
1785
+ };
1786
+ onTriggerEnter = (triggerId) => {
1787
+ this.setActiveTrigger(triggerId);
1788
+ this.#handleDelayedOpen();
1789
+ };
1790
+ onTriggerLeave = () => {
1791
+ if (this.disableHoverableContent) {
1792
+ this.handleClose();
1793
+ } else {
1794
+ this.#timerFn.stop();
1795
+ }
1796
+ };
1797
+ ensureActiveTrigger = () => {
1798
+ if (this.registry.activeTriggerId !== null && this.registry.has(this.registry.activeTriggerId)) {
1799
+ return;
1800
+ }
1801
+ if (this.opts.triggerId.current !== null && this.registry.has(this.opts.triggerId.current)) {
1802
+ this.registry.setActiveTrigger(this.opts.triggerId.current);
1803
+ return;
1804
+ }
1805
+ const firstTriggerId = this.registry.getFirstTriggerId();
1806
+ this.registry.setActiveTrigger(firstTriggerId);
1807
+ };
1808
+ setActiveTrigger = (triggerId) => {
1809
+ this.registry.setActiveTrigger(triggerId);
1810
+ };
1811
+ registerTrigger = (trigger) => {
1812
+ this.registry.register(trigger);
1813
+ if (trigger.disabled && this.registry.activeTriggerId === trigger.id && this.opts.open.current) {
1814
+ this.handleClose();
1815
+ }
1816
+ };
1817
+ updateTrigger = (trigger) => {
1818
+ this.registry.update(trigger);
1819
+ if (trigger.disabled && this.registry.activeTriggerId === trigger.id && this.opts.open.current) {
1820
+ this.handleClose();
1821
+ }
1822
+ };
1823
+ unregisterTrigger = (id) => {
1824
+ const isActive = this.registry.activeTriggerId === id;
1825
+ this.registry.unregister(id);
1826
+ if (isActive && this.opts.open.current) {
1827
+ this.handleClose();
1828
+ }
1829
+ };
1830
+ isActiveTrigger = (triggerId) => {
1831
+ return this.registry.activeTriggerId === triggerId;
1832
+ };
1833
+ get triggerNode() {
1834
+ return this.registry.activeTriggerNode;
1835
+ }
1836
+ get activePayload() {
1837
+ return this.registry.activePayload;
1838
+ }
1839
+ get activeTriggerId() {
1840
+ return this.registry.activeTriggerId;
1841
+ }
1842
+ }
1843
+ class TooltipTriggerState {
1844
+ static create(opts) {
1845
+ if (opts.tether.current) {
1846
+ return new TooltipTriggerState(opts, null, opts.tether.current.state);
1847
+ }
1848
+ return new TooltipTriggerState(opts, TooltipRootContext.get(), null);
1849
+ }
1850
+ opts;
1851
+ root;
1852
+ tether;
1853
+ attachment;
1854
+ #isPointerDown = simpleBox(false);
1855
+ #hasPointerMoveOpened = false;
1856
+ domContext;
1857
+ #transitCheckTimeout = null;
1858
+ #mounted = false;
1859
+ #lastRegisteredId = null;
1860
+ constructor(opts, root, tether) {
1861
+ this.opts = opts;
1862
+ this.root = root;
1863
+ this.tether = tether;
1864
+ this.domContext = new DOMContext(opts.ref);
1865
+ this.attachment = attachRef(this.opts.ref, (v) => this.#register(v));
1866
+ watch(() => this.opts.id.current, () => {
1867
+ this.#register(this.opts.ref.current);
1868
+ });
1869
+ watch(() => this.opts.payload.current, () => {
1870
+ this.#register(this.opts.ref.current);
1871
+ });
1872
+ watch(() => this.opts.disabled.current, () => {
1873
+ this.#register(this.opts.ref.current);
1874
+ });
1875
+ }
1876
+ #getRoot = () => {
1877
+ return this.tether?.root ?? this.root;
1878
+ };
1879
+ #isDisabled = () => {
1880
+ const root = this.#getRoot();
1881
+ return this.opts.disabled.current || Boolean(root?.disabled);
1882
+ };
1883
+ #register = (node) => {
1884
+ if (!this.#mounted) return;
1885
+ const id = this.opts.id.current;
1886
+ const payload = this.opts.payload.current;
1887
+ const disabled = this.opts.disabled.current;
1888
+ if (this.#lastRegisteredId && this.#lastRegisteredId !== id) {
1889
+ const root2 = this.#getRoot();
1890
+ if (this.tether) {
1891
+ this.tether.registry.unregister(this.#lastRegisteredId);
1892
+ } else {
1893
+ root2?.unregisterTrigger(this.#lastRegisteredId);
1894
+ }
1895
+ }
1896
+ const triggerRecord = { id, node, payload, disabled };
1897
+ const root = this.#getRoot();
1898
+ if (this.tether) {
1899
+ if (this.tether.registry.has(id)) {
1900
+ this.tether.registry.update(triggerRecord);
1901
+ } else {
1902
+ this.tether.registry.register(triggerRecord);
1903
+ }
1904
+ if (disabled && this.tether.registry.activeTriggerId === id && root?.opts.open.current) {
1905
+ root.handleClose();
1906
+ }
1907
+ } else {
1908
+ if (root?.registry.has(id)) {
1909
+ root.updateTrigger(triggerRecord);
1910
+ } else {
1911
+ root?.registerTrigger(triggerRecord);
1912
+ }
1913
+ }
1914
+ this.#lastRegisteredId = id;
1915
+ };
1916
+ #clearTransitCheck = () => {
1917
+ if (this.#transitCheckTimeout !== null) {
1918
+ clearTimeout(this.#transitCheckTimeout);
1919
+ this.#transitCheckTimeout = null;
1920
+ }
1921
+ };
1922
+ handlePointerUp = () => {
1923
+ this.#isPointerDown.current = false;
1924
+ };
1925
+ #onpointerup = () => {
1926
+ if (this.#isDisabled()) return;
1927
+ this.#isPointerDown.current = false;
1928
+ };
1929
+ #onpointerdown = () => {
1930
+ if (this.#isDisabled()) return;
1931
+ this.#isPointerDown.current = true;
1932
+ this.domContext.getDocument().addEventListener(
1933
+ "pointerup",
1934
+ () => {
1935
+ this.handlePointerUp();
1936
+ },
1937
+ { once: true }
1938
+ );
1939
+ };
1940
+ #onpointerenter = (e) => {
1941
+ const root = this.#getRoot();
1942
+ if (!root) return;
1943
+ if (this.#isDisabled()) {
1944
+ if (root.opts.open.current) {
1945
+ root.handleClose();
1946
+ }
1947
+ return;
1948
+ }
1949
+ if (e.pointerType === "touch") return;
1950
+ if (root.provider.isPointerInTransit.current) {
1951
+ this.#clearTransitCheck();
1952
+ this.#transitCheckTimeout = window.setTimeout(
1953
+ () => {
1954
+ if (root.provider.isPointerInTransit.current) {
1955
+ root.provider.isPointerInTransit.current = false;
1956
+ root.onTriggerEnter(this.opts.id.current);
1957
+ this.#hasPointerMoveOpened = true;
1958
+ }
1959
+ },
1960
+ 250
1961
+ );
1962
+ return;
1963
+ }
1964
+ root.onTriggerEnter(this.opts.id.current);
1965
+ this.#hasPointerMoveOpened = true;
1966
+ };
1967
+ #onpointermove = (e) => {
1968
+ const root = this.#getRoot();
1969
+ if (!root) return;
1970
+ if (this.#isDisabled()) {
1971
+ if (root.opts.open.current) {
1972
+ root.handleClose();
1973
+ }
1974
+ return;
1975
+ }
1976
+ if (e.pointerType === "touch") return;
1977
+ if (this.#hasPointerMoveOpened) return;
1978
+ this.#clearTransitCheck();
1979
+ root.provider.isPointerInTransit.current = false;
1980
+ root.onTriggerEnter(this.opts.id.current);
1981
+ this.#hasPointerMoveOpened = true;
1982
+ };
1983
+ #onpointerleave = (e) => {
1984
+ const root = this.#getRoot();
1985
+ if (!root) return;
1986
+ if (this.#isDisabled()) return;
1987
+ this.#clearTransitCheck();
1988
+ if (!root.isActiveTrigger(this.opts.id.current)) {
1989
+ this.#hasPointerMoveOpened = false;
1990
+ return;
1991
+ }
1992
+ const relatedTarget = e.relatedTarget;
1993
+ if (isElement(relatedTarget)) {
1994
+ for (const record of root.registry.triggers.values()) {
1995
+ if (record.node !== relatedTarget) continue;
1996
+ if (root.provider.opts.skipDelayDuration.current > 0) {
1997
+ this.#hasPointerMoveOpened = false;
1998
+ return;
1999
+ }
2000
+ root.handleClose();
2001
+ this.#hasPointerMoveOpened = false;
2002
+ return;
2003
+ }
2004
+ }
2005
+ root.onTriggerLeave();
2006
+ this.#hasPointerMoveOpened = false;
2007
+ };
2008
+ #onfocus = (e) => {
2009
+ const root = this.#getRoot();
2010
+ if (!root) return;
2011
+ if (this.#isPointerDown.current) return;
2012
+ if (this.#isDisabled()) {
2013
+ if (root.opts.open.current) {
2014
+ root.handleClose();
2015
+ }
2016
+ return;
2017
+ }
2018
+ if (root.ignoreNonKeyboardFocus && !isFocusVisible(e.currentTarget)) return;
2019
+ root.setActiveTrigger(this.opts.id.current);
2020
+ root.handleOpen();
2021
+ };
2022
+ #onblur = () => {
2023
+ const root = this.#getRoot();
2024
+ if (!root || this.#isDisabled()) return;
2025
+ root.handleClose();
2026
+ };
2027
+ #onclick = () => {
2028
+ const root = this.#getRoot();
2029
+ if (!root || root.disableCloseOnTriggerClick || this.#isDisabled()) return;
2030
+ root.handleClose();
2031
+ };
2032
+ #props = derived(() => {
2033
+ const root = this.#getRoot();
2034
+ const isOpenForTrigger = Boolean(root?.opts.open.current && root.isActiveTrigger(this.opts.id.current));
2035
+ const isDisabled = this.#isDisabled();
2036
+ return {
2037
+ id: this.opts.id.current,
2038
+ "aria-describedby": isOpenForTrigger ? root?.contentNode?.id : void 0,
2039
+ "data-state": isOpenForTrigger ? root?.stateAttr : "closed",
2040
+ "data-disabled": boolToEmptyStrOrUndef(isDisabled),
2041
+ "data-delay-duration": `${root?.delayDuration ?? 0}`,
2042
+ [tooltipAttrs.trigger]: "",
2043
+ tabindex: isDisabled ? void 0 : this.opts.tabindex.current,
2044
+ disabled: this.opts.disabled.current,
2045
+ onpointerup: this.#onpointerup,
2046
+ onpointerdown: this.#onpointerdown,
2047
+ onpointerenter: this.#onpointerenter,
2048
+ onpointermove: this.#onpointermove,
2049
+ onpointerleave: this.#onpointerleave,
2050
+ onfocus: this.#onfocus,
2051
+ onblur: this.#onblur,
2052
+ onclick: this.#onclick,
2053
+ ...this.attachment
2054
+ };
2055
+ });
2056
+ get props() {
2057
+ return this.#props();
2058
+ }
2059
+ set props($$value) {
2060
+ return this.#props($$value);
2061
+ }
2062
+ }
2063
+ class TooltipContentState {
2064
+ static create(opts) {
2065
+ return new TooltipContentState(opts, TooltipRootContext.get());
2066
+ }
2067
+ opts;
2068
+ root;
2069
+ attachment;
2070
+ constructor(opts, root) {
2071
+ this.opts = opts;
2072
+ this.root = root;
2073
+ this.attachment = attachRef(this.opts.ref, (v) => this.root.contentNode = v);
2074
+ new SafePolygon({
2075
+ triggerNode: () => this.root.triggerNode,
2076
+ contentNode: () => this.root.contentNode,
2077
+ enabled: () => this.root.opts.open.current && !this.root.disableHoverableContent,
2078
+ transitIntentTimeout: 180,
2079
+ ignoredTargets: () => {
2080
+ if (this.root.provider.opts.skipDelayDuration.current === 0) return [];
2081
+ const nodes = [];
2082
+ const activeTriggerNode = this.root.triggerNode;
2083
+ for (const record of this.root.registry.triggers.values()) {
2084
+ if (record.node && record.node !== activeTriggerNode) {
2085
+ nodes.push(record.node);
2086
+ }
2087
+ }
2088
+ return nodes;
2089
+ },
2090
+ onPointerExit: () => {
2091
+ if (this.root.provider.isTooltipOpen(this.root)) {
2092
+ this.root.handleClose();
2093
+ }
2094
+ }
2095
+ });
2096
+ }
2097
+ onInteractOutside = (e) => {
2098
+ if (isElement(e.target) && this.root.triggerNode?.contains(e.target) && this.root.disableCloseOnTriggerClick) {
2099
+ e.preventDefault();
2100
+ return;
2101
+ }
2102
+ this.opts.onInteractOutside.current(e);
2103
+ if (e.defaultPrevented) return;
2104
+ this.root.handleClose();
2105
+ };
2106
+ onEscapeKeydown = (e) => {
2107
+ this.opts.onEscapeKeydown.current?.(e);
2108
+ if (e.defaultPrevented) return;
2109
+ this.root.handleClose();
2110
+ };
2111
+ onOpenAutoFocus = (e) => {
2112
+ e.preventDefault();
2113
+ };
2114
+ onCloseAutoFocus = (e) => {
2115
+ e.preventDefault();
2116
+ };
2117
+ get shouldRender() {
2118
+ return this.root.contentPresence.shouldRender;
2119
+ }
2120
+ #snippetProps = derived(() => ({ open: this.root.opts.open.current }));
2121
+ get snippetProps() {
2122
+ return this.#snippetProps();
2123
+ }
2124
+ set snippetProps($$value) {
2125
+ return this.#snippetProps($$value);
2126
+ }
2127
+ #props = derived(() => ({
2128
+ id: this.opts.id.current,
2129
+ "data-state": this.root.stateAttr,
2130
+ "data-disabled": boolToEmptyStrOrUndef(this.root.disabled),
2131
+ style: { outline: "none" },
2132
+ [tooltipAttrs.content]: "",
2133
+ ...this.attachment
2134
+ }));
2135
+ get props() {
2136
+ return this.#props();
2137
+ }
2138
+ set props($$value) {
2139
+ return this.#props($$value);
2140
+ }
2141
+ popperProps = {
2142
+ onInteractOutside: this.onInteractOutside,
2143
+ onEscapeKeydown: this.onEscapeKeydown,
2144
+ onOpenAutoFocus: this.onOpenAutoFocus,
2145
+ onCloseAutoFocus: this.onCloseAutoFocus
2146
+ };
2147
+ }
2148
+ function Tooltip$1($$renderer, $$props) {
2149
+ $$renderer.component(($$renderer2) => {
2150
+ let {
2151
+ open = false,
2152
+ triggerId = null,
2153
+ onOpenChange = noop,
2154
+ onOpenChangeComplete = noop,
2155
+ disabled,
2156
+ delayDuration,
2157
+ disableCloseOnTriggerClick,
2158
+ disableHoverableContent,
2159
+ ignoreNonKeyboardFocus,
2160
+ tether,
2161
+ children
2162
+ } = $$props;
2163
+ const rootState = TooltipRootState.create({
2164
+ open: boxWith(() => open, (v) => {
2165
+ open = v;
2166
+ onOpenChange(v);
2167
+ }),
2168
+ triggerId: boxWith(() => triggerId, (v) => {
2169
+ triggerId = v;
2170
+ }),
2171
+ delayDuration: boxWith(() => delayDuration),
2172
+ disableCloseOnTriggerClick: boxWith(() => disableCloseOnTriggerClick),
2173
+ disableHoverableContent: boxWith(() => disableHoverableContent),
2174
+ ignoreNonKeyboardFocus: boxWith(() => ignoreNonKeyboardFocus),
2175
+ disabled: boxWith(() => disabled),
2176
+ onOpenChangeComplete: boxWith(() => onOpenChangeComplete),
2177
+ tether: boxWith(() => tether)
2178
+ });
2179
+ Floating_layer($$renderer2, {
2180
+ tooltip: true,
2181
+ children: ($$renderer3) => {
2182
+ children?.($$renderer3, {
2183
+ open: rootState.opts.open.current,
2184
+ triggerId: rootState.activeTriggerId,
2185
+ payload: rootState.activePayload
2186
+ });
2187
+ $$renderer3.push(`<!---->`);
2188
+ }
2189
+ });
2190
+ bind_props($$props, { open, triggerId });
2191
+ });
2192
+ }
2193
+ function Tooltip_content$1($$renderer, $$props) {
2194
+ $$renderer.component(($$renderer2) => {
2195
+ const uid = props_id($$renderer2);
2196
+ let {
2197
+ children,
2198
+ child,
2199
+ id = createId(uid),
2200
+ ref = null,
2201
+ side = "top",
2202
+ sideOffset = 0,
2203
+ align = "center",
2204
+ avoidCollisions = true,
2205
+ arrowPadding = 0,
2206
+ sticky = "partial",
2207
+ strategy,
2208
+ hideWhenDetached = false,
2209
+ customAnchor,
2210
+ collisionPadding = 0,
2211
+ onInteractOutside = noop,
2212
+ onEscapeKeydown = noop,
2213
+ forceMount = false,
2214
+ style,
2215
+ $$slots,
2216
+ $$events,
2217
+ ...restProps
2218
+ } = $$props;
2219
+ const contentState = TooltipContentState.create({
2220
+ id: boxWith(() => id),
2221
+ ref: boxWith(() => ref, (v) => ref = v),
2222
+ onInteractOutside: boxWith(() => onInteractOutside),
2223
+ onEscapeKeydown: boxWith(() => onEscapeKeydown)
2224
+ });
2225
+ const floatingProps = derived(() => ({
2226
+ side,
2227
+ sideOffset,
2228
+ align,
2229
+ avoidCollisions,
2230
+ arrowPadding,
2231
+ sticky,
2232
+ hideWhenDetached,
2233
+ collisionPadding,
2234
+ strategy,
2235
+ customAnchor: customAnchor ?? contentState.root.triggerNode
2236
+ }));
2237
+ const mergedProps = derived(() => mergeProps(restProps, floatingProps(), contentState.props));
2238
+ if (forceMount) {
2239
+ $$renderer2.push("<!--[0-->");
2240
+ {
2241
+ let popper = function($$renderer3, { props, wrapperProps }) {
2242
+ const finalProps = mergeProps(props, { style: getFloatingContentCSSVars("tooltip") }, { style });
2243
+ if (child) {
2244
+ $$renderer3.push("<!--[0-->");
2245
+ child($$renderer3, {
2246
+ props: finalProps,
2247
+ wrapperProps,
2248
+ ...contentState.snippetProps
2249
+ });
2250
+ $$renderer3.push(`<!---->`);
2251
+ } else {
2252
+ $$renderer3.push("<!--[-1-->");
2253
+ $$renderer3.push(`<div${attributes({ ...wrapperProps })}><div${attributes({ ...finalProps })}>`);
2254
+ children?.($$renderer3);
2255
+ $$renderer3.push(`<!----></div></div>`);
2256
+ }
2257
+ $$renderer3.push(`<!--]-->`);
2258
+ };
2259
+ Popper_layer_force_mount($$renderer2, spread_props([
2260
+ mergedProps(),
2261
+ contentState.popperProps,
2262
+ {
2263
+ enabled: contentState.root.opts.open.current,
2264
+ id,
2265
+ trapFocus: false,
2266
+ loop: false,
2267
+ preventScroll: false,
2268
+ forceMount: true,
2269
+ ref: contentState.opts.ref,
2270
+ tooltip: true,
2271
+ shouldRender: contentState.shouldRender,
2272
+ contentPointerEvents: contentState.root.disableHoverableContent ? "none" : "auto",
2273
+ popper,
2274
+ $$slots: { popper: true }
2275
+ }
2276
+ ]));
2277
+ }
2278
+ } else if (!forceMount) {
2279
+ $$renderer2.push("<!--[1-->");
2280
+ {
2281
+ let popper = function($$renderer3, { props, wrapperProps }) {
2282
+ const finalProps = mergeProps(props, { style: getFloatingContentCSSVars("tooltip") }, { style });
2283
+ if (child) {
2284
+ $$renderer3.push("<!--[0-->");
2285
+ child($$renderer3, {
2286
+ props: finalProps,
2287
+ wrapperProps,
2288
+ ...contentState.snippetProps
2289
+ });
2290
+ $$renderer3.push(`<!---->`);
2291
+ } else {
2292
+ $$renderer3.push("<!--[-1-->");
2293
+ $$renderer3.push(`<div${attributes({ ...wrapperProps })}><div${attributes({ ...finalProps })}>`);
2294
+ children?.($$renderer3);
2295
+ $$renderer3.push(`<!----></div></div>`);
2296
+ }
2297
+ $$renderer3.push(`<!--]-->`);
2298
+ };
2299
+ Popper_layer($$renderer2, spread_props([
2300
+ mergedProps(),
2301
+ contentState.popperProps,
2302
+ {
2303
+ open: contentState.root.opts.open.current,
2304
+ id,
2305
+ trapFocus: false,
2306
+ loop: false,
2307
+ preventScroll: false,
2308
+ forceMount: false,
2309
+ ref: contentState.opts.ref,
2310
+ tooltip: true,
2311
+ shouldRender: contentState.shouldRender,
2312
+ contentPointerEvents: contentState.root.disableHoverableContent ? "none" : "auto",
2313
+ popper,
2314
+ $$slots: { popper: true }
2315
+ }
2316
+ ]));
2317
+ }
2318
+ } else {
2319
+ $$renderer2.push("<!--[-1-->");
2320
+ }
2321
+ $$renderer2.push(`<!--]-->`);
2322
+ bind_props($$props, { ref });
2323
+ });
2324
+ }
2325
+ function Tooltip_trigger$1($$renderer, $$props) {
2326
+ $$renderer.component(($$renderer2) => {
2327
+ const uid = props_id($$renderer2);
2328
+ let {
2329
+ children,
2330
+ child,
2331
+ id = createId(uid),
2332
+ disabled = false,
2333
+ payload,
2334
+ tether,
2335
+ type = "button",
2336
+ tabindex = 0,
2337
+ ref = null,
2338
+ $$slots,
2339
+ $$events,
2340
+ ...restProps
2341
+ } = $$props;
2342
+ const triggerState = TooltipTriggerState.create({
2343
+ id: boxWith(() => id),
2344
+ disabled: boxWith(() => disabled ?? false),
2345
+ tabindex: boxWith(() => tabindex ?? 0),
2346
+ payload: boxWith(() => payload),
2347
+ tether: boxWith(() => tether),
2348
+ ref: boxWith(() => ref, (v) => ref = v)
2349
+ });
2350
+ const mergedProps = derived(() => mergeProps(restProps, triggerState.props, { type }));
2351
+ if (child) {
2352
+ $$renderer2.push("<!--[0-->");
2353
+ child($$renderer2, { props: mergedProps() });
2354
+ $$renderer2.push(`<!---->`);
2355
+ } else {
2356
+ $$renderer2.push("<!--[-1-->");
2357
+ $$renderer2.push(`<button${attributes({ ...mergedProps() })}>`);
2358
+ children?.($$renderer2);
2359
+ $$renderer2.push(`<!----></button>`);
2360
+ }
2361
+ $$renderer2.push(`<!--]-->`);
2362
+ bind_props($$props, { ref });
2363
+ });
2364
+ }
2365
+ function Tooltip_arrow($$renderer, $$props) {
2366
+ $$renderer.component(($$renderer2) => {
2367
+ let { ref = null, $$slots, $$events, ...restProps } = $$props;
2368
+ let $$settled = true;
2369
+ let $$inner_renderer;
2370
+ function $$render_inner($$renderer3) {
2371
+ Floating_layer_arrow($$renderer3, spread_props([
2372
+ restProps,
2373
+ {
2374
+ get ref() {
2375
+ return ref;
2376
+ },
2377
+ set ref($$value) {
2378
+ ref = $$value;
2379
+ $$settled = false;
2380
+ }
2381
+ }
2382
+ ]));
2383
+ }
2384
+ do {
2385
+ $$settled = true;
2386
+ $$inner_renderer = $$renderer2.copy();
2387
+ $$render_inner($$inner_renderer);
2388
+ } while (!$$settled);
2389
+ $$renderer2.subsume($$inner_renderer);
2390
+ bind_props($$props, { ref });
2391
+ });
2392
+ }
2393
+ function Tooltip_provider$1($$renderer, $$props) {
2394
+ $$renderer.component(($$renderer2) => {
2395
+ let {
2396
+ children,
2397
+ delayDuration = 700,
2398
+ disableCloseOnTriggerClick = false,
2399
+ disableHoverableContent = false,
2400
+ disabled = false,
2401
+ ignoreNonKeyboardFocus = false,
2402
+ skipDelayDuration = 300
2403
+ } = $$props;
2404
+ TooltipProviderState.create({
2405
+ delayDuration: boxWith(() => delayDuration),
2406
+ disableCloseOnTriggerClick: boxWith(() => disableCloseOnTriggerClick),
2407
+ disableHoverableContent: boxWith(() => disableHoverableContent),
2408
+ disabled: boxWith(() => disabled),
2409
+ ignoreNonKeyboardFocus: boxWith(() => ignoreNonKeyboardFocus),
2410
+ skipDelayDuration: boxWith(() => skipDelayDuration)
2411
+ });
2412
+ children?.($$renderer2);
2413
+ $$renderer2.push(`<!---->`);
2414
+ });
2415
+ }
2416
+ function Tooltip($$renderer, $$props) {
2417
+ $$renderer.component(($$renderer2) => {
2418
+ let { open = false, $$slots, $$events, ...restProps } = $$props;
2419
+ let $$settled = true;
2420
+ let $$inner_renderer;
2421
+ function $$render_inner($$renderer3) {
2422
+ if (Tooltip$1) {
2423
+ $$renderer3.push("<!--[-->");
2424
+ Tooltip$1($$renderer3, spread_props([
2425
+ restProps,
2426
+ {
2427
+ get open() {
2428
+ return open;
2429
+ },
2430
+ set open($$value) {
2431
+ open = $$value;
2432
+ $$settled = false;
2433
+ }
2434
+ }
2435
+ ]));
2436
+ $$renderer3.push("<!--]-->");
2437
+ } else {
2438
+ $$renderer3.push("<!--[!-->");
2439
+ $$renderer3.push("<!--]-->");
2440
+ }
2441
+ }
2442
+ do {
2443
+ $$settled = true;
2444
+ $$inner_renderer = $$renderer2.copy();
2445
+ $$render_inner($$inner_renderer);
2446
+ } while (!$$settled);
2447
+ $$renderer2.subsume($$inner_renderer);
2448
+ bind_props($$props, { open });
2449
+ });
2450
+ }
2451
+ function Tooltip_trigger($$renderer, $$props) {
2452
+ $$renderer.component(($$renderer2) => {
2453
+ let { ref = null, $$slots, $$events, ...restProps } = $$props;
2454
+ let $$settled = true;
2455
+ let $$inner_renderer;
2456
+ function $$render_inner($$renderer3) {
2457
+ if (Tooltip_trigger$1) {
2458
+ $$renderer3.push("<!--[-->");
2459
+ Tooltip_trigger$1($$renderer3, spread_props([
2460
+ { "data-slot": "tooltip-trigger" },
2461
+ restProps,
2462
+ {
2463
+ get ref() {
2464
+ return ref;
2465
+ },
2466
+ set ref($$value) {
2467
+ ref = $$value;
2468
+ $$settled = false;
2469
+ }
2470
+ }
2471
+ ]));
2472
+ $$renderer3.push("<!--]-->");
2473
+ } else {
2474
+ $$renderer3.push("<!--[!-->");
2475
+ $$renderer3.push("<!--]-->");
2476
+ }
2477
+ }
2478
+ do {
2479
+ $$settled = true;
2480
+ $$inner_renderer = $$renderer2.copy();
2481
+ $$render_inner($$inner_renderer);
2482
+ } while (!$$settled);
2483
+ $$renderer2.subsume($$inner_renderer);
2484
+ bind_props($$props, { ref });
2485
+ });
2486
+ }
2487
+ function Tooltip_portal($$renderer, $$props) {
2488
+ let { $$slots, $$events, ...restProps } = $$props;
2489
+ if (Portal) {
2490
+ $$renderer.push("<!--[-->");
2491
+ Portal($$renderer, spread_props([restProps]));
2492
+ $$renderer.push("<!--]-->");
2493
+ } else {
2494
+ $$renderer.push("<!--[!-->");
2495
+ $$renderer.push("<!--]-->");
2496
+ }
2497
+ }
2498
+ function Tooltip_content($$renderer, $$props) {
2499
+ $$renderer.component(($$renderer2) => {
2500
+ let {
2501
+ ref = null,
2502
+ class: className,
2503
+ sideOffset = 0,
2504
+ side = "top",
2505
+ children,
2506
+ arrowClasses,
2507
+ portalProps,
2508
+ $$slots,
2509
+ $$events,
2510
+ ...restProps
2511
+ } = $$props;
2512
+ let $$settled = true;
2513
+ let $$inner_renderer;
2514
+ function $$render_inner($$renderer3) {
2515
+ Tooltip_portal($$renderer3, spread_props([
2516
+ portalProps,
2517
+ {
2518
+ children: ($$renderer4) => {
2519
+ if (Tooltip_content$1) {
2520
+ $$renderer4.push("<!--[-->");
2521
+ Tooltip_content$1($$renderer4, spread_props([
2522
+ {
2523
+ "data-slot": "tooltip-content",
2524
+ sideOffset,
2525
+ side,
2526
+ class: cn("bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--bits-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance", className)
2527
+ },
2528
+ restProps,
2529
+ {
2530
+ get ref() {
2531
+ return ref;
2532
+ },
2533
+ set ref($$value) {
2534
+ ref = $$value;
2535
+ $$settled = false;
2536
+ },
2537
+ children: ($$renderer5) => {
2538
+ children?.($$renderer5);
2539
+ $$renderer5.push(`<!----> `);
2540
+ {
2541
+ let child = function($$renderer6, { props }) {
2542
+ $$renderer6.push(`<div${attributes({
2543
+ class: clsx(cn("bg-foreground z-50 size-2.5 rotate-45 rounded-[2px]", "data-[side=top]:translate-x-1/2 data-[side=top]:translate-y-[calc(-50%_+_2px)]", "data-[side=bottom]:-translate-x-1/2 data-[side=bottom]:-translate-y-[calc(-50%_+_1px)]", "data-[side=right]:translate-x-[calc(50%_+_2px)] data-[side=right]:translate-y-1/2", "data-[side=left]:-translate-y-[calc(50%_-_3px)]", arrowClasses)),
2544
+ ...props
2545
+ })}></div>`);
2546
+ };
2547
+ if (Tooltip_arrow) {
2548
+ $$renderer5.push("<!--[-->");
2549
+ Tooltip_arrow($$renderer5, { child, $$slots: { child: true } });
2550
+ $$renderer5.push("<!--]-->");
2551
+ } else {
2552
+ $$renderer5.push("<!--[!-->");
2553
+ $$renderer5.push("<!--]-->");
2554
+ }
2555
+ }
2556
+ },
2557
+ $$slots: { default: true }
2558
+ }
2559
+ ]));
2560
+ $$renderer4.push("<!--]-->");
2561
+ } else {
2562
+ $$renderer4.push("<!--[!-->");
2563
+ $$renderer4.push("<!--]-->");
2564
+ }
2565
+ },
2566
+ $$slots: { default: true }
2567
+ }
2568
+ ]));
2569
+ }
2570
+ do {
2571
+ $$settled = true;
2572
+ $$inner_renderer = $$renderer2.copy();
2573
+ $$render_inner($$inner_renderer);
2574
+ } while (!$$settled);
2575
+ $$renderer2.subsume($$inner_renderer);
2576
+ bind_props($$props, { ref });
2577
+ });
2578
+ }
2579
+ function Tooltip_provider($$renderer, $$props) {
2580
+ let { $$slots, $$events, ...restProps } = $$props;
2581
+ if (Tooltip_provider$1) {
2582
+ $$renderer.push("<!--[-->");
2583
+ Tooltip_provider$1($$renderer, spread_props([restProps]));
2584
+ $$renderer.push("<!--]-->");
2585
+ } else {
2586
+ $$renderer.push("<!--[!-->");
2587
+ $$renderer.push("<!--]-->");
2588
+ }
2589
+ }
2590
+ const sidebarMenuButtonVariants = tv({
2591
+ base: "peer/menu-button ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-start text-sm outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pe-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:font-medium [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
2592
+ variants: {
2593
+ variant: {
2594
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
2595
+ outline: "bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_var(--sidebar-border)] hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
2596
+ },
2597
+ size: {
2598
+ default: "h-8 text-sm",
2599
+ sm: "h-7 text-xs",
2600
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
2601
+ }
2602
+ },
2603
+ defaultVariants: { variant: "default", size: "default" }
2604
+ });
2605
+ function Sidebar_menu_button($$renderer, $$props) {
2606
+ $$renderer.component(($$renderer2) => {
2607
+ let {
2608
+ ref = null,
2609
+ class: className,
2610
+ children,
2611
+ child,
2612
+ variant = "default",
2613
+ size: size2 = "default",
2614
+ isActive = false,
2615
+ tooltipContent,
2616
+ tooltipContentProps,
2617
+ $$slots,
2618
+ $$events,
2619
+ ...restProps
2620
+ } = $$props;
2621
+ const sidebar = useSidebar();
2622
+ const buttonProps = derived(() => ({
2623
+ class: cn(sidebarMenuButtonVariants({ variant, size: size2 }), className),
2624
+ "data-slot": "sidebar-menu-button",
2625
+ "data-sidebar": "menu-button",
2626
+ "data-size": size2,
2627
+ "data-active": isActive,
2628
+ ...restProps
2629
+ }));
2630
+ function Button2($$renderer3, { props }) {
2631
+ const mergedProps = mergeProps(buttonProps(), props);
2632
+ if (child) {
2633
+ $$renderer3.push("<!--[0-->");
2634
+ child($$renderer3, { props: mergedProps });
2635
+ $$renderer3.push(`<!---->`);
2636
+ } else {
2637
+ $$renderer3.push("<!--[-1-->");
2638
+ $$renderer3.push(`<button${attributes({ ...mergedProps })}>`);
2639
+ children?.($$renderer3);
2640
+ $$renderer3.push(`<!----></button>`);
2641
+ }
2642
+ $$renderer3.push(`<!--]-->`);
2643
+ }
2644
+ if (!tooltipContent) {
2645
+ $$renderer2.push("<!--[0-->");
2646
+ Button2($$renderer2, {});
2647
+ } else {
2648
+ $$renderer2.push("<!--[-1-->");
2649
+ if (Tooltip) {
2650
+ $$renderer2.push("<!--[-->");
2651
+ Tooltip($$renderer2, {
2652
+ children: ($$renderer3) => {
2653
+ {
2654
+ let child2 = function($$renderer4, { props }) {
2655
+ Button2($$renderer4, { props });
2656
+ };
2657
+ if (Tooltip_trigger) {
2658
+ $$renderer3.push("<!--[-->");
2659
+ Tooltip_trigger($$renderer3, { child: child2, $$slots: { child: true } });
2660
+ $$renderer3.push("<!--]-->");
2661
+ } else {
2662
+ $$renderer3.push("<!--[!-->");
2663
+ $$renderer3.push("<!--]-->");
2664
+ }
2665
+ }
2666
+ $$renderer3.push(` `);
2667
+ if (Tooltip_content) {
2668
+ $$renderer3.push("<!--[-->");
2669
+ Tooltip_content($$renderer3, spread_props([
2670
+ {
2671
+ side: "right",
2672
+ align: "center",
2673
+ hidden: sidebar.state !== "collapsed" || sidebar.isMobile
2674
+ },
2675
+ tooltipContentProps,
2676
+ {
2677
+ children: ($$renderer4) => {
2678
+ if (typeof tooltipContent === "string") {
2679
+ $$renderer4.push("<!--[0-->");
2680
+ $$renderer4.push(`${escape_html(tooltipContent)}`);
2681
+ } else if (tooltipContent) {
2682
+ $$renderer4.push("<!--[1-->");
2683
+ tooltipContent($$renderer4);
2684
+ $$renderer4.push(`<!---->`);
2685
+ } else {
2686
+ $$renderer4.push("<!--[-1-->");
2687
+ }
2688
+ $$renderer4.push(`<!--]-->`);
2689
+ },
2690
+ $$slots: { default: true }
2691
+ }
2692
+ ]));
2693
+ $$renderer3.push("<!--]-->");
2694
+ } else {
2695
+ $$renderer3.push("<!--[!-->");
2696
+ $$renderer3.push("<!--]-->");
2697
+ }
2698
+ },
2699
+ $$slots: { default: true }
2700
+ });
2701
+ $$renderer2.push("<!--]-->");
2702
+ } else {
2703
+ $$renderer2.push("<!--[!-->");
2704
+ $$renderer2.push("<!--]-->");
2705
+ }
2706
+ }
2707
+ $$renderer2.push(`<!--]-->`);
2708
+ bind_props($$props, { ref });
2709
+ });
2710
+ }
2711
+ function Sidebar_menu_item($$renderer, $$props) {
2712
+ $$renderer.component(($$renderer2) => {
2713
+ let {
2714
+ ref = null,
2715
+ class: className,
2716
+ children,
2717
+ $$slots,
2718
+ $$events,
2719
+ ...restProps
2720
+ } = $$props;
2721
+ $$renderer2.push(`<li${attributes({
2722
+ "data-slot": "sidebar-menu-item",
2723
+ "data-sidebar": "menu-item",
2724
+ class: clsx(cn("group/menu-item relative", className)),
2725
+ ...restProps
2726
+ })}>`);
2727
+ children?.($$renderer2);
2728
+ $$renderer2.push(`<!----></li>`);
2729
+ bind_props($$props, { ref });
2730
+ });
2731
+ }
2732
+ function Sidebar_menu($$renderer, $$props) {
2733
+ $$renderer.component(($$renderer2) => {
2734
+ let {
2735
+ ref = null,
2736
+ class: className,
2737
+ children,
2738
+ $$slots,
2739
+ $$events,
2740
+ ...restProps
2741
+ } = $$props;
2742
+ $$renderer2.push(`<ul${attributes({
2743
+ "data-slot": "sidebar-menu",
2744
+ "data-sidebar": "menu",
2745
+ class: clsx(cn("flex w-full min-w-0 flex-col gap-1", className)),
2746
+ ...restProps
2747
+ })}>`);
2748
+ children?.($$renderer2);
2749
+ $$renderer2.push(`<!----></ul>`);
2750
+ bind_props($$props, { ref });
2751
+ });
2752
+ }
2753
+ function Sidebar_provider($$renderer, $$props) {
2754
+ $$renderer.component(($$renderer2) => {
2755
+ let {
2756
+ ref = null,
2757
+ open = true,
2758
+ onOpenChange = () => {
2759
+ },
2760
+ class: className,
2761
+ style,
2762
+ children,
2763
+ $$slots,
2764
+ $$events,
2765
+ ...restProps
2766
+ } = $$props;
2767
+ setSidebar({
2768
+ open: () => open,
2769
+ setOpen: (value) => {
2770
+ open = value;
2771
+ onOpenChange(value);
2772
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${open}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
2773
+ }
2774
+ });
2775
+ if (Tooltip_provider) {
2776
+ $$renderer2.push("<!--[-->");
2777
+ Tooltip_provider($$renderer2, {
2778
+ delayDuration: 0,
2779
+ children: ($$renderer3) => {
2780
+ $$renderer3.push(`<div${attributes({
2781
+ "data-slot": "sidebar-wrapper",
2782
+ style: `--sidebar-width: ${stringify(SIDEBAR_WIDTH)}; --sidebar-width-icon: ${stringify(SIDEBAR_WIDTH_ICON)}; ${stringify(style)}`,
2783
+ class: clsx(cn("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full", className)),
2784
+ ...restProps
2785
+ })}>`);
2786
+ children?.($$renderer3);
2787
+ $$renderer3.push(`<!----></div>`);
2788
+ },
2789
+ $$slots: { default: true }
2790
+ });
2791
+ $$renderer2.push("<!--]-->");
2792
+ } else {
2793
+ $$renderer2.push("<!--[!-->");
2794
+ $$renderer2.push("<!--]-->");
2795
+ }
2796
+ bind_props($$props, { ref, open });
2797
+ });
2798
+ }
2799
+ function Panel_left($$renderer, $$props) {
2800
+ $$renderer.component(($$renderer2) => {
2801
+ let { $$slots, $$events, ...props } = $$props;
2802
+ const iconNode = [
2803
+ [
2804
+ "rect",
2805
+ { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }
2806
+ ],
2807
+ ["path", { "d": "M9 3v18" }]
2808
+ ];
2809
+ Icon($$renderer2, spread_props([
2810
+ { name: "panel-left" },
2811
+ /**
2812
+ * @component @name PanelLeft
2813
+ * @description Lucide SVG icon component, renders SVG Element with children.
2814
+ *
2815
+ * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik05IDN2MTgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/panel-left
2816
+ * @see https://lucide.dev/guide/packages/lucide-svelte - Documentation
2817
+ *
2818
+ * @param {Object} props - Lucide icons props and any valid SVG attribute
2819
+ * @returns {FunctionalComponent} Svelte component
2820
+ *
2821
+ */
2822
+ props,
2823
+ {
2824
+ iconNode,
2825
+ children: ($$renderer3) => {
2826
+ props.children?.($$renderer3);
2827
+ $$renderer3.push(`<!---->`);
2828
+ },
2829
+ $$slots: { default: true }
2830
+ }
2831
+ ]));
2832
+ });
2833
+ }
2834
+ function Sidebar_trigger($$renderer, $$props) {
2835
+ $$renderer.component(($$renderer2) => {
2836
+ let {
2837
+ ref = null,
2838
+ class: className,
2839
+ onclick,
2840
+ $$slots,
2841
+ $$events,
2842
+ ...restProps
2843
+ } = $$props;
2844
+ const sidebar = useSidebar();
2845
+ Button($$renderer2, spread_props([
2846
+ {
2847
+ "data-sidebar": "trigger",
2848
+ "data-slot": "sidebar-trigger",
2849
+ variant: "ghost",
2850
+ size: "icon",
2851
+ class: cn("size-7", className),
2852
+ type: "button",
2853
+ onclick: (e) => {
2854
+ onclick?.(e);
2855
+ sidebar.toggle();
2856
+ }
2857
+ },
2858
+ restProps,
2859
+ {
2860
+ children: ($$renderer3) => {
2861
+ Panel_left($$renderer3, {});
2862
+ $$renderer3.push(`<!----> <span class="sr-only">Toggle Sidebar</span>`);
2863
+ },
2864
+ $$slots: { default: true }
2865
+ }
2866
+ ]));
2867
+ bind_props($$props, { ref });
2868
+ });
2869
+ }
2870
+ function Sheet($$renderer, $$props) {
2871
+ $$renderer.component(($$renderer2) => {
2872
+ let { open = false, $$slots, $$events, ...restProps } = $$props;
2873
+ let $$settled = true;
2874
+ let $$inner_renderer;
2875
+ function $$render_inner($$renderer3) {
2876
+ if (Dialog) {
2877
+ $$renderer3.push("<!--[-->");
2878
+ Dialog($$renderer3, spread_props([
2879
+ restProps,
2880
+ {
2881
+ get open() {
2882
+ return open;
2883
+ },
2884
+ set open($$value) {
2885
+ open = $$value;
2886
+ $$settled = false;
2887
+ }
2888
+ }
2889
+ ]));
2890
+ $$renderer3.push("<!--]-->");
2891
+ } else {
2892
+ $$renderer3.push("<!--[!-->");
2893
+ $$renderer3.push("<!--]-->");
2894
+ }
2895
+ }
2896
+ do {
2897
+ $$settled = true;
2898
+ $$inner_renderer = $$renderer2.copy();
2899
+ $$render_inner($$inner_renderer);
2900
+ } while (!$$settled);
2901
+ $$renderer2.subsume($$inner_renderer);
2902
+ bind_props($$props, { open });
2903
+ });
2904
+ }
2905
+ function Sheet_portal($$renderer, $$props) {
2906
+ let { $$slots, $$events, ...restProps } = $$props;
2907
+ if (Portal) {
2908
+ $$renderer.push("<!--[-->");
2909
+ Portal($$renderer, spread_props([restProps]));
2910
+ $$renderer.push("<!--]-->");
2911
+ } else {
2912
+ $$renderer.push("<!--[!-->");
2913
+ $$renderer.push("<!--]-->");
2914
+ }
2915
+ }
2916
+ function Sheet_overlay($$renderer, $$props) {
2917
+ $$renderer.component(($$renderer2) => {
2918
+ let {
2919
+ ref = null,
2920
+ class: className,
2921
+ $$slots,
2922
+ $$events,
2923
+ ...restProps
2924
+ } = $$props;
2925
+ let $$settled = true;
2926
+ let $$inner_renderer;
2927
+ function $$render_inner($$renderer3) {
2928
+ if (Dialog_overlay) {
2929
+ $$renderer3.push("<!--[-->");
2930
+ Dialog_overlay($$renderer3, spread_props([
2931
+ {
2932
+ "data-slot": "sheet-overlay",
2933
+ class: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className)
2934
+ },
2935
+ restProps,
2936
+ {
2937
+ get ref() {
2938
+ return ref;
2939
+ },
2940
+ set ref($$value) {
2941
+ ref = $$value;
2942
+ $$settled = false;
2943
+ }
2944
+ }
2945
+ ]));
2946
+ $$renderer3.push("<!--]-->");
2947
+ } else {
2948
+ $$renderer3.push("<!--[!-->");
2949
+ $$renderer3.push("<!--]-->");
2950
+ }
2951
+ }
2952
+ do {
2953
+ $$settled = true;
2954
+ $$inner_renderer = $$renderer2.copy();
2955
+ $$render_inner($$inner_renderer);
2956
+ } while (!$$settled);
2957
+ $$renderer2.subsume($$inner_renderer);
2958
+ bind_props($$props, { ref });
2959
+ });
2960
+ }
2961
+ const sheetVariants = tv({
2962
+ base: "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
2963
+ variants: {
2964
+ side: {
2965
+ top: "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
2966
+ bottom: "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
2967
+ left: "data-[state=closed]:slide-out-to-start data-[state=open]:slide-in-from-start inset-y-0 start-0 h-full w-3/4 border-e sm:max-w-sm",
2968
+ right: "data-[state=closed]:slide-out-to-end data-[state=open]:slide-in-from-end inset-y-0 end-0 h-full w-3/4 border-s sm:max-w-sm"
2969
+ }
2970
+ },
2971
+ defaultVariants: { side: "right" }
2972
+ });
2973
+ function Sheet_content($$renderer, $$props) {
2974
+ $$renderer.component(($$renderer2) => {
2975
+ let {
2976
+ ref = null,
2977
+ class: className,
2978
+ side = "right",
2979
+ portalProps,
2980
+ children,
2981
+ $$slots,
2982
+ $$events,
2983
+ ...restProps
2984
+ } = $$props;
2985
+ let $$settled = true;
2986
+ let $$inner_renderer;
2987
+ function $$render_inner($$renderer3) {
2988
+ Sheet_portal($$renderer3, spread_props([
2989
+ portalProps,
2990
+ {
2991
+ children: ($$renderer4) => {
2992
+ Sheet_overlay($$renderer4, {});
2993
+ $$renderer4.push(`<!----> `);
2994
+ if (Dialog_content) {
2995
+ $$renderer4.push("<!--[-->");
2996
+ Dialog_content($$renderer4, spread_props([
2997
+ {
2998
+ "data-slot": "sheet-content",
2999
+ class: cn(sheetVariants({ side }), className)
3000
+ },
3001
+ restProps,
3002
+ {
3003
+ get ref() {
3004
+ return ref;
3005
+ },
3006
+ set ref($$value) {
3007
+ ref = $$value;
3008
+ $$settled = false;
3009
+ },
3010
+ children: ($$renderer5) => {
3011
+ children?.($$renderer5);
3012
+ $$renderer5.push(`<!----> `);
3013
+ if (Dialog_close) {
3014
+ $$renderer5.push("<!--[-->");
3015
+ Dialog_close($$renderer5, {
3016
+ class: "ring-offset-background focus-visible:ring-ring absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none",
3017
+ children: ($$renderer6) => {
3018
+ X($$renderer6, { class: "size-4" });
3019
+ $$renderer6.push(`<!----> <span class="sr-only">Close</span>`);
3020
+ },
3021
+ $$slots: { default: true }
3022
+ });
3023
+ $$renderer5.push("<!--]-->");
3024
+ } else {
3025
+ $$renderer5.push("<!--[!-->");
3026
+ $$renderer5.push("<!--]-->");
3027
+ }
3028
+ },
3029
+ $$slots: { default: true }
3030
+ }
3031
+ ]));
3032
+ $$renderer4.push("<!--]-->");
3033
+ } else {
3034
+ $$renderer4.push("<!--[!-->");
3035
+ $$renderer4.push("<!--]-->");
3036
+ }
3037
+ },
3038
+ $$slots: { default: true }
3039
+ }
3040
+ ]));
3041
+ }
3042
+ do {
3043
+ $$settled = true;
3044
+ $$inner_renderer = $$renderer2.copy();
3045
+ $$render_inner($$inner_renderer);
3046
+ } while (!$$settled);
3047
+ $$renderer2.subsume($$inner_renderer);
3048
+ bind_props($$props, { ref });
3049
+ });
3050
+ }
3051
+ function Sheet_header($$renderer, $$props) {
3052
+ $$renderer.component(($$renderer2) => {
3053
+ let {
3054
+ ref = null,
3055
+ class: className,
3056
+ children,
3057
+ $$slots,
3058
+ $$events,
3059
+ ...restProps
3060
+ } = $$props;
3061
+ $$renderer2.push(`<div${attributes({
3062
+ "data-slot": "sheet-header",
3063
+ class: clsx(cn("flex flex-col gap-1.5 p-4", className)),
3064
+ ...restProps
3065
+ })}>`);
3066
+ children?.($$renderer2);
3067
+ $$renderer2.push(`<!----></div>`);
3068
+ bind_props($$props, { ref });
3069
+ });
3070
+ }
3071
+ function Sheet_title($$renderer, $$props) {
3072
+ $$renderer.component(($$renderer2) => {
3073
+ let {
3074
+ ref = null,
3075
+ class: className,
3076
+ $$slots,
3077
+ $$events,
3078
+ ...restProps
3079
+ } = $$props;
3080
+ let $$settled = true;
3081
+ let $$inner_renderer;
3082
+ function $$render_inner($$renderer3) {
3083
+ if (Dialog_title) {
3084
+ $$renderer3.push("<!--[-->");
3085
+ Dialog_title($$renderer3, spread_props([
3086
+ {
3087
+ "data-slot": "sheet-title",
3088
+ class: cn("text-foreground font-semibold", className)
3089
+ },
3090
+ restProps,
3091
+ {
3092
+ get ref() {
3093
+ return ref;
3094
+ },
3095
+ set ref($$value) {
3096
+ ref = $$value;
3097
+ $$settled = false;
3098
+ }
3099
+ }
3100
+ ]));
3101
+ $$renderer3.push("<!--]-->");
3102
+ } else {
3103
+ $$renderer3.push("<!--[!-->");
3104
+ $$renderer3.push("<!--]-->");
3105
+ }
3106
+ }
3107
+ do {
3108
+ $$settled = true;
3109
+ $$inner_renderer = $$renderer2.copy();
3110
+ $$render_inner($$inner_renderer);
3111
+ } while (!$$settled);
3112
+ $$renderer2.subsume($$inner_renderer);
3113
+ bind_props($$props, { ref });
3114
+ });
3115
+ }
3116
+ function Sheet_description($$renderer, $$props) {
3117
+ $$renderer.component(($$renderer2) => {
3118
+ let {
3119
+ ref = null,
3120
+ class: className,
3121
+ $$slots,
3122
+ $$events,
3123
+ ...restProps
3124
+ } = $$props;
3125
+ let $$settled = true;
3126
+ let $$inner_renderer;
3127
+ function $$render_inner($$renderer3) {
3128
+ if (Dialog_description) {
3129
+ $$renderer3.push("<!--[-->");
3130
+ Dialog_description($$renderer3, spread_props([
3131
+ {
3132
+ "data-slot": "sheet-description",
3133
+ class: cn("text-muted-foreground text-sm", className)
3134
+ },
3135
+ restProps,
3136
+ {
3137
+ get ref() {
3138
+ return ref;
3139
+ },
3140
+ set ref($$value) {
3141
+ ref = $$value;
3142
+ $$settled = false;
3143
+ }
3144
+ }
3145
+ ]));
3146
+ $$renderer3.push("<!--]-->");
3147
+ } else {
3148
+ $$renderer3.push("<!--[!-->");
3149
+ $$renderer3.push("<!--]-->");
3150
+ }
3151
+ }
3152
+ do {
3153
+ $$settled = true;
3154
+ $$inner_renderer = $$renderer2.copy();
3155
+ $$render_inner($$inner_renderer);
3156
+ } while (!$$settled);
3157
+ $$renderer2.subsume($$inner_renderer);
3158
+ bind_props($$props, { ref });
3159
+ });
3160
+ }
3161
+ function Sidebar($$renderer, $$props) {
3162
+ $$renderer.component(($$renderer2) => {
3163
+ let {
3164
+ ref = null,
3165
+ side = "left",
3166
+ variant = "sidebar",
3167
+ collapsible = "offcanvas",
3168
+ class: className,
3169
+ children,
3170
+ $$slots,
3171
+ $$events,
3172
+ ...restProps
3173
+ } = $$props;
3174
+ const sidebar = useSidebar();
3175
+ let $$settled = true;
3176
+ let $$inner_renderer;
3177
+ function $$render_inner($$renderer3) {
3178
+ if (collapsible === "none") {
3179
+ $$renderer3.push("<!--[0-->");
3180
+ $$renderer3.push(`<div${attributes({
3181
+ class: clsx(cn("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", className)),
3182
+ ...restProps
3183
+ })}>`);
3184
+ children?.($$renderer3);
3185
+ $$renderer3.push(`<!----></div>`);
3186
+ } else if (sidebar.isMobile) {
3187
+ $$renderer3.push("<!--[1-->");
3188
+ var bind_get = () => sidebar.openMobile;
3189
+ var bind_set = (v) => sidebar.setOpenMobile(v);
3190
+ if (Sheet) {
3191
+ $$renderer3.push("<!--[-->");
3192
+ Sheet($$renderer3, spread_props([
3193
+ {
3194
+ get open() {
3195
+ return bind_get();
3196
+ },
3197
+ set open($$value) {
3198
+ bind_set($$value);
3199
+ }
3200
+ },
3201
+ restProps,
3202
+ {
3203
+ children: ($$renderer4) => {
3204
+ if (Sheet_content) {
3205
+ $$renderer4.push("<!--[-->");
3206
+ Sheet_content($$renderer4, {
3207
+ "data-sidebar": "sidebar",
3208
+ "data-slot": "sidebar",
3209
+ "data-mobile": "true",
3210
+ class: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
3211
+ style: `--sidebar-width: ${stringify(SIDEBAR_WIDTH_MOBILE)};`,
3212
+ side,
3213
+ children: ($$renderer5) => {
3214
+ if (Sheet_header) {
3215
+ $$renderer5.push("<!--[-->");
3216
+ Sheet_header($$renderer5, {
3217
+ class: "sr-only",
3218
+ children: ($$renderer6) => {
3219
+ if (Sheet_title) {
3220
+ $$renderer6.push("<!--[-->");
3221
+ Sheet_title($$renderer6, {
3222
+ children: ($$renderer7) => {
3223
+ $$renderer7.push(`<!---->Sidebar`);
3224
+ },
3225
+ $$slots: { default: true }
3226
+ });
3227
+ $$renderer6.push("<!--]-->");
3228
+ } else {
3229
+ $$renderer6.push("<!--[!-->");
3230
+ $$renderer6.push("<!--]-->");
3231
+ }
3232
+ $$renderer6.push(` `);
3233
+ if (Sheet_description) {
3234
+ $$renderer6.push("<!--[-->");
3235
+ Sheet_description($$renderer6, {
3236
+ children: ($$renderer7) => {
3237
+ $$renderer7.push(`<!---->Displays the mobile sidebar.`);
3238
+ },
3239
+ $$slots: { default: true }
3240
+ });
3241
+ $$renderer6.push("<!--]-->");
3242
+ } else {
3243
+ $$renderer6.push("<!--[!-->");
3244
+ $$renderer6.push("<!--]-->");
3245
+ }
3246
+ },
3247
+ $$slots: { default: true }
3248
+ });
3249
+ $$renderer5.push("<!--]-->");
3250
+ } else {
3251
+ $$renderer5.push("<!--[!-->");
3252
+ $$renderer5.push("<!--]-->");
3253
+ }
3254
+ $$renderer5.push(` <div class="flex h-full w-full flex-col">`);
3255
+ children?.($$renderer5);
3256
+ $$renderer5.push(`<!----></div>`);
3257
+ },
3258
+ $$slots: { default: true }
3259
+ });
3260
+ $$renderer4.push("<!--]-->");
3261
+ } else {
3262
+ $$renderer4.push("<!--[!-->");
3263
+ $$renderer4.push("<!--]-->");
3264
+ }
3265
+ },
3266
+ $$slots: { default: true }
3267
+ }
3268
+ ]));
3269
+ $$renderer3.push("<!--]-->");
3270
+ } else {
3271
+ $$renderer3.push("<!--[!-->");
3272
+ $$renderer3.push("<!--]-->");
3273
+ }
3274
+ } else {
3275
+ $$renderer3.push("<!--[-1-->");
3276
+ $$renderer3.push(`<div class="text-sidebar-foreground group peer hidden md:block"${attr("data-state", sidebar.state)}${attr("data-collapsible", sidebar.state === "collapsed" ? collapsible : "")}${attr("data-variant", variant)}${attr("data-side", side)} data-slot="sidebar"><div data-slot="sidebar-gap"${attr_class(clsx(cn("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)")))}></div> <div${attributes({
3277
+ "data-slot": "sidebar-container",
3278
+ class: clsx(cn(
3279
+ "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
3280
+ side === "left" ? "start-0 group-data-[collapsible=offcanvas]:start-[calc(var(--sidebar-width)*-1)]" : "end-0 group-data-[collapsible=offcanvas]:end-[calc(var(--sidebar-width)*-1)]",
3281
+ variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-e group-data-[side=right]:border-s",
3282
+ className
3283
+ )),
3284
+ ...restProps
3285
+ })}><div data-sidebar="sidebar" data-slot="sidebar-inner" class="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm">`);
3286
+ children?.($$renderer3);
3287
+ $$renderer3.push(`<!----></div></div></div>`);
3288
+ }
3289
+ $$renderer3.push(`<!--]-->`);
3290
+ }
3291
+ do {
3292
+ $$settled = true;
3293
+ $$inner_renderer = $$renderer2.copy();
3294
+ $$render_inner($$inner_renderer);
3295
+ } while (!$$settled);
3296
+ $$renderer2.subsume($$inner_renderer);
3297
+ bind_props($$props, { ref });
3298
+ });
3299
+ }
3300
+ function Dialog_trigger($$renderer, $$props) {
3301
+ $$renderer.component(($$renderer2) => {
3302
+ let { ref = null, $$slots, $$events, ...restProps } = $$props;
3303
+ let $$settled = true;
3304
+ let $$inner_renderer;
3305
+ function $$render_inner($$renderer3) {
3306
+ if (Dialog_trigger$1) {
3307
+ $$renderer3.push("<!--[-->");
3308
+ Dialog_trigger$1($$renderer3, spread_props([
3309
+ { "data-slot": "dialog-trigger" },
3310
+ restProps,
3311
+ {
3312
+ get ref() {
3313
+ return ref;
3314
+ },
3315
+ set ref($$value) {
3316
+ ref = $$value;
3317
+ $$settled = false;
3318
+ }
3319
+ }
3320
+ ]));
3321
+ $$renderer3.push("<!--]-->");
3322
+ } else {
3323
+ $$renderer3.push("<!--[!-->");
3324
+ $$renderer3.push("<!--]-->");
3325
+ }
3326
+ }
3327
+ do {
3328
+ $$settled = true;
3329
+ $$inner_renderer = $$renderer2.copy();
3330
+ $$render_inner($$inner_renderer);
3331
+ } while (!$$settled);
3332
+ $$renderer2.subsume($$inner_renderer);
3333
+ bind_props($$props, { ref });
3334
+ });
3335
+ }
3336
+ function Message_square($$renderer, $$props) {
3337
+ const $$sanitized_props = sanitize_props($$props);
3338
+ const iconNode = [
3339
+ [
3340
+ "path",
3341
+ {
3342
+ "d": "M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"
3343
+ }
3344
+ ]
3345
+ ];
3346
+ Icon$1($$renderer, spread_props([
3347
+ { name: "message-square" },
3348
+ $$sanitized_props,
3349
+ {
3350
+ /**
3351
+ * @component @name MessageSquare
3352
+ * @description Lucide SVG icon component, renders SVG Element with children.
3353
+ *
3354
+ * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/message-square
3355
+ * @see https://lucide.dev/guide/packages/lucide-svelte - Documentation
3356
+ *
3357
+ * @param {Object} props - Lucide icons props and any valid SVG attribute
3358
+ * @returns {FunctionalComponent} Svelte component
3359
+ *
3360
+ */
3361
+ iconNode,
3362
+ children: ($$renderer2) => {
3363
+ $$renderer2.push(`<!--[-->`);
3364
+ slot($$renderer2, $$props, "default", {});
3365
+ $$renderer2.push(`<!--]-->`);
3366
+ },
3367
+ $$slots: { default: true }
3368
+ }
3369
+ ]));
3370
+ }
3371
+ function Settings($$renderer, $$props) {
3372
+ const $$sanitized_props = sanitize_props($$props);
3373
+ const iconNode = [
3374
+ [
3375
+ "path",
3376
+ {
3377
+ "d": "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"
3378
+ }
3379
+ ],
3380
+ ["circle", { "cx": "12", "cy": "12", "r": "3" }]
3381
+ ];
3382
+ Icon$1($$renderer, spread_props([
3383
+ { name: "settings" },
3384
+ $$sanitized_props,
3385
+ {
3386
+ /**
3387
+ * @component @name Settings
3388
+ * @description Lucide SVG icon component, renders SVG Element with children.
3389
+ *
3390
+ * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOS42NzEgNC4xMzZhMi4zNCAyLjM0IDAgMCAxIDQuNjU5IDAgMi4zNCAyLjM0IDAgMCAwIDMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMSAyLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwIDMuODMxIDIuMzQgMi4zNCAwIDAgMS0yLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMC0zLjMxOSAxLjkxNSAyLjM0IDIuMzQgMCAwIDEtNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAtMy4zMi0xLjkxNSAyLjM0IDIuMzQgMCAwIDEtMi4zMy00LjAzMyAyLjM0IDIuMzQgMCAwIDAgMC0zLjgzMUEyLjM0IDIuMzQgMCAwIDEgNi4zNSA2LjA1MWEyLjM0IDIuMzQgMCAwIDAgMy4zMTktMS45MTUiIC8+CiAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/settings
3391
+ * @see https://lucide.dev/guide/packages/lucide-svelte - Documentation
3392
+ *
3393
+ * @param {Object} props - Lucide icons props and any valid SVG attribute
3394
+ * @returns {FunctionalComponent} Svelte component
3395
+ *
3396
+ */
3397
+ iconNode,
3398
+ children: ($$renderer2) => {
3399
+ $$renderer2.push(`<!--[-->`);
3400
+ slot($$renderer2, $$props, "default", {});
3401
+ $$renderer2.push(`<!--]-->`);
3402
+ },
3403
+ $$slots: { default: true }
3404
+ }
3405
+ ]));
3406
+ }
3407
+ function App_sidebar($$renderer, $$props) {
3408
+ $$renderer.component(($$renderer2) => {
3409
+ let {
3410
+ chats,
3411
+ agents = [],
3412
+ currentPath = "/",
3413
+ collapsible = "offcanvas"
3414
+ } = $$props;
3415
+ let newChatOpen = false;
3416
+ let newChatName = "";
3417
+ let selectedAgent = "";
3418
+ let isCreating = false;
3419
+ let errorMessage = "";
3420
+ let showValidationError = derived(() => newChatName.length > 0 && /\s/.test(newChatName));
3421
+ let isValidName = derived(() => newChatName.trim().length > 0 && !/\s/.test(newChatName));
3422
+ async function createNewChat() {
3423
+ if (!isValidName()) return;
3424
+ const validName = newChatName.trim();
3425
+ isCreating = true;
3426
+ errorMessage = "";
3427
+ try {
3428
+ const payload = { id: validName };
3429
+ if (selectedAgent) {
3430
+ payload.agent = selectedAgent;
3431
+ }
3432
+ const res = await fetch("/api/chats", {
3433
+ method: "POST",
3434
+ headers: { "Content-Type": "application/json" },
3435
+ body: JSON.stringify(payload)
3436
+ });
3437
+ if (res.ok) {
3438
+ newChatOpen = false;
3439
+ newChatName = "";
3440
+ selectedAgent = "";
3441
+ errorMessage = "";
3442
+ await invalidate("app:chats");
3443
+ await goto(`/chats/${validName}`);
3444
+ } else {
3445
+ const data = await res.json();
3446
+ errorMessage = data.error || "Failed to create chat.";
3447
+ }
3448
+ } catch (err) {
3449
+ console.error(err);
3450
+ errorMessage = "An error occurred while creating the chat.";
3451
+ } finally {
3452
+ isCreating = false;
3453
+ }
3454
+ }
3455
+ let $$settled = true;
3456
+ let $$inner_renderer;
3457
+ function $$render_inner($$renderer3) {
3458
+ if (Sidebar) {
3459
+ $$renderer3.push("<!--[-->");
3460
+ Sidebar($$renderer3, {
3461
+ collapsible,
3462
+ children: ($$renderer4) => {
3463
+ if (Sidebar_header) {
3464
+ $$renderer4.push("<!--[-->");
3465
+ Sidebar_header($$renderer4, {
3466
+ children: ($$renderer5) => {
3467
+ $$renderer5.push(`<div class="flex items-center gap-2 p-2 px-4 text-lg font-semibold tracking-tight">`);
3468
+ Message_square($$renderer5, { class: "w-5 h-5" });
3469
+ $$renderer5.push(`<!----> Clawmini</div>`);
3470
+ },
3471
+ $$slots: { default: true }
3472
+ });
3473
+ $$renderer4.push("<!--]-->");
3474
+ } else {
3475
+ $$renderer4.push("<!--[!-->");
3476
+ $$renderer4.push("<!--]-->");
3477
+ }
3478
+ $$renderer4.push(` `);
3479
+ if (Sidebar_content) {
3480
+ $$renderer4.push("<!--[-->");
3481
+ Sidebar_content($$renderer4, {
3482
+ children: ($$renderer5) => {
3483
+ if (Sidebar_group) {
3484
+ $$renderer5.push("<!--[-->");
3485
+ Sidebar_group($$renderer5, {
3486
+ children: ($$renderer6) => {
3487
+ if (Sidebar_group_label) {
3488
+ $$renderer6.push("<!--[-->");
3489
+ Sidebar_group_label($$renderer6, {
3490
+ children: ($$renderer7) => {
3491
+ $$renderer7.push(`<!---->General`);
3492
+ },
3493
+ $$slots: { default: true }
3494
+ });
3495
+ $$renderer6.push("<!--]-->");
3496
+ } else {
3497
+ $$renderer6.push("<!--[!-->");
3498
+ $$renderer6.push("<!--]-->");
3499
+ }
3500
+ $$renderer6.push(` `);
3501
+ if (Sidebar_group_content) {
3502
+ $$renderer6.push("<!--[-->");
3503
+ Sidebar_group_content($$renderer6, {
3504
+ children: ($$renderer7) => {
3505
+ if (Sidebar_menu) {
3506
+ $$renderer7.push("<!--[-->");
3507
+ Sidebar_menu($$renderer7, {
3508
+ children: ($$renderer8) => {
3509
+ if (Sidebar_menu_item) {
3510
+ $$renderer8.push("<!--[-->");
3511
+ Sidebar_menu_item($$renderer8, {
3512
+ children: ($$renderer9) => {
3513
+ {
3514
+ let child = function($$renderer10, { props }) {
3515
+ $$renderer10.push(`<a${attributes({ href: "/agents", ...props })}>`);
3516
+ Bot($$renderer10, {});
3517
+ $$renderer10.push(`<!----> <span>Agents</span></a>`);
3518
+ };
3519
+ if (Sidebar_menu_button) {
3520
+ $$renderer9.push("<!--[-->");
3521
+ Sidebar_menu_button($$renderer9, {
3522
+ isActive: currentPath === "/agents",
3523
+ child,
3524
+ $$slots: { child: true }
3525
+ });
3526
+ $$renderer9.push("<!--]-->");
3527
+ } else {
3528
+ $$renderer9.push("<!--[!-->");
3529
+ $$renderer9.push("<!--]-->");
3530
+ }
3531
+ }
3532
+ },
3533
+ $$slots: { default: true }
3534
+ });
3535
+ $$renderer8.push("<!--]-->");
3536
+ } else {
3537
+ $$renderer8.push("<!--[!-->");
3538
+ $$renderer8.push("<!--]-->");
3539
+ }
3540
+ },
3541
+ $$slots: { default: true }
3542
+ });
3543
+ $$renderer7.push("<!--]-->");
3544
+ } else {
3545
+ $$renderer7.push("<!--[!-->");
3546
+ $$renderer7.push("<!--]-->");
3547
+ }
3548
+ },
3549
+ $$slots: { default: true }
3550
+ });
3551
+ $$renderer6.push("<!--]-->");
3552
+ } else {
3553
+ $$renderer6.push("<!--[!-->");
3554
+ $$renderer6.push("<!--]-->");
3555
+ }
3556
+ },
3557
+ $$slots: { default: true }
3558
+ });
3559
+ $$renderer5.push("<!--]-->");
3560
+ } else {
3561
+ $$renderer5.push("<!--[!-->");
3562
+ $$renderer5.push("<!--]-->");
3563
+ }
3564
+ $$renderer5.push(` `);
3565
+ if (Sidebar_group) {
3566
+ $$renderer5.push("<!--[-->");
3567
+ Sidebar_group($$renderer5, {
3568
+ children: ($$renderer6) => {
3569
+ if (Sidebar_group_label) {
3570
+ $$renderer6.push("<!--[-->");
3571
+ Sidebar_group_label($$renderer6, {
3572
+ children: ($$renderer7) => {
3573
+ $$renderer7.push(`<!---->Chats`);
3574
+ },
3575
+ $$slots: { default: true }
3576
+ });
3577
+ $$renderer6.push("<!--]-->");
3578
+ } else {
3579
+ $$renderer6.push("<!--[!-->");
3580
+ $$renderer6.push("<!--]-->");
3581
+ }
3582
+ $$renderer6.push(` `);
3583
+ if (Sidebar_group_content) {
3584
+ $$renderer6.push("<!--[-->");
3585
+ Sidebar_group_content($$renderer6, {
3586
+ children: ($$renderer7) => {
3587
+ if (Sidebar_menu) {
3588
+ $$renderer7.push("<!--[-->");
3589
+ Sidebar_menu($$renderer7, {
3590
+ children: ($$renderer8) => {
3591
+ if (Sidebar_menu_item) {
3592
+ $$renderer8.push("<!--[-->");
3593
+ Sidebar_menu_item($$renderer8, {
3594
+ children: ($$renderer9) => {
3595
+ if (Dialog$1) {
3596
+ $$renderer9.push("<!--[-->");
3597
+ Dialog$1($$renderer9, {
3598
+ get open() {
3599
+ return newChatOpen;
3600
+ },
3601
+ set open($$value) {
3602
+ newChatOpen = $$value;
3603
+ $$settled = false;
3604
+ },
3605
+ children: ($$renderer10) => {
3606
+ {
3607
+ let child = function($$renderer11, { props }) {
3608
+ if (Sidebar_menu_button) {
3609
+ $$renderer11.push("<!--[-->");
3610
+ Sidebar_menu_button($$renderer11, spread_props([
3611
+ props,
3612
+ {
3613
+ children: ($$renderer12) => {
3614
+ Plus($$renderer12, {});
3615
+ $$renderer12.push(`<!----> <span>New Chat</span>`);
3616
+ },
3617
+ $$slots: { default: true }
3618
+ }
3619
+ ]));
3620
+ $$renderer11.push("<!--]-->");
3621
+ } else {
3622
+ $$renderer11.push("<!--[!-->");
3623
+ $$renderer11.push("<!--]-->");
3624
+ }
3625
+ };
3626
+ if (Dialog_trigger) {
3627
+ $$renderer10.push("<!--[-->");
3628
+ Dialog_trigger($$renderer10, { child, $$slots: { child: true } });
3629
+ $$renderer10.push("<!--]-->");
3630
+ } else {
3631
+ $$renderer10.push("<!--[!-->");
3632
+ $$renderer10.push("<!--]-->");
3633
+ }
3634
+ }
3635
+ $$renderer10.push(` `);
3636
+ if (Dialog_content$1) {
3637
+ $$renderer10.push("<!--[-->");
3638
+ Dialog_content$1($$renderer10, {
3639
+ class: "sm:max-w-[425px]",
3640
+ children: ($$renderer11) => {
3641
+ if (Dialog_header) {
3642
+ $$renderer11.push("<!--[-->");
3643
+ Dialog_header($$renderer11, {
3644
+ children: ($$renderer12) => {
3645
+ if (Dialog_title$1) {
3646
+ $$renderer12.push("<!--[-->");
3647
+ Dialog_title$1($$renderer12, {
3648
+ children: ($$renderer13) => {
3649
+ $$renderer13.push(`<!---->Create New Chat`);
3650
+ },
3651
+ $$slots: { default: true }
3652
+ });
3653
+ $$renderer12.push("<!--]-->");
3654
+ } else {
3655
+ $$renderer12.push("<!--[!-->");
3656
+ $$renderer12.push("<!--]-->");
3657
+ }
3658
+ $$renderer12.push(` `);
3659
+ if (Dialog_description$1) {
3660
+ $$renderer12.push("<!--[-->");
3661
+ Dialog_description$1($$renderer12, {
3662
+ children: ($$renderer13) => {
3663
+ $$renderer13.push(`<!---->Enter a name for the new chat and optionally select an agent.`);
3664
+ },
3665
+ $$slots: { default: true }
3666
+ });
3667
+ $$renderer12.push("<!--]-->");
3668
+ } else {
3669
+ $$renderer12.push("<!--[!-->");
3670
+ $$renderer12.push("<!--]-->");
3671
+ }
3672
+ },
3673
+ $$slots: { default: true }
3674
+ });
3675
+ $$renderer11.push("<!--]-->");
3676
+ } else {
3677
+ $$renderer11.push("<!--[!-->");
3678
+ $$renderer11.push("<!--]-->");
3679
+ }
3680
+ $$renderer11.push(` <div class="grid gap-4 py-4">`);
3681
+ if (errorMessage) {
3682
+ $$renderer11.push("<!--[0-->");
3683
+ $$renderer11.push(`<div class="bg-destructive/15 text-destructive text-sm p-3 rounded-md flex items-center">${escape_html(errorMessage)}</div>`);
3684
+ } else {
3685
+ $$renderer11.push("<!--[-1-->");
3686
+ }
3687
+ $$renderer11.push(`<!--]--> <div class="flex flex-col gap-2"><label class="text-sm font-medium leading-none" for="name">Name</label> `);
3688
+ Input($$renderer11, {
3689
+ id: "name",
3690
+ placeholder: "e.g. debugging-session",
3691
+ class: "col-span-3",
3692
+ autocomplete: "off",
3693
+ autocorrect: "off",
3694
+ autocapitalize: "off",
3695
+ spellcheck: "false",
3696
+ onkeydown: (e) => {
3697
+ if (e.key === "Enter" && !e.shiftKey) {
3698
+ e.preventDefault();
3699
+ createNewChat();
3700
+ }
3701
+ },
3702
+ get value() {
3703
+ return newChatName;
3704
+ },
3705
+ set value($$value) {
3706
+ newChatName = $$value;
3707
+ $$settled = false;
3708
+ }
3709
+ });
3710
+ $$renderer11.push(`<!----> `);
3711
+ if (showValidationError()) {
3712
+ $$renderer11.push("<!--[0-->");
3713
+ $$renderer11.push(`<p class="text-sm text-destructive">Name cannot contain spaces.</p>`);
3714
+ } else {
3715
+ $$renderer11.push("<!--[-1-->");
3716
+ }
3717
+ $$renderer11.push(`<!--]--></div> <div class="flex flex-col gap-2"><label class="text-sm font-medium leading-none" for="agent">Initial Agent (optional)</label> `);
3718
+ $$renderer11.select(
3719
+ {
3720
+ id: "agent",
3721
+ value: selectedAgent,
3722
+ class: "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
3723
+ },
3724
+ ($$renderer12) => {
3725
+ $$renderer12.option({ value: "" }, ($$renderer13) => {
3726
+ $$renderer13.push(`Default`);
3727
+ });
3728
+ $$renderer12.push(`<!--[-->`);
3729
+ const each_array = ensure_array_like(agents);
3730
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
3731
+ let agent = each_array[$$index];
3732
+ $$renderer12.option({ value: agent.id }, ($$renderer13) => {
3733
+ $$renderer13.push(`${escape_html(agent.id)}`);
3734
+ });
3735
+ }
3736
+ $$renderer12.push(`<!--]-->`);
3737
+ }
3738
+ );
3739
+ $$renderer11.push(`</div></div> `);
3740
+ if (Dialog_footer) {
3741
+ $$renderer11.push("<!--[-->");
3742
+ Dialog_footer($$renderer11, {
3743
+ children: ($$renderer12) => {
3744
+ Button($$renderer12, {
3745
+ type: "submit",
3746
+ disabled: !isValidName() || isCreating,
3747
+ onclick: createNewChat,
3748
+ children: ($$renderer13) => {
3749
+ $$renderer13.push(`<!---->${escape_html(isCreating ? "Creating..." : "Create Chat")}`);
3750
+ },
3751
+ $$slots: { default: true }
3752
+ });
3753
+ },
3754
+ $$slots: { default: true }
3755
+ });
3756
+ $$renderer11.push("<!--]-->");
3757
+ } else {
3758
+ $$renderer11.push("<!--[!-->");
3759
+ $$renderer11.push("<!--]-->");
3760
+ }
3761
+ },
3762
+ $$slots: { default: true }
3763
+ });
3764
+ $$renderer10.push("<!--]-->");
3765
+ } else {
3766
+ $$renderer10.push("<!--[!-->");
3767
+ $$renderer10.push("<!--]-->");
3768
+ }
3769
+ },
3770
+ $$slots: { default: true }
3771
+ });
3772
+ $$renderer9.push("<!--]-->");
3773
+ } else {
3774
+ $$renderer9.push("<!--[!-->");
3775
+ $$renderer9.push("<!--]-->");
3776
+ }
3777
+ },
3778
+ $$slots: { default: true }
3779
+ });
3780
+ $$renderer8.push("<!--]-->");
3781
+ } else {
3782
+ $$renderer8.push("<!--[!-->");
3783
+ $$renderer8.push("<!--]-->");
3784
+ }
3785
+ $$renderer8.push(` <!--[-->`);
3786
+ const each_array_1 = ensure_array_like(chats);
3787
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
3788
+ let chat = each_array_1[$$index_1];
3789
+ if (Sidebar_menu_item) {
3790
+ $$renderer8.push("<!--[-->");
3791
+ Sidebar_menu_item($$renderer8, {
3792
+ children: ($$renderer9) => {
3793
+ {
3794
+ let child = function($$renderer10, { props }) {
3795
+ $$renderer10.push(`<a${attributes({ href: `/chats/${stringify(chat)}`, ...props })}>`);
3796
+ Message_square($$renderer10, {});
3797
+ $$renderer10.push(`<!----> <span data-testid="chat-link">${escape_html(chat)}</span></a>`);
3798
+ };
3799
+ if (Sidebar_menu_button) {
3800
+ $$renderer9.push("<!--[-->");
3801
+ Sidebar_menu_button($$renderer9, {
3802
+ isActive: currentPath === `/chats/${chat}`,
3803
+ child,
3804
+ $$slots: { child: true }
3805
+ });
3806
+ $$renderer9.push("<!--]-->");
3807
+ } else {
3808
+ $$renderer9.push("<!--[!-->");
3809
+ $$renderer9.push("<!--]-->");
3810
+ }
3811
+ }
3812
+ },
3813
+ $$slots: { default: true }
3814
+ });
3815
+ $$renderer8.push("<!--]-->");
3816
+ } else {
3817
+ $$renderer8.push("<!--[!-->");
3818
+ $$renderer8.push("<!--]-->");
3819
+ }
3820
+ }
3821
+ $$renderer8.push(`<!--]-->`);
3822
+ },
3823
+ $$slots: { default: true }
3824
+ });
3825
+ $$renderer7.push("<!--]-->");
3826
+ } else {
3827
+ $$renderer7.push("<!--[!-->");
3828
+ $$renderer7.push("<!--]-->");
3829
+ }
3830
+ },
3831
+ $$slots: { default: true }
3832
+ });
3833
+ $$renderer6.push("<!--]-->");
3834
+ } else {
3835
+ $$renderer6.push("<!--[!-->");
3836
+ $$renderer6.push("<!--]-->");
3837
+ }
3838
+ },
3839
+ $$slots: { default: true }
3840
+ });
3841
+ $$renderer5.push("<!--]-->");
3842
+ } else {
3843
+ $$renderer5.push("<!--[!-->");
3844
+ $$renderer5.push("<!--]-->");
3845
+ }
3846
+ },
3847
+ $$slots: { default: true }
3848
+ });
3849
+ $$renderer4.push("<!--]-->");
3850
+ } else {
3851
+ $$renderer4.push("<!--[!-->");
3852
+ $$renderer4.push("<!--]-->");
3853
+ }
3854
+ },
3855
+ $$slots: { default: true }
3856
+ });
3857
+ $$renderer3.push("<!--]-->");
3858
+ } else {
3859
+ $$renderer3.push("<!--[!-->");
3860
+ $$renderer3.push("<!--]-->");
3861
+ }
3862
+ }
3863
+ do {
3864
+ $$settled = true;
3865
+ $$inner_renderer = $$renderer2.copy();
3866
+ $$render_inner($$inner_renderer);
3867
+ } while (!$$settled);
3868
+ $$renderer2.subsume($$inner_renderer);
3869
+ });
3870
+ }
3871
+ const appState = { verbosityLevel: "default" };
3872
+ function _layout($$renderer, $$props) {
3873
+ $$renderer.component(($$renderer2) => {
3874
+ let { data, children } = $$props;
3875
+ if (Sidebar_provider) {
3876
+ $$renderer2.push("<!--[-->");
3877
+ Sidebar_provider($$renderer2, {
3878
+ class: "h-[100dvh] overflow-hidden",
3879
+ children: ($$renderer3) => {
3880
+ App_sidebar($$renderer3, {
3881
+ chats: data.chats,
3882
+ agents: data.agents,
3883
+ currentPath: page.url.pathname
3884
+ });
3885
+ $$renderer3.push(`<!----> `);
3886
+ if (Sidebar_inset) {
3887
+ $$renderer3.push("<!--[-->");
3888
+ Sidebar_inset($$renderer3, {
3889
+ children: ($$renderer4) => {
3890
+ $$renderer4.push(`<header class="flex h-14 shrink-0 items-center gap-2 border-b bg-background px-4">`);
3891
+ if (Sidebar_trigger) {
3892
+ $$renderer4.push("<!--[-->");
3893
+ Sidebar_trigger($$renderer4, {});
3894
+ $$renderer4.push("<!--]-->");
3895
+ } else {
3896
+ $$renderer4.push("<!--[!-->");
3897
+ $$renderer4.push("<!--]-->");
3898
+ }
3899
+ $$renderer4.push(` <div class="w-full flex items-center justify-between"><div class="font-semibold text-sm">`);
3900
+ if (page.url.pathname.startsWith("/chats/")) {
3901
+ $$renderer4.push("<!--[0-->");
3902
+ $$renderer4.push(`${escape_html(page.url.pathname.replace("/chats/", "").replace("/settings", ""))}`);
3903
+ } else {
3904
+ $$renderer4.push("<!--[-1-->");
3905
+ $$renderer4.push(`Home`);
3906
+ }
3907
+ $$renderer4.push(`<!--]--></div> <div class="flex items-center gap-4">`);
3908
+ if (page.url.pathname.startsWith("/chats/") && !page.url.pathname.endsWith("/settings")) {
3909
+ $$renderer4.push("<!--[0-->");
3910
+ $$renderer4.push(`<a${attr("href", `${stringify(page.url.pathname)}/settings`)} class="text-muted-foreground hover:text-foreground transition-colors" title="Chat Settings">`);
3911
+ Settings($$renderer4, { class: "w-5 h-5" });
3912
+ $$renderer4.push(`<!----></a>`);
3913
+ } else {
3914
+ $$renderer4.push("<!--[-1-->");
3915
+ }
3916
+ $$renderer4.push(`<!--]--> <div class="flex items-center gap-2"><button id="verbosity-toggle" type="button" class="flex items-center justify-center p-2 rounded-md hover:bg-muted transition-colors"${attr("aria-label", `Verbosity level: ${appState.verbosityLevel}`)}${attr("title", `Verbosity: ${appState.verbosityLevel}`)}>`);
3917
+ {
3918
+ $$renderer4.push("<!--[0-->");
3919
+ Message_square($$renderer4, { class: "w-5 h-5 text-muted-foreground" });
3920
+ }
3921
+ $$renderer4.push(`<!--]--></button></div></div></div></header> <main class="flex flex-1 flex-col overflow-hidden bg-muted/20">`);
3922
+ children($$renderer4);
3923
+ $$renderer4.push(`<!----></main>`);
3924
+ },
3925
+ $$slots: { default: true }
3926
+ });
3927
+ $$renderer3.push("<!--]-->");
3928
+ } else {
3929
+ $$renderer3.push("<!--[!-->");
3930
+ $$renderer3.push("<!--]-->");
3931
+ }
3932
+ },
3933
+ $$slots: { default: true }
3934
+ });
3935
+ $$renderer2.push("<!--]-->");
3936
+ } else {
3937
+ $$renderer2.push("<!--[!-->");
3938
+ $$renderer2.push("<!--]-->");
3939
+ }
3940
+ });
3941
+ }
3942
+ export {
3943
+ _layout as default
3944
+ };