@just-web/toolkits 1.0.0 → 2.0.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/react/hooks/use-theme-by-class-name.cjs +1 -5
- package/dist/react/hooks/use-theme-by-class-name.cjs.map +1 -1
- 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.map +1 -1
- package/dist/react/hooks/use-theme-by-class-name.mjs +1 -5
- package/dist/react/hooks/use-theme-by-class-name.mjs.map +1 -1
- package/dist/react/hooks/use-theme-by-data-attribute.cjs +1 -6
- package/dist/react/hooks/use-theme-by-data-attribute.cjs.map +1 -1
- 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.map +1 -1
- package/dist/react/hooks/use-theme-by-data-attribute.mjs +1 -6
- 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/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/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/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 +11 -1
- package/dist/theme/theme-entry.types.d.cts.map +1 -1
- package/dist/theme/theme-entry.types.d.mts +11 -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/class-name-theme-store/class-name-theme-store.cjs +21 -18
- 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 +5 -0
- 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 +5 -0
- 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 +21 -18
- 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 +39 -19
- 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 +28 -5
- 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 +28 -5
- 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 +39 -19
- package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-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 +7 -1
- 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 +7 -1
- 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 +7 -1
- 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 +7 -1
- 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/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/package.json +1 -1
- package/src/react/hooks/use-theme-by-class-name.ts +3 -8
- package/src/react/hooks/use-theme-by-data-attribute.ts +3 -10
- package/src/react/hooks/use-theme-by-local-storage.ts +3 -9
- 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 +52 -12
- package/src/theme/_utils/resolve-theme-map-value.ts +15 -0
- 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/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 +19 -0
- package/src/theme/theme-map.types.ts +9 -2
- package/src/theme/theme-store/class-name-theme-store/class-name-theme-store.ts +19 -25
- 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 +41 -28
- 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/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/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
|
@@ -1,47 +1,67 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
1
|
+
const require__constant = require('../../data-attribute/_constant.cjs');
|
|
2
|
+
const require_parse_data_attribute = require('../../data-attribute/parse-data-attribute.cjs');
|
|
3
|
+
const require_read_data_attribute = require('../../data-attribute/read-data-attribute.cjs');
|
|
4
|
+
const require_stringify_data_attribute = require('../../data-attribute/stringify-data-attribute.cjs');
|
|
5
|
+
const require_subscribe_data_attribute = require('../../data-attribute/subscribe-data-attribute.cjs');
|
|
6
|
+
const require_write_data_attribute = require('../../data-attribute/write-data-attribute.cjs');
|
|
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
20
|
* @param options.element - Element to operate on (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 require_dummy_theme_store.dummyThemeStore;
|
|
46
|
+
const { attributeName, parse = (t, v) => require_parse_data_attribute.parseDataAttribute(t, v, { separator: require__constant.SEPARATOR_SPACE }), stringify = (t, x, e) => require_stringify_data_attribute.stringifyDataAttribute(t, x, e, { separator: require__constant.SEPARATOR_SPACE }) } = options;
|
|
30
47
|
return {
|
|
31
48
|
read() {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
49
|
+
return require_read_data_attribute.readDataAttribute(themes, attributeName, {
|
|
50
|
+
element,
|
|
51
|
+
parse
|
|
52
|
+
});
|
|
35
53
|
},
|
|
36
54
|
write(entry) {
|
|
37
|
-
|
|
55
|
+
require_write_data_attribute.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 require_subscribe_data_attribute.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.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 (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 | 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
17
|
* @param options.element - Element to operate on (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
43
|
element?: Element | undefined;
|
|
27
|
-
|
|
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> | null | 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
17
|
* @param options.element - Element to operate on (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
43
|
element?: Element | undefined;
|
|
27
|
-
|
|
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> | null | 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
20
|
* @param options.element - Element to operate on (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 (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 | 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,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,6 +27,9 @@ 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;
|
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,6 +27,9 @@ 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;
|
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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefers-color-scheme-theme-store.cjs","names":["
|
|
1
|
+
{"version":3,"file":"prefers-color-scheme-theme-store.cjs","names":["readPrefersColorSchemeTheme","subscribePrefersColorSchemeTheme"],"sources":["../../../../src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts"],"sourcesContent":["import type { RequiredPick } from 'type-plus'\nimport { readPrefersColorSchemeTheme } from '../../prefers-color-scheme-theme/read-prefers-color-scheme-theme.ts'\nimport { subscribePrefersColorSchemeTheme } from '../../prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.ts'\nimport type { ThemeStore } from '../theme-store.types.ts'\n\ntype PrefersColorSchemeThemes = {\n\tlight: string | readonly string[]\n\tdark: string | readonly string[]\n}\n\n/**\n * Creates a read-only theme store that reads from `prefers-color-scheme`.\n *\n * **Color-scheme specific:** Themes must only include `light` and `dark` keys—this store\n * mirrors the system preference which is always one of these.\n *\n * Returns `ThemeEntry` for `light` or `dark` based on system preference.\n * No write method—the value is controlled by the system.\n *\n * @param themes - Record with `light` and `dark` keys mapping to theme values\n * @returns ThemeStore with read and subscribe only\n *\n * @example\n * ```ts\n * const themes = { light: 'theme-light', dark: 'theme-dark' }\n * const store = prefersColorSchemeThemeStore(themes)\n * store.read() // ThemeEntry for current system preference\n * store.subscribe((entry) => {})\n * ```\n */\nexport function prefersColorSchemeThemeStore<Themes extends PrefersColorSchemeThemes>(\n\tthemes: Themes\n): RequiredPick<ThemeStore<Themes>, 'read' | 'subscribe'> {\n\treturn {\n\t\tread() {\n\t\t\treturn readPrefersColorSchemeTheme(themes)\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\treturn subscribePrefersColorSchemeTheme(themes, handler)\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,6BACf,QACyD;AACzD,QAAO;EACN,OAAO;AACN,UAAOA,oEAA4B,OAAO;;EAE3C,UAAU,SAAS;AAClB,UAAOC,8EAAiC,QAAQ,QAAQ;;EAEzD"}
|