@universal-material/web 3.0.112 → 3.0.114

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@universal-material/web",
3
- "version": "3.0.112",
3
+ "version": "3.0.114",
4
4
  "description": "Material web components",
5
5
  "type": "module",
6
6
  "keywords": [
package/scss/_global.scss CHANGED
@@ -1,16 +1,16 @@
1
1
  @use "functions";
2
+ @import "mixins/text-bg";
2
3
 
3
4
  @mixin global-styles() {
4
5
  body {
5
- --u-current-text-color-rgb: var(--u-color-on-body-rgb);
6
+ @include _current-color-vars(--u-color-on-body);
7
+
6
8
  background-color: var(--u-color-body);
7
- color: rgba(var(--u-current-text-color-rgb), var(--u-text-opacity));
9
+ color: var(--u-color-high-emphasis);
8
10
  }
9
11
 
10
12
  a {
11
- --u-current-text-color: var(--u-color-primary);
12
- --u-current-text-color-rgb: var(--u-color-primary-rgb);
13
- color: rgba(var(--u-current-text-color-rgb), var(--u-text-opacity));
13
+ color: rgba(var(--u-color-primary-rgb), var(--u-high-emphasis-opacity));
14
14
  border-radius: #{functions.get-spacing-var(extra-small)};
15
15
  text-decoration: none;
16
16
 
@@ -3,8 +3,21 @@
3
3
  @mixin _current-color-vars-important($current-color-var-name) {
4
4
  --u-current-text-color: var(#{$current-color-var-name}) !important;
5
5
  --u-current-text-color-rgb: var(#{$current-color-var-name}-rgb) !important;
6
- --u-text-opacity: 1;
7
- color: rgba(var(--u-current-text-color-rgb), var(--u-text-opacity)) !important;
6
+
7
+ --u-color-high-emphasis: rgba(var(--u-current-text-color-rgb), var(--u-high-emphasis-opacity)) !important;
8
+ --u-color-low-emphasis: rgba(var(--u-current-text-color-rgb), var(--u-low-emphasis-opacity)) !important;
9
+ --u-color-lower-emphasis: rgba(var(--u-current-text-color-rgb), var(--u-lower-emphasis-opacity)) !important;
10
+ color: var(--u-color-high-emphasis) !important;
11
+ }
12
+
13
+ @mixin _current-color-vars($current-color-var-name) {
14
+ --u-current-text-color: var(#{$current-color-var-name});
15
+ --u-current-text-color-rgb: var(#{$current-color-var-name}-rgb);
16
+
17
+ --u-color-high-emphasis: rgba(var(--u-current-text-color-rgb), var(--u-high-emphasis-opacity));
18
+ --u-color-low-emphasis: rgba(var(--u-current-text-color-rgb), var(--u-low-emphasis-opacity));
19
+ --u-color-lower-emphasis: rgba(var(--u-current-text-color-rgb), var(--u-lower-emphasis-opacity));
20
+ color: var(--u-color-high-emphasis);
8
21
  }
9
22
 
10
23
  @mixin _bg-variant-important($color-name) {
@@ -8,7 +8,9 @@
8
8
  @import "typo/typo";
9
9
 
10
10
  @import "reboot";
11
+ @import "global";
11
12
 
12
13
  @if $include-reboot {
13
14
  @include reboot;
15
+ @include global-styles;
14
16
  }
@@ -1,17 +1,35 @@
1
1
  @use "../variables";
2
2
 
3
+ .u-text-monospace { font-family: var(--u-font-monospace); }
4
+
5
+ // Alignment
6
+
7
+ .u-text-justify { text-align: justify !important; }
8
+ .u-text-nowrap { white-space: nowrap !important; }
9
+ .u-text-truncate {
10
+ overflow: hidden;
11
+ text-overflow: ellipsis;
12
+ white-space: nowrap;
13
+ }
14
+
15
+ // Transformation
16
+
17
+ .u-text-lowercase { text-transform: lowercase !important; }
18
+ .u-text-uppercase { text-transform: uppercase !important; }
19
+ .u-text-capitalize { text-transform: capitalize !important; }
20
+
21
+ .u-font-italic { font-style: italic !important; }
22
+
23
+ // Contextual
3
24
  .u-text-high-emphasis {
4
- --u-text-opacity: var(--u-high-emphasis-opacity);
5
- color: rgba(var(--u-current-text-color-rgb), var(--u-text-opacity)) !important;
25
+ color: var(--u-color-high-emphasis) !important;
6
26
  }
7
27
  .u-text-low-emphasis {
8
- --u-text-opacity: var(--u-low-emphasis-opacity);
9
- color: rgba(var(--u-current-text-color-rgb), var(--u-text-opacity)) !important;
28
+ color: var(--u-color-low-emphasis) !important;
10
29
  }
11
30
 
12
31
  .u-text-lower-emphasis {
13
- --u-text-opacity: var(--u-lower-emphasis-opacity);
14
- color: rgba(var(--u-current-text-color-rgb), var(--u-text-opacity)) !important;
32
+ color: var(--u-color-lower-emphasis) !important;
15
33
  }
16
34
 
17
35
  @each $weight, $value in variables.$font-weights {
@@ -1,21 +1,20 @@
1
1
  import { TonalPalette } from '@material/material-color-utilities';
2
2
  import { ThemeColor } from './theme-color.js';
3
3
  export declare class ThemeBuilder {
4
+ #private;
4
5
  cssClass: string | null;
5
6
  colors: ThemeColor[];
6
- neutralColorPalette: TonalPalette;
7
- neutralVariantColorPalette: TonalPalette;
8
7
  private partial;
9
- private scheme;
10
8
  private constructor();
11
9
  static create(primaryColorHex: string): ThemeBuilder;
12
- static createPartial(): ThemeBuilder;
10
+ static createPartial(primaryColorHex: string): ThemeBuilder;
13
11
  addColorFromHex(name: string, hex: string): ThemeBuilder;
14
12
  addColorFromPalette(name: string, palette: TonalPalette): ThemeBuilder;
15
- addFixedColor(name: string, hex: string): ThemeBuilder;
13
+ addStaticColor(name: string, hex: string, tone?: number): ThemeBuilder;
16
14
  setCssClass(cssClass: string): ThemeBuilder;
17
15
  private ensureCssClassStartsWithDot;
18
16
  private ensureThemeColors;
17
+ private ensureStatusColors;
19
18
  private getNeutralVariables;
20
19
  private getNeutralVariantVariables;
21
20
  getColorVariables(color: ThemeColor, dark: boolean): string;
@@ -1 +1 @@
1
- {"version":3,"file":"theme-builder.d.ts","sourceRoot":"","sources":["../../src/theme/theme-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAKnG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,qBAAa,YAAY;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,CAAM;IAC1B,mBAAmB,EAAG,YAAY,CAAC;IACnC,0BAA0B,EAAG,YAAY,CAAC;IAE1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA8B;IAE5C,OAAO;IAWP,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY;IAIpD,MAAM,CAAC,aAAa,IAAI,YAAY;IAOpC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY;IAOxD,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;IAatE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY;IAStD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IAK3C,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,0BAA0B;IAQlC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM;IAQ3D,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,YAAY;IA6BpB,KAAK,IAAI,MAAM;CAmBhB"}
1
+ {"version":3,"file":"theme-builder.d.ts","sourceRoot":"","sources":["../../src/theme/theme-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAK5F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,qBAAa,YAAY;;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,CAAM;IAE1B,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO;IAOP,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY;IAIpD,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY;IAO3D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY;IAOxD,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;IAatE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,YAAY;IAS1E,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IAK3C,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,0BAA0B;IAQlC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM;IAQ3D,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,YAAY;IA6BpB,KAAK,IAAI,MAAM;CAqBhB"}
@@ -1,4 +1,4 @@
1
- import { argbFromHex, Hct, SchemeContent, TonalPalette } from '@material/material-color-utilities';
1
+ import { argbFromHex, CorePalette, TonalPalette } from '@material/material-color-utilities';
2
2
  import { CssVarBuilder } from './css-var-builder.js';
3
3
  import { neutralColors, neutralVariantColors } from './neutral-colors.js';
4
4
  function getCss(selector, content) {
@@ -6,22 +6,19 @@ function getCss(selector, content) {
6
6
  ${content}}`;
7
7
  }
8
8
  export class ThemeBuilder {
9
+ #corePalette;
9
10
  constructor(primaryColorHex) {
10
11
  this.colors = [];
11
12
  this.partial = false;
12
- this.scheme = null;
13
13
  this.cssClass = null;
14
- if (!primaryColorHex) {
15
- return;
16
- }
17
- this.scheme = new SchemeContent(Hct.fromInt(argbFromHex(primaryColorHex)), false, 0);
18
- this.addColorFromPalette('primary', this.scheme.primaryPalette);
14
+ this.#corePalette = CorePalette.of(argbFromHex(primaryColorHex));
15
+ this.addColorFromPalette('primary', this.#corePalette.a1);
19
16
  }
20
17
  static create(primaryColorHex) {
21
18
  return new ThemeBuilder(primaryColorHex);
22
19
  }
23
- static createPartial() {
24
- const themeBuilder = new ThemeBuilder();
20
+ static createPartial(primaryColorHex) {
21
+ const themeBuilder = new ThemeBuilder(primaryColorHex);
25
22
  themeBuilder.partial = true;
26
23
  return themeBuilder;
27
24
  }
@@ -41,9 +38,9 @@ export class ThemeBuilder {
41
38
  this.colors.push({ name: `on-${name}-fixed-variant`, fixedTone: 30, tonalPalette: palette });
42
39
  return this;
43
40
  }
44
- addFixedColor(name, hex) {
41
+ addStaticColor(name, hex, tone = 80) {
45
42
  const palette = TonalPalette.fromInt(argbFromHex(hex));
46
- this.colors.push({ name, fixedTone: 80, tonalPalette: palette });
43
+ this.colors.push({ name, fixedTone: tone, tonalPalette: palette });
47
44
  this.colors.push({ name: `on-${name}`, fixedTone: 15, tonalPalette: palette });
48
45
  this.colors.push({ name: `${name}-container`, fixedTone: 90, tonalPalette: palette });
49
46
  this.colors.push({ name: `on-${name}-container`, fixedTone: 15, tonalPalette: palette });
@@ -61,33 +58,29 @@ export class ThemeBuilder {
61
58
  }
62
59
  ensureThemeColors() {
63
60
  if (!this.colors.find(c => c.name === 'secondary')) {
64
- this.addColorFromPalette('secondary', this.scheme.secondaryPalette);
61
+ this.addColorFromPalette('secondary', this.#corePalette.a2);
65
62
  }
66
63
  if (!this.colors.find(c => c.name === 'tertiary')) {
67
- this.addColorFromPalette('tertiary', this.scheme.tertiaryPalette);
64
+ this.addColorFromPalette('tertiary', this.#corePalette.a3);
68
65
  }
66
+ }
67
+ ensureStatusColors() {
69
68
  if (!this.colors.find(c => c.name === 'success')) {
70
- this.addFixedColor('success', '#007e33');
69
+ this.addStaticColor('success', '#198754', 60);
71
70
  }
72
71
  if (!this.colors.find(c => c.name === 'info')) {
73
- this.addFixedColor('info', '#33b5e5');
72
+ this.addStaticColor('info', '#0dcaf0');
74
73
  }
75
74
  if (!this.colors.find(c => c.name === 'warning')) {
76
- this.addFixedColor('warning', '#ffbb33');
75
+ this.addStaticColor('warning', '#ffc107');
77
76
  }
78
77
  if (!this.colors.find(c => c.name === 'error')) {
79
78
  this.addColorFromHex('error', '#b3261e');
80
79
  }
81
- if (!this.neutralColorPalette) {
82
- this.neutralColorPalette = this.scheme.neutralPalette;
83
- }
84
- if (!this.neutralVariantColorPalette) {
85
- this.neutralVariantColorPalette = this.scheme.neutralVariantPalette;
86
- }
87
80
  }
88
81
  getNeutralVariables(dark) {
89
82
  const builder = CssVarBuilder.create();
90
- this.addColors(builder, neutralColors, this.neutralColorPalette, dark);
83
+ this.addColors(builder, neutralColors, this.#corePalette.n1, dark);
91
84
  builder
92
85
  .add('--u-color-body', 'var(--u-color-surface)')
93
86
  .add('--u-color-body-rgb', 'var(--u-color-surface-rgb)')
@@ -103,7 +96,7 @@ export class ThemeBuilder {
103
96
  }
104
97
  getNeutralVariantVariables(dark) {
105
98
  const builder = CssVarBuilder.create();
106
- this.addColors(builder, neutralVariantColors, this.neutralColorPalette, dark);
99
+ this.addColors(builder, neutralVariantColors, this.#corePalette.n2, dark);
107
100
  return builder.build();
108
101
  }
109
102
  getColorVariables(color, dark) {
@@ -116,12 +109,8 @@ export class ThemeBuilder {
116
109
  for (const color of this.colors) {
117
110
  variables += this.getColorVariables(color, dark);
118
111
  }
119
- if (this.neutralColorPalette) {
120
- variables += this.getNeutralVariables(dark);
121
- }
122
- if (this.neutralVariantColorPalette) {
123
- variables += this.getNeutralVariantVariables(dark);
124
- }
112
+ variables += this.getNeutralVariables(dark);
113
+ variables += this.getNeutralVariantVariables(dark);
125
114
  return variables;
126
115
  }
127
116
  addColors(builder, colors, palette, dark) {
@@ -156,8 +145,9 @@ export class ThemeBuilder {
156
145
  ? `${this.cssClass}.u-dark-mode,
157
146
  ${this.cssClass} .u-dark-mode`
158
147
  : '.u-dark-mode';
148
+ this.ensureThemeColors();
159
149
  if (!this.partial) {
160
- this.ensureThemeColors();
150
+ this.ensureStatusColors();
161
151
  }
162
152
  const variables = `${getCss(lightCssClass, `${this.getColorsVariables(false)}`)}
163
153
 
@@ -1 +1 @@
1
- {"version":3,"file":"theme-builder.js","sourceRoot":"","sources":["../../src/theme/theme-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { argbFromHex, Hct, SchemeContent, TonalPalette } from '@material/material-color-utilities';\n\nimport { Color } from './color.js';\nimport { CssVarBuilder } from './css-var-builder.js';\nimport { neutralColors, neutralVariantColors } from './neutral-colors.js';\nimport { ThemeColor } from './theme-color.js';\n\nfunction getCss(selector: string, content: string): string {\n return `${selector} {\n${content}}`;\n}\n\nexport class ThemeBuilder {\n cssClass: string | null;\n colors: ThemeColor[] = [];\n neutralColorPalette!: TonalPalette;\n neutralVariantColorPalette!: TonalPalette;\n\n private partial = false;\n private scheme: SchemeContent | null = null;\n\n private constructor(primaryColorHex?: string) {\n this.cssClass = null;\n\n if (!primaryColorHex) {\n return;\n }\n\n this.scheme = new SchemeContent(Hct.fromInt(argbFromHex(primaryColorHex)), false, 0);\n this.addColorFromPalette('primary', this.scheme.primaryPalette);\n }\n\n static create(primaryColorHex: string): ThemeBuilder {\n return new ThemeBuilder(primaryColorHex);\n }\n\n static createPartial(): ThemeBuilder {\n const themeBuilder = new ThemeBuilder();\n themeBuilder.partial = true;\n\n return themeBuilder;\n }\n\n addColorFromHex(name: string, hex: string): ThemeBuilder {\n const palette = TonalPalette.fromInt(argbFromHex(hex));\n\n this.addColorFromPalette(name, palette);\n return this;\n }\n\n addColorFromPalette(name: string, palette: TonalPalette): ThemeBuilder {\n this.colors.push({ name, lightTone: 40, darkTone: 80, tonalPalette: palette });\n this.colors.push({ name: `on-${name}`, lightTone: 100, darkTone: 20, tonalPalette: palette });\n this.colors.push({ name: `${name}-container`, lightTone: 90, darkTone: 30, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-container`, lightTone: 10, darkTone: 90, tonalPalette: palette });\n\n this.colors.push({ name: `${name}-fixed`, fixedTone: 90, tonalPalette: palette });\n this.colors.push({ name: `${name}-fixed-dim`, fixedTone: 80, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-fixed`, fixedTone: 10, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-fixed-variant`, fixedTone: 30, tonalPalette: palette });\n return this;\n }\n\n addFixedColor(name: string, hex: string): ThemeBuilder {\n const palette = TonalPalette.fromInt(argbFromHex(hex));\n this.colors.push({ name, fixedTone: 80, tonalPalette: palette });\n this.colors.push({ name: `on-${name}`, fixedTone: 15, tonalPalette: palette });\n this.colors.push({ name: `${name}-container`, fixedTone: 90, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-container`, fixedTone: 15, tonalPalette: palette });\n return this;\n }\n\n setCssClass(cssClass: string): ThemeBuilder {\n this.cssClass = cssClass;\n return this;\n }\n\n private ensureCssClassStartsWithDot(): void {\n if (!this.cssClass || this.cssClass.startsWith('.')) {\n return;\n }\n\n this.cssClass = `.${this.cssClass}`;\n }\n\n private ensureThemeColors(): void {\n if (!this.colors.find(c => c.name === 'secondary')) {\n this.addColorFromPalette('secondary', this.scheme!.secondaryPalette);\n }\n\n if (!this.colors.find(c => c.name === 'tertiary')) {\n this.addColorFromPalette('tertiary', this.scheme!.tertiaryPalette);\n }\n\n if (!this.colors.find(c => c.name === 'success')) {\n this.addFixedColor('success', '#007e33');\n }\n\n if (!this.colors.find(c => c.name === 'info')) {\n this.addFixedColor('info', '#33b5e5');\n }\n\n if (!this.colors.find(c => c.name === 'warning')) {\n this.addFixedColor('warning', '#ffbb33');\n }\n\n if (!this.colors.find(c => c.name === 'error')) {\n this.addColorFromHex('error', '#b3261e');\n }\n\n if (!this.neutralColorPalette) {\n this.neutralColorPalette = this.scheme!.neutralPalette;\n }\n\n if (!this.neutralVariantColorPalette) {\n this.neutralVariantColorPalette = this.scheme!.neutralVariantPalette;\n }\n }\n\n private getNeutralVariables(dark: boolean): string {\n const builder = CssVarBuilder.create();\n\n this.addColors(builder, neutralColors, this.neutralColorPalette, dark);\n\n builder\n .add('--u-color-body', 'var(--u-color-surface)')\n .add('--u-color-body-rgb', 'var(--u-color-surface-rgb)')\n .add('--u-color-inverse-body', 'var(--u-color-inverse-surface)')\n .add('--u-color-inverse-body-rgb', 'var(--u-color-inverse-surface-rgb)')\n .add('--u-color-on-body', 'var(--u-color-on-surface)')\n .add('--u-color-on-body-rgb', 'var(--u-color-on-surface-rgb)')\n .add('--u-color-on-inverse-body', 'var(--u-color-on-inverse-surface)')\n .add('--u-color-on-inverse-body-rgb', 'var(--u-color-on-inverse-surface-rgb)')\n .add('--u-current-text-color', 'var(--u-color-on-body)')\n .add('--u-current-text-color-rgb', 'var(--u-color-on-body-rgb)');\n\n return builder.build();\n }\n\n private getNeutralVariantVariables(dark: boolean): string {\n const builder = CssVarBuilder.create();\n\n this.addColors(builder, neutralVariantColors, this.neutralColorPalette, dark);\n\n return builder.build();\n }\n\n getColorVariables(color: ThemeColor, dark: boolean): string {\n const builder = CssVarBuilder.create();\n\n this.addToneColor(builder, color, color.tonalPalette, dark);\n\n return builder.build();\n }\n\n private getColorsVariables(dark: boolean): string {\n let variables = '';\n\n for (const color of this.colors) {\n variables += this.getColorVariables(color, dark);\n }\n\n if (this.neutralColorPalette) {\n variables += this.getNeutralVariables(dark);\n }\n\n if (this.neutralVariantColorPalette) {\n variables += this.getNeutralVariantVariables(dark);\n }\n\n return variables;\n }\n\n private addColors(builder: CssVarBuilder, colors: Color[], palette: TonalPalette, dark: boolean): void {\n for (const color of colors) {\n this.addToneColor(builder, color, palette, dark);\n }\n }\n\n private addToneColor(builder: CssVarBuilder, color: Color, palette: TonalPalette, dark: boolean): void {\n if (color.fixedTone !== undefined) {\n if (!dark) {\n builder.addFromArgb(color.name, palette.tone(color.fixedTone));\n }\n\n return;\n }\n\n const tone = dark ? color.darkTone! : color.lightTone!;\n\n const inverseTone = dark ? color.lightTone! : color.darkTone!;\n\n const inverseName = `inverse-${color.name}`.replace('inverse-on', 'on-inverse');\n\n builder.addFromArgb(color.name, palette.tone(tone)).addFromArgb(inverseName, palette.tone(inverseTone));\n\n if (color.name === 'surface' || color.name === 'on-surface') {\n const prefix = color.name.startsWith('on-') ? 'on-' : '';\n\n builder.addFromArgb(`${prefix}light-surface`, palette.tone(color.lightTone!));\n builder.addFromArgb(`${prefix}dark-surface`, palette.tone(color.darkTone!));\n }\n\n if (dark) {\n return;\n }\n }\n\n build(): string {\n this.ensureCssClassStartsWithDot();\n\n const lightCssClass = this.cssClass ?? ':root';\n const darkCssClass = this.cssClass\n ? `${this.cssClass}.u-dark-mode,\n${this.cssClass} .u-dark-mode`\n : '.u-dark-mode';\n\n if (!this.partial) {\n this.ensureThemeColors();\n }\n\n const variables = `${getCss(lightCssClass, `${this.getColorsVariables(false)}`)}\n\n${getCss(darkCssClass, this.getColorsVariables(true))}\n`;\n return variables;\n }\n}\n"]}
1
+ {"version":3,"file":"theme-builder.js","sourceRoot":"","sources":["../../src/theme/theme-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { argbFromHex, CorePalette, TonalPalette } from '@material/material-color-utilities';\n\nimport { Color } from './color.js';\nimport { CssVarBuilder } from './css-var-builder.js';\nimport { neutralColors, neutralVariantColors } from './neutral-colors.js';\nimport { ThemeColor } from './theme-color.js';\n\nfunction getCss(selector: string, content: string): string {\n return `${selector} {\n${content}}`;\n}\n\nexport class ThemeBuilder {\n cssClass: string | null;\n colors: ThemeColor[] = [];\n\n private partial = false;\n #corePalette: CorePalette;\n\n private constructor(primaryColorHex: string) {\n this.cssClass = null;\n\n this.#corePalette = CorePalette.of(argbFromHex(primaryColorHex));\n this.addColorFromPalette('primary', this.#corePalette.a1);\n }\n\n static create(primaryColorHex: string): ThemeBuilder {\n return new ThemeBuilder(primaryColorHex);\n }\n\n static createPartial(primaryColorHex: string): ThemeBuilder {\n const themeBuilder = new ThemeBuilder(primaryColorHex);\n themeBuilder.partial = true;\n\n return themeBuilder;\n }\n\n addColorFromHex(name: string, hex: string): ThemeBuilder {\n const palette = TonalPalette.fromInt(argbFromHex(hex));\n\n this.addColorFromPalette(name, palette);\n return this;\n }\n\n addColorFromPalette(name: string, palette: TonalPalette): ThemeBuilder {\n this.colors.push({ name, lightTone: 40, darkTone: 80, tonalPalette: palette });\n this.colors.push({ name: `on-${name}`, lightTone: 100, darkTone: 20, tonalPalette: palette });\n this.colors.push({ name: `${name}-container`, lightTone: 90, darkTone: 30, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-container`, lightTone: 10, darkTone: 90, tonalPalette: palette });\n\n this.colors.push({ name: `${name}-fixed`, fixedTone: 90, tonalPalette: palette });\n this.colors.push({ name: `${name}-fixed-dim`, fixedTone: 80, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-fixed`, fixedTone: 10, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-fixed-variant`, fixedTone: 30, tonalPalette: palette });\n return this;\n }\n\n addStaticColor(name: string, hex: string, tone: number = 80): ThemeBuilder {\n const palette = TonalPalette.fromInt(argbFromHex(hex));\n this.colors.push({ name, fixedTone: tone, tonalPalette: palette });\n this.colors.push({ name: `on-${name}`, fixedTone: 15, tonalPalette: palette });\n this.colors.push({ name: `${name}-container`, fixedTone: 90, tonalPalette: palette });\n this.colors.push({ name: `on-${name}-container`, fixedTone: 15, tonalPalette: palette });\n return this;\n }\n\n setCssClass(cssClass: string): ThemeBuilder {\n this.cssClass = cssClass;\n return this;\n }\n\n private ensureCssClassStartsWithDot(): void {\n if (!this.cssClass || this.cssClass.startsWith('.')) {\n return;\n }\n\n this.cssClass = `.${this.cssClass}`;\n }\n\n private ensureThemeColors(): void {\n if (!this.colors.find(c => c.name === 'secondary')) {\n this.addColorFromPalette('secondary', this.#corePalette.a2);\n }\n\n if (!this.colors.find(c => c.name === 'tertiary')) {\n this.addColorFromPalette('tertiary', this.#corePalette.a3);\n }\n }\n\n private ensureStatusColors(): void {\n if (!this.colors.find(c => c.name === 'success')) {\n this.addStaticColor('success', '#198754', 60);\n }\n\n if (!this.colors.find(c => c.name === 'info')) {\n this.addStaticColor('info', '#0dcaf0');\n }\n\n if (!this.colors.find(c => c.name === 'warning')) {\n this.addStaticColor('warning', '#ffc107');\n }\n\n if (!this.colors.find(c => c.name === 'error')) {\n this.addColorFromHex('error', '#b3261e');\n }\n }\n\n private getNeutralVariables(dark: boolean): string {\n const builder = CssVarBuilder.create();\n\n this.addColors(builder, neutralColors, this.#corePalette.n1, dark);\n\n builder\n .add('--u-color-body', 'var(--u-color-surface)')\n .add('--u-color-body-rgb', 'var(--u-color-surface-rgb)')\n .add('--u-color-inverse-body', 'var(--u-color-inverse-surface)')\n .add('--u-color-inverse-body-rgb', 'var(--u-color-inverse-surface-rgb)')\n .add('--u-color-on-body', 'var(--u-color-on-surface)')\n .add('--u-color-on-body-rgb', 'var(--u-color-on-surface-rgb)')\n .add('--u-color-on-inverse-body', 'var(--u-color-on-inverse-surface)')\n .add('--u-color-on-inverse-body-rgb', 'var(--u-color-on-inverse-surface-rgb)')\n .add('--u-current-text-color', 'var(--u-color-on-body)')\n .add('--u-current-text-color-rgb', 'var(--u-color-on-body-rgb)');\n\n return builder.build();\n }\n\n private getNeutralVariantVariables(dark: boolean): string {\n const builder = CssVarBuilder.create();\n\n this.addColors(builder, neutralVariantColors, this.#corePalette.n2, dark);\n\n return builder.build();\n }\n\n getColorVariables(color: ThemeColor, dark: boolean): string {\n const builder = CssVarBuilder.create();\n\n this.addToneColor(builder, color, color.tonalPalette, dark);\n\n return builder.build();\n }\n\n private getColorsVariables(dark: boolean): string {\n let variables = '';\n\n for (const color of this.colors) {\n variables += this.getColorVariables(color, dark);\n }\n\n variables += this.getNeutralVariables(dark);\n variables += this.getNeutralVariantVariables(dark);\n\n return variables;\n }\n\n private addColors(builder: CssVarBuilder, colors: Color[], palette: TonalPalette, dark: boolean): void {\n for (const color of colors) {\n this.addToneColor(builder, color, palette, dark);\n }\n }\n\n private addToneColor(builder: CssVarBuilder, color: Color, palette: TonalPalette, dark: boolean): void {\n if (color.fixedTone !== undefined) {\n if (!dark) {\n builder.addFromArgb(color.name, palette.tone(color.fixedTone));\n }\n\n return;\n }\n\n const tone = dark ? color.darkTone! : color.lightTone!;\n\n const inverseTone = dark ? color.lightTone! : color.darkTone!;\n\n const inverseName = `inverse-${color.name}`.replace('inverse-on', 'on-inverse');\n\n builder.addFromArgb(color.name, palette.tone(tone)).addFromArgb(inverseName, palette.tone(inverseTone));\n\n if (color.name === 'surface' || color.name === 'on-surface') {\n const prefix = color.name.startsWith('on-') ? 'on-' : '';\n\n builder.addFromArgb(`${prefix}light-surface`, palette.tone(color.lightTone!));\n builder.addFromArgb(`${prefix}dark-surface`, palette.tone(color.darkTone!));\n }\n\n if (dark) {\n return;\n }\n }\n\n build(): string {\n this.ensureCssClassStartsWithDot();\n\n const lightCssClass = this.cssClass ?? ':root';\n const darkCssClass = this.cssClass\n ? `${this.cssClass}.u-dark-mode,\n${this.cssClass} .u-dark-mode`\n : '.u-dark-mode';\n\n this.ensureThemeColors();\n\n if (!this.partial) {\n this.ensureStatusColors();\n }\n\n const variables = `${getCss(lightCssClass, `${this.getColorsVariables(false)}`)}\n\n${getCss(darkCssClass, this.getColorsVariables(true))}\n`;\n return variables;\n }\n}\n"]}