@matteoaliano/forest-ui 0.5.2 → 0.7.0

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/dist/theme.d.mts CHANGED
@@ -734,6 +734,31 @@ interface DesignTokens {
734
734
  toggleColors: Widen<typeof toggleColors>;
735
735
  chartColors: Widen<typeof chartColors>;
736
736
  alpha: Widen<typeof alpha>;
737
+ /**
738
+ * Optional highlight scale for preset-specific accent signals
739
+ * (e.g. "NEW", "Premium", featured alerts, notification dots).
740
+ * When present, components can reference it via theme augmentations.
741
+ */
742
+ highlight?: Widen<typeof magenta>;
743
+ /**
744
+ * Optional per-variant letter spacing overrides. Keys match MUI typography
745
+ * variants. When a variant is omitted, the built-in default is used.
746
+ */
747
+ letterSpacing?: Partial<{
748
+ h1: string;
749
+ h2: string;
750
+ h3: string;
751
+ h4: string;
752
+ h5: string;
753
+ h6: string;
754
+ subtitle1: string;
755
+ subtitle2: string;
756
+ body1: string;
757
+ body2: string;
758
+ caption: string;
759
+ overline: string;
760
+ button: string;
761
+ }>;
737
762
  }
738
763
  /** Configuration for a single variant within a preset. */
739
764
  interface PresetVariantConfig {
package/dist/theme.d.ts CHANGED
@@ -734,6 +734,31 @@ interface DesignTokens {
734
734
  toggleColors: Widen<typeof toggleColors>;
735
735
  chartColors: Widen<typeof chartColors>;
736
736
  alpha: Widen<typeof alpha>;
737
+ /**
738
+ * Optional highlight scale for preset-specific accent signals
739
+ * (e.g. "NEW", "Premium", featured alerts, notification dots).
740
+ * When present, components can reference it via theme augmentations.
741
+ */
742
+ highlight?: Widen<typeof magenta>;
743
+ /**
744
+ * Optional per-variant letter spacing overrides. Keys match MUI typography
745
+ * variants. When a variant is omitted, the built-in default is used.
746
+ */
747
+ letterSpacing?: Partial<{
748
+ h1: string;
749
+ h2: string;
750
+ h3: string;
751
+ h4: string;
752
+ h5: string;
753
+ h6: string;
754
+ subtitle1: string;
755
+ subtitle2: string;
756
+ body1: string;
757
+ body2: string;
758
+ caption: string;
759
+ overline: string;
760
+ button: string;
761
+ }>;
737
762
  }
738
763
  /** Configuration for a single variant within a preset. */
739
764
  interface PresetVariantConfig {
package/dist/theme.js CHANGED
@@ -696,7 +696,7 @@ var alpha = {
696
696
  // src/theme/palette.ts
697
697
  function buildPalette(tokens) {
698
698
  var _a;
699
- const { base: base2, error: error2, warning: warning2, success: success2, info: info2, text: text6, bg: bg6, fg: fg6, border: border6 } = tokens;
699
+ const { base: base2, error: error2, warning: warning2, success: success2, info: info3, text: text6, bg: bg6, fg: fg6, border: border6 } = tokens;
700
700
  return {
701
701
  primary: {
702
702
  main: tokens.bg.brandSolid,
@@ -741,7 +741,8 @@ function buildPalette(tokens) {
741
741
  text: {
742
742
  primary: text6.primary,
743
743
  secondary: text6.secondary,
744
- disabled: text6.disabled
744
+ disabled: text6.disabled,
745
+ placeholder: text6.placeholder
745
746
  },
746
747
  divider: border6.secondary,
747
748
  action: {
@@ -751,13 +752,23 @@ function buildPalette(tokens) {
751
752
  disabled: fg6.disabled,
752
753
  disabledBackground: bg6.disabled
753
754
  },
754
- chart: (_a = tokens.chartColors) != null ? _a : chartColors
755
+ chart: (_a = tokens.chartColors) != null ? _a : chartColors,
756
+ ...tokens.highlight && {
757
+ highlight: {
758
+ main: tokens.highlight[600],
759
+ light: tokens.highlight[300],
760
+ dark: tokens.highlight[700],
761
+ contrastText: tokens.base.white
762
+ }
763
+ }
755
764
  };
756
765
  }
757
766
 
758
767
  // src/theme/typography.ts
759
768
  function buildTypography(tokens) {
760
- const { fontFamily: fontFamily2, display: display2, fontSize: fontSize2, lineHeight: lineHeight2, fontWeight: fontWeight2 } = tokens;
769
+ var _a, _b, _c, _d;
770
+ const { fontFamily: fontFamily2, display: display2, fontSize: fontSize2, lineHeight: lineHeight2, fontWeight: fontWeight2, letterSpacing: letterSpacing2 } = tokens;
771
+ const ls = letterSpacing2 != null ? letterSpacing2 : {};
761
772
  return {
762
773
  fontFamily: fontFamily2,
763
774
  fontWeightRegular: fontWeight2.regular,
@@ -767,59 +778,67 @@ function buildTypography(tokens) {
767
778
  h1: {
768
779
  fontSize: display2.xl.fontSize,
769
780
  lineHeight: display2.xl.lineHeight,
770
- letterSpacing: display2.xl.letterSpacing,
781
+ letterSpacing: (_a = ls.h1) != null ? _a : display2.xl.letterSpacing,
771
782
  fontWeight: fontWeight2.semibold
772
783
  },
773
784
  h2: {
774
785
  fontSize: display2.lg.fontSize,
775
786
  lineHeight: display2.lg.lineHeight,
776
- letterSpacing: display2.lg.letterSpacing,
787
+ letterSpacing: (_b = ls.h2) != null ? _b : display2.lg.letterSpacing,
777
788
  fontWeight: fontWeight2.semibold
778
789
  },
779
790
  h3: {
780
791
  fontSize: display2.md.fontSize,
781
792
  lineHeight: display2.md.lineHeight,
782
- letterSpacing: display2.md.letterSpacing,
793
+ letterSpacing: (_c = ls.h3) != null ? _c : display2.md.letterSpacing,
783
794
  fontWeight: fontWeight2.semibold
784
795
  },
785
796
  h4: {
786
797
  fontSize: display2.sm.fontSize,
787
798
  lineHeight: display2.sm.lineHeight,
799
+ ...ls.h4 !== void 0 && { letterSpacing: ls.h4 },
788
800
  fontWeight: fontWeight2.semibold
789
801
  },
790
802
  h5: {
791
803
  fontSize: display2.xs.fontSize,
792
804
  lineHeight: display2.xs.lineHeight,
805
+ ...ls.h5 !== void 0 && { letterSpacing: ls.h5 },
793
806
  fontWeight: fontWeight2.semibold
794
807
  },
795
808
  h6: {
796
809
  fontSize: fontSize2.xl,
797
810
  lineHeight: lineHeight2.xl,
811
+ ...ls.h6 !== void 0 && { letterSpacing: ls.h6 },
798
812
  fontWeight: fontWeight2.semibold
799
813
  },
800
814
  subtitle1: {
801
815
  fontSize: fontSize2.lg,
802
816
  lineHeight: lineHeight2.lg,
817
+ ...ls.subtitle1 !== void 0 && { letterSpacing: ls.subtitle1 },
803
818
  fontWeight: fontWeight2.medium
804
819
  },
805
820
  subtitle2: {
806
821
  fontSize: fontSize2.md,
807
822
  lineHeight: lineHeight2.md,
823
+ ...ls.subtitle2 !== void 0 && { letterSpacing: ls.subtitle2 },
808
824
  fontWeight: fontWeight2.medium
809
825
  },
810
826
  body1: {
811
827
  fontSize: fontSize2.md,
812
828
  lineHeight: lineHeight2.md,
829
+ ...ls.body1 !== void 0 && { letterSpacing: ls.body1 },
813
830
  fontWeight: fontWeight2.regular
814
831
  },
815
832
  body2: {
816
833
  fontSize: fontSize2.sm,
817
834
  lineHeight: lineHeight2.sm,
835
+ ...ls.body2 !== void 0 && { letterSpacing: ls.body2 },
818
836
  fontWeight: fontWeight2.regular
819
837
  },
820
838
  caption: {
821
839
  fontSize: fontSize2.xs,
822
840
  lineHeight: lineHeight2.xs,
841
+ ...ls.caption !== void 0 && { letterSpacing: ls.caption },
823
842
  fontWeight: fontWeight2.regular
824
843
  },
825
844
  overline: {
@@ -827,13 +846,14 @@ function buildTypography(tokens) {
827
846
  lineHeight: lineHeight2.xxs,
828
847
  fontWeight: fontWeight2.medium,
829
848
  textTransform: "uppercase",
830
- letterSpacing: "0.08em"
849
+ letterSpacing: (_d = ls.overline) != null ? _d : "0.08em"
831
850
  },
832
851
  button: {
833
852
  fontSize: fontSize2.sm,
834
853
  lineHeight: lineHeight2.sm,
835
854
  fontWeight: fontWeight2.semibold,
836
- textTransform: "none"
855
+ textTransform: "none",
856
+ ...ls.button !== void 0 && { letterSpacing: ls.button }
837
857
  }
838
858
  };
839
859
  }
@@ -902,7 +922,8 @@ function buildComponents(tokens) {
902
922
  error: error2,
903
923
  warning: warning2,
904
924
  success: success2,
905
- info: info2,
925
+ info: info3,
926
+ highlight: highlight2,
906
927
  radius: radius6,
907
928
  focusRings: focusRings6,
908
929
  shadows: tokenShadows,
@@ -1166,6 +1187,13 @@ function buildComponents(tokens) {
1166
1187
  gap: 4,
1167
1188
  "&:hover": {
1168
1189
  backgroundColor: bg6.primaryHover
1190
+ },
1191
+ "&.Mui-selected": {
1192
+ backgroundColor: info3[50],
1193
+ color: info3[700],
1194
+ "&:hover": {
1195
+ backgroundColor: info3[100]
1196
+ }
1169
1197
  }
1170
1198
  }
1171
1199
  }
@@ -1196,7 +1224,11 @@ function buildComponents(tokens) {
1196
1224
  backgroundColor: bg6.primaryHover
1197
1225
  },
1198
1226
  '&[aria-selected="true"]': {
1199
- backgroundColor: bg6.brandPrimary
1227
+ backgroundColor: info3[50],
1228
+ color: info3[700]
1229
+ },
1230
+ '&[aria-selected="true"].Mui-focused': {
1231
+ backgroundColor: info3[100]
1200
1232
  }
1201
1233
  },
1202
1234
  listbox: {
@@ -1547,7 +1579,7 @@ function buildComponents(tokens) {
1547
1579
  minHeight: 48
1548
1580
  },
1549
1581
  indicator: {
1550
- backgroundColor: fg6.brandPrimary,
1582
+ backgroundColor: info3[600],
1551
1583
  height: 2
1552
1584
  }
1553
1585
  }
@@ -1568,14 +1600,33 @@ function buildComponents(tokens) {
1568
1600
  backgroundColor: bg6.primaryHover
1569
1601
  },
1570
1602
  "&.Mui-selected": {
1571
- color: fg6.brandPrimary,
1572
- backgroundColor: bg6.brandPrimary
1603
+ color: info3[700],
1604
+ backgroundColor: info3[50]
1573
1605
  }
1574
1606
  }
1575
1607
  }
1576
1608
  },
1577
1609
  // ─── Chip ───────────────────────────────────────────────────────
1578
1610
  MuiChip: {
1611
+ variants: [
1612
+ ...highlight2 ? [
1613
+ {
1614
+ props: { color: "highlight" },
1615
+ style: {
1616
+ "&.MuiChip-filled": {
1617
+ backgroundColor: highlight2[600],
1618
+ color: base2.white,
1619
+ "& .MuiChip-deleteIcon": { color: highlight2[200] }
1620
+ },
1621
+ "&.MuiChip-outlined": {
1622
+ borderColor: highlight2[300],
1623
+ color: highlight2[700],
1624
+ "& .MuiChip-deleteIcon": { color: highlight2[400] }
1625
+ }
1626
+ }
1627
+ }
1628
+ ] : []
1629
+ ],
1579
1630
  styleOverrides: {
1580
1631
  root: {
1581
1632
  borderRadius: radius6.md
@@ -1608,9 +1659,11 @@ function buildComponents(tokens) {
1608
1659
  },
1609
1660
  colorSecondary: {
1610
1661
  "&.MuiChip-filled": {
1611
- backgroundColor: tokens.bg.secondarySubtle,
1612
- color: tokens.text.secondary,
1613
- "& .MuiChip-deleteIcon": { color: tokens.fg.secondary }
1662
+ backgroundColor: highlight2 ? highlight2[50] : tokens.bg.secondarySubtle,
1663
+ color: highlight2 ? highlight2[700] : tokens.text.secondary,
1664
+ "& .MuiChip-deleteIcon": {
1665
+ color: highlight2 ? highlight2[500] : tokens.fg.secondary
1666
+ }
1614
1667
  }
1615
1668
  },
1616
1669
  colorError: {
@@ -1636,9 +1689,9 @@ function buildComponents(tokens) {
1636
1689
  },
1637
1690
  colorInfo: {
1638
1691
  "&.MuiChip-filled": {
1639
- backgroundColor: info2[50],
1640
- color: info2[700],
1641
- "& .MuiChip-deleteIcon": { color: info2[400] }
1692
+ backgroundColor: info3[50],
1693
+ color: info3[700],
1694
+ "& .MuiChip-deleteIcon": { color: info3[400] }
1642
1695
  }
1643
1696
  }
1644
1697
  }
@@ -1709,9 +1762,9 @@ function buildComponents(tokens) {
1709
1762
  backgroundColor: bg6.primaryHover
1710
1763
  },
1711
1764
  "&.Mui-selected": {
1712
- backgroundColor: bg6.brandPrimary,
1765
+ backgroundColor: info3[50],
1713
1766
  "&:hover": {
1714
- backgroundColor: bg6.brandPrimary
1767
+ backgroundColor: info3[100]
1715
1768
  }
1716
1769
  }
1717
1770
  }
@@ -1752,7 +1805,12 @@ function buildComponents(tokens) {
1752
1805
  dot: {
1753
1806
  minWidth: 8,
1754
1807
  height: 8,
1755
- borderRadius: radius6.full
1808
+ borderRadius: radius6.full,
1809
+ ...highlight2 && {
1810
+ "&.MuiBadge-colorDefault, &.MuiBadge-colorPrimary": {
1811
+ backgroundColor: highlight2[500]
1812
+ }
1813
+ }
1756
1814
  }
1757
1815
  }
1758
1816
  },
@@ -1781,10 +1839,10 @@ function buildComponents(tokens) {
1781
1839
  backgroundColor: bg6.primaryHover
1782
1840
  },
1783
1841
  "&.Mui-selected": {
1784
- backgroundColor: bg6.brandPrimary,
1785
- color: buttonColors6.secondaryColor.fg,
1842
+ backgroundColor: info3[50],
1843
+ color: info3[700],
1786
1844
  "&:hover": {
1787
- backgroundColor: bg6.brandSecondary
1845
+ backgroundColor: info3[100]
1788
1846
  }
1789
1847
  }
1790
1848
  }
@@ -1836,6 +1894,31 @@ function buildComponents(tokens) {
1836
1894
  defaultProps: {
1837
1895
  variant: "standard"
1838
1896
  },
1897
+ variants: [
1898
+ ...highlight2 ? [
1899
+ {
1900
+ props: { variant: "featured" },
1901
+ style: {
1902
+ borderRadius: radius6.xl,
1903
+ fontSize: 14,
1904
+ lineHeight: "20px",
1905
+ padding: "12px 16px",
1906
+ alignItems: "center",
1907
+ backgroundColor: highlight2[50],
1908
+ color: highlight2[700],
1909
+ border: `1px solid ${highlight2[200]}`,
1910
+ "& .MuiAlert-icon": {
1911
+ color: highlight2[600],
1912
+ padding: 0,
1913
+ marginRight: 12
1914
+ },
1915
+ "& .MuiAlertTitle-root": {
1916
+ color: highlight2[800]
1917
+ }
1918
+ }
1919
+ }
1920
+ ] : []
1921
+ ],
1839
1922
  styleOverrides: {
1840
1923
  root: {
1841
1924
  borderRadius: radius6.xl,
@@ -1869,11 +1952,11 @@ function buildComponents(tokens) {
1869
1952
  }
1870
1953
  },
1871
1954
  standardInfo: {
1872
- backgroundColor: info2[50],
1873
- color: info2[700],
1874
- border: `1px solid ${info2[300]}`,
1955
+ backgroundColor: info3[50],
1956
+ color: info3[700],
1957
+ border: `1px solid ${info3[300]}`,
1875
1958
  "& .MuiAlert-icon": {
1876
- color: info2[600]
1959
+ color: info3[600]
1877
1960
  }
1878
1961
  },
1879
1962
  icon: {
@@ -2322,10 +2405,12 @@ function buildComponents(tokens) {
2322
2405
  MuiLink: {
2323
2406
  styleOverrides: {
2324
2407
  root: {
2325
- color: fg6.brandPrimary,
2408
+ color: info3[600],
2326
2409
  fontWeight: 500,
2410
+ textDecorationColor: info3[600],
2327
2411
  "&:hover": {
2328
- color: buttonColors6.primary.bgHover
2412
+ color: info3[700],
2413
+ textDecorationColor: info3[700]
2329
2414
  }
2330
2415
  }
2331
2416
  }
@@ -2618,23 +2703,23 @@ function buildComponents(tokens) {
2618
2703
  backgroundColor: bg6.primaryHover
2619
2704
  },
2620
2705
  "&.Mui-selected": {
2621
- backgroundColor: fg6.brandPrimary,
2706
+ backgroundColor: info3[600],
2622
2707
  color: base2.white,
2623
2708
  fontWeight: 600,
2624
2709
  "&:hover": {
2625
- backgroundColor: buttonColors6.primary.bgHover
2710
+ backgroundColor: info3[700]
2626
2711
  },
2627
2712
  "&:focus": {
2628
- backgroundColor: fg6.brandPrimary
2713
+ backgroundColor: info3[600]
2629
2714
  }
2630
2715
  },
2631
2716
  "&.MuiPickersDay-today": {
2632
- border: `1px solid ${border6.brandSolid}`,
2633
- color: fg6.brandPrimary,
2717
+ border: `1px solid ${info3[600]}`,
2718
+ color: info3[700],
2634
2719
  backgroundColor: "transparent",
2635
2720
  fontWeight: 600,
2636
2721
  "&.Mui-selected": {
2637
- backgroundColor: fg6.brandPrimary,
2722
+ backgroundColor: info3[600],
2638
2723
  color: base2.white,
2639
2724
  border: "none"
2640
2725
  }
@@ -3576,12 +3661,14 @@ var forestInternalPreset = {
3576
3661
  };
3577
3662
 
3578
3663
  // src/theme/presets/forest-alkemy-plus.ts
3664
+ var info2 = violet;
3665
+ var highlight = magenta;
3579
3666
  var colors2 = {
3580
3667
  base,
3581
3668
  error,
3582
3669
  warning,
3583
3670
  success,
3584
- info,
3671
+ info: info2,
3585
3672
  brand: {
3586
3673
  25: gray[25],
3587
3674
  50: gray[50],
@@ -3637,8 +3724,8 @@ var text5 = {
3637
3724
  successPrimary: success[600]
3638
3725
  };
3639
3726
  var bg5 = {
3640
- primary: gray[50],
3641
- primaryAlt: gray[50],
3727
+ primary: gray[25],
3728
+ primaryAlt: gray[25],
3642
3729
  primaryHover: gray[100],
3643
3730
  primarySolid: gray[950],
3644
3731
  secondary: base.white,
@@ -3646,8 +3733,8 @@ var bg5 = {
3646
3733
  secondarySubtle: gray[25],
3647
3734
  secondaryHover: gray[50],
3648
3735
  secondarySolid: gray[600],
3649
- tertiary: gray[100],
3650
- quaternary: gray[200],
3736
+ tertiary: gray[50],
3737
+ quaternary: gray[100],
3651
3738
  active: gray[200],
3652
3739
  disabled: gray[100],
3653
3740
  disabledSubtle: gray[50],
@@ -3819,20 +3906,38 @@ var chartColors5 = {
3819
3906
  crosshairFg: gray[500],
3820
3907
  legendFg: text5.tertiary,
3821
3908
  series: [
3822
- { fg: misc.purple[500], fgHover: misc.purple[600], bg: misc.purple[100], bgHover: misc.purple[200] },
3823
- { fg: misc.orangeDark[400], fgHover: misc.orangeDark[500], bg: misc.orangeDark[100], bgHover: misc.orangeDark[200] },
3909
+ // Brand accents lead violet + magenta anchor the palette
3910
+ { fg: violet[500], fgHover: violet[600], bg: violet[100], bgHover: violet[200] },
3911
+ { fg: magenta[500], fgHover: magenta[600], bg: magenta[100], bgHover: magenta[200] },
3912
+ // Complementary rotation — cool → warm → earth
3824
3913
  { fg: misc.teal[300], fgHover: misc.teal[400], bg: misc.teal[50], bgHover: misc.teal[100] },
3825
3914
  { fg: warning[400], fgHover: warning[500], bg: warning[100], bgHover: warning[200] },
3826
- { fg: misc.rose[400], fgHover: misc.rose[500], bg: misc.rose[100], bgHover: misc.rose[200] },
3827
3915
  { fg: misc.blueLight[400], fgHover: misc.blueLight[500], bg: misc.blueLight[100], bgHover: misc.blueLight[200] },
3828
- { fg: misc.orange[300], fgHover: misc.orange[400], bg: misc.orange[100], bgHover: misc.orange[200] },
3829
- { fg: misc.cyan[600], fgHover: misc.cyan[700], bg: misc.cyan[100], bgHover: misc.cyan[200] },
3916
+ { fg: misc.rose[400], fgHover: misc.rose[500], bg: misc.rose[100], bgHover: misc.rose[200] },
3830
3917
  { fg: misc.green[500], fgHover: misc.green[600], bg: misc.green[100], bgHover: misc.green[200] },
3831
- { fg: misc.pink[400], fgHover: misc.pink[500], bg: misc.pink[100], bgHover: misc.pink[200] },
3832
- { fg: misc.fuchsia[400], fgHover: misc.fuchsia[500], bg: misc.fuchsia[100], bgHover: misc.fuchsia[200] },
3833
- { fg: misc.teal[600], fgHover: misc.teal[700], bg: misc.teal[100], bgHover: misc.teal[200] }
3918
+ { fg: misc.orangeDark[400], fgHover: misc.orangeDark[500], bg: misc.orangeDark[100], bgHover: misc.orangeDark[200] },
3919
+ { fg: misc.cyan[600], fgHover: misc.cyan[700], bg: misc.cyan[100], bgHover: misc.cyan[200] },
3920
+ { fg: misc.orange[300], fgHover: misc.orange[400], bg: misc.orange[100], bgHover: misc.orange[200] },
3921
+ { fg: misc.teal[600], fgHover: misc.teal[700], bg: misc.teal[100], bgHover: misc.teal[200] },
3922
+ // Pink/fuchsia kept as tail fallbacks only — too close to magenta to sit near position 1
3923
+ { fg: misc.pink[400], fgHover: misc.pink[500], bg: misc.pink[100], bgHover: misc.pink[200] }
3834
3924
  ]
3835
3925
  };
3926
+ var letterSpacing = {
3927
+ h1: "-0.02em",
3928
+ h2: "-0.02em",
3929
+ h3: "-0.02em",
3930
+ h4: "-0.02em",
3931
+ h5: "-0.02em",
3932
+ h6: "-0.02em",
3933
+ subtitle1: "0.02em",
3934
+ subtitle2: "0.02em",
3935
+ body1: "0.02em",
3936
+ body2: "0.02em",
3937
+ caption: "0.02em",
3938
+ overline: "0.02em",
3939
+ button: "0.02em"
3940
+ };
3836
3941
  var focusRings5 = {
3837
3942
  brand: "0px 0px 0px 4px #4040403d",
3838
3943
  brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #4040403d",
@@ -3853,7 +3958,7 @@ var forestAlkemyPlusPreset = {
3853
3958
  error,
3854
3959
  warning,
3855
3960
  success,
3856
- info,
3961
+ info: info2,
3857
3962
  spacing,
3858
3963
  radius: radius5,
3859
3964
  shadows,
@@ -3878,7 +3983,9 @@ var forestAlkemyPlusPreset = {
3878
3983
  sliderColors: sliderColors5,
3879
3984
  toggleColors: toggleColors5,
3880
3985
  chartColors: chartColors5,
3881
- alpha
3986
+ alpha,
3987
+ letterSpacing,
3988
+ highlight
3882
3989
  }
3883
3990
  }
3884
3991
  }