@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.cjs ADDED
@@ -0,0 +1,2397 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ Accordion: () => Accordion,
34
+ Alert: () => Alert,
35
+ Close: () => Close,
36
+ Grid: () => Grid,
37
+ Icon: () => Icon2,
38
+ OffCanvas: () => OffCanvas,
39
+ Switcher: () => Switcher,
40
+ cn: () => cn,
41
+ getIconCategory: () => getIconCategory,
42
+ getIconsByCategory: () => getIconsByCategory
43
+ });
44
+ module.exports = __toCommonJS(index_exports);
45
+
46
+ // src/components/Accordion/Accordion.tsx
47
+ var React2 = __toESM(require("react"), 1);
48
+
49
+ // src/utils/cn.ts
50
+ var cn = (...classes) => {
51
+ return classes.filter(Boolean).join(" ");
52
+ };
53
+
54
+ // src/utils/dev.ts
55
+ var nodeEnv = globalThis.process?.env?.NODE_ENV;
56
+ var hostname = globalThis.location?.hostname;
57
+ var isLocalDevHost = hostname === "localhost" || hostname === "127.0.0.1";
58
+ var isDev = nodeEnv === "development" || isLocalDevHost;
59
+
60
+ // src/components/UnstyledButton/UnstyledButton.tsx
61
+ var import_jsx_runtime = require("react/jsx-runtime");
62
+ var UnstyledButton = (props) => {
63
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ...props, className: cn("ruk-unstyled-button", props.className) });
64
+ };
65
+ var UnstyledButton_default = UnstyledButton;
66
+
67
+ // src/components/Accordion/AccordionContext.ts
68
+ var React = __toESM(require("react"), 1);
69
+ var AccordionContext = React.createContext(null);
70
+ var useAccordionContext = () => {
71
+ const context = React.useContext(AccordionContext);
72
+ if (!context) {
73
+ throw new Error("Accordion components must be wrapped in <Accordion.Root>");
74
+ }
75
+ return context;
76
+ };
77
+ var AccordionItemContext = React.createContext(null);
78
+ var useAccordionItemContext = () => {
79
+ const context = React.useContext(AccordionItemContext);
80
+ if (!context) {
81
+ throw new Error("Accordion.Trigger and Accordion.Panel must be wrapped in <Accordion.Item>");
82
+ }
83
+ return context;
84
+ };
85
+
86
+ // src/components/Accordion/Icon.tsx
87
+ var import_jsx_runtime2 = require("react/jsx-runtime");
88
+ var Icon = () => {
89
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "uk-icon uk-accordion-icon", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "13", height: "13", viewBox: "0 0 13 13", children: [
90
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M0 6h13v1H0z", className: "line-1", fill: "currentColor" }),
91
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M6 0h1v13H6z", className: "line-2", fill: "currentColor" })
92
+ ] }) });
93
+ };
94
+ var Icon_default = Icon;
95
+
96
+ // src/components/Accordion/Accordion.tsx
97
+ var import_jsx_runtime3 = require("react/jsx-runtime");
98
+ var AccordionRoot = ({
99
+ className,
100
+ children,
101
+ multiple = false,
102
+ collapsible = true,
103
+ defaultOpen = [],
104
+ value,
105
+ onValueChange,
106
+ showIcon = false,
107
+ animation = false,
108
+ ...props
109
+ }) => {
110
+ const [uncontrolledItems, setUncontrolledItems] = React2.useState(
111
+ () => new Set(defaultOpen)
112
+ );
113
+ const baseId = "ruk-accordion-" + React2.useId().replace(/:/g, "");
114
+ const openItems = React2.useMemo(() => {
115
+ return value !== void 0 ? new Set(value) : uncontrolledItems;
116
+ }, [value, uncontrolledItems]);
117
+ const toggle = React2.useCallback(
118
+ (index) => {
119
+ const isOpen = openItems.has(index);
120
+ let next;
121
+ if (isOpen) {
122
+ if (!collapsible && openItems.size <= 1) {
123
+ return;
124
+ }
125
+ next = new Set(openItems);
126
+ next.delete(index);
127
+ } else {
128
+ if (multiple) {
129
+ next = new Set(openItems);
130
+ next.add(index);
131
+ } else {
132
+ next = /* @__PURE__ */ new Set([index]);
133
+ }
134
+ }
135
+ if (value === void 0) {
136
+ setUncontrolledItems(next);
137
+ }
138
+ onValueChange?.(Array.from(next));
139
+ },
140
+ [openItems, collapsible, multiple, value, onValueChange]
141
+ );
142
+ const contextValue = React2.useMemo(
143
+ () => ({
144
+ openItems,
145
+ toggle,
146
+ showIcon,
147
+ baseId,
148
+ animation
149
+ }),
150
+ [openItems, toggle, showIcon, baseId, animation]
151
+ );
152
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AccordionContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { ...props, className: cn("uk-accordion-default uk-accordion", className), children: React2.Children.map(children, (child, index) => {
153
+ if (!React2.isValidElement(child)) {
154
+ return child;
155
+ }
156
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AccordionItemContext.Provider, { value: { index }, children: child });
157
+ }) }) });
158
+ };
159
+ var AccordionItem = ({ children, className, ...props }) => {
160
+ const { openItems } = useAccordionContext();
161
+ const { index } = useAccordionItemContext();
162
+ const isOpen = openItems.has(index);
163
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { ...props, className: cn(isOpen && "uk-open", className), children });
164
+ };
165
+ var AccordionTrigger = ({
166
+ children,
167
+ className,
168
+ onClick,
169
+ ...props
170
+ }) => {
171
+ const { openItems, toggle, showIcon, baseId } = useAccordionContext();
172
+ const { index } = useAccordionItemContext();
173
+ const isOpen = openItems.has(index);
174
+ const triggerId = `${baseId}-trigger-${index}`;
175
+ const panelId = `${baseId}-panel-${index}`;
176
+ const handleClick = (event) => {
177
+ onClick?.(event);
178
+ if (event.defaultPrevented) {
179
+ return;
180
+ }
181
+ toggle(index);
182
+ };
183
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
184
+ UnstyledButton_default,
185
+ {
186
+ ...props,
187
+ "aria-controls": panelId,
188
+ "aria-expanded": isOpen,
189
+ className: cn("uk-width-1-1 uk-accordion-title", "ruk-accordion-trigger", className),
190
+ id: triggerId,
191
+ onClick: handleClick,
192
+ children: [
193
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children }),
194
+ showIcon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon_default, {})
195
+ ]
196
+ }
197
+ );
198
+ };
199
+ var AccordionPanel = ({ children, className, ...props }) => {
200
+ const { openItems, baseId, animation } = useAccordionContext();
201
+ const { index } = useAccordionItemContext();
202
+ const isOpen = openItems.has(index);
203
+ const triggerId = `${baseId}-trigger-${index}`;
204
+ const panelId = `${baseId}-panel-${index}`;
205
+ const contentRef = React2.useRef(null);
206
+ const [height, setHeight] = React2.useState(isOpen ? "auto" : 0);
207
+ const [isHidden, setIsHidden] = React2.useState(!isOpen);
208
+ const isInitialMount = React2.useRef(true);
209
+ React2.useLayoutEffect(() => {
210
+ if (!animation) {
211
+ setHeight(isOpen ? "auto" : 0);
212
+ setIsHidden(!isOpen);
213
+ return;
214
+ }
215
+ if (isInitialMount.current) {
216
+ isInitialMount.current = false;
217
+ return;
218
+ }
219
+ if (!contentRef.current) return;
220
+ const content = contentRef.current;
221
+ if (isOpen) {
222
+ setIsHidden(false);
223
+ setHeight(0);
224
+ requestAnimationFrame(() => {
225
+ if (!contentRef.current) return;
226
+ const style = window.getComputedStyle(contentRef.current);
227
+ const marginTop = parseFloat(style.marginTop) || 0;
228
+ const marginBottom = parseFloat(style.marginBottom) || 0;
229
+ const targetHeight = contentRef.current.offsetHeight + marginTop + marginBottom;
230
+ setHeight(targetHeight);
231
+ });
232
+ } else {
233
+ const style = window.getComputedStyle(content);
234
+ const marginTop = parseFloat(style.marginTop) || 0;
235
+ const marginBottom = parseFloat(style.marginBottom) || 0;
236
+ const currentHeight = content.offsetHeight + marginTop + marginBottom;
237
+ setHeight(currentHeight);
238
+ requestAnimationFrame(() => {
239
+ requestAnimationFrame(() => {
240
+ setHeight(0);
241
+ });
242
+ });
243
+ }
244
+ }, [isOpen, animation]);
245
+ const handleTransitionEnd = (e) => {
246
+ if (!animation || e.target !== e.currentTarget) return;
247
+ if (isOpen) {
248
+ setHeight("auto");
249
+ } else {
250
+ setIsHidden(true);
251
+ }
252
+ };
253
+ if (!animation) {
254
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
255
+ "div",
256
+ {
257
+ ...props,
258
+ "aria-labelledby": triggerId,
259
+ className: cn("uk-accordion-content", className),
260
+ hidden: !isOpen,
261
+ id: panelId,
262
+ role: "region",
263
+ children
264
+ }
265
+ );
266
+ }
267
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
268
+ "div",
269
+ {
270
+ onTransitionEnd: handleTransitionEnd,
271
+ style: {
272
+ overflow: "hidden",
273
+ height: height === "auto" ? "auto" : `${height}px`,
274
+ transition: `height ${typeof animation === "object" && animation.duration || 200}ms ${typeof animation === "object" && animation.transition || "ease"}`
275
+ },
276
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
277
+ "div",
278
+ {
279
+ ...props,
280
+ ref: contentRef,
281
+ "aria-labelledby": triggerId,
282
+ className: cn("uk-accordion-content", className),
283
+ hidden: isHidden,
284
+ id: panelId,
285
+ role: "region",
286
+ children
287
+ }
288
+ )
289
+ }
290
+ );
291
+ };
292
+ var Accordion = {
293
+ Root: AccordionRoot,
294
+ Item: AccordionItem,
295
+ Trigger: AccordionTrigger,
296
+ Panel: AccordionPanel
297
+ };
298
+
299
+ // src/components/Alert/Alert.tsx
300
+ var React4 = __toESM(require("react"), 1);
301
+ var import_uikit = __toESM(require("uikit"), 1);
302
+
303
+ // src/components/Close/Close.tsx
304
+ var React3 = __toESM(require("react"), 1);
305
+ var import_react_slot = require("@radix-ui/react-slot");
306
+ var import_jsx_runtime4 = require("react/jsx-runtime");
307
+ var CloseIcon = () => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
308
+ "svg",
309
+ {
310
+ xmlns: "http://www.w3.org/2000/svg",
311
+ width: "14",
312
+ height: "14",
313
+ viewBox: "0 0 14 14",
314
+ "aria-hidden": "true",
315
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { fill: "none", stroke: "currentColor", strokeWidth: "1.1", d: "m1 1 12 12M13 1 1 13" })
316
+ }
317
+ );
318
+ var CloseLargeIcon = () => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
319
+ "svg",
320
+ {
321
+ xmlns: "http://www.w3.org/2000/svg",
322
+ width: "20",
323
+ height: "20",
324
+ viewBox: "0 0 20 20",
325
+ "aria-hidden": "true",
326
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { fill: "none", stroke: "currentColor", strokeWidth: "1.4", d: "m1 1 18 18M19 1 1 19" })
327
+ }
328
+ );
329
+ var Close = ({
330
+ ref,
331
+ asChild = false,
332
+ className,
333
+ label = "Close",
334
+ large = false,
335
+ type,
336
+ children,
337
+ ...props
338
+ }) => {
339
+ const Comp = asChild ? import_react_slot.Slot : "button";
340
+ const classes = cn("uk-icon", large ? "uk-close-large" : "uk-close", className);
341
+ const compProps = !asChild ? { type: type ?? "button", ...props } : props;
342
+ const icon = large ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseLargeIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, {});
343
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Comp, { ref, className: classes, "aria-label": label, ...compProps, children: asChild && React3.isValidElement(children) ? React3.cloneElement(children, {}, icon) : icon });
344
+ };
345
+
346
+ // src/components/Alert/Alert.tsx
347
+ var import_jsx_runtime5 = require("react/jsx-runtime");
348
+ var Alert = ({
349
+ animation = true,
350
+ className,
351
+ children,
352
+ duration = 150,
353
+ selClose = ".uk-alert-close",
354
+ showCloseButton = true,
355
+ onBeforeHide,
356
+ onHide,
357
+ ...props
358
+ }) => {
359
+ const ref = React4.useRef(null);
360
+ const _alertRef = React4.useRef(null);
361
+ const handleClose = () => {
362
+ if (_alertRef.current) {
363
+ _alertRef.current.close();
364
+ }
365
+ };
366
+ React4.useEffect(() => {
367
+ if (ref.current) {
368
+ const el = ref.current;
369
+ _alertRef.current = import_uikit.default.alert(el, {
370
+ animation,
371
+ // Workaround: UIkit Alert ignores `animation: false`, so we force duration to 0 to simulate it.
372
+ // TODO: update this when UIkit fixes this bug.
373
+ duration: animation ? duration : 0,
374
+ selClose
375
+ });
376
+ }
377
+ }, [animation, duration, selClose]);
378
+ React4.useEffect(() => {
379
+ const el = ref.current;
380
+ if (!el) return;
381
+ const handleBeforeHide = (e) => onBeforeHide?.(e);
382
+ const handleHide = (e) => onHide?.(e);
383
+ el.addEventListener("beforehide", handleBeforeHide);
384
+ el.addEventListener("hide", handleHide);
385
+ return () => {
386
+ el.removeEventListener("beforehide", handleBeforeHide);
387
+ el.removeEventListener("hide", handleHide);
388
+ };
389
+ }, [onBeforeHide, onHide]);
390
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { ref, className: cn("uk-alert", className), ...props, children: [
391
+ children,
392
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Close, { className: "uk-alert-close", label: "Close alert", onClick: handleClose })
393
+ ] });
394
+ };
395
+
396
+ // src/components/Grid/Grid.tsx
397
+ var React8 = __toESM(require("react"), 1);
398
+ var import_uikit2 = __toESM(require("uikit"), 1);
399
+
400
+ // src/hooks/useControllableState.ts
401
+ var React5 = __toESM(require("react"), 1);
402
+ var useControllableState = ({
403
+ prop,
404
+ defaultProp,
405
+ onChange
406
+ }) => {
407
+ const [uncontrolledProp, setUncontrolledProp] = React5.useState(defaultProp);
408
+ const isControlled = prop !== void 0;
409
+ const value = isControlled ? prop : uncontrolledProp;
410
+ const onChangeRef = React5.useRef(onChange);
411
+ const isFirstMount = React5.useRef(true);
412
+ React5.useEffect(() => {
413
+ onChangeRef.current = onChange;
414
+ }, [onChange]);
415
+ const setValue = React5.useCallback(
416
+ (nextValue) => {
417
+ if (isControlled) {
418
+ const setter = nextValue;
419
+ const newValue = typeof nextValue === "function" ? setter(prop) : nextValue;
420
+ if (newValue !== prop) onChangeRef.current?.(newValue);
421
+ } else {
422
+ setUncontrolledProp(nextValue);
423
+ }
424
+ },
425
+ [isControlled, prop]
426
+ );
427
+ React5.useEffect(() => {
428
+ if (isFirstMount.current) {
429
+ isFirstMount.current = false;
430
+ return;
431
+ }
432
+ if (!isControlled && uncontrolledProp !== void 0) {
433
+ onChangeRef.current?.(uncontrolledProp);
434
+ }
435
+ }, [isControlled, uncontrolledProp]);
436
+ return [value, setValue];
437
+ };
438
+
439
+ // src/hooks/useIsomorphicLayoutEffect.ts
440
+ var React6 = __toESM(require("react"), 1);
441
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React6.useLayoutEffect : React6.useEffect;
442
+
443
+ // src/hooks/useGridRowClasses.ts
444
+ var getOffset = (element, useAbsoluteOffset = false) => {
445
+ let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element;
446
+ if (useAbsoluteOffset) {
447
+ const rect = element.getBoundingClientRect();
448
+ offsetTop = rect.top + window.scrollY;
449
+ offsetLeft = rect.left + window.scrollX;
450
+ }
451
+ return {
452
+ top: offsetTop,
453
+ left: offsetLeft,
454
+ bottom: offsetTop + offsetHeight,
455
+ right: offsetLeft + offsetWidth
456
+ };
457
+ };
458
+ var getRows = (elements) => {
459
+ const sortedInRows = [[]];
460
+ const withOffset = elements.some(
461
+ (el, i) => i && elements[i - 1].offsetParent !== el.offsetParent
462
+ );
463
+ for (const el of elements) {
464
+ const currentElement = el;
465
+ if (currentElement.offsetWidth === 0 && currentElement.offsetHeight === 0) {
466
+ continue;
467
+ }
468
+ const currentElementOffset = getOffset(currentElement, withOffset);
469
+ for (let i = sortedInRows.length - 1; i >= 0; i--) {
470
+ const currentRow = sortedInRows[i];
471
+ if (!currentRow[0]) {
472
+ currentRow.push(el);
473
+ break;
474
+ }
475
+ const currentRowFirstElementOffset = getOffset(currentRow[0], withOffset);
476
+ if (currentElementOffset.top >= currentRowFirstElementOffset.bottom - 1 && currentElementOffset.top !== currentRowFirstElementOffset.top) {
477
+ sortedInRows.push([el]);
478
+ break;
479
+ }
480
+ if (currentElementOffset.bottom - 1 > currentRowFirstElementOffset.top || currentElementOffset.top === currentRowFirstElementOffset.top) {
481
+ let j = currentRow.length - 1;
482
+ for (; j >= 0; j--) {
483
+ const rowItemOffset = getOffset(currentRow[j], withOffset);
484
+ if (currentElementOffset.left >= rowItemOffset.left) {
485
+ break;
486
+ }
487
+ }
488
+ currentRow.splice(j + 1, 0, el);
489
+ break;
490
+ }
491
+ if (i === 0) {
492
+ sortedInRows.unshift([el]);
493
+ break;
494
+ }
495
+ }
496
+ }
497
+ return sortedInRows;
498
+ };
499
+ var useGridRowClasses = (ref, skip = false, marginClass = "uk-grid-margin", firstColumnClass = "uk-first-column") => {
500
+ useIsomorphicLayoutEffect(() => {
501
+ const container = ref.current;
502
+ if (!container || skip) return;
503
+ function update() {
504
+ if (!container) return;
505
+ const children = Array.from(container.children);
506
+ const rows = getRows(children);
507
+ for (const row of rows) {
508
+ for (const child of row) {
509
+ const isFirstRow = rows[0] === row;
510
+ const isFirstColumn = row[0] === child;
511
+ child.classList.toggle(marginClass, !isFirstRow);
512
+ child.classList.toggle(firstColumnClass, isFirstColumn);
513
+ }
514
+ }
515
+ }
516
+ update();
517
+ const targets = [container, ...Array.from(container.children)];
518
+ const resizeObs = new ResizeObserver(update);
519
+ for (const target of targets) {
520
+ resizeObs.observe(target);
521
+ }
522
+ const mutationObs = new MutationObserver(() => {
523
+ resizeObs.disconnect();
524
+ const newTargets = [container, ...Array.from(container.children)];
525
+ for (const target of newTargets) {
526
+ resizeObs.observe(target);
527
+ }
528
+ update();
529
+ });
530
+ mutationObs.observe(container, { childList: true });
531
+ return () => {
532
+ resizeObs.disconnect();
533
+ mutationObs.disconnect();
534
+ for (const child of Array.from(container.children)) {
535
+ child.classList.remove(marginClass, firstColumnClass);
536
+ }
537
+ };
538
+ }, [ref, skip, marginClass, firstColumnClass]);
539
+ };
540
+
541
+ // src/hooks/useSwipe.ts
542
+ var React7 = __toESM(require("react"), 1);
543
+ var useSwipe = (ref, { onSwipeLeft, onSwipeRight, threshold = 100, enabled = true }) => {
544
+ React7.useEffect(() => {
545
+ const element = ref.current;
546
+ if (!enabled || !element) return;
547
+ let startX = null;
548
+ let startY = null;
549
+ const onPointerDown = (e) => {
550
+ if (e.pointerType !== "touch") return;
551
+ startX = e.clientX;
552
+ startY = e.clientY;
553
+ };
554
+ const handlePointerEnd = (e) => {
555
+ if (startX === null || startY === null || e.pointerType !== "touch") return;
556
+ const deltaX = e.clientX - startX;
557
+ const deltaY = e.clientY - startY;
558
+ if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > threshold) {
559
+ if (deltaX > 0) {
560
+ onSwipeRight?.();
561
+ } else {
562
+ onSwipeLeft?.();
563
+ }
564
+ }
565
+ startX = null;
566
+ startY = null;
567
+ };
568
+ const handleScroll = () => {
569
+ startX = null;
570
+ startY = null;
571
+ };
572
+ element.addEventListener("pointerdown", onPointerDown, { passive: true });
573
+ window.addEventListener("pointerup", handlePointerEnd);
574
+ window.addEventListener("pointercancel", handlePointerEnd);
575
+ window.addEventListener("scroll", handleScroll, { passive: true, capture: true });
576
+ return () => {
577
+ element.removeEventListener("pointerdown", onPointerDown);
578
+ window.removeEventListener("pointerup", handlePointerEnd);
579
+ window.removeEventListener("pointercancel", handlePointerEnd);
580
+ window.removeEventListener("scroll", handleScroll, { capture: true });
581
+ };
582
+ }, [ref, onSwipeLeft, onSwipeRight, threshold, enabled]);
583
+ };
584
+
585
+ // src/components/Grid/Grid.tsx
586
+ var import_jsx_runtime6 = require("react/jsx-runtime");
587
+ var VALID_GRID_ELEMENTS = /* @__PURE__ */ new Set([
588
+ "div",
589
+ "ul",
590
+ "ol",
591
+ "section",
592
+ "article",
593
+ "main",
594
+ "aside",
595
+ "nav"
596
+ ]);
597
+ var Grid = ({
598
+ as: Comp = "div",
599
+ className,
600
+ children,
601
+ masonry,
602
+ matchHeight,
603
+ matchRow = true,
604
+ parallax,
605
+ parallaxStart,
606
+ parallaxEnd,
607
+ parallaxJustify,
608
+ ...props
609
+ }) => {
610
+ const ref = React8.useRef(null);
611
+ if (isDev && typeof Comp === "string" && !VALID_GRID_ELEMENTS.has(Comp)) {
612
+ console.warn(
613
+ `[react-uikit] Grid: "${Comp}" is not a recommended element for Grid. Use one of: ${[...VALID_GRID_ELEMENTS].join(", ")}.`
614
+ );
615
+ }
616
+ const needsUikitGrid = !!(masonry || parallax || parallaxJustify);
617
+ useGridRowClasses(ref, needsUikitGrid);
618
+ useIsomorphicLayoutEffect(() => {
619
+ if (!needsUikitGrid || !ref.current) return;
620
+ const instance = import_uikit2.default.grid(ref.current, {
621
+ ...masonry && { masonry },
622
+ ...parallax != null && { parallax },
623
+ ...parallaxStart != null && { parallaxStart },
624
+ ...parallaxEnd != null && { parallaxEnd },
625
+ ...parallaxJustify != null && { parallaxJustify }
626
+ });
627
+ return () => {
628
+ instance.$destroy();
629
+ };
630
+ }, [needsUikitGrid, masonry, parallax, parallaxStart, parallaxEnd, parallaxJustify]);
631
+ useIsomorphicLayoutEffect(() => {
632
+ if (!matchHeight || !ref.current) return;
633
+ const target = typeof matchHeight === "string" ? matchHeight : "> *";
634
+ const instance = import_uikit2.default.heightMatch(ref.current, { target, row: matchRow });
635
+ return () => {
636
+ instance.$destroy();
637
+ };
638
+ }, [matchHeight, matchRow]);
639
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Comp, { ref, className: cn("uk-grid", className), ...props, children });
640
+ };
641
+
642
+ // src/components/Icon/registry.ts
643
+ var registry = {
644
+ home: {
645
+ category: "app",
646
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
647
+ <polygon points="18.65 11.35 10 2.71 1.35 11.35 0.65 10.65 10 1.29 19.35 10.65" />
648
+ <polygon points="15 4 18 4 18 7 17 7 17 5 15 5" />
649
+ <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" />
650
+ </svg>`
651
+ },
652
+ "sign-in": {
653
+ category: "app",
654
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
655
+ <polygon points="7 2 17 2 17 17 7 17 7 16 16 16 16 3 7 3 7 2" />
656
+ <line stroke="#000" x1="3" y1="9.5" x2="12" y2="9.5" />
657
+ <polyline fill="none" stroke="#000" points="9.2 6.33 12.37 9.5 9.2 12.67" />
658
+ </svg>`
659
+ },
660
+ "sign-out": {
661
+ category: "app",
662
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
663
+ <polygon points="13 2 3 2 3 17 13 17 13 16 4 16 4 3 13 3 13 2" />
664
+ <line stroke="#000" x1="7.96" y1="9.49" x2="16.96" y2="9.49" />
665
+ <polyline fill="none" stroke="#000" points="14.17 6.31 17.35 9.48 14.17 12.66" />
666
+ </svg>`
667
+ },
668
+ user: {
669
+ category: "app",
670
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
671
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.9" cy="6.4" r="4.4" />
672
+ <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" />
673
+ </svg>`
674
+ },
675
+ users: {
676
+ category: "app",
677
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
678
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="7.7" cy="8.6" r="3.5" />
679
+ <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" />
680
+ <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" />
681
+ </svg>`
682
+ },
683
+ lock: {
684
+ category: "app",
685
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
686
+ <rect fill="none" stroke="#000" height="10" width="13" y="8.5" x="3.5" />
687
+ <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" />
688
+ </svg>`
689
+ },
690
+ unlock: {
691
+ category: "app",
692
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
693
+ <rect fill="none" stroke="#000" x="3.5" y="8.5" width="13" height="10" />
694
+ <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" />
695
+ </svg>`
696
+ },
697
+ settings: {
698
+ category: "app",
699
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
700
+ <ellipse fill="none" stroke="#000" cx="6.11" cy="3.55" rx="2.11" ry="2.15" />
701
+ <ellipse fill="none" stroke="#000" cx="6.11" cy="15.55" rx="2.11" ry="2.15" />
702
+ <circle fill="none" stroke="#000" cx="13.15" cy="9.55" r="2.15" />
703
+ <rect x="1" y="3" width="3" height="1" />
704
+ <rect x="10" y="3" width="8" height="1" />
705
+ <rect x="1" y="9" width="8" height="1" />
706
+ <rect x="15" y="9" width="3" height="1" />
707
+ <rect x="1" y="15" width="3" height="1" />
708
+ <rect x="10" y="15" width="8" height="1" />
709
+ </svg>`
710
+ },
711
+ cog: {
712
+ category: "app",
713
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
714
+ <circle fill="none" stroke="#000" cx="9.997" cy="10" r="3.31" />
715
+ <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" />
716
+ </svg>`
717
+ },
718
+ nut: {
719
+ category: "app",
720
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
721
+ <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" />
722
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="3.5" />
723
+ </svg>`
724
+ },
725
+ comment: {
726
+ category: "app",
727
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
728
+ <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" />
729
+ </svg>`
730
+ },
731
+ commenting: {
732
+ category: "app",
733
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
734
+ <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" />
735
+ <circle cx="10" cy="8" r="1" />
736
+ <circle cx="6" cy="8" r="1" />
737
+ <circle cx="14" cy="8" r="1" />
738
+ </svg>`
739
+ },
740
+ comments: {
741
+ category: "app",
742
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
743
+ <polyline fill="none" stroke="#000" points="2 0.5 19.5 0.5 19.5 13" />
744
+ <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" />
745
+ </svg>`
746
+ },
747
+ hashtag: {
748
+ category: "app",
749
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
750
+ <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" />
751
+ </svg>`
752
+ },
753
+ tag: {
754
+ category: "app",
755
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
756
+ <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" />
757
+ <circle cx="14" cy="6" r="1" />
758
+ </svg>`
759
+ },
760
+ cart: {
761
+ category: "app",
762
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
763
+ <circle cx="7.3" cy="17.3" r="1.4" />
764
+ <circle cx="13.3" cy="17.3" r="1.4" />
765
+ <polyline fill="none" stroke="#000" points="0 2 3.2 4 5.3 12.5 16 12.5 18 6.5 8 6.5" />
766
+ </svg>`
767
+ },
768
+ bag: {
769
+ category: "app",
770
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
771
+ <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" />
772
+ <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" />
773
+ </svg>`
774
+ },
775
+ "credit-card": {
776
+ category: "app",
777
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
778
+ <rect fill="none" stroke="#000" x="1.5" y="4.5" width="17" height="12" />
779
+ <rect x="1" y="7" width="18" height="3" />
780
+ </svg>`
781
+ },
782
+ mail: {
783
+ category: "app",
784
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
785
+ <polyline fill="none" stroke="#000" points="1.4,6.5 10,11 18.6,6.5" />
786
+ <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" />
787
+ </svg>`
788
+ },
789
+ receiver: {
790
+ category: "app",
791
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
792
+ <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" />
793
+ </svg>`
794
+ },
795
+ print: {
796
+ category: "app",
797
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
798
+ <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" />
799
+ <polyline fill="none" stroke="#000" points="15.5 6.5 15.5 2.5 4.5 2.5 4.5 6.5" />
800
+ <rect fill="none" stroke="#000" width="11" height="6" x="4.5" y="11.5" />
801
+ <rect width="8" height="1" x="6" y="13" />
802
+ <rect width="8" height="1" x="6" y="15" />
803
+ </svg>`
804
+ },
805
+ search: {
806
+ category: "app",
807
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
808
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9" cy="9" r="7" />
809
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M14,14 L18,18 L14,14 Z" />
810
+ </svg>`
811
+ },
812
+ location: {
813
+ category: "app",
814
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
815
+ <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" />
816
+ <circle fill="none" stroke="#000" cx="10" cy="6.8" r="2.3" />
817
+ </svg>`
818
+ },
819
+ bookmark: {
820
+ category: "app",
821
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
822
+ <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" />
823
+ </svg>`
824
+ },
825
+ code: {
826
+ category: "app",
827
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
828
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="13,4 19,10 13,16" />
829
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="7,4 1,10 7,16" />
830
+ </svg>`
831
+ },
832
+ "paint-bucket": {
833
+ category: "app",
834
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
835
+ <path fill="none" stroke="#000" stroke-width="1.1" d="m6.42,2.16l5.28,5.28" />
836
+ <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" />
837
+ <line fill="none" stroke="#000" x1="1.26" y1="10.5" x2="16" y2="10.5" />
838
+ <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" />
839
+ </svg>`
840
+ },
841
+ camera: {
842
+ category: "app",
843
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
844
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10.8" r="3.8" />
845
+ <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" />
846
+ </svg>`
847
+ },
848
+ "video-camera": {
849
+ category: "app",
850
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
851
+ <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" />
852
+ </svg>`
853
+ },
854
+ bell: {
855
+ category: "app",
856
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
857
+ <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" />
858
+ <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" />
859
+ </svg>`
860
+ },
861
+ microphone: {
862
+ category: "app",
863
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
864
+ <line fill="none" stroke="#000" x1="10" x2="10" y1="16.44" y2="18.5" />
865
+ <line fill="none" stroke="#000" x1="7" x2="13" y1="18.5" y2="18.5" />
866
+ <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" />
867
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M15.5 10.36V11a5.5 5.5 0 0 1-11 0v-.6" />
868
+ </svg>`
869
+ },
870
+ bolt: {
871
+ category: "app",
872
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
873
+ <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" />
874
+ </svg>`
875
+ },
876
+ star: {
877
+ category: "app",
878
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
879
+ <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" />
880
+ </svg>`
881
+ },
882
+ heart: {
883
+ category: "app",
884
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
885
+ <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" />
886
+ </svg>`
887
+ },
888
+ happy: {
889
+ category: "app",
890
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
891
+ <circle cx="13" cy="7" r="1" />
892
+ <circle cx="7" cy="7" r="1" />
893
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="8.5" />
894
+ <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" />
895
+ </svg>`
896
+ },
897
+ lifesaver: {
898
+ category: "app",
899
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
900
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="9" />
901
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="5" />
902
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="5.17" y1="2.39" x2="8.11" y2="5.33" />
903
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="5.33" y1="8.11" x2="2.39" y2="5.17" />
904
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="14.83" y1="17.61" x2="11.89" y2="14.67" />
905
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="14.67" y1="11.89" x2="17.61" y2="14.83" />
906
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="17.61" y1="5.17" x2="14.67" y2="8.11" />
907
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="11.89" y1="5.33" x2="14.83" y2="2.39" />
908
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="8.11" y1="14.67" x2="5.17" y2="17.61" />
909
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="2.39" y1="14.83" x2="5.33" y2="11.89" />
910
+ </svg>`
911
+ },
912
+ rss: {
913
+ category: "app",
914
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
915
+ <circle cx="3.12" cy="16.8" r="1.85" />
916
+ <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" />
917
+ <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" />
918
+ </svg>`
919
+ },
920
+ social: {
921
+ category: "app",
922
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
923
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="13.4" y1="14" x2="6.3" y2="10.7" />
924
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="13.5" y1="5.5" x2="6.5" y2="8.8" />
925
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="15.5" cy="4.6" r="2.3" />
926
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="15.5" cy="14.8" r="2.3" />
927
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="4.5" cy="9.8" r="2.3" />
928
+ </svg>`
929
+ },
930
+ "git-branch": {
931
+ category: "app",
932
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
933
+ <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" />
934
+ <circle fill="none" stroke="#000" cx="6.5" cy="3" r="1.79" />
935
+ <circle fill="none" stroke="#000" cx="13.5" cy="6" r="1.79" />
936
+ <circle fill="none" stroke="#000" cx="6.5" cy="17" r="1.79" />
937
+ </svg>`
938
+ },
939
+ "git-fork": {
940
+ category: "app",
941
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
942
+ <circle fill="none" stroke="#000" cx="6" cy="3" r="1.79" />
943
+ <circle fill="none" stroke="#000" cx="14" cy="3" r="1.79" />
944
+ <circle fill="none" stroke="#000" cx="10" cy="17" r="1.79" />
945
+ <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" />
946
+ </svg>`
947
+ },
948
+ world: {
949
+ category: "app",
950
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
951
+ <path fill="none" stroke="#000" d="M1,10.5 L19,10.5" />
952
+ <path fill="none" stroke="#000" d="M2.35,15.5 L17.65,15.5" />
953
+ <path fill="none" stroke="#000" d="M2.35,5.5 L17.523,5.5" />
954
+ <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" />
955
+ <circle fill="none" stroke="#000" cx="10" cy="10.5" r="9" />
956
+ </svg>`
957
+ },
958
+ calendar: {
959
+ category: "app",
960
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
961
+ <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" />
962
+ <rect width="1" height="3" x="6" y="2" />
963
+ <rect width="1" height="3" x="13" y="2" />
964
+ </svg>`
965
+ },
966
+ clock: {
967
+ category: "app",
968
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
969
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
970
+ <rect x="9" y="4" width="1" height="7" />
971
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M13.018,14.197 L9.445,10.625" />
972
+ </svg>`
973
+ },
974
+ history: {
975
+ category: "app",
976
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
977
+ <polyline fill="#000" points="1 2 2 2 2 6 6 6 6 7 1 7 1 2" />
978
+ <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" />
979
+ <rect x="9" y="4" width="1" height="7" />
980
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M13.018,14.197 L9.445,10.625" id="Shape" />
981
+ </svg>`
982
+ },
983
+ future: {
984
+ category: "app",
985
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
986
+ <polyline points="19 2 18 2 18 6 14 6 14 7 19 7 19 2" />
987
+ <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" />
988
+ <rect x="9" y="4" width="1" height="7" />
989
+ <path d="M13.018,14.197 L9.445,10.625" fill="none" stroke="#000" stroke-width="1.1" />
990
+ </svg>`
991
+ },
992
+ crosshairs: {
993
+ category: "app",
994
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
995
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="7.5" />
996
+ <line fill="none" stroke="#000" x1="10" x2="10" y2="8" />
997
+ <line fill="none" stroke="#000" x1="10" y1="12" x2="10" y2="20" />
998
+ <line fill="none" stroke="#000" y1="10" x2="8" y2="10" />
999
+ <line fill="none" stroke="#000" x1="12" y1="10" x2="20" y2="10" />
1000
+ </svg>`
1001
+ },
1002
+ pencil: {
1003
+ category: "app",
1004
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1005
+ <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" />
1006
+ <path fill="none" stroke="#000" d="M15.98,7.268 L13.851,5.148" />
1007
+ </svg>`
1008
+ },
1009
+ trash: {
1010
+ category: "app",
1011
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1012
+ <polyline fill="none" stroke="#000" points="6.5 3 6.5 1.5 13.5 1.5 13.5 3" />
1013
+ <polyline fill="none" stroke="#000" points="4.5 4 4.5 18.5 15.5 18.5 15.5 4" />
1014
+ <rect x="8" y="7" width="1" height="9" />
1015
+ <rect x="11" y="7" width="1" height="9" />
1016
+ <rect x="2" y="3" width="16" height="1" />
1017
+ </svg>`
1018
+ },
1019
+ move: {
1020
+ category: "app",
1021
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1022
+ <polygon points="4,5 1,5 1,9 2,9 2,6 4,6" />
1023
+ <polygon points="1,16 2,16 2,18 4,18 4,19 1,19" />
1024
+ <polygon points="14,16 14,19 11,19 11,18 13,18 13,16" />
1025
+ <rect fill="none" stroke="#000" x="5.5" y="1.5" width="13" height="13" />
1026
+ <rect x="1" y="11" width="1" height="3" />
1027
+ <rect x="6" y="18" width="3" height="1" />
1028
+ </svg>`
1029
+ },
1030
+ link: {
1031
+ category: "app",
1032
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1033
+ <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" />
1034
+ <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" />
1035
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M7.925,11.875 L11.925,7.975" />
1036
+ </svg>`
1037
+ },
1038
+ "link-external": {
1039
+ category: "app",
1040
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1041
+ <polyline fill="none" stroke="#000" points="6 4 10 4 10 8" />
1042
+ <line fill="none" stroke="#000" x1="4.5" y1="9.5" x2="10" y2="4" />
1043
+ </svg>`
1044
+ },
1045
+ eye: {
1046
+ category: "app",
1047
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1048
+ <circle fill="none" stroke="#000" cx="10" cy="10" r="3.45" />
1049
+ <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" />
1050
+ </svg>`
1051
+ },
1052
+ "eye-slash": {
1053
+ category: "app",
1054
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1055
+ <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" />
1056
+ <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" />
1057
+ <line fill="none" stroke="#000" x1="2.5" y1="2.5" x2="17.5" y2="17.5" />
1058
+ </svg>`
1059
+ },
1060
+ question: {
1061
+ category: "app",
1062
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1063
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1064
+ <circle cx="9.99" cy="14.24" r="1.05" />
1065
+ <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" />
1066
+ </svg>`
1067
+ },
1068
+ info: {
1069
+ category: "app",
1070
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1071
+ <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" />
1072
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1073
+ </svg>`
1074
+ },
1075
+ warning: {
1076
+ category: "app",
1077
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1078
+ <circle cx="10" cy="14" r="1" />
1079
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1080
+ <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" />
1081
+ </svg>`
1082
+ },
1083
+ image: {
1084
+ category: "app",
1085
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1086
+ <circle cx="16.1" cy="6.1" r="1.1" />
1087
+ <rect fill="none" stroke="#000" x="0.5" y="2.5" width="19" height="15" />
1088
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="4,13 8,9 13,14" />
1089
+ <polyline fill="none" stroke="#000" stroke-width="1.01" points="11,12 12.5,10.5 16,14" />
1090
+ </svg>`
1091
+ },
1092
+ thumbnails: {
1093
+ category: "app",
1094
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1095
+ <rect fill="none" stroke="#000" x="3.5" y="3.5" width="5" height="5" />
1096
+ <rect fill="none" stroke="#000" x="11.5" y="3.5" width="5" height="5" />
1097
+ <rect fill="none" stroke="#000" x="11.5" y="11.5" width="5" height="5" />
1098
+ <rect fill="none" stroke="#000" x="3.5" y="11.5" width="5" height="5" />
1099
+ </svg>`
1100
+ },
1101
+ table: {
1102
+ category: "app",
1103
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1104
+ <rect x="1" y="3" width="18" height="1" />
1105
+ <rect x="1" y="7" width="18" height="1" />
1106
+ <rect x="1" y="11" width="18" height="1" />
1107
+ <rect x="1" y="15" width="18" height="1" />
1108
+ </svg>`
1109
+ },
1110
+ list: {
1111
+ category: "app",
1112
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1113
+ <rect x="6" y="4" width="12" height="1" />
1114
+ <rect x="6" y="9" width="12" height="1" />
1115
+ <rect x="6" y="14" width="12" height="1" />
1116
+ <rect x="2" y="4" width="2" height="1" />
1117
+ <rect x="2" y="9" width="2" height="1" />
1118
+ <rect x="2" y="14" width="2" height="1" />
1119
+ </svg>`
1120
+ },
1121
+ menu: {
1122
+ category: "app",
1123
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1124
+ <rect x="2" y="4" width="16" height="1" />
1125
+ <rect x="2" y="9" width="16" height="1" />
1126
+ <rect x="2" y="14" width="16" height="1" />
1127
+ </svg>`
1128
+ },
1129
+ grid: {
1130
+ category: "app",
1131
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1132
+ <rect x="2" y="2" width="3" height="3" />
1133
+ <rect x="8" y="2" width="3" height="3" />
1134
+ <rect x="14" y="2" width="3" height="3" />
1135
+ <rect x="2" y="8" width="3" height="3" />
1136
+ <rect x="8" y="8" width="3" height="3" />
1137
+ <rect x="14" y="8" width="3" height="3" />
1138
+ <rect x="2" y="14" width="3" height="3" />
1139
+ <rect x="8" y="14" width="3" height="3" />
1140
+ <rect x="14" y="14" width="3" height="3" />
1141
+ </svg>`
1142
+ },
1143
+ more: {
1144
+ category: "app",
1145
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1146
+ <circle cx="3" cy="10" r="2" />
1147
+ <circle cx="10" cy="10" r="2" />
1148
+ <circle cx="17" cy="10" r="2" />
1149
+ </svg>`
1150
+ },
1151
+ "more-vertical": {
1152
+ category: "app",
1153
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1154
+ <circle cx="10" cy="3" r="2" />
1155
+ <circle cx="10" cy="10" r="2" />
1156
+ <circle cx="10" cy="17" r="2" />
1157
+ </svg>`
1158
+ },
1159
+ plus: {
1160
+ category: "app",
1161
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1162
+ <rect x="9" y="1" width="1" height="17" />
1163
+ <rect x="1" y="9" width="17" height="1" />
1164
+ </svg>`
1165
+ },
1166
+ "plus-circle": {
1167
+ category: "app",
1168
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1169
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.5" cy="9.5" r="9" />
1170
+ <line fill="none" stroke="#000" x1="9.5" y1="5" x2="9.5" y2="14" />
1171
+ <line fill="none" stroke="#000" x1="5" y1="9.5" x2="14" y2="9.5" />
1172
+ </svg>`
1173
+ },
1174
+ minus: {
1175
+ category: "app",
1176
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1177
+ <rect height="1" width="18" y="9" x="1" />
1178
+ </svg>`
1179
+ },
1180
+ "minus-circle": {
1181
+ category: "app",
1182
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1183
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.5" cy="9.5" r="9" />
1184
+ <line fill="none" stroke="#000" x1="5" y1="9.5" x2="14" y2="9.5" />
1185
+ </svg>`
1186
+ },
1187
+ close: {
1188
+ category: "app",
1189
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1190
+ <path fill="none" stroke="#000" stroke-width="1.06" d="M16,16 L4,4" />
1191
+ <path fill="none" stroke="#000" stroke-width="1.06" d="M16,4 L4,16" />
1192
+ </svg>`
1193
+ },
1194
+ "close-circle": {
1195
+ category: "app",
1196
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1197
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1198
+ <line fill="none" stroke="#000" x1="13.18" y1="6.82" x2="6.82" y2="13.18" />
1199
+ <line fill="none" stroke="#000" x1="6.82" y1="6.82" x2="13.18" y2="13.18" />
1200
+ </svg>`
1201
+ },
1202
+ check: {
1203
+ category: "app",
1204
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1205
+ <polyline fill="none" stroke="#000" stroke-width="1.1" points="4,10 8,15 17,4" />
1206
+ </svg>`
1207
+ },
1208
+ ban: {
1209
+ category: "app",
1210
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1211
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1212
+ <line fill="none" stroke="#000" stroke-width="1.1" x1="4" y1="3.5" x2="16" y2="16.5" />
1213
+ </svg>`
1214
+ },
1215
+ refresh: {
1216
+ category: "app",
1217
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1218
+ <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" />
1219
+ <polyline fill="none" stroke="#000" points="9.9 2 12.79 4.89 9.79 7.9" />
1220
+ </svg>`
1221
+ },
1222
+ play: {
1223
+ category: "app",
1224
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1225
+ <polygon fill="none" stroke="#000" points="6.5,5 14.5,10 6.5,15" />
1226
+ </svg>`
1227
+ },
1228
+ "play-circle": {
1229
+ category: "app",
1230
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1231
+ <polygon fill="none" stroke="#000" stroke-width="1.1" points="8.5 7 13.5 10 8.5 13" />
1232
+ <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" />
1233
+ </svg>`
1234
+ },
1235
+ tv: {
1236
+ category: "devices",
1237
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1238
+ <rect x="7" y="16" width="6" height="1" />
1239
+ <rect fill="none" stroke="#000" x="0.5" y="3.5" width="19" height="11" />
1240
+ </svg>`
1241
+ },
1242
+ desktop: {
1243
+ category: "devices",
1244
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1245
+ <rect x="8" y="15" width="1" height="2" />
1246
+ <rect x="11" y="15" width="1" height="2" />
1247
+ <rect x="5" y="16" width="10" height="1" />
1248
+ <rect fill="none" stroke="#000" x="1.5" y="3.5" width="17" height="11" />
1249
+ </svg>`
1250
+ },
1251
+ laptop: {
1252
+ category: "devices",
1253
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1254
+ <rect y="16" width="20" height="1" />
1255
+ <rect fill="none" stroke="#000" x="2.5" y="4.5" width="15" height="10" />
1256
+ </svg>`
1257
+ },
1258
+ tablet: {
1259
+ category: "devices",
1260
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1261
+ <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" />
1262
+ <circle cx="10.5" cy="16.3" r="0.8" />
1263
+ </svg>`
1264
+ },
1265
+ phone: {
1266
+ category: "devices",
1267
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1268
+ <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" />
1269
+ <circle cx="10.5" cy="16.5" r="0.8" />
1270
+ </svg>`
1271
+ },
1272
+ "tablet-landscape": {
1273
+ category: "devices",
1274
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1275
+ <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" />
1276
+ <circle cx="3.7" cy="10.5" r="0.8" />
1277
+ </svg>`
1278
+ },
1279
+ "phone-landscape": {
1280
+ category: "devices",
1281
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1282
+ <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" />
1283
+ <circle cx="3.8" cy="10.5" r="0.8" />
1284
+ </svg>`
1285
+ },
1286
+ file: {
1287
+ category: "storage",
1288
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1289
+ <rect fill="none" stroke="#000" x="3.5" y="1.5" width="13" height="17" />
1290
+ </svg>`
1291
+ },
1292
+ "file-text": {
1293
+ category: "storage",
1294
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1295
+ <rect fill="none" stroke="#000" width="13" height="17" x="3.5" y="1.5" />
1296
+ <line fill="none" stroke="#000" x1="6" x2="12" y1="12.5" y2="12.5" />
1297
+ <line fill="none" stroke="#000" x1="6" x2="14" y1="8.5" y2="8.5" />
1298
+ <line fill="none" stroke="#000" x1="6" x2="14" y1="6.5" y2="6.5" />
1299
+ <line fill="none" stroke="#000" x1="6" x2="14" y1="10.5" y2="10.5" />
1300
+ </svg>`
1301
+ },
1302
+ "file-pdf": {
1303
+ category: "storage",
1304
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1305
+ <rect fill="none" stroke="#000" width="13" height="17" x="3.5" y="1.5" />
1306
+ <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" />
1307
+ </svg>`
1308
+ },
1309
+ copy: {
1310
+ category: "storage",
1311
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1312
+ <rect fill="none" stroke="#000" x="3.5" y="2.5" width="12" height="16" />
1313
+ <polyline fill="none" stroke="#000" points="5 0.5 17.5 0.5 17.5 17" />
1314
+ </svg>`
1315
+ },
1316
+ "file-edit": {
1317
+ category: "storage",
1318
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1319
+ <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" />
1320
+ <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" />
1321
+ </svg>`
1322
+ },
1323
+ folder: {
1324
+ category: "storage",
1325
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1326
+ <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" />
1327
+ </svg>`
1328
+ },
1329
+ album: {
1330
+ category: "storage",
1331
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1332
+ <rect x="5" y="2" width="10" height="1" />
1333
+ <rect x="3" y="4" width="14" height="1" />
1334
+ <rect fill="none" stroke="#000" x="1.5" y="6.5" width="17" height="11" />
1335
+ </svg>`
1336
+ },
1337
+ push: {
1338
+ category: "storage",
1339
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1340
+ <line fill="none" stroke="#000" x1="10" y1="11" x2="10" y2="1" />
1341
+ <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" />
1342
+ <polyline fill="none" stroke="#000" points="6.82 3.88 10 .71 13.17 3.88" />
1343
+ </svg>`
1344
+ },
1345
+ pull: {
1346
+ category: "storage",
1347
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1348
+ <line fill="none" stroke="#000" x1="10" y1="11" x2="10" y2="2" />
1349
+ <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" />
1350
+ <polyline fill="none" stroke="#000" points="13.18 8.2 10 11.38 6.83 8.21" />
1351
+ </svg>`
1352
+ },
1353
+ server: {
1354
+ category: "storage",
1355
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1356
+ <rect x="3" y="3" width="1" height="2" />
1357
+ <rect x="5" y="3" width="1" height="2" />
1358
+ <rect x="7" y="3" width="1" height="2" />
1359
+ <rect x="16" y="3" width="1" height="1" />
1360
+ <rect x="16" y="10" width="1" height="1" />
1361
+ <circle fill="none" stroke="#000" cx="9.9" cy="17.4" r="1.4" />
1362
+ <rect x="3" y="10" width="1" height="2" />
1363
+ <rect x="5" y="10" width="1" height="2" />
1364
+ <rect x="9.5" y="14" width="1" height="2" />
1365
+ <rect x="3" y="17" width="6" height="1" />
1366
+ <rect x="11" y="17" width="6" height="1" />
1367
+ <rect fill="none" stroke="#000" x="1.5" y="1.5" width="17" height="5" />
1368
+ <rect fill="none" stroke="#000" x="1.5" y="8.5" width="17" height="5" />
1369
+ </svg>`
1370
+ },
1371
+ database: {
1372
+ category: "storage",
1373
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1374
+ <ellipse fill="none" stroke="#000" cx="10" cy="4.64" rx="7.5" ry="3.14" />
1375
+ <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" />
1376
+ <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" />
1377
+ <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" />
1378
+ </svg>`
1379
+ },
1380
+ "cloud-upload": {
1381
+ category: "storage",
1382
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1383
+ <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" />
1384
+ <path fill="none" stroke="#000" d="M9.51,9.34v9" />
1385
+ <polyline fill="none" stroke="#000" points="6.34 11.85 9.51 8.68 12.68 11.85" />
1386
+ </svg>`
1387
+ },
1388
+ "cloud-download": {
1389
+ category: "storage",
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="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" />
1392
+ <path fill="none" stroke="#000" d="M9.5,18.17v-10" />
1393
+ <polyline fill="none" stroke="#000" points="12.67 15.66 9.5 18.83 6.33 15.66" />
1394
+ </svg>`
1395
+ },
1396
+ download: {
1397
+ category: "storage",
1398
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1399
+ <line fill="none" stroke="#000" x1="10" y1="2.09" x2="10" y2="14.09" />
1400
+ <polyline fill="none" stroke="#000" points="6.16 10.62 10 14.46 13.84 10.62" />
1401
+ <line stroke="#000" x1="3.5" y1="17.5" x2="16.5" y2="17.5" />
1402
+ </svg>`
1403
+ },
1404
+ upload: {
1405
+ category: "storage",
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="10" y1="15.17" x2="10" y2="3.17" />
1408
+ <polyline fill="none" stroke="#000" points="13.84 6.63 10 2.8 6.16 6.64" />
1409
+ <line fill="#fff" stroke="#000" x1="3.5" y1="17.5" x2="16.5" y2="17.5" />
1410
+ </svg>`
1411
+ },
1412
+ reply: {
1413
+ category: "direction",
1414
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1415
+ <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" />
1416
+ </svg>`
1417
+ },
1418
+ forward: {
1419
+ category: "direction",
1420
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1421
+ <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" />
1422
+ </svg>`
1423
+ },
1424
+ expand: {
1425
+ category: "direction",
1426
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1427
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M2.48,17.52l6.52-6.52" />
1428
+ <polyline fill="none" stroke="#000" points="6.97 17.52 2.48 17.52 2.48 13.03" />
1429
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M17.52,2.48l-6.52,6.52" />
1430
+ <polyline fill="none" stroke="#000" points="13.03 2.48 17.52 2.48 17.52 6.97" />
1431
+ </svg>`
1432
+ },
1433
+ shrink: {
1434
+ category: "direction",
1435
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1436
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M2,18l6-6" />
1437
+ <polyline fill="none" stroke="#000" points="4 11.5 8.49 11.5 8.49 15.99" />
1438
+ <path fill="none" stroke="#000" stroke-width="1.1" d="M18,2l-6,6" />
1439
+ <polyline fill="none" stroke="#000" points="15.99 8.49 11.5 8.49 11.5 4" />
1440
+ </svg>`
1441
+ },
1442
+ "arrow-up-right": {
1443
+ category: "direction",
1444
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1445
+ <line fill="none" stroke="#000" x1="4.5" y1="15.53" x2="16.5" y2="3.53" />
1446
+ <polyline fill="none" stroke="#000" points="16.5 9 16.5 3.5 11 3.5" />
1447
+ </svg>`
1448
+ },
1449
+ "arrow-down-arrow-up": {
1450
+ category: "direction",
1451
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1452
+ <line fill="none" stroke="#000" x1="7" y1="3.38" x2="7" y2="15.38" />
1453
+ <polyline fill="none" stroke="#000" points="10.18 12.75 7 15.93 3.83 12.76" />
1454
+ <line fill="none" stroke="#000" x1="13" y1="16.62" x2="13" y2="4.62" />
1455
+ <polyline fill="none" stroke="#000" points="9.82 7.25 13 4.07 16.17 7.24" />
1456
+ </svg>`
1457
+ },
1458
+ "arrow-up": {
1459
+ category: "direction",
1460
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1461
+ <line fill="none" stroke="#000" x1="10" y1="16.53" x2="10" y2="4.53" />
1462
+ <polyline fill="none" stroke="#000" points="13.84 8 10 4.17 6.16 8" />
1463
+ </svg>`
1464
+ },
1465
+ "arrow-down": {
1466
+ category: "direction",
1467
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1468
+ <line fill="none" stroke="#000" x1="10" y1="3.48" x2="10" y2="15.48" />
1469
+ <polyline fill="none" stroke="#000" points="6.16 12 10 15.84 13.84 12" />
1470
+ </svg>`
1471
+ },
1472
+ "arrow-left": {
1473
+ category: "direction",
1474
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1475
+ <line fill="none" stroke="#000" x1="16.53" y1="10" x2="4.53" y2="10" />
1476
+ <polyline fill="none" stroke="#000" points="8 6.16 4.18 10 8 13.84" />
1477
+ </svg>`
1478
+ },
1479
+ "arrow-right": {
1480
+ category: "direction",
1481
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1482
+ <line fill="none" stroke="#000" x1="3.47" y1="10" x2="15.47" y2="10" />
1483
+ <polyline fill="none" stroke="#000" points="11.98 13.84 15.82 10 11.98 6.16" />
1484
+ </svg>`
1485
+ },
1486
+ "chevron-up": {
1487
+ category: "direction",
1488
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1489
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="4 13 10 7 16 13" />
1490
+ </svg>`
1491
+ },
1492
+ "chevron-down": {
1493
+ category: "direction",
1494
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1495
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="16 7 10 13 4 7" />
1496
+ </svg>`
1497
+ },
1498
+ "chevron-left": {
1499
+ category: "direction",
1500
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1501
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="13 16 7 10 13 4" />
1502
+ </svg>`
1503
+ },
1504
+ "chevron-right": {
1505
+ category: "direction",
1506
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1507
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="7 4 13 10 7 16" />
1508
+ </svg>`
1509
+ },
1510
+ "chevron-double-left": {
1511
+ category: "direction",
1512
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1513
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="10 14 6 10 10 6" />
1514
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="14 14 10 10 14 6" />
1515
+ </svg>`
1516
+ },
1517
+ "chevron-double-right": {
1518
+ category: "direction",
1519
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1520
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="10 6 14 10 10 14" />
1521
+ <polyline fill="none" stroke="#000" stroke-width="1.03" points="6 6 10 10 6 14" />
1522
+ </svg>`
1523
+ },
1524
+ "triangle-up": {
1525
+ category: "direction",
1526
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1527
+ <polygon points="5 13 10 8 15 13" />
1528
+ </svg>`
1529
+ },
1530
+ "triangle-down": {
1531
+ category: "direction",
1532
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1533
+ <polygon points="5 7 15 7 10 12" />
1534
+ </svg>`
1535
+ },
1536
+ "triangle-left": {
1537
+ category: "direction",
1538
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1539
+ <polygon points="12 5 7 10 12 15" />
1540
+ </svg>`
1541
+ },
1542
+ "triangle-right": {
1543
+ category: "direction",
1544
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1545
+ <polygon points="8 5 13 10 8 15" />
1546
+ </svg>`
1547
+ },
1548
+ bold: {
1549
+ category: "editor",
1550
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1551
+ <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" />
1552
+ </svg>`
1553
+ },
1554
+ italic: {
1555
+ category: "editor",
1556
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1557
+ <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" />
1558
+ </svg>`
1559
+ },
1560
+ strikethrough: {
1561
+ category: "editor",
1562
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1563
+ <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" />
1564
+ <rect x="3" y="10" width="15" height="1" />
1565
+ </svg>`
1566
+ },
1567
+ "quote-right": {
1568
+ category: "editor",
1569
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1570
+ <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" />
1571
+ <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" />
1572
+ </svg>`
1573
+ },
1574
+ "500px": {
1575
+ category: "brands",
1576
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1577
+ <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
1578
+ 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
1579
+ 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
1580
+ 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" />
1581
+ <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
1582
+ 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
1583
+ 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
1584
+ 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" />
1585
+ <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
1586
+ 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
1587
+ 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
1588
+ 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
1589
+ 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
1590
+ 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" />
1591
+ <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
1592
+ 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
1593
+ 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
1594
+ 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
1595
+ 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
1596
+ 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
1597
+ 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
1598
+ 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
1599
+ 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
1600
+ 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
1601
+ 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
1602
+ 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
1603
+ 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
1604
+ c-0.135,0.035-0.519,0.157-0.44,0.439C5.372,12.799,5.577,13.164,5.633,13.287z" />
1605
+ </svg>`
1606
+ },
1607
+ android: {
1608
+ category: "brands",
1609
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1610
+ <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" />
1611
+ </svg>`
1612
+ },
1613
+ "android-robot": {
1614
+ category: "brands",
1615
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1616
+ <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" />
1617
+ <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" />
1618
+ <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" />
1619
+ <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" />
1620
+ </svg>`
1621
+ },
1622
+ apple: {
1623
+ category: "brands",
1624
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1625
+ <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" />
1626
+ </svg>`
1627
+ },
1628
+ behance: {
1629
+ category: "brands",
1630
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1631
+ <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" />
1632
+ <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" />
1633
+ <rect x="13" y="4" width="5" height="1.4" />
1634
+ </svg>`
1635
+ },
1636
+ bluesky: {
1637
+ category: "brands",
1638
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1639
+ <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" />
1640
+ </svg>`
1641
+ },
1642
+ discord: {
1643
+ category: "brands",
1644
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1645
+ <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" />
1646
+ </svg>`
1647
+ },
1648
+ dribbble: {
1649
+ category: "brands",
1650
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1651
+ <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" />
1652
+ <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" />
1653
+ <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" />
1654
+ <circle fill="none" stroke="#000" stroke-width="1.4" cx="10" cy="10" r="9" />
1655
+ </svg>`
1656
+ },
1657
+ etsy: {
1658
+ category: "brands",
1659
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
1660
+ <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" />
1661
+ </svg>`
1662
+ },
1663
+ facebook: {
1664
+ category: "brands",
1665
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1666
+ <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" />
1667
+ </svg>`
1668
+ },
1669
+ flickr: {
1670
+ category: "brands",
1671
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1672
+ <circle cx="5.5" cy="9.5" r="3.5" />
1673
+ <circle cx="14.5" cy="9.5" r="3.5" />
1674
+ </svg>`
1675
+ },
1676
+ foursquare: {
1677
+ category: "brands",
1678
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1679
+ <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" />
1680
+ </svg>`
1681
+ },
1682
+ github: {
1683
+ category: "brands",
1684
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1685
+ <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" />
1686
+ </svg>`
1687
+ },
1688
+ "github-alt": {
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="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" />
1692
+ </svg>`
1693
+ },
1694
+ gitter: {
1695
+ category: "brands",
1696
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1697
+ <rect x="3.5" y="1" width="1.531" height="11.471" />
1698
+ <rect x="7.324" y="4.059" width="1.529" height="15.294" />
1699
+ <rect x="11.148" y="4.059" width="1.527" height="15.294" />
1700
+ <rect x="14.971" y="4.059" width="1.529" height="8.412" />
1701
+ </svg>`
1702
+ },
1703
+ google: {
1704
+ category: "brands",
1705
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1706
+ <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" />
1707
+ </svg>`
1708
+ },
1709
+ instagram: {
1710
+ category: "brands",
1711
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1712
+ <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" />
1713
+ <circle cx="14.87" cy="5.26" r="1.09" />
1714
+ <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" />
1715
+ </svg>`
1716
+ },
1717
+ joomla: {
1718
+ category: "brands",
1719
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1720
+ <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" />
1721
+ <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" />
1722
+ <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" />
1723
+ <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" />
1724
+ </svg>`
1725
+ },
1726
+ linkedin: {
1727
+ category: "brands",
1728
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1729
+ <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" />
1730
+ <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" />
1731
+ </svg>`
1732
+ },
1733
+ mastodon: {
1734
+ category: "brands",
1735
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1736
+ <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" />
1737
+ </svg>`
1738
+ },
1739
+ microsoft: {
1740
+ category: "brands",
1741
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1742
+ <path d="m2,2h7.58v7.58H2V2Zm8.42,0h7.58v7.58h-7.58V2ZM2,10.42h7.58v7.58H2v-7.58Zm8.42,0h7.58v7.58h-7.58" />
1743
+ </svg>`
1744
+ },
1745
+ pinterest: {
1746
+ category: "brands",
1747
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1748
+ <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" />
1749
+ </svg>`
1750
+ },
1751
+ reddit: {
1752
+ category: "brands",
1753
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1754
+ <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" />
1755
+ <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" />
1756
+ <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" />
1757
+ <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" />
1758
+ </svg>`
1759
+ },
1760
+ signal: {
1761
+ category: "brands",
1762
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1763
+ <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" />
1764
+ </svg>`
1765
+ },
1766
+ soundcloud: {
1767
+ category: "brands",
1768
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1769
+ <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" />
1770
+ <rect x="6" y="6.5" width="1.5" height="8.5" />
1771
+ <rect x="3" y="8" width="1.5" height="7" />
1772
+ <rect y="10" width="1.5" height="5" />
1773
+ </svg>`
1774
+ },
1775
+ telegram: {
1776
+ category: "brands",
1777
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1778
+ <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" />
1779
+ </svg>`
1780
+ },
1781
+ threads: {
1782
+ category: "brands",
1783
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1784
+ <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" />
1785
+ </svg>`
1786
+ },
1787
+ tiktok: {
1788
+ category: "brands",
1789
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1790
+ <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" />
1791
+ </svg>`
1792
+ },
1793
+ tripadvisor: {
1794
+ category: "brands",
1795
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1796
+ <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
1797
+ 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
1798
+ 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
1799
+ 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
1800
+ 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
1801
+ 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
1802
+ 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
1803
+ 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
1804
+ 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
1805
+ 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
1806
+ 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
1807
+ 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
1808
+ 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
1809
+ 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
1810
+ 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
1811
+ 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
1812
+ C9.79,7.905,7.677,5.873,5.076,5.82C6.501,5.208,8.153,4.875,9.94,4.875H9.977z" />
1813
+ </svg>`
1814
+ },
1815
+ tumblr: {
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="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" />
1819
+ </svg>`
1820
+ },
1821
+ twitch: {
1822
+ category: "brands",
1823
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1824
+ <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" />
1825
+ <rect x="12.98" y="4.55" width="1.29" height="3.88" />
1826
+ <rect x="9.43" y="4.55" width="1.29" height="3.88" />
1827
+ </svg>`
1828
+ },
1829
+ uikit: {
1830
+ category: "brands",
1831
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1832
+ <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" />
1833
+ <polygon points="9.8,4.2 6.7,2.4 9.8,0.4 12.9,2.3" />
1834
+ </svg>`
1835
+ },
1836
+ vimeo: {
1837
+ category: "brands",
1838
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1839
+ <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" />
1840
+ </svg>`
1841
+ },
1842
+ whatsapp: {
1843
+ category: "brands",
1844
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1845
+ <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" />
1846
+ </svg>`
1847
+ },
1848
+ wordpress: {
1849
+ category: "brands",
1850
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1851
+ <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" />
1852
+ </svg>`
1853
+ },
1854
+ x: {
1855
+ category: "brands",
1856
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1857
+ <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" />
1858
+ </svg>`
1859
+ },
1860
+ xing: {
1861
+ category: "brands",
1862
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1863
+ <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" />
1864
+ <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" />
1865
+ </svg>`
1866
+ },
1867
+ yelp: {
1868
+ category: "brands",
1869
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1870
+ <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
1871
+ 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
1872
+ 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
1873
+ 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
1874
+ 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
1875
+ 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
1876
+ 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
1877
+ 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
1878
+ 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
1879
+ 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
1880
+ 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
1881
+ 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
1882
+ 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" />
1883
+ </svg>`
1884
+ },
1885
+ yootheme: {
1886
+ category: "brands",
1887
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1888
+ <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" />
1889
+ </svg>`
1890
+ },
1891
+ youtube: {
1892
+ category: "brands",
1893
+ svg: `<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
1894
+ <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" />
1895
+ </svg>`
1896
+ }
1897
+ };
1898
+ var getSvgDimensions = (svg) => {
1899
+ const viewBoxMatch = svg.match(/viewBox="[^"]*\s+[^"]*\s+([0-9.]+)\s+([0-9.]+)"/);
1900
+ if (viewBoxMatch) {
1901
+ return {
1902
+ naturalWidth: parseFloat(viewBoxMatch[1]),
1903
+ naturalHeight: parseFloat(viewBoxMatch[2])
1904
+ };
1905
+ }
1906
+ const widthMatch = svg.match(/width="([0-9.]+)"/);
1907
+ const heightMatch = svg.match(/height="([0-9.]+)"/);
1908
+ if (widthMatch && heightMatch) {
1909
+ return {
1910
+ naturalWidth: parseFloat(widthMatch[1]),
1911
+ naturalHeight: parseFloat(heightMatch[1])
1912
+ };
1913
+ }
1914
+ console.warn(
1915
+ "[react-uikit] Icon SVG is missing both viewBox and width/height attributes. Falling back to 20x20."
1916
+ );
1917
+ return {
1918
+ naturalWidth: 20,
1919
+ naturalHeight: 20
1920
+ };
1921
+ };
1922
+ var getIconSvg = (name, ratio = 1) => {
1923
+ const rawSvg = registry[name].svg;
1924
+ const { naturalWidth, naturalHeight } = getSvgDimensions(rawSvg);
1925
+ const scaledWidth = Math.round(naturalWidth * ratio);
1926
+ const scaledHeight = Math.round(naturalHeight * ratio);
1927
+ const svg = rawSvg.replace(/^<svg([^>]*)>/, (_, attrs) => {
1928
+ const cleaned = attrs.replace(/\s*width="[^"]*"/, "").replace(/\s*height="[^"]*"/, "");
1929
+ return `<svg${cleaned} width="${scaledWidth}" height="${scaledHeight}" aria-hidden="true">`;
1930
+ });
1931
+ return svg;
1932
+ };
1933
+ var getIconCategory = (name) => registry[name].category;
1934
+ var getIconsByCategory = () => {
1935
+ const groups = {};
1936
+ for (const name of Object.keys(registry)) {
1937
+ const { category } = registry[name];
1938
+ (groups[category] ?? (groups[category] = [])).push(name);
1939
+ }
1940
+ return groups;
1941
+ };
1942
+
1943
+ // src/components/Icon/Icon.tsx
1944
+ var import_jsx_runtime7 = require("react/jsx-runtime");
1945
+ var Icon2 = ({ ref, name, label, ratio = 1, className, ...props }) => {
1946
+ const svg = getIconSvg(name, ratio);
1947
+ const classes = cn("uk-icon", className);
1948
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1949
+ "span",
1950
+ {
1951
+ ref,
1952
+ className: classes,
1953
+ role: label ? "img" : void 0,
1954
+ "aria-label": label,
1955
+ "aria-hidden": label ? void 0 : "true",
1956
+ dangerouslySetInnerHTML: { __html: svg },
1957
+ ...props
1958
+ }
1959
+ );
1960
+ };
1961
+
1962
+ // src/components/OffCanvas/OffCanvas.tsx
1963
+ var React9 = __toESM(require("react"), 1);
1964
+ var import_react_dom = require("react-dom");
1965
+ var import_react_focus_lock = __toESM(require("react-focus-lock"), 1);
1966
+ var import_react_remove_scroll = require("react-remove-scroll");
1967
+ var import_uikit3 = __toESM(require("uikit"), 1);
1968
+ var import_jsx_runtime8 = require("react/jsx-runtime");
1969
+ var OffCanvasRoot = ({
1970
+ open,
1971
+ onClose,
1972
+ overlay = false,
1973
+ flip = false,
1974
+ mode = "slide",
1975
+ escClose = true,
1976
+ bgClose = true,
1977
+ swiping = true,
1978
+ children
1979
+ }) => {
1980
+ const ref = React9.useRef(null);
1981
+ const onCloseRef = React9.useRef(onClose);
1982
+ useIsomorphicLayoutEffect(() => {
1983
+ onCloseRef.current = onClose;
1984
+ }, [onClose]);
1985
+ useIsomorphicLayoutEffect(() => {
1986
+ if (ref.current) {
1987
+ const el = ref.current;
1988
+ const _offcanvas = import_uikit3.default.offcanvas(el);
1989
+ if (open) {
1990
+ _offcanvas.show();
1991
+ } else {
1992
+ _offcanvas.hide();
1993
+ }
1994
+ const handleHidden = () => onCloseRef.current();
1995
+ import_uikit3.default.util.on(el, "hidden", handleHidden);
1996
+ return () => {
1997
+ import_uikit3.default.util.off(el, "hidden", handleHidden);
1998
+ };
1999
+ }
2000
+ }, [open]);
2001
+ return (0, import_react_dom.createPortal)(
2002
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_focus_lock.default, { disabled: overlay || !open, returnFocus: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_remove_scroll.RemoveScroll, { enabled: !overlay && open, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2003
+ "div",
2004
+ {
2005
+ ref,
2006
+ className: "uk-offcanvas",
2007
+ "data-uk-offcanvas": `mode: ${mode}; overlay: ${overlay}; flip: ${flip}; esc-close: ${escClose}; bg-close: ${bgClose}; swiping: ${swiping}`,
2008
+ children
2009
+ }
2010
+ ) }) }),
2011
+ document.body
2012
+ );
2013
+ };
2014
+ var OffCanvasBar = ({ className, children, ...props }) => {
2015
+ const classes = cn("uk-offcanvas-bar", className);
2016
+ if (isDev) {
2017
+ if (!props["aria-label"] && !props["aria-labelledby"]) {
2018
+ console.warn(
2019
+ "[react-uikit] OffCanvasBar: provide either aria-label or aria-labelledby for screen reader accessibility."
2020
+ );
2021
+ }
2022
+ }
2023
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: classes, ...props, children });
2024
+ };
2025
+ var OffCanvas = {
2026
+ Root: OffCanvasRoot,
2027
+ Bar: OffCanvasBar
2028
+ };
2029
+
2030
+ // src/components/Switcher/Switcher.tsx
2031
+ var React11 = __toESM(require("react"), 1);
2032
+
2033
+ // src/components/Switcher/SwitcherContext.ts
2034
+ var React10 = __toESM(require("react"), 1);
2035
+ var SwitcherContext = React10.createContext(null);
2036
+ var useSwitcherContext = () => {
2037
+ const context = React10.useContext(SwitcherContext);
2038
+ if (!context) {
2039
+ throw new Error("Switcher components must be wrapped in <Switcher.Root>");
2040
+ }
2041
+ return context;
2042
+ };
2043
+ var ContainerContext = React10.createContext(null);
2044
+ var useContainerContext = () => {
2045
+ const context = React10.useContext(ContainerContext);
2046
+ if (!context) {
2047
+ throw new Error("Switcher.Panel must be wrapped in <Switcher.Container>");
2048
+ }
2049
+ return context;
2050
+ };
2051
+ var resolveIndex = (index, count) => index < 0 && count > 0 ? (index % count + count) % count : index;
2052
+ var resolveTarget = (target, current, count) => {
2053
+ if (count <= 0) return null;
2054
+ const base = resolveIndex(current, count);
2055
+ if (target === "next") return (base + 1) % count;
2056
+ if (target === "previous") return (base - 1 + count) % count;
2057
+ return resolveIndex(target, count);
2058
+ };
2059
+ var claimIndex = (registry2, id) => {
2060
+ if (!registry2.includes(id)) {
2061
+ registry2.push(id);
2062
+ }
2063
+ return registry2.indexOf(id);
2064
+ };
2065
+
2066
+ // src/components/Switcher/Switcher.tsx
2067
+ var import_jsx_runtime9 = require("react/jsx-runtime");
2068
+ var DEFAULT_ANIMATION_DURATION_MS = 200;
2069
+ var parseAnimation = (animation) => {
2070
+ if (!animation) return null;
2071
+ const parts = animation.split(",").map((s) => s.trim());
2072
+ return {
2073
+ in: parts[0],
2074
+ // e.g. "uk-animation-fade"
2075
+ out: parts[1] ?? parts[0]
2076
+ // Falls back to same class for single-animation mode.
2077
+ };
2078
+ };
2079
+ var SwitcherRoot = ({
2080
+ children,
2081
+ defaultValue = 0,
2082
+ value,
2083
+ onValueChange,
2084
+ animation,
2085
+ duration = DEFAULT_ANIMATION_DURATION_MS,
2086
+ followFocus = false,
2087
+ swiping = true
2088
+ }) => {
2089
+ const [selectedIndex = 0, setSelectedIndex] = useControllableState({
2090
+ prop: value,
2091
+ defaultProp: defaultValue,
2092
+ onChange: onValueChange
2093
+ });
2094
+ const [focusedIndex, setFocusedIndex] = React11.useState(null);
2095
+ React11.useEffect(() => {
2096
+ setFocusedIndex(null);
2097
+ }, [selectedIndex]);
2098
+ const triggerRegistry = [];
2099
+ const containerRegistry = [];
2100
+ const baseId = "ruk-switcher-" + React11.useId().replace(/:/g, "");
2101
+ const [triggerCount, setTriggerCount] = React11.useState(0);
2102
+ React11.useLayoutEffect(() => {
2103
+ if (triggerCount !== triggerRegistry.length) {
2104
+ setTriggerCount(triggerRegistry.length);
2105
+ }
2106
+ });
2107
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2108
+ SwitcherContext,
2109
+ {
2110
+ value: {
2111
+ baseId,
2112
+ triggerRegistry,
2113
+ containerRegistry,
2114
+ triggerCount,
2115
+ selectedIndex,
2116
+ setSelectedIndex,
2117
+ animation,
2118
+ duration,
2119
+ swiping,
2120
+ followFocus,
2121
+ focusedIndex,
2122
+ setFocusedIndex
2123
+ },
2124
+ children
2125
+ }
2126
+ );
2127
+ };
2128
+ var SwitcherList = ({ children, className, ref, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", { ref, role: "tablist", className: cn("ruk-switcher-list", className), ...props, children });
2129
+ var SwitcherTrigger = ({
2130
+ children,
2131
+ className,
2132
+ onClick,
2133
+ onKeyDown,
2134
+ onFocus,
2135
+ ...props
2136
+ }) => {
2137
+ const useButtonStyle = className?.includes("uk-button");
2138
+ const Comp = useButtonStyle ? "button" : UnstyledButton_default;
2139
+ const {
2140
+ baseId,
2141
+ triggerRegistry,
2142
+ selectedIndex,
2143
+ setSelectedIndex,
2144
+ followFocus,
2145
+ focusedIndex,
2146
+ setFocusedIndex,
2147
+ triggerCount
2148
+ } = useSwitcherContext();
2149
+ const id = React11.useId();
2150
+ const triggerIndex = claimIndex(triggerRegistry, id);
2151
+ const resolvedSelectedIndex = resolveIndex(selectedIndex, triggerCount);
2152
+ const isActive = triggerIndex === resolvedSelectedIndex;
2153
+ const isFocusable = (focusedIndex ?? resolvedSelectedIndex) === triggerIndex;
2154
+ const triggerId = `${baseId}-trigger-${triggerIndex}`;
2155
+ const panelId = `${baseId}-panel-0-${triggerIndex}`;
2156
+ const handleClick = (event) => {
2157
+ onClick?.(event);
2158
+ if (event.defaultPrevented || props.disabled || triggerIndex < 0) return;
2159
+ setSelectedIndex(triggerIndex);
2160
+ };
2161
+ const handleKeyDown = (event) => {
2162
+ onKeyDown?.(event);
2163
+ if (event.defaultPrevented || props.disabled || triggerIndex < 0) return;
2164
+ const length = triggerRegistry.length;
2165
+ let nextIndex = null;
2166
+ switch (event.key) {
2167
+ case "ArrowRight":
2168
+ nextIndex = (triggerIndex + 1) % length;
2169
+ break;
2170
+ case "ArrowLeft":
2171
+ nextIndex = (triggerIndex - 1 + length) % length;
2172
+ break;
2173
+ case "Home":
2174
+ nextIndex = 0;
2175
+ break;
2176
+ case "End":
2177
+ nextIndex = length - 1;
2178
+ break;
2179
+ case "Enter":
2180
+ case " ":
2181
+ setSelectedIndex(triggerIndex);
2182
+ event.preventDefault();
2183
+ return;
2184
+ default:
2185
+ return;
2186
+ }
2187
+ if (nextIndex !== null && nextIndex !== triggerIndex) {
2188
+ event.preventDefault();
2189
+ if (followFocus) {
2190
+ setSelectedIndex(nextIndex);
2191
+ }
2192
+ const nextTriggerId = `${baseId}-trigger-${nextIndex}`;
2193
+ document.getElementById(nextTriggerId)?.focus();
2194
+ }
2195
+ };
2196
+ const handleFocus = (event) => {
2197
+ onFocus?.(event);
2198
+ setFocusedIndex(triggerIndex);
2199
+ };
2200
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("li", { role: "presentation", className: cn(isActive && "uk-active"), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2201
+ Comp,
2202
+ {
2203
+ ...props,
2204
+ id: triggerId,
2205
+ "aria-controls": panelId,
2206
+ "aria-selected": isActive,
2207
+ tabIndex: isFocusable ? 0 : -1,
2208
+ className: cn(
2209
+ "ruk-switcher-trigger-button",
2210
+ useButtonStyle && isActive ? "uk-active" : "",
2211
+ className
2212
+ ),
2213
+ role: "tab",
2214
+ type: props.type ?? "button",
2215
+ onClick: handleClick,
2216
+ onKeyDown: handleKeyDown,
2217
+ onFocus: handleFocus,
2218
+ children
2219
+ }
2220
+ ) });
2221
+ };
2222
+ var SwitcherContainer = ({
2223
+ children,
2224
+ className,
2225
+ ref,
2226
+ ...props
2227
+ }) => {
2228
+ const { containerRegistry, swiping, triggerRegistry, selectedIndex, setSelectedIndex } = useSwitcherContext();
2229
+ const id = React11.useId();
2230
+ const containerIndex = claimIndex(containerRegistry, id);
2231
+ const panelRegistry = [];
2232
+ const [panelCount, setPanelCount] = React11.useState(0);
2233
+ React11.useLayoutEffect(() => {
2234
+ if (panelCount !== panelRegistry.length) {
2235
+ setPanelCount(panelRegistry.length);
2236
+ }
2237
+ });
2238
+ const [animGen, setAnimGen] = React11.useState(0);
2239
+ const notifyOutComplete = React11.useCallback(() => {
2240
+ setAnimGen((g) => g + 1);
2241
+ }, []);
2242
+ const localRef = React11.useRef(null);
2243
+ useSwipe(localRef, {
2244
+ enabled: swiping,
2245
+ onSwipeLeft: () => {
2246
+ const nextIndex = resolveTarget("next", selectedIndex, triggerRegistry.length);
2247
+ if (nextIndex !== null) setSelectedIndex(nextIndex);
2248
+ },
2249
+ onSwipeRight: () => {
2250
+ const prevIndex = resolveTarget("previous", selectedIndex, triggerRegistry.length);
2251
+ if (prevIndex !== null) setSelectedIndex(prevIndex);
2252
+ }
2253
+ });
2254
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2255
+ ContainerContext,
2256
+ {
2257
+ value: {
2258
+ panelRegistry,
2259
+ containerIndex,
2260
+ panelCount,
2261
+ animationGeneration: animGen,
2262
+ notifyOutComplete
2263
+ },
2264
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2265
+ "div",
2266
+ {
2267
+ ...props,
2268
+ ref: (node) => {
2269
+ localRef.current = node;
2270
+ if (typeof ref === "function") {
2271
+ ref(node);
2272
+ } else if (ref) {
2273
+ ref.current = node;
2274
+ }
2275
+ },
2276
+ className: cn("uk-switcher", className),
2277
+ style: { touchAction: swiping ? "pan-y pinch-zoom" : void 0, ...props.style },
2278
+ children
2279
+ }
2280
+ )
2281
+ }
2282
+ );
2283
+ };
2284
+ var SwitcherPanel = ({ children, className, ref, ...props }) => {
2285
+ const { baseId, selectedIndex, animation, duration } = useSwitcherContext();
2286
+ const { panelRegistry, containerIndex, panelCount, animationGeneration, notifyOutComplete } = useContainerContext();
2287
+ const id = React11.useId();
2288
+ const panelIndex = claimIndex(panelRegistry, id);
2289
+ const resolvedSelectedIndex = resolveIndex(selectedIndex, panelCount);
2290
+ const isActive = panelIndex === resolvedSelectedIndex;
2291
+ const animConfig = React11.useMemo(() => parseAnimation(animation), [animation]);
2292
+ const prefersReducedMotion = typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
2293
+ const effectiveAnimConfig = prefersReducedMotion ? null : animConfig;
2294
+ const [phase, setPhase] = React11.useState("idle");
2295
+ const [prevIsActive, setPrevIsActive] = React11.useState(isActive);
2296
+ const [targetGen, setTargetGen] = React11.useState(animationGeneration);
2297
+ if (isActive !== prevIsActive) {
2298
+ setPrevIsActive(isActive);
2299
+ if (!effectiveAnimConfig) {
2300
+ setPhase("idle");
2301
+ } else if (!prevIsActive && isActive) {
2302
+ setPhase("waiting-in");
2303
+ setTargetGen(animationGeneration);
2304
+ } else {
2305
+ setPhase("animating-out");
2306
+ }
2307
+ }
2308
+ React11.useEffect(() => {
2309
+ if (phase === "animating-out") {
2310
+ return () => {
2311
+ notifyOutComplete();
2312
+ };
2313
+ }
2314
+ }, [phase, notifyOutComplete]);
2315
+ React11.useEffect(() => {
2316
+ if (phase === "waiting-in" && animationGeneration > targetGen) {
2317
+ setPhase("animating-in");
2318
+ }
2319
+ }, [phase, animationGeneration, targetGen]);
2320
+ let animClass = "";
2321
+ const isAnimating = phase === "animating-out" || phase === "animating-in";
2322
+ if (phase === "animating-out" && effectiveAnimConfig) {
2323
+ animClass = cn(
2324
+ effectiveAnimConfig.out,
2325
+ "uk-animation",
2326
+ "uk-animation-leave",
2327
+ "uk-animation-reverse"
2328
+ );
2329
+ } else if (phase === "animating-in" && effectiveAnimConfig) {
2330
+ animClass = cn(effectiveAnimConfig.in, "uk-animation", "uk-animation-enter");
2331
+ }
2332
+ const animStyle = isAnimating ? { animationDuration: duration + "ms" } : void 0;
2333
+ const isVisible = isActive && phase !== "waiting-in" || phase === "animating-out";
2334
+ const panelId = `${baseId}-panel-${containerIndex}-${panelIndex}`;
2335
+ const triggerId = `${baseId}-trigger-${panelIndex}`;
2336
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2337
+ "div",
2338
+ {
2339
+ ...props,
2340
+ ref,
2341
+ role: "tabpanel",
2342
+ "aria-labelledby": triggerId,
2343
+ id: panelId,
2344
+ className: cn(className, isVisible && "uk-active", animClass),
2345
+ style: { ...props.style, ...animStyle },
2346
+ tabIndex: 0,
2347
+ onAnimationEnd: (e) => {
2348
+ if (e.target !== e.currentTarget) return;
2349
+ if (phase === "animating-out" || phase === "animating-in") {
2350
+ setPhase("idle");
2351
+ }
2352
+ props.onAnimationEnd?.(e);
2353
+ },
2354
+ children
2355
+ }
2356
+ );
2357
+ };
2358
+ var SwitcherItem = ({ to, className, onClick, ref, ...props }) => {
2359
+ const { selectedIndex, setSelectedIndex, triggerCount } = useSwitcherContext();
2360
+ const handleClick = (event) => {
2361
+ onClick?.(event);
2362
+ if (event.defaultPrevented || props.disabled) return;
2363
+ const nextIndex = resolveTarget(to, selectedIndex, triggerCount);
2364
+ if (nextIndex !== null) setSelectedIndex(nextIndex);
2365
+ };
2366
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2367
+ UnstyledButton_default,
2368
+ {
2369
+ ...props,
2370
+ type: props.type ?? "button",
2371
+ className: cn("ruk-switcher-item", className),
2372
+ onClick: handleClick,
2373
+ ref
2374
+ }
2375
+ );
2376
+ };
2377
+ var Switcher = {
2378
+ Root: SwitcherRoot,
2379
+ List: SwitcherList,
2380
+ Trigger: SwitcherTrigger,
2381
+ Container: SwitcherContainer,
2382
+ Panel: SwitcherPanel,
2383
+ Item: SwitcherItem
2384
+ };
2385
+ // Annotate the CommonJS export names for ESM import in node:
2386
+ 0 && (module.exports = {
2387
+ Accordion,
2388
+ Alert,
2389
+ Close,
2390
+ Grid,
2391
+ Icon,
2392
+ OffCanvas,
2393
+ Switcher,
2394
+ cn,
2395
+ getIconCategory,
2396
+ getIconsByCategory
2397
+ });