@multiplatform.one/theme 7.90.0 → 7.90.2

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.
@@ -859,6 +859,60 @@ const houseAccentKeys = [
859
859
  "selectedColor",
860
860
  ] as const;
861
861
 
862
+ type HouseAccent = {
863
+ accent: Record<(typeof houseAccentKeys)[number], string>;
864
+ accentSteps: Record<string, string>;
865
+ };
866
+
867
+ function isFullRamp(steps: (string | undefined)[]): steps is string[] {
868
+ return !steps.includes(undefined);
869
+ }
870
+
871
+ function houseAccentOf(
872
+ base: Record<string, string>,
873
+ blue: Record<string, string>,
874
+ ): HouseAccent | null {
875
+ const steps = Array.from({ length: 12 }, (_, index) => base[`accent${index + 1}`]);
876
+ if (!isAchromaticRamp(steps)) return null;
877
+ const ramp: (string | undefined)[] = Array.from(
878
+ { length: 12 },
879
+ (_, index) => base[`blue${index + 1}`] || undefined,
880
+ );
881
+ const surfaces = [base.color1, base.color2, base.color3, base.color4].map(luminanceOf);
882
+ if (!isFullRamp(ramp) || surfaces.includes(null)) return null;
883
+ const holdsInk = (lum: number) =>
884
+ surfaces.every((surface) => contrastRatio(lum, surface as number) >= aaTextContrastRatio);
885
+ return {
886
+ accent: {
887
+ accentBackground: blue.accentBackground,
888
+ accentColor:
889
+ walkToHoldingInk(ramp[10], ramp[11], holdsInk) ??
890
+ nearestHoldingStep(ramp[10], ramp, holdsInk),
891
+ selectedBackground: blue.selectedBackground,
892
+ selectedColor: blue.selectedColor,
893
+ },
894
+ accentSteps: Object.fromEntries(ramp.map((step, index) => [`accent${index + 1}`, step])),
895
+ };
896
+ }
897
+
898
+ function heldTheme(
899
+ name: string,
900
+ theme: Record<string, string>,
901
+ scheme: "light" | "dark",
902
+ base: Record<string, string>,
903
+ solid: Record<string, string>,
904
+ { accent, accentSteps }: HouseAccent,
905
+ ): Record<string, string> | null {
906
+ if (name === scheme) return { ...theme, ...accent, ...accentSteps };
907
+ const [, scope] = name.split("_");
908
+ if (!name.startsWith(`${scheme}_`) || (childrenHues as readonly string[]).includes(scope))
909
+ return null;
910
+ if (scope === "accent") return { ...solid };
911
+ const followed = houseAccentKeys.filter((key) => key in theme && theme[key] === base[key]);
912
+ if (followed.length === 0) return null;
913
+ return { ...theme, ...Object.fromEntries(followed.map((key) => [key, accent[key]])) };
914
+ }
915
+
862
916
  /**
863
917
  * FZ-10073 (Clay, rv_4ef347aae208f200: "Neutral gray"). The house look is the
864
918
  * scheme root: v5's grey page and white cards (LC-151) under Apple's system
@@ -879,38 +933,11 @@ function holdHouseAccent(
879
933
  const blue = themes[`${scheme}_blue`];
880
934
  const solid = themes[`${scheme}_blue_accent`];
881
935
  if (!base || !blue || !solid) continue;
882
- const steps = Array.from({ length: 12 }, (_, index) => base[`accent${index + 1}`]);
883
- if (!isAchromaticRamp(steps)) continue;
884
- const ramp = Array.from({ length: 12 }, (_, index) => base[`blue${index + 1}`]);
885
- const surfaces = [base.color1, base.color2, base.color3, base.color4].map(luminanceOf);
886
- if (ramp.some((step) => !step) || surfaces.some((lum) => lum === null)) continue;
887
- const holdsInk = (lum: number) =>
888
- surfaces.every((surface) => contrastRatio(lum, surface as number) >= aaTextContrastRatio);
889
- const accent: Record<(typeof houseAccentKeys)[number], string> = {
890
- accentBackground: blue.accentBackground,
891
- accentColor:
892
- walkToHoldingInk(ramp[10], ramp[11], holdsInk) ??
893
- nearestHoldingStep(ramp[10], ramp, holdsInk),
894
- selectedBackground: blue.selectedBackground,
895
- selectedColor: blue.selectedColor,
896
- };
897
- const accentSteps = Object.fromEntries(ramp.map((step, index) => [`accent${index + 1}`, step]));
936
+ const house = houseAccentOf(base, blue);
937
+ if (!house) continue;
898
938
  for (const [name, theme] of Object.entries(themes)) {
899
- if (name === scheme) {
900
- out[name] = { ...theme, ...accent, ...accentSteps };
901
- continue;
902
- }
903
- const [, scope] = name.split("_");
904
- if (!name.startsWith(`${scheme}_`) || (childrenHues as readonly string[]).includes(scope))
905
- continue;
906
- if (scope === "accent") {
907
- out[name] = { ...solid };
908
- continue;
909
- }
910
- const followed = houseAccentKeys.filter((key) => key in theme && theme[key] === base[key]);
911
- if (followed.length > 0) {
912
- out[name] = { ...theme, ...Object.fromEntries(followed.map((key) => [key, accent[key]])) };
913
- }
939
+ const held = heldTheme(name, theme, scheme, base, solid, house);
940
+ if (held) out[name] = held;
914
941
  }
915
942
  }
916
943
  return out;
@@ -1 +1 @@
1
- {"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,IAAI,mBAAmB,EACpC,MAAM,wBAAwB,CAAC;AAsBhC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,CAAC;AAqDxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG1B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAevB,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;;;;CAI3B,CAAC;AAEX,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB,CACrC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAExC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B,CACzC,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACvC,YAAY,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EACxC,WAAW,SAAS,OAAO,GAAG,OAAO,EACrC,YAAY,SAAS,OAAO,GAAG,OAAO,CACtC,SAAQ,sBAAsB,CAAC,WAAW,EAAE,YAAY,CAAC;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/E,mBAAmB,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACvF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CACzF;AA80BD,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,0BAA0B,EACrC,WAAW,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE,0BAA0B;;aA6FzB,CAAC,SAAS,MAAM,QAAQ,CAAC,SAAS,sBAAsB,GAyB1D,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE;;+BAAkC;EAG7E"}
1
+ {"version":3,"file":"createThemes.d.ts","sourceRoot":"","sources":["../../src/theme/createThemes.ts"],"names":[],"mappings":"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"}