@cyishere/react-uikit 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.
package/dist/index.js ADDED
@@ -0,0 +1,2351 @@
1
+ // src/components/Accordion/Accordion.tsx
2
+ import * as React2 from "react";
3
+
4
+ // src/utils/cn.ts
5
+ var cn = (...classes) => {
6
+ return classes.filter(Boolean).join(" ");
7
+ };
8
+
9
+ // src/utils/dev.ts
10
+ var nodeEnv = globalThis.process?.env?.NODE_ENV;
11
+ var hostname = globalThis.location?.hostname;
12
+ var isLocalDevHost = hostname === "localhost" || hostname === "127.0.0.1";
13
+ var isDev = nodeEnv === "development" || isLocalDevHost;
14
+
15
+ // src/components/UnstyledButton/UnstyledButton.tsx
16
+ import { jsx } from "react/jsx-runtime";
17
+ var UnstyledButton = (props) => {
18
+ return /* @__PURE__ */ jsx("button", { ...props, className: cn("ruk-unstyled-button", props.className) });
19
+ };
20
+ var UnstyledButton_default = UnstyledButton;
21
+
22
+ // src/components/Accordion/AccordionContext.ts
23
+ import * as React from "react";
24
+ var AccordionContext = React.createContext(null);
25
+ var useAccordionContext = () => {
26
+ const context = React.useContext(AccordionContext);
27
+ if (!context) {
28
+ throw new Error("Accordion components must be wrapped in <Accordion.Root>");
29
+ }
30
+ return context;
31
+ };
32
+ var AccordionItemContext = React.createContext(null);
33
+ var useAccordionItemContext = () => {
34
+ const context = React.useContext(AccordionItemContext);
35
+ if (!context) {
36
+ throw new Error("Accordion.Trigger and Accordion.Panel must be wrapped in <Accordion.Item>");
37
+ }
38
+ return context;
39
+ };
40
+
41
+ // src/components/Accordion/Icon.tsx
42
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
43
+ var Icon = () => {
44
+ return /* @__PURE__ */ jsx2("span", { className: "uk-icon uk-accordion-icon", children: /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "13", height: "13", viewBox: "0 0 13 13", children: [
45
+ /* @__PURE__ */ jsx2("path", { d: "M0 6h13v1H0z", className: "line-1", fill: "currentColor" }),
46
+ /* @__PURE__ */ jsx2("path", { d: "M6 0h1v13H6z", className: "line-2", fill: "currentColor" })
47
+ ] }) });
48
+ };
49
+ var Icon_default = Icon;
50
+
51
+ // src/components/Accordion/Accordion.tsx
52
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
53
+ var AccordionRoot = ({
54
+ className,
55
+ children,
56
+ multiple = false,
57
+ collapsible = true,
58
+ defaultOpen = [],
59
+ value,
60
+ onValueChange,
61
+ showIcon = false,
62
+ animation = false,
63
+ ...props
64
+ }) => {
65
+ const [uncontrolledItems, setUncontrolledItems] = React2.useState(
66
+ () => new Set(defaultOpen)
67
+ );
68
+ const baseId = "ruk-accordion-" + React2.useId().replace(/:/g, "");
69
+ const openItems = React2.useMemo(() => {
70
+ return value !== void 0 ? new Set(value) : uncontrolledItems;
71
+ }, [value, uncontrolledItems]);
72
+ const toggle = React2.useCallback(
73
+ (index) => {
74
+ const isOpen = openItems.has(index);
75
+ let next;
76
+ if (isOpen) {
77
+ if (!collapsible && openItems.size <= 1) {
78
+ return;
79
+ }
80
+ next = new Set(openItems);
81
+ next.delete(index);
82
+ } else {
83
+ if (multiple) {
84
+ next = new Set(openItems);
85
+ next.add(index);
86
+ } else {
87
+ next = /* @__PURE__ */ new Set([index]);
88
+ }
89
+ }
90
+ if (value === void 0) {
91
+ setUncontrolledItems(next);
92
+ }
93
+ onValueChange?.(Array.from(next));
94
+ },
95
+ [openItems, collapsible, multiple, value, onValueChange]
96
+ );
97
+ const contextValue = React2.useMemo(
98
+ () => ({
99
+ openItems,
100
+ toggle,
101
+ showIcon,
102
+ baseId,
103
+ animation
104
+ }),
105
+ [openItems, toggle, showIcon, baseId, animation]
106
+ );
107
+ return /* @__PURE__ */ jsx3(AccordionContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx3("ul", { ...props, className: cn("uk-accordion-default uk-accordion", className), children: React2.Children.map(children, (child, index) => {
108
+ if (!React2.isValidElement(child)) {
109
+ return child;
110
+ }
111
+ return /* @__PURE__ */ jsx3(AccordionItemContext.Provider, { value: { index }, children: child });
112
+ }) }) });
113
+ };
114
+ var AccordionItem = ({ children, className, ...props }) => {
115
+ const { openItems } = useAccordionContext();
116
+ const { index } = useAccordionItemContext();
117
+ const isOpen = openItems.has(index);
118
+ return /* @__PURE__ */ jsx3("li", { ...props, className: cn(isOpen && "uk-open", className), children });
119
+ };
120
+ var AccordionTrigger = ({
121
+ children,
122
+ className,
123
+ onClick,
124
+ ...props
125
+ }) => {
126
+ const { openItems, toggle, showIcon, baseId } = useAccordionContext();
127
+ const { index } = useAccordionItemContext();
128
+ const isOpen = openItems.has(index);
129
+ const triggerId = `${baseId}-trigger-${index}`;
130
+ const panelId = `${baseId}-panel-${index}`;
131
+ const handleClick = (event) => {
132
+ onClick?.(event);
133
+ if (event.defaultPrevented) {
134
+ return;
135
+ }
136
+ toggle(index);
137
+ };
138
+ return /* @__PURE__ */ jsxs2(
139
+ UnstyledButton_default,
140
+ {
141
+ ...props,
142
+ "aria-controls": panelId,
143
+ "aria-expanded": isOpen,
144
+ className: cn("uk-width-1-1 uk-accordion-title", "ruk-accordion-trigger", className),
145
+ id: triggerId,
146
+ onClick: handleClick,
147
+ children: [
148
+ /* @__PURE__ */ jsx3("span", { children }),
149
+ showIcon && /* @__PURE__ */ jsx3(Icon_default, {})
150
+ ]
151
+ }
152
+ );
153
+ };
154
+ var AccordionPanel = ({ children, className, ...props }) => {
155
+ const { openItems, baseId, animation } = useAccordionContext();
156
+ const { index } = useAccordionItemContext();
157
+ const isOpen = openItems.has(index);
158
+ const triggerId = `${baseId}-trigger-${index}`;
159
+ const panelId = `${baseId}-panel-${index}`;
160
+ const contentRef = React2.useRef(null);
161
+ const [height, setHeight] = React2.useState(isOpen ? "auto" : 0);
162
+ const [isHidden, setIsHidden] = React2.useState(!isOpen);
163
+ const isInitialMount = React2.useRef(true);
164
+ React2.useLayoutEffect(() => {
165
+ if (!animation) {
166
+ setHeight(isOpen ? "auto" : 0);
167
+ setIsHidden(!isOpen);
168
+ return;
169
+ }
170
+ if (isInitialMount.current) {
171
+ isInitialMount.current = false;
172
+ return;
173
+ }
174
+ if (!contentRef.current) return;
175
+ const content = contentRef.current;
176
+ if (isOpen) {
177
+ setIsHidden(false);
178
+ setHeight(0);
179
+ requestAnimationFrame(() => {
180
+ if (!contentRef.current) return;
181
+ const style = window.getComputedStyle(contentRef.current);
182
+ const marginTop = parseFloat(style.marginTop) || 0;
183
+ const marginBottom = parseFloat(style.marginBottom) || 0;
184
+ const targetHeight = contentRef.current.offsetHeight + marginTop + marginBottom;
185
+ setHeight(targetHeight);
186
+ });
187
+ } else {
188
+ const style = window.getComputedStyle(content);
189
+ const marginTop = parseFloat(style.marginTop) || 0;
190
+ const marginBottom = parseFloat(style.marginBottom) || 0;
191
+ const currentHeight = content.offsetHeight + marginTop + marginBottom;
192
+ setHeight(currentHeight);
193
+ requestAnimationFrame(() => {
194
+ requestAnimationFrame(() => {
195
+ setHeight(0);
196
+ });
197
+ });
198
+ }
199
+ }, [isOpen, animation]);
200
+ const handleTransitionEnd = (e) => {
201
+ if (!animation || e.target !== e.currentTarget) return;
202
+ if (isOpen) {
203
+ setHeight("auto");
204
+ } else {
205
+ setIsHidden(true);
206
+ }
207
+ };
208
+ if (!animation) {
209
+ return /* @__PURE__ */ jsx3(
210
+ "div",
211
+ {
212
+ ...props,
213
+ "aria-labelledby": triggerId,
214
+ className: cn("uk-accordion-content", className),
215
+ hidden: !isOpen,
216
+ id: panelId,
217
+ role: "region",
218
+ children
219
+ }
220
+ );
221
+ }
222
+ return /* @__PURE__ */ jsx3(
223
+ "div",
224
+ {
225
+ onTransitionEnd: handleTransitionEnd,
226
+ style: {
227
+ overflow: "hidden",
228
+ height: height === "auto" ? "auto" : `${height}px`,
229
+ transition: `height ${typeof animation === "object" && animation.duration || 200}ms ${typeof animation === "object" && animation.transition || "ease"}`
230
+ },
231
+ children: /* @__PURE__ */ jsx3(
232
+ "div",
233
+ {
234
+ ...props,
235
+ ref: contentRef,
236
+ "aria-labelledby": triggerId,
237
+ className: cn("uk-accordion-content", className),
238
+ hidden: isHidden,
239
+ id: panelId,
240
+ role: "region",
241
+ children
242
+ }
243
+ )
244
+ }
245
+ );
246
+ };
247
+ var Accordion = {
248
+ Root: AccordionRoot,
249
+ Item: AccordionItem,
250
+ Trigger: AccordionTrigger,
251
+ Panel: AccordionPanel
252
+ };
253
+
254
+ // src/components/Alert/Alert.tsx
255
+ import * as React4 from "react";
256
+ import UIkit from "uikit";
257
+
258
+ // src/components/Close/Close.tsx
259
+ import * as React3 from "react";
260
+ import { Slot } from "@radix-ui/react-slot";
261
+ import { jsx as jsx4 } from "react/jsx-runtime";
262
+ var CloseIcon = () => /* @__PURE__ */ jsx4(
263
+ "svg",
264
+ {
265
+ xmlns: "http://www.w3.org/2000/svg",
266
+ width: "14",
267
+ height: "14",
268
+ viewBox: "0 0 14 14",
269
+ "aria-hidden": "true",
270
+ children: /* @__PURE__ */ jsx4("path", { fill: "none", stroke: "currentColor", strokeWidth: "1.1", d: "m1 1 12 12M13 1 1 13" })
271
+ }
272
+ );
273
+ var CloseLargeIcon = () => /* @__PURE__ */ jsx4(
274
+ "svg",
275
+ {
276
+ xmlns: "http://www.w3.org/2000/svg",
277
+ width: "20",
278
+ height: "20",
279
+ viewBox: "0 0 20 20",
280
+ "aria-hidden": "true",
281
+ children: /* @__PURE__ */ jsx4("path", { fill: "none", stroke: "currentColor", strokeWidth: "1.4", d: "m1 1 18 18M19 1 1 19" })
282
+ }
283
+ );
284
+ var Close = ({
285
+ ref,
286
+ asChild = false,
287
+ className,
288
+ label = "Close",
289
+ large = false,
290
+ type,
291
+ children,
292
+ ...props
293
+ }) => {
294
+ const Comp = asChild ? Slot : "button";
295
+ const classes = cn("uk-icon", large ? "uk-close-large" : "uk-close", className);
296
+ const compProps = !asChild ? { type: type ?? "button", ...props } : props;
297
+ const icon = large ? /* @__PURE__ */ jsx4(CloseLargeIcon, {}) : /* @__PURE__ */ jsx4(CloseIcon, {});
298
+ return /* @__PURE__ */ jsx4(Comp, { ref, className: classes, "aria-label": label, ...compProps, children: asChild && React3.isValidElement(children) ? React3.cloneElement(children, {}, icon) : icon });
299
+ };
300
+
301
+ // src/components/Alert/Alert.tsx
302
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
303
+ var Alert = ({
304
+ animation = true,
305
+ className,
306
+ children,
307
+ duration = 150,
308
+ selClose = ".uk-alert-close",
309
+ showCloseButton = true,
310
+ onBeforeHide,
311
+ onHide,
312
+ ...props
313
+ }) => {
314
+ const ref = React4.useRef(null);
315
+ const _alertRef = React4.useRef(null);
316
+ const handleClose = () => {
317
+ if (_alertRef.current) {
318
+ _alertRef.current.close();
319
+ }
320
+ };
321
+ React4.useEffect(() => {
322
+ if (ref.current) {
323
+ const el = ref.current;
324
+ _alertRef.current = UIkit.alert(el, {
325
+ animation,
326
+ // Workaround: UIkit Alert ignores `animation: false`, so we force duration to 0 to simulate it.
327
+ // TODO: update this when UIkit fixes this bug.
328
+ duration: animation ? duration : 0,
329
+ selClose
330
+ });
331
+ }
332
+ }, [animation, duration, selClose]);
333
+ React4.useEffect(() => {
334
+ const el = ref.current;
335
+ if (!el) return;
336
+ const handleBeforeHide = (e) => onBeforeHide?.(e);
337
+ const handleHide = (e) => onHide?.(e);
338
+ el.addEventListener("beforehide", handleBeforeHide);
339
+ el.addEventListener("hide", handleHide);
340
+ return () => {
341
+ el.removeEventListener("beforehide", handleBeforeHide);
342
+ el.removeEventListener("hide", handleHide);
343
+ };
344
+ }, [onBeforeHide, onHide]);
345
+ return /* @__PURE__ */ jsxs3("div", { ref, className: cn("uk-alert", className), ...props, children: [
346
+ children,
347
+ showCloseButton && /* @__PURE__ */ jsx5(Close, { className: "uk-alert-close", label: "Close alert", onClick: handleClose })
348
+ ] });
349
+ };
350
+
351
+ // src/components/Grid/Grid.tsx
352
+ import * as React8 from "react";
353
+ import UIkit2 from "uikit";
354
+
355
+ // src/hooks/useControllableState.ts
356
+ import * as React5 from "react";
357
+ var useControllableState = ({
358
+ prop,
359
+ defaultProp,
360
+ onChange
361
+ }) => {
362
+ const [uncontrolledProp, setUncontrolledProp] = React5.useState(defaultProp);
363
+ const isControlled = prop !== void 0;
364
+ const value = isControlled ? prop : uncontrolledProp;
365
+ const onChangeRef = React5.useRef(onChange);
366
+ const isFirstMount = React5.useRef(true);
367
+ React5.useEffect(() => {
368
+ onChangeRef.current = onChange;
369
+ }, [onChange]);
370
+ const setValue = React5.useCallback(
371
+ (nextValue) => {
372
+ if (isControlled) {
373
+ const setter = nextValue;
374
+ const newValue = typeof nextValue === "function" ? setter(prop) : nextValue;
375
+ if (newValue !== prop) onChangeRef.current?.(newValue);
376
+ } else {
377
+ setUncontrolledProp(nextValue);
378
+ }
379
+ },
380
+ [isControlled, prop]
381
+ );
382
+ React5.useEffect(() => {
383
+ if (isFirstMount.current) {
384
+ isFirstMount.current = false;
385
+ return;
386
+ }
387
+ if (!isControlled && uncontrolledProp !== void 0) {
388
+ onChangeRef.current?.(uncontrolledProp);
389
+ }
390
+ }, [isControlled, uncontrolledProp]);
391
+ return [value, setValue];
392
+ };
393
+
394
+ // src/hooks/useIsomorphicLayoutEffect.ts
395
+ import * as React6 from "react";
396
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React6.useLayoutEffect : React6.useEffect;
397
+
398
+ // src/hooks/useGridRowClasses.ts
399
+ var getOffset = (element, useAbsoluteOffset = false) => {
400
+ let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element;
401
+ if (useAbsoluteOffset) {
402
+ const rect = element.getBoundingClientRect();
403
+ offsetTop = rect.top + window.scrollY;
404
+ offsetLeft = rect.left + window.scrollX;
405
+ }
406
+ return {
407
+ top: offsetTop,
408
+ left: offsetLeft,
409
+ bottom: offsetTop + offsetHeight,
410
+ right: offsetLeft + offsetWidth
411
+ };
412
+ };
413
+ var getRows = (elements) => {
414
+ const sortedInRows = [[]];
415
+ const withOffset = elements.some(
416
+ (el, i) => i && elements[i - 1].offsetParent !== el.offsetParent
417
+ );
418
+ for (const el of elements) {
419
+ const currentElement = el;
420
+ if (currentElement.offsetWidth === 0 && currentElement.offsetHeight === 0) {
421
+ continue;
422
+ }
423
+ const currentElementOffset = getOffset(currentElement, withOffset);
424
+ for (let i = sortedInRows.length - 1; i >= 0; i--) {
425
+ const currentRow = sortedInRows[i];
426
+ if (!currentRow[0]) {
427
+ currentRow.push(el);
428
+ break;
429
+ }
430
+ const currentRowFirstElementOffset = getOffset(currentRow[0], withOffset);
431
+ if (currentElementOffset.top >= currentRowFirstElementOffset.bottom - 1 && currentElementOffset.top !== currentRowFirstElementOffset.top) {
432
+ sortedInRows.push([el]);
433
+ break;
434
+ }
435
+ if (currentElementOffset.bottom - 1 > currentRowFirstElementOffset.top || currentElementOffset.top === currentRowFirstElementOffset.top) {
436
+ let j = currentRow.length - 1;
437
+ for (; j >= 0; j--) {
438
+ const rowItemOffset = getOffset(currentRow[j], withOffset);
439
+ if (currentElementOffset.left >= rowItemOffset.left) {
440
+ break;
441
+ }
442
+ }
443
+ currentRow.splice(j + 1, 0, el);
444
+ break;
445
+ }
446
+ if (i === 0) {
447
+ sortedInRows.unshift([el]);
448
+ break;
449
+ }
450
+ }
451
+ }
452
+ return sortedInRows;
453
+ };
454
+ var useGridRowClasses = (ref, skip = false, marginClass = "uk-grid-margin", firstColumnClass = "uk-first-column") => {
455
+ useIsomorphicLayoutEffect(() => {
456
+ const container = ref.current;
457
+ if (!container || skip) return;
458
+ function update() {
459
+ if (!container) return;
460
+ const children = Array.from(container.children);
461
+ const rows = getRows(children);
462
+ for (const row of rows) {
463
+ for (const child of row) {
464
+ const isFirstRow = rows[0] === row;
465
+ const isFirstColumn = row[0] === child;
466
+ child.classList.toggle(marginClass, !isFirstRow);
467
+ child.classList.toggle(firstColumnClass, isFirstColumn);
468
+ }
469
+ }
470
+ }
471
+ update();
472
+ const targets = [container, ...Array.from(container.children)];
473
+ const resizeObs = new ResizeObserver(update);
474
+ for (const target of targets) {
475
+ resizeObs.observe(target);
476
+ }
477
+ const mutationObs = new MutationObserver(() => {
478
+ resizeObs.disconnect();
479
+ const newTargets = [container, ...Array.from(container.children)];
480
+ for (const target of newTargets) {
481
+ resizeObs.observe(target);
482
+ }
483
+ update();
484
+ });
485
+ mutationObs.observe(container, { childList: true });
486
+ return () => {
487
+ resizeObs.disconnect();
488
+ mutationObs.disconnect();
489
+ for (const child of Array.from(container.children)) {
490
+ child.classList.remove(marginClass, firstColumnClass);
491
+ }
492
+ };
493
+ }, [ref, skip, marginClass, firstColumnClass]);
494
+ };
495
+
496
+ // src/hooks/useSwipe.ts
497
+ import * as React7 from "react";
498
+ var useSwipe = (ref, { onSwipeLeft, onSwipeRight, threshold = 100, enabled = true }) => {
499
+ React7.useEffect(() => {
500
+ const element = ref.current;
501
+ if (!enabled || !element) return;
502
+ let startX = null;
503
+ let startY = null;
504
+ const onPointerDown = (e) => {
505
+ if (e.pointerType !== "touch") return;
506
+ startX = e.clientX;
507
+ startY = e.clientY;
508
+ };
509
+ const handlePointerEnd = (e) => {
510
+ if (startX === null || startY === null || e.pointerType !== "touch") return;
511
+ const deltaX = e.clientX - startX;
512
+ const deltaY = e.clientY - startY;
513
+ if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > threshold) {
514
+ if (deltaX > 0) {
515
+ onSwipeRight?.();
516
+ } else {
517
+ onSwipeLeft?.();
518
+ }
519
+ }
520
+ startX = null;
521
+ startY = null;
522
+ };
523
+ const handleScroll = () => {
524
+ startX = null;
525
+ startY = null;
526
+ };
527
+ element.addEventListener("pointerdown", onPointerDown, { passive: true });
528
+ window.addEventListener("pointerup", handlePointerEnd);
529
+ window.addEventListener("pointercancel", handlePointerEnd);
530
+ window.addEventListener("scroll", handleScroll, { passive: true, capture: true });
531
+ return () => {
532
+ element.removeEventListener("pointerdown", onPointerDown);
533
+ window.removeEventListener("pointerup", handlePointerEnd);
534
+ window.removeEventListener("pointercancel", handlePointerEnd);
535
+ window.removeEventListener("scroll", handleScroll, { capture: true });
536
+ };
537
+ }, [ref, onSwipeLeft, onSwipeRight, threshold, enabled]);
538
+ };
539
+
540
+ // src/components/Grid/Grid.tsx
541
+ import { jsx as jsx6 } from "react/jsx-runtime";
542
+ var VALID_GRID_ELEMENTS = /* @__PURE__ */ new Set([
543
+ "div",
544
+ "ul",
545
+ "ol",
546
+ "section",
547
+ "article",
548
+ "main",
549
+ "aside",
550
+ "nav"
551
+ ]);
552
+ var Grid = ({
553
+ as: Comp = "div",
554
+ className,
555
+ children,
556
+ masonry,
557
+ matchHeight,
558
+ matchRow = true,
559
+ parallax,
560
+ parallaxStart,
561
+ parallaxEnd,
562
+ parallaxJustify,
563
+ ...props
564
+ }) => {
565
+ const ref = React8.useRef(null);
566
+ if (isDev && typeof Comp === "string" && !VALID_GRID_ELEMENTS.has(Comp)) {
567
+ console.warn(
568
+ `[react-uikit] Grid: "${Comp}" is not a recommended element for Grid. Use one of: ${[...VALID_GRID_ELEMENTS].join(", ")}.`
569
+ );
570
+ }
571
+ const needsUikitGrid = !!(masonry || parallax || parallaxJustify);
572
+ useGridRowClasses(ref, needsUikitGrid);
573
+ useIsomorphicLayoutEffect(() => {
574
+ if (!needsUikitGrid || !ref.current) return;
575
+ const instance = UIkit2.grid(ref.current, {
576
+ ...masonry && { masonry },
577
+ ...parallax != null && { parallax },
578
+ ...parallaxStart != null && { parallaxStart },
579
+ ...parallaxEnd != null && { parallaxEnd },
580
+ ...parallaxJustify != null && { parallaxJustify }
581
+ });
582
+ return () => {
583
+ instance.$destroy();
584
+ };
585
+ }, [needsUikitGrid, masonry, parallax, parallaxStart, parallaxEnd, parallaxJustify]);
586
+ useIsomorphicLayoutEffect(() => {
587
+ if (!matchHeight || !ref.current) return;
588
+ const target = typeof matchHeight === "string" ? matchHeight : "> *";
589
+ const instance = UIkit2.heightMatch(ref.current, { target, row: matchRow });
590
+ return () => {
591
+ instance.$destroy();
592
+ };
593
+ }, [matchHeight, matchRow]);
594
+ return /* @__PURE__ */ jsx6(Comp, { ref, className: cn("uk-grid", className), ...props, children });
595
+ };
596
+
597
+ // src/components/Icon/registry.ts
598
+ var registry = {
599
+ home: {
600
+ category: "app",
601
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
602
+ <polygon points="18.65 11.35 10 2.71 1.35 11.35 0.65 10.65 10 1.29 19.35 10.65" />
603
+ <polygon points="15 4 18 4 18 7 17 7 17 5 15 5" />
604
+ <polygon points="3 11 4 11 4 18 7 18 7 12 12 12 12 18 16 18 16 11 17 11 17 19 11 19 11 13 8 13 8 19 3 19" />
605
+ </svg>`
606
+ },
607
+ "sign-in": {
608
+ category: "app",
609
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
610
+ <polygon points="7 2 17 2 17 17 7 17 7 16 16 16 16 3 7 3 7 2" />
611
+ <line stroke="#000" x1="3" y1="9.5" x2="12" y2="9.5" />
612
+ <polyline fill="none" stroke="#000" points="9.2 6.33 12.37 9.5 9.2 12.67" />
613
+ </svg>`
614
+ },
615
+ "sign-out": {
616
+ category: "app",
617
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
618
+ <polygon points="13 2 3 2 3 17 13 17 13 16 4 16 4 3 13 3 13 2" />
619
+ <line stroke="#000" x1="7.96" y1="9.49" x2="16.96" y2="9.49" />
620
+ <polyline fill="none" stroke="#000" points="14.17 6.31 17.35 9.48 14.17 12.66" />
621
+ </svg>`
622
+ },
623
+ user: {
624
+ category: "app",
625
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
626
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.9" cy="6.4" r="4.4" />
627
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M1.5,19 C2.3,14.5 5.8,11.2 10,11.2 C14.2,11.2 17.7,14.6 18.5,19.2" />
628
+ </svg>`
629
+ },
630
+ users: {
631
+ category: "app",
632
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
633
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="7.7" cy="8.6" r="3.5" />
634
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M1,18.1 C1.7,14.6 4.4,12.1 7.6,12.1 C10.9,12.1 13.7,14.8 14.3,18.3" />
635
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M11.4,4 C12.8,2.4 15.4,2.8 16.3,4.7 C17.2,6.6 15.7,8.9 13.6,8.9 C16.5,8.9 18.8,11.3 19.2,14.1" />
636
+ </svg>`
637
+ },
638
+ lock: {
639
+ category: "app",
640
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
641
+ <rect fill="none" stroke="#000" height="10" width="13" y="8.5" x="3.5" />
642
+ <path fill="none" stroke="#000" d="M6.5,8 L6.5,4.88 C6.5,3.01 8.07,1.5 10,1.5 C11.93,1.5 13.5,3.01 13.5,4.88 L13.5,8" />
643
+ </svg>`
644
+ },
645
+ unlock: {
646
+ category: "app",
647
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
648
+ <rect fill="none" stroke="#000" x="3.5" y="8.5" width="13" height="10" />
649
+ <path fill="none" stroke="#000" d="M6.5,8.5 L6.5,4.9 C6.5,3 8.1,1.5 10,1.5 C11.9,1.5 13.5,3 13.5,4.9" />
650
+ </svg>`
651
+ },
652
+ settings: {
653
+ category: "app",
654
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
655
+ <ellipse fill="none" stroke="#000" cx="6.11" cy="3.55" rx="2.11" ry="2.15" />
656
+ <ellipse fill="none" stroke="#000" cx="6.11" cy="15.55" rx="2.11" ry="2.15" />
657
+ <circle fill="none" stroke="#000" cx="13.15" cy="9.55" r="2.15" />
658
+ <rect x="1" y="3" width="3" height="1" />
659
+ <rect x="10" y="3" width="8" height="1" />
660
+ <rect x="1" y="9" width="8" height="1" />
661
+ <rect x="15" y="9" width="3" height="1" />
662
+ <rect x="1" y="15" width="3" height="1" />
663
+ <rect x="10" y="15" width="8" height="1" />
664
+ </svg>`
665
+ },
666
+ cog: {
667
+ category: "app",
668
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
669
+ <circle fill="none" stroke="#000" cx="9.997" cy="10" r="3.31" />
670
+ <path fill="none" stroke="#000" d="M18.488,12.285 L16.205,16.237 C15.322,15.496 14.185,15.281 13.303,15.791 C12.428,16.289 12.047,17.373 12.246,18.5 L7.735,18.5 C7.938,17.374 7.553,16.299 6.684,15.791 C5.801,15.27 4.655,15.492 3.773,16.237 L1.5,12.285 C2.573,11.871 3.317,10.999 3.317,9.991 C3.305,8.98 2.573,8.121 1.5,7.716 L3.765,3.784 C4.645,4.516 5.794,4.738 6.687,4.232 C7.555,3.722 7.939,2.637 7.735,1.5 L12.263,1.5 C12.072,2.637 12.441,3.71 13.314,4.22 C14.206,4.73 15.343,4.516 16.225,3.794 L18.487,7.714 C17.404,8.117 16.661,8.988 16.67,10.009 C16.672,11.018 17.415,11.88 18.488,12.285 L18.488,12.285 Z" />
671
+ </svg>`
672
+ },
673
+ nut: {
674
+ category: "app",
675
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
676
+ <polygon fill="none" stroke="#000" points="2.5,5.7 10,1.3 17.5,5.7 17.5,14.3 10,18.7 2.5,14.3" />
677
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="3.5" />
678
+ </svg>`
679
+ },
680
+ comment: {
681
+ category: "app",
682
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
683
+ <path d="M6,18.71 L6,14 L1,14 L1,1 L19,1 L19,14 L10.71,14 L6,18.71 L6,18.71 Z M2,13 L7,13 L7,16.29 L10.29,13 L18,13 L18,2 L2,2 L2,13 L2,13 Z" />
684
+ </svg>`
685
+ },
686
+ commenting: {
687
+ category: "app",
688
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
689
+ <polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5" />
690
+ <circle cx="10" cy="8" r="1" />
691
+ <circle cx="6" cy="8" r="1" />
692
+ <circle cx="14" cy="8" r="1" />
693
+ </svg>`
694
+ },
695
+ comments: {
696
+ category: "app",
697
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
698
+ <polyline fill="none" stroke="#000" points="2 0.5 19.5 0.5 19.5 13" />
699
+ <path d="M5,19.71 L5,15 L0,15 L0,2 L18,2 L18,15 L9.71,15 L5,19.71 L5,19.71 L5,19.71 Z M1,14 L6,14 L6,17.29 L9.29,14 L17,14 L17,3 L1,3 L1,14 L1,14 L1,14 Z" />
700
+ </svg>`
701
+ },
702
+ hashtag: {
703
+ category: "app",
704
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
705
+ <path d="M15.431,8 L15.661,7 L12.911,7 L13.831,3 L12.901,3 L11.98,7 L9.29,7 L10.21,3 L9.281,3 L8.361,7 L5.23,7 L5,8 L8.13,8 L7.21,12 L4.23,12 L4,13 L6.98,13 L6.061,17 L6.991,17 L7.911,13 L10.601,13 L9.681,17 L10.611,17 L11.531,13 L14.431,13 L14.661,12 L11.76,12 L12.681,8 L15.431,8 Z M10.831,12 L8.141,12 L9.061,8 L11.75,8 L10.831,12 Z" />
706
+ </svg>`
707
+ },
708
+ tag: {
709
+ category: "app",
710
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
711
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M17.5,3.71 L17.5,7.72 C17.5,7.96 17.4,8.2 17.21,8.39 L8.39,17.2 C7.99,17.6 7.33,17.6 6.93,17.2 L2.8,13.07 C2.4,12.67 2.4,12.01 2.8,11.61 L11.61,2.8 C11.81,2.6 12.08,2.5 12.34,2.5 L16.19,2.5 C16.52,2.5 16.86,2.63 17.11,2.88 C17.35,3.11 17.48,3.4 17.5,3.71 L17.5,3.71 Z" />
712
+ <circle cx="14" cy="6" r="1" />
713
+ </svg>`
714
+ },
715
+ cart: {
716
+ category: "app",
717
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
718
+ <circle cx="7.3" cy="17.3" r="1.4" />
719
+ <circle cx="13.3" cy="17.3" r="1.4" />
720
+ <polyline fill="none" stroke="#000" points="0 2 3.2 4 5.3 12.5 16 12.5 18 6.5 8 6.5" />
721
+ </svg>`
722
+ },
723
+ bag: {
724
+ category: "app",
725
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
726
+ <path fill="none" stroke="#000" d="M7.5,7.5V4A2.48,2.48,0,0,1,10,1.5,2.54,2.54,0,0,1,12.5,4V7.5" />
727
+ <polygon fill="none" stroke="#000" points="16.5 7.5 3.5 7.5 2.5 18.5 17.5 18.5 16.5 7.5" />
728
+ </svg>`
729
+ },
730
+ "credit-card": {
731
+ category: "app",
732
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
733
+ <rect fill="none" stroke="#000" x="1.5" y="4.5" width="17" height="12" />
734
+ <rect x="1" y="7" width="18" height="3" />
735
+ </svg>`
736
+ },
737
+ mail: {
738
+ category: "app",
739
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
740
+ <polyline fill="none" stroke="#000" points="1.4,6.5 10,11 18.6,6.5" />
741
+ <path d="M 1,4 1,16 19,16 19,4 1,4 Z M 18,15 2,15 2,5 18,5 18,15 Z" />
742
+ </svg>`
743
+ },
744
+ receiver: {
745
+ category: "app",
746
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
747
+ <path fill="none" stroke="#000" stroke-width="1.01" d="M6.189,13.611C8.134,15.525 11.097,18.239 13.867,18.257C16.47,18.275 18.2,16.241 18.2,16.241L14.509,12.551L11.539,13.639L6.189,8.29L7.313,5.355L3.76,1.8C3.76,1.8 1.732,3.537 1.7,6.092C1.667,8.809 4.347,11.738 6.189,13.611" />
748
+ </svg>`
749
+ },
750
+ print: {
751
+ category: "app",
752
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
753
+ <polyline fill="none" stroke="#000" points="4.5 13.5 1.5 13.5 1.5 6.5 18.5 6.5 18.5 13.5 15.5 13.5" />
754
+ <polyline fill="none" stroke="#000" points="15.5 6.5 15.5 2.5 4.5 2.5 4.5 6.5" />
755
+ <rect fill="none" stroke="#000" width="11" height="6" x="4.5" y="11.5" />
756
+ <rect width="8" height="1" x="6" y="13" />
757
+ <rect width="8" height="1" x="6" y="15" />
758
+ </svg>`
759
+ },
760
+ search: {
761
+ category: "app",
762
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
763
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9" cy="9" r="7" />
764
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M14,14 L18,18 L14,14 Z" />
765
+ </svg>`
766
+ },
767
+ location: {
768
+ category: "app",
769
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
770
+ <path fill="none" stroke="#000" stroke-width="1.01" d="M10,0.5 C6.41,0.5 3.5,3.39 3.5,6.98 C3.5,11.83 10,19 10,19 C10,19 16.5,11.83 16.5,6.98 C16.5,3.39 13.59,0.5 10,0.5 L10,0.5 Z" />
771
+ <circle fill="none" stroke="#000" cx="10" cy="6.8" r="2.3" />
772
+ </svg>`
773
+ },
774
+ bookmark: {
775
+ category: "app",
776
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
777
+ <polygon fill="none" stroke="#000" points="5.5 1.5 15.5 1.5 15.5 17.5 10.5 12.5 5.5 17.5" />
778
+ </svg>`
779
+ },
780
+ code: {
781
+ category: "app",
782
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
783
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="13,4 19,10 13,16" />
784
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="7,4 1,10 7,16" />
785
+ </svg>`
786
+ },
787
+ "paint-bucket": {
788
+ category: "app",
789
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
790
+ <path fill="none" stroke="#000" stroke-width="1.1" d="m6.42,2.16l5.28,5.28" />
791
+ <path d="m18.49,11.83s1.51,2.06,1.51,3.36c0,.92-.76,1.64-1.51,1.64h0c-.75,0-1.49-.72-1.49-1.64,0-1.3,1.49-3.36,1.49-3.36h0Z" />
792
+ <line fill="none" stroke="#000" x1="1.26" y1="10.5" x2="16" y2="10.5" />
793
+ <polygon fill="none" stroke="#000" stroke-width="1.1" points="10.2 1.55 17.6 8.93 8.08 18.45 .7 11.07 10.2 1.55" />
794
+ </svg>`
795
+ },
796
+ camera: {
797
+ category: "app",
798
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
799
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10.8" r="3.8" />
800
+ <path fill="none" stroke="#000" d="M1,4.5 C0.7,4.5 0.5,4.7 0.5,5 L0.5,17 C0.5,17.3 0.7,17.5 1,17.5 L19,17.5 C19.3,17.5 19.5,17.3 19.5,17 L19.5,5 C19.5,4.7 19.3,4.5 19,4.5 L13.5,4.5 L13.5,2.9 C13.5,2.6 13.3,2.5 13,2.5 L7,2.5 C6.7,2.5 6.5,2.6 6.5,2.9 L6.5,4.5 L1,4.5 L1,4.5 Z" />
801
+ </svg>`
802
+ },
803
+ "video-camera": {
804
+ category: "app",
805
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
806
+ <polygon fill="none" stroke="#000" points="19.5 5.9 19.5 14.1 14.5 10.4 14.5 15.5 .5 15.5 .5 4.5 14.5 4.5 14.5 9.6 19.5 5.9" />
807
+ </svg>`
808
+ },
809
+ bell: {
810
+ category: "app",
811
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
812
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M17,15.5 L3,15.5 C2.99,14.61 3.79,13.34 4.1,12.51 C4.58,11.3 4.72,10.35 5.19,7.01 C5.54,4.53 5.89,3.2 7.28,2.16 C8.13,1.56 9.37,1.5 9.81,1.5 L9.96,1.5 C9.96,1.5 11.62,1.41 12.67,2.17 C14.08,3.2 14.42,4.54 14.77,7.02 C15.26,10.35 15.4,11.31 15.87,12.52 C16.2,13.34 17.01,14.61 17,15.5 L17,15.5 Z" />
813
+ <path fill="none" stroke="#000" d="M12.39,16 C12.39,17.37 11.35,18.43 9.91,18.43 C8.48,18.43 7.42,17.37 7.42,16" />
814
+ </svg>`
815
+ },
816
+ microphone: {
817
+ category: "app",
818
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
819
+ <line fill="none" stroke="#000" x1="10" x2="10" y1="16.44" y2="18.5" />
820
+ <line fill="none" stroke="#000" x1="7" x2="13" y1="18.5" y2="18.5" />
821
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M13.5 4.89v5.87a3.5 3.5 0 0 1-7 0V4.89a3.5 3.5 0 0 1 7 0z" />
822
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M15.5 10.36V11a5.5 5.5 0 0 1-11 0v-.6" />
823
+ </svg>`
824
+ },
825
+ bolt: {
826
+ category: "app",
827
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
828
+ <path d="M4.74,20 L7.73,12 L3,12 L15.43,1 L12.32,9 L17.02,9 L4.74,20 L4.74,20 L4.74,20 Z M9.18,11 L7.1,16.39 L14.47,10 L10.86,10 L12.99,4.67 L5.61,11 L9.18,11 L9.18,11 L9.18,11 Z" />
829
+ </svg>`
830
+ },
831
+ star: {
832
+ category: "app",
833
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
834
+ <polygon fill="none" stroke="#000" stroke-width="1.01" points="10 2 12.63 7.27 18.5 8.12 14.25 12.22 15.25 18 10 15.27 4.75 18 5.75 12.22 1.5 8.12 7.37 7.27" />
835
+ </svg>`
836
+ },
837
+ heart: {
838
+ category: "app",
839
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
840
+ <path fill="none" stroke="#000" stroke-width="1.03" d="M10,4 C10,4 8.1,2 5.74,2 C3.38,2 1,3.55 1,6.73 C1,8.84 2.67,10.44 2.67,10.44 L10,18 L17.33,10.44 C17.33,10.44 19,8.84 19,6.73 C19,3.55 16.62,2 14.26,2 C11.9,2 10,4 10,4 L10,4 Z" />
841
+ </svg>`
842
+ },
843
+ happy: {
844
+ category: "app",
845
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
846
+ <circle cx="13" cy="7" r="1" />
847
+ <circle cx="7" cy="7" r="1" />
848
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="8.5" />
849
+ <path fill="none" stroke="#000" d="M14.6,11.4 C13.9,13.3 12.1,14.5 10,14.5 C7.9,14.5 6.1,13.3 5.4,11.4" />
850
+ </svg>`
851
+ },
852
+ lifesaver: {
853
+ category: "app",
854
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
855
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="9" />
856
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="5" />
857
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="5.17" y1="2.39" x2="8.11" y2="5.33" />
858
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="5.33" y1="8.11" x2="2.39" y2="5.17" />
859
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="14.83" y1="17.61" x2="11.89" y2="14.67" />
860
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="14.67" y1="11.89" x2="17.61" y2="14.83" />
861
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="17.61" y1="5.17" x2="14.67" y2="8.11" />
862
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="11.89" y1="5.33" x2="14.83" y2="2.39" />
863
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="8.11" y1="14.67" x2="5.17" y2="17.61" />
864
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="2.39" y1="14.83" x2="5.33" y2="11.89" />
865
+ </svg>`
866
+ },
867
+ rss: {
868
+ category: "app",
869
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
870
+ <circle cx="3.12" cy="16.8" r="1.85" />
871
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M1.5,8.2 C1.78,8.18 2.06,8.16 2.35,8.16 C7.57,8.16 11.81,12.37 11.81,17.57 C11.81,17.89 11.79,18.19 11.76,18.5" />
872
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M1.5,2.52 C1.78,2.51 2.06,2.5 2.35,2.5 C10.72,2.5 17.5,9.24 17.5,17.57 C17.5,17.89 17.49,18.19 17.47,18.5" />
873
+ </svg>`
874
+ },
875
+ social: {
876
+ category: "app",
877
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
878
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="13.4" y1="14" x2="6.3" y2="10.7" />
879
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="13.5" y1="5.5" x2="6.5" y2="8.8" />
880
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="15.5" cy="4.6" r="2.3" />
881
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="15.5" cy="14.8" r="2.3" />
882
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="4.5" cy="9.8" r="2.3" />
883
+ </svg>`
884
+ },
885
+ "git-branch": {
886
+ category: "app",
887
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
888
+ <path fill="none" stroke="#000" d="m13.5,8c0,2.41-1.57,2.87-3.44,3.25-1.47.29-3.56.81-3.56,3.75V5" />
889
+ <circle fill="none" stroke="#000" cx="6.5" cy="3" r="1.79" />
890
+ <circle fill="none" stroke="#000" cx="13.5" cy="6" r="1.79" />
891
+ <circle fill="none" stroke="#000" cx="6.5" cy="17" r="1.79" />
892
+ </svg>`
893
+ },
894
+ "git-fork": {
895
+ category: "app",
896
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
897
+ <circle fill="none" stroke="#000" cx="6" cy="3" r="1.79" />
898
+ <circle fill="none" stroke="#000" cx="14" cy="3" r="1.79" />
899
+ <circle fill="none" stroke="#000" cx="10" cy="17" r="1.79" />
900
+ <path fill="none" stroke="#000" d="m6,4.78v1.99c0,2.63,4,3.66,4,6.75,0,1.55.01,1.24.01,1.24,0-.18,0,.31,0-1.24,0-3.09,3.99-4.12,3.99-6.75v-1.99" />
901
+ </svg>`
902
+ },
903
+ world: {
904
+ category: "app",
905
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
906
+ <path fill="none" stroke="#000" d="M1,10.5 L19,10.5" />
907
+ <path fill="none" stroke="#000" d="M2.35,15.5 L17.65,15.5" />
908
+ <path fill="none" stroke="#000" d="M2.35,5.5 L17.523,5.5" />
909
+ <path fill="none" stroke="#000" d="M10,19.46 L9.98,19.46 C7.31,17.33 5.61,14.141 5.61,10.58 C5.61,7.02 7.33,3.83 10,1.7 C10.01,1.7 9.99,1.7 10,1.7 L10,1.7 C12.67,3.83 14.4,7.02 14.4,10.58 C14.4,14.141 12.67,17.33 10,19.46 L10,19.46 L10,19.46 L10,19.46 Z" />
910
+ <circle fill="none" stroke="#000" cx="10" cy="10.5" r="9" />
911
+ </svg>`
912
+ },
913
+ calendar: {
914
+ category: "app",
915
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
916
+ <path d="M 2,3 2,17 18,17 18,3 2,3 Z M 17,16 3,16 3,8 17,8 17,16 Z M 17,7 3,7 3,4 17,4 17,7 Z" />
917
+ <rect width="1" height="3" x="6" y="2" />
918
+ <rect width="1" height="3" x="13" y="2" />
919
+ </svg>`
920
+ },
921
+ clock: {
922
+ category: "app",
923
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
924
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
925
+ <rect x="9" y="4" width="1" height="7" />
926
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M13.018,14.197 L9.445,10.625" />
927
+ </svg>`
928
+ },
929
+ history: {
930
+ category: "app",
931
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
932
+ <polyline fill="#000" points="1 2 2 2 2 6 6 6 6 7 1 7 1 2" />
933
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M2.1,6.548 C3.391,3.29 6.746,1 10.5,1 C15.5,1 19.5,5 19.5,10 C19.5,15 15.5,19 10.5,19 C5.5,19 1.5,15 1.5,10" />
934
+ <rect x="9" y="4" width="1" height="7" />
935
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M13.018,14.197 L9.445,10.625" id="Shape" />
936
+ </svg>`
937
+ },
938
+ future: {
939
+ category: "app",
940
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
941
+ <polyline points="19 2 18 2 18 6 14 6 14 7 19 7 19 2" />
942
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M18,6.548 C16.709,3.29 13.354,1 9.6,1 C4.6,1 0.6,5 0.6,10 C0.6,15 4.6,19 9.6,19 C14.6,19 18.6,15 18.6,10" />
943
+ <rect x="9" y="4" width="1" height="7" />
944
+ <path d="M13.018,14.197 L9.445,10.625" fill="none" stroke="#000" stroke-width="1.1" />
945
+ </svg>`
946
+ },
947
+ crosshairs: {
948
+ category: "app",
949
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
950
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="7.5" />
951
+ <line fill="none" stroke="#000" x1="10" x2="10" y2="8" />
952
+ <line fill="none" stroke="#000" x1="10" y1="12" x2="10" y2="20" />
953
+ <line fill="none" stroke="#000" y1="10" x2="8" y2="10" />
954
+ <line fill="none" stroke="#000" x1="12" y1="10" x2="20" y2="10" />
955
+ </svg>`
956
+ },
957
+ pencil: {
958
+ category: "app",
959
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
960
+ <path fill="none" stroke="#000" d="M17.25,6.01 L7.12,16.1 L3.82,17.2 L5.02,13.9 L15.12,3.88 C15.71,3.29 16.66,3.29 17.25,3.88 C17.83,4.47 17.83,5.42 17.25,6.01 L17.25,6.01 Z" />
961
+ <path fill="none" stroke="#000" d="M15.98,7.268 L13.851,5.148" />
962
+ </svg>`
963
+ },
964
+ trash: {
965
+ category: "app",
966
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
967
+ <polyline fill="none" stroke="#000" points="6.5 3 6.5 1.5 13.5 1.5 13.5 3" />
968
+ <polyline fill="none" stroke="#000" points="4.5 4 4.5 18.5 15.5 18.5 15.5 4" />
969
+ <rect x="8" y="7" width="1" height="9" />
970
+ <rect x="11" y="7" width="1" height="9" />
971
+ <rect x="2" y="3" width="16" height="1" />
972
+ </svg>`
973
+ },
974
+ move: {
975
+ category: "app",
976
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
977
+ <polygon points="4,5 1,5 1,9 2,9 2,6 4,6" />
978
+ <polygon points="1,16 2,16 2,18 4,18 4,19 1,19" />
979
+ <polygon points="14,16 14,19 11,19 11,18 13,18 13,16" />
980
+ <rect fill="none" stroke="#000" x="5.5" y="1.5" width="13" height="13" />
981
+ <rect x="1" y="11" width="1" height="3" />
982
+ <rect x="6" y="18" width="3" height="1" />
983
+ </svg>`
984
+ },
985
+ link: {
986
+ category: "app",
987
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
988
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M10.625,12.375 L7.525,15.475 C6.825,16.175 5.925,16.175 5.225,15.475 L4.525,14.775 C3.825,14.074 3.825,13.175 4.525,12.475 L7.625,9.375" />
989
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M9.325,7.375 L12.425,4.275 C13.125,3.575 14.025,3.575 14.724,4.275 L15.425,4.975 C16.125,5.675 16.125,6.575 15.425,7.275 L12.325,10.375" />
990
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M7.925,11.875 L11.925,7.975" />
991
+ </svg>`
992
+ },
993
+ "link-external": {
994
+ category: "app",
995
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
996
+ <polyline fill="none" stroke="#000" points="6 4 10 4 10 8" />
997
+ <line fill="none" stroke="#000" x1="4.5" y1="9.5" x2="10" y2="4" />
998
+ </svg>`
999
+ },
1000
+ eye: {
1001
+ category: "app",
1002
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1003
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="3.45" />
1004
+ <path fill="none" stroke="#000" d="m19.5,10c-2.4,3.66-5.26,7-9.5,7h0,0,0c-4.24,0-7.1-3.34-9.49-7C2.89,6.34,5.75,3,9.99,3h0,0,0c4.25,0,7.11,3.34,9.5,7Z" />
1005
+ </svg>`
1006
+ },
1007
+ "eye-slash": {
1008
+ category: "app",
1009
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1010
+ <path fill="none" stroke="#000" d="m7.56,7.56c.62-.62,1.49-1.01,2.44-1.01,1.91,0,3.45,1.54,3.45,3.45,0,.95-.39,1.82-1.01,2.44" />
1011
+ <path fill="none" stroke="#000" d="m19.5,10c-2.4,3.66-5.26,7-9.5,7h0,0,0c-4.24,0-7.1-3.34-9.49-7C2.89,6.34,5.75,3,9.99,3h0,0,0c4.25,0,7.11,3.34,9.5,7Z" />
1012
+ <line fill="none" stroke="#000" x1="2.5" y1="2.5" x2="17.5" y2="17.5" />
1013
+ </svg>`
1014
+ },
1015
+ question: {
1016
+ category: "app",
1017
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1018
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1019
+ <circle cx="9.99" cy="14.24" r="1.05" />
1020
+ <path fill="none" stroke="#000" stroke-width="1.2" d="m7.72,7.61c0-3.04,4.55-3.06,4.55-.07,0,.95-.91,1.43-1.49,2.03-.48.49-.72.98-.78,1.65-.01.13-.02.24-.02.35" />
1021
+ </svg>`
1022
+ },
1023
+ info: {
1024
+ category: "app",
1025
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1026
+ <path d="M12.13,11.59 C11.97,12.84 10.35,14.12 9.1,14.16 C6.17,14.2 9.89,9.46 8.74,8.37 C9.3,8.16 10.62,7.83 10.62,8.81 C10.62,9.63 10.12,10.55 9.88,11.32 C8.66,15.16 12.13,11.15 12.14,11.18 C12.16,11.21 12.16,11.35 12.13,11.59 C12.08,11.95 12.16,11.35 12.13,11.59 L12.13,11.59 Z M11.56,5.67 C11.56,6.67 9.36,7.15 9.36,6.03 C9.36,5 11.56,4.54 11.56,5.67 L11.56,5.67 Z" />
1027
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1028
+ </svg>`
1029
+ },
1030
+ warning: {
1031
+ category: "app",
1032
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1033
+ <circle cx="10" cy="14" r="1" />
1034
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1035
+ <path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z" />
1036
+ </svg>`
1037
+ },
1038
+ image: {
1039
+ category: "app",
1040
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1041
+ <circle cx="16.1" cy="6.1" r="1.1" />
1042
+ <rect fill="none" stroke="#000" x="0.5" y="2.5" width="19" height="15" />
1043
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="4,13 8,9 13,14" />
1044
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="11,12 12.5,10.5 16,14" />
1045
+ </svg>`
1046
+ },
1047
+ thumbnails: {
1048
+ category: "app",
1049
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1050
+ <rect fill="none" stroke="#000" x="3.5" y="3.5" width="5" height="5" />
1051
+ <rect fill="none" stroke="#000" x="11.5" y="3.5" width="5" height="5" />
1052
+ <rect fill="none" stroke="#000" x="11.5" y="11.5" width="5" height="5" />
1053
+ <rect fill="none" stroke="#000" x="3.5" y="11.5" width="5" height="5" />
1054
+ </svg>`
1055
+ },
1056
+ table: {
1057
+ category: "app",
1058
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1059
+ <rect x="1" y="3" width="18" height="1" />
1060
+ <rect x="1" y="7" width="18" height="1" />
1061
+ <rect x="1" y="11" width="18" height="1" />
1062
+ <rect x="1" y="15" width="18" height="1" />
1063
+ </svg>`
1064
+ },
1065
+ list: {
1066
+ category: "app",
1067
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1068
+ <rect x="6" y="4" width="12" height="1" />
1069
+ <rect x="6" y="9" width="12" height="1" />
1070
+ <rect x="6" y="14" width="12" height="1" />
1071
+ <rect x="2" y="4" width="2" height="1" />
1072
+ <rect x="2" y="9" width="2" height="1" />
1073
+ <rect x="2" y="14" width="2" height="1" />
1074
+ </svg>`
1075
+ },
1076
+ menu: {
1077
+ category: "app",
1078
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1079
+ <rect x="2" y="4" width="16" height="1" />
1080
+ <rect x="2" y="9" width="16" height="1" />
1081
+ <rect x="2" y="14" width="16" height="1" />
1082
+ </svg>`
1083
+ },
1084
+ grid: {
1085
+ category: "app",
1086
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1087
+ <rect x="2" y="2" width="3" height="3" />
1088
+ <rect x="8" y="2" width="3" height="3" />
1089
+ <rect x="14" y="2" width="3" height="3" />
1090
+ <rect x="2" y="8" width="3" height="3" />
1091
+ <rect x="8" y="8" width="3" height="3" />
1092
+ <rect x="14" y="8" width="3" height="3" />
1093
+ <rect x="2" y="14" width="3" height="3" />
1094
+ <rect x="8" y="14" width="3" height="3" />
1095
+ <rect x="14" y="14" width="3" height="3" />
1096
+ </svg>`
1097
+ },
1098
+ more: {
1099
+ category: "app",
1100
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1101
+ <circle cx="3" cy="10" r="2" />
1102
+ <circle cx="10" cy="10" r="2" />
1103
+ <circle cx="17" cy="10" r="2" />
1104
+ </svg>`
1105
+ },
1106
+ "more-vertical": {
1107
+ category: "app",
1108
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1109
+ <circle cx="10" cy="3" r="2" />
1110
+ <circle cx="10" cy="10" r="2" />
1111
+ <circle cx="10" cy="17" r="2" />
1112
+ </svg>`
1113
+ },
1114
+ plus: {
1115
+ category: "app",
1116
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1117
+ <rect x="9" y="1" width="1" height="17" />
1118
+ <rect x="1" y="9" width="17" height="1" />
1119
+ </svg>`
1120
+ },
1121
+ "plus-circle": {
1122
+ category: "app",
1123
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1124
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.5" cy="9.5" r="9" />
1125
+ <line fill="none" stroke="#000" x1="9.5" y1="5" x2="9.5" y2="14" />
1126
+ <line fill="none" stroke="#000" x1="5" y1="9.5" x2="14" y2="9.5" />
1127
+ </svg>`
1128
+ },
1129
+ minus: {
1130
+ category: "app",
1131
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1132
+ <rect height="1" width="18" y="9" x="1" />
1133
+ </svg>`
1134
+ },
1135
+ "minus-circle": {
1136
+ category: "app",
1137
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1138
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.5" cy="9.5" r="9" />
1139
+ <line fill="none" stroke="#000" x1="5" y1="9.5" x2="14" y2="9.5" />
1140
+ </svg>`
1141
+ },
1142
+ close: {
1143
+ category: "app",
1144
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1145
+ <path fill="none" stroke="#000" stroke-width="1.06" d="M16,16 L4,4" />
1146
+ <path fill="none" stroke="#000" stroke-width="1.06" d="M16,4 L4,16" />
1147
+ </svg>`
1148
+ },
1149
+ "close-circle": {
1150
+ category: "app",
1151
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1152
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1153
+ <line fill="none" stroke="#000" x1="13.18" y1="6.82" x2="6.82" y2="13.18" />
1154
+ <line fill="none" stroke="#000" x1="6.82" y1="6.82" x2="13.18" y2="13.18" />
1155
+ </svg>`
1156
+ },
1157
+ check: {
1158
+ category: "app",
1159
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1160
+ <polyline fill="none" stroke="#000" stroke-width="1.1" points="4,10 8,15 17,4" />
1161
+ </svg>`
1162
+ },
1163
+ ban: {
1164
+ category: "app",
1165
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1166
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1167
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="4" y1="3.5" x2="16" y2="16.5" />
1168
+ </svg>`
1169
+ },
1170
+ refresh: {
1171
+ category: "app",
1172
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1173
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M17.08,11.15 C17.09,11.31 17.1,11.47 17.1,11.64 C17.1,15.53 13.94,18.69 10.05,18.69 C6.16,18.68 3,15.53 3,11.63 C3,7.74 6.16,4.58 10.05,4.58 C10.9,4.58 11.71,4.73 12.46,5" />
1174
+ <polyline fill="none" stroke="#000" points="9.9 2 12.79 4.89 9.79 7.9" />
1175
+ </svg>`
1176
+ },
1177
+ play: {
1178
+ category: "app",
1179
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1180
+ <polygon fill="none" stroke="#000" points="6.5,5 14.5,10 6.5,15" />
1181
+ </svg>`
1182
+ },
1183
+ "play-circle": {
1184
+ category: "app",
1185
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1186
+ <polygon fill="none" stroke="#000" stroke-width="1.1" points="8.5 7 13.5 10 8.5 13" />
1187
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1188
+ </svg>`
1189
+ },
1190
+ tv: {
1191
+ category: "devices",
1192
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1193
+ <rect x="7" y="16" width="6" height="1" />
1194
+ <rect fill="none" stroke="#000" x="0.5" y="3.5" width="19" height="11" />
1195
+ </svg>`
1196
+ },
1197
+ desktop: {
1198
+ category: "devices",
1199
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1200
+ <rect x="8" y="15" width="1" height="2" />
1201
+ <rect x="11" y="15" width="1" height="2" />
1202
+ <rect x="5" y="16" width="10" height="1" />
1203
+ <rect fill="none" stroke="#000" x="1.5" y="3.5" width="17" height="11" />
1204
+ </svg>`
1205
+ },
1206
+ laptop: {
1207
+ category: "devices",
1208
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1209
+ <rect y="16" width="20" height="1" />
1210
+ <rect fill="none" stroke="#000" x="2.5" y="4.5" width="15" height="10" />
1211
+ </svg>`
1212
+ },
1213
+ tablet: {
1214
+ category: "devices",
1215
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1216
+ <path fill="none" stroke="#000" d="M5,18.5 C4.2,18.5 3.5,17.8 3.5,17 L3.5,3 C3.5,2.2 4.2,1.5 5,1.5 L16,1.5 C16.8,1.5 17.5,2.2 17.5,3 L17.5,17 C17.5,17.8 16.8,18.5 16,18.5 L5,18.5 L5,18.5 L5,18.5 Z" />
1217
+ <circle cx="10.5" cy="16.3" r="0.8" />
1218
+ </svg>`
1219
+ },
1220
+ phone: {
1221
+ category: "devices",
1222
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1223
+ <path fill="none" stroke="#000" d="M15.5,17 C15.5,17.8 14.8,18.5 14,18.5 L7,18.5 C6.2,18.5 5.5,17.8 5.5,17 L5.5,3 C5.5,2.2 6.2,1.5 7,1.5 L14,1.5 C14.8,1.5 15.5,2.2 15.5,3 L15.5,17 L15.5,17 L15.5,17 Z" />
1224
+ <circle cx="10.5" cy="16.5" r="0.8" />
1225
+ </svg>`
1226
+ },
1227
+ "tablet-landscape": {
1228
+ category: "devices",
1229
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1230
+ <path fill="none" stroke="#000" d="M1.5,5 C1.5,4.2 2.2,3.5 3,3.5 L17,3.5 C17.8,3.5 18.5,4.2 18.5,5 L18.5,16 C18.5,16.8 17.8,17.5 17,17.5 L3,17.5 C2.2,17.5 1.5,16.8 1.5,16 L1.5,5 L1.5,5 L1.5,5 Z" />
1231
+ <circle cx="3.7" cy="10.5" r="0.8" />
1232
+ </svg>`
1233
+ },
1234
+ "phone-landscape": {
1235
+ category: "devices",
1236
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1237
+ <path fill="none" stroke="#000" d="M17,5.5 C17.8,5.5 18.5,6.2 18.5,7 L18.5,14 C18.5,14.8 17.8,15.5 17,15.5 L3,15.5 C2.2,15.5 1.5,14.8 1.5,14 L1.5,7 C1.5,6.2 2.2,5.5 3,5.5 L17,5.5 L17,5.5 L17,5.5 Z" />
1238
+ <circle cx="3.8" cy="10.5" r="0.8" />
1239
+ </svg>`
1240
+ },
1241
+ file: {
1242
+ category: "storage",
1243
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1244
+ <rect fill="none" stroke="#000" x="3.5" y="1.5" width="13" height="17" />
1245
+ </svg>`
1246
+ },
1247
+ "file-text": {
1248
+ category: "storage",
1249
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1250
+ <rect fill="none" stroke="#000" width="13" height="17" x="3.5" y="1.5" />
1251
+ <line fill="none" stroke="#000" x1="6" x2="12" y1="12.5" y2="12.5" />
1252
+ <line fill="none" stroke="#000" x1="6" x2="14" y1="8.5" y2="8.5" />
1253
+ <line fill="none" stroke="#000" x1="6" x2="14" y1="6.5" y2="6.5" />
1254
+ <line fill="none" stroke="#000" x1="6" x2="14" y1="10.5" y2="10.5" />
1255
+ </svg>`
1256
+ },
1257
+ "file-pdf": {
1258
+ category: "storage",
1259
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1260
+ <rect fill="none" stroke="#000" width="13" height="17" x="3.5" y="1.5" />
1261
+ <path d="M14.65 11.67c-.48.3-1.37-.19-1.79-.37a4.65 4.65 0 0 1 1.49.06c.35.1.36.28.3.31zm-6.3.06l.43-.79a14.7 14.7 0 0 0 .75-1.64 5.48 5.48 0 0 0 1.25 1.55l.2.15a16.36 16.36 0 0 0-2.63.73zM9.5 5.32c.2 0 .32.5.32.97a1.99 1.99 0 0 1-.23 1.04 5.05 5.05 0 0 1-.17-1.3s0-.71.08-.71zm-3.9 9a4.35 4.35 0 0 1 1.21-1.46l.24-.22a4.35 4.35 0 0 1-1.46 1.68zm9.23-3.3a2.05 2.05 0 0 0-1.32-.3 11.07 11.07 0 0 0-1.58.11 4.09 4.09 0 0 1-.74-.5 5.39 5.39 0 0 1-1.32-2.06 10.37 10.37 0 0 0 .28-2.62 1.83 1.83 0 0 0-.07-.25.57.57 0 0 0-.52-.4H9.4a.59.59 0 0 0-.6.38 6.95 6.95 0 0 0 .37 3.14c-.26.63-1 2.12-1 2.12-.3.58-.57 1.08-.82 1.5l-.8.44A3.11 3.11 0 0 0 5 14.16a.39.39 0 0 0 .15.42l.24.13c1.15.56 2.28-1.74 2.66-2.42a23.1 23.1 0 0 1 3.59-.85 4.56 4.56 0 0 0 2.91.8.5.5 0 0 0 .3-.21 1.1 1.1 0 0 0 .12-.75.84.84 0 0 0-.14-.25z" />
1262
+ </svg>`
1263
+ },
1264
+ copy: {
1265
+ category: "storage",
1266
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1267
+ <rect fill="none" stroke="#000" x="3.5" y="2.5" width="12" height="16" />
1268
+ <polyline fill="none" stroke="#000" points="5 0.5 17.5 0.5 17.5 17" />
1269
+ </svg>`
1270
+ },
1271
+ "file-edit": {
1272
+ category: "storage",
1273
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1274
+ <path fill="none" stroke="#000" d="M18.65,1.68 C18.41,1.45 18.109,1.33 17.81,1.33 C17.499,1.33 17.209,1.45 16.98,1.68 L8.92,9.76 L8,12.33 L10.55,11.41 L18.651,3.34 C19.12,2.87 19.12,2.15 18.65,1.68 L18.65,1.68 L18.65,1.68 Z" />
1275
+ <polyline fill="none" stroke="#000" points="16.5 8.482 16.5 18.5 3.5 18.5 3.5 1.5 14.211 1.5" />
1276
+ </svg>`
1277
+ },
1278
+ folder: {
1279
+ category: "storage",
1280
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1281
+ <polygon fill="none" stroke="#000" points="9.5 5.5 8.5 3.5 1.5 3.5 1.5 16.5 18.5 16.5 18.5 5.5" />
1282
+ </svg>`
1283
+ },
1284
+ album: {
1285
+ category: "storage",
1286
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1287
+ <rect x="5" y="2" width="10" height="1" />
1288
+ <rect x="3" y="4" width="14" height="1" />
1289
+ <rect fill="none" stroke="#000" x="1.5" y="6.5" width="17" height="11" />
1290
+ </svg>`
1291
+ },
1292
+ push: {
1293
+ category: "storage",
1294
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1295
+ <line fill="none" stroke="#000" x1="10" y1="11" x2="10" y2="1" />
1296
+ <polyline fill="none" stroke="#000" points="6.5 6.5 4 6.5 4 19.5 16 19.5 16 6.5 13.5 6.5" />
1297
+ <polyline fill="none" stroke="#000" points="6.82 3.88 10 .71 13.17 3.88" />
1298
+ </svg>`
1299
+ },
1300
+ pull: {
1301
+ category: "storage",
1302
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1303
+ <line fill="none" stroke="#000" x1="10" y1="11" x2="10" y2="2" />
1304
+ <polyline fill="none" stroke="#000" points="6.5 5.5 4 5.5 4 18.5 16 18.5 16 5.5 13.5 5.5" />
1305
+ <polyline fill="none" stroke="#000" points="13.18 8.2 10 11.38 6.83 8.21" />
1306
+ </svg>`
1307
+ },
1308
+ server: {
1309
+ category: "storage",
1310
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1311
+ <rect x="3" y="3" width="1" height="2" />
1312
+ <rect x="5" y="3" width="1" height="2" />
1313
+ <rect x="7" y="3" width="1" height="2" />
1314
+ <rect x="16" y="3" width="1" height="1" />
1315
+ <rect x="16" y="10" width="1" height="1" />
1316
+ <circle fill="none" stroke="#000" cx="9.9" cy="17.4" r="1.4" />
1317
+ <rect x="3" y="10" width="1" height="2" />
1318
+ <rect x="5" y="10" width="1" height="2" />
1319
+ <rect x="9.5" y="14" width="1" height="2" />
1320
+ <rect x="3" y="17" width="6" height="1" />
1321
+ <rect x="11" y="17" width="6" height="1" />
1322
+ <rect fill="none" stroke="#000" x="1.5" y="1.5" width="17" height="5" />
1323
+ <rect fill="none" stroke="#000" x="1.5" y="8.5" width="17" height="5" />
1324
+ </svg>`
1325
+ },
1326
+ database: {
1327
+ category: "storage",
1328
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1329
+ <ellipse fill="none" stroke="#000" cx="10" cy="4.64" rx="7.5" ry="3.14" />
1330
+ <path fill="none" stroke="#000" d="M17.5,8.11 C17.5,9.85 14.14,11.25 10,11.25 C5.86,11.25 2.5,9.84 2.5,8.11" />
1331
+ <path fill="none" stroke="#000" d="M17.5,11.25 C17.5,12.99 14.14,14.39 10,14.39 C5.86,14.39 2.5,12.98 2.5,11.25" />
1332
+ <path fill="none" stroke="#000" d="M17.49,4.64 L17.5,14.36 C17.5,16.1 14.14,17.5 10,17.5 C5.86,17.5 2.5,16.09 2.5,14.36 L2.5,4.64" />
1333
+ </svg>`
1334
+ },
1335
+ "cloud-upload": {
1336
+ category: "storage",
1337
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1338
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M6.5,13.77h-2.75c-1.79,0-3.25-1.44-3.25-3.22,0-1.63,1.22-2.98,2.81-3.19.07-2.89,2.44-5.2,5.37-5.2,2.51,0,4.63,1.71,5.21,4.02.5-.22,1.04-.34,1.61-.34,2.21,0,4,1.77,4,3.96s-1.79,3.96-4,3.96h-3" />
1339
+ <path fill="none" stroke="#000" d="M9.51,9.34v9" />
1340
+ <polyline fill="none" stroke="#000" points="6.34 11.85 9.51 8.68 12.68 11.85" />
1341
+ </svg>`
1342
+ },
1343
+ "cloud-download": {
1344
+ category: "storage",
1345
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1346
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M6.5,13.28h-2.75c-1.79,0-3.25-1.44-3.25-3.22,0-1.63,1.22-2.98,2.8-3.19.08-2.89,2.45-5.2,5.38-5.2,2.51,0,4.63,1.71,5.21,4.02.5-.22,1.04-.34,1.61-.34,2.21,0,4,1.77,4,3.96s-1.79,3.96-4,3.96h-3" />
1347
+ <path fill="none" stroke="#000" d="M9.5,18.17v-10" />
1348
+ <polyline fill="none" stroke="#000" points="12.67 15.66 9.5 18.83 6.33 15.66" />
1349
+ </svg>`
1350
+ },
1351
+ download: {
1352
+ category: "storage",
1353
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1354
+ <line fill="none" stroke="#000" x1="10" y1="2.09" x2="10" y2="14.09" />
1355
+ <polyline fill="none" stroke="#000" points="6.16 10.62 10 14.46 13.84 10.62" />
1356
+ <line stroke="#000" x1="3.5" y1="17.5" x2="16.5" y2="17.5" />
1357
+ </svg>`
1358
+ },
1359
+ upload: {
1360
+ category: "storage",
1361
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1362
+ <line fill="none" stroke="#000" x1="10" y1="15.17" x2="10" y2="3.17" />
1363
+ <polyline fill="none" stroke="#000" points="13.84 6.63 10 2.8 6.16 6.64" />
1364
+ <line fill="#fff" stroke="#000" x1="3.5" y1="17.5" x2="16.5" y2="17.5" />
1365
+ </svg>`
1366
+ },
1367
+ reply: {
1368
+ category: "direction",
1369
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1370
+ <path d="M17.7,13.11 C16.12,10.02 13.84,7.85 11.02,6.61 C10.57,6.41 9.75,6.13 9,5.91 L9,2 L1,9 L9,16 L9,12.13 C10.78,12.47 12.5,13.19 14.09,14.25 C17.13,16.28 18.56,18.54 18.56,18.54 C18.56,18.54 18.81,15.28 17.7,13.11 L17.7,13.11 Z M14.82,13.53 C13.17,12.4 11.01,11.4 8,10.92 L8,13.63 L2.55,9 L8,4.25 L8,6.8 C8.3,6.86 9.16,7.02 10.37,7.49 C13.3,8.65 15.54,10.96 16.65,13.08 C16.97,13.7 17.48,14.86 17.68,16 C16.87,15.05 15.73,14.15 14.82,13.53 L14.82,13.53 Z" />
1371
+ </svg>`
1372
+ },
1373
+ forward: {
1374
+ category: "direction",
1375
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1376
+ <path d="M2.47,13.11 C4.02,10.02 6.27,7.85 9.04,6.61 C9.48,6.41 10.27,6.13 11,5.91 L11,2 L18.89,9 L11,16 L11,12.13 C9.25,12.47 7.58,13.19 6.02,14.25 C3.03,16.28 1.63,18.54 1.63,18.54 C1.63,18.54 1.38,15.28 2.47,13.11 L2.47,13.11 Z M5.3,13.53 C6.92,12.4 9.04,11.4 12,10.92 L12,13.63 L17.36,9 L12,4.25 L12,6.8 C11.71,6.86 10.86,7.02 9.67,7.49 C6.79,8.65 4.58,10.96 3.49,13.08 C3.18,13.7 2.68,14.87 2.49,16 C3.28,15.05 4.4,14.15 5.3,13.53 L5.3,13.53 Z" />
1377
+ </svg>`
1378
+ },
1379
+ expand: {
1380
+ category: "direction",
1381
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1382
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M2.48,17.52l6.52-6.52" />
1383
+ <polyline fill="none" stroke="#000" points="6.97 17.52 2.48 17.52 2.48 13.03" />
1384
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M17.52,2.48l-6.52,6.52" />
1385
+ <polyline fill="none" stroke="#000" points="13.03 2.48 17.52 2.48 17.52 6.97" />
1386
+ </svg>`
1387
+ },
1388
+ shrink: {
1389
+ category: "direction",
1390
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1391
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M2,18l6-6" />
1392
+ <polyline fill="none" stroke="#000" points="4 11.5 8.49 11.5 8.49 15.99" />
1393
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M18,2l-6,6" />
1394
+ <polyline fill="none" stroke="#000" points="15.99 8.49 11.5 8.49 11.5 4" />
1395
+ </svg>`
1396
+ },
1397
+ "arrow-up-right": {
1398
+ category: "direction",
1399
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1400
+ <line fill="none" stroke="#000" x1="4.5" y1="15.53" x2="16.5" y2="3.53" />
1401
+ <polyline fill="none" stroke="#000" points="16.5 9 16.5 3.5 11 3.5" />
1402
+ </svg>`
1403
+ },
1404
+ "arrow-down-arrow-up": {
1405
+ category: "direction",
1406
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1407
+ <line fill="none" stroke="#000" x1="7" y1="3.38" x2="7" y2="15.38" />
1408
+ <polyline fill="none" stroke="#000" points="10.18 12.75 7 15.93 3.83 12.76" />
1409
+ <line fill="none" stroke="#000" x1="13" y1="16.62" x2="13" y2="4.62" />
1410
+ <polyline fill="none" stroke="#000" points="9.82 7.25 13 4.07 16.17 7.24" />
1411
+ </svg>`
1412
+ },
1413
+ "arrow-up": {
1414
+ category: "direction",
1415
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1416
+ <line fill="none" stroke="#000" x1="10" y1="16.53" x2="10" y2="4.53" />
1417
+ <polyline fill="none" stroke="#000" points="13.84 8 10 4.17 6.16 8" />
1418
+ </svg>`
1419
+ },
1420
+ "arrow-down": {
1421
+ category: "direction",
1422
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1423
+ <line fill="none" stroke="#000" x1="10" y1="3.48" x2="10" y2="15.48" />
1424
+ <polyline fill="none" stroke="#000" points="6.16 12 10 15.84 13.84 12" />
1425
+ </svg>`
1426
+ },
1427
+ "arrow-left": {
1428
+ category: "direction",
1429
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1430
+ <line fill="none" stroke="#000" x1="16.53" y1="10" x2="4.53" y2="10" />
1431
+ <polyline fill="none" stroke="#000" points="8 6.16 4.18 10 8 13.84" />
1432
+ </svg>`
1433
+ },
1434
+ "arrow-right": {
1435
+ category: "direction",
1436
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1437
+ <line fill="none" stroke="#000" x1="3.47" y1="10" x2="15.47" y2="10" />
1438
+ <polyline fill="none" stroke="#000" points="11.98 13.84 15.82 10 11.98 6.16" />
1439
+ </svg>`
1440
+ },
1441
+ "chevron-up": {
1442
+ category: "direction",
1443
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1444
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="4 13 10 7 16 13" />
1445
+ </svg>`
1446
+ },
1447
+ "chevron-down": {
1448
+ category: "direction",
1449
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1450
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="16 7 10 13 4 7" />
1451
+ </svg>`
1452
+ },
1453
+ "chevron-left": {
1454
+ category: "direction",
1455
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1456
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="13 16 7 10 13 4" />
1457
+ </svg>`
1458
+ },
1459
+ "chevron-right": {
1460
+ category: "direction",
1461
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1462
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="7 4 13 10 7 16" />
1463
+ </svg>`
1464
+ },
1465
+ "chevron-double-left": {
1466
+ category: "direction",
1467
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1468
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="10 14 6 10 10 6" />
1469
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="14 14 10 10 14 6" />
1470
+ </svg>`
1471
+ },
1472
+ "chevron-double-right": {
1473
+ category: "direction",
1474
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1475
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="10 6 14 10 10 14" />
1476
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="6 6 10 10 6 14" />
1477
+ </svg>`
1478
+ },
1479
+ "triangle-up": {
1480
+ category: "direction",
1481
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1482
+ <polygon points="5 13 10 8 15 13" />
1483
+ </svg>`
1484
+ },
1485
+ "triangle-down": {
1486
+ category: "direction",
1487
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1488
+ <polygon points="5 7 15 7 10 12" />
1489
+ </svg>`
1490
+ },
1491
+ "triangle-left": {
1492
+ category: "direction",
1493
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1494
+ <polygon points="12 5 7 10 12 15" />
1495
+ </svg>`
1496
+ },
1497
+ "triangle-right": {
1498
+ category: "direction",
1499
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1500
+ <polygon points="8 5 13 10 8 15" />
1501
+ </svg>`
1502
+ },
1503
+ bold: {
1504
+ category: "editor",
1505
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1506
+ <path d="M5,15.3 C5.66,15.3 5.9,15 5.9,14.53 L5.9,5.5 C5.9,4.92 5.56,4.7 5,4.7 L5,4 L8.95,4 C12.6,4 13.7,5.37 13.7,6.9 C13.7,7.87 13.14,9.17 10.86,9.59 L10.86,9.7 C13.25,9.86 14.29,11.28 14.3,12.54 C14.3,14.47 12.94,16 9,16 L5,16 L5,15.3 Z M9,9.3 C11.19,9.3 11.8,8.5 11.85,7 C11.85,5.65 11.3,4.8 9,4.8 L7.67,4.8 L7.67,9.3 L9,9.3 Z M9.185,15.22 C11.97,15 12.39,14 12.4,12.58 C12.4,11.15 11.39,10 9,10 L7.67,10 L7.67,15 L9.18,15 Z" />
1507
+ </svg>`
1508
+ },
1509
+ italic: {
1510
+ category: "editor",
1511
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1512
+ <path d="M12.63,5.48 L10.15,14.52 C10,15.08 10.37,15.25 11.92,15.3 L11.72,16 L6,16 L6.2,15.31 C7.78,15.26 8.19,15.09 8.34,14.53 L10.82,5.49 C10.97,4.92 10.63,4.76 9.09,4.71 L9.28,4 L15,4 L14.81,4.69 C13.23,4.75 12.78,4.91 12.63,5.48 L12.63,5.48 Z" />
1513
+ </svg>`
1514
+ },
1515
+ strikethrough: {
1516
+ category: "editor",
1517
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1518
+ <path d="M6,13.02 L6.65,13.02 C7.64,15.16 8.86,16.12 10.41,16.12 C12.22,16.12 12.92,14.93 12.92,13.89 C12.92,12.55 11.99,12.03 9.74,11.23 C8.05,10.64 6.23,10.11 6.23,7.83 C6.23,5.5 8.09,4.09 10.4,4.09 C11.44,4.09 12.13,4.31 12.72,4.54 L13.33,4 L13.81,4 L13.81,7.59 L13.16,7.59 C12.55,5.88 11.52,4.89 10.07,4.89 C8.84,4.89 7.89,5.69 7.89,7.03 C7.89,8.29 8.89,8.78 10.88,9.45 C12.57,10.03 14.38,10.6 14.38,12.91 C14.38,14.75 13.27,16.93 10.18,16.93 C9.18,16.93 8.17,16.69 7.46,16.39 L6.52,17 L6,17 L6,13.02 L6,13.02 Z" />
1519
+ <rect x="3" y="10" width="15" height="1" />
1520
+ </svg>`
1521
+ },
1522
+ "quote-right": {
1523
+ category: "editor",
1524
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1525
+ <path d="M17.27,7.79 C17.27,9.45 16.97,10.43 15.99,12.02 C14.98,13.64 13,15.23 11.56,15.97 L11.1,15.08 C12.34,14.2 13.14,13.51 14.02,11.82 C14.27,11.34 14.41,10.92 14.49,10.54 C14.3,10.58 14.09,10.6 13.88,10.6 C12.06,10.6 10.59,9.12 10.59,7.3 C10.59,5.48 12.06,4 13.88,4 C15.39,4 16.67,5.02 17.05,6.42 C17.19,6.82 17.27,7.27 17.27,7.79 L17.27,7.79 Z" />
1526
+ <path d="M8.68,7.79 C8.68,9.45 8.38,10.43 7.4,12.02 C6.39,13.64 4.41,15.23 2.97,15.97 L2.51,15.08 C3.75,14.2 4.55,13.51 5.43,11.82 C5.68,11.34 5.82,10.92 5.9,10.54 C5.71,10.58 5.5,10.6 5.29,10.6 C3.47,10.6 2,9.12 2,7.3 C2,5.48 3.47,4 5.29,4 C6.8,4 8.08,5.02 8.46,6.42 C8.6,6.82 8.68,7.27 8.68,7.79 L8.68,7.79 Z" />
1527
+ </svg>`
1528
+ },
1529
+ "500px": {
1530
+ category: "brands",
1531
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1532
+ <path d="M9.624,11.866c-0.141,0.132,0.479,0.658,0.662,0.418c0.051-0.046,0.607-0.61,0.662-0.664c0,0,0.738,0.719,0.814,0.719
1533
+ c0.1,0,0.207-0.055,0.322-0.17c0.27-0.269,0.135-0.416,0.066-0.495l-0.631-0.616l0.658-0.668c0.146-0.156,0.021-0.314-0.1-0.449
1534
+ c-0.182-0.18-0.359-0.226-0.471-0.125l-0.656,0.654l-0.654-0.654c-0.033-0.034-0.08-0.045-0.124-0.045
1535
+ c-0.079,0-0.191,0.068-0.307,0.181c-0.202,0.202-0.247,0.351-0.133,0.462l0.665,0.665L9.624,11.866z" />
1536
+ <path d="M11.066,2.884c-1.061,0-2.185,0.248-3.011,0.604c-0.087,0.034-0.141,0.106-0.15,0.205C7.893,3.784,7.919,3.909,7.982,4.066
1537
+ c0.05,0.136,0.187,0.474,0.452,0.372c0.844-0.326,1.779-0.507,2.633-0.507c0.963,0,1.9,0.191,2.781,0.564
1538
+ c0.695,0.292,1.357,0.719,2.078,1.34c0.051,0.044,0.105,0.068,0.164,0.068c0.143,0,0.273-0.137,0.389-0.271
1539
+ c0.191-0.214,0.324-0.395,0.135-0.575c-0.686-0.654-1.436-1.138-2.363-1.533C13.24,3.097,12.168,2.884,11.066,2.884z" />
1540
+ <path d="M16.43,15.747c-0.092-0.028-0.242,0.05-0.309,0.119l0,0c-0.652,0.652-1.42,1.169-2.268,1.521
1541
+ c-0.877,0.371-1.814,0.551-2.779,0.551c-0.961,0-1.896-0.189-2.775-0.564c-0.848-0.36-1.612-0.879-2.268-1.53
1542
+ c-0.682-0.688-1.196-1.455-1.529-2.268c-0.325-0.799-0.471-1.643-0.471-1.643c-0.045-0.24-0.258-0.249-0.567-0.203
1543
+ c-0.128,0.021-0.519,0.079-0.483,0.36v0.01c0.105,0.644,0.289,1.284,0.545,1.895c0.417,0.969,1.002,1.849,1.756,2.604
1544
+ c0.757,0.754,1.636,1.34,2.604,1.757C8.901,18.785,9.97,19,11.088,19c1.104,0,2.186-0.215,3.188-0.645
1545
+ c1.838-0.896,2.604-1.757,2.604-1.757c0.182-0.204,0.227-0.317-0.1-0.643C16.779,15.956,16.525,15.774,16.43,15.747z" />
1546
+ <path d="M5.633,13.287c0.293,0.71,0.723,1.341,1.262,1.882c0.54,0.54,1.172,0.971,1.882,1.264c0.731,0.303,1.509,0.461,2.298,0.461
1547
+ c0.801,0,1.578-0.158,2.297-0.461c0.711-0.293,1.344-0.724,1.883-1.264c0.543-0.541,0.971-1.172,1.264-1.882
1548
+ c0.314-0.721,0.463-1.5,0.463-2.298c0-0.79-0.148-1.569-0.463-2.289c-0.293-0.699-0.721-1.329-1.264-1.881
1549
+ c-0.539-0.541-1.172-0.959-1.867-1.263c-0.721-0.303-1.5-0.461-2.299-0.461c-0.802,0-1.613,0.159-2.322,0.461
1550
+ c-0.577,0.25-1.544,0.867-2.119,1.454v0.012V2.108h8.16C15.1,2.104,15.1,1.69,15.1,1.552C15.1,1.417,15.1,1,14.809,1H5.915
1551
+ C5.676,1,5.527,1.192,5.527,1.384v6.84c0,0.214,0.273,0.372,0.529,0.428c0.5,0.105,0.614-0.056,0.737-0.224l0,0
1552
+ c0.18-0.273,0.776-0.884,0.787-0.894c0.901-0.905,2.117-1.408,3.416-1.408c1.285,0,2.5,0.501,3.412,1.408
1553
+ c0.914,0.914,1.408,2.122,1.408,3.405c0,1.288-0.508,2.496-1.408,3.405c-0.9,0.896-2.152,1.406-3.438,1.406
1554
+ c-0.877,0-1.711-0.229-2.433-0.671v-4.158c0-0.553,0.237-1.151,0.643-1.614c0.462-0.519,1.094-0.799,1.782-0.799
1555
+ c0.664,0,1.293,0.253,1.758,0.715c0.459,0.459,0.709,1.071,0.709,1.723c0,1.385-1.094,2.468-2.488,2.468
1556
+ c-0.273,0-0.769-0.121-0.781-0.125c-0.281-0.087-0.405,0.306-0.438,0.436c-0.159,0.496,0.079,0.585,0.123,0.607
1557
+ c0.452,0.137,0.743,0.157,1.129,0.157c1.973,0,3.572-1.6,3.572-3.57c0-1.964-1.6-3.552-3.572-3.552c-0.97,0-1.872,0.36-2.546,1.038
1558
+ c-0.656,0.631-1.027,1.487-1.027,2.322v3.438v-0.011c-0.372-0.42-0.732-1.041-0.981-1.682c-0.102-0.248-0.315-0.202-0.607-0.113
1559
+ c-0.135,0.035-0.519,0.157-0.44,0.439C5.372,12.799,5.577,13.164,5.633,13.287z" />
1560
+ </svg>`
1561
+ },
1562
+ android: {
1563
+ category: "brands",
1564
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1565
+ <path d="m14.88,6.77l1.66-2.87c.09-.16.04-.37-.12-.46-.16-.09-.37-.04-.46.12l-1.68,2.91c-1.28-.59-2.73-.91-4.28-.91s-3,.33-4.28.91l-1.68-2.91c-.09-.16-.3-.22-.46-.12-.16.09-.22.3-.12.46l1.66,2.87C2.26,8.32.32,11.22,0,14.61h20c-.32-3.39-2.26-6.29-5.12-7.84h0Zm-9.47,5.03c-.46,0-.84-.38-.84-.84s.38-.84.84-.84.84.38.84.84c0,.46-.37.84-.84.84Zm9.18,0c-.46,0-.84-.38-.84-.84s.38-.84.84-.84.84.38.84.84c0,.46-.37.84-.84.84Z" />
1566
+ </svg>`
1567
+ },
1568
+ "android-robot": {
1569
+ category: "brands",
1570
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1571
+ <path d="m17.61,7.96v4.64c-.06,1.48-2.17,1.48-2.23,0v-4.64c.06-1.48,2.17-1.48,2.23,0Z" />
1572
+ <path d="m4.62,7.96v4.64c-.06,1.48-2.17,1.48-2.23,0v-4.64c.06-1.48,2.17-1.48,2.23,0Z" />
1573
+ <path d="m12.78,2.85c-.11-.07-.23-.13-.34-.19.13-.23.65-1.17.79-1.42.07-.12-.05-.27-.18-.23-.04.01-.07.04-.09.08l-.79,1.43c-1.32-.6-2.98-.6-4.3,0-.13-.23-.65-1.18-.79-1.43-.04-.07-.14-.1-.21-.06-.08.04-.1.14-.06.21,0,0,.79,1.42.79,1.42-1.49.77-2.53,2.28-2.53,3.99-.02,0,9.93,0,9.93,0,.01-1.55-.87-2.98-2.19-3.8Zm-5.07,1.98c-.23,0-.41-.19-.41-.41.01-.27.21-.41.41-.41s.4.14.42.41c0,.22-.18.42-.41.41Zm4.58,0c-.23,0-.42-.19-.41-.41.01-.28.21-.41.41-.41s.4.14.41.41c0,.23-.19.41-.41.41Z" />
1574
+ <path d="m14.97,7.03v7.2c0,.66-.54,1.2-1.2,1.2h-.8v2.46c-.06,1.48-2.16,1.48-2.23,0,0,0,0-2.46,0-2.46h-1.48v2.46c0,.61-.5,1.11-1.11,1.11s-1.11-.5-1.11-1.11v-2.46h-.8c-.66,0-1.2-.54-1.2-1.2,0,0,0-7.2,0-7.2h9.93Z" />
1575
+ </svg>`
1576
+ },
1577
+ apple: {
1578
+ category: "brands",
1579
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1580
+ <path d="m17.23,6.93c-.1.08-1.95,1.12-1.95,3.43,0,2.67,2.35,3.62,2.42,3.64-.01.06-.37,1.29-1.24,2.55-.77,1.11-1.58,2.22-2.8,2.22s-1.54-.71-2.95-.71-1.87.73-2.99.73-1.9-1.03-2.8-2.29c-1.04-1.48-1.88-3.78-1.88-5.96,0-3.5,2.28-5.36,4.51-5.36,1.19,0,2.18.78,2.93.78s1.82-.83,3.17-.83c.51,0,2.36.05,3.57,1.79h0Zm-4.21-3.27c.56-.66.96-1.59.96-2.51,0-.13-.01-.26-.03-.36-.91.03-1.99.61-2.65,1.36-.51.58-.99,1.5-.99,2.44,0,.14.02.28.03.33.06.01.15.02.24.02.82,0,1.85-.55,2.44-1.28h0Z" />
1581
+ </svg>`
1582
+ },
1583
+ behance: {
1584
+ category: "brands",
1585
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1586
+ <path d="M9.5,10.6c-0.4-0.5-0.9-0.9-1.6-1.1c1.7-1,2.2-3.2,0.7-4.7C7.8,4,6.3,4,5.2,4C3.5,4,1.7,4,0,4v12c1.7,0,3.4,0,5.2,0 c1,0,2.1,0,3.1-0.5C10.2,14.6,10.5,12.3,9.5,10.6L9.5,10.6z M5.6,6.1c1.8,0,1.8,2.7-0.1,2.7c-1,0-2,0-2.9,0V6.1H5.6z M2.6,13.8v-3.1 c1.1,0,2.1,0,3.2,0c2.1,0,2.1,3.2,0.1,3.2L2.6,13.8z" />
1587
+ <path d="M19.9,10.9C19.7,9.2,18.7,7.6,17,7c-4.2-1.3-7.3,3.4-5.3,7.1c0.9,1.7,2.8,2.3,4.7,2.1c1.7-0.2,2.9-1.3,3.4-2.9h-2.2 c-0.4,1.3-2.4,1.5-3.5,0.6c-0.4-0.4-0.6-1.1-0.6-1.7H20C20,11.7,19.9,10.9,19.9,10.9z M13.5,10.6c0-1.6,2.3-2.7,3.5-1.4 c0.4,0.4,0.5,0.9,0.6,1.4H13.5L13.5,10.6z" />
1588
+ <rect x="13" y="4" width="5" height="1.4" />
1589
+ </svg>`
1590
+ },
1591
+ bluesky: {
1592
+ category: "brands",
1593
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1594
+ <path d="M9.993,9.149c-.772-1.495-2.865-4.288-4.813-5.662-1.866-1.317-2.58-1.09-3.043-.878-.54.246-.637,1.075-.637,1.563s.265,4.003.444,4.587c.579,1.939,2.628,2.595,4.519,2.382.096-.014.193-.029.294-.039-.096.014-.198.029-.294.039-2.768.41-5.233,1.418-2.001,5.011,3.55,3.675,4.866-.786,5.541-3.053.675,2.262,1.452,6.564,5.474,3.053,3.024-3.053.83-4.601-1.939-5.011-.096-.01-.198-.024-.294-.039.101.014.198.024.294.039,1.89.212,3.945-.444,4.519-2.382.174-.588.444-4.099.444-4.587s-.096-1.317-.637-1.563c-.468-.212-1.177-.439-3.043.878-1.963,1.379-4.056,4.167-4.827,5.662h0Z" />
1595
+ </svg>`
1596
+ },
1597
+ discord: {
1598
+ category: "brands",
1599
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1600
+ <path d="M16.074,4.361a14.243,14.243,0,0,0-3.61-1.134,10.61,10.61,0,0,0-.463.96,13.219,13.219,0,0,0-4,0,10.138,10.138,0,0,0-.468-.96A14.206,14.206,0,0,0,3.919,4.364,15.146,15.146,0,0,0,1.324,14.5a14.435,14.435,0,0,0,4.428,2.269A10.982,10.982,0,0,0,6.7,15.21a9.294,9.294,0,0,1-1.494-.727c.125-.093.248-.19.366-.289a10.212,10.212,0,0,0,8.854,0c.119.1.242.2.366.289a9.274,9.274,0,0,1-1.5.728,10.8,10.8,0,0,0,.948,1.562,14.419,14.419,0,0,0,4.431-2.27A15.128,15.128,0,0,0,16.074,4.361Zm-8.981,8.1a1.7,1.7,0,0,1-1.573-1.79A1.689,1.689,0,0,1,7.093,8.881a1.679,1.679,0,0,1,1.573,1.791A1.687,1.687,0,0,1,7.093,12.462Zm5.814,0a1.7,1.7,0,0,1-1.573-1.79,1.689,1.689,0,0,1,1.573-1.791,1.679,1.679,0,0,1,1.573,1.791A1.688,1.688,0,0,1,12.907,12.462Z" />
1601
+ </svg>`
1602
+ },
1603
+ dribbble: {
1604
+ category: "brands",
1605
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1606
+ <path fill="none" stroke="#000" stroke-width="1.4" d="M1.3,8.9c0,0,5,0.1,8.6-1c1.4-0.4,2.6-0.9,4-1.9 c1.4-1.1,2.5-2.5,2.5-2.5" />
1607
+ <path fill="none" stroke="#000" stroke-width="1.4" d="M3.9,16.6c0,0,1.7-2.8,3.5-4.2 c1.8-1.3,4-2,5.7-2.2C16,10,19,10.6,19,10.6" />
1608
+ <path fill="none" stroke="#000" stroke-width="1.4" d="M6.9,1.6c0,0,3.3,4.6,4.2,6.8 c0.4,0.9,1.3,3.1,1.9,5.2c0.6,2,0.9,4.4,0.9,4.4" />
1609
+ <circle fill="none" stroke="#000" stroke-width="1.4" cx="10" cy="10" r="9" />
1610
+ </svg>`
1611
+ },
1612
+ etsy: {
1613
+ category: "brands",
1614
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1615
+ <path d="M8,4.26C8,4.07,8,4,8.31,4h4.46c.79,0,1.22.67,1.53,1.91l.25,1h.76c.14-2.82.26-4,.26-4S13.65,3,12.52,3H6.81L3.75,2.92v.84l1,.2c.73.11.9.27,1,1,0,0,.06,2,.06,5.17s-.06,5.14-.06,5.14c0,.59-.23.81-1,.94l-1,.2v.84l3.06-.1h5.11c1.15,0,3.82.1,3.82.1,0-.7.45-3.88.51-4.22h-.73l-.76,1.69a2.25,2.25,0,0,1-2.45,1.47H9.4c-1,0-1.44-.4-1.44-1.24V10.44s2.16,0,2.86.06c.55,0,.85.19,1.06,1l.23,1H13L12.9,9.94,13,7.41h-.85l-.28,1.13c-.16.74-.28.84-1,1-1,.1-2.89.09-2.89.09Z" />
1616
+ </svg>`
1617
+ },
1618
+ facebook: {
1619
+ category: "brands",
1620
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1621
+ <path d="M11,10h2.6l0.4-3H11V5.3c0-0.9,0.2-1.5,1.5-1.5H14V1.1c-0.3,0-1-0.1-2.1-0.1C9.6,1,8,2.4,8,5v2H5.5v3H8v8h3V10z" />
1622
+ </svg>`
1623
+ },
1624
+ flickr: {
1625
+ category: "brands",
1626
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1627
+ <circle cx="5.5" cy="9.5" r="3.5" />
1628
+ <circle cx="14.5" cy="9.5" r="3.5" />
1629
+ </svg>`
1630
+ },
1631
+ foursquare: {
1632
+ category: "brands",
1633
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1634
+ <path d="M15.23,2 C15.96,2 16.4,2.41 16.5,2.86 C16.57,3.15 16.56,3.44 16.51,3.73 C16.46,4.04 14.86,11.72 14.75,12.03 C14.56,12.56 14.16,12.82 13.61,12.83 C13.03,12.84 11.09,12.51 10.69,13 C10.38,13.38 7.79,16.39 6.81,17.53 C6.61,17.76 6.4,17.96 6.08,17.99 C5.68,18.04 5.29,17.87 5.17,17.45 C5.12,17.28 5.1,17.09 5.1,16.91 C5.1,12.4 4.86,7.81 5.11,3.31 C5.17,2.5 5.81,2.12 6.53,2 L15.23,2 L15.23,2 Z M9.76,11.42 C9.94,11.19 10.17,11.1 10.45,11.1 L12.86,11.1 C13.12,11.1 13.31,10.94 13.36,10.69 C13.37,10.64 13.62,9.41 13.74,8.83 C13.81,8.52 13.53,8.28 13.27,8.28 C12.35,8.29 11.42,8.28 10.5,8.28 C9.84,8.28 9.83,7.69 9.82,7.21 C9.8,6.85 10.13,6.55 10.5,6.55 C11.59,6.56 12.67,6.55 13.76,6.55 C14.03,6.55 14.23,6.4 14.28,6.14 C14.34,5.87 14.67,4.29 14.67,4.29 C14.67,4.29 14.82,3.74 14.19,3.74 L7.34,3.74 C7,3.75 6.84,4.02 6.84,4.33 C6.84,7.58 6.85,14.95 6.85,14.99 C6.87,15 8.89,12.51 9.76,11.42 L9.76,11.42 Z" />
1635
+ </svg>`
1636
+ },
1637
+ github: {
1638
+ category: "brands",
1639
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1640
+ <path d="M10,1 C5.03,1 1,5.03 1,10 C1,13.98 3.58,17.35 7.16,18.54 C7.61,18.62 7.77,18.34 7.77,18.11 C7.77,17.9 7.76,17.33 7.76,16.58 C5.26,17.12 4.73,15.37 4.73,15.37 C4.32,14.33 3.73,14.05 3.73,14.05 C2.91,13.5 3.79,13.5 3.79,13.5 C4.69,13.56 5.17,14.43 5.17,14.43 C5.97,15.8 7.28,15.41 7.79,15.18 C7.87,14.6 8.1,14.2 8.36,13.98 C6.36,13.75 4.26,12.98 4.26,9.53 C4.26,8.55 4.61,7.74 5.19,7.11 C5.1,6.88 4.79,5.97 5.28,4.73 C5.28,4.73 6.04,4.49 7.75,5.65 C8.47,5.45 9.24,5.35 10,5.35 C10.76,5.35 11.53,5.45 12.25,5.65 C13.97,4.48 14.72,4.73 14.72,4.73 C15.21,5.97 14.9,6.88 14.81,7.11 C15.39,7.74 15.73,8.54 15.73,9.53 C15.73,12.99 13.63,13.75 11.62,13.97 C11.94,14.25 12.23,14.8 12.23,15.64 C12.23,16.84 12.22,17.81 12.22,18.11 C12.22,18.35 12.38,18.63 12.84,18.54 C16.42,17.35 19,13.98 19,10 C19,5.03 14.97,1 10,1 L10,1 Z" />
1641
+ </svg>`
1642
+ },
1643
+ "github-alt": {
1644
+ category: "brands",
1645
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1646
+ <path d="M10,0.5 C4.75,0.5 0.5,4.76 0.5,10.01 C0.5,15.26 4.75,19.51 10,19.51 C15.24,19.51 19.5,15.26 19.5,10.01 C19.5,4.76 15.25,0.5 10,0.5 L10,0.5 Z M12.81,17.69 C12.81,17.69 12.81,17.7 12.79,17.69 C12.47,17.75 12.35,17.59 12.35,17.36 L12.35,16.17 C12.35,15.45 12.09,14.92 11.58,14.56 C12.2,14.51 12.77,14.39 13.26,14.21 C13.87,13.98 14.36,13.69 14.74,13.29 C15.42,12.59 15.76,11.55 15.76,10.17 C15.76,9.25 15.45,8.46 14.83,7.8 C15.1,7.08 15.07,6.29 14.75,5.44 L14.51,5.42 C14.34,5.4 14.06,5.46 13.67,5.61 C13.25,5.78 12.79,6.03 12.31,6.35 C11.55,6.16 10.81,6.05 10.09,6.05 C9.36,6.05 8.61,6.15 7.88,6.35 C7.28,5.96 6.75,5.68 6.26,5.54 C6.07,5.47 5.9,5.44 5.78,5.44 L5.42,5.44 C5.06,6.29 5.04,7.08 5.32,7.8 C4.7,8.46 4.4,9.25 4.4,10.17 C4.4,11.94 4.96,13.16 6.08,13.84 C6.53,14.13 7.05,14.32 7.69,14.43 C8.03,14.5 8.32,14.54 8.55,14.55 C8.07,14.89 7.82,15.42 7.82,16.16 L7.82,17.51 C7.8,17.69 7.7,17.8 7.51,17.8 C4.21,16.74 1.82,13.65 1.82,10.01 C1.82,5.5 5.49,1.83 10,1.83 C14.5,1.83 18.17,5.5 18.17,10.01 C18.18,13.53 15.94,16.54 12.81,17.69 L12.81,17.69 Z" />
1647
+ </svg>`
1648
+ },
1649
+ gitter: {
1650
+ category: "brands",
1651
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1652
+ <rect x="3.5" y="1" width="1.531" height="11.471" />
1653
+ <rect x="7.324" y="4.059" width="1.529" height="15.294" />
1654
+ <rect x="11.148" y="4.059" width="1.527" height="15.294" />
1655
+ <rect x="14.971" y="4.059" width="1.529" height="8.412" />
1656
+ </svg>`
1657
+ },
1658
+ google: {
1659
+ category: "brands",
1660
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1661
+ <path d="M17.86,9.09 C18.46,12.12 17.14,16.05 13.81,17.56 C9.45,19.53 4.13,17.68 2.47,12.87 C0.68,7.68 4.22,2.42 9.5,2.03 C11.57,1.88 13.42,2.37 15.05,3.65 C15.22,3.78 15.37,3.93 15.61,4.14 C14.9,4.81 14.23,5.45 13.5,6.14 C12.27,5.08 10.84,4.72 9.28,4.98 C8.12,5.17 7.16,5.76 6.37,6.63 C4.88,8.27 4.62,10.86 5.76,12.82 C6.95,14.87 9.17,15.8 11.57,15.25 C13.27,14.87 14.76,13.33 14.89,11.75 L10.51,11.75 L10.51,9.09 L17.86,9.09 L17.86,9.09 Z" />
1662
+ </svg>`
1663
+ },
1664
+ instagram: {
1665
+ category: "brands",
1666
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1667
+ <path d="M13.55,1H6.46C3.45,1,1,3.44,1,6.44v7.12c0,3,2.45,5.44,5.46,5.44h7.08c3.02,0,5.46-2.44,5.46-5.44V6.44 C19.01,3.44,16.56,1,13.55,1z M17.5,14c0,1.93-1.57,3.5-3.5,3.5H6c-1.93,0-3.5-1.57-3.5-3.5V6c0-1.93,1.57-3.5,3.5-3.5h8 c1.93,0,3.5,1.57,3.5,3.5V14z" />
1668
+ <circle cx="14.87" cy="5.26" r="1.09" />
1669
+ <path d="M10.03,5.45c-2.55,0-4.63,2.06-4.63,4.6c0,2.55,2.07,4.61,4.63,4.61c2.56,0,4.63-2.061,4.63-4.61 C14.65,7.51,12.58,5.45,10.03,5.45L10.03,5.45L10.03,5.45z M10.08,13c-1.66,0-3-1.34-3-2.99c0-1.65,1.34-2.99,3-2.99s3,1.34,3,2.99 C13.08,11.66,11.74,13,10.08,13L10.08,13L10.08,13z" />
1670
+ </svg>`
1671
+ },
1672
+ joomla: {
1673
+ category: "brands",
1674
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1675
+ <path d="M7.8,13.4l1.7-1.7L5.9,8c-0.6-0.5-0.6-1.5,0-2c0.6-0.6,1.4-0.6,2,0l1.7-1.7c-1-1-2.3-1.3-3.6-1C5.8,2.2,4.8,1.4,3.7,1.4 c-1.3,0-2.3,1-2.3,2.3c0,1.1,0.8,2,1.8,2.3c-0.4,1.3-0.1,2.8,1,3.8L7.8,13.4L7.8,13.4z" />
1676
+ <path d="M10.2,4.3c1-1,2.5-1.4,3.8-1c0.2-1.1,1.1-2,2.3-2c1.3,0,2.3,1,2.3,2.3c0,1.2-0.9,2.2-2,2.3c0.4,1.3,0,2.8-1,3.8L13.9,8 c0.6-0.5,0.6-1.5,0-2c-0.5-0.6-1.5-0.6-2,0L8.2,9.7L6.5,8" />
1677
+ <path d="M14.1,16.8c-1.3,0.4-2.8,0.1-3.8-1l1.7-1.7c0.6,0.6,1.5,0.6,2,0c0.5-0.6,0.6-1.5,0-2l-3.7-3.7L12,6.7l3.7,3.7 c1,1,1.3,2.4,1,3.6c1.1,0.2,2,1.1,2,2.3c0,1.3-1,2.3-2.3,2.3C15.2,18.6,14.3,17.8,14.1,16.8" />
1678
+ <path d="M13.2,12.2l-3.7,3.7c-1,1-2.4,1.3-3.6,1c-0.2,1-1.2,1.8-2.2,1.8c-1.3,0-2.3-1-2.3-2.3c0-1.1,0.8-2,1.8-2.3 c-0.3-1.3,0-2.7,1-3.7l1.7,1.7c-0.6,0.6-0.6,1.5,0,2c0.6,0.6,1.4,0.6,2,0l3.7-3.7" />
1679
+ </svg>`
1680
+ },
1681
+ linkedin: {
1682
+ category: "brands",
1683
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1684
+ <path d="M5.77,17.89 L5.77,7.17 L2.21,7.17 L2.21,17.89 L5.77,17.89 L5.77,17.89 Z M3.99,5.71 C5.23,5.71 6.01,4.89 6.01,3.86 C5.99,2.8 5.24,2 4.02,2 C2.8,2 2,2.8 2,3.85 C2,4.88 2.77,5.7 3.97,5.7 L3.99,5.7 L3.99,5.71 L3.99,5.71 Z" />
1685
+ <path d="M7.75,17.89 L11.31,17.89 L11.31,11.9 C11.31,11.58 11.33,11.26 11.43,11.03 C11.69,10.39 12.27,9.73 13.26,9.73 C14.55,9.73 15.06,10.71 15.06,12.15 L15.06,17.89 L18.62,17.89 L18.62,11.74 C18.62,8.45 16.86,6.92 14.52,6.92 C12.6,6.92 11.75,7.99 11.28,8.73 L11.3,8.73 L11.3,7.17 L7.75,7.17 C7.79,8.17 7.75,17.89 7.75,17.89 L7.75,17.89 L7.75,17.89 Z" />
1686
+ </svg>`
1687
+ },
1688
+ mastodon: {
1689
+ category: "brands",
1690
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1691
+ <path d="m18.5,6.87c0-3.95-2.59-5.11-2.59-5.11-1.31-.6-3.55-.85-5.88-.87h-.06c-2.33.02-4.57.27-5.88.87,0,0-2.59,1.16-2.59,5.11,0,.91-.02,1.99.01,3.14.09,3.87.71,7.68,4.28,8.62,1.65.44,3.06.53,4.2.47,2.07-.11,3.23-.74,3.23-.74l-.07-1.5s-1.48.47-3.14.41c-1.64-.06-3.38-.18-3.64-2.2-.02-.18-.04-.37-.04-.57,0,0,1.61.39,3.66.49,1.25.06,2.42-.07,3.61-.22,2.28-.27,4.27-1.68,4.52-2.97.39-2.02.36-4.94.36-4.94Zm-3.05,5.09h-1.9v-4.65c0-.98-.41-1.48-1.24-1.48-.91,0-1.37.59-1.37,1.76v2.54h-1.89v-2.54c0-1.17-.46-1.76-1.37-1.76-.82,0-1.24.5-1.24,1.48v4.65h-1.9v-4.79c0-.98.25-1.76.75-2.33.52-.58,1.19-.87,2.03-.87.97,0,1.71.37,2.19,1.12l.47.79.47-.79c.49-.75,1.22-1.12,2.19-1.12.84,0,1.51.29,2.03.87.5.58.75,1.35.75,2.33v4.79Z" />
1692
+ </svg>`
1693
+ },
1694
+ microsoft: {
1695
+ category: "brands",
1696
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1697
+ <path d="m2,2h7.58v7.58H2V2Zm8.42,0h7.58v7.58h-7.58V2ZM2,10.42h7.58v7.58H2v-7.58Zm8.42,0h7.58v7.58h-7.58" />
1698
+ </svg>`
1699
+ },
1700
+ pinterest: {
1701
+ category: "brands",
1702
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1703
+ <path d="M10.21,1 C5.5,1 3,4.16 3,7.61 C3,9.21 3.85,11.2 5.22,11.84 C5.43,11.94 5.54,11.89 5.58,11.69 C5.62,11.54 5.8,10.8 5.88,10.45 C5.91,10.34 5.89,10.24 5.8,10.14 C5.36,9.59 5,8.58 5,7.65 C5,5.24 6.82,2.91 9.93,2.91 C12.61,2.91 14.49,4.74 14.49,7.35 C14.49,10.3 13,12.35 11.06,12.35 C9.99,12.35 9.19,11.47 9.44,10.38 C9.75,9.08 10.35,7.68 10.35,6.75 C10.35,5.91 9.9,5.21 8.97,5.21 C7.87,5.21 6.99,6.34 6.99,7.86 C6.99,8.83 7.32,9.48 7.32,9.48 C7.32,9.48 6.24,14.06 6.04,14.91 C5.7,16.35 6.08,18.7 6.12,18.9 C6.14,19.01 6.26,19.05 6.33,18.95 C6.44,18.81 7.74,16.85 8.11,15.44 C8.24,14.93 8.79,12.84 8.79,12.84 C9.15,13.52 10.19,14.09 11.29,14.09 C14.58,14.09 16.96,11.06 16.96,7.3 C16.94,3.7 14,1 10.21,1" />
1704
+ </svg>`
1705
+ },
1706
+ reddit: {
1707
+ category: "brands",
1708
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1709
+ <path d="M19 9.05a2.56 2.56 0 0 0-2.56-2.56 2.59 2.59 0 0 0-1.88.82 10.63 10.63 0 0 0-4.14-1v-.08c.58-1.62 1.58-3.89 2.7-4.1.38-.08.77.12 1.19.57a1.15 1.15 0 0 0-.06.37 1.48 1.48 0 1 0 1.51-1.45 1.43 1.43 0 0 0-.76.19A2.29 2.29 0 0 0 12.91 1c-2.11.43-3.39 4.38-3.63 5.19 0 0 0 .11-.06.11a10.65 10.65 0 0 0-3.75 1A2.56 2.56 0 0 0 1 9.05a2.42 2.42 0 0 0 .72 1.76A5.18 5.18 0 0 0 1.24 13c0 3.66 3.92 6.64 8.73 6.64s8.74-3 8.74-6.64a5.23 5.23 0 0 0-.46-2.13A2.58 2.58 0 0 0 19 9.05zm-16.88 0a1.44 1.44 0 0 1 2.27-1.19 7.68 7.68 0 0 0-2.07 1.91 1.33 1.33 0 0 1-.2-.72zM10 18.4c-4.17 0-7.55-2.4-7.55-5.4S5.83 7.53 10 7.53 17.5 10 17.5 13s-3.38 5.4-7.5 5.4zm7.69-8.61a7.62 7.62 0 0 0-2.09-1.91 1.41 1.41 0 0 1 .84-.28 1.47 1.47 0 0 1 1.44 1.45 1.34 1.34 0 0 1-.21.72z" />
1710
+ <path d="M6.69 12.58a1.39 1.39 0 1 1 1.39-1.39 1.38 1.38 0 0 1-1.38 1.39z" />
1711
+ <path d="M14.26 11.2a1.39 1.39 0 1 1-1.39-1.39 1.39 1.39 0 0 1 1.39 1.39z" />
1712
+ <path d="M13.09 14.88a.54.54 0 0 1-.09.77 5.3 5.3 0 0 1-3.26 1.19 5.61 5.61 0 0 1-3.4-1.22.55.55 0 1 1 .73-.83 4.09 4.09 0 0 0 5.25 0 .56.56 0 0 1 .77.09z" />
1713
+ </svg>`
1714
+ },
1715
+ signal: {
1716
+ category: "brands",
1717
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1718
+ <path d="m7.86,1.34l.2.81c-.79.19-1.54.51-2.24.93l-.43-.71c.77-.46,1.6-.81,2.47-1.02Zm4.28,0l-.2.81c.79.19,1.54.51,2.24.93l.43-.72c-.77-.46-1.6-.81-2.47-1.02h0ZM2.37,5.39c-.46.77-.81,1.6-1.02,2.47l.81.2c.19-.79.51-1.54.93-2.24l-.71-.43Zm-.45,4.61c0-.41.03-.81.09-1.21l-.83-.13c-.13.89-.13,1.79,0,2.67l.83-.13c-.06-.4-.09-.81-.09-1.21h0Zm12.69,7.63l-.43-.72c-.7.42-1.45.73-2.24.93l.2.81c.87-.21,1.7-.56,2.46-1.02h0Zm3.47-7.63c0,.41-.03.81-.09,1.21l.83.13c.13-.89.13-1.79,0-2.67l-.83.13c.06.4.09.81.09,1.21Zm.58,2.14l-.81-.2c-.19.79-.51,1.54-.93,2.24l.72.43c.46-.77.81-1.6,1.02-2.47h0Zm-7.44,5.85c-.8.12-1.62.12-2.42,0l-.13.83c.89.13,1.79.13,2.67,0l-.13-.83Zm5.29-3.2c-.48.65-1.06,1.23-1.71,1.71l.5.67c.72-.53,1.36-1.16,1.89-1.88l-.67-.5Zm-1.71-11.29c.65.48,1.23,1.06,1.71,1.71l.67-.5c-.53-.72-1.17-1.35-1.88-1.88l-.5.67Zm-11.29,1.71c.48-.65,1.06-1.23,1.71-1.71l-.5-.67c-.72.53-1.35,1.17-1.88,1.88l.67.5Zm14.14.18l-.72.43c.42.7.73,1.45.93,2.24l.81-.2c-.21-.87-.56-1.7-1.02-2.46h0Zm-8.84-3.38c.8-.12,1.62-.12,2.42,0l.13-.83c-.89-.13-1.79-.13-2.67,0l.13.83Zm-4.86,15.38l-1.73.4.4-1.73-.81-.19-.4,1.73c-.07.28.02.58.22.78s.5.29.78.22l1.73-.39-.19-.82Zm-1.96-2.26l.81.19.28-1.2c-.41-.68-.71-1.42-.9-2.19l-.81.2c.18.74.46,1.45.82,2.12l-.2.88Zm3.9,1.81l-1.19.28.19.81.88-.2c.67.36,1.38.64,2.12.82l.2-.81c-.77-.19-1.51-.5-2.19-.9h0ZM10,2.75c-2.63,0-5.06,1.43-6.34,3.74s-1.19,5.12.21,7.36l-.7,2.97,2.97-.7c2.61,1.64,5.96,1.46,8.37-.46s3.34-5.15,2.32-8.06c-1.02-2.91-3.77-4.85-6.85-4.85Z" />
1719
+ </svg>`
1720
+ },
1721
+ soundcloud: {
1722
+ category: "brands",
1723
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1724
+ <path d="M17.2,9.4c-0.4,0-0.8,0.1-1.101,0.2c-0.199-2.5-2.399-4.5-5-4.5c-0.6,0-1.2,0.1-1.7,0.3C9.2,5.5,9.1,5.6,9.1,5.6V15h8 c1.601,0,2.801-1.2,2.801-2.8C20,10.7,18.7,9.4,17.2,9.4L17.2,9.4z" />
1725
+ <rect x="6" y="6.5" width="1.5" height="8.5" />
1726
+ <rect x="3" y="8" width="1.5" height="7" />
1727
+ <rect y="10" width="1.5" height="5" />
1728
+ </svg>`
1729
+ },
1730
+ telegram: {
1731
+ category: "brands",
1732
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1733
+ <path d="m10,1.09C5.08,1.09,1.09,5.08,1.09,10s3.99,8.91,8.91,8.91,8.91-3.99,8.91-8.91S14.92,1.09,10,1.09Zm4.25,5.8c-.03.36-.23,1.62-.44,2.99-.31,1.93-.64,4.04-.64,4.04,0,0-.05.59-.49.7s-1.16-.36-1.29-.46c-.1-.08-1.93-1.24-2.6-1.8-.18-.15-.39-.46.03-.82.93-.85,2.04-1.91,2.7-2.58.31-.31.62-1.03-.67-.15-1.83,1.26-3.63,2.45-3.63,2.45,0,0-.41.26-1.19.03-.77-.23-1.67-.54-1.67-.54,0,0-.62-.39.44-.8h0s4.46-1.83,6-2.47c.59-.26,2.6-1.08,2.6-1.08,0,0,.93-.36.85.52Z" />
1734
+ </svg>`
1735
+ },
1736
+ threads: {
1737
+ category: "brands",
1738
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1739
+ <path d="m14.47,9.29c-.08-.04-.16-.08-.25-.11-.14-2.66-1.6-4.18-4.04-4.2-.01,0-.02,0-.03,0-1.46,0-2.67.62-3.42,1.76l1.34.92c.56-.85,1.43-1.03,2.08-1.03,0,0,.01,0,.02,0,.8,0,1.41.24,1.8.69.29.33.48.79.57,1.37-.71-.12-1.48-.16-2.31-.11-2.32.13-3.81,1.49-3.71,3.37.05.95.53,1.77,1.34,2.31.69.45,1.57.67,2.49.62,1.21-.07,2.16-.53,2.83-1.38.5-.64.82-1.48.96-2.52.58.35,1.01.81,1.24,1.36.4.94.43,2.48-.83,3.74-1.1,1.1-2.43,1.58-4.43,1.59-2.22-.02-3.9-.73-4.99-2.12-1.02-1.3-1.55-3.18-1.57-5.58.02-2.4.55-4.28,1.57-5.58,1.09-1.39,2.77-2.1,4.99-2.12,2.24.02,3.95.73,5.08,2.13.56.68.98,1.54,1.25,2.55l1.57-.42c-.33-1.23-.86-2.3-1.58-3.18-1.45-1.79-3.58-2.7-6.32-2.72h-.01c-2.73.02-4.84.94-6.25,2.73-1.26,1.6-1.9,3.82-1.93,6.61h0s0,.01,0,.01c.02,2.79.67,5.01,1.93,6.61,1.41,1.8,3.51,2.71,6.25,2.73h.01c2.43-.02,4.14-.65,5.55-2.06,1.85-1.84,1.79-4.16,1.18-5.58-.44-1.02-1.27-1.84-2.41-2.39Zm-4.2,3.95c-1.02.06-2.07-.4-2.12-1.38-.04-.72.52-1.53,2.19-1.63.19-.01.38-.02.56-.02.61,0,1.17.06,1.69.17-.19,2.41-1.32,2.8-2.32,2.85Z" />
1740
+ </svg>`
1741
+ },
1742
+ tiktok: {
1743
+ category: "brands",
1744
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1745
+ <path d="M17.24,6V8.82a6.79,6.79,0,0,1-4-1.28v5.81A5.26,5.26,0,1,1,8,8.1a4.36,4.36,0,0,1,.72.05v2.9A2.57,2.57,0,0,0,7.64,11a2.4,2.4,0,1,0,2.77,2.38V2h2.86a4,4,0,0,0,1.84,3.38A4,4,0,0,0,17.24,6Z" />
1746
+ </svg>`
1747
+ },
1748
+ tripadvisor: {
1749
+ category: "brands",
1750
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1751
+ <path d="M19.021,7.866C19.256,6.862,20,5.854,20,5.854h-3.346C14.781,4.641,12.504,4,9.98,4C7.363,4,4.999,4.651,3.135,5.876H0
1752
+ c0,0,0.738,0.987,0.976,1.988c-0.611,0.837-0.973,1.852-0.973,2.964c0,2.763,2.249,5.009,5.011,5.009
1753
+ c1.576,0,2.976-0.737,3.901-1.879l1.063,1.599l1.075-1.615c0.475,0.611,1.1,1.111,1.838,1.451c1.213,0.547,2.574,0.612,3.825,0.15
1754
+ c2.589-0.963,3.913-3.852,2.964-6.439c-0.175-0.463-0.4-0.876-0.675-1.238H19.021z M16.38,14.594
1755
+ c-1.002,0.371-2.088,0.328-3.06-0.119c-0.688-0.317-1.252-0.817-1.657-1.438c-0.164-0.25-0.313-0.52-0.417-0.811
1756
+ c-0.124-0.328-0.186-0.668-0.217-1.014c-0.063-0.689,0.037-1.396,0.339-2.043c0.448-0.971,1.251-1.71,2.25-2.079
1757
+ c2.075-0.765,4.375,0.3,5.14,2.366c0.762,2.066-0.301,4.37-2.363,5.134L16.38,14.594L16.38,14.594z M8.322,13.066
1758
+ c-0.72,1.059-1.935,1.76-3.309,1.76c-2.207,0-4.001-1.797-4.001-3.996c0-2.203,1.795-4.002,4.001-4.002
1759
+ c2.204,0,3.999,1.8,3.999,4.002c0,0.137-0.024,0.261-0.04,0.396c-0.067,0.678-0.284,1.313-0.648,1.853v-0.013H8.322z M2.472,10.775
1760
+ c0,1.367,1.112,2.479,2.476,2.479c1.363,0,2.472-1.11,2.472-2.479c0-1.359-1.11-2.468-2.472-2.468
1761
+ C3.584,8.306,2.473,9.416,2.472,10.775L2.472,10.775z M12.514,10.775c0,1.367,1.104,2.479,2.471,2.479
1762
+ c1.363,0,2.474-1.108,2.474-2.479c0-1.359-1.11-2.468-2.474-2.468c-1.364,0-2.477,1.109-2.477,2.468H12.514z M3.324,10.775
1763
+ c0-0.893,0.726-1.618,1.614-1.618c0.889,0,1.625,0.727,1.625,1.618c0,0.898-0.725,1.627-1.625,1.627
1764
+ c-0.901,0-1.625-0.729-1.625-1.627H3.324z M13.354,10.775c0-0.893,0.726-1.618,1.627-1.618c0.886,0,1.61,0.727,1.61,1.618
1765
+ c0,0.898-0.726,1.627-1.626,1.627s-1.625-0.729-1.625-1.627H13.354z M9.977,4.875c1.798,0,3.425,0.324,4.849,0.968
1766
+ c-0.535,0.015-1.061,0.108-1.586,0.3c-1.264,0.463-2.264,1.388-2.815,2.604c-0.262,0.551-0.398,1.133-0.448,1.72
1767
+ C9.79,7.905,7.677,5.873,5.076,5.82C6.501,5.208,8.153,4.875,9.94,4.875H9.977z" />
1768
+ </svg>`
1769
+ },
1770
+ tumblr: {
1771
+ category: "brands",
1772
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1773
+ <path d="M6.885,8.598c0,0,0,3.393,0,4.996c0,0.282,0,0.66,0.094,0.942c0.377,1.509,1.131,2.545,2.545,3.11 c1.319,0.472,2.356,0.472,3.676,0c0.565-0.188,1.132-0.659,1.132-0.659l-0.849-2.263c0,0-1.036,0.378-1.603,0.283 c-0.565-0.094-1.226-0.66-1.226-1.508c0-1.603,0-4.902,0-4.902h2.828V5.771h-2.828V2H8.205c0,0-0.094,0.66-0.188,0.942 C7.828,3.791,7.262,4.733,6.603,5.394C5.848,6.147,5,6.43,5,6.43v2.168H6.885z" />
1774
+ </svg>`
1775
+ },
1776
+ twitch: {
1777
+ category: "brands",
1778
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1779
+ <path d="M5.23,1,2,4.23V15.85H5.88v3.23L9.1,15.85h2.59L17.5,10V1Zm11,8.4L13.62,12H11L8.78,14.24V12H5.88V2.29H16.21Z" />
1780
+ <rect x="12.98" y="4.55" width="1.29" height="3.88" />
1781
+ <rect x="9.43" y="4.55" width="1.29" height="3.88" />
1782
+ </svg>`
1783
+ },
1784
+ uikit: {
1785
+ category: "brands",
1786
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1787
+ <polygon points="14.4,3.1 11.3,5.1 15,7.3 15,12.9 10,15.7 5,12.9 5,8.5 2,6.8 2,14.8 9.9,19.5 18,14.8 18,5.3" />
1788
+ <polygon points="9.8,4.2 6.7,2.4 9.8,0.4 12.9,2.3" />
1789
+ </svg>`
1790
+ },
1791
+ vimeo: {
1792
+ category: "brands",
1793
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1794
+ <path d="M2.065,7.59C1.84,7.367,1.654,7.082,1.468,6.838c-0.332-0.42-0.137-0.411,0.274-0.772c1.026-0.91,2.004-1.896,3.127-2.688 c1.017-0.713,2.365-1.173,3.286-0.039c0.849,1.045,0.869,2.629,1.084,3.891c0.215,1.309,0.421,2.648,0.88,3.901 c0.127,0.352,0.37,1.018,0.81,1.074c0.567,0.078,1.145-0.917,1.408-1.289c0.684-0.987,1.611-2.317,1.494-3.587 c-0.115-1.349-1.572-1.095-2.482-0.773c0.146-1.514,1.555-3.216,2.912-3.792c1.439-0.597,3.579-0.587,4.302,1.036 c0.772,1.759,0.078,3.802-0.763,5.396c-0.918,1.731-2.1,3.333-3.363,4.829c-1.114,1.329-2.432,2.787-4.093,3.422 c-1.897,0.723-3.021-0.686-3.667-2.318c-0.705-1.777-1.056-3.771-1.565-5.621C4.898,8.726,4.644,7.836,4.136,7.191 C3.473,6.358,2.72,7.141,2.065,7.59C1.977,7.502,2.115,7.551,2.065,7.59L2.065,7.59z" />
1795
+ </svg>`
1796
+ },
1797
+ whatsapp: {
1798
+ category: "brands",
1799
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1800
+ <path d="M16.7,3.3c-1.8-1.8-4.1-2.8-6.7-2.8c-5.2,0-9.4,4.2-9.4,9.4c0,1.7,0.4,3.3,1.3,4.7l-1.3,4.9l5-1.3c1.4,0.8,2.9,1.2,4.5,1.2 l0,0l0,0c5.2,0,9.4-4.2,9.4-9.4C19.5,7.4,18.5,5,16.7,3.3 M10.1,17.7L10.1,17.7c-1.4,0-2.8-0.4-4-1.1l-0.3-0.2l-3,0.8l0.8-2.9 l-0.2-0.3c-0.8-1.2-1.2-2.7-1.2-4.2c0-4.3,3.5-7.8,7.8-7.8c2.1,0,4.1,0.8,5.5,2.3c1.5,1.5,2.3,3.4,2.3,5.5 C17.9,14.2,14.4,17.7,10.1,17.7 M14.4,11.9c-0.2-0.1-1.4-0.7-1.6-0.8c-0.2-0.1-0.4-0.1-0.5,0.1c-0.2,0.2-0.6,0.8-0.8,0.9 c-0.1,0.2-0.3,0.2-0.5,0.1c-0.2-0.1-1-0.4-1.9-1.2c-0.7-0.6-1.2-1.4-1.3-1.6c-0.1-0.2,0-0.4,0.1-0.5C8,8.8,8.1,8.7,8.2,8.5 c0.1-0.1,0.2-0.2,0.2-0.4c0.1-0.2,0-0.3,0-0.4C8.4,7.6,7.9,6.5,7.7,6C7.5,5.5,7.3,5.6,7.2,5.6c-0.1,0-0.3,0-0.4,0 c-0.2,0-0.4,0.1-0.6,0.3c-0.2,0.2-0.8,0.8-0.8,2c0,1.2,0.8,2.3,1,2.4c0.1,0.2,1.7,2.5,4,3.5c0.6,0.2,1,0.4,1.3,0.5 c0.6,0.2,1.1,0.2,1.5,0.1c0.5-0.1,1.4-0.6,1.6-1.1c0.2-0.5,0.2-1,0.1-1.1C14.8,12.1,14.6,12,14.4,11.9" />
1801
+ </svg>`
1802
+ },
1803
+ wordpress: {
1804
+ category: "brands",
1805
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1806
+ <path d="M10,0.5c-5.2,0-9.5,4.3-9.5,9.5s4.3,9.5,9.5,9.5c5.2,0,9.5-4.3,9.5-9.5S15.2,0.5,10,0.5L10,0.5L10,0.5z M15.6,3.9h-0.1 c-0.8,0-1.4,0.7-1.4,1.5c0,0.7,0.4,1.3,0.8,1.9c0.3,0.6,0.7,1.3,0.7,2.3c0,0.7-0.3,1.5-0.6,2.7L14.1,15l-3-8.9 c0.5,0,0.9-0.1,0.9-0.1C12.5,6,12.5,5.3,12,5.4c0,0-1.3,0.1-2.2,0.1C9,5.5,7.7,5.4,7.7,5.4C7.2,5.3,7.2,6,7.6,6c0,0,0.4,0.1,0.9,0.1 l1.3,3.5L8,15L5,6.1C5.5,6.1,5.9,6,5.9,6C6.4,6,6.3,5.3,5.9,5.4c0,0-1.3,0.1-2.2,0.1c-0.2,0-0.3,0-0.5,0c1.5-2.2,4-3.7,6.9-3.7 C12.2,1.7,14.1,2.6,15.6,3.9L15.6,3.9L15.6,3.9z M2.5,6.6l3.9,10.8c-2.7-1.3-4.6-4.2-4.6-7.4C1.8,8.8,2,7.6,2.5,6.6L2.5,6.6L2.5,6.6 z M10.2,10.7l2.5,6.9c0,0,0,0.1,0.1,0.1C11.9,18,11,18.2,10,18.2c-0.8,0-1.6-0.1-2.3-0.3L10.2,10.7L10.2,10.7L10.2,10.7z M14.2,17.1 l2.5-7.3c0.5-1.2,0.6-2.1,0.6-2.9c0-0.3,0-0.6-0.1-0.8c0.6,1.2,1,2.5,1,4C18.3,13,16.6,15.7,14.2,17.1L14.2,17.1L14.2,17.1z" />
1807
+ </svg>`
1808
+ },
1809
+ x: {
1810
+ category: "brands",
1811
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1812
+ <path d="m15.08,2.1h2.68l-5.89,6.71,6.88,9.1h-5.4l-4.23-5.53-4.84,5.53H1.59l6.24-7.18L1.24,2.1h5.54l3.82,5.05,4.48-5.05Zm-.94,14.23h1.48L6,3.61h-1.6l9.73,12.71h0Z" />
1813
+ </svg>`
1814
+ },
1815
+ xing: {
1816
+ category: "brands",
1817
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1818
+ <path d="M4.4,4.56 C4.24,4.56 4.11,4.61 4.05,4.72 C3.98,4.83 3.99,4.97 4.07,5.12 L5.82,8.16 L5.82,8.17 L3.06,13.04 C2.99,13.18 2.99,13.33 3.06,13.44 C3.12,13.55 3.24,13.62 3.4,13.62 L6,13.62 C6.39,13.62 6.57,13.36 6.71,13.12 C6.71,13.12 9.41,8.35 9.51,8.16 C9.49,8.14 7.72,5.04 7.72,5.04 C7.58,4.81 7.39,4.56 6.99,4.56 L4.4,4.56 L4.4,4.56 Z" />
1819
+ <path d="M15.3,1 C14.91,1 14.74,1.25 14.6,1.5 C14.6,1.5 9.01,11.42 8.82,11.74 C8.83,11.76 12.51,18.51 12.51,18.51 C12.64,18.74 12.84,19 13.23,19 L15.82,19 C15.98,19 16.1,18.94 16.16,18.83 C16.23,18.72 16.23,18.57 16.16,18.43 L12.5,11.74 L12.5,11.72 L18.25,1.56 C18.32,1.42 18.32,1.27 18.25,1.16 C18.21,1.06 18.08,1 17.93,1 L15.3,1 L15.3,1 Z" />
1820
+ </svg>`
1821
+ },
1822
+ yelp: {
1823
+ category: "brands",
1824
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1825
+ <path d="M17.175,14.971c-0.112,0.77-1.686,2.767-2.406,3.054c-0.246,0.1-0.487,0.076-0.675-0.069
1826
+ c-0.122-0.096-2.446-3.859-2.446-3.859c-0.194-0.293-0.157-0.682,0.083-0.978c0.234-0.284,0.581-0.393,0.881-0.276
1827
+ c0.016,0.01,4.21,1.394,4.332,1.482c0.178,0.148,0.263,0.379,0.225,0.646L17.175,14.971L17.175,14.971z M11.464,10.789
1828
+ c-0.203-0.307-0.199-0.666,0.009-0.916c0,0,2.625-3.574,2.745-3.657c0.203-0.135,0.452-0.141,0.69-0.025
1829
+ c0.691,0.335,2.085,2.405,2.167,3.199v0.027c0.024,0.271-0.082,0.491-0.273,0.623c-0.132,0.083-4.43,1.155-4.43,1.155
1830
+ c-0.322,0.096-0.68-0.06-0.882-0.381L11.464,10.789z M9.475,9.563C9.32,9.609,8.848,9.757,8.269,8.817c0,0-3.916-6.16-4.007-6.351
1831
+ c-0.057-0.212,0.011-0.455,0.202-0.65C5.047,1.211,8.21,0.327,9.037,0.529c0.27,0.069,0.457,0.238,0.522,0.479
1832
+ c0.047,0.266,0.433,5.982,0.488,7.264C10.098,9.368,9.629,9.517,9.475,9.563z M9.927,19.066c-0.083,0.225-0.273,0.373-0.54,0.421
1833
+ c-0.762,0.13-3.15-0.751-3.647-1.342c-0.096-0.131-0.155-0.262-0.167-0.394c-0.011-0.095,0-0.189,0.036-0.272
1834
+ c0.061-0.155,2.917-3.538,2.917-3.538c0.214-0.272,0.595-0.355,0.952-0.213c0.345,0.13,0.56,0.428,0.536,0.749
1835
+ C10.014,14.479,9.977,18.923,9.927,19.066z M3.495,13.912c-0.235-0.009-0.444-0.148-0.568-0.382c-0.089-0.17-0.151-0.453-0.19-0.794
1836
+ C2.63,11.701,2.761,10.144,3.07,9.648c0.145-0.226,0.357-0.345,0.592-0.336c0.154,0,4.255,1.667,4.255,1.667
1837
+ c0.321,0.118,0.521,0.453,0.5,0.833c-0.023,0.37-0.236,0.655-0.551,0.738L3.495,13.912z" />
1838
+ </svg>`
1839
+ },
1840
+ yootheme: {
1841
+ category: "brands",
1842
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1843
+ <path d="m16.15,5.48c-1.37,0-2.45.61-3.11,1.54-.66-.93-1.74-1.54-3.11-1.54-1.75,0-3.03,1-3.57,2.41v-2.22h-2.01v4.45c0,.85-.31,1.35-1.18,1.35s-1.18-.5-1.18-1.35v-4.45H0v4.86c0,.7.17,1.33.53,1.82.34.49.88.85,1.6,1v3.16h2.1v-3.16c1.28-.28,1.96-1.17,2.1-2.35.52,1.44,1.81,2.48,3.59,2.48,1.37,0,2.45-.61,3.11-1.54.66.93,1.74,1.54,3.11,1.54,2.37,0,3.85-1.82,3.85-4s-1.49-4-3.85-4Zm-6.22,5.99c-1.11,0-1.85-.72-1.85-1.99s.74-1.99,1.85-1.99,1.85.72,1.85,1.99-.74,1.99-1.85,1.99Zm6.22,0c-1.11,0-1.85-.72-1.85-1.99s.74-1.99,1.85-1.99,1.85.72,1.85,1.99-.74,1.99-1.85,1.99Z" />
1844
+ </svg>`
1845
+ },
1846
+ youtube: {
1847
+ category: "brands",
1848
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1849
+ <path d="M15,4.1c1,0.1,2.3,0,3,0.8c0.8,0.8,0.9,2.1,0.9,3.1C19,9.2,19,10.9,19,12c-0.1,1.1,0,2.4-0.5,3.4c-0.5,1.1-1.4,1.5-2.5,1.6 c-1.2,0.1-8.6,0.1-11,0c-1.1-0.1-2.4-0.1-3.2-1c-0.7-0.8-0.7-2-0.8-3C1,11.8,1,10.1,1,8.9c0-1.1,0-2.4,0.5-3.4C2,4.5,3,4.3,4.1,4.2 C5.3,4.1,12.6,4,15,4.1z M8,7.5v6l5.5-3L8,7.5z" />
1850
+ </svg>`
1851
+ }
1852
+ };
1853
+ var getSvgDimensions = (svg) => {
1854
+ const viewBoxMatch = svg.match(/viewBox="[^"]*\s+[^"]*\s+([0-9.]+)\s+([0-9.]+)"/);
1855
+ if (viewBoxMatch) {
1856
+ return {
1857
+ naturalWidth: parseFloat(viewBoxMatch[1]),
1858
+ naturalHeight: parseFloat(viewBoxMatch[2])
1859
+ };
1860
+ }
1861
+ const widthMatch = svg.match(/width="([0-9.]+)"/);
1862
+ const heightMatch = svg.match(/height="([0-9.]+)"/);
1863
+ if (widthMatch && heightMatch) {
1864
+ return {
1865
+ naturalWidth: parseFloat(widthMatch[1]),
1866
+ naturalHeight: parseFloat(heightMatch[1])
1867
+ };
1868
+ }
1869
+ console.warn(
1870
+ "[react-uikit] Icon SVG is missing both viewBox and width/height attributes. Falling back to 20x20."
1871
+ );
1872
+ return {
1873
+ naturalWidth: 20,
1874
+ naturalHeight: 20
1875
+ };
1876
+ };
1877
+ var getIconSvg = (name, ratio = 1) => {
1878
+ const rawSvg = registry[name].svg;
1879
+ const { naturalWidth, naturalHeight } = getSvgDimensions(rawSvg);
1880
+ const scaledWidth = Math.round(naturalWidth * ratio);
1881
+ const scaledHeight = Math.round(naturalHeight * ratio);
1882
+ const svg = rawSvg.replace(/^<svg([^>]*)>/, (_, attrs) => {
1883
+ const cleaned = attrs.replace(/\s*width="[^"]*"/, "").replace(/\s*height="[^"]*"/, "");
1884
+ return `<svg${cleaned} width="${scaledWidth}" height="${scaledHeight}" aria-hidden="true">`;
1885
+ });
1886
+ return svg;
1887
+ };
1888
+ var getIconCategory = (name) => registry[name].category;
1889
+ var getIconsByCategory = () => {
1890
+ const groups = {};
1891
+ for (const name of Object.keys(registry)) {
1892
+ const { category } = registry[name];
1893
+ (groups[category] ?? (groups[category] = [])).push(name);
1894
+ }
1895
+ return groups;
1896
+ };
1897
+
1898
+ // src/components/Icon/Icon.tsx
1899
+ import { jsx as jsx7 } from "react/jsx-runtime";
1900
+ var Icon2 = ({ ref, name, label, ratio = 1, className, ...props }) => {
1901
+ const svg = getIconSvg(name, ratio);
1902
+ const classes = cn("uk-icon", className);
1903
+ return /* @__PURE__ */ jsx7(
1904
+ "span",
1905
+ {
1906
+ ref,
1907
+ className: classes,
1908
+ role: label ? "img" : void 0,
1909
+ "aria-label": label,
1910
+ "aria-hidden": label ? void 0 : "true",
1911
+ dangerouslySetInnerHTML: { __html: svg },
1912
+ ...props
1913
+ }
1914
+ );
1915
+ };
1916
+
1917
+ // src/components/OffCanvas/OffCanvas.tsx
1918
+ import * as React9 from "react";
1919
+ import { createPortal } from "react-dom";
1920
+ import FocusLock from "react-focus-lock";
1921
+ import { RemoveScroll } from "react-remove-scroll";
1922
+ import UIkit3 from "uikit";
1923
+ import { jsx as jsx8 } from "react/jsx-runtime";
1924
+ var OffCanvasRoot = ({
1925
+ open,
1926
+ onClose,
1927
+ overlay = false,
1928
+ flip = false,
1929
+ mode = "slide",
1930
+ escClose = true,
1931
+ bgClose = true,
1932
+ swiping = true,
1933
+ children
1934
+ }) => {
1935
+ const ref = React9.useRef(null);
1936
+ const onCloseRef = React9.useRef(onClose);
1937
+ useIsomorphicLayoutEffect(() => {
1938
+ onCloseRef.current = onClose;
1939
+ }, [onClose]);
1940
+ useIsomorphicLayoutEffect(() => {
1941
+ if (ref.current) {
1942
+ const el = ref.current;
1943
+ const _offcanvas = UIkit3.offcanvas(el);
1944
+ if (open) {
1945
+ _offcanvas.show();
1946
+ } else {
1947
+ _offcanvas.hide();
1948
+ }
1949
+ const handleHidden = () => onCloseRef.current();
1950
+ UIkit3.util.on(el, "hidden", handleHidden);
1951
+ return () => {
1952
+ UIkit3.util.off(el, "hidden", handleHidden);
1953
+ };
1954
+ }
1955
+ }, [open]);
1956
+ return createPortal(
1957
+ /* @__PURE__ */ jsx8(FocusLock, { disabled: overlay || !open, returnFocus: true, children: /* @__PURE__ */ jsx8(RemoveScroll, { enabled: !overlay && open, children: /* @__PURE__ */ jsx8(
1958
+ "div",
1959
+ {
1960
+ ref,
1961
+ className: "uk-offcanvas",
1962
+ "data-uk-offcanvas": `mode: ${mode}; overlay: ${overlay}; flip: ${flip}; esc-close: ${escClose}; bg-close: ${bgClose}; swiping: ${swiping}`,
1963
+ children
1964
+ }
1965
+ ) }) }),
1966
+ document.body
1967
+ );
1968
+ };
1969
+ var OffCanvasBar = ({ className, children, ...props }) => {
1970
+ const classes = cn("uk-offcanvas-bar", className);
1971
+ if (isDev) {
1972
+ if (!props["aria-label"] && !props["aria-labelledby"]) {
1973
+ console.warn(
1974
+ "[react-uikit] OffCanvasBar: provide either aria-label or aria-labelledby for screen reader accessibility."
1975
+ );
1976
+ }
1977
+ }
1978
+ return /* @__PURE__ */ jsx8("div", { className: classes, ...props, children });
1979
+ };
1980
+ var OffCanvas = {
1981
+ Root: OffCanvasRoot,
1982
+ Bar: OffCanvasBar
1983
+ };
1984
+
1985
+ // src/components/Switcher/Switcher.tsx
1986
+ import * as React11 from "react";
1987
+
1988
+ // src/components/Switcher/SwitcherContext.ts
1989
+ import * as React10 from "react";
1990
+ var SwitcherContext = React10.createContext(null);
1991
+ var useSwitcherContext = () => {
1992
+ const context = React10.useContext(SwitcherContext);
1993
+ if (!context) {
1994
+ throw new Error("Switcher components must be wrapped in <Switcher.Root>");
1995
+ }
1996
+ return context;
1997
+ };
1998
+ var ContainerContext = React10.createContext(null);
1999
+ var useContainerContext = () => {
2000
+ const context = React10.useContext(ContainerContext);
2001
+ if (!context) {
2002
+ throw new Error("Switcher.Panel must be wrapped in <Switcher.Container>");
2003
+ }
2004
+ return context;
2005
+ };
2006
+ var resolveIndex = (index, count) => index < 0 && count > 0 ? (index % count + count) % count : index;
2007
+ var resolveTarget = (target, current, count) => {
2008
+ if (count <= 0) return null;
2009
+ const base = resolveIndex(current, count);
2010
+ if (target === "next") return (base + 1) % count;
2011
+ if (target === "previous") return (base - 1 + count) % count;
2012
+ return resolveIndex(target, count);
2013
+ };
2014
+ var claimIndex = (registry2, id) => {
2015
+ if (!registry2.includes(id)) {
2016
+ registry2.push(id);
2017
+ }
2018
+ return registry2.indexOf(id);
2019
+ };
2020
+
2021
+ // src/components/Switcher/Switcher.tsx
2022
+ import { jsx as jsx9 } from "react/jsx-runtime";
2023
+ var DEFAULT_ANIMATION_DURATION_MS = 200;
2024
+ var parseAnimation = (animation) => {
2025
+ if (!animation) return null;
2026
+ const parts = animation.split(",").map((s) => s.trim());
2027
+ return {
2028
+ in: parts[0],
2029
+ // e.g. "uk-animation-fade"
2030
+ out: parts[1] ?? parts[0]
2031
+ // Falls back to same class for single-animation mode.
2032
+ };
2033
+ };
2034
+ var SwitcherRoot = ({
2035
+ children,
2036
+ defaultValue = 0,
2037
+ value,
2038
+ onValueChange,
2039
+ animation,
2040
+ duration = DEFAULT_ANIMATION_DURATION_MS,
2041
+ followFocus = false,
2042
+ swiping = true
2043
+ }) => {
2044
+ const [selectedIndex = 0, setSelectedIndex] = useControllableState({
2045
+ prop: value,
2046
+ defaultProp: defaultValue,
2047
+ onChange: onValueChange
2048
+ });
2049
+ const [focusedIndex, setFocusedIndex] = React11.useState(null);
2050
+ React11.useEffect(() => {
2051
+ setFocusedIndex(null);
2052
+ }, [selectedIndex]);
2053
+ const triggerRegistry = [];
2054
+ const containerRegistry = [];
2055
+ const baseId = "ruk-switcher-" + React11.useId().replace(/:/g, "");
2056
+ const [triggerCount, setTriggerCount] = React11.useState(0);
2057
+ React11.useLayoutEffect(() => {
2058
+ if (triggerCount !== triggerRegistry.length) {
2059
+ setTriggerCount(triggerRegistry.length);
2060
+ }
2061
+ });
2062
+ return /* @__PURE__ */ jsx9(
2063
+ SwitcherContext,
2064
+ {
2065
+ value: {
2066
+ baseId,
2067
+ triggerRegistry,
2068
+ containerRegistry,
2069
+ triggerCount,
2070
+ selectedIndex,
2071
+ setSelectedIndex,
2072
+ animation,
2073
+ duration,
2074
+ swiping,
2075
+ followFocus,
2076
+ focusedIndex,
2077
+ setFocusedIndex
2078
+ },
2079
+ children
2080
+ }
2081
+ );
2082
+ };
2083
+ var SwitcherList = ({ children, className, ref, ...props }) => /* @__PURE__ */ jsx9("ul", { ref, role: "tablist", className: cn("ruk-switcher-list", className), ...props, children });
2084
+ var SwitcherTrigger = ({
2085
+ children,
2086
+ className,
2087
+ onClick,
2088
+ onKeyDown,
2089
+ onFocus,
2090
+ ...props
2091
+ }) => {
2092
+ const useButtonStyle = className?.includes("uk-button");
2093
+ const Comp = useButtonStyle ? "button" : UnstyledButton_default;
2094
+ const {
2095
+ baseId,
2096
+ triggerRegistry,
2097
+ selectedIndex,
2098
+ setSelectedIndex,
2099
+ followFocus,
2100
+ focusedIndex,
2101
+ setFocusedIndex,
2102
+ triggerCount
2103
+ } = useSwitcherContext();
2104
+ const id = React11.useId();
2105
+ const triggerIndex = claimIndex(triggerRegistry, id);
2106
+ const resolvedSelectedIndex = resolveIndex(selectedIndex, triggerCount);
2107
+ const isActive = triggerIndex === resolvedSelectedIndex;
2108
+ const isFocusable = (focusedIndex ?? resolvedSelectedIndex) === triggerIndex;
2109
+ const triggerId = `${baseId}-trigger-${triggerIndex}`;
2110
+ const panelId = `${baseId}-panel-0-${triggerIndex}`;
2111
+ const handleClick = (event) => {
2112
+ onClick?.(event);
2113
+ if (event.defaultPrevented || props.disabled || triggerIndex < 0) return;
2114
+ setSelectedIndex(triggerIndex);
2115
+ };
2116
+ const handleKeyDown = (event) => {
2117
+ onKeyDown?.(event);
2118
+ if (event.defaultPrevented || props.disabled || triggerIndex < 0) return;
2119
+ const length = triggerRegistry.length;
2120
+ let nextIndex = null;
2121
+ switch (event.key) {
2122
+ case "ArrowRight":
2123
+ nextIndex = (triggerIndex + 1) % length;
2124
+ break;
2125
+ case "ArrowLeft":
2126
+ nextIndex = (triggerIndex - 1 + length) % length;
2127
+ break;
2128
+ case "Home":
2129
+ nextIndex = 0;
2130
+ break;
2131
+ case "End":
2132
+ nextIndex = length - 1;
2133
+ break;
2134
+ case "Enter":
2135
+ case " ":
2136
+ setSelectedIndex(triggerIndex);
2137
+ event.preventDefault();
2138
+ return;
2139
+ default:
2140
+ return;
2141
+ }
2142
+ if (nextIndex !== null && nextIndex !== triggerIndex) {
2143
+ event.preventDefault();
2144
+ if (followFocus) {
2145
+ setSelectedIndex(nextIndex);
2146
+ }
2147
+ const nextTriggerId = `${baseId}-trigger-${nextIndex}`;
2148
+ document.getElementById(nextTriggerId)?.focus();
2149
+ }
2150
+ };
2151
+ const handleFocus = (event) => {
2152
+ onFocus?.(event);
2153
+ setFocusedIndex(triggerIndex);
2154
+ };
2155
+ return /* @__PURE__ */ jsx9("li", { role: "presentation", className: cn(isActive && "uk-active"), children: /* @__PURE__ */ jsx9(
2156
+ Comp,
2157
+ {
2158
+ ...props,
2159
+ id: triggerId,
2160
+ "aria-controls": panelId,
2161
+ "aria-selected": isActive,
2162
+ tabIndex: isFocusable ? 0 : -1,
2163
+ className: cn(
2164
+ "ruk-switcher-trigger-button",
2165
+ useButtonStyle && isActive ? "uk-active" : "",
2166
+ className
2167
+ ),
2168
+ role: "tab",
2169
+ type: props.type ?? "button",
2170
+ onClick: handleClick,
2171
+ onKeyDown: handleKeyDown,
2172
+ onFocus: handleFocus,
2173
+ children
2174
+ }
2175
+ ) });
2176
+ };
2177
+ var SwitcherContainer = ({
2178
+ children,
2179
+ className,
2180
+ ref,
2181
+ ...props
2182
+ }) => {
2183
+ const { containerRegistry, swiping, triggerRegistry, selectedIndex, setSelectedIndex } = useSwitcherContext();
2184
+ const id = React11.useId();
2185
+ const containerIndex = claimIndex(containerRegistry, id);
2186
+ const panelRegistry = [];
2187
+ const [panelCount, setPanelCount] = React11.useState(0);
2188
+ React11.useLayoutEffect(() => {
2189
+ if (panelCount !== panelRegistry.length) {
2190
+ setPanelCount(panelRegistry.length);
2191
+ }
2192
+ });
2193
+ const [animGen, setAnimGen] = React11.useState(0);
2194
+ const notifyOutComplete = React11.useCallback(() => {
2195
+ setAnimGen((g) => g + 1);
2196
+ }, []);
2197
+ const localRef = React11.useRef(null);
2198
+ useSwipe(localRef, {
2199
+ enabled: swiping,
2200
+ onSwipeLeft: () => {
2201
+ const nextIndex = resolveTarget("next", selectedIndex, triggerRegistry.length);
2202
+ if (nextIndex !== null) setSelectedIndex(nextIndex);
2203
+ },
2204
+ onSwipeRight: () => {
2205
+ const prevIndex = resolveTarget("previous", selectedIndex, triggerRegistry.length);
2206
+ if (prevIndex !== null) setSelectedIndex(prevIndex);
2207
+ }
2208
+ });
2209
+ return /* @__PURE__ */ jsx9(
2210
+ ContainerContext,
2211
+ {
2212
+ value: {
2213
+ panelRegistry,
2214
+ containerIndex,
2215
+ panelCount,
2216
+ animationGeneration: animGen,
2217
+ notifyOutComplete
2218
+ },
2219
+ children: /* @__PURE__ */ jsx9(
2220
+ "div",
2221
+ {
2222
+ ...props,
2223
+ ref: (node) => {
2224
+ localRef.current = node;
2225
+ if (typeof ref === "function") {
2226
+ ref(node);
2227
+ } else if (ref) {
2228
+ ref.current = node;
2229
+ }
2230
+ },
2231
+ className: cn("uk-switcher", className),
2232
+ style: { touchAction: swiping ? "pan-y pinch-zoom" : void 0, ...props.style },
2233
+ children
2234
+ }
2235
+ )
2236
+ }
2237
+ );
2238
+ };
2239
+ var SwitcherPanel = ({ children, className, ref, ...props }) => {
2240
+ const { baseId, selectedIndex, animation, duration } = useSwitcherContext();
2241
+ const { panelRegistry, containerIndex, panelCount, animationGeneration, notifyOutComplete } = useContainerContext();
2242
+ const id = React11.useId();
2243
+ const panelIndex = claimIndex(panelRegistry, id);
2244
+ const resolvedSelectedIndex = resolveIndex(selectedIndex, panelCount);
2245
+ const isActive = panelIndex === resolvedSelectedIndex;
2246
+ const animConfig = React11.useMemo(() => parseAnimation(animation), [animation]);
2247
+ const prefersReducedMotion = typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
2248
+ const effectiveAnimConfig = prefersReducedMotion ? null : animConfig;
2249
+ const [phase, setPhase] = React11.useState("idle");
2250
+ const [prevIsActive, setPrevIsActive] = React11.useState(isActive);
2251
+ const [targetGen, setTargetGen] = React11.useState(animationGeneration);
2252
+ if (isActive !== prevIsActive) {
2253
+ setPrevIsActive(isActive);
2254
+ if (!effectiveAnimConfig) {
2255
+ setPhase("idle");
2256
+ } else if (!prevIsActive && isActive) {
2257
+ setPhase("waiting-in");
2258
+ setTargetGen(animationGeneration);
2259
+ } else {
2260
+ setPhase("animating-out");
2261
+ }
2262
+ }
2263
+ React11.useEffect(() => {
2264
+ if (phase === "animating-out") {
2265
+ return () => {
2266
+ notifyOutComplete();
2267
+ };
2268
+ }
2269
+ }, [phase, notifyOutComplete]);
2270
+ React11.useEffect(() => {
2271
+ if (phase === "waiting-in" && animationGeneration > targetGen) {
2272
+ setPhase("animating-in");
2273
+ }
2274
+ }, [phase, animationGeneration, targetGen]);
2275
+ let animClass = "";
2276
+ const isAnimating = phase === "animating-out" || phase === "animating-in";
2277
+ if (phase === "animating-out" && effectiveAnimConfig) {
2278
+ animClass = cn(
2279
+ effectiveAnimConfig.out,
2280
+ "uk-animation",
2281
+ "uk-animation-leave",
2282
+ "uk-animation-reverse"
2283
+ );
2284
+ } else if (phase === "animating-in" && effectiveAnimConfig) {
2285
+ animClass = cn(effectiveAnimConfig.in, "uk-animation", "uk-animation-enter");
2286
+ }
2287
+ const animStyle = isAnimating ? { animationDuration: duration + "ms" } : void 0;
2288
+ const isVisible = isActive && phase !== "waiting-in" || phase === "animating-out";
2289
+ const panelId = `${baseId}-panel-${containerIndex}-${panelIndex}`;
2290
+ const triggerId = `${baseId}-trigger-${panelIndex}`;
2291
+ return /* @__PURE__ */ jsx9(
2292
+ "div",
2293
+ {
2294
+ ...props,
2295
+ ref,
2296
+ role: "tabpanel",
2297
+ "aria-labelledby": triggerId,
2298
+ id: panelId,
2299
+ className: cn(className, isVisible && "uk-active", animClass),
2300
+ style: { ...props.style, ...animStyle },
2301
+ tabIndex: 0,
2302
+ onAnimationEnd: (e) => {
2303
+ if (e.target !== e.currentTarget) return;
2304
+ if (phase === "animating-out" || phase === "animating-in") {
2305
+ setPhase("idle");
2306
+ }
2307
+ props.onAnimationEnd?.(e);
2308
+ },
2309
+ children
2310
+ }
2311
+ );
2312
+ };
2313
+ var SwitcherItem = ({ to, className, onClick, ref, ...props }) => {
2314
+ const { selectedIndex, setSelectedIndex, triggerCount } = useSwitcherContext();
2315
+ const handleClick = (event) => {
2316
+ onClick?.(event);
2317
+ if (event.defaultPrevented || props.disabled) return;
2318
+ const nextIndex = resolveTarget(to, selectedIndex, triggerCount);
2319
+ if (nextIndex !== null) setSelectedIndex(nextIndex);
2320
+ };
2321
+ return /* @__PURE__ */ jsx9(
2322
+ UnstyledButton_default,
2323
+ {
2324
+ ...props,
2325
+ type: props.type ?? "button",
2326
+ className: cn("ruk-switcher-item", className),
2327
+ onClick: handleClick,
2328
+ ref
2329
+ }
2330
+ );
2331
+ };
2332
+ var Switcher = {
2333
+ Root: SwitcherRoot,
2334
+ List: SwitcherList,
2335
+ Trigger: SwitcherTrigger,
2336
+ Container: SwitcherContainer,
2337
+ Panel: SwitcherPanel,
2338
+ Item: SwitcherItem
2339
+ };
2340
+ export {
2341
+ Accordion,
2342
+ Alert,
2343
+ Close,
2344
+ Grid,
2345
+ Icon2 as Icon,
2346
+ OffCanvas,
2347
+ Switcher,
2348
+ cn,
2349
+ getIconCategory,
2350
+ getIconsByCategory
2351
+ };