Skip to content

Commit a4481ff

Browse files
authored
experiment: add global base styles custom CSS properties (#9163)
1 parent bc869e8 commit a4481ff

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

packages/component-base/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
"custom_typings",
2424
"index.d.ts",
2525
"index.js",
26-
"src"
26+
"src",
27+
"!src/style-props.js"
2728
],
2829
"keywords": [
2930
"Vaadin",
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/**
2+
* @license
3+
* Copyright (c) 2017 - 2025 Vaadin Ltd.
4+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5+
*/
6+
import { css } from 'lit';
7+
// TODO: add themable-mixin as a dependency to package.json
8+
import { addGlobalThemeStyles } from '@vaadin/vaadin-themable-mixin/register-styles.js';
9+
10+
addGlobalThemeStyles(
11+
'vaadin-base',
12+
css`
13+
@layer vaadin.base {
14+
html {
15+
/* Background color */
16+
--_vaadin-background: hsl(0 0 100);
17+
18+
/* Container colors */
19+
--_vaadin-background-container: hsl(0 0 95);
20+
--_vaadin-background-container-strong: hsl(0 0 90);
21+
22+
/* Border colors */
23+
--_vaadin-border-color: hsl(0 0 75);
24+
--_vaadin-border-color-strong: hsl(0 0 58); /* Above 3:1 contrast */
25+
26+
/* Text colors */
27+
--_vaadin-color-subtle: hsl(0 0 58); /* Above 3:1 contrast */
28+
--_vaadin-color: hsl(0 0 44); /* Above 4.5:1 contrast */
29+
--_vaadin-color-strong: hsl(0 0 12); /* Above 7:1 contrast */
30+
31+
/* Padding */
32+
--_vaadin-padding: 8px;
33+
--_vaadin-padding-container: 6px 8px;
34+
35+
/* Gap/spacing */
36+
--_vaadin-gap-container-inline: 0.5em;
37+
--_vaadin-gap-container-block: 0.5em;
38+
39+
/* Border radius */
40+
--_vaadin-radius-s: 3px;
41+
--_vaadin-radius-m: 6px;
42+
--_vaadin-radius-l: 12px;
43+
--_vaadin-radius-full: 999px;
44+
45+
/* Focus outline */
46+
--vaadin-focus-ring-width: 2px;
47+
--vaadin-focus-ring-color: var(--_vaadin-color);
48+
49+
/* Icons, used as mask-image */
50+
--_vaadin-icon-calendar: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5" /></svg>');
51+
--_vaadin-icon-checkmark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5"/></svg>');
52+
--_vaadin-icon-chevron-down: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5" /></svg>');
53+
--_vaadin-icon-clock: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" /></svg>');
54+
--_vaadin-icon-cross: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" /></svg>');
55+
--_vaadin-icon-eye: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z" /><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" /></svg>');
56+
--_vaadin-icon-eye-slash: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M3.98 8.223A10.477 10.477 0 0 0 1.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.451 10.451 0 0 1 12 4.5c4.756 0 8.773 3.162 10.065 7.498a10.522 10.522 0 0 1-4.293 5.774M6.228 6.228 3 3m3.228 3.228 3.65 3.65m7.894 7.894L21 21m-3.228-3.228-3.65-3.65m0 0a3 3 0 1 0-4.243-4.243m4.242 4.242L9.88 9.88" /></svg>');
57+
--_vaadin-icon-minus: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M5 12h14" /></svg>');
58+
--_vaadin-icon-plus: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" /></svg>');
59+
--_vaadin-icon-warn: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z" /></svg>');
60+
}
61+
62+
@media (forced-colors: active) {
63+
html {
64+
--_vaadin-background: Canvas;
65+
--_vaadin-border-color: CanvasText;
66+
--_vaadin-border-color-strong: CanvasText;
67+
--_vaadin-color-subtle: CanvasText;
68+
--_vaadin-color: CanvasText;
69+
--_vaadin-color-strong: CanvasText;
70+
--vaadin-icon-color: CanvasText;
71+
--vaadin-focus-ring-color: Highlight;
72+
}
73+
}
74+
}
75+
`,
76+
);

0 commit comments

Comments
 (0)