theme-vir 28.18.1 → 28.18.3
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/color-theme/build-color-theme.d.ts +24 -18
- package/dist/color-theme/build-color-theme.js +9 -7
- package/dist/color-theme/color-theme-book-pages.d.ts +1 -1
- package/dist/color-theme/color-theme-code.d.ts +1 -1
- package/dist/color-theme/color-theme-code.js +6 -9
- package/dist/color-theme/color-theme-init.d.ts +47 -0
- package/dist/color-theme/color-theme-init.js +1 -0
- package/dist/color-theme/color-theme-override.d.ts +2 -22
- package/dist/color-theme/color-theme-override.js +1 -35
- package/dist/color-theme/color-theme.d.ts +23 -37
- package/dist/color-theme/color-theme.js +94 -25
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +9 -9
|
@@ -48,6 +48,12 @@ export declare const defaultContrastLevels: Readonly<ArrayOrSelectParam<Contrast
|
|
|
48
48
|
* @category Internal
|
|
49
49
|
*/
|
|
50
50
|
export type BuildLowLevelColorThemeOptions = PartialWithUndefined<{
|
|
51
|
+
/**
|
|
52
|
+
* Theme var prefix.
|
|
53
|
+
*
|
|
54
|
+
* @default 'vir'
|
|
55
|
+
*/
|
|
56
|
+
prefix: string;
|
|
51
57
|
/**
|
|
52
58
|
* The default theme colors for {@link defineColorTheme}. Defaults to
|
|
53
59
|
* {@link defaultLightThemePair}.
|
|
@@ -74,31 +80,31 @@ export type BuildLowLevelColorThemeOptions = PartialWithUndefined<{
|
|
|
74
80
|
*
|
|
75
81
|
* @category Color Theme
|
|
76
82
|
*/
|
|
77
|
-
export declare function buildColorTheme(colorPalette: Readonly<ColorPaletteVars>, { omittedColorValues, crossContrastLevels, }?: Readonly<BuildLowLevelColorThemeOptions>): {
|
|
83
|
+
export declare function buildColorTheme(colorPalette: Readonly<ColorPaletteVars>, { omittedColorValues, crossContrastLevels, prefix, }?: Readonly<BuildLowLevelColorThemeOptions>): {
|
|
78
84
|
defaultLight: import("./color-theme.js").ColorTheme<Record<`${Lowercase<string>}-${Lowercase<string>}`, ((Required<Pick<{
|
|
79
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
80
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
85
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
86
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
81
87
|
}, "foreground">> & Partial<Pick<{
|
|
82
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
83
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
88
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
89
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
84
90
|
}, "background">>) | (Required<Pick<{
|
|
85
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
86
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
91
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
92
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
87
93
|
}, "background">> & Partial<Pick<{
|
|
88
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
89
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
94
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
95
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
90
96
|
}, "foreground">>)) & {}>>;
|
|
91
|
-
darkOverride: import("./color-theme-
|
|
92
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
93
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
97
|
+
darkOverride: import("./color-theme-init.js").ColorThemeOverride<Record<`${Lowercase<string>}-${Lowercase<string>}`, ((Required<Pick<{
|
|
98
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
99
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
94
100
|
}, "foreground">> & Partial<Pick<{
|
|
95
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
96
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
101
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
102
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
97
103
|
}, "background">>) | (Required<Pick<{
|
|
98
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
99
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
104
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
105
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
100
106
|
}, "background">> & Partial<Pick<{
|
|
101
|
-
foreground: import("./color-theme.js").ColorInitValue;
|
|
102
|
-
background: import("./color-theme.js").ColorInitValue;
|
|
107
|
+
foreground: import("./color-theme-init.js").ColorInitValue;
|
|
108
|
+
background: import("./color-theme-init.js").ColorInitValue;
|
|
103
109
|
}, "foreground">>)) & {}>>;
|
|
104
110
|
};
|
|
@@ -91,6 +91,7 @@ export const defaultLightThemePair = {
|
|
|
91
91
|
/** @category Internal */
|
|
92
92
|
export const defaultContrastLevels = {
|
|
93
93
|
[ContrastLevelName.BodyText]: true,
|
|
94
|
+
[ContrastLevelName.NonBodyText]: true,
|
|
94
95
|
[ContrastLevelName.Header]: true,
|
|
95
96
|
[ContrastLevelName.Placeholder]: true,
|
|
96
97
|
[ContrastLevelName.Decoration]: true,
|
|
@@ -100,7 +101,7 @@ export const defaultContrastLevels = {
|
|
|
100
101
|
*
|
|
101
102
|
* @category Color Theme
|
|
102
103
|
*/
|
|
103
|
-
export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmittedColorGroupColorValues, crossContrastLevels = defaultContrastLevels, } = {}) {
|
|
104
|
+
export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmittedColorGroupColorValues, crossContrastLevels = defaultContrastLevels, prefix = 'vir', } = {}) {
|
|
104
105
|
const contrastLevels = extractParam(crossContrastLevels, {
|
|
105
106
|
mapFrom: contrastLevelLabel,
|
|
106
107
|
});
|
|
@@ -108,6 +109,7 @@ export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmit
|
|
|
108
109
|
const defaultTheme = {
|
|
109
110
|
background: 'white',
|
|
110
111
|
foreground: 'black',
|
|
112
|
+
prefix,
|
|
111
113
|
};
|
|
112
114
|
const lightThemeColors = {};
|
|
113
115
|
const darkThemeOverrides = {};
|
|
@@ -183,7 +185,7 @@ export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmit
|
|
|
183
185
|
});
|
|
184
186
|
if (cross.crossWith === 'color-in-foreground-light-mode') {
|
|
185
187
|
const name = [
|
|
186
|
-
|
|
188
|
+
prefix,
|
|
187
189
|
firstColor.colorName,
|
|
188
190
|
'foreground',
|
|
189
191
|
cross.contrast,
|
|
@@ -192,7 +194,7 @@ export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmit
|
|
|
192
194
|
}
|
|
193
195
|
else if (cross.crossWith === 'color-in-background-light-mode') {
|
|
194
196
|
const name = [
|
|
195
|
-
|
|
197
|
+
prefix,
|
|
196
198
|
firstColor.colorName,
|
|
197
199
|
'background',
|
|
198
200
|
cross.contrast,
|
|
@@ -201,7 +203,7 @@ export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmit
|
|
|
201
203
|
}
|
|
202
204
|
else if (cross.crossWith === 'color-on-self-light-mode') {
|
|
203
205
|
const name = [
|
|
204
|
-
|
|
206
|
+
prefix,
|
|
205
207
|
firstColor.colorName,
|
|
206
208
|
'on',
|
|
207
209
|
'self',
|
|
@@ -211,7 +213,7 @@ export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmit
|
|
|
211
213
|
}
|
|
212
214
|
else if (cross.crossWith === 'color-in-foreground-dark-mode') {
|
|
213
215
|
const name = [
|
|
214
|
-
|
|
216
|
+
prefix,
|
|
215
217
|
firstColor.colorName,
|
|
216
218
|
'foreground',
|
|
217
219
|
cross.contrast,
|
|
@@ -220,7 +222,7 @@ export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmit
|
|
|
220
222
|
}
|
|
221
223
|
else if (cross.crossWith === 'color-in-background-dark-mode') {
|
|
222
224
|
const name = [
|
|
223
|
-
|
|
225
|
+
prefix,
|
|
224
226
|
firstColor.colorName,
|
|
225
227
|
'background',
|
|
226
228
|
cross.contrast,
|
|
@@ -230,7 +232,7 @@ export function buildColorTheme(colorPalette, { omittedColorValues = defaultOmit
|
|
|
230
232
|
}
|
|
231
233
|
else if (cross.crossWith === 'color-on-self-dark-mode') {
|
|
232
234
|
const name = [
|
|
233
|
-
|
|
235
|
+
prefix,
|
|
234
236
|
firstColor.colorName,
|
|
235
237
|
'on',
|
|
236
238
|
'self',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
2
2
|
import { BookPageControlType, type BookPage } from 'element-book';
|
|
3
|
-
import { type ColorThemeOverride } from './color-theme-
|
|
3
|
+
import { type ColorThemeOverride } from './color-theme-init.js';
|
|
4
4
|
import { type ColorTheme } from './color-theme.js';
|
|
5
5
|
/**
|
|
6
6
|
* Create multiple element-book pages to showcase a theme its overrides (if any).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
2
|
-
import { type ColorThemeOverride } from './color-theme-
|
|
2
|
+
import { type ColorThemeOverride } from './color-theme-init.js';
|
|
3
3
|
import { type ColorTheme } from './color-theme.js';
|
|
4
4
|
/**
|
|
5
5
|
* Convert a color theme into code to define that color theme.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { check } from '@augment-vir/assert';
|
|
1
2
|
import { getObjectTypedEntries, } from '@augment-vir/common';
|
|
3
|
+
import { CSSResult } from 'element-vir';
|
|
2
4
|
/**
|
|
3
5
|
* Convert a color theme into code to define that color theme.
|
|
4
6
|
*
|
|
@@ -64,14 +66,9 @@ function colorInitValuesEqual(a, b) {
|
|
|
64
66
|
if (typeof a !== typeof b) {
|
|
65
67
|
return false;
|
|
66
68
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if ('_$cssResult$' in a && '_$cssResult$' in b) {
|
|
71
|
-
return a.cssText === b.cssText;
|
|
72
|
-
}
|
|
73
|
-
// For references and SingleCssVarDefinition, compare as JSON
|
|
74
|
-
return JSON.stringify(a) === JSON.stringify(b);
|
|
69
|
+
const aString = check.isString(a) || a instanceof CSSResult ? String(a) : JSON.stringify(a);
|
|
70
|
+
const bString = check.isString(b) || b instanceof CSSResult ? String(b) : JSON.stringify(b);
|
|
71
|
+
return aString === bString;
|
|
75
72
|
}
|
|
76
73
|
function extractCssVarName(cssValue) {
|
|
77
74
|
const match = cssValue.match(/^var\(--([^,)]+)/);
|
|
@@ -84,7 +81,7 @@ function colorInitValueToCode(value, indentLevel, paletteVarName) {
|
|
|
84
81
|
else if (typeof value === 'number') {
|
|
85
82
|
return String(value);
|
|
86
83
|
}
|
|
87
|
-
else if (
|
|
84
|
+
else if (value instanceof CSSResult) {
|
|
88
85
|
const cssText = String(value);
|
|
89
86
|
if (paletteVarName) {
|
|
90
87
|
const varName = extractCssVarName(cssText);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type CSSResult } from 'element-vir';
|
|
2
|
+
import { type CssVarName, type SingleCssVarDefinition } from 'lit-css-vars';
|
|
3
|
+
import { type RequireAtLeastOne } from 'type-fest';
|
|
4
|
+
import { type ColorTheme } from './color-theme.js';
|
|
5
|
+
/**
|
|
6
|
+
* Reference another color from this same definition inside {@link ColorInitValue}
|
|
7
|
+
*
|
|
8
|
+
* @category Internal
|
|
9
|
+
*/
|
|
10
|
+
export type ColorInitReference = RequireAtLeastOne<{
|
|
11
|
+
refForeground: CssVarName;
|
|
12
|
+
refBackground: CssVarName;
|
|
13
|
+
refDefaultBackground: true;
|
|
14
|
+
refDefaultForeground: true;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* All possible types for {@link ColorInit}.
|
|
18
|
+
*
|
|
19
|
+
* @category Internal
|
|
20
|
+
*/
|
|
21
|
+
export type ColorInitValue = string | number | CSSResult | ColorInitReference | SingleCssVarDefinition;
|
|
22
|
+
/**
|
|
23
|
+
* An individual theme color init.
|
|
24
|
+
*
|
|
25
|
+
* @category Internal
|
|
26
|
+
*/
|
|
27
|
+
export type ColorInit = RequireAtLeastOne<{
|
|
28
|
+
foreground: ColorInitValue;
|
|
29
|
+
background: ColorInitValue;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Base input type for the type parameter in `defineColorTheme`.
|
|
33
|
+
*
|
|
34
|
+
* @category Internal
|
|
35
|
+
*/
|
|
36
|
+
export type ColorThemeInit = Record<CssVarName, ColorInit>;
|
|
37
|
+
/**
|
|
38
|
+
* Output of `defineColorThemeOverride`.
|
|
39
|
+
*
|
|
40
|
+
* @category Internal
|
|
41
|
+
*/
|
|
42
|
+
export type ColorThemeOverride<Init extends ColorThemeInit = ColorThemeInit> = {
|
|
43
|
+
name: string;
|
|
44
|
+
overrides: Record<CssVarName, string>;
|
|
45
|
+
originalTheme: ColorTheme<Init>;
|
|
46
|
+
asTheme: ColorTheme<Init>;
|
|
47
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type CssVarName } from 'lit-css-vars';
|
|
2
1
|
import { type RequireAtLeastOne } from 'type-fest';
|
|
3
|
-
import {
|
|
2
|
+
import { type ColorInit, type ColorThemeInit, type ColorThemeOverride } from './color-theme-init.js';
|
|
3
|
+
import { themeDefaultKey, type ColorTheme, type NoRefColorInit } from './color-theme.js';
|
|
4
4
|
/**
|
|
5
5
|
* Input for {@link defineColorThemeOverride} color overrides.
|
|
6
6
|
*
|
|
@@ -9,17 +9,6 @@ import { themeDefaultKey, type ColorInit, type ColorTheme, type ColorThemeInit,
|
|
|
9
9
|
export type ColorThemeOverrideInit<Theme extends ColorTheme = ColorTheme> = Omit<Partial<{
|
|
10
10
|
[ColorName in keyof Theme['colors']]: ColorInit;
|
|
11
11
|
}>, typeof themeDefaultKey>;
|
|
12
|
-
/**
|
|
13
|
-
* Output of {@link defineColorThemeOverride}.
|
|
14
|
-
*
|
|
15
|
-
* @category Internal
|
|
16
|
-
*/
|
|
17
|
-
export type ColorThemeOverride<Init extends ColorThemeInit = ColorThemeInit> = {
|
|
18
|
-
name: string;
|
|
19
|
-
overrides: Record<CssVarName, string>;
|
|
20
|
-
originalTheme: ColorTheme<Init>;
|
|
21
|
-
asTheme: ColorTheme<Init>;
|
|
22
|
-
};
|
|
23
12
|
/**
|
|
24
13
|
* Define a color theme override. Use this to define multiple theme variations, like light mode vs
|
|
25
14
|
* dark mode.
|
|
@@ -31,12 +20,3 @@ export declare function defineColorThemeOverride<const Init extends ColorThemeIn
|
|
|
31
20
|
defaultOverride: Readonly<NoRefColorInit>;
|
|
32
21
|
colorOverrides: Readonly<ColorThemeOverrideInit<ColorTheme<Init>>>;
|
|
33
22
|
}>>): ColorThemeOverride<Init>;
|
|
34
|
-
/**
|
|
35
|
-
* Set all color theme CSS vars on the given element. If no override is given, the theme color
|
|
36
|
-
* default values are assigned.
|
|
37
|
-
*
|
|
38
|
-
* @category Color Theme
|
|
39
|
-
*/
|
|
40
|
-
export declare function applyColorTheme<const Theme extends ColorTheme>(
|
|
41
|
-
/** This should usually be the top-level `html` element. */
|
|
42
|
-
element: HTMLElement, fullTheme: Theme, themeOverride?: ColorThemeOverride | undefined): void;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { getObjectTypedEntries, getObjectTypedKeys,
|
|
2
|
-
import { setCssVarValue } from 'lit-css-vars';
|
|
1
|
+
import { getObjectTypedEntries, getObjectTypedKeys, mapObjectValues } from '@augment-vir/common';
|
|
3
2
|
import { createColorCssVarDefault, defineColorTheme, themeDefaultKey, } from './color-theme.js';
|
|
4
3
|
function applyCssVarOverride({ originalTheme, layerKey, themeColor, override, overrideValues, }) {
|
|
5
4
|
const layerOverride = override?.[layerKey];
|
|
@@ -72,36 +71,3 @@ export function defineColorThemeOverride(originalTheme, overrideName, { defaultO
|
|
|
72
71
|
asTheme,
|
|
73
72
|
};
|
|
74
73
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Set all color theme CSS vars on the given element. If no override is given, the theme color
|
|
77
|
-
* default values are assigned.
|
|
78
|
-
*
|
|
79
|
-
* @category Color Theme
|
|
80
|
-
*/
|
|
81
|
-
export function applyColorTheme(
|
|
82
|
-
/** This should usually be the top-level `html` element. */
|
|
83
|
-
element, fullTheme, themeOverride) {
|
|
84
|
-
getObjectTypedValues(fullTheme.colors).forEach((themeColor) => {
|
|
85
|
-
applyIndividualThemeColorValue({
|
|
86
|
-
element,
|
|
87
|
-
layerKey: 'background',
|
|
88
|
-
themeColor,
|
|
89
|
-
themeOverride,
|
|
90
|
-
});
|
|
91
|
-
applyIndividualThemeColorValue({
|
|
92
|
-
element,
|
|
93
|
-
layerKey: 'foreground',
|
|
94
|
-
themeColor,
|
|
95
|
-
themeOverride,
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
function applyIndividualThemeColorValue({ element, layerKey, themeOverride, themeColor, }) {
|
|
100
|
-
const override = themeOverride?.overrides[String(themeColor[layerKey].name)];
|
|
101
|
-
const value = override || themeColor[layerKey].default;
|
|
102
|
-
setCssVarValue({
|
|
103
|
-
forCssVar: themeColor[layerKey],
|
|
104
|
-
onElement: element,
|
|
105
|
-
toValue: value,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
@@ -1,33 +1,8 @@
|
|
|
1
1
|
import { type RequiredAndNotNull, type Values } from '@augment-vir/common';
|
|
2
|
-
import {
|
|
2
|
+
import { CSSResult } from 'element-vir';
|
|
3
3
|
import { type CssVarName, type SingleCssVarDefinition } from 'lit-css-vars';
|
|
4
4
|
import { type RequireAtLeastOne } from 'type-fest';
|
|
5
|
-
|
|
6
|
-
* Reference another color from this same definition inside {@link ColorInitValue}
|
|
7
|
-
*
|
|
8
|
-
* @category Internal
|
|
9
|
-
*/
|
|
10
|
-
export type ColorInitReference = RequireAtLeastOne<{
|
|
11
|
-
refForeground: CssVarName;
|
|
12
|
-
refBackground: CssVarName;
|
|
13
|
-
refDefaultBackground: true;
|
|
14
|
-
refDefaultForeground: true;
|
|
15
|
-
}>;
|
|
16
|
-
/**
|
|
17
|
-
* All possible types for {@link ColorInit}.
|
|
18
|
-
*
|
|
19
|
-
* @category Internal
|
|
20
|
-
*/
|
|
21
|
-
export type ColorInitValue = string | number | CSSResult | ColorInitReference | SingleCssVarDefinition;
|
|
22
|
-
/**
|
|
23
|
-
* An individual theme color init.
|
|
24
|
-
*
|
|
25
|
-
* @category Internal
|
|
26
|
-
*/
|
|
27
|
-
export type ColorInit = RequireAtLeastOne<{
|
|
28
|
-
foreground: ColorInitValue;
|
|
29
|
-
background: ColorInitValue;
|
|
30
|
-
}>;
|
|
5
|
+
import { type ColorInit, type ColorInitReference, type ColorInitValue, type ColorThemeInit, type ColorThemeOverride } from './color-theme-init.js';
|
|
31
6
|
/**
|
|
32
7
|
* Same as {@link ColorInit} but without references.
|
|
33
8
|
*
|
|
@@ -52,12 +27,6 @@ export type ColorThemeColor<Init extends ColorInit = ColorInit, Name extends Css
|
|
|
52
27
|
name: Name;
|
|
53
28
|
init: Init;
|
|
54
29
|
};
|
|
55
|
-
/**
|
|
56
|
-
* Base input type for the type parameter in {@link defineColorTheme}.
|
|
57
|
-
*
|
|
58
|
-
* @category Internal
|
|
59
|
-
*/
|
|
60
|
-
export type ColorThemeInit = Record<CssVarName, ColorInit>;
|
|
61
30
|
/**
|
|
62
31
|
* A finalized color theme, output from {@link defineColorTheme}.
|
|
63
32
|
*
|
|
@@ -69,7 +38,7 @@ export type ColorTheme<Init extends ColorThemeInit = ColorThemeInit> = {
|
|
|
69
38
|
/** The original init object for this theme. */
|
|
70
39
|
init: {
|
|
71
40
|
colors: Init;
|
|
72
|
-
default:
|
|
41
|
+
default: Readonly<DefaultColorThemeInit>;
|
|
73
42
|
};
|
|
74
43
|
};
|
|
75
44
|
/**
|
|
@@ -80,7 +49,7 @@ export type ColorTheme<Init extends ColorThemeInit = ColorThemeInit> = {
|
|
|
80
49
|
export type AllColorThemeColors<Init extends ColorThemeInit = ColorThemeInit> = {
|
|
81
50
|
[ColorName in keyof Init as ColorName extends CssVarName ? ColorName : never]: ColorName extends CssVarName ? Init[ColorName] extends ColorInit ? ColorThemeColor<Init[ColorName], ColorName> : never : never;
|
|
82
51
|
} & {
|
|
83
|
-
[themeDefaultKey]: ColorThemeColor<
|
|
52
|
+
[themeDefaultKey]: ColorThemeColor<DefaultColorThemeInit, typeof themeDefaultKey>;
|
|
84
53
|
};
|
|
85
54
|
/** @category Internal */
|
|
86
55
|
export declare function noRefColorInitToString(init: Values<NoRefColorInit>): string;
|
|
@@ -89,7 +58,15 @@ export declare function noRefColorInitToString(init: Values<NoRefColorInit>): st
|
|
|
89
58
|
*
|
|
90
59
|
* @category Internal
|
|
91
60
|
*/
|
|
92
|
-
export declare function createColorCssVarDefault(fromName: string, init: ColorInitValue, defaultInit:
|
|
61
|
+
export declare function createColorCssVarDefault(fromName: string, init: ColorInitValue, defaultInit: Readonly<DefaultColorThemeInit>, colorsInit: ColorThemeInit): string | number | CSSResult;
|
|
62
|
+
/**
|
|
63
|
+
* Default theme init for {@link defineColorTheme}.
|
|
64
|
+
*
|
|
65
|
+
* @category Internal
|
|
66
|
+
*/
|
|
67
|
+
export type DefaultColorThemeInit = RequiredAndNotNull<NoRefColorInit> & {
|
|
68
|
+
prefix: string;
|
|
69
|
+
};
|
|
93
70
|
/**
|
|
94
71
|
* Default foreground/background color theme used in {@link ColorTheme}. Do not define a theme color
|
|
95
72
|
* with this name!
|
|
@@ -97,9 +74,18 @@ export declare function createColorCssVarDefault(fromName: string, init: ColorIn
|
|
|
97
74
|
* @category Internal
|
|
98
75
|
*/
|
|
99
76
|
export declare const themeDefaultKey = "theme-default";
|
|
77
|
+
/**
|
|
78
|
+
* Set all color theme CSS vars on the given element. If no override is given, the theme color
|
|
79
|
+
* default values are assigned.
|
|
80
|
+
*
|
|
81
|
+
* @category Color Theme
|
|
82
|
+
*/
|
|
83
|
+
export declare function applyColorTheme<const Theme extends ColorTheme>(
|
|
84
|
+
/** This should usually be the top-level `html` element. */
|
|
85
|
+
element: HTMLElement, fullTheme: Theme, themeOverride?: ColorThemeOverride | undefined): void;
|
|
100
86
|
/**
|
|
101
87
|
* Define a color theme.
|
|
102
88
|
*
|
|
103
89
|
* @category Color Theme
|
|
104
90
|
*/
|
|
105
|
-
export declare function defineColorTheme<const Init extends ColorThemeInit>(defaultInit:
|
|
91
|
+
export declare function defineColorTheme<const Init extends ColorThemeInit>(defaultInit: Readonly<DefaultColorThemeInit>, allColorsInit: Init): ColorTheme<Init>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { assert, check } from '@augment-vir/assert';
|
|
2
|
-
import { getObjectTypedEntries, log, } from '@augment-vir/common';
|
|
3
|
-
import {
|
|
2
|
+
import { getObjectTypedEntries, getObjectTypedValues, log, mapObjectValues, } from '@augment-vir/common';
|
|
3
|
+
import { CSSResult } from 'element-vir';
|
|
4
|
+
import { CssVarSyntaxName, defineCssVars, setCssVarValue, } from 'lit-css-vars';
|
|
4
5
|
/** @category Internal */
|
|
5
6
|
export function noRefColorInitToString(init) {
|
|
6
|
-
if (check.isPrimitive(init) ||
|
|
7
|
+
if (check.isPrimitive(init) || init instanceof CSSResult) {
|
|
7
8
|
return String(init);
|
|
8
9
|
}
|
|
9
10
|
else {
|
|
@@ -16,14 +17,16 @@ export function noRefColorInitToString(init) {
|
|
|
16
17
|
* @category Internal
|
|
17
18
|
*/
|
|
18
19
|
export function createColorCssVarDefault(fromName, init, defaultInit, colorsInit) {
|
|
19
|
-
|
|
20
|
+
const defaultForegroundKey = `${defaultInit.prefix}-default-fg`;
|
|
21
|
+
const defaultBackgroundKey = `${defaultInit.prefix}-default-bg`;
|
|
22
|
+
if (check.isPrimitive(init) || init instanceof CSSResult) {
|
|
20
23
|
return init;
|
|
21
24
|
}
|
|
22
25
|
else if ('refDefaultBackground' in init) {
|
|
23
|
-
return `var(
|
|
26
|
+
return `var(--${defaultBackgroundKey}, ${noRefColorInitToString(defaultInit.background)})`;
|
|
24
27
|
}
|
|
25
28
|
else if ('refDefaultForeground' in init) {
|
|
26
|
-
return `var(
|
|
29
|
+
return `var(--${defaultForegroundKey}, ${noRefColorInitToString(defaultInit.foreground)})`;
|
|
27
30
|
}
|
|
28
31
|
else if ('refBackground' in init || 'refForeground' in init) {
|
|
29
32
|
const referenceKey = check.hasKey(init, 'refBackground')
|
|
@@ -39,8 +42,8 @@ export function createColorCssVarDefault(fromName, init, defaultInit, colorsInit
|
|
|
39
42
|
}
|
|
40
43
|
const colorValue = referenced[layerKey] ||
|
|
41
44
|
(layerKey === 'foreground'
|
|
42
|
-
? createColorCssVarDefault(
|
|
43
|
-
: createColorCssVarDefault(
|
|
45
|
+
? createColorCssVarDefault(defaultForegroundKey, defaultInit.foreground, defaultInit, colorsInit)
|
|
46
|
+
: createColorCssVarDefault(defaultBackgroundKey, defaultInit.background, defaultInit, colorsInit));
|
|
44
47
|
return `var(--${reference}-${layerKey === 'foreground' ? 'fg' : 'bg'}, ${createColorCssVarDefault(reference, colorValue, defaultInit, colorsInit)})`;
|
|
45
48
|
}
|
|
46
49
|
else {
|
|
@@ -54,6 +57,39 @@ export function createColorCssVarDefault(fromName, init, defaultInit, colorsInit
|
|
|
54
57
|
* @category Internal
|
|
55
58
|
*/
|
|
56
59
|
export const themeDefaultKey = 'theme-default';
|
|
60
|
+
/**
|
|
61
|
+
* Set all color theme CSS vars on the given element. If no override is given, the theme color
|
|
62
|
+
* default values are assigned.
|
|
63
|
+
*
|
|
64
|
+
* @category Color Theme
|
|
65
|
+
*/
|
|
66
|
+
export function applyColorTheme(
|
|
67
|
+
/** This should usually be the top-level `html` element. */
|
|
68
|
+
element, fullTheme, themeOverride) {
|
|
69
|
+
getObjectTypedValues(fullTheme.colors).forEach((themeColor) => {
|
|
70
|
+
applyIndividualThemeColorValue({
|
|
71
|
+
element,
|
|
72
|
+
layerKey: 'background',
|
|
73
|
+
themeColor,
|
|
74
|
+
themeOverride,
|
|
75
|
+
});
|
|
76
|
+
applyIndividualThemeColorValue({
|
|
77
|
+
element,
|
|
78
|
+
layerKey: 'foreground',
|
|
79
|
+
themeColor,
|
|
80
|
+
themeOverride,
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function applyIndividualThemeColorValue({ element, layerKey, themeOverride, themeColor, }) {
|
|
85
|
+
const override = themeOverride?.overrides[String(themeColor[layerKey].name)];
|
|
86
|
+
const value = override || themeColor[layerKey].default;
|
|
87
|
+
setCssVarValue({
|
|
88
|
+
forCssVar: themeColor[layerKey],
|
|
89
|
+
onElement: element,
|
|
90
|
+
toValue: value,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
57
93
|
/**
|
|
58
94
|
* Define a color theme.
|
|
59
95
|
*
|
|
@@ -64,30 +100,59 @@ export function defineColorTheme(defaultInit, allColorsInit) {
|
|
|
64
100
|
if (themeDefaultKey in allColorsInit) {
|
|
65
101
|
throw new Error(`Cannot define theme color by name '${themeDefaultKey}', it is used internally.`);
|
|
66
102
|
}
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
103
|
+
const defaultForegroundKey = `${defaultInit.prefix}-default-fg`;
|
|
104
|
+
const defaultBackgroundKey = `${defaultInit.prefix}-default-bg`;
|
|
105
|
+
const inverseDefaultForegroundKey = `${defaultInit.prefix}-default-inverse-fg`;
|
|
106
|
+
const inverseDefaultBackgroundKey = `${defaultInit.prefix}-default-inverse-bg`;
|
|
107
|
+
const defaultColorsInit = mapObjectValues({
|
|
108
|
+
[defaultForegroundKey]: createColorCssVarDefault(defaultForegroundKey, defaultInit.foreground, defaultInit, allColorsInit),
|
|
109
|
+
[defaultBackgroundKey]: createColorCssVarDefault(defaultBackgroundKey, defaultInit.background, defaultInit, allColorsInit),
|
|
110
|
+
[inverseDefaultForegroundKey]: createColorCssVarDefault(inverseDefaultForegroundKey, defaultInit.background, defaultInit, allColorsInit),
|
|
111
|
+
[inverseDefaultBackgroundKey]: createColorCssVarDefault(inverseDefaultBackgroundKey, defaultInit.foreground, defaultInit, allColorsInit),
|
|
112
|
+
}, (key, value) => {
|
|
113
|
+
return {
|
|
114
|
+
default: value,
|
|
115
|
+
initialValue: 'transparent',
|
|
116
|
+
syntax: CssVarSyntaxName.Color,
|
|
117
|
+
};
|
|
72
118
|
});
|
|
119
|
+
const defaultColors = defineCssVars(defaultColorsInit);
|
|
73
120
|
const cssVarsSetup = getObjectTypedEntries(allColorsInit).reduce((accum, [colorName, colorInit,]) => {
|
|
74
121
|
const names = createCssVarNames(colorName);
|
|
75
|
-
|
|
122
|
+
const foreground = colorInit.foreground
|
|
76
123
|
? createColorCssVarDefault([
|
|
77
124
|
colorName,
|
|
78
125
|
'foreground',
|
|
79
126
|
].join(' '), colorInit.foreground, defaultInit, allColorsInit)
|
|
80
|
-
:
|
|
81
|
-
|
|
127
|
+
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
128
|
+
`var(${defaultColors[defaultForegroundKey].name}, ${defaultColors[defaultForegroundKey].default})`;
|
|
129
|
+
const background = colorInit.background
|
|
82
130
|
? createColorCssVarDefault([
|
|
83
131
|
colorName,
|
|
84
132
|
'background',
|
|
85
133
|
].join(' '), colorInit.background, defaultInit, allColorsInit)
|
|
86
|
-
:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
134
|
+
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
135
|
+
`var(${defaultColors[defaultBackgroundKey].name}, ${defaultColors[defaultBackgroundKey].default})`;
|
|
136
|
+
accum[names.foreground] = {
|
|
137
|
+
default: foreground,
|
|
138
|
+
initialValue: 'transparent',
|
|
139
|
+
syntax: CssVarSyntaxName.Color,
|
|
140
|
+
};
|
|
141
|
+
accum[names.background] = {
|
|
142
|
+
default: background,
|
|
143
|
+
initialValue: 'transparent',
|
|
144
|
+
syntax: CssVarSyntaxName.Color,
|
|
145
|
+
};
|
|
146
|
+
accum[names.foregroundInverse] = {
|
|
147
|
+
default: `var(--${names.background}, ${background})`,
|
|
148
|
+
initialValue: 'transparent',
|
|
149
|
+
syntax: CssVarSyntaxName.Color,
|
|
150
|
+
};
|
|
151
|
+
accum[names.backgroundInverse] = {
|
|
152
|
+
default: `var(--${names.foreground}, ${foreground})`,
|
|
153
|
+
initialValue: 'transparent',
|
|
154
|
+
syntax: CssVarSyntaxName.Color,
|
|
155
|
+
};
|
|
91
156
|
return accum;
|
|
92
157
|
}, {});
|
|
93
158
|
/**
|
|
@@ -123,15 +188,19 @@ export function defineColorTheme(defaultInit, allColorsInit) {
|
|
|
123
188
|
};
|
|
124
189
|
});
|
|
125
190
|
const themeDefaultColors = {
|
|
126
|
-
|
|
127
|
-
|
|
191
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
192
|
+
foreground: defaultColors[defaultForegroundKey],
|
|
193
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
194
|
+
background: defaultColors[defaultBackgroundKey],
|
|
128
195
|
init: defaultInit,
|
|
129
196
|
name: themeDefaultKey,
|
|
130
197
|
};
|
|
131
198
|
const themeDefaultInverseColors = {
|
|
132
199
|
...themeDefaultColors,
|
|
133
|
-
|
|
134
|
-
|
|
200
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
201
|
+
foreground: defaultColors[inverseDefaultForegroundKey],
|
|
202
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
203
|
+
background: defaultColors[inverseDefaultBackgroundKey],
|
|
135
204
|
};
|
|
136
205
|
return {
|
|
137
206
|
colors: {
|
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export * from './color-theme/color-css.js';
|
|
|
3
3
|
export * from './color-theme/color-palette-book-pages.js';
|
|
4
4
|
export * from './color-theme/color-theme-book-pages.js';
|
|
5
5
|
export * from './color-theme/color-theme-code.js';
|
|
6
|
+
export * from './color-theme/color-theme-init.js';
|
|
6
7
|
export * from './color-theme/color-theme-override.js';
|
|
7
8
|
export * from './color-theme/color-theme.js';
|
package/dist/index.js
CHANGED
|
@@ -3,5 +3,6 @@ export * from './color-theme/color-css.js';
|
|
|
3
3
|
export * from './color-theme/color-palette-book-pages.js';
|
|
4
4
|
export * from './color-theme/color-theme-book-pages.js';
|
|
5
5
|
export * from './color-theme/color-theme-code.js';
|
|
6
|
+
export * from './color-theme/color-theme-init.js';
|
|
6
7
|
export * from './color-theme/color-theme-override.js';
|
|
7
8
|
export * from './color-theme/color-theme.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "theme-vir",
|
|
3
|
-
"version": "28.18.
|
|
3
|
+
"version": "28.18.3",
|
|
4
4
|
"description": "Create an entire web theme.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"design",
|
|
@@ -43,29 +43,29 @@
|
|
|
43
43
|
"test:update": "virmator test web update"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@augment-vir/assert": "^31.
|
|
47
|
-
"@augment-vir/common": "^31.
|
|
48
|
-
"@electrovir/color": "^1.7.
|
|
46
|
+
"@augment-vir/assert": "^31.59.0",
|
|
47
|
+
"@augment-vir/common": "^31.59.0",
|
|
48
|
+
"@electrovir/color": "^1.7.1",
|
|
49
49
|
"apca-w3": "^0.1.9",
|
|
50
|
-
"lit-css-vars": "^3.
|
|
50
|
+
"lit-css-vars": "^3.2.1",
|
|
51
51
|
"type-fest": "^5.4.1"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@augment-vir/test": "^31.
|
|
54
|
+
"@augment-vir/test": "^31.59.0",
|
|
55
55
|
"@types/apca-w3": "^0.1.3",
|
|
56
56
|
"@web/dev-server-esbuild": "^1.0.4",
|
|
57
57
|
"@web/test-runner": "^0.20.2",
|
|
58
58
|
"@web/test-runner-commands": "^0.9.0",
|
|
59
59
|
"@web/test-runner-playwright": "^0.11.1",
|
|
60
60
|
"@web/test-runner-visual-regression": "^0.10.0",
|
|
61
|
-
"element-book": "^26.15.
|
|
62
|
-
"element-vir": "^26.14.
|
|
61
|
+
"element-book": "^26.15.1",
|
|
62
|
+
"element-vir": "^26.14.2",
|
|
63
63
|
"esbuild": "^0.27.2",
|
|
64
64
|
"istanbul-smart-text-reporter": "^1.1.5",
|
|
65
65
|
"markdown-code-example-inserter": "^3.0.3",
|
|
66
66
|
"typedoc": "^0.28.16",
|
|
67
67
|
"typescript": "5.9.3",
|
|
68
|
-
"vira": "^28.19.
|
|
68
|
+
"vira": "^28.19.6",
|
|
69
69
|
"vite": "^7.3.1",
|
|
70
70
|
"vite-tsconfig-paths": "^6.0.4"
|
|
71
71
|
},
|