resonare 0.0.4 → 0.0.6
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/README.md +13 -3
- package/dist/index.d.ts +26 -13
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -14
- package/dist/index.js.map +1 -0
- package/dist/inline-script.ts +1 -0
- package/dist/react.d.ts +22 -9
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +2 -1
- package/dist/react.js.map +1 -0
- package/dist/resonare.iife.min.js +3 -3
- package/package.json +11 -8
package/README.md
CHANGED
|
@@ -113,7 +113,7 @@ const config = {
|
|
|
113
113
|
'standard',
|
|
114
114
|
'high',
|
|
115
115
|
],
|
|
116
|
-
|
|
116
|
+
initialValue: 'standard',
|
|
117
117
|
}
|
|
118
118
|
} as const satisfies ThemeConfig
|
|
119
119
|
|
|
@@ -238,7 +238,6 @@ Ensure that you have initialized Resonare as per instructions under [Basic Usage
|
|
|
238
238
|
|
|
239
239
|
```tsx
|
|
240
240
|
import * as React from 'react'
|
|
241
|
-
import { getThemesAndOptions } from 'resonare'
|
|
242
241
|
import { useResonare } from 'resonare/react'
|
|
243
242
|
|
|
244
243
|
function ThemeSelect() {
|
|
@@ -246,7 +245,18 @@ function ThemeSelect() {
|
|
|
246
245
|
window.resonare.getThemeStore(),
|
|
247
246
|
)
|
|
248
247
|
|
|
249
|
-
|
|
248
|
+
const themesAndOptions = Object.entries(config).map(
|
|
249
|
+
([themeKey, { options }]) => {
|
|
250
|
+
return [
|
|
251
|
+
themeKey,
|
|
252
|
+
options.map((option) =>
|
|
253
|
+
typeof option === 'string' ? option : option.value,
|
|
254
|
+
),
|
|
255
|
+
] as [keyof typeof config, Array<string>]
|
|
256
|
+
},
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
return themesAndOptions.map(([theme, options]) => (
|
|
250
260
|
<div key={theme}>
|
|
251
261
|
<label htmlFor={theme}>{theme}</label>
|
|
252
262
|
<select
|
package/dist/index.d.ts
CHANGED
|
@@ -17,23 +17,35 @@ declare const localStorageAdapter: StorageAdapterCreator<{
|
|
|
17
17
|
declare const memoryStorageAdapter: StorageAdapterCreator<never>;
|
|
18
18
|
//#endregion
|
|
19
19
|
//#region src/index.d.ts
|
|
20
|
-
type
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
type ThemeOptionValue = string | number | boolean;
|
|
21
|
+
type ThemeOption<T extends ThemeOptionValue = string> = {
|
|
22
|
+
value: T;
|
|
23
|
+
media?: [string, T, T];
|
|
23
24
|
};
|
|
24
|
-
type
|
|
25
|
-
options: ReadonlyArray<
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
25
|
+
type ThemeOptions<T extends ThemeOptionValue = string> = {
|
|
26
|
+
options: [T | ThemeOption<T>, T | ThemeOption<T>, ...ReadonlyArray<T | ThemeOption<T>>];
|
|
27
|
+
initialValue?: T;
|
|
28
|
+
} | {
|
|
29
|
+
initialValue: T;
|
|
30
|
+
};
|
|
31
|
+
type ThemeConfig = Record<string, ThemeOptions<string> | ThemeOptions<number> | ThemeOptions<boolean>>;
|
|
32
|
+
type Themes<T extends ThemeConfig> = { [K in keyof T]: T[K] extends {
|
|
33
|
+
options: ReadonlyArray<infer U>;
|
|
34
|
+
} ? U extends ThemeOption ? U['value'] : U : T[K] extends {
|
|
35
|
+
initialValue: infer U;
|
|
36
|
+
} ? U extends string ? string : U extends number ? number : boolean : never };
|
|
29
37
|
type Listener<T extends ThemeConfig> = (value: {
|
|
30
38
|
themes: Themes<T>;
|
|
31
39
|
resolvedThemes: Themes<T>;
|
|
32
40
|
}) => void;
|
|
33
|
-
type ThemeKeysWithSystemOption<T extends ThemeConfig> = { [K in keyof T]: T[K]
|
|
34
|
-
|
|
41
|
+
type ThemeKeysWithSystemOption<T extends ThemeConfig> = { [K in keyof T]: T[K] extends {
|
|
42
|
+
options: ReadonlyArray<infer U>;
|
|
43
|
+
} ? U extends {
|
|
44
|
+
media: ReadonlyArray<unknown>;
|
|
35
45
|
} ? K : never : never }[keyof T];
|
|
36
|
-
type NonSystemOptionValues<T extends ThemeConfig, K
|
|
46
|
+
type NonSystemOptionValues<T extends ThemeConfig, K extends keyof T> = T[K] extends {
|
|
47
|
+
options: ReadonlyArray<infer U>;
|
|
48
|
+
} ? U extends string | number | boolean ? U : U extends ThemeOption ? U extends {
|
|
37
49
|
media: [string, string, string];
|
|
38
50
|
} ? never : U['value'] : never : never;
|
|
39
51
|
type SystemOptions<T extends ThemeConfig> = { [K in ThemeKeysWithSystemOption<T>]?: [NonSystemOptionValues<T, K>, NonSystemOptionValues<T, K>] };
|
|
@@ -62,7 +74,7 @@ declare class ThemeStore<T extends ThemeConfig> {
|
|
|
62
74
|
getThemes: () => Themes<T>;
|
|
63
75
|
getResolvedThemes: () => Themes<T>;
|
|
64
76
|
setThemes: (themes: Partial<Themes<T>> | ((currentThemes: Themes<T>) => Partial<Themes<T>>)) => Promise<void>;
|
|
65
|
-
updateSystemOption: <K
|
|
77
|
+
updateSystemOption: <K extends ThemeKeysWithSystemOption<T>>(themeKey: K, [ifMatch, ifNotMatch]: [NonSystemOptionValues<T, K>, NonSystemOptionValues<T, K>]) => void;
|
|
66
78
|
getStateToPersist: () => PersistedState<T>;
|
|
67
79
|
restore: () => Promise<void>;
|
|
68
80
|
subscribe: (callback: Listener<T>, {
|
|
@@ -78,4 +90,5 @@ declare const getThemeStore: <T extends keyof ThemeStoreRegistry>(key?: T | unde
|
|
|
78
90
|
declare const destroyThemeStore: <T extends keyof ThemeStoreRegistry>(key?: T | undefined) => void;
|
|
79
91
|
interface ThemeStoreRegistry {}
|
|
80
92
|
//#endregion
|
|
81
|
-
export { StorageAdapter, StorageAdapterCreate, StorageAdapterCreator, ThemeAndOptions, ThemeConfig, type ThemeStore, ThemeStoreOptions, ThemeStoreRegistry, Themes, createThemeStore, destroyThemeStore, getDefaultThemes, getThemeStore, getThemesAndOptions, localStorageAdapter, memoryStorageAdapter };
|
|
93
|
+
export { StorageAdapter, StorageAdapterCreate, StorageAdapterCreator, ThemeAndOptions, ThemeConfig, type ThemeStore, ThemeStoreOptions, ThemeStoreRegistry, Themes, createThemeStore, destroyThemeStore, getDefaultThemes, getThemeStore, getThemesAndOptions, localStorageAdapter, memoryStorageAdapter };
|
|
94
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/storage.ts","../src/index.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -63,8 +63,8 @@ function getThemesAndOptions(config) {
|
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
function getDefaultThemes(config) {
|
|
66
|
-
return Object.fromEntries(Object.entries(config).map(([themeKey,
|
|
67
|
-
return [themeKey,
|
|
66
|
+
return Object.fromEntries(Object.entries(config).map(([themeKey, themeOptions]) => {
|
|
67
|
+
return [themeKey, themeOptions.initialValue ?? (typeof themeOptions.options[0] === "object" ? themeOptions.options[0].value : themeOptions.options[0])];
|
|
68
68
|
}));
|
|
69
69
|
}
|
|
70
70
|
const isClient = !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
|
|
@@ -80,14 +80,13 @@ var ThemeStore = class {
|
|
|
80
80
|
constructor({ key = name, config, initialState = {}, storage = localStorageAdapter() }) {
|
|
81
81
|
const keyedConfig = {};
|
|
82
82
|
const systemOptions = { ...initialState.systemOptions };
|
|
83
|
-
Object.entries(config).forEach(([themeKey,
|
|
84
|
-
keyedConfig[themeKey] =
|
|
85
|
-
options.forEach((option) => {
|
|
86
|
-
if (typeof option === "
|
|
87
|
-
else {
|
|
83
|
+
Object.entries(config).forEach(([themeKey, themeOptions]) => {
|
|
84
|
+
keyedConfig[themeKey] = {};
|
|
85
|
+
if ("options" in themeOptions) themeOptions.options.forEach((option) => {
|
|
86
|
+
if (typeof option === "object") {
|
|
88
87
|
if (option.media && !Object.hasOwn(systemOptions, themeKey)) systemOptions[themeKey] = [option.media[1], option.media[2]];
|
|
89
|
-
keyedConfig[themeKey][option.value] = option;
|
|
90
|
-
}
|
|
88
|
+
keyedConfig[themeKey][String(option.value)] = option;
|
|
89
|
+
} else keyedConfig[themeKey][String(option)] = { value: option };
|
|
91
90
|
});
|
|
92
91
|
});
|
|
93
92
|
this.#options = {
|
|
@@ -182,11 +181,11 @@ var ThemeStore = class {
|
|
|
182
181
|
};
|
|
183
182
|
#resolveThemes = () => {
|
|
184
183
|
return Object.fromEntries(Object.entries(this.#currentThemes).map(([themeKey, optionKey]) => {
|
|
185
|
-
const option = this.#options.config[themeKey][optionKey];
|
|
186
|
-
return [themeKey, this.#resolveThemeOption({
|
|
184
|
+
const option = this.#options.config[themeKey]?.[optionKey];
|
|
185
|
+
return [themeKey, option ? this.#resolveThemeOption({
|
|
187
186
|
themeKey,
|
|
188
187
|
option
|
|
189
|
-
})];
|
|
188
|
+
}) : optionKey];
|
|
190
189
|
}));
|
|
191
190
|
};
|
|
192
191
|
#resolveThemeOption = ({ themeKey, option }) => {
|
|
@@ -231,7 +230,7 @@ var Registry = class {
|
|
|
231
230
|
};
|
|
232
231
|
destroy = (key) => {
|
|
233
232
|
const storeKey = key || name;
|
|
234
|
-
if (!this.#registry.has(storeKey))
|
|
233
|
+
if (!this.#registry.has(storeKey)) return;
|
|
235
234
|
this.#registry.get(storeKey).___destroy();
|
|
236
235
|
this.#registry.delete(storeKey);
|
|
237
236
|
};
|
|
@@ -242,4 +241,5 @@ const getThemeStore = registry.get;
|
|
|
242
241
|
const destroyThemeStore = registry.destroy;
|
|
243
242
|
|
|
244
243
|
//#endregion
|
|
245
|
-
export { createThemeStore, destroyThemeStore, getDefaultThemes, getThemeStore, getThemesAndOptions, localStorageAdapter, memoryStorageAdapter };
|
|
244
|
+
export { createThemeStore, destroyThemeStore, getDefaultThemes, getThemeStore, getThemesAndOptions, localStorageAdapter, memoryStorageAdapter };
|
|
245
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["name","PACKAGE_NAME","type","StorageAdapter","getItem","key","Promise","setItem","value","broadcast","watch","cb","StorageAdapterCreate","abortController","AbortController","StorageAdapterCreator","options","Options","localStorageAdapter","storageType","JSON","parse","window","stringify","controller","addEventListener","e","storageArea","newValue","signal","AbortSignal","any","abort","memoryStorageAdapter","storage","Map","channel","BroadcastChannel","get","set","postMessage","data","name","PACKAGE_NAME","type","localStorageAdapter","StorageAdapter","StorageAdapterCreate","ThemeOptionValue","ThemeOption","value","T","media","ThemeOptions","options","ReadonlyArray","initialValue","ThemeConfig","Record","KeyedThemeConfig","Themes","K","U","Listener","themes","resolvedThemes","ThemeKeysWithSystemOption","NonSystemOptionValues","SystemOptions","PersistedState","version","Partial","systemOptions","ThemeStoreOptions","key","config","initialState","storage","ThemeAndOptions","Array","getThemesAndOptions","Object","entries","map","themeKey","option","getDefaultThemes","fromEntries","themeOptions","defaultValue","isClient","window","document","createElement","ThemeStore","defaultThemes","currentThemes","Required","Omit","listeners","Set","mediaQueryCache","MediaQueryList","abortController","AbortController","constructor","keyedConfig","forEach","hasOwn","String","getThemes","getResolvedThemes","resolveThemes","setThemes","Promise","updatedThemes","setThemesAndNotify","stateToPersist","getStateToPersist","setItem","broadcast","updateSystemOption","ifMatch","ifNotMatch","restore","persistedState","getItem","subscribe","callback","immediate","add","delete","sync","watch","console","warn","___destroy","clear","abort","#setThemesAndNotify","notify","#resolveThemes","optionKey","resolveThemeOption","#resolveThemeOption","mediaQuery","mediaQueryList","matchMedia","addEventListener","signal","matches","#notify","listener","Registry","registry","Map","create","storeKey","themeStore","get","set","ThemeStoreRegistry","has","Error","destroy","createThemeStore","getThemeStore","destroyThemeStore"],"sources":["../package.json","../src/storage.ts","../src/index.ts"],"sourcesContent":["","import { name as PACKAGE_NAME } from '../package.json' with { type: 'json' }\n\nexport type StorageAdapter = {\n\tgetItem: (key: string) => object | null | Promise<object | null>\n\tsetItem: (key: string, value: object) => void | Promise<void>\n\t// removeItem: (key: string) => void | Promise<void>\n\tbroadcast?: (key: string, value: object) => void\n\twatch?: (cb: (key: string | null, value: object) => void) => () => void\n}\n\nexport type StorageAdapterCreate = ({\n\tabortController,\n}: {\n\tabortController: AbortController\n}) => StorageAdapter\n\nexport type StorageAdapterCreator<Options> = (\n\toptions?: Options,\n) => StorageAdapterCreate\n\nexport const localStorageAdapter: StorageAdapterCreator<{\n\tstorageType?: 'localStorage' | 'sessionStorage'\n}> = ({ storageType = 'localStorage' } = {}) => {\n\treturn ({ abortController }) => {\n\t\treturn {\n\t\t\tgetItem: (key: string) => {\n\t\t\t\treturn JSON.parse(window[storageType].getItem(key) || 'null')\n\t\t\t},\n\n\t\t\tsetItem: (key: string, value: object) => {\n\t\t\t\twindow[storageType].setItem(key, JSON.stringify(value))\n\t\t\t},\n\n\t\t\t// removeItem: (key: string) => {\n\t\t\t// \twindow[storageType].removeItem(key)\n\t\t\t// },\n\n\t\t\twatch: (cb) => {\n\t\t\t\tconst controller = new AbortController()\n\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'storage',\n\t\t\t\t\t(e) => {\n\t\t\t\t\t\tif (e.storageArea !== window[storageType]) return\n\n\t\t\t\t\t\tcb(e.key, JSON.parse(e.newValue!))\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsignal: AbortSignal.any([\n\t\t\t\t\t\t\tabortController.signal,\n\t\t\t\t\t\t\tcontroller.signal,\n\t\t\t\t\t\t]),\n\t\t\t\t\t},\n\t\t\t\t)\n\n\t\t\t\treturn () => {\n\t\t\t\t\tcontroller.abort()\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n}\n\nexport const memoryStorageAdapter: StorageAdapterCreator<never> = () => {\n\treturn ({ abortController }) => {\n\t\tconst storage = new Map<string, object>()\n\t\tconst channel = new BroadcastChannel(PACKAGE_NAME)\n\n\t\treturn {\n\t\t\tgetItem: (key: string) => {\n\t\t\t\treturn storage.get(key) || null\n\t\t\t},\n\n\t\t\tsetItem: (key: string, value: object) => {\n\t\t\t\tstorage.set(key, value)\n\t\t\t},\n\n\t\t\t// removeItem: (key: string) => {\n\t\t\t// \tstorage.delete(key)\n\t\t\t// },\n\n\t\t\tbroadcast: (key: string, value: object) => {\n\t\t\t\tchannel.postMessage({ key, value })\n\t\t\t},\n\n\t\t\twatch: (cb) => {\n\t\t\t\tconst controller = new AbortController()\n\n\t\t\t\tchannel.addEventListener(\n\t\t\t\t\t'message',\n\t\t\t\t\t(e) => {\n\t\t\t\t\t\tcb(e.data.key, e.data.value)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsignal: AbortSignal.any([\n\t\t\t\t\t\t\tabortController.signal,\n\t\t\t\t\t\t\tcontroller.signal,\n\t\t\t\t\t\t]),\n\t\t\t\t\t},\n\t\t\t\t)\n\n\t\t\t\treturn () => {\n\t\t\t\t\tcontroller.abort()\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n}\n","import { name as PACKAGE_NAME } from '../package.json' with { type: 'json' }\nimport {\n\tlocalStorageAdapter,\n\ttype StorageAdapter,\n\ttype StorageAdapterCreate,\n} from './storage'\n\ntype ThemeOptionValue = string | number | boolean\n\ntype ThemeOption<T extends ThemeOptionValue = string> = {\n\tvalue: T\n\tmedia?: [string, T, T]\n}\n\ntype ThemeOptions<T extends ThemeOptionValue = string> =\n\t| {\n\t\t\toptions: [\n\t\t\t\tT | ThemeOption<T>,\n\t\t\t\tT | ThemeOption<T>,\n\t\t\t\t...ReadonlyArray<T | ThemeOption<T>>,\n\t\t\t]\n\t\t\tinitialValue?: T\n\t }\n\t| {\n\t\t\tinitialValue: T\n\t }\n\nexport type ThemeConfig = Record<\n\tstring,\n\tThemeOptions<string> | ThemeOptions<number> | ThemeOptions<boolean>\n>\n\n// { [themeKey]: { [optionKey]: ThemeOption } }\ntype KeyedThemeConfig<T extends ThemeConfig> = {\n\t[K in keyof T]: Record<string, ThemeOption>\n}\n\nexport type Themes<T extends ThemeConfig> = {\n\t[K in keyof T]: T[K] extends { options: ReadonlyArray<infer U> }\n\t\t? U extends ThemeOption\n\t\t\t? U['value']\n\t\t\t: U\n\t\t: T[K] extends { initialValue: infer U }\n\t\t\t? U extends string\n\t\t\t\t? string\n\t\t\t\t: U extends number\n\t\t\t\t\t? number\n\t\t\t\t\t: boolean\n\t\t\t: never\n}\n\ntype Listener<T extends ThemeConfig> = (value: {\n\tthemes: Themes<T>\n\tresolvedThemes: Themes<T>\n}) => void\n\ntype ThemeKeysWithSystemOption<T extends ThemeConfig> = {\n\t[K in keyof T]: T[K] extends { options: ReadonlyArray<infer U> }\n\t\t? U extends { media: ReadonlyArray<unknown> }\n\t\t\t? K\n\t\t\t: never\n\t\t: never\n}[keyof T]\n\ntype NonSystemOptionValues<\n\tT extends ThemeConfig,\n\tK extends keyof T,\n> = T[K] extends { options: ReadonlyArray<infer U> }\n\t? U extends string | number | boolean\n\t\t? U\n\t\t: U extends ThemeOption\n\t\t\t? U extends { media: [string, string, string] }\n\t\t\t\t? never\n\t\t\t\t: U['value']\n\t\t\t: never\n\t: never\n\ntype SystemOptions<T extends ThemeConfig> = {\n\t[K in ThemeKeysWithSystemOption<T>]?: [\n\t\tNonSystemOptionValues<T, K>,\n\t\tNonSystemOptionValues<T, K>,\n\t]\n}\n\ntype PersistedState<T extends ThemeConfig> = {\n\tversion: 1\n\tthemes: Partial<Themes<T>>\n\tsystemOptions: SystemOptions<T>\n}\n\nexport type ThemeStoreOptions<T extends ThemeConfig> = {\n\tkey?: string\n\tconfig: T\n\tinitialState?: Partial<PersistedState<T>>\n\tstorage?: StorageAdapterCreate\n}\n\nexport type ThemeAndOptions<T extends ThemeConfig> = Array<\n\t{\n\t\t[K in keyof T]: [\n\t\t\tK,\n\t\t\tArray<\n\t\t\t\tT[K]['options'] extends ReadonlyArray<infer U>\n\t\t\t\t\t? U extends string\n\t\t\t\t\t\t? U\n\t\t\t\t\t\t: U extends ThemeOption\n\t\t\t\t\t\t\t? U['value']\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>,\n\t\t]\n\t}[keyof T]\n>\n\nexport function getThemesAndOptions<T extends ThemeConfig>(config: T) {\n\treturn Object.entries(config).map(([themeKey, { options }]) => {\n\t\treturn [\n\t\t\tthemeKey,\n\t\t\toptions.map((option) =>\n\t\t\t\ttypeof option === 'string' ? option : option.value,\n\t\t\t),\n\t\t]\n\t}) as ThemeAndOptions<T>\n}\n\nexport function getDefaultThemes<T extends ThemeConfig>(config: T) {\n\treturn Object.fromEntries(\n\t\tObject.entries(config).map(([themeKey, themeOptions]) => {\n\t\t\tconst defaultValue =\n\t\t\t\tthemeOptions.initialValue ??\n\t\t\t\t(typeof themeOptions.options[0] === 'object'\n\t\t\t\t\t? themeOptions.options[0].value\n\t\t\t\t\t: themeOptions.options[0])\n\n\t\t\treturn [themeKey, defaultValue]\n\t\t}),\n\t) as Themes<T>\n}\n\nconst isClient = !!(\n\ttypeof window !== 'undefined' &&\n\ttypeof window.document !== 'undefined' &&\n\ttypeof window.document.createElement !== 'undefined'\n)\n\nclass ThemeStore<T extends ThemeConfig> {\n\t#defaultThemes: Themes<T>\n\t#currentThemes: Themes<T>\n\n\t#options: Required<Omit<ThemeStoreOptions<T>, 'config' | 'initialState'>> & {\n\t\tconfig: KeyedThemeConfig<T>\n\t}\n\n\t#systemOptions: SystemOptions<T>\n\n\t#storage: StorageAdapter\n\n\t#listeners: Set<Listener<T>> = new Set<Listener<T>>()\n\n\t#mediaQueryCache: Record<string, MediaQueryList>\n\n\t#abortController = new AbortController()\n\n\tconstructor({\n\t\tkey = PACKAGE_NAME,\n\t\tconfig,\n\t\tinitialState = {},\n\t\tstorage = localStorageAdapter(),\n\t}: ThemeStoreOptions<T>) {\n\t\tconst keyedConfig: Record<string, Record<string, ThemeOption<any>>> = {}\n\t\tconst systemOptions: Record<string, [ThemeOptionValue, ThemeOptionValue]> =\n\t\t\t{\n\t\t\t\t...initialState.systemOptions,\n\t\t\t}\n\n\t\tObject.entries(config).forEach(([themeKey, themeOptions]) => {\n\t\t\tkeyedConfig[themeKey] = {}\n\n\t\t\tif ('options' in themeOptions) {\n\t\t\t\tthemeOptions.options.forEach((option) => {\n\t\t\t\t\tif (typeof option === 'object') {\n\t\t\t\t\t\tif (option.media && !Object.hasOwn(systemOptions, themeKey)) {\n\t\t\t\t\t\t\tsystemOptions[themeKey] = [option.media[1], option.media[2]]\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tkeyedConfig[themeKey]![String(option.value)] = option\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkeyedConfig[themeKey]![String(option)] = { value: option }\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\tthis.#options = {\n\t\t\tkey,\n\t\t\tconfig: keyedConfig as KeyedThemeConfig<T>,\n\t\t\tstorage,\n\t\t}\n\n\t\tthis.#systemOptions = systemOptions as SystemOptions<T>\n\n\t\tthis.#defaultThemes = getDefaultThemes(config)\n\n\t\tthis.#currentThemes = { ...this.#defaultThemes, ...initialState.themes }\n\n\t\tthis.#storage = this.#options.storage({\n\t\t\tabortController: this.#abortController,\n\t\t})\n\n\t\tthis.#mediaQueryCache = {}\n\t}\n\n\tgetThemes = (): Themes<T> => {\n\t\treturn this.#currentThemes\n\t}\n\n\tgetResolvedThemes = (): Themes<T> => {\n\t\treturn this.#resolveThemes()\n\t}\n\n\tsetThemes = async (\n\t\tthemes:\n\t\t\t| Partial<Themes<T>>\n\t\t\t| ((currentThemes: Themes<T>) => Partial<Themes<T>>),\n\t): Promise<void> => {\n\t\tconst updatedThemes =\n\t\t\ttypeof themes === 'function' ? themes(this.#currentThemes) : themes\n\n\t\tthis.#setThemesAndNotify({ ...this.#currentThemes, ...updatedThemes })\n\n\t\tconst stateToPersist = this.getStateToPersist()\n\n\t\tawait this.#storage.setItem(this.#options.key, stateToPersist)\n\n\t\tthis.#storage.broadcast?.(this.#options.key, stateToPersist)\n\t}\n\n\tupdateSystemOption = <K extends ThemeKeysWithSystemOption<T>>(\n\t\tthemeKey: K,\n\t\t[ifMatch, ifNotMatch]: [\n\t\t\tNonSystemOptionValues<T, K>,\n\t\t\tNonSystemOptionValues<T, K>,\n\t\t],\n\t) => {\n\t\tthis.#systemOptions[themeKey] = [ifMatch, ifNotMatch]\n\n\t\tthis.setThemes({ ...this.#currentThemes })\n\t}\n\n\tgetStateToPersist = (): PersistedState<T> => {\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\tthemes: this.#currentThemes,\n\t\t\tsystemOptions: this.#systemOptions,\n\t\t}\n\t}\n\n\trestore = async (): Promise<void> => {\n\t\tlet persistedState = await this.#storage.getItem(this.#options.key)\n\n\t\tif (!persistedState) {\n\t\t\tthis.#setThemesAndNotify({ ...this.#defaultThemes })\n\t\t\treturn\n\t\t}\n\n\t\t// for backward compatibility\n\t\tif (!Object.hasOwn(persistedState, 'version')) {\n\t\t\tpersistedState = {\n\t\t\t\tversion: 1,\n\t\t\t\tthemes: persistedState,\n\t\t\t\tsystemOptions: this.#systemOptions,\n\t\t\t}\n\t\t}\n\n\t\tthis.#systemOptions = {\n\t\t\t...this.#systemOptions,\n\t\t\t...persistedState.systemOptions,\n\t\t}\n\n\t\tthis.#setThemesAndNotify({\n\t\t\t...this.#defaultThemes,\n\t\t\t...persistedState.themes,\n\t\t})\n\t}\n\n\tsubscribe = (\n\t\tcallback: Listener<T>,\n\t\t{ immediate = false }: { immediate?: boolean } = {},\n\t): (() => void) => {\n\t\tif (immediate) {\n\t\t\tcallback({\n\t\t\t\tthemes: this.#currentThemes,\n\t\t\t\tresolvedThemes: this.#resolveThemes(),\n\t\t\t})\n\t\t}\n\n\t\tthis.#listeners.add(callback)\n\n\t\treturn () => {\n\t\t\tthis.#listeners.delete(callback)\n\t\t}\n\t}\n\n\tsync = (): (() => void) | undefined => {\n\t\tif (!this.#storage.watch) {\n\t\t\tconsole.warn(\n\t\t\t\t`[${PACKAGE_NAME}] No watch method was provided for storage.`,\n\t\t\t)\n\n\t\t\treturn\n\t\t}\n\n\t\treturn this.#storage.watch((key, persistedState) => {\n\t\t\tif (key !== this.#options.key) return\n\n\t\t\tthis.#systemOptions = (persistedState as PersistedState<T>).systemOptions\n\n\t\t\tthis.#setThemesAndNotify((persistedState as PersistedState<T>).themes)\n\t\t})\n\t}\n\n\t___destroy = (): void => {\n\t\tthis.#listeners.clear()\n\t\tthis.#abortController.abort()\n\t}\n\n\t#setThemesAndNotify = (themes: Themes<T>): void => {\n\t\tthis.#currentThemes = themes\n\t\tthis.#notify()\n\t}\n\n\t#resolveThemes = (): Themes<T> => {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(this.#currentThemes).map(([themeKey, optionKey]) => {\n\t\t\t\tconst option = this.#options.config[themeKey]?.[optionKey]\n\n\t\t\t\treturn [\n\t\t\t\t\tthemeKey,\n\t\t\t\t\toption ? this.#resolveThemeOption({ themeKey, option }) : optionKey,\n\t\t\t\t]\n\t\t\t}),\n\t\t) as Themes<T>\n\t}\n\n\t#resolveThemeOption = ({\n\t\tthemeKey,\n\t\toption,\n\t}: {\n\t\tthemeKey: string\n\t\toption: ThemeOption\n\t}): string => {\n\t\tif (!option.media) return option.value\n\n\t\tif (!isClient) {\n\t\t\tconsole.warn(\n\t\t\t\t`[${PACKAGE_NAME}] Option with key \"media\" cannot be resolved in server environment.`,\n\t\t\t)\n\n\t\t\treturn option.value\n\t\t}\n\n\t\tconst [mediaQuery] = option.media\n\n\t\tif (!this.#mediaQueryCache[mediaQuery]) {\n\t\t\tconst mediaQueryList = window.matchMedia(mediaQuery)\n\n\t\t\tthis.#mediaQueryCache[mediaQuery] = mediaQueryList\n\n\t\t\tmediaQueryList.addEventListener(\n\t\t\t\t'change',\n\t\t\t\t() => {\n\t\t\t\t\tif (this.#currentThemes[themeKey] === option.value) {\n\t\t\t\t\t\tthis.#setThemesAndNotify({ ...this.#currentThemes })\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ signal: this.#abortController.signal },\n\t\t\t)\n\t\t}\n\n\t\tconst [ifMatch, ifNotMatch] = this.#systemOptions[themeKey]!\n\n\t\treturn this.#mediaQueryCache[mediaQuery].matches ? ifMatch : ifNotMatch\n\t}\n\n\t#notify = (): void => {\n\t\tfor (const listener of this.#listeners) {\n\t\t\tlistener({\n\t\t\t\tthemes: this.#currentThemes,\n\t\t\t\tresolvedThemes: this.#resolveThemes(),\n\t\t\t})\n\t\t}\n\t}\n}\n\nclass Registry {\n\t#registry = new Map<string, ThemeStore<ThemeConfig>>()\n\n\tcreate = <T extends ThemeConfig>(\n\t\toptions: ThemeStoreOptions<T>,\n\t): ThemeStore<T> => {\n\t\tconst storeKey = options.key || PACKAGE_NAME\n\n\t\tlet themeStore = this.#registry.get(storeKey) as ThemeStore<T>\n\n\t\tif (!themeStore) {\n\t\t\tthemeStore = new ThemeStore<T>(options)\n\t\t\tthis.#registry.set(storeKey, themeStore as ThemeStore<ThemeConfig>)\n\t\t}\n\n\t\treturn themeStore\n\t}\n\n\tget = <T extends keyof ThemeStoreRegistry>(key?: T) => {\n\t\tconst storeKey = key || PACKAGE_NAME\n\n\t\tif (!this.#registry.has(storeKey)) {\n\t\t\tthrow new Error(\n\t\t\t\t`[${PACKAGE_NAME}] Theme store with key '${storeKey}' could not be found. Please run \\`createThemeStore\\` with key '${storeKey}' first.`,\n\t\t\t)\n\t\t}\n\n\t\treturn this.#registry.get(storeKey)! as ThemeStoreRegistry[T]\n\t}\n\n\tdestroy = <T extends keyof ThemeStoreRegistry>(key?: T) => {\n\t\tconst storeKey = key || PACKAGE_NAME\n\n\t\tif (!this.#registry.has(storeKey)) return\n\n\t\tthis.#registry.get(storeKey)!.___destroy()\n\t\tthis.#registry.delete(storeKey)\n\t}\n}\n\nconst registry = new Registry()\n\nexport type { ThemeStore }\n\nexport const createThemeStore = registry.create\nexport const getThemeStore = registry.get\nexport const destroyThemeStore = registry.destroy\n\nexport * from './storage'\n\nexport interface ThemeStoreRegistry {}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const resonareInlineScript = "var resonare=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=`resonare`;let n=({storageType:e=`localStorage`}={})=>({abortController:t})=>({getItem:t=>JSON.parse(window[e].getItem(t)||`null`),setItem:(t,n)=>{window[e].setItem(t,JSON.stringify(n))},watch:n=>{let r=new AbortController;return window.addEventListener(`storage`,t=>{t.storageArea===window[e]&&n(t.key,JSON.parse(t.newValue))},{signal:AbortSignal.any([t.signal,r.signal])}),()=>{r.abort()}}}),r=()=>({abortController:e})=>{let n=new Map,r=new BroadcastChannel(t);return{getItem:e=>n.get(e)||null,setItem:(e,t)=>{n.set(e,t)},broadcast:(e,t)=>{r.postMessage({key:e,value:t})},watch:t=>{let n=new AbortController;return r.addEventListener(`message`,e=>{t(e.data.key,e.data.value)},{signal:AbortSignal.any([e.signal,n.signal])}),()=>{n.abort()}}}};function i(e){return Object.entries(e).map(([e,{options:t}])=>[e,t.map(e=>typeof e==`string`?e:e.value)])}function a(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t.initialValue??(typeof t.options[0]==`object`?t.options[0].value:t.options[0])]))}let o=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;var s=class{#e;#t;#n;#r;#i;#a=new Set;#o;#s=new AbortController;constructor({key:e=t,config:r,initialState:i={},storage:o=n()}){let s={},c={...i.systemOptions};Object.entries(r).forEach(([e,t])=>{s[e]={},`options`in t&&t.options.forEach(t=>{typeof t==`object`?(t.media&&!Object.hasOwn(c,e)&&(c[e]=[t.media[1],t.media[2]]),s[e][String(t.value)]=t):s[e][String(t)]={value:t}})}),this.#n={key:e,config:s,storage:o},this.#r=c,this.#e=a(r),this.#t={...this.#e,...i.themes},this.#i=this.#n.storage({abortController:this.#s}),this.#o={}}getThemes=()=>this.#t;getResolvedThemes=()=>this.#l();setThemes=async e=>{let t=typeof e==`function`?e(this.#t):e;this.#c({...this.#t,...t});let n=this.getStateToPersist();await this.#i.setItem(this.#n.key,n),this.#i.broadcast?.(this.#n.key,n)};updateSystemOption=(e,[t,n])=>{this.#r[e]=[t,n],this.setThemes({...this.#t})};getStateToPersist=()=>({version:1,themes:this.#t,systemOptions:this.#r});restore=async()=>{let e=await this.#i.getItem(this.#n.key);if(!e){this.#c({...this.#e});return}Object.hasOwn(e,`version`)||(e={version:1,themes:e,systemOptions:this.#r}),this.#r={...this.#r,...e.systemOptions},this.#c({...this.#e,...e.themes})};subscribe=(e,{immediate:t=!1}={})=>(t&&e({themes:this.#t,resolvedThemes:this.#l()}),this.#a.add(e),()=>{this.#a.delete(e)});sync=()=>{if(!this.#i.watch){console.warn(`[${t}] No watch method was provided for storage.`);return}return this.#i.watch((e,t)=>{e===this.#n.key&&(this.#r=t.systemOptions,this.#c(t.themes))})};___destroy=()=>{this.#a.clear(),this.#s.abort()};#c=e=>{this.#t=e,this.#d()};#l=()=>Object.fromEntries(Object.entries(this.#t).map(([e,t])=>{let n=this.#n.config[e]?.[t];return[e,n?this.#u({themeKey:e,option:n}):t]}));#u=({themeKey:e,option:n})=>{if(!n.media)return n.value;if(!o)return console.warn(`[${t}] Option with key \"media\" cannot be resolved in server environment.`),n.value;let[r]=n.media;if(!this.#o[r]){let t=window.matchMedia(r);this.#o[r]=t,t.addEventListener(`change`,()=>{this.#t[e]===n.value&&this.#c({...this.#t})},{signal:this.#s.signal})}let[i,a]=this.#r[e];return this.#o[r].matches?i:a};#d=()=>{for(let e of this.#a)e({themes:this.#t,resolvedThemes:this.#l()})}};let c=new class{#e=new Map;create=e=>{let n=e.key||t,r=this.#e.get(n);return r||(r=new s(e),this.#e.set(n,r)),r};get=e=>{let n=e||t;if(!this.#e.has(n))throw Error(`[${t}] Theme store with key '${n}' could not be found. Please run \\`createThemeStore\\` with key '${n}' first.`);return this.#e.get(n)};destroy=e=>{let n=e||t;this.#e.has(n)&&(this.#e.get(n).___destroy(),this.#e.delete(n))}},l=c.create,u=c.get,d=c.destroy;return e.createThemeStore=l,e.destroyThemeStore=d,e.getDefaultThemes=a,e.getThemeStore=u,e.getThemesAndOptions=i,e.localStorageAdapter=n,e.memoryStorageAdapter=r,e})({});"
|
package/dist/react.d.ts
CHANGED
|
@@ -9,14 +9,20 @@ declare function useResonare<T extends ThemeConfig>(getStore: () => ThemeStore<T
|
|
|
9
9
|
themes: Themes<T>;
|
|
10
10
|
resolvedThemes: Themes<T>;
|
|
11
11
|
setThemes: (themes: Partial<Themes<T>> | ((currentThemes: Themes<T>) => Partial<Themes<T>>)) => Promise<void>;
|
|
12
|
-
updateSystemOption: <K extends { [K_1 in keyof T]: T[K_1]
|
|
13
|
-
|
|
14
|
-
} ?
|
|
12
|
+
updateSystemOption: <K extends { [K_1 in keyof T]: T[K_1] extends {
|
|
13
|
+
options: ReadonlyArray<infer U>;
|
|
14
|
+
} ? U extends {
|
|
15
|
+
media: ReadonlyArray<unknown>;
|
|
16
|
+
} ? K_1 : never : never }[keyof T]>(themeKey: K, [ifMatch, ifNotMatch]: [T[K] extends {
|
|
17
|
+
options: ReadonlyArray<infer U>;
|
|
18
|
+
} ? U extends string | number | boolean ? U : U extends {
|
|
15
19
|
value: string;
|
|
16
20
|
media?: [string, string, string];
|
|
17
21
|
} ? U extends {
|
|
18
22
|
media: [string, string, string];
|
|
19
|
-
} ? never : U["value"] : never : never, T[K]
|
|
23
|
+
} ? never : U["value"] : never : never, T[K] extends {
|
|
24
|
+
options: ReadonlyArray<infer U>;
|
|
25
|
+
} ? U extends string | number | boolean ? U : U extends {
|
|
20
26
|
value: string;
|
|
21
27
|
media?: [string, string, string];
|
|
22
28
|
} ? U extends {
|
|
@@ -25,14 +31,20 @@ declare function useResonare<T extends ThemeConfig>(getStore: () => ThemeStore<T
|
|
|
25
31
|
getStateToPersist: () => {
|
|
26
32
|
version: 1;
|
|
27
33
|
themes: Partial<Themes<T>>;
|
|
28
|
-
systemOptions: { [K_1 in { [K in keyof T]: T[K]
|
|
29
|
-
|
|
30
|
-
} ?
|
|
34
|
+
systemOptions: { [K_1 in { [K in keyof T]: T[K] extends {
|
|
35
|
+
options: ReadonlyArray<infer U>;
|
|
36
|
+
} ? U extends {
|
|
37
|
+
media: ReadonlyArray<unknown>;
|
|
38
|
+
} ? K : never : never }[keyof T]]?: [T[K_1] extends {
|
|
39
|
+
options: ReadonlyArray<infer U>;
|
|
40
|
+
} ? U extends string | number | boolean ? U : U extends {
|
|
31
41
|
value: string;
|
|
32
42
|
media?: [string, string, string];
|
|
33
43
|
} ? U extends {
|
|
34
44
|
media: [string, string, string];
|
|
35
|
-
} ? never : U["value"] : never : never, T[K_1]
|
|
45
|
+
} ? never : U["value"] : never : never, T[K_1] extends {
|
|
46
|
+
options: ReadonlyArray<infer U>;
|
|
47
|
+
} ? U extends string | number | boolean ? U : U extends {
|
|
36
48
|
value: string;
|
|
37
49
|
media?: [string, string, string];
|
|
38
50
|
} ? U extends {
|
|
@@ -51,4 +63,5 @@ declare function useResonare<T extends ThemeConfig>(getStore: () => ThemeStore<T
|
|
|
51
63
|
}) => (() => void);
|
|
52
64
|
};
|
|
53
65
|
//#endregion
|
|
54
|
-
export { useResonare };
|
|
66
|
+
export { useResonare };
|
|
67
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","names":[],"sources":["../src/react.ts"],"mappings":";;;iBAkBgB,WAAA,WAAsB,WAAA,CAAA,CACrC,QAAA,QAAgB,UAAA,CAAW,CAAA;EACzB;AAAA"}
|
package/dist/react.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","names":["React","ThemeConfig","ThemeStore","noop","emptyObject","emptyStore","getThemes","getResolvedThemes","setThemes","updateSystemOption","getStateToPersist","restore","sync","subscribe","useResonare","getStore","t0","$","_c","t1","undefined","initOnMount","t2","isMounted","setIsMounted","useState","t3","t4","Symbol","for","useEffect","T","themes","useSyncExternalStore","t5","t6","resolvedThemes"],"sources":["../src/react.ts"],"sourcesContent":["import * as React from 'react'\nimport type { ThemeConfig, ThemeStore } from '.'\n\nfunction noop() {}\nconst emptyObject = {}\n\nconst emptyStore = {\n\tgetThemes: () => emptyObject,\n\tgetResolvedThemes: () => emptyObject,\n\tsetThemes: noop,\n\tupdateSystemOption: noop,\n\tgetStateToPersist: noop,\n\trestore: noop,\n\tsync: noop,\n\t// clear: noop,\n\tsubscribe: () => noop,\n}\n\nexport function useResonare<T extends ThemeConfig>(\n\tgetStore: () => ThemeStore<T>,\n\t{ initOnMount = false } = {},\n) {\n\tconst [isMounted, setIsMounted] = React.useState(initOnMount)\n\n\tReact.useEffect(() => {\n\t\tsetIsMounted(true)\n\t}, [])\n\n\tconst {\n\t\tgetThemes,\n\t\tgetResolvedThemes,\n\t\tsetThemes,\n\t\tupdateSystemOption,\n\t\tgetStateToPersist,\n\t\trestore,\n\t\tsync,\n\t\t// clear,\n\t\tsubscribe,\n\t} = isMounted ? getStore() : (emptyStore as unknown as ThemeStore<T>)\n\n\tconst themes = React.useSyncExternalStore(subscribe, getThemes, getThemes)\n\n\treturn {\n\t\tthemes,\n\t\tresolvedThemes: getResolvedThemes(),\n\t\tsetThemes,\n\t\tupdateSystemOption,\n\t\tgetStateToPersist,\n\t\trestore,\n\t\tsync,\n\t\t// clear,\n\t\tsubscribe,\n\t}\n}\n"],"mappings":";;;;AAGA,SAASG,OAAO;AAChB,MAAMC,cAAc,EAAE;AAEtB,MAAMC,aAAa;CAClBC,iBAAiBF;CACjBG,yBAAyBH;CACzBI,WAAWL;CACXM,oBAAoBN;CACpBO,mBAAmBP;CACnBQ,SAASR;CACTS,MAAMT;CAENU,iBAAiBV;CACjB;AAED,SAAOW,YAAAC,UAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAD,IAAA;AAENG,OAAAH,OAAAI,SAAA,EAA4B,GAA5BJ;AAA4BC,IAAA,KAAAD;AAAAC,IAAA,KAAAE;OAAAA,MAAAF,EAAA;CAA5B,MAAA,EAAAI,aAAAC,OAAAH;CAAE,MAAAE,cAAAC,OAAAF,SAAA,QAAAE;CAEF,MAAA,CAAAC,WAAAC,gBAAkCxB,MAAKyB,SAAUJ,YAAY;CAAA,IAAAK;CAAA,IAAAC;AAAA,KAAAV,EAAA,OAAAW,OAAAC,IAAA,4BAAA,EAAA;AAE7CH,aAAA;AACfF,gBAAa,KAAK;;AAChBG,OAAA,EAAE;AAAAV,IAAA,KAAAS;AAAAT,IAAA,KAAAU;QAAA;AAAAD,OAAAT,EAAA;AAAAU,OAAAV,EAAA;;AAFLjB,OAAK8B,UAAWJ,IAEbC,GAAG;CAEN,MAAA,EAAArB,WAAAC,mBAAAC,WAAAC,oBAAAC,mBAAAC,SAAAC,MAAAC,cAUIU,YAAYR,UAAqD,GAAvCV;CAE9B,MAAA2B,SAAehC,MAAKiC,qBAAsBpB,WAAWP,WAAWA,UAAU;CAIzD,MAAA4B,KAAA3B,mBAAmB;CAAA,IAAA4B;AAAA,KAAAlB,EAAA,OAAAP,qBAAAO,EAAA,OAAAN,WAAAM,EAAA,OAAAT,aAAAS,EAAA,OAAAJ,aAAAI,EAAA,OAAAL,QAAAK,EAAA,OAAAiB,MAAAjB,EAAA,QAAAe,UAAAf,EAAA,QAAAR,oBAAA;AAF7B0B,OAAA;GAAAH;GAAAI,gBAEUF;GAAmB1B;GAAAC;GAAAC;GAAAC;GAAAC;GAAAC;GAQnC;AAAAI,IAAA,KAAAP;AAAAO,IAAA,KAAAN;AAAAM,IAAA,KAAAT;AAAAS,IAAA,KAAAJ;AAAAI,IAAA,KAAAL;AAAAK,IAAA,KAAAiB;AAAAjB,IAAA,MAAAe;AAAAf,IAAA,MAAAR;AAAAQ,IAAA,MAAAkB;OAAAA,MAAAlB,EAAA;AAAA,QAVMkB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* resonare v0.0.
|
|
2
|
+
* resonare v0.0.6
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
|
|
7
|
-
var resonare=(function(e){var t=`resonare`;let n=({storageType:e=`localStorage`}={})=>({abortController:t})=>({getItem:t=>JSON.parse(window[e].getItem(t)||`null`),setItem:(t,n)=>{window[e].setItem(t,JSON.stringify(n))},watch:n=>{let r=new AbortController;return window.addEventListener(`storage`,t=>{t.storageArea===window[e]&&n(t.key,JSON.parse(t.newValue))},{signal:AbortSignal.any([t.signal,r.signal])}),()=>{r.abort()}}}),r=()=>({abortController:e})=>{let n=new Map,r=new BroadcastChannel(t);return{getItem:e=>n.get(e)||null,setItem:(e,t)=>{n.set(e,t)},broadcast:(e,t)=>{r.postMessage({key:e,value:t})},watch:t=>{let n=new AbortController;return r.addEventListener(`message`,e=>{t(e.data.key,e.data.value)},{signal:AbortSignal.any([e.signal,n.signal])}),()=>{n.abort()}}}};function i(e){return Object.entries(e).map(([e,{options:t}])=>[e,t.map(e=>typeof e==`string`?e:e.value)])}function a(e){return Object.fromEntries(Object.entries(e).map(([e,
|
|
6
|
+
*/
|
|
7
|
+
var resonare=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=`resonare`;let n=({storageType:e=`localStorage`}={})=>({abortController:t})=>({getItem:t=>JSON.parse(window[e].getItem(t)||`null`),setItem:(t,n)=>{window[e].setItem(t,JSON.stringify(n))},watch:n=>{let r=new AbortController;return window.addEventListener(`storage`,t=>{t.storageArea===window[e]&&n(t.key,JSON.parse(t.newValue))},{signal:AbortSignal.any([t.signal,r.signal])}),()=>{r.abort()}}}),r=()=>({abortController:e})=>{let n=new Map,r=new BroadcastChannel(t);return{getItem:e=>n.get(e)||null,setItem:(e,t)=>{n.set(e,t)},broadcast:(e,t)=>{r.postMessage({key:e,value:t})},watch:t=>{let n=new AbortController;return r.addEventListener(`message`,e=>{t(e.data.key,e.data.value)},{signal:AbortSignal.any([e.signal,n.signal])}),()=>{n.abort()}}}};function i(e){return Object.entries(e).map(([e,{options:t}])=>[e,t.map(e=>typeof e==`string`?e:e.value)])}function a(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t.initialValue??(typeof t.options[0]==`object`?t.options[0].value:t.options[0])]))}let o=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;var s=class{#e;#t;#n;#r;#i;#a=new Set;#o;#s=new AbortController;constructor({key:e=t,config:r,initialState:i={},storage:o=n()}){let s={},c={...i.systemOptions};Object.entries(r).forEach(([e,t])=>{s[e]={},`options`in t&&t.options.forEach(t=>{typeof t==`object`?(t.media&&!Object.hasOwn(c,e)&&(c[e]=[t.media[1],t.media[2]]),s[e][String(t.value)]=t):s[e][String(t)]={value:t}})}),this.#n={key:e,config:s,storage:o},this.#r=c,this.#e=a(r),this.#t={...this.#e,...i.themes},this.#i=this.#n.storage({abortController:this.#s}),this.#o={}}getThemes=()=>this.#t;getResolvedThemes=()=>this.#l();setThemes=async e=>{let t=typeof e==`function`?e(this.#t):e;this.#c({...this.#t,...t});let n=this.getStateToPersist();await this.#i.setItem(this.#n.key,n),this.#i.broadcast?.(this.#n.key,n)};updateSystemOption=(e,[t,n])=>{this.#r[e]=[t,n],this.setThemes({...this.#t})};getStateToPersist=()=>({version:1,themes:this.#t,systemOptions:this.#r});restore=async()=>{let e=await this.#i.getItem(this.#n.key);if(!e){this.#c({...this.#e});return}Object.hasOwn(e,`version`)||(e={version:1,themes:e,systemOptions:this.#r}),this.#r={...this.#r,...e.systemOptions},this.#c({...this.#e,...e.themes})};subscribe=(e,{immediate:t=!1}={})=>(t&&e({themes:this.#t,resolvedThemes:this.#l()}),this.#a.add(e),()=>{this.#a.delete(e)});sync=()=>{if(!this.#i.watch){console.warn(`[${t}] No watch method was provided for storage.`);return}return this.#i.watch((e,t)=>{e===this.#n.key&&(this.#r=t.systemOptions,this.#c(t.themes))})};___destroy=()=>{this.#a.clear(),this.#s.abort()};#c=e=>{this.#t=e,this.#d()};#l=()=>Object.fromEntries(Object.entries(this.#t).map(([e,t])=>{let n=this.#n.config[e]?.[t];return[e,n?this.#u({themeKey:e,option:n}):t]}));#u=({themeKey:e,option:n})=>{if(!n.media)return n.value;if(!o)return console.warn(`[${t}] Option with key "media" cannot be resolved in server environment.`),n.value;let[r]=n.media;if(!this.#o[r]){let t=window.matchMedia(r);this.#o[r]=t,t.addEventListener(`change`,()=>{this.#t[e]===n.value&&this.#c({...this.#t})},{signal:this.#s.signal})}let[i,a]=this.#r[e];return this.#o[r].matches?i:a};#d=()=>{for(let e of this.#a)e({themes:this.#t,resolvedThemes:this.#l()})}};let c=new class{#e=new Map;create=e=>{let n=e.key||t,r=this.#e.get(n);return r||(r=new s(e),this.#e.set(n,r)),r};get=e=>{let n=e||t;if(!this.#e.has(n))throw Error(`[${t}] Theme store with key '${n}' could not be found. Please run \`createThemeStore\` with key '${n}' first.`);return this.#e.get(n)};destroy=e=>{let n=e||t;this.#e.has(n)&&(this.#e.get(n).___destroy(),this.#e.delete(n))}},l=c.create,u=c.get,d=c.destroy;return e.createThemeStore=l,e.destroyThemeStore=d,e.getDefaultThemes=a,e.getThemeStore=u,e.getThemesAndOptions=i,e.localStorageAdapter=n,e.memoryStorageAdapter=r,e})({});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "resonare",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "Resonare",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"theming"
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"types": "./dist/index.d.ts",
|
|
20
20
|
"import": "./dist/index.js"
|
|
21
21
|
},
|
|
22
|
+
"./inline-script": {
|
|
23
|
+
"import": "./dist/inline-script.ts"
|
|
24
|
+
},
|
|
22
25
|
"./raw": {
|
|
23
26
|
"import": "./dist/resonare.iife.min.js"
|
|
24
27
|
},
|
|
@@ -39,16 +42,16 @@
|
|
|
39
42
|
},
|
|
40
43
|
"devDependencies": {
|
|
41
44
|
"@size-limit/preset-small-lib": "12.0.0",
|
|
42
|
-
"@types/react": "19.2.
|
|
43
|
-
"@vitejs/plugin-react": "5.1.
|
|
45
|
+
"@types/react": "19.2.14",
|
|
46
|
+
"@vitejs/plugin-react": "5.1.4",
|
|
44
47
|
"babel-plugin-react-compiler": "1.0.0",
|
|
45
|
-
"jsdom": "
|
|
46
|
-
"react": "19.2.
|
|
47
|
-
"react-dom": "19.2.
|
|
48
|
+
"jsdom": "28.1.0",
|
|
49
|
+
"react": "19.2.4",
|
|
50
|
+
"react-dom": "19.2.4",
|
|
48
51
|
"size-limit": "12.0.0",
|
|
49
|
-
"tsdown": "0.
|
|
52
|
+
"tsdown": "0.20.3",
|
|
50
53
|
"typescript": "5.9.3",
|
|
51
|
-
"vitest": "4.0.
|
|
54
|
+
"vitest": "4.0.18"
|
|
52
55
|
},
|
|
53
56
|
"peerDependencies": {
|
|
54
57
|
"react": "^18.0.0 || ^19.0.0"
|