@puzzle-ui/theme 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/dist/breakpoints.cjs +10 -0
- package/dist/breakpoints.cjs.map +1 -0
- package/dist/breakpoints.d.cts +7 -0
- package/dist/breakpoints.d.ts +7 -0
- package/dist/breakpoints.js +10 -0
- package/dist/breakpoints.js.map +1 -0
- package/dist/components-context.cjs +19 -0
- package/dist/components-context.cjs.map +1 -0
- package/dist/components-context.d.cts +8 -0
- package/dist/components-context.d.ts +8 -0
- package/dist/components-context.js +17 -0
- package/dist/components-context.js.map +1 -0
- package/dist/components.types.d.cts +46 -0
- package/dist/components.types.d.ts +46 -0
- package/dist/constants.cjs +567 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +363 -0
- package/dist/constants.d.ts +363 -0
- package/dist/constants.js +565 -0
- package/dist/constants.js.map +1 -0
- package/dist/create-theme-css.cjs +7 -0
- package/dist/create-theme-css.cjs.map +1 -0
- package/dist/create-theme-css.js +7 -0
- package/dist/create-theme-css.js.map +1 -0
- package/dist/create-theme-variables.cjs +135 -0
- package/dist/create-theme-variables.cjs.map +1 -0
- package/dist/create-theme-variables.js +134 -0
- package/dist/create-theme-variables.js.map +1 -0
- package/dist/fonts/constants.cjs +9 -0
- package/dist/fonts/constants.cjs.map +1 -0
- package/dist/fonts/constants.js +9 -0
- package/dist/fonts/constants.js.map +1 -0
- package/dist/fonts/create-google-font-url.cjs +27 -0
- package/dist/fonts/create-google-font-url.cjs.map +1 -0
- package/dist/fonts/create-google-font-url.d.cts +2 -0
- package/dist/fonts/create-google-font-url.d.ts +2 -0
- package/dist/fonts/create-google-font-url.js +27 -0
- package/dist/fonts/create-google-font-url.js.map +1 -0
- package/dist/fonts/google-font-familiy.d.cts +1 -0
- package/dist/fonts/google-font-familiy.d.ts +1 -0
- package/dist/fonts/google-font.cjs +42 -0
- package/dist/fonts/google-font.cjs.map +1 -0
- package/dist/fonts/google-font.d.cts +4 -0
- package/dist/fonts/google-font.d.ts +4 -0
- package/dist/fonts/google-font.js +42 -0
- package/dist/fonts/google-font.js.map +1 -0
- package/dist/fonts/index.d.cts +4 -0
- package/dist/fonts/resolve-font-config.cjs +28 -0
- package/dist/fonts/resolve-font-config.cjs.map +1 -0
- package/dist/fonts/resolve-font-config.js +28 -0
- package/dist/fonts/resolve-font-config.js.map +1 -0
- package/dist/fonts/resolve-font-stylesheets.cjs +47 -0
- package/dist/fonts/resolve-font-stylesheets.cjs.map +1 -0
- package/dist/fonts/resolve-font-stylesheets.js +47 -0
- package/dist/fonts/resolve-font-stylesheets.js.map +1 -0
- package/dist/fonts/types.d.cts +28 -0
- package/dist/fonts/types.d.ts +28 -0
- package/dist/fonts/typography.cjs +172 -0
- package/dist/fonts/typography.cjs.map +1 -0
- package/dist/fonts/typography.d.cts +2 -0
- package/dist/fonts/typography.d.ts +2 -0
- package/dist/fonts/typography.js +170 -0
- package/dist/fonts/typography.js.map +1 -0
- package/dist/global.css +135 -0
- package/dist/index.cjs +9 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +5 -0
- package/dist/scope-context.cjs +58 -0
- package/dist/scope-context.cjs.map +1 -0
- package/dist/scope-context.d.cts +14 -0
- package/dist/scope-context.d.ts +14 -0
- package/dist/scope-context.js +56 -0
- package/dist/scope-context.js.map +1 -0
- package/dist/theme-scopes.css +90 -0
- package/dist/theme.cjs +56 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.css +194 -0
- package/dist/theme.d.cts +18 -0
- package/dist/theme.d.ts +17 -0
- package/dist/theme.js +56 -0
- package/dist/theme.js.map +1 -0
- package/dist/types.d.cts +185 -0
- package/dist/types.d.ts +185 -0
- package/package.json +73 -4
- package/README.md +0 -3
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
// src/scope-context.tsx
|
|
5
|
+
const ThemeScopeContext = createContext(null);
|
|
6
|
+
const ThemeScopeProvider = ({ scopeId, theme, children }) => {
|
|
7
|
+
const scopeElementRef = useRef(null);
|
|
8
|
+
const [portalState, setPortalState] = useState(null);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (scopeId === null) return;
|
|
11
|
+
const ownerDocument = scopeElementRef.current?.ownerDocument;
|
|
12
|
+
if (!ownerDocument?.body) return;
|
|
13
|
+
const portalTarget = ownerDocument.createElement("div");
|
|
14
|
+
portalTarget.className = "puzzle-theme-scope puzzle-theme-scope--portal";
|
|
15
|
+
portalTarget.dataset.puzzleThemeScope = scopeId;
|
|
16
|
+
portalTarget.dataset.theme = theme;
|
|
17
|
+
portalTarget.dataset.puzzleThemePortal = "true";
|
|
18
|
+
ownerDocument.body.append(portalTarget);
|
|
19
|
+
setPortalState({
|
|
20
|
+
scopeId,
|
|
21
|
+
theme,
|
|
22
|
+
element: portalTarget
|
|
23
|
+
});
|
|
24
|
+
return () => {
|
|
25
|
+
portalTarget.remove();
|
|
26
|
+
};
|
|
27
|
+
}, [scopeId, theme]);
|
|
28
|
+
const portalTarget = scopeId !== null && portalState?.scopeId === scopeId && portalState.theme === theme ? portalState.element : null;
|
|
29
|
+
const value = useMemo(() => {
|
|
30
|
+
return scopeId === null ? null : {
|
|
31
|
+
scopeId,
|
|
32
|
+
theme,
|
|
33
|
+
portalTarget
|
|
34
|
+
};
|
|
35
|
+
}, [
|
|
36
|
+
scopeId,
|
|
37
|
+
theme,
|
|
38
|
+
portalTarget
|
|
39
|
+
]);
|
|
40
|
+
return /* @__PURE__ */ jsx(ThemeScopeContext.Provider, {
|
|
41
|
+
value,
|
|
42
|
+
children: scopeId === null ? children : /* @__PURE__ */ jsx("div", {
|
|
43
|
+
ref: scopeElementRef,
|
|
44
|
+
className: "puzzle-theme-scope",
|
|
45
|
+
"data-puzzle-theme-scope": scopeId,
|
|
46
|
+
"data-theme": theme,
|
|
47
|
+
children
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const useThemeScope = () => {
|
|
52
|
+
return useContext(ThemeScopeContext);
|
|
53
|
+
};
|
|
54
|
+
export { ThemeScopeProvider, useThemeScope };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=scope-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-context.js","names":[],"sources":["../src/scope-context.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type PropsWithChildren,\n} from \"react\";\n\nimport type { ThemeMode } from \"./types\";\n\ntype ThemeScopeContextValue = {\n scopeId: string;\n theme: ThemeMode;\n portalTarget: HTMLDivElement | null;\n};\n\ntype ThemeScopePortalState = {\n scopeId: string;\n theme: ThemeMode;\n element: HTMLDivElement;\n};\n\ntype ThemeScopeProviderProps = PropsWithChildren<{\n scopeId: string | null;\n theme: ThemeMode;\n}>;\n\nconst ThemeScopeContext = createContext<ThemeScopeContextValue | null>(null);\n\nconst ThemeScopeProvider = ({\n scopeId,\n theme,\n children,\n}: ThemeScopeProviderProps) => {\n const scopeElementRef = useRef<HTMLDivElement>(null);\n const [portalState, setPortalState] = useState<ThemeScopePortalState | null>(\n null,\n );\n\n useEffect(() => {\n if (scopeId === null) {\n return;\n }\n\n const ownerDocument = scopeElementRef.current?.ownerDocument;\n\n if (!ownerDocument?.body) {\n return;\n }\n\n const portalTarget = ownerDocument.createElement(\"div\");\n\n portalTarget.className = \"puzzle-theme-scope puzzle-theme-scope--portal\";\n portalTarget.dataset.puzzleThemeScope = scopeId;\n portalTarget.dataset.theme = theme;\n portalTarget.dataset.puzzleThemePortal = \"true\";\n\n ownerDocument.body.append(portalTarget);\n\n setPortalState({\n scopeId,\n theme,\n element: portalTarget,\n });\n\n return () => {\n portalTarget.remove();\n };\n }, [scopeId, theme]);\n\n const portalTarget =\n scopeId !== null &&\n portalState?.scopeId === scopeId &&\n portalState.theme === theme\n ? portalState.element\n : null;\n\n const value = useMemo<ThemeScopeContextValue | null>(() => {\n return scopeId === null\n ? null\n : {\n scopeId,\n theme,\n portalTarget,\n };\n }, [scopeId, theme, portalTarget]);\n\n return (\n <ThemeScopeContext.Provider value={value}>\n {scopeId === null ? (\n children\n ) : (\n <div\n ref={scopeElementRef}\n className=\"puzzle-theme-scope\"\n data-puzzle-theme-scope={scopeId}\n data-theme={theme}\n >\n {children}\n </div>\n )}\n </ThemeScopeContext.Provider>\n );\n};\n\nconst useThemeScope = () => {\n return useContext(ThemeScopeContext);\n};\n\nexport { ThemeScopeProvider, useThemeScope, type ThemeScopeContextValue };\n"],"mappings":";;;;AA+BA,MAAM,oBAAoB,cAA6C,IAAI;AAE3E,MAAM,sBAAsB,EAC1B,SACA,OACA,eAC6B;CAC7B,MAAM,kBAAkB,OAAuB,IAAI;CACnD,MAAM,CAAC,aAAa,kBAAkB,SACpC,IACF;CAEA,gBAAgB;EACd,IAAI,YAAY,MACd;EAGF,MAAM,gBAAgB,gBAAgB,SAAS;EAE/C,IAAI,CAAC,eAAe,MAClB;EAGF,MAAM,eAAe,cAAc,cAAc,KAAK;EAEtD,aAAa,YAAY;EACzB,aAAa,QAAQ,mBAAmB;EACxC,aAAa,QAAQ,QAAQ;EAC7B,aAAa,QAAQ,oBAAoB;EAEzC,cAAc,KAAK,OAAO,YAAY;EAEtC,eAAe;GACb;GACA;GACA,SAAS;EACX,CAAC;EAED,aAAa;GACX,aAAa,OAAO;EACtB;CACF,GAAG,CAAC,SAAS,KAAK,CAAC;CAEnB,MAAM,eACJ,YAAY,QACZ,aAAa,YAAY,WACzB,YAAY,UAAU,QAClB,YAAY,UACZ;CAEN,MAAM,QAAQ,cAA6C;EACzD,OAAO,YAAY,OACf,OACA;GACE;GACA;GACA;EACF;CACN,GAAG;EAAC;EAAS;EAAO;CAAY,CAAC;CAEjC,OACE,oBAAC,kBAAkB,UAAnB;EAAmC;EAChC,UAAA,YAAY,OACX,WAEA,oBAAC,OAAD;GACE,KAAK;GACL,WAAU;GACV,2BAAyB;GACzB,cAAY;GAEX;EACE,CAAA;CAEmB,CAAA;AAEhC;AAEA,MAAM,sBAAsB;CAC1B,OAAO,WAAW,iBAAiB;AACrC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
.puzzle-theme-scope {
|
|
2
|
+
color: var(--puzzle-color-text, inherit);
|
|
3
|
+
display: contents;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.puzzle-theme-scope[data-theme="light"], .puzzle-theme-scope[data-theme="system"] {
|
|
7
|
+
color-scheme: light;
|
|
8
|
+
--puzzle-color-background: var(--puzzle-color-scheme-light-background, #f7f4ea);
|
|
9
|
+
--puzzle-color-surface: var(--puzzle-color-scheme-light-surface, #fff);
|
|
10
|
+
--puzzle-color-surface-elevated: var(--puzzle-color-scheme-light-surface-elevated, #fff);
|
|
11
|
+
--puzzle-color-surface-sunken: var(--puzzle-color-scheme-light-surface-sunken, #f1eee6);
|
|
12
|
+
--puzzle-color-text: var(--puzzle-color-scheme-light-text, #171717);
|
|
13
|
+
--puzzle-color-text-muted: var(--puzzle-color-scheme-light-text-muted, #666);
|
|
14
|
+
--puzzle-color-text-subtle: var(--puzzle-color-scheme-light-text-subtle, #737373);
|
|
15
|
+
--puzzle-color-border: var(--puzzle-color-scheme-light-border, #e5e0d6);
|
|
16
|
+
--puzzle-color-border-strong: var(--puzzle-color-scheme-light-border-strong, #c9c2b6);
|
|
17
|
+
--puzzle-color-primary: var(--puzzle-color-scheme-light-primary, #2563eb);
|
|
18
|
+
--puzzle-color-primary-foreground: var(--puzzle-color-scheme-light-primary-foreground, #fff);
|
|
19
|
+
--puzzle-color-secondary: var(--puzzle-color-scheme-light-secondary, #64748b);
|
|
20
|
+
--puzzle-color-secondary-foreground: var(--puzzle-color-scheme-light-secondary-foreground, #fff);
|
|
21
|
+
--puzzle-color-accent: var(--puzzle-color-scheme-light-accent, #7c3aed);
|
|
22
|
+
--puzzle-color-accent-foreground: var(--puzzle-color-scheme-light-accent-foreground, #fff);
|
|
23
|
+
--puzzle-color-ring: var(--puzzle-color-scheme-light-ring, #2563eb);
|
|
24
|
+
--puzzle-color-success: var(--puzzle-color-scheme-light-success, #15803d);
|
|
25
|
+
--puzzle-color-success-foreground: var(--puzzle-color-scheme-light-success-foreground, #fff);
|
|
26
|
+
--puzzle-color-warning: var(--puzzle-color-scheme-light-warning, #a16207);
|
|
27
|
+
--puzzle-color-warning-foreground: var(--puzzle-color-scheme-light-warning-foreground, #fff);
|
|
28
|
+
--puzzle-color-danger: var(--puzzle-color-scheme-light-danger, #b91c1c);
|
|
29
|
+
--puzzle-color-danger-foreground: var(--puzzle-color-scheme-light-danger-foreground, #fff);
|
|
30
|
+
--puzzle-color-info: var(--puzzle-color-scheme-light-info, #0369a1);
|
|
31
|
+
--puzzle-color-info-foreground: var(--puzzle-color-scheme-light-info-foreground, #fff);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.puzzle-theme-scope[data-theme="dark"] {
|
|
35
|
+
color-scheme: dark;
|
|
36
|
+
--puzzle-color-background: var(--puzzle-color-scheme-dark-background, #111518);
|
|
37
|
+
--puzzle-color-surface: var(--puzzle-color-scheme-dark-surface, #1c2226);
|
|
38
|
+
--puzzle-color-surface-elevated: var(--puzzle-color-scheme-dark-surface-elevated, #242c31);
|
|
39
|
+
--puzzle-color-surface-sunken: var(--puzzle-color-scheme-dark-surface-sunken, #0d1113);
|
|
40
|
+
--puzzle-color-text: var(--puzzle-color-scheme-dark-text, #f5f5f5);
|
|
41
|
+
--puzzle-color-text-muted: var(--puzzle-color-scheme-dark-text-muted, #a4adb3);
|
|
42
|
+
--puzzle-color-text-subtle: var(--puzzle-color-scheme-dark-text-subtle, #8c969d);
|
|
43
|
+
--puzzle-color-border: var(--puzzle-color-scheme-dark-border, #343c42);
|
|
44
|
+
--puzzle-color-border-strong: var(--puzzle-color-scheme-dark-border-strong, #4a555d);
|
|
45
|
+
--puzzle-color-primary: var(--puzzle-color-scheme-dark-primary, #60a5fa);
|
|
46
|
+
--puzzle-color-primary-foreground: var(--puzzle-color-scheme-dark-primary-foreground, #0b1220);
|
|
47
|
+
--puzzle-color-secondary: var(--puzzle-color-scheme-dark-secondary, #94a3b8);
|
|
48
|
+
--puzzle-color-secondary-foreground: var(--puzzle-color-scheme-dark-secondary-foreground, #0f172a);
|
|
49
|
+
--puzzle-color-accent: var(--puzzle-color-scheme-dark-accent, #c4b5fd);
|
|
50
|
+
--puzzle-color-accent-foreground: var(--puzzle-color-scheme-dark-accent-foreground, #1e1b4b);
|
|
51
|
+
--puzzle-color-ring: var(--puzzle-color-scheme-dark-ring, #93c5fd);
|
|
52
|
+
--puzzle-color-success: var(--puzzle-color-scheme-dark-success, #4ade80);
|
|
53
|
+
--puzzle-color-success-foreground: var(--puzzle-color-scheme-dark-success-foreground, #052e16);
|
|
54
|
+
--puzzle-color-warning: var(--puzzle-color-scheme-dark-warning, #fbbf24);
|
|
55
|
+
--puzzle-color-warning-foreground: var(--puzzle-color-scheme-dark-warning-foreground, #422006);
|
|
56
|
+
--puzzle-color-danger: var(--puzzle-color-scheme-dark-danger, #f87171);
|
|
57
|
+
--puzzle-color-danger-foreground: var(--puzzle-color-scheme-dark-danger-foreground, #450a0a);
|
|
58
|
+
--puzzle-color-info: var(--puzzle-color-scheme-dark-info, #38bdf8);
|
|
59
|
+
--puzzle-color-info-foreground: var(--puzzle-color-scheme-dark-info-foreground, #082f49);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@media (prefers-color-scheme: dark) {
|
|
63
|
+
.puzzle-theme-scope[data-theme="system"] {
|
|
64
|
+
color-scheme: dark;
|
|
65
|
+
--puzzle-color-background: var(--puzzle-color-scheme-dark-background, #111518);
|
|
66
|
+
--puzzle-color-surface: var(--puzzle-color-scheme-dark-surface, #1c2226);
|
|
67
|
+
--puzzle-color-surface-elevated: var(--puzzle-color-scheme-dark-surface-elevated, #242c31);
|
|
68
|
+
--puzzle-color-surface-sunken: var(--puzzle-color-scheme-dark-surface-sunken, #0d1113);
|
|
69
|
+
--puzzle-color-text: var(--puzzle-color-scheme-dark-text, #f5f5f5);
|
|
70
|
+
--puzzle-color-text-muted: var(--puzzle-color-scheme-dark-text-muted, #a4adb3);
|
|
71
|
+
--puzzle-color-text-subtle: var(--puzzle-color-scheme-dark-text-subtle, #8c969d);
|
|
72
|
+
--puzzle-color-border: var(--puzzle-color-scheme-dark-border, #343c42);
|
|
73
|
+
--puzzle-color-border-strong: var(--puzzle-color-scheme-dark-border-strong, #4a555d);
|
|
74
|
+
--puzzle-color-primary: var(--puzzle-color-scheme-dark-primary, #60a5fa);
|
|
75
|
+
--puzzle-color-primary-foreground: var(--puzzle-color-scheme-dark-primary-foreground, #0b1220);
|
|
76
|
+
--puzzle-color-secondary: var(--puzzle-color-scheme-dark-secondary, #94a3b8);
|
|
77
|
+
--puzzle-color-secondary-foreground: var(--puzzle-color-scheme-dark-secondary-foreground, #0f172a);
|
|
78
|
+
--puzzle-color-accent: var(--puzzle-color-scheme-dark-accent, #c4b5fd);
|
|
79
|
+
--puzzle-color-accent-foreground: var(--puzzle-color-scheme-dark-accent-foreground, #1e1b4b);
|
|
80
|
+
--puzzle-color-ring: var(--puzzle-color-scheme-dark-ring, #93c5fd);
|
|
81
|
+
--puzzle-color-success: var(--puzzle-color-scheme-dark-success, #4ade80);
|
|
82
|
+
--puzzle-color-success-foreground: var(--puzzle-color-scheme-dark-success-foreground, #052e16);
|
|
83
|
+
--puzzle-color-warning: var(--puzzle-color-scheme-dark-warning, #fbbf24);
|
|
84
|
+
--puzzle-color-warning-foreground: var(--puzzle-color-scheme-dark-warning-foreground, #422006);
|
|
85
|
+
--puzzle-color-danger: var(--puzzle-color-scheme-dark-danger, #f87171);
|
|
86
|
+
--puzzle-color-danger-foreground: var(--puzzle-color-scheme-dark-danger-foreground, #450a0a);
|
|
87
|
+
--puzzle-color-info: var(--puzzle-color-scheme-dark-info, #38bdf8);
|
|
88
|
+
--puzzle-color-info-foreground: var(--puzzle-color-scheme-dark-info-foreground, #082f49);
|
|
89
|
+
}
|
|
90
|
+
}
|
package/dist/theme.cjs
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const require_components_context = require("./components-context.cjs");
|
|
2
|
+
const require_scope_context = require("./scope-context.cjs");
|
|
3
|
+
const require_resolve_font_stylesheets = require("./fonts/resolve-font-stylesheets.cjs");
|
|
4
|
+
const require_create_theme_variables = require("./create-theme-variables.cjs");
|
|
5
|
+
const require_create_theme_css = require("./create-theme-css.cjs");
|
|
6
|
+
;/* empty css */
|
|
7
|
+
;/* empty css */
|
|
8
|
+
;/* empty css */
|
|
9
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
|
+
let react = require("react");
|
|
11
|
+
// src/theme.tsx
|
|
12
|
+
const Theme = ({ nonce, fonts, theme = "system", scope = "root", globalStyles, tokens, colorTheme, components, children }) => {
|
|
13
|
+
const scopeId = (0, react.useId)();
|
|
14
|
+
const fontStylesheets = require_resolve_font_stylesheets.resolveFontStylesheets(fonts);
|
|
15
|
+
const cssVariables = require_create_theme_variables.createThemeVariables(fonts, tokens, theme, colorTheme);
|
|
16
|
+
const css = `${scope === "root" ? ":root" : `[data-puzzle-theme-scope="${scopeId}"]`} {\n${require_create_theme_css.createThemeCss(cssVariables)}\n}`;
|
|
17
|
+
const shouldApplyGlobalStyles = scope === "root" && (globalStyles ?? true);
|
|
18
|
+
const scopedContent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_scope_context.ThemeScopeProvider, {
|
|
19
|
+
scopeId: scope === "local" ? scopeId : null,
|
|
20
|
+
theme,
|
|
21
|
+
children: components === void 0 ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_context.ThemeComponentsProvider, {
|
|
22
|
+
components,
|
|
23
|
+
children
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
27
|
+
fontStylesheets.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("link", {
|
|
28
|
+
rel: "preconnect",
|
|
29
|
+
href: "https://fonts.googleapis.com"
|
|
30
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("link", {
|
|
31
|
+
rel: "preconnect",
|
|
32
|
+
href: "https://fonts.gstatic.com",
|
|
33
|
+
crossOrigin: "anonymous"
|
|
34
|
+
})] }) : null,
|
|
35
|
+
fontStylesheets.map(({ href }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("link", {
|
|
36
|
+
rel: "stylesheet",
|
|
37
|
+
href,
|
|
38
|
+
precedence: "default"
|
|
39
|
+
}, href)),
|
|
40
|
+
shouldApplyGlobalStyles ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", {
|
|
41
|
+
nonce,
|
|
42
|
+
"data-puzzle-global-styles": ""
|
|
43
|
+
}) : null,
|
|
44
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", {
|
|
45
|
+
nonce,
|
|
46
|
+
"data-theme": theme,
|
|
47
|
+
"data-puzzle-theme": scope === "root" ? "true" : void 0,
|
|
48
|
+
"data-puzzle-theme-scope-style": scope === "local" ? scopeId : void 0,
|
|
49
|
+
children: css
|
|
50
|
+
}),
|
|
51
|
+
scopedContent
|
|
52
|
+
] });
|
|
53
|
+
};
|
|
54
|
+
exports.Theme = Theme;
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=theme.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.cjs","names":["useId","resolveFontStylesheets","createThemeVariables","createThemeCss","ThemeScopeProvider","ThemeComponentsProvider"],"sources":["../src/theme.tsx"],"sourcesContent":["import { useId, type PropsWithChildren } from \"react\";\n\nimport type { FontRole, FontConfig } from \"./fonts\";\nimport type { ColorThemes, ThemeMode, ThemeTokenOverrides } from \"./types\";\nimport type { ThemeComponents } from \"./components.types\";\n\nimport { ThemeComponentsProvider } from \"./components-context\";\nimport { ThemeScopeProvider } from \"./scope-context\";\n\nimport { resolveFontStylesheets } from \"./fonts/resolve-font-stylesheets\";\nimport { createThemeVariables } from \"./create-theme-variables\";\nimport { createThemeCss } from \"./create-theme-css\";\n\nimport \"./theme.css\";\nimport \"./theme-scopes.css\";\nimport \"./global.css\";\n\nexport type ThemeScope = \"root\" | \"local\";\n\nexport type ThemeProps = {\n nonce?: string;\n theme?: ThemeMode;\n scope?: ThemeScope;\n globalStyles?: boolean;\n fonts?: Partial<Record<FontRole, FontConfig>>;\n tokens?: ThemeTokenOverrides;\n colorTheme?: ColorThemes;\n components?: ThemeComponents;\n};\n\nconst Theme = ({\n nonce,\n fonts,\n theme = \"system\",\n scope = \"root\",\n globalStyles,\n tokens,\n colorTheme,\n components,\n children,\n}: PropsWithChildren<ThemeProps>) => {\n const scopeId = useId();\n\n const fontStylesheets = resolveFontStylesheets(fonts);\n const cssVariables = createThemeVariables(fonts, tokens, theme, colorTheme);\n\n const cssSelector =\n scope === \"root\" ? \":root\" : `[data-puzzle-theme-scope=\"${scopeId}\"]`;\n\n const css = `${cssSelector} {\\n${createThemeCss(cssVariables)}\\n}`;\n\n const shouldApplyGlobalStyles = scope === \"root\" && (globalStyles ?? true);\n\n const content =\n components === undefined ? (\n children\n ) : (\n <ThemeComponentsProvider components={components}>\n {children}\n </ThemeComponentsProvider>\n );\n\n const scopedContent = (\n <ThemeScopeProvider\n scopeId={scope === \"local\" ? scopeId : null}\n theme={theme}\n >\n {content}\n </ThemeScopeProvider>\n );\n\n return (\n <>\n {fontStylesheets.length > 0 ? (\n <>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link\n rel=\"preconnect\"\n href=\"https://fonts.gstatic.com\"\n crossOrigin=\"anonymous\"\n />\n </>\n ) : null}\n\n {fontStylesheets.map(({ href }) => (\n <link key={href} rel=\"stylesheet\" href={href} precedence=\"default\" />\n ))}\n\n {shouldApplyGlobalStyles ? (\n <style nonce={nonce} data-puzzle-global-styles=\"\" />\n ) : null}\n\n <style\n nonce={nonce}\n data-theme={theme}\n data-puzzle-theme={scope === \"root\" ? \"true\" : undefined}\n data-puzzle-theme-scope-style={scope === \"local\" ? scopeId : undefined}\n >\n {css}\n </style>\n\n {scopedContent}\n </>\n );\n};\n\nexport { Theme };\n"],"mappings":";;;;;;;;;;;AA8BA,MAAM,SAAS,EACb,OACA,OACA,QAAQ,UACR,QAAQ,QACR,cACA,QACA,YACA,YACA,eACmC;CACnC,MAAM,WAAA,GAAUA,MAAAA,MAAAA,CAAM;CAEtB,MAAM,kBAAkBC,iCAAAA,uBAAuB,KAAK;CACpD,MAAM,eAAeC,+BAAAA,qBAAqB,OAAO,QAAQ,OAAO,UAAU;CAK1E,MAAM,MAAM,GAFV,UAAU,SAAS,UAAU,6BAA6B,QAAQ,IAEzC,MAAMC,yBAAAA,eAAe,YAAY,EAAE;CAE9D,MAAM,0BAA0B,UAAU,WAAW,gBAAgB;CAWrE,MAAM,gBACJ,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,oBAAD;EACE,SAAS,UAAU,UAAU,UAAU;EAChC;EAXT,UAAA,eAAe,KAAA,IACb,WAEA,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,yBAAD;GAAqC;GAClC;EACsB,CAAA;CASP,CAAA;CAGtB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA;EACG,gBAAgB,SAAS,IACxB,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,KAAI;GAAa,MAAK;EAAgC,CAAA,GAC5D,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,KAAI;GACJ,MAAK;GACL,aAAY;EACb,CAAA,CACD,EAAA,CAAA,IACA;EAEH,gBAAgB,KAAK,EAAE,WACtB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAiB,KAAI;GAAmB;GAAM,YAAW;EAAW,GAAzD,IAAyD,CACrE;EAEA,0BACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GAAc;GAAO,6BAA0B;EAAI,CAAA,IACjD;EAEJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GACS;GACP,cAAY;GACZ,qBAAmB,UAAU,SAAS,SAAS,KAAA;GAC/C,iCAA+B,UAAU,UAAU,UAAU,KAAA;GAE5D,UAAA;EACI,CAAA;EAEN;CACD,EAAA,CAAA;AAEN"}
|
package/dist/theme.css
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: light;
|
|
3
|
+
--puzzle-container-gutter: clamp(1rem, 3vw, 3rem);
|
|
4
|
+
--puzzle-color-background: var(--puzzle-color-scheme-light-background, #f7f4ea);
|
|
5
|
+
--puzzle-color-surface: var(--puzzle-color-scheme-light-surface, #fff);
|
|
6
|
+
--puzzle-color-surface-elevated: var(--puzzle-color-scheme-light-surface-elevated, #fff);
|
|
7
|
+
--puzzle-color-surface-sunken: var(--puzzle-color-scheme-light-surface-sunken, #f1eee6);
|
|
8
|
+
--puzzle-color-text: var(--puzzle-color-scheme-light-text, #171717);
|
|
9
|
+
--puzzle-color-text-muted: var(--puzzle-color-scheme-light-text-muted, #666);
|
|
10
|
+
--puzzle-color-text-subtle: var(--puzzle-color-scheme-light-text-subtle, #737373);
|
|
11
|
+
--puzzle-color-border: var(--puzzle-color-scheme-light-border, #e5e0d6);
|
|
12
|
+
--puzzle-color-border-strong: var(--puzzle-color-scheme-light-border-strong, #c9c2b6);
|
|
13
|
+
--puzzle-color-primary: var(--puzzle-color-scheme-light-primary, #2563eb);
|
|
14
|
+
--puzzle-color-primary-foreground: var(--puzzle-color-scheme-light-primary-foreground, #fff);
|
|
15
|
+
--puzzle-color-secondary: var(--puzzle-color-scheme-light-secondary, #64748b);
|
|
16
|
+
--puzzle-color-secondary-foreground: var(--puzzle-color-scheme-light-secondary-foreground, #fff);
|
|
17
|
+
--puzzle-color-accent: var(--puzzle-color-scheme-light-accent, #7c3aed);
|
|
18
|
+
--puzzle-color-accent-foreground: var(--puzzle-color-scheme-light-accent-foreground, #fff);
|
|
19
|
+
--puzzle-color-ring: var(--puzzle-color-scheme-light-ring, #2563eb);
|
|
20
|
+
--puzzle-color-success: var(--puzzle-color-scheme-light-success, #15803d);
|
|
21
|
+
--puzzle-color-success-foreground: var(--puzzle-color-scheme-light-success-foreground, #fff);
|
|
22
|
+
--puzzle-color-warning: var(--puzzle-color-scheme-light-warning, #a16207);
|
|
23
|
+
--puzzle-color-warning-foreground: var(--puzzle-color-scheme-light-warning-foreground, #fff);
|
|
24
|
+
--puzzle-color-danger: var(--puzzle-color-scheme-light-danger, #b91c1c);
|
|
25
|
+
--puzzle-color-danger-foreground: var(--puzzle-color-scheme-light-danger-foreground, #fff);
|
|
26
|
+
--puzzle-color-info: var(--puzzle-color-scheme-light-info, #0369a1);
|
|
27
|
+
--puzzle-color-info-foreground: var(--puzzle-color-scheme-light-info-foreground, #fff);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
:root:has(style[data-puzzle-theme="true"][data-theme="dark"]) {
|
|
31
|
+
color-scheme: dark;
|
|
32
|
+
--puzzle-color-background: var(--puzzle-color-scheme-dark-background, #111518);
|
|
33
|
+
--puzzle-color-surface: var(--puzzle-color-scheme-dark-surface, #1c2226);
|
|
34
|
+
--puzzle-color-surface-elevated: var(--puzzle-color-scheme-dark-surface-elevated, #242c31);
|
|
35
|
+
--puzzle-color-surface-sunken: var(--puzzle-color-scheme-dark-surface-sunken, #0d1113);
|
|
36
|
+
--puzzle-color-text: var(--puzzle-color-scheme-dark-text, #f5f5f5);
|
|
37
|
+
--puzzle-color-text-muted: var(--puzzle-color-scheme-dark-text-muted, #a4adb3);
|
|
38
|
+
--puzzle-color-text-subtle: var(--puzzle-color-scheme-dark-text-subtle, #8c969d);
|
|
39
|
+
--puzzle-color-border: var(--puzzle-color-scheme-dark-border, #343c42);
|
|
40
|
+
--puzzle-color-border-strong: var(--puzzle-color-scheme-dark-border-strong, #4a555d);
|
|
41
|
+
--puzzle-color-primary: var(--puzzle-color-scheme-dark-primary, #60a5fa);
|
|
42
|
+
--puzzle-color-primary-foreground: var(--puzzle-color-scheme-dark-primary-foreground, #0b1220);
|
|
43
|
+
--puzzle-color-secondary: var(--puzzle-color-scheme-dark-secondary, #94a3b8);
|
|
44
|
+
--puzzle-color-secondary-foreground: var(--puzzle-color-scheme-dark-secondary-foreground, #0f172a);
|
|
45
|
+
--puzzle-color-accent: var(--puzzle-color-scheme-dark-accent, #c4b5fd);
|
|
46
|
+
--puzzle-color-accent-foreground: var(--puzzle-color-scheme-dark-accent-foreground, #1e1b4b);
|
|
47
|
+
--puzzle-color-ring: var(--puzzle-color-scheme-dark-ring, #93c5fd);
|
|
48
|
+
--puzzle-color-success: var(--puzzle-color-scheme-dark-success, #4ade80);
|
|
49
|
+
--puzzle-color-success-foreground: var(--puzzle-color-scheme-dark-success-foreground, #052e16);
|
|
50
|
+
--puzzle-color-warning: var(--puzzle-color-scheme-dark-warning, #fbbf24);
|
|
51
|
+
--puzzle-color-warning-foreground: var(--puzzle-color-scheme-dark-warning-foreground, #422006);
|
|
52
|
+
--puzzle-color-danger: var(--puzzle-color-scheme-dark-danger, #f87171);
|
|
53
|
+
--puzzle-color-danger-foreground: var(--puzzle-color-scheme-dark-danger-foreground, #450a0a);
|
|
54
|
+
--puzzle-color-info: var(--puzzle-color-scheme-dark-info, #38bdf8);
|
|
55
|
+
--puzzle-color-info-foreground: var(--puzzle-color-scheme-dark-info-foreground, #082f49);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media (prefers-color-scheme: dark) {
|
|
59
|
+
:root:not(:has(style[data-puzzle-theme="true"][data-theme="light"], style[data-puzzle-theme="true"][data-theme="dark"])) {
|
|
60
|
+
color-scheme: dark;
|
|
61
|
+
--puzzle-color-background: var(--puzzle-color-scheme-dark-background, #111518);
|
|
62
|
+
--puzzle-color-surface: var(--puzzle-color-scheme-dark-surface, #1c2226);
|
|
63
|
+
--puzzle-color-surface-elevated: var(--puzzle-color-scheme-dark-surface-elevated, #242c31);
|
|
64
|
+
--puzzle-color-surface-sunken: var(--puzzle-color-scheme-dark-surface-sunken, #0d1113);
|
|
65
|
+
--puzzle-color-text: var(--puzzle-color-scheme-dark-text, #f5f5f5);
|
|
66
|
+
--puzzle-color-text-muted: var(--puzzle-color-scheme-dark-text-muted, #a4adb3);
|
|
67
|
+
--puzzle-color-text-subtle: var(--puzzle-color-scheme-dark-text-subtle, #8c969d);
|
|
68
|
+
--puzzle-color-border: var(--puzzle-color-scheme-dark-border, #343c42);
|
|
69
|
+
--puzzle-color-border-strong: var(--puzzle-color-scheme-dark-border-strong, #4a555d);
|
|
70
|
+
--puzzle-color-primary: var(--puzzle-color-scheme-dark-primary, #60a5fa);
|
|
71
|
+
--puzzle-color-primary-foreground: var(--puzzle-color-scheme-dark-primary-foreground, #0b1220);
|
|
72
|
+
--puzzle-color-secondary: var(--puzzle-color-scheme-dark-secondary, #94a3b8);
|
|
73
|
+
--puzzle-color-secondary-foreground: var(--puzzle-color-scheme-dark-secondary-foreground, #0f172a);
|
|
74
|
+
--puzzle-color-accent: var(--puzzle-color-scheme-dark-accent, #c4b5fd);
|
|
75
|
+
--puzzle-color-accent-foreground: var(--puzzle-color-scheme-dark-accent-foreground, #1e1b4b);
|
|
76
|
+
--puzzle-color-ring: var(--puzzle-color-scheme-dark-ring, #93c5fd);
|
|
77
|
+
--puzzle-color-success: var(--puzzle-color-scheme-dark-success, #4ade80);
|
|
78
|
+
--puzzle-color-success-foreground: var(--puzzle-color-scheme-dark-success-foreground, #052e16);
|
|
79
|
+
--puzzle-color-warning: var(--puzzle-color-scheme-dark-warning, #fbbf24);
|
|
80
|
+
--puzzle-color-warning-foreground: var(--puzzle-color-scheme-dark-warning-foreground, #422006);
|
|
81
|
+
--puzzle-color-danger: var(--puzzle-color-scheme-dark-danger, #f87171);
|
|
82
|
+
--puzzle-color-danger-foreground: var(--puzzle-color-scheme-dark-danger-foreground, #450a0a);
|
|
83
|
+
--puzzle-color-info: var(--puzzle-color-scheme-dark-info, #38bdf8);
|
|
84
|
+
--puzzle-color-info-foreground: var(--puzzle-color-scheme-dark-info-foreground, #082f49);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.puzzle-typography-display1, .puzzle-typography-display2, .puzzle-typography-headline1, .puzzle-typography-headline2, .puzzle-typography-headline3, .puzzle-typography-headline4, .puzzle-typography-subtitle1, .puzzle-typography-subtitle2, .puzzle-typography-body1, .puzzle-typography-body2, .puzzle-typography-button, .puzzle-typography-caption, .puzzle-typography-overline {
|
|
89
|
+
font-family: var(--puzzle-font-family-body, inherit);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.puzzle-typography-display1 {
|
|
93
|
+
font-family: var(--puzzle-font-family-display1, inherit);
|
|
94
|
+
font-size: var(--puzzle-font-size-display1, inherit);
|
|
95
|
+
font-weight: var(--puzzle-font-weight-display1, inherit);
|
|
96
|
+
line-height: var(--puzzle-font-line-height-display1, inherit);
|
|
97
|
+
letter-spacing: var(--puzzle-font-letter-spacing-display1, inherit);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.puzzle-typography-display2 {
|
|
101
|
+
font-family: var(--puzzle-font-family-display2, inherit);
|
|
102
|
+
font-size: var(--puzzle-font-size-display2, inherit);
|
|
103
|
+
font-weight: var(--puzzle-font-weight-display2, inherit);
|
|
104
|
+
line-height: var(--puzzle-font-line-height-display2, inherit);
|
|
105
|
+
letter-spacing: var(--puzzle-font-letter-spacing-display2, inherit);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.puzzle-typography-headline1 {
|
|
109
|
+
font-family: var(--puzzle-font-family-headline1, inherit);
|
|
110
|
+
font-size: var(--puzzle-font-size-headline1, inherit);
|
|
111
|
+
font-weight: var(--puzzle-font-weight-headline1, inherit);
|
|
112
|
+
line-height: var(--puzzle-font-line-height-headline1, inherit);
|
|
113
|
+
letter-spacing: var(--puzzle-font-letter-spacing-headline1, inherit);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.puzzle-typography-headline2 {
|
|
117
|
+
font-family: var(--puzzle-font-family-headline2, inherit);
|
|
118
|
+
font-size: var(--puzzle-font-size-headline2, inherit);
|
|
119
|
+
font-weight: var(--puzzle-font-weight-headline2, inherit);
|
|
120
|
+
line-height: var(--puzzle-font-line-height-headline2, inherit);
|
|
121
|
+
letter-spacing: var(--puzzle-font-letter-spacing-headline2, inherit);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.puzzle-typography-headline3 {
|
|
125
|
+
font-family: var(--puzzle-font-family-headline3, inherit);
|
|
126
|
+
font-size: var(--puzzle-font-size-headline3, inherit);
|
|
127
|
+
font-weight: var(--puzzle-font-weight-headline3, inherit);
|
|
128
|
+
line-height: var(--puzzle-font-line-height-headline3, inherit);
|
|
129
|
+
letter-spacing: var(--puzzle-font-letter-spacing-headline3, inherit);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.puzzle-typography-headline4 {
|
|
133
|
+
font-family: var(--puzzle-font-family-headline4, inherit);
|
|
134
|
+
font-size: var(--puzzle-font-size-headline4, inherit);
|
|
135
|
+
font-weight: var(--puzzle-font-weight-headline4, inherit);
|
|
136
|
+
line-height: var(--puzzle-font-line-height-headline4, inherit);
|
|
137
|
+
letter-spacing: var(--puzzle-font-letter-spacing-headline4, inherit);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.puzzle-typography-subtitle1 {
|
|
141
|
+
font-family: var(--puzzle-font-family-subtitle1, inherit);
|
|
142
|
+
font-size: var(--puzzle-font-size-subtitle1, inherit);
|
|
143
|
+
font-weight: var(--puzzle-font-weight-subtitle1, inherit);
|
|
144
|
+
line-height: var(--puzzle-font-line-height-subtitle1, inherit);
|
|
145
|
+
letter-spacing: var(--puzzle-font-letter-spacing-subtitle1, inherit);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.puzzle-typography-subtitle2 {
|
|
149
|
+
font-family: var(--puzzle-font-family-subtitle2, inherit);
|
|
150
|
+
font-size: var(--puzzle-font-size-subtitle2, inherit);
|
|
151
|
+
font-weight: var(--puzzle-font-weight-subtitle2, inherit);
|
|
152
|
+
line-height: var(--puzzle-font-line-height-subtitle2, inherit);
|
|
153
|
+
letter-spacing: var(--puzzle-font-letter-spacing-subtitle2, inherit);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.puzzle-typography-body1 {
|
|
157
|
+
font-family: var(--puzzle-font-family-body1, inherit);
|
|
158
|
+
font-size: var(--puzzle-font-size-body1, inherit);
|
|
159
|
+
font-weight: var(--puzzle-font-weight-body1, inherit);
|
|
160
|
+
line-height: var(--puzzle-font-line-height-body1, inherit);
|
|
161
|
+
letter-spacing: var(--puzzle-font-letter-spacing-body1, inherit);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.puzzle-typography-body2 {
|
|
165
|
+
font-family: var(--puzzle-font-family-body2, inherit);
|
|
166
|
+
font-size: var(--puzzle-font-size-body2, inherit);
|
|
167
|
+
font-weight: var(--puzzle-font-weight-body2, inherit);
|
|
168
|
+
line-height: var(--puzzle-font-line-height-body2, inherit);
|
|
169
|
+
letter-spacing: var(--puzzle-font-letter-spacing-body2, inherit);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.puzzle-typography-button {
|
|
173
|
+
font-family: var(--puzzle-font-family-button, inherit);
|
|
174
|
+
font-size: var(--puzzle-font-size-button, inherit);
|
|
175
|
+
font-weight: var(--puzzle-font-weight-button, inherit);
|
|
176
|
+
line-height: var(--puzzle-font-line-height-button, inherit);
|
|
177
|
+
letter-spacing: var(--puzzle-font-letter-spacing-button, inherit);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.puzzle-typography-caption {
|
|
181
|
+
font-family: var(--puzzle-font-family-caption, inherit);
|
|
182
|
+
font-size: var(--puzzle-font-size-caption, inherit);
|
|
183
|
+
font-weight: var(--puzzle-font-weight-caption, inherit);
|
|
184
|
+
line-height: var(--puzzle-font-line-height-caption, inherit);
|
|
185
|
+
letter-spacing: var(--puzzle-font-letter-spacing-caption, inherit);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.puzzle-typography-overline {
|
|
189
|
+
font-family: var(--puzzle-font-family-overline, inherit);
|
|
190
|
+
font-size: var(--puzzle-font-size-overline, inherit);
|
|
191
|
+
font-weight: var(--puzzle-font-weight-overline, inherit);
|
|
192
|
+
line-height: var(--puzzle-font-line-height-overline, inherit);
|
|
193
|
+
letter-spacing: var(--puzzle-font-letter-spacing-overline, inherit);
|
|
194
|
+
}
|
package/dist/theme.d.cts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FontConfig, FontRole } from "./fonts/types.cjs";
|
|
2
|
+
import "./fonts/index.cjs";
|
|
3
|
+
import { ColorThemes, ThemeMode, ThemeTokenOverrides } from "./types.cjs";
|
|
4
|
+
import { ThemeComponents } from "./components.types.cjs";
|
|
5
|
+
import { PropsWithChildren } from "react";
|
|
6
|
+
export type ThemeScope = "root" | "local";
|
|
7
|
+
export type ThemeProps = {
|
|
8
|
+
nonce?: string;
|
|
9
|
+
theme?: ThemeMode;
|
|
10
|
+
scope?: ThemeScope;
|
|
11
|
+
globalStyles?: boolean;
|
|
12
|
+
fonts?: Partial<Record<FontRole, FontConfig>>;
|
|
13
|
+
tokens?: ThemeTokenOverrides;
|
|
14
|
+
colorTheme?: ColorThemes;
|
|
15
|
+
components?: ThemeComponents;
|
|
16
|
+
};
|
|
17
|
+
declare const Theme: ({ nonce, fonts, theme, scope, globalStyles, tokens, colorTheme, components, children }: PropsWithChildren<ThemeProps>) => import("react").JSX.Element;
|
|
18
|
+
export { Theme };
|
package/dist/theme.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FontConfig, FontRole } from "./fonts/types.js";
|
|
2
|
+
import { ColorThemes, ThemeMode, ThemeTokenOverrides } from "./types.js";
|
|
3
|
+
import { ThemeComponents } from "./components.types.js";
|
|
4
|
+
import { PropsWithChildren } from "react";
|
|
5
|
+
export type ThemeScope = "root" | "local";
|
|
6
|
+
export type ThemeProps = {
|
|
7
|
+
nonce?: string;
|
|
8
|
+
theme?: ThemeMode;
|
|
9
|
+
scope?: ThemeScope;
|
|
10
|
+
globalStyles?: boolean;
|
|
11
|
+
fonts?: Partial<Record<FontRole, FontConfig>>;
|
|
12
|
+
tokens?: ThemeTokenOverrides;
|
|
13
|
+
colorTheme?: ColorThemes;
|
|
14
|
+
components?: ThemeComponents;
|
|
15
|
+
};
|
|
16
|
+
declare const Theme: ({ nonce, fonts, theme, scope, globalStyles, tokens, colorTheme, components, children }: PropsWithChildren<ThemeProps>) => import("react").JSX.Element;
|
|
17
|
+
export { Theme };
|
package/dist/theme.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ThemeComponentsProvider } from "./components-context.js";
|
|
2
|
+
import { ThemeScopeProvider } from "./scope-context.js";
|
|
3
|
+
import { resolveFontStylesheets } from "./fonts/resolve-font-stylesheets.js";
|
|
4
|
+
import { createThemeVariables } from "./create-theme-variables.js";
|
|
5
|
+
import { createThemeCss } from "./create-theme-css.js";
|
|
6
|
+
import "./theme.css";
|
|
7
|
+
import "./theme-scopes.css";
|
|
8
|
+
import "./global.css";
|
|
9
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { useId } from "react";
|
|
11
|
+
// src/theme.tsx
|
|
12
|
+
const Theme = ({ nonce, fonts, theme = "system", scope = "root", globalStyles, tokens, colorTheme, components, children }) => {
|
|
13
|
+
const scopeId = useId();
|
|
14
|
+
const fontStylesheets = resolveFontStylesheets(fonts);
|
|
15
|
+
const cssVariables = createThemeVariables(fonts, tokens, theme, colorTheme);
|
|
16
|
+
const css = `${scope === "root" ? ":root" : `[data-puzzle-theme-scope="${scopeId}"]`} {\n${createThemeCss(cssVariables)}\n}`;
|
|
17
|
+
const shouldApplyGlobalStyles = scope === "root" && (globalStyles ?? true);
|
|
18
|
+
const scopedContent = /* @__PURE__ */ jsx(ThemeScopeProvider, {
|
|
19
|
+
scopeId: scope === "local" ? scopeId : null,
|
|
20
|
+
theme,
|
|
21
|
+
children: components === void 0 ? children : /* @__PURE__ */ jsx(ThemeComponentsProvider, {
|
|
22
|
+
components,
|
|
23
|
+
children
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
fontStylesheets.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("link", {
|
|
28
|
+
rel: "preconnect",
|
|
29
|
+
href: "https://fonts.googleapis.com"
|
|
30
|
+
}), /* @__PURE__ */ jsx("link", {
|
|
31
|
+
rel: "preconnect",
|
|
32
|
+
href: "https://fonts.gstatic.com",
|
|
33
|
+
crossOrigin: "anonymous"
|
|
34
|
+
})] }) : null,
|
|
35
|
+
fontStylesheets.map(({ href }) => /* @__PURE__ */ jsx("link", {
|
|
36
|
+
rel: "stylesheet",
|
|
37
|
+
href,
|
|
38
|
+
precedence: "default"
|
|
39
|
+
}, href)),
|
|
40
|
+
shouldApplyGlobalStyles ? /* @__PURE__ */ jsx("style", {
|
|
41
|
+
nonce,
|
|
42
|
+
"data-puzzle-global-styles": ""
|
|
43
|
+
}) : null,
|
|
44
|
+
/* @__PURE__ */ jsx("style", {
|
|
45
|
+
nonce,
|
|
46
|
+
"data-theme": theme,
|
|
47
|
+
"data-puzzle-theme": scope === "root" ? "true" : void 0,
|
|
48
|
+
"data-puzzle-theme-scope-style": scope === "local" ? scopeId : void 0,
|
|
49
|
+
children: css
|
|
50
|
+
}),
|
|
51
|
+
scopedContent
|
|
52
|
+
] });
|
|
53
|
+
};
|
|
54
|
+
export { Theme };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","names":[],"sources":["../src/theme.tsx"],"sourcesContent":["import { useId, type PropsWithChildren } from \"react\";\n\nimport type { FontRole, FontConfig } from \"./fonts\";\nimport type { ColorThemes, ThemeMode, ThemeTokenOverrides } from \"./types\";\nimport type { ThemeComponents } from \"./components.types\";\n\nimport { ThemeComponentsProvider } from \"./components-context\";\nimport { ThemeScopeProvider } from \"./scope-context\";\n\nimport { resolveFontStylesheets } from \"./fonts/resolve-font-stylesheets\";\nimport { createThemeVariables } from \"./create-theme-variables\";\nimport { createThemeCss } from \"./create-theme-css\";\n\nimport \"./theme.css\";\nimport \"./theme-scopes.css\";\nimport \"./global.css\";\n\nexport type ThemeScope = \"root\" | \"local\";\n\nexport type ThemeProps = {\n nonce?: string;\n theme?: ThemeMode;\n scope?: ThemeScope;\n globalStyles?: boolean;\n fonts?: Partial<Record<FontRole, FontConfig>>;\n tokens?: ThemeTokenOverrides;\n colorTheme?: ColorThemes;\n components?: ThemeComponents;\n};\n\nconst Theme = ({\n nonce,\n fonts,\n theme = \"system\",\n scope = \"root\",\n globalStyles,\n tokens,\n colorTheme,\n components,\n children,\n}: PropsWithChildren<ThemeProps>) => {\n const scopeId = useId();\n\n const fontStylesheets = resolveFontStylesheets(fonts);\n const cssVariables = createThemeVariables(fonts, tokens, theme, colorTheme);\n\n const cssSelector =\n scope === \"root\" ? \":root\" : `[data-puzzle-theme-scope=\"${scopeId}\"]`;\n\n const css = `${cssSelector} {\\n${createThemeCss(cssVariables)}\\n}`;\n\n const shouldApplyGlobalStyles = scope === \"root\" && (globalStyles ?? true);\n\n const content =\n components === undefined ? (\n children\n ) : (\n <ThemeComponentsProvider components={components}>\n {children}\n </ThemeComponentsProvider>\n );\n\n const scopedContent = (\n <ThemeScopeProvider\n scopeId={scope === \"local\" ? scopeId : null}\n theme={theme}\n >\n {content}\n </ThemeScopeProvider>\n );\n\n return (\n <>\n {fontStylesheets.length > 0 ? (\n <>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link\n rel=\"preconnect\"\n href=\"https://fonts.gstatic.com\"\n crossOrigin=\"anonymous\"\n />\n </>\n ) : null}\n\n {fontStylesheets.map(({ href }) => (\n <link key={href} rel=\"stylesheet\" href={href} precedence=\"default\" />\n ))}\n\n {shouldApplyGlobalStyles ? (\n <style nonce={nonce} data-puzzle-global-styles=\"\" />\n ) : null}\n\n <style\n nonce={nonce}\n data-theme={theme}\n data-puzzle-theme={scope === \"root\" ? \"true\" : undefined}\n data-puzzle-theme-scope-style={scope === \"local\" ? scopeId : undefined}\n >\n {css}\n </style>\n\n {scopedContent}\n </>\n );\n};\n\nexport { Theme };\n"],"mappings":";;;;;;;;;;;AA8BA,MAAM,SAAS,EACb,OACA,OACA,QAAQ,UACR,QAAQ,QACR,cACA,QACA,YACA,YACA,eACmC;CACnC,MAAM,UAAU,MAAM;CAEtB,MAAM,kBAAkB,uBAAuB,KAAK;CACpD,MAAM,eAAe,qBAAqB,OAAO,QAAQ,OAAO,UAAU;CAK1E,MAAM,MAAM,GAFV,UAAU,SAAS,UAAU,6BAA6B,QAAQ,IAEzC,MAAM,eAAe,YAAY,EAAE;CAE9D,MAAM,0BAA0B,UAAU,WAAW,gBAAgB;CAWrE,MAAM,gBACJ,oBAAC,oBAAD;EACE,SAAS,UAAU,UAAU,UAAU;EAChC;EAXT,UAAA,eAAe,KAAA,IACb,WAEA,oBAAC,yBAAD;GAAqC;GAClC;EACsB,CAAA;CASP,CAAA;CAGtB,OACE,qBAAA,UAAA,EAAA,UAAA;EACG,gBAAgB,SAAS,IACxB,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;GAAM,KAAI;GAAa,MAAK;EAAgC,CAAA,GAC5D,oBAAC,QAAD;GACE,KAAI;GACJ,MAAK;GACL,aAAY;EACb,CAAA,CACD,EAAA,CAAA,IACA;EAEH,gBAAgB,KAAK,EAAE,WACtB,oBAAC,QAAD;GAAiB,KAAI;GAAmB;GAAM,YAAW;EAAW,GAAzD,IAAyD,CACrE;EAEA,0BACC,oBAAC,SAAD;GAAc;GAAO,6BAA0B;EAAI,CAAA,IACjD;EAEJ,oBAAC,SAAD;GACS;GACP,cAAY;GACZ,qBAAmB,UAAU,SAAS,SAAS,KAAA;GAC/C,iCAA+B,UAAU,UAAU,UAAU,KAAA;GAE5D,UAAA;EACI,CAAA;EAEN;CACD,EAAA,CAAA;AAEN"}
|