@fibery/ui-kit 2.1.0 → 2.1.1

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 (61) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +6 -3
  3. package/src/@types/react-color.d.ts +36 -0
  4. package/src/antd/{Tabs.js → Tabs.tsx} +5 -2
  5. package/src/color-filter.test.ts +24 -65
  6. package/src/color-filter.ts +62 -93
  7. package/src/color-picker/{ColorPickerOrLoader.js → ColorPickerOrLoader.tsx} +1 -1
  8. package/src/color-picker/{index.js → index.tsx} +32 -6
  9. package/src/color-utils.ts +3 -9
  10. package/src/design-system/colors-css.ts +16 -0
  11. package/src/design-system/colors.ts +23 -45
  12. package/src/design-system/def.ts +17 -0
  13. package/src/design-system/theme.ts +6 -2
  14. package/src/design-system/types.ts +102 -0
  15. package/src/design-system/vars.test.ts +9 -2
  16. package/src/design-system/vars.ts +4 -2
  17. package/src/design-system.ts +9 -1
  18. package/src/emoji-picker/emoji-picker-content-with-color.tsx +3 -3
  19. package/src/heat.ts +8 -0
  20. package/src/highlight-colors.test.ts +68 -0
  21. package/src/highlight-colors.ts +91 -0
  22. package/src/link-input/components/{AntTextAreaWithCustomReadState.js → AntTextAreaWithCustomReadState.tsx} +19 -8
  23. package/src/link-input/index.tsx +94 -0
  24. package/src/link-input/{utils.js → utils.ts} +1 -6
  25. package/src/number-input/decimal.ts +50 -0
  26. package/src/number-input/utils.ts +2 -2
  27. package/src/palette-generator.test.ts +2 -1
  28. package/src/palette-generator.ts +8 -26
  29. package/src/palettes/_.ts +2 -2
  30. package/src/palettes/common.ts +31 -0
  31. package/src/palettes/diff-colors.ts +29 -12
  32. package/src/palettes/inspect.defs.colors.neutral-arch.test.ts +72 -36
  33. package/src/palettes/inspect.defs.colors.neutral-user.test.ts +72 -36
  34. package/src/palettes/inspect.defs.colors.warm-arch.test.ts +226 -190
  35. package/src/palettes/inspect.defs.colors.warm-user.test.ts +226 -190
  36. package/src/palettes/neutral-arch.ts +3 -3
  37. package/src/palettes/neutral-user.ts +3 -3
  38. package/src/palettes/neutral.ts +4 -2
  39. package/src/palettes/warm-arch.ts +3 -3
  40. package/src/palettes/warm-user.ts +3 -3
  41. package/src/palettes/warm.ts +4 -3
  42. package/src/pretty-size.ts +5 -2
  43. package/src/root-theme-provider.test.tsx +1 -1
  44. package/src/scale-generator.ts +1 -32
  45. package/src/select/components/menu-list-virtua.tsx +127 -0
  46. package/src/select/index.tsx +1 -1
  47. package/src/select/reflection.ts +22 -0
  48. package/src/select/select.tsx +1 -0
  49. package/src/static-palettes.ts +2 -1
  50. package/src/thematic-color-picker.tsx +8 -1
  51. package/src/thematic-constants.tsx +2 -0
  52. package/src/thematic-controls.tsx +9 -1
  53. package/src/thematic-cvd.tsx +73 -0
  54. package/src/thematic-highlights.tsx +49 -0
  55. package/src/thematic-scales.tsx +8 -6
  56. package/src/thematic-state.ts +37 -16
  57. package/src/thematic.tsx +298 -305
  58. package/src/theme-provider.tsx +9 -3
  59. package/src/theme-styles.ts +2 -1
  60. package/src/link-input/index.js +0 -89
  61. package/src/number-input/decimal.js +0 -61
@@ -1,9 +1,4 @@
1
- /**
2
- * Infers actual URL from the input's value.
3
- * @param value
4
- * @returns {null|string} null for invalid URL
5
- */
6
- export const getURL = (value) => {
1
+ export const getURL = (value: string | null | undefined) => {
7
2
  if (!value) {
8
3
  return null;
9
4
  }
@@ -0,0 +1,50 @@
1
+ import isNil from "lodash/isNil";
2
+ import trimEnd from "lodash/trimEnd";
3
+
4
+ type NumericValue = string | number | null | undefined;
5
+
6
+ const isEmpty = (value: NumericValue): value is null | undefined | "" => isNil(value) || value === "";
7
+
8
+ const getPrecision = (value: NumericValue) => {
9
+ if (isEmpty(value)) {
10
+ return 0;
11
+ }
12
+ const [, decimalPart = ""] = String(value).split(".");
13
+ return decimalPart.length;
14
+ };
15
+
16
+ const removeTrailingZeros = (value: string) => {
17
+ if (isEmpty(value)) {
18
+ return value;
19
+ }
20
+ const hasDecimalPart = value.indexOf(".") > 0;
21
+ return hasDecimalPart ? trimEnd(trimEnd(value, "0"), ".") : value;
22
+ };
23
+
24
+ export const add = (first: NumericValue, second: NumericValue) => {
25
+ const result = Number(first) + Number(second);
26
+ const maxPrecision = Math.max(getPrecision(first), getPrecision(second));
27
+ return removeTrailingZeros(result.toFixed(maxPrecision));
28
+ };
29
+
30
+ export const sub = (first: NumericValue, second: NumericValue) => {
31
+ return removeTrailingZeros(add(first, -(second as number)));
32
+ };
33
+
34
+ export const multiplyByHundred = (value: NumericValue) => {
35
+ if (isEmpty(value)) {
36
+ return value;
37
+ }
38
+ const result = Number(value) * 100;
39
+ const precision = Math.max(0, getPrecision(value) - 2);
40
+ return removeTrailingZeros(result.toFixed(precision));
41
+ };
42
+
43
+ export const divideByHundred = (value: NumericValue) => {
44
+ if (isEmpty(value)) {
45
+ return value;
46
+ }
47
+ const result = Number(value) / 100;
48
+ const precision = getPrecision(value) + 2;
49
+ return removeTrailingZeros(result.toFixed(precision));
50
+ };
@@ -53,8 +53,8 @@ export const parseValue = (value: Value, numberFormat: NumberFormat, numberPreci
53
53
  return numberFormat === "Percent" ? divideByHundred(value) : value;
54
54
  };
55
55
 
56
- const toString = (value: number | null) => {
57
- return value === null ? value : String(value);
56
+ const toString = (value: string | number | null | undefined) => {
57
+ return value === null || value === undefined ? null : String(value);
58
58
  };
59
59
 
60
60
  return toString(internalizeNumber(parse(value)));
@@ -1,6 +1,7 @@
1
1
  import {getAlpha, oklchFrom} from "./color-utils";
2
- import {type ColorScale, makeThematicPalette, selectPalette} from "./palette-generator";
2
+ import {makeThematicPalette, selectPalette} from "./palette-generator";
3
3
  import {zeroBasedFromOneBased} from "./scale-generator";
4
+ import type {ColorScale} from "./design-system/types";
4
5
 
5
6
  function roundToThreeDigits(number: number) {
6
7
  return Math.round(number * 1000) / 1000;
@@ -12,36 +12,15 @@ import {
12
12
  generatePresetScale,
13
13
  generateWhites,
14
14
  type InterpolatedScaleConfig,
15
- OneBasedScale,
16
15
  paletteFromHue,
17
16
  paletteFromHueBoth,
18
17
  SCALE_PRESETS,
19
18
  type ScaleConfig,
20
19
  type ScaleCurves,
21
- type ZeroBasedScale,
22
20
  } from "./scale-generator";
23
21
  import {type ColorFilterSpec} from "./color-filter";
24
-
25
- export type ColorScale = OneBasedScale<string>;
26
-
27
- export interface ThemePalette {
28
- key: string;
29
- white: string;
30
- black: string;
31
- whiteA: ColorScale;
32
- blackA: ColorScale;
33
- base: ColorScale;
34
- baseDark: ColorScale;
35
- accent: ColorScale;
36
- accentDark: ColorScale;
37
- red: ColorScale;
38
- redDark: ColorScale;
39
- teal: ColorScale;
40
- tealDark: ColorScale;
41
- yellow: ColorScale;
42
- yellowDark: ColorScale;
43
- deneutralize?: ColorFilterSpec;
44
- }
22
+ import {common} from "./palettes/common";
23
+ import type {HighlightDefs, ModeDef, ThemePalette, ZeroBasedScale} from "./design-system/types";
45
24
 
46
25
  export function selectPalette({
47
26
  warmLook = false,
@@ -64,7 +43,8 @@ export type ThematicPrefs = {
64
43
  accentChroma: number;
65
44
  hueShiftTargetHue?: number;
66
45
  hueShiftAmount?: number;
67
- filter?: Partial<ColorFilterSpec>;
46
+ filter?: ModeDef<Partial<ColorFilterSpec>>;
47
+ highlight: HighlightDefs;
68
48
  };
69
49
 
70
50
  export function shiftHueTowards(hue: number, targetHue: number, amount: number): number {
@@ -77,8 +57,9 @@ export function shiftHueTowards(hue: number, targetHue: number, amount: number):
77
57
  return (hue + diff * amount + 360) % 360;
78
58
  }
79
59
 
80
- export function makeThematicPalette(config: ThematicPrefs): ThemePalette {
81
- const {accentHue, accentChroma} = config;
60
+ const defaultHighlight = common.highlight;
61
+ export function makeThematicPalette(config: Omit<ThematicPrefs, "highlight"> & Partial<ThematicPrefs>): ThemePalette {
62
+ const {accentHue, accentChroma, highlight = defaultHighlight} = config;
82
63
  const baseChroma = config.baseChroma ?? 0;
83
64
  const baseHue = config.hueShiftTargetHue ?? config.baseHue ?? 0;
84
65
  const hueShift = config.hueShiftAmount ?? Math.min(baseChroma * 2, 0.3);
@@ -128,6 +109,7 @@ export function makeThematicPalette(config: ThematicPrefs): ThemePalette {
128
109
  yellow,
129
110
  yellowDark,
130
111
  deneutralize: config.filter,
112
+ highlight,
131
113
  };
132
114
  }
133
115
 
package/src/palettes/_.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import {cardTypeColors, defsFromPalette} from "../design-system/colors";
2
2
  import {inspectColor, isValidColor} from "../color-utils";
3
- import {ThemePalette} from "../palette-generator";
4
3
  import {backgrounds, type ColorDef, sections, stickers} from "../canvas-colors";
4
+ import type {ThemePalette} from "../design-system/types";
5
5
 
6
6
  const COLOR_PREFIXES = ["rgba(", "rgb(", "hsla(", "hsl("] as const;
7
7
  const HEX_CHARS = "0123456789abcdefABCDEF";
@@ -110,6 +110,6 @@ export function colors(palette: ThemePalette) {
110
110
  }
111
111
 
112
112
  export function palette(palette: ThemePalette) {
113
- const {deneutralize: _, ...rest} = palette;
113
+ const {deneutralize: _, highlight: _h, ...rest} = palette;
114
114
  return deepMapColors(rest);
115
115
  }
@@ -0,0 +1,31 @@
1
+ import type {ThemePaletteBase} from "../design-system/types";
2
+
3
+ export const common: ThemePaletteBase = {
4
+ highlight: {
5
+ hues: {
6
+ yellow: 85,
7
+ green: 134,
8
+ aquamarine: 163,
9
+ aqua: 185,
10
+ blue: 254,
11
+ purple: 310,
12
+ pink: 345,
13
+ red: 25,
14
+ grey: 265,
15
+ },
16
+ bg: [
17
+ {c: 0.065, Lc: 8},
18
+ {c: 0.065, Lc: 8},
19
+ ],
20
+ fg: [
21
+ {c: 0.25, Lc: 65},
22
+ {c: 0.12, Lc: 65},
23
+ ],
24
+ overrides: {
25
+ grey: {
26
+ bg: [{c: 0}, {c: 0}],
27
+ fg: [{c: 0}, {c: 0}],
28
+ },
29
+ },
30
+ },
31
+ };
@@ -134,24 +134,26 @@ function differentTypes(valActual: unknown, valExpected: unknown) {
134
134
  );
135
135
  }
136
136
 
137
- function computeColorReport(actual: ColorDefs, expected: ColorDefs) {
137
+ export function computeColorReport(actual: ColorDefs, expected: ColorDefs) {
138
138
  const changes: object[] = [];
139
+ const pairFirst: object[] = [];
140
+ const pairSecond: object[] = [];
139
141
 
140
142
  function compare(aStr: string, eStr: string, path: string) {
141
143
  if (eStr === aStr) {
142
- return;
144
+ return null;
143
145
  }
144
146
  if (eStr === "none" || aStr === "none") {
145
147
  console.error("skip %o expected = %o vs %o actual", path, eStr, aStr);
146
- return;
148
+ return null;
147
149
  }
148
150
  const actual = extractColorOrThrow(aStr);
149
151
  const expected = extractColorOrThrow(eStr);
150
152
  if (actual === null || expected === null) {
151
153
  console.error("skip %o expected = %o vs %o actual (not a color)", path, eStr, aStr);
152
- return;
154
+ return null;
153
155
  }
154
- changes.push({
156
+ return {
155
157
  path,
156
158
  ...mapValues(
157
159
  {
@@ -162,7 +164,7 @@ function computeColorReport(actual: ColorDefs, expected: ColorDefs) {
162
164
  [inspect.custom]: () => x,
163
165
  })
164
166
  ),
165
- });
167
+ };
166
168
  }
167
169
 
168
170
  const keys = new Set([...Object.keys(actual), ...Object.keys(expected)] as Array<keyof ColorDefs>);
@@ -174,27 +176,42 @@ function computeColorReport(actual: ColorDefs, expected: ColorDefs) {
174
176
  continue;
175
177
  }
176
178
  if (typeof valActual === "string" || typeof valExpected === "string") {
177
- compare(valActual as string, valExpected as string, key);
179
+ const row = compare(valActual as string, valExpected as string, key);
180
+ if (row) {
181
+ changes.push(row);
182
+ }
178
183
  continue;
179
184
  }
180
185
  const len = Math.max(valActual.length, valExpected.length);
186
+ const isPair = len === 2;
187
+ const pairSuffix = isPair ? [".light", ".dark"] : undefined;
181
188
  for (let i = 0; i < len; i++) {
182
- const path = `${key}[${i}]`;
189
+ const path = `${key}${pairSuffix ? pairSuffix[i] : `[${i}]`}`;
183
190
  const elActual = valActual[i];
184
191
  const elExpected = valExpected[i];
185
192
  if (differentTypes(elActual, elExpected)) {
186
193
  console.error("skip %o expected = %o vs %o actual (likely new or gone value)", path, elExpected, elActual);
187
194
  continue;
188
195
  }
196
+ const target = isPair ? (i === 0 ? pairFirst : pairSecond) : changes;
189
197
  if (typeof elActual === "string" || typeof elExpected === "string") {
190
- compare(elActual as string, elExpected as string, path);
198
+ const row = compare(elActual as string, elExpected as string, path);
199
+ if (row) {
200
+ target.push(row);
201
+ }
191
202
  } else {
192
- compare(elActual[0], elExpected[0], `${path}.light`);
193
- compare(elActual[1], elExpected[1], `${path}.dark`);
203
+ const lightRow = compare(elActual[0], elExpected[0], `${path}.light`);
204
+ if (lightRow) {
205
+ target.push(lightRow);
206
+ }
207
+ const darkRow = compare(elActual[1], elExpected[1], `${path}.dark`);
208
+ if (darkRow) {
209
+ target.push(darkRow);
210
+ }
194
211
  }
195
212
  }
196
213
  }
197
- return changes;
214
+ return [...pairFirst, ...pairSecond, ...changes];
198
215
  }
199
216
 
200
217
  function findTestAnchor(source: string, currentTestName: string): number {
@@ -1582,76 +1582,112 @@ test("snapshot", () => {
1582
1582
  "#713a18 | hsl(23 65% 27%) | oklch(0.41 0.09 50) ",
1583
1583
  ],
1584
1584
  "highlightBgAqua": [
1585
- "#c6f2eb | hsl(170 63% 86%) | oklch(0.93 0.05 185) ",
1586
- "#2d5753 | hsl(174 32% 26%) | oklch(0.43 0.05 188) ",
1585
+ "#baf9f0 | hsl(171 84% 85%) | oklch(0.94 0.06 185) ",
1586
+ "#004a43 | hsl(174 100% 15%) | oklch(0.37 0.07 184) ",
1587
1587
  ],
1588
1588
  "highlightBgAquamarine": [
1589
- "#c3f7c1 | hsl(118 77% 86%) | oklch(0.93 0.09 144) ",
1590
- "#0f4b34 | hsl(157 67% 18%) | oklch(0.37 0.07 163) ",
1589
+ "#c4f9df | hsl(151 82% 87%) | oklch(0.94 0.06 164) ",
1590
+ "#174a35 | hsl(155 53% 19%) | oklch(0.37 0.07 163) ",
1591
1591
  ],
1592
1592
  "highlightBgBlue": [
1593
- "#d0ebfa | hsl(201 81% 90%) | oklch(0.92 0.04 232) ",
1594
- "#2d365a | hsl(228 33% 26%) | oklch(0.34 0.06 272) ",
1593
+ "#e1eeff | hsl(214 100% 94%) | oklch(0.94 0.03 255) ",
1594
+ "#284363 | hsl(213 42% 27%) | oklch(0.38 0.06 254) ",
1595
1595
  ],
1596
1596
  "highlightBgGreen": [
1597
- "#d0f2bb | hsl(97 68% 84%) | oklch(0.92 0.08 134) ",
1598
- "#325833 | hsl(122 28% 27%) | oklch(0.42 0.07 145) ",
1597
+ "#daf5c9 | hsl(97 69% 87%) | oklch(0.94 0.06 133) ",
1598
+ "#324823 | hsl(96 35% 21%) | oklch(0.37 0.07 134) ",
1599
1599
  ],
1600
1600
  "highlightBgGrey": [
1601
- "#dee3e9 | hsl(213 20% 89%) | oklch(0.91 0.01 253) ",
1602
- "#3e3f4e | hsl(236 11% 27%) | oklch(0.37 0.03 282) ",
1601
+ "#ededed | hsl(none 0% 93%) | oklch(0.95 0 none) ",
1602
+ "#424242 | hsl(none 0% 26%) | oklch(0.38 0 none) ",
1603
1603
  ],
1604
1604
  "highlightBgPink": [
1605
- "#fae4f0 | hsl(327 69% 94%) | oklch(0.94 0.03 344) ",
1606
- "#6c3255 | hsl(324 37% 31%) | oklch(0.41 0.09 345) ",
1605
+ "#ffe7f3 | hsl(330 100% 95%) | oklch(0.95 0.03 346) ",
1606
+ "#5c354b | hsl(326 27% 28%) | oklch(0.38 0.06 346) ",
1607
1607
  ],
1608
1608
  "highlightBgPurple": [
1609
- "#f2e4fa | hsl(278 69% 94%) | oklch(0.94 0.03 314) ",
1610
- "#523252 | hsl(300 24% 26%) | oklch(0.37 0.07 327) ",
1609
+ "#f5e8ff | hsl(274 100% 95%) | oklch(0.95 0.03 311) ",
1610
+ "#4e395e | hsl(274 25% 30%) | oklch(0.38 0.07 310) ",
1611
1611
  ],
1612
1612
  "highlightBgRed": [
1613
- "#fae0dd | hsl(6 74% 92%) | oklch(0.93 0.03 26) ",
1614
- "#5f2c31 | hsl(354 37% 27%) | oklch(0.36 0.07 15) ",
1613
+ "#ffe8e6 | hsl(5 100% 95%) | oklch(0.95 0.03 24) ",
1614
+ "#613531 | hsl(5 33% 29%) | oklch(0.38 0.06 26) ",
1615
1615
  ],
1616
1616
  "highlightBgYellow": [
1617
- "#faf0b9 | hsl(51 87% 85%) | oklch(0.95 0.07 99) ",
1618
- "#584812 | hsl(46 66% 21%) | oklch(0.41 0.07 92) ",
1617
+ "#ffebc4 | hsl(40 100% 88%) | oklch(0.95 0.06 84) ",
1618
+ "#513f13 | hsl(43 62% 20%) | oklch(0.38 0.06 86) ",
1619
1619
  ],
1620
1620
  "highlightFgAqua": [
1621
- "#239b96 | hsl(178 63% 37%) | oklch(0.63 0.1 191) ",
1622
- "#34a89e | hsl(175 53% 43%) | oklch(0.67 0.1 187) ",
1621
+ "#009287 | hsl(175 100% 29%) | oklch(0.59 0.1 186) ",
1622
+ "#42cfc0 | hsl(174 59% 54%) | oklch(0.78 0.12 185) ",
1623
1623
  ],
1624
1624
  "highlightFgAquamarine": [
1625
- "#28a573 | hsl(156 61% 40%) | oklch(0.64 0.13 161) ",
1626
- "#34ac80 | hsl(158 54% 44%) | oklch(0.67 0.12 164) ",
1625
+ "#009568 | hsl(162 100% 29%) | oklch(0.59 0.13 163) ",
1626
+ "#65cfa0 | hsl(153 52% 60%) | oklch(0.78 0.12 163) ",
1627
1627
  ],
1628
1628
  "highlightFgBlue": [
1629
- "#377dcd | hsl(212 60% 51%) | oklch(0.58 0.14 254) ",
1630
- "#4887c8 | hsl(210 54% 53%) | oklch(0.61 0.12 251) ",
1629
+ "#0081f3 | hsl(208 100% 48%) | oklch(0.61 0.19 254) ",
1630
+ "#8abfff | hsl(213 100% 77%) | oklch(0.79 0.11 254) ",
1631
1631
  ],
1632
1632
  "highlightFgGreen": [
1633
- "#50a541 | hsl(111 43% 45%) | oklch(0.65 0.16 141) ",
1634
- "#58ac4e | hsl(114 38% 49%) | oklch(0.67 0.15 142) ",
1633
+ "#509300 | hsl(87 100% 29%) | oklch(0.59 0.17 134) ",
1634
+ "#99ca79 | hsl(96 43% 63%) | oklch(0.79 0.12 134) ",
1635
1635
  ],
1636
1636
  "highlightFgGrey": [
1637
- "#737d8e | hsl(218 11% 50%) | oklch(0.59 0.03 261) ",
1638
- "#878ca0 | hsl(228 12% 58%) | oklch(0.64 0.03 274) ",
1637
+ "#838383 | hsl(none 0% 51%) | oklch(0.61 0 none) ",
1638
+ "#bcbcbc | hsl(none 0% 74%) | oklch(0.8 0 none) ",
1639
+ ],
1640
+ "highlightFgOnBgAqua": [
1641
+ "#00796f | hsl(175 100% 24%) | oklch(0.52 0.09 185) ",
1642
+ "#57e0d0 | hsl(173 69% 61%) | oklch(0.83 0.12 184) ",
1643
+ ],
1644
+ "highlightFgOnBgAquamarine": [
1645
+ "#007b55 | hsl(161 100% 24%) | oklch(0.52 0.11 163) ",
1646
+ "#76e0b1 | hsl(153 63% 67%) | oklch(0.83 0.12 163) ",
1647
+ ],
1648
+ "highlightFgOnBgBlue": [
1649
+ "#006ac9 | hsl(208 100% 39%) | oklch(0.53 0.17 254) ",
1650
+ "#a7cfff | hsl(213 100% 83%) | oklch(0.84 0.08 253) ",
1651
+ ],
1652
+ "highlightFgOnBgGreen": [
1653
+ "#417900 | hsl(88 100% 24%) | oklch(0.52 0.15 134) ",
1654
+ "#a8da88 | hsl(97 53% 69%) | oklch(0.83 0.12 134) ",
1655
+ ],
1656
+ "highlightFgOnBgGrey": [
1657
+ "#6c6c6c | hsl(none 0% 42%) | oklch(0.53 0 none) ",
1658
+ "#cccccc | hsl(none 0% 80%) | oklch(0.85 0 none) ",
1659
+ ],
1660
+ "highlightFgOnBgPink": [
1661
+ "#c4008e | hsl(317 100% 38%) | oklch(0.55 0.23 345) ",
1662
+ "#ffb6de | hsl(327 100% 86%) | oklch(0.86 0.1 345) ",
1663
+ ],
1664
+ "highlightFgOnBgPurple": [
1665
+ "#9e29db | hsl(279 71% 51%) | oklch(0.55 0.25 310) ",
1666
+ "#e3beff | hsl(274 100% 87%) | oklch(0.85 0.1 310) ",
1667
+ ],
1668
+ "highlightFgOnBgRed": [
1669
+ "#cf0021 | hsl(350 100% 41%) | oklch(0.54 0.22 25) ",
1670
+ "#ffbbb4 | hsl(6 100% 85%) | oklch(0.85 0.08 26) ",
1671
+ ],
1672
+ "highlightFgOnBgYellow": [
1673
+ "#8a6700 | hsl(45 100% 27%) | oklch(0.53 0.11 85) ",
1674
+ "#f0c66a | hsl(41 82% 68%) | oklch(0.84 0.12 85) ",
1639
1675
  ],
1640
1676
  "highlightFgPink": [
1641
- "#cd5594 | hsl(329 55% 57%) | oklch(0.62 0.17 350) ",
1642
- "#c85a98 | hsl(326 50% 57%) | oklch(0.62 0.16 348) ",
1677
+ "#e826ac | hsl(319 81% 53%) | oklch(0.63 0.25 345) ",
1678
+ "#f8a1d2 | hsl(326 86% 80%) | oklch(0.81 0.12 345) ",
1643
1679
  ],
1644
1680
  "highlightFgPurple": [
1645
- "#9655cd | hsl(273 55% 57%) | oklch(0.58 0.18 307) ",
1646
- "#9b5ac8 | hsl(275 50% 57%) | oklch(0.59 0.17 309) ",
1681
+ "#b94cf9 | hsl(278 94% 64%) | oklch(0.64 0.25 310) ",
1682
+ "#d7aafa | hsl(274 89% 82%) | oklch(0.81 0.12 310) ",
1647
1683
  ],
1648
1684
  "highlightFgRed": [
1649
- "#cd5550 | hsl(2 56% 56%) | oklch(0.6 0.15 25) ",
1650
- "#c85a55 | hsl(3 51% 56%) | oklch(0.6 0.14 25) ",
1685
+ "#fa0a2c | hsl(352 96% 51%) | oklch(0.62 0.25 25) ",
1686
+ "#ffa39b | hsl(5 100% 80%) | oklch(0.81 0.11 25) ",
1651
1687
  ],
1652
1688
  "highlightFgYellow": [
1653
- "#c39b2d | hsl(44 62% 47%) | oklch(0.71 0.13 88) ",
1654
- "#c8a855 | hsl(43 51% 56%) | oklch(0.74 0.11 89) ",
1689
+ "#a67d00 | hsl(45 100% 33%) | oklch(0.61 0.13 85) ",
1690
+ "#dfb65a | hsl(42 68% 61%) | oklch(0.79 0.12 85) ",
1655
1691
  ],
1656
1692
  "iconColor": [
1657
1693
  "#171717b3 | hsl(none 0% 9% / 0.7) | oklch(0.2 0 none / 0.7) ",
@@ -1582,76 +1582,112 @@ test("snapshot", () => {
1582
1582
  "#2d4786 | hsl(222 50% 35%) | oklch(0.41 0.11 265) ",
1583
1583
  ],
1584
1584
  "highlightBgAqua": [
1585
- "#c6f2eb | hsl(170 63% 86%) | oklch(0.93 0.05 185) ",
1586
- "#2d5753 | hsl(174 32% 26%) | oklch(0.43 0.05 188) ",
1585
+ "#baf9f0 | hsl(171 84% 85%) | oklch(0.94 0.06 185) ",
1586
+ "#004a43 | hsl(174 100% 15%) | oklch(0.37 0.07 184) ",
1587
1587
  ],
1588
1588
  "highlightBgAquamarine": [
1589
- "#c3f7c1 | hsl(118 77% 86%) | oklch(0.93 0.09 144) ",
1590
- "#0f4b34 | hsl(157 67% 18%) | oklch(0.37 0.07 163) ",
1589
+ "#c4f9df | hsl(151 82% 87%) | oklch(0.94 0.06 164) ",
1590
+ "#174a35 | hsl(155 53% 19%) | oklch(0.37 0.07 163) ",
1591
1591
  ],
1592
1592
  "highlightBgBlue": [
1593
- "#d0ebfa | hsl(201 81% 90%) | oklch(0.92 0.04 232) ",
1594
- "#2d365a | hsl(228 33% 26%) | oklch(0.34 0.06 272) ",
1593
+ "#e1eeff | hsl(214 100% 94%) | oklch(0.94 0.03 255) ",
1594
+ "#284363 | hsl(213 42% 27%) | oklch(0.38 0.06 254) ",
1595
1595
  ],
1596
1596
  "highlightBgGreen": [
1597
- "#d0f2bb | hsl(97 68% 84%) | oklch(0.92 0.08 134) ",
1598
- "#325833 | hsl(122 28% 27%) | oklch(0.42 0.07 145) ",
1597
+ "#daf5c9 | hsl(97 69% 87%) | oklch(0.94 0.06 133) ",
1598
+ "#324823 | hsl(96 35% 21%) | oklch(0.37 0.07 134) ",
1599
1599
  ],
1600
1600
  "highlightBgGrey": [
1601
- "#dee3e9 | hsl(213 20% 89%) | oklch(0.91 0.01 253) ",
1602
- "#3e3f4e | hsl(236 11% 27%) | oklch(0.37 0.03 282) ",
1601
+ "#ededed | hsl(none 0% 93%) | oklch(0.95 0 none) ",
1602
+ "#424242 | hsl(none 0% 26%) | oklch(0.38 0 none) ",
1603
1603
  ],
1604
1604
  "highlightBgPink": [
1605
- "#fae4f0 | hsl(327 69% 94%) | oklch(0.94 0.03 344) ",
1606
- "#6c3255 | hsl(324 37% 31%) | oklch(0.41 0.09 345) ",
1605
+ "#ffe7f3 | hsl(330 100% 95%) | oklch(0.95 0.03 346) ",
1606
+ "#5c354b | hsl(326 27% 28%) | oklch(0.38 0.06 346) ",
1607
1607
  ],
1608
1608
  "highlightBgPurple": [
1609
- "#f2e4fa | hsl(278 69% 94%) | oklch(0.94 0.03 314) ",
1610
- "#523252 | hsl(300 24% 26%) | oklch(0.37 0.07 327) ",
1609
+ "#f5e8ff | hsl(274 100% 95%) | oklch(0.95 0.03 311) ",
1610
+ "#4e395e | hsl(274 25% 30%) | oklch(0.38 0.07 310) ",
1611
1611
  ],
1612
1612
  "highlightBgRed": [
1613
- "#fae0dd | hsl(6 74% 92%) | oklch(0.93 0.03 26) ",
1614
- "#5f2c31 | hsl(354 37% 27%) | oklch(0.36 0.07 15) ",
1613
+ "#ffe8e6 | hsl(5 100% 95%) | oklch(0.95 0.03 24) ",
1614
+ "#613531 | hsl(5 33% 29%) | oklch(0.38 0.06 26) ",
1615
1615
  ],
1616
1616
  "highlightBgYellow": [
1617
- "#faf0b9 | hsl(51 87% 85%) | oklch(0.95 0.07 99) ",
1618
- "#584812 | hsl(46 66% 21%) | oklch(0.41 0.07 92) ",
1617
+ "#ffebc4 | hsl(40 100% 88%) | oklch(0.95 0.06 84) ",
1618
+ "#513f13 | hsl(43 62% 20%) | oklch(0.38 0.06 86) ",
1619
1619
  ],
1620
1620
  "highlightFgAqua": [
1621
- "#239b96 | hsl(178 63% 37%) | oklch(0.63 0.1 191) ",
1622
- "#34a89e | hsl(175 53% 43%) | oklch(0.67 0.1 187) ",
1621
+ "#009287 | hsl(175 100% 29%) | oklch(0.59 0.1 186) ",
1622
+ "#42cfc0 | hsl(174 59% 54%) | oklch(0.78 0.12 185) ",
1623
1623
  ],
1624
1624
  "highlightFgAquamarine": [
1625
- "#28a573 | hsl(156 61% 40%) | oklch(0.64 0.13 161) ",
1626
- "#34ac80 | hsl(158 54% 44%) | oklch(0.67 0.12 164) ",
1625
+ "#009568 | hsl(162 100% 29%) | oklch(0.59 0.13 163) ",
1626
+ "#65cfa0 | hsl(153 52% 60%) | oklch(0.78 0.12 163) ",
1627
1627
  ],
1628
1628
  "highlightFgBlue": [
1629
- "#377dcd | hsl(212 60% 51%) | oklch(0.58 0.14 254) ",
1630
- "#4887c8 | hsl(210 54% 53%) | oklch(0.61 0.12 251) ",
1629
+ "#0081f3 | hsl(208 100% 48%) | oklch(0.61 0.19 254) ",
1630
+ "#8abfff | hsl(213 100% 77%) | oklch(0.79 0.11 254) ",
1631
1631
  ],
1632
1632
  "highlightFgGreen": [
1633
- "#50a541 | hsl(111 43% 45%) | oklch(0.65 0.16 141) ",
1634
- "#58ac4e | hsl(114 38% 49%) | oklch(0.67 0.15 142) ",
1633
+ "#509300 | hsl(87 100% 29%) | oklch(0.59 0.17 134) ",
1634
+ "#99ca79 | hsl(96 43% 63%) | oklch(0.79 0.12 134) ",
1635
1635
  ],
1636
1636
  "highlightFgGrey": [
1637
- "#737d8e | hsl(218 11% 50%) | oklch(0.59 0.03 261) ",
1638
- "#878ca0 | hsl(228 12% 58%) | oklch(0.64 0.03 274) ",
1637
+ "#838383 | hsl(none 0% 51%) | oklch(0.61 0 none) ",
1638
+ "#bcbcbc | hsl(none 0% 74%) | oklch(0.8 0 none) ",
1639
+ ],
1640
+ "highlightFgOnBgAqua": [
1641
+ "#00796f | hsl(175 100% 24%) | oklch(0.52 0.09 185) ",
1642
+ "#57e0d0 | hsl(173 69% 61%) | oklch(0.83 0.12 184) ",
1643
+ ],
1644
+ "highlightFgOnBgAquamarine": [
1645
+ "#007b55 | hsl(161 100% 24%) | oklch(0.52 0.11 163) ",
1646
+ "#76e0b1 | hsl(153 63% 67%) | oklch(0.83 0.12 163) ",
1647
+ ],
1648
+ "highlightFgOnBgBlue": [
1649
+ "#006ac9 | hsl(208 100% 39%) | oklch(0.53 0.17 254) ",
1650
+ "#a7cfff | hsl(213 100% 83%) | oklch(0.84 0.08 253) ",
1651
+ ],
1652
+ "highlightFgOnBgGreen": [
1653
+ "#417900 | hsl(88 100% 24%) | oklch(0.52 0.15 134) ",
1654
+ "#a8da88 | hsl(97 53% 69%) | oklch(0.83 0.12 134) ",
1655
+ ],
1656
+ "highlightFgOnBgGrey": [
1657
+ "#6c6c6c | hsl(none 0% 42%) | oklch(0.53 0 none) ",
1658
+ "#cccccc | hsl(none 0% 80%) | oklch(0.85 0 none) ",
1659
+ ],
1660
+ "highlightFgOnBgPink": [
1661
+ "#c4008e | hsl(317 100% 38%) | oklch(0.55 0.23 345) ",
1662
+ "#ffb6de | hsl(327 100% 86%) | oklch(0.86 0.1 345) ",
1663
+ ],
1664
+ "highlightFgOnBgPurple": [
1665
+ "#9e29db | hsl(279 71% 51%) | oklch(0.55 0.25 310) ",
1666
+ "#e3beff | hsl(274 100% 87%) | oklch(0.85 0.1 310) ",
1667
+ ],
1668
+ "highlightFgOnBgRed": [
1669
+ "#cf0021 | hsl(350 100% 41%) | oklch(0.54 0.22 25) ",
1670
+ "#ffbbb4 | hsl(6 100% 85%) | oklch(0.85 0.08 26) ",
1671
+ ],
1672
+ "highlightFgOnBgYellow": [
1673
+ "#8a6700 | hsl(45 100% 27%) | oklch(0.53 0.11 85) ",
1674
+ "#f0c66a | hsl(41 82% 68%) | oklch(0.84 0.12 85) ",
1639
1675
  ],
1640
1676
  "highlightFgPink": [
1641
- "#cd5594 | hsl(329 55% 57%) | oklch(0.62 0.17 350) ",
1642
- "#c85a98 | hsl(326 50% 57%) | oklch(0.62 0.16 348) ",
1677
+ "#e826ac | hsl(319 81% 53%) | oklch(0.63 0.25 345) ",
1678
+ "#f8a1d2 | hsl(326 86% 80%) | oklch(0.81 0.12 345) ",
1643
1679
  ],
1644
1680
  "highlightFgPurple": [
1645
- "#9655cd | hsl(273 55% 57%) | oklch(0.58 0.18 307) ",
1646
- "#9b5ac8 | hsl(275 50% 57%) | oklch(0.59 0.17 309) ",
1681
+ "#b94cf9 | hsl(278 94% 64%) | oklch(0.64 0.25 310) ",
1682
+ "#d7aafa | hsl(274 89% 82%) | oklch(0.81 0.12 310) ",
1647
1683
  ],
1648
1684
  "highlightFgRed": [
1649
- "#cd5550 | hsl(2 56% 56%) | oklch(0.6 0.15 25) ",
1650
- "#c85a55 | hsl(3 51% 56%) | oklch(0.6 0.14 25) ",
1685
+ "#fa0a2c | hsl(352 96% 51%) | oklch(0.62 0.25 25) ",
1686
+ "#ffa39b | hsl(5 100% 80%) | oklch(0.81 0.11 25) ",
1651
1687
  ],
1652
1688
  "highlightFgYellow": [
1653
- "#c39b2d | hsl(44 62% 47%) | oklch(0.71 0.13 88) ",
1654
- "#c8a855 | hsl(43 51% 56%) | oklch(0.74 0.11 89) ",
1689
+ "#a67d00 | hsl(45 100% 33%) | oklch(0.61 0.13 85) ",
1690
+ "#dfb65a | hsl(42 68% 61%) | oklch(0.79 0.12 85) ",
1655
1691
  ],
1656
1692
  "iconColor": [
1657
1693
  "#171717b3 | hsl(none 0% 9% / 0.7) | oklch(0.2 0 none / 0.7) ",