okchroma 0.1.2 → 0.1.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.
@@ -22,6 +22,7 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  CSS_FAMILY: () => CSS_FAMILY,
24
24
  DEFAULT_LINK_HEX: () => DEFAULT_LINK_HEX,
25
+ DISABLED_OPACITY: () => DISABLED_OPACITY,
25
26
  EXT_KEY: () => EXT_KEY,
26
27
  INK_0: () => INK_0,
27
28
  MODE_SPECS: () => MODE_SPECS,
@@ -2744,6 +2745,7 @@ var SCALE = {
2744
2745
  };
2745
2746
  var ABS = { req: "extreme poles for CTAs, aliased global endpoints" };
2746
2747
  var OFFSET = { req: "min APCA visibility", theming: "offsets CTAs in themes where they sit close to the page" };
2748
+ var OFFSET_INVERSE = { req: "state layers over inverted backgrounds", theming: "the offset ladder with its pole flipped, so inverted grounds keep the same rungs" };
2747
2749
  var SHADOW = { req: "drop shadows" };
2748
2750
  var PLANE = (req) => ({ req, theming: "aliased to the gray ramp" });
2749
2751
  var LINK = (state, contrast) => ({
@@ -2774,6 +2776,12 @@ var SYSTEM = {
2774
2776
  "system/alpha/006": OFFSET,
2775
2777
  "system/alpha/008": OFFSET,
2776
2778
  "system/alpha/016": OFFSET,
2779
+ // the inverse ladder: the offset rungs with the pole flipped per mode, for
2780
+ // washes and edges over inverted backgrounds ("interaction" avoided in the
2781
+ // bodies: acti-ON would feed the "on" flood)
2782
+ "system/alpha/inverse-006": OFFSET_INVERSE,
2783
+ "system/alpha/inverse-008": OFFSET_INVERSE,
2784
+ "system/alpha/inverse-016": OFFSET_INVERSE,
2777
2785
  "system/alpha/shadow-04": SHADOW,
2778
2786
  "system/alpha/shadow-08": SHADOW,
2779
2787
  "system/alpha/shadow-12": SHADOW,
@@ -3426,6 +3434,16 @@ var SYSTEM_LEAF = {
3426
3434
  OFFSET_006: "system/alpha/006",
3427
3435
  OFFSET_008: "system/alpha/008",
3428
3436
  OFFSET_016: "system/alpha/016",
3437
+ // the INVERSE offset ladder (owner 2026-08-29, the interaction round): the
3438
+ // same rungs with the pole flipped per mode — white in light, black in dark
3439
+ // — STATE LAYERS for INVERTED grounds, whose polarity is opposite the
3440
+ // page's. (Never call these a "wash": that word belongs to the tinted band
3441
+ // stops.) The reversal lives in the engine (the system/surface posture): a
3442
+ // consumer on an inverted ground names one token and never picks a pole.
3443
+ // Colored fills never ride these; their states stay engine-solved stops.
3444
+ INVERSE_006: "system/alpha/inverse-006",
3445
+ INVERSE_008: "system/alpha/inverse-008",
3446
+ INVERSE_016: "system/alpha/inverse-016",
3429
3447
  SHADOW_04: "system/alpha/shadow-04",
3430
3448
  SHADOW_08: "system/alpha/shadow-08",
3431
3449
  SHADOW_12: "system/alpha/shadow-12"
@@ -3488,11 +3506,17 @@ var SHADOW_ALPHAS = {
3488
3506
  12: { light: 0.12, dark: 0.64 }
3489
3507
  };
3490
3508
  var SCRIM_ALPHA = 0.6;
3509
+ var DISABLED_OPACITY = 0.38;
3491
3510
  var TRANSPARENT_VAR = "--alpha-transparent";
3492
3511
  var offsetRgba = (rung, mode) => mode === "light" ? `rgba(0, 0, 0, ${OFFSET_ALPHAS[rung]})` : `rgba(255, 255, 255, ${OFFSET_ALPHAS[rung]})`;
3493
3512
  var alphaRootVars = (mode) => [
3494
3513
  ` ${TRANSPARENT_VAR}: transparent;`,
3495
- ...Object.keys(OFFSET_ALPHAS).map(Number).sort((a, b) => a - b).map((r) => ` ${offsetVarName(r)}: ${offsetRgba(r, mode)};`)
3514
+ ...Object.keys(OFFSET_ALPHAS).map(Number).sort((a, b) => a - b).map((r) => ` ${offsetVarName(r)}: ${offsetRgba(r, mode)};`),
3515
+ // the INVERSE ladder: the same rungs, pole flipped per mode — state layers
3516
+ // for INVERTED grounds (owner 2026-08-29; never called a "wash" — that word
3517
+ // is the tinted band's). One spelling with the Figma row:
3518
+ // --alpha-inverse-006 ↔ system/alpha/inverse-006.
3519
+ ...Object.keys(OFFSET_ALPHAS).map(Number).sort((a, b) => a - b).map((r) => ` --alpha-inverse-${offsetLeafName(r)}: ${offsetRgba(r, mode === "light" ? "dark" : "light")};`)
3496
3520
  ];
3497
3521
  function ctaPageLc(s, mode, page) {
3498
3522
  const cta = mode === "light" ? s.cta : s.ctaDark;
@@ -3924,6 +3948,10 @@ function themeToFigma(r, input) {
3924
3948
  putLeaf(g2, SYSTEM_LEAF.ALPHA.OFFSET_006, OFFSET_TOKEN(6, mode));
3925
3949
  putLeaf(g2, SYSTEM_LEAF.ALPHA.OFFSET_008, OFFSET_TOKEN(8, mode));
3926
3950
  putLeaf(g2, SYSTEM_LEAF.ALPHA.OFFSET_016, OFFSET_TOKEN(16, mode));
3951
+ const inv = mode === "light" ? "dark" : "light";
3952
+ putLeaf(g2, SYSTEM_LEAF.ALPHA.INVERSE_006, OFFSET_TOKEN(6, inv));
3953
+ putLeaf(g2, SYSTEM_LEAF.ALPHA.INVERSE_008, OFFSET_TOKEN(8, inv));
3954
+ putLeaf(g2, SYSTEM_LEAF.ALPHA.INVERSE_016, OFFSET_TOKEN(16, inv));
3927
3955
  putLeaf(g2, SYSTEM_LEAF.ALPHA.SHADOW_04, pole(false, SHADOW_ALPHAS[4][mode]));
3928
3956
  putLeaf(g2, SYSTEM_LEAF.ALPHA.SHADOW_08, pole(false, SHADOW_ALPHAS[8][mode]));
3929
3957
  putLeaf(g2, SYSTEM_LEAF.ALPHA.SHADOW_12, pole(false, SHADOW_ALPHAS[12][mode]));
@@ -2666,6 +2666,7 @@ var SCALE = {
2666
2666
  };
2667
2667
  var ABS = { req: "extreme poles for CTAs, aliased global endpoints" };
2668
2668
  var OFFSET = { req: "min APCA visibility", theming: "offsets CTAs in themes where they sit close to the page" };
2669
+ var OFFSET_INVERSE = { req: "state layers over inverted backgrounds", theming: "the offset ladder with its pole flipped, so inverted grounds keep the same rungs" };
2669
2670
  var SHADOW = { req: "drop shadows" };
2670
2671
  var PLANE = (req) => ({ req, theming: "aliased to the gray ramp" });
2671
2672
  var LINK = (state, contrast) => ({
@@ -2696,6 +2697,12 @@ var SYSTEM = {
2696
2697
  "system/alpha/006": OFFSET,
2697
2698
  "system/alpha/008": OFFSET,
2698
2699
  "system/alpha/016": OFFSET,
2700
+ // the inverse ladder: the offset rungs with the pole flipped per mode, for
2701
+ // washes and edges over inverted backgrounds ("interaction" avoided in the
2702
+ // bodies: acti-ON would feed the "on" flood)
2703
+ "system/alpha/inverse-006": OFFSET_INVERSE,
2704
+ "system/alpha/inverse-008": OFFSET_INVERSE,
2705
+ "system/alpha/inverse-016": OFFSET_INVERSE,
2699
2706
  "system/alpha/shadow-04": SHADOW,
2700
2707
  "system/alpha/shadow-08": SHADOW,
2701
2708
  "system/alpha/shadow-12": SHADOW,
@@ -3348,6 +3355,16 @@ var SYSTEM_LEAF = {
3348
3355
  OFFSET_006: "system/alpha/006",
3349
3356
  OFFSET_008: "system/alpha/008",
3350
3357
  OFFSET_016: "system/alpha/016",
3358
+ // the INVERSE offset ladder (owner 2026-08-29, the interaction round): the
3359
+ // same rungs with the pole flipped per mode — white in light, black in dark
3360
+ // — STATE LAYERS for INVERTED grounds, whose polarity is opposite the
3361
+ // page's. (Never call these a "wash": that word belongs to the tinted band
3362
+ // stops.) The reversal lives in the engine (the system/surface posture): a
3363
+ // consumer on an inverted ground names one token and never picks a pole.
3364
+ // Colored fills never ride these; their states stay engine-solved stops.
3365
+ INVERSE_006: "system/alpha/inverse-006",
3366
+ INVERSE_008: "system/alpha/inverse-008",
3367
+ INVERSE_016: "system/alpha/inverse-016",
3351
3368
  SHADOW_04: "system/alpha/shadow-04",
3352
3369
  SHADOW_08: "system/alpha/shadow-08",
3353
3370
  SHADOW_12: "system/alpha/shadow-12"
@@ -3410,11 +3427,17 @@ var SHADOW_ALPHAS = {
3410
3427
  12: { light: 0.12, dark: 0.64 }
3411
3428
  };
3412
3429
  var SCRIM_ALPHA = 0.6;
3430
+ var DISABLED_OPACITY = 0.38;
3413
3431
  var TRANSPARENT_VAR = "--alpha-transparent";
3414
3432
  var offsetRgba = (rung, mode) => mode === "light" ? `rgba(0, 0, 0, ${OFFSET_ALPHAS[rung]})` : `rgba(255, 255, 255, ${OFFSET_ALPHAS[rung]})`;
3415
3433
  var alphaRootVars = (mode) => [
3416
3434
  ` ${TRANSPARENT_VAR}: transparent;`,
3417
- ...Object.keys(OFFSET_ALPHAS).map(Number).sort((a, b) => a - b).map((r) => ` ${offsetVarName(r)}: ${offsetRgba(r, mode)};`)
3435
+ ...Object.keys(OFFSET_ALPHAS).map(Number).sort((a, b) => a - b).map((r) => ` ${offsetVarName(r)}: ${offsetRgba(r, mode)};`),
3436
+ // the INVERSE ladder: the same rungs, pole flipped per mode — state layers
3437
+ // for INVERTED grounds (owner 2026-08-29; never called a "wash" — that word
3438
+ // is the tinted band's). One spelling with the Figma row:
3439
+ // --alpha-inverse-006 ↔ system/alpha/inverse-006.
3440
+ ...Object.keys(OFFSET_ALPHAS).map(Number).sort((a, b) => a - b).map((r) => ` --alpha-inverse-${offsetLeafName(r)}: ${offsetRgba(r, mode === "light" ? "dark" : "light")};`)
3418
3441
  ];
3419
3442
  function ctaPageLc(s, mode, page) {
3420
3443
  const cta = mode === "light" ? s.cta : s.ctaDark;
@@ -3846,6 +3869,10 @@ function themeToFigma(r, input) {
3846
3869
  putLeaf(g2, SYSTEM_LEAF.ALPHA.OFFSET_006, OFFSET_TOKEN(6, mode));
3847
3870
  putLeaf(g2, SYSTEM_LEAF.ALPHA.OFFSET_008, OFFSET_TOKEN(8, mode));
3848
3871
  putLeaf(g2, SYSTEM_LEAF.ALPHA.OFFSET_016, OFFSET_TOKEN(16, mode));
3872
+ const inv = mode === "light" ? "dark" : "light";
3873
+ putLeaf(g2, SYSTEM_LEAF.ALPHA.INVERSE_006, OFFSET_TOKEN(6, inv));
3874
+ putLeaf(g2, SYSTEM_LEAF.ALPHA.INVERSE_008, OFFSET_TOKEN(8, inv));
3875
+ putLeaf(g2, SYSTEM_LEAF.ALPHA.INVERSE_016, OFFSET_TOKEN(16, inv));
3849
3876
  putLeaf(g2, SYSTEM_LEAF.ALPHA.SHADOW_04, pole(false, SHADOW_ALPHAS[4][mode]));
3850
3877
  putLeaf(g2, SYSTEM_LEAF.ALPHA.SHADOW_08, pole(false, SHADOW_ALPHAS[8][mode]));
3851
3878
  putLeaf(g2, SYSTEM_LEAF.ALPHA.SHADOW_12, pole(false, SHADOW_ALPHAS[12][mode]));
@@ -3919,6 +3946,7 @@ function resolveDtcgRamp(group) {
3919
3946
  export {
3920
3947
  CSS_FAMILY,
3921
3948
  DEFAULT_LINK_HEX,
3949
+ DISABLED_OPACITY,
3922
3950
  EXT_KEY,
3923
3951
  INK_0,
3924
3952
  MODE_SPECS,
@@ -33,6 +33,7 @@ export declare const SHADOW_ALPHAS: {
33
33
  };
34
34
  export type ShadowRung = keyof typeof SHADOW_ALPHAS;
35
35
  export declare const SCRIM_ALPHA = 0.6;
36
+ export declare const DISABLED_OPACITY = 0.38;
36
37
  export declare const TRANSPARENT_VAR = "--alpha-transparent";
37
38
  export declare const offsetRgba: (rung: OffsetRung, mode: "light" | "dark") => string;
38
39
  export declare const alphaRootVars: (mode: "light" | "dark") => string[];
@@ -31,6 +31,9 @@ export declare const SYSTEM_LEAF: {
31
31
  readonly OFFSET_006: "system/alpha/006";
32
32
  readonly OFFSET_008: "system/alpha/008";
33
33
  readonly OFFSET_016: "system/alpha/016";
34
+ readonly INVERSE_006: "system/alpha/inverse-006";
35
+ readonly INVERSE_008: "system/alpha/inverse-008";
36
+ readonly INVERSE_016: "system/alpha/inverse-016";
34
37
  readonly SHADOW_04: "system/alpha/shadow-04";
35
38
  readonly SHADOW_08: "system/alpha/shadow-08";
36
39
  readonly SHADOW_12: "system/alpha/shadow-12";
@@ -1,6 +1,6 @@
1
1
  export { generateScale, generateNeutralScale, generateSubtleSecondary, type GeneratedScale, type ColorStop, type GenerateOptions, type NeutralLevel, type ContrastProfile, } from './engine/colorEngine';
2
2
  export { resolveBrand, resolveTheme, resolveLinkTrio, resolveLinkInverseTrio, DEFAULT_LINK_HEX, SIGNAL_SCALES, signalScalesFor, SECONDARY_DISTINCT_DELTA_E, SUBTLE_TINT_MULT, SUBTLE_PASTEL_K, OUTLINE_HOVER_ALPHA, type ResolvedBrand, type ResolvedTheme, type ResolvedSecondary, type SecondaryLevel, type SecondaryStyle, type SignalOverride, } from './engine/resolve';
3
- export { brandCss, neutralCss, signalsCss, stopsToVars, toHex, stopHex, OFFSET_ALPHAS, SHADOW_ALPHAS, SCRIM_ALPHA, type ShadowRung, ctaNeedsBorder, ctaBorderRung, pageStopFor, } from './engine/cssRender';
3
+ export { brandCss, neutralCss, signalsCss, stopsToVars, toHex, stopHex, OFFSET_ALPHAS, SHADOW_ALPHAS, SCRIM_ALPHA, DISABLED_OPACITY, type ShadowRung, ctaNeedsBorder, ctaBorderRung, pageStopFor, } from './engine/cssRender';
4
4
  export { CSS_FAMILY } from './engine/tokenDescriptions';
5
5
  export { themeToFigma, type FigmaGroup, type FigmaColorToken, type ThemeInput, } from './engine/figmaRender';
6
6
  export { emitDtcgRamp, resolveDtcgRamp, parseToken, EXT_KEY, RESOLVER_ID, type DtcgRampGroup, type DtcgRequirementToken, type DtcgSeedToken, type DtcgColorValue, } from './engine/requirements/dtcg';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "okchroma",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "license": "MIT",
5
5
  "description": "Color token engine: one brand hex in, a full WCAG-enforced light+dark token system out (CSS variables, DTCG JSON, Figma variables)",
6
6
  "repository": {
@@ -43,6 +43,11 @@
43
43
  --shadow-04: rgba(0, 0, 0, 0.04);
44
44
  --shadow-08: rgba(0, 0, 0, 0.08);
45
45
  --shadow-12: rgba(0, 0, 0, 0.12);
46
+
47
+ /* Disabled opacity (owner 2026-08-29): disabled is a COMPONENT-LEVEL opacity —
48
+ colors stay the enabled ones and never swap. Mode-invariant; mirrors the JS
49
+ API's DISABLED_OPACITY constant 1:1. */
50
+ --disabled-opacity: 0.38;
46
51
  }
47
52
 
48
53
  [data-brand][data-theme="dark"] {