@vmz/ui-icons 0.3.11 → 0.3.13
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 +22 -3
- package/dist/icons/action.d.ts +7 -0
- package/dist/icons/action.js +203 -0
- package/dist/icons/brand.d.ts +7 -0
- package/dist/icons/brand.js +11 -0
- package/dist/icons/commerce.d.ts +7 -0
- package/dist/icons/commerce.js +36 -0
- package/dist/icons/data.d.ts +3 -0
- package/dist/icons/data.js +23 -0
- package/dist/icons/develop.d.ts +3 -0
- package/dist/icons/develop.js +25 -0
- package/dist/icons/device.d.ts +3 -0
- package/dist/icons/device.js +46 -0
- package/dist/icons/editor.d.ts +6 -0
- package/dist/icons/editor.js +59 -0
- package/dist/icons/feature.d.ts +3 -0
- package/dist/icons/feature.js +15 -0
- package/dist/icons/file.d.ts +6 -0
- package/dist/icons/file.js +36 -0
- package/dist/icons/git.d.ts +3 -0
- package/dist/icons/git.js +52 -0
- package/dist/icons/media.d.ts +3 -0
- package/dist/icons/media.js +89 -0
- package/dist/icons/navigation.d.ts +3 -0
- package/dist/icons/navigation.js +25 -0
- package/dist/icons/social.d.ts +8 -0
- package/dist/icons/social.js +52 -0
- package/dist/icons/status.d.ts +3 -0
- package/dist/icons/status.js +45 -0
- package/dist/icons/tool.d.ts +7 -0
- package/dist/icons/tool.js +102 -0
- package/dist/registry.d.ts +4 -0
- package/dist/registry.js +35 -5
- package/package.json +2 -2
- package/src/Icon.vmz +4 -4
- package/src/icons/action.ts +205 -0
- package/src/icons/brand.ts +13 -0
- package/src/icons/commerce.ts +38 -0
- package/src/icons/data.ts +25 -0
- package/src/icons/develop.ts +27 -0
- package/src/icons/device.ts +48 -0
- package/src/icons/editor.ts +61 -0
- package/src/icons/feature.ts +17 -0
- package/src/icons/file.ts +38 -0
- package/src/icons/git.ts +54 -0
- package/src/icons/media.ts +91 -0
- package/src/icons/navigation.ts +27 -0
- package/src/icons/social.ts +54 -0
- package/src/icons/status.ts +47 -0
- package/src/icons/tool.ts +104 -0
- package/src/registry.ts +35 -6
- package/dist/icons-stroke.d.ts +0 -3
- package/dist/icons-stroke.js +0 -258
- package/dist/icons-text-badge.d.ts +0 -3
- package/dist/icons-text-badge.js +0 -15
- package/src/icons-stroke.ts +0 -260
- package/src/icons-text-badge.ts +0 -17
package/README.md
CHANGED
|
@@ -12,7 +12,24 @@ semantic name → registry mark → <Icon name="tool.base64" />
|
|
|
12
12
|
- Closed thin: semantic `name`, built-in registry, decorative vs labelled a11y, size density.
|
|
13
13
|
- Still open: multi-surface path sets, locale-aware marks, icon-only Button integration depth.
|
|
14
14
|
|
|
15
|
-
Registry kinds: `stroke` (outlined UI chrome and tools), `text-badge` (proprietary converter names such as `tool.base64` → `B64`). `text-badge` is the documented exception to the own-SVG rule: the mark is a real text label rendered as content in a bounded chip, not a font glyph or emoji standing in for an unknown silhouette. `feature.ssr` is intentionally absent — use title copy instead of an icon.
|
|
15
|
+
Registry kinds: `stroke` (outlined UI chrome and tools), `fill` (brand and social silhouettes), `text-badge` (proprietary converter names such as `tool.base64` → `B64`). `text-badge` is the documented exception to the own-SVG rule: the mark is a real text label rendered as content in a bounded chip, not a font glyph or emoji standing in for an unknown silhouette. `feature.ssr` is intentionally absent — use title copy instead of an icon.
|
|
16
|
+
|
|
17
|
+
Categories live one module per file under `src/icons/`: `action`, `navigation` (key prefix `nav`), `status`, `feature`, `tool`, `file`, `media`, `editor`, `data`, `commerce`, `device`, `develop`, `git`, `social`, `brand`. `src/registry.ts` is the only aggregation point and re-exports every module; adding a mark means editing exactly one category module, never two tables. Near-duplicate semantics merge into one outline instead of shipping look-alikes: playback speed reuses `tool.speed`, restart reuses `action.refresh`, desktop reuses `action.monitor`, globe reuses `nav.language`, export/import reuse `action.upload` / `action.download`, and toast states reuse the `status.*` set.
|
|
18
|
+
|
|
19
|
+
Brand and social marks (`social.*`, `brand.*`) are silhouette language, so they use `fill` with the official geometry published by [Simple Icons](https://simpleicons.org) (CC0-1.0). Trademarks remain the property of their respective owners. Do not redraw brand marks by hand or import path data from sources without a clear license.
|
|
20
|
+
|
|
21
|
+
Visual rules (enforced by the conformance gate):
|
|
22
|
+
|
|
23
|
+
- 24×24 viewBox; the optical box is 16 units wide (4–20), centerline geometry stays inside 3–21.
|
|
24
|
+
- One `DEFAULT_STROKE_WIDTH` (1.75) for every outlined mark; per-icon `strokeWidth` overrides are rejected.
|
|
25
|
+
- Round caps and joins; multi-part marks must physically connect (arrowheads join their arc, stems join outlines).
|
|
26
|
+
- Fixed spans: crosses 6–18, chevrons 6–18 × 9–15, plus/minus 5–19, checks 5–19 × 7–17, mean mark overbar 6–18 over a cross 7.5–16.5 × 10–19.
|
|
27
|
+
- Filled dots use `r=1.5` so they survive the 16px step.
|
|
28
|
+
- Negation and decorative slashes run lower-left to upper-right (`status.offline`, `action.eye-off`); a symmetric X is a cross, not a slash. The gate rejects lone upper-left to lower-right diagonals.
|
|
29
|
+
- Acute corners below 60° (triangles, play marks, compass needles) are softened with a quadratic round in the path itself; corners at 90° or wider rely on the round stroke join.
|
|
30
|
+
- Parallel strokes keep at least ≈2.25 units of clear space at 16px; three-layer wound shapes (paperclip) shed a layer first, then widen the gaps. Intrinsically dense shapes (QR dot matrix, brand letterforms) are documented exceptions.
|
|
31
|
+
- Optically centered at (12,12); ground-biased metaphors keep the baseline on `y=20`. One silhouette per concept, checked across categories before a new mark lands.
|
|
32
|
+
- 16px is the primary review size, with 20 / 24 / 32 checked on the same contact sheet: a mark that only reads at 64px is not finished.
|
|
16
33
|
|
|
17
34
|
Verify:
|
|
18
35
|
|
|
@@ -20,8 +37,10 @@ Verify:
|
|
|
20
37
|
pnpm verify -- ui-icons
|
|
21
38
|
```
|
|
22
39
|
|
|
23
|
-
Contact sheet (local review):
|
|
40
|
+
Contact sheet (local review) and exact-viewport screenshots:
|
|
24
41
|
|
|
25
42
|
```bash
|
|
26
|
-
node packages/ui/vmz-ui-icons/scripts/contact-sheet.mjs
|
|
43
|
+
node packages/ui/vmz-ui-icons/scripts/contact-sheet.mjs --mode=both --grid
|
|
44
|
+
node packages/ui/vmz-ui-icons/scripts/capture-contact-sheet.mjs contact-sheet.html .cache/icons-1440.png 1440
|
|
45
|
+
node packages/ui/vmz-ui-icons/scripts/capture-contact-sheet.mjs contact-sheet.html .cache/icons-390.png 390
|
|
27
46
|
```
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IconDef } from '../icon-types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Action glyphs (`action.*`) — interactive chrome: search, close, chevrons, edit, sort.
|
|
4
|
+
* Geometry follows the shared rules in `../icon-types.ts` companions: 4–20 optical box,
|
|
5
|
+
* one 1.75 stroke, round caps and joins, filled dots at r=1.35.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ACTION_ICONS: Record<string, IconDef>;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action glyphs (`action.*`) — interactive chrome: search, close, chevrons, edit, sort.
|
|
3
|
+
* Geometry follows the shared rules in `../icon-types.ts` companions: 4–20 optical box,
|
|
4
|
+
* one 1.75 stroke, round caps and joins, filled dots at r=1.35.
|
|
5
|
+
*/
|
|
6
|
+
export const ACTION_ICONS = {
|
|
7
|
+
'action.search': {
|
|
8
|
+
kind: 'stroke',
|
|
9
|
+
circles: [{ cx: 11, cy: 11, r: 7 }],
|
|
10
|
+
paths: ['M16 16L20 20'],
|
|
11
|
+
},
|
|
12
|
+
'action.close': {
|
|
13
|
+
kind: 'stroke',
|
|
14
|
+
paths: ['M6 6L18 18', 'M18 6L6 18'],
|
|
15
|
+
},
|
|
16
|
+
'action.check': {
|
|
17
|
+
kind: 'stroke',
|
|
18
|
+
paths: ['M5 12L10 17L19 7'],
|
|
19
|
+
},
|
|
20
|
+
'action.chevron-down': {
|
|
21
|
+
kind: 'stroke',
|
|
22
|
+
paths: ['M6 9L12 15L18 9'],
|
|
23
|
+
},
|
|
24
|
+
'action.chevron-right': {
|
|
25
|
+
kind: 'stroke',
|
|
26
|
+
paths: ['M9 6L15 12L9 18'],
|
|
27
|
+
},
|
|
28
|
+
'action.menu': {
|
|
29
|
+
kind: 'stroke',
|
|
30
|
+
paths: ['M4 7H20', 'M4 12H20', 'M4 17H20'],
|
|
31
|
+
},
|
|
32
|
+
'action.plus': {
|
|
33
|
+
kind: 'stroke',
|
|
34
|
+
paths: ['M12 5V19', 'M5 12H19'],
|
|
35
|
+
},
|
|
36
|
+
'action.copy': {
|
|
37
|
+
kind: 'stroke',
|
|
38
|
+
paths: ['M8 8H20V20H8Z', 'M16 8V4H4V16H8'],
|
|
39
|
+
},
|
|
40
|
+
'action.chevron-up': {
|
|
41
|
+
kind: 'stroke',
|
|
42
|
+
paths: ['M6 15L12 9L18 15'],
|
|
43
|
+
},
|
|
44
|
+
'action.chevron-left': {
|
|
45
|
+
kind: 'stroke',
|
|
46
|
+
paths: ['M15 6L9 12L15 18'],
|
|
47
|
+
},
|
|
48
|
+
'action.minus': {
|
|
49
|
+
kind: 'stroke',
|
|
50
|
+
paths: ['M5 12H19'],
|
|
51
|
+
},
|
|
52
|
+
'action.more': {
|
|
53
|
+
kind: 'stroke',
|
|
54
|
+
paths: [],
|
|
55
|
+
dots: [
|
|
56
|
+
{ cx: 5, cy: 12, r: 1.5 },
|
|
57
|
+
{ cx: 12, cy: 12, r: 1.5 },
|
|
58
|
+
{ cx: 19, cy: 12, r: 1.5 },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
'action.filter': {
|
|
62
|
+
kind: 'stroke',
|
|
63
|
+
paths: ['M4 6H20L14 13V19L10 17V13L4 6Z'],
|
|
64
|
+
},
|
|
65
|
+
'action.calendar': {
|
|
66
|
+
kind: 'stroke',
|
|
67
|
+
paths: ['M4 8H20V20H4Z', 'M4 12H20', 'M8 4V8', 'M16 4V8'],
|
|
68
|
+
},
|
|
69
|
+
'action.upload': {
|
|
70
|
+
kind: 'stroke',
|
|
71
|
+
paths: ['M12 15V4', 'M7 9L12 4L17 9', 'M4 16V20H20V16'],
|
|
72
|
+
},
|
|
73
|
+
'action.download': {
|
|
74
|
+
kind: 'stroke',
|
|
75
|
+
paths: ['M12 4V15', 'M7 10L12 15L17 10', 'M4 16V20H20V16'],
|
|
76
|
+
},
|
|
77
|
+
'action.sort': {
|
|
78
|
+
kind: 'stroke',
|
|
79
|
+
paths: ['M8 18V6', 'M5 9L8 6L11 9', 'M16 6V18', 'M13 15L16 18L19 15'],
|
|
80
|
+
},
|
|
81
|
+
'action.sort-asc': {
|
|
82
|
+
kind: 'stroke',
|
|
83
|
+
paths: ['M8 18V6', 'M5 9L8 6L11 9', 'M14 14V18', 'M17 11V18', 'M20 8V18'],
|
|
84
|
+
},
|
|
85
|
+
'action.sort-desc': {
|
|
86
|
+
kind: 'stroke',
|
|
87
|
+
paths: ['M8 6V18', 'M5 15L8 18L11 15', 'M14 8V18', 'M17 11V18', 'M20 14V18'],
|
|
88
|
+
},
|
|
89
|
+
'action.external': {
|
|
90
|
+
kind: 'stroke',
|
|
91
|
+
paths: ['M14 4H20V10', 'M20 4L11 13', 'M18 14V20H4V6H10'],
|
|
92
|
+
},
|
|
93
|
+
'action.arrow-right': {
|
|
94
|
+
kind: 'stroke',
|
|
95
|
+
paths: ['M4 12H20', 'M14 6L20 12L14 18'],
|
|
96
|
+
},
|
|
97
|
+
'action.arrow-left': {
|
|
98
|
+
kind: 'stroke',
|
|
99
|
+
paths: ['M20 12H4', 'M10 6L4 12L10 18'],
|
|
100
|
+
},
|
|
101
|
+
'action.trash': {
|
|
102
|
+
kind: 'stroke',
|
|
103
|
+
paths: ['M4 7H20', 'M9 7V4H15V7', 'M6 7L7 20H17L18 7', 'M10 11V16', 'M14 11V16'],
|
|
104
|
+
},
|
|
105
|
+
'action.edit': {
|
|
106
|
+
kind: 'stroke',
|
|
107
|
+
paths: ['M4 20L5 16L16 5L19 8L8 19L4 20Z', 'M13.5 7.5L16.5 10.5'],
|
|
108
|
+
},
|
|
109
|
+
'action.refresh': {
|
|
110
|
+
kind: 'stroke',
|
|
111
|
+
paths: ['M20 12A8 8 0 1 1 17.1 5.9L20 8', 'M15.5 8H20V3.5'],
|
|
112
|
+
},
|
|
113
|
+
'action.history': {
|
|
114
|
+
kind: 'stroke',
|
|
115
|
+
paths: ['M4 12A8 8 0 1 0 6.9 5.9L4 8', 'M4 3.5V8H8.5', 'M12 7V12L15.5 14'],
|
|
116
|
+
},
|
|
117
|
+
'action.moon': {
|
|
118
|
+
kind: 'stroke',
|
|
119
|
+
paths: ['M20 14.5A8.5 8.5 0 0 1 9.5 4 8.5 8.5 0 1 0 20 14.5Z'],
|
|
120
|
+
},
|
|
121
|
+
'action.sun': {
|
|
122
|
+
kind: 'stroke',
|
|
123
|
+
circles: [{ cx: 12, cy: 12, r: 4 }],
|
|
124
|
+
paths: [
|
|
125
|
+
'M12 3V6',
|
|
126
|
+
'M12 18V21',
|
|
127
|
+
'M3 12H6',
|
|
128
|
+
'M18 12H21',
|
|
129
|
+
'M5.6 5.6L7.8 7.8',
|
|
130
|
+
'M16.2 16.2L18.4 18.4',
|
|
131
|
+
'M18.4 5.6L16.2 7.8',
|
|
132
|
+
'M7.8 16.2L5.6 18.4',
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
'action.monitor': {
|
|
136
|
+
kind: 'stroke',
|
|
137
|
+
paths: ['M4 5H20V17H4Z', 'M9 20H15', 'M12 17V20'],
|
|
138
|
+
},
|
|
139
|
+
'action.search-document': {
|
|
140
|
+
kind: 'stroke',
|
|
141
|
+
paths: ['M4 3.5H12L16.5 8V20.5H4Z', 'M12 3.5V8H16.5', 'M16.5 16.5L20.5 20.5'],
|
|
142
|
+
circles: [{ cx: 14.2, cy: 14.2, r: 3.2 }],
|
|
143
|
+
},
|
|
144
|
+
'action.save': {
|
|
145
|
+
kind: 'stroke',
|
|
146
|
+
paths: ['M4 4H16L20 8V20H4Z', 'M8 20V13H16V20', 'M8 4V8.5H14V4'],
|
|
147
|
+
},
|
|
148
|
+
'action.undo': {
|
|
149
|
+
kind: 'stroke',
|
|
150
|
+
paths: ['M9 14L4 9L9 4', 'M4 9H14A6.5 6.5 0 0 1 20.5 15.5V18'],
|
|
151
|
+
},
|
|
152
|
+
'action.redo': {
|
|
153
|
+
kind: 'stroke',
|
|
154
|
+
paths: ['M15 14L20 9L15 4', 'M20 9H10A6.5 6.5 0 0 0 3.5 15.5V18'],
|
|
155
|
+
},
|
|
156
|
+
'action.cut': {
|
|
157
|
+
kind: 'stroke',
|
|
158
|
+
paths: ['M7.9 7.5L20 19', 'M7.9 16.5L20 5'],
|
|
159
|
+
circles: [
|
|
160
|
+
{ cx: 6, cy: 6, r: 2.2 },
|
|
161
|
+
{ cx: 6, cy: 18, r: 2.2 },
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
'action.paste': {
|
|
165
|
+
kind: 'stroke',
|
|
166
|
+
paths: ['M16 5H19V20H5V5H8', 'M8 3.5H16V7H8Z'],
|
|
167
|
+
},
|
|
168
|
+
'action.eye': {
|
|
169
|
+
kind: 'stroke',
|
|
170
|
+
paths: ['M2.5 12C4.5 7.5 8 5 12 5C16 5 19.5 7.5 21.5 12C19.5 16.5 16 19 12 19C8 19 4.5 16.5 2.5 12Z'],
|
|
171
|
+
circles: [{ cx: 12, cy: 12, r: 3 }],
|
|
172
|
+
},
|
|
173
|
+
'action.eye-off': {
|
|
174
|
+
kind: 'stroke',
|
|
175
|
+
paths: ['M2.5 12C4.5 7.5 8 5 12 5C16 5 19.5 7.5 21.5 12C19.5 16.5 16 19 12 19C8 19 4.5 16.5 2.5 12Z', 'M4 19L20 5'],
|
|
176
|
+
circles: [{ cx: 12, cy: 12, r: 3 }],
|
|
177
|
+
},
|
|
178
|
+
'action.mail': {
|
|
179
|
+
kind: 'stroke',
|
|
180
|
+
paths: ['M3 6H21V18H3Z', 'M3 7L12 13L21 7'],
|
|
181
|
+
},
|
|
182
|
+
'action.sync': {
|
|
183
|
+
kind: 'stroke',
|
|
184
|
+
paths: ['M8 4L4 8L8 12', 'M4 8H20', 'M16 12L20 16L16 20', 'M20 16H4'],
|
|
185
|
+
},
|
|
186
|
+
'action.archive': {
|
|
187
|
+
kind: 'stroke',
|
|
188
|
+
paths: ['M4 4H20V8H4Z', 'M5 8H19V20H5Z', 'M10 12H14'],
|
|
189
|
+
},
|
|
190
|
+
'action.share': {
|
|
191
|
+
kind: 'stroke',
|
|
192
|
+
circles: [
|
|
193
|
+
{ cx: 18, cy: 5.5, r: 2.5 },
|
|
194
|
+
{ cx: 6, cy: 12, r: 2.5 },
|
|
195
|
+
{ cx: 18, cy: 18.5, r: 2.5 },
|
|
196
|
+
],
|
|
197
|
+
paths: ['M8.2 10.9L15.8 6.6', 'M8.2 13.1L15.8 17.4'],
|
|
198
|
+
},
|
|
199
|
+
'action.move': {
|
|
200
|
+
kind: 'stroke',
|
|
201
|
+
paths: ['M12 4L15 7H13V11H17V9L20 12L17 15V13H13V17H15L12 20L9 17H11V13H7V15L4 12L7 9V11H11V7H9L12 4Z'],
|
|
202
|
+
},
|
|
203
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IconDef } from '../icon-types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Product brand glyphs (`brand.*`) — silhouette language like `social.*`, kept separate
|
|
4
|
+
* so package registries and runtimes are not mixed into social link rows. Geometry from
|
|
5
|
+
* Simple Icons (https://simpleicons.org), licensed CC0-1.0; trademarks belong to their owners.
|
|
6
|
+
*/
|
|
7
|
+
export declare const BRAND_ICONS: Record<string, IconDef>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product brand glyphs (`brand.*`) — silhouette language like `social.*`, kept separate
|
|
3
|
+
* so package registries and runtimes are not mixed into social link rows. Geometry from
|
|
4
|
+
* Simple Icons (https://simpleicons.org), licensed CC0-1.0; trademarks belong to their owners.
|
|
5
|
+
*/
|
|
6
|
+
export const BRAND_ICONS = {
|
|
7
|
+
'brand.npm': {
|
|
8
|
+
kind: 'fill',
|
|
9
|
+
d: 'M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z',
|
|
10
|
+
},
|
|
11
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IconDef } from '../icon-types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Commerce glyphs (`commerce.*`) — payment instruments, carts and scan codes.
|
|
4
|
+
* `commerce.qr` keeps a 2×2 dot matrix at 2-unit pitch: a scan code is dense by
|
|
5
|
+
* definition, so it is the documented exception to the ≥2.25-unit spacing rule.
|
|
6
|
+
*/
|
|
7
|
+
export declare const COMMERCE_ICONS: Record<string, IconDef>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commerce glyphs (`commerce.*`) — payment instruments, carts and scan codes.
|
|
3
|
+
* `commerce.qr` keeps a 2×2 dot matrix at 2-unit pitch: a scan code is dense by
|
|
4
|
+
* definition, so it is the documented exception to the ≥2.25-unit spacing rule.
|
|
5
|
+
*/
|
|
6
|
+
export const COMMERCE_ICONS = {
|
|
7
|
+
'commerce.card': {
|
|
8
|
+
kind: 'stroke',
|
|
9
|
+
paths: ['M3 6.5H21V17.5H3Z', 'M3 10H21', 'M6 14.5H9'],
|
|
10
|
+
},
|
|
11
|
+
'commerce.cart': {
|
|
12
|
+
kind: 'stroke',
|
|
13
|
+
paths: ['M3 4.5H5.8L8.2 14.5H19L21 7.5H7'],
|
|
14
|
+
circles: [
|
|
15
|
+
{ cx: 9.5, cy: 18.5, r: 1.6 },
|
|
16
|
+
{ cx: 17.5, cy: 18.5, r: 1.6 },
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
'commerce.qr': {
|
|
20
|
+
kind: 'stroke',
|
|
21
|
+
paths: [
|
|
22
|
+
'M4 4H10V10H4Z',
|
|
23
|
+
'M14 4H20V10H14Z',
|
|
24
|
+
'M4 14H10V20H4Z',
|
|
25
|
+
'M14 14H16V16H14Z',
|
|
26
|
+
'M18 14H20V16H18Z',
|
|
27
|
+
'M14 18H16V20H14Z',
|
|
28
|
+
'M18 18H20V20H18Z',
|
|
29
|
+
],
|
|
30
|
+
dots: [
|
|
31
|
+
{ cx: 7, cy: 7, r: 1.5 },
|
|
32
|
+
{ cx: 17, cy: 7, r: 1.5 },
|
|
33
|
+
{ cx: 7, cy: 17, r: 1.5 },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Data glyphs (`data.*`) — dataset shapes such as pie charts and tables. */
|
|
2
|
+
export const DATA_ICONS = {
|
|
3
|
+
'data.pie': {
|
|
4
|
+
kind: 'stroke',
|
|
5
|
+
paths: ['M21 12A9 9 0 1 1 12 3V12H21Z', 'M14 3.5A9 9 0 0 1 20.5 10H14V3.5Z'],
|
|
6
|
+
},
|
|
7
|
+
'data.table': {
|
|
8
|
+
kind: 'stroke',
|
|
9
|
+
paths: ['M4 5H20V19H4Z', 'M4 9.5H20', 'M4 14H20', 'M9.5 5V19'],
|
|
10
|
+
},
|
|
11
|
+
'data.column': {
|
|
12
|
+
kind: 'stroke',
|
|
13
|
+
paths: ['M4 5H20V19H4Z', 'M9.5 5V19', 'M14.5 5V19'],
|
|
14
|
+
},
|
|
15
|
+
'data.row': {
|
|
16
|
+
kind: 'stroke',
|
|
17
|
+
paths: ['M4 5H20V19H4Z', 'M4 10H20', 'M4 15H20'],
|
|
18
|
+
},
|
|
19
|
+
'data.aggregate': {
|
|
20
|
+
kind: 'stroke',
|
|
21
|
+
paths: ['M17 6H7L13 12L7 18H17'],
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Develop glyphs (`develop.*`) — console, terminal and inspection landmarks for developer surfaces. */
|
|
2
|
+
export const DEVELOP_ICONS = {
|
|
3
|
+
'develop.terminal': {
|
|
4
|
+
kind: 'stroke',
|
|
5
|
+
paths: ['M3 5H21V19H3Z', 'M7 9L10 12L7 15', 'M13 15H17'],
|
|
6
|
+
},
|
|
7
|
+
'develop.command': {
|
|
8
|
+
kind: 'stroke',
|
|
9
|
+
paths: ['M15.5 4.5A2.4 2.4 0 0 0 13 6.9V17.1A2.4 2.4 0 0 0 15.5 19.5A2.4 2.4 0 0 0 17.9 17.1A2.4 2.4 0 0 0 15.5 14.7H8.5A2.4 2.4 0 0 0 6.1 17.1A2.4 2.4 0 0 0 8.5 19.5A2.4 2.4 0 0 0 11 17.1V6.9A2.4 2.4 0 0 0 8.5 4.5A2.4 2.4 0 0 0 6.1 6.9A2.4 2.4 0 0 0 8.5 9.3H15.5A2.4 2.4 0 0 0 17.9 6.9A2.4 2.4 0 0 0 15.5 4.5Z'],
|
|
10
|
+
},
|
|
11
|
+
'develop.inspect': {
|
|
12
|
+
kind: 'stroke',
|
|
13
|
+
paths: ['M4 7V4H7', 'M17 4H20V7', 'M20 17V20H17', 'M7 20H4V17'],
|
|
14
|
+
dots: [{ cx: 12, cy: 12, r: 1.5 }],
|
|
15
|
+
},
|
|
16
|
+
'develop.activity': {
|
|
17
|
+
kind: 'stroke',
|
|
18
|
+
paths: ['M3 12H7L10 6L14 18L17 12H21'],
|
|
19
|
+
},
|
|
20
|
+
'develop.queue': {
|
|
21
|
+
kind: 'stroke',
|
|
22
|
+
paths: ['M4 8L12 4L20 8L12 12L4 8Z', 'M4 12.5L12 16.5L20 12.5', 'M4 17L12 21L20 17'],
|
|
23
|
+
},
|
|
24
|
+
'develop.env': { kind: 'text-badge', label: 'ENV' },
|
|
25
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** Device glyphs (`device.*`) — hardware, deployment and access control landmarks. */
|
|
2
|
+
export const DEVICE_ICONS = {
|
|
3
|
+
'device.server': {
|
|
4
|
+
kind: 'stroke',
|
|
5
|
+
paths: ['M4 5H20V11H4Z', 'M4 13H20V19H4Z'],
|
|
6
|
+
dots: [
|
|
7
|
+
{ cx: 7, cy: 8, r: 1.5 },
|
|
8
|
+
{ cx: 7, cy: 16, r: 1.5 },
|
|
9
|
+
],
|
|
10
|
+
},
|
|
11
|
+
'device.mobile': {
|
|
12
|
+
kind: 'stroke',
|
|
13
|
+
paths: ['M7 3H17V21H7Z', 'M11 18H13'],
|
|
14
|
+
},
|
|
15
|
+
'device.tablet': {
|
|
16
|
+
kind: 'stroke',
|
|
17
|
+
paths: ['M5 4H19V20H5Z', 'M11 17.5H13'],
|
|
18
|
+
},
|
|
19
|
+
'device.network': {
|
|
20
|
+
kind: 'stroke',
|
|
21
|
+
circles: [
|
|
22
|
+
{ cx: 12, cy: 12, r: 2.2 },
|
|
23
|
+
{ cx: 12, cy: 5, r: 1.8 },
|
|
24
|
+
{ cx: 5.5, cy: 18.5, r: 1.8 },
|
|
25
|
+
{ cx: 18.5, cy: 18.5, r: 1.8 },
|
|
26
|
+
],
|
|
27
|
+
paths: ['M12 10V7', 'M10.2 13.2L7 16.3', 'M13.8 13.2L17 16.3'],
|
|
28
|
+
},
|
|
29
|
+
'device.shield': {
|
|
30
|
+
kind: 'stroke',
|
|
31
|
+
paths: ['M12 3L19 6V11C19 15.5 16 18.5 12 20C8 18.5 5 15.5 5 11V6L12 3Z'],
|
|
32
|
+
},
|
|
33
|
+
'device.key': {
|
|
34
|
+
kind: 'stroke',
|
|
35
|
+
circles: [{ cx: 8, cy: 8, r: 4 }],
|
|
36
|
+
paths: ['M10.8 10.8L19.5 19.5', 'M16 16L18 18', 'M18.5 13.5L20.5 15.5'],
|
|
37
|
+
},
|
|
38
|
+
'device.lock': {
|
|
39
|
+
kind: 'stroke',
|
|
40
|
+
paths: ['M6 11H18V20H6Z', 'M9 11V8A3 3 0 0 1 15 8V11'],
|
|
41
|
+
},
|
|
42
|
+
'device.lock-unlock': {
|
|
43
|
+
kind: 'stroke',
|
|
44
|
+
paths: ['M6 11H18V20H6Z', 'M9 11V8A3 3 0 0 1 14.8 6.2'],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IconDef } from '../icon-types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Editor glyphs (`editor.*`) — the formatting toolbar surface. `editor.bold` and
|
|
4
|
+
* `editor.italic` use text badges because the letterforms are the honest mark.
|
|
5
|
+
*/
|
|
6
|
+
export declare const EDITOR_ICONS: Record<string, IconDef>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor glyphs (`editor.*`) — the formatting toolbar surface. `editor.bold` and
|
|
3
|
+
* `editor.italic` use text badges because the letterforms are the honest mark.
|
|
4
|
+
*/
|
|
5
|
+
export const EDITOR_ICONS = {
|
|
6
|
+
'editor.format': {
|
|
7
|
+
kind: 'stroke',
|
|
8
|
+
paths: ['M13 4V20', 'M17 4V20', 'M19 4H9.5A4.5 4.5 0 0 0 9.5 13H13'],
|
|
9
|
+
},
|
|
10
|
+
'editor.bold': { kind: 'text-badge', label: 'B' },
|
|
11
|
+
'editor.italic': { kind: 'text-badge', label: 'I' },
|
|
12
|
+
'editor.code': {
|
|
13
|
+
kind: 'stroke',
|
|
14
|
+
paths: ['M16 7L21 12L16 17', 'M8 7L3 12L8 17'],
|
|
15
|
+
},
|
|
16
|
+
'editor.quote': {
|
|
17
|
+
kind: 'stroke',
|
|
18
|
+
paths: [
|
|
19
|
+
'M9 6C7 7 6 9 6 12C6 14 7.2 15.5 8.8 15.5C10.4 15.5 11.5 14.3 11.5 12.8C11.5 11.3 10.4 10.2 9 10.2C8.7 10.2 8.4 10.3 8.1 10.4C8.3 9 9 7.7 10.5 6.9L9 6Z',
|
|
20
|
+
'M17 6C15 7 14 9 14 12C14 14 15.2 15.5 16.8 15.5C18.4 15.5 19.5 14.3 19.5 12.8C19.5 11.3 18.4 10.2 17 10.2C16.7 10.2 16.4 10.3 16.1 10.4C16.3 9 17 7.7 18.5 6.9L17 6Z',
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
'editor.list-ordered': {
|
|
24
|
+
kind: 'stroke',
|
|
25
|
+
paths: [
|
|
26
|
+
'M10.5 6H21',
|
|
27
|
+
'M10.5 12H21',
|
|
28
|
+
'M10.5 18H21',
|
|
29
|
+
'M4 5.5L5.5 4.5V9.5',
|
|
30
|
+
'M3.8 12.2C4.2 11.7 5 11.4 5.7 11.7C6.4 12 6.5 12.9 6 13.5L3.8 15.8H6.5',
|
|
31
|
+
'M4 17.3C4.6 17 5.5 17 6 17.5C6.4 18 6.1 18.6 5.4 18.8C6.1 19 6.4 19.6 6 20.1C5.5 20.6 4.6 20.6 4 20.3',
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
'editor.list-unordered': {
|
|
35
|
+
kind: 'stroke',
|
|
36
|
+
paths: ['M10.5 6H21', 'M10.5 12H21', 'M10.5 18H21'],
|
|
37
|
+
dots: [
|
|
38
|
+
{ cx: 5.5, cy: 6, r: 1.5 },
|
|
39
|
+
{ cx: 5.5, cy: 12, r: 1.5 },
|
|
40
|
+
{ cx: 5.5, cy: 18, r: 1.5 },
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
'editor.indent': {
|
|
44
|
+
kind: 'stroke',
|
|
45
|
+
paths: ['M21 5H3', 'M21 12H9', 'M21 19H3', 'M3 9L6.5 12L3 15'],
|
|
46
|
+
},
|
|
47
|
+
'editor.outdent': {
|
|
48
|
+
kind: 'stroke',
|
|
49
|
+
paths: ['M21 5H3', 'M21 12H9', 'M21 19H3', 'M6.5 9L3 12L6.5 15'],
|
|
50
|
+
},
|
|
51
|
+
'editor.wrap': {
|
|
52
|
+
kind: 'stroke',
|
|
53
|
+
paths: ['M3 6H21', 'M3 12H18A3.5 3.5 0 0 1 18 19H14', 'M16.5 16.5L14 19L16.5 21.5'],
|
|
54
|
+
},
|
|
55
|
+
'editor.split': {
|
|
56
|
+
kind: 'stroke',
|
|
57
|
+
paths: ['M4 4H20V20H4Z', 'M12 4V20'],
|
|
58
|
+
},
|
|
59
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Feature glyphs (`feature.*`) — product capability landmarks on marketing surfaces. */
|
|
2
|
+
export const FEATURE_ICONS = {
|
|
3
|
+
'feature.incremental': {
|
|
4
|
+
kind: 'stroke',
|
|
5
|
+
paths: ['M4 20H20', 'M6 20V16H10V12H14V8H18'],
|
|
6
|
+
},
|
|
7
|
+
'feature.runtime': {
|
|
8
|
+
kind: 'stroke',
|
|
9
|
+
paths: ['M7 7H17V17H7Z', 'M10 4V7', 'M14 4V7', 'M10 17V20', 'M14 17V20', 'M4 10H7', 'M4 14H7', 'M17 10H20', 'M17 14H20'],
|
|
10
|
+
},
|
|
11
|
+
'feature.deploy': {
|
|
12
|
+
kind: 'stroke',
|
|
13
|
+
paths: ['M4 18H20', 'M12 15V6', 'M8 10L12 6L16 10'],
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IconDef } from '../icon-types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* File glyphs (`file.*`) — documents, folders, attachments and file-type badges.
|
|
4
|
+
* File types with no honest silhouette (PDF, ZIP, Markdown, CSV) use `text-badge`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const FILE_ICONS: Record<string, IconDef>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File glyphs (`file.*`) — documents, folders, attachments and file-type badges.
|
|
3
|
+
* File types with no honest silhouette (PDF, ZIP, Markdown, CSV) use `text-badge`.
|
|
4
|
+
*/
|
|
5
|
+
export const FILE_ICONS = {
|
|
6
|
+
'file.document': {
|
|
7
|
+
kind: 'stroke',
|
|
8
|
+
paths: ['M5 3H14L19 8V21H5Z', 'M14 3V8H19', 'M8 12H16', 'M8 16H16'],
|
|
9
|
+
},
|
|
10
|
+
'file.folder': {
|
|
11
|
+
kind: 'stroke',
|
|
12
|
+
paths: ['M3 5H9.5L12 7.5H21V19H3V5Z'],
|
|
13
|
+
},
|
|
14
|
+
'file.folder-open': {
|
|
15
|
+
kind: 'stroke',
|
|
16
|
+
paths: ['M4 11V6H9.5L12 8.5H20V11', 'M3 11H21L19 19H5L3 11Z'],
|
|
17
|
+
},
|
|
18
|
+
'file.attachment': {
|
|
19
|
+
kind: 'stroke',
|
|
20
|
+
paths: [
|
|
21
|
+
'M20 11.4L11.6 19.8A5.5 5.5 0 0 1 3.9 12.1L12.1 3.9A3.8 3.8 0 0 1 17.4 9.2L9.2 17.4A1.9 1.9 0 0 1 6.6 14.8L14.8 6.6',
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
'file.pdf': { kind: 'text-badge', label: 'PDF' },
|
|
25
|
+
'file.archive': { kind: 'text-badge', label: 'ZIP' },
|
|
26
|
+
'file.markdown': { kind: 'text-badge', label: 'MD' },
|
|
27
|
+
'file.spreadsheet': { kind: 'text-badge', label: 'CSV' },
|
|
28
|
+
'file.cloud': {
|
|
29
|
+
kind: 'stroke',
|
|
30
|
+
paths: ['M6.5 19A4.5 4.5 0 0 1 6.2 10.1A5.8 5.8 0 0 1 17.4 10.6A4.3 4.3 0 0 1 17.5 19H6.5Z'],
|
|
31
|
+
},
|
|
32
|
+
'file.cloud-off': {
|
|
33
|
+
kind: 'stroke',
|
|
34
|
+
paths: ['M6.5 19A4.5 4.5 0 0 1 6.2 10.1A5.8 5.8 0 0 1 17.4 10.6A4.3 4.3 0 0 1 17.5 19H6.5Z', 'M4 20L20 4'],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Git glyphs (`git.*`) — version control and collaboration landmarks. */
|
|
2
|
+
export const GIT_ICONS = {
|
|
3
|
+
'git.branch': {
|
|
4
|
+
kind: 'stroke',
|
|
5
|
+
circles: [
|
|
6
|
+
{ cx: 6, cy: 5, r: 2 },
|
|
7
|
+
{ cx: 6, cy: 19, r: 2 },
|
|
8
|
+
{ cx: 18, cy: 8, r: 2 },
|
|
9
|
+
],
|
|
10
|
+
paths: ['M6 7V17', 'M16 8.2C14 10.5 10 11.5 6 12.5'],
|
|
11
|
+
},
|
|
12
|
+
'git.commit': {
|
|
13
|
+
kind: 'stroke',
|
|
14
|
+
circles: [{ cx: 12, cy: 12, r: 4.5 }],
|
|
15
|
+
paths: ['M4 12H7.5', 'M16.5 12H20'],
|
|
16
|
+
},
|
|
17
|
+
'git.merge': {
|
|
18
|
+
kind: 'stroke',
|
|
19
|
+
circles: [
|
|
20
|
+
{ cx: 5, cy: 5, r: 2 },
|
|
21
|
+
{ cx: 5, cy: 19, r: 2 },
|
|
22
|
+
{ cx: 19, cy: 12, r: 2 },
|
|
23
|
+
],
|
|
24
|
+
paths: ['M5 7V17', 'M7 6C9 8 12 10.5 17 11.5', 'M7 18C9 16 12 13.5 17 12.5'],
|
|
25
|
+
},
|
|
26
|
+
'git.pull-request': {
|
|
27
|
+
kind: 'stroke',
|
|
28
|
+
circles: [
|
|
29
|
+
{ cx: 6, cy: 6, r: 2 },
|
|
30
|
+
{ cx: 6, cy: 18, r: 2 },
|
|
31
|
+
{ cx: 18, cy: 18, r: 2 },
|
|
32
|
+
],
|
|
33
|
+
paths: ['M6 8V16', 'M13 6H16.5C17.6 6 18 6.8 18 8V16', 'M10.5 3.5L13 6L10.5 8.5'],
|
|
34
|
+
},
|
|
35
|
+
'git.fork': {
|
|
36
|
+
kind: 'stroke',
|
|
37
|
+
circles: [
|
|
38
|
+
{ cx: 12, cy: 4, r: 2 },
|
|
39
|
+
{ cx: 6, cy: 20, r: 2 },
|
|
40
|
+
{ cx: 18, cy: 20, r: 2 },
|
|
41
|
+
],
|
|
42
|
+
paths: ['M12 6V11', 'M12 11C12 14.5 8.5 15 7 18.2', 'M12 11C12 14.5 15.5 15 17 18.2'],
|
|
43
|
+
},
|
|
44
|
+
'git.compare': {
|
|
45
|
+
kind: 'stroke',
|
|
46
|
+
circles: [
|
|
47
|
+
{ cx: 6, cy: 6, r: 2 },
|
|
48
|
+
{ cx: 18, cy: 18, r: 2 },
|
|
49
|
+
],
|
|
50
|
+
paths: ['M8 6H13', 'M11 3.5L13.5 6L11 8.5', 'M16 18H11', 'M13 15.5L10.5 18L13 20.5'],
|
|
51
|
+
},
|
|
52
|
+
};
|