@a-type/ui 1.8.9 → 1.8.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.
Files changed (55) hide show
  1. package/dist/cjs/colorMode.d.ts +1 -0
  2. package/dist/cjs/colorMode.js +10 -0
  3. package/dist/cjs/colorMode.js.map +1 -1
  4. package/dist/cjs/components/box/Box.js +3 -3
  5. package/dist/cjs/components/box/Box.js.map +1 -1
  6. package/dist/cjs/components/card/Card.d.ts +1 -1
  7. package/dist/cjs/components/navBar/NavBar.js +1 -1
  8. package/dist/cjs/components/scrollArea/ScrollArea.js +8 -11
  9. package/dist/cjs/components/scrollArea/ScrollArea.js.map +1 -1
  10. package/dist/cjs/components/typography/typography.js +4 -4
  11. package/dist/cjs/components/typography/typography.js.map +1 -1
  12. package/dist/cjs/hooks/index.d.ts +1 -0
  13. package/dist/cjs/hooks/index.js +1 -0
  14. package/dist/cjs/hooks/index.js.map +1 -1
  15. package/dist/cjs/hooks/useOverrideTheme.d.ts +2 -0
  16. package/dist/cjs/hooks/useOverrideTheme.js +17 -0
  17. package/dist/cjs/hooks/useOverrideTheme.js.map +1 -0
  18. package/dist/cjs/themes.stories.d.ts +2 -0
  19. package/dist/cjs/themes.stories.js +17 -3
  20. package/dist/cjs/themes.stories.js.map +1 -1
  21. package/dist/cjs/uno.preset.js +187 -140
  22. package/dist/cjs/uno.preset.js.map +1 -1
  23. package/dist/css/main.css +674 -129
  24. package/dist/esm/colorMode.d.ts +1 -0
  25. package/dist/esm/colorMode.js +9 -0
  26. package/dist/esm/colorMode.js.map +1 -1
  27. package/dist/esm/components/box/Box.js +3 -3
  28. package/dist/esm/components/box/Box.js.map +1 -1
  29. package/dist/esm/components/card/Card.d.ts +1 -1
  30. package/dist/esm/components/navBar/NavBar.js +1 -1
  31. package/dist/esm/components/scrollArea/ScrollArea.js +8 -11
  32. package/dist/esm/components/scrollArea/ScrollArea.js.map +1 -1
  33. package/dist/esm/components/typography/typography.js +4 -4
  34. package/dist/esm/components/typography/typography.js.map +1 -1
  35. package/dist/esm/hooks/index.d.ts +1 -0
  36. package/dist/esm/hooks/index.js +1 -0
  37. package/dist/esm/hooks/index.js.map +1 -1
  38. package/dist/esm/hooks/useOverrideTheme.d.ts +2 -0
  39. package/dist/esm/hooks/useOverrideTheme.js +14 -0
  40. package/dist/esm/hooks/useOverrideTheme.js.map +1 -0
  41. package/dist/esm/themes.stories.d.ts +2 -0
  42. package/dist/esm/themes.stories.js +17 -3
  43. package/dist/esm/themes.stories.js.map +1 -1
  44. package/dist/esm/uno.preset.js +187 -140
  45. package/dist/esm/uno.preset.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/colorMode.ts +10 -0
  48. package/src/components/box/Box.tsx +3 -3
  49. package/src/components/navBar/NavBar.tsx +1 -1
  50. package/src/components/scrollArea/ScrollArea.tsx +8 -19
  51. package/src/components/typography/typography.tsx +4 -4
  52. package/src/hooks/index.ts +1 -0
  53. package/src/hooks/useOverrideTheme.ts +14 -0
  54. package/src/themes.stories.tsx +108 -32
  55. package/src/uno.preset.ts +227 -140
package/src/uno.preset.ts CHANGED
@@ -20,8 +20,8 @@ export default function presetAglio({
20
20
  scale = 'md',
21
21
  interFontLocation = 'https://resources.biscuits.club/fonts/Inter-VariableFont_slnt,wght.ttf',
22
22
  colorRanges = {
23
- light: [90, 40],
24
- dark: [0, 60],
23
+ light: [90, 20],
24
+ dark: [0, 80],
25
25
  },
26
26
  borderScale = 1,
27
27
  roundedness = 1,
@@ -70,12 +70,14 @@ export default function presetAglio({
70
70
  light: 'var(--color-attention-light)',
71
71
  dark: 'var(--color-attention-dark)',
72
72
  wash: 'var(--color-attention-wash)',
73
+ ink: 'var(--color-attention-ink)',
73
74
  },
74
75
  accent: {
75
76
  DEFAULT: 'var(--color-accent)',
76
77
  light: 'var(--color-accent-light)',
77
78
  dark: 'var(--color-accent-dark)',
78
79
  wash: 'var(--color-accent-wash)',
80
+ ink: 'var(--color-accent-ink)',
79
81
  },
80
82
  accentWash: 'var(--color-accent-wash)',
81
83
  'accent-wash': 'var(--color-accent-wash)',
@@ -88,6 +90,7 @@ export default function presetAglio({
88
90
  light: 'var(--color-primary-light)',
89
91
  dark: 'var(--color-primary-dark)',
90
92
  wash: 'var(--color-primary-wash)',
93
+ ink: 'var(--color-primary-ink)',
91
94
  },
92
95
  primaryLight: 'var(--color-primary-light)',
93
96
  'primary-light': 'var(--color-primary-light)',
@@ -100,6 +103,7 @@ export default function presetAglio({
100
103
  wash: 'var(--color-gray-wash)',
101
104
  light: 'var(--color-gray-light)',
102
105
  dark: 'var(--color-gray-dark)',
106
+ ink: 'var(--color-gray-ink)',
103
107
  blend: 'var(--color-gray-blend)',
104
108
  },
105
109
  grayBlend: 'var(--color-gray-blend)',
@@ -135,11 +139,11 @@ export default function presetAglio({
135
139
  },
136
140
  spacing: makeSpacing(spacingIncrement),
137
141
  borderRadius: {
138
- xs: `calc(0.25rem * var(--local-corner-scale, var(--global-corner-scale,1)))`,
139
- sm: `calc(0.5rem * var(--local-corner-scale, var(--global-corner-scale,1)))`,
140
- md: `calc(1rem * var(--local-corner-scale, var(--global-corner-scale,1)))`,
141
- lg: `calc(1.25rem * var(--local-corner-scale, var(--global-corner-scale,1)))`,
142
- xl: `calc(1.5rem * var(--local-corner-scale, var(--global-corner-scale,1)))`,
142
+ xs: `calc(0.25rem * var(--local-corner-scale,1) * var(--global-corner-scale,1))`,
143
+ sm: `calc(0.5rem * var(--local-corner-scale,1) * var(--global-corner-scale,1))`,
144
+ md: `calc(1rem * var(--local-corner-scale,1) * var(--global-corner-scale,1))`,
145
+ lg: `calc(1.25rem * var(--local-corner-scale,1) * var(--global-corner-scale,1))`,
146
+ xl: `calc(1.5rem * var(--local-corner-scale,1) * var(--global-corner-scale,1))`,
143
147
  full: cornerScale === 0 ? '0px' : '9999px',
144
148
  },
145
149
  lineWidth: {
@@ -418,10 +422,15 @@ export default function presetAglio({
418
422
 
419
423
  [
420
424
  /^color-(.*)$/,
421
- (match, { theme }) => ({
422
- color: 'var(--v-color-altered,var(--v-color))',
423
- '--v-color': resolveThemeColor(match[1], theme),
424
- }),
425
+ (match, { theme }) => {
426
+ if (match[1] === 'inherit') {
427
+ return { color: 'var(--v-color-altered,var(--v-color))' };
428
+ }
429
+ return {
430
+ color: 'var(--v-color-altered,var(--v-color))',
431
+ '--v-color': resolveThemeColor(match[1], theme),
432
+ };
433
+ },
425
434
  ],
426
435
  [
427
436
  /^color-lighten-(\d+\.?\d*)$/,
@@ -439,6 +448,9 @@ export default function presetAglio({
439
448
  /^bg-(.*)$/,
440
449
  (match, ctx) => {
441
450
  const { theme } = ctx;
451
+ if (match[1] === 'inherit') {
452
+ return { 'background-color': 'var(--v-bg-altered,var(--v-bg))' };
453
+ }
442
454
  const resolvedColor = resolveThemeColor(match[1], theme);
443
455
  if (resolvedColor === null) {
444
456
  return baseBgRule[1](match, ctx);
@@ -603,6 +615,72 @@ export default function presetAglio({
603
615
  --color-shadow-2: var(--palette-shadow-3);
604
616
  --color-overlay: var(--palette-black-overlay);
605
617
  `;
618
+
619
+ const lemon = themeVars({
620
+ primary: 'yellow',
621
+ accent: 'green',
622
+ grayTweak: -10,
623
+ });
624
+ const leek = themeVars({
625
+ primary: 'green',
626
+ accent: 'blue',
627
+ grayTweak: 20,
628
+ primaryWashSaturation: 0.95,
629
+ });
630
+ const tomato = themeVars({
631
+ primary: 'magenta',
632
+ accent: 'green',
633
+ grayTweak: -20,
634
+ });
635
+ const blueberry = themeVars({
636
+ primary: 'blue',
637
+ accent: 'green',
638
+ grayTweak: 20,
639
+ });
640
+ const eggplant = themeVars({
641
+ primary: 'purple',
642
+ accent: 'green',
643
+ grayTweak: -20,
644
+ });
645
+ const salt = themeVars({
646
+ primary: 'true-gray',
647
+ accent: {
648
+ default: 'true-gray-light',
649
+ wash: 'white',
650
+ light: 'true-gray-wash',
651
+ dark: 'true-gray',
652
+ ink: 'true-gray-dark',
653
+ },
654
+ globalSaturation: 0,
655
+ });
656
+
657
+ const computedVars = `
658
+ --palette-gray-wash: hsl(from var(--color-primary-wash) calc(h + var(--gray-hue-tweak, 0)) calc(s * var(--wash-saturation-tweak, 1) * var(--global-saturation, 1)) calc(l * pow(1.025, var(--mode-mult,1))));
659
+ --palette-gray: hsl(from var(--color-primary) calc(h + var(--gray-hue-tweak, 0)) calc(s * var(--global-saturation, 1)) calc(l * 1.125));
660
+ --palette-gray-dark: hsl(from var(--color-primary-dark) calc(h + var(--gray-hue-tweak, 0)) calc(s * 0.75 * var(--global-saturation, 1)) calc(l * pow(1.125, var(--mode-mult,1))));
661
+ --palette-gray-light: hsl(from var(--color-primary-light) calc(h + var(--gray-hue-tweak, 0) * pow(2, var(--mode-mult, 1))) calc(s * 0.5 * var(--global-saturation, 1)) calc(l * pow(1.25, var(--mode-mult,1))));
662
+ --color-wash: var(--color-gray-wash);
663
+ --color-gray-wash: var(--palette-gray-wash);
664
+ --color-gray: var(--palette-gray);
665
+ --color-gray-dark: var(--palette-gray-dark);
666
+ --color-gray-light: var(--palette-gray-light);
667
+ --color-gray-ink: var(--color-black);
668
+ --palette-gray-1: var(--color-gray-wash);
669
+ --palette-gray-2: var(--color-gray-light);
670
+ --palette-gray-3: var(--color-gray-light);
671
+ --palette-gray-4: var(--color-gray);
672
+ --palette-gray-5: var(--color-gray);
673
+ --palette-gray-6: var(--color-gray);
674
+ --palette-gray-7: var(--color-gray-dark);
675
+ --palette-gray-8: var(--color-gray-dark);
676
+ --palette-gray-9: var(--color-black);
677
+ --palette-gray-0: var(--color-black);
678
+ --palette-gray-ex-1: var(--color-black);
679
+ --palette-gray-ex-2: var(--color-black);
680
+ --palette-white: hsl(from var(--color-wash) calc(h + 0) calc(s * 0.3 * var(--global-saturation, 1)) calc(min(100, l + 1 / var(--global-saturation, 1))));
681
+ --palette-black: hsl(from var(--color-gray-dark) calc(h + 0) calc(s * 0.1 * var(--global-saturation, 1)) calc(min(100, l / (var(--mode-mult,1) * -5 + pow(1 + var(--global-saturation, 1), 1.5)))));
682
+ `;
683
+
606
684
  return `
607
685
  @layer preflightBase, preflightVariant, components, responsive, variants, utilities;
608
686
 
@@ -617,7 +695,18 @@ export default function presetAglio({
617
695
  --palette-red-20: #804020;
618
696
  --palette-red-10: #702604;
619
697
  --palette-red-00:rgb(37, 28, 25);
620
- --palette-green-90:rgb(242, 251, 247);
698
+ /* TODO: define these */
699
+ --palette-magenta-90: hsl(from rgb(255, 244, 240) calc(h - 20) s l);
700
+ --palette-magenta-80: hsl(from #ffdbcf calc(h - 20) s l);
701
+ --palette-magenta-70: hsl(from #ffbea6 calc(h - 20) s l);
702
+ --palette-magenta-60: hsl(from #fdad8e calc(h - 20) s l);
703
+ --palette-magenta-50: hsl(from #ff8e61 calc(h - 20) s l);
704
+ --palette-magenta-40: hsl(from #d56f46 calc(h - 20) s l);
705
+ --palette-magenta-30: hsl(from #ae562d calc(h - 20) s l);
706
+ --palette-magenta-20: hsl(from #804020 calc(h - 20) s l);
707
+ --palette-magenta-10: hsl(from #702604 calc(h - 20) s l);
708
+ --palette-magenta-00: hsl(from rgb(37, 28, 25) calc(h - 20) s l);
709
+ --palette-green-90:rgb(240, 255, 248);
621
710
  --palette-green-80: #c2ffe9;
622
711
  --palette-green-70: #92f2d1;
623
712
  --palette-green-60: #86efc8;
@@ -637,7 +726,7 @@ export default function presetAglio({
637
726
  --palette-yellow-20:rgb(111, 83, 23);
638
727
  --palette-yellow-10:rgb(84, 62, 12);
639
728
  --palette-yellow-00:rgb(37, 33, 22);
640
- --palette-blue-90: rgb(239, 249, 256);
729
+ --palette-blue-90: rgb(238, 248, 255);
641
730
  --palette-blue-80: #c4e7ff;
642
731
  --palette-blue-70: #87d3fc;
643
732
  --palette-blue-60: #5fcefe;
@@ -681,40 +770,15 @@ export default function presetAglio({
681
770
  --palette-true-gray-20: #4f4f4f;
682
771
  --palette-true-gray-10: #383838;
683
772
  --palette-true-gray-00: #1f1f1f;
773
+ --palette-true-white: #ffffff;
774
+ --palette-true-black: #303030;
684
775
 
685
776
  --global-saturation: ${saturationScale};
686
777
  --global-corner-scale: ${cornerScale};
687
778
  --global-border-scale: ${borderScale};
688
779
  --global-spacing-scale: ${spacingScale};
689
780
 
690
- --palette-gray-wash: hsl(from var(--color-primary-wash) calc(h + var(--gray-hue-tweak, 0)) calc(s * var(--wash-saturation-tweak, 1) * var(--global-saturation, 1)) calc(l * pow(1.025, var(--mode-mult,1))));
691
- --palette-gray: hsl(from var(--color-primary) calc(h + var(--gray-hue-tweak, 0)) calc(s * var(--global-saturation, 1)) calc(l * 1.125));
692
- --palette-gray-dark: hsl(from var(--color-primary-dark) calc(h + var(--gray-hue-tweak, 0)) calc(s * 0.75 * var(--global-saturation, 1)) calc(l * pow(1.125, var(--mode-mult,1))));
693
- --palette-gray-light: hsl(from var(--color-primary-light) calc(h + var(--gray-hue-tweak, 0) * pow(2, var(--mode-mult, 1))) calc(s * 0.5 * var(--global-saturation, 1)) calc(l * pow(1.25, var(--mode-mult,1))));
694
- --color-wash: var(--color-gray-wash);
695
-
696
- --color-gray-wash: var(--palette-gray-wash);
697
- --color-gray: var(--palette-gray);
698
- --color-gray-dark: var(--palette-gray-dark);
699
- --color-gray-light: var(--palette-gray-light);
700
-
701
- --palette-gray-1: var(--color-gray-wash);
702
- --palette-gray-2: var(--color-gray-light);
703
- --palette-gray-3: var(--color-gray-light);
704
- --palette-gray-4: var(--color-gray);
705
- --palette-gray-5: var(--color-gray);
706
- --palette-gray-6: var(--color-gray);
707
- --palette-gray-7: var(--color-gray-dark);
708
- --palette-gray-8: var(--color-gray-dark);
709
- --palette-gray-9: var(--color-black);
710
- --palette-gray-0: var(--color-black);
711
- --palette-gray-ex-1: var(--color-black);
712
- --palette-gray-ex-2: var(--color-black);
713
-
714
- --palette-true-white: #ffffff;
715
- --palette-true-black: #303030;
716
- --palette-white: hsl(from var(--color-wash) calc(h + 0) calc(s * 0.3 * var(--global-saturation, 1)) calc(min(100, l + 1 / var(--global-saturation, 1))));
717
- --palette-black: hsl(from var(--color-gray-dark) calc(h + 0) calc(s * 0.1 * var(--global-saturation, 1)) calc(min(100, l / (var(--mode-mult,1) * -5 + pow(1 + var(--global-saturation, 1), 1.5)))));
781
+ ${computedVars}
718
782
 
719
783
  --z-nowPlaying: 40;
720
784
  --z-nav: 50;
@@ -732,19 +796,7 @@ export default function presetAglio({
732
796
  ${lightMode}
733
797
 
734
798
  /* DEFAULT THEME (LEMON) */
735
- --color-attention-light: var(--color-red-light);
736
- --color-attention: var(--color-red);
737
- --color-attention-dark: var(--color-red-dark);
738
- --color-attention-wash: var(--color-red-wash);
739
- --color-accent: var(--color-green);
740
- --color-accent-wash: var(--color-green-wash);
741
- --color-accent-light: var(--color-green-light);
742
- --color-accent-dark: var(--color-green-dark);
743
- --color-primary: var(--color-yellow);
744
- --color-primary-light: var(--color-yellow-light);
745
- --color-primary-dark: var(--color-yellow-dark);
746
- --color-primary-wash: var(--color-yellow-wash);
747
- --gray-hue-tweak: -30;
799
+ ${lemon}
748
800
  }
749
801
 
750
802
  /* INTRINSIC DARK THEME */
@@ -755,20 +807,8 @@ export default function presetAglio({
755
807
  }
756
808
 
757
809
  .theme-lemon {
758
- --color-attention-light: var(--color-red-light);
759
- --color-attention: var(--color-red);
760
- --color-attention-dark: var(--color-red-dark);
761
- --color-attention-wash: var(--color-red-wash);
762
- --color-accent: var(--color-green);
763
- --color-accent-wash: var(--color-green-wash);
764
- --color-accent-light: var(--color-green-light);
765
- --color-accent-dark: var(--color-green-dark);
766
- --color-primary: var(--color-yellow);
767
- --color-primary-light: var(--color-yellow-light);
768
- --color-primary-dark: var(--color-yellow-dark);
769
- --color-primary-wash: var(--color-yellow-wash);
770
-
771
- --gray-hue-tweak: -20;
810
+ ${lemon}
811
+ ${computedVars}
772
812
  }
773
813
 
774
814
  /* fix yellow hue in dark mode */
@@ -787,88 +827,28 @@ export default function presetAglio({
787
827
  }
788
828
 
789
829
  .theme-blueberry {
790
- --color-attention-light: var(--color-red-light);
791
- --color-attention: var(--color-red);
792
- --color-attention-dark: var(--color-red-dark);
793
- --color-attention-wash: var(--color-red-wash);
794
- --color-accent: var(--color-green);
795
- --color-accent-wash: var(--color-green-wash);
796
- --color-accent-light: var(--color-green-light);
797
- --color-accent-dark: var(--color-green-dark);
798
- --color-primary: var(--color-blue);
799
- --color-primary-light: var(--color-blue-light);
800
- --color-primary-dark: var(--color-blue-dark);
801
- --color-primary-wash: var(--color-blue-wash);
802
-
803
- --gray-hue-tweak: 20;
830
+ ${blueberry}
831
+ ${computedVars}
804
832
  }
805
833
 
806
834
  .theme-eggplant {
807
- --color-attention-light: var(--color-red-light);
808
- --color-attention: var(--color-red);
809
- --color-attention-dark: var(--color-red-dark);
810
- --color-attention-wash: var(--color-red-wash);
811
- --color-accent: var(--color-green);
812
- --color-accent-wash: var(--color-green-wash);
813
- --color-accent-light: var(--color-green-light);
814
- --color-accent-dark: var(--color-green-dark);
815
- --color-primary: var(--color-purple);
816
- --color-primary-light: var(--color-purple-light);
817
- --color-primary-dark: var(--color-purple-dark);
818
- --color-primary-wash: var(--color-purple-wash);
819
-
820
- --gray-hue-tweak: -20;
835
+ ${eggplant}
836
+ ${computedVars}
821
837
  }
822
838
 
823
839
  .theme-leek {
824
- --color-attention-light: var(--color-red-light);
825
- --color-attention: var(--color-red);
826
- --color-attention-dark: var(--color-red-dark);
827
- --color-attention-wash: var(--color-red-wash);
828
- --color-accent: var(--color-blue);
829
- --color-accent-wash: var(--color-blue-wash);
830
- --color-accent-light: var(--color-blue-light);
831
- --color-accent-dark: var(--color-blue-dark);
832
- --color-primary: var(--color-green);
833
- --color-primary-light: var(--color-green-light);
834
- --color-primary-dark: var(--color-green-dark);
835
- --color-primary-wash: var(--color-green-wash);
836
-
837
- --gray-hue-tweak: 20;
840
+ ${leek}
841
+ ${computedVars}
838
842
  }
839
843
 
840
844
  .theme-tomato {
841
- --color-attention-light: var(--color-red-light);
842
- --color-attention: var(--color-red);
843
- --color-attention-dark: var(--color-red-dark);
844
- --color-attention-wash: var(--color-red-wash);
845
- --color-accent: var(--color-green);
846
- --color-accent-wash: var(--color-green-wash);
847
- --color-accent-light: var(--color-green-light);
848
- --color-accent-dark: var(--color-green-dark);
849
- --color-primary: hsl(from var(--color-red) calc(h - 20) s l);
850
- --color-primary-light: hsl(from var(--color-red-light) calc(h - 20) s l);
851
- --color-primary-dark: hsl(from var(--color-red-dark) calc(h - 20) s l);
852
- --color-primary-wash: hsl(from var(--color-red-wash) calc(h - 20) s l);
853
-
854
- --gray-hue-tweak: -20;
845
+ ${tomato}
846
+ ${computedVars}
855
847
  }
856
848
 
857
849
  .theme-salt {
858
- --color-attention-light: var(--color-red-light);
859
- --color-attention: var(--color-red);
860
- --color-attention-dark: var(--color-red-dark);
861
- --color-attention-wash: var(--color-red-wash);
862
- --color-primary: var(--color-true-gray);
863
- --color-primary-wash: var(--color-true-gray-wash);
864
- --color-primary-light: var(--color-true-gray-light);
865
- --color-primary-dark: var(--color-true-gray-dark);
866
- --color-accent: var(--color-true-gray-light);
867
- --color-accent-light: var(--color-true-gray-wash);
868
- --color-accent-dark: var(--color-true-gray);
869
- --color-accent-wash: var(--color-white);
870
-
871
- --global-saturation: 0;
850
+ ${salt}
851
+ ${computedVars}
872
852
  }
873
853
 
874
854
  html, body {
@@ -902,10 +882,37 @@ export default function presetAglio({
902
882
  /** SYSTEM OVERRIDES **/
903
883
  .override-light {
904
884
  ${lightMode}
885
+ color: var(--color-black);
905
886
  }
906
887
 
907
888
  .override-dark {
908
889
  ${darkMode}
890
+ color: var(--color-black);
891
+ }
892
+
893
+ .theme-override-lemon {
894
+ ${lemon}
895
+ ${computedVars}
896
+ }
897
+ .theme-override-blueberry {
898
+ ${blueberry}
899
+ ${computedVars}
900
+ }
901
+ .theme-override-eggplant {
902
+ ${eggplant}
903
+ ${computedVars}
904
+ }
905
+ .theme-override-leek {
906
+ ${leek}
907
+ ${computedVars}
908
+ }
909
+ .theme-override-tomato {
910
+ ${tomato}
911
+ ${computedVars}
912
+ }
913
+ .theme-override-salt {
914
+ ${salt}
915
+ ${computedVars}
909
916
  }
910
917
  }
911
918
 
@@ -955,7 +962,15 @@ export default function presetAglio({
955
962
  };
956
963
  }
957
964
 
958
- const themeColors = ['red', 'green', 'yellow', 'blue', 'purple', 'true-gray'];
965
+ const themeColors = [
966
+ 'red',
967
+ 'magenta',
968
+ 'green',
969
+ 'yellow',
970
+ 'blue',
971
+ 'purple',
972
+ 'true-gray',
973
+ ];
959
974
  function roundTens(num: number) {
960
975
  return Math.round(num / 10) * 10;
961
976
  }
@@ -963,7 +978,7 @@ function asPaletteValue(num: number) {
963
978
  return roundTens(num).toString().padStart(2, '0');
964
979
  }
965
980
  function generateColors(from: number, to: number) {
966
- const increment = (to - from) / 3;
981
+ const increment = (to - from) / 4;
967
982
  const map = themeColors.reduce(
968
983
  (acc, color) => {
969
984
  acc[`--color-${color}-wash`] = `var(--palette-${color}-${asPaletteValue(
@@ -978,6 +993,9 @@ function generateColors(from: number, to: number) {
978
993
  acc[`--color-${color}-dark`] = `var(--palette-${color}-${asPaletteValue(
979
994
  from + roundTens(increment * 3),
980
995
  )})`;
996
+ acc[`--color-${color}-ink`] = `var(--palette-${color}-${asPaletteValue(
997
+ from + roundTens(increment * 4),
998
+ )})`;
981
999
  return acc;
982
1000
  },
983
1001
  {} as Record<string, string>,
@@ -1054,3 +1072,72 @@ function darken(base: string, level: string) {
1054
1072
  const levelNum = parseFloat(level);
1055
1073
  return lighten(base, (levelNum / -15).toString());
1056
1074
  }
1075
+
1076
+ function themeVars({
1077
+ primary,
1078
+ accent,
1079
+ grayTweak,
1080
+ globalSaturation,
1081
+ primaryWashSaturation,
1082
+ }: {
1083
+ primary: string | ExplicitColorRange;
1084
+ accent: string | ExplicitColorRange;
1085
+ grayTweak?: number;
1086
+ globalSaturation?: number;
1087
+ primaryWashSaturation?: number;
1088
+ }) {
1089
+ return `
1090
+ ${themeVarRange({ name: 'attention', range: 'red' })}
1091
+ ${themeVarRange({ name: 'accent', range: accent })}
1092
+ ${themeVarRange({
1093
+ name: 'primary',
1094
+ range: primary,
1095
+ washSaturation: primaryWashSaturation,
1096
+ })}
1097
+
1098
+ --gray-hue-tweak: ${grayTweak ?? 0};
1099
+ ${
1100
+ globalSaturation !== undefined
1101
+ ? `--global-saturation: ${globalSaturation};`
1102
+ : ''
1103
+ }
1104
+ `;
1105
+ }
1106
+
1107
+ type ExplicitColorRange = {
1108
+ default: string;
1109
+ wash: string;
1110
+ light: string;
1111
+ dark: string;
1112
+ ink: string;
1113
+ };
1114
+ function themeVarRange({
1115
+ name,
1116
+ range,
1117
+ washSaturation = 1,
1118
+ }: {
1119
+ name: string;
1120
+ range: string | ExplicitColorRange;
1121
+ washSaturation?: number;
1122
+ }) {
1123
+ const realRange =
1124
+ typeof range === 'string'
1125
+ ? {
1126
+ default: range,
1127
+ wash: `${range}-wash`,
1128
+ light: `${range}-light`,
1129
+ dark: `${range}-dark`,
1130
+ ink: `${range}-ink`,
1131
+ }
1132
+ : range;
1133
+
1134
+ return `--color-${name}: var(--color-${realRange.default});
1135
+ --color-${name}-wash: ${
1136
+ washSaturation !== 1
1137
+ ? `hsl(from var(--color-${realRange.wash}) h calc(s * ${washSaturation}) l)`
1138
+ : `var(--color-${realRange.wash})`
1139
+ };
1140
+ --color-${name}-light: var(--color-${realRange.light});
1141
+ --color-${name}-dark: var(--color-${realRange.dark});
1142
+ --color-${name}-ink: var(--color-${realRange.ink});`;
1143
+ }