@hadoku/themes 0.0.0-stage → 5.12.16
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/LICENSE +21 -0
- package/LICENSE-lucide +43 -0
- package/README.md +433 -2
- package/THEME_USAGE_GUIDE.md +308 -0
- package/dist/HadokuThemeRoot.d.ts +53 -0
- package/dist/HadokuThemeRoot.js +66 -0
- package/dist/ThemeIcons.d.ts +31 -0
- package/dist/ThemeIcons.js +91 -0
- package/dist/effects.d.ts +25 -0
- package/dist/effects.js +25 -0
- package/dist/icons/Icon.d.ts +36 -0
- package/dist/icons/Icon.js +89 -0
- package/dist/icons/index.d.ts +61 -0
- package/dist/icons/index.js +87 -0
- package/dist/icons/registry.generated.d.ts +158 -0
- package/dist/icons/registry.generated.js +446 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.js +169 -0
- package/dist/metadata.d.ts +35 -0
- package/dist/metadata.js +108 -0
- package/dist/platform/index.d.ts +94 -0
- package/dist/platform/index.js +149 -0
- package/dist/platform/usePlatform.d.ts +29 -0
- package/dist/platform/usePlatform.js +65 -0
- package/dist/prefsApiBase.d.ts +37 -0
- package/dist/prefsApiBase.js +40 -0
- package/dist/theme-types.d.ts +34 -0
- package/dist/theme-types.js +1 -0
- package/dist/themeContext.d.ts +62 -0
- package/dist/themeContext.js +70 -0
- package/dist/themePrefs.d.ts +29 -0
- package/dist/themePrefs.js +48 -0
- package/dist/useRefElement.d.ts +19 -0
- package/dist/useRefElement.js +52 -0
- package/dist/useTheme.d.ts +46 -0
- package/dist/useTheme.js +216 -0
- package/package.json +83 -4
- package/scripts/audit-tokens.mjs +126 -0
- package/scripts/check-contrast.mjs +24 -0
- package/scripts/check-docs.mjs +53 -0
- package/scripts/check-icons.mjs +473 -0
- package/scripts/check-usage.mjs +297 -0
- package/scripts/codemod-icons.mjs +396 -0
- package/scripts/generate-icons.mjs +199 -0
- package/scripts/generate-preview.mjs +374 -0
- package/scripts/generate-tailwind-colors.mjs +109 -0
- package/scripts/lib/color.mjs +184 -0
- package/scripts/lib/contract.d.mts +58 -0
- package/scripts/lib/contract.mjs +348 -0
- package/scripts/lib/derive.mjs +324 -0
- package/scripts/lib/icon-registry.mjs +92 -0
- package/scripts/lib/parse-themes.mjs +19 -0
- package/scripts/lib/tokens.mjs +188 -0
- package/scripts/normalize-tokens.mjs +161 -0
- package/src/advanced.css +218 -0
- package/src/icons/Icon.tsx +151 -0
- package/src/icons/emoji-map.json +202 -0
- package/src/icons/index.ts +151 -0
- package/src/icons/registry.generated.ts +455 -0
- package/src/icons/sources.json +150 -0
- package/src/icons.css +145 -0
- package/src/style.css +1421 -0
- package/src/tailwind-colors.css +88 -0
- package/src/tailwind-integration.css +49 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React `<Icon>` — a thin wrapper over the string registry.
|
|
3
|
+
*
|
|
4
|
+
* The glyph is emitted as real JSX children rather than dangerouslySetInnerHTML: the
|
|
5
|
+
* markup is ours and build-time-generated, but React apps run under the same strict
|
|
6
|
+
* CSP as the frontpage, and parsing 78 vendored strings at runtime buys nothing when
|
|
7
|
+
* the shapes can be elements. So the paths are parsed once, lazily, per icon actually
|
|
8
|
+
* rendered — an app that uses six icons never touches the other seventy-two.
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { ICON_MARKUP } from './registry.generated.js';
|
|
12
|
+
/** `<path d="..." />` etc. -> React elements. Parsed once per icon, then cached. */
|
|
13
|
+
const parsed = new Map();
|
|
14
|
+
const SELF_CLOSING = /<([a-z]+)\s+([^>]*?)\/>/g;
|
|
15
|
+
const ATTR = /([a-z-]+)="([^"]*)"/g;
|
|
16
|
+
/** SVG presentation attributes we emit, mapped to their React prop names. */
|
|
17
|
+
const PROP_NAMES = {
|
|
18
|
+
d: 'd',
|
|
19
|
+
cx: 'cx',
|
|
20
|
+
cy: 'cy',
|
|
21
|
+
r: 'r',
|
|
22
|
+
x: 'x',
|
|
23
|
+
y: 'y',
|
|
24
|
+
x1: 'x1',
|
|
25
|
+
x2: 'x2',
|
|
26
|
+
y1: 'y1',
|
|
27
|
+
y2: 'y2',
|
|
28
|
+
rx: 'rx',
|
|
29
|
+
ry: 'ry',
|
|
30
|
+
width: 'width',
|
|
31
|
+
height: 'height',
|
|
32
|
+
points: 'points',
|
|
33
|
+
transform: 'transform',
|
|
34
|
+
fill: 'fill'
|
|
35
|
+
};
|
|
36
|
+
function parseMarkup(name) {
|
|
37
|
+
const cached = parsed.get(name);
|
|
38
|
+
if (cached)
|
|
39
|
+
return cached;
|
|
40
|
+
const nodes = [];
|
|
41
|
+
const markup = ICON_MARKUP[name];
|
|
42
|
+
let match;
|
|
43
|
+
SELF_CLOSING.lastIndex = 0;
|
|
44
|
+
let i = 0;
|
|
45
|
+
while ((match = SELF_CLOSING.exec(markup)) !== null) {
|
|
46
|
+
const [, tag, attrString] = match;
|
|
47
|
+
const props = { key: String(i++) };
|
|
48
|
+
let attr;
|
|
49
|
+
ATTR.lastIndex = 0;
|
|
50
|
+
while ((attr = ATTR.exec(attrString)) !== null) {
|
|
51
|
+
const prop = PROP_NAMES[attr[1]];
|
|
52
|
+
if (prop)
|
|
53
|
+
props[prop] = attr[2];
|
|
54
|
+
}
|
|
55
|
+
nodes.push(React.createElement(tag, props));
|
|
56
|
+
}
|
|
57
|
+
parsed.set(name, nodes);
|
|
58
|
+
return nodes;
|
|
59
|
+
}
|
|
60
|
+
export const Icon = ({ name, size = '1em', family = 'warning', variant = 'bare', round = false, title, className, strokeWidth = 2 }) => {
|
|
61
|
+
if (ICON_MARKUP[name] === undefined) {
|
|
62
|
+
throw new Error(`<Icon>: "${String(name)}" is not in the icon registry. ` +
|
|
63
|
+
`Add it to themes/src/icons/sources.json and run \`pnpm run generate:icons\`.`);
|
|
64
|
+
}
|
|
65
|
+
const dim = typeof size === 'number' ? `${size}px` : size;
|
|
66
|
+
const a11y = title
|
|
67
|
+
? { role: 'img', 'aria-label': title }
|
|
68
|
+
: { 'aria-hidden': true, focusable: 'false' };
|
|
69
|
+
// `bare` and `accent` render the <svg> as the outermost element, so the caller's
|
|
70
|
+
// className belongs on it. `tint`/`filled` wrap it in a tile, and the className
|
|
71
|
+
// goes there instead — in both cases it lands on the element you get back.
|
|
72
|
+
const isTile = variant === 'tint' || variant === 'filled';
|
|
73
|
+
const svgClass = [
|
|
74
|
+
'hdk-icon',
|
|
75
|
+
variant === 'accent' ? `hdk-icon--${family}` : '',
|
|
76
|
+
!isTile && className ? className : ''
|
|
77
|
+
]
|
|
78
|
+
.filter(Boolean)
|
|
79
|
+
.join(' ');
|
|
80
|
+
const svg = (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: svgClass, width: dim, height: dim, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: strokeWidth, strokeLinecap: "round", strokeLinejoin: "round", ...a11y },
|
|
81
|
+
title ? React.createElement("title", null, title) : null,
|
|
82
|
+
parseMarkup(name)));
|
|
83
|
+
if (!isTile)
|
|
84
|
+
return svg;
|
|
85
|
+
const tile = `hdk-icon-tile hdk-icon-tile--${variant} hdk-icon-tile--${family}` +
|
|
86
|
+
(round ? ' hdk-icon-tile--round' : '') +
|
|
87
|
+
(className ? ` ${className}` : '');
|
|
88
|
+
return React.createElement("span", { className: tile }, svg);
|
|
89
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { IconName } from './registry.generated';
|
|
2
|
+
export { ICON_MARKUP, ICON_NAMES, ICON_SOURCE_SLUGS, LUCIDE_VERSION } from './registry.generated';
|
|
3
|
+
export type { IconName } from './registry.generated';
|
|
4
|
+
/** The five accent families. Same set as the colour tokens — no icon-only families. */
|
|
5
|
+
export declare const ICON_FAMILIES: readonly ["primary", "success", "warning", "danger", "neutral"];
|
|
6
|
+
export type IconFamily = (typeof ICON_FAMILIES)[number];
|
|
7
|
+
/**
|
|
8
|
+
* How the icon is coloured. Every option resolves through theme tokens — there is
|
|
9
|
+
* no way to pass a raw colour — but WHICH treatment to use is the consumer's call.
|
|
10
|
+
*
|
|
11
|
+
* - `bare` — glyph inherits `currentColor`. The default. Use it inside a button
|
|
12
|
+
* or beside a label and the icon matches that text automatically, in
|
|
13
|
+
* every theme, with no contrast obligation of its own.
|
|
14
|
+
* - `accent` — glyph painted `--color-<family>`. For when the icon is its own
|
|
15
|
+
* element and should NOT match the surrounding text. You own the
|
|
16
|
+
* contrast: a bare accent glyph clears 3:1 on a card/page surface in
|
|
17
|
+
* 28 of 36 theme/surface combinations for `warning`, so this is right
|
|
18
|
+
* when you know the surface and wrong as a blanket default.
|
|
19
|
+
* - `tint` — glyph in a `--color-<f>-bg` tile with `--color-on-<f>-bg` ink.
|
|
20
|
+
* - `filled` — glyph in a `--color-<f>` tile with `--color-on-<f>` ink.
|
|
21
|
+
*
|
|
22
|
+
* `tint` and `filled` clear 3:1 in all 18 themes for all five families.
|
|
23
|
+
*/
|
|
24
|
+
export type IconVariant = 'bare' | 'accent' | 'tint' | 'filled';
|
|
25
|
+
export declare function isIconName(value: unknown): value is IconName;
|
|
26
|
+
export interface IconSvgOptions {
|
|
27
|
+
/** CSS length. Defaults to `1em` so the glyph scales with its surrounding text. */
|
|
28
|
+
size?: string | number;
|
|
29
|
+
/** Extra classes appended after `hdk-icon`. */
|
|
30
|
+
className?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Paint the glyph with `--color-<family>` instead of inheriting `currentColor`.
|
|
33
|
+
* Adds `hdk-icon--<family>`; requires icons.css. Omit to inherit.
|
|
34
|
+
*/
|
|
35
|
+
family?: IconFamily;
|
|
36
|
+
/**
|
|
37
|
+
* Accessible name. Omit for decorative icons (the default) — those are rendered
|
|
38
|
+
* `aria-hidden` so a screen reader does not announce a glyph that repeats an
|
|
39
|
+
* adjacent label. Supply it only when the icon is the sole carrier of meaning.
|
|
40
|
+
*/
|
|
41
|
+
title?: string;
|
|
42
|
+
/** Stroke width in the 24x24 viewBox. Lucide's default is 2. */
|
|
43
|
+
strokeWidth?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A complete, standalone `<svg>` string for one icon.
|
|
47
|
+
*
|
|
48
|
+
* Astro/Qwik/plain HTML, no client JS:
|
|
49
|
+
* <span set:html={getIconSvg('popcorn')} />
|
|
50
|
+
* <span class="hdk-icon-tile hdk-icon-tile--tint hdk-icon-tile--warning"
|
|
51
|
+
* set:html={getIconSvg('popcorn')} />
|
|
52
|
+
*/
|
|
53
|
+
export declare function getIconSvg(name: IconName, options?: IconSvgOptions): string;
|
|
54
|
+
/** Class list for an accent tile, for the framework-free path. */
|
|
55
|
+
export declare function getIconTileClass(family?: IconFamily, variant?: Exclude<IconVariant, 'bare'>, round?: boolean): string;
|
|
56
|
+
export { EMOJI_TO_ICON } from './registry.generated';
|
|
57
|
+
/**
|
|
58
|
+
* The registry name a raw emoji should become, or undefined if it has no
|
|
59
|
+
* canonical answer. `⚙` and `⚙️` resolve identically.
|
|
60
|
+
*/
|
|
61
|
+
export declare function emojiToIconName(emoji: string): IconName | undefined;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The enforced icon set — framework-free half.
|
|
3
|
+
*
|
|
4
|
+
* Every consumer references icons BY NAME from `IconName`. Nobody inlines their own
|
|
5
|
+
* SVG: an icon that is not in the registry does not exist, which is what keeps 16 apps
|
|
6
|
+
* rendering the same pictograph for the same idea. TS consumers get that as a type
|
|
7
|
+
* error; everyone else gets it from `scripts/check-icons.mjs`.
|
|
8
|
+
*
|
|
9
|
+
* This module has no React import on purpose. The frontpage POCs are Astro (one Qwik)
|
|
10
|
+
* and cannot mount a React component just to draw a 16px glyph, so the string path is
|
|
11
|
+
* the primary API and `<Icon>` is a convenience on top of it.
|
|
12
|
+
*/
|
|
13
|
+
import { ICON_MARKUP } from './registry.generated.js';
|
|
14
|
+
export { ICON_MARKUP, ICON_NAMES, ICON_SOURCE_SLUGS, LUCIDE_VERSION } from './registry.generated.js';
|
|
15
|
+
/** The five accent families. Same set as the colour tokens — no icon-only families. */
|
|
16
|
+
export const ICON_FAMILIES = ['primary', 'success', 'warning', 'danger', 'neutral'];
|
|
17
|
+
export function isIconName(value) {
|
|
18
|
+
return typeof value === 'string' && Object.prototype.hasOwnProperty.call(ICON_MARKUP, value);
|
|
19
|
+
}
|
|
20
|
+
const ESCAPES = {
|
|
21
|
+
'&': '&',
|
|
22
|
+
'<': '<',
|
|
23
|
+
'>': '>',
|
|
24
|
+
'"': '"',
|
|
25
|
+
"'": '''
|
|
26
|
+
};
|
|
27
|
+
/** Escape a caller-supplied string before it goes into the markup we return. */
|
|
28
|
+
function escapeHtml(value) {
|
|
29
|
+
return value.replace(/[&<>"']/g, c => ESCAPES[c]);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A complete, standalone `<svg>` string for one icon.
|
|
33
|
+
*
|
|
34
|
+
* Astro/Qwik/plain HTML, no client JS:
|
|
35
|
+
* <span set:html={getIconSvg('popcorn')} />
|
|
36
|
+
* <span class="hdk-icon-tile hdk-icon-tile--tint hdk-icon-tile--warning"
|
|
37
|
+
* set:html={getIconSvg('popcorn')} />
|
|
38
|
+
*/
|
|
39
|
+
export function getIconSvg(name, options = {}) {
|
|
40
|
+
const markup = ICON_MARKUP[name];
|
|
41
|
+
if (markup === undefined) {
|
|
42
|
+
// Loud rather than silent: a blank space where an icon should be is the failure
|
|
43
|
+
// mode that ships to production unnoticed.
|
|
44
|
+
throw new Error(`getIconSvg: "${String(name)}" is not in the icon registry. ` +
|
|
45
|
+
`Add it to themes/src/icons/sources.json and run \`pnpm run generate:icons\`.`);
|
|
46
|
+
}
|
|
47
|
+
const { size = '1em', className, title, strokeWidth = 2, family } = options;
|
|
48
|
+
const dim = typeof size === 'number' ? `${size}px` : size;
|
|
49
|
+
const cls = ['hdk-icon', family ? `hdk-icon--${family}` : '', className ?? '']
|
|
50
|
+
.filter(Boolean)
|
|
51
|
+
.join(' ');
|
|
52
|
+
const label = title
|
|
53
|
+
? `role="img" aria-label="${escapeHtml(title)}"`
|
|
54
|
+
: 'aria-hidden="true" focusable="false"';
|
|
55
|
+
return (`<svg xmlns="http://www.w3.org/2000/svg" class="${escapeHtml(cls)}" ` +
|
|
56
|
+
`width="${escapeHtml(dim)}" height="${escapeHtml(dim)}" viewBox="0 0 24 24" ` +
|
|
57
|
+
`fill="none" stroke="currentColor" stroke-width="${strokeWidth}" ` +
|
|
58
|
+
`stroke-linecap="round" stroke-linejoin="round" ${label}>` +
|
|
59
|
+
(title ? `<title>${escapeHtml(title)}</title>` : '') +
|
|
60
|
+
markup +
|
|
61
|
+
'</svg>');
|
|
62
|
+
}
|
|
63
|
+
/** Class list for an accent tile, for the framework-free path. */
|
|
64
|
+
export function getIconTileClass(family = 'warning', variant = 'tint', round = false) {
|
|
65
|
+
return (`hdk-icon-tile hdk-icon-tile--${variant} hdk-icon-tile--${family}` +
|
|
66
|
+
(round ? ' hdk-icon-tile--round' : ''));
|
|
67
|
+
}
|
|
68
|
+
// Canonical emoji -> icon name. Generated into registry.generated.ts from
|
|
69
|
+
// emoji-map.json, so nothing loads JSON at runtime and there is one source.
|
|
70
|
+
import { EMOJI_TO_ICON } from './registry.generated.js';
|
|
71
|
+
export { EMOJI_TO_ICON } from './registry.generated.js';
|
|
72
|
+
/** Variation selectors and skin tones are presentation, not identity. */
|
|
73
|
+
function stripPresentation(s) {
|
|
74
|
+
return [...s]
|
|
75
|
+
.filter(c => {
|
|
76
|
+
const p = c.codePointAt(0) ?? 0;
|
|
77
|
+
return p !== 0xfe0f && p !== 0xfe0e && !(p >= 0x1f3fb && p <= 0x1f3ff);
|
|
78
|
+
})
|
|
79
|
+
.join('');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The registry name a raw emoji should become, or undefined if it has no
|
|
83
|
+
* canonical answer. `⚙` and `⚙️` resolve identically.
|
|
84
|
+
*/
|
|
85
|
+
export function emojiToIconName(emoji) {
|
|
86
|
+
return EMOJI_TO_ICON[stripPresentation(emoji)] ?? EMOJI_TO_ICON[emoji];
|
|
87
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED FILE — do not edit by hand.
|
|
3
|
+
*
|
|
4
|
+
* Source: src/icons/sources.json + lucide-static@1.28.0 (ISC, see LICENSE-lucide).
|
|
5
|
+
* Regenerate with `pnpm run generate:icons`; `pnpm run check:icons` fails on drift.
|
|
6
|
+
*
|
|
7
|
+
* Values are the INNER markup of each glyph. The wrapping <svg> element and its
|
|
8
|
+
* attributes come from getIconSvg()/<Icon> so every icon shares one set.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ICON_MARKUP: {
|
|
11
|
+
readonly activity: "<path d=\"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\" />";
|
|
12
|
+
readonly antenna: "<path d=\"M4 10a7.31 7.31 0 0 0 10 10Z\" /><path d=\"m9 15 3-3\" /><path d=\"M17 13a6 6 0 0 0-6-6\" /><path d=\"M21 13A10 10 0 0 0 11 3\" />";
|
|
13
|
+
readonly 'arrow-down': "<path d=\"M12 5v14\" /><path d=\"m19 12-7 7-7-7\" />";
|
|
14
|
+
readonly 'arrow-left': "<path d=\"m12 19-7-7 7-7\" /><path d=\"M19 12H5\" />";
|
|
15
|
+
readonly 'arrow-right': "<path d=\"M5 12h14\" /><path d=\"m12 5 7 7-7 7\" />";
|
|
16
|
+
readonly 'arrow-up': "<path d=\"m5 12 7-7 7 7\" /><path d=\"M12 19V5\" />";
|
|
17
|
+
readonly 'arrow-up-right': "<path d=\"M7 7h10v10\" /><path d=\"M7 17 17 7\" />";
|
|
18
|
+
readonly 'arrows-horizontal': "<path d=\"M8 3 4 7l4 4\" /><path d=\"M4 7h16\" /><path d=\"m16 21 4-4-4-4\" /><path d=\"M20 17H4\" />";
|
|
19
|
+
readonly ban: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M4.929 4.929 19.07 19.071\" />";
|
|
20
|
+
readonly bell: "<path d=\"M10.268 21a2 2 0 0 0 3.464 0\" /><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />";
|
|
21
|
+
readonly bone: "<path d=\"M17 10c.7-.7 1.69 0 2.5 0a2.5 2.5 0 1 0 0-5 .5.5 0 0 1-.5-.5 2.5 2.5 0 1 0-5 0c0 .81.7 1.8 0 2.5l-7 7c-.7.7-1.69 0-2.5 0a2.5 2.5 0 0 0 0 5c.28 0 .5.22.5.5a2.5 2.5 0 1 0 5 0c0-.81-.7-1.8 0-2.5Z\" />";
|
|
22
|
+
readonly book: "<path d=\"M12 5v16\" /><path d=\"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z\" />";
|
|
23
|
+
readonly bookmark: "<path d=\"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z\" />";
|
|
24
|
+
readonly 'branch-up': "<path d=\"m10 9 5-5 5 5\" /><path d=\"M4 20h7a4 4 0 0 0 4-4V4\" />";
|
|
25
|
+
readonly briefcase: "<path d=\"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\" /><rect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\" />";
|
|
26
|
+
readonly broom: "<path d=\"m16 22-1-4\" /><path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" /><path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" /><path d=\"m8 22 1-4\" />";
|
|
27
|
+
readonly calendar: "<path d=\"M8 2v3\" /><path d=\"M16 2v3\" /><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><path d=\"M3 9h18\" />";
|
|
28
|
+
readonly camera: "<path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" /><circle cx=\"12\" cy=\"13\" r=\"3\" />";
|
|
29
|
+
readonly cat: "<path d=\"M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z\" /><path d=\"M8 14v.5\" /><path d=\"M16 14v.5\" /><path d=\"M11.25 16.25h1.5L12 17l-.75-.75Z\" />";
|
|
30
|
+
readonly chart: "<path d=\"M3 3v16a2 2 0 0 0 2 2h16\" /><path d=\"M18 17V9\" /><path d=\"M13 17V5\" /><path d=\"M8 17v-3\" />";
|
|
31
|
+
readonly chat: "<path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\" />";
|
|
32
|
+
readonly check: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m9 12 2 2 4-4\" />";
|
|
33
|
+
readonly 'chevron-down': "<path d=\"m6 9 6 6 6-6\" />";
|
|
34
|
+
readonly 'chevron-left': "<path d=\"m15 18-6-6 6-6\" />";
|
|
35
|
+
readonly 'chevron-right': "<path d=\"m9 18 6-6-6-6\" />";
|
|
36
|
+
readonly 'chevron-up': "<path d=\"m18 15-6-6-6 6\" />";
|
|
37
|
+
readonly circle: "<circle cx=\"12\" cy=\"12\" r=\"10\" />";
|
|
38
|
+
readonly 'circle-dot': "<circle cx=\"12\" cy=\"12\" r=\"10\" /><circle cx=\"12\" cy=\"12\" r=\"1\" />";
|
|
39
|
+
readonly clapper: "<path d=\"m12.296 3.464 3.02 3.956\" /><path d=\"M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3z\" /><path d=\"M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" /><path d=\"m6.18 5.276 3.1 3.899\" />";
|
|
40
|
+
readonly clipboard: "<rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" /><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />";
|
|
41
|
+
readonly clock: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 6v6l4 2\" />";
|
|
42
|
+
readonly close: "<path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />";
|
|
43
|
+
readonly code: "<path d=\"m16 18 6-6-6-6\" /><path d=\"m8 6-6 6 6 6\" />";
|
|
44
|
+
readonly compass: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z\" />";
|
|
45
|
+
readonly copy: "<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" /><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />";
|
|
46
|
+
readonly crop: "<path d=\"M6 2v14a2 2 0 0 0 2 2h14\" /><path d=\"M18 22V8a2 2 0 0 0-2-2H2\" />";
|
|
47
|
+
readonly crown: "<path d=\"M11.562 3.266a.5.5 0 0 1 .876 0L15.39 8.87a1 1 0 0 0 1.516.294L21.183 5.5a.5.5 0 0 1 .798.519l-2.834 10.246a1 1 0 0 1-.956.734H5.81a1 1 0 0 1-.957-.734L2.02 6.02a.5.5 0 0 1 .798-.519l4.276 3.664a1 1 0 0 0 1.516-.294z\" /><path d=\"M5 21h14\" />";
|
|
48
|
+
readonly database: "<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" /><path d=\"M3 5V19A9 3 0 0 0 21 19V5\" /><path d=\"M3 12A9 3 0 0 0 21 12\" />";
|
|
49
|
+
readonly desktop: "<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\" /><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\" /><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\" />";
|
|
50
|
+
readonly document: "<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\" /><path d=\"M14 2v5a1 1 0 0 0 1 1h5\" /><path d=\"M10 9H8\" /><path d=\"M16 13H8\" /><path d=\"M16 17H8\" />";
|
|
51
|
+
readonly download: "<path d=\"M12 15V3\" /><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" /><path d=\"m7 10 5 5 5-5\" />";
|
|
52
|
+
readonly edit: "<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" /><path d=\"m15 5 4 4\" />";
|
|
53
|
+
readonly error: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m15 9-6 6\" /><path d=\"m9 9 6 6\" />";
|
|
54
|
+
readonly external: "<path d=\"M15 3h6v6\" /><path d=\"M10 14 21 3\" /><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />";
|
|
55
|
+
readonly eye: "<path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" /><circle cx=\"12\" cy=\"12\" r=\"3\" />";
|
|
56
|
+
readonly film: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M7 3v18\" /><path d=\"M3 7.5h4\" /><path d=\"M3 12h18\" /><path d=\"M3 16.5h4\" /><path d=\"M17 3v18\" /><path d=\"M17 7.5h4\" /><path d=\"M17 16.5h4\" />";
|
|
57
|
+
readonly filter: "<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\" />";
|
|
58
|
+
readonly fire: "<path d=\"M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4\" />";
|
|
59
|
+
readonly flag: "<path d=\"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\" />";
|
|
60
|
+
readonly flask: "<path d=\"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2\" /><path d=\"M6.453 15h11.094\" /><path d=\"M8.5 2h7\" />";
|
|
61
|
+
readonly folder: "<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\" />";
|
|
62
|
+
readonly gamepad: "<line x1=\"6\" x2=\"10\" y1=\"11\" y2=\"11\" /><line x1=\"8\" x2=\"8\" y1=\"9\" y2=\"13\" /><line x1=\"15\" x2=\"15.01\" y1=\"12\" y2=\"12\" /><line x1=\"18\" x2=\"18.01\" y1=\"10\" y2=\"10\" /><path d=\"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z\" />";
|
|
63
|
+
readonly gear: "<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\" /><circle cx=\"12\" cy=\"12\" r=\"3\" />";
|
|
64
|
+
readonly globe: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" /><path d=\"M2 12h20\" />";
|
|
65
|
+
readonly grid: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M3 9h18\" /><path d=\"M3 15h18\" /><path d=\"M9 3v18\" /><path d=\"M15 3v18\" />";
|
|
66
|
+
readonly handshake: "<path d=\"m11 17 2 2a1 1 0 1 0 3-3\" /><path d=\"m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4\" /><path d=\"m21 3 1 11h-2\" /><path d=\"M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3\" /><path d=\"M3 4h8\" />";
|
|
67
|
+
readonly heart: "<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\" />";
|
|
68
|
+
readonly 'helping-hand': "<path d=\"M11 12h2a2 2 0 1 0 0-4h-3c-.6 0-1.1.2-1.4.6L3 14\" /><path d=\"m7 18 1.6-1.4c.3-.4.8-.6 1.4-.6h4c1.1 0 2.1-.4 2.8-1.2l4.6-4.4a2 2 0 0 0-2.75-2.91l-4.2 3.9\" /><path d=\"m2 13 6 6\" />";
|
|
69
|
+
readonly home: "<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" /><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />";
|
|
70
|
+
readonly hospital: "<path d=\"M12 7v4\" /><path d=\"M14 21v-3a2 2 0 0 0-4 0v3\" /><path d=\"M14 9h-4\" /><path d=\"M18 11h2a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2h2\" /><path d=\"M18 21V5a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16\" />";
|
|
71
|
+
readonly hourglass: "<path d=\"M5 22h14\" /><path d=\"M5 2h14\" /><path d=\"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22\" /><path d=\"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2\" />";
|
|
72
|
+
readonly image: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" /><circle cx=\"9\" cy=\"9\" r=\"2\" /><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />";
|
|
73
|
+
readonly inbox: "<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\" /><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />";
|
|
74
|
+
readonly info: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 16v-4\" /><path d=\"M12 8h.01\" />";
|
|
75
|
+
readonly key: "<path d=\"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4\" /><path d=\"m21 2-9.6 9.6\" /><circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\" />";
|
|
76
|
+
readonly layers: "<path d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\" /><path d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\" /><path d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\" />";
|
|
77
|
+
readonly link: "<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" /><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />";
|
|
78
|
+
readonly list: "<path d=\"M3 5h.01\" /><path d=\"M3 12h.01\" /><path d=\"M3 19h.01\" /><path d=\"M8 5h13\" /><path d=\"M8 12h13\" /><path d=\"M8 19h13\" />";
|
|
79
|
+
readonly lock: "<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" /><path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />";
|
|
80
|
+
readonly magnifier: "<path d=\"m21 21-4.34-4.34\" /><circle cx=\"11\" cy=\"11\" r=\"8\" />";
|
|
81
|
+
readonly mail: "<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\" /><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />";
|
|
82
|
+
readonly map: "<path d=\"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z\" /><path d=\"M15 5.764v15\" /><path d=\"M9 3.236v15\" />";
|
|
83
|
+
readonly masks: "<path d=\"M10 11h.01\" /><path d=\"M14 6h.01\" /><path d=\"M18 6h.01\" /><path d=\"M6.5 13.1h.01\" /><path d=\"M22 5c0 9-4 12-6 12s-6-3-6-12c0-2 2-3 6-3s6 1 6 3\" /><path d=\"M17.4 9.9c-.8.8-2 .8-2.8 0\" /><path d=\"M10.1 7.1C9 7.2 7.7 7.7 6 8.6c-3.5 2-4.7 3.9-3.7 5.6 4.5 7.8 9.5 8.4 11.2 7.4.9-.5 1.9-2.1 1.9-4.7\" /><path d=\"M9.1 16.5c.3-1.1 1.4-1.7 2.4-1.4\" />";
|
|
84
|
+
readonly minus: "<path d=\"M5 12h14\" />";
|
|
85
|
+
readonly moon: "<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\" />";
|
|
86
|
+
readonly music: "<path d=\"M9 18V5l12-2v13\" /><circle cx=\"6\" cy=\"18\" r=\"3\" /><circle cx=\"18\" cy=\"16\" r=\"3\" />";
|
|
87
|
+
readonly next: "<path d=\"M21 4v16\" /><path d=\"M6.029 4.285A2 2 0 0 0 3 6v12a2 2 0 0 0 3.029 1.715l9.997-5.998a2 2 0 0 0 .003-3.432z\" />";
|
|
88
|
+
readonly note: "<path d=\"M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4\" /><path d=\"M2 6h4\" /><path d=\"M2 10h4\" /><path d=\"M2 14h4\" /><path d=\"M2 18h4\" /><path d=\"M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z\" />";
|
|
89
|
+
readonly package: "<path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\" /><path d=\"M12 22V12\" /><polyline points=\"3.29 7 12 12 20.71 7\" /><path d=\"m7.5 4.27 9 5.15\" />";
|
|
90
|
+
readonly palette: "<path d=\"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z\" /><circle cx=\"13.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\" /><circle cx=\"17.5\" cy=\"10.5\" r=\".5\" fill=\"currentColor\" /><circle cx=\"6.5\" cy=\"12.5\" r=\".5\" fill=\"currentColor\" /><circle cx=\"8.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />";
|
|
91
|
+
readonly 'panel-left': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M9 3v18\" />";
|
|
92
|
+
readonly 'panel-right': "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" /><path d=\"M15 3v18\" />";
|
|
93
|
+
readonly party: "<path d=\"M5.8 11.3 2 22l10.7-3.79\" /><path d=\"M4 3h.01\" /><path d=\"M22 8h.01\" /><path d=\"M15 2h.01\" /><path d=\"M22 20h.01\" /><path d=\"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10\" /><path d=\"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11c-.11.7-.72 1.22-1.43 1.22H17\" /><path d=\"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98C9.52 4.9 9 5.52 9 6.23V7\" /><path d=\"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z\" />";
|
|
94
|
+
readonly paste: "<path d=\"M11 14h10\" /><path d=\"M16 4h2a2 2 0 0 1 2 2v1.344\" /><path d=\"m17 18 4-4-4-4\" /><path d=\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113\" /><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" />";
|
|
95
|
+
readonly pause: "<rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" /><rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />";
|
|
96
|
+
readonly pin: "<path d=\"M12 17v5\" /><path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\" />";
|
|
97
|
+
readonly play: "<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />";
|
|
98
|
+
readonly plus: "<path d=\"M5 12h14\" /><path d=\"M12 5v14\" />";
|
|
99
|
+
readonly popcorn: "<path d=\"M18 8a2 2 0 0 0 0-4 2 2 0 0 0-4 0 2 2 0 0 0-4 0 2 2 0 0 0-4 0 2 2 0 0 0 0 4\" /><path d=\"M10 22 9 8\" /><path d=\"m14 22 1-14\" /><path d=\"M20 8c.5 0 .9.4.8 1l-2.6 12c-.1.5-.7 1-1.2 1H7c-.6 0-1.1-.4-1.2-1L3.2 9c-.1-.6.3-1 .8-1Z\" />";
|
|
100
|
+
readonly previous: "<path d=\"M17.971 4.285A2 2 0 0 1 21 6v12a2 2 0 0 1-3.029 1.715l-9.997-5.998a2 2 0 0 1-.003-3.432z\" /><path d=\"M3 20V4\" />";
|
|
101
|
+
readonly printer: "<path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\" /><path d=\"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6\" /><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\" rx=\"1\" />";
|
|
102
|
+
readonly redo: "<path d=\"m15 14 5-5-5-5\" /><path d=\"M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13\" />";
|
|
103
|
+
readonly refresh: "<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" /><path d=\"M21 3v5h-5\" /><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" /><path d=\"M8 16H3v5\" />";
|
|
104
|
+
readonly return: "<path d=\"M20 4v7a4 4 0 0 1-4 4H4\" /><path d=\"m9 10-5 5 5 5\" />";
|
|
105
|
+
readonly robot: "<path d=\"M12 8V4H8\" /><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" /><path d=\"M2 14h2\" /><path d=\"M20 14h2\" /><path d=\"M15 13v2\" /><path d=\"M9 13v2\" />";
|
|
106
|
+
readonly rocket: "<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" /><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\" /><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\" /><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\" />";
|
|
107
|
+
readonly save: "<path d=\"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\" /><path d=\"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7\" /><path d=\"M7 3v4a1 1 0 0 0 1 1h7\" />";
|
|
108
|
+
readonly scissors: "<circle cx=\"6\" cy=\"6\" r=\"3\" /><path d=\"M8.12 8.12 12 12\" /><path d=\"M20 4 8.12 15.88\" /><circle cx=\"6\" cy=\"18\" r=\"3\" /><path d=\"M14.8 14.8 20 20\" />";
|
|
109
|
+
readonly send: "<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" /><path d=\"m21.854 2.147-10.94 10.939\" />";
|
|
110
|
+
readonly shield: "<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />";
|
|
111
|
+
readonly shuffle: "<path d=\"m18 14 4 4-4 4\" /><path d=\"m18 2 4 4-4 4\" /><path d=\"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22\" /><path d=\"M2 6h1.972a4 4 0 0 1 3.6 2.2\" /><path d=\"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45\" />";
|
|
112
|
+
readonly skull: "<path d=\"m12.5 17-.5-1-.5 1h1z\" /><path d=\"M15 22a1 1 0 0 0 1-1v-1a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20v1a1 1 0 0 0 1 1z\" /><circle cx=\"15\" cy=\"12\" r=\"1\" /><circle cx=\"9\" cy=\"12\" r=\"1\" />";
|
|
113
|
+
readonly sleep: "<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\" />";
|
|
114
|
+
readonly sparkles: "<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\" /><path d=\"M20 2v4\" /><path d=\"M22 4h-4\" /><circle cx=\"4\" cy=\"20\" r=\"2\" />";
|
|
115
|
+
readonly star: "<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\" />";
|
|
116
|
+
readonly stop: "<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />";
|
|
117
|
+
readonly sun: "<circle cx=\"12\" cy=\"12\" r=\"4\" /><path d=\"M12 2v2\" /><path d=\"M12 20v2\" /><path d=\"m4.93 4.93 1.41 1.41\" /><path d=\"m17.66 17.66 1.41 1.41\" /><path d=\"M2 12h2\" /><path d=\"M20 12h2\" /><path d=\"m6.34 17.66-1.41 1.41\" /><path d=\"m19.07 4.93-1.41 1.41\" />";
|
|
118
|
+
readonly tag: "<path d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\" /><circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />";
|
|
119
|
+
readonly target: "<circle cx=\"12\" cy=\"12\" r=\"10\" /><circle cx=\"12\" cy=\"12\" r=\"6\" /><circle cx=\"12\" cy=\"12\" r=\"2\" />";
|
|
120
|
+
readonly terminal: "<path d=\"M12 19h8\" /><path d=\"m4 17 6-6-6-6\" />";
|
|
121
|
+
readonly 'thumbs-down': "<path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" /><path d=\"M17 14V2\" />";
|
|
122
|
+
readonly 'thumbs-up': "<path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" /><path d=\"M7 10v12\" />";
|
|
123
|
+
readonly tick: "<path d=\"M20 6 9 17l-5-5\" />";
|
|
124
|
+
readonly toolbox: "<path d=\"M12 12h.01\" /><path d=\"M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2\" /><path d=\"M22 13a18.15 18.15 0 0 1-20 0\" /><rect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\" />";
|
|
125
|
+
readonly trash: "<path d=\"M10 11v6\" /><path d=\"M14 11v6\" /><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" /><path d=\"M3 6h18\" /><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />";
|
|
126
|
+
readonly trophy: "<path d=\"M10 14.66V17a1 1 0 0 1-1 1 2 2 0 0 0-2 2v2\" /><path d=\"M14 14.66V17a1 1 0 0 0 1 1 2 2 0 0 1 2 2v2\" /><path d=\"M17.916 10H19.5A2.5 2.5 0 0 0 22 7.5V5a1 1 0 0 0-1-1h-3\" /><path d=\"M4 22h16\" /><path d=\"M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z\" /><path d=\"M6.084 10H4.5A2.5 2.5 0 0 1 2 7.5V5a1 1 0 0 1 1-1h3\" />";
|
|
127
|
+
readonly undo: "<path d=\"M9 14 4 9l5-5\" /><path d=\"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\" />";
|
|
128
|
+
readonly upload: "<path d=\"M12 3v12\" /><path d=\"m17 8-5-5-5 5\" /><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />";
|
|
129
|
+
readonly user: "<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" /><circle cx=\"12\" cy=\"7\" r=\"4\" />";
|
|
130
|
+
readonly users: "<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" /><path d=\"M16 3.128a4 4 0 0 1 0 7.744\" /><path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" /><circle cx=\"9\" cy=\"7\" r=\"4\" />";
|
|
131
|
+
readonly videotape: "<rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" /><path d=\"M2 8h20\" /><circle cx=\"8\" cy=\"14\" r=\"2\" /><path d=\"M8 12h8\" /><circle cx=\"16\" cy=\"14\" r=\"2\" />";
|
|
132
|
+
readonly 'volume-high': "<path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" /><path d=\"M16 9a5 5 0 0 1 0 6\" /><path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\" />";
|
|
133
|
+
readonly 'volume-low': "<path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" /><path d=\"M16 9a5 5 0 0 1 0 6\" />";
|
|
134
|
+
readonly 'volume-mute': "<path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\" /><line x1=\"22\" x2=\"16\" y1=\"9\" y2=\"15\" /><line x1=\"16\" x2=\"22\" y1=\"9\" y2=\"15\" />";
|
|
135
|
+
readonly wand: "<path d=\"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72\" /><path d=\"m14 7 3 3\" /><path d=\"M5 6v4\" /><path d=\"M19 14v4\" /><path d=\"M10 2v2\" /><path d=\"M7 8H3\" /><path d=\"M21 16h-4\" /><path d=\"M11 3H9\" />";
|
|
136
|
+
readonly warning: "<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" /><path d=\"M12 9v4\" /><path d=\"M12 17h.01\" />";
|
|
137
|
+
readonly wave: "<path d=\"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2\" /><path d=\"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2\" /><path d=\"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8\" /><path d=\"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\" />";
|
|
138
|
+
readonly wrench: "<path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\" />";
|
|
139
|
+
readonly zap: "<path d=\"M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z\" />";
|
|
140
|
+
};
|
|
141
|
+
/** Every icon name in the enforced set. An icon outside this union does not exist. */
|
|
142
|
+
export type IconName = keyof typeof ICON_MARKUP;
|
|
143
|
+
export declare const ICON_NAMES: IconName[];
|
|
144
|
+
/** The lucide slug each glyph was vendored from — provenance for regeneration. */
|
|
145
|
+
export declare const ICON_SOURCE_SLUGS: Record<IconName, string>;
|
|
146
|
+
export declare const LUCIDE_VERSION = "1.28.0";
|
|
147
|
+
/**
|
|
148
|
+
* Canonical raw-emoji -> icon name. Source: src/icons/emoji-map.json.
|
|
149
|
+
* Keys are stored exactly as written there; look them up through
|
|
150
|
+
* emojiToIconName(), which strips variation selectors and skin tones first.
|
|
151
|
+
*/
|
|
152
|
+
export declare const EMOJI_TO_ICON: Record<string, IconName>;
|
|
153
|
+
/**
|
|
154
|
+
* Emoji whose EMOJI_TO_ICON entry is only right in one context, and the rule for
|
|
155
|
+
* each. Source: the `$ambiguous` block in src/icons/emoji-map.json. check-icons
|
|
156
|
+
* prints these beside its suggestion; codemod-icons refuses to rewrite them.
|
|
157
|
+
*/
|
|
158
|
+
export declare const AMBIGUOUS_EMOJI: Record<string, string>;
|