@just-web/toolkits 1.0.0 → 2.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/attributes/get-attribute.cjs +1 -1
- package/dist/attributes/get-attribute.cjs.map +1 -1
- package/dist/attributes/get-attribute.d.cts +2 -2
- package/dist/attributes/get-attribute.d.cts.map +1 -1
- package/dist/attributes/get-attribute.d.mts +2 -2
- package/dist/attributes/get-attribute.d.mts.map +1 -1
- package/dist/attributes/get-attribute.mjs +1 -1
- package/dist/attributes/get-attribute.mjs.map +1 -1
- package/dist/attributes/get-data-attribute.cjs +1 -1
- package/dist/attributes/get-data-attribute.cjs.map +1 -1
- package/dist/attributes/get-data-attribute.d.cts +2 -2
- package/dist/attributes/get-data-attribute.d.cts.map +1 -1
- package/dist/attributes/get-data-attribute.d.mts +2 -2
- package/dist/attributes/get-data-attribute.d.mts.map +1 -1
- package/dist/attributes/get-data-attribute.mjs +1 -1
- package/dist/attributes/get-data-attribute.mjs.map +1 -1
- package/dist/attributes/observe-attribute.cjs +1 -1
- package/dist/attributes/observe-attribute.cjs.map +1 -1
- package/dist/attributes/observe-attribute.d.cts +2 -2
- package/dist/attributes/observe-attribute.d.cts.map +1 -1
- package/dist/attributes/observe-attribute.d.mts +2 -2
- package/dist/attributes/observe-attribute.d.mts.map +1 -1
- package/dist/attributes/observe-attribute.mjs +1 -1
- package/dist/attributes/observe-attribute.mjs.map +1 -1
- package/dist/attributes/observe-data-attribute.cjs +1 -1
- package/dist/attributes/observe-data-attribute.cjs.map +1 -1
- package/dist/attributes/observe-data-attribute.d.cts +2 -2
- package/dist/attributes/observe-data-attribute.d.cts.map +1 -1
- package/dist/attributes/observe-data-attribute.d.mts +2 -2
- package/dist/attributes/observe-data-attribute.d.mts.map +1 -1
- package/dist/attributes/observe-data-attribute.mjs +1 -1
- package/dist/attributes/observe-data-attribute.mjs.map +1 -1
- package/dist/color-scheme/color-scheme.types.d.cts +11 -0
- package/dist/color-scheme/color-scheme.types.d.cts.map +1 -0
- package/dist/color-scheme/color-scheme.types.d.mts +11 -0
- package/dist/color-scheme/color-scheme.types.d.mts.map +1 -0
- package/dist/color-scheme/get-prefers-color-scheme.cjs +3 -1
- package/dist/color-scheme/get-prefers-color-scheme.cjs.map +1 -1
- package/dist/color-scheme/get-prefers-color-scheme.d.cts +7 -2
- package/dist/color-scheme/get-prefers-color-scheme.d.cts.map +1 -1
- package/dist/color-scheme/get-prefers-color-scheme.d.mts +7 -2
- package/dist/color-scheme/get-prefers-color-scheme.d.mts.map +1 -1
- package/dist/color-scheme/get-prefers-color-scheme.mjs +3 -1
- package/dist/color-scheme/get-prefers-color-scheme.mjs.map +1 -1
- package/dist/color-scheme/observe-prefers-color-scheme.cjs.map +1 -1
- package/dist/color-scheme/observe-prefers-color-scheme.d.cts +4 -1
- package/dist/color-scheme/observe-prefers-color-scheme.d.cts.map +1 -1
- package/dist/color-scheme/observe-prefers-color-scheme.d.mts +4 -1
- package/dist/color-scheme/observe-prefers-color-scheme.d.mts.map +1 -1
- package/dist/color-scheme/observe-prefers-color-scheme.mjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.mts +2 -1
- package/dist/react/hooks/use-attribute.cjs +7 -7
- package/dist/react/hooks/use-attribute.cjs.map +1 -1
- package/dist/react/hooks/use-attribute.d.cts +4 -4
- package/dist/react/hooks/use-attribute.d.mts +4 -4
- package/dist/react/hooks/use-attribute.mjs +7 -7
- package/dist/react/hooks/use-attribute.mjs.map +1 -1
- package/dist/react/hooks/use-theme-by-class-name.cjs +2 -6
- package/dist/react/hooks/use-theme-by-class-name.cjs.map +1 -1
- package/dist/react/hooks/use-theme-by-class-name.d.cts +2 -2
- package/dist/react/hooks/use-theme-by-class-name.d.cts.map +1 -1
- package/dist/react/hooks/use-theme-by-class-name.d.mts +2 -2
- package/dist/react/hooks/use-theme-by-class-name.d.mts.map +1 -1
- package/dist/react/hooks/use-theme-by-class-name.mjs +2 -6
- package/dist/react/hooks/use-theme-by-class-name.mjs.map +1 -1
- package/dist/react/hooks/use-theme-by-data-attribute.cjs +2 -7
- package/dist/react/hooks/use-theme-by-data-attribute.cjs.map +1 -1
- package/dist/react/hooks/use-theme-by-data-attribute.d.cts +2 -2
- package/dist/react/hooks/use-theme-by-data-attribute.d.cts.map +1 -1
- package/dist/react/hooks/use-theme-by-data-attribute.d.mts +2 -2
- package/dist/react/hooks/use-theme-by-data-attribute.d.mts.map +1 -1
- package/dist/react/hooks/use-theme-by-data-attribute.mjs +2 -7
- package/dist/react/hooks/use-theme-by-data-attribute.mjs.map +1 -1
- package/dist/react/hooks/use-theme-by-local-storage.cjs +1 -5
- package/dist/react/hooks/use-theme-by-local-storage.cjs.map +1 -1
- package/dist/react/hooks/use-theme-by-local-storage.d.cts.map +1 -1
- package/dist/react/hooks/use-theme-by-local-storage.d.mts.map +1 -1
- package/dist/react/hooks/use-theme-by-local-storage.mjs +1 -5
- package/dist/react/hooks/use-theme-by-local-storage.mjs.map +1 -1
- package/dist/react/theme/create-theme-hook.cjs.map +1 -1
- package/dist/react/theme/create-theme-hook.mjs.map +1 -1
- package/dist/theme/_utils/match-attribute-value-to-theme.cjs +29 -0
- package/dist/theme/_utils/match-attribute-value-to-theme.cjs.map +1 -0
- package/dist/theme/_utils/match-attribute-value-to-theme.mjs +28 -0
- package/dist/theme/_utils/match-attribute-value-to-theme.mjs.map +1 -0
- package/dist/theme/_utils/parse-stored-theme.cjs +61 -7
- package/dist/theme/_utils/parse-stored-theme.cjs.map +1 -1
- package/dist/theme/_utils/parse-stored-theme.mjs +61 -7
- package/dist/theme/_utils/parse-stored-theme.mjs.map +1 -1
- package/dist/theme/_utils/resolve-theme-map-value.cjs +19 -0
- package/dist/theme/_utils/resolve-theme-map-value.cjs.map +1 -0
- package/dist/theme/_utils/resolve-theme-map-value.mjs +17 -0
- package/dist/theme/_utils/resolve-theme-map-value.mjs.map +1 -0
- package/dist/theme/_utils/set-theme-to-stores.cjs +1 -1
- package/dist/theme/_utils/set-theme-to-stores.cjs.map +1 -1
- package/dist/theme/_utils/set-theme-to-stores.mjs +1 -1
- package/dist/theme/_utils/set-theme-to-stores.mjs.map +1 -1
- package/dist/theme/class-name/parse-class-name.cjs +32 -0
- package/dist/theme/class-name/parse-class-name.cjs.map +1 -0
- package/dist/theme/class-name/parse-class-name.d.cts +20 -0
- package/dist/theme/class-name/parse-class-name.d.cts.map +1 -0
- package/dist/theme/class-name/parse-class-name.d.mts +20 -0
- package/dist/theme/class-name/parse-class-name.d.mts.map +1 -0
- package/dist/theme/class-name/parse-class-name.mjs +31 -0
- package/dist/theme/class-name/parse-class-name.mjs.map +1 -0
- package/dist/theme/class-name/read-class-name.cjs +20 -0
- package/dist/theme/class-name/read-class-name.cjs.map +1 -0
- package/dist/theme/class-name/read-class-name.d.cts +20 -0
- package/dist/theme/class-name/read-class-name.d.cts.map +1 -0
- package/dist/theme/class-name/read-class-name.d.mts +20 -0
- package/dist/theme/class-name/read-class-name.d.mts.map +1 -0
- package/dist/theme/class-name/read-class-name.mjs +20 -0
- package/dist/theme/class-name/read-class-name.mjs.map +1 -0
- package/dist/theme/class-name/stringify-class-name.cjs +31 -0
- package/dist/theme/class-name/stringify-class-name.cjs.map +1 -0
- package/dist/theme/class-name/stringify-class-name.d.cts +21 -0
- package/dist/theme/class-name/stringify-class-name.d.cts.map +1 -0
- package/dist/theme/class-name/stringify-class-name.d.mts +21 -0
- package/dist/theme/class-name/stringify-class-name.d.mts.map +1 -0
- package/dist/theme/class-name/stringify-class-name.mjs +31 -0
- package/dist/theme/class-name/stringify-class-name.mjs.map +1 -0
- package/dist/theme/class-name/subscribe-class-name.cjs +31 -0
- package/dist/theme/class-name/subscribe-class-name.cjs.map +1 -0
- package/dist/theme/class-name/subscribe-class-name.d.cts +21 -0
- package/dist/theme/class-name/subscribe-class-name.d.cts.map +1 -0
- package/dist/theme/class-name/subscribe-class-name.d.mts +21 -0
- package/dist/theme/class-name/subscribe-class-name.d.mts.map +1 -0
- package/dist/theme/class-name/subscribe-class-name.mjs +31 -0
- package/dist/theme/class-name/subscribe-class-name.mjs.map +1 -0
- package/dist/theme/class-name/write-class-name.cjs +20 -0
- package/dist/theme/class-name/write-class-name.cjs.map +1 -0
- package/dist/theme/class-name/write-class-name.d.cts +20 -0
- package/dist/theme/class-name/write-class-name.d.cts.map +1 -0
- package/dist/theme/class-name/write-class-name.d.mts +20 -0
- package/dist/theme/class-name/write-class-name.d.mts.map +1 -0
- package/dist/theme/class-name/write-class-name.mjs +20 -0
- package/dist/theme/class-name/write-class-name.mjs.map +1 -0
- package/dist/theme/compose-theme-stores.cjs.map +1 -1
- package/dist/theme/compose-theme-stores.mjs.map +1 -1
- package/dist/theme/cookie/_cookie-utils.cjs +37 -0
- package/dist/theme/cookie/_cookie-utils.cjs.map +1 -0
- package/dist/theme/cookie/_cookie-utils.mjs +33 -0
- package/dist/theme/cookie/_cookie-utils.mjs.map +1 -0
- package/dist/theme/cookie/read-cookie-theme.cjs +22 -0
- package/dist/theme/cookie/read-cookie-theme.cjs.map +1 -0
- package/dist/theme/cookie/read-cookie-theme.d.cts +22 -0
- package/dist/theme/cookie/read-cookie-theme.d.cts.map +1 -0
- package/dist/theme/cookie/read-cookie-theme.d.mts +22 -0
- package/dist/theme/cookie/read-cookie-theme.d.mts.map +1 -0
- package/dist/theme/cookie/read-cookie-theme.mjs +22 -0
- package/dist/theme/cookie/read-cookie-theme.mjs.map +1 -0
- package/dist/theme/cookie/write-cookie-theme.cjs +29 -0
- package/dist/theme/cookie/write-cookie-theme.cjs.map +1 -0
- package/dist/theme/cookie/write-cookie-theme.d.cts +24 -0
- package/dist/theme/cookie/write-cookie-theme.d.cts.map +1 -0
- package/dist/theme/cookie/write-cookie-theme.d.mts +24 -0
- package/dist/theme/cookie/write-cookie-theme.d.mts.map +1 -0
- package/dist/theme/cookie/write-cookie-theme.mjs +29 -0
- package/dist/theme/cookie/write-cookie-theme.mjs.map +1 -0
- package/dist/theme/data-attribute/_constant.cjs +7 -0
- package/dist/theme/data-attribute/_constant.cjs.map +1 -0
- package/dist/theme/data-attribute/_constant.mjs +6 -0
- package/dist/theme/data-attribute/_constant.mjs.map +1 -0
- package/dist/theme/data-attribute/parse-data-attribute.cjs +24 -0
- package/dist/theme/data-attribute/parse-data-attribute.cjs.map +1 -0
- package/dist/theme/data-attribute/parse-data-attribute.d.cts +21 -0
- package/dist/theme/data-attribute/parse-data-attribute.d.cts.map +1 -0
- package/dist/theme/data-attribute/parse-data-attribute.d.mts +21 -0
- package/dist/theme/data-attribute/parse-data-attribute.d.mts.map +1 -0
- package/dist/theme/data-attribute/parse-data-attribute.mjs +24 -0
- package/dist/theme/data-attribute/parse-data-attribute.mjs.map +1 -0
- package/dist/theme/data-attribute/read-data-attribute.cjs +23 -0
- package/dist/theme/data-attribute/read-data-attribute.cjs.map +1 -0
- package/dist/theme/data-attribute/read-data-attribute.d.cts +21 -0
- package/dist/theme/data-attribute/read-data-attribute.d.cts.map +1 -0
- package/dist/theme/data-attribute/read-data-attribute.d.mts +21 -0
- package/dist/theme/data-attribute/read-data-attribute.d.mts.map +1 -0
- package/dist/theme/data-attribute/read-data-attribute.mjs +23 -0
- package/dist/theme/data-attribute/read-data-attribute.mjs.map +1 -0
- package/dist/theme/data-attribute/stringify-data-attribute.cjs +33 -0
- package/dist/theme/data-attribute/stringify-data-attribute.cjs.map +1 -0
- package/dist/theme/data-attribute/stringify-data-attribute.d.cts +23 -0
- package/dist/theme/data-attribute/stringify-data-attribute.d.cts.map +1 -0
- package/dist/theme/data-attribute/stringify-data-attribute.d.mts +23 -0
- package/dist/theme/data-attribute/stringify-data-attribute.d.mts.map +1 -0
- package/dist/theme/data-attribute/stringify-data-attribute.mjs +33 -0
- package/dist/theme/data-attribute/stringify-data-attribute.mjs.map +1 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.cjs +28 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.cjs.map +1 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.d.cts +22 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.d.cts.map +1 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.d.mts +22 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.d.mts.map +1 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.mjs +28 -0
- package/dist/theme/data-attribute/subscribe-data-attribute.mjs.map +1 -0
- package/dist/theme/data-attribute/write-data-attribute.cjs +30 -0
- package/dist/theme/data-attribute/write-data-attribute.cjs.map +1 -0
- package/dist/theme/data-attribute/write-data-attribute.d.cts +21 -0
- package/dist/theme/data-attribute/write-data-attribute.d.cts.map +1 -0
- package/dist/theme/data-attribute/write-data-attribute.d.mts +21 -0
- package/dist/theme/data-attribute/write-data-attribute.d.mts.map +1 -0
- package/dist/theme/data-attribute/write-data-attribute.mjs +30 -0
- package/dist/theme/data-attribute/write-data-attribute.mjs.map +1 -0
- package/dist/theme/local-storage/read-local-storage.cjs +22 -0
- package/dist/theme/local-storage/read-local-storage.cjs.map +1 -0
- package/dist/theme/local-storage/read-local-storage.d.cts +19 -0
- package/dist/theme/local-storage/read-local-storage.d.cts.map +1 -0
- package/dist/theme/local-storage/read-local-storage.d.mts +19 -0
- package/dist/theme/local-storage/read-local-storage.d.mts.map +1 -0
- package/dist/theme/local-storage/read-local-storage.mjs +22 -0
- package/dist/theme/local-storage/read-local-storage.mjs.map +1 -0
- package/dist/theme/local-storage/write-local-storage.cjs +26 -0
- package/dist/theme/local-storage/write-local-storage.cjs.map +1 -0
- package/dist/theme/local-storage/write-local-storage.d.cts +23 -0
- package/dist/theme/local-storage/write-local-storage.d.cts.map +1 -0
- package/dist/theme/local-storage/write-local-storage.d.mts +23 -0
- package/dist/theme/local-storage/write-local-storage.d.mts.map +1 -0
- package/dist/theme/local-storage/write-local-storage.mjs +26 -0
- package/dist/theme/local-storage/write-local-storage.mjs.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.cjs +20 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.cjs.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.cts +23 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.cts.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.mts +23 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.mts.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.mjs +20 -0
- package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.mjs.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.cjs +20 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.cjs.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.cts +20 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.cts.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.mts +20 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.mts.map +1 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.mjs +20 -0
- package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.mjs.map +1 -0
- package/dist/theme/session-storage/read-session-storage.cjs +22 -0
- package/dist/theme/session-storage/read-session-storage.cjs.map +1 -0
- package/dist/theme/session-storage/read-session-storage.d.cts +19 -0
- package/dist/theme/session-storage/read-session-storage.d.cts.map +1 -0
- package/dist/theme/session-storage/read-session-storage.d.mts +19 -0
- package/dist/theme/session-storage/read-session-storage.d.mts.map +1 -0
- package/dist/theme/session-storage/read-session-storage.mjs +22 -0
- package/dist/theme/session-storage/read-session-storage.mjs.map +1 -0
- package/dist/theme/session-storage/write-session-storage.cjs +26 -0
- package/dist/theme/session-storage/write-session-storage.cjs.map +1 -0
- package/dist/theme/session-storage/write-session-storage.d.cts +23 -0
- package/dist/theme/session-storage/write-session-storage.d.cts.map +1 -0
- package/dist/theme/session-storage/write-session-storage.d.mts +23 -0
- package/dist/theme/session-storage/write-session-storage.d.mts.map +1 -0
- package/dist/theme/session-storage/write-session-storage.mjs +26 -0
- package/dist/theme/session-storage/write-session-storage.mjs.map +1 -0
- package/dist/theme/theme-entry.types.d.cts +13 -1
- package/dist/theme/theme-entry.types.d.cts.map +1 -1
- package/dist/theme/theme-entry.types.d.mts +13 -1
- package/dist/theme/theme-entry.types.d.mts.map +1 -1
- package/dist/theme/theme-map.types.d.cts +11 -3
- package/dist/theme/theme-map.types.d.cts.map +1 -1
- package/dist/theme/theme-map.types.d.mts +11 -3
- package/dist/theme/theme-map.types.d.mts.map +1 -1
- package/dist/theme/theme-store/async-theme-store.types.d.cts +1 -1
- package/dist/theme/theme-store/async-theme-store.types.d.cts.map +1 -1
- package/dist/theme/theme-store/async-theme-store.types.d.mts +1 -1
- package/dist/theme/theme-store/async-theme-store.types.d.mts.map +1 -1
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.cjs +22 -19
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.cjs.map +1 -1
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.cts +7 -2
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.cts.map +1 -1
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.mts +7 -2
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.mts.map +1 -1
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.mjs +22 -19
- package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.mjs.map +1 -1
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.cjs +18 -36
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.cjs.map +1 -1
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.cts +5 -3
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.cts.map +1 -1
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.mts +5 -3
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.mts.map +1 -1
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.mjs +18 -36
- package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.mjs.map +1 -1
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.cjs +40 -20
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.cjs.map +1 -1
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.cts +30 -7
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.cts.map +1 -1
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.mts +30 -7
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.mts.map +1 -1
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.mjs +40 -20
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.mjs.map +1 -1
- package/dist/theme/theme-store/in-memory-theme-store/in-memory-theme-store.cjs +1 -1
- package/dist/theme/theme-store/in-memory-theme-store/in-memory-theme-store.cjs.map +1 -1
- package/dist/theme/theme-store/in-memory-theme-store/in-memory-theme-store.d.cts +1 -1
- package/dist/theme/theme-store/in-memory-theme-store/in-memory-theme-store.d.mts +1 -1
- package/dist/theme/theme-store/in-memory-theme-store/in-memory-theme-store.mjs +1 -1
- package/dist/theme/theme-store/in-memory-theme-store/in-memory-theme-store.mjs.map +1 -1
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.cjs +13 -12
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.cjs.map +1 -1
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.cts +8 -2
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.cts.map +1 -1
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.mts +8 -2
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.mts.map +1 -1
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.mjs +13 -12
- package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.mjs.map +1 -1
- package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.cjs +4 -5
- package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.cjs.map +1 -1
- package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.d.cts.map +1 -1
- package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.d.mts.map +1 -1
- package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.mjs +4 -5
- package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.mjs.map +1 -1
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.cjs +13 -12
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.cjs.map +1 -1
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.cts +8 -2
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.cts.map +1 -1
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.mts +8 -2
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.mts.map +1 -1
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.mjs +13 -12
- package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.mjs.map +1 -1
- package/dist/theme/theme-store/theme-store.types.d.cts +1 -1
- package/dist/theme/theme-store/theme-store.types.d.cts.map +1 -1
- package/dist/theme/theme-store/theme-store.types.d.mts +1 -1
- package/dist/theme/theme-store/theme-store.types.d.mts.map +1 -1
- package/dist/theme/web-storage/read-web-storage.cjs +20 -0
- package/dist/theme/web-storage/read-web-storage.cjs.map +1 -0
- package/dist/theme/web-storage/read-web-storage.d.cts +21 -0
- package/dist/theme/web-storage/read-web-storage.d.cts.map +1 -0
- package/dist/theme/web-storage/read-web-storage.d.mts +21 -0
- package/dist/theme/web-storage/read-web-storage.d.mts.map +1 -0
- package/dist/theme/web-storage/read-web-storage.mjs +20 -0
- package/dist/theme/web-storage/read-web-storage.mjs.map +1 -0
- package/dist/theme/web-storage/write-web-storage.cjs +33 -0
- package/dist/theme/web-storage/write-web-storage.cjs.map +1 -0
- package/dist/theme/web-storage/write-web-storage.d.cts +25 -0
- package/dist/theme/web-storage/write-web-storage.d.cts.map +1 -0
- package/dist/theme/web-storage/write-web-storage.d.mts +25 -0
- package/dist/theme/web-storage/write-web-storage.d.mts.map +1 -0
- package/dist/theme/web-storage/write-web-storage.mjs +32 -0
- package/dist/theme/web-storage/write-web-storage.mjs.map +1 -0
- package/dist/theme.cjs +41 -1
- package/dist/theme.d.cts +23 -3
- package/dist/theme.d.mts +23 -3
- package/dist/theme.mjs +21 -1
- package/dist/utils/append-id.cjs +2 -2
- package/dist/utils/append-id.cjs.map +1 -1
- package/dist/utils/append-id.d.cts +3 -3
- package/dist/utils/append-id.d.mts +3 -3
- package/dist/utils/append-id.mjs +2 -2
- package/dist/utils/append-id.mjs.map +1 -1
- package/package.json +1 -1
- package/src/attributes/get-attribute.ts +5 -2
- package/src/attributes/get-data-attribute.ts +5 -2
- package/src/attributes/observe-attribute.ts +2 -2
- package/src/attributes/observe-data-attribute.ts +2 -2
- package/src/color-scheme/color-scheme.types.ts +7 -0
- package/src/color-scheme/get-prefers-color-scheme.ts +6 -4
- package/src/color-scheme/observe-prefers-color-scheme.ts +3 -1
- package/src/index.ts +1 -0
- package/src/react/hooks/use-attribute.ts +11 -11
- package/src/react/hooks/use-theme-by-class-name.ts +5 -10
- package/src/react/hooks/use-theme-by-data-attribute.ts +5 -12
- package/src/react/hooks/use-theme-by-local-storage.ts +3 -9
- package/src/react/theme/create-theme-hook.ts +4 -6
- package/src/testing/theme/theme-result-card.tsx +1 -0
- package/src/theme/_utils/match-attribute-value-to-theme.ts +36 -0
- package/src/theme/_utils/parse-stored-theme.ts +51 -11
- package/src/theme/_utils/resolve-theme-map-value.ts +15 -0
- package/src/theme/_utils/set-theme-to-stores.ts +3 -3
- package/src/theme/class-name/parse-class-name.ts +31 -0
- package/src/theme/class-name/read-class-name.ts +24 -0
- package/src/theme/class-name/stringify-class-name.ts +36 -0
- package/src/theme/class-name/subscribe-class-name.ts +39 -0
- package/src/theme/class-name/write-class-name.ts +24 -0
- package/src/theme/compose-theme-stores.ts +1 -1
- package/src/theme/cookie/_cookie-utils.ts +45 -0
- package/src/theme/cookie/read-cookie-theme.ts +33 -0
- package/src/theme/cookie/write-cookie-theme.ts +48 -0
- package/src/theme/data-attribute/_constant.ts +1 -0
- package/src/theme/data-attribute/parse-data-attribute.ts +25 -0
- package/src/theme/data-attribute/read-data-attribute.ts +29 -0
- package/src/theme/data-attribute/stringify-data-attribute.ts +39 -0
- package/src/theme/data-attribute/subscribe-data-attribute.ts +39 -0
- package/src/theme/data-attribute/write-data-attribute.ts +40 -0
- package/src/theme/local-storage/read-local-storage.ts +23 -0
- package/src/theme/local-storage/write-local-storage.ts +31 -0
- package/src/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.ts +30 -0
- package/src/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.ts +24 -0
- package/src/theme/session-storage/read-session-storage.ts +23 -0
- package/src/theme/session-storage/write-session-storage.ts +31 -0
- package/src/theme/theme-entry.types.ts +21 -0
- package/src/theme/theme-map.types.ts +9 -2
- package/src/theme/theme-store/async-theme-store.types.ts +1 -3
- package/src/theme/theme-store/class-name-theme-store/class-name-theme-store.ts +20 -26
- package/src/theme/theme-store/cookie-theme-store/cookie-theme-store.ts +18 -63
- package/src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts +42 -29
- package/src/theme/theme-store/in-memory-theme-store/in-memory-theme-store.ts +1 -1
- package/src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts +17 -20
- package/src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts +4 -5
- package/src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts +17 -20
- package/src/theme/theme-store/theme-store.types.ts +1 -3
- package/src/theme/web-storage/read-web-storage.ts +22 -0
- package/src/theme/web-storage/write-web-storage.ts +46 -0
- package/src/theme.ts +20 -0
- package/src/utils/append-id.ts +3 -3
- package/dist/theme/class-name/apply-theme-to-class-name.cjs +0 -23
- package/dist/theme/class-name/apply-theme-to-class-name.cjs.map +0 -1
- package/dist/theme/class-name/apply-theme-to-class-name.mjs +0 -22
- package/dist/theme/class-name/apply-theme-to-class-name.mjs.map +0 -1
- package/dist/theme/class-name/resolve-theme-from-class-name.cjs +0 -23
- package/dist/theme/class-name/resolve-theme-from-class-name.cjs.map +0 -1
- package/dist/theme/class-name/resolve-theme-from-class-name.mjs +0 -22
- package/dist/theme/class-name/resolve-theme-from-class-name.mjs.map +0 -1
- package/dist/theme/data-attribute/apply-theme-to-data-attribute.cjs +0 -23
- package/dist/theme/data-attribute/apply-theme-to-data-attribute.cjs.map +0 -1
- package/dist/theme/data-attribute/apply-theme-to-data-attribute.mjs +0 -22
- package/dist/theme/data-attribute/apply-theme-to-data-attribute.mjs.map +0 -1
- package/dist/theme/data-attribute/resolve-theme-from-data-attribute.cjs +0 -23
- package/dist/theme/data-attribute/resolve-theme-from-data-attribute.cjs.map +0 -1
- package/dist/theme/data-attribute/resolve-theme-from-data-attribute.mjs +0 -22
- package/dist/theme/data-attribute/resolve-theme-from-data-attribute.mjs.map +0 -1
- package/src/theme/class-name/apply-theme-to-class-name.ts +0 -26
- package/src/theme/class-name/resolve-theme-from-class-name.ts +0 -22
- package/src/theme/data-attribute/apply-theme-to-data-attribute.ts +0 -27
- package/src/theme/data-attribute/resolve-theme-from-data-attribute.ts +0 -23
package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-attribute-theme-store.cjs","names":["
|
|
1
|
+
{"version":3,"file":"data-attribute-theme-store.cjs","names":["parseDataAttribute","SEPARATOR_SPACE","stringifyDataAttribute","readDataAttribute","subscribeDataAttribute"],"sources":["../../../../src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts"],"sourcesContent":["import { SEPARATOR_SPACE } from '../../data-attribute/_constant.ts'\nimport { parseDataAttribute } from '../../data-attribute/parse-data-attribute.ts'\nimport { readDataAttribute } from '../../data-attribute/read-data-attribute.ts'\nimport { stringifyDataAttribute } from '../../data-attribute/stringify-data-attribute.ts'\nimport { subscribeDataAttribute } from '../../data-attribute/subscribe-data-attribute.ts'\nimport { writeDataAttribute } from '../../data-attribute/write-data-attribute.ts'\nimport type { ParseStoredTheme, StringifyStoredTheme } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * Creates a theme store that reads and writes via a data attribute.\n *\n * read: parse(themes, getDataAttribute(element, attribute)) → ThemeEntry\n * write: setAttribute(attribute, stringify(themes, getDataAttribute(element, attribute), entry))\n *\n * Supports space-separated attribute values by default. Use `parse` and `stringify` to customize\n * (e.g. comma-separated via curried parseDataAttribute/stringifyDataAttribute).\n *\n * @param themes - Record mapping theme keys to attribute values\n * @param options.attributeName - Data attribute name (e.g. `data-theme`)\n * @param options.element - Element to operate on (accepts null e.g. from refs). Defaults to document.documentElement.\n * @param options.parse - Custom parser (default: parseDataAttribute with space separator)\n * @param options.stringify - Custom serializer (default: stringifyDataAttribute with space separator)\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'current', grayscale: 'grayscale' }\n * const store = dataAttributeThemeStore(themes, { attributeName: 'data-theme' })\n * store.read() // returns ThemeEntry from data attribute\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((entry) => {})\n * ```\n *\n * @example\n * ```ts\n * // Comma-separated\n * const store = dataAttributeThemeStore(themes, {\n * attributeName: 'data-theme',\n * parse: (t, v) => parseDataAttribute(t, v, { separator: ',' }),\n * stringify: (t, x, e) => stringifyDataAttribute(t, x, e, { separator: ',' })\n * })\n * ```\n */\nexport function dataAttributeThemeStore<Themes extends ThemeMap>(\n\tthemes: Themes,\n\toptions: {\n\t\tattributeName: `data-${string}`\n\t\telement?: Element | null | undefined\n\t\tparse?: ParseStoredTheme<Themes> | undefined\n\t\tstringify?: StringifyStoredTheme<Themes> | undefined\n\t}\n) {\n\tconst element = options.element ?? document?.documentElement\n\tconst {\n\t\tattributeName,\n\t\tparse = (t, v) => parseDataAttribute(t, v, { separator: SEPARATOR_SPACE }),\n\t\tstringify = (t, x, e) => stringifyDataAttribute(t, x, e, { separator: SEPARATOR_SPACE })\n\t} = options\n\n\treturn {\n\t\tread() {\n\t\t\treturn readDataAttribute(themes, attributeName, { element, parse })\n\t\t},\n\t\twrite(entry) {\n\t\t\twriteDataAttribute(themes, attributeName, entry, { element, stringify })\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\treturn subscribeDataAttribute(themes, attributeName, handler, { element, parse })\n\t\t}\n\t} satisfies ThemeStore<Themes>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,wBACf,QACA,SAMC;CACD,MAAM,UAAU,QAAQ,WAAW,UAAU;CAC7C,MAAM,EACL,eACA,SAAS,GAAG,MAAMA,gDAAmB,GAAG,GAAG,EAAE,WAAWC,mCAAiB,CAAC,EAC1E,aAAa,GAAG,GAAG,MAAMC,wDAAuB,GAAG,GAAG,GAAG,EAAE,WAAWD,mCAAiB,CAAC,KACrF;AAEJ,QAAO;EACN,OAAO;AACN,UAAOE,8CAAkB,QAAQ,eAAe;IAAE;IAAS;IAAO,CAAC;;EAEpE,MAAM,OAAO;AACZ,mDAAmB,QAAQ,eAAe,OAAO;IAAE;IAAS;IAAW,CAAC;;EAEzE,UAAU,SAAS;AAClB,UAAOC,wDAAuB,QAAQ,eAAe,SAAS;IAAE;IAAS;IAAO,CAAC;;EAElF"}
|
|
@@ -1,30 +1,53 @@
|
|
|
1
1
|
import { ThemeMap } from "../../theme-map.types.cjs";
|
|
2
|
-
import {
|
|
3
|
-
import { Required } from "type-plus";
|
|
2
|
+
import { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from "../../theme-entry.types.cjs";
|
|
4
3
|
|
|
5
4
|
//#region src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.ts
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Creates a theme store that reads and writes via a data attribute.
|
|
9
8
|
*
|
|
9
|
+
* read: parse(themes, getDataAttribute(element, attribute)) → ThemeEntry
|
|
10
|
+
* write: setAttribute(attribute, stringify(themes, getDataAttribute(element, attribute), entry))
|
|
11
|
+
*
|
|
12
|
+
* Supports space-separated attribute values by default. Use `parse` and `stringify` to customize
|
|
13
|
+
* (e.g. comma-separated via curried parseDataAttribute/stringifyDataAttribute).
|
|
14
|
+
*
|
|
10
15
|
* @param themes - Record mapping theme keys to attribute values
|
|
11
16
|
* @param options.attributeName - Data attribute name (e.g. `data-theme`)
|
|
12
|
-
* @param options.element - Element to operate on (
|
|
17
|
+
* @param options.element - Element to operate on (accepts null e.g. from refs). Defaults to document.documentElement.
|
|
18
|
+
* @param options.parse - Custom parser (default: parseDataAttribute with space separator)
|
|
19
|
+
* @param options.stringify - Custom serializer (default: stringifyDataAttribute with space separator)
|
|
13
20
|
* @returns ThemeStore
|
|
14
21
|
*
|
|
15
22
|
* @example
|
|
16
23
|
* ```ts
|
|
17
24
|
* const themes = { current: 'current', grayscale: 'grayscale' }
|
|
18
25
|
* const store = dataAttributeThemeStore(themes, { attributeName: 'data-theme' })
|
|
19
|
-
* store.read() // returns
|
|
26
|
+
* store.read() // returns ThemeEntry from data attribute
|
|
20
27
|
* store.write(themeEntry(themes, 'grayscale'))
|
|
21
|
-
* store.subscribe((
|
|
28
|
+
* store.subscribe((entry) => {})
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* // Comma-separated
|
|
34
|
+
* const store = dataAttributeThemeStore(themes, {
|
|
35
|
+
* attributeName: 'data-theme',
|
|
36
|
+
* parse: (t, v) => parseDataAttribute(t, v, { separator: ',' }),
|
|
37
|
+
* stringify: (t, x, e) => stringifyDataAttribute(t, x, e, { separator: ',' })
|
|
38
|
+
* })
|
|
22
39
|
* ```
|
|
23
40
|
*/
|
|
24
41
|
declare function dataAttributeThemeStore<Themes extends ThemeMap>(themes: Themes, options: {
|
|
25
42
|
attributeName: `data-${string}`;
|
|
26
|
-
element?: Element | undefined;
|
|
27
|
-
|
|
43
|
+
element?: Element | null | undefined;
|
|
44
|
+
parse?: ParseStoredTheme<Themes> | undefined;
|
|
45
|
+
stringify?: StringifyStoredTheme<Themes> | undefined;
|
|
46
|
+
}): {
|
|
47
|
+
read(): ThemeEntry<Themes> | undefined;
|
|
48
|
+
write(entry: ThemeEntry<Themes> | undefined): void;
|
|
49
|
+
subscribe(handler: (theme: ThemeEntry<Themes> | undefined) => void): () => void;
|
|
50
|
+
};
|
|
28
51
|
//#endregion
|
|
29
52
|
export { dataAttributeThemeStore };
|
|
30
53
|
//# sourceMappingURL=data-attribute-theme-store.d.cts.map
|
package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-attribute-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-attribute-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,uCAAuC,kBAC9C;;YAGG;UACF,iBAAiB;cACb,qBAAqB"}
|
|
@@ -1,30 +1,53 @@
|
|
|
1
1
|
import { ThemeMap } from "../../theme-map.types.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { Required } from "type-plus";
|
|
2
|
+
import { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from "../../theme-entry.types.mjs";
|
|
4
3
|
|
|
5
4
|
//#region src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.ts
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Creates a theme store that reads and writes via a data attribute.
|
|
9
8
|
*
|
|
9
|
+
* read: parse(themes, getDataAttribute(element, attribute)) → ThemeEntry
|
|
10
|
+
* write: setAttribute(attribute, stringify(themes, getDataAttribute(element, attribute), entry))
|
|
11
|
+
*
|
|
12
|
+
* Supports space-separated attribute values by default. Use `parse` and `stringify` to customize
|
|
13
|
+
* (e.g. comma-separated via curried parseDataAttribute/stringifyDataAttribute).
|
|
14
|
+
*
|
|
10
15
|
* @param themes - Record mapping theme keys to attribute values
|
|
11
16
|
* @param options.attributeName - Data attribute name (e.g. `data-theme`)
|
|
12
|
-
* @param options.element - Element to operate on (
|
|
17
|
+
* @param options.element - Element to operate on (accepts null e.g. from refs). Defaults to document.documentElement.
|
|
18
|
+
* @param options.parse - Custom parser (default: parseDataAttribute with space separator)
|
|
19
|
+
* @param options.stringify - Custom serializer (default: stringifyDataAttribute with space separator)
|
|
13
20
|
* @returns ThemeStore
|
|
14
21
|
*
|
|
15
22
|
* @example
|
|
16
23
|
* ```ts
|
|
17
24
|
* const themes = { current: 'current', grayscale: 'grayscale' }
|
|
18
25
|
* const store = dataAttributeThemeStore(themes, { attributeName: 'data-theme' })
|
|
19
|
-
* store.read() // returns
|
|
26
|
+
* store.read() // returns ThemeEntry from data attribute
|
|
20
27
|
* store.write(themeEntry(themes, 'grayscale'))
|
|
21
|
-
* store.subscribe((
|
|
28
|
+
* store.subscribe((entry) => {})
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* // Comma-separated
|
|
34
|
+
* const store = dataAttributeThemeStore(themes, {
|
|
35
|
+
* attributeName: 'data-theme',
|
|
36
|
+
* parse: (t, v) => parseDataAttribute(t, v, { separator: ',' }),
|
|
37
|
+
* stringify: (t, x, e) => stringifyDataAttribute(t, x, e, { separator: ',' })
|
|
38
|
+
* })
|
|
22
39
|
* ```
|
|
23
40
|
*/
|
|
24
41
|
declare function dataAttributeThemeStore<Themes extends ThemeMap>(themes: Themes, options: {
|
|
25
42
|
attributeName: `data-${string}`;
|
|
26
|
-
element?: Element | undefined;
|
|
27
|
-
|
|
43
|
+
element?: Element | null | undefined;
|
|
44
|
+
parse?: ParseStoredTheme<Themes> | undefined;
|
|
45
|
+
stringify?: StringifyStoredTheme<Themes> | undefined;
|
|
46
|
+
}): {
|
|
47
|
+
read(): ThemeEntry<Themes> | undefined;
|
|
48
|
+
write(entry: ThemeEntry<Themes> | undefined): void;
|
|
49
|
+
subscribe(handler: (theme: ThemeEntry<Themes> | undefined) => void): () => void;
|
|
50
|
+
};
|
|
28
51
|
//#endregion
|
|
29
52
|
export { dataAttributeThemeStore };
|
|
30
53
|
//# sourceMappingURL=data-attribute-theme-store.d.mts.map
|
package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-attribute-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-attribute-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,uCAAuC,kBAC9C;;YAGG;UACF,iBAAiB;cACb,qBAAqB"}
|
|
@@ -1,47 +1,67 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { SEPARATOR_SPACE } from "../../data-attribute/_constant.mjs";
|
|
2
|
+
import { parseDataAttribute } from "../../data-attribute/parse-data-attribute.mjs";
|
|
3
|
+
import { readDataAttribute } from "../../data-attribute/read-data-attribute.mjs";
|
|
4
|
+
import { stringifyDataAttribute } from "../../data-attribute/stringify-data-attribute.mjs";
|
|
5
|
+
import { subscribeDataAttribute } from "../../data-attribute/subscribe-data-attribute.mjs";
|
|
6
|
+
import { writeDataAttribute } from "../../data-attribute/write-data-attribute.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts
|
|
9
9
|
/**
|
|
10
10
|
* Creates a theme store that reads and writes via a data attribute.
|
|
11
11
|
*
|
|
12
|
+
* read: parse(themes, getDataAttribute(element, attribute)) → ThemeEntry
|
|
13
|
+
* write: setAttribute(attribute, stringify(themes, getDataAttribute(element, attribute), entry))
|
|
14
|
+
*
|
|
15
|
+
* Supports space-separated attribute values by default. Use `parse` and `stringify` to customize
|
|
16
|
+
* (e.g. comma-separated via curried parseDataAttribute/stringifyDataAttribute).
|
|
17
|
+
*
|
|
12
18
|
* @param themes - Record mapping theme keys to attribute values
|
|
13
19
|
* @param options.attributeName - Data attribute name (e.g. `data-theme`)
|
|
14
|
-
* @param options.element - Element to operate on (
|
|
20
|
+
* @param options.element - Element to operate on (accepts null e.g. from refs). Defaults to document.documentElement.
|
|
21
|
+
* @param options.parse - Custom parser (default: parseDataAttribute with space separator)
|
|
22
|
+
* @param options.stringify - Custom serializer (default: stringifyDataAttribute with space separator)
|
|
15
23
|
* @returns ThemeStore
|
|
16
24
|
*
|
|
17
25
|
* @example
|
|
18
26
|
* ```ts
|
|
19
27
|
* const themes = { current: 'current', grayscale: 'grayscale' }
|
|
20
28
|
* const store = dataAttributeThemeStore(themes, { attributeName: 'data-theme' })
|
|
21
|
-
* store.read() // returns
|
|
29
|
+
* store.read() // returns ThemeEntry from data attribute
|
|
22
30
|
* store.write(themeEntry(themes, 'grayscale'))
|
|
23
|
-
* store.subscribe((
|
|
31
|
+
* store.subscribe((entry) => {})
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* // Comma-separated
|
|
37
|
+
* const store = dataAttributeThemeStore(themes, {
|
|
38
|
+
* attributeName: 'data-theme',
|
|
39
|
+
* parse: (t, v) => parseDataAttribute(t, v, { separator: ',' }),
|
|
40
|
+
* stringify: (t, x, e) => stringifyDataAttribute(t, x, e, { separator: ',' })
|
|
41
|
+
* })
|
|
24
42
|
* ```
|
|
25
43
|
*/
|
|
26
44
|
function dataAttributeThemeStore(themes, options) {
|
|
27
45
|
const element = options.element ?? document?.documentElement;
|
|
28
|
-
const { attributeName } = options;
|
|
29
|
-
if (!element) return dummyThemeStore;
|
|
46
|
+
const { attributeName, parse = (t, v) => parseDataAttribute(t, v, { separator: SEPARATOR_SPACE }), stringify = (t, x, e) => stringifyDataAttribute(t, x, e, { separator: SEPARATOR_SPACE }) } = options;
|
|
30
47
|
return {
|
|
31
48
|
read() {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
49
|
+
return readDataAttribute(themes, attributeName, {
|
|
50
|
+
element,
|
|
51
|
+
parse
|
|
52
|
+
});
|
|
35
53
|
},
|
|
36
54
|
write(entry) {
|
|
37
|
-
|
|
55
|
+
writeDataAttribute(themes, attributeName, entry, {
|
|
56
|
+
element,
|
|
57
|
+
stringify
|
|
58
|
+
});
|
|
38
59
|
},
|
|
39
60
|
subscribe(handler) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
return () => observer.disconnect();
|
|
61
|
+
return subscribeDataAttribute(themes, attributeName, handler, {
|
|
62
|
+
element,
|
|
63
|
+
parse
|
|
64
|
+
});
|
|
45
65
|
}
|
|
46
66
|
};
|
|
47
67
|
}
|
package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-attribute-theme-store.mjs","names":[],"sources":["../../../../src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"data-attribute-theme-store.mjs","names":[],"sources":["../../../../src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts"],"sourcesContent":["import { SEPARATOR_SPACE } from '../../data-attribute/_constant.ts'\nimport { parseDataAttribute } from '../../data-attribute/parse-data-attribute.ts'\nimport { readDataAttribute } from '../../data-attribute/read-data-attribute.ts'\nimport { stringifyDataAttribute } from '../../data-attribute/stringify-data-attribute.ts'\nimport { subscribeDataAttribute } from '../../data-attribute/subscribe-data-attribute.ts'\nimport { writeDataAttribute } from '../../data-attribute/write-data-attribute.ts'\nimport type { ParseStoredTheme, StringifyStoredTheme } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * Creates a theme store that reads and writes via a data attribute.\n *\n * read: parse(themes, getDataAttribute(element, attribute)) → ThemeEntry\n * write: setAttribute(attribute, stringify(themes, getDataAttribute(element, attribute), entry))\n *\n * Supports space-separated attribute values by default. Use `parse` and `stringify` to customize\n * (e.g. comma-separated via curried parseDataAttribute/stringifyDataAttribute).\n *\n * @param themes - Record mapping theme keys to attribute values\n * @param options.attributeName - Data attribute name (e.g. `data-theme`)\n * @param options.element - Element to operate on (accepts null e.g. from refs). Defaults to document.documentElement.\n * @param options.parse - Custom parser (default: parseDataAttribute with space separator)\n * @param options.stringify - Custom serializer (default: stringifyDataAttribute with space separator)\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'current', grayscale: 'grayscale' }\n * const store = dataAttributeThemeStore(themes, { attributeName: 'data-theme' })\n * store.read() // returns ThemeEntry from data attribute\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((entry) => {})\n * ```\n *\n * @example\n * ```ts\n * // Comma-separated\n * const store = dataAttributeThemeStore(themes, {\n * attributeName: 'data-theme',\n * parse: (t, v) => parseDataAttribute(t, v, { separator: ',' }),\n * stringify: (t, x, e) => stringifyDataAttribute(t, x, e, { separator: ',' })\n * })\n * ```\n */\nexport function dataAttributeThemeStore<Themes extends ThemeMap>(\n\tthemes: Themes,\n\toptions: {\n\t\tattributeName: `data-${string}`\n\t\telement?: Element | null | undefined\n\t\tparse?: ParseStoredTheme<Themes> | undefined\n\t\tstringify?: StringifyStoredTheme<Themes> | undefined\n\t}\n) {\n\tconst element = options.element ?? document?.documentElement\n\tconst {\n\t\tattributeName,\n\t\tparse = (t, v) => parseDataAttribute(t, v, { separator: SEPARATOR_SPACE }),\n\t\tstringify = (t, x, e) => stringifyDataAttribute(t, x, e, { separator: SEPARATOR_SPACE })\n\t} = options\n\n\treturn {\n\t\tread() {\n\t\t\treturn readDataAttribute(themes, attributeName, { element, parse })\n\t\t},\n\t\twrite(entry) {\n\t\t\twriteDataAttribute(themes, attributeName, entry, { element, stringify })\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\treturn subscribeDataAttribute(themes, attributeName, handler, { element, parse })\n\t\t}\n\t} satisfies ThemeStore<Themes>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,wBACf,QACA,SAMC;CACD,MAAM,UAAU,QAAQ,WAAW,UAAU;CAC7C,MAAM,EACL,eACA,SAAS,GAAG,MAAM,mBAAmB,GAAG,GAAG,EAAE,WAAW,iBAAiB,CAAC,EAC1E,aAAa,GAAG,GAAG,MAAM,uBAAuB,GAAG,GAAG,GAAG,EAAE,WAAW,iBAAiB,CAAC,KACrF;AAEJ,QAAO;EACN,OAAO;AACN,UAAO,kBAAkB,QAAQ,eAAe;IAAE;IAAS;IAAO,CAAC;;EAEpE,MAAM,OAAO;AACZ,sBAAmB,QAAQ,eAAe,OAAO;IAAE;IAAS;IAAW,CAAC;;EAEzE,UAAU,SAAS;AAClB,UAAO,uBAAuB,QAAQ,eAAe,SAAS;IAAE;IAAS;IAAO,CAAC;;EAElF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-theme-store.cjs","names":["value: keyof Themes | undefined | null","themeEntry"],"sources":["../../../../src/theme/theme-store/in-memory-theme-store/in-memory-theme-store.ts"],"sourcesContent":["import { themeEntry } from '../../theme-entry.ts'\nimport type { ThemeEntry } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * In-memory theme store. Transient state; no persistence.\n *\n * Bakes themes at creation. Validates theme keys on write; read/write use theme keys\n * and build ThemeEntry from the themes map, consistent with other stores.\n *\n * @param themes - Record mapping theme keys to values (for validation and entry construction)\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' } as const\n * const store = inMemoryThemeStore(themes)\n * store.read() // undefined when empty\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function inMemoryThemeStore<Themes extends ThemeMap>(themes: Themes) {\n\tlet value: keyof Themes | undefined | null\n\tconst listeners = new Set<(v: ThemeEntry<Themes> | undefined) => void>()\n\n\tfunction read(): ThemeEntry<Themes> | undefined {\n\t\tif (value === undefined || value === null) return undefined\n\t\treturn themeEntry(themes, value)\n\t}\n\n\treturn {\n\t\tread,\n\t\twrite(entry) {\n\t\t\tif (entry
|
|
1
|
+
{"version":3,"file":"in-memory-theme-store.cjs","names":["value: keyof Themes | undefined | null","themeEntry"],"sources":["../../../../src/theme/theme-store/in-memory-theme-store/in-memory-theme-store.ts"],"sourcesContent":["import { themeEntry } from '../../theme-entry.ts'\nimport type { ThemeEntry } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * In-memory theme store. Transient state; no persistence.\n *\n * Bakes themes at creation. Validates theme keys on write; read/write use theme keys\n * and build ThemeEntry from the themes map, consistent with other stores.\n *\n * @param themes - Record mapping theme keys to values (for validation and entry construction)\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' } as const\n * const store = inMemoryThemeStore(themes)\n * store.read() // undefined when empty\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function inMemoryThemeStore<Themes extends ThemeMap>(themes: Themes) {\n\tlet value: keyof Themes | undefined | null\n\tconst listeners = new Set<(v: ThemeEntry<Themes> | undefined) => void>()\n\n\tfunction read(): ThemeEntry<Themes> | undefined {\n\t\tif (value === undefined || value === null) return undefined\n\t\treturn themeEntry(themes, value)\n\t}\n\n\treturn {\n\t\tread,\n\t\twrite(entry) {\n\t\t\tif (entry == null) {\n\t\t\t\tif (value === undefined || value === null) return\n\t\t\t\tvalue = undefined\n\t\t\t\tfor (const fn of listeners) fn(undefined)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!(entry.theme in themes)) return\n\t\t\tif (value === entry.theme) return\n\t\t\tvalue = entry.theme\n\t\t\tfor (const fn of listeners) fn(themeEntry(themes, entry.theme))\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\tlisteners.add(handler)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(handler)\n\t\t\t}\n\t\t}\n\t} satisfies ThemeStore<Themes>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,mBAA4C,QAAgB;CAC3E,IAAIA;CACJ,MAAM,4BAAY,IAAI,KAAkD;CAExE,SAAS,OAAuC;AAC/C,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,SAAOC,+BAAW,QAAQ,MAAM;;AAGjC,QAAO;EACN;EACA,MAAM,OAAO;AACZ,OAAI,SAAS,MAAM;AAClB,QAAI,UAAU,UAAa,UAAU,KAAM;AAC3C,YAAQ;AACR,SAAK,MAAM,MAAM,UAAW,IAAG,OAAU;AACzC;;AAED,OAAI,EAAE,MAAM,SAAS,QAAS;AAC9B,OAAI,UAAU,MAAM,MAAO;AAC3B,WAAQ,MAAM;AACd,QAAK,MAAM,MAAM,UAAW,IAAGA,+BAAW,QAAQ,MAAM,MAAM,CAAC;;EAEhE,UAAU,SAAS;AAClB,aAAU,IAAI,QAAQ;AACtB,gBAAa;AACZ,cAAU,OAAO,QAAQ;;;EAG3B"}
|
|
@@ -24,7 +24,7 @@ import { ThemeEntry } from "../../theme-entry.types.cjs";
|
|
|
24
24
|
declare function inMemoryThemeStore<Themes extends ThemeMap>(themes: Themes): {
|
|
25
25
|
read: () => ThemeEntry<Themes> | undefined;
|
|
26
26
|
write(entry: ThemeEntry<Themes> | undefined): void;
|
|
27
|
-
subscribe(handler: (theme: ThemeEntry<Themes> |
|
|
27
|
+
subscribe(handler: (theme: ThemeEntry<Themes> | undefined) => void): () => void;
|
|
28
28
|
};
|
|
29
29
|
//#endregion
|
|
30
30
|
export { inMemoryThemeStore };
|
|
@@ -24,7 +24,7 @@ import { ThemeEntry } from "../../theme-entry.types.mjs";
|
|
|
24
24
|
declare function inMemoryThemeStore<Themes extends ThemeMap>(themes: Themes): {
|
|
25
25
|
read: () => ThemeEntry<Themes> | undefined;
|
|
26
26
|
write(entry: ThemeEntry<Themes> | undefined): void;
|
|
27
|
-
subscribe(handler: (theme: ThemeEntry<Themes> |
|
|
27
|
+
subscribe(handler: (theme: ThemeEntry<Themes> | undefined) => void): () => void;
|
|
28
28
|
};
|
|
29
29
|
//#endregion
|
|
30
30
|
export { inMemoryThemeStore };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-theme-store.mjs","names":["value: keyof Themes | undefined | null"],"sources":["../../../../src/theme/theme-store/in-memory-theme-store/in-memory-theme-store.ts"],"sourcesContent":["import { themeEntry } from '../../theme-entry.ts'\nimport type { ThemeEntry } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * In-memory theme store. Transient state; no persistence.\n *\n * Bakes themes at creation. Validates theme keys on write; read/write use theme keys\n * and build ThemeEntry from the themes map, consistent with other stores.\n *\n * @param themes - Record mapping theme keys to values (for validation and entry construction)\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' } as const\n * const store = inMemoryThemeStore(themes)\n * store.read() // undefined when empty\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function inMemoryThemeStore<Themes extends ThemeMap>(themes: Themes) {\n\tlet value: keyof Themes | undefined | null\n\tconst listeners = new Set<(v: ThemeEntry<Themes> | undefined) => void>()\n\n\tfunction read(): ThemeEntry<Themes> | undefined {\n\t\tif (value === undefined || value === null) return undefined\n\t\treturn themeEntry(themes, value)\n\t}\n\n\treturn {\n\t\tread,\n\t\twrite(entry) {\n\t\t\tif (entry
|
|
1
|
+
{"version":3,"file":"in-memory-theme-store.mjs","names":["value: keyof Themes | undefined | null"],"sources":["../../../../src/theme/theme-store/in-memory-theme-store/in-memory-theme-store.ts"],"sourcesContent":["import { themeEntry } from '../../theme-entry.ts'\nimport type { ThemeEntry } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * In-memory theme store. Transient state; no persistence.\n *\n * Bakes themes at creation. Validates theme keys on write; read/write use theme keys\n * and build ThemeEntry from the themes map, consistent with other stores.\n *\n * @param themes - Record mapping theme keys to values (for validation and entry construction)\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' } as const\n * const store = inMemoryThemeStore(themes)\n * store.read() // undefined when empty\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function inMemoryThemeStore<Themes extends ThemeMap>(themes: Themes) {\n\tlet value: keyof Themes | undefined | null\n\tconst listeners = new Set<(v: ThemeEntry<Themes> | undefined) => void>()\n\n\tfunction read(): ThemeEntry<Themes> | undefined {\n\t\tif (value === undefined || value === null) return undefined\n\t\treturn themeEntry(themes, value)\n\t}\n\n\treturn {\n\t\tread,\n\t\twrite(entry) {\n\t\t\tif (entry == null) {\n\t\t\t\tif (value === undefined || value === null) return\n\t\t\t\tvalue = undefined\n\t\t\t\tfor (const fn of listeners) fn(undefined)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!(entry.theme in themes)) return\n\t\t\tif (value === entry.theme) return\n\t\t\tvalue = entry.theme\n\t\t\tfor (const fn of listeners) fn(themeEntry(themes, entry.theme))\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\tlisteners.add(handler)\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(handler)\n\t\t\t}\n\t\t}\n\t} satisfies ThemeStore<Themes>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,mBAA4C,QAAgB;CAC3E,IAAIA;CACJ,MAAM,4BAAY,IAAI,KAAkD;CAExE,SAAS,OAAuC;AAC/C,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,SAAO,WAAW,QAAQ,MAAM;;AAGjC,QAAO;EACN;EACA,MAAM,OAAO;AACZ,OAAI,SAAS,MAAM;AAClB,QAAI,UAAU,UAAa,UAAU,KAAM;AAC3C,YAAQ;AACR,SAAK,MAAM,MAAM,UAAW,IAAG,OAAU;AACzC;;AAED,OAAI,EAAE,MAAM,SAAS,QAAS;AAC9B,OAAI,UAAU,MAAM,MAAO;AAC3B,WAAQ,MAAM;AACd,QAAK,MAAM,MAAM,UAAW,IAAG,WAAW,QAAQ,MAAM,MAAM,CAAC;;EAEhE,UAAU,SAAS;AAClB,aAAU,IAAI,QAAQ;AACtB,gBAAa;AACZ,cAAU,OAAO,QAAQ;;;EAG3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const require_theme_entry = require('../../theme-entry.cjs');
|
|
2
1
|
const require_dummy_theme_store = require('../../../testing/theme/dummy-theme-store.cjs');
|
|
3
|
-
const
|
|
2
|
+
const require_read_local_storage = require('../../local-storage/read-local-storage.cjs');
|
|
3
|
+
const require_write_local_storage = require('../../local-storage/write-local-storage.cjs');
|
|
4
4
|
|
|
5
5
|
//#region src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts
|
|
6
6
|
/**
|
|
@@ -11,6 +11,9 @@ const require_parse_stored_theme = require('../../_utils/parse-stored-theme.cjs'
|
|
|
11
11
|
*
|
|
12
12
|
* @param themes - Record mapping theme keys to values (for validation)
|
|
13
13
|
* @param options.storageKey - localStorage key
|
|
14
|
+
* @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)
|
|
15
|
+
* @param options.stringify - Optional custom serializer (default: JSON.stringify)
|
|
16
|
+
* @param options.onError - Optional callback invoked when storage write throws
|
|
14
17
|
* @returns ThemeStore
|
|
15
18
|
*
|
|
16
19
|
* @example
|
|
@@ -23,14 +26,12 @@ const require_parse_stored_theme = require('../../_utils/parse-stored-theme.cjs'
|
|
|
23
26
|
* ```
|
|
24
27
|
*/
|
|
25
28
|
function localStorageThemeStore(themes, options) {
|
|
26
|
-
const { storageKey } = options;
|
|
27
|
-
if (
|
|
29
|
+
const { storageKey, parse, stringify, onError } = options;
|
|
30
|
+
if (!window?.localStorage) return require_dummy_theme_store.dummyThemeStore;
|
|
28
31
|
const handlers = /* @__PURE__ */ new Set();
|
|
29
32
|
let lastNotifiedKey = read()?.theme ?? void 0;
|
|
30
33
|
function read() {
|
|
31
|
-
|
|
32
|
-
if (theme === void 0) return void 0;
|
|
33
|
-
return require_theme_entry.themeEntry(themes, theme);
|
|
34
|
+
return require_read_local_storage.readLocalStorage(themes, storageKey, { parse });
|
|
34
35
|
}
|
|
35
36
|
function notify() {
|
|
36
37
|
const result = read();
|
|
@@ -42,11 +43,11 @@ function localStorageThemeStore(themes, options) {
|
|
|
42
43
|
return {
|
|
43
44
|
read,
|
|
44
45
|
write(entry) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
require_write_local_storage.writeLocalStorage(themes, storageKey, entry, {
|
|
47
|
+
stringify,
|
|
48
|
+
onError
|
|
49
|
+
});
|
|
50
|
+
notify();
|
|
50
51
|
},
|
|
51
52
|
subscribe(handler) {
|
|
52
53
|
handlers.add(handler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage-theme-store.cjs","names":["dummyThemeStore","lastNotifiedKey: keyof Themes | undefined","
|
|
1
|
+
{"version":3,"file":"local-storage-theme-store.cjs","names":["dummyThemeStore","lastNotifiedKey: keyof Themes | undefined","readLocalStorage"],"sources":["../../../../src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts"],"sourcesContent":["import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'\nimport { readLocalStorage } from '../../local-storage/read-local-storage.ts'\nimport { writeLocalStorage } from '../../local-storage/write-local-storage.ts'\nimport type { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * Creates a theme store backed by localStorage.\n *\n * Persists across sessions; cross-tab sync via StorageEvent.\n * Same-tab writes trigger manual notify (StorageEvent does not fire for same tab).\n *\n * @param themes - Record mapping theme keys to values (for validation)\n * @param options.storageKey - localStorage key\n * @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)\n * @param options.stringify - Optional custom serializer (default: JSON.stringify)\n * @param options.onError - Optional callback invoked when storage write throws\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' }\n * const store = localStorageThemeStore(themes, { storageKey: 'theme' })\n * store.read() // returns themeResult from localStorage\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function localStorageThemeStore<Themes extends ThemeMap>(\n\tthemes: Themes,\n\toptions: {\n\t\tstorageKey: string\n\t\tparse?: ParseStoredTheme<Themes> | undefined\n\t\tstringify?: StringifyStoredTheme<Themes> | undefined\n\t\tonError?: ((error: unknown) => void) | undefined\n\t}\n) {\n\tconst { storageKey, parse, stringify, onError } = options\n\n\tif (!window?.localStorage) {\n\t\treturn dummyThemeStore satisfies ThemeStore<Themes>\n\t}\n\n\tconst handlers = new Set<(theme: ThemeEntry<Themes> | undefined) => void>()\n\tlet lastNotifiedKey: keyof Themes | undefined = read()?.theme ?? undefined\n\n\tfunction read() {\n\t\treturn readLocalStorage(themes, storageKey, { parse })\n\t}\n\n\tfunction notify() {\n\t\tconst result = read()\n\t\tconst key = result?.theme ?? undefined\n\t\tif (key === lastNotifiedKey) return\n\t\tlastNotifiedKey = key\n\t\tfor (const h of handlers) h(result)\n\t}\n\n\treturn {\n\t\tread,\n\t\twrite(entry) {\n\t\t\twriteLocalStorage(themes, storageKey, entry, { stringify, onError })\n\t\t\tnotify()\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\thandlers.add(handler)\n\n\t\t\tconst onStorage = (e: StorageEvent) => {\n\t\t\t\tif (e.key === storageKey && e.storageArea === window.localStorage) notify()\n\t\t\t}\n\t\t\twindow.addEventListener('storage', onStorage)\n\n\t\t\treturn () => {\n\t\t\t\thandlers.delete(handler)\n\t\t\t\twindow.removeEventListener('storage', onStorage)\n\t\t\t}\n\t\t}\n\t} satisfies ThemeStore<Themes>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,uBACf,QACA,SAMC;CACD,MAAM,EAAE,YAAY,OAAO,WAAW,YAAY;AAElD,KAAI,CAAC,QAAQ,aACZ,QAAOA;CAGR,MAAM,2BAAW,IAAI,KAAsD;CAC3E,IAAIC,kBAA4C,MAAM,EAAE,SAAS;CAEjE,SAAS,OAAO;AACf,SAAOC,4CAAiB,QAAQ,YAAY,EAAE,OAAO,CAAC;;CAGvD,SAAS,SAAS;EACjB,MAAM,SAAS,MAAM;EACrB,MAAM,MAAM,QAAQ,SAAS;AAC7B,MAAI,QAAQ,gBAAiB;AAC7B,oBAAkB;AAClB,OAAK,MAAM,KAAK,SAAU,GAAE,OAAO;;AAGpC,QAAO;EACN;EACA,MAAM,OAAO;AACZ,iDAAkB,QAAQ,YAAY,OAAO;IAAE;IAAW;IAAS,CAAC;AACpE,WAAQ;;EAET,UAAU,SAAS;AAClB,YAAS,IAAI,QAAQ;GAErB,MAAM,aAAa,MAAoB;AACtC,QAAI,EAAE,QAAQ,cAAc,EAAE,gBAAgB,OAAO,aAAc,SAAQ;;AAE5E,UAAO,iBAAiB,WAAW,UAAU;AAE7C,gBAAa;AACZ,aAAS,OAAO,QAAQ;AACxB,WAAO,oBAAoB,WAAW,UAAU;;;EAGlD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ThemeMap } from "../../theme-map.types.cjs";
|
|
2
|
-
import { ThemeEntry } from "../../theme-entry.types.cjs";
|
|
2
|
+
import { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from "../../theme-entry.types.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.ts
|
|
5
5
|
|
|
@@ -11,6 +11,9 @@ import { ThemeEntry } from "../../theme-entry.types.cjs";
|
|
|
11
11
|
*
|
|
12
12
|
* @param themes - Record mapping theme keys to values (for validation)
|
|
13
13
|
* @param options.storageKey - localStorage key
|
|
14
|
+
* @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)
|
|
15
|
+
* @param options.stringify - Optional custom serializer (default: JSON.stringify)
|
|
16
|
+
* @param options.onError - Optional callback invoked when storage write throws
|
|
14
17
|
* @returns ThemeStore
|
|
15
18
|
*
|
|
16
19
|
* @example
|
|
@@ -24,10 +27,13 @@ import { ThemeEntry } from "../../theme-entry.types.cjs";
|
|
|
24
27
|
*/
|
|
25
28
|
declare function localStorageThemeStore<Themes extends ThemeMap>(themes: Themes, options: {
|
|
26
29
|
storageKey: string;
|
|
30
|
+
parse?: ParseStoredTheme<Themes> | undefined;
|
|
31
|
+
stringify?: StringifyStoredTheme<Themes> | undefined;
|
|
32
|
+
onError?: ((error: unknown) => void) | undefined;
|
|
27
33
|
}): {
|
|
28
34
|
read: () => ThemeEntry<Themes> | undefined;
|
|
29
35
|
write(entry: ThemeEntry<Themes> | undefined): void;
|
|
30
|
-
subscribe(handler: (theme: ThemeEntry<Themes> |
|
|
36
|
+
subscribe(handler: (theme: ThemeEntry<Themes> | undefined) => void): () => void;
|
|
31
37
|
};
|
|
32
38
|
//#endregion
|
|
33
39
|
export { localStorageThemeStore };
|
package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"local-storage-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BA;;;;;;;;;;;;;;;;;;;;iBAAgB,sCAAsC,kBAC7C;;UAGC,iBAAiB;cACb,qBAAqB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ThemeMap } from "../../theme-map.types.mjs";
|
|
2
|
-
import { ThemeEntry } from "../../theme-entry.types.mjs";
|
|
2
|
+
import { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from "../../theme-entry.types.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.ts
|
|
5
5
|
|
|
@@ -11,6 +11,9 @@ import { ThemeEntry } from "../../theme-entry.types.mjs";
|
|
|
11
11
|
*
|
|
12
12
|
* @param themes - Record mapping theme keys to values (for validation)
|
|
13
13
|
* @param options.storageKey - localStorage key
|
|
14
|
+
* @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)
|
|
15
|
+
* @param options.stringify - Optional custom serializer (default: JSON.stringify)
|
|
16
|
+
* @param options.onError - Optional callback invoked when storage write throws
|
|
14
17
|
* @returns ThemeStore
|
|
15
18
|
*
|
|
16
19
|
* @example
|
|
@@ -24,10 +27,13 @@ import { ThemeEntry } from "../../theme-entry.types.mjs";
|
|
|
24
27
|
*/
|
|
25
28
|
declare function localStorageThemeStore<Themes extends ThemeMap>(themes: Themes, options: {
|
|
26
29
|
storageKey: string;
|
|
30
|
+
parse?: ParseStoredTheme<Themes> | undefined;
|
|
31
|
+
stringify?: StringifyStoredTheme<Themes> | undefined;
|
|
32
|
+
onError?: ((error: unknown) => void) | undefined;
|
|
27
33
|
}): {
|
|
28
34
|
read: () => ThemeEntry<Themes> | undefined;
|
|
29
35
|
write(entry: ThemeEntry<Themes> | undefined): void;
|
|
30
|
-
subscribe(handler: (theme: ThemeEntry<Themes> |
|
|
36
|
+
subscribe(handler: (theme: ThemeEntry<Themes> | undefined) => void): () => void;
|
|
31
37
|
};
|
|
32
38
|
//#endregion
|
|
33
39
|
export { localStorageThemeStore };
|
package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"local-storage-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BA;;;;;;;;;;;;;;;;;;;;iBAAgB,sCAAsC,kBAC7C;;UAGC,iBAAiB;cACb,qBAAqB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { themeEntry } from "../../theme-entry.mjs";
|
|
2
1
|
import { dummyThemeStore } from "../../../testing/theme/dummy-theme-store.mjs";
|
|
3
|
-
import {
|
|
2
|
+
import { readLocalStorage } from "../../local-storage/read-local-storage.mjs";
|
|
3
|
+
import { writeLocalStorage } from "../../local-storage/write-local-storage.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts
|
|
6
6
|
/**
|
|
@@ -11,6 +11,9 @@ import { parseStoredTheme } from "../../_utils/parse-stored-theme.mjs";
|
|
|
11
11
|
*
|
|
12
12
|
* @param themes - Record mapping theme keys to values (for validation)
|
|
13
13
|
* @param options.storageKey - localStorage key
|
|
14
|
+
* @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)
|
|
15
|
+
* @param options.stringify - Optional custom serializer (default: JSON.stringify)
|
|
16
|
+
* @param options.onError - Optional callback invoked when storage write throws
|
|
14
17
|
* @returns ThemeStore
|
|
15
18
|
*
|
|
16
19
|
* @example
|
|
@@ -23,14 +26,12 @@ import { parseStoredTheme } from "../../_utils/parse-stored-theme.mjs";
|
|
|
23
26
|
* ```
|
|
24
27
|
*/
|
|
25
28
|
function localStorageThemeStore(themes, options) {
|
|
26
|
-
const { storageKey } = options;
|
|
27
|
-
if (
|
|
29
|
+
const { storageKey, parse, stringify, onError } = options;
|
|
30
|
+
if (!window?.localStorage) return dummyThemeStore;
|
|
28
31
|
const handlers = /* @__PURE__ */ new Set();
|
|
29
32
|
let lastNotifiedKey = read()?.theme ?? void 0;
|
|
30
33
|
function read() {
|
|
31
|
-
|
|
32
|
-
if (theme === void 0) return void 0;
|
|
33
|
-
return themeEntry(themes, theme);
|
|
34
|
+
return readLocalStorage(themes, storageKey, { parse });
|
|
34
35
|
}
|
|
35
36
|
function notify() {
|
|
36
37
|
const result = read();
|
|
@@ -42,11 +43,11 @@ function localStorageThemeStore(themes, options) {
|
|
|
42
43
|
return {
|
|
43
44
|
read,
|
|
44
45
|
write(entry) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
writeLocalStorage(themes, storageKey, entry, {
|
|
47
|
+
stringify,
|
|
48
|
+
onError
|
|
49
|
+
});
|
|
50
|
+
notify();
|
|
50
51
|
},
|
|
51
52
|
subscribe(handler) {
|
|
52
53
|
handlers.add(handler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage-theme-store.mjs","names":["lastNotifiedKey: keyof Themes | undefined"],"sources":["../../../../src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts"],"sourcesContent":["import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'\nimport {
|
|
1
|
+
{"version":3,"file":"local-storage-theme-store.mjs","names":["lastNotifiedKey: keyof Themes | undefined"],"sources":["../../../../src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts"],"sourcesContent":["import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'\nimport { readLocalStorage } from '../../local-storage/read-local-storage.ts'\nimport { writeLocalStorage } from '../../local-storage/write-local-storage.ts'\nimport type { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from '../../theme-entry.types.ts'\nimport type { ThemeMap } from '../../theme-map.types.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\n/**\n * Creates a theme store backed by localStorage.\n *\n * Persists across sessions; cross-tab sync via StorageEvent.\n * Same-tab writes trigger manual notify (StorageEvent does not fire for same tab).\n *\n * @param themes - Record mapping theme keys to values (for validation)\n * @param options.storageKey - localStorage key\n * @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)\n * @param options.stringify - Optional custom serializer (default: JSON.stringify)\n * @param options.onError - Optional callback invoked when storage write throws\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' }\n * const store = localStorageThemeStore(themes, { storageKey: 'theme' })\n * store.read() // returns themeResult from localStorage\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function localStorageThemeStore<Themes extends ThemeMap>(\n\tthemes: Themes,\n\toptions: {\n\t\tstorageKey: string\n\t\tparse?: ParseStoredTheme<Themes> | undefined\n\t\tstringify?: StringifyStoredTheme<Themes> | undefined\n\t\tonError?: ((error: unknown) => void) | undefined\n\t}\n) {\n\tconst { storageKey, parse, stringify, onError } = options\n\n\tif (!window?.localStorage) {\n\t\treturn dummyThemeStore satisfies ThemeStore<Themes>\n\t}\n\n\tconst handlers = new Set<(theme: ThemeEntry<Themes> | undefined) => void>()\n\tlet lastNotifiedKey: keyof Themes | undefined = read()?.theme ?? undefined\n\n\tfunction read() {\n\t\treturn readLocalStorage(themes, storageKey, { parse })\n\t}\n\n\tfunction notify() {\n\t\tconst result = read()\n\t\tconst key = result?.theme ?? undefined\n\t\tif (key === lastNotifiedKey) return\n\t\tlastNotifiedKey = key\n\t\tfor (const h of handlers) h(result)\n\t}\n\n\treturn {\n\t\tread,\n\t\twrite(entry) {\n\t\t\twriteLocalStorage(themes, storageKey, entry, { stringify, onError })\n\t\t\tnotify()\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\thandlers.add(handler)\n\n\t\t\tconst onStorage = (e: StorageEvent) => {\n\t\t\t\tif (e.key === storageKey && e.storageArea === window.localStorage) notify()\n\t\t\t}\n\t\t\twindow.addEventListener('storage', onStorage)\n\n\t\t\treturn () => {\n\t\t\t\thandlers.delete(handler)\n\t\t\t\twindow.removeEventListener('storage', onStorage)\n\t\t\t}\n\t\t}\n\t} satisfies ThemeStore<Themes>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,uBACf,QACA,SAMC;CACD,MAAM,EAAE,YAAY,OAAO,WAAW,YAAY;AAElD,KAAI,CAAC,QAAQ,aACZ,QAAO;CAGR,MAAM,2BAAW,IAAI,KAAsD;CAC3E,IAAIA,kBAA4C,MAAM,EAAE,SAAS;CAEjE,SAAS,OAAO;AACf,SAAO,iBAAiB,QAAQ,YAAY,EAAE,OAAO,CAAC;;CAGvD,SAAS,SAAS;EACjB,MAAM,SAAS,MAAM;EACrB,MAAM,MAAM,QAAQ,SAAS;AAC7B,MAAI,QAAQ,gBAAiB;AAC7B,oBAAkB;AAClB,OAAK,MAAM,KAAK,SAAU,GAAE,OAAO;;AAGpC,QAAO;EACN;EACA,MAAM,OAAO;AACZ,qBAAkB,QAAQ,YAAY,OAAO;IAAE;IAAW;IAAS,CAAC;AACpE,WAAQ;;EAET,UAAU,SAAS;AAClB,YAAS,IAAI,QAAQ;GAErB,MAAM,aAAa,MAAoB;AACtC,QAAI,EAAE,QAAQ,cAAc,EAAE,gBAAgB,OAAO,aAAc,SAAQ;;AAE5E,UAAO,iBAAiB,WAAW,UAAU;AAE7C,gBAAa;AACZ,aAAS,OAAO,QAAQ;AACxB,WAAO,oBAAoB,WAAW,UAAU;;;EAGlD"}
|
package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.cjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const require_theme_entry = require('../../theme-entry.cjs');
|
|
1
|
+
const require_read_prefers_color_scheme_theme = require('../../prefers-color-scheme-theme/read-prefers-color-scheme-theme.cjs');
|
|
2
|
+
const require_subscribe_prefers_color_scheme_theme = require('../../prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.cjs');
|
|
4
3
|
|
|
5
4
|
//#region src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts
|
|
6
5
|
/**
|
|
@@ -26,10 +25,10 @@ const require_theme_entry = require('../../theme-entry.cjs');
|
|
|
26
25
|
function prefersColorSchemeThemeStore(themes) {
|
|
27
26
|
return {
|
|
28
27
|
read() {
|
|
29
|
-
return
|
|
28
|
+
return require_read_prefers_color_scheme_theme.readPrefersColorSchemeTheme(themes);
|
|
30
29
|
},
|
|
31
30
|
subscribe(handler) {
|
|
32
|
-
return
|
|
31
|
+
return require_subscribe_prefers_color_scheme_theme.subscribePrefersColorSchemeTheme(themes, handler);
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
34
|
}
|