@vmz/ui-icons 0.3.6 → 0.3.8

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 CHANGED
@@ -1,27 +1,27 @@
1
- # @vmz/ui-icons
2
-
3
- Official **VMZ UI** icon suite (thin gate).
4
-
5
- ```text
6
- @vmz/ui-icons ≠ loose SVG dump in apps
7
- semantic name → registry mark → <Icon name="tool.base64" />
8
- ```
9
-
10
- - Reuses application `/designs` semantic tokens (no brand hex).
11
- - Does **not** ship Button / Field / Dialog / Tooltip — compose with `@vmz/ui`.
12
- - Closed thin: semantic `name`, built-in registry, decorative vs labelled a11y, size density.
13
- - Still open: multi-surface path sets, locale-aware marks, icon-only Button integration depth.
14
-
15
- Registry kinds: `stroke` (outlined UI chrome and tools), `text-badge` (proprietary converter names such as `tool.base64` → `B64`). `feature.ssr` is intentionally absent — use title copy instead of an icon.
16
-
17
- Verify:
18
-
19
- ```bash
20
- pnpm verify -- ui-icons
21
- ```
22
-
23
- Contact sheet (local review):
24
-
25
- ```bash
26
- node packages/ui/vmz-ui-icons/scripts/contact-sheet.mjs
27
- ```
1
+ # @vmz/ui-icons
2
+
3
+ Official **VMZ UI** icon suite (thin gate).
4
+
5
+ ```text
6
+ @vmz/ui-icons ≠ loose SVG dump in apps
7
+ semantic name → registry mark → <Icon name="tool.base64" />
8
+ ```
9
+
10
+ - Reuses application `/designs` semantic tokens (no brand hex).
11
+ - Does **not** ship Button / Field / Dialog / Tooltip — compose with `@vmz/ui`.
12
+ - Closed thin: semantic `name`, built-in registry, decorative vs labelled a11y, size density.
13
+ - Still open: multi-surface path sets, locale-aware marks, icon-only Button integration depth.
14
+
15
+ Registry kinds: `stroke` (outlined UI chrome and tools), `text-badge` (proprietary converter names such as `tool.base64` → `B64`). `feature.ssr` is intentionally absent — use title copy instead of an icon.
16
+
17
+ Verify:
18
+
19
+ ```bash
20
+ pnpm verify -- ui-icons
21
+ ```
22
+
23
+ Contact sheet (local review):
24
+
25
+ ```bash
26
+ node packages/ui/vmz-ui-icons/scripts/contact-sheet.mjs
27
+ ```
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "license": "MIT",
19
19
  "name": "@vmz/ui-icons",
20
20
  "peerDependencies": {
21
- "@vmz/ui": "0.3.6"
21
+ "@vmz/ui": "0.3.8"
22
22
  },
23
23
  "publishConfig": {
24
24
  "access": "public"
@@ -29,5 +29,5 @@
29
29
  "url": "git+https://github.com/doki-land/vmz-framework.git"
30
30
  },
31
31
  "type": "module",
32
- "version": "0.3.6"
32
+ "version": "0.3.8"
33
33
  }
package/src/icon-types.ts CHANGED
@@ -1,35 +1,35 @@
1
- /** Structured icon definitions for `@vmz/ui-icons` registry. */
2
-
3
- export type IconStrokeDef = {
4
- kind: 'stroke';
5
- paths: readonly string[];
6
- circles?: readonly Readonly<{ cx: number; cy: number; r: number }>[];
7
- dots?: readonly Readonly<{ cx: number; cy: number; r: number }>[];
8
- strokeWidth?: number;
9
- };
10
-
11
- export type IconFillDef = {
12
- kind: 'fill';
13
- d: string;
14
- fillRule?: 'evenodd' | 'nonzero';
15
- };
16
-
17
- export type IconMixedNode = {
18
- tag: 'path' | 'circle' | 'rect' | 'line';
19
- attrs: Readonly<Record<string, string>>;
20
- };
21
-
22
- export type IconMixedDef = {
23
- kind: 'mixed';
24
- nodes: readonly IconMixedNode[];
25
- };
26
-
27
- /** Monospace text mark for proprietary converter names (2–4 chars). */
28
- export type IconTextBadgeDef = {
29
- kind: 'text-badge';
30
- label: string;
31
- };
32
-
33
- export type IconDef = IconStrokeDef | IconFillDef | IconMixedDef | IconTextBadgeDef;
34
-
35
- export const DEFAULT_STROKE_WIDTH = 1.75;
1
+ /** Structured icon definitions for `@vmz/ui-icons` registry. */
2
+
3
+ export type IconStrokeDef = {
4
+ kind: 'stroke';
5
+ paths: readonly string[];
6
+ circles?: readonly Readonly<{ cx: number; cy: number; r: number }>[];
7
+ dots?: readonly Readonly<{ cx: number; cy: number; r: number }>[];
8
+ strokeWidth?: number;
9
+ };
10
+
11
+ export type IconFillDef = {
12
+ kind: 'fill';
13
+ d: string;
14
+ fillRule?: 'evenodd' | 'nonzero';
15
+ };
16
+
17
+ export type IconMixedNode = {
18
+ tag: 'path' | 'circle' | 'rect' | 'line';
19
+ attrs: Readonly<Record<string, string>>;
20
+ };
21
+
22
+ export type IconMixedDef = {
23
+ kind: 'mixed';
24
+ nodes: readonly IconMixedNode[];
25
+ };
26
+
27
+ /** Monospace text mark for proprietary converter names (2–4 chars). */
28
+ export type IconTextBadgeDef = {
29
+ kind: 'text-badge';
30
+ label: string;
31
+ };
32
+
33
+ export type IconDef = IconStrokeDef | IconFillDef | IconMixedDef | IconTextBadgeDef;
34
+
35
+ export const DEFAULT_STROKE_WIDTH = 1.75;
@@ -35,6 +35,97 @@ export const STROKE_ICONS: Record<string, IconDef> = {
35
35
  kind: 'stroke',
36
36
  paths: ['M9 9H17V17H9Z', 'M6 6H14V14'],
37
37
  },
38
+ 'action.chevron-up': {
39
+ kind: 'stroke',
40
+ paths: ['M7 14L12 9L17 14'],
41
+ },
42
+ 'action.chevron-left': {
43
+ kind: 'stroke',
44
+ paths: ['M14 7L9 12L14 17'],
45
+ },
46
+ 'action.minus': {
47
+ kind: 'stroke',
48
+ paths: ['M5 12H19'],
49
+ },
50
+ 'action.more': {
51
+ kind: 'stroke',
52
+ paths: ['M6 12H6.01', 'M12 12H12.01', 'M18 12H18.01'],
53
+ },
54
+ 'action.filter': {
55
+ kind: 'stroke',
56
+ paths: ['M4 6H20L14 13V19L10 17V13L4 6Z'],
57
+ },
58
+ 'action.calendar': {
59
+ kind: 'stroke',
60
+ paths: ['M4 8H20V20H4Z', 'M4 12H20', 'M8 4V8', 'M16 4V8'],
61
+ },
62
+ 'action.upload': {
63
+ kind: 'stroke',
64
+ paths: ['M12 16V4', 'M7 9L12 4L17 9', 'M4 16V20H20V16'],
65
+ },
66
+ 'action.download': {
67
+ kind: 'stroke',
68
+ paths: ['M12 4V16', 'M7 11L12 16L17 11', 'M4 20H20'],
69
+ },
70
+ 'action.sort': {
71
+ kind: 'stroke',
72
+ paths: ['M8 18V6', 'M5 9L8 6L11 9', 'M16 6V18', 'M13 15L16 18L19 15'],
73
+ },
74
+ 'action.sort-asc': {
75
+ kind: 'stroke',
76
+ paths: ['M8 18V6', 'M5 9L8 6L11 9', 'M15 18H21'],
77
+ },
78
+ 'action.sort-desc': {
79
+ kind: 'stroke',
80
+ paths: ['M8 6V18', 'M5 15L8 18L11 15', 'M15 6H21'],
81
+ },
82
+ 'action.external': {
83
+ kind: 'stroke',
84
+ paths: ['M14 4H20V10', 'M20 4L11 13', 'M18 14V20H4V6H10'],
85
+ },
86
+ 'action.arrow-right': {
87
+ kind: 'stroke',
88
+ paths: ['M4 12H20', 'M14 6L20 12L14 18'],
89
+ },
90
+ 'action.arrow-left': {
91
+ kind: 'stroke',
92
+ paths: ['M20 12H4', 'M10 6L4 12L10 18'],
93
+ },
94
+ 'action.trash': {
95
+ kind: 'stroke',
96
+ paths: ['M4 7H20', 'M9 7V4H15V7', 'M6 7L7 20H17L18 7', 'M10 11V16', 'M14 11V16'],
97
+ },
98
+ 'action.edit': {
99
+ kind: 'stroke',
100
+ paths: ['M4 20H8L19 9L15 5L4 16V20Z'],
101
+ },
102
+ 'action.refresh': {
103
+ kind: 'stroke',
104
+ paths: ['M20 12A8 8 0 1 1 17.5 6.5', 'M20 4V9H15'],
105
+ },
106
+ 'action.history': {
107
+ kind: 'stroke',
108
+ circles: [{ cx: 12, cy: 12, r: 8.5 }],
109
+ paths: ['M12 7V12L15.5 14'],
110
+ },
111
+ 'action.moon': {
112
+ kind: 'stroke',
113
+ paths: ['M20 14.5A8.5 8.5 0 0 1 9.5 4 8.5 8.5 0 1 0 20 14.5Z'],
114
+ },
115
+ 'action.sun': {
116
+ kind: 'stroke',
117
+ circles: [{ cx: 12, cy: 12, r: 4 }],
118
+ paths: ['M12 2V4', 'M12 20V22', 'M2 12H4', 'M20 12H22', 'M5 5L6.5 6.5', 'M17.5 17.5L19 19', 'M19 5L17.5 6.5', 'M6.5 17.5L5 19'],
119
+ },
120
+ 'action.monitor': {
121
+ kind: 'stroke',
122
+ paths: ['M4 5H20V17H4Z', 'M9 20H15', 'M12 17V20'],
123
+ },
124
+ 'action.search-document': {
125
+ kind: 'stroke',
126
+ paths: ['M5 4H15L19 8V20H5Z', 'M15 4V8H19'],
127
+ circles: [{ cx: 11, cy: 14, r: 2.5 }],
128
+ },
38
129
  'nav.home': {
39
130
  kind: 'stroke',
40
131
  paths: ['M4 10.5L12 4L20 10.5', 'M6 10V19H18V10', 'M10 19V13H14V19'],
package/src/registry.ts CHANGED
@@ -18,6 +18,25 @@ export const LEGACY_ICON_ALIASES: Record<string, string> = {
18
18
  search: 'action.search',
19
19
  'chevron-down': 'action.chevron-down',
20
20
  'chevron-right': 'action.chevron-right',
21
+ 'chevron-up': 'action.chevron-up',
22
+ 'chevron-left': 'action.chevron-left',
23
+ minus: 'action.minus',
24
+ more: 'action.more',
25
+ filter: 'action.filter',
26
+ calendar: 'action.calendar',
27
+ upload: 'action.upload',
28
+ download: 'action.download',
29
+ sort: 'action.sort',
30
+ external: 'action.external',
31
+ 'arrow-right': 'action.arrow-right',
32
+ 'arrow-left': 'action.arrow-left',
33
+ trash: 'action.trash',
34
+ edit: 'action.edit',
35
+ refresh: 'action.refresh',
36
+ history: 'action.history',
37
+ moon: 'action.moon',
38
+ sun: 'action.sun',
39
+ monitor: 'action.monitor',
21
40
  info: 'status.info',
22
41
  warning: 'status.warning',
23
42
  success: 'status.success',