@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.
Files changed (315) hide show
  1. package/dist/react/hooks/use-theme-by-class-name.cjs +1 -5
  2. package/dist/react/hooks/use-theme-by-class-name.cjs.map +1 -1
  3. package/dist/react/hooks/use-theme-by-class-name.d.cts.map +1 -1
  4. package/dist/react/hooks/use-theme-by-class-name.d.mts.map +1 -1
  5. package/dist/react/hooks/use-theme-by-class-name.mjs +1 -5
  6. package/dist/react/hooks/use-theme-by-class-name.mjs.map +1 -1
  7. package/dist/react/hooks/use-theme-by-data-attribute.cjs +1 -6
  8. package/dist/react/hooks/use-theme-by-data-attribute.cjs.map +1 -1
  9. package/dist/react/hooks/use-theme-by-data-attribute.d.cts.map +1 -1
  10. package/dist/react/hooks/use-theme-by-data-attribute.d.mts.map +1 -1
  11. package/dist/react/hooks/use-theme-by-data-attribute.mjs +1 -6
  12. package/dist/react/hooks/use-theme-by-data-attribute.mjs.map +1 -1
  13. package/dist/react/hooks/use-theme-by-local-storage.cjs +1 -5
  14. package/dist/react/hooks/use-theme-by-local-storage.cjs.map +1 -1
  15. package/dist/react/hooks/use-theme-by-local-storage.d.cts.map +1 -1
  16. package/dist/react/hooks/use-theme-by-local-storage.d.mts.map +1 -1
  17. package/dist/react/hooks/use-theme-by-local-storage.mjs +1 -5
  18. package/dist/react/hooks/use-theme-by-local-storage.mjs.map +1 -1
  19. package/dist/theme/_utils/match-attribute-value-to-theme.cjs +29 -0
  20. package/dist/theme/_utils/match-attribute-value-to-theme.cjs.map +1 -0
  21. package/dist/theme/_utils/match-attribute-value-to-theme.mjs +28 -0
  22. package/dist/theme/_utils/match-attribute-value-to-theme.mjs.map +1 -0
  23. package/dist/theme/_utils/parse-stored-theme.cjs +61 -7
  24. package/dist/theme/_utils/parse-stored-theme.cjs.map +1 -1
  25. package/dist/theme/_utils/parse-stored-theme.mjs +61 -7
  26. package/dist/theme/_utils/parse-stored-theme.mjs.map +1 -1
  27. package/dist/theme/_utils/resolve-theme-map-value.cjs +19 -0
  28. package/dist/theme/_utils/resolve-theme-map-value.cjs.map +1 -0
  29. package/dist/theme/_utils/resolve-theme-map-value.mjs +17 -0
  30. package/dist/theme/_utils/resolve-theme-map-value.mjs.map +1 -0
  31. package/dist/theme/class-name/parse-class-name.cjs +32 -0
  32. package/dist/theme/class-name/parse-class-name.cjs.map +1 -0
  33. package/dist/theme/class-name/parse-class-name.d.cts +20 -0
  34. package/dist/theme/class-name/parse-class-name.d.cts.map +1 -0
  35. package/dist/theme/class-name/parse-class-name.d.mts +20 -0
  36. package/dist/theme/class-name/parse-class-name.d.mts.map +1 -0
  37. package/dist/theme/class-name/parse-class-name.mjs +31 -0
  38. package/dist/theme/class-name/parse-class-name.mjs.map +1 -0
  39. package/dist/theme/class-name/read-class-name.cjs +20 -0
  40. package/dist/theme/class-name/read-class-name.cjs.map +1 -0
  41. package/dist/theme/class-name/read-class-name.d.cts +20 -0
  42. package/dist/theme/class-name/read-class-name.d.cts.map +1 -0
  43. package/dist/theme/class-name/read-class-name.d.mts +20 -0
  44. package/dist/theme/class-name/read-class-name.d.mts.map +1 -0
  45. package/dist/theme/class-name/read-class-name.mjs +20 -0
  46. package/dist/theme/class-name/read-class-name.mjs.map +1 -0
  47. package/dist/theme/class-name/stringify-class-name.cjs +31 -0
  48. package/dist/theme/class-name/stringify-class-name.cjs.map +1 -0
  49. package/dist/theme/class-name/stringify-class-name.d.cts +21 -0
  50. package/dist/theme/class-name/stringify-class-name.d.cts.map +1 -0
  51. package/dist/theme/class-name/stringify-class-name.d.mts +21 -0
  52. package/dist/theme/class-name/stringify-class-name.d.mts.map +1 -0
  53. package/dist/theme/class-name/stringify-class-name.mjs +31 -0
  54. package/dist/theme/class-name/stringify-class-name.mjs.map +1 -0
  55. package/dist/theme/class-name/subscribe-class-name.cjs +31 -0
  56. package/dist/theme/class-name/subscribe-class-name.cjs.map +1 -0
  57. package/dist/theme/class-name/subscribe-class-name.d.cts +21 -0
  58. package/dist/theme/class-name/subscribe-class-name.d.cts.map +1 -0
  59. package/dist/theme/class-name/subscribe-class-name.d.mts +21 -0
  60. package/dist/theme/class-name/subscribe-class-name.d.mts.map +1 -0
  61. package/dist/theme/class-name/subscribe-class-name.mjs +31 -0
  62. package/dist/theme/class-name/subscribe-class-name.mjs.map +1 -0
  63. package/dist/theme/class-name/write-class-name.cjs +20 -0
  64. package/dist/theme/class-name/write-class-name.cjs.map +1 -0
  65. package/dist/theme/class-name/write-class-name.d.cts +20 -0
  66. package/dist/theme/class-name/write-class-name.d.cts.map +1 -0
  67. package/dist/theme/class-name/write-class-name.d.mts +20 -0
  68. package/dist/theme/class-name/write-class-name.d.mts.map +1 -0
  69. package/dist/theme/class-name/write-class-name.mjs +20 -0
  70. package/dist/theme/class-name/write-class-name.mjs.map +1 -0
  71. package/dist/theme/cookie/_cookie-utils.cjs +37 -0
  72. package/dist/theme/cookie/_cookie-utils.cjs.map +1 -0
  73. package/dist/theme/cookie/_cookie-utils.mjs +33 -0
  74. package/dist/theme/cookie/_cookie-utils.mjs.map +1 -0
  75. package/dist/theme/cookie/read-cookie-theme.cjs +22 -0
  76. package/dist/theme/cookie/read-cookie-theme.cjs.map +1 -0
  77. package/dist/theme/cookie/read-cookie-theme.d.cts +22 -0
  78. package/dist/theme/cookie/read-cookie-theme.d.cts.map +1 -0
  79. package/dist/theme/cookie/read-cookie-theme.d.mts +22 -0
  80. package/dist/theme/cookie/read-cookie-theme.d.mts.map +1 -0
  81. package/dist/theme/cookie/read-cookie-theme.mjs +22 -0
  82. package/dist/theme/cookie/read-cookie-theme.mjs.map +1 -0
  83. package/dist/theme/cookie/write-cookie-theme.cjs +29 -0
  84. package/dist/theme/cookie/write-cookie-theme.cjs.map +1 -0
  85. package/dist/theme/cookie/write-cookie-theme.d.cts +24 -0
  86. package/dist/theme/cookie/write-cookie-theme.d.cts.map +1 -0
  87. package/dist/theme/cookie/write-cookie-theme.d.mts +24 -0
  88. package/dist/theme/cookie/write-cookie-theme.d.mts.map +1 -0
  89. package/dist/theme/cookie/write-cookie-theme.mjs +29 -0
  90. package/dist/theme/cookie/write-cookie-theme.mjs.map +1 -0
  91. package/dist/theme/data-attribute/_constant.cjs +7 -0
  92. package/dist/theme/data-attribute/_constant.cjs.map +1 -0
  93. package/dist/theme/data-attribute/_constant.mjs +6 -0
  94. package/dist/theme/data-attribute/_constant.mjs.map +1 -0
  95. package/dist/theme/data-attribute/parse-data-attribute.cjs +24 -0
  96. package/dist/theme/data-attribute/parse-data-attribute.cjs.map +1 -0
  97. package/dist/theme/data-attribute/parse-data-attribute.d.cts +21 -0
  98. package/dist/theme/data-attribute/parse-data-attribute.d.cts.map +1 -0
  99. package/dist/theme/data-attribute/parse-data-attribute.d.mts +21 -0
  100. package/dist/theme/data-attribute/parse-data-attribute.d.mts.map +1 -0
  101. package/dist/theme/data-attribute/parse-data-attribute.mjs +24 -0
  102. package/dist/theme/data-attribute/parse-data-attribute.mjs.map +1 -0
  103. package/dist/theme/data-attribute/read-data-attribute.cjs +23 -0
  104. package/dist/theme/data-attribute/read-data-attribute.cjs.map +1 -0
  105. package/dist/theme/data-attribute/read-data-attribute.d.cts +21 -0
  106. package/dist/theme/data-attribute/read-data-attribute.d.cts.map +1 -0
  107. package/dist/theme/data-attribute/read-data-attribute.d.mts +21 -0
  108. package/dist/theme/data-attribute/read-data-attribute.d.mts.map +1 -0
  109. package/dist/theme/data-attribute/read-data-attribute.mjs +23 -0
  110. package/dist/theme/data-attribute/read-data-attribute.mjs.map +1 -0
  111. package/dist/theme/data-attribute/stringify-data-attribute.cjs +33 -0
  112. package/dist/theme/data-attribute/stringify-data-attribute.cjs.map +1 -0
  113. package/dist/theme/data-attribute/stringify-data-attribute.d.cts +23 -0
  114. package/dist/theme/data-attribute/stringify-data-attribute.d.cts.map +1 -0
  115. package/dist/theme/data-attribute/stringify-data-attribute.d.mts +23 -0
  116. package/dist/theme/data-attribute/stringify-data-attribute.d.mts.map +1 -0
  117. package/dist/theme/data-attribute/stringify-data-attribute.mjs +33 -0
  118. package/dist/theme/data-attribute/stringify-data-attribute.mjs.map +1 -0
  119. package/dist/theme/data-attribute/subscribe-data-attribute.cjs +28 -0
  120. package/dist/theme/data-attribute/subscribe-data-attribute.cjs.map +1 -0
  121. package/dist/theme/data-attribute/subscribe-data-attribute.d.cts +22 -0
  122. package/dist/theme/data-attribute/subscribe-data-attribute.d.cts.map +1 -0
  123. package/dist/theme/data-attribute/subscribe-data-attribute.d.mts +22 -0
  124. package/dist/theme/data-attribute/subscribe-data-attribute.d.mts.map +1 -0
  125. package/dist/theme/data-attribute/subscribe-data-attribute.mjs +28 -0
  126. package/dist/theme/data-attribute/subscribe-data-attribute.mjs.map +1 -0
  127. package/dist/theme/data-attribute/write-data-attribute.cjs +30 -0
  128. package/dist/theme/data-attribute/write-data-attribute.cjs.map +1 -0
  129. package/dist/theme/data-attribute/write-data-attribute.d.cts +21 -0
  130. package/dist/theme/data-attribute/write-data-attribute.d.cts.map +1 -0
  131. package/dist/theme/data-attribute/write-data-attribute.d.mts +21 -0
  132. package/dist/theme/data-attribute/write-data-attribute.d.mts.map +1 -0
  133. package/dist/theme/data-attribute/write-data-attribute.mjs +30 -0
  134. package/dist/theme/data-attribute/write-data-attribute.mjs.map +1 -0
  135. package/dist/theme/local-storage/read-local-storage.cjs +22 -0
  136. package/dist/theme/local-storage/read-local-storage.cjs.map +1 -0
  137. package/dist/theme/local-storage/read-local-storage.d.cts +19 -0
  138. package/dist/theme/local-storage/read-local-storage.d.cts.map +1 -0
  139. package/dist/theme/local-storage/read-local-storage.d.mts +19 -0
  140. package/dist/theme/local-storage/read-local-storage.d.mts.map +1 -0
  141. package/dist/theme/local-storage/read-local-storage.mjs +22 -0
  142. package/dist/theme/local-storage/read-local-storage.mjs.map +1 -0
  143. package/dist/theme/local-storage/write-local-storage.cjs +26 -0
  144. package/dist/theme/local-storage/write-local-storage.cjs.map +1 -0
  145. package/dist/theme/local-storage/write-local-storage.d.cts +23 -0
  146. package/dist/theme/local-storage/write-local-storage.d.cts.map +1 -0
  147. package/dist/theme/local-storage/write-local-storage.d.mts +23 -0
  148. package/dist/theme/local-storage/write-local-storage.d.mts.map +1 -0
  149. package/dist/theme/local-storage/write-local-storage.mjs +26 -0
  150. package/dist/theme/local-storage/write-local-storage.mjs.map +1 -0
  151. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.cjs +20 -0
  152. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.cjs.map +1 -0
  153. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.cts +23 -0
  154. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.cts.map +1 -0
  155. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.mts +23 -0
  156. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.d.mts.map +1 -0
  157. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.mjs +20 -0
  158. package/dist/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.mjs.map +1 -0
  159. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.cjs +20 -0
  160. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.cjs.map +1 -0
  161. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.cts +20 -0
  162. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.cts.map +1 -0
  163. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.mts +20 -0
  164. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.d.mts.map +1 -0
  165. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.mjs +20 -0
  166. package/dist/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.mjs.map +1 -0
  167. package/dist/theme/session-storage/read-session-storage.cjs +22 -0
  168. package/dist/theme/session-storage/read-session-storage.cjs.map +1 -0
  169. package/dist/theme/session-storage/read-session-storage.d.cts +19 -0
  170. package/dist/theme/session-storage/read-session-storage.d.cts.map +1 -0
  171. package/dist/theme/session-storage/read-session-storage.d.mts +19 -0
  172. package/dist/theme/session-storage/read-session-storage.d.mts.map +1 -0
  173. package/dist/theme/session-storage/read-session-storage.mjs +22 -0
  174. package/dist/theme/session-storage/read-session-storage.mjs.map +1 -0
  175. package/dist/theme/session-storage/write-session-storage.cjs +26 -0
  176. package/dist/theme/session-storage/write-session-storage.cjs.map +1 -0
  177. package/dist/theme/session-storage/write-session-storage.d.cts +23 -0
  178. package/dist/theme/session-storage/write-session-storage.d.cts.map +1 -0
  179. package/dist/theme/session-storage/write-session-storage.d.mts +23 -0
  180. package/dist/theme/session-storage/write-session-storage.d.mts.map +1 -0
  181. package/dist/theme/session-storage/write-session-storage.mjs +26 -0
  182. package/dist/theme/session-storage/write-session-storage.mjs.map +1 -0
  183. package/dist/theme/theme-entry.types.d.cts +11 -1
  184. package/dist/theme/theme-entry.types.d.cts.map +1 -1
  185. package/dist/theme/theme-entry.types.d.mts +11 -1
  186. package/dist/theme/theme-entry.types.d.mts.map +1 -1
  187. package/dist/theme/theme-map.types.d.cts +11 -3
  188. package/dist/theme/theme-map.types.d.cts.map +1 -1
  189. package/dist/theme/theme-map.types.d.mts +11 -3
  190. package/dist/theme/theme-map.types.d.mts.map +1 -1
  191. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.cjs +21 -18
  192. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.cjs.map +1 -1
  193. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.cts +5 -0
  194. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.cts.map +1 -1
  195. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.mts +5 -0
  196. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.d.mts.map +1 -1
  197. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.mjs +21 -18
  198. package/dist/theme/theme-store/class-name-theme-store/class-name-theme-store.mjs.map +1 -1
  199. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.cjs +18 -36
  200. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.cjs.map +1 -1
  201. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.cts +5 -3
  202. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.cts.map +1 -1
  203. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.mts +5 -3
  204. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.d.mts.map +1 -1
  205. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.mjs +18 -36
  206. package/dist/theme/theme-store/cookie-theme-store/cookie-theme-store.mjs.map +1 -1
  207. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.cjs +39 -19
  208. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.cjs.map +1 -1
  209. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.cts +28 -5
  210. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.cts.map +1 -1
  211. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.mts +28 -5
  212. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.d.mts.map +1 -1
  213. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.mjs +39 -19
  214. package/dist/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.mjs.map +1 -1
  215. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.cjs +13 -12
  216. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.cjs.map +1 -1
  217. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.cts +7 -1
  218. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.cts.map +1 -1
  219. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.mts +7 -1
  220. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.d.mts.map +1 -1
  221. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.mjs +13 -12
  222. package/dist/theme/theme-store/local-storage-theme-store/local-storage-theme-store.mjs.map +1 -1
  223. package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.cjs +4 -5
  224. package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.cjs.map +1 -1
  225. package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.d.cts.map +1 -1
  226. package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.d.mts.map +1 -1
  227. package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.mjs +4 -5
  228. package/dist/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.mjs.map +1 -1
  229. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.cjs +13 -12
  230. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.cjs.map +1 -1
  231. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.cts +7 -1
  232. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.cts.map +1 -1
  233. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.mts +7 -1
  234. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.d.mts.map +1 -1
  235. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.mjs +13 -12
  236. package/dist/theme/theme-store/session-storage-theme-store/session-storage-theme-store.mjs.map +1 -1
  237. package/dist/theme/web-storage/read-web-storage.cjs +20 -0
  238. package/dist/theme/web-storage/read-web-storage.cjs.map +1 -0
  239. package/dist/theme/web-storage/read-web-storage.d.cts +21 -0
  240. package/dist/theme/web-storage/read-web-storage.d.cts.map +1 -0
  241. package/dist/theme/web-storage/read-web-storage.d.mts +21 -0
  242. package/dist/theme/web-storage/read-web-storage.d.mts.map +1 -0
  243. package/dist/theme/web-storage/read-web-storage.mjs +20 -0
  244. package/dist/theme/web-storage/read-web-storage.mjs.map +1 -0
  245. package/dist/theme/web-storage/write-web-storage.cjs +33 -0
  246. package/dist/theme/web-storage/write-web-storage.cjs.map +1 -0
  247. package/dist/theme/web-storage/write-web-storage.d.cts +25 -0
  248. package/dist/theme/web-storage/write-web-storage.d.cts.map +1 -0
  249. package/dist/theme/web-storage/write-web-storage.d.mts +25 -0
  250. package/dist/theme/web-storage/write-web-storage.d.mts.map +1 -0
  251. package/dist/theme/web-storage/write-web-storage.mjs +32 -0
  252. package/dist/theme/web-storage/write-web-storage.mjs.map +1 -0
  253. package/dist/theme.cjs +41 -1
  254. package/dist/theme.d.cts +23 -3
  255. package/dist/theme.d.mts +23 -3
  256. package/dist/theme.mjs +21 -1
  257. package/package.json +1 -1
  258. package/src/react/hooks/use-theme-by-class-name.ts +3 -8
  259. package/src/react/hooks/use-theme-by-data-attribute.ts +3 -10
  260. package/src/react/hooks/use-theme-by-local-storage.ts +3 -9
  261. package/src/testing/theme/theme-result-card.tsx +1 -0
  262. package/src/theme/_utils/match-attribute-value-to-theme.ts +36 -0
  263. package/src/theme/_utils/parse-stored-theme.ts +52 -12
  264. package/src/theme/_utils/resolve-theme-map-value.ts +15 -0
  265. package/src/theme/class-name/parse-class-name.ts +31 -0
  266. package/src/theme/class-name/read-class-name.ts +24 -0
  267. package/src/theme/class-name/stringify-class-name.ts +36 -0
  268. package/src/theme/class-name/subscribe-class-name.ts +39 -0
  269. package/src/theme/class-name/write-class-name.ts +24 -0
  270. package/src/theme/cookie/_cookie-utils.ts +45 -0
  271. package/src/theme/cookie/read-cookie-theme.ts +33 -0
  272. package/src/theme/cookie/write-cookie-theme.ts +48 -0
  273. package/src/theme/data-attribute/_constant.ts +1 -0
  274. package/src/theme/data-attribute/parse-data-attribute.ts +25 -0
  275. package/src/theme/data-attribute/read-data-attribute.ts +29 -0
  276. package/src/theme/data-attribute/stringify-data-attribute.ts +39 -0
  277. package/src/theme/data-attribute/subscribe-data-attribute.ts +39 -0
  278. package/src/theme/data-attribute/write-data-attribute.ts +40 -0
  279. package/src/theme/local-storage/read-local-storage.ts +23 -0
  280. package/src/theme/local-storage/write-local-storage.ts +31 -0
  281. package/src/theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.ts +30 -0
  282. package/src/theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.ts +24 -0
  283. package/src/theme/session-storage/read-session-storage.ts +23 -0
  284. package/src/theme/session-storage/write-session-storage.ts +31 -0
  285. package/src/theme/theme-entry.types.ts +19 -0
  286. package/src/theme/theme-map.types.ts +9 -2
  287. package/src/theme/theme-store/class-name-theme-store/class-name-theme-store.ts +19 -25
  288. package/src/theme/theme-store/cookie-theme-store/cookie-theme-store.ts +18 -63
  289. package/src/theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.ts +41 -28
  290. package/src/theme/theme-store/local-storage-theme-store/local-storage-theme-store.ts +17 -20
  291. package/src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts +4 -5
  292. package/src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts +17 -20
  293. package/src/theme/web-storage/read-web-storage.ts +22 -0
  294. package/src/theme/web-storage/write-web-storage.ts +46 -0
  295. package/src/theme.ts +20 -0
  296. package/dist/theme/class-name/apply-theme-to-class-name.cjs +0 -23
  297. package/dist/theme/class-name/apply-theme-to-class-name.cjs.map +0 -1
  298. package/dist/theme/class-name/apply-theme-to-class-name.mjs +0 -22
  299. package/dist/theme/class-name/apply-theme-to-class-name.mjs.map +0 -1
  300. package/dist/theme/class-name/resolve-theme-from-class-name.cjs +0 -23
  301. package/dist/theme/class-name/resolve-theme-from-class-name.cjs.map +0 -1
  302. package/dist/theme/class-name/resolve-theme-from-class-name.mjs +0 -22
  303. package/dist/theme/class-name/resolve-theme-from-class-name.mjs.map +0 -1
  304. package/dist/theme/data-attribute/apply-theme-to-data-attribute.cjs +0 -23
  305. package/dist/theme/data-attribute/apply-theme-to-data-attribute.cjs.map +0 -1
  306. package/dist/theme/data-attribute/apply-theme-to-data-attribute.mjs +0 -22
  307. package/dist/theme/data-attribute/apply-theme-to-data-attribute.mjs.map +0 -1
  308. package/dist/theme/data-attribute/resolve-theme-from-data-attribute.cjs +0 -23
  309. package/dist/theme/data-attribute/resolve-theme-from-data-attribute.cjs.map +0 -1
  310. package/dist/theme/data-attribute/resolve-theme-from-data-attribute.mjs +0 -22
  311. package/dist/theme/data-attribute/resolve-theme-from-data-attribute.mjs.map +0 -1
  312. package/src/theme/class-name/apply-theme-to-class-name.ts +0 -26
  313. package/src/theme/class-name/resolve-theme-from-class-name.ts +0 -22
  314. package/src/theme/data-attribute/apply-theme-to-data-attribute.ts +0 -27
  315. package/src/theme/data-attribute/resolve-theme-from-data-attribute.ts +0 -23
@@ -1 +1 @@
1
- {"version":3,"file":"prefers-color-scheme-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts"],"sourcesContent":[],"mappings":";;;;KAMK,wBAAA;;EAAA,IAAA,EAAA,MAAA,GAAA,SAAA,MAAwB,EAAA;AAyB7B,CAAA;;;;;;;;;;;;;;;;;;;;;iBAAgB,4CAA4C,kCACnD,SACN,aAAa,WAAW"}
1
+ {"version":3,"file":"prefers-color-scheme-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts"],"sourcesContent":[],"mappings":";;;;KAKK,wBAAA;;EAAA,IAAA,EAAA,MAAA,GAAA,SAAA,MAAwB,EAAA;AAyB7B,CAAA;;;;;;;;;;;;;;;;;;;;;iBAAgB,4CAA4C,kCACnD,SACN,aAAa,WAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"prefers-color-scheme-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts"],"sourcesContent":[],"mappings":";;;;KAMK,wBAAA;;EAAA,IAAA,EAAA,MAAA,GAAA,SAAA,MAAwB,EAAA;AAyB7B,CAAA;;;;;;;;;;;;;;;;;;;;;iBAAgB,4CAA4C,kCACnD,SACN,aAAa,WAAW"}
1
+ {"version":3,"file":"prefers-color-scheme-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts"],"sourcesContent":[],"mappings":";;;;KAKK,wBAAA;;EAAA,IAAA,EAAA,MAAA,GAAA,SAAA,MAAwB,EAAA;AAyB7B,CAAA;;;;;;;;;;;;;;;;;;;;;iBAAgB,4CAA4C,kCACnD,SACN,aAAa,WAAW"}
@@ -1,6 +1,5 @@
1
- import { getPrefersColorScheme } from "../../../color-scheme/get-prefers-color-scheme.mjs";
2
- import { observePrefersColorScheme } from "../../../color-scheme/observe-prefers-color-scheme.mjs";
3
- import { themeEntry } from "../../theme-entry.mjs";
1
+ import { readPrefersColorSchemeTheme } from "../../prefers-color-scheme-theme/read-prefers-color-scheme-theme.mjs";
2
+ import { subscribePrefersColorSchemeTheme } from "../../prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.mjs";
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 @@ import { themeEntry } from "../../theme-entry.mjs";
26
25
  function prefersColorSchemeThemeStore(themes) {
27
26
  return {
28
27
  read() {
29
- return themeEntry(themes, getPrefersColorScheme());
28
+ return readPrefersColorSchemeTheme(themes);
30
29
  },
31
30
  subscribe(handler) {
32
- return observePrefersColorScheme((scheme) => handler(themeEntry(themes, scheme)));
31
+ return subscribePrefersColorSchemeTheme(themes, handler);
33
32
  }
34
33
  };
35
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prefers-color-scheme-theme-store.mjs","names":[],"sources":["../../../../src/theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.ts"],"sourcesContent":["import type { RequiredPick } from 'type-plus'\nimport { getPrefersColorScheme } from '../../../color-scheme/get-prefers-color-scheme.ts'\nimport { observePrefersColorScheme } from '../../../color-scheme/observe-prefers-color-scheme.ts'\nimport { themeEntry } from '../../theme-entry.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 themeEntry(themes, getPrefersColorScheme())\n\t\t},\n\t\tsubscribe(handler) {\n\t\t\treturn observePrefersColorScheme((scheme) => handler(themeEntry(themes, scheme)))\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,SAAgB,6BACf,QACyD;AACzD,QAAO;EACN,OAAO;AACN,UAAO,WAAW,QAAQ,uBAAuB,CAAC;;EAEnD,UAAU,SAAS;AAClB,UAAO,2BAA2B,WAAW,QAAQ,WAAW,QAAQ,OAAO,CAAC,CAAC;;EAElF"}
1
+ {"version":3,"file":"prefers-color-scheme-theme-store.mjs","names":[],"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,UAAO,4BAA4B,OAAO;;EAE3C,UAAU,SAAS;AAClB,UAAO,iCAAiC,QAAQ,QAAQ;;EAEzD"}
@@ -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 require_parse_stored_theme = require('../../_utils/parse-stored-theme.cjs');
2
+ const require_read_session_storage = require('../../session-storage/read-session-storage.cjs');
3
+ const require_write_session_storage = require('../../session-storage/write-session-storage.cjs');
4
4
 
5
5
  //#region src/theme/theme-store/session-storage-theme-store/session-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 - sessionStorage 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 sessionStorageThemeStore(themes, options) {
26
- const { storageKey } = options;
27
- if (typeof window === "undefined" || !window.sessionStorage) return require_dummy_theme_store.dummyThemeStore;
29
+ const { storageKey, parse, stringify, onError } = options;
30
+ if (!window?.sessionStorage) 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
- const theme = require_parse_stored_theme.parseStoredTheme(themes, window.sessionStorage.getItem(storageKey));
32
- if (theme === void 0) return void 0;
33
- return require_theme_entry.themeEntry(themes, theme);
34
+ return require_read_session_storage.readSessionStorage(themes, storageKey, { parse });
34
35
  }
35
36
  function notify() {
36
37
  const result = read();
@@ -42,11 +43,11 @@ function sessionStorageThemeStore(themes, options) {
42
43
  return {
43
44
  read,
44
45
  write(entry) {
45
- try {
46
- if (entry === void 0) window.sessionStorage.removeItem(storageKey);
47
- else window.sessionStorage.setItem(storageKey, JSON.stringify(entry));
48
- notify();
49
- } catch {}
46
+ require_write_session_storage.writeSessionStorage(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":"session-storage-theme-store.cjs","names":["dummyThemeStore","lastNotifiedKey: keyof Themes | undefined","parseStoredTheme","themeEntry"],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":["import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'\nimport { parseStoredTheme } from '../../_utils/parse-stored-theme.ts'\nimport { 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 * Creates a theme store backed by sessionStorage.\n *\n * Persists per tab; cross-tab sync via StorageEvent when available.\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 - sessionStorage key\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' }\n * const store = sessionStorageThemeStore(themes, { storageKey: 'theme' })\n * store.read() // returns themeResult from sessionStorage\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function sessionStorageThemeStore<Themes extends ThemeMap>(\n\tthemes: Themes,\n\toptions: { storageKey: string }\n) {\n\tconst { storageKey } = options\n\n\tif (typeof window === 'undefined' || !window.sessionStorage) {\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\tconst stored = window.sessionStorage.getItem(storageKey)\n\t\tconst theme = parseStoredTheme(themes, stored)\n\t\tif (theme === undefined) return undefined\n\t\treturn themeEntry(themes, theme)\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\ttry {\n\t\t\t\tif (entry === undefined) {\n\t\t\t\t\twindow.sessionStorage.removeItem(storageKey)\n\t\t\t\t} else {\n\t\t\t\t\twindow.sessionStorage.setItem(storageKey, JSON.stringify(entry))\n\t\t\t\t}\n\t\t\t\tnotify()\n\t\t\t} catch {\n\t\t\t\t// Ignore quota or other errors\n\t\t\t}\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.sessionStorage) 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":";;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,yBACf,QACA,SACC;CACD,MAAM,EAAE,eAAe;AAEvB,KAAI,OAAO,WAAW,eAAe,CAAC,OAAO,eAC5C,QAAOA;CAGR,MAAM,2BAAW,IAAI,KAAsD;CAC3E,IAAIC,kBAA4C,MAAM,EAAE,SAAS;CAEjE,SAAS,OAAO;EAEf,MAAM,QAAQC,4CAAiB,QADhB,OAAO,eAAe,QAAQ,WAAW,CACV;AAC9C,MAAI,UAAU,OAAW,QAAO;AAChC,SAAOC,+BAAW,QAAQ,MAAM;;CAGjC,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,OAAI;AACH,QAAI,UAAU,OACb,QAAO,eAAe,WAAW,WAAW;QAE5C,QAAO,eAAe,QAAQ,YAAY,KAAK,UAAU,MAAM,CAAC;AAEjE,YAAQ;WACD;;EAIT,UAAU,SAAS;AAClB,YAAS,IAAI,QAAQ;GAErB,MAAM,aAAa,MAAoB;AACtC,QAAI,EAAE,QAAQ,cAAc,EAAE,gBAAgB,OAAO,eAAgB,SAAQ;;AAE9E,UAAO,iBAAiB,WAAW,UAAU;AAE7C,gBAAa;AACZ,aAAS,OAAO,QAAQ;AACxB,WAAO,oBAAoB,WAAW,UAAU;;;EAGlD"}
1
+ {"version":3,"file":"session-storage-theme-store.cjs","names":["dummyThemeStore","lastNotifiedKey: keyof Themes | undefined","readSessionStorage"],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":["import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'\nimport { readSessionStorage } from '../../session-storage/read-session-storage.ts'\nimport { writeSessionStorage } from '../../session-storage/write-session-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 sessionStorage.\n *\n * Persists per tab; cross-tab sync via StorageEvent when available.\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 - sessionStorage 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 = sessionStorageThemeStore(themes, { storageKey: 'theme' })\n * store.read() // returns themeResult from sessionStorage\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function sessionStorageThemeStore<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?.sessionStorage) {\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 readSessionStorage(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\twriteSessionStorage(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.sessionStorage) 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,yBACf,QACA,SAMC;CACD,MAAM,EAAE,YAAY,OAAO,WAAW,YAAY;AAElD,KAAI,CAAC,QAAQ,eACZ,QAAOA;CAGR,MAAM,2BAAW,IAAI,KAAsD;CAC3E,IAAIC,kBAA4C,MAAM,EAAE,SAAS;CAEjE,SAAS,OAAO;AACf,SAAOC,gDAAmB,QAAQ,YAAY,EAAE,OAAO,CAAC;;CAGzD,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,qDAAoB,QAAQ,YAAY,OAAO;IAAE;IAAW;IAAS,CAAC;AACtE,WAAQ;;EAET,UAAU,SAAS;AAClB,YAAS,IAAI,QAAQ;GAErB,MAAM,aAAa,MAAoB;AACtC,QAAI,EAAE,QAAQ,cAAc,EAAE,gBAAgB,OAAO,eAAgB,SAAQ;;AAE9E,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/session-storage-theme-store/session-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 - sessionStorage 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 sessionStorageThemeStore<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;
@@ -1 +1 @@
1
- {"version":3,"file":"session-storage-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA0BA;;;;;;;;;;;;;;;;;iBAAgB,wCAAwC,kBAC/C"}
1
+ {"version":3,"file":"session-storage-theme-store.d.cts","names":[],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BA;;;;;;;;;;;;;;;;;;;;iBAAgB,wCAAwC,kBAC/C;;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/session-storage-theme-store/session-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 - sessionStorage 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 sessionStorageThemeStore<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;
@@ -1 +1 @@
1
- {"version":3,"file":"session-storage-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA0BA;;;;;;;;;;;;;;;;;iBAAgB,wCAAwC,kBAC/C"}
1
+ {"version":3,"file":"session-storage-theme-store.d.mts","names":[],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BA;;;;;;;;;;;;;;;;;;;;iBAAgB,wCAAwC,kBAC/C;;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 { parseStoredTheme } from "../../_utils/parse-stored-theme.mjs";
2
+ import { readSessionStorage } from "../../session-storage/read-session-storage.mjs";
3
+ import { writeSessionStorage } from "../../session-storage/write-session-storage.mjs";
4
4
 
5
5
  //#region src/theme/theme-store/session-storage-theme-store/session-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 - sessionStorage 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 sessionStorageThemeStore(themes, options) {
26
- const { storageKey } = options;
27
- if (typeof window === "undefined" || !window.sessionStorage) return dummyThemeStore;
29
+ const { storageKey, parse, stringify, onError } = options;
30
+ if (!window?.sessionStorage) return dummyThemeStore;
28
31
  const handlers = /* @__PURE__ */ new Set();
29
32
  let lastNotifiedKey = read()?.theme ?? void 0;
30
33
  function read() {
31
- const theme = parseStoredTheme(themes, window.sessionStorage.getItem(storageKey));
32
- if (theme === void 0) return void 0;
33
- return themeEntry(themes, theme);
34
+ return readSessionStorage(themes, storageKey, { parse });
34
35
  }
35
36
  function notify() {
36
37
  const result = read();
@@ -42,11 +43,11 @@ function sessionStorageThemeStore(themes, options) {
42
43
  return {
43
44
  read,
44
45
  write(entry) {
45
- try {
46
- if (entry === void 0) window.sessionStorage.removeItem(storageKey);
47
- else window.sessionStorage.setItem(storageKey, JSON.stringify(entry));
48
- notify();
49
- } catch {}
46
+ writeSessionStorage(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":"session-storage-theme-store.mjs","names":["lastNotifiedKey: keyof Themes | undefined"],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":["import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'\nimport { parseStoredTheme } from '../../_utils/parse-stored-theme.ts'\nimport { 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 * Creates a theme store backed by sessionStorage.\n *\n * Persists per tab; cross-tab sync via StorageEvent when available.\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 - sessionStorage key\n * @returns ThemeStore\n *\n * @example\n * ```ts\n * const themes = { current: 'theme-current', grayscale: 'theme-grayscale' }\n * const store = sessionStorageThemeStore(themes, { storageKey: 'theme' })\n * store.read() // returns themeResult from sessionStorage\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function sessionStorageThemeStore<Themes extends ThemeMap>(\n\tthemes: Themes,\n\toptions: { storageKey: string }\n) {\n\tconst { storageKey } = options\n\n\tif (typeof window === 'undefined' || !window.sessionStorage) {\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\tconst stored = window.sessionStorage.getItem(storageKey)\n\t\tconst theme = parseStoredTheme(themes, stored)\n\t\tif (theme === undefined) return undefined\n\t\treturn themeEntry(themes, theme)\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\ttry {\n\t\t\t\tif (entry === undefined) {\n\t\t\t\t\twindow.sessionStorage.removeItem(storageKey)\n\t\t\t\t} else {\n\t\t\t\t\twindow.sessionStorage.setItem(storageKey, JSON.stringify(entry))\n\t\t\t\t}\n\t\t\t\tnotify()\n\t\t\t} catch {\n\t\t\t\t// Ignore quota or other errors\n\t\t\t}\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.sessionStorage) 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":";;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,yBACf,QACA,SACC;CACD,MAAM,EAAE,eAAe;AAEvB,KAAI,OAAO,WAAW,eAAe,CAAC,OAAO,eAC5C,QAAO;CAGR,MAAM,2BAAW,IAAI,KAAsD;CAC3E,IAAIA,kBAA4C,MAAM,EAAE,SAAS;CAEjE,SAAS,OAAO;EAEf,MAAM,QAAQ,iBAAiB,QADhB,OAAO,eAAe,QAAQ,WAAW,CACV;AAC9C,MAAI,UAAU,OAAW,QAAO;AAChC,SAAO,WAAW,QAAQ,MAAM;;CAGjC,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,OAAI;AACH,QAAI,UAAU,OACb,QAAO,eAAe,WAAW,WAAW;QAE5C,QAAO,eAAe,QAAQ,YAAY,KAAK,UAAU,MAAM,CAAC;AAEjE,YAAQ;WACD;;EAIT,UAAU,SAAS;AAClB,YAAS,IAAI,QAAQ;GAErB,MAAM,aAAa,MAAoB;AACtC,QAAI,EAAE,QAAQ,cAAc,EAAE,gBAAgB,OAAO,eAAgB,SAAQ;;AAE9E,UAAO,iBAAiB,WAAW,UAAU;AAE7C,gBAAa;AACZ,aAAS,OAAO,QAAQ;AACxB,WAAO,oBAAoB,WAAW,UAAU;;;EAGlD"}
1
+ {"version":3,"file":"session-storage-theme-store.mjs","names":["lastNotifiedKey: keyof Themes | undefined"],"sources":["../../../../src/theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts"],"sourcesContent":["import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'\nimport { readSessionStorage } from '../../session-storage/read-session-storage.ts'\nimport { writeSessionStorage } from '../../session-storage/write-session-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 sessionStorage.\n *\n * Persists per tab; cross-tab sync via StorageEvent when available.\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 - sessionStorage 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 = sessionStorageThemeStore(themes, { storageKey: 'theme' })\n * store.read() // returns themeResult from sessionStorage\n * store.write(themeEntry(themes, 'grayscale'))\n * store.subscribe((themeResult) => {})\n * ```\n */\nexport function sessionStorageThemeStore<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?.sessionStorage) {\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 readSessionStorage(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\twriteSessionStorage(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.sessionStorage) 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,yBACf,QACA,SAMC;CACD,MAAM,EAAE,YAAY,OAAO,WAAW,YAAY;AAElD,KAAI,CAAC,QAAQ,eACZ,QAAO;CAGR,MAAM,2BAAW,IAAI,KAAsD;CAC3E,IAAIA,kBAA4C,MAAM,EAAE,SAAS;CAEjE,SAAS,OAAO;AACf,SAAO,mBAAmB,QAAQ,YAAY,EAAE,OAAO,CAAC;;CAGzD,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,uBAAoB,QAAQ,YAAY,OAAO;IAAE;IAAW;IAAS,CAAC;AACtE,WAAQ;;EAET,UAAU,SAAS;AAClB,YAAS,IAAI,QAAQ;GAErB,MAAM,aAAa,MAAoB;AACtC,QAAI,EAAE,QAAQ,cAAc,EAAE,gBAAgB,OAAO,eAAgB,SAAQ;;AAE9E,UAAO,iBAAiB,WAAW,UAAU;AAE7C,gBAAa;AACZ,aAAS,OAAO,QAAQ;AACxB,WAAO,oBAAoB,WAAW,UAAU;;;EAGlD"}
@@ -0,0 +1,20 @@
1
+ const require_parse_stored_theme = require('../_utils/parse-stored-theme.cjs');
2
+
3
+ //#region src/theme/web-storage/read-web-storage.ts
4
+ /**
5
+ * Reads a theme entry from a web storage (localStorage or sessionStorage).
6
+ *
7
+ * @param themes - Record mapping theme keys to values (for validation)
8
+ * @param storageKey - Storage key to read from
9
+ * @param options.storage - Storage object (localStorage or sessionStorage)
10
+ * @param options.parse - Custom parser (default: parseStoredTheme)
11
+ * @returns ThemeEntry if found, undefined otherwise. Returns undefined when storage is unavailable (e.g. SSR).
12
+ */
13
+ function readWebStorage(themes, storageKey, options) {
14
+ const { storage, parse = require_parse_stored_theme.parseStoredTheme } = options;
15
+ return parse(themes, storage.getItem(storageKey) ?? void 0);
16
+ }
17
+
18
+ //#endregion
19
+ exports.readWebStorage = readWebStorage;
20
+ //# sourceMappingURL=read-web-storage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-web-storage.cjs","names":["parseStoredTheme"],"sources":["../../../src/theme/web-storage/read-web-storage.ts"],"sourcesContent":["import { parseStoredTheme } from '../_utils/parse-stored-theme.ts'\nimport type { ParseStoredTheme, ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Reads a theme entry from a web storage (localStorage or sessionStorage).\n *\n * @param themes - Record mapping theme keys to values (for validation)\n * @param storageKey - Storage key to read from\n * @param options.storage - Storage object (localStorage or sessionStorage)\n * @param options.parse - Custom parser (default: parseStoredTheme)\n * @returns ThemeEntry if found, undefined otherwise. Returns undefined when storage is unavailable (e.g. SSR).\n */\nexport function readWebStorage<Themes extends ThemeMap>(\n\tthemes: Themes,\n\tstorageKey: string,\n\toptions: { storage: Storage; parse?: ParseStoredTheme<Themes> | undefined }\n): ThemeEntry<Themes> | undefined {\n\tconst { storage, parse = parseStoredTheme } = options\n\tconst stored = storage.getItem(storageKey)\n\treturn parse(themes, stored ?? undefined)\n}\n"],"mappings":";;;;;;;;;;;;AAaA,SAAgB,eACf,QACA,YACA,SACiC;CACjC,MAAM,EAAE,SAAS,QAAQA,gDAAqB;AAE9C,QAAO,MAAM,QADE,QAAQ,QAAQ,WAAW,IACX,OAAU"}
@@ -0,0 +1,21 @@
1
+ import { ThemeMap } from "../theme-map.types.cjs";
2
+ import { ParseStoredTheme, ThemeEntry } from "../theme-entry.types.cjs";
3
+
4
+ //#region src/theme/web-storage/read-web-storage.d.ts
5
+
6
+ /**
7
+ * Reads a theme entry from a web storage (localStorage or sessionStorage).
8
+ *
9
+ * @param themes - Record mapping theme keys to values (for validation)
10
+ * @param storageKey - Storage key to read from
11
+ * @param options.storage - Storage object (localStorage or sessionStorage)
12
+ * @param options.parse - Custom parser (default: parseStoredTheme)
13
+ * @returns ThemeEntry if found, undefined otherwise. Returns undefined when storage is unavailable (e.g. SSR).
14
+ */
15
+ declare function readWebStorage<Themes extends ThemeMap>(themes: Themes, storageKey: string, options: {
16
+ storage: Storage;
17
+ parse?: ParseStoredTheme<Themes> | undefined;
18
+ }): ThemeEntry<Themes> | undefined;
19
+ //#endregion
20
+ export { readWebStorage };
21
+ //# sourceMappingURL=read-web-storage.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-web-storage.d.cts","names":[],"sources":["../../../src/theme/web-storage/read-web-storage.ts"],"sourcesContent":[],"mappings":";;;;;;;AAaA;;;;;;;AAIG,iBAJa,cAIb,CAAA,eAJ2C,QAI3C,CAAA,CAAA,MAAA,EAHM,MAGN,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA;EAAU,OAAA,EADQ,OACR;UADyB,iBAAiB;IACpD,WAAW"}
@@ -0,0 +1,21 @@
1
+ import { ThemeMap } from "../theme-map.types.mjs";
2
+ import { ParseStoredTheme, ThemeEntry } from "../theme-entry.types.mjs";
3
+
4
+ //#region src/theme/web-storage/read-web-storage.d.ts
5
+
6
+ /**
7
+ * Reads a theme entry from a web storage (localStorage or sessionStorage).
8
+ *
9
+ * @param themes - Record mapping theme keys to values (for validation)
10
+ * @param storageKey - Storage key to read from
11
+ * @param options.storage - Storage object (localStorage or sessionStorage)
12
+ * @param options.parse - Custom parser (default: parseStoredTheme)
13
+ * @returns ThemeEntry if found, undefined otherwise. Returns undefined when storage is unavailable (e.g. SSR).
14
+ */
15
+ declare function readWebStorage<Themes extends ThemeMap>(themes: Themes, storageKey: string, options: {
16
+ storage: Storage;
17
+ parse?: ParseStoredTheme<Themes> | undefined;
18
+ }): ThemeEntry<Themes> | undefined;
19
+ //#endregion
20
+ export { readWebStorage };
21
+ //# sourceMappingURL=read-web-storage.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-web-storage.d.mts","names":[],"sources":["../../../src/theme/web-storage/read-web-storage.ts"],"sourcesContent":[],"mappings":";;;;;;;AAaA;;;;;;;AAIG,iBAJa,cAIb,CAAA,eAJ2C,QAI3C,CAAA,CAAA,MAAA,EAHM,MAGN,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA;EAAU,OAAA,EADQ,OACR;UADyB,iBAAiB;IACpD,WAAW"}
@@ -0,0 +1,20 @@
1
+ import { parseStoredTheme } from "../_utils/parse-stored-theme.mjs";
2
+
3
+ //#region src/theme/web-storage/read-web-storage.ts
4
+ /**
5
+ * Reads a theme entry from a web storage (localStorage or sessionStorage).
6
+ *
7
+ * @param themes - Record mapping theme keys to values (for validation)
8
+ * @param storageKey - Storage key to read from
9
+ * @param options.storage - Storage object (localStorage or sessionStorage)
10
+ * @param options.parse - Custom parser (default: parseStoredTheme)
11
+ * @returns ThemeEntry if found, undefined otherwise. Returns undefined when storage is unavailable (e.g. SSR).
12
+ */
13
+ function readWebStorage(themes, storageKey, options) {
14
+ const { storage, parse = parseStoredTheme } = options;
15
+ return parse(themes, storage.getItem(storageKey) ?? void 0);
16
+ }
17
+
18
+ //#endregion
19
+ export { readWebStorage };
20
+ //# sourceMappingURL=read-web-storage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-web-storage.mjs","names":[],"sources":["../../../src/theme/web-storage/read-web-storage.ts"],"sourcesContent":["import { parseStoredTheme } from '../_utils/parse-stored-theme.ts'\nimport type { ParseStoredTheme, ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Reads a theme entry from a web storage (localStorage or sessionStorage).\n *\n * @param themes - Record mapping theme keys to values (for validation)\n * @param storageKey - Storage key to read from\n * @param options.storage - Storage object (localStorage or sessionStorage)\n * @param options.parse - Custom parser (default: parseStoredTheme)\n * @returns ThemeEntry if found, undefined otherwise. Returns undefined when storage is unavailable (e.g. SSR).\n */\nexport function readWebStorage<Themes extends ThemeMap>(\n\tthemes: Themes,\n\tstorageKey: string,\n\toptions: { storage: Storage; parse?: ParseStoredTheme<Themes> | undefined }\n): ThemeEntry<Themes> | undefined {\n\tconst { storage, parse = parseStoredTheme } = options\n\tconst stored = storage.getItem(storageKey)\n\treturn parse(themes, stored ?? undefined)\n}\n"],"mappings":";;;;;;;;;;;;AAaA,SAAgB,eACf,QACA,YACA,SACiC;CACjC,MAAM,EAAE,SAAS,QAAQ,qBAAqB;AAE9C,QAAO,MAAM,QADE,QAAQ,QAAQ,WAAW,IACX,OAAU"}
@@ -0,0 +1,33 @@
1
+
2
+ //#region src/theme/web-storage/write-web-storage.ts
3
+ function defaultStringify(_themes, _existing, entry) {
4
+ return entry === void 0 ? "" : JSON.stringify(entry);
5
+ }
6
+ /**
7
+ * Writes a theme entry to a web storage (localStorage or sessionStorage).
8
+ *
9
+ * Performs setItem/removeItem only. Does not notify subscribers; the store must call notify() after this.
10
+ *
11
+ * @param themes - Record mapping theme keys to values (used by stringify)
12
+ * @param storageKey - Storage key to write to
13
+ * @param entry - Theme entry to write, or undefined to remove
14
+ * @param options.storage - Storage object (localStorage or sessionStorage)
15
+ * @param options.stringify - Custom serializer (default: JSON.stringify)
16
+ * @param options.onError - Optional callback invoked when setItem/removeItem throws
17
+ */
18
+ function writeWebStorage(themes, storageKey, entry, options) {
19
+ const { storage, stringify = defaultStringify, onError } = options;
20
+ try {
21
+ if (entry === void 0) storage.removeItem(storageKey);
22
+ else {
23
+ const value = stringify(themes, storage.getItem(storageKey) ?? void 0, entry);
24
+ storage.setItem(storageKey, value);
25
+ }
26
+ } catch (error) {
27
+ onError?.(error);
28
+ }
29
+ }
30
+
31
+ //#endregion
32
+ exports.writeWebStorage = writeWebStorage;
33
+ //# sourceMappingURL=write-web-storage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-web-storage.cjs","names":[],"sources":["../../../src/theme/web-storage/write-web-storage.ts"],"sourcesContent":["import type { StringifyStoredTheme, ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\nfunction defaultStringify<Themes extends ThemeMap>(\n\t_themes: Themes,\n\t_existing: string | undefined,\n\tentry: ThemeEntry<Themes> | undefined\n): string {\n\treturn entry === undefined ? '' : JSON.stringify(entry)\n}\n\n/**\n * Writes a theme entry to a web storage (localStorage or sessionStorage).\n *\n * Performs setItem/removeItem only. Does not notify subscribers; the store must call notify() after this.\n *\n * @param themes - Record mapping theme keys to values (used by stringify)\n * @param storageKey - Storage key to write to\n * @param entry - Theme entry to write, or undefined to remove\n * @param options.storage - Storage object (localStorage or sessionStorage)\n * @param options.stringify - Custom serializer (default: JSON.stringify)\n * @param options.onError - Optional callback invoked when setItem/removeItem throws\n */\nexport function writeWebStorage<Themes extends ThemeMap>(\n\tthemes: Themes,\n\tstorageKey: string,\n\tentry: ThemeEntry<Themes> | undefined,\n\toptions: {\n\t\tstorage: Storage\n\t\tstringify?: StringifyStoredTheme<Themes> | undefined\n\t\tonError?: ((error: unknown) => void) | undefined\n\t}\n): void {\n\tconst { storage, stringify = defaultStringify, onError } = options\n\ttry {\n\t\tif (entry === undefined) {\n\t\t\tstorage.removeItem(storageKey)\n\t\t} else {\n\t\t\tconst existing = storage.getItem(storageKey) ?? undefined\n\t\t\tconst value = stringify(themes, existing, entry)\n\t\t\tstorage.setItem(storageKey, value)\n\t\t}\n\t} catch (error) {\n\t\tonError?.(error)\n\t}\n}\n"],"mappings":";;AAGA,SAAS,iBACR,SACA,WACA,OACS;AACT,QAAO,UAAU,SAAY,KAAK,KAAK,UAAU,MAAM;;;;;;;;;;;;;;AAexD,SAAgB,gBACf,QACA,YACA,OACA,SAKO;CACP,MAAM,EAAE,SAAS,YAAY,kBAAkB,YAAY;AAC3D,KAAI;AACH,MAAI,UAAU,OACb,SAAQ,WAAW,WAAW;OACxB;GAEN,MAAM,QAAQ,UAAU,QADP,QAAQ,QAAQ,WAAW,IAAI,QACN,MAAM;AAChD,WAAQ,QAAQ,YAAY,MAAM;;UAE3B,OAAO;AACf,YAAU,MAAM"}
@@ -0,0 +1,25 @@
1
+ import { ThemeMap } from "../theme-map.types.cjs";
2
+ import { StringifyStoredTheme, ThemeEntry } from "../theme-entry.types.cjs";
3
+
4
+ //#region src/theme/web-storage/write-web-storage.d.ts
5
+
6
+ /**
7
+ * Writes a theme entry to a web storage (localStorage or sessionStorage).
8
+ *
9
+ * Performs setItem/removeItem only. Does not notify subscribers; the store must call notify() after this.
10
+ *
11
+ * @param themes - Record mapping theme keys to values (used by stringify)
12
+ * @param storageKey - Storage key to write to
13
+ * @param entry - Theme entry to write, or undefined to remove
14
+ * @param options.storage - Storage object (localStorage or sessionStorage)
15
+ * @param options.stringify - Custom serializer (default: JSON.stringify)
16
+ * @param options.onError - Optional callback invoked when setItem/removeItem throws
17
+ */
18
+ declare function writeWebStorage<Themes extends ThemeMap>(themes: Themes, storageKey: string, entry: ThemeEntry<Themes> | undefined, options: {
19
+ storage: Storage;
20
+ stringify?: StringifyStoredTheme<Themes> | undefined;
21
+ onError?: ((error: unknown) => void) | undefined;
22
+ }): void;
23
+ //#endregion
24
+ export { writeWebStorage };
25
+ //# sourceMappingURL=write-web-storage.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-web-storage.d.cts","names":[],"sources":["../../../src/theme/web-storage/write-web-storage.ts"],"sourcesContent":[],"mappings":";;;;;;;AAuBA;;;;;;;;;;iBAAgB,+BAA+B,kBACtC,mCAED,WAAW;WAER;cACG,qBAAqB"}
@@ -0,0 +1,25 @@
1
+ import { ThemeMap } from "../theme-map.types.mjs";
2
+ import { StringifyStoredTheme, ThemeEntry } from "../theme-entry.types.mjs";
3
+
4
+ //#region src/theme/web-storage/write-web-storage.d.ts
5
+
6
+ /**
7
+ * Writes a theme entry to a web storage (localStorage or sessionStorage).
8
+ *
9
+ * Performs setItem/removeItem only. Does not notify subscribers; the store must call notify() after this.
10
+ *
11
+ * @param themes - Record mapping theme keys to values (used by stringify)
12
+ * @param storageKey - Storage key to write to
13
+ * @param entry - Theme entry to write, or undefined to remove
14
+ * @param options.storage - Storage object (localStorage or sessionStorage)
15
+ * @param options.stringify - Custom serializer (default: JSON.stringify)
16
+ * @param options.onError - Optional callback invoked when setItem/removeItem throws
17
+ */
18
+ declare function writeWebStorage<Themes extends ThemeMap>(themes: Themes, storageKey: string, entry: ThemeEntry<Themes> | undefined, options: {
19
+ storage: Storage;
20
+ stringify?: StringifyStoredTheme<Themes> | undefined;
21
+ onError?: ((error: unknown) => void) | undefined;
22
+ }): void;
23
+ //#endregion
24
+ export { writeWebStorage };
25
+ //# sourceMappingURL=write-web-storage.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-web-storage.d.mts","names":[],"sources":["../../../src/theme/web-storage/write-web-storage.ts"],"sourcesContent":[],"mappings":";;;;;;;AAuBA;;;;;;;;;;iBAAgB,+BAA+B,kBACtC,mCAED,WAAW;WAER;cACG,qBAAqB"}
@@ -0,0 +1,32 @@
1
+ //#region src/theme/web-storage/write-web-storage.ts
2
+ function defaultStringify(_themes, _existing, entry) {
3
+ return entry === void 0 ? "" : JSON.stringify(entry);
4
+ }
5
+ /**
6
+ * Writes a theme entry to a web storage (localStorage or sessionStorage).
7
+ *
8
+ * Performs setItem/removeItem only. Does not notify subscribers; the store must call notify() after this.
9
+ *
10
+ * @param themes - Record mapping theme keys to values (used by stringify)
11
+ * @param storageKey - Storage key to write to
12
+ * @param entry - Theme entry to write, or undefined to remove
13
+ * @param options.storage - Storage object (localStorage or sessionStorage)
14
+ * @param options.stringify - Custom serializer (default: JSON.stringify)
15
+ * @param options.onError - Optional callback invoked when setItem/removeItem throws
16
+ */
17
+ function writeWebStorage(themes, storageKey, entry, options) {
18
+ const { storage, stringify = defaultStringify, onError } = options;
19
+ try {
20
+ if (entry === void 0) storage.removeItem(storageKey);
21
+ else {
22
+ const value = stringify(themes, storage.getItem(storageKey) ?? void 0, entry);
23
+ storage.setItem(storageKey, value);
24
+ }
25
+ } catch (error) {
26
+ onError?.(error);
27
+ }
28
+ }
29
+
30
+ //#endregion
31
+ export { writeWebStorage };
32
+ //# sourceMappingURL=write-web-storage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-web-storage.mjs","names":[],"sources":["../../../src/theme/web-storage/write-web-storage.ts"],"sourcesContent":["import type { StringifyStoredTheme, ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\nfunction defaultStringify<Themes extends ThemeMap>(\n\t_themes: Themes,\n\t_existing: string | undefined,\n\tentry: ThemeEntry<Themes> | undefined\n): string {\n\treturn entry === undefined ? '' : JSON.stringify(entry)\n}\n\n/**\n * Writes a theme entry to a web storage (localStorage or sessionStorage).\n *\n * Performs setItem/removeItem only. Does not notify subscribers; the store must call notify() after this.\n *\n * @param themes - Record mapping theme keys to values (used by stringify)\n * @param storageKey - Storage key to write to\n * @param entry - Theme entry to write, or undefined to remove\n * @param options.storage - Storage object (localStorage or sessionStorage)\n * @param options.stringify - Custom serializer (default: JSON.stringify)\n * @param options.onError - Optional callback invoked when setItem/removeItem throws\n */\nexport function writeWebStorage<Themes extends ThemeMap>(\n\tthemes: Themes,\n\tstorageKey: string,\n\tentry: ThemeEntry<Themes> | undefined,\n\toptions: {\n\t\tstorage: Storage\n\t\tstringify?: StringifyStoredTheme<Themes> | undefined\n\t\tonError?: ((error: unknown) => void) | undefined\n\t}\n): void {\n\tconst { storage, stringify = defaultStringify, onError } = options\n\ttry {\n\t\tif (entry === undefined) {\n\t\t\tstorage.removeItem(storageKey)\n\t\t} else {\n\t\t\tconst existing = storage.getItem(storageKey) ?? undefined\n\t\t\tconst value = stringify(themes, existing, entry)\n\t\t\tstorage.setItem(storageKey, value)\n\t\t}\n\t} catch (error) {\n\t\tonError?.(error)\n\t}\n}\n"],"mappings":";AAGA,SAAS,iBACR,SACA,WACA,OACS;AACT,QAAO,UAAU,SAAY,KAAK,KAAK,UAAU,MAAM;;;;;;;;;;;;;;AAexD,SAAgB,gBACf,QACA,YACA,OACA,SAKO;CACP,MAAM,EAAE,SAAS,YAAY,kBAAkB,YAAY;AAC3D,KAAI;AACH,MAAI,UAAU,OACb,SAAQ,WAAW,WAAW;OACxB;GAEN,MAAM,QAAQ,UAAU,QADP,QAAQ,QAAQ,WAAW,IAAI,QACN,MAAM;AAChD,WAAQ,QAAQ,YAAY,MAAM;;UAE3B,OAAO;AACf,YAAU,MAAM"}
package/dist/theme.cjs CHANGED
@@ -1,8 +1,28 @@
1
1
  const require_theme_entry = require('./theme/theme-entry.cjs');
2
+ const require_parse_class_name = require('./theme/class-name/parse-class-name.cjs');
3
+ const require_read_class_name = require('./theme/class-name/read-class-name.cjs');
4
+ const require_stringify_class_name = require('./theme/class-name/stringify-class-name.cjs');
5
+ const require_subscribe_class_name = require('./theme/class-name/subscribe-class-name.cjs');
6
+ const require_write_class_name = require('./theme/class-name/write-class-name.cjs');
2
7
  const require_class_name_theme_store = require('./theme/theme-store/class-name-theme-store/class-name-theme-store.cjs');
8
+ const require_parse_data_attribute = require('./theme/data-attribute/parse-data-attribute.cjs');
9
+ const require_read_data_attribute = require('./theme/data-attribute/read-data-attribute.cjs');
10
+ const require_stringify_data_attribute = require('./theme/data-attribute/stringify-data-attribute.cjs');
11
+ const require_subscribe_data_attribute = require('./theme/data-attribute/subscribe-data-attribute.cjs');
12
+ const require_write_data_attribute = require('./theme/data-attribute/write-data-attribute.cjs');
3
13
  const require_data_attribute_theme_store = require('./theme/theme-store/data-attribute-theme-store/data-attribute-theme-store.cjs');
14
+ const require_read_web_storage = require('./theme/web-storage/read-web-storage.cjs');
15
+ const require_read_local_storage = require('./theme/local-storage/read-local-storage.cjs');
16
+ const require_write_web_storage = require('./theme/web-storage/write-web-storage.cjs');
17
+ const require_write_local_storage = require('./theme/local-storage/write-local-storage.cjs');
4
18
  const require_local_storage_theme_store = require('./theme/theme-store/local-storage-theme-store/local-storage-theme-store.cjs');
5
19
  const require_compose_theme_stores = require('./theme/compose-theme-stores.cjs');
20
+ const require_read_cookie_theme = require('./theme/cookie/read-cookie-theme.cjs');
21
+ const require_write_cookie_theme = require('./theme/cookie/write-cookie-theme.cjs');
22
+ const require_read_prefers_color_scheme_theme = require('./theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.cjs');
23
+ const require_subscribe_prefers_color_scheme_theme = require('./theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.cjs');
24
+ const require_read_session_storage = require('./theme/session-storage/read-session-storage.cjs');
25
+ const require_write_session_storage = require('./theme/session-storage/write-session-storage.cjs');
6
26
  const require_cookie_theme_store = require('./theme/theme-store/cookie-theme-store/cookie-theme-store.cjs');
7
27
  const require_in_memory_theme_store = require('./theme/theme-store/in-memory-theme-store/in-memory-theme-store.cjs');
8
28
  const require_prefers_color_scheme_theme_store = require('./theme/theme-store/prefers-color-scheme-theme-store/prefers-color-scheme-theme-store.cjs');
@@ -15,6 +35,26 @@ exports.dataAttributeThemeStore = require_data_attribute_theme_store.dataAttribu
15
35
  exports.getThemeFromCookie = require_cookie_theme_store.getThemeFromCookie;
16
36
  exports.inMemoryThemeStore = require_in_memory_theme_store.inMemoryThemeStore;
17
37
  exports.localStorageThemeStore = require_local_storage_theme_store.localStorageThemeStore;
38
+ exports.parseClassName = require_parse_class_name.parseClassName;
39
+ exports.parseDataAttribute = require_parse_data_attribute.parseDataAttribute;
18
40
  exports.prefersColorSchemeThemeStore = require_prefers_color_scheme_theme_store.prefersColorSchemeThemeStore;
41
+ exports.readClassName = require_read_class_name.readClassName;
42
+ exports.readCookieTheme = require_read_cookie_theme.readCookieTheme;
43
+ exports.readDataAttribute = require_read_data_attribute.readDataAttribute;
44
+ exports.readLocalStorage = require_read_local_storage.readLocalStorage;
45
+ exports.readPrefersColorSchemeTheme = require_read_prefers_color_scheme_theme.readPrefersColorSchemeTheme;
46
+ exports.readSessionStorage = require_read_session_storage.readSessionStorage;
47
+ exports.readWebStorage = require_read_web_storage.readWebStorage;
19
48
  exports.sessionStorageThemeStore = require_session_storage_theme_store.sessionStorageThemeStore;
20
- exports.themeEntry = require_theme_entry.themeEntry;
49
+ exports.stringifyClassName = require_stringify_class_name.stringifyClassName;
50
+ exports.stringifyDataAttribute = require_stringify_data_attribute.stringifyDataAttribute;
51
+ exports.subscribeClassName = require_subscribe_class_name.subscribeClassName;
52
+ exports.subscribeDataAttribute = require_subscribe_data_attribute.subscribeDataAttribute;
53
+ exports.subscribePrefersColorSchemeTheme = require_subscribe_prefers_color_scheme_theme.subscribePrefersColorSchemeTheme;
54
+ exports.themeEntry = require_theme_entry.themeEntry;
55
+ exports.writeClassName = require_write_class_name.writeClassName;
56
+ exports.writeCookieTheme = require_write_cookie_theme.writeCookieTheme;
57
+ exports.writeDataAttribute = require_write_data_attribute.writeDataAttribute;
58
+ exports.writeLocalStorage = require_write_local_storage.writeLocalStorage;
59
+ exports.writeSessionStorage = require_write_session_storage.writeSessionStorage;
60
+ exports.writeWebStorage = require_write_web_storage.writeWebStorage;