@blocklet/theme 2.13.54 → 2.13.56
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/cjs/index.js +89 -9
- package/dist/es/index.js +83 -8
- package/dist/types/index.d.ts +17 -1
- package/package.json +2 -2
package/dist/cjs/index.js
CHANGED
|
@@ -140,7 +140,12 @@ __export(src_exports, {
|
|
|
140
140
|
BLOCKLET_THEME_PREFER_KEY: () => BLOCKLET_THEME_PREFER_KEY,
|
|
141
141
|
DEFAULT_FONTS: () => DEFAULT_FONTS,
|
|
142
142
|
DID_CONNECT_THEME_DARK: () => DID_CONNECT_THEME_DARK,
|
|
143
|
-
DID_CONNECT_THEME_LIGHT: () => DID_CONNECT_THEME_LIGHT
|
|
143
|
+
DID_CONNECT_THEME_LIGHT: () => DID_CONNECT_THEME_LIGHT,
|
|
144
|
+
buildThemeScript: () => buildThemeScript,
|
|
145
|
+
buildThemeStyles: () => buildThemeStyles,
|
|
146
|
+
getDefaultThemePrefer: () => getDefaultThemePrefer,
|
|
147
|
+
isValidThemeMode: () => isValidThemeMode,
|
|
148
|
+
merge: () => merge
|
|
144
149
|
});
|
|
145
150
|
module.exports = __toCommonJS(src_exports);
|
|
146
151
|
|
|
@@ -254,15 +259,85 @@ function alpha(color, value) {
|
|
|
254
259
|
|
|
255
260
|
// src/util.ts
|
|
256
261
|
var import_deepmerge = __toESM(require_cjs());
|
|
262
|
+
var BLOCKLET_THEME_PREFER_KEY = "blocklet_theme_prefer";
|
|
257
263
|
var merge = (x, y) => {
|
|
258
264
|
return (0, import_deepmerge.default)(x, y, {
|
|
259
265
|
// 采用替换策略合并数组
|
|
260
266
|
arrayMerge: (_, source) => source
|
|
261
267
|
});
|
|
262
268
|
};
|
|
269
|
+
function isValidThemeMode(mode) {
|
|
270
|
+
return mode === "light" || mode === "dark";
|
|
271
|
+
}
|
|
272
|
+
function getDefaultThemePrefer(meta) {
|
|
273
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
274
|
+
const urlPrefer = urlParams.get("theme");
|
|
275
|
+
if (isValidThemeMode(urlPrefer)) {
|
|
276
|
+
return urlPrefer;
|
|
277
|
+
}
|
|
278
|
+
const sessionPrefer = sessionStorage.getItem(BLOCKLET_THEME_PREFER_KEY);
|
|
279
|
+
if (isValidThemeMode(sessionPrefer)) {
|
|
280
|
+
return sessionPrefer;
|
|
281
|
+
}
|
|
282
|
+
const prefer = Object.assign({}, window.blocklet, meta).theme?.prefer;
|
|
283
|
+
if (prefer === "light" || prefer === "dark") {
|
|
284
|
+
return prefer;
|
|
285
|
+
}
|
|
286
|
+
if (prefer === "system") {
|
|
287
|
+
const localPrefer = localStorage.getItem(BLOCKLET_THEME_PREFER_KEY);
|
|
288
|
+
if (isValidThemeMode(localPrefer)) {
|
|
289
|
+
return localPrefer;
|
|
290
|
+
}
|
|
291
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
292
|
+
}
|
|
293
|
+
return "light";
|
|
294
|
+
}
|
|
295
|
+
var buildThemeStyles = (theme) => {
|
|
296
|
+
const { light, dark } = theme;
|
|
297
|
+
return `
|
|
298
|
+
<style id="blocklet-theme-style">
|
|
299
|
+
:root {
|
|
300
|
+
--blocklet-background-default-color: ${light.palette?.background?.default ?? "#ffffff"};
|
|
301
|
+
--blocklet-text-primary-color: ${light.palette?.text?.primary ?? "#18181b"};
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
[data-theme='dark'] {
|
|
305
|
+
--blocklet-background-default-color: ${dark.palette?.background?.default ?? "#121212"};
|
|
306
|
+
--blocklet-text-primary-color: ${dark.palette?.text?.primary ?? "#ffffff"};
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
html, body {
|
|
310
|
+
background-color: var(--blocklet-background-default-color);
|
|
311
|
+
color: var(--blocklet-text-primary-color);
|
|
312
|
+
}
|
|
313
|
+
</style>
|
|
314
|
+
`;
|
|
315
|
+
};
|
|
316
|
+
var buildThemeScript = (theme) => {
|
|
317
|
+
return `
|
|
318
|
+
<script id="blocklet-theme-script">
|
|
319
|
+
(function() {
|
|
320
|
+
try {
|
|
321
|
+
const BLOCKLET_THEME_PREFER_KEY = '${BLOCKLET_THEME_PREFER_KEY}';
|
|
322
|
+
${isValidThemeMode.toString()}
|
|
323
|
+
${getDefaultThemePrefer.toString()}
|
|
324
|
+
|
|
325
|
+
const prefer = getDefaultThemePrefer(${JSON.stringify({ theme: { prefer: theme.prefer } })});
|
|
326
|
+
|
|
327
|
+
if(prefer === 'dark') {
|
|
328
|
+
document.documentElement.setAttribute('data-theme', 'dark');
|
|
329
|
+
} else {
|
|
330
|
+
document.documentElement.removeAttribute('data-theme');
|
|
331
|
+
}
|
|
332
|
+
} catch (e) {
|
|
333
|
+
console.error('Theme init error:', e);
|
|
334
|
+
}
|
|
335
|
+
})();
|
|
336
|
+
</script>
|
|
337
|
+
`;
|
|
338
|
+
};
|
|
263
339
|
|
|
264
340
|
// src/blocklet.ts
|
|
265
|
-
var BLOCKLET_THEME_PREFER_KEY = "blocklet_theme_prefer";
|
|
266
341
|
var DEFAULT_FONTS = ["Roboto", "Helvetica", "Arial", "sans-serif"];
|
|
267
342
|
var shadows = [
|
|
268
343
|
"none",
|
|
@@ -611,37 +686,37 @@ var BLOCKLET_THEME_DARK = merge(BLOCKLET_THEME_LIGHT, {
|
|
|
611
686
|
},
|
|
612
687
|
primary: {
|
|
613
688
|
main: "#00d5be",
|
|
614
|
-
contrastText: "#
|
|
689
|
+
contrastText: "#121212",
|
|
615
690
|
light: "#4ce3d0",
|
|
616
691
|
dark: "#00a89a"
|
|
617
692
|
},
|
|
618
693
|
secondary: {
|
|
619
694
|
main: "#00d3f3",
|
|
620
|
-
contrastText: "#
|
|
695
|
+
contrastText: "#121212",
|
|
621
696
|
light: "#51e1ff",
|
|
622
697
|
dark: "#00a2c0"
|
|
623
698
|
},
|
|
624
699
|
error: {
|
|
625
700
|
main: "#ff6467",
|
|
626
|
-
contrastText: "#
|
|
701
|
+
contrastText: "#121212",
|
|
627
702
|
light: "#ff9598",
|
|
628
703
|
dark: "#e7000b"
|
|
629
704
|
},
|
|
630
705
|
warning: {
|
|
631
706
|
main: "#ff8904",
|
|
632
|
-
contrastText: "#
|
|
707
|
+
contrastText: "#121212",
|
|
633
708
|
light: "#ffa644",
|
|
634
709
|
dark: "#f54900"
|
|
635
710
|
},
|
|
636
711
|
info: {
|
|
637
712
|
main: "#51a2ff",
|
|
638
|
-
contrastText: "#
|
|
713
|
+
contrastText: "#121212",
|
|
639
714
|
light: "#83c3ff",
|
|
640
715
|
dark: "#1570e5"
|
|
641
716
|
},
|
|
642
717
|
success: {
|
|
643
718
|
main: "#05df72",
|
|
644
|
-
contrastText: "#
|
|
719
|
+
contrastText: "#121212",
|
|
645
720
|
light: "#56e799",
|
|
646
721
|
dark: "#00b24a"
|
|
647
722
|
},
|
|
@@ -821,5 +896,10 @@ var DID_CONNECT_THEME_DARK = merge(BLOCKLET_THEME_DARK, {
|
|
|
821
896
|
BLOCKLET_THEME_PREFER_KEY,
|
|
822
897
|
DEFAULT_FONTS,
|
|
823
898
|
DID_CONNECT_THEME_DARK,
|
|
824
|
-
DID_CONNECT_THEME_LIGHT
|
|
899
|
+
DID_CONNECT_THEME_LIGHT,
|
|
900
|
+
buildThemeScript,
|
|
901
|
+
buildThemeStyles,
|
|
902
|
+
getDefaultThemePrefer,
|
|
903
|
+
isValidThemeMode,
|
|
904
|
+
merge
|
|
825
905
|
});
|
package/dist/es/index.js
CHANGED
|
@@ -237,15 +237,85 @@ function alpha(color, value) {
|
|
|
237
237
|
|
|
238
238
|
// src/util.ts
|
|
239
239
|
var import_deepmerge = __toESM(require_cjs());
|
|
240
|
+
var BLOCKLET_THEME_PREFER_KEY = "blocklet_theme_prefer";
|
|
240
241
|
var merge = (x, y) => {
|
|
241
242
|
return (0, import_deepmerge.default)(x, y, {
|
|
242
243
|
// 采用替换策略合并数组
|
|
243
244
|
arrayMerge: (_, source) => source
|
|
244
245
|
});
|
|
245
246
|
};
|
|
247
|
+
function isValidThemeMode(mode) {
|
|
248
|
+
return mode === "light" || mode === "dark";
|
|
249
|
+
}
|
|
250
|
+
function getDefaultThemePrefer(meta) {
|
|
251
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
252
|
+
const urlPrefer = urlParams.get("theme");
|
|
253
|
+
if (isValidThemeMode(urlPrefer)) {
|
|
254
|
+
return urlPrefer;
|
|
255
|
+
}
|
|
256
|
+
const sessionPrefer = sessionStorage.getItem(BLOCKLET_THEME_PREFER_KEY);
|
|
257
|
+
if (isValidThemeMode(sessionPrefer)) {
|
|
258
|
+
return sessionPrefer;
|
|
259
|
+
}
|
|
260
|
+
const prefer = Object.assign({}, window.blocklet, meta).theme?.prefer;
|
|
261
|
+
if (prefer === "light" || prefer === "dark") {
|
|
262
|
+
return prefer;
|
|
263
|
+
}
|
|
264
|
+
if (prefer === "system") {
|
|
265
|
+
const localPrefer = localStorage.getItem(BLOCKLET_THEME_PREFER_KEY);
|
|
266
|
+
if (isValidThemeMode(localPrefer)) {
|
|
267
|
+
return localPrefer;
|
|
268
|
+
}
|
|
269
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
270
|
+
}
|
|
271
|
+
return "light";
|
|
272
|
+
}
|
|
273
|
+
var buildThemeStyles = (theme) => {
|
|
274
|
+
const { light, dark } = theme;
|
|
275
|
+
return `
|
|
276
|
+
<style id="blocklet-theme-style">
|
|
277
|
+
:root {
|
|
278
|
+
--blocklet-background-default-color: ${light.palette?.background?.default ?? "#ffffff"};
|
|
279
|
+
--blocklet-text-primary-color: ${light.palette?.text?.primary ?? "#18181b"};
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
[data-theme='dark'] {
|
|
283
|
+
--blocklet-background-default-color: ${dark.palette?.background?.default ?? "#121212"};
|
|
284
|
+
--blocklet-text-primary-color: ${dark.palette?.text?.primary ?? "#ffffff"};
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
html, body {
|
|
288
|
+
background-color: var(--blocklet-background-default-color);
|
|
289
|
+
color: var(--blocklet-text-primary-color);
|
|
290
|
+
}
|
|
291
|
+
</style>
|
|
292
|
+
`;
|
|
293
|
+
};
|
|
294
|
+
var buildThemeScript = (theme) => {
|
|
295
|
+
return `
|
|
296
|
+
<script id="blocklet-theme-script">
|
|
297
|
+
(function() {
|
|
298
|
+
try {
|
|
299
|
+
const BLOCKLET_THEME_PREFER_KEY = '${BLOCKLET_THEME_PREFER_KEY}';
|
|
300
|
+
${isValidThemeMode.toString()}
|
|
301
|
+
${getDefaultThemePrefer.toString()}
|
|
302
|
+
|
|
303
|
+
const prefer = getDefaultThemePrefer(${JSON.stringify({ theme: { prefer: theme.prefer } })});
|
|
304
|
+
|
|
305
|
+
if(prefer === 'dark') {
|
|
306
|
+
document.documentElement.setAttribute('data-theme', 'dark');
|
|
307
|
+
} else {
|
|
308
|
+
document.documentElement.removeAttribute('data-theme');
|
|
309
|
+
}
|
|
310
|
+
} catch (e) {
|
|
311
|
+
console.error('Theme init error:', e);
|
|
312
|
+
}
|
|
313
|
+
})();
|
|
314
|
+
</script>
|
|
315
|
+
`;
|
|
316
|
+
};
|
|
246
317
|
|
|
247
318
|
// src/blocklet.ts
|
|
248
|
-
var BLOCKLET_THEME_PREFER_KEY = "blocklet_theme_prefer";
|
|
249
319
|
var DEFAULT_FONTS = ["Roboto", "Helvetica", "Arial", "sans-serif"];
|
|
250
320
|
var shadows = [
|
|
251
321
|
"none",
|
|
@@ -594,37 +664,37 @@ var BLOCKLET_THEME_DARK = merge(BLOCKLET_THEME_LIGHT, {
|
|
|
594
664
|
},
|
|
595
665
|
primary: {
|
|
596
666
|
main: "#00d5be",
|
|
597
|
-
contrastText: "#
|
|
667
|
+
contrastText: "#121212",
|
|
598
668
|
light: "#4ce3d0",
|
|
599
669
|
dark: "#00a89a"
|
|
600
670
|
},
|
|
601
671
|
secondary: {
|
|
602
672
|
main: "#00d3f3",
|
|
603
|
-
contrastText: "#
|
|
673
|
+
contrastText: "#121212",
|
|
604
674
|
light: "#51e1ff",
|
|
605
675
|
dark: "#00a2c0"
|
|
606
676
|
},
|
|
607
677
|
error: {
|
|
608
678
|
main: "#ff6467",
|
|
609
|
-
contrastText: "#
|
|
679
|
+
contrastText: "#121212",
|
|
610
680
|
light: "#ff9598",
|
|
611
681
|
dark: "#e7000b"
|
|
612
682
|
},
|
|
613
683
|
warning: {
|
|
614
684
|
main: "#ff8904",
|
|
615
|
-
contrastText: "#
|
|
685
|
+
contrastText: "#121212",
|
|
616
686
|
light: "#ffa644",
|
|
617
687
|
dark: "#f54900"
|
|
618
688
|
},
|
|
619
689
|
info: {
|
|
620
690
|
main: "#51a2ff",
|
|
621
|
-
contrastText: "#
|
|
691
|
+
contrastText: "#121212",
|
|
622
692
|
light: "#83c3ff",
|
|
623
693
|
dark: "#1570e5"
|
|
624
694
|
},
|
|
625
695
|
success: {
|
|
626
696
|
main: "#05df72",
|
|
627
|
-
contrastText: "#
|
|
697
|
+
contrastText: "#121212",
|
|
628
698
|
light: "#56e799",
|
|
629
699
|
dark: "#00b24a"
|
|
630
700
|
},
|
|
@@ -803,5 +873,10 @@ export {
|
|
|
803
873
|
BLOCKLET_THEME_PREFER_KEY,
|
|
804
874
|
DEFAULT_FONTS,
|
|
805
875
|
DID_CONNECT_THEME_DARK,
|
|
806
|
-
DID_CONNECT_THEME_LIGHT
|
|
876
|
+
DID_CONNECT_THEME_LIGHT,
|
|
877
|
+
buildThemeScript,
|
|
878
|
+
buildThemeStyles,
|
|
879
|
+
getDefaultThemePrefer,
|
|
880
|
+
isValidThemeMode,
|
|
881
|
+
merge
|
|
807
882
|
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -53,7 +53,6 @@ declare module "@mui/material/styles/createTypography" {
|
|
|
53
53
|
color?: Record<string, string>;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
export declare const BLOCKLET_THEME_PREFER_KEY = "blocklet_theme_prefer";
|
|
57
56
|
export declare const DEFAULT_FONTS: string[];
|
|
58
57
|
/**
|
|
59
58
|
* figma: https://www.figma.com/file/1qHyMF137EXOQpSFVByszG/UX-Library?node-id=295%3A1518
|
|
@@ -62,6 +61,23 @@ export declare const BLOCKLET_THEME_LIGHT: ThemeOptions;
|
|
|
62
61
|
export declare const BLOCKLET_THEME_DARK: ThemeOptions;
|
|
63
62
|
export declare const DID_CONNECT_THEME_LIGHT: import("@mui/material/styles").ThemeOptions;
|
|
64
63
|
export declare const DID_CONNECT_THEME_DARK: import("@mui/material/styles").ThemeOptions;
|
|
64
|
+
export declare const BLOCKLET_THEME_PREFER_KEY = "blocklet_theme_prefer";
|
|
65
|
+
export declare const merge: <T>(x: T, y: Partial<T>) => T;
|
|
66
|
+
export declare function isValidThemeMode(mode: any): mode is PaletteMode;
|
|
67
|
+
export declare function getDefaultThemePrefer(meta?: {
|
|
68
|
+
theme: {
|
|
69
|
+
prefer: "light" | "dark" | "system";
|
|
70
|
+
};
|
|
71
|
+
}): PaletteMode;
|
|
72
|
+
export type ThemeSettings = {
|
|
73
|
+
prefer: "light" | "dark" | "system";
|
|
74
|
+
light: ThemeOptions;
|
|
75
|
+
dark: ThemeOptions;
|
|
76
|
+
};
|
|
77
|
+
/** 生成用于服务端注入的初始样式,避免首屏加载闪白 */
|
|
78
|
+
export declare const buildThemeStyles: (theme: ThemeSettings) => string;
|
|
79
|
+
/** 生成用于服务端注入的初始脚本,用于选择 theme mode */
|
|
80
|
+
export declare const buildThemeScript: (theme: ThemeSettings) => string;
|
|
65
81
|
|
|
66
82
|
export {
|
|
67
83
|
Theme,
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "2.13.
|
|
6
|
+
"version": "2.13.56",
|
|
7
7
|
"description": "A preset MUI-based theme configuration designed for use with Blocklet.",
|
|
8
8
|
"main": "dist/cjs/index.js",
|
|
9
9
|
"module": "dist/es/index.js",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"ts-jest": "^29.1.2",
|
|
56
56
|
"typescript": "~5.5.4"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "ebf7d863313f1ce95571b81df01182756395197e"
|
|
59
59
|
}
|