Skip to content

Commit 09b83b6

Browse files
committed
WIP
1 parent 30cf8d3 commit 09b83b6

4 files changed

Lines changed: 649 additions & 534 deletions

File tree

src/basis-theme-stylesheet.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { cssVariablesToString, toCssVariables } from './utils';
2+
3+
interface FlatTokens {
4+
[index: string]: string;
5+
}
6+
7+
declare global {
8+
interface Window {
9+
themeBuilder: BasisThemeStylesheet;
10+
}
11+
}
12+
13+
class BasisThemeStylesheet extends HTMLElement {
14+
sheet: CSSStyleSheet;
15+
map: Map<string, FlatTokens>;
16+
constructor() {
17+
super();
18+
19+
const sheet = new CSSStyleSheet();
20+
this.sheet = sheet;
21+
this.map = new Map();
22+
sheet.replaceSync('');
23+
window.themeBuilder = this;
24+
25+
console.log(
26+
Array.from(new Map<string, FlatTokens>([['', { 'basis.foo.bar': '42px' }]]).values()).map((tokens) =>
27+
cssVariablesToString(toCssVariables(tokens)),
28+
),
29+
);
30+
}
31+
32+
connectedCallback() {
33+
if (this.sheet) {
34+
this.ownerDocument.adoptedStyleSheets.push(this.sheet);
35+
}
36+
}
37+
38+
disconnectedCallback() {
39+
// TODO: Remove from adoptedStyleSheets
40+
}
41+
42+
update() {
43+
let properties = Array.from(this.map.values())
44+
.map((tokens) => cssVariablesToString(toCssVariables(tokens)))
45+
.join(';\n');
46+
console.log(Array.from(this.map.values()));
47+
let css = `.basis-theme {\n${properties}\n}`;
48+
console.log(css);
49+
this.sheet?.replaceSync(css);
50+
}
51+
52+
toggleTokens(id: string, tokens: FlatTokens) {
53+
this.map.set(id, tokens);
54+
this.update();
55+
}
56+
setTokens(input: HTMLButtonElement | HTMLInputElement) {
57+
const tokens = JSON.parse(input.value) as { [index: string]: string };
58+
59+
this.toggleTokens(input.name, tokens);
60+
}
61+
}
62+
63+
customElements.define('basis-theme-stylesheet', BasisThemeStylesheet);

0 commit comments

Comments
 (0)