@hearthscale/app-ui 0.2.3 → 0.3.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/README.md +15 -15
- package/dist/CLASSES.md +31 -14
- package/dist/TOKENS.md +14 -12
- package/dist/brand/linux-tux.svg +438 -0
- package/dist/brand/windows-tile.svg +13 -0
- package/dist/chunks/{chunk-SFZCPZQD.js → chunk-UDXTR7UW.js} +2 -0
- package/dist/fonts/InterVariable-latin.woff2 +0 -0
- package/dist/index.d.ts +153 -83
- package/dist/index.js +272 -181
- package/dist/markdown.js +24 -2
- package/dist/ui.css +427 -174
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
PackageGlyph,
|
|
11
11
|
SearchGlyph,
|
|
12
12
|
TrashGlyph
|
|
13
|
-
} from "./chunks/chunk-
|
|
13
|
+
} from "./chunks/chunk-UDXTR7UW.js";
|
|
14
14
|
|
|
15
15
|
// ../ui/dist/Button.js
|
|
16
16
|
import { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -206,7 +206,8 @@ function anchorFrom(key, e) {
|
|
|
206
206
|
element: e.currentTarget
|
|
207
207
|
};
|
|
208
208
|
}
|
|
209
|
-
|
|
209
|
+
var spaces = (n) => `calc(var(--space) * ${n})`;
|
|
210
|
+
function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = spaces(45), maxWidth, maxHeight, fit = false, keyboard = false, onDismiss, children }) {
|
|
210
211
|
const menu = useRef2(null);
|
|
211
212
|
const [root] = useState(() => popupRoot(anchor.element));
|
|
212
213
|
const grace = useSafeTriangle(anchor.element, menu, root, onDismiss, !keyboard);
|
|
@@ -276,10 +277,14 @@ function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = 180, max
|
|
|
276
277
|
padding: 8,
|
|
277
278
|
apply({ availableWidth, availableHeight, elements, rects }) {
|
|
278
279
|
const surface = elements.floating.firstElementChild;
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
280
|
+
const room = `${Math.max(0, availableWidth)}px`;
|
|
281
|
+
const tall = `${Math.max(0, availableHeight)}px`;
|
|
282
|
+
const own = `${rects.reference.width}px`;
|
|
283
|
+
const wanted = fit ? own : `max(${minWidth}, ${own})`;
|
|
284
|
+
const most = fit ? wanted : maxWidth === void 0 ? null : `max(${wanted}, ${maxWidth})`;
|
|
285
|
+
surface.style.minWidth = `min(${wanted}, ${room})`;
|
|
286
|
+
surface.style.maxWidth = most ? `min(${most}, ${room})` : room;
|
|
287
|
+
surface.style.maxHeight = maxHeight === void 0 ? tall : `min(${maxHeight}, ${tall})`;
|
|
283
288
|
if (fit)
|
|
284
289
|
surface.style.borderRadius = getComputedStyle(anchor.element).borderRadius;
|
|
285
290
|
}
|
|
@@ -299,9 +304,13 @@ function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = 180, max
|
|
|
299
304
|
useEffect2(() => {
|
|
300
305
|
const floating = menu.current;
|
|
301
306
|
const wheel = (e) => {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
307
|
+
for (let at = e.target; at; at = at.parentElement) {
|
|
308
|
+
if (at.scrollHeight > at.clientHeight && getComputedStyle(at).overflowY !== "hidden")
|
|
309
|
+
return;
|
|
310
|
+
if (at === floating)
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
e.preventDefault();
|
|
305
314
|
};
|
|
306
315
|
floating.addEventListener("wheel", wheel, { passive: false });
|
|
307
316
|
return () => floating.removeEventListener("wheel", wheel);
|
|
@@ -330,7 +339,10 @@ function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = 180, max
|
|
|
330
339
|
event.preventDefault();
|
|
331
340
|
choices[next]?.focus();
|
|
332
341
|
}
|
|
333
|
-
}, style: pos, children: _jsx5("div", { className: "hs-menu hs-menu-surface", role: keyboard ? "menu" : void 0, style: {
|
|
342
|
+
}, style: pos, children: _jsx5("div", { className: "hs-menu hs-menu-surface", role: keyboard ? "menu" : void 0, style: {
|
|
343
|
+
minWidth: `min(${minWidth}, calc(100vw - var(--space) * 4))`,
|
|
344
|
+
...maxWidth !== void 0 && { maxWidth }
|
|
345
|
+
}, children: _jsx5(PopupNest.Provider, { value: grace.nest, children: _jsx5(OpenSubmenu.Provider, { value: submenu, children }) }) }) }), root);
|
|
334
346
|
}
|
|
335
347
|
var OpenSubmenu = createContext2(null);
|
|
336
348
|
function MItem({ icon, label, sub, chip, checked, selected, danger, disabled, onClick, trailing }) {
|
|
@@ -341,7 +353,7 @@ function MItem({ icon, label, sub, chip, checked, selected, danger, disabled, on
|
|
|
341
353
|
}
|
|
342
354
|
}, children: [icon, _jsxs3("span", { className: "hs-menu-label", children: [_jsx5("span", { className: "hs-menu-title", children: label }), sub && _jsx5("span", { className: "hs-menu-sub", children: sub })] }), chip && _jsx5("span", { className: "hs-menu-chip", children: chip }), checked && _jsx5(CheckGlyph, { size: 13 }), trailing] });
|
|
343
355
|
}
|
|
344
|
-
function MSub({ icon, label, minWidth =
|
|
356
|
+
function MSub({ icon, label, minWidth = spaces(55), children }) {
|
|
345
357
|
const id = useId();
|
|
346
358
|
const open = useContext(OpenSubmenu);
|
|
347
359
|
const [anchor, setAnchor] = useState(null);
|
|
@@ -366,34 +378,10 @@ function MDivider() {
|
|
|
366
378
|
function MSection({ children }) {
|
|
367
379
|
return _jsx5("div", { className: "hs-menu-section", children });
|
|
368
380
|
}
|
|
369
|
-
function Tip({
|
|
370
|
-
|
|
371
|
-
useEffect2(() => {
|
|
372
|
-
const wrap = tip.current?.parentElement;
|
|
373
|
-
if (!wrap)
|
|
374
|
-
return;
|
|
375
|
-
const close = () => {
|
|
376
|
-
wrap.dataset.tipClosed = "true";
|
|
377
|
-
};
|
|
378
|
-
const open = () => {
|
|
379
|
-
delete wrap.dataset.tipClosed;
|
|
380
|
-
};
|
|
381
|
-
const blur = () => {
|
|
382
|
-
if (wrap.matches(":hover"))
|
|
383
|
-
close();
|
|
384
|
-
};
|
|
385
|
-
wrap.addEventListener("pointerdown", close);
|
|
386
|
-
wrap.addEventListener("mouseleave", open);
|
|
387
|
-
window.addEventListener("blur", blur);
|
|
388
|
-
return () => {
|
|
389
|
-
wrap.removeEventListener("pointerdown", close);
|
|
390
|
-
wrap.removeEventListener("mouseleave", open);
|
|
391
|
-
window.removeEventListener("blur", blur);
|
|
392
|
-
};
|
|
393
|
-
}, []);
|
|
394
|
-
return _jsxs3("span", { ref: tip, className: "hs-tip hs-tooltip", "data-sub": Boolean(sub), style, children: [_jsx5("span", { className: "hs-tooltip-title", children: title }), sub && _jsx5("span", { className: "hs-tooltip-sub", children: sub }), chip && _jsx5("span", { className: "hs-tooltip-chip", children: chip })] });
|
|
381
|
+
function Tip({ title, sub, chip }) {
|
|
382
|
+
return _jsxs3("span", { className: "hs-tip hs-tooltip", "data-sub": Boolean(sub), children: [_jsx5("span", { className: "hs-tooltip-title", children: title }), sub && _jsx5("span", { className: "hs-tooltip-sub", children: sub }), chip && _jsx5("span", { className: "hs-tooltip-chip", children: chip })] });
|
|
395
383
|
}
|
|
396
|
-
function FloatingTip({ anchor, text,
|
|
384
|
+
function FloatingTip({ anchor, text, more, placement = "bottom-start", onPress }) {
|
|
397
385
|
const floating = useRef2(null);
|
|
398
386
|
const [pos, setPos] = useState({ visibility: "hidden" });
|
|
399
387
|
useEffect2(() => {
|
|
@@ -417,20 +405,25 @@ function FloatingTip({ anchor, text, chip, placement = "bottom-start", onPress }
|
|
|
417
405
|
cleanup();
|
|
418
406
|
};
|
|
419
407
|
}, [anchor, placement]);
|
|
420
|
-
return createPortal(_jsx5("div", { ref: floating, className: "hs-menu-position hs-floating-tip", style: pos, children: _jsx5(Tip, { title: text, ...
|
|
408
|
+
return createPortal(_jsx5("div", { ref: floating, className: "hs-menu-position hs-floating-tip", style: pos, children: _jsx5(Tip, { title: text, ...more }) }), popupRoot(anchor));
|
|
421
409
|
}
|
|
422
410
|
function useFloatingTips(placement) {
|
|
423
411
|
const [shown, setShown] = useState(null);
|
|
424
412
|
const [hide] = useState(() => () => setShown(null));
|
|
425
|
-
return (key, text,
|
|
426
|
-
|
|
427
|
-
|
|
413
|
+
return (key, text, more) => ({
|
|
414
|
+
show: (anchor) => setShown({ key, anchor }),
|
|
415
|
+
hide,
|
|
428
416
|
hover: {
|
|
429
417
|
onMouseEnter: (e) => setShown({ key, anchor: e.currentTarget }),
|
|
418
|
+
onFocus: (e) => {
|
|
419
|
+
if (e.target.matches(":focus-visible"))
|
|
420
|
+
setShown({ key, anchor: e.currentTarget });
|
|
421
|
+
},
|
|
422
|
+
onBlur: () => setShown(null),
|
|
430
423
|
onMouseLeave: () => setShown(null),
|
|
431
424
|
onMouseDown: () => setShown(null)
|
|
432
425
|
},
|
|
433
|
-
tip: text && shown?.key === key && shown.anchor.isConnected ? _jsx5(FloatingTip, { anchor: shown.anchor, text,
|
|
426
|
+
tip: text && shown?.key === key && shown.anchor.isConnected ? _jsx5(FloatingTip, { anchor: shown.anchor, text, more, ...placement && { placement }, onPress: hide }) : null
|
|
434
427
|
});
|
|
435
428
|
}
|
|
436
429
|
|
|
@@ -438,7 +431,7 @@ function useFloatingTips(placement) {
|
|
|
438
431
|
function Chip({ children, tone = "neutral", icon, title, selected, onClick }) {
|
|
439
432
|
const tips = useFloatingTips();
|
|
440
433
|
const { hover, tip } = tips("chip", title);
|
|
441
|
-
const content = _jsxs4(_Fragment2, { children: [icon && _jsx6("span", { className: "hs-chip-mark", children: icon }), _jsx6("span", { className: "hs-chip-text", ...selected !== void 0 && typeof children === "string" && { "data-text": children }, children }), tip] });
|
|
434
|
+
const content = _jsxs4(_Fragment2, { children: [icon && _jsx6("span", { className: "hs-chip-mark", children: icon }), _jsx6("span", { className: "hs-chip-text hs-cut", ...selected !== void 0 && typeof children === "string" && { "data-text": children }, children }), tip] });
|
|
442
435
|
if (selected !== void 0) {
|
|
443
436
|
return _jsx6("button", { type: "button", className: "hs-chip", "data-sel": selected ? "true" : "false", "aria-pressed": selected, onClick, ...hover, children: content });
|
|
444
437
|
}
|
|
@@ -532,7 +525,7 @@ function SegmentedControl({ value, options, onChange, label, disabled = false })
|
|
|
532
525
|
|
|
533
526
|
// ../ui/dist/settings.js
|
|
534
527
|
import { jsx as _jsx13, jsxs as _jsxs7, Fragment as _Fragment4 } from "react/jsx-runtime";
|
|
535
|
-
import { createContext as createContext3, useContext as useContext2, useLayoutEffect as useLayoutEffect2, useState as useState2 } from "react";
|
|
528
|
+
import { createContext as createContext3, useContext as useContext2, useLayoutEffect as useLayoutEffect2, useEffect as useEffect4, useState as useState2 } from "react";
|
|
536
529
|
function SettingsCard({ children }) {
|
|
537
530
|
return _jsx13("div", { className: "hs-settings-card", children });
|
|
538
531
|
}
|
|
@@ -544,27 +537,30 @@ function HelpTip({ text, onOpen }) {
|
|
|
544
537
|
const inner = _jsxs7(_Fragment4, { children: [_jsx13(HelpGlyph, { size: 13 }), tip] });
|
|
545
538
|
return onOpen ? _jsx13("button", { type: "button", className: "hs-help-button", onClick: onOpen, ...hover, children: inner }) : _jsx13("span", { className: "hs-help-mark", ...hover, children: inner });
|
|
546
539
|
}
|
|
547
|
-
function SettingsSearch({ value, placeholder, onChange }) {
|
|
548
|
-
return _jsxs7("label", { className: "hs-url hs-settings-search", children: [_jsx13(SearchGlyph, { size: 12 }), _jsx13("input", { className: "hs-in hs-urlin", "aria-label": placeholder, placeholder, spellCheck: false, value, onChange: (e) => onChange(e.target.value) }), _jsx13("span", { "aria-hidden": "true", className: "hs-urlph hs-ph-icon", children: placeholder })] });
|
|
540
|
+
function SettingsSearch({ value, placeholder, onChange, autoFocus }) {
|
|
541
|
+
return _jsxs7("label", { className: "hs-url hs-settings-search", children: [_jsx13(SearchGlyph, { size: 12 }), _jsx13("input", { className: "hs-in hs-urlin", "aria-label": placeholder, placeholder, spellCheck: false, value, ...autoFocus && { autoFocus: true }, onChange: (e) => onChange(e.target.value) }), _jsx13("span", { "aria-hidden": "true", className: "hs-urlph hs-ph-icon", children: placeholder })] });
|
|
549
542
|
}
|
|
550
|
-
function SettingsSelect({ value, options, onPick, minWidth =
|
|
543
|
+
function SettingsSelect({ value, options, onPick, minWidth = spaces(45), menuHeight, menuWidth, placeholder, disabled, label, note }) {
|
|
551
544
|
const [anchor, setAnchor] = useState2(null);
|
|
552
545
|
const current = options.find((o) => o.value === value);
|
|
553
546
|
return _jsxs7("span", { className: "hs-select-wrap", children: [_jsxs7("button", { type: "button", className: "hs-glassbtn hs-hovink hs-inktext hs-select", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": anchor !== null, disabled, "data-open": anchor ? "true" : "false", onClick: (e) => {
|
|
554
547
|
const next = anchorFrom("select", e);
|
|
555
548
|
setAnchor((current2) => current2 ? null : next);
|
|
556
|
-
}, children: [current?.label ?? (value || placeholder), _jsx13(ChevronDownGlyph, { size: 11 })] }), anchor && _jsx13(MenuSurface, { keyboard: true, anchor, onDismiss: () => setAnchor(null), minWidth, ...menuHeight !== void 0 && { maxHeight: menuHeight }, ...menuWidth !== void 0 && { maxWidth: menuWidth }, children: options.map((option) => _jsx13(MItem, { label: option.label, ...option.sub && { sub: option.sub }, ...option.trailing && { trailing: option.trailing }, ...option.disabled && { disabled: true }, checked: option.value === value, onClick: () => {
|
|
549
|
+
}, children: [_jsx13("span", { className: "hs-select-label", children: current?.label ?? (value || placeholder) }), note && _jsx13("span", { className: "hs-select-note", children: note }), _jsx13(ChevronDownGlyph, { size: 11 })] }), anchor && _jsx13(MenuSurface, { keyboard: true, anchor, onDismiss: () => setAnchor(null), minWidth, ...menuHeight !== void 0 && { maxHeight: menuHeight }, ...menuWidth !== void 0 && { maxWidth: menuWidth }, children: options.map((option) => _jsx13(MItem, { label: option.label, ...option.sub && { sub: option.sub }, ...option.trailing && { trailing: option.trailing }, ...option.disabled && { disabled: true }, checked: option.value === value, onClick: () => {
|
|
557
550
|
anchor.element.focus();
|
|
558
551
|
setAnchor(null);
|
|
559
552
|
onPick(option.value);
|
|
560
553
|
} }, option.value)) })] });
|
|
561
554
|
}
|
|
562
|
-
function ToggleRow({ id, title, sub, help, on, onFlip }) {
|
|
555
|
+
function ToggleRow({ id, mark, title, sub, help, actions, on, onFlip }) {
|
|
563
556
|
const docs = useContext2(SettingsDocs);
|
|
564
557
|
const open = id ? docs(id) : void 0;
|
|
565
|
-
return _jsxs7("div", { className: "hs-setrow hs-toggle-row", "data-row": id, children: [_jsxs7("span", { className: "hs-setting-label", children: [_jsxs7("span", { className: "hs-setting-label-line", children: [_jsx13("span", { className: "hs-setting-title", children: title }), help && _jsx13(HelpTip, { text: help, ...open && { onOpen: open } })] }), sub && _jsx13("span", { className: "hs-setting-sub", children: sub })] }), _jsx13(Toggle, { checked: on, "aria-label": title, disabled: !onFlip, ...onFlip && { onChange: onFlip } })] });
|
|
558
|
+
return _jsxs7("div", { className: "hs-setrow hs-toggle-row", "data-row": id, children: [mark && _jsx13("span", { className: "hs-row-mark", children: mark }), _jsxs7("span", { className: "hs-setting-label", children: [_jsxs7("span", { className: "hs-setting-label-line", children: [_jsx13("span", { className: "hs-setting-title", children: title }), help && _jsx13(HelpTip, { text: help, ...open && { onOpen: open } })] }), sub && _jsx13("span", { className: "hs-setting-sub", children: sub })] }), actions && _jsx13(SettingControls, { children: actions }), _jsx13(Toggle, { checked: on, "aria-label": title, disabled: !onFlip, ...onFlip && { onChange: onFlip } })] });
|
|
566
559
|
}
|
|
567
560
|
var SettingsDocs = createContext3(() => void 0);
|
|
561
|
+
function SettingControls({ children }) {
|
|
562
|
+
return _jsx13("span", { className: "hs-setting-controls", children });
|
|
563
|
+
}
|
|
568
564
|
function InfoRow({ id, title, sub, help, helpOpen, value }) {
|
|
569
565
|
const docs = useContext2(SettingsDocs);
|
|
570
566
|
const open = helpOpen ?? (id ? docs(id) : void 0);
|
|
@@ -594,53 +590,63 @@ function SettingsTabs({ label, value, tabs, onPick, panelRef }) {
|
|
|
594
590
|
}, children: tab.label }, tab.value)) });
|
|
595
591
|
}
|
|
596
592
|
|
|
597
|
-
// ../ui/dist/
|
|
593
|
+
// ../ui/dist/Modal.js
|
|
598
594
|
import { jsx as _jsx14, jsxs as _jsxs8 } from "react/jsx-runtime";
|
|
599
|
-
import { useEffect as
|
|
595
|
+
import { useEffect as useEffect6, useRef as useRef6 } from "react";
|
|
600
596
|
|
|
601
|
-
// ../ui/dist/
|
|
602
|
-
import { useEffect as
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
for (const hear of hearers)
|
|
607
|
-
hear();
|
|
608
|
-
}
|
|
609
|
-
function useAsksPerson(on) {
|
|
610
|
-
useEffect4(() => {
|
|
611
|
-
if (!on)
|
|
612
|
-
return;
|
|
613
|
-
asking += 1;
|
|
614
|
-
tell();
|
|
615
|
-
return () => {
|
|
616
|
-
asking -= 1;
|
|
617
|
-
tell();
|
|
618
|
-
};
|
|
619
|
-
}, [on]);
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
// ../ui/dist/ShellConfirm.js
|
|
623
|
-
function ShellConfirm({ title, body, action, tone = "danger", icon = tone === "danger" ? _jsx14(TrashGlyph, { size: 13 }) : void 0, onConfirm, onCancel }) {
|
|
624
|
-
useAsksPerson(true);
|
|
597
|
+
// ../ui/dist/escape.js
|
|
598
|
+
import { useEffect as useEffect5, useRef as useRef5 } from "react";
|
|
599
|
+
function useEscape(onEscape) {
|
|
600
|
+
const live = useRef5(onEscape);
|
|
601
|
+
live.current = onEscape;
|
|
625
602
|
useEffect5(() => {
|
|
626
603
|
const onKey = (e) => {
|
|
627
|
-
if (e.key
|
|
628
|
-
|
|
629
|
-
e.preventDefault();
|
|
630
|
-
onCancel();
|
|
604
|
+
if (e.key === "Escape" && !e.defaultPrevented)
|
|
605
|
+
live.current();
|
|
631
606
|
};
|
|
632
|
-
window.addEventListener("keydown", onKey
|
|
633
|
-
return () => window.removeEventListener("keydown", onKey
|
|
634
|
-
}, [
|
|
635
|
-
return _jsx14("div", { className: "hs-confirm", onClick: (e) => {
|
|
636
|
-
e.stopPropagation();
|
|
637
|
-
onCancel();
|
|
638
|
-
}, children: _jsxs8("div", { className: "hs-confirm-box", role: "dialog", onClick: (e) => e.stopPropagation(), children: [_jsx14("span", { className: "hs-confirm-title", children: title }), _jsx14("span", { className: "hs-confirm-body", children: body }), _jsxs8("div", { className: "hs-confirm-footer", children: [_jsx14(Button, { className: "hs-confirm-cancel", onClick: onCancel, children: "Cancel" }), _jsx14(Button, { className: "hs-confirm-action", variant: tone, icon, onClick: onConfirm, children: action })] })] }) });
|
|
607
|
+
window.addEventListener("keydown", onKey);
|
|
608
|
+
return () => window.removeEventListener("keydown", onKey);
|
|
609
|
+
}, []);
|
|
639
610
|
}
|
|
640
611
|
|
|
612
|
+
// ../ui/dist/Modal.js
|
|
613
|
+
function Modal({ title, children, onClose, width = 460, scrim = true }) {
|
|
614
|
+
const panel = useRef6(null);
|
|
615
|
+
useEffect6(() => {
|
|
616
|
+
const previous = document.activeElement;
|
|
617
|
+
panel.current?.focus();
|
|
618
|
+
return () => previous?.focus();
|
|
619
|
+
}, []);
|
|
620
|
+
useEscape(onClose);
|
|
621
|
+
return _jsx14("div", { onClick: onClose, className: scrim ? "hs-modal-backdrop hs-scrim" : "hs-modal-backdrop", children: _jsxs8("div", { ref: panel, tabIndex: -1, role: "dialog", "aria-modal": "true", "aria-label": title, onKeyDown: (event) => {
|
|
622
|
+
if (event.key === "Escape") {
|
|
623
|
+
event.stopPropagation();
|
|
624
|
+
onClose();
|
|
625
|
+
}
|
|
626
|
+
if (event.key !== "Tab")
|
|
627
|
+
return;
|
|
628
|
+
const controls = [
|
|
629
|
+
...event.currentTarget.querySelectorAll('button:not(:disabled), input:not(:disabled), textarea:not(:disabled), a[href], [tabindex="0"]')
|
|
630
|
+
];
|
|
631
|
+
const first = controls[0];
|
|
632
|
+
const last = controls.at(-1);
|
|
633
|
+
if (event.shiftKey && (document.activeElement === first || document.activeElement === panel.current)) {
|
|
634
|
+
event.preventDefault();
|
|
635
|
+
last?.focus();
|
|
636
|
+
} else if (!event.shiftKey && document.activeElement === last) {
|
|
637
|
+
event.preventDefault();
|
|
638
|
+
first?.focus();
|
|
639
|
+
}
|
|
640
|
+
}, onClick: (event) => event.stopPropagation(), className: "hs-modal", style: { width }, children: [_jsxs8("div", { className: "hs-modal-head", children: [_jsx14("p", { className: "hs-modal-title", children: title }), _jsx14(IconButton, { "aria-label": `Close ${title.toLowerCase()}`, onClick: onClose, className: "hs-push-end", children: _jsx14(CloseGlyph, { size: 14 }) })] }), children] }) });
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// ../ui/dist/MultiSelect.js
|
|
644
|
+
import { jsx as _jsx16, jsxs as _jsxs10 } from "react/jsx-runtime";
|
|
645
|
+
import { useState as useState3 } from "react";
|
|
646
|
+
|
|
641
647
|
// ../ui/dist/OverlayScroll.js
|
|
642
648
|
import { jsx as _jsx15, jsxs as _jsxs9 } from "react/jsx-runtime";
|
|
643
|
-
import { useLayoutEffect as useLayoutEffect3, useRef as
|
|
649
|
+
import { useLayoutEffect as useLayoutEffect3, useRef as useRef7 } from "react";
|
|
644
650
|
function overlayThumb(scroller, thumb) {
|
|
645
651
|
let inset = 0;
|
|
646
652
|
let least = 0;
|
|
@@ -712,57 +718,125 @@ function overlayThumb(scroller, thumb) {
|
|
|
712
718
|
};
|
|
713
719
|
}
|
|
714
720
|
function OverlayScroll({ className, children }) {
|
|
715
|
-
const scroller =
|
|
716
|
-
const thumb =
|
|
721
|
+
const scroller = useRef7(null);
|
|
722
|
+
const thumb = useRef7(null);
|
|
717
723
|
useLayoutEffect3(() => overlayThumb(scroller.current, thumb.current), []);
|
|
718
724
|
return _jsxs9("div", { className: "hs-overlay-scroll", children: [_jsx15("div", { ref: scroller, className, children }), _jsx15("div", { ref: thumb, className: "hs-overlay-thumb", "aria-hidden": "true" })] });
|
|
719
725
|
}
|
|
720
726
|
|
|
727
|
+
// ../ui/dist/MultiSelect.js
|
|
728
|
+
var NAMED_MOST = 2;
|
|
729
|
+
var MENU_WIDTH = spaces(62.5);
|
|
730
|
+
function MultiSelect({ label, options, labelOf, picked, onPick, searchWords, countWord, onOpen, align, all }) {
|
|
731
|
+
const [anchor, setAnchor] = useState3(null);
|
|
732
|
+
const [search, setSearch] = useState3("");
|
|
733
|
+
const needle = search.trim().toLowerCase();
|
|
734
|
+
const shown = [...picked, ...options.filter((value) => !picked.includes(value))].filter((value) => !needle || value.includes(needle) || labelOf(value).toLowerCase().includes(needle));
|
|
735
|
+
const toggle = (value) => {
|
|
736
|
+
if (!picked.includes(value))
|
|
737
|
+
onPick([...picked, value]);
|
|
738
|
+
else if (all !== void 0 || picked.length > 1)
|
|
739
|
+
onPick(picked.filter((one) => one !== value));
|
|
740
|
+
};
|
|
741
|
+
const words = picked.length === 0 ? all : picked.length > NAMED_MOST ? `${picked.length} ${countWord}` : picked.map(labelOf).join(", ");
|
|
742
|
+
return _jsxs10("span", { className: "hs-select-wrap", children: [_jsxs10("button", { type: "button", className: "hs-glassbtn hs-hovink hs-inktext hs-select", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": anchor !== null, "data-open": anchor ? "true" : "false", onClick: (e) => {
|
|
743
|
+
const next = anchorFrom(label, e);
|
|
744
|
+
if (!anchor)
|
|
745
|
+
onOpen?.();
|
|
746
|
+
setAnchor(anchor ? null : next);
|
|
747
|
+
setSearch("");
|
|
748
|
+
}, children: [_jsx16("span", { className: "hs-select-label", children: words }), _jsx16(ChevronDownGlyph, { size: 11 })] }), anchor && _jsx16(MenuSurface, { keyboard: true, anchor, ...align && { align }, minWidth: MENU_WIDTH, maxWidth: MENU_WIDTH, onDismiss: () => setAnchor(null), children: _jsxs10("div", { className: "hs-multi-select-menu", children: [_jsx16("div", { className: "hs-menu-search", children: _jsx16(SettingsSearch, { value: search, placeholder: searchWords, onChange: setSearch }) }), _jsxs10(OverlayScroll, { className: "hs-scroll hs-multi-select-list", children: [all !== void 0 && !needle && _jsx16(MItem, { label: all, checked: picked.length === 0, onClick: () => onPick([]) }), shown.map((value) => _jsx16(MItem, { label: labelOf(value), checked: picked.includes(value), onClick: () => toggle(value) }, value))] })] }) })] });
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
// ../ui/dist/ShellConfirm.js
|
|
752
|
+
import { jsx as _jsx17, jsxs as _jsxs11 } from "react/jsx-runtime";
|
|
753
|
+
import { useEffect as useEffect8 } from "react";
|
|
754
|
+
|
|
755
|
+
// ../ui/dist/asking.js
|
|
756
|
+
import { useEffect as useEffect7, useSyncExternalStore } from "react";
|
|
757
|
+
var asking = 0;
|
|
758
|
+
var hearers = /* @__PURE__ */ new Set();
|
|
759
|
+
function tell() {
|
|
760
|
+
for (const hear of hearers)
|
|
761
|
+
hear();
|
|
762
|
+
}
|
|
763
|
+
function useAsksPerson(on) {
|
|
764
|
+
useEffect7(() => {
|
|
765
|
+
if (!on)
|
|
766
|
+
return;
|
|
767
|
+
asking += 1;
|
|
768
|
+
tell();
|
|
769
|
+
return () => {
|
|
770
|
+
asking -= 1;
|
|
771
|
+
tell();
|
|
772
|
+
};
|
|
773
|
+
}, [on]);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
// ../ui/dist/ShellConfirm.js
|
|
777
|
+
function ShellConfirm({ title, body, action, tone = "danger", icon = tone === "danger" ? _jsx17(TrashGlyph, { size: 13 }) : void 0, onConfirm, onCancel }) {
|
|
778
|
+
useAsksPerson(true);
|
|
779
|
+
useEffect8(() => {
|
|
780
|
+
const onKey = (e) => {
|
|
781
|
+
if (e.key !== "Escape")
|
|
782
|
+
return;
|
|
783
|
+
e.preventDefault();
|
|
784
|
+
onCancel();
|
|
785
|
+
};
|
|
786
|
+
window.addEventListener("keydown", onKey, true);
|
|
787
|
+
return () => window.removeEventListener("keydown", onKey, true);
|
|
788
|
+
}, [onCancel]);
|
|
789
|
+
return _jsx17("div", { className: "hs-confirm", onClick: (e) => {
|
|
790
|
+
e.stopPropagation();
|
|
791
|
+
onCancel();
|
|
792
|
+
}, children: _jsxs11("div", { className: "hs-confirm-box", role: "dialog", onClick: (e) => e.stopPropagation(), children: [_jsx17("span", { className: "hs-confirm-title", children: title }), _jsx17("span", { className: "hs-confirm-body", children: body }), _jsxs11("div", { className: "hs-confirm-footer", children: [_jsx17(Button, { className: "hs-confirm-cancel", onClick: onCancel, children: "Cancel" }), _jsx17(Button, { className: "hs-confirm-action", variant: tone, icon, onClick: onConfirm, children: action })] })] }) });
|
|
793
|
+
}
|
|
794
|
+
|
|
721
795
|
// ../ui/dist/Kbd.js
|
|
722
|
-
import { jsx as
|
|
796
|
+
import { jsx as _jsx18 } from "react/jsx-runtime";
|
|
723
797
|
function Kbd({ children }) {
|
|
724
|
-
return
|
|
798
|
+
return _jsx18("kbd", { className: "hs-kbd", children });
|
|
725
799
|
}
|
|
726
800
|
|
|
727
801
|
// ../ui/dist/Meter.js
|
|
728
|
-
import { jsx as
|
|
802
|
+
import { jsx as _jsx19, jsxs as _jsxs12 } from "react/jsx-runtime";
|
|
729
803
|
var RADIUS = 7.5;
|
|
730
804
|
var CIRCUMFERENCE = 2 * Math.PI * RADIUS;
|
|
731
805
|
function Meter({ value, label, variant = "bar", tone }) {
|
|
732
806
|
const share = Math.max(0, Math.min(1, value));
|
|
733
|
-
return
|
|
807
|
+
return _jsx19("span", { className: "hs-meter", "data-variant": variant, "data-tone": tone, role: "progressbar", "aria-label": label, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(share * 100), children: variant === "ring" ? _jsx19("svg", { width: 20, height: 20, viewBox: "0 0 20 20", "aria-hidden": "true", children: _jsxs12("g", { transform: "rotate(-90 10 10)", children: [_jsx19("circle", { className: "hs-meter-track", cx: 10, cy: 10, r: RADIUS }), _jsx19("circle", { className: "hs-meter-fill", cx: 10, cy: 10, r: RADIUS, strokeDasharray: CIRCUMFERENCE, strokeDashoffset: CIRCUMFERENCE * (1 - share) })] }) }) : _jsx19("span", { className: "hs-meter-fill", style: { width: `${share * 100}%` } }) });
|
|
734
808
|
}
|
|
735
809
|
|
|
736
810
|
// ../ui/dist/Lightbox.js
|
|
737
|
-
import { jsx as
|
|
738
|
-
import { useEffect as
|
|
811
|
+
import { jsx as _jsx20, jsxs as _jsxs13, Fragment as _Fragment5 } from "react/jsx-runtime";
|
|
812
|
+
import { useEffect as useEffect9, useLayoutEffect as useLayoutEffect4, useRef as useRef8, useState as useState4 } from "react";
|
|
739
813
|
import { createPortal as createPortal2 } from "react-dom";
|
|
740
814
|
var MAX_ZOOM = 8;
|
|
741
815
|
var CLICK_ZOOM = 2;
|
|
742
816
|
var DRAG_SLOP = 4;
|
|
743
817
|
var FIT = { scale: 1, x: 0, y: 0 };
|
|
744
818
|
function Lightbox({ items, start, onClose }) {
|
|
745
|
-
const [index, setIndex] =
|
|
746
|
-
const [view, setView] =
|
|
747
|
-
const [broken, setBroken] =
|
|
748
|
-
const [host, setHost] =
|
|
749
|
-
const anchor =
|
|
750
|
-
const stage =
|
|
751
|
-
const closer =
|
|
752
|
-
const drag =
|
|
819
|
+
const [index, setIndex] = useState4(start);
|
|
820
|
+
const [view, setView] = useState4(FIT);
|
|
821
|
+
const [broken, setBroken] = useState4(false);
|
|
822
|
+
const [host, setHost] = useState4(null);
|
|
823
|
+
const anchor = useRef8(null);
|
|
824
|
+
const stage = useRef8(null);
|
|
825
|
+
const closer = useRef8(null);
|
|
826
|
+
const drag = useRef8(null);
|
|
753
827
|
const item = items[index];
|
|
754
828
|
const many = items.length > 1;
|
|
755
829
|
useLayoutEffect4(() => {
|
|
756
830
|
setHost(anchor.current?.closest(".hs-shell") ?? document.body);
|
|
757
831
|
}, []);
|
|
758
|
-
|
|
832
|
+
useEffect9(() => {
|
|
759
833
|
if (!host)
|
|
760
834
|
return;
|
|
761
835
|
const opener = document.activeElement;
|
|
762
836
|
closer.current?.focus();
|
|
763
837
|
return () => opener?.focus();
|
|
764
838
|
}, [host]);
|
|
765
|
-
|
|
839
|
+
useEffect9(() => {
|
|
766
840
|
setView(FIT);
|
|
767
841
|
setBroken(false);
|
|
768
842
|
}, [index]);
|
|
@@ -778,7 +852,7 @@ function Lightbox({ items, start, onClose }) {
|
|
|
778
852
|
return { px: clientX - box.left - box.width / 2, py: clientY - box.top - box.height / 2 };
|
|
779
853
|
};
|
|
780
854
|
const step = (delta) => setIndex((i) => (i + delta + items.length) % items.length);
|
|
781
|
-
|
|
855
|
+
useEffect9(() => {
|
|
782
856
|
const onKey = (event) => {
|
|
783
857
|
if (event.key === "Escape")
|
|
784
858
|
onClose();
|
|
@@ -800,7 +874,7 @@ function Lightbox({ items, start, onClose }) {
|
|
|
800
874
|
window.addEventListener("keydown", onKey, true);
|
|
801
875
|
return () => window.removeEventListener("keydown", onKey, true);
|
|
802
876
|
});
|
|
803
|
-
|
|
877
|
+
useEffect9(() => {
|
|
804
878
|
const box = stage.current;
|
|
805
879
|
if (!box)
|
|
806
880
|
return;
|
|
@@ -843,34 +917,34 @@ function Lightbox({ items, start, onClose }) {
|
|
|
843
917
|
};
|
|
844
918
|
if (!item)
|
|
845
919
|
return null;
|
|
846
|
-
const dialog =
|
|
920
|
+
const dialog = _jsxs13("div", { className: "hs-lightbox", role: "dialog", "aria-modal": "true", "aria-label": item.name, onClick: onClose, children: [_jsxs13("div", { className: "hs-lightbox-bar", onClick: (e) => e.stopPropagation(), children: [item.onSave && _jsx20("button", { type: "button", className: "hs-lightbox-button", "aria-label": "Save", onClick: item.onSave, children: _jsx20(DownloadGlyph, { size: 16 }) }), item.onOpen && _jsx20("button", { type: "button", className: "hs-lightbox-button", "aria-label": "Open", onClick: (e) => item.onOpen?.(e.currentTarget), children: _jsx20(ExternalGlyph, { size: 16 }) }), _jsx20("button", { ref: closer, type: "button", className: "hs-lightbox-button", "aria-label": "Close", onClick: onClose, children: _jsx20(CloseGlyph, { size: 16 }) })] }), many && _jsx20("button", { type: "button", className: "hs-lightbox-step", "data-side": "previous", "aria-label": "Previous picture", onClick: (e) => {
|
|
847
921
|
e.stopPropagation();
|
|
848
922
|
step(-1);
|
|
849
|
-
}, children:
|
|
923
|
+
}, children: _jsx20(ChevronLeftGlyph, { size: 20 }) }), _jsxs13("div", { className: "hs-lightbox-body", onClick: (e) => e.stopPropagation(), children: [_jsx20("div", { ref: stage, className: "hs-lightbox-stage", "data-zoomed": view.scale > 1 ? "true" : "false", onPointerDown, onPointerMove, onPointerUp, children: broken ? _jsx20("span", { className: "hs-lightbox-broken", children: "This picture could not be loaded." }) : _jsx20("img", { src: item.src, alt: item.name, draggable: false, onError: () => setBroken(true), style: { transform: `translate(${view.x}px, ${view.y}px) scale(${view.scale})` } }) }), _jsxs13("span", { className: "hs-lightbox-caption", "aria-live": "polite", children: [item.name, many && ` (${index + 1} of ${items.length})`] }), item.note && _jsx20("div", { className: "hs-lightbox-note", children: item.note })] }), many && _jsx20("button", { type: "button", className: "hs-lightbox-step", "data-side": "next", "aria-label": "Next picture", onClick: (e) => {
|
|
850
924
|
e.stopPropagation();
|
|
851
925
|
step(1);
|
|
852
|
-
}, children:
|
|
853
|
-
return
|
|
926
|
+
}, children: _jsx20(ChevronRightGlyph, { size: 20 }) })] });
|
|
927
|
+
return _jsxs13(_Fragment5, { children: [_jsx20("span", { ref: anchor, hidden: true }), host && createPortal2(dialog, host)] });
|
|
854
928
|
}
|
|
855
929
|
|
|
856
930
|
// ../ui/dist/Slider.js
|
|
857
|
-
import { jsx as
|
|
931
|
+
import { jsx as _jsx21, jsxs as _jsxs14 } from "react/jsx-runtime";
|
|
858
932
|
function Slider({ value, onChange, min = 0, max = 1, step = 0.01, label, shown, disabled }) {
|
|
859
|
-
return
|
|
933
|
+
return _jsxs14("span", { className: "hs-slider", children: [_jsx21("input", { type: "range", className: "hs-range", "aria-label": label, "aria-valuetext": shown, min, max, step, value, disabled, onChange: (event) => onChange(Number(event.target.value)) }), shown !== void 0 && _jsx21("span", { className: "hs-slider-value", children: shown })] });
|
|
860
934
|
}
|
|
861
935
|
|
|
862
936
|
// ../ui/dist/Popover.js
|
|
863
|
-
import { jsx as
|
|
864
|
-
import { useEffect as
|
|
937
|
+
import { jsx as _jsx22 } from "react/jsx-runtime";
|
|
938
|
+
import { useEffect as useEffect10, useLayoutEffect as useLayoutEffect5, useRef as useRef9, useState as useState5 } from "react";
|
|
865
939
|
import { createPortal as createPortal3 } from "react-dom";
|
|
866
940
|
import { autoUpdate as autoUpdate2, computePosition as computePosition2, flip as flip2, offset as offset2, shift as shift2, size as size2 } from "@floating-ui/dom";
|
|
867
941
|
var tabbable = (panel) => [...panel.querySelectorAll(FOCUSABLE)].filter((control) => control.tabIndex >= 0);
|
|
868
942
|
var FOCUSABLE = 'button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"]), [contenteditable="true"]';
|
|
869
943
|
function Popover({ anchor, placement = "bottom-start", label, onDismiss, children }) {
|
|
870
|
-
const panel =
|
|
871
|
-
const [root] =
|
|
872
|
-
const [pos, setPos] =
|
|
873
|
-
const dismiss =
|
|
944
|
+
const panel = useRef9(null);
|
|
945
|
+
const [root] = useState5(() => popupRoot(anchor));
|
|
946
|
+
const [pos, setPos] = useState5({ visibility: "hidden" });
|
|
947
|
+
const dismiss = useRef9(onDismiss);
|
|
874
948
|
dismiss.current = onDismiss;
|
|
875
949
|
useLayoutEffect5(() => {
|
|
876
950
|
const floating = panel.current;
|
|
@@ -912,8 +986,8 @@ function Popover({ anchor, placement = "bottom-start", label, onDismiss, childre
|
|
|
912
986
|
anchor.focus();
|
|
913
987
|
};
|
|
914
988
|
}, [shown, anchor]);
|
|
915
|
-
const pressed =
|
|
916
|
-
|
|
989
|
+
const pressed = useRef9(null);
|
|
990
|
+
useEffect10(() => {
|
|
917
991
|
const outside = (event) => {
|
|
918
992
|
if (pressed.current !== event && !anchor.contains(event.target))
|
|
919
993
|
dismiss.current();
|
|
@@ -926,7 +1000,7 @@ function Popover({ anchor, placement = "bottom-start", label, onDismiss, childre
|
|
|
926
1000
|
window.removeEventListener("blur", blur);
|
|
927
1001
|
};
|
|
928
1002
|
}, [anchor]);
|
|
929
|
-
return createPortal3(
|
|
1003
|
+
return createPortal3(_jsx22("div", { ref: panel, className: "hs-popover", role: "dialog", "aria-label": label, tabIndex: -1, style: pos, onPointerDown: (event) => {
|
|
930
1004
|
pressed.current = event.nativeEvent;
|
|
931
1005
|
}, onKeyDown: (event) => {
|
|
932
1006
|
if (event.key === "Escape") {
|
|
@@ -956,15 +1030,15 @@ function Popover({ anchor, placement = "bottom-start", label, onDismiss, childre
|
|
|
956
1030
|
}
|
|
957
1031
|
|
|
958
1032
|
// ../ui/dist/Toast.js
|
|
959
|
-
import { jsx as
|
|
960
|
-
import { useEffect as
|
|
1033
|
+
import { jsx as _jsx23, jsxs as _jsxs15 } from "react/jsx-runtime";
|
|
1034
|
+
import { useEffect as useEffect11, useLayoutEffect as useLayoutEffect6, useRef as useRef10, useState as useState6 } from "react";
|
|
961
1035
|
import { createPortal as createPortal4 } from "react-dom";
|
|
962
1036
|
function Toast({ children, action, duration = 6e3, above, onClose }) {
|
|
963
|
-
const [root, setRoot] =
|
|
964
|
-
const place =
|
|
965
|
-
const [held, setHeld] =
|
|
966
|
-
const [anchor, setAnchor] =
|
|
967
|
-
const close =
|
|
1037
|
+
const [root, setRoot] = useState6(null);
|
|
1038
|
+
const place = useRef10(null);
|
|
1039
|
+
const [held, setHeld] = useState6({ pointer: false, focus: false });
|
|
1040
|
+
const [anchor, setAnchor] = useState6(null);
|
|
1041
|
+
const close = useRef10(onClose);
|
|
968
1042
|
close.current = onClose;
|
|
969
1043
|
useLayoutEffect6(() => {
|
|
970
1044
|
setRoot(place.current?.closest(".hs-shell") ?? document.body);
|
|
@@ -986,31 +1060,31 @@ function Toast({ children, action, duration = 6e3, above, onClose }) {
|
|
|
986
1060
|
return () => cancelAnimationFrame(frame);
|
|
987
1061
|
}, [above]);
|
|
988
1062
|
const waiting = !held.pointer && !held.focus;
|
|
989
|
-
|
|
1063
|
+
useEffect11(() => {
|
|
990
1064
|
if (!waiting)
|
|
991
1065
|
return;
|
|
992
1066
|
const timer = setTimeout(() => close.current(), duration);
|
|
993
1067
|
return () => clearTimeout(timer);
|
|
994
1068
|
}, [waiting, duration]);
|
|
995
|
-
return
|
|
1069
|
+
return _jsx23("span", { ref: place, hidden: true, children: root && createPortal4(_jsx23("div", { className: "hs-toast-place", ...anchor && {
|
|
996
1070
|
"data-above": "true",
|
|
997
1071
|
style: {
|
|
998
1072
|
bottom: `calc(${anchor.bottom}px + var(--space) * 4)`,
|
|
999
1073
|
left: `${anchor.left}px`,
|
|
1000
1074
|
width: `${anchor.width}px`
|
|
1001
1075
|
}
|
|
1002
|
-
}, children:
|
|
1076
|
+
}, children: _jsxs15("div", { className: "hs-toast", role: "status", "aria-live": "polite", onPointerEnter: () => setHeld((h) => ({ ...h, pointer: true })), onPointerLeave: () => setHeld((h) => ({ ...h, pointer: false })), onFocus: () => setHeld((h) => ({ ...h, focus: true })), onBlur: (event) => {
|
|
1003
1077
|
if (!event.currentTarget.contains(event.relatedTarget))
|
|
1004
1078
|
setHeld((h) => ({ ...h, focus: false }));
|
|
1005
|
-
}, children: [
|
|
1079
|
+
}, children: [_jsx23("span", { className: "hs-toast-text", children }), action && _jsx23(Button, { variant: "ghost", size: "sm", onClick: () => {
|
|
1006
1080
|
action.onPress();
|
|
1007
1081
|
close.current();
|
|
1008
|
-
}, children: action.label }),
|
|
1082
|
+
}, children: action.label }), _jsx23(IconButton, { size: "sm", "aria-label": "Close", onClick: () => close.current(), children: _jsx23(CloseGlyph, {}) })] }) }), root) });
|
|
1009
1083
|
}
|
|
1010
1084
|
|
|
1011
1085
|
// ../ui/dist/DatePicker.js
|
|
1012
|
-
import { jsx as
|
|
1013
|
-
import { useEffect as
|
|
1086
|
+
import { jsx as _jsx24, jsxs as _jsxs16, Fragment as _Fragment6 } from "react/jsx-runtime";
|
|
1087
|
+
import { useEffect as useEffect12, useMemo, useRef as useRef11, useState as useState7 } from "react";
|
|
1014
1088
|
var pad = (n, width = 2) => String(n).padStart(width, "0");
|
|
1015
1089
|
function instant(date) {
|
|
1016
1090
|
const [year, month, day] = date.split("-").map(Number);
|
|
@@ -1044,15 +1118,15 @@ function firstDayOfWeek(locale) {
|
|
|
1044
1118
|
var STEPS = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };
|
|
1045
1119
|
function DateGrid({ value, onChange, locale, min, max }) {
|
|
1046
1120
|
const now = today();
|
|
1047
|
-
const [focus, setFocus] =
|
|
1121
|
+
const [focus, setFocus] = useState7(value ?? now);
|
|
1048
1122
|
const month = monthOf(focus);
|
|
1049
|
-
const keyed =
|
|
1050
|
-
const days =
|
|
1051
|
-
|
|
1123
|
+
const keyed = useRef11(false);
|
|
1124
|
+
const days = useRef11(/* @__PURE__ */ new Map());
|
|
1125
|
+
useEffect12(() => {
|
|
1052
1126
|
if (value)
|
|
1053
1127
|
setFocus(value);
|
|
1054
1128
|
}, [value]);
|
|
1055
|
-
|
|
1129
|
+
useEffect12(() => {
|
|
1056
1130
|
if (!keyed.current)
|
|
1057
1131
|
return;
|
|
1058
1132
|
keyed.current = false;
|
|
@@ -1078,7 +1152,7 @@ function DateGrid({ value, onChange, locale, min, max }) {
|
|
|
1078
1152
|
keyed.current = true;
|
|
1079
1153
|
setFocus(min && next < min ? min : max && next > max ? max : next);
|
|
1080
1154
|
};
|
|
1081
|
-
return
|
|
1155
|
+
return _jsxs16("div", { className: "hs-date-grid", children: [_jsxs16("div", { className: "hs-date-grid-head", children: [_jsx24("span", { className: "hs-date-grid-month", "aria-live": "polite", children: words.month.format(instant(month)) }), _jsx24(IconButton, { size: "sm", "aria-label": "Previous month", onClick: () => setFocus(addMonths(focus, -1)), children: _jsx24(ChevronLeftGlyph, {}) }), _jsx24(IconButton, { size: "sm", "aria-label": "Next month", onClick: () => setFocus(addMonths(focus, 1)), children: _jsx24(ChevronRightGlyph, {}) })] }), _jsxs16("div", { className: "hs-date-grid-days", role: "grid", "aria-label": words.month.format(instant(month)), children: [_jsx24("div", { role: "row", className: "hs-date-grid-row", children: weeks[0].map((day) => _jsx24("span", { className: "hs-date-grid-weekday", role: "columnheader", "aria-label": words.long.format(instant(day)), children: words.narrow.format(instant(day)) }, day)) }), weeks.map((week) => _jsx24("div", { role: "row", className: "hs-date-grid-row", children: week.map((day) => _jsx24("button", { ref: (button) => {
|
|
1082
1156
|
if (button)
|
|
1083
1157
|
days.current.set(day, button);
|
|
1084
1158
|
else
|
|
@@ -1089,20 +1163,20 @@ function DateGrid({ value, onChange, locale, min, max }) {
|
|
|
1089
1163
|
}, onKeyDown: (event) => key(event, day), children: words.day.format(instant(day)) }, day)) }, week[0]))] })] });
|
|
1090
1164
|
}
|
|
1091
1165
|
function DatePicker({ value, onChange, locale, min, max, label, placeholder, disabled }) {
|
|
1092
|
-
const [anchor, setAnchor] =
|
|
1166
|
+
const [anchor, setAnchor] = useState7(null);
|
|
1093
1167
|
const shown = useMemo(() => new Intl.DateTimeFormat(locale, { dateStyle: "medium", timeZone: "UTC" }), [locale]);
|
|
1094
|
-
return
|
|
1168
|
+
return _jsxs16(_Fragment6, { children: [_jsx24("button", { type: "button", className: "hs-input hs-picker-field", "aria-label": label, "aria-haspopup": "dialog", "aria-expanded": anchor !== null, "data-empty": value === null, disabled, onClick: (event) => setAnchor(anchor ? null : event.currentTarget), children: value ? shown.format(instant(value)) : placeholder }), anchor && _jsx24(Popover, { anchor, label, onDismiss: () => setAnchor(null), children: _jsx24(DateGrid, { value, locale, ...min && { min }, ...max && { max }, onChange: (date) => {
|
|
1095
1169
|
onChange(date);
|
|
1096
1170
|
setAnchor(null);
|
|
1097
1171
|
} }) })] });
|
|
1098
1172
|
}
|
|
1099
1173
|
|
|
1100
1174
|
// ../ui/dist/TimePicker.js
|
|
1101
|
-
import { jsx as
|
|
1102
|
-
import { useMemo as useMemo2, useState as
|
|
1175
|
+
import { jsx as _jsx25, Fragment as _Fragment7, jsxs as _jsxs17 } from "react/jsx-runtime";
|
|
1176
|
+
import { useMemo as useMemo2, useState as useState8 } from "react";
|
|
1103
1177
|
var pad2 = (n) => String(n).padStart(2, "0");
|
|
1104
1178
|
function TimePicker({ value, onChange, locale, label, step = 15, placeholder, disabled }) {
|
|
1105
|
-
const [anchor, setAnchor] =
|
|
1179
|
+
const [anchor, setAnchor] = useState8(null);
|
|
1106
1180
|
const shown = useMemo2(() => new Intl.DateTimeFormat(locale, { hour: "numeric", minute: "2-digit", timeZone: "UTC" }), [locale]);
|
|
1107
1181
|
const words = (time) => {
|
|
1108
1182
|
const [hours, minutes] = time.split(":").map(Number);
|
|
@@ -1115,7 +1189,7 @@ function TimePicker({ value, onChange, locale, label, step = 15, placeholder, di
|
|
|
1115
1189
|
});
|
|
1116
1190
|
return value && !steps.includes(value) ? [...steps, value].sort() : steps;
|
|
1117
1191
|
}, [step, value]);
|
|
1118
|
-
return
|
|
1192
|
+
return _jsxs17(_Fragment7, { children: [_jsx25("button", { type: "button", className: "hs-input hs-picker-field", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": anchor !== null, "data-empty": value === null, disabled, onClick: (event) => setAnchor(anchor ? null : { key: "time", element: event.currentTarget }), children: value ? words(value) : placeholder }), anchor && _jsx25(MenuSurface, { anchor, fit: true, keyboard: true, maxHeight: spaces(70), onDismiss: () => setAnchor(null), children: times.map((time) => _jsx25(MItem, { label: words(time), checked: time === value, onClick: () => {
|
|
1119
1193
|
onChange(time);
|
|
1120
1194
|
setAnchor(null);
|
|
1121
1195
|
anchor.element.focus();
|
|
@@ -1123,8 +1197,8 @@ function TimePicker({ value, onChange, locale, label, step = 15, placeholder, di
|
|
|
1123
1197
|
}
|
|
1124
1198
|
|
|
1125
1199
|
// ../ui/dist/SwatchPicker.js
|
|
1126
|
-
import { jsx as
|
|
1127
|
-
import { useRef as
|
|
1200
|
+
import { jsx as _jsx26 } from "react/jsx-runtime";
|
|
1201
|
+
import { useRef as useRef12 } from "react";
|
|
1128
1202
|
var SWATCHES = [
|
|
1129
1203
|
"rose",
|
|
1130
1204
|
"ember",
|
|
@@ -1157,7 +1231,7 @@ var NAMES = {
|
|
|
1157
1231
|
};
|
|
1158
1232
|
var STEPS2 = { ArrowRight: 1, ArrowDown: 1, ArrowLeft: -1, ArrowUp: -1 };
|
|
1159
1233
|
function SwatchPicker({ value, onChange, label }) {
|
|
1160
|
-
const dots =
|
|
1234
|
+
const dots = useRef12([]);
|
|
1161
1235
|
const tips = useFloatingTips();
|
|
1162
1236
|
const step = (event, index) => {
|
|
1163
1237
|
const by = STEPS2[event.key];
|
|
@@ -1168,17 +1242,17 @@ function SwatchPicker({ value, onChange, label }) {
|
|
|
1168
1242
|
onChange(SWATCHES[next]);
|
|
1169
1243
|
dots.current[next]?.focus();
|
|
1170
1244
|
};
|
|
1171
|
-
return
|
|
1245
|
+
return _jsx26("div", { className: "hs-swatch-picker", role: "radiogroup", "aria-label": label, children: SWATCHES.map((swatch, index) => {
|
|
1172
1246
|
const tip = tips(swatch, NAMES[swatch]);
|
|
1173
|
-
return
|
|
1247
|
+
return _jsx26("button", { ref: (dot) => {
|
|
1174
1248
|
dots.current[index] = dot;
|
|
1175
1249
|
}, type: "button", role: "radio", "aria-checked": swatch === value, "aria-label": NAMES[swatch], tabIndex: swatch === value ? 0 : -1, className: "hs-swatch-choice", "data-swatch": swatch, onClick: () => onChange(swatch), onKeyDown: (event) => step(event, index), ...tip.hover, children: tip.tip }, swatch);
|
|
1176
1250
|
}) });
|
|
1177
1251
|
}
|
|
1178
1252
|
|
|
1179
1253
|
// ../ui/dist/PersonMark.js
|
|
1180
|
-
import { jsx as
|
|
1181
|
-
import { useEffect as
|
|
1254
|
+
import { jsx as _jsx27 } from "react/jsx-runtime";
|
|
1255
|
+
import { useEffect as useEffect13, useState as useState9 } from "react";
|
|
1182
1256
|
function initials(name) {
|
|
1183
1257
|
const trimmed = name.trim();
|
|
1184
1258
|
const words = (/\s/.test(trimmed) ? trimmed : trimmed.split("@")[0]).split(/[\s._-]+/).filter(Boolean);
|
|
@@ -1194,19 +1268,20 @@ function hueOf(name) {
|
|
|
1194
1268
|
return SWATCHES[(hash >>> 0) % 12];
|
|
1195
1269
|
}
|
|
1196
1270
|
function PersonMark({ name, picture, size: size3 = "md", swatch }) {
|
|
1197
|
-
const [broken, setBroken] =
|
|
1198
|
-
|
|
1199
|
-
return
|
|
1271
|
+
const [broken, setBroken] = useState9(false);
|
|
1272
|
+
useEffect13(() => setBroken(false), [picture]);
|
|
1273
|
+
return _jsx27("span", { className: "hs-person-mark", "data-size": size3, "data-swatch": swatch ?? hueOf(name), role: "img", "aria-label": name, children: picture && !broken ? _jsx27("img", { src: picture, alt: "", onError: () => setBroken(true) }) : initials(name) });
|
|
1200
1274
|
}
|
|
1201
1275
|
|
|
1202
1276
|
// ../ui/dist/ModelAvatar.js
|
|
1203
|
-
import { jsx as
|
|
1204
|
-
import { createContext as createContext4, useContext as useContext3, useState as
|
|
1277
|
+
import { jsx as _jsx29, jsxs as _jsxs18 } from "react/jsx-runtime";
|
|
1278
|
+
import { createContext as createContext4, useContext as useContext3, useState as useState10 } from "react";
|
|
1205
1279
|
|
|
1206
1280
|
// ../ui/dist/brand-marks.js
|
|
1207
|
-
import { jsx as
|
|
1281
|
+
import { jsx as _jsx28 } from "react/jsx-runtime";
|
|
1208
1282
|
|
|
1209
1283
|
// ../ui/dist/brand-svg.js
|
|
1284
|
+
var BRAND_FILES = ["linux"];
|
|
1210
1285
|
var BRAND_SVG = {
|
|
1211
1286
|
qwen: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z" fill="url(#lobe-icons-qwen-_R_0_)" fill-rule="nonzero"></path><defs><linearGradient id="lobe-icons-qwen-_R_0_" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#6336E7" stop-opacity=".84"></stop><stop offset="100%" stop-color="#6F69F7" stop-opacity=".84"></stop></linearGradient></defs></svg>',
|
|
1212
1287
|
meta: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M6.897 4h-.024l-.031 2.615h.022c1.715 0 3.046 1.357 5.94 6.246l.175.297.012.02 1.62-2.438-.012-.019a48.763 48.763 0 00-1.098-1.716 28.01 28.01 0 00-1.175-1.629C10.413 4.932 8.812 4 6.896 4z" fill="url(#lobe-icons-meta-0-_R_0_)"></path><path d="M6.873 4C4.95 4.01 3.247 5.258 2.02 7.17a4.352 4.352 0 00-.01.017l2.254 1.231.011-.017c.718-1.083 1.61-1.774 2.568-1.785h.021L6.896 4h-.023z" fill="url(#lobe-icons-meta-1-_R_0_)"></path><path d="M2.019 7.17l-.011.017C1.2 8.447.598 9.995.274 11.664l-.005.022 2.534.6.004-.022c.27-1.467.786-2.828 1.456-3.845l.011-.017L2.02 7.17z" fill="url(#lobe-icons-meta-2-_R_0_)"></path><path d="M2.807 12.264l-2.533-.6-.005.022c-.177.918-.267 1.851-.269 2.786v.023l2.598.233v-.023a12.591 12.591 0 01.21-2.44z" fill="url(#lobe-icons-meta-3-_R_0_)"></path><path d="M2.677 15.537a5.462 5.462 0 01-.079-.813v-.022L0 14.468v.024a8.89 8.89 0 00.146 1.652l2.535-.585a4.106 4.106 0 01-.004-.022z" fill="url(#lobe-icons-meta-4-_R_0_)"></path><path d="M3.27 16.89c-.284-.31-.484-.756-.589-1.328l-.004-.021-2.535.585.004.021c.192 1.01.568 1.85 1.106 2.487l.014.017 2.018-1.745a2.106 2.106 0 01-.015-.016z" fill="url(#lobe-icons-meta-5-_R_0_)"></path><path d="M10.78 9.654c-1.528 2.35-2.454 3.825-2.454 3.825-2.035 3.2-2.739 3.917-3.871 3.917a1.545 1.545 0 01-1.186-.508l-2.017 1.744.014.017C2.01 19.518 3.058 20 4.356 20c1.963 0 3.374-.928 5.884-5.33l1.766-3.13a41.283 41.283 0 00-1.227-1.886z" fill="#0082FB"></path><path d="M13.502 5.946l-.016.016c-.4.43-.786.908-1.16 1.416.378.483.768 1.024 1.175 1.63.48-.743.928-1.345 1.367-1.807l.016-.016-1.382-1.24z" fill="url(#lobe-icons-meta-6-_R_0_)"></path><path d="M20.918 5.713C19.853 4.633 18.583 4 17.225 4c-1.432 0-2.637.787-3.723 1.944l-.016.016 1.382 1.24.016-.017c.715-.747 1.408-1.12 2.176-1.12.826 0 1.6.39 2.27 1.075l.015.016 1.589-1.425-.016-.016z" fill="#0082FB"></path><path d="M23.998 14.125c-.06-3.467-1.27-6.566-3.064-8.396l-.016-.016-1.588 1.424.015.016c1.35 1.392 2.277 3.98 2.361 6.971v.023h2.292v-.022z" fill="url(#lobe-icons-meta-7-_R_0_)"></path><path d="M23.998 14.15v-.023h-2.292v.022c.004.14.006.282.006.424 0 .815-.121 1.474-.368 1.95l-.011.022 1.708 1.782.013-.02c.62-.96.946-2.293.946-3.91 0-.083 0-.165-.002-.247z" fill="url(#lobe-icons-meta-8-_R_0_)"></path><path d="M21.344 16.52l-.011.02c-.214.402-.519.67-.917.787l.778 2.462a3.493 3.493 0 00.438-.182 3.558 3.558 0 001.366-1.218l.044-.065.012-.02-1.71-1.784z" fill="url(#lobe-icons-meta-9-_R_0_)"></path><path d="M19.92 17.393c-.262 0-.492-.039-.718-.14l-.798 2.522c.449.153.927.222 1.46.222.492 0 .943-.073 1.352-.215l-.78-2.462c-.167.05-.341.075-.517.073z" fill="url(#lobe-icons-meta-10-_R_0_)"></path><path d="M18.323 16.534l-.014-.017-1.836 1.914.016.017c.637.682 1.246 1.105 1.937 1.337l.797-2.52c-.291-.125-.573-.353-.9-.731z" fill="url(#lobe-icons-meta-11-_R_0_)"></path><path d="M18.309 16.515c-.55-.642-1.232-1.712-2.303-3.44l-1.396-2.336-.011-.02-1.62 2.438.012.02.989 1.668c.959 1.61 1.74 2.774 2.493 3.585l.016.016 1.834-1.914a2.353 2.353 0 01-.014-.017z" fill="url(#lobe-icons-meta-12-_R_0_)"></path><defs><linearGradient id="lobe-icons-meta-0-_R_0_" x1="75.897%" x2="26.312%" y1="89.199%" y2="12.194%"><stop offset=".06%" stop-color="#0867DF"></stop><stop offset="45.39%" stop-color="#0668E1"></stop><stop offset="85.91%" stop-color="#0064E0"></stop></linearGradient><linearGradient id="lobe-icons-meta-1-_R_0_" x1="21.67%" x2="97.068%" y1="75.874%" y2="23.985%"><stop offset="13.23%" stop-color="#0064DF"></stop><stop offset="99.88%" stop-color="#0064E0"></stop></linearGradient><linearGradient id="lobe-icons-meta-2-_R_0_" x1="38.263%" x2="60.895%" y1="89.127%" y2="16.131%"><stop offset="1.47%" stop-color="#0072EC"></stop><stop offset="68.81%" stop-color="#0064DF"></stop></linearGradient><linearGradient id="lobe-icons-meta-3-_R_0_" x1="47.032%" x2="52.15%" y1="90.19%" y2="15.745%"><stop offset="7.31%" stop-color="#007CF6"></stop><stop offset="99.43%" stop-color="#0072EC"></stop></linearGradient><linearGradient id="lobe-icons-meta-4-_R_0_" x1="52.155%" x2="47.591%" y1="58.301%" y2="37.004%"><stop offset="7.31%" stop-color="#007FF9"></stop><stop offset="100%" stop-color="#007CF6"></stop></linearGradient><linearGradient id="lobe-icons-meta-5-_R_0_" x1="37.689%" x2="61.961%" y1="12.502%" y2="63.624%"><stop offset="7.31%" stop-color="#007FF9"></stop><stop offset="100%" stop-color="#0082FB"></stop></linearGradient><linearGradient id="lobe-icons-meta-6-_R_0_" x1="34.808%" x2="62.313%" y1="68.859%" y2="23.174%"><stop offset="27.99%" stop-color="#007FF8"></stop><stop offset="91.41%" stop-color="#0082FB"></stop></linearGradient><linearGradient id="lobe-icons-meta-7-_R_0_" x1="43.762%" x2="57.602%" y1="6.235%" y2="98.514%"><stop offset="0%" stop-color="#0082FB"></stop><stop offset="99.95%" stop-color="#0081FA"></stop></linearGradient><linearGradient id="lobe-icons-meta-8-_R_0_" x1="60.055%" x2="39.88%" y1="4.661%" y2="69.077%"><stop offset="6.19%" stop-color="#0081FA"></stop><stop offset="100%" stop-color="#0080F9"></stop></linearGradient><linearGradient id="lobe-icons-meta-9-_R_0_" x1="30.282%" x2="61.081%" y1="59.32%" y2="33.244%"><stop offset="0%" stop-color="#027AF3"></stop><stop offset="100%" stop-color="#0080F9"></stop></linearGradient><linearGradient id="lobe-icons-meta-10-_R_0_" x1="20.433%" x2="82.112%" y1="50.001%" y2="50.001%"><stop offset="0%" stop-color="#0377EF"></stop><stop offset="99.94%" stop-color="#0279F1"></stop></linearGradient><linearGradient id="lobe-icons-meta-11-_R_0_" x1="40.303%" x2="72.394%" y1="35.298%" y2="57.811%"><stop offset=".19%" stop-color="#0471E9"></stop><stop offset="100%" stop-color="#0377EF"></stop></linearGradient><linearGradient id="lobe-icons-meta-12-_R_0_" x1="32.254%" x2="68.003%" y1="19.719%" y2="84.908%"><stop offset="27.65%" stop-color="#0867DF"></stop><stop offset="100%" stop-color="#0471E9"></stop></linearGradient></defs></svg>',
|
|
@@ -1230,6 +1305,7 @@ var BRAND_SVG = {
|
|
|
1230
1305
|
xai: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z"></path></svg>',
|
|
1231
1306
|
cohere: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path clip-rule="evenodd" d="M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z" fill="#39594D" fill-rule="evenodd"></path><path clip-rule="evenodd" d="M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z" fill="#D18EE2" fill-rule="evenodd"></path><path d="M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z" fill="#FF7759"></path></svg>',
|
|
1232
1307
|
stability: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M7.223 21c4.252 0 7.018-2.22 7.018-5.56 0-2.59-1.682-4.236-4.69-4.918l-1.93-.571c-1.694-.375-2.683-.825-2.45-1.975.194-.957.773-1.497 2.122-1.497 4.285 0 5.873 1.497 5.873 1.497v-3.6S11.62 3 7.293 3C3.213 3 1 5.07 1 8.273c0 2.59 1.534 4.097 4.645 4.812l.334.083c.473.144 1.112.335 1.916.572 1.59.375 1.999.773 1.999 1.966 0 1.09-1.15 1.71-2.67 1.71C2.841 17.416 1 15.231 1 15.231v3.989S2.152 21 7.223 21z" fill="url(#lobe-icons-stability-_R_0_)"></path><path d="M20.374 20.73c1.505 0 2.626-1.073 2.626-2.526 0-1.484-1.089-2.526-2.626-2.526-1.505 0-2.594 1.042-2.594 2.526 0 1.484 1.089 2.526 2.594 2.526z" fill="#E80000"></path><defs><linearGradient id="lobe-icons-stability-_R_0_" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#9D39FF"></stop><stop offset="100%" stop-color="#A380FF"></stop></linearGradient></defs></svg>',
|
|
1308
|
+
bfl: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M17.113 10.248H14.56l-2.553-3.616-7.963 11.27h2.558l5.405-7.654h2.552l-5.404 7.653h2.565l5.392-7.653L24 20 19.97 20v-2.091l-2.857-4.044-2.842 4.037V20H0L12.008 3l5.105 7.249z"></path></svg>',
|
|
1233
1309
|
liquid: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M12.028 8.546l-.008.005 3.03 5.25a3.94 3.94 0 01.643 2.162c0 .754-.212 1.46-.58 2.062l6.173-1.991L11.63 0 9.304 3.872l2.724 4.674zM6.837 24l4.85-4.053h-.013c-2.219 0-4.017-1.784-4.017-3.984 0-.794.235-1.534.64-2.156l2.865-4.976-2.381-4.087L2 16.034 6.83 24h.007zM13.737 19.382h-.001L8.222 24h8.182l4.148-6.769-6.815 2.151z"></path></svg>',
|
|
1234
1310
|
yi: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M18.62 13.927c.611 0 1.107.505 1.107 1.128v5.817c0 .623-.496 1.128-1.108 1.128a1.118 1.118 0 01-1.108-1.128v-5.817c0-.623.496-1.128 1.108-1.128zM16.59 3.052a1.094 1.094 0 011.562-.129c.466.404.522 1.116.126 1.59l-5.938 7.111v9.147c0 .624-.496 1.129-1.108 1.129a1.118 1.118 0 01-1.108-1.129v-9.477l.003-.088.01-.087c.015-.232.102-.462.261-.654l6.192-7.413zM2.906 2.256a1.094 1.094 0 011.559.157l4.387 5.45a1.142 1.142 0 01-.155 1.587 1.094 1.094 0 01-1.559-.157l-4.387-5.45a1.144 1.144 0 01.06-1.498l.095-.09z"></path><ellipse cx="20.146" cy="10.692" fill="#00FF25" rx="1.354" ry="1.379"></ellipse></svg>',
|
|
1235
1311
|
internlm: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M5.54 19.662s2.24-.25 2.365-.29c.125-.042 2.45.082 2.45.082l1.493.374 1.37.498.373.125 2.033-.748 2.45-.373 1.659.041 1.286.166.54.166-.042 2.242-1.12-.291-2.159-.166-1.494.124-1.286.291-1.161.374-.83.332-1.744-.664-2.116-.416H7.158l-1.618.291v-2.158z" fill="#858599" fill-opacity=".5"></path><path d="M13.46 23c-3.773-2.078-7.78-.832-7.82-.819l-.453.144v-2.86l.24-.078c.174-.056 4.324-1.354 8.366.871l-.333.607c-3.244-1.786-6.66-1.115-7.58-.885V21.4c1.203-.286 4.595-.834 7.913.993L13.46 23V23z" fill="#858599"></path><path d="M13.413 23l-.334-.607c3.319-1.827 6.71-1.279 7.914-.993v-1.419c-.92-.231-4.337-.9-7.58.885l-.334-.607c4.042-2.225 8.192-.927 8.366-.87l.24.077v2.862l-.452-.147c-.04-.013-4.046-1.258-7.82.819z" fill="#858599"></path><path d="M17.756 16.476a.904.904 0 00-.264-.651.822.822 0 00-.632-.255.997.997 0 00-.644.293c-.175.212-.26.433-.259.685a.874.874 0 00.256.632c.175.187.39.272.644.255.246 0 .459-.1.633-.293a.97.97 0 00.268-.667l-.002.001zM10.769 17.143a.928.928 0 00.264-.658.993.993 0 00-.262-.679.908.908 0 00-.633-.227 1.089 1.089 0 00-.644.274 1.005 1.005 0 00-.265.685c0 .25.089.465.264.643.17.187.383.271.636.255.26-.008.471-.1.639-.293z" fill="#858599" fill-opacity=".5"></path><path d="M13.4 19.65c-.693 0-1.374-.058-1.895-.192-1.403-.36-2.52-1.01-3.413-1.986-.929-1.017-.988-1.996-1.05-3.033-.008-.133-.016-.267-.026-.405-.083-1.147-.626-2.941-.631-2.958l-.043-.141.086-.119A6.966 6.966 0 019.44 8.441c1.128-.47 2.47-.716 4.105-.752 2.721-.159 5.688.973 7.056 2.692l.086.109-.62 2.89c-.006.155-.052.968-.276 2.63-.263 1.947-2.668 3.061-3.903 3.377-.628.162-1.57.262-2.488.262zm-6.41-8.603c.134.46.538 1.912.613 2.944.01.139.018.277.026.412.06 1.01.109 1.809.896 2.672.815.89 1.837 1.484 3.125 1.814 1.092.28 3.061.194 4.091-.071.887-.228 3.24-1.19 3.468-2.889.24-1.786.272-2.593.273-2.6v-.026l.572-2.664c-.9-1.728-1.433-2.082-2.578-2.514-1.206-.455-2.677.075-3.903.148h-.01c-3.126.068-5.418-.935-6.574 2.773h.001z" fill="#858599"></path><path d="M19.545 10.862c.223.573.317.86.526 1.386 0 0 .552-.887.727-1.522.175-.641.068-1.458-.07-2.221-.344-1.282-.612-1.381-1.647-2.14a8.668 8.668 0 00-1.565-.84 12.303 12.303 0 00-3.83-.8 12.175 12.175 0 00-3.842.57 8.258 8.258 0 00-1.602.745c-1.075.695-1.823 1.674-2.24 2.932-.112.473-.29.927-.245 1.365.2 2.01 1.512 2.893 1.422 2.409-.117-.625-.042-.994.119-1.592.304-1.13 1.025-1.965 2.163-2.497h.004c.221-.062 1.344-.7 2.834.062.396.17 1.088.629 1.434.618.347-.01.846-.345 1.21-.572.683-.428 1.33-.574 2.184-.303 1.243.39 2.005 1.274 2.418 2.401z" fill="#858599"></path><path d="M1.217 9.86l.934.274 1.071-.055.77-.522.825-.742.604-.825.77-.797.741-.467 1.016-.22-.687 1.209-.577.576-1.209 1.676-.549.825-.632.44-.907.604s-.797.165-.879.192c-.081.028-.741.138-.741.138l-.577-.028-.44-.137.412-.825.056-.604v-.714l-.001.002z" fill="#858599" fill-opacity=".5"></path><path d="M3.607 5.108l-.083.63-.22.441-.274.412-.688.412.825.412.907.357.934.193.412.028.99-.688 1.043-.934-.357-.11-1.29-.137-.963-.358-.687-.356-.55-.302z" fill="#858599" fill-opacity=".5"></path><path d="M1.521 12.399c-.29 0-.596-.018-.917-.051L0 12.278l.298-.19.159-.173c.022-.033.085-.144.19-.377v-.002c.17-.365.228-.975.177-1.813l-.036-.564.435.36c.454.376 1.024.466 1.74.272.64-.182 1.337-.78 2.068-1.774.673-.968 1.64-1.624 2.88-1.952l.116-.031.783.61-.704-.05a2.182 2.182 0 00-.191.206l-.014.017-.018.016c-.404.718-.982 1.426-1.56 2.201l-.008.014c-.089.156-.18.317-.279.477v.009l-.032.051c-.592.962-1.243 1.683-1.935 2.145-.635.445-1.49.67-2.548.67v-.001zm-.5-.505c1.194.077 2.124-.112 2.77-.567l.005-.003c.626-.417 1.223-1.078 1.773-1.964a.244.244 0 01.041-.074c.098-.159.19-.321.28-.48v-.001c.392-.75.842-1.417 1.343-1.988-.748.33-1.341.82-1.8 1.481l-.004.006c-.808 1.101-1.572 1.742-2.333 1.958-.673.182-1.263.15-1.764-.095.01.69-.068 1.207-.237 1.573-.026.058-.05.108-.072.153h-.002z" fill="#858599"></path><path d="M1.577 12.399c-.29 0-.596-.018-.917-.051l.05-.486c1.371.145 2.425-.035 3.136-.535l.006-.003c.626-.417 1.222-1.078 1.772-1.963a.277.277 0 01.079-.116l.32.37a.22.22 0 00.072-.141l-.005.058-.03.052c-.592.962-1.243 1.683-1.935 2.145-.636.445-1.49.67-2.548.67zM5.751 7.717a9.381 9.381 0 01-.311.016c-.823.029-1.7-.2-2.615-.682.792-.512 1.013-1.096.982-1.621.189.15.386.281.591.393 1.345.758 2.766.878 5.195.198l-.165-.46c-2.308.637-3.558.532-4.793-.165a3.803 3.803 0 01-.967-.759l-.033-.036-.5-.542.094.697c.014.058.3 1.417-1.01 2.08l-.398.201.383.228c1.073.638 2.114.96 3.094.96l.453-.507v-.001zM11.93 15.21a.405.405 0 01-.366-.253c-.326-.745-.582-1.055-.969-1.525-.39-.474-1.223-1.277-1.36-1.393-.184-.156-.236-.368-.126-.515.055-.072.219-.219.556.005.683.452 2.198 1.812 2.608 2.904.15.397 0 .667-.201.749a.367.367 0 01-.143.028h.001zM14.877 15.23a.37.37 0 01-.146-.03c-.201-.085-.346-.357-.192-.752.424-1.086 1.957-2.427 2.645-2.87.34-.22.502-.072.556.002.109.147.054.358-.131.512-.139.115-.982.905-1.379 1.376-.392.465-.651.772-.988 1.513a.404.404 0 01-.364.25v-.002z" fill="#858599"></path><path d="M16.382 3.316c.01-.566-.265-1.054-.827-1.462-.57-.4-1.252-.602-2.045-.608-.792-.006-1.471.189-2.031.587-.563.401-.85.884-.857 1.445.002.176.017.336.04.486 2.1-.676 3.981-.62 5.64.167.045-.21.072-.414.08-.616v.001z" fill="#858599" fill-opacity=".5"></path><path d="M7.6 14.716l-.01-.024a1.824 1.824 0 01-.072-.192l-.059-.189-.388.013-.03.326c.002.013.009.044.016.1v.011c.003.02.004.036.008.052a.555.555 0 01-.164.431c-.112.12-.258.172-.45.164-.24-.01-.32-.105-.358-.176-.105-.19-.112-.291-.107-.336.015-.123.04-.254.077-.385.055-.206.013-.444-.126-.708l-.143-.272a1.787 1.787 0 01-.14-.384.974.974 0 01.022-.458.641.641 0 01.264-.374.695.695 0 01.496-.1l.015.002h.015c.192 0 .349.02.469.051a2.208 2.208 0 01-.027-.58 1.5 1.5 0 00-.38-.107H6.52l-.095-.008a1.369 1.369 0 00-.826.189c-.272.16-.456.394-.544.7a1.691 1.691 0 00-.03.815c.008.041.017.09.033.136.043.135.113.285.21.446.148.243.193.323.205.35l.005.009c.018.033.022.084.01.15l-.005.023a7.4 7.4 0 01-.034.172c-.115.298-.127.574-.036.815a.964.964 0 00.486.558c.134.066.288.108.46.125.094.01.192.01.294.005a.957.957 0 00.784-.454 1.13 1.13 0 00.17-.87l-.004-.026H7.6zM21.925 12.059a1.165 1.165 0 00-.556-.697h-.001a1.325 1.325 0 00-.797-.175l-.031.003-.093.011h-.008a1.553 1.553 0 00-.528.197 1.959 1.959 0 01-.016.563l.1-.04c.128-.053.302-.095.532-.13l.013-.002a.567.567 0 01.474.103c.155.113.26.254.32.428.05.164.057.305.022.43a2.77 2.77 0 01-.144.41 9.169 9.169 0 01-.191.383.908.908 0 00-.102.57c.024.176.05.322.078.446a.608.608 0 01-.036.329l-.003.006c-.037.117-.235.18-.35.208-.263.063-.381-.033-.451-.12a.78.78 0 01-.173-.51l.004-.053a.806.806 0 01.014-.093l-.008-.337-.431.01-.046.185a1.285 1.285 0 01-.064.188l-.011.027-.005.029c-.05.307.013.598.187.868l.004.006c.19.274.463.426.787.437.087.005.17.002.25-.004.192-.018.363-.069.509-.15a.992.992 0 00.459-.567c.085-.252.068-.527-.05-.816l-.03-.171-.002-.013a.306.306 0 01.015-.18c.045-.108.106-.233.181-.375.098-.173.162-.32.196-.444a.665.665 0 00.033-.152 1.75 1.75 0 00-.053-.806l.002-.002zM16.59 3.853c.033-.185.053-.359.06-.533.012-.648-.301-1.209-.93-1.667-.609-.427-1.344-.646-2.184-.653-.843-.008-1.575.207-2.176.633-.628.45-.951 1.002-.96 1.643v.006c.002.128.01.256.026.39a.38.38 0 00-.095.23v.01c0 .216.032.433.097.643l.001.006c.09.265.245.518.46.75l.063.068.567.063c.485.282 1.132.433 1.928.447h.103c.587 0 1.1-.072 1.527-.213l.011-.004c.16-.063.316-.138.465-.224.452.043.791-.18.965-.633l.043-.046-.002-.065c.067-.205.184-.608.03-.851h.001zM11.643 2.03c.514-.365 1.149-.547 1.888-.542.74.006 1.38.196 1.903.562.497.361.735.774.727 1.255-.004.089-.01.18-.023.274a6.882 6.882 0 00-2.685-.527c-.816 0-1.67.13-2.558.39a4.038 4.038 0 01-.006-.165c.006-.482.253-.89.754-1.247zm4.513 2.293l-.165.357s-.215.311-.45.272l-.092-.015-.078.049a2.724 2.724 0 01-.454.226c-.397.13-.89.192-1.462.184-.708-.014-1.276-.14-1.688-.38l-.037-.021-.048-.03-.491-.054c-.094-.11-.226-.34-.226-.34l-.135-.392-.008-.204c1.988-.626 3.79-.574 5.355.155.002.029-.02.193-.02.193zm.147.364v-.004l.003.004h-.003z" fill="#858599"></path></svg>',
|
|
@@ -1266,8 +1342,8 @@ var BRAND_SVG = {
|
|
|
1266
1342
|
vercel: '<svg viewBox="0 0 24 24" fill="currentColor" style="display:block;width:100%;height:100%"><path d="m12 1.608 12 20.784H0Z"/></svg>',
|
|
1267
1343
|
sentry: '<svg viewBox="0 0 24 24" fill="currentColor" style="display:block;width:100%;height:100%"><path d="M13.91 2.505c-.873-1.448-2.972-1.448-3.844 0L6.904 7.92a15.478 15.478 0 0 1 8.53 12.811h-2.221A13.301 13.301 0 0 0 5.784 9.814l-2.926 5.06a7.65 7.65 0 0 1 4.435 5.848H2.194a.365.365 0 0 1-.298-.534l1.413-2.402a5.16 5.16 0 0 0-1.614-.913L.296 19.275a2.182 2.182 0 0 0 .812 2.999 2.24 2.24 0 0 0 1.086.288h6.983a9.322 9.322 0 0 0-3.845-8.318l1.11-1.922a11.47 11.47 0 0 1 4.95 10.24h5.915a17.242 17.242 0 0 0-7.885-15.28l2.244-3.845a.37.37 0 0 1 .504-.13c.255.14 9.75 16.708 9.928 16.9a.365.365 0 0 1-.327.543h-2.287c.029.612.029 1.223 0 1.831h2.297a2.206 2.206 0 0 0 1.922-3.31z"/></svg>',
|
|
1268
1344
|
apple: '<svg viewBox="0 0 24 24" fill="currentColor" style="display:block;width:100%;height:100%"><path d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"/></svg>',
|
|
1269
|
-
linux: '<svg viewBox="0 0 216 256" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:block;width:100%;height:100%"><defs id="tux_fx"><linearGradient id="gradient_belly_shadow"><stop offset="0" stop-color="#000000"/><stop offset="1" stop-color="#000000" stop-opacity="0.25"/></linearGradient><linearGradient id="gradient_wing_tip_right_shadow"><stop offset="0" stop-color="#110800"/><stop offset="0.59" stop-color="#a65a00" stop-opacity="0.8"/><stop offset="1" stop-color="#ff921e" stop-opacity="0"/></linearGradient><linearGradient id="gradient_wing_tip_right_glare_1"><stop offset="0" stop-color="#7c7c7c"/><stop offset="1" stop-color="#7c7c7c" stop-opacity="0.33"/></linearGradient><linearGradient id="gradient_wing_tip_right_glare_2"><stop offset="0" stop-color="#7c7c7c"/><stop offset="1" stop-color="#7c7c7c" stop-opacity="0.33"/></linearGradient><linearGradient id="gradient_foot_left_layer_1"><stop offset="0" stop-color="#b98309"/><stop offset="1" stop-color="#382605"/></linearGradient><linearGradient id="gradient_foot_left_glare"><stop offset="0" stop-color="#ebc40c"/><stop offset="1" stop-color="#ebc40c" stop-opacity="0"/></linearGradient><linearGradient id="gradient_foot_right_shadow"><stop offset="0" stop-color="#000000"/><stop offset="1" stop-color="#000000" stop-opacity="0"/></linearGradient><linearGradient id="gradient_foot_right_layer_1"><stop offset="0" stop-color="#3e2a06"/><stop offset="1" stop-color="#ad780a"/></linearGradient><linearGradient id="gradient_foot_right_glare"><stop offset="0" stop-color="#f3cd0c"/><stop offset="1" stop-color="#f3cd0c" stop-opacity="0"/></linearGradient><linearGradient id="gradient_eyeball"><stop offset="0" stop-color="#fefefc"/><stop offset="0.75" stop-color="#fefefc"/><stop offset="1" stop-color="#d4d4d4"/></linearGradient><linearGradient id="gradient_pupil_left_glare"><stop offset="0" stop-color="#757574" stop-opacity="0"/><stop offset="0.25" stop-color="#757574"/><stop offset="0.5" stop-color="#757574"/><stop offset="1" stop-color="#757574" stop-opacity="0"/></linearGradient><linearGradient id="gradient_pupil_right_glare_2"><stop offset="0" stop-color="#949494" stop-opacity="0.39"/><stop offset="0.5" stop-color="#949494"/><stop offset="1" stop-color="#949494" stop-opacity="0.39"/></linearGradient><linearGradient id="gradient_eyelid_left"><stop offset="0" stop-color="#c8c8c8"/><stop offset="1" stop-color="#797978"/></linearGradient><linearGradient id="gradient_eyelid_right"><stop offset="0" stop-color="#747474"/><stop offset="0.13" stop-color="#8c8c8c"/><stop offset="0.25" stop-color="#a4a4a4"/><stop offset="0.5" stop-color="#d4d4d4"/><stop offset="0.62" stop-color="#d4d4d4"/><stop offset="1" stop-color="#7c7c7c"/></linearGradient><linearGradient id="gradient_eyebrow"><stop offset="0" stop-color="#646464" stop-opacity="0"/><stop offset="0.31" stop-color="#646464" stop-opacity="0.58"/><stop offset="0.47" stop-color="#646464"/><stop offset="0.73" stop-color="#646464" stop-opacity="0.26"/><stop offset="1" stop-color="#646464" stop-opacity="0"/></linearGradient><linearGradient id="gradient_beak_base"><stop offset="0" stop-color="#020204"/><stop offset="0.73" stop-color="#020204"/><stop offset="1" stop-color="#5c5c5c"/></linearGradient><linearGradient id="gradient_mandible_lower"><stop offset="0" stop-color="#d2940a"/><stop offset="0.75" stop-color="#d89c08"/><stop offset="0.87" stop-color="#b67e07"/><stop offset="1" stop-color="#946106"/></linearGradient><linearGradient id="gradient_mandible_upper"><stop offset="0" stop-color="#ad780a"/><stop offset="0.12" stop-color="#d89e08"/><stop offset="0.25" stop-color="#edb80b"/><stop offset="0.39" stop-color="#ebc80d"/><stop offset="0.53" stop-color="#f5d838"/><stop offset="0.77" stop-color="#f6d811"/><stop offset="1" stop-color="#f5cd31"/></linearGradient><linearGradient id="gradient_nares"><stop offset="0" stop-color="#3a2903"/><stop offset="0.55" stop-color="#735208"/><stop offset="1" stop-color="#ac8c04"/></linearGradient><linearGradient id="gradient_beak_corner"><stop offset="0" stop-color="#f5ce2d"/><stop offset="1" stop-color="#d79b08"/></linearGradient><radialGradient id="fill_belly_shadow_left" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(61.18,121.19) scale(19,18)"/><radialGradient id="fill_belly_shadow_right" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(125.74,131.6) scale(23.6,18)"/><radialGradient id="fill_belly_shadow_middle" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(94.21,127.47) scale(9.35,10)"/><linearGradient id="fill_foot_left_base" href="#gradient_foot_left_layer_1" xlink:href="#gradient_foot_left_layer_1" gradientUnits="userSpaceOnUse" x1="23.18" y1="193.01" x2="64.31" y2="262.02"/><linearGradient id="fill_foot_left_glare" href="#gradient_foot_left_glare" xlink:href="#gradient_foot_left_glare" gradientUnits="userSpaceOnUse" x1="64.47" y1="210.83" x2="77.41" y2="235.21"/><linearGradient id="fill_foot_right_shadow" href="#gradient_foot_right_shadow" xlink:href="#gradient_foot_right_shadow" gradientUnits="userSpaceOnUse" x1="146.93" y1="211.96" x2="150.2" y2="235.73"/><linearGradient id="fill_foot_right_base" href="#gradient_foot_right_layer_1" xlink:href="#gradient_foot_right_layer_1" gradientUnits="userSpaceOnUse" x1="151.5" y1="253.02" x2="192.94" y2="185.84"/><linearGradient id="fill_foot_right_glare" href="#gradient_foot_right_glare" xlink:href="#gradient_foot_right_glare" gradientUnits="userSpaceOnUse" x1="162.81" y1="180.67" x2="161.59" y2="191.64"/><radialGradient id="fill_wing_tip_right_shadow_lower" href="#gradient_wing_tip_right_shadow" xlink:href="#gradient_wing_tip_right_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(169.71,194.53) rotate(15) scale(19.66,20.64)"/><radialGradient id="fill_wing_tip_right_shadow_upper" href="#gradient_wing_tip_right_shadow" xlink:href="#gradient_wing_tip_right_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(169.71,189.89) rotate(-2.42) scale(19.74,14.86)"/><radialGradient id="fill_wing_tip_right_glare_1" href="#gradient_wing_tip_right_glare_1" xlink:href="#gradient_wing_tip_right_glare_1" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(184.65,176.62) rotate(23.5) scale(6.95,3.21)"/><linearGradient id="fill_wing_tip_right_glare_2" href="#gradient_wing_tip_right_glare_2" xlink:href="#gradient_wing_tip_right_glare_2" gradientUnits="userSpaceOnUse" x1="165.69" y1="173.58" x2="168.27" y2="173.47"/><radialGradient id="fill_eyeball_left" href="#gradient_eyeball" xlink:href="#gradient_eyeball" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(86.49,51.41) rotate(-0.6) scale(10.24,15.68)"/><linearGradient id="fill_pupil_left_glare" href="#gradient_pupil_left_glare" xlink:href="#gradient_pupil_left_glare" gradientUnits="userSpaceOnUse" x1="84.29" y1="46.64" x2="89.32" y2="55.63"/><radialGradient id="fill_eyelid_left" href="#gradient_eyelid_left" xlink:href="#gradient_eyelid_left" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(84.89,43.74) rotate(-9.35) scale(6.25,5.77)"/><linearGradient id="fill_eyebrow_left" href="#gradient_eyebrow" xlink:href="#gradient_eyebrow" gradientUnits="userSpaceOnUse" x1="83.59" y1="32.51" x2="94.48" y2="43.63"/><radialGradient id="fill_eyeball_right" href="#gradient_eyeball" xlink:href="#gradient_eyeball" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(118.06,51.41) rotate(-1.8) scale(13.64,15.68)"/><linearGradient id="fill_pupil_right_glare" href="#gradient_pupil_right_glare_2" xlink:href="#gradient_pupil_right_glare_2" gradientUnits="userSpaceOnUse" x1="117.87" y1="47.25" x2="123.66" y2="54.11"/><linearGradient id="fill_eyelid_right" href="#gradient_eyelid_right" xlink:href="#gradient_eyelid_right" gradientUnits="userSpaceOnUse" x1="112.9" y1="36.23" x2="131.32" y2="47.01"/><linearGradient id="fill_eyebrow_right" href="#gradient_eyebrow" xlink:href="#gradient_eyebrow" gradientUnits="userSpaceOnUse" x1="119.16" y1="31.56" x2="131.42" y2="43.14"/><radialGradient id="fill_beak_base" href="#gradient_beak_base" xlink:href="#gradient_beak_base" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(97.64,60.12) rotate(-36) scale(11.44,10.38)"/><radialGradient id="fill_mandible_lower_base" href="#gradient_mandible_lower" xlink:href="#gradient_mandible_lower" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(109.77,70.61) rotate(-22.4) scale(27.15,19.07)"/><linearGradient id="fill_mandible_upper_base" href="#gradient_mandible_upper" xlink:href="#gradient_mandible_upper" gradientUnits="userSpaceOnUse" x1="78.09" y1="69.26" x2="126.77" y2="68.88"/><radialGradient id="fill_naris_left" href="#gradient_nares" xlink:href="#gradient_nares" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(92.11,59.88) scale(1.32,1.42)"/><radialGradient id="fill_naris_right" href="#gradient_nares" xlink:href="#gradient_nares" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(104.65,59.7) scale(2.78,1.62)"/><linearGradient id="fill_beak_corner" href="#gradient_beak_corner" xlink:href="#gradient_beak_corner" gradientUnits="userSpaceOnUse" x1="126.74" y1="67.49" x2="126.74" y2="71.09"/><filter id="blur_belly_shadow_left"><feGaussianBlur stdDeviation="0.64 0.55"/></filter><filter id="blur_belly_shadow_right"><feGaussianBlur stdDeviation="0.98"/></filter><filter id="blur_belly_shadow_middle"><feGaussianBlur stdDeviation="0.68"/></filter><filter id="blur_belly_shadow_lower" x="-0.8" width="2.6" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.25"/></filter><filter id="blur_belly_glare" x="-0.8" width="2.6" y="-0.5" height="2"><feGaussianBlur stdDeviation="1.78 2.19"/></filter><filter id="blur_head_glare" x="-0.3" width="1.6" y="-0.3" height="1.6"><feGaussianBlur stdDeviation="1.73"/></filter><filter id="blur_neck_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.78"/></filter><filter id="blur_wing_left_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.98"/></filter><filter id="blur_wing_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.19 1.17"/></filter><filter id="blur_foot_left_layer_1" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="3.38"/></filter><filter id="blur_foot_left_layer_2"><feGaussianBlur stdDeviation="2.1 2.06"/></filter><filter id="blur_foot_left_glare"><feGaussianBlur stdDeviation="0.32"/></filter><filter id="blur_foot_right_shadow"><feGaussianBlur stdDeviation="1.95 1.9"/></filter><filter id="blur_foot_right_layer_1" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="4.12"/></filter><filter id="blur_foot_right_layer_2" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="3.12 3.37"/></filter><filter id="blur_foot_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.41"/></filter><filter id="blur_wing_tip_right_shadow_lower" x="-0.3" width="1.6" y="-0.3" height="1.6"><feGaussianBlur stdDeviation="2.45"/></filter><filter id="blur_wing_tip_right_shadow_upper" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.12 0.81"/></filter><filter id="blur_wing_tip_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.88"/></filter><filter id="blur_pupil_left_glare" x="-0.3" width="1.6" y="-0.3" height="1.6"><feGaussianBlur stdDeviation="0.44"/></filter><filter id="blur_eyebrow_left"><feGaussianBlur stdDeviation="0.12"/></filter><filter id="blur_pupil_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.45"/></filter><filter id="blur_eyebrow_right"><feGaussianBlur stdDeviation="0.13"/></filter><filter id="blur_beak_shadow_lower" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.75"/></filter><filter id="blur_beak_shadow_upper"><feGaussianBlur stdDeviation="0.8 0.74"/></filter><filter id="blur_mandible_lower_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.77"/></filter><filter id="blur_mandible_upper_shadow"><feGaussianBlur stdDeviation="0.65"/></filter><filter id="blur_mandible_upper_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.73"/></filter><filter id="blur_naris_left" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.1"/></filter><filter id="blur_naris_right"><feGaussianBlur stdDeviation="0.1"/></filter><filter id="blur_beak_corner" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.23"/></filter><clipPath id="clip_body"><use href="#body_base" xlink:href="#body_base"/></clipPath><clipPath id="clip_wing_left"><use href="#wing_left_base" xlink:href="#wing_left_base"/></clipPath><clipPath id="clip_wing_right"><use href="#wing_right_base" xlink:href="#wing_right_base"/></clipPath><clipPath id="clip_foot_left"><use href="#foot_left_base" xlink:href="#foot_left_base"/></clipPath><clipPath id="clip_foot_right"><use href="#foot_right_base" xlink:href="#foot_right_base"/></clipPath><clipPath id="clip_wing_tip_right"><use href="#wing_tip_right_base" xlink:href="#wing_tip_right_base"/></clipPath><clipPath id="clip_eye_left"><use href="#eyeball_left" xlink:href="#eyeball_left"/></clipPath><clipPath id="clip_pupil_left"><use href="#pupil_left_base" xlink:href="#pupil_left_base"/></clipPath><clipPath id="clip_eye_right"><use href="#eyeball_right" xlink:href="#eyeball_right"/></clipPath><clipPath id="clip_pupil_right"><use href="#pupil_right_base" xlink:href="#pupil_right_base"/></clipPath><clipPath id="clip_mandible_lower"><use href="#mandible_lower_base" xlink:href="#mandible_lower_base"/></clipPath><clipPath id="clip_mandible_upper"><use href="#mandible_upper_base" xlink:href="#mandible_upper_base"/></clipPath><clipPath id="clip_beak"><use href="#mandible_lower_base" xlink:href="#mandible_lower_base"/><use href="#mandible_upper_base" xlink:href="#mandible_upper_base"/></clipPath></defs><g id="tux"><g id="body"><path id="body_base" fill="#020204" d="m 106.95,0 c -6,0 -12.02,1.18 -17.46,4.12 -5.78,3.11 -10.52,8.09 -13.43,13.97 -2.92,5.88 -4.06,12.16 -4.24,19.08 -0.33,13.14 0.3,26.92 1.29,39.41 0.26,3.8 0.74,6.02 0.25,9.93 -1.62,8.3 -8.88,13.88 -12.76,21.17 -4.27,8.04 -6.07,17.13 -9.29,25.65 -2.95,7.79 -7.09,15.1 -9.88,22.95 -3.91,10.97 -5.08,23.03 -2.5,34.39 1.97,8.66 6.08,16.78 11.62,23.73 -0.8,1.44 -1.58,2.91 -2.4,4.34 -2.57,4.43 -5.71,8.64 -7.17,13.55 -0.73,2.45 -1.02,5.07 -0.55,7.59 0.47,2.52 1.75,4.93 3.75,6.53 1.31,1.04 2.9,1.72 4.53,2.1 1.63,0.37 3.32,0.46 5,0.43 6.37,-0.14 12.55,-2.07 18.71,-3.69 3.66,-0.96 7.34,-1.81 11.03,-2.58 13.14,-2.69 27.8,-1.61 39.99,0.15 4.13,0.63 8.23,1.44 12.29,2.43 6.36,1.54 12.69,3.5 19.23,3.69 1.72,0.05 3.46,-0.03 5.14,-0.4 1.68,-0.38 3.31,-1.06 4.65,-2.13 2.01,-1.6 3.29,-4.02 3.76,-6.54 0.47,-2.52 0.18,-5.15 -0.56,-7.61 -1.48,-4.92 -4.65,-9.11 -7.27,-13.52 -1.04,-1.75 -2,-3.53 -3.03,-5.28 7.9,-8.87 14.26,-19.13 17.94,-30.4 4.01,-12.3 4.75,-25.55 3.06,-38.38 -1.69,-12.83 -5.76,-25.27 -11.11,-37.05 -6.72,-14.76 -12.37,-20.1 -16.47,-33.07 -4.42,-14.02 -0.77,-30.61 -4.06,-43.32 -1.17,-4.32 -3.04,-8.45 -5.45,-12.23 -2.82,-4.43 -6.4,-8.39 -10.65,-11.47 -6.78,-4.92 -15.3,-7.54 -23.96,-7.54 z"/><path id="belly" fill="#fdfdfb" d="m 83.13,74 c -0.9,1.13 -1.48,2.49 -1.84,3.89 -0.35,1.4 -0.48,2.85 -0.54,4.3 -0.11,2.89 0.07,5.83 -0.7,8.62 -0.82,2.98 -2.65,5.57 -4.44,8.08 -3.11,4.36 -6.25,8.84 -7.78,13.97 -0.93,3.1 -1.24,6.39 -0.91,9.62 -3.47,5.1 -6.48,10.53 -8.98,16.18 -3.78,8.57 -6.37,17.69 -7.28,27.01 -1.12,11.41 0.34,23.15 4.85,33.69 3.25,7.63 8.11,14.6 14.38,20.04 3.18,2.76 6.72,5.11 10.5,6.97 13.11,6.45 29.31,6.46 42.2,-0.41 6.74,-3.59 12.43,-8.84 17.91,-14.15 3.3,-3.2 6.59,-6.48 9.11,-10.32 4.85,-7.41 6.54,-16.41 7.59,-25.2 1.83,-15.36 1.89,-31.6 -4.85,-45.53 -2.32,-4.8 -5.41,-9.22 -9.12,-13.05 -0.98,-6.7 -2.93,-13.27 -5.76,-19.42 -2.05,-4.45 -4.54,-8.68 -6.44,-13.18 -0.78,-1.85 -1.46,-3.75 -2.32,-5.56 -0.87,-1.81 -1.93,-3.55 -3.39,-4.94 -1.48,-1.42 -3.33,-2.43 -5.28,-3.07 -1.95,-0.65 -4.01,-0.94 -6.06,-1.04 -4.11,-0.21 -8.22,0.33 -12.33,0.16 -3.27,-0.13 -6.53,-0.7 -9.8,-0.51 -1.63,0.1 -3.26,0.39 -4.78,1.01 -1.52,0.61 -2.92,1.56 -3.94,2.84 z"/><g id="body_self_shadows"><path id="belly_shadow_left" opacity="0.25" fill="url(#fill_belly_shadow_left)" filter="url(#blur_belly_shadow_left)" clip-path="url(#clip_body)" d="m 68.67,115.18 c 0.87,1.31 -0.55,5.84 19.86,2.94 0,0 -3.59,0.39 -7.12,1.21 -5.49,1.84 -10.27,3.89 -13.97,6.61 -3.65,2.7 -6.33,6.21 -9.68,9.22 0,0 5.43,-9.92 6.78,-12.91 1.36,-2.99 -0.22,-2.85 0.85,-7.25 1.07,-4.4 3.69,-8.63 3.69,-8.63 0,0 -2.14,6.22 -0.41,8.81 z"/><path id="belly_shadow_right" opacity="0.42" fill="url(#fill_belly_shadow_right)" filter="url(#blur_belly_shadow_right)" clip-path="url(#clip_body)" d="m 134.28,113.99 c -4.16,2.9 -6.6,2.56 -11.64,3.12 -5.05,0.57 -18.7,0.36 -18.7,0.36 0,0 1.97,-0.03 6.36,0.78 4.38,0.82 13.31,1.6 18.34,3.51 5.04,1.92 6.87,2.47 9.93,4.4 4.35,2.75 7.55,7.06 11.71,10.08 0,0 0.2,-4 -1.48,-6.99 -1.68,-2.99 -6.2,-7.7 -7.53,-12.1 -1.32,-4.4 -1.96,-13.04 -1.96,-13.04 0,0 -0.88,6.99 -5.03,9.88 z"/><path id="belly_shadow_middle" opacity="0.2" fill="url(#fill_belly_shadow_middle)" filter="url(#blur_belly_shadow_middle)" clip-path="url(#clip_body)" d="m 95.17,107.81 c -0.16,1.25 -0.36,2.5 -0.6,3.74 -0.12,0.61 -0.26,1.22 -0.48,1.8 -0.23,0.58 -0.56,1.14 -1.02,1.55 -0.41,0.37 -0.9,0.62 -1.4,0.85 -1.94,0.88 -4.01,1.47 -6.12,1.74 0.84,0.06 1.68,0.14 2.53,0.23 0.53,0.06 1.06,0.12 1.57,0.25 0.52,0.14 1.03,0.34 1.46,0.65 0.47,0.35 0.84,0.82 1.12,1.34 0.55,1.02 0.73,2.2 0.83,3.37 0.13,1.48 0.14,2.98 0.03,4.46 0.1,-0.99 0.31,-1.98 0.62,-2.92 0.57,-1.72 1.47,-3.32 2.69,-4.65 0.49,-0.52 1.02,-1.01 1.6,-1.42 1.79,-1.26 4.07,-1.81 6.24,-1.51 -2.21,0.09 -4.44,-0.6 -6.2,-1.93 -0.9,-0.68 -1.68,-1.52 -2.22,-2.5 -0.84,-1.52 -1.08,-3.37 -0.65,-5.05 z"/><path id="belly_shadow_lower" opacity="0.11" fill="#000000" filter="url(#blur_belly_shadow_lower)" clip-path="url(#clip_body)" d="m 89.85,137.14 c -1.06,4.03 -1.79,8.15 -2.17,12.31 -0.55,5.87 -0.42,11.78 -0.74,17.67 -0.26,4.99 -0.85,10.04 0.02,14.97 0.41,2.35 1.15,4.64 2.2,6.78 0.16,-0.82 0.29,-1.64 0.36,-2.47 0.37,-4 -0.3,-8.01 -0.53,-12.01 -0.4,-7.02 0.57,-14.04 0.97,-21.06 0.3,-5.39 0.27,-10.8 -0.11,-16.19 z"/></g><g id="body_glare"><path id="belly_glare" opacity="0.75" fill="#7c7c7c" filter="url(#blur_belly_glare)" clip-path="url(#clip_body)" d="m 160.08,131.23 c 1.03,-0.16 7.34,5.21 6.48,7.21 -0.86,1.99 -2.49,0.79 -3.65,0.8 -1.16,0.02 -4.33,1.46 -4.86,0.55 -0.54,-0.91 1.4,-3.03 2.41,-4.81 0.82,-1.43 -1.4,-3.59 -0.38,-3.75 z"/><path id="head_glare" fill="#7c7c7c" filter="url(#blur_head_glare)" clip-path="url(#clip_body)" d="m 121.52,11.12 c -2.21,1.56 -1.25,3.51 -0.3,5.46 0.95,1.96 -2.09,7.59 -2.12,7.83 -0.03,0.24 5.98,-2.85 7.62,-4.87 1.94,-2.37 6.83,3.22 6.56,2.37 0.01,-1.52 -9.55,-12.34 -11.76,-10.79 z"/><path id="neck_glare" fill="#838384" filter="url(#blur_neck_glare)" clip-path="url(#clip_body)" d="m 138.27,76.63 c -1.86,1.7 0.88,4.25 2.17,7.24 0.81,1.86 3.04,4.49 5.2,4.07 1.63,-0.32 2.63,-2.66 2.48,-4.3 -0.3,-3.18 -2.98,-3.93 -4.93,-5.02 -1.54,-0.86 -3.61,-3.18 -4.92,-1.99 z"/></g></g><g id="wings"><g id="wing_left"><path id="wing_left_base" fill="#020204" d="m 63.98,100.91 c -6.1,6.92 -12.37,13.63 -15.81,21.12 -1.71,3.8 -2.51,7.93 -3.68,11.93 -1.32,4.54 -3.12,8.94 -5.14,13.22 -1.87,3.95 -3.93,7.81 -5.98,11.66 -1.5,2.81 -3.02,5.67 -3.54,8.81 -0.41,2.48 -0.18,5.04 0.46,7.47 0.63,2.43 1.64,4.75 2.79,6.98 4.88,9.55 12.21,17.77 20.89,24.07 3.94,2.85 8.15,5.32 12.58,7.35 2.4,1.09 4.92,2.07 7.56,2.11 1.32,0.03 2.65,-0.19 3.86,-0.72 1.2,-0.53 2.28,-1.38 3,-2.49 0.88,-1.36 1.18,-3.05 1,-4.66 -0.18,-1.61 -0.81,-3.15 -1.65,-4.53 -2.06,-3.38 -5.31,-5.83 -8.44,-8.25 -6.76,-5.23 -13.29,-10.76 -19.55,-16.58 -1.76,-1.65 -3.53,-3.34 -4.76,-5.42 -1.2,-2.02 -1.85,-4.32 -2.29,-6.63 -1.21,-6.33 -0.9,-12.99 1.25,-19.07 0.85,-2.38 1.96,-4.65 3.04,-6.93 1.86,-3.95 3.62,-7.98 6.07,-11.6 3.05,-4.51 7.13,-8.33 9.61,-13.17 2.1,-4.09 2.95,-8.68 3.76,-13.2 0.64,-3.54 1.85,-7 2.47,-10.54 -1.21,2.3 -5.11,6.07 -7.5,9.07 z"/><path id="wing_left_glare" opacity="0.95" fill="#7c7c7c" filter="url(#blur_wing_left_glare)" clip-path="url(#clip_wing_left)" d="m 56.96,126.1 c -2,1.84 -3.73,3.97 -5.13,6.31 -2.3,3.84 -3.65,8.16 -5.33,12.31 -1.24,3.09 -2.69,6.2 -2.86,9.53 -0.09,1.71 0.16,3.42 0.22,5.13 0.06,1.71 -0.1,3.49 -0.94,4.98 -0.7,1.25 -1.87,2.23 -3.22,2.71 1.83,0.61 3.45,1.79 4.6,3.33 0.96,1.3 1.58,2.81 2.41,4.18 0.68,1.12 1.51,2.16 2.54,2.97 1.02,0.82 2.25,1.4 3.54,1.56 1.79,0.23 3.65,-0.36 4.97,-1.58 -1.66,-15.55 -0.14,-31.42 4.44,-46.37 0.29,-0.94 0.59,-1.89 0.67,-2.87 0.07,-0.99 -0.12,-2.03 -0.72,-2.81 -0.31,-0.42 -0.74,-0.75 -1.23,-0.96 -0.48,-0.2 -1.02,-0.28 -1.54,-0.21 -0.52,0.06 -1.03,0.26 -1.45,0.57 -0.42,0.32 -0.76,0.74 -0.97,1.22 z"/></g><g id="wing_right"><path id="wing_right_base" fill="#020204" d="m 162.76,127.12 c 5.24,4.22 8.57,10.59 9.6,17.24 0.8,5.18 0.28,10.51 -0.89,15.62 -1.17,5.12 -2.97,10.06 -4.77,15 -0.71,1.96 -1.43,3.95 -1.71,6.02 -0.29,2.08 -0.11,4.27 0.89,6.11 1.15,2.11 3.29,3.56 5.59,4.24 2.27,0.68 4.72,0.66 7.02,0.09 2.3,-0.57 6.17,-1.31 8.04,-2.77 4.75,-3.69 5.88,-10.1 7.01,-15.72 1.17,-5.87 0.6,-12.02 -0.43,-17.95 -1.41,-8.09 -3.78,-15.99 -6.79,-23.62 -2.22,-5.62 -5.06,-10.98 -8.44,-15.96 -3.32,-4.89 -8.02,-8.7 -11.5,-13.48 -1.21,-1.66 -2.66,-3.38 -3.84,-5.06 -2.56,-3.62 -1.98,-2.94 -3.57,-5.29 -1.15,-1.7 -2.97,-2.28 -4.88,-3.02 -1.92,-0.74 -4.06,-0.96 -6.04,-0.41 -2.6,0.73 -4.73,2.79 -5.86,5.24 -1.13,2.46 -1.33,5.28 -0.89,7.95 0.57,3.44 2.14,6.64 3.92,9.64 2,3.39 4.32,6.66 7.35,9.18 3.16,2.63 6.98,4.37 10.19,6.95 z"/><path id="wing_right_glare" fill="#838384" filter="url(#blur_wing_right_glare)" clip-path="url(#clip_wing_right)" d="m 150.42,118.99 c 0.42,0.4 0.86,0.81 1.31,1.19 3.22,2.63 4.93,5.58 8.2,8.16 5.34,4.22 10.75,11.5 11.8,18.15 0.82,5.19 -0.26,8.01 -1.58,14.12 -1.32,6.12 -5.06,14.78 -7.09,20.68 -0.8,2.35 1.64,1.38 1.32,3.86 -0.16,1.22 -0.18,2.45 -0.03,3.67 0.02,-0.23 0.03,-0.48 0.06,-0.71 0.39,-3.38 1.42,-6.63 2.55,-9.82 2.17,-6.13 4.66,-12.15 6.38,-18.45 1.72,-6.29 1.53,-10.82 0.63,-16.23 -1.13,-6.81 -5.09,-13.09 -10.69,-17.24 -3.97,-2.93 -8.64,-4.81 -12.86,-7.38 z"/></g></g><g id="feet"><g id="foot_left"><path id="foot_left_base" fill="url(#fill_foot_left_base)" d="m 34.98,175.33 c 1.38,-0.57 2.93,-0.68 4.39,-0.41 1.47,0.27 2.86,0.91 4.09,1.74 2.47,1.68 4.3,4.12 6.05,6.54 4.03,5.54 7.9,11.2 11.42,17.08 2.85,4.78 5.46,9.71 8.76,14.18 2.15,2.93 4.57,5.64 6.73,8.55 2.16,2.92 4.07,6.08 5.03,9.58 1.25,4.55 0.76,9.56 -1.4,13.75 -1.52,2.95 -3.86,5.48 -6.7,7.19 -2.84,1.71 -5.83,2.47 -9.15,2.47 -5.27,0 -10.42,-2.83 -15.32,-4.78 -9.98,-3.98 -20.82,-5.22 -31.11,-8.32 -3.16,-0.95 -6.27,-2.08 -9.45,-2.95 -1.42,-0.39 -2.85,-0.73 -4.19,-1.34 -1.34,-0.6 -2.59,-1.51 -3.33,-2.77 -0.57,-0.98 -0.8,-2.13 -0.8,-3.26 0,-1.14 0.28,-2.26 0.67,-3.32 0.77,-2.13 2.02,-4.06 2.86,-6.17 1.37,-3.44 1.62,-7.23 1.43,-10.93 -0.18,-3.69 -0.78,-7.36 -1.03,-11.05 -0.12,-1.65 -0.16,-3.32 0.16,-4.95 0.31,-1.62 1.01,-3.21 2.2,-4.35 1.1,-1.06 2.55,-1.69 4.05,-2 1.49,-0.31 3.03,-0.32 4.55,-0.29 1.52,0.03 3.05,0.12 4.57,-0.01 1.52,-0.12 3.05,-0.46 4.37,-1.22 1.26,-0.72 2.29,-1.79 3.14,-2.96 0.85,-1.17 1.54,-2.45 2.25,-3.72 0.7,-1.26 1.43,-2.52 2.36,-3.64 0.92,-1.12 2.06,-2.09 3.4,-2.64 z"/><path id="foot_left_layer_1" fill="#d99a03" filter="url(#blur_foot_left_layer_1)" clip-path="url(#clip_foot_left)" d="m 37.16,177.7 c 1.25,-0.5 2.67,-0.56 3.98,-0.26 1.32,0.3 2.55,0.94 3.61,1.77 2.14,1.65 3.62,3.97 5.05,6.26 3.42,5.54 6.76,11.15 9.92,16.86 2.4,4.31 4.68,8.7 7.62,12.65 1.95,2.62 4.18,5.03 6.17,7.62 1.99,2.59 3.76,5.41 4.64,8.56 1.14,4.05 0.68,8.54 -1.28,12.26 -1.42,2.68 -3.58,4.96 -6.2,6.48 -2.61,1.52 -5.67,2.28 -8.69,2.14 -4.82,-0.22 -9.23,-2.63 -13.77,-4.26 -8.71,-3.16 -18.14,-3.59 -27.08,-6.05 -3.2,-0.87 -6.32,-2.03 -9.53,-2.84 -1.43,-0.36 -2.88,-0.66 -4.23,-1.23 -1.35,-0.57 -2.62,-1.45 -3.36,-2.72 -0.54,-0.95 -0.76,-2.06 -0.73,-3.15 0.04,-1.09 0.31,-2.17 0.7,-3.19 0.78,-2.04 2,-3.88 2.78,-5.92 1.19,-3.08 1.34,-6.47 1.12,-9.76 -0.22,-3.29 -0.8,-6.56 -1,-9.85 -0.08,-1.48 -0.1,-2.97 0.2,-4.41 0.3,-1.45 0.93,-2.85 1.98,-3.89 1.14,-1.13 2.7,-1.74 4.29,-1.99 1.58,-0.24 3.19,-0.13 4.78,0.01 1.6,0.14 3.2,0.32 4.8,0.23 1.6,-0.1 3.22,-0.49 4.54,-1.39 1.2,-0.81 2.1,-2 2.79,-3.27 0.69,-1.27 1.18,-2.64 1.71,-3.98 0.52,-1.35 1.09,-2.69 1.91,-3.89 0.82,-1.19 1.93,-2.24 3.28,-2.79 z"/><path id="foot_left_layer_2" fill="#f5bd0c" filter="url(#blur_foot_left_layer_2)" clip-path="url(#clip_foot_left)" d="m 35.99,174.57 c 1.22,-0.6 2.65,-0.72 3.98,-0.45 1.33,0.27 2.57,0.92 3.62,1.77 2.09,1.7 3.43,4.13 4.67,6.51 2.84,5.46 5.5,11.04 8.9,16.19 2.48,3.73 5.33,7.2 7.83,10.92 3.39,5.03 6.15,10.57 7.29,16.5 0.76,4 0.74,8.31 -1.18,11.9 -1.27,2.37 -3.32,4.31 -5.75,5.52 -2.42,1.22 -5.21,1.71 -7.92,1.47 -4.27,-0.37 -8.14,-2.47 -12.16,-3.94 -7.13,-2.59 -14.84,-3.22 -22.18,-5.18 -3.09,-0.82 -6.13,-1.89 -9.26,-2.54 -1.39,-0.29 -2.8,-0.5 -4.12,-1 -1.32,-0.5 -2.57,-1.33 -3.25,-2.55 -0.47,-0.86 -0.63,-1.86 -0.56,-2.84 0.07,-0.97 0.36,-1.92 0.74,-2.83 0.77,-1.8 1.9,-3.46 2.49,-5.32 0.88,-2.75 0.52,-5.72 -0.14,-8.53 -0.65,-2.8 -1.6,-5.55 -1.89,-8.41 -0.13,-1.27 -0.13,-2.57 0.17,-3.82 0.29,-1.25 0.88,-2.45 1.81,-3.34 1.2,-1.15 2.88,-1.73 4.56,-1.89 1.67,-0.16 3.35,0.06 5.01,0.3 1.66,0.24 3.34,0.5 5.01,0.42 1.68,-0.07 3.39,-0.51 4.7,-1.54 1.3,-1.02 2.12,-2.53 2.59,-4.09 0.47,-1.57 0.62,-3.2 0.81,-4.82 0.19,-1.62 0.43,-3.26 1.06,-4.77 0.63,-1.51 1.69,-2.9 3.17,-3.64 z"/><path id="foot_left_glare" fill="url(#fill_foot_left_glare)" filter="url(#blur_foot_left_glare)" clip-path="url(#clip_foot_left)" d="m 51.2,188.21 c 2.25,4.06 3.62,8.72 5.85,12.82 2.05,3.77 4.38,7.65 6.46,11.12 0.93,1.55 3.09,3.93 5.27,7.62 1.98,3.34 3.98,8.01 5.1,9.58 -0.64,-1.84 -1.96,-6.77 -3.54,-10.28 -1.47,-3.28 -3.19,-5.15 -4.24,-6.92 -2.08,-3.47 -4.33,-6.6 -6.47,-9.91 -2.95,-4.57 -5.2,-9.68 -8.43,-14.03 z"/></g><g id="foot_right"><path id="foot_right_shadow" opacity="0.2" fill="url(#fill_foot_right_shadow)" filter="url(#blur_foot_right_shadow)" clip-path="url(#clip_body)" d="m 198.7,215.61 c -0.4,1.33 -1.02,2.62 -1.81,3.8 -1.75,2.59 -4.3,4.55 -6.84,6.35 -4.33,3.07 -8.85,5.89 -12.89,9.38 -2.7,2.34 -5.17,4.97 -7.45,7.73 -1.95,2.36 -3.79,4.84 -6.02,6.94 -2.25,2.12 -4.89,3.84 -7.74,4.77 -3.47,1.13 -7.13,1.08 -10.47,0.22 -2.34,-0.6 -4.63,-1.64 -6.08,-3.53 -1.45,-1.89 -1.92,-4.44 -2.09,-6.94 -0.3,-4.42 0.23,-8.93 0.71,-13.42 0.4,-3.73 0.77,-7.46 0.92,-11.18 0.27,-6.77 -0.18,-13.47 -1.09,-20.05 -0.16,-1.11 -0.32,-2.22 -0.23,-3.35 0.09,-1.14 0.47,-2.32 1.27,-3.2 0.74,-0.81 1.77,-1.29 2.79,-1.52 1.02,-0.24 2.06,-0.25 3.09,-0.28 2.43,-0.06 4.86,-0.21 7.25,0.01 1.51,0.13 2.99,0.41 4.49,0.55 2.51,0.24 5.12,0.12 7.64,-0.62 2.71,-0.8 5.29,-2.29 8.05,-2.7 1.13,-0.17 2.26,-0.15 3.36,0.01 1.12,0.15 2.24,0.46 3.1,1.15 0.66,0.52 1.14,1.23 1.51,1.99 0.56,1.14 0.9,2.39 1.1,3.68 0.17,1.14 0.24,2.31 0.53,3.41 0.48,1.81 1.58,3.35 2.89,4.6 1.32,1.25 2.85,2.24 4.39,3.22 1.53,0.97 3.07,1.93 4.7,2.73 0.77,0.38 1.56,0.72 2.29,1.15 0.74,0.44 1.42,0.97 1.91,1.67 0.66,0.95 0.92,2.2 0.72,3.43 z"/><path id="foot_right_base" fill="url(#fill_foot_right_base)" d="m 213.47,222.92 c -2.26,2.68 -5.4,4.45 -8.53,6.05 -5.33,2.71 -10.86,5.1 -15.87,8.37 -3.36,2.19 -6.46,4.76 -9.36,7.53 -2.48,2.37 -4.83,4.9 -7.61,6.91 -2.81,2.03 -6.05,3.5 -9.48,4.01 -0.95,0.14 -1.9,0.21 -2.86,0.21 -3.24,0 -6.48,-0.78 -9.46,-2.08 -2.7,-1.17 -5.3,-2.86 -6.86,-5.36 -1.56,-2.52 -1.92,-5.59 -1.92,-8.56 -0.01,-5.23 0.96,-10.41 1.87,-15.57 0.76,-4.29 1.48,-8.58 1.95,-12.91 0.85,-7.86 0.84,-15.81 0.28,-23.71 -0.1,-1.32 -0.21,-2.65 -0.01,-3.96 0.2,-1.31 0.74,-2.62 1.74,-3.48 0.93,-0.8 2.17,-1.16 3.4,-1.22 1.22,-0.07 2.44,0.12 3.65,0.3 2.85,0.42 5.73,0.74 8.52,1.48 1.76,0.46 3.48,1.08 5.23,1.56 2.94,0.79 6.01,1.17 9.02,0.82 3.25,-0.38 6.41,-1.6 9.68,-1.52 1.34,0.03 2.67,0.28 3.95,0.69 1.3,0.41 2.59,1 3.55,1.98 0.73,0.74 1.24,1.67 1.62,2.64 0.57,1.44 0.88,2.98 1.01,4.52 0.11,1.37 0.09,2.76 0.35,4.11 0.43,2.21 1.6,4.24 3.04,5.97 1.45,1.74 3.18,3.21 4.91,4.66 1.73,1.45 3.46,2.89 5.32,4.16 0.87,0.6 1.77,1.16 2.6,1.81 0.83,0.66 1.59,1.42 2.11,2.34 0.45,0.81 0.69,1.72 0.69,2.65 0,0.52 -0.07,1.04 -0.23,1.56 -0.45,1.43 -1.28,2.82 -2.3,4.04 z"/><path id="foot_right_layer_1" fill="#cd8907" filter="url(#blur_foot_right_layer_1)" clip-path="url(#clip_foot_right)" d="m 213.21,216.12 c -0.53,1.33 -1.28,2.58 -2.22,3.67 -2.07,2.42 -4.93,4.01 -7.78,5.44 -4.88,2.44 -9.92,4.58 -14.5,7.52 -3.06,1.97 -5.9,4.28 -8.55,6.78 -2.26,2.13 -4.41,4.41 -6.95,6.21 -2.57,1.83 -5.53,3.14 -8.65,3.6 -3.8,0.56 -7.72,-0.16 -11.25,-1.67 -2.46,-1.06 -4.84,-2.56 -6.27,-4.83 -1.42,-2.26 -1.75,-5.02 -1.75,-7.69 -0.02,-4.71 0.87,-9.37 1.71,-14 0.7,-3.85 1.36,-7.71 1.78,-11.6 0.76,-7.08 0.73,-14.22 0.25,-21.32 -0.08,-1.19 -0.17,-2.39 0.01,-3.57 0.18,-1.18 0.67,-2.35 1.57,-3.13 0.85,-0.73 1.99,-1.05 3.11,-1.1 1.11,-0.06 2.22,0.12 3.33,0.28 2.61,0.38 5.23,0.67 7.78,1.33 1.61,0.42 3.18,0.98 4.78,1.4 2.68,0.72 5.49,1.06 8.24,0.74 2.97,-0.34 5.85,-1.44 8.83,-1.37 1.23,0.03 2.44,0.26 3.61,0.62 1.19,0.37 2.37,0.9 3.25,1.78 0.66,0.67 1.11,1.51 1.48,2.38 0.53,1.29 0.89,2.67 0.91,4.07 0.03,1.46 -0.28,2.92 -0.09,4.37 0.16,1.17 0.66,2.28 1.3,3.28 0.63,1 1.4,1.91 2.17,2.81 1.48,1.75 2.96,3.53 4.82,4.87 2.11,1.53 4.62,2.43 6.8,3.85 0.65,0.43 1.28,0.91 1.74,1.54 0.78,1.06 0.98,2.5 0.54,3.74 z"/><path id="foot_right_layer_2" fill="#f5c021" filter="url(#blur_foot_right_layer_2)" clip-path="url(#clip_foot_right)" d="m 212.91,214.61 c -0.6,1.35 -1.37,2.6 -2.28,3.71 -2.12,2.58 -4.99,4.35 -8,5.49 -4.97,1.88 -10.39,2.13 -15.26,4.27 -2.97,1.3 -5.65,3.26 -8.36,5.12 -2.18,1.49 -4.42,2.94 -6.82,3.98 -2.72,1.19 -5.6,1.85 -8.5,2.32 -1.84,0.29 -3.71,0.51 -5.57,0.41 -1.86,-0.1 -3.72,-0.54 -5.37,-1.49 -1.24,-0.72 -2.36,-1.75 -3.03,-3.1 -0.73,-1.49 -0.86,-3.24 -0.85,-4.94 0.05,-4.5 1.02,-8.96 0.99,-13.47 -0.03,-3.93 -0.81,-7.8 -1.03,-11.72 -0.43,-7.54 1.19,-15.2 -0.24,-22.59 -0.22,-1.19 -0.53,-2.37 -0.52,-3.58 0.01,-0.6 0.1,-1.21 0.31,-1.77 0.22,-0.55 0.56,-1.06 1.01,-1.42 0.39,-0.29 0.84,-0.47 1.31,-0.56 0.46,-0.08 0.94,-0.06 1.41,0.01 0.93,0.15 1.82,0.51 2.73,0.78 2.6,0.78 5.35,0.76 8,1.35 1.66,0.36 3.26,0.97 4.91,1.41 2.75,0.76 5.63,1.08 8.46,0.75 3.04,-0.36 6.01,-1.46 9.07,-1.38 1.26,0.03 2.5,0.26 3.71,0.62 1.21,0.36 2.42,0.87 3.34,1.8 0.65,0.67 1.13,1.52 1.51,2.4 0.57,1.29 0.96,2.69 0.95,4.11 -0.01,0.74 -0.12,1.47 -0.19,2.21 -0.06,0.74 -0.08,1.49 0.09,2.2 0.18,0.72 0.55,1.37 0.97,1.96 0.42,0.59 0.9,1.12 1.34,1.7 1.22,1.61 2.1,3.49 3.05,5.3 0.95,1.81 2.02,3.6 3.53,4.91 2.05,1.77 4.7,2.48 6.99,3.89 0.67,0.41 1.31,0.89 1.78,1.55 0.38,0.52 0.63,1.15 0.73,1.81 0.09,0.65 0.03,1.34 -0.17,1.96 z"/><path id="foot_right_glare" fill="url(#fill_foot_right_glare)" filter="url(#blur_foot_right_glare)" clip-path="url(#clip_foot_right)" d="m 148.08,181.58 c 2.82,-0.76 5.22,1.38 7.27,2.99 1.32,1.13 3.24,0.85 4.86,0.9 2.69,-0.09 5.36,0.45 8.05,0.12 5.3,-0.45 10.49,-1.75 15.81,-1.97 2.54,-0.16 5.4,-0.31 7.59,1.17 0.89,0.62 2.2,3.23 3.07,2.25 -0.36,-2.74 -2.39,-5.39 -5.11,-6.12 -2.14,-0.34 -4.3,0.25 -6.46,0.06 -6.39,-0.15 -12.75,-1.34 -19.16,-1 -4.46,0.04 -8.91,-0.17 -13.37,-0.34 -1.75,-0.36 -2.37,1.19 -3.32,1.79 0.25,0.19 0.34,0.25 0.77,0.15 z"/></g></g><g id="wing_tip_right"><g id="wing_tip_right_shadow"><path id="wing_tip_right_shadow_lower" opacity="0.35" fill="url(#fill_wing_tip_right_shadow_lower)" filter="url(#blur_wing_tip_right_shadow_lower)" clip-path="url(#clip_foot_right)" d="m 185.49,187.61 c -0.48,-0.95 -1.36,-1.66 -2.35,-2.07 -0.98,-0.41 -2.06,-0.55 -3.13,-0.54 -2.13,0.02 -4.25,0.57 -6.38,0.39 -1.79,-0.16 -3.49,-0.83 -5.24,-1.26 -1.81,-0.44 -3.73,-0.61 -5.52,-0.12 -1.92,0.52 -3.61,1.81 -4.67,3.49 -0.94,1.48 -1.38,3.23 -1.52,4.98 -0.14,1.75 0.01,3.5 0.19,5.25 0.12,1.26 0.27,2.52 0.57,3.75 0.31,1.23 0.78,2.43 1.52,3.46 1.07,1.48 2.66,2.54 4.37,3.17 2.8,1.03 5.98,0.98 8.73,-0.15 4.88,-2.12 9.01,-5.92 11.52,-10.6 0.91,-1.68 1.61,-3.47 2.06,-5.31 0.18,-0.74 0.32,-1.49 0.32,-2.25 0.01,-0.75 -0.12,-1.52 -0.47,-2.19 z"/><path id="wing_tip_right_shadow_upper" opacity="0.35" fill="url(#fill_wing_tip_right_shadow_upper)" filter="url(#blur_wing_tip_right_shadow_upper)" clip-path="url(#clip_foot_right)" d="m 185.49,184.89 c -0.48,-0.69 -1.36,-1.2 -2.35,-1.5 -0.98,-0.3 -2.06,-0.39 -3.13,-0.39 -2.13,0.02 -4.25,0.42 -6.38,0.28 -1.79,-0.11 -3.49,-0.6 -5.24,-0.9 -1.81,-0.32 -3.73,-0.45 -5.52,-0.09 -1.92,0.37 -3.61,1.3 -4.67,2.52 -0.94,1.07 -1.38,2.34 -1.52,3.6 -0.14,1.26 0.01,2.53 0.19,3.79 0.12,0.91 0.27,1.83 0.57,2.72 0.31,0.89 0.78,1.76 1.52,2.5 1.07,1.07 2.66,1.83 4.37,2.29 2.8,0.75 5.98,0.71 8.73,-0.11 4.88,-1.53 9.01,-4.28 11.52,-7.66 0.91,-1.22 1.61,-2.51 2.06,-3.84 0.18,-0.54 0.32,-1.08 0.32,-1.62 0.01,-0.55 -0.12,-1.11 -0.47,-1.59 z"/></g><path id="wing_tip_right_base" fill="#020204" d="m 189.55,178.72 c -0.35,-0.95 -0.97,-1.79 -1.72,-2.47 -0.75,-0.68 -1.64,-1.2 -2.57,-1.6 -1.86,-0.79 -3.89,-1.09 -5.89,-1.46 -1.87,-0.35 -3.74,-0.78 -5.62,-1.1 -1.96,-0.33 -3.98,-0.55 -5.92,-0.11 -1.69,0.38 -3.26,1.26 -4.54,2.43 -1.28,1.17 -2.28,2.63 -3,4.21 -1.27,2.79 -1.67,5.92 -1.43,8.97 0.18,2.27 0.76,4.61 2.25,6.32 1.21,1.39 2.92,2.26 4.68,2.78 3.04,0.9 6.35,0.85 9.36,-0.13 4.97,-1.67 9.37,-4.98 12.35,-9.29 0.98,-1.43 1.82,-2.98 2.2,-4.66 0.29,-1.28 0.3,-2.66 -0.15,-3.89 z"/><g id="wing_tip_right_glare"><defs><path id="path_wing_tip_right_glare" d="m 168.89,171.07 c -0.47,0.03 -0.93,0.08 -1.4,0.17 -2.99,0.53 -5.73,2.42 -7.27,5.03 -1.09,1.85 -1.58,4.03 -1.43,6.17 0.07,-1.5 0.46,-2.97 1.19,-4.28 1.23,-2.23 3.47,-3.91 5.98,-4.37 1.54,-0.28 3.13,-0.11 4.68,0.08 1.5,0.19 3,0.39 4.47,0.7 2.28,0.5 4.53,1.26 6.44,2.59 0.44,0.31 0.86,0.66 1.21,1.08 0.35,0.41 0.62,0.89 0.73,1.42 0.15,0.78 -0.07,1.6 -0.46,2.29 -0.39,0.7 -0.92,1.3 -1.48,1.86 -0.46,0.46 -0.94,0.89 -1.43,1.32 2.21,-0.43 4.44,-1.03 6.28,-2.31 0.77,-0.55 1.48,-1.2 1.94,-2.02 0.46,-0.83 0.65,-1.83 0.43,-2.75 -0.16,-0.62 -0.5,-1.19 -0.92,-1.67 -0.42,-0.48 -0.93,-0.87 -1.45,-1.24 -2.31,-1.62 -5.01,-2.65 -7.81,-2.99 -1.8,-0.33 -3.61,-0.61 -5.42,-0.83 -1.41,-0.18 -2.86,-0.33 -4.28,-0.25 z"/></defs><use id="wing_tip_right_glare_1" href="#path_wing_tip_right_glare" xlink:href="#path_wing_tip_right_glare" fill="url(#fill_wing_tip_right_glare_1)" filter="url(#blur_wing_tip_right_glare)" clip-path="url(#clip_wing_tip_right)"/><use id="wing_tip_right_glare_2" href="#path_wing_tip_right_glare" xlink:href="#path_wing_tip_right_glare" fill="url(#fill_wing_tip_right_glare_2)" filter="url(#blur_wing_tip_right_glare)" clip-path="url(#clip_wing_tip_right)"/></g></g><g id="face"><g id="eyes"><g id="eye_left"><path id="eyeball_left" fill="url(#fill_eyeball_left)" d="m 84.45,38.28 c -1.53,0.08 -3,0.79 -4.12,1.84 -1.13,1.05 -1.92,2.43 -2.41,3.88 -0.97,2.92 -0.75,6.08 -0.53,9.15 0.2,2.77 0.41,5.6 1.45,8.18 0.52,1.3 1.25,2.51 2.22,3.51 0.97,0.99 2.2,1.76 3.55,2.09 1.26,0.32 2.62,0.26 3.86,-0.13 1.25,-0.4 2.38,-1.11 3.32,-2.02 1.36,-1.33 2.27,-3.07 2.8,-4.9 0.53,-1.83 0.68,-3.75 0.65,-5.66 -0.04,-2.38 -0.35,-4.77 -1.09,-7.03 -0.75,-2.26 -1.94,-4.4 -3.6,-6.11 -0.8,-0.83 -1.72,-1.55 -2.75,-2.06 -1.04,-0.51 -2.2,-0.8 -3.35,-0.74 z"/><g id="pupil_left"><path id="pupil_left_base" fill="#020204" d="m 80.75,50.99 c -0.32,1.94 -0.33,3.97 0.33,5.81 0.44,1.22 1.17,2.33 2.05,3.28 0.57,0.62 1.23,1.18 1.99,1.55 0.77,0.37 1.65,0.52 2.48,0.32 0.76,-0.19 1.42,-0.68 1.91,-1.29 0.49,-0.61 0.82,-1.34 1.05,-2.09 0.69,-2.21 0.58,-4.62 -0.11,-6.83 -0.49,-1.61 -1.32,-3.16 -2.6,-4.24 -0.62,-0.52 -1.34,-0.93 -2.12,-1.11 -0.78,-0.19 -1.63,-0.14 -2.36,0.19 -0.81,0.37 -1.44,1.07 -1.85,1.86 -0.41,0.79 -0.62,1.67 -0.77,2.55 z"/><path id="pupil_left_glare" fill="url(#fill_pupil_left_glare)" filter="url(#blur_pupil_left_glare)" clip-path="url(#clip_pupil_left)" d="m 84.84,49.59 c 0.21,0.55 0.91,0.75 1.3,1.19 0.37,0.42 0.76,0.87 0.97,1.4 0.39,1.01 -0.39,2.51 0.43,3.23 0.25,0.22 0.77,0.23 1.02,0 0.99,-0.9 0.77,-2.71 0.38,-3.99 -0.36,-1.15 -1.23,-2.25 -2.31,-2.8 -0.5,-0.26 -1.25,-0.47 -1.68,-0.11 -0.27,0.24 -0.24,0.74 -0.11,1.08 z"/></g><path id="eyelid_left" fill="url(#fill_eyelid_left)" clip-path="url(#clip_eye_left)" d="m 81.14,44.46 c 2.32,-1.38 5.13,-1.7 7.82,-1.45 2.68,0.26 5.27,1.04 7.87,1.75 1.91,0.52 3.84,1 5.63,1.84 1.78,0.84 3.44,2.08 4.43,3.8 0.16,0.27 0.29,0.56 0.46,0.83 0.17,0.27 0.37,0.52 0.62,0.71 0.25,0.19 0.57,0.32 0.88,0.3 0.16,-0.01 0.32,-0.05 0.45,-0.13 0.14,-0.08 0.26,-0.2 0.33,-0.34 0.08,-0.16 0.11,-0.35 0.1,-0.53 -0.01,-0.18 -0.05,-0.36 -0.1,-0.54 -0.65,-2.37 -2.19,-4.38 -3.35,-6.55 -0.7,-1.3 -1.28,-2.66 -1.98,-3.96 -2.43,-4.45 -6.42,-7.94 -10.95,-10.21 -4.53,-2.27 -9.59,-3.36 -14.65,-3.65 -5.86,-0.35 -11.73,0.35 -17.51,1.37 -2.51,0.44 -5.06,0.96 -7.27,2.21 -1.11,0.62 -2.13,1.42 -2.92,2.42 -0.8,0.99 -1.36,2.18 -1.55,3.44 -0.17,1.22 0.01,2.47 0.44,3.62 0.42,1.15 1.08,2.2 1.86,3.15 1.54,1.91 3.53,3.39 5.36,5.03 1.83,1.63 3.52,3.44 5.57,4.79 1.02,0.68 2.13,1.24 3.31,1.57 1.18,0.33 2.44,0.42 3.64,0.17 1.24,-0.25 2.4,-0.86 3.41,-1.64 1.01,-0.77 1.88,-1.7 2.71,-2.66 1.66,-1.93 3.21,-4.04 5.39,-5.34 z"/><path id="eyebrow_left" fill="url(#fill_eyebrow_left)" filter="url(#blur_eyebrow_left)" d="m 90.77,36.57 c 2.16,2.02 3.76,4.52 4.85,7.16 -0.48,-2.91 -1.23,-5.26 -3.13,-7.16 -1.16,-1.09 -2.49,-2.05 -3.98,-2.72 -1.32,-0.59 -2.77,-0.96 -3.61,-0.97 -0.83,-0.02 -1.03,0 -1.2,0.01 -0.18,0.01 -0.31,0.01 0.23,0.08 0.54,0.06 1.75,0.39 3.05,0.97 1.3,0.58 2.62,1.54 3.79,2.63 z"/></g><g id="eye_right"><path id="eyeball_right" fill="url(#fill_eyeball_right)" d="m 111.61,38.28 c -2.39,1.65 -4.4,3.94 -5.38,6.68 -1.24,3.45 -0.77,7.31 0.43,10.77 1.22,3.55 3.27,6.93 6.36,9.06 1.54,1.07 3.33,1.8 5.19,2.02 1.87,0.22 3.8,-0.09 5.47,-0.95 2.02,-1.06 3.57,-2.91 4.53,-4.98 0.96,-2.08 1.37,-4.37 1.5,-6.66 0.16,-2.9 -0.12,-5.86 -1.08,-8.61 -1.04,-2.99 -2.92,-5.75 -5.58,-7.47 -1.32,-0.86 -2.83,-1.45 -4.4,-1.67 -1.57,-0.22 -3.19,-0.05 -4.67,0.52 -0.84,0.33 -1.62,0.78 -2.37,1.29 z"/><g id="pupil_right"><path id="pupil_right_base" fill="#020204" d="m 117.14,45.52 c -0.9,0.06 -1.78,0.37 -2.55,0.85 -0.76,0.48 -1.41,1.13 -1.92,1.88 -1.03,1.49 -1.48,3.31 -1.55,5.12 -0.05,1.35 0.1,2.72 0.55,4 0.45,1.28 1.2,2.47 2.25,3.33 1.07,0.89 2.42,1.42 3.81,1.49 1.39,0.06 2.79,-0.34 3.93,-1.13 0.91,-0.63 1.64,-1.5 2.16,-2.48 0.52,-0.97 0.84,-2.05 0.98,-3.15 0.25,-1.93 -0.03,-3.95 -0.93,-5.69 -0.89,-1.74 -2.41,-3.17 -4.24,-3.84 -0.8,-0.29 -1.65,-0.44 -2.49,-0.38 z"/><path id="pupil_right_glare" fill="url(#fill_pupil_right_glare)" filter="url(#blur_pupil_right_glare)" clip-path="url(#clip_pupil_right)" d="m 122.71,53.36 c 1,-1 -0.71,-3.65 -2.05,-4.74 -0.97,-0.78 -3.78,-1.61 -3.66,-0.75 0.12,0.85 1.39,1.95 2.23,2.79 1.05,1.03 3,3.18 3.48,2.7 z"/></g><path id="eyelid_right" fill="url(#fill_eyelid_right)" clip-path="url(#clip_eye_right)" d="m 102.56,47.01 c 2.06,-1.71 4.45,-3.01 7,-3.8 5.25,-1.62 11.2,-0.98 15.84,1.97 1.6,1.01 3.03,2.27 4.52,3.45 1.48,1.17 3.06,2.27 4.85,2.9 0.97,0.34 2,0.54 3.02,0.43 0.92,-0.09 1.81,-0.44 2.57,-0.96 0.76,-0.53 1.4,-1.23 1.88,-2.02 0.96,-1.58 1.27,-3.5 1.1,-5.34 -0.33,-3.69 -2.41,-6.94 -4.15,-10.21 -0.55,-1.02 -1.07,-2.06 -1.73,-3.01 -2.01,-2.93 -5.23,-4.86 -8.6,-5.99 -3.37,-1.13 -6.93,-1.54 -10.46,-1.98 -1.58,-0.2 -3.17,-0.41 -4.74,-0.22 -1.81,0.22 -3.51,0.95 -5.28,1.4 -0.84,0.22 -1.69,0.37 -2.52,0.61 -0.83,0.24 -1.65,0.57 -2.33,1.11 -0.98,0.79 -1.6,1.98 -1.87,3.21 -0.27,1.24 -0.21,2.52 -0.01,3.77 0.39,2.5 1.33,4.93 1.24,7.46 -0.06,1.73 -0.61,3.44 -0.54,5.17 0.02,0.51 0.12,1.55 0.21,2.05 z"/><path id="eyebrow_right" fill="url(#fill_eyebrow_right)" filter="url(#blur_eyebrow_right)" d="m 119.93,31.18 c -0.41,0.52 -0.78,1.08 -1.07,1.7 1.85,0.4 3.61,1.16 5.19,2.21 3.06,2.03 5.38,4.99 7.01,8.29 0.38,-0.42 0.72,-0.87 1.02,-1.37 -1.64,-3.44 -4,-6.55 -7.16,-8.65 -1.52,-1 -3.21,-1.77 -4.99,-2.18 z"/></g></g><g id="beak"><g id="beak_shadow"><path id="beak_shadow_lower" fill="#000000" fill-opacity="0.258824" filter="url(#blur_beak_shadow_lower)" clip-path="url(#clip_body)" d="m 81.12,89.33 c 1.47,4.26 4.42,7.89 7.92,10.72 1.16,0.95 2.39,1.82 3.76,2.43 1.36,0.62 2.87,0.97 4.36,0.84 1.46,-0.12 2.85,-0.7 4.13,-1.42 1.28,-0.72 2.46,-1.59 3.7,-2.37 2.12,-1.35 4.39,-2.44 6.6,-3.64 2.65,-1.45 5.23,-3.1 7.46,-5.14 1.03,-0.93 1.98,-1.95 3.11,-2.75 1.13,-0.81 2.49,-1.39 3.87,-1.29 1.04,0.07 2.01,0.51 3.03,0.73 0.51,0.11 1.03,0.16 1.55,0.08 0.51,-0.08 1.01,-0.29 1.37,-0.67 0.44,-0.46 0.64,-1.12 0.61,-1.76 -0.02,-0.63 -0.24,-1.25 -0.54,-1.81 -0.59,-1.13 -1.49,-2.1 -1.89,-3.31 -0.36,-1.08 -0.29,-2.24 -0.26,-3.37 0.03,-1.14 0.01,-2.32 -0.51,-3.33 -0.4,-0.76 -1.07,-1.37 -1.83,-1.77 -0.76,-0.41 -1.62,-0.62 -2.48,-0.7 -1.72,-0.16 -3.44,0.18 -5.17,0.27 -2.28,0.13 -4.58,-0.15 -6.87,-0.02 -2.85,0.18 -5.65,1 -8.51,1.01 -3.26,0.01 -6.52,-1.06 -9.74,-0.55 -1.39,0.22 -2.71,0.72 -4.03,1.16 -1.33,0.45 -2.7,0.84 -4.1,0.82 -1.59,-0.03 -3.13,-0.58 -4.72,-0.69 -0.79,-0.06 -1.6,0 -2.35,0.28 -0.74,0.28 -1.41,0.79 -1.78,1.5 -0.21,0.4 -0.31,0.86 -0.33,1.31 -0.02,0.46 0.04,0.91 0.15,1.36 0.22,0.88 0.63,1.71 0.96,2.55 1.2,3.07 1.46,6.42 2.53,9.53 z"/><path id="beak_shadow_upper" opacity="0.3" fill="#000000" filter="url(#blur_beak_shadow_upper)" clip-path="url(#clip_body)" d="m 77.03,77.2 c 2.85,1.76 5.41,3.93 7.56,6.39 1.99,2.29 3.68,4.89 6.29,6.58 1.83,1.2 4.04,1.87 6.28,2.08 2.63,0.24 5.29,-0.15 7.83,-0.84 2.35,-0.63 4.62,-1.53 6.7,-2.71 3.97,-2.25 7.28,-5.55 11.65,-7.03 0.95,-0.33 1.94,-0.56 2.86,-0.96 0.92,-0.39 1.79,-0.99 2.23,-1.83 0.42,-0.82 0.4,-1.75 0.54,-2.64 0.15,-0.96 0.48,-1.88 0.66,-2.83 0.18,-0.95 0.2,-1.96 -0.24,-2.83 -0.37,-0.72 -1.04,-1.29 -1.81,-1.66 -0.77,-0.36 -1.64,-0.52 -2.51,-0.56 -1.72,-0.08 -3.43,0.33 -5.16,0.47 -2.28,0.19 -4.58,-0.08 -6.87,-0.01 -2.85,0.08 -5.66,0.67 -8.51,0.8 -3.25,0.14 -6.49,-0.34 -9.74,-0.44 -1.41,-0.05 -2.83,-0.03 -4.21,0.2 -1.39,0.22 -2.75,0.65 -3.92,1.37 -1.14,0.69 -2.07,1.64 -3.11,2.45 -0.52,0.41 -1.08,0.78 -1.68,1.07 -0.61,0.28 -1.28,0.48 -1.96,0.51 -0.35,0.01 -0.71,-0.01 -1.05,0.04 -0.59,0.08 -1.13,0.39 -1.47,0.83 -0.34,0.45 -0.47,1.02 -0.36,1.55 z"/></g><path id="beak_base" fill="url(#fill_beak_base)" d="m 91.66,58.53 c 1.53,-1.71 2.57,-3.8 4.03,-5.56 0.73,-0.88 1.58,-1.69 2.57,-2.26 0.99,-0.57 2.15,-0.89 3.29,-0.79 1.27,0.11 2.46,0.74 3.39,1.61 0.93,0.87 1.62,1.97 2.17,3.12 0.53,1.11 0.95,2.28 1.71,3.24 0.81,1.02 1.94,1.71 2.97,2.52 0.51,0.4 1.01,0.83 1.41,1.34 0.41,0.51 0.72,1.1 0.86,1.74 0.13,0.65 0.06,1.33 -0.16,1.95 -0.23,0.62 -0.61,1.18 -1.09,1.64 -0.95,0.92 -2.25,1.42 -3.56,1.6 -2.62,0.37 -5.27,-0.41 -7.92,-0.34 -2.67,0.08 -5.29,1.02 -7.97,0.93 -1.33,-0.05 -2.69,-0.38 -3.79,-1.14 -0.55,-0.39 -1.03,-0.88 -1.38,-1.45 -0.34,-0.57 -0.55,-1.23 -0.58,-1.9 -0.02,-0.64 0.13,-1.28 0.39,-1.86 0.25,-0.59 0.61,-1.12 1.01,-1.62 0.81,-0.99 1.8,-1.81 2.65,-2.77 z"/><g id="mandible_lower"><path id="mandible_lower_base" fill="url(#fill_mandible_lower_base)" d="m 77.14,75.05 c 0.06,0.26 0.15,0.5 0.28,0.73 0.23,0.38 0.57,0.69 0.93,0.95 0.36,0.27 0.75,0.49 1.13,0.72 2.01,1.27 3.65,3.04 5.11,4.92 1.95,2.52 3.68,5.31 6.29,7.14 1.84,1.3 4.04,2.03 6.28,2.26 2.63,0.26 5.29,-0.16 7.83,-0.91 2.35,-0.69 4.62,-1.66 6.7,-2.95 3.97,-2.44 7.28,-6.02 11.65,-7.63 0.95,-0.35 1.94,-0.6 2.86,-1.03 0.92,-0.44 1.79,-1.08 2.23,-2 0.42,-0.88 0.4,-1.9 0.54,-2.87 0.15,-1.03 0.48,-2.03 0.66,-3.06 0.18,-1.03 0.2,-2.13 -0.24,-3.08 -0.37,-0.78 -1.04,-1.4 -1.81,-1.79 -0.77,-0.4 -1.64,-0.58 -2.51,-0.62 -1.72,-0.08 -3.43,0.36 -5.16,0.52 -2.28,0.21 -4.58,-0.09 -6.87,-0.02 -2.85,0.09 -5.66,0.73 -8.51,0.87 -3.25,0.15 -6.49,-0.35 -9.74,-0.48 -1.41,-0.06 -2.83,-0.04 -4.22,0.2 -1.39,0.23 -2.75,0.71 -3.91,1.51 -1.13,0.78 -2.03,1.84 -3.07,2.74 -0.52,0.45 -1.08,0.86 -1.7,1.16 -0.61,0.3 -1.29,0.49 -1.98,0.47 -0.35,-0.01 -0.72,-0.06 -1.05,0.04 -0.21,0.07 -0.4,0.2 -0.56,0.35 -0.16,0.16 -0.29,0.34 -0.41,0.52 -0.29,0.42 -0.54,0.87 -0.75,1.34 z"/><path id="mandible_lower_glare" fill="#d9b30d" filter="url(#blur_mandible_lower_glare)" clip-path="url(#clip_mandible_lower)" d="m 89.9,78.56 c -0.33,1.37 -0.13,2.87 0.56,4.11 0.68,1.24 1.84,2.2 3.19,2.65 1.7,0.57 3.62,0.29 5.21,-0.54 0.93,-0.48 1.77,-1.16 2.3,-2.06 0.27,-0.44 0.46,-0.94 0.53,-1.46 0.06,-0.51 0.02,-1.05 -0.16,-1.54 -0.2,-0.53 -0.56,-1 -0.99,-1.37 -0.44,-0.37 -0.95,-0.64 -1.5,-0.82 -1.08,-0.36 -2.77,-0.66 -3.91,-0.68 -2.02,-0.04 -4.9,0.34 -5.23,1.71 z"/></g><g id="mandible_upper"><path id="mandible_upper_shadow" fill="#604405" filter="url(#blur_mandible_upper_shadow)" clip-path="url(#clip_mandible_lower)" d="m 84.31,67.86 c -1.16,0.68 -2.27,1.43 -3.36,2.2 -0.57,0.41 -1.15,0.84 -1.45,1.47 -0.21,0.44 -0.26,0.94 -0.27,1.43 0,0.5 0.03,0.99 -0.04,1.48 -0.04,0.33 -0.13,0.66 -0.14,0.99 -0.01,0.17 0,0.34 0.04,0.5 0.05,0.16 0.13,0.32 0.24,0.44 0.15,0.16 0.35,0.26 0.56,0.32 0.21,0.06 0.42,0.09 0.64,0.14 1.01,0.24 1.89,0.86 2.66,1.56 0.77,0.69 1.47,1.48 2.28,2.13 2.18,1.78 5.07,2.52 7.89,2.56 2.82,0.05 5.61,-0.54 8.36,-1.16 2.16,-0.49 4.32,-0.99 6.39,-1.76 3.2,-1.18 6.16,-2.96 8.72,-5.19 1.17,-1.01 2.26,-2.12 3.57,-2.94 1.15,-0.73 2.44,-1.21 3.62,-1.9 0.11,-0.06 0.21,-0.13 0.3,-0.2 0.1,-0.08 0.18,-0.18 0.24,-0.28 0.09,-0.19 0.09,-0.42 0.03,-0.62 -0.06,-0.2 -0.18,-0.38 -0.31,-0.55 -0.15,-0.18 -0.31,-0.34 -0.49,-0.5 -1.23,-1.05 -2.89,-1.43 -4.51,-1.56 -1.61,-0.12 -3.24,-0.03 -4.83,-0.3 -1.5,-0.25 -2.92,-0.81 -4.37,-1.27 -1.52,-0.49 -3.07,-0.87 -4.64,-1.13 -3.71,-0.61 -7.52,-0.49 -11.19,0.27 -3.49,0.73 -6.87,2.05 -9.94,3.87 z"/><path id="mandible_upper_base" fill="url(#fill_mandible_upper_base)" d="m 83.94,63.95 c -1.66,1.12 -3.16,2.49 -4.43,4.04 -0.72,0.89 -1.38,1.86 -1.74,2.94 -0.29,0.86 -0.39,1.76 -0.57,2.65 -0.07,0.33 -0.15,0.66 -0.14,1 0,0.16 0.02,0.33 0.07,0.5 0.05,0.16 0.14,0.31 0.25,0.43 0.2,0.2 0.47,0.31 0.74,0.37 0.28,0.05 0.56,0.06 0.84,0.09 1.25,0.15 2.4,0.75 3.44,1.47 1.04,0.71 2,1.55 3.07,2.22 2.35,1.49 5.16,2.15 7.95,2.26 2.78,0.11 5.56,-0.31 8.3,-0.86 2.17,-0.43 4.33,-0.95 6.39,-1.76 3.16,-1.25 6.01,-3.16 8.72,-5.19 1.24,-0.92 2.46,-1.87 3.57,-2.94 0.37,-0.37 0.74,-0.74 1.14,-1.08 0.4,-0.33 0.85,-0.62 1.35,-0.78 0.76,-0.24 1.58,-0.17 2.37,-0.04 0.59,0.1 1.18,0.23 1.78,0.21 0.3,-0.02 0.6,-0.07 0.88,-0.18 0.28,-0.11 0.54,-0.28 0.73,-0.52 0.25,-0.3 0.38,-0.7 0.38,-1.09 0,-0.4 -0.12,-0.79 -0.32,-1.13 -0.4,-0.68 -1.09,-1.14 -1.81,-1.46 -0.99,-0.44 -2.06,-0.65 -3.11,-0.91 -3.23,-0.78 -6.37,-1.93 -9.34,-3.41 -1.48,-0.73 -2.92,-1.54 -4.37,-2.32 -1.5,-0.8 -3.02,-1.57 -4.64,-2.07 -3.64,-1.1 -7.6,-0.74 -11.19,0.51 -3.98,1.38 -7.58,3.84 -10.31,7.05 z"/><path id="mandible_upper_glare" fill="#f6da4a" filter="url(#blur_mandible_upper_glare)" clip-path="url(#clip_mandible_upper)" d="m 109.45,64.75 c -0.2,-0.24 -0.48,-0.42 -0.78,-0.51 -0.3,-0.09 -0.62,-0.09 -0.93,-0.04 -0.62,0.11 -1.18,0.44 -1.7,0.8 -1.47,1.01 -2.77,2.26 -3.91,3.64 -1.5,1.83 -2.74,3.94 -3.16,6.27 -0.07,0.39 -0.11,0.8 -0.07,1.19 0.05,0.4 0.2,0.79 0.49,1.07 0.24,0.25 0.58,0.4 0.92,0.45 0.35,0.05 0.71,0 1.04,-0.11 0.66,-0.22 1.21,-0.69 1.74,-1.15 2.87,-2.58 5.47,-5.66 6.51,-9.38 0.1,-0.37 0.19,-0.75 0.19,-1.14 0,-0.39 -0.1,-0.78 -0.34,-1.09 z"/><path id="naris_left" opacity="0.8" fill="url(#fill_naris_left)" filter="url(#blur_naris_left)" d="m 92.72,59.06 c -0.77,-0.25 -2.03,1.1 -1.62,1.79 0.11,0.19 0.46,0.43 0.7,0.3 0.35,-0.19 0.64,-0.89 1.02,-1.16 0.25,-0.18 0.2,-0.84 -0.1,-0.93 z"/><path id="naris_right" opacity="0.8" fill="url(#fill_naris_right)" filter="url(#blur_naris_right)" d="m 102.56,59.42 c 0.2,0.64 1.23,0.53 1.83,0.84 0.52,0.27 0.94,0.86 1.53,0.88 0.56,0.01 1.44,-0.2 1.51,-0.76 0.09,-0.73 -0.98,-1.2 -1.67,-1.47 -0.89,-0.34 -2.03,-0.52 -2.86,-0.06 -0.19,0.11 -0.4,0.36 -0.34,0.57 z"/></g><path id="beak_corner" fill="url(#fill_beak_corner)" filter="url(#blur_beak_corner)" clip-path="url(#clip_beak)" d="m 129.27,69.15 a 2.42,3.1 16.94 0 1 -2.81,3.04 2.42,3.1 16.94 0 1 -2.12,-3.04 2.42,3.1 16.94 0 1 2.81,-3.05 2.42,3.1 16.94 0 1 2.12,3.05 z"/></g></g></g></svg>',
|
|
1270
|
-
|
|
1345
|
+
windows: `<svg viewBox="0 0 22 22" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:block;width:100%;height:100%"><!-- The Microsoft squares on a white square. The white edge around them is one unit, the same as the gap between them, so the tile reads as the mark with its own margin. Drawn once, so every place shows the same tile. The colours are Microsoft's, as @lobehub/icons-static-svg carries them. --><rect width="22" height="22" fill="#fff"/><rect x="1" y="1" width="9.5" height="9.5" fill="#F25022"/><rect x="11.5" y="1" width="9.5" height="9.5" fill="#7FBA00"/><rect x="1" y="11.5" width="9.5" height="9.5" fill="#00A4EF"/><rect x="11.5" y="11.5" width="9.5" height="9.5" fill="#FFB900"/></svg>`,
|
|
1346
|
+
docker: '<svg viewBox="0 0 24 24" fill="#2496ED" style="display:block;width:100%;height:100%"><path d="M13.983 11.078h2.119a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.119a.185.185 0 00-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 00.186-.186V3.574a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m0 2.716h2.118a.187.187 0 00.186-.186V6.29a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 00.184-.186V6.29a.185.185 0 00-.185-.185H8.1a.185.185 0 00-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 00.185-.186V6.29a.185.185 0 00-.185-.185H5.136a.186.186 0 00-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 00.185-.185V9.006a.185.185 0 00-.184-.186h-2.12a.186.186 0 00-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.751.751 0 00-.75.748 11.376 11.376 0 00.692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137.983.003 1.963-.086 2.93-.266a12.248 12.248 0 003.823-1.389c.98-.567 1.86-1.288 2.61-2.136 1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z"/></svg>'
|
|
1271
1347
|
};
|
|
1272
1348
|
|
|
1273
1349
|
// ../ui/dist/brand-marks.js
|
|
@@ -1294,6 +1370,7 @@ var BRAND_NAMES = {
|
|
|
1294
1370
|
xai: "xAI",
|
|
1295
1371
|
cohere: "Cohere",
|
|
1296
1372
|
stability: "Stability AI",
|
|
1373
|
+
bfl: "Black Forest Labs",
|
|
1297
1374
|
liquid: "Liquid AI",
|
|
1298
1375
|
yi: "01.AI",
|
|
1299
1376
|
internlm: "InternLM",
|
|
@@ -1331,10 +1408,20 @@ var BRAND_NAMES = {
|
|
|
1331
1408
|
sentry: "Sentry",
|
|
1332
1409
|
apple: "Apple",
|
|
1333
1410
|
linux: "Linux",
|
|
1334
|
-
windows: "Windows"
|
|
1411
|
+
windows: "Windows",
|
|
1412
|
+
docker: "Docker"
|
|
1335
1413
|
};
|
|
1336
1414
|
function BrandMark({ brand, size: size3 = 16, style }) {
|
|
1337
|
-
|
|
1415
|
+
const props = {
|
|
1416
|
+
className: "hs-brand-mark",
|
|
1417
|
+
role: "img",
|
|
1418
|
+
"aria-label": BRAND_NAMES[brand],
|
|
1419
|
+
style: { width: size3, height: size3, ...style }
|
|
1420
|
+
};
|
|
1421
|
+
return isFileBrand(brand) ? _jsx28("span", { ...props, "data-brand": brand }) : _jsx28("span", { ...props, dangerouslySetInnerHTML: { __html: BRAND_SVG[brand] } });
|
|
1422
|
+
}
|
|
1423
|
+
function isFileBrand(brand) {
|
|
1424
|
+
return BRAND_FILES.includes(brand);
|
|
1338
1425
|
}
|
|
1339
1426
|
var PUBLISHERS = {
|
|
1340
1427
|
qwen: "qwen",
|
|
@@ -1357,6 +1444,7 @@ var PUBLISHERS = {
|
|
|
1357
1444
|
cohereforai: "cohere",
|
|
1358
1445
|
stabilityai: "stability",
|
|
1359
1446
|
"stable-diffusion-v1-5": "stability",
|
|
1447
|
+
"black-forest-labs": "bfl",
|
|
1360
1448
|
liquidai: "liquid",
|
|
1361
1449
|
"01-ai": "yi",
|
|
1362
1450
|
internlm: "internlm",
|
|
@@ -1377,25 +1465,25 @@ function brandOfPublisher(owner) {
|
|
|
1377
1465
|
// ../ui/dist/ModelAvatar.js
|
|
1378
1466
|
var PublisherPicturesContext = createContext4(() => void 0);
|
|
1379
1467
|
function ModelAvatar({ identity, server, size: size3 = 24 }) {
|
|
1380
|
-
return
|
|
1468
|
+
return _jsx29(PublisherAvatar, { identity, server, size: size3 }, `${server}:${identity.repository}:${identity.publisher}`);
|
|
1381
1469
|
}
|
|
1382
1470
|
function PublisherAvatar({ identity, server, size: size3 }) {
|
|
1383
1471
|
const pictures = useContext3(PublisherPicturesContext);
|
|
1384
1472
|
const owner = identity.repository?.split("/")[0];
|
|
1385
1473
|
const picture = owner ? pictures(server, owner) : void 0;
|
|
1386
|
-
const [failed, setFailed] =
|
|
1474
|
+
const [failed, setFailed] = useState10(false);
|
|
1387
1475
|
const brand = brandOfPublisher(identity.publisher);
|
|
1388
1476
|
const tips = useFloatingTips();
|
|
1389
1477
|
const { hover, tip } = tips("avatar", identity.publisher);
|
|
1390
|
-
return
|
|
1478
|
+
return _jsxs18("span", { className: "hs-model-avatar", style: { width: size3, height: size3 }, role: "img", "aria-label": identity.publisher, ...hover, children: [tip, picture && !failed ? _jsx29("img", { src: picture, alt: "", width: size3, height: size3, loading: "lazy", decoding: "async", onError: () => setFailed(true) }) : brand ? _jsx29(BrandMark, { brand, size: size3 }) : identity.publisher ? _jsx29("span", { className: "hs-model-avatar-initial", children: identity.publisher.slice(0, 1) }) : _jsx29(PackageGlyph, { size: size3 })] });
|
|
1391
1479
|
}
|
|
1392
1480
|
|
|
1393
1481
|
// ../ui/dist/VirtualList.js
|
|
1394
|
-
import { jsx as
|
|
1395
|
-
import { useImperativeHandle, useRef as
|
|
1482
|
+
import { jsx as _jsx30 } from "react/jsx-runtime";
|
|
1483
|
+
import { useImperativeHandle, useRef as useRef13 } from "react";
|
|
1396
1484
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
1397
1485
|
function VirtualList({ count, estimate, row, rowKey, className, ref }) {
|
|
1398
|
-
const scroller =
|
|
1486
|
+
const scroller = useRef13(null);
|
|
1399
1487
|
const list = useVirtualizer({
|
|
1400
1488
|
count,
|
|
1401
1489
|
getScrollElement: () => scroller.current,
|
|
@@ -1404,21 +1492,21 @@ function VirtualList({ count, estimate, row, rowKey, className, ref }) {
|
|
|
1404
1492
|
...rowKey && { getItemKey: rowKey }
|
|
1405
1493
|
});
|
|
1406
1494
|
useImperativeHandle(ref, () => ({ scrollToIndex: (index, align = "auto") => list.scrollToIndex(index, { align }) }), [list]);
|
|
1407
|
-
return
|
|
1495
|
+
return _jsx30("div", { ref: scroller, className: className ? `hs-virtual-list ${className}` : "hs-virtual-list", children: _jsx30("div", { className: "hs-virtual-list-rows", style: { height: list.getTotalSize() }, children: list.getVirtualItems().map((item) => _jsx30("div", { ref: list.measureElement, "data-index": item.index, className: "hs-virtual-list-row", style: { transform: `translateY(${item.start}px)` }, children: row(item.index) }, item.key)) }) });
|
|
1408
1496
|
}
|
|
1409
1497
|
|
|
1410
1498
|
// ../ui/dist/PictureCompare.js
|
|
1411
|
-
import { jsx as
|
|
1412
|
-
import { useRef as
|
|
1499
|
+
import { jsx as _jsx31, jsxs as _jsxs19 } from "react/jsx-runtime";
|
|
1500
|
+
import { useRef as useRef14, useState as useState11 } from "react";
|
|
1413
1501
|
var KEY_STEP = 5;
|
|
1414
1502
|
function PictureCompare({ before, after }) {
|
|
1415
|
-
const [split, setSplit] =
|
|
1416
|
-
const box =
|
|
1503
|
+
const [split, setSplit] = useState11(50);
|
|
1504
|
+
const box = useRef14(null);
|
|
1417
1505
|
const follow = (event) => {
|
|
1418
1506
|
const rect = box.current.getBoundingClientRect();
|
|
1419
1507
|
setSplit(Math.max(0, Math.min(100, (event.clientX - rect.left) / rect.width * 100)));
|
|
1420
1508
|
};
|
|
1421
|
-
return
|
|
1509
|
+
return _jsxs19("div", { ref: box, className: "hs-picture-compare", onPointerDown: (event) => {
|
|
1422
1510
|
if (event.button !== 0)
|
|
1423
1511
|
return;
|
|
1424
1512
|
event.currentTarget.setPointerCapture(event.pointerId);
|
|
@@ -1426,13 +1514,13 @@ function PictureCompare({ before, after }) {
|
|
|
1426
1514
|
}, onPointerMove: (event) => {
|
|
1427
1515
|
if (event.currentTarget.hasPointerCapture(event.pointerId))
|
|
1428
1516
|
follow(event);
|
|
1429
|
-
}, children: [
|
|
1517
|
+
}, children: [_jsx31("img", { src: before.src, alt: before.name, draggable: false }), _jsx31("div", { className: "hs-picture-compare-after", style: { clipPath: `inset(0 0 0 ${split}%)` }, children: _jsx31("img", { src: after.src, alt: after.name, draggable: false }) }), _jsx31("span", { className: "hs-picture-compare-name", "data-side": "before", children: before.name }), _jsx31("span", { className: "hs-picture-compare-name", "data-side": "after", children: after.name }), _jsx31("div", { className: "hs-picture-compare-handle", role: "slider", tabIndex: 0, "aria-label": `${before.name} and ${after.name}`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(split), style: { left: `${split}%` }, onKeyDown: (event) => {
|
|
1430
1518
|
const next = event.key === "ArrowLeft" || event.key === "ArrowDown" ? split - KEY_STEP : event.key === "ArrowRight" || event.key === "ArrowUp" ? split + KEY_STEP : event.key === "Home" ? 0 : event.key === "End" ? 100 : null;
|
|
1431
1519
|
if (next === null)
|
|
1432
1520
|
return;
|
|
1433
1521
|
event.preventDefault();
|
|
1434
1522
|
setSplit(Math.max(0, Math.min(100, next)));
|
|
1435
|
-
}, children:
|
|
1523
|
+
}, children: _jsx31("span", { className: "hs-picture-compare-knob" }) })] });
|
|
1436
1524
|
}
|
|
1437
1525
|
|
|
1438
1526
|
// src/Icon.tsx
|
|
@@ -1471,8 +1559,10 @@ export {
|
|
|
1471
1559
|
MSub,
|
|
1472
1560
|
MenuSurface,
|
|
1473
1561
|
Meter,
|
|
1562
|
+
Modal,
|
|
1474
1563
|
ModelAvatar,
|
|
1475
1564
|
Mono,
|
|
1565
|
+
MultiSelect,
|
|
1476
1566
|
Notice,
|
|
1477
1567
|
OverlayScroll,
|
|
1478
1568
|
PageTitle,
|
|
@@ -1499,5 +1589,6 @@ export {
|
|
|
1499
1589
|
ToggleRow,
|
|
1500
1590
|
VirtualList,
|
|
1501
1591
|
anchorFrom,
|
|
1592
|
+
spaces,
|
|
1502
1593
|
useFloatingTips
|
|
1503
1594
|
};
|