@oneli8/react 1.0.0-beta.2 → 1.0.0-beta.4

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.
Files changed (51) hide show
  1. package/AGENTS.md +12 -0
  2. package/PRINCIPLES.md +48 -0
  3. package/README.md +61 -75
  4. package/ai-context.json +146 -0
  5. package/package.json +30 -24
  6. package/skills/oneli8-figma-to-code/SKILL.md +25 -0
  7. package/skills/oneli8-icons/SKILL.md +24 -0
  8. package/skills/oneli8-ui/SKILL.md +24 -0
  9. package/src/atoms/Icon.js +31 -29
  10. package/src/atoms/SelectionIndicator.js +43 -0
  11. package/src/foundations/geometry.js +72 -0
  12. package/src/foundations/icons.generated.d.ts +38 -0
  13. package/src/foundations/icons.generated.js +406 -0
  14. package/src/index.d.ts +167 -4
  15. package/src/index.js +9 -4
  16. package/src/molecules/Button.js +47 -18
  17. package/src/molecules/ChoiceItem.js +55 -0
  18. package/src/molecules/IconButton.js +31 -16
  19. package/src/molecules/SelectionOption.js +41 -0
  20. package/src/organisms/ChoiceGroup.js +78 -0
  21. package/src/styles/button.css +195 -0
  22. package/src/styles/choice-group.css +95 -0
  23. package/src/styles/choice-item.css +192 -0
  24. package/src/styles/gem.css +173 -0
  25. package/src/styles/icon-button.css +224 -0
  26. package/src/styles/icon.css +56 -0
  27. package/src/styles/selection-indicator.css +153 -0
  28. package/src/styles/selection-option.css +123 -0
  29. package/styles.css +12 -6
  30. package/src/Button.d.ts +0 -20
  31. package/src/Button.js +0 -1
  32. package/src/Icon.d.ts +0 -4
  33. package/src/Icon.js +0 -1
  34. package/src/IconButton.d.ts +0 -20
  35. package/src/IconButton.js +0 -1
  36. package/src/Link.d.ts +0 -16
  37. package/src/Link.js +0 -1
  38. package/src/atoms/AnchorControl.js +0 -7
  39. package/src/atoms/BusyIndicator.js +0 -6
  40. package/src/atoms/ButtonControl.js +0 -14
  41. package/src/atoms/IconFrame.js +0 -19
  42. package/src/atoms/Label.js +0 -5
  43. package/src/foundations/collection.js +0 -13
  44. package/src/foundations/runtime.js +0 -44
  45. package/src/molecules/Link.js +0 -14
  46. package/styles/accessibility.css +0 -1
  47. package/styles/button.css +0 -176
  48. package/styles/gem-control-focus.css +0 -33
  49. package/styles/icon-button.css +0 -42
  50. package/styles/icon-frame.css +0 -1
  51. package/styles/link.css +0 -20
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Framework free rules shared by every component. These are the parts of the
3
+ * system that are decisions rather than markup: which sizes exist, which
4
+ * combinations Figma approves, and which icon size a control carries.
5
+ */
6
+ import { OL8_ICONS } from './icons.generated.js';
7
+
8
+ /** Guard against an invented glyph name reaching a component. */
9
+ export const isOl8IconName = (name) => Object.hasOwn(OL8_ICONS, name);
10
+
11
+ export const OL8_BUTTON_VARIANTS = ['primary', 'secondary', 'quiet', 'destructive'];
12
+ export const OL8_BUTTON_SIZES = ['compact', 'standard', 'comfortable', 'large'];
13
+ export const OL8_MATERIALS = ['regular', 'gem'];
14
+ /** Gem is approved for Primary and Secondary only (Figma 100:3). */
15
+ export const GEM_VARIANTS = ['primary', 'secondary'];
16
+
17
+ export const OL8_ICON_BUTTON_VARIANTS = OL8_BUTTON_VARIANTS;
18
+ export const OL8_ICON_BUTTON_SIZES = OL8_BUTTON_SIZES;
19
+ export const OL8_ICON_BUTTON_SHAPES = ['rounded', 'circle'];
20
+
21
+ export const OL8_SELECTION_KINDS = ['checkbox', 'radio', 'switch'];
22
+ export const OL8_SELECTION_SIZES = ['compact', 'comfortable'];
23
+ export const OL8_SELECTION_STATES = {
24
+ checkbox: ['unchecked', 'checked', 'mixed'],
25
+ radio: ['unselected', 'selected'],
26
+ switch: ['off', 'on'],
27
+ };
28
+
29
+ export const OL8_CHOICE_KINDS = OL8_SELECTION_KINDS;
30
+ export const OL8_CHOICE_SIZES = OL8_BUTTON_SIZES;
31
+ export const OL8_OPTION_SIZES = ['standard', 'large'];
32
+ export const OL8_AGGREGATE = ['none', 'some', 'all'];
33
+
34
+ /** Compact and Standard take the 18px icon; Comfortable and Large take 24px. */
35
+ export const iconSizeForButton = (size) =>
36
+ size === 'comfortable' || size === 'large' ? 24 : 18;
37
+
38
+ /** Artwork sizes as BUILT in Figma: 18 / 18 / 24 / 24. */
39
+ export const artworkSizeForIconButton = iconSizeForButton;
40
+
41
+ /** The molecule's four sizes map onto the atom's two. */
42
+ export const indicatorSizeFor = (size) =>
43
+ size === 'comfortable' || size === 'large' ? 'comfortable' : 'compact';
44
+
45
+ /** Figma's Selection axis, derived from native input state. */
46
+ export function selectionStateFor(kind, { checked = false, mixed = false } = {}) {
47
+ if (kind === 'checkbox') return mixed ? 'mixed' : checked ? 'checked' : 'unchecked';
48
+ if (kind === 'radio') return checked ? 'selected' : 'unselected';
49
+ return checked ? 'on' : 'off';
50
+ }
51
+
52
+ /** Disabled children are excluded from the tally. */
53
+ export function computeAggregate(children) {
54
+ const boxes = [...children].filter((c) => !c.disabled);
55
+ if (boxes.length === 0) return 'none';
56
+ const checked = boxes.filter((c) => c.checked).length;
57
+ if (checked === 0) return 'none';
58
+ return checked === boxes.length ? 'all' : 'some';
59
+ }
60
+
61
+ export function assertVariant(variant, size, material) {
62
+ if (!OL8_BUTTON_VARIANTS.includes(variant)) throw new Error(`[ol8] unknown button variant "${variant}"`);
63
+ if (!OL8_BUTTON_SIZES.includes(size)) throw new Error(`[ol8] unknown button size "${size}"`);
64
+ if (!OL8_MATERIALS.includes(material)) throw new Error(`[ol8] unknown material "${material}"`);
65
+ if (material === 'gem' && !GEM_VARIANTS.includes(variant)) {
66
+ throw new Error(`[ol8] Gem has no approved treatment for "${variant}" — Figma 100:3 says Quiet and Destructive use the regular material.`);
67
+ }
68
+ }
69
+
70
+ let seq = 0;
71
+ /** Stable within a render pass; React 18+ callers should pass their own useId. */
72
+ export const autoId = (prefix) => `${prefix}-${(seq++).toString(36)}${Math.random().toString(36).slice(2, 7)}`;
@@ -0,0 +1,38 @@
1
+ // GENERATED by packages/sync/src/build-icons.mjs — do not edit by hand.
2
+ // Source: Figma "Oneli8 Design System — 1.0.0-beta.1", page Iconography,
3
+ // frame "Icon Library / Masters" (426:55). Re-run `npm run sync:icons`.
4
+
5
+ export interface Ol8IconEntry {
6
+ /** Figma category segment: "Icon / <Category> / <Name>". */
7
+ readonly category: 'action' | 'navigation' | 'status' | 'selection';
8
+ /** Node id of the 24px master in the Figma source file. */
9
+ readonly figmaNode: string;
10
+ /** Semantic registry controls RTL mirroring (per Iconography documentation). */
11
+ readonly mirrorInRTL: boolean;
12
+ /** The ink Figma baked into the master, discarded in favour of currentColor. */
13
+ readonly sourceInk: string | null;
14
+ /** Drawing instructions in the canonical 24-unit source space. */
15
+ readonly body: string;
16
+ }
17
+
18
+ export declare const OL8_ICON_VIEWBOX: '0 0 24 24';
19
+ export declare const OL8_ICONS: {
20
+ readonly "add": Ol8IconEntry;
21
+ readonly "caution": Ol8IconEntry;
22
+ readonly "check": Ol8IconEntry;
23
+ readonly "chevron-down": Ol8IconEntry;
24
+ readonly "chevron-up": Ol8IconEntry;
25
+ readonly "clear": Ol8IconEntry;
26
+ readonly "close": Ol8IconEntry;
27
+ readonly "critical": Ol8IconEntry;
28
+ readonly "forward": Ol8IconEntry;
29
+ readonly "informative": Ol8IconEntry;
30
+ readonly "loading": Ol8IconEntry;
31
+ readonly "mixed": Ol8IconEntry;
32
+ readonly "positive": Ol8IconEntry;
33
+ readonly "search": Ol8IconEntry;
34
+ readonly "selected-dot": Ol8IconEntry;
35
+ readonly "visibility-closed": Ol8IconEntry;
36
+ readonly "visibility-open": Ol8IconEntry;
37
+ };
38
+ export type Ol8IconName = keyof typeof OL8_ICONS;
@@ -0,0 +1,406 @@
1
+ // GENERATED by packages/sync/src/build-icons.mjs — do not edit by hand.
2
+ // Source: Figma "Oneli8 Design System — 1.0.0-beta.1", page Iconography,
3
+ // frame "Icon Library / Masters" (426:55). Re-run `npm run sync:icons`.
4
+
5
+ export const OL8_ICON_VIEWBOX = '0 0 24 24';
6
+
7
+ /** @type {Record<string, import('./icons.generated.js').Ol8IconEntry>} */
8
+ export const OL8_ICONS = {
9
+ "add": {
10
+ "category": "action",
11
+ "figmaNode": "418:14",
12
+ "mirrorInRTL": false,
13
+ "sourceInk": "#151817",
14
+ "body": "<path id=\"glyph-path\" d=\"M12 5V19M5 12H19\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
15
+ "elements": [
16
+ {
17
+ "tag": "path",
18
+ "attrs": {
19
+ "d": "M12 5V19M5 12H19",
20
+ "stroke": "currentColor",
21
+ "strokeWidth": "1.8",
22
+ "strokeLinecap": "round",
23
+ "strokeLinejoin": "round"
24
+ }
25
+ }
26
+ ]
27
+ },
28
+ "caution": {
29
+ "category": "status",
30
+ "figmaNode": "440:4",
31
+ "mirrorInRTL": false,
32
+ "sourceInk": "#151817",
33
+ "body": "<path id=\"Status Ring\" d=\"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Caution Stem\" d=\"M12 7V13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Caution Dot\" d=\"M12 17.6C12.5523 17.6 13 17.1523 13 16.6C13 16.0477 12.5523 15.6 12 15.6C11.4477 15.6 11 16.0477 11 16.6C11 17.1523 11.4477 17.6 12 17.6Z\" fill=\"currentColor\"/>",
34
+ "elements": [
35
+ {
36
+ "tag": "path",
37
+ "attrs": {
38
+ "d": "M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z",
39
+ "stroke": "currentColor",
40
+ "strokeWidth": "1.8",
41
+ "strokeLinecap": "round",
42
+ "strokeLinejoin": "round"
43
+ }
44
+ },
45
+ {
46
+ "tag": "path",
47
+ "attrs": {
48
+ "d": "M12 7V13",
49
+ "stroke": "currentColor",
50
+ "strokeWidth": "1.8",
51
+ "strokeLinecap": "round",
52
+ "strokeLinejoin": "round"
53
+ }
54
+ },
55
+ {
56
+ "tag": "path",
57
+ "attrs": {
58
+ "d": "M12 17.6C12.5523 17.6 13 17.1523 13 16.6C13 16.0477 12.5523 15.6 12 15.6C11.4477 15.6 11 16.0477 11 16.6C11 17.1523 11.4477 17.6 12 17.6Z",
59
+ "fill": "currentColor"
60
+ }
61
+ }
62
+ ]
63
+ },
64
+ "check": {
65
+ "category": "selection",
66
+ "figmaNode": "391:4",
67
+ "mirrorInRTL": false,
68
+ "sourceInk": "#1a2a59",
69
+ "body": "<path id=\"Check Mark\" d=\"M6.9 12.15L10.2 15.45L17.1 8.55\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
70
+ "elements": [
71
+ {
72
+ "tag": "path",
73
+ "attrs": {
74
+ "d": "M6.9 12.15L10.2 15.45L17.1 8.55",
75
+ "stroke": "currentColor",
76
+ "strokeWidth": "1.8",
77
+ "strokeLinecap": "round",
78
+ "strokeLinejoin": "round"
79
+ }
80
+ }
81
+ ]
82
+ },
83
+ "chevron-down": {
84
+ "category": "navigation",
85
+ "figmaNode": "521:106",
86
+ "mirrorInRTL": false,
87
+ "sourceInk": "#151817",
88
+ "body": "<path id=\"glyph-path\" d=\"M5 8.5L12 15.5L19 8.5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
89
+ "elements": [
90
+ {
91
+ "tag": "path",
92
+ "attrs": {
93
+ "d": "M5 8.5L12 15.5L19 8.5",
94
+ "stroke": "currentColor",
95
+ "strokeWidth": "1.8",
96
+ "strokeLinecap": "round",
97
+ "strokeLinejoin": "round"
98
+ }
99
+ }
100
+ ]
101
+ },
102
+ "chevron-up": {
103
+ "category": "navigation",
104
+ "figmaNode": "521:108",
105
+ "mirrorInRTL": false,
106
+ "sourceInk": "#151817",
107
+ "body": "<path id=\"glyph-path\" d=\"M5 15.5L12 8.5L19 15.5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
108
+ "elements": [
109
+ {
110
+ "tag": "path",
111
+ "attrs": {
112
+ "d": "M5 15.5L12 8.5L19 15.5",
113
+ "stroke": "currentColor",
114
+ "strokeWidth": "1.8",
115
+ "strokeLinecap": "round",
116
+ "strokeLinejoin": "round"
117
+ }
118
+ }
119
+ ]
120
+ },
121
+ "clear": {
122
+ "category": "action",
123
+ "figmaNode": "557:4",
124
+ "mirrorInRTL": false,
125
+ "sourceInk": "#151817",
126
+ "body": "<path id=\"glyph-path\" d=\"M3 3L17 17M17 3L3 17\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
127
+ "elements": [
128
+ {
129
+ "tag": "path",
130
+ "attrs": {
131
+ "d": "M3 3L17 17M17 3L3 17",
132
+ "stroke": "currentColor",
133
+ "strokeWidth": "1.8",
134
+ "strokeLinecap": "round",
135
+ "strokeLinejoin": "round"
136
+ }
137
+ }
138
+ ]
139
+ },
140
+ "close": {
141
+ "category": "action",
142
+ "figmaNode": "894:123",
143
+ "mirrorInRTL": false,
144
+ "sourceInk": "#151817",
145
+ "body": "<path id=\"glyph-path\" d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
146
+ "elements": [
147
+ {
148
+ "tag": "path",
149
+ "attrs": {
150
+ "d": "M6 6L18 18M18 6L6 18",
151
+ "stroke": "currentColor",
152
+ "strokeWidth": "1.8",
153
+ "strokeLinecap": "round",
154
+ "strokeLinejoin": "round"
155
+ }
156
+ }
157
+ ]
158
+ },
159
+ "critical": {
160
+ "category": "status",
161
+ "figmaNode": "418:18",
162
+ "mirrorInRTL": false,
163
+ "sourceInk": "#151817",
164
+ "body": "<path id=\"Status Ring\" d=\"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Critical Mark\" d=\"M9 9L15 15M15 9L9 15\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
165
+ "elements": [
166
+ {
167
+ "tag": "path",
168
+ "attrs": {
169
+ "d": "M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z",
170
+ "stroke": "currentColor",
171
+ "strokeWidth": "1.8",
172
+ "strokeLinecap": "round",
173
+ "strokeLinejoin": "round"
174
+ }
175
+ },
176
+ {
177
+ "tag": "path",
178
+ "attrs": {
179
+ "d": "M9 9L15 15M15 9L9 15",
180
+ "stroke": "currentColor",
181
+ "strokeWidth": "1.8",
182
+ "strokeLinecap": "round",
183
+ "strokeLinejoin": "round"
184
+ }
185
+ }
186
+ ]
187
+ },
188
+ "forward": {
189
+ "category": "navigation",
190
+ "figmaNode": "418:16",
191
+ "mirrorInRTL": true,
192
+ "sourceInk": "#151817",
193
+ "body": "<path id=\"artwork\" d=\"M3 12H21M15 18L21 12L15 6\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
194
+ "elements": [
195
+ {
196
+ "tag": "path",
197
+ "attrs": {
198
+ "d": "M3 12H21M15 18L21 12L15 6",
199
+ "stroke": "currentColor",
200
+ "strokeWidth": "1.8",
201
+ "strokeLinecap": "round",
202
+ "strokeLinejoin": "round"
203
+ }
204
+ }
205
+ ]
206
+ },
207
+ "informative": {
208
+ "category": "status",
209
+ "figmaNode": "440:11",
210
+ "mirrorInRTL": false,
211
+ "sourceInk": "#151817",
212
+ "body": "<path id=\"Status Ring\" d=\"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Information Stem\" d=\"M12 11V16\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Information Dot\" d=\"M12 8.6C12.5523 8.6 13 8.15228 13 7.6C13 7.04771 12.5523 6.6 12 6.6C11.4477 6.6 11 7.04771 11 7.6C11 8.15228 11.4477 8.6 12 8.6Z\" fill=\"currentColor\"/>",
213
+ "elements": [
214
+ {
215
+ "tag": "path",
216
+ "attrs": {
217
+ "d": "M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z",
218
+ "stroke": "currentColor",
219
+ "strokeWidth": "1.8",
220
+ "strokeLinecap": "round",
221
+ "strokeLinejoin": "round"
222
+ }
223
+ },
224
+ {
225
+ "tag": "path",
226
+ "attrs": {
227
+ "d": "M12 11V16",
228
+ "stroke": "currentColor",
229
+ "strokeWidth": "1.8",
230
+ "strokeLinecap": "round",
231
+ "strokeLinejoin": "round"
232
+ }
233
+ },
234
+ {
235
+ "tag": "path",
236
+ "attrs": {
237
+ "d": "M12 8.6C12.5523 8.6 13 8.15228 13 7.6C13 7.04771 12.5523 6.6 12 6.6C11.4477 6.6 11 7.04771 11 7.6C11 8.15228 11.4477 8.6 12 8.6Z",
238
+ "fill": "currentColor"
239
+ }
240
+ }
241
+ ]
242
+ },
243
+ "loading": {
244
+ "category": "status",
245
+ "figmaNode": "440:2",
246
+ "mirrorInRTL": false,
247
+ "sourceInk": "#151817",
248
+ "body": "<path id=\"glyph-path\" d=\"M12 3C14.0823 2.99817 16.1008 3.71843 17.7116 5.03806C19.3223 6.35769 20.4257 8.19503 20.8336 10.237C21.2415 12.2789 20.9287 14.3992 19.9485 16.2363C18.9684 18.0735 17.3815 19.514 15.4583 20.3123C13.5351 21.1106 11.3946 21.2174 9.40156 20.6143C7.40849 20.0113 5.68619 18.7358 4.52813 17.0053C3.37008 15.2747 2.84794 13.1961 3.05068 11.1237C3.25343 9.05131 4.16851 7.11332 5.64 5.64\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
249
+ "elements": [
250
+ {
251
+ "tag": "path",
252
+ "attrs": {
253
+ "d": "M12 3C14.0823 2.99817 16.1008 3.71843 17.7116 5.03806C19.3223 6.35769 20.4257 8.19503 20.8336 10.237C21.2415 12.2789 20.9287 14.3992 19.9485 16.2363C18.9684 18.0735 17.3815 19.514 15.4583 20.3123C13.5351 21.1106 11.3946 21.2174 9.40156 20.6143C7.40849 20.0113 5.68619 18.7358 4.52813 17.0053C3.37008 15.2747 2.84794 13.1961 3.05068 11.1237C3.25343 9.05131 4.16851 7.11332 5.64 5.64",
254
+ "stroke": "currentColor",
255
+ "strokeWidth": "1.8",
256
+ "strokeLinecap": "round",
257
+ "strokeLinejoin": "round"
258
+ }
259
+ }
260
+ ]
261
+ },
262
+ "mixed": {
263
+ "category": "selection",
264
+ "figmaNode": "391:9",
265
+ "mirrorInRTL": false,
266
+ "sourceInk": "#151817",
267
+ "body": "<rect id=\"Mixed Mark\" x=\"7.5\" y=\"11.1\" width=\"9\" height=\"1.8\" rx=\"0.9\" fill=\"currentColor\"/>",
268
+ "elements": [
269
+ {
270
+ "tag": "rect",
271
+ "attrs": {
272
+ "x": "7.5",
273
+ "y": "11.1",
274
+ "width": "9",
275
+ "height": "1.8",
276
+ "rx": "0.9",
277
+ "fill": "currentColor"
278
+ }
279
+ }
280
+ ]
281
+ },
282
+ "positive": {
283
+ "category": "status",
284
+ "figmaNode": "440:8",
285
+ "mirrorInRTL": false,
286
+ "sourceInk": "#151817",
287
+ "body": "<path id=\"Status Ring\" d=\"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Positive Mark\" d=\"M7.60002 12.2L10.6 15.2L16.6 9.2\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
288
+ "elements": [
289
+ {
290
+ "tag": "path",
291
+ "attrs": {
292
+ "d": "M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z",
293
+ "stroke": "currentColor",
294
+ "strokeWidth": "1.8",
295
+ "strokeLinecap": "round",
296
+ "strokeLinejoin": "round"
297
+ }
298
+ },
299
+ {
300
+ "tag": "path",
301
+ "attrs": {
302
+ "d": "M7.60002 12.2L10.6 15.2L16.6 9.2",
303
+ "stroke": "currentColor",
304
+ "strokeWidth": "1.8",
305
+ "strokeLinecap": "round",
306
+ "strokeLinejoin": "round"
307
+ }
308
+ }
309
+ ]
310
+ },
311
+ "search": {
312
+ "category": "action",
313
+ "figmaNode": "557:2",
314
+ "mirrorInRTL": false,
315
+ "sourceInk": "#151817",
316
+ "body": "<path id=\"glyph-path\" d=\"M15 15L20 20M10 3C6.134 3 3 6.134 3 10C3 13.866 6.134 17 10 17C13.866 17 17 13.866 17 10C17 6.134 13.866 3 10 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
317
+ "elements": [
318
+ {
319
+ "tag": "path",
320
+ "attrs": {
321
+ "d": "M15 15L20 20M10 3C6.134 3 3 6.134 3 10C3 13.866 6.134 17 10 17C13.866 17 17 13.866 17 10C17 6.134 13.866 3 10 3Z",
322
+ "stroke": "currentColor",
323
+ "strokeWidth": "1.8",
324
+ "strokeLinecap": "round",
325
+ "strokeLinejoin": "round"
326
+ }
327
+ }
328
+ ]
329
+ },
330
+ "selected-dot": {
331
+ "category": "selection",
332
+ "figmaNode": "391:14",
333
+ "mirrorInRTL": false,
334
+ "sourceInk": "#e2e9ff",
335
+ "body": "<circle id=\"Selected Dot\" cx=\"12\" cy=\"12\" r=\"6\" fill=\"currentColor\"/>",
336
+ "elements": [
337
+ {
338
+ "tag": "circle",
339
+ "attrs": {
340
+ "cx": "12",
341
+ "cy": "12",
342
+ "r": "6",
343
+ "fill": "currentColor"
344
+ }
345
+ }
346
+ ]
347
+ },
348
+ "visibility-closed": {
349
+ "category": "action",
350
+ "figmaNode": "440:15",
351
+ "mirrorInRTL": false,
352
+ "sourceInk": "#151817",
353
+ "body": "<path id=\"Closed Lid\" d=\"M4.5 10.5C6.75 13.5 9.25 15 12 15C14.75 15 17.25 13.5 19.5 10.5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Lashes\" d=\"M6.75 13.05L5.4 15M9.75 14.55L9.3 16.8M14.25 14.55L14.7 16.8M17.25 13.05L18.6 15\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
354
+ "elements": [
355
+ {
356
+ "tag": "path",
357
+ "attrs": {
358
+ "d": "M4.5 10.5C6.75 13.5 9.25 15 12 15C14.75 15 17.25 13.5 19.5 10.5",
359
+ "stroke": "currentColor",
360
+ "strokeWidth": "1.8",
361
+ "strokeLinecap": "round",
362
+ "strokeLinejoin": "round"
363
+ }
364
+ },
365
+ {
366
+ "tag": "path",
367
+ "attrs": {
368
+ "d": "M6.75 13.05L5.4 15M9.75 14.55L9.3 16.8M14.25 14.55L14.7 16.8M17.25 13.05L18.6 15",
369
+ "stroke": "currentColor",
370
+ "strokeWidth": "1.8",
371
+ "strokeLinecap": "round",
372
+ "strokeLinejoin": "round"
373
+ }
374
+ }
375
+ ]
376
+ },
377
+ "visibility-open": {
378
+ "category": "action",
379
+ "figmaNode": "418:21",
380
+ "mirrorInRTL": false,
381
+ "sourceInk": "#151817",
382
+ "body": "<path id=\"Eye Contour\" d=\"M3 12C5.25 8.25 8.25 6.375 12 6.375C15.75 6.375 18.75 8.25 21 12C18.75 15.75 15.75 17.625 12 17.625C8.25 17.625 5.25 15.75 3 12Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"Pupil\" d=\"M12 14.625C13.4497 14.625 14.625 13.4497 14.625 12C14.625 10.5503 13.4497 9.375 12 9.375C10.5503 9.375 9.375 10.5503 9.375 12C9.375 13.4497 10.5503 14.625 12 14.625Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
383
+ "elements": [
384
+ {
385
+ "tag": "path",
386
+ "attrs": {
387
+ "d": "M3 12C5.25 8.25 8.25 6.375 12 6.375C15.75 6.375 18.75 8.25 21 12C18.75 15.75 15.75 17.625 12 17.625C8.25 17.625 5.25 15.75 3 12Z",
388
+ "stroke": "currentColor",
389
+ "strokeWidth": "1.8",
390
+ "strokeLinecap": "round",
391
+ "strokeLinejoin": "round"
392
+ }
393
+ },
394
+ {
395
+ "tag": "path",
396
+ "attrs": {
397
+ "d": "M12 14.625C13.4497 14.625 14.625 13.4497 14.625 12C14.625 10.5503 13.4497 9.375 12 9.375C10.5503 9.375 9.375 10.5503 9.375 12C9.375 13.4497 10.5503 14.625 12 14.625Z",
398
+ "stroke": "currentColor",
399
+ "strokeWidth": "1.8",
400
+ "strokeLinecap": "round",
401
+ "strokeLinejoin": "round"
402
+ }
403
+ }
404
+ ]
405
+ }
406
+ };