@snokam/ui 7.5.0 → 7.6.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/CHANGELOG.md +10 -0
- package/dist/theme/color-scheme-provider.d.ts.map +1 -1
- package/dist/theme/color-scheme-provider.js +9 -2
- package/dist/theme/color-scheme-provider.js.map +1 -1
- package/dist/theme/server-scheme.d.ts +16 -0
- package/dist/theme/server-scheme.d.ts.map +1 -0
- package/dist/theme/server-scheme.js +32 -0
- package/dist/theme/server-scheme.js.map +1 -0
- package/dist/theme/server.d.ts +2 -5
- package/dist/theme/server.d.ts.map +1 -1
- package/dist/theme/server.js +13 -22
- package/dist/theme/server.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [7.6.0](https://github.com/snokam/components/compare/%40snokam%2Fui%407.3.4...%40snokam%2Fui%407.6.0) (2026-11-10)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **ui:** server renders the same theme as the pre-paint script ([#3457](https://github.com/snokam/components/issues/3457)) ([5b7d523](https://github.com/snokam/components/commit/5b7d523e5a761530aaa053d6197ef019668b786b))
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **web:** one page trail for every header ([#3447](https://github.com/snokam/components/issues/3447)) ([8b272a1](https://github.com/snokam/components/commit/8b272a14e18de52f259da4afcecdcb384d82d394))
|
|
15
|
+
|
|
6
16
|
# [7.5.0](https://github.com/snokam/components/compare/%40snokam%2Fui%407.3.4...%40snokam%2Fui%407.5.0) (2026-11-10)
|
|
7
17
|
|
|
8
18
|
### Features
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-scheme-provider.d.ts","sourceRoot":"","sources":["../../src/theme/color-scheme-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"color-scheme-provider.d.ts","sourceRoot":"","sources":["../../src/theme/color-scheme-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAgF7D,UAAU,wBAAwB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,WAAsB,EACtB,YAAsB,EACtB,cAAsB,GACvB,EAAE,wBAAwB,+BAkF1B"}
|
|
@@ -9,6 +9,7 @@ import { MuiSchemeSync } from "./mui-scheme-sync";
|
|
|
9
9
|
import { ThemeContext, THEME_KEY, MODE_KEY } from "./context";
|
|
10
10
|
import { IMP_ACTIVE_COOKIE, IMP_THEME_COOKIE, impersonatedMode, impersonatedThemeValue, isImpersonating, } from "./impersonation";
|
|
11
11
|
import { cookieDomain } from "./cookie-domain";
|
|
12
|
+
import { SYSTEM_SCHEME_COOKIE } from "./server-scheme";
|
|
12
13
|
const colorSchemeTheme = buildColorSchemeTheme();
|
|
13
14
|
const PREFERS_DARK = "(prefers-color-scheme: dark)";
|
|
14
15
|
const COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
|
|
@@ -17,6 +18,11 @@ function systemTheme() {
|
|
|
17
18
|
return "light";
|
|
18
19
|
return window.matchMedia?.(PREFERS_DARK).matches ? "dark" : "light";
|
|
19
20
|
}
|
|
21
|
+
function rememberSystemTheme() {
|
|
22
|
+
const theme = systemTheme();
|
|
23
|
+
document.cookie = `${SYSTEM_SCHEME_COOKIE}=${theme}; path=/; max-age=${COOKIE_MAX_AGE}; samesite=lax`;
|
|
24
|
+
return theme;
|
|
25
|
+
}
|
|
20
26
|
function isMode(value) {
|
|
21
27
|
return value === "light" || value === "dark" || value === "system";
|
|
22
28
|
}
|
|
@@ -87,11 +93,12 @@ export function ColorSchemeProvider({ children, initialMode = "system", initialT
|
|
|
87
93
|
if (!media)
|
|
88
94
|
return;
|
|
89
95
|
setSystem(systemTheme());
|
|
90
|
-
const onChange = () => setSystem(
|
|
96
|
+
const onChange = () => setSystem(rememberSystemTheme());
|
|
91
97
|
media.addEventListener?.("change", onChange);
|
|
92
98
|
return () => media.removeEventListener?.("change", onChange);
|
|
93
99
|
}, []);
|
|
94
100
|
const theme = resolve(mode, system);
|
|
101
|
+
const [firstTheme] = useState(theme);
|
|
95
102
|
useEffect(() => {
|
|
96
103
|
if (!hydrated)
|
|
97
104
|
return;
|
|
@@ -126,6 +133,6 @@ export function ColorSchemeProvider({ children, initialMode = "system", initialT
|
|
|
126
133
|
}), [theme, mode, toggle, choose, seedMode, seeded, markSeeded]);
|
|
127
134
|
return (_jsxs(ThemeContext.Provider, { value: value, children: [_jsx(Global, { styles: css `
|
|
128
135
|
${themeVarsCss}
|
|
129
|
-
` }), _jsxs(ThemeProvider, { theme: colorSchemeTheme, storageManager: null, colorSchemeNode: null, forceThemeRerender: true, children: [_jsx(MuiSchemeSync, { theme: theme }), children] })] }));
|
|
136
|
+
` }), _jsxs(ThemeProvider, { theme: colorSchemeTheme, defaultMode: firstTheme, storageManager: null, colorSchemeNode: null, forceThemeRerender: true, children: [_jsx(MuiSchemeSync, { theme: theme }), children] })] }));
|
|
130
137
|
}
|
|
131
138
|
//# sourceMappingURL=color-scheme-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-scheme-provider.js","sourceRoot":"","sources":["../../src/theme/color-scheme-provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAEL,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"color-scheme-provider.js","sourceRoot":"","sources":["../../src/theme/color-scheme-provider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ColorSchemeMode } from "./context.ts";
|
|
2
|
+
export type ResolvedScheme = "light" | "dark";
|
|
3
|
+
export declare const SYSTEM_SCHEME_COOKIE = "snokam.theme.system";
|
|
4
|
+
export interface SchemeCookies {
|
|
5
|
+
mode?: string;
|
|
6
|
+
theme?: string;
|
|
7
|
+
system?: string;
|
|
8
|
+
impersonationActive?: string;
|
|
9
|
+
impersonationTheme?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InitialColorScheme {
|
|
12
|
+
initialMode: ColorSchemeMode;
|
|
13
|
+
initialTheme: ResolvedScheme;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveInitialColorScheme(cookies: SchemeCookies, sessionMode?: unknown): InitialColorScheme;
|
|
16
|
+
//# sourceMappingURL=server-scheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-scheme.d.ts","sourceRoot":"","sources":["../../src/theme/server-scheme.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9C,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,eAAe,CAAC;IAC7B,YAAY,EAAE,cAAc,CAAC;CAC9B;AAgCD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,EACtB,WAAW,CAAC,EAAE,OAAO,GACpB,kBAAkB,CAOpB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { impersonatedMode, isImpersonating } from "./impersonation.js";
|
|
2
|
+
export const SYSTEM_SCHEME_COOKIE = "snokam.theme.system";
|
|
3
|
+
function isMode(value) {
|
|
4
|
+
return value === "light" || value === "dark" || value === "system";
|
|
5
|
+
}
|
|
6
|
+
function isScheme(value) {
|
|
7
|
+
return value === "light" || value === "dark";
|
|
8
|
+
}
|
|
9
|
+
function chosenMode(cookies, sessionMode) {
|
|
10
|
+
if (isImpersonating(cookies.impersonationActive)) {
|
|
11
|
+
return (impersonatedMode(cookies.impersonationActive, cookies.impersonationTheme) ?? "system");
|
|
12
|
+
}
|
|
13
|
+
if (isMode(cookies.mode))
|
|
14
|
+
return cookies.mode;
|
|
15
|
+
if (isMode(sessionMode))
|
|
16
|
+
return sessionMode;
|
|
17
|
+
return "system";
|
|
18
|
+
}
|
|
19
|
+
function systemScheme(cookies) {
|
|
20
|
+
if (isScheme(cookies.system))
|
|
21
|
+
return cookies.system;
|
|
22
|
+
return cookies.theme === "dark" ? "dark" : "light";
|
|
23
|
+
}
|
|
24
|
+
export function resolveInitialColorScheme(cookies, sessionMode) {
|
|
25
|
+
const initialMode = chosenMode(cookies, sessionMode);
|
|
26
|
+
const system = systemScheme(cookies);
|
|
27
|
+
return {
|
|
28
|
+
initialMode,
|
|
29
|
+
initialTheme: initialMode === "system" ? system : initialMode,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=server-scheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-scheme.js","sourceRoot":"","sources":["../../src/theme/server-scheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAe1D,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CACjB,OAAsB,EACtB,WAAoB;IAEpB,IAAI,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACjD,OAAO,CACL,gBAAgB,CACd,OAAO,CAAC,mBAAmB,EAC3B,OAAO,CAAC,kBAAkB,CAC3B,IAAI,QAAQ,CACd,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAC9C,IAAI,MAAM,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,OAAsB;IAC1C,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC;IACpD,OAAO,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAsB,EACtB,WAAqB;IAErB,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO;QACL,WAAW;QACX,YAAY,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;KAC9D,CAAC;AACJ,CAAC"}
|
package/dist/theme/server.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import type { CSSProperties } from "react";
|
|
2
|
-
import
|
|
3
|
-
export
|
|
4
|
-
initialMode: ColorSchemeMode;
|
|
5
|
-
initialTheme: AdminTheme;
|
|
6
|
-
}
|
|
2
|
+
import { type InitialColorScheme } from "./server-scheme";
|
|
3
|
+
export type { InitialColorScheme };
|
|
7
4
|
export declare function getServerColorScheme(session?: unknown): Promise<InitialColorScheme>;
|
|
8
5
|
export declare function getImpersonationBannerStyle(): Promise<CSSProperties>;
|
|
9
6
|
export declare const themeBootstrapScript: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/theme/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/theme/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAW3C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAKnC,wBAAsB,oBAAoB,CACxC,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAY7B;AAKD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,aAAa,CAAC,CAQ1E;AAED,eAAO,MAAM,oBAAoB,QA4DhC,CAAC"}
|
package/dist/theme/server.js
CHANGED
|
@@ -1,31 +1,18 @@
|
|
|
1
1
|
import { cookies } from "next/headers";
|
|
2
|
-
import { IMP_ACTIVE_COOKIE, IMP_THEME_COOKIE,
|
|
2
|
+
import { IMP_ACTIVE_COOKIE, IMP_THEME_COOKIE, isImpersonating, } from "./impersonation";
|
|
3
3
|
import { SESSION_HINT_ATTRIBUTE, SESSION_HINT_COOKIE, SIGNED_IN_HINT, } from "./session-hint";
|
|
4
|
+
import { resolveInitialColorScheme, SYSTEM_SCHEME_COOKIE, } from "./server-scheme";
|
|
4
5
|
const THEME_KEY = "snokam.admin.theme";
|
|
5
6
|
const MODE_KEY = "snokam.theme.mode";
|
|
6
|
-
function isMode(value) {
|
|
7
|
-
return value === "light" || value === "dark" || value === "system";
|
|
8
|
-
}
|
|
9
7
|
export async function getServerColorScheme(session) {
|
|
10
8
|
const store = await cookies();
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const fromSession = isMode(sessionMode) ? sessionMode : undefined;
|
|
19
|
-
const fromCookie = isMode(modeCookie) ? modeCookie : undefined;
|
|
20
|
-
const initialMode = fromSession ?? fromCookie ?? "system";
|
|
21
|
-
const initialTheme = initialMode === "dark"
|
|
22
|
-
? "dark"
|
|
23
|
-
: initialMode === "light"
|
|
24
|
-
? "light"
|
|
25
|
-
: themeCookie === "dark"
|
|
26
|
-
? "dark"
|
|
27
|
-
: "light";
|
|
28
|
-
return { initialMode, initialTheme };
|
|
9
|
+
return resolveInitialColorScheme({
|
|
10
|
+
mode: store.get(MODE_KEY)?.value,
|
|
11
|
+
theme: store.get(THEME_KEY)?.value,
|
|
12
|
+
system: store.get(SYSTEM_SCHEME_COOKIE)?.value,
|
|
13
|
+
impersonationActive: store.get(IMP_ACTIVE_COOKIE)?.value,
|
|
14
|
+
impersonationTheme: store.get(IMP_THEME_COOKIE)?.value,
|
|
15
|
+
}, session?.colorScheme);
|
|
29
16
|
}
|
|
30
17
|
const TEST_ENVIRONMENT = "t";
|
|
31
18
|
const SESSION_COOKIE_MARKER = ".session-token";
|
|
@@ -55,6 +42,10 @@ export const themeBootstrapScript = `
|
|
|
55
42
|
var prefersDark = window.matchMedia?.(
|
|
56
43
|
"(prefers-color-scheme: dark)"
|
|
57
44
|
)?.matches;
|
|
45
|
+
document.cookie =
|
|
46
|
+
"${SYSTEM_SCHEME_COOKIE}=" +
|
|
47
|
+
(prefersDark ? "dark" : "light") +
|
|
48
|
+
"; path=/; max-age=31536000; samesite=lax";
|
|
58
49
|
var theme =
|
|
59
50
|
mode === "light" || mode === "dark"
|
|
60
51
|
? mode
|
package/dist/theme/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/theme/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/theme/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAErB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,SAAS,GAAG,oBAAoB,CAAC;AACvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;IAC9B,OAAO,yBAAyB,CAC9B;QACE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;QAChC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK;QAClC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK;QAC9C,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK;QACxD,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK;KACvD,EACA,OAAwD,EAAE,WAAW,CACvE,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3E,MAAM,cAAc,GAClB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,gBAAgB;QAC5C,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IACjD,OAAO,EAAE,+BAA+B,EAAE,MAAM,EAAmB,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;SAkB3B,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA+BX,mBAAmB,IAAI,cAAc;;;yBAG9B,sBAAsB,OAAO,cAAc;UAC1D,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,gBAAgB;;;;;;;CAOrD,CAAC"}
|
package/package.json
CHANGED