1import { useId } from "react";
2import type { Icon } from "./Icons";
3
4const useSvgGradientIds = (prefix: string, count: number) => {
5 const id = useId();
6 return Array.from(
7 { length: count },
8 (_, index) => `${id}-${prefix}-${String.fromCharCode(97 + index)}`,
9 );
10};
11
12export const AquaIcon: Icon = (props) => {
13 const [gradientAId, gradientBId] = useSvgGradientIds("aqua", 2);
14
15 return (
16 <svg {...props} viewBox="0 0 64 64" fill="none">
17 <defs>
18 <linearGradient
19 id={gradientAId}
20 x1="59.932"
21 x2="1.336"
22 y1="59.676"
23 y2="1.079"
24 gradientUnits="userSpaceOnUse"
25 >
26 <stop offset=".25" stopColor="#7256FF" />
27 <stop offset=".73" stopColor="#007DFE" />
28 </linearGradient>
29 <linearGradient
30 id={gradientBId}
31 x1="7.671"
32 x2="61.125"
33 y1="64.392"
34 y2="39.609"
35 gradientUnits="userSpaceOnUse"
36 >
37 <stop offset=".3" stopColor="#00D886" />
38 <stop offset=".54" stopColor="#7256FF" />
39 </linearGradient>
40 </defs>
41 <path
42 fill={`url(#${gradientAId})`}
43 d="M0 4.125v34.128c0 1.658.993 3.154 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.13 4.13 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125"
44 />
45 <path
46 fill={`url(#${gradientBId})`}
47 d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566q.3 0 .598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.13 4.13 0 0 0 6 49.015z"
48 />
49 <path
50 fill="#00D886"
51 d="M6 47.55v12.259a4.125 4.125 0 0 0 4.19 4.124L21 64c1.181-.019 2.531-.786 3.3-1.683l32.707-38.158c.64-.748.993-1.7.993-2.685V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.834A4.12 4.12 0 0 0 6 47.55"
52 />
53 <path fill="#000" d="M52 12H12v40h40z" />
54 <path
55 fill="#fff"
56 d="M33 44H17v3h16zM20.746 31.243a7.3 7.3 0 0 1-2.755-2.787q-1.002-1.774-1.003-3.961c0-2.187.334-2.778 1.003-3.96a7.3 7.3 0 0 1 2.755-2.787q1.752-1.013 3.917-1.014c1.443 0 2.739.338 3.907 1.013a7.3 7.3 0 0 1 2.75 2.787q.996 1.774.996 3.961c0 2.187-.332 2.778-.997 3.96a7.3 7.3 0 0 1-2.749 2.788q-1.752 1.013-3.907 1.013c-1.436 0-2.75-.338-3.917-1.013m6.308-2.23q1.06-.67 1.661-1.854.6-1.185.6-2.664t-.6-2.664a4.6 4.6 0 0 0-1.661-1.854q-1.061-.67-2.39-.67t-2.396.67a4.6 4.6 0 0 0-1.672 1.854q-.605 1.185-.605 2.664t.605 2.664 1.672 1.854q1.067.67 2.396.67 1.33 0 2.39-.67m-2.16 6.034a2.67 2.67 0 0 1-1.126-1.077q-.391-.696-.391-1.64l-.01-1.94h2.743v1.811q0 .332.129.573.128.242.37.365.24.123.574.123h1.833v2.165h-2.412q-.975 0-1.71-.38M38.233 16.992h3.173l5.563 15.006h-2.947l-1.212-3.483h-5.842l-1.136 3.483H32.82zm3.805 9.261-2.025-5.723-.225-.954-.215.954-1.908 5.723z"
57 />
58 </svg>
59 );
60};
61
62export const CLionIcon: Icon = (props) => {
63 const [gradientAId, gradientBId] = useSvgGradientIds("clion", 2);
64
65 return (
66 <svg {...props} viewBox="0 0 64 64" fill="none">
67 <defs>
68 <linearGradient
69 id={gradientAId}
70 x1="4.067"
71 x2="62.664"
72 y1="4.327"
73 y2="62.923"
74 gradientUnits="userSpaceOnUse"
75 >
76 <stop offset=".29" stopColor="#009AE5" />
77 <stop offset=".7" stopColor="#00D980" />
78 </linearGradient>
79 <linearGradient
80 id={gradientBId}
81 x1="56.329"
82 x2="2.874"
83 y1="-.391"
84 y2="24.393"
85 gradientUnits="userSpaceOnUse"
86 >
87 <stop offset=".3" stopColor="#FF2D90" />
88 <stop offset=".54" stopColor="#009AE5" />
89 </linearGradient>
90 </defs>
91 <path
92 fill={`url(#${gradientAId})`}
93 d="M64 59.878V25.75a4.13 4.13 0 0 0-2.52-3.8L24.057 6.153a4.1 4.1 0 0 0-1.638-.325l-18.329.15A4.124 4.124 0 0 0 0 10.103v17.665c0 .806.236 1.593.678 2.267l21.109 32.109a4.12 4.12 0 0 0 3.447 1.859h34.641A4.125 4.125 0 0 0 64 59.878"
94 />
95 <path
96 fill={`url(#${gradientBId})`}
97 d="M58 14.988V4.125A4.125 4.125 0 0 0 53.875 0H41.309q-.3 0-.598.044L3.527 5.492A4.125 4.125 0 0 0 0 9.573v15.398a4.125 4.125 0 0 0 4.126 4.125l18.505-.005c.425 0 .848-.066 1.253-.195l31.246-9.98A4.13 4.13 0 0 0 58 14.988"
98 />
99 <path
100 fill="#FF2D90"
101 d="M58 16.453V4.194A4.125 4.125 0 0 0 53.81.07L43.003.008c-1.18.019-2.535.781-3.304 1.678L6.993 39.844c-.64.748-.993 1.7-.993 2.684v11.35a4.125 4.125 0 0 0 4.125 4.125h11.003c1.19 0 2.321-.514 3.105-1.409L56.979 19.17A4.12 4.12 0 0 0 58 16.453"
102 />
103 <path fill="#000" d="M52 12H12v40h40z" />
104 <path
105 fill="#fff"
106 d="M33 44H17v3h16zM20.747 31.243a7.3 7.3 0 0 1-2.744-2.787q-.997-1.774-.997-3.961c0-2.187.332-2.778.997-3.96a7.3 7.3 0 0 1 2.744-2.787q1.747-1.013 3.901-1.014 1.823 0 3.345.675a6.86 6.86 0 0 1 2.535 1.892 6.44 6.44 0 0 1 1.355 2.793h-3.065a4.05 4.05 0 0 0-.895-1.431 4 4 0 0 0-1.431-.95 4.9 4.9 0 0 0-1.822-.332q-1.33 0-2.402.665a4.6 4.6 0 0 0-1.677 1.827q-.606 1.164-.606 2.62 0 1.459.606 2.621a4.6 4.6 0 0 0 1.677 1.828q1.072.664 2.402.664a4.9 4.9 0 0 0 1.822-.332 4.02 4.02 0 0 0 2.326-2.38h3.065a6.44 6.44 0 0 1-1.355 2.792 6.86 6.86 0 0 1-2.535 1.892q-1.522.675-3.345.675-2.154 0-3.901-1.013zM37.33 16.992v12.37h7.117v2.636H34.414V16.992z"
107 />
108 </svg>
109 );
110};
111
112export const DataGripIcon: Icon = (props) => {
113 const [gradientAId, gradientBId] = useSvgGradientIds("datagrip", 2);
114
115 return (
116 <svg {...props} viewBox="0 0 64 64" fill="none">
117 <defs>
118 <linearGradient
119 id={gradientAId}
120 x1="59.676"
121 x2="1.08"
122 y1="4.067"
123 y2="62.663"
124 gradientUnits="userSpaceOnUse"
125 >
126 <stop offset=".28" stopColor="#7256FF" />
127 <stop offset=".66" stopColor="#00D980" />
128 </linearGradient>
129 <linearGradient
130 id={gradientBId}
131 x1="64.391"
132 x2="39.607"
133 y1="56.329"
134 y2="2.874"
135 gradientUnits="userSpaceOnUse"
136 >
137 <stop offset=".3" stopColor="#FF43F2" />
138 <stop offset=".54" stopColor="#7256FF" />
139 </linearGradient>
140 </defs>
141 <path
142 fill={`url(#${gradientAId})`}
143 d="M4.125 64h34.128a4.13 4.13 0 0 0 3.8-2.52L57.85 24.057c.219-.518.33-1.076.324-1.638l-.15-18.329A4.125 4.125 0 0 0 53.9 0H36.234c-.806 0-1.593.236-2.267.678L1.86 21.787A4.13 4.13 0 0 0 0 25.234v34.641A4.125 4.125 0 0 0 4.125 64"
144 />
145 <path
146 fill={`url(#${gradientBId})`}
147 d="M49.013 58h10.862A4.125 4.125 0 0 0 64 53.875V41.309q0-.3-.044-.598L58.508 3.527A4.125 4.125 0 0 0 54.427 0H39.029a4.125 4.125 0 0 0-4.125 4.126l.005 18.505c0 .425.066.848.195 1.253l9.979 31.246a4.13 4.13 0 0 0 3.93 2.87"
148 />
149 <path
150 fill="#FF43F2"
151 d="M47.55 58h12.259a4.125 4.125 0 0 0 4.124-4.19L64 43c-.018-1.181-.785-2.531-1.682-3.3L24.159 6.993A4.13 4.13 0 0 0 21.474 6H10.125A4.125 4.125 0 0 0 6 10.125v11.003c0 1.19.514 2.321 1.409 3.105l37.425 32.746A4.12 4.12 0 0 0 47.55 58"
152 />
153 <path fill="#000" d="M52 12H12v40h40z" />
154 <path
155 fill="#fff"
156 d="M33 44H17v3h16zM17.012 16.992h5.713q2.133 0 3.821.965a6.9 6.9 0 0 1 2.642 2.674q.954 1.71.954 3.864t-.954 3.865a6.9 6.9 0 0 1-2.642 2.674q-1.688.964-3.821.964h-5.713zm8.028 11.876q1.008-.6 1.554-1.72.547-1.12.547-2.653 0-1.534-.547-2.653-.546-1.12-1.554-1.721-1.008-.6-2.348-.6h-2.755v9.947h2.755q1.34 0 2.348-.6M35.426 31.243a7.3 7.3 0 0 1-2.744-2.787q-.997-1.774-.997-3.961c0-2.187.333-2.778.997-3.96s1.58-2.112 2.744-2.787q1.747-1.013 3.902-1.014 1.746 0 3.221.622a6.9 6.9 0 0 1 2.487 1.747 6.36 6.36 0 0 1 1.42 2.594h-3.13a3.9 3.9 0 0 0-.927-1.228q-.585-.52-1.367-.803c-.782-.283-1.082-.284-1.683-.284q-1.329 0-2.401.664a4.6 4.6 0 0 0-1.678 1.828q-.605 1.163-.605 2.62c0 1.457.202 1.846.605 2.621a4.6 4.6 0 0 0 1.678 1.828q1.072.664 2.401.664 1.233 0 2.235-.461t1.592-1.276a3.3 3.3 0 0 0 .633-1.833l.01.31h-3.526v-2.304h6.356v1.18q0 1.982-.96 3.585a6.9 6.9 0 0 1-2.625 2.525q-1.668.921-3.736.921c-1.38 0-2.737-.337-3.902-1.013z"
157 />
158 </svg>
159 );
160};
161
162export const DataSpellIcon: Icon = (props) => {
163 const [gradientAId, gradientBId] = useSvgGradientIds("dataspell", 2);
164
165 return (
166 <svg {...props} viewBox="0 0 64 64" fill="none">
167 <defs>
168 <linearGradient
169 id={gradientAId}
170 x1="4.067"
171 x2="62.664"
172 y1="4.327"
173 y2="62.923"
174 gradientUnits="userSpaceOnUse"
175 >
176 <stop offset=".28" stopColor="#007DFE" />
177 <stop offset=".73" stopColor="#00D980" />
178 </linearGradient>
179 <linearGradient
180 id={gradientBId}
181 x1="56.329"
182 x2="2.875"
183 y1="-.391"
184 y2="24.392"
185 gradientUnits="userSpaceOnUse"
186 >
187 <stop offset=".32" stopColor="#F0EB18" />
188 <stop offset=".55" stopColor="#007DFE" />
189 </linearGradient>
190 </defs>
191 <path
192 fill={`url(#${gradientAId})`}
193 d="M64 59.878V25.75a4.13 4.13 0 0 0-2.52-3.8L24.057 6.153a4.1 4.1 0 0 0-1.638-.325l-18.329.15A4.124 4.124 0 0 0 0 10.103v17.665c0 .806.236 1.593.678 2.267l21.109 32.109a4.12 4.12 0 0 0 3.447 1.859h34.641A4.125 4.125 0 0 0 64 59.878"
194 />
195 <path
196 fill={`url(#${gradientBId})`}
197 d="M58 14.988V4.125A4.125 4.125 0 0 0 53.875 0H41.309q-.3 0-.598.044L3.527 5.492A4.125 4.125 0 0 0 0 9.573v15.398a4.125 4.125 0 0 0 4.126 4.125l18.505-.005c.425 0 .848-.066 1.253-.195l31.246-9.98A4.13 4.13 0 0 0 58 14.988"
198 />
199 <path
200 fill="#F0EB18"
201 d="M58 16.45V4.191A4.125 4.125 0 0 0 53.81.067L43 0c-1.181.019-2.531.786-3.3 1.683L6.993 39.84c-.64.748-.993 1.7-.993 2.685v11.349A4.125 4.125 0 0 0 10.125 58h11.003c1.19 0 2.321-.514 3.105-1.409l32.746-37.425A4.12 4.12 0 0 0 58 16.45"
202 />
203 <path fill="#000" d="M52 12H12v40h40z" />
204 <path
205 fill="#fff"
206 d="M33 44H17v3h16zM17.012 16.992h5.713q2.133 0 3.821.965a6.9 6.9 0 0 1 2.642 2.674q.954 1.71.954 3.864t-.954 3.865a6.9 6.9 0 0 1-2.642 2.674q-1.688.964-3.821.964h-5.713zm8.028 11.876q1.008-.6 1.554-1.72.547-1.12.547-2.653 0-1.534-.547-2.653-.546-1.12-1.554-1.721-1.008-.6-2.348-.6h-2.755v9.947h2.755q1.34 0 2.348-.6M34.713 31.664q-1.26-.59-1.973-1.65t-.734-2.444h2.937q0 .654.343 1.147t.954.772q.61.278 1.404.278c.53 0 .952-.083 1.334-.251q.574-.252.89-.702t.316-1.029q0-.718-.434-1.19-.435-.471-1.195-.654l-2.648-.59q-1.071-.234-1.865-.809a4 4 0 0 1-1.232-1.42q-.44-.846-.44-1.908 0-1.286.665-2.31.664-1.023 1.854-1.597 1.19-.573 2.701-.573c1.511 0 1.933.186 2.733.558s1.424.888 1.871 1.549q.67.99.68 2.277h-2.926q0-.546-.289-.98c-.289-.435-.466-.515-.82-.676a2.9 2.9 0 0 0-1.217-.24q-.686 0-1.205.23a1.9 1.9 0 0 0-.81.643q-.29.412-.29.96 0 .621.403 1.028.402.407 1.098.579l2.552.557q1.103.226 1.967.852a4.45 4.45 0 0 1 1.345 1.544q.481.917.482 1.999 0 1.329-.702 2.385-.702 1.054-1.967 1.656-1.265.6-2.894.6t-2.889-.59"
207 />
208 </svg>
209 );
210};
211
212export const GoLandIcon: Icon = (props) => {
213 const [gradientAId, gradientBId] = useSvgGradientIds("goland", 2);
214
215 return (
216 <svg {...props} viewBox="0 0 64 64" fill="none">
217 <defs>
218 <linearGradient
219 id={gradientAId}
220 x1="64.391"
221 x2="39.607"
222 y1="56.329"
223 y2="2.874"
224 gradientUnits="userSpaceOnUse"
225 >
226 <stop offset=".24" stopColor="#00D886" />
227 <stop offset=".51" stopColor="#007DFE" />
228 </linearGradient>
229 <linearGradient
230 id={gradientBId}
231 x1="59.676"
232 x2="1.08"
233 y1="4.067"
234 y2="62.663"
235 gradientUnits="userSpaceOnUse"
236 >
237 <stop offset=".27" stopColor="#007DFE" />
238 <stop offset=".7" stopColor="#D249FC" />
239 </linearGradient>
240 </defs>
241 <path
242 fill="#00D886"
243 d="M47.55 58h12.259a4.125 4.125 0 0 0 4.124-4.19l-.176-11.044a4.13 4.13 0 0 0-1.44-3.066L24.159 6.993A4.13 4.13 0 0 0 21.474 6H10.125A4.125 4.125 0 0 0 6 10.125v11.003c0 1.19.514 2.321 1.409 3.105l37.425 32.746A4.12 4.12 0 0 0 47.55 58"
244 />
245 <path
246 fill={`url(#${gradientAId})`}
247 d="M49.013 58h10.862A4.125 4.125 0 0 0 64 53.875V41.309q0-.3-.044-.598L58.508 3.527A4.124 4.124 0 0 0 54.427 0H39.029a4.125 4.125 0 0 0-4.125 4.126l.005 18.505c0 .425.066.848.195 1.253l9.979 31.246a4.13 4.13 0 0 0 3.93 2.87"
248 />
249 <path
250 fill={`url(#${gradientBId})`}
251 d="M4.125 64h34.128a4.13 4.13 0 0 0 3.8-2.52L57.85 24.057c.219-.518.33-1.076.324-1.638l-.15-18.329A4.124 4.124 0 0 0 53.9 0H36.234c-.805 0-1.593.236-2.266.678L1.86 21.787A4.13 4.13 0 0 0 0 25.234v34.641A4.125 4.125 0 0 0 4.125 64"
252 />
253 <path fill="#000" d="M52 12H12v40h40z" />
254 <path
255 fill="#fff"
256 d="M19.748 31.243a7.3 7.3 0 0 1-2.743-2.787q-.997-1.774-.997-3.961c0-2.187.332-2.778.997-3.96s1.58-2.112 2.743-2.787q1.747-1.013 3.902-1.014 1.747 0 3.222.622a6.9 6.9 0 0 1 2.486 1.747 6.4 6.4 0 0 1 1.42 2.594h-3.13a3.9 3.9 0 0 0-.926-1.228q-.584-.52-1.367-.803c-.783-.283-1.083-.284-1.683-.284q-1.33 0-2.402.664a4.6 4.6 0 0 0-1.677 1.828q-.606 1.163-.606 2.62c0 1.457.202 1.846.606 2.621a4.6 4.6 0 0 0 1.677 1.828q1.072.664 2.402.664 1.232 0 2.235-.461t1.591-1.276a3.3 3.3 0 0 0 .633-1.833l.01.31h-3.526v-2.304h6.357v1.18q0 1.982-.96 3.585a6.9 6.9 0 0 1-2.626 2.525q-1.666.921-3.736.921c-2.07 0-2.737-.337-3.902-1.013zM36.271 31.243a7.3 7.3 0 0 1-2.755-2.787q-1.002-1.774-1.002-3.961c0-2.187.333-2.778 1.002-3.96a7.3 7.3 0 0 1 2.755-2.787q1.752-1.013 3.918-1.014c1.443 0 2.738.338 3.907 1.013a7.3 7.3 0 0 1 2.749 2.787q.996 1.774.997 3.961c0 2.187-.333 2.778-.997 3.96s-1.581 2.113-2.75 2.788q-1.752 1.013-3.906 1.013c-1.437 0-2.75-.338-3.918-1.013m6.308-2.23q1.062-.67 1.662-1.854t.6-2.664-.6-2.664-1.662-1.854-2.39-.67-2.395.67a4.6 4.6 0 0 0-1.672 1.854q-.606 1.185-.606 2.664t.606 2.664 1.672 1.854 2.395.67q1.33 0 2.39-.67M33 44H17v3h16z"
257 />
258 </svg>
259 );
260};
261
262export const IntelliJIdeaIcon: Icon = (props) => {
263 const [gradientAId, gradientBId] = useSvgGradientIds("intellij-idea", 2);
264
265 return (
266 <svg {...props} viewBox="0 0 64 64" fill="none">
267 <defs>
268 <linearGradient
269 id={gradientAId}
270 x1="-.391"
271 x2="24.392"
272 y1="7.671"
273 y2="61.126"
274 gradientUnits="userSpaceOnUse"
275 >
276 <stop offset=".1" stopColor="#FC801D" />
277 <stop offset=".59" stopColor="#FE2857" />
278 </linearGradient>
279 <linearGradient
280 id={gradientBId}
281 x1="4.325"
282 x2="62.921"
283 y1="59.932"
284 y2="1.336"
285 gradientUnits="userSpaceOnUse"
286 >
287 <stop offset=".21" stopColor="#FE2857" />
288 <stop offset=".7" stopColor="#007EFF" />
289 </linearGradient>
290 </defs>
291 <path
292 fill="#FF8100"
293 d="M16.45 6H4.191a4.125 4.125 0 0 0-4.124 4.19l.176 11.044a4.13 4.13 0 0 0 1.44 3.066l38.159 32.707c.747.64 1.7.993 2.684.993h11.35A4.125 4.125 0 0 0 58 53.875V42.872c0-1.19-.514-2.321-1.41-3.105L19.167 7.021A4.12 4.12 0 0 0 16.45 6"
294 />
295 <path
296 fill={`url(#${gradientAId})`}
297 d="M14.988 6H4.125A4.125 4.125 0 0 0 0 10.125v12.566q0 .3.044.598l5.448 37.185A4.125 4.125 0 0 0 9.573 64h15.398a4.125 4.125 0 0 0 4.125-4.127L29.09 41.37c0-.426-.066-.849-.195-1.254l-9.98-31.245A4.13 4.13 0 0 0 14.988 6z"
298 />
299 <path
300 fill={`url(#${gradientBId})`}
301 d="M59.876 0H25.748a4.13 4.13 0 0 0-3.8 2.52L6.151 39.943a4.1 4.1 0 0 0-.325 1.638l.15 18.329A4.125 4.125 0 0 0 10.101 64h17.666c.806 0 1.593-.236 2.266-.678l32.11-21.109A4.12 4.12 0 0 0 64 38.766V4.125A4.125 4.125 0 0 0 59.876 0"
302 />
303 <path fill="#000" d="M52 12H12v40h40z" />
304 <path
305 fill="#fff"
306 d="M33 44H17v3h16zM17 29.383h2.98v-9.775H17v-2.616h8.843v2.616h-2.98v9.775h2.98V32H17zM27.643 29.298h2.154a2.4 2.4 0 0 0 1.163-.279q.51-.279.788-.788.279-.51.279-1.163V16.992h2.926v10.28q0 1.35-.622 2.427a4.45 4.45 0 0 1-1.715 1.688q-1.092.612-2.454.611h-2.519z"
307 />
308 </svg>
309 );
310};
311
312export const PhpStormIcon: Icon = (props) => {
313 const [gradientAId, gradientBId] = useSvgGradientIds("phpstorm", 2);
314
315 return (
316 <svg {...props} viewBox="0 0 64 64" fill="none">
317 <defs>
318 <linearGradient
319 id={gradientAId}
320 x1="56.329"
321 x2="2.874"
322 y1="-.391"
323 y2="24.392"
324 gradientUnits="userSpaceOnUse"
325 >
326 <stop offset=".16" stopColor="#D249FC" />
327 <stop offset=".55" stopColor="#FF2D90" />
328 </linearGradient>
329 <linearGradient
330 id={gradientBId}
331 x1="4.067"
332 x2="62.664"
333 y1="4.326"
334 y2="62.923"
335 gradientUnits="userSpaceOnUse"
336 >
337 <stop offset=".3" stopColor="#FF2D90" />
338 <stop offset=".7" stopColor="#7256FF" />
339 </linearGradient>
340 </defs>
341 <path
342 fill="#D249FC"
343 d="M58 16.446V4.187A4.125 4.125 0 0 0 53.81.063L42.765.239A4.13 4.13 0 0 0 39.7 1.68L6.993 39.837c-.64.748-.993 1.7-.993 2.685v11.35a4.125 4.125 0 0 0 4.125 4.124h11.003c1.19 0 2.321-.514 3.105-1.409l32.746-37.425A4.12 4.12 0 0 0 58 16.446"
344 />
345 <path
346 fill={`url(#${gradientAId})`}
347 d="M58 14.988V4.125A4.125 4.125 0 0 0 53.875 0H41.309q-.3 0-.598.044L3.527 5.492A4.125 4.125 0 0 0 0 9.573v15.398a4.125 4.125 0 0 0 4.126 4.125l18.505-.005c.425 0 .848-.066 1.253-.195l31.246-9.98A4.13 4.13 0 0 0 58 14.988"
348 />
349 <path
350 fill={`url(#${gradientBId})`}
351 d="M64 59.878V25.75a4.13 4.13 0 0 0-2.52-3.8L24.057 6.153a4.1 4.1 0 0 0-1.638-.325l-18.329.15A4.124 4.124 0 0 0 0 10.103v17.665c0 .806.236 1.593.678 2.267l21.109 32.109a4.12 4.12 0 0 0 3.447 1.859h34.641A4.125 4.125 0 0 0 64 59.878"
352 />
353 <path fill="#000" d="M52 12H12v40h40z" />
354 <path
355 fill="#fff"
356 d="M33 44H17v3h16zM16.993 16.992h6.442q1.586 0 2.78.579 1.196.579 1.845 1.63.648 1.05.648 2.432c0 .922-.22 1.759-.659 2.466q-.66 1.062-1.87 1.646-1.212.584-2.83.584h-3.43V32h-2.927zm7.54 6.63q.553-.273.852-.782.3-.51.3-1.195c0-.685-.1-.842-.3-1.174q-.3-.5-.852-.772-.552-.273-1.291-.273h-3.323v4.47h3.323q.74 0 1.291-.273M32.572 31.664q-1.26-.59-1.972-1.65t-.735-2.444h2.937q0 .654.343 1.147t.954.772q.611.278 1.404.278c.53 0 .952-.083 1.335-.251q.572-.252.89-.702c.317-.45.315-.643.315-1.029q0-.718-.434-1.19-.435-.471-1.195-.654l-2.647-.59q-1.073-.234-1.866-.809a4 4 0 0 1-1.232-1.42q-.44-.846-.44-1.908 0-1.286.665-2.31.665-1.023 1.854-1.597 1.19-.573 2.702-.573c1.512 0 1.933.186 2.733.558q1.2.558 1.87 1.549t.681 2.277h-2.926q0-.546-.29-.98a1.9 1.9 0 0 0-.82-.676 2.9 2.9 0 0 0-1.216-.24q-.687 0-1.206.23a1.9 1.9 0 0 0-.81.643q-.29.412-.289.96 0 .621.402 1.028t1.099.579l2.551.557q1.104.226 1.967.852a4.45 4.45 0 0 1 1.345 1.544q.482.917.482 1.999 0 1.329-.701 2.385-.703 1.054-1.967 1.656-1.264.6-2.895.6-1.63 0-2.888-.59"
357 />
358 </svg>
359 );
360};
361
362export const PyCharmIcon: Icon = (props) => {
363 const [gradientAId, gradientBId] = useSvgGradientIds("pycharm", 2);
364
365 return (
366 <svg {...props} viewBox="0 0 64 64" fill="none">
367 <defs>
368 <linearGradient
369 id={gradientAId}
370 x1="7.671"
371 x2="61.126"
372 y1="64.393"
373 y2="39.609"
374 gradientUnits="userSpaceOnUse"
375 >
376 <stop offset=".1" stopColor="#00D886" />
377 <stop offset=".59" stopColor="#F0EB18" />
378 </linearGradient>
379 <linearGradient
380 id={gradientBId}
381 x1="59.933"
382 x2="1.337"
383 y1="59.676"
384 y2="1.08"
385 gradientUnits="userSpaceOnUse"
386 >
387 <stop offset=".3" stopColor="#F0EB18" />
388 <stop offset=".7" stopColor="#00C4F4" />
389 </linearGradient>
390 </defs>
391 <path
392 fill="#00D886"
393 d="M6 47.55v12.259a4.125 4.125 0 0 0 4.19 4.124l11.044-.176a4.13 4.13 0 0 0 3.066-1.44l32.707-38.158c.64-.748.993-1.7.993-2.685V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.834A4.12 4.12 0 0 0 6 47.55"
394 />
395 <path
396 fill={`url(#${gradientAId})`}
397 d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566q.3 0 .598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.13 4.13 0 0 0 6 49.015z"
398 />
399 <path
400 fill={`url(#${gradientBId})`}
401 d="M0 4.125v34.128c0 1.658.993 3.154 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.13 4.13 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125"
402 />
403 <path fill="#000" d="M52 12H12v40h40z" />
404 <path
405 fill="#fff"
406 d="M33 44H17v3h16zM16.993 16.992h6.442q1.586 0 2.78.579 1.196.579 1.845 1.63.648 1.05.648 2.432c0 .922-.22 1.759-.659 2.466q-.66 1.062-1.87 1.646-1.212.584-2.83.584h-3.43V32h-2.927zm7.54 6.63q.553-.273.852-.782.3-.51.3-1.195c0-.685-.1-.842-.3-1.174q-.3-.5-.852-.772-.552-.273-1.291-.273h-3.324v4.47h3.324q.74 0 1.291-.273M33.713 31.243a7.3 7.3 0 0 1-2.744-2.787q-.996-1.774-.996-3.961c0-2.187.332-2.778.996-3.96a7.3 7.3 0 0 1 2.744-2.787q1.748-1.013 3.902-1.014 1.823 0 3.344.675a6.86 6.86 0 0 1 2.535 1.892 6.44 6.44 0 0 1 1.356 2.793h-3.066a4.05 4.05 0 0 0-.895-1.431 4 4 0 0 0-1.43-.95 4.9 4.9 0 0 0-1.823-.332q-1.33 0-2.402.665a4.6 4.6 0 0 0-1.677 1.827q-.606 1.164-.606 2.62 0 1.459.606 2.621a4.6 4.6 0 0 0 1.677 1.828q1.072.664 2.402.664.986 0 1.822-.332a4.02 4.02 0 0 0 2.326-2.38h3.066a6.44 6.44 0 0 1-1.356 2.792 6.86 6.86 0 0 1-2.535 1.892q-1.522.675-3.344.675-2.154 0-3.902-1.013z"
407 />
408 </svg>
409 );
410};
411
412export const RiderIcon: Icon = (props) => {
413 const [gradientAId, gradientBId] = useSvgGradientIds("rider", 2);
414
415 return (
416 <svg {...props} viewBox="0 0 64 64" fill="none">
417 <defs>
418 <linearGradient
419 id={gradientAId}
420 x1="64.391"
421 x2="39.607"
422 y1="56.329"
423 y2="2.874"
424 gradientUnits="userSpaceOnUse"
425 >
426 <stop offset=".21" stopColor="#007DFE" />
427 <stop offset=".55" stopColor="#FFB700" />
428 </linearGradient>
429 <linearGradient
430 id={gradientBId}
431 x1="59.676"
432 x2="1.08"
433 y1="4.067"
434 y2="62.663"
435 gradientUnits="userSpaceOnUse"
436 >
437 <stop offset=".23" stopColor="#FFB700" />
438 <stop offset=".73" stopColor="#FF0A67" />
439 </linearGradient>
440 </defs>
441 <path
442 fill="#007DFE"
443 d="M47.55 58h12.258a4.125 4.125 0 0 0 4.124-4.19l-.176-11.044a4.12 4.12 0 0 0-1.44-3.066L24.158 6.993A4.13 4.13 0 0 0 21.474 6H10.125A4.125 4.125 0 0 0 6 10.125v11.003c0 1.19.514 2.321 1.409 3.105l37.425 32.746A4.12 4.12 0 0 0 47.55 58"
444 />
445 <path
446 fill={`url(#${gradientAId})`}
447 d="M49.013 58h10.862A4.125 4.125 0 0 0 64 53.875V41.309q0-.3-.044-.598L58.508 3.527A4.125 4.125 0 0 0 54.427 0H39.029a4.125 4.125 0 0 0-4.125 4.126l.005 18.505c0 .425.066.848.195 1.253l9.979 31.246a4.13 4.13 0 0 0 3.93 2.87"
448 />
449 <path
450 fill={`url(#${gradientBId})`}
451 d="M4.125 64h34.128a4.13 4.13 0 0 0 3.8-2.52L57.85 24.057c.219-.518.33-1.076.324-1.638l-.15-18.329A4.124 4.124 0 0 0 53.9 0H36.234c-.805 0-1.593.236-2.266.678L1.86 21.787A4.13 4.13 0 0 0 0 25.234v34.641A4.125 4.125 0 0 0 4.125 64"
452 />
453 <path fill="#000" d="M52 12H12v40h40z" />
454 <path
455 fill="#fff"
456 d="M33 44H17v3h16zM16.992 16.992h6.442q1.576 0 2.776.579t1.85 1.63.648 2.432c0 .922-.22 1.75-.66 2.46q-.66 1.068-1.875 1.651-1.217.584-2.825.584h-3.43v5.67h-2.926zm7.54 6.63q.553-.274.853-.783.3-.51.3-1.184c0-.45-.1-.852-.3-1.185q-.3-.498-.852-.772-.552-.273-1.292-.273h-3.323v4.47h3.323q.74 0 1.292-.273m-2.63 1.763h3.194L29.03 32h-3.355zM31.613 16.992h5.713q2.133 0 3.822.965a6.9 6.9 0 0 1 2.641 2.674q.954 1.71.954 3.864t-.953 3.865a6.9 6.9 0 0 1-2.642 2.674q-1.688.964-3.822.964h-5.713zm8.028 11.876q1.008-.6 1.555-1.72t.547-2.653q0-1.534-.547-2.653-.547-1.12-1.555-1.721-1.008-.6-2.347-.6h-2.755v9.947h2.755q1.34 0 2.347-.6"
457 />
458 </svg>
459 );
460};
461
462export const RubyMineIcon: Icon = (props) => {
463 const [gradientAId, gradientBId] = useSvgGradientIds("rubymine", 2);
464
465 return (
466 <svg {...props} viewBox="0 0 64 64" fill="none">
467 <defs>
468 <linearGradient
469 id={gradientAId}
470 x1="4.325"
471 x2="62.921"
472 y1="59.932"
473 y2="1.337"
474 gradientUnits="userSpaceOnUse"
475 >
476 <stop offset=".29" stopColor="#FF2358" />
477 <stop offset=".75" stopColor="#7256FF" />
478 </linearGradient>
479 <linearGradient
480 id={gradientBId}
481 x1="-.391"
482 x2="24.393"
483 y1="7.671"
484 y2="61.125"
485 gradientUnits="userSpaceOnUse"
486 >
487 <stop offset=".29" stopColor="#FF8100" />
488 <stop offset=".56" stopColor="#FF2358" />
489 </linearGradient>
490 </defs>
491 <path
492 fill={`url(#${gradientAId})`}
493 d="M59.875 0H25.748a4.13 4.13 0 0 0-3.8 2.52L6.151 39.942a4.1 4.1 0 0 0-.325 1.639l.15 18.328A4.125 4.125 0 0 0 10.101 64h17.666c.805 0 1.593-.235 2.266-.678l32.109-21.108A4.12 4.12 0 0 0 64 38.766V4.125A4.125 4.125 0 0 0 59.875 0"
494 />
495 <path
496 fill={`url(#${gradientBId})`}
497 d="M14.987 6H4.126A4.125 4.125 0 0 0 0 10.125v12.566q0 .3.044.598l5.448 37.184A4.125 4.125 0 0 0 9.572 64H24.97a4.125 4.125 0 0 0 4.125-4.126l-.004-18.504c0-.426-.067-.85-.196-1.254L18.917 8.87A4.13 4.13 0 0 0 14.987 6z"
498 />
499 <path
500 fill="#FF8100"
501 d="M16.45 6H4.19a4.125 4.125 0 0 0-4.124 4.19L0 21c.019 1.181.786 2.531 1.683 3.3l38.158 32.706c.748.641 1.7.993 2.684.993h11.35A4.125 4.125 0 0 0 58 53.875V42.872c0-1.189-.514-2.32-1.41-3.104L19.167 7.021A4.12 4.12 0 0 0 16.45 6"
502 />
503 <path fill="#000" d="M52 12H12v40h40z" />
504 <path
505 fill="#fff"
506 d="M33 44H17v3h16zM17.012 16.992h6.442q1.575 0 2.776.579t1.849 1.63.648 2.432c0 .922-.22 1.75-.66 2.46q-.658 1.068-1.875 1.651-1.216.584-2.824.584h-3.43v5.67h-2.926zm7.54 6.63q.552-.274.852-.783.3-.51.3-1.184c0-.45-.1-.852-.3-1.185q-.3-.498-.852-.772-.552-.273-1.292-.273h-3.323v4.47h3.323q.74 0 1.292-.273m-2.631 1.763h3.194L29.05 32h-3.355zM31.633 16.992h4.073l3.087 9.85.257 1.287.225-1.286 2.98-9.85h4.138v15.005h-2.894V21.29l.043-.782-3.494 11.49h-2.123l-3.451-11.415.043.707v10.708h-2.883V16.992z"
507 />
508 </svg>
509 );
510};
511
512export const RustRoverIcon: Icon = (props) => {
513 const [gradientAId, gradientBId] = useSvgGradientIds("rustrover", 2);
514
515 return (
516 <svg {...props} viewBox="0 0 64 64" fill="none">
517 <defs>
518 <linearGradient
519 id={gradientAId}
520 x1="7.671"
521 x2="61.125"
522 y1="64.393"
523 y2="39.609"
524 gradientUnits="userSpaceOnUse"
525 >
526 <stop offset=".08" stopColor="#00D886" />
527 <stop offset=".46" stopColor="#FFAB00" />
528 </linearGradient>
529 <linearGradient
530 id={gradientBId}
531 x1="59.932"
532 x2="1.336"
533 y1="59.676"
534 y2="1.08"
535 gradientUnits="userSpaceOnUse"
536 >
537 <stop offset=".19" stopColor="#FFAB00" />
538 <stop offset=".83" stopColor="#FF004C" />
539 </linearGradient>
540 </defs>
541 <path
542 fill="#00D886"
543 d="M6 47.55v12.258a4.125 4.125 0 0 0 4.19 4.124l11.044-.176a4.12 4.12 0 0 0 3.066-1.44l32.707-38.158c.64-.747.993-1.7.993-2.684V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.833A4.12 4.12 0 0 0 6 47.55"
544 />
545 <path
546 fill={`url(#${gradientAId})`}
547 d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566q.3 0 .598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.13 4.13 0 0 0 6 49.015z"
548 />
549 <path
550 fill={`url(#${gradientBId})`}
551 d="M0 4.125v34.128c0 1.658.993 3.154 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.13 4.13 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125"
552 />
553 <path fill="#000" d="M52 12H12v40h40z" />
554 <path
555 fill="#fff"
556 d="M33 44H17v3h16zM16.992 16.992h6.442q1.576 0 2.776.579t1.85 1.63.648 2.432c0 .922-.22 1.75-.66 2.46q-.66 1.068-1.875 1.651-1.217.584-2.825.584h-3.43v5.67h-2.926zm7.54 6.63q.553-.274.853-.783.3-.51.3-1.184c0-.45-.1-.852-.3-1.185q-.3-.498-.852-.772-.552-.273-1.292-.273h-3.323v4.47h3.323q.74 0 1.292-.273m-2.63 1.763h3.194L29.03 32h-3.355zM31.613 16.992h6.442q1.575 0 2.776.579t1.85 1.63.648 2.432c0 .922-.22 1.75-.66 2.46q-.659 1.068-1.875 1.651-1.217.584-2.824.584h-3.43v5.67h-2.927zm7.54 6.63q.553-.274.853-.783.3-.51.3-1.184c0-.45-.1-.852-.3-1.185q-.3-.498-.852-.772-.552-.273-1.292-.273h-3.323v4.47h3.323q.74 0 1.292-.273m-2.63 1.763h3.194L43.651 32h-3.355z"
557 />
558 </svg>
559 );
560};
561
562export const WebStormIcon: Icon = (props) => {
563 const [gradientAId, gradientBId] = useSvgGradientIds("webstorm", 2);
564
565 return (
566 <svg {...props} viewBox="0 0 64 64" fill="none">
567 <defs>
568 <linearGradient
569 id={gradientAId}
570 x1="7.671"
571 x2="61.126"
572 y1="64.392"
573 y2="39.609"
574 gradientUnits="userSpaceOnUse"
575 >
576 <stop offset=".22" stopColor="#F0EB18" />
577 <stop offset=".59" stopColor="#00C4F4" />
578 </linearGradient>
579 <linearGradient
580 id={gradientBId}
581 x1="59.932"
582 x2="1.337"
583 y1="59.676"
584 y2="1.079"
585 gradientUnits="userSpaceOnUse"
586 >
587 <stop offset=".19" stopColor="#00C4F4" />
588 <stop offset=".83" stopColor="#007DFE" />
589 </linearGradient>
590 </defs>
591 <path
592 fill="#F0EB18"
593 d="M6 47.55v12.258a4.125 4.125 0 0 0 4.19 4.124l11.044-.176a4.12 4.12 0 0 0 3.066-1.44l32.707-38.158c.64-.747.993-1.7.993-2.684V10.125A4.125 4.125 0 0 0 53.875 6H42.872c-1.19 0-2.321.514-3.105 1.409L7.021 44.833A4.12 4.12 0 0 0 6 47.55"
594 />
595 <path
596 fill={`url(#${gradientAId})`}
597 d="M6 49.015v10.862a4.125 4.125 0 0 0 4.125 4.125h12.566q.3 0 .598-.044l37.185-5.448A4.125 4.125 0 0 0 64 54.429V39.03a4.125 4.125 0 0 0-4.127-4.125l-18.504.005c-.426 0-.849.066-1.254.195L8.871 45.085A4.13 4.13 0 0 0 6 49.015z"
598 />
599 <path
600 fill={`url(#${gradientBId})`}
601 d="M0 4.125v34.128c0 1.658.993 3.154 2.52 3.8L39.943 57.85c.518.219 1.075.33 1.638.324l18.329-.15A4.125 4.125 0 0 0 64 53.9V36.234c0-.806-.236-1.593-.678-2.267L42.213 1.86A4.13 4.13 0 0 0 38.766 0H4.125A4.125 4.125 0 0 0 0 4.125"
602 />
603 <path fill="#000" d="M52 12H12v40h40z" />
604 <path
605 fill="#fff"
606 d="M33 44H17v3h16zM19.051 16.992l2.423 10.955 2.583-10.955h2.958l2.701 10.955 2.348-10.955h2.97l-3.645 15.006h-3.334l-2.53-10.9-2.561 10.9H19.64l-3.623-15.006zM38.662 31.664q-1.26-.59-1.972-1.65t-.735-2.444h2.937q0 .654.343 1.147t.954.772q.61.278 1.404.278c.53 0 .952-.083 1.335-.251q.573-.252.889-.702t.316-1.029q0-.718-.434-1.19-.435-.471-1.195-.654l-2.648-.59q-1.071-.234-1.865-.809a4 4 0 0 1-1.232-1.42q-.44-.846-.44-1.908 0-1.286.665-2.31.664-1.023 1.854-1.597 1.19-.573 2.701-.573c1.008 0 1.934.186 2.734.558q1.2.558 1.87 1.549t.68 2.277h-2.925q0-.546-.29-.98c-.29-.435-.466-.515-.82-.676a2.9 2.9 0 0 0-1.217-.24q-.686 0-1.205.23a1.9 1.9 0 0 0-.81.643q-.29.412-.289.96 0 .621.402 1.028t1.099.579l2.55.557q1.105.226 1.968.852a4.45 4.45 0 0 1 1.345 1.544 4.2 4.2 0 0 1 .482 1.999q0 1.329-.702 2.385-.702 1.054-1.966 1.656-1.266.6-2.894.6-1.63 0-2.889-.59"
607 />
608 </svg>
609 );
610};