@harbinger-ai/harbinger 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +406 -0
  3. package/agents/README.md +76 -0
  4. package/agents/_template/CONFIG.yaml +7 -0
  5. package/agents/_template/HEARTBEAT.md +59 -0
  6. package/agents/_template/IDENTITY.md +4 -0
  7. package/agents/_template/SKILLS.md +1 -0
  8. package/agents/_template/SOUL.md +25 -0
  9. package/agents/_template/TOOLS.md +3 -0
  10. package/agents/binary-reverser/CONFIG.yaml +21 -0
  11. package/agents/binary-reverser/HEARTBEAT.md +65 -0
  12. package/agents/binary-reverser/IDENTITY.md +1 -0
  13. package/agents/binary-reverser/SKILLS.md +1 -0
  14. package/agents/binary-reverser/SOUL.md +23 -0
  15. package/agents/binary-reverser/TOOLS.md +99 -0
  16. package/agents/browser-agent/CONFIG.yaml +20 -0
  17. package/agents/browser-agent/HEARTBEAT.md +79 -0
  18. package/agents/browser-agent/IDENTITY.md +5 -0
  19. package/agents/browser-agent/SKILLS.md +86 -0
  20. package/agents/browser-agent/SOUL.md +23 -0
  21. package/agents/browser-agent/TOOLS.md +186 -0
  22. package/agents/cloud-infiltrator/CONFIG.yaml +22 -0
  23. package/agents/cloud-infiltrator/HEARTBEAT.md +78 -0
  24. package/agents/cloud-infiltrator/IDENTITY.md +1 -0
  25. package/agents/cloud-infiltrator/SKILLS.md +1 -0
  26. package/agents/cloud-infiltrator/SOUL.md +23 -0
  27. package/agents/cloud-infiltrator/TOOLS.md +68 -0
  28. package/agents/coding-assistant/CONFIG.yaml +22 -0
  29. package/agents/coding-assistant/HEARTBEAT.md +57 -0
  30. package/agents/coding-assistant/IDENTITY.md +5 -0
  31. package/agents/coding-assistant/SKILLS.md +69 -0
  32. package/agents/coding-assistant/SOUL.md +60 -0
  33. package/agents/coding-assistant/TOOLS.md +168 -0
  34. package/agents/learning-agent/CONFIG.yaml +21 -0
  35. package/agents/learning-agent/HEARTBEAT.md +63 -0
  36. package/agents/learning-agent/IDENTITY.md +5 -0
  37. package/agents/learning-agent/SKILLS.md +86 -0
  38. package/agents/learning-agent/SOUL.md +77 -0
  39. package/agents/learning-agent/TOOLS.md +145 -0
  40. package/agents/maintainer/CONFIG.yaml +31 -0
  41. package/agents/maintainer/HEARTBEAT.md +28 -0
  42. package/agents/maintainer/IDENTITY.md +33 -0
  43. package/agents/maintainer/SKILLS.md +24 -0
  44. package/agents/maintainer/SOUL.md +61 -0
  45. package/agents/maintainer/TOOLS.md +29 -0
  46. package/agents/maintainer/lib/engine.js +279 -0
  47. package/agents/maintainer/lib/safe-fixer.js +183 -0
  48. package/agents/morning-brief/CONFIG.yaml +22 -0
  49. package/agents/morning-brief/HEARTBEAT.md +60 -0
  50. package/agents/morning-brief/IDENTITY.md +5 -0
  51. package/agents/morning-brief/SKILLS.md +56 -0
  52. package/agents/morning-brief/SOUL.md +64 -0
  53. package/agents/morning-brief/TOOLS.md +112 -0
  54. package/agents/osint-detective/CONFIG.yaml +24 -0
  55. package/agents/osint-detective/HEARTBEAT.md +66 -0
  56. package/agents/osint-detective/IDENTITY.md +1 -0
  57. package/agents/osint-detective/SKILLS.md +1 -0
  58. package/agents/osint-detective/SOUL.md +23 -0
  59. package/agents/osint-detective/TOOLS.md +81 -0
  60. package/agents/recon-scout/CONFIG.yaml +22 -0
  61. package/agents/recon-scout/HEARTBEAT.md +79 -0
  62. package/agents/recon-scout/IDENTITY.md +1 -0
  63. package/agents/recon-scout/SKILLS.md +1 -0
  64. package/agents/recon-scout/SOUL.md +23 -0
  65. package/agents/recon-scout/TOOLS.md +93 -0
  66. package/agents/report-writer/CONFIG.yaml +21 -0
  67. package/agents/report-writer/HEARTBEAT.md +63 -0
  68. package/agents/report-writer/IDENTITY.md +1 -0
  69. package/agents/report-writer/SKILLS.md +1 -0
  70. package/agents/report-writer/SOUL.md +23 -0
  71. package/agents/report-writer/TOOLS.md +69 -0
  72. package/agents/shared/README.md +13 -0
  73. package/agents/web-hacker/CONFIG.yaml +24 -0
  74. package/agents/web-hacker/HEARTBEAT.md +78 -0
  75. package/agents/web-hacker/IDENTITY.md +1 -0
  76. package/agents/web-hacker/SKILLS.md +1 -0
  77. package/agents/web-hacker/SOUL.md +23 -0
  78. package/agents/web-hacker/TOOLS.md +86 -0
  79. package/api/CLAUDE.md +19 -0
  80. package/api/index.js +274 -0
  81. package/bin/cli.js +620 -0
  82. package/bin/local.sh +31 -0
  83. package/bin/postinstall.js +63 -0
  84. package/config/index.js +24 -0
  85. package/config/instrumentation.js +93 -0
  86. package/drizzle/0000_initial.sql +52 -0
  87. package/drizzle/0001_bounty_and_registry.sql +82 -0
  88. package/drizzle/0002_sync_columns.sql +7 -0
  89. package/drizzle/0003_graceful_bloodscream.sql +86 -0
  90. package/drizzle/meta/0000_snapshot.json +321 -0
  91. package/drizzle/meta/0003_snapshot.json +878 -0
  92. package/drizzle/meta/_journal.json +34 -0
  93. package/drizzle/relations.ts +3 -0
  94. package/drizzle/schema.ts +145 -0
  95. package/lib/actions.js +47 -0
  96. package/lib/agents.js +166 -0
  97. package/lib/ai/agent.js +96 -0
  98. package/lib/ai/autonomous-engine.js +261 -0
  99. package/lib/ai/index.js +359 -0
  100. package/lib/ai/model-router.js +254 -0
  101. package/lib/ai/model.js +73 -0
  102. package/lib/ai/tools.js +84 -0
  103. package/lib/auth/actions.js +28 -0
  104. package/lib/auth/config.js +27 -0
  105. package/lib/auth/edge-config.js +27 -0
  106. package/lib/auth/index.js +27 -0
  107. package/lib/auth/middleware.js +53 -0
  108. package/lib/bounty/actions.js +119 -0
  109. package/lib/bounty/findings.js +64 -0
  110. package/lib/bounty/programs.js +34 -0
  111. package/lib/bounty/sync-targets.js +267 -0
  112. package/lib/bounty/targets.js +33 -0
  113. package/lib/channels/base.js +56 -0
  114. package/lib/channels/index.js +15 -0
  115. package/lib/channels/telegram.js +148 -0
  116. package/lib/chat/actions.js +288 -0
  117. package/lib/chat/api.js +135 -0
  118. package/lib/chat/components/app-sidebar.js +237 -0
  119. package/lib/chat/components/app-sidebar.jsx +289 -0
  120. package/lib/chat/components/chat-header.js +27 -0
  121. package/lib/chat/components/chat-header.jsx +37 -0
  122. package/lib/chat/components/chat-input.js +230 -0
  123. package/lib/chat/components/chat-input.jsx +228 -0
  124. package/lib/chat/components/chat-nav-context.js +11 -0
  125. package/lib/chat/components/chat-nav-context.jsx +11 -0
  126. package/lib/chat/components/chat-page.js +81 -0
  127. package/lib/chat/components/chat-page.jsx +100 -0
  128. package/lib/chat/components/chat.js +150 -0
  129. package/lib/chat/components/chat.jsx +182 -0
  130. package/lib/chat/components/chats-page.js +302 -0
  131. package/lib/chat/components/chats-page.jsx +330 -0
  132. package/lib/chat/components/crons-page.js +172 -0
  133. package/lib/chat/components/crons-page.jsx +244 -0
  134. package/lib/chat/components/enhanced-tool-call.js +103 -0
  135. package/lib/chat/components/enhanced-tool-call.jsx +139 -0
  136. package/lib/chat/components/findings-page.js +175 -0
  137. package/lib/chat/components/findings-page.jsx +214 -0
  138. package/lib/chat/components/greeting.js +22 -0
  139. package/lib/chat/components/greeting.jsx +26 -0
  140. package/lib/chat/components/icons.js +777 -0
  141. package/lib/chat/components/icons.jsx +741 -0
  142. package/lib/chat/components/index.js +26 -0
  143. package/lib/chat/components/mcp-page.js +260 -0
  144. package/lib/chat/components/mcp-page.jsx +355 -0
  145. package/lib/chat/components/message.js +289 -0
  146. package/lib/chat/components/message.jsx +315 -0
  147. package/lib/chat/components/messages.js +66 -0
  148. package/lib/chat/components/messages.jsx +77 -0
  149. package/lib/chat/components/notifications-page.js +56 -0
  150. package/lib/chat/components/notifications-page.jsx +87 -0
  151. package/lib/chat/components/page-layout.js +21 -0
  152. package/lib/chat/components/page-layout.jsx +28 -0
  153. package/lib/chat/components/registry-page.js +222 -0
  154. package/lib/chat/components/registry-page.jsx +255 -0
  155. package/lib/chat/components/settings-layout.js +40 -0
  156. package/lib/chat/components/settings-layout.jsx +54 -0
  157. package/lib/chat/components/settings-secrets-page.js +216 -0
  158. package/lib/chat/components/settings-secrets-page.jsx +264 -0
  159. package/lib/chat/components/sidebar-history-item.js +132 -0
  160. package/lib/chat/components/sidebar-history-item.jsx +113 -0
  161. package/lib/chat/components/sidebar-history.js +115 -0
  162. package/lib/chat/components/sidebar-history.jsx +157 -0
  163. package/lib/chat/components/sidebar-user-nav.js +63 -0
  164. package/lib/chat/components/sidebar-user-nav.jsx +73 -0
  165. package/lib/chat/components/status-bar.js +39 -0
  166. package/lib/chat/components/status-bar.jsx +51 -0
  167. package/lib/chat/components/swarm-page.js +157 -0
  168. package/lib/chat/components/swarm-page.jsx +210 -0
  169. package/lib/chat/components/targets-page.js +376 -0
  170. package/lib/chat/components/targets-page.jsx +389 -0
  171. package/lib/chat/components/tool-call.js +86 -0
  172. package/lib/chat/components/tool-call.jsx +104 -0
  173. package/lib/chat/components/tool-panel.js +107 -0
  174. package/lib/chat/components/tool-panel.jsx +145 -0
  175. package/lib/chat/components/triggers-page.js +153 -0
  176. package/lib/chat/components/triggers-page.jsx +221 -0
  177. package/lib/chat/components/ui/confirm-dialog.js +53 -0
  178. package/lib/chat/components/ui/confirm-dialog.jsx +57 -0
  179. package/lib/chat/components/ui/dropdown-menu.js +98 -0
  180. package/lib/chat/components/ui/dropdown-menu.jsx +116 -0
  181. package/lib/chat/components/ui/rename-dialog.js +74 -0
  182. package/lib/chat/components/ui/rename-dialog.jsx +72 -0
  183. package/lib/chat/components/ui/scroll-area.js +13 -0
  184. package/lib/chat/components/ui/scroll-area.jsx +17 -0
  185. package/lib/chat/components/ui/separator.js +21 -0
  186. package/lib/chat/components/ui/separator.jsx +18 -0
  187. package/lib/chat/components/ui/sheet.js +75 -0
  188. package/lib/chat/components/ui/sheet.jsx +95 -0
  189. package/lib/chat/components/ui/sidebar.js +227 -0
  190. package/lib/chat/components/ui/sidebar.jsx +245 -0
  191. package/lib/chat/components/ui/tooltip.js +56 -0
  192. package/lib/chat/components/ui/tooltip.jsx +66 -0
  193. package/lib/chat/components/upgrade-dialog.js +151 -0
  194. package/lib/chat/components/upgrade-dialog.jsx +170 -0
  195. package/lib/chat/utils.js +11 -0
  196. package/lib/cron.js +246 -0
  197. package/lib/db/api-keys.js +163 -0
  198. package/lib/db/chats.js +145 -0
  199. package/lib/db/index.js +52 -0
  200. package/lib/db/notifications.js +99 -0
  201. package/lib/db/schema.js +145 -0
  202. package/lib/db/update-check.js +96 -0
  203. package/lib/db/users.js +89 -0
  204. package/lib/mcp/actions.js +104 -0
  205. package/lib/mcp/client.js +79 -0
  206. package/lib/mcp/handler.js +57 -0
  207. package/lib/mcp/server.js +165 -0
  208. package/lib/paths.js +46 -0
  209. package/lib/registry/actions.js +164 -0
  210. package/lib/registry/catalog.js +137 -0
  211. package/lib/registry/tools.js +71 -0
  212. package/lib/tools/create-job.js +99 -0
  213. package/lib/tools/github.js +217 -0
  214. package/lib/tools/openai.js +35 -0
  215. package/lib/tools/telegram.js +292 -0
  216. package/lib/triggers.js +118 -0
  217. package/lib/utils/render-md.js +102 -0
  218. package/package.json +103 -0
  219. package/setup/lib/auth.mjs +81 -0
  220. package/setup/lib/env.mjs +21 -0
  221. package/setup/lib/fs-utils.mjs +20 -0
  222. package/setup/lib/github.mjs +149 -0
  223. package/setup/lib/prerequisites.mjs +155 -0
  224. package/setup/lib/prompts.mjs +267 -0
  225. package/setup/lib/providers.mjs +48 -0
  226. package/setup/lib/sync.mjs +125 -0
  227. package/setup/lib/targets.mjs +45 -0
  228. package/setup/lib/telegram-verify.mjs +63 -0
  229. package/setup/lib/telegram.mjs +76 -0
  230. package/setup/setup-telegram.mjs +264 -0
  231. package/setup/setup.mjs +842 -0
  232. package/templates/.dockerignore +5 -0
  233. package/templates/.env.example +63 -0
  234. package/templates/.github/workflows/auto-merge.yml +117 -0
  235. package/templates/.github/workflows/build-image.yml +36 -0
  236. package/templates/.github/workflows/notify-job-failed.yml +64 -0
  237. package/templates/.github/workflows/notify-pr-complete.yml +119 -0
  238. package/templates/.github/workflows/rebuild-event-handler.yml +121 -0
  239. package/templates/.github/workflows/run-job.yml +89 -0
  240. package/templates/.github/workflows/upgrade-event-handler.yml +62 -0
  241. package/templates/.gitignore.template +45 -0
  242. package/templates/.pi/extensions/env-sanitizer/index.ts +48 -0
  243. package/templates/.pi/extensions/env-sanitizer/package.json +5 -0
  244. package/templates/CLAUDE.md +29 -0
  245. package/templates/CLAUDE.md.template +307 -0
  246. package/templates/app/api/[...thepopebot]/route.js +1 -0
  247. package/templates/app/api/auth/[...nextauth]/route.js +1 -0
  248. package/templates/app/chat/[chatId]/page.js +8 -0
  249. package/templates/app/chats/page.js +7 -0
  250. package/templates/app/components/ascii-logo.jsx +10 -0
  251. package/templates/app/components/login-form.jsx +92 -0
  252. package/templates/app/components/setup-form.jsx +82 -0
  253. package/templates/app/components/theme-provider.jsx +11 -0
  254. package/templates/app/components/theme-toggle.jsx +38 -0
  255. package/templates/app/components/ui/button.jsx +21 -0
  256. package/templates/app/components/ui/card.jsx +23 -0
  257. package/templates/app/components/ui/input.jsx +10 -0
  258. package/templates/app/components/ui/label.jsx +10 -0
  259. package/templates/app/crons/page.js +5 -0
  260. package/templates/app/findings/page.js +7 -0
  261. package/templates/app/globals.css +90 -0
  262. package/templates/app/layout.js +19 -0
  263. package/templates/app/login/page.js +15 -0
  264. package/templates/app/notifications/page.js +7 -0
  265. package/templates/app/page.js +7 -0
  266. package/templates/app/settings/crons/page.js +5 -0
  267. package/templates/app/settings/layout.js +7 -0
  268. package/templates/app/settings/mcp/page.js +5 -0
  269. package/templates/app/settings/page.js +5 -0
  270. package/templates/app/settings/secrets/page.js +5 -0
  271. package/templates/app/settings/triggers/page.js +5 -0
  272. package/templates/app/stream/chat/route.js +1 -0
  273. package/templates/app/swarm/page.js +7 -0
  274. package/templates/app/targets/page.js +7 -0
  275. package/templates/app/toolbox/page.js +7 -0
  276. package/templates/app/triggers/page.js +5 -0
  277. package/templates/config/AGENT.md +34 -0
  278. package/templates/config/CRONS.json +56 -0
  279. package/templates/config/EVENT_HANDLER.md +224 -0
  280. package/templates/config/HEARTBEAT.md +3 -0
  281. package/templates/config/JOB_SUMMARY.md +130 -0
  282. package/templates/config/MCP_SERVERS.json +1 -0
  283. package/templates/config/SKILL_BUILDING_GUIDE.md +90 -0
  284. package/templates/config/SOUL.md +17 -0
  285. package/templates/config/TRIGGERS.json +58 -0
  286. package/templates/docker/event-handler/Dockerfile +20 -0
  287. package/templates/docker/event-handler/ecosystem.config.cjs +8 -0
  288. package/templates/docker/job-claude-code/Dockerfile +34 -0
  289. package/templates/docker/job-claude-code/entrypoint.sh +139 -0
  290. package/templates/docker/job-pi-coding-agent/Dockerfile +44 -0
  291. package/templates/docker/job-pi-coding-agent/entrypoint.sh +163 -0
  292. package/templates/docker-compose.yml +63 -0
  293. package/templates/instrumentation.js +6 -0
  294. package/templates/middleware.js +1 -0
  295. package/templates/next.config.mjs +3 -0
  296. package/templates/postcss.config.mjs +5 -0
  297. package/templates/skills/LICENSE +21 -0
  298. package/templates/skills/README.md +119 -0
  299. package/templates/skills/brave-search/SKILL.md +79 -0
  300. package/templates/skills/brave-search/content.js +86 -0
  301. package/templates/skills/brave-search/package-lock.json +621 -0
  302. package/templates/skills/brave-search/package.json +14 -0
  303. package/templates/skills/brave-search/search.js +199 -0
  304. package/templates/skills/browser-tools/SKILL.md +196 -0
  305. package/templates/skills/browser-tools/browser-content.js +103 -0
  306. package/templates/skills/browser-tools/browser-cookies.js +35 -0
  307. package/templates/skills/browser-tools/browser-eval.js +53 -0
  308. package/templates/skills/browser-tools/browser-hn-scraper.js +108 -0
  309. package/templates/skills/browser-tools/browser-nav.js +44 -0
  310. package/templates/skills/browser-tools/browser-pick.js +162 -0
  311. package/templates/skills/browser-tools/browser-screenshot.js +34 -0
  312. package/templates/skills/browser-tools/browser-start.js +87 -0
  313. package/templates/skills/browser-tools/package-lock.json +2556 -0
  314. package/templates/skills/browser-tools/package.json +19 -0
  315. package/templates/skills/llm-secrets/SKILL.md +34 -0
  316. package/templates/skills/llm-secrets/llm-secrets.js +33 -0
  317. package/templates/skills/modify-self/SKILL.md +12 -0
@@ -0,0 +1,741 @@
1
+ 'use client';
2
+
3
+ export function PlusIcon({ size = 16 }) {
4
+ return (
5
+ <svg
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ strokeWidth={2}
11
+ strokeLinecap="round"
12
+ strokeLinejoin="round"
13
+ width={size}
14
+ height={size}
15
+ >
16
+ <path d="M5 12h14" />
17
+ <path d="M12 5v14" />
18
+ </svg>
19
+ );
20
+ }
21
+
22
+ export function TrashIcon({ size = 16 }) {
23
+ return (
24
+ <svg
25
+ xmlns="http://www.w3.org/2000/svg"
26
+ viewBox="0 0 24 24"
27
+ fill="none"
28
+ stroke="currentColor"
29
+ strokeWidth={2}
30
+ strokeLinecap="round"
31
+ strokeLinejoin="round"
32
+ width={size}
33
+ height={size}
34
+ >
35
+ <path d="M3 6h18" />
36
+ <path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" />
37
+ <path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" />
38
+ </svg>
39
+ );
40
+ }
41
+
42
+ export function SendIcon({ size = 16 }) {
43
+ return (
44
+ <svg
45
+ xmlns="http://www.w3.org/2000/svg"
46
+ viewBox="0 0 24 24"
47
+ fill="none"
48
+ stroke="currentColor"
49
+ strokeWidth={2}
50
+ strokeLinecap="round"
51
+ strokeLinejoin="round"
52
+ width={size}
53
+ height={size}
54
+ >
55
+ <path d="m5 12 7-7 7 7" />
56
+ <path d="M12 19V5" />
57
+ </svg>
58
+ );
59
+ }
60
+
61
+ export function StopIcon({ size = 16 }) {
62
+ return (
63
+ <svg
64
+ xmlns="http://www.w3.org/2000/svg"
65
+ viewBox="0 0 24 24"
66
+ fill="currentColor"
67
+ width={size}
68
+ height={size}
69
+ >
70
+ <rect x="6" y="6" width="12" height="12" rx="1" />
71
+ </svg>
72
+ );
73
+ }
74
+
75
+ export function MessageIcon({ size = 16 }) {
76
+ return (
77
+ <svg
78
+ xmlns="http://www.w3.org/2000/svg"
79
+ viewBox="0 0 24 24"
80
+ fill="none"
81
+ stroke="currentColor"
82
+ strokeWidth={2}
83
+ strokeLinecap="round"
84
+ strokeLinejoin="round"
85
+ width={size}
86
+ height={size}
87
+ >
88
+ <path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z" />
89
+ </svg>
90
+ );
91
+ }
92
+
93
+ export function SquarePenIcon({ size = 16 }) {
94
+ return (
95
+ <svg
96
+ xmlns="http://www.w3.org/2000/svg"
97
+ viewBox="0 0 24 24"
98
+ fill="none"
99
+ stroke="currentColor"
100
+ strokeWidth={2}
101
+ strokeLinecap="round"
102
+ strokeLinejoin="round"
103
+ width={size}
104
+ height={size}
105
+ >
106
+ <path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" />
107
+ <path d="M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z" />
108
+ </svg>
109
+ );
110
+ }
111
+
112
+ export function PanelLeftIcon({ size = 16 }) {
113
+ return (
114
+ <svg
115
+ xmlns="http://www.w3.org/2000/svg"
116
+ viewBox="0 0 24 24"
117
+ fill="none"
118
+ stroke="currentColor"
119
+ strokeWidth={2}
120
+ strokeLinecap="round"
121
+ strokeLinejoin="round"
122
+ width={size}
123
+ height={size}
124
+ >
125
+ <rect width="18" height="18" x="3" y="3" rx="2" />
126
+ <path d="M9 3v18" />
127
+ </svg>
128
+ );
129
+ }
130
+
131
+ export function SearchIcon({ size = 16 }) {
132
+ return (
133
+ <svg
134
+ xmlns="http://www.w3.org/2000/svg"
135
+ viewBox="0 0 24 24"
136
+ fill="none"
137
+ stroke="currentColor"
138
+ strokeWidth={2}
139
+ strokeLinecap="round"
140
+ strokeLinejoin="round"
141
+ width={size}
142
+ height={size}
143
+ >
144
+ <circle cx="11" cy="11" r="8" />
145
+ <path d="m21 21-4.35-4.35" />
146
+ </svg>
147
+ );
148
+ }
149
+
150
+ export function BellIcon({ size = 16 }) {
151
+ return (
152
+ <svg
153
+ xmlns="http://www.w3.org/2000/svg"
154
+ viewBox="0 0 24 24"
155
+ fill="none"
156
+ stroke="currentColor"
157
+ strokeWidth={2}
158
+ strokeLinecap="round"
159
+ strokeLinejoin="round"
160
+ width={size}
161
+ height={size}
162
+ >
163
+ <path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" />
164
+ <path d="M10.3 21a1.94 1.94 0 0 0 3.4 0" />
165
+ </svg>
166
+ );
167
+ }
168
+
169
+ export function SwarmIcon({ size = 16 }) {
170
+ return (
171
+ <svg
172
+ xmlns="http://www.w3.org/2000/svg"
173
+ viewBox="0 0 24 24"
174
+ fill="none"
175
+ stroke="currentColor"
176
+ strokeWidth={2}
177
+ strokeLinecap="round"
178
+ strokeLinejoin="round"
179
+ width={size}
180
+ height={size}
181
+ >
182
+ {/* Three hexagons in a triangular cluster */}
183
+ <path d="M9.5 2L12 4.5L9.5 7L5 7L2.5 4.5L5 2Z" />
184
+ <path d="M19 2L21.5 4.5L19 7L14.5 7L12 4.5L14.5 2Z" />
185
+ <path d="M14.25 7L16.75 9.5L14.25 12L9.75 12L7.25 9.5L9.75 7Z" />
186
+ </svg>
187
+ );
188
+ }
189
+
190
+ export function PaperclipIcon({ size = 16 }) {
191
+ return (
192
+ <svg
193
+ xmlns="http://www.w3.org/2000/svg"
194
+ viewBox="0 0 24 24"
195
+ fill="none"
196
+ stroke="currentColor"
197
+ strokeWidth={2}
198
+ strokeLinecap="round"
199
+ strokeLinejoin="round"
200
+ width={size}
201
+ height={size}
202
+ >
203
+ <path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48" />
204
+ </svg>
205
+ );
206
+ }
207
+
208
+ export function XIcon({ size = 16, className = '' }) {
209
+ return (
210
+ <svg
211
+ xmlns="http://www.w3.org/2000/svg"
212
+ viewBox="0 0 24 24"
213
+ fill="none"
214
+ stroke="currentColor"
215
+ strokeWidth={2}
216
+ strokeLinecap="round"
217
+ strokeLinejoin="round"
218
+ width={size}
219
+ height={size}
220
+ className={className}
221
+ >
222
+ <path d="M18 6 6 18" />
223
+ <path d="m6 6 12 12" />
224
+ </svg>
225
+ );
226
+ }
227
+
228
+ export function FileTextIcon({ size = 16 }) {
229
+ return (
230
+ <svg
231
+ xmlns="http://www.w3.org/2000/svg"
232
+ viewBox="0 0 24 24"
233
+ fill="none"
234
+ stroke="currentColor"
235
+ strokeWidth={2}
236
+ strokeLinecap="round"
237
+ strokeLinejoin="round"
238
+ width={size}
239
+ height={size}
240
+ >
241
+ <path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
242
+ <path d="M14 2v4a2 2 0 0 0 2 2h4" />
243
+ <path d="M10 9H8" />
244
+ <path d="M16 13H8" />
245
+ <path d="M16 17H8" />
246
+ </svg>
247
+ );
248
+ }
249
+
250
+ export function ClockIcon({ size = 16 }) {
251
+ return (
252
+ <svg
253
+ xmlns="http://www.w3.org/2000/svg"
254
+ viewBox="0 0 24 24"
255
+ fill="none"
256
+ stroke="currentColor"
257
+ strokeWidth={2}
258
+ strokeLinecap="round"
259
+ strokeLinejoin="round"
260
+ width={size}
261
+ height={size}
262
+ >
263
+ <circle cx="12" cy="12" r="10" />
264
+ <polyline points="12 6 12 12 16 14" />
265
+ </svg>
266
+ );
267
+ }
268
+
269
+ export function ZapIcon({ size = 16 }) {
270
+ return (
271
+ <svg
272
+ xmlns="http://www.w3.org/2000/svg"
273
+ viewBox="0 0 24 24"
274
+ fill="none"
275
+ stroke="currentColor"
276
+ strokeWidth={2}
277
+ strokeLinecap="round"
278
+ strokeLinejoin="round"
279
+ width={size}
280
+ height={size}
281
+ >
282
+ <path d="M13 2 3 14h9l-1 10 10-12h-9l1-10z" />
283
+ </svg>
284
+ );
285
+ }
286
+
287
+ export function RefreshIcon({ size = 16 }) {
288
+ return (
289
+ <svg
290
+ xmlns="http://www.w3.org/2000/svg"
291
+ viewBox="0 0 24 24"
292
+ fill="none"
293
+ stroke="currentColor"
294
+ strokeWidth={2}
295
+ strokeLinecap="round"
296
+ strokeLinejoin="round"
297
+ width={size}
298
+ height={size}
299
+ >
300
+ <path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" />
301
+ <path d="M21 3v5h-5" />
302
+ <path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" />
303
+ <path d="M8 16H3v5" />
304
+ </svg>
305
+ );
306
+ }
307
+
308
+ export function ChevronDownIcon({ size = 16, className = '' }) {
309
+ return (
310
+ <svg
311
+ xmlns="http://www.w3.org/2000/svg"
312
+ viewBox="0 0 24 24"
313
+ fill="none"
314
+ stroke="currentColor"
315
+ strokeWidth={2}
316
+ strokeLinecap="round"
317
+ strokeLinejoin="round"
318
+ width={size}
319
+ height={size}
320
+ className={className}
321
+ >
322
+ <path d="m6 9 6 6 6-6" />
323
+ </svg>
324
+ );
325
+ }
326
+
327
+ export function SettingsIcon({ size = 16 }) {
328
+ return (
329
+ <svg
330
+ xmlns="http://www.w3.org/2000/svg"
331
+ viewBox="0 0 24 24"
332
+ fill="none"
333
+ stroke="currentColor"
334
+ strokeWidth={2}
335
+ strokeLinecap="round"
336
+ strokeLinejoin="round"
337
+ width={size}
338
+ height={size}
339
+ >
340
+ <path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" />
341
+ <circle cx="12" cy="12" r="3" />
342
+ </svg>
343
+ );
344
+ }
345
+
346
+ export function KeyIcon({ size = 16 }) {
347
+ return (
348
+ <svg
349
+ xmlns="http://www.w3.org/2000/svg"
350
+ viewBox="0 0 24 24"
351
+ fill="none"
352
+ stroke="currentColor"
353
+ strokeWidth={2}
354
+ strokeLinecap="round"
355
+ strokeLinejoin="round"
356
+ width={size}
357
+ height={size}
358
+ >
359
+ <path d="m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4" />
360
+ <path d="m21 2-9.6 9.6" />
361
+ <circle cx="7.5" cy="15.5" r="5.5" />
362
+ </svg>
363
+ );
364
+ }
365
+
366
+ export function CopyIcon({ size = 16 }) {
367
+ return (
368
+ <svg
369
+ xmlns="http://www.w3.org/2000/svg"
370
+ viewBox="0 0 24 24"
371
+ fill="none"
372
+ stroke="currentColor"
373
+ strokeWidth={2}
374
+ strokeLinecap="round"
375
+ strokeLinejoin="round"
376
+ width={size}
377
+ height={size}
378
+ >
379
+ <rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
380
+ <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
381
+ </svg>
382
+ );
383
+ }
384
+
385
+ export function CheckIcon({ size = 16, className = '' }) {
386
+ return (
387
+ <svg
388
+ xmlns="http://www.w3.org/2000/svg"
389
+ viewBox="0 0 24 24"
390
+ fill="none"
391
+ stroke="currentColor"
392
+ strokeWidth={2}
393
+ strokeLinecap="round"
394
+ strokeLinejoin="round"
395
+ width={size}
396
+ height={size}
397
+ className={className}
398
+ >
399
+ <path d="M20 6 9 17l-5-5" />
400
+ </svg>
401
+ );
402
+ }
403
+
404
+ export function SpinnerIcon({ size = 16, className = '' }) {
405
+ return (
406
+ <svg
407
+ xmlns="http://www.w3.org/2000/svg"
408
+ viewBox="0 0 24 24"
409
+ fill="none"
410
+ stroke="currentColor"
411
+ strokeWidth={2}
412
+ strokeLinecap="round"
413
+ strokeLinejoin="round"
414
+ width={size}
415
+ height={size}
416
+ className={`animate-spin ${className}`}
417
+ >
418
+ <path d="M21 12a9 9 0 1 1-6.219-8.56" />
419
+ </svg>
420
+ );
421
+ }
422
+
423
+ export function SunIcon({ size = 16 }) {
424
+ return (
425
+ <svg
426
+ xmlns="http://www.w3.org/2000/svg"
427
+ viewBox="0 0 24 24"
428
+ fill="none"
429
+ stroke="currentColor"
430
+ strokeWidth={2}
431
+ strokeLinecap="round"
432
+ strokeLinejoin="round"
433
+ width={size}
434
+ height={size}
435
+ >
436
+ <circle cx="12" cy="12" r="4" />
437
+ <path d="M12 2v2" />
438
+ <path d="M12 20v2" />
439
+ <path d="m4.93 4.93 1.41 1.41" />
440
+ <path d="m17.66 17.66 1.41 1.41" />
441
+ <path d="M2 12h2" />
442
+ <path d="M20 12h2" />
443
+ <path d="m6.34 17.66-1.41 1.41" />
444
+ <path d="m19.07 4.93-1.41 1.41" />
445
+ </svg>
446
+ );
447
+ }
448
+
449
+ export function MoonIcon({ size = 16 }) {
450
+ return (
451
+ <svg
452
+ xmlns="http://www.w3.org/2000/svg"
453
+ viewBox="0 0 24 24"
454
+ fill="none"
455
+ stroke="currentColor"
456
+ strokeWidth={2}
457
+ strokeLinecap="round"
458
+ strokeLinejoin="round"
459
+ width={size}
460
+ height={size}
461
+ >
462
+ <path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" />
463
+ </svg>
464
+ );
465
+ }
466
+
467
+ export function StarIcon({ size = 16 }) {
468
+ return (
469
+ <svg
470
+ xmlns="http://www.w3.org/2000/svg"
471
+ viewBox="0 0 24 24"
472
+ fill="none"
473
+ stroke="currentColor"
474
+ strokeWidth={2}
475
+ strokeLinecap="round"
476
+ strokeLinejoin="round"
477
+ width={size}
478
+ height={size}
479
+ >
480
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" />
481
+ </svg>
482
+ );
483
+ }
484
+
485
+ export function StarFilledIcon({ size = 16 }) {
486
+ return (
487
+ <svg
488
+ xmlns="http://www.w3.org/2000/svg"
489
+ viewBox="0 0 24 24"
490
+ fill="currentColor"
491
+ stroke="currentColor"
492
+ strokeWidth={2}
493
+ strokeLinecap="round"
494
+ strokeLinejoin="round"
495
+ width={size}
496
+ height={size}
497
+ >
498
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" />
499
+ </svg>
500
+ );
501
+ }
502
+
503
+ export function MoreHorizontalIcon({ size = 16 }) {
504
+ return (
505
+ <svg
506
+ xmlns="http://www.w3.org/2000/svg"
507
+ viewBox="0 0 24 24"
508
+ fill="none"
509
+ stroke="currentColor"
510
+ strokeWidth={2}
511
+ strokeLinecap="round"
512
+ strokeLinejoin="round"
513
+ width={size}
514
+ height={size}
515
+ >
516
+ <circle cx="12" cy="12" r="1.5" />
517
+ <circle cx="19" cy="12" r="1.5" />
518
+ <circle cx="5" cy="12" r="1.5" />
519
+ </svg>
520
+ );
521
+ }
522
+
523
+ export function PencilIcon({ size = 16 }) {
524
+ return (
525
+ <svg
526
+ xmlns="http://www.w3.org/2000/svg"
527
+ viewBox="0 0 24 24"
528
+ fill="none"
529
+ stroke="currentColor"
530
+ strokeWidth={2}
531
+ strokeLinecap="round"
532
+ strokeLinejoin="round"
533
+ width={size}
534
+ height={size}
535
+ >
536
+ <path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" />
537
+ </svg>
538
+ );
539
+ }
540
+
541
+ export function CirclePlusIcon({ size = 16 }) {
542
+ return (
543
+ <svg
544
+ xmlns="http://www.w3.org/2000/svg"
545
+ viewBox="0 0 24 24"
546
+ fill="none"
547
+ stroke="currentColor"
548
+ strokeWidth={2}
549
+ strokeLinecap="round"
550
+ strokeLinejoin="round"
551
+ width={size}
552
+ height={size}
553
+ >
554
+ <circle cx="12" cy="12" r="10" />
555
+ <path d="M8 12h8" />
556
+ <path d="M12 8v8" />
557
+ </svg>
558
+ );
559
+ }
560
+
561
+ export function ArrowUpCircleIcon({ size = 16 }) {
562
+ return (
563
+ <svg
564
+ xmlns="http://www.w3.org/2000/svg"
565
+ viewBox="0 0 24 24"
566
+ fill="none"
567
+ stroke="currentColor"
568
+ strokeWidth={2}
569
+ strokeLinecap="round"
570
+ strokeLinejoin="round"
571
+ width={size}
572
+ height={size}
573
+ >
574
+ <circle cx="12" cy="12" r="10" />
575
+ <path d="m16 12-4-4-4 4" />
576
+ <path d="M12 16V8" />
577
+ </svg>
578
+ );
579
+ }
580
+
581
+ export function BugIcon({ size = 16 }) {
582
+ return (
583
+ <svg
584
+ xmlns="http://www.w3.org/2000/svg"
585
+ viewBox="0 0 24 24"
586
+ fill="none"
587
+ stroke="currentColor"
588
+ strokeWidth={2}
589
+ strokeLinecap="round"
590
+ strokeLinejoin="round"
591
+ width={size}
592
+ height={size}
593
+ >
594
+ <path d="m8 2 1.88 1.88" />
595
+ <path d="M14.12 3.88 16 2" />
596
+ <path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1" />
597
+ <path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6" />
598
+ <path d="M12 20v-9" />
599
+ <path d="M6.53 9C4.6 8.8 3 7.1 3 5" />
600
+ <path d="M6 13H2" />
601
+ <path d="M3 21c0-2.1 1.7-3.9 3.8-4" />
602
+ <path d="M20.97 5c0 2.1-1.6 3.8-3.5 4" />
603
+ <path d="M22 13h-4" />
604
+ <path d="M17.2 17c2.1.1 3.8 1.9 3.8 4" />
605
+ </svg>
606
+ );
607
+ }
608
+
609
+ export function LifeBuoyIcon({ size = 16 }) {
610
+ return (
611
+ <svg
612
+ xmlns="http://www.w3.org/2000/svg"
613
+ viewBox="0 0 24 24"
614
+ fill="none"
615
+ stroke="currentColor"
616
+ strokeWidth={2}
617
+ strokeLinecap="round"
618
+ strokeLinejoin="round"
619
+ width={size}
620
+ height={size}
621
+ >
622
+ <circle cx="12" cy="12" r="10" />
623
+ <circle cx="12" cy="12" r="4" />
624
+ <line x1="4.93" x2="9.17" y1="4.93" y2="9.17" />
625
+ <line x1="14.83" x2="19.07" y1="14.83" y2="19.07" />
626
+ <line x1="14.83" x2="19.07" y1="9.17" y2="4.93" />
627
+ <line x1="4.93" x2="9.17" y1="19.07" y2="14.83" />
628
+ </svg>
629
+ );
630
+ }
631
+
632
+ export function WrenchIcon({ size = 16, className = '' }) {
633
+ return (
634
+ <svg
635
+ xmlns="http://www.w3.org/2000/svg"
636
+ viewBox="0 0 24 24"
637
+ fill="none"
638
+ stroke="currentColor"
639
+ strokeWidth={2}
640
+ strokeLinecap="round"
641
+ strokeLinejoin="round"
642
+ width={size}
643
+ height={size}
644
+ className={className}
645
+ >
646
+ <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" />
647
+ </svg>
648
+ );
649
+ }
650
+
651
+ export function CrosshairIcon({ size = 16 }) {
652
+ return (
653
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" width={size} height={size}>
654
+ <circle cx="12" cy="12" r="10" />
655
+ <line x1="22" x2="18" y1="12" y2="12" />
656
+ <line x1="6" x2="2" y1="12" y2="12" />
657
+ <line x1="12" x2="12" y1="2" y2="6" />
658
+ <line x1="12" x2="12" y1="18" y2="22" />
659
+ </svg>
660
+ );
661
+ }
662
+
663
+ export function ShieldIcon({ size = 16 }) {
664
+ return (
665
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" width={size} height={size}>
666
+ <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" />
667
+ </svg>
668
+ );
669
+ }
670
+
671
+ export function PackageIcon({ size = 16 }) {
672
+ return (
673
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" width={size} height={size}>
674
+ <path d="M16.5 9.4 7.55 4.24" />
675
+ <path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" />
676
+ <polyline points="3.29 7 12 12 20.71 7" />
677
+ <line x1="12" x2="12" y1="22" y2="12" />
678
+ </svg>
679
+ );
680
+ }
681
+
682
+ export function DownloadIcon({ size = 16 }) {
683
+ return (
684
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" width={size} height={size}>
685
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
686
+ <polyline points="7 10 12 15 17 10" />
687
+ <line x1="12" x2="12" y1="15" y2="3" />
688
+ </svg>
689
+ );
690
+ }
691
+
692
+ export function GlobeIcon({ size = 16 }) {
693
+ return (
694
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" width={size} height={size}>
695
+ <circle cx="12" cy="12" r="10" />
696
+ <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" />
697
+ <path d="M2 12h20" />
698
+ </svg>
699
+ );
700
+ }
701
+
702
+ export function PlugIcon({ size = 16 }) {
703
+ return (
704
+ <svg
705
+ xmlns="http://www.w3.org/2000/svg"
706
+ viewBox="0 0 24 24"
707
+ fill="none"
708
+ stroke="currentColor"
709
+ strokeWidth={2}
710
+ strokeLinecap="round"
711
+ strokeLinejoin="round"
712
+ width={size}
713
+ height={size}
714
+ >
715
+ <path d="M12 22v-5" />
716
+ <path d="M9 8V2" />
717
+ <path d="M15 8V2" />
718
+ <path d="M18 8v5a6 6 0 0 1-6 6a6 6 0 0 1-6-6V8Z" />
719
+ </svg>
720
+ );
721
+ }
722
+
723
+ export function LogOutIcon({ size = 16 }) {
724
+ return (
725
+ <svg
726
+ xmlns="http://www.w3.org/2000/svg"
727
+ viewBox="0 0 24 24"
728
+ fill="none"
729
+ stroke="currentColor"
730
+ strokeWidth={2}
731
+ strokeLinecap="round"
732
+ strokeLinejoin="round"
733
+ width={size}
734
+ height={size}
735
+ >
736
+ <path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" />
737
+ <polyline points="16 17 21 12 16 7" />
738
+ <line x1="21" x2="9" y1="12" y2="12" />
739
+ </svg>
740
+ );
741
+ }