@oneli8/react 1.0.0-beta.10 → 1.0.0-beta.11

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/ai-context.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$comment": "GENERATED by packages/sync/src/build-package-context.mjs — do not edit.",
3
3
  "system": "OneLi8",
4
- "version": "1.0.0-beta.10",
4
+ "version": "1.0.0-beta.11",
5
5
  "meaning": "OneLi8 means One Light.",
6
6
  "foundations": {
7
7
  "package": "@oneli8/tokens",
@@ -245,6 +245,18 @@
245
245
  "ol8-icon-btn": [
246
246
  "primary",
247
247
  "secondary"
248
+ ],
249
+ "ol8-field": [
250
+ "outline",
251
+ "filled"
252
+ ],
253
+ "ol8-choice": [
254
+ "checkbox",
255
+ "radio",
256
+ "switch"
257
+ ],
258
+ "ol8-gem": [
259
+ "generic surface"
248
260
  ]
249
261
  }
250
262
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneli8/react",
3
- "version": "1.0.0-beta.10",
3
+ "version": "1.0.0-beta.11",
4
4
  "description": "OneLi8 Design System for React. Components, design tokens, the Gem material, and the design language they follow.",
5
5
  "keywords": [
6
6
  "react",
@@ -52,7 +52,7 @@
52
52
  "NOTICE"
53
53
  ],
54
54
  "dependencies": {
55
- "@oneli8/tokens": "1.0.0-beta.10"
55
+ "@oneli8/tokens": "1.0.0-beta.11"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "react": ">=18"
@@ -32,6 +32,12 @@ text. That means every glyph AND the unselected control boundary and any icon, n
32
32
  the label alone. Disabled takes material.gem.color.quiet.contentDisabled, one
33
33
  whitish grey shared by text and control geometry, and no halo.
34
34
 
35
+ On a button the label and the icon always take the same value: --_fg and --_ink are set
36
+ together, in every state. Disabled on Gem takes material.gem.color.quiet.contentDisabled for
37
+ both, never the regular action disabled-content colours, which are dark on a surface whose
38
+ enabled content is near-white. Loading is an ACTIVE state: it keeps the lit bezel and the gem
39
+ content ink, and it matches :disabled only because inert = disabled || loading.
40
+
35
41
  material.gem.color.quiet.stabilizedFace is the local content plane on app chrome,
36
42
  including the filled Gem text field, Select and Combobox. Its content is ordinary
37
43
  color.text.* and takes no halo. Selected and mixed indicators are never restyled
@@ -1,5 +1,5 @@
1
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,
2
+ // Source: Figma "OneLi8 Design System — 1.0.0-beta.1", page Iconography,
3
3
  // frame "Icon Library / Masters" (426:55). Re-run `npm run sync:icons`.
4
4
 
5
5
  export interface Ol8IconEntry {
@@ -29,6 +29,10 @@ export declare const OL8_ICONS: {
29
29
  readonly "close": Ol8IconEntry;
30
30
  readonly "copy": Ol8IconEntry;
31
31
  readonly "critical": Ol8IconEntry;
32
+ readonly "figure-running": Ol8IconEntry;
33
+ readonly "figure-sprinting": Ol8IconEntry;
34
+ readonly "figure-standing": Ol8IconEntry;
35
+ readonly "figure-walking": Ol8IconEntry;
32
36
  readonly "forward": Ol8IconEntry;
33
37
  readonly "heart": Ol8IconEntry;
34
38
  readonly "informative": Ol8IconEntry;
@@ -1,5 +1,5 @@
1
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,
2
+ // Source: Figma "OneLi8 Design System — 1.0.0-beta.1", page Iconography,
3
3
  // frame "Icon Library / Masters" (426:55). Re-run `npm run sync:icons`.
4
4
 
5
5
  export const OL8_ICON_VIEWBOX = '0 0 24 24';
@@ -204,6 +204,202 @@ export const OL8_ICONS = {
204
204
  }
205
205
  ]
206
206
  },
207
+ "figure-running": {
208
+ "category": "locomotion",
209
+ "figmaNode": null,
210
+ "mirrorInRTL": true,
211
+ "candidate": true,
212
+ "sourceInk": "#151817",
213
+ "body": "<circle id=\"head\" cx=\"10.5\" cy=\"3.9\" r=\"2.1\" fill=\"currentColor\"/><path id=\"torso\" d=\"M10.5 6L12.3 12\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"arms\" d=\"M7.8 11.1L11.1 9M14.4 7.5L12 9.3\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"legs\" d=\"M7.5 18.6L12.3 12L16.2 17.4\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
214
+ "elements": [
215
+ {
216
+ "tag": "circle",
217
+ "attrs": {
218
+ "cx": "10.5",
219
+ "cy": "3.9",
220
+ "r": "2.1",
221
+ "fill": "currentColor"
222
+ }
223
+ },
224
+ {
225
+ "tag": "path",
226
+ "attrs": {
227
+ "d": "M10.5 6L12.3 12",
228
+ "stroke": "currentColor",
229
+ "strokeWidth": "1.8",
230
+ "strokeLinecap": "round",
231
+ "strokeLinejoin": "round"
232
+ }
233
+ },
234
+ {
235
+ "tag": "path",
236
+ "attrs": {
237
+ "d": "M7.8 11.1L11.1 9M14.4 7.5L12 9.3",
238
+ "stroke": "currentColor",
239
+ "strokeWidth": "1.8",
240
+ "strokeLinecap": "round",
241
+ "strokeLinejoin": "round"
242
+ }
243
+ },
244
+ {
245
+ "tag": "path",
246
+ "attrs": {
247
+ "d": "M7.5 18.6L12.3 12L16.2 17.4",
248
+ "stroke": "currentColor",
249
+ "strokeWidth": "1.8",
250
+ "strokeLinecap": "round",
251
+ "strokeLinejoin": "round"
252
+ }
253
+ }
254
+ ]
255
+ },
256
+ "figure-sprinting": {
257
+ "category": "locomotion",
258
+ "figmaNode": null,
259
+ "mirrorInRTL": true,
260
+ "candidate": true,
261
+ "sourceInk": "#151817",
262
+ "body": "<circle id=\"head\" cx=\"9.9\" cy=\"4.2\" r=\"2.1\" fill=\"currentColor\"/><path id=\"torso\" d=\"M9.9 6.3L12.6 11.7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"arms\" d=\"M6.9 10.2L10.5 9M15.6 6.6L12 9.3\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"legs\" d=\"M6 17.7L12.6 11.7L17.1 16.2\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
263
+ "elements": [
264
+ {
265
+ "tag": "circle",
266
+ "attrs": {
267
+ "cx": "9.9",
268
+ "cy": "4.2",
269
+ "r": "2.1",
270
+ "fill": "currentColor"
271
+ }
272
+ },
273
+ {
274
+ "tag": "path",
275
+ "attrs": {
276
+ "d": "M9.9 6.3L12.6 11.7",
277
+ "stroke": "currentColor",
278
+ "strokeWidth": "1.8",
279
+ "strokeLinecap": "round",
280
+ "strokeLinejoin": "round"
281
+ }
282
+ },
283
+ {
284
+ "tag": "path",
285
+ "attrs": {
286
+ "d": "M6.9 10.2L10.5 9M15.6 6.6L12 9.3",
287
+ "stroke": "currentColor",
288
+ "strokeWidth": "1.8",
289
+ "strokeLinecap": "round",
290
+ "strokeLinejoin": "round"
291
+ }
292
+ },
293
+ {
294
+ "tag": "path",
295
+ "attrs": {
296
+ "d": "M6 17.7L12.6 11.7L17.1 16.2",
297
+ "stroke": "currentColor",
298
+ "strokeWidth": "1.8",
299
+ "strokeLinecap": "round",
300
+ "strokeLinejoin": "round"
301
+ }
302
+ }
303
+ ]
304
+ },
305
+ "figure-standing": {
306
+ "category": "locomotion",
307
+ "figmaNode": null,
308
+ "mirrorInRTL": false,
309
+ "candidate": true,
310
+ "sourceInk": "#151817",
311
+ "body": "<circle id=\"head\" cx=\"12\" cy=\"3.6\" r=\"2.1\" fill=\"currentColor\"/><path id=\"torso\" d=\"M12 5.7V12.6\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"arms\" d=\"M9.9 12.3L11.4 9M14.1 12.3L12.6 9\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"legs\" d=\"M11.1 19.5L12 12.6L12.9 19.5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
312
+ "elements": [
313
+ {
314
+ "tag": "circle",
315
+ "attrs": {
316
+ "cx": "12",
317
+ "cy": "3.6",
318
+ "r": "2.1",
319
+ "fill": "currentColor"
320
+ }
321
+ },
322
+ {
323
+ "tag": "path",
324
+ "attrs": {
325
+ "d": "M12 5.7V12.6",
326
+ "stroke": "currentColor",
327
+ "strokeWidth": "1.8",
328
+ "strokeLinecap": "round",
329
+ "strokeLinejoin": "round"
330
+ }
331
+ },
332
+ {
333
+ "tag": "path",
334
+ "attrs": {
335
+ "d": "M9.9 12.3L11.4 9M14.1 12.3L12.6 9",
336
+ "stroke": "currentColor",
337
+ "strokeWidth": "1.8",
338
+ "strokeLinecap": "round",
339
+ "strokeLinejoin": "round"
340
+ }
341
+ },
342
+ {
343
+ "tag": "path",
344
+ "attrs": {
345
+ "d": "M11.1 19.5L12 12.6L12.9 19.5",
346
+ "stroke": "currentColor",
347
+ "strokeWidth": "1.8",
348
+ "strokeLinecap": "round",
349
+ "strokeLinejoin": "round"
350
+ }
351
+ }
352
+ ]
353
+ },
354
+ "figure-walking": {
355
+ "category": "locomotion",
356
+ "figmaNode": null,
357
+ "mirrorInRTL": true,
358
+ "candidate": true,
359
+ "sourceInk": "#151817",
360
+ "body": "<circle id=\"head\" cx=\"11.4\" cy=\"3.6\" r=\"2.1\" fill=\"currentColor\"/><path id=\"torso\" d=\"M11.4 5.7L12 12.3\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"arms\" d=\"M9.3 11.7L11.1 9M14.4 11.1L12.3 9\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path id=\"legs\" d=\"M9.3 19.5L12 12.3L14.7 18.9\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
361
+ "elements": [
362
+ {
363
+ "tag": "circle",
364
+ "attrs": {
365
+ "cx": "11.4",
366
+ "cy": "3.6",
367
+ "r": "2.1",
368
+ "fill": "currentColor"
369
+ }
370
+ },
371
+ {
372
+ "tag": "path",
373
+ "attrs": {
374
+ "d": "M11.4 5.7L12 12.3",
375
+ "stroke": "currentColor",
376
+ "strokeWidth": "1.8",
377
+ "strokeLinecap": "round",
378
+ "strokeLinejoin": "round"
379
+ }
380
+ },
381
+ {
382
+ "tag": "path",
383
+ "attrs": {
384
+ "d": "M9.3 11.7L11.1 9M14.4 11.1L12.3 9",
385
+ "stroke": "currentColor",
386
+ "strokeWidth": "1.8",
387
+ "strokeLinecap": "round",
388
+ "strokeLinejoin": "round"
389
+ }
390
+ },
391
+ {
392
+ "tag": "path",
393
+ "attrs": {
394
+ "d": "M9.3 19.5L12 12.3L14.7 18.9",
395
+ "stroke": "currentColor",
396
+ "strokeWidth": "1.8",
397
+ "strokeLinecap": "round",
398
+ "strokeLinejoin": "round"
399
+ }
400
+ }
401
+ ]
402
+ },
207
403
  "forward": {
208
404
  "category": "navigation",
209
405
  "figmaNode": "418:16",
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/button/button.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Button
4
+ * OneLi8 · Button
5
5
  * Figma: section "Button" (1034:9968) — Primary 15:823, Secondary 15:824,
6
6
  * Quiet 15:825, Destructive 15:826. 4 families × 4 sizes × 6 states.
7
7
  *
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/choice-chip/choice-chip.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Choice Chip (MOLECULE) — the Soft Hexagon
4
+ * OneLi8 · Choice Chip (MOLECULE) — the Soft Hexagon
5
5
  * Figma: Select and Combobox / Choice Chip / Soft Hexagon 636:847 (8 variants)
6
6
  *
7
7
  * GEOMETRY, read from all four sizes in Figma:
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/choice-group/choice-group.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Choice Group (ORGANISM)
4
+ * OneLi8 · Choice Group (ORGANISM)
5
5
  * Figma: Documentation / Organism / Choice Group
6
6
  * Checkbox Hierarchy 273:603 Aggregate = None | Some | All
7
7
  * Radio Group 859:5180 Behavior = Safe Default | No Default |
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/choice-item/choice-item.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Choice Item (MOLECULE)
4
+ * OneLi8 · Choice Item (MOLECULE)
5
5
  * Figma: Documentation / Molecule / Choice Item
6
6
  * Checkbox 252:301 (24 variants) · Radio 331:1309 (16) · Switch 825:1591 (16)
7
7
  *
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/choice-picker/choice-picker.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Choice Picker (ORGANISM)
4
+ * OneLi8 · Choice Picker (ORGANISM)
5
5
  * Figma: Organism / Choice Picker / Soft Hexagon 906:2898 (16 variants)
6
6
  *
7
7
  * Three parts stacked twelve apart: a search field, a wrapping matrix of chips,
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/combobox/combobox.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Combobox (ORGANISM)
4
+ * OneLi8 · Combobox (ORGANISM)
5
5
  * Figma: Organism / Combobox 883:2159 — "Reuses approved Text Field, Selection
6
6
  * Popup and governed icon atoms."
7
7
  *
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/form-message/form-message.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Form Message (MOLECULE)
4
+ * OneLi8 · Form Message (MOLECULE)
5
5
  * Figma: Form Message 177:13, five tones.
6
6
  *
7
7
  * Anatomy read from Figma: a horizontal row, gap Component / Text Field / Gap /
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/materials/gem/gem.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Gem material adapter
4
+ * OneLi8 · Gem material adapter
5
5
  * Figma: section "Gem Button" (1034:9969) — 144 components across
6
6
  * Button/Primary/Gem 100:3, Button/Secondary/Gem 100:208,
7
7
  * Icon Button ±Circle Primary/Secondary Gem 102:78, 102:151, 119:202, 119:299.
@@ -228,27 +228,149 @@
228
228
  }
229
229
  /* Disabled resolves to the opaque equivalent, which is the same answer Reduced
230
230
  Transparency gives. */
231
+ /* DISABLED IS A STATE, NOT A MATERIAL CHANGE.
232
+ This used to swap the face for quiet.opaqueEquivalent and hide both painted
233
+ layers, so a disabled Gem field stopped being glass and became a solid slab.
234
+ That mirrored the Figma source faithfully and was wrong in both places:
235
+ opaqueEquivalent is the answer to prefers-reduced-transparency, a user
236
+ preference, not to a component state. Gem is worn, so an opaque disabled
237
+ field punches a solid hole in the wearer's view of the street — the same
238
+ objection that makes the reduced mode translucent rather than solid.
239
+ It also disagreed with Choice Item, which keeps its Gem surface when
240
+ disabled and only dims its content.
241
+
242
+ So the body and the backdrop blur stay. What goes is the lit bezel: the rim
243
+ inner shadows and the angular cut both drop, and the boundary falls to the
244
+ flat disabled border. The surface stays glass; it stops catching light. */
231
245
  .ol8-field[data-ol8-material="gem"][data-ol8-disabled] .ol8-field__control {
232
- --_surface: var(--ol8-material-gem-color-quiet-opaqueequivalent);
233
246
  --_border: var(--ol8-color-border-disabled);
234
247
  }
235
- .ol8-field[data-ol8-material="gem"][data-ol8-disabled] .ol8-field__control::before,
236
248
  .ol8-field[data-ol8-material="gem"][data-ol8-disabled] .ol8-field__control::after { display: none; }
237
249
 
250
+ /* THE ANGULAR CUT — the bezel stroke, at last implemented.
251
+ *
252
+ * Figma puts a 1px INSIDE stroke on the Control frame, and it is not a flat
253
+ * colour: it is a GRADIENT_ANGULAR with five stops, symmetric about 0.54, so
254
+ * the cut catches light at the top and fades at the bottom-left. The family
255
+ * depends on the appearance — Inner Thin Cut on Filled, Cut Edge on Outline —
256
+ * read off 214:132 and 210:112 respectively.
257
+ *
258
+ * CSS has no gradient border that follows border-radius, so the ring is a
259
+ * conic gradient clipped to a 1px inset band by two masks composited apart.
260
+ * It lives on .ol8-field__control-stack::before because that box is identical
261
+ * to the control's (both take --_height, the control is inline-size: 100%) and
262
+ * because the control's own two pseudo-elements are already spent: ::before is
263
+ * the body and backdrop blur, ::after is the pair of rim inner shadows. The
264
+ * stack's ::after is the focus edge. ::before was the one free layer, which is
265
+ * why this needs no markup change — an earlier read of this file concluded it
266
+ * did, and that was wrong.
267
+ *
268
+ * The flat --_border stays underneath. It is what shows when the ring cannot
269
+ * paint, and it is what Reduced Transparency falls back to. */
270
+ .ol8-field[data-ol8-material="gem"] {
271
+ --_bezel-high: var(--ol8-material-gem-color-cutedge-high);
272
+ --_bezel-mid: var(--ol8-material-gem-color-cutedge-mid);
273
+ --_bezel-low: var(--ol8-material-gem-color-cutedge-low);
274
+ }
275
+ .ol8-field[data-ol8-material="gem"][data-ol8-appearance="filled"] {
276
+ --_bezel-high: var(--ol8-material-gem-color-innerthincut-high);
277
+ --_bezel-mid: var(--ol8-material-gem-color-innerthincut-mid);
278
+ --_bezel-low: var(--ol8-material-gem-color-innerthincut-low);
279
+ }
280
+
281
+ .ol8-field[data-ol8-material="gem"] > .ol8-field__control-stack::before,
282
+ .ol8-gem::before {
283
+ content: "";
284
+ position: absolute;
285
+ inset: 0;
286
+ z-index: 1;
287
+ pointer-events: none;
288
+ padding: var(--ol8-border-width-hairline);
289
+ /* the five Figma stops, at their Figma positions */
290
+ background:
291
+ conic-gradient(from 0deg,
292
+ var(--_bezel-high) 0%,
293
+ var(--_bezel-mid) 30%,
294
+ var(--_bezel-low) 54%,
295
+ var(--_bezel-mid) 78%,
296
+ var(--_bezel-high) 100%);
297
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
298
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
299
+ -webkit-mask-composite: xor;
300
+ mask-composite: exclude;
301
+ }
302
+ .ol8-field[data-ol8-material="gem"] > .ol8-field__control-stack::before {
303
+ border-radius: var(--_radius);
304
+ }
305
+ .ol8-gem {
306
+ --_bezel-high: var(--ol8-material-gem-color-cutedge-high);
307
+ --_bezel-mid: var(--ol8-material-gem-color-cutedge-mid);
308
+ --_bezel-low: var(--ol8-material-gem-color-cutedge-low);
309
+ }
310
+ .ol8-gem::before { border-radius: inherit; }
311
+
312
+ /* Disabled and Reduced Transparency both drop to the flat boundary. */
313
+ .ol8-field[data-ol8-material="gem"][data-ol8-disabled] > .ol8-field__control-stack::before {
314
+ display: none;
315
+ }
316
+ @media (prefers-reduced-transparency: reduce) {
317
+ .ol8-field[data-ol8-material="gem"] > .ol8-field__control-stack::before,
318
+ .ol8-gem::before { display: none; }
319
+ }
320
+
238
321
  /* Content must sit above the ::before body. */
239
322
  .ol8-btn[data-ol8-material="gem"] > *,
240
323
  .ol8-icon-btn[data-ol8-material="gem"] .ol8-icon,
241
324
  .ol8-field[data-ol8-material="gem"] .ol8-field__control > * { position: relative; z-index: 0; }
242
325
 
243
- /* ---- Disabled inherits the regular opaque treatment ------------------ */
244
- .ol8-btn[data-ol8-material="gem"]:disabled::before,
245
- .ol8-btn[data-ol8-material="gem"]:disabled::after,
246
- .ol8-icon-btn[data-ol8-material="gem"]:disabled > .ol8-icon-btn__surface::before,
247
- .ol8-icon-btn[data-ol8-material="gem"]:disabled > .ol8-icon-btn__surface::after { display: none; }
248
-
249
326
  /* ---- Reduced Transparency -> the regular opaque equivalent -----------
250
327
  Explicitly required by the Figma description. Hiding the gem layers
251
328
  reveals the regular molecule's own background, which was never removed. */
329
+ /* DISABLED KEEPS THE GLASS ON BUTTONS TOO.
330
+ Same rule the Gem field follows, and buttons needed a different mechanism to
331
+ reach it. A Gem button's ::before body and backdrop blur survive Disabled
332
+ already — but ::before sits at z-index -1, behind the element's own --_bg,
333
+ and the disabled --_bg is an opaque action colour. So the glass was there and
334
+ occluded: the button looked like Figma's opaque slab even though the layer
335
+ was painting underneath it.
336
+
337
+ Making --_bg transparent for Gem reveals the body that was always there. The
338
+ lit bezel still goes, exactly as on the field. Loading resolves through the
339
+ same rule because loading is inert — renderButton sets inert = disabled ||
340
+ loading — which means a loading Gem button now shows its own loading
341
+ gradient stops rather than hiding them behind the disabled colour.
342
+
343
+ The negative z-index stays load-bearing: it is what lets the canonical
344
+ opaque background show through when Gem is suppressed for Reduced
345
+ Transparency, so that media query restores --_bg below. */
346
+ .ol8-btn[data-ol8-material="gem"]:disabled,
347
+ .ol8-icon-btn[data-ol8-material="gem"]:disabled > .ol8-icon-btn__surface {
348
+ --_bg: transparent;
349
+ }
350
+
351
+ /* Disabled ink on Gem is already solved: quiet.contentDisabled, the whitish
352
+ grey shared by Choice Item's label and its control geometry. Buttons were
353
+ falling through to the regular action disabled-content colours, which are
354
+ DARK — a dark glyph on a surface whose enabled content is near-white. Code
355
+ was worse than that: it kept the full near-white, so Disabled was
356
+ indistinguishable from Default.
357
+ --_fg is the label and --_ink is the icon, and they take the same value,
358
+ because on a button the two always match. */
359
+ .ol8-btn[data-ol8-material="gem"]:disabled:not([data-ol8-loading]),
360
+ .ol8-icon-btn[data-ol8-material="gem"]:disabled:not([data-ol8-loading]),
361
+ .ol8-icon-btn[data-ol8-material="gem"]:disabled:not([data-ol8-loading]) > .ol8-icon-btn__surface {
362
+ --_fg: var(--ol8-material-gem-color-quiet-contentdisabled);
363
+ --_ink: var(--ol8-material-gem-color-quiet-contentdisabled);
364
+ }
365
+ /* Loading is excluded. It matches :disabled because renderButton sets
366
+ inert = disabled || loading, but Loading is an ACTIVE state — Figma keeps
367
+ both rim inner shadows on it and gives it its own deep gradient stops, so it
368
+ keeps the lit bezel. Only Disabled loses it. */
369
+ .ol8-btn[data-ol8-material="gem"]:disabled:not([data-ol8-loading])::after,
370
+ .ol8-icon-btn[data-ol8-material="gem"]:disabled:not([data-ol8-loading]) > .ol8-icon-btn__surface::after {
371
+ display: none;
372
+ }
373
+
252
374
  @media (prefers-reduced-transparency: reduce) {
253
375
  .ol8-btn[data-ol8-material="gem"]::before,
254
376
  .ol8-btn[data-ol8-material="gem"]::after,
@@ -256,6 +378,12 @@
256
378
  .ol8-icon-btn[data-ol8-material="gem"] > .ol8-icon-btn__surface::after,
257
379
  .ol8-field[data-ol8-material="gem"] .ol8-field__control::before,
258
380
  .ol8-field[data-ol8-material="gem"] .ol8-field__control::after { display: none; }
381
+ /* With the Gem layers suppressed there is nothing behind a transparent
382
+ background, so the canonical disabled colour comes back. */
383
+ .ol8-btn[data-ol8-material="gem"]:disabled,
384
+ .ol8-icon-btn[data-ol8-material="gem"]:disabled > .ol8-icon-btn__surface {
385
+ --_bg: revert;
386
+ }
259
387
  .ol8-field[data-ol8-material="gem"] .ol8-field__control {
260
388
  --_surface: var(--ol8-material-gem-color-quiet-opaqueequivalent);
261
389
  }
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/icon-button/icon-button.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Icon Button
4
+ * OneLi8 · Icon Button
5
5
  * Figma: section "Icon Button" (1034:10546) — Primary 86:2, Secondary 87:26,
6
6
  * Quiet 88:50, Destructive 89:74, plus the four Circle sets.
7
7
  * 4 families × 2 shapes × 4 sizes × 6 states = 192 components.
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/atoms/icon/icon.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Icon atom
4
+ * OneLi8 · Icon atom
5
5
  * Figma: page "Iconography" — masters "Icon Library / Masters" (426:55),
6
6
  * sizing from "Icon Frame" (418:51).
7
7
  *
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/link/link.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Link (MOLECULE)
4
+ * OneLi8 · Link (MOLECULE)
5
5
  *
6
6
  * Figma (138:260, 139:260, 139:453): "Runtime href, native anchor behavior,
7
7
  * visited resolution, aria-current, motion preference and navigation list
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/multi-select-field/multi-select-field.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Multi-select Field (ORGANISM)
4
+ * OneLi8 · Multi-select Field (ORGANISM)
5
5
  * Figma: Organism / Multi-select Field / Outline 904:2507 (16 variants)
6
6
  * Organism / Multi-select Field / Filled 978:4472 (16 variants)
7
7
  *
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/atoms/navigation-badge/navigation-badge.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Navigation Badge (ATOM)
4
+ * OneLi8 · Navigation Badge (ATOM)
5
5
  * Figma: Atom / Navigation Badge 989:484 — a full radius pill at the standard
6
6
  * indicator height, padded by the related inline step, whose surface and
7
7
  * content are the only things that change when the item is selected or gem.
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/navigation-item/navigation-item.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Navigation Item (MOLECULE, internal)
4
+ * OneLi8 · Navigation Item (MOLECULE, internal)
5
5
  * Figma: Tab Item 688:51, Segment Item 695:167, Destination Item 700:292.
6
6
  *
7
7
  * All three are one molecule. Read from Figma: a box at the size's control
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/segmented-control/segmented-control.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Segmented Control (ORGANISM)
4
+ * OneLi8 · Segmented Control (ORGANISM)
5
5
  * Figma: Navigation / Segmented Control 698:4792 — six presentations.
6
6
  *
7
7
  * "Presentation never changes behavior." Every presentation below is a
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/select/select.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Select (MOLECULE)
4
+ * OneLi8 · Select (MOLECULE)
5
5
  * Figma: Select / Trigger 583:338, Molecule / Select 875:1778.
6
6
  *
7
7
  * "Geometry and appearance reuse approved Text Field tokens", and Figma proves
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/atoms/selection-indicator/selection-indicator.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Selection Indicator (ATOM)
4
+ * OneLi8 · Selection Indicator (ATOM)
5
5
  * Figma: Documentation / Choice Controls (246:3)
6
6
  * Icon / Selection / Checkbox 365:2417 (12 variants)
7
7
  * Icon / Selection / Radio 366:2371 (8)
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/selection-option/selection-option.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Selection Option (MOLECULE)
4
+ * OneLi8 · Selection Option (MOLECULE)
5
5
  * Figma: Select and Combobox -> 01 · Atomic Selection Building Blocks
6
6
  * Building Blocks / Selection Option 570:122 (8 variants)
7
7
  * Size Standard|Large x Selection x Availability
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/selection-popup/selection-popup.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Selection Popup (ORGANISM)
4
+ * OneLi8 · Selection Popup (ORGANISM)
5
5
  * Figma: Building Blocks / Selection Popup 574:534 — Width, Size.
6
6
  *
7
7
  * The rail is a div with role="listbox" rather than a list element, because a
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/tab-bar/tab-bar.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Tab Bar (ORGANISM)
4
+ * OneLi8 · Tab Bar (ORGANISM)
5
5
  * Figma: Navigation / Tab Bar 701:460 — Bottom, Inline, Sidebar, Spatial Rail.
6
6
  *
7
7
  * "Tab Bar contains destinations, never a central action disguised as a
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/organisms/tabs/tabs.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Tabs (ORGANISM)
4
+ * OneLi8 · Tabs (ORGANISM)
5
5
  * Figma: Navigation / Tabs 693:171 — Hierarchy, Material, Size.
6
6
  *
7
7
  * The organism owns sibling separation and the rail; the item owns its own
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/text-field/text-field.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Text Field (MOLECULE)
4
+ * OneLi8 · Text Field (MOLECULE)
5
5
  * Figma: Text Field / Outline 182:33, Text Field / Filled 186:53,
6
6
  * Text Field / Outline / Gem 211:36, Text Field / Filled / Gem 215:226,
7
7
  * Text Field / Content 175:2, Form Message 177:13.
@@ -1,7 +1,7 @@
1
1
  /* GENERATED from packages/core/src/molecules/token/token.css by packages/sync/src/build-styles.mjs — do not edit.
2
2
  Edit the source in packages/core/src and re-run `npm run sync:styles`. */
3
3
  /**
4
- * Oneli8 · Token (MOLECULE)
4
+ * OneLi8 · Token (MOLECULE)
5
5
  * Figma: Select and Combobox / Molecule / Token 897:2106 (24 variants)
6
6
  *
7
7
  * The silhouette, sizes and colours all come from the Choice Chip stylesheet,