@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,60 +1,73 @@
1
- import type { Required } from 'type-plus'
2
- import { getDataAttribute } from '../../../attributes/get-data-attribute.ts'
3
- import { observeDataAttributes } from '../../../attributes/observe-data-attribute.ts'
4
- import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'
5
- import { applyThemeToDataAttribute } from '../../data-attribute/apply-theme-to-data-attribute.ts'
6
- import { resolveThemeFromDataAttribute } from '../../data-attribute/resolve-theme-from-data-attribute.ts'
7
- import { themeEntry } from '../../theme-entry.ts'
1
+ import { SEPARATOR_SPACE } from '../../data-attribute/_constant.ts'
2
+ import { parseDataAttribute } from '../../data-attribute/parse-data-attribute.ts'
3
+ import { readDataAttribute } from '../../data-attribute/read-data-attribute.ts'
4
+ import { stringifyDataAttribute } from '../../data-attribute/stringify-data-attribute.ts'
5
+ import { subscribeDataAttribute } from '../../data-attribute/subscribe-data-attribute.ts'
6
+ import { writeDataAttribute } from '../../data-attribute/write-data-attribute.ts'
7
+ import type { ParseStoredTheme, StringifyStoredTheme } from '../../theme-entry.types.ts'
8
8
  import type { ThemeMap } from '../../theme-map.types.ts'
9
9
  import type { ThemeStore } from '../theme-store.types.ts'
10
10
 
11
11
  /**
12
12
  * Creates a theme store that reads and writes via a data attribute.
13
13
  *
14
+ * read: parse(themes, getDataAttribute(element, attribute)) → ThemeEntry
15
+ * write: setAttribute(attribute, stringify(themes, getDataAttribute(element, attribute), entry))
16
+ *
17
+ * Supports space-separated attribute values by default. Use `parse` and `stringify` to customize
18
+ * (e.g. comma-separated via curried parseDataAttribute/stringifyDataAttribute).
19
+ *
14
20
  * @param themes - Record mapping theme keys to attribute values
15
21
  * @param options.attributeName - Data attribute name (e.g. `data-theme`)
16
22
  * @param options.element - Element to operate on (defaults to document.documentElement)
23
+ * @param options.parse - Custom parser (default: parseDataAttribute with space separator)
24
+ * @param options.stringify - Custom serializer (default: stringifyDataAttribute with space separator)
17
25
  * @returns ThemeStore
18
26
  *
19
27
  * @example
20
28
  * ```ts
21
29
  * const themes = { current: 'current', grayscale: 'grayscale' }
22
30
  * const store = dataAttributeThemeStore(themes, { attributeName: 'data-theme' })
23
- * store.read() // returns themeResult from data attribute
31
+ * store.read() // returns ThemeEntry from data attribute
24
32
  * store.write(themeEntry(themes, 'grayscale'))
25
- * store.subscribe((themeResult) => {})
33
+ * store.subscribe((entry) => {})
34
+ * ```
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * // Comma-separated
39
+ * const store = dataAttributeThemeStore(themes, {
40
+ * attributeName: 'data-theme',
41
+ * parse: (t, v) => parseDataAttribute(t, v, { separator: ',' }),
42
+ * stringify: (t, x, e) => stringifyDataAttribute(t, x, e, { separator: ',' })
43
+ * })
26
44
  * ```
27
45
  */
28
46
  export function dataAttributeThemeStore<Themes extends ThemeMap>(
29
47
  themes: Themes,
30
- options: { attributeName: `data-${string}`; element?: Element | undefined }
48
+ options: {
49
+ attributeName: `data-${string}`
50
+ element?: Element | undefined
51
+ parse?: ParseStoredTheme<Themes> | undefined
52
+ stringify?: StringifyStoredTheme<Themes> | undefined
53
+ }
31
54
  ) {
32
55
  const element = options.element ?? document?.documentElement
33
- const { attributeName } = options
34
-
35
- if (!element) return dummyThemeStore as Required<ThemeStore<Themes>>
56
+ const {
57
+ attributeName,
58
+ parse = (t, v) => parseDataAttribute(t, v, { separator: SEPARATOR_SPACE }),
59
+ stringify = (t, x, e) => stringifyDataAttribute(t, x, e, { separator: SEPARATOR_SPACE })
60
+ } = options
36
61
 
37
62
  return {
38
63
  read() {
39
- const value = getDataAttribute(attributeName, element)
40
- const theme = resolveThemeFromDataAttribute(themes, value)
41
- if (theme === undefined) return undefined
42
- return themeEntry(themes, theme)
64
+ return readDataAttribute(themes, attributeName, { element, parse })
43
65
  },
44
66
  write(entry) {
45
- applyThemeToDataAttribute(element, attributeName, entry)
67
+ writeDataAttribute(themes, attributeName, entry, { element, stringify })
46
68
  },
47
69
  subscribe(handler) {
48
- const observer = observeDataAttributes<string, `data-${string}`>(
49
- {
50
- [attributeName]: (value) => {
51
- const theme = value ? resolveThemeFromDataAttribute(themes, value) : undefined
52
- handler(theme ? themeEntry(themes, theme) : undefined)
53
- }
54
- },
55
- element
56
- )
57
- return () => observer.disconnect()
70
+ return subscribeDataAttribute(themes, attributeName, handler, { element, parse })
58
71
  }
59
72
  } satisfies ThemeStore<Themes>
60
73
  }
@@ -1,7 +1,7 @@
1
1
  import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'
2
- import { parseStoredTheme } from '../../_utils/parse-stored-theme.ts'
3
- import { themeEntry } from '../../theme-entry.ts'
4
- import type { ThemeEntry } from '../../theme-entry.types.ts'
2
+ import { readLocalStorage } from '../../local-storage/read-local-storage.ts'
3
+ import { writeLocalStorage } from '../../local-storage/write-local-storage.ts'
4
+ import type { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from '../../theme-entry.types.ts'
5
5
  import type { ThemeMap } from '../../theme-map.types.ts'
6
6
  import type { ThemeStore } from '../theme-store.types.ts'
7
7
 
@@ -13,6 +13,9 @@ import type { ThemeStore } from '../theme-store.types.ts'
13
13
  *
14
14
  * @param themes - Record mapping theme keys to values (for validation)
15
15
  * @param options.storageKey - localStorage key
16
+ * @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)
17
+ * @param options.stringify - Optional custom serializer (default: JSON.stringify)
18
+ * @param options.onError - Optional callback invoked when storage write throws
16
19
  * @returns ThemeStore
17
20
  *
18
21
  * @example
@@ -26,11 +29,16 @@ import type { ThemeStore } from '../theme-store.types.ts'
26
29
  */
27
30
  export function localStorageThemeStore<Themes extends ThemeMap>(
28
31
  themes: Themes,
29
- options: { storageKey: string }
32
+ options: {
33
+ storageKey: string
34
+ parse?: ParseStoredTheme<Themes> | undefined
35
+ stringify?: StringifyStoredTheme<Themes> | undefined
36
+ onError?: ((error: unknown) => void) | undefined
37
+ }
30
38
  ) {
31
- const { storageKey } = options
39
+ const { storageKey, parse, stringify, onError } = options
32
40
 
33
- if (typeof window === 'undefined' || !window.localStorage) {
41
+ if (!window?.localStorage) {
34
42
  return dummyThemeStore satisfies ThemeStore<Themes>
35
43
  }
36
44
 
@@ -38,10 +46,7 @@ export function localStorageThemeStore<Themes extends ThemeMap>(
38
46
  let lastNotifiedKey: keyof Themes | undefined = read()?.theme ?? undefined
39
47
 
40
48
  function read() {
41
- const stored = window.localStorage.getItem(storageKey)
42
- const theme = parseStoredTheme(themes, stored)
43
- if (theme === undefined) return undefined
44
- return themeEntry(themes, theme)
49
+ return readLocalStorage(themes, storageKey, { parse })
45
50
  }
46
51
 
47
52
  function notify() {
@@ -55,16 +60,8 @@ export function localStorageThemeStore<Themes extends ThemeMap>(
55
60
  return {
56
61
  read,
57
62
  write(entry) {
58
- try {
59
- if (entry === undefined) {
60
- window.localStorage.removeItem(storageKey)
61
- } else {
62
- window.localStorage.setItem(storageKey, JSON.stringify(entry))
63
- }
64
- notify()
65
- } catch {
66
- // Ignore quota or other errors
67
- }
63
+ writeLocalStorage(themes, storageKey, entry, { stringify, onError })
64
+ notify()
68
65
  },
69
66
  subscribe(handler) {
70
67
  handlers.add(handler)
@@ -1,7 +1,6 @@
1
1
  import type { RequiredPick } from 'type-plus'
2
- import { getPrefersColorScheme } from '../../../color-scheme/get-prefers-color-scheme.ts'
3
- import { observePrefersColorScheme } from '../../../color-scheme/observe-prefers-color-scheme.ts'
4
- import { themeEntry } from '../../theme-entry.ts'
2
+ import { readPrefersColorSchemeTheme } from '../../prefers-color-scheme-theme/read-prefers-color-scheme-theme.ts'
3
+ import { subscribePrefersColorSchemeTheme } from '../../prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.ts'
5
4
  import type { ThemeStore } from '../theme-store.types.ts'
6
5
 
7
6
  type PrefersColorSchemeThemes = {
@@ -34,10 +33,10 @@ export function prefersColorSchemeThemeStore<Themes extends PrefersColorSchemeTh
34
33
  ): RequiredPick<ThemeStore<Themes>, 'read' | 'subscribe'> {
35
34
  return {
36
35
  read() {
37
- return themeEntry(themes, getPrefersColorScheme())
36
+ return readPrefersColorSchemeTheme(themes)
38
37
  },
39
38
  subscribe(handler) {
40
- return observePrefersColorScheme((scheme) => handler(themeEntry(themes, scheme)))
39
+ return subscribePrefersColorSchemeTheme(themes, handler)
41
40
  }
42
41
  }
43
42
  }
@@ -1,7 +1,7 @@
1
1
  import { dummyThemeStore } from '../../../testing/theme/dummy-theme-store.ts'
2
- import { parseStoredTheme } from '../../_utils/parse-stored-theme.ts'
3
- import { themeEntry } from '../../theme-entry.ts'
4
- import type { ThemeEntry } from '../../theme-entry.types.ts'
2
+ import { readSessionStorage } from '../../session-storage/read-session-storage.ts'
3
+ import { writeSessionStorage } from '../../session-storage/write-session-storage.ts'
4
+ import type { ParseStoredTheme, StringifyStoredTheme, ThemeEntry } from '../../theme-entry.types.ts'
5
5
  import type { ThemeMap } from '../../theme-map.types.ts'
6
6
  import type { ThemeStore } from '../theme-store.types.ts'
7
7
 
@@ -13,6 +13,9 @@ import type { ThemeStore } from '../theme-store.types.ts'
13
13
  *
14
14
  * @param themes - Record mapping theme keys to values (for validation)
15
15
  * @param options.storageKey - sessionStorage key
16
+ * @param options.parse - Optional custom parser for stored string (default: parseStoredTheme)
17
+ * @param options.stringify - Optional custom serializer (default: JSON.stringify)
18
+ * @param options.onError - Optional callback invoked when storage write throws
16
19
  * @returns ThemeStore
17
20
  *
18
21
  * @example
@@ -26,11 +29,16 @@ import type { ThemeStore } from '../theme-store.types.ts'
26
29
  */
27
30
  export function sessionStorageThemeStore<Themes extends ThemeMap>(
28
31
  themes: Themes,
29
- options: { storageKey: string }
32
+ options: {
33
+ storageKey: string
34
+ parse?: ParseStoredTheme<Themes> | undefined
35
+ stringify?: StringifyStoredTheme<Themes> | undefined
36
+ onError?: ((error: unknown) => void) | undefined
37
+ }
30
38
  ) {
31
- const { storageKey } = options
39
+ const { storageKey, parse, stringify, onError } = options
32
40
 
33
- if (typeof window === 'undefined' || !window.sessionStorage) {
41
+ if (!window?.sessionStorage) {
34
42
  return dummyThemeStore satisfies ThemeStore<Themes>
35
43
  }
36
44
 
@@ -38,10 +46,7 @@ export function sessionStorageThemeStore<Themes extends ThemeMap>(
38
46
  let lastNotifiedKey: keyof Themes | undefined = read()?.theme ?? undefined
39
47
 
40
48
  function read() {
41
- const stored = window.sessionStorage.getItem(storageKey)
42
- const theme = parseStoredTheme(themes, stored)
43
- if (theme === undefined) return undefined
44
- return themeEntry(themes, theme)
49
+ return readSessionStorage(themes, storageKey, { parse })
45
50
  }
46
51
 
47
52
  function notify() {
@@ -55,16 +60,8 @@ export function sessionStorageThemeStore<Themes extends ThemeMap>(
55
60
  return {
56
61
  read,
57
62
  write(entry) {
58
- try {
59
- if (entry === undefined) {
60
- window.sessionStorage.removeItem(storageKey)
61
- } else {
62
- window.sessionStorage.setItem(storageKey, JSON.stringify(entry))
63
- }
64
- notify()
65
- } catch {
66
- // Ignore quota or other errors
67
- }
63
+ writeSessionStorage(themes, storageKey, entry, { stringify, onError })
64
+ notify()
68
65
  },
69
66
  subscribe(handler) {
70
67
  handlers.add(handler)
@@ -0,0 +1,22 @@
1
+ import { parseStoredTheme } from '../_utils/parse-stored-theme.ts'
2
+ import type { ParseStoredTheme, ThemeEntry } from '../theme-entry.types.ts'
3
+ import type { ThemeMap } from '../theme-map.types.ts'
4
+
5
+ /**
6
+ * Reads a theme entry from a web storage (localStorage or sessionStorage).
7
+ *
8
+ * @param themes - Record mapping theme keys to values (for validation)
9
+ * @param storageKey - Storage key to read from
10
+ * @param options.storage - Storage object (localStorage or sessionStorage)
11
+ * @param options.parse - Custom parser (default: parseStoredTheme)
12
+ * @returns ThemeEntry if found, undefined otherwise. Returns undefined when storage is unavailable (e.g. SSR).
13
+ */
14
+ export function readWebStorage<Themes extends ThemeMap>(
15
+ themes: Themes,
16
+ storageKey: string,
17
+ options: { storage: Storage; parse?: ParseStoredTheme<Themes> | undefined }
18
+ ): ThemeEntry<Themes> | undefined {
19
+ const { storage, parse = parseStoredTheme } = options
20
+ const stored = storage.getItem(storageKey)
21
+ return parse(themes, stored ?? undefined)
22
+ }
@@ -0,0 +1,46 @@
1
+ import type { StringifyStoredTheme, ThemeEntry } from '../theme-entry.types.ts'
2
+ import type { ThemeMap } from '../theme-map.types.ts'
3
+
4
+ function defaultStringify<Themes extends ThemeMap>(
5
+ _themes: Themes,
6
+ _existing: string | undefined,
7
+ entry: ThemeEntry<Themes> | undefined
8
+ ): string {
9
+ return entry === undefined ? '' : JSON.stringify(entry)
10
+ }
11
+
12
+ /**
13
+ * Writes a theme entry to a web storage (localStorage or sessionStorage).
14
+ *
15
+ * Performs setItem/removeItem only. Does not notify subscribers; the store must call notify() after this.
16
+ *
17
+ * @param themes - Record mapping theme keys to values (used by stringify)
18
+ * @param storageKey - Storage key to write to
19
+ * @param entry - Theme entry to write, or undefined to remove
20
+ * @param options.storage - Storage object (localStorage or sessionStorage)
21
+ * @param options.stringify - Custom serializer (default: JSON.stringify)
22
+ * @param options.onError - Optional callback invoked when setItem/removeItem throws
23
+ */
24
+ export function writeWebStorage<Themes extends ThemeMap>(
25
+ themes: Themes,
26
+ storageKey: string,
27
+ entry: ThemeEntry<Themes> | undefined,
28
+ options: {
29
+ storage: Storage
30
+ stringify?: StringifyStoredTheme<Themes> | undefined
31
+ onError?: ((error: unknown) => void) | undefined
32
+ }
33
+ ): void {
34
+ const { storage, stringify = defaultStringify, onError } = options
35
+ try {
36
+ if (entry === undefined) {
37
+ storage.removeItem(storageKey)
38
+ } else {
39
+ const existing = storage.getItem(storageKey) ?? undefined
40
+ const value = stringify(themes, existing, entry)
41
+ storage.setItem(storageKey, value)
42
+ }
43
+ } catch (error) {
44
+ onError?.(error)
45
+ }
46
+ }
package/src/theme.ts CHANGED
@@ -1,4 +1,22 @@
1
+ export * from './theme/class-name/parse-class-name.ts'
2
+ export * from './theme/class-name/read-class-name.ts'
3
+ export * from './theme/class-name/stringify-class-name.ts'
4
+ export * from './theme/class-name/subscribe-class-name.ts'
5
+ export * from './theme/class-name/write-class-name.ts'
1
6
  export * from './theme/compose-theme-stores.ts'
7
+ export * from './theme/cookie/read-cookie-theme.ts'
8
+ export * from './theme/cookie/write-cookie-theme.ts'
9
+ export * from './theme/data-attribute/parse-data-attribute.ts'
10
+ export * from './theme/data-attribute/read-data-attribute.ts'
11
+ export * from './theme/data-attribute/stringify-data-attribute.ts'
12
+ export * from './theme/data-attribute/subscribe-data-attribute.ts'
13
+ export * from './theme/data-attribute/write-data-attribute.ts'
14
+ export * from './theme/local-storage/read-local-storage.ts'
15
+ export * from './theme/local-storage/write-local-storage.ts'
16
+ export * from './theme/prefers-color-scheme-theme/read-prefers-color-scheme-theme.ts'
17
+ export * from './theme/prefers-color-scheme-theme/subscribe-prefers-color-scheme-theme.ts'
18
+ export * from './theme/session-storage/read-session-storage.ts'
19
+ export * from './theme/session-storage/write-session-storage.ts'
2
20
  export * from './theme/theme-entry.ts'
3
21
  export type * from './theme/theme-entry.types.ts'
4
22
  export type * from './theme/theme-map.types.ts'
@@ -12,3 +30,5 @@ export * from './theme/theme-store/prefers-color-scheme-theme-store/prefers-colo
12
30
  export * from './theme/theme-store/session-storage-theme-store/session-storage-theme-store.ts'
13
31
  export type * from './theme/theme-store/theme-store.types.ts'
14
32
  export type * from './theme/theme-store/theme-store-factory.types.ts'
33
+ export * from './theme/web-storage/read-web-storage.ts'
34
+ export * from './theme/web-storage/write-web-storage.ts'
@@ -1,23 +0,0 @@
1
-
2
- //#region src/theme/class-name/apply-theme-to-class-name.ts
3
- /**
4
- * Applies theme to element by updating its class attribute.
5
- *
6
- * Removes all theme classes from the element, then adds classes for the given entry.
7
- * When entry is undefined, removes all theme classes (themeMap needed for clear path).
8
- *
9
- * @param element - Target element
10
- * @param entry - Theme entry to apply, or undefined to clear
11
- * @param themes - Record mapping theme keys to class names (used for clear case)
12
- */
13
- function applyThemeToClassName(themes, element, entry) {
14
- const allThemeClasses = Object.values(themes).flatMap((v) => Array.isArray(v) ? [...v] : [v]);
15
- const current = element.className.trim();
16
- const withoutThemes = (current ? current.split(/\s+/) : []).filter((c) => !allThemeClasses.includes(c));
17
- const activeClasses = entry !== void 0 ? Array.isArray(entry.value) ? [...entry.value] : [entry.value] : [];
18
- element.className = [...withoutThemes, ...activeClasses].filter(Boolean).join(" ");
19
- }
20
-
21
- //#endregion
22
- exports.applyThemeToClassName = applyThemeToClassName;
23
- //# sourceMappingURL=apply-theme-to-class-name.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-theme-to-class-name.cjs","names":[],"sources":["../../../src/theme/class-name/apply-theme-to-class-name.ts"],"sourcesContent":["import type { ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Applies theme to element by updating its class attribute.\n *\n * Removes all theme classes from the element, then adds classes for the given entry.\n * When entry is undefined, removes all theme classes (themeMap needed for clear path).\n *\n * @param element - Target element\n * @param entry - Theme entry to apply, or undefined to clear\n * @param themes - Record mapping theme keys to class names (used for clear case)\n */\nexport function applyThemeToClassName<Themes extends ThemeMap>(\n\tthemes: Themes,\n\telement: Element,\n\tentry: ThemeEntry<Themes> | undefined\n): void {\n\tconst allThemeClasses = Object.values(themes).flatMap((v) => (Array.isArray(v) ? [...v] : [v]))\n\tconst current = element.className.trim()\n\tconst currentClasses = current ? current.split(/\\s+/) : []\n\tconst withoutThemes = currentClasses.filter((c) => !allThemeClasses.includes(c))\n\tconst activeClasses =\n\t\tentry !== undefined ? (Array.isArray(entry.value) ? [...entry.value] : [entry.value]) : []\n\telement.className = [...withoutThemes, ...activeClasses].filter(Boolean).join(' ')\n}\n"],"mappings":";;;;;;;;;;;;AAaA,SAAgB,sBACf,QACA,SACA,OACO;CACP,MAAM,kBAAkB,OAAO,OAAO,OAAO,CAAC,SAAS,MAAO,MAAM,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAE;CAC/F,MAAM,UAAU,QAAQ,UAAU,MAAM;CAExC,MAAM,iBADiB,UAAU,QAAQ,MAAM,MAAM,GAAG,EAAE,EACrB,QAAQ,MAAM,CAAC,gBAAgB,SAAS,EAAE,CAAC;CAChF,MAAM,gBACL,UAAU,SAAa,MAAM,QAAQ,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,GAAI,EAAE;AAC3F,SAAQ,YAAY,CAAC,GAAG,eAAe,GAAG,cAAc,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI"}
@@ -1,22 +0,0 @@
1
- //#region src/theme/class-name/apply-theme-to-class-name.ts
2
- /**
3
- * Applies theme to element by updating its class attribute.
4
- *
5
- * Removes all theme classes from the element, then adds classes for the given entry.
6
- * When entry is undefined, removes all theme classes (themeMap needed for clear path).
7
- *
8
- * @param element - Target element
9
- * @param entry - Theme entry to apply, or undefined to clear
10
- * @param themes - Record mapping theme keys to class names (used for clear case)
11
- */
12
- function applyThemeToClassName(themes, element, entry) {
13
- const allThemeClasses = Object.values(themes).flatMap((v) => Array.isArray(v) ? [...v] : [v]);
14
- const current = element.className.trim();
15
- const withoutThemes = (current ? current.split(/\s+/) : []).filter((c) => !allThemeClasses.includes(c));
16
- const activeClasses = entry !== void 0 ? Array.isArray(entry.value) ? [...entry.value] : [entry.value] : [];
17
- element.className = [...withoutThemes, ...activeClasses].filter(Boolean).join(" ");
18
- }
19
-
20
- //#endregion
21
- export { applyThemeToClassName };
22
- //# sourceMappingURL=apply-theme-to-class-name.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-theme-to-class-name.mjs","names":[],"sources":["../../../src/theme/class-name/apply-theme-to-class-name.ts"],"sourcesContent":["import type { ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Applies theme to element by updating its class attribute.\n *\n * Removes all theme classes from the element, then adds classes for the given entry.\n * When entry is undefined, removes all theme classes (themeMap needed for clear path).\n *\n * @param element - Target element\n * @param entry - Theme entry to apply, or undefined to clear\n * @param themes - Record mapping theme keys to class names (used for clear case)\n */\nexport function applyThemeToClassName<Themes extends ThemeMap>(\n\tthemes: Themes,\n\telement: Element,\n\tentry: ThemeEntry<Themes> | undefined\n): void {\n\tconst allThemeClasses = Object.values(themes).flatMap((v) => (Array.isArray(v) ? [...v] : [v]))\n\tconst current = element.className.trim()\n\tconst currentClasses = current ? current.split(/\\s+/) : []\n\tconst withoutThemes = currentClasses.filter((c) => !allThemeClasses.includes(c))\n\tconst activeClasses =\n\t\tentry !== undefined ? (Array.isArray(entry.value) ? [...entry.value] : [entry.value]) : []\n\telement.className = [...withoutThemes, ...activeClasses].filter(Boolean).join(' ')\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAgB,sBACf,QACA,SACA,OACO;CACP,MAAM,kBAAkB,OAAO,OAAO,OAAO,CAAC,SAAS,MAAO,MAAM,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAE;CAC/F,MAAM,UAAU,QAAQ,UAAU,MAAM;CAExC,MAAM,iBADiB,UAAU,QAAQ,MAAM,MAAM,GAAG,EAAE,EACrB,QAAQ,MAAM,CAAC,gBAAgB,SAAS,EAAE,CAAC;CAChF,MAAM,gBACL,UAAU,SAAa,MAAM,QAAQ,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,GAAI,EAAE;AAC3F,SAAQ,YAAY,CAAC,GAAG,eAAe,GAAG,cAAc,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI"}
@@ -1,23 +0,0 @@
1
- const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
- let type_plus = require("type-plus");
3
-
4
- //#region src/theme/class-name/resolve-theme-from-class-name.ts
5
- /**
6
- * Resolves theme key from class name string by matching against theme map.
7
- *
8
- * @param className - Element class attribute value
9
- * @param themes - Record mapping theme keys to class name(s); arrays use first value for matching
10
- * @returns Theme key if a match is found, otherwise undefined
11
- */
12
- function resolveThemeFromClassName(themes, className) {
13
- return (0, type_plus.findKey)(themes, (key) => {
14
- const value = themes[key];
15
- if (value === void 0) return false;
16
- const v = Array.isArray(value) ? value[0] : value;
17
- return !!v && className.includes(v);
18
- });
19
- }
20
-
21
- //#endregion
22
- exports.resolveThemeFromClassName = resolveThemeFromClassName;
23
- //# sourceMappingURL=resolve-theme-from-class-name.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-theme-from-class-name.cjs","names":[],"sources":["../../../src/theme/class-name/resolve-theme-from-class-name.ts"],"sourcesContent":["import { findKey } from 'type-plus'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Resolves theme key from class name string by matching against theme map.\n *\n * @param className - Element class attribute value\n * @param themes - Record mapping theme keys to class name(s); arrays use first value for matching\n * @returns Theme key if a match is found, otherwise undefined\n */\nexport function resolveThemeFromClassName<Theme extends string>(\n\tthemes: ThemeMap<Theme>,\n\tclassName: string\n): Theme | undefined {\n\tconst theme = findKey(themes, (key) => {\n\t\tconst value = themes[key]\n\t\tif (value === undefined) return false\n\t\tconst v = Array.isArray(value) ? value[0] : value\n\t\treturn !!v && className.includes(v)\n\t})\n\treturn theme as Theme | undefined\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAgB,0BACf,QACA,WACoB;AAOpB,+BANsB,SAAS,QAAQ;EACtC,MAAM,QAAQ,OAAO;AACrB,MAAI,UAAU,OAAW,QAAO;EAChC,MAAM,IAAI,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK;AAC5C,SAAO,CAAC,CAAC,KAAK,UAAU,SAAS,EAAE;GAClC"}
@@ -1,22 +0,0 @@
1
- import { findKey } from "type-plus";
2
-
3
- //#region src/theme/class-name/resolve-theme-from-class-name.ts
4
- /**
5
- * Resolves theme key from class name string by matching against theme map.
6
- *
7
- * @param className - Element class attribute value
8
- * @param themes - Record mapping theme keys to class name(s); arrays use first value for matching
9
- * @returns Theme key if a match is found, otherwise undefined
10
- */
11
- function resolveThemeFromClassName(themes, className) {
12
- return findKey(themes, (key) => {
13
- const value = themes[key];
14
- if (value === void 0) return false;
15
- const v = Array.isArray(value) ? value[0] : value;
16
- return !!v && className.includes(v);
17
- });
18
- }
19
-
20
- //#endregion
21
- export { resolveThemeFromClassName };
22
- //# sourceMappingURL=resolve-theme-from-class-name.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-theme-from-class-name.mjs","names":[],"sources":["../../../src/theme/class-name/resolve-theme-from-class-name.ts"],"sourcesContent":["import { findKey } from 'type-plus'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Resolves theme key from class name string by matching against theme map.\n *\n * @param className - Element class attribute value\n * @param themes - Record mapping theme keys to class name(s); arrays use first value for matching\n * @returns Theme key if a match is found, otherwise undefined\n */\nexport function resolveThemeFromClassName<Theme extends string>(\n\tthemes: ThemeMap<Theme>,\n\tclassName: string\n): Theme | undefined {\n\tconst theme = findKey(themes, (key) => {\n\t\tconst value = themes[key]\n\t\tif (value === undefined) return false\n\t\tconst v = Array.isArray(value) ? value[0] : value\n\t\treturn !!v && className.includes(v)\n\t})\n\treturn theme as Theme | undefined\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,0BACf,QACA,WACoB;AAOpB,QANc,QAAQ,SAAS,QAAQ;EACtC,MAAM,QAAQ,OAAO;AACrB,MAAI,UAAU,OAAW,QAAO;EAChC,MAAM,IAAI,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK;AAC5C,SAAO,CAAC,CAAC,KAAK,UAAU,SAAS,EAAE;GAClC"}
@@ -1,23 +0,0 @@
1
-
2
- //#region src/theme/data-attribute/apply-theme-to-data-attribute.ts
3
- /**
4
- * Applies theme to element by setting or removing a data attribute.
5
- *
6
- * @param element - Target element
7
- * @param attributeName - Data attribute name (e.g. `data-theme`)
8
- * @param entry - Theme entry to apply, or undefined to remove attribute
9
- */
10
- function applyThemeToDataAttribute(element, attributeName, entry) {
11
- if (entry === void 0) {
12
- element.removeAttribute(attributeName);
13
- return;
14
- }
15
- const val = entry.value;
16
- const attributeValue = Array.isArray(val) ? val[0] : val;
17
- if (attributeValue !== void 0 && attributeValue !== "") element.setAttribute(attributeName, attributeValue);
18
- else element.removeAttribute(attributeName);
19
- }
20
-
21
- //#endregion
22
- exports.applyThemeToDataAttribute = applyThemeToDataAttribute;
23
- //# sourceMappingURL=apply-theme-to-data-attribute.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-theme-to-data-attribute.cjs","names":[],"sources":["../../../src/theme/data-attribute/apply-theme-to-data-attribute.ts"],"sourcesContent":["import type { ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Applies theme to element by setting or removing a data attribute.\n *\n * @param element - Target element\n * @param attributeName - Data attribute name (e.g. `data-theme`)\n * @param entry - Theme entry to apply, or undefined to remove attribute\n */\nexport function applyThemeToDataAttribute<Themes extends ThemeMap>(\n\telement: Element,\n\tattributeName: `data-${string}`,\n\tentry: ThemeEntry<Themes> | undefined\n): void {\n\tif (entry === undefined) {\n\t\telement.removeAttribute(attributeName)\n\t\treturn\n\t}\n\tconst val = entry.value\n\tconst attributeValue = Array.isArray(val) ? val[0] : val\n\tif (attributeValue !== undefined && attributeValue !== '') {\n\t\telement.setAttribute(attributeName, attributeValue)\n\t} else {\n\t\telement.removeAttribute(attributeName)\n\t}\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,0BACf,SACA,eACA,OACO;AACP,KAAI,UAAU,QAAW;AACxB,UAAQ,gBAAgB,cAAc;AACtC;;CAED,MAAM,MAAM,MAAM;CAClB,MAAM,iBAAiB,MAAM,QAAQ,IAAI,GAAG,IAAI,KAAK;AACrD,KAAI,mBAAmB,UAAa,mBAAmB,GACtD,SAAQ,aAAa,eAAe,eAAe;KAEnD,SAAQ,gBAAgB,cAAc"}
@@ -1,22 +0,0 @@
1
- //#region src/theme/data-attribute/apply-theme-to-data-attribute.ts
2
- /**
3
- * Applies theme to element by setting or removing a data attribute.
4
- *
5
- * @param element - Target element
6
- * @param attributeName - Data attribute name (e.g. `data-theme`)
7
- * @param entry - Theme entry to apply, or undefined to remove attribute
8
- */
9
- function applyThemeToDataAttribute(element, attributeName, entry) {
10
- if (entry === void 0) {
11
- element.removeAttribute(attributeName);
12
- return;
13
- }
14
- const val = entry.value;
15
- const attributeValue = Array.isArray(val) ? val[0] : val;
16
- if (attributeValue !== void 0 && attributeValue !== "") element.setAttribute(attributeName, attributeValue);
17
- else element.removeAttribute(attributeName);
18
- }
19
-
20
- //#endregion
21
- export { applyThemeToDataAttribute };
22
- //# sourceMappingURL=apply-theme-to-data-attribute.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-theme-to-data-attribute.mjs","names":[],"sources":["../../../src/theme/data-attribute/apply-theme-to-data-attribute.ts"],"sourcesContent":["import type { ThemeEntry } from '../theme-entry.types.ts'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Applies theme to element by setting or removing a data attribute.\n *\n * @param element - Target element\n * @param attributeName - Data attribute name (e.g. `data-theme`)\n * @param entry - Theme entry to apply, or undefined to remove attribute\n */\nexport function applyThemeToDataAttribute<Themes extends ThemeMap>(\n\telement: Element,\n\tattributeName: `data-${string}`,\n\tentry: ThemeEntry<Themes> | undefined\n): void {\n\tif (entry === undefined) {\n\t\telement.removeAttribute(attributeName)\n\t\treturn\n\t}\n\tconst val = entry.value\n\tconst attributeValue = Array.isArray(val) ? val[0] : val\n\tif (attributeValue !== undefined && attributeValue !== '') {\n\t\telement.setAttribute(attributeName, attributeValue)\n\t} else {\n\t\telement.removeAttribute(attributeName)\n\t}\n}\n"],"mappings":";;;;;;;;AAUA,SAAgB,0BACf,SACA,eACA,OACO;AACP,KAAI,UAAU,QAAW;AACxB,UAAQ,gBAAgB,cAAc;AACtC;;CAED,MAAM,MAAM,MAAM;CAClB,MAAM,iBAAiB,MAAM,QAAQ,IAAI,GAAG,IAAI,KAAK;AACrD,KAAI,mBAAmB,UAAa,mBAAmB,GACtD,SAAQ,aAAa,eAAe,eAAe;KAEnD,SAAQ,gBAAgB,cAAc"}
@@ -1,23 +0,0 @@
1
- const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
- let type_plus = require("type-plus");
3
-
4
- //#region src/theme/data-attribute/resolve-theme-from-data-attribute.ts
5
- /**
6
- * Resolves theme key from data attribute value by matching against theme map.
7
- *
8
- * @param attrValue - Data attribute value (e.g. from getAttribute)
9
- * @param themes - Record mapping theme keys to attribute values
10
- * @returns Theme key if a match is found, otherwise undefined
11
- */
12
- function resolveThemeFromDataAttribute(themes, attrValue) {
13
- if (attrValue === null || attrValue === "") return void 0;
14
- return (0, type_plus.findKey)(themes, (key) => {
15
- const value = themes[key];
16
- if (value === void 0) return false;
17
- return (Array.isArray(value) ? value[0] : value) === attrValue;
18
- });
19
- }
20
-
21
- //#endregion
22
- exports.resolveThemeFromDataAttribute = resolveThemeFromDataAttribute;
23
- //# sourceMappingURL=resolve-theme-from-data-attribute.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-theme-from-data-attribute.cjs","names":[],"sources":["../../../src/theme/data-attribute/resolve-theme-from-data-attribute.ts"],"sourcesContent":["import { findKey } from 'type-plus'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Resolves theme key from data attribute value by matching against theme map.\n *\n * @param attrValue - Data attribute value (e.g. from getAttribute)\n * @param themes - Record mapping theme keys to attribute values\n * @returns Theme key if a match is found, otherwise undefined\n */\nexport function resolveThemeFromDataAttribute<Theme extends string>(\n\tthemes: ThemeMap<Theme>,\n\tattrValue: string | null\n): Theme | undefined {\n\tif (attrValue === null || attrValue === '') return undefined\n\tconst theme = findKey(themes, (key) => {\n\t\tconst value = themes[key]\n\t\tif (value === undefined) return false\n\t\tconst v = Array.isArray(value) ? value[0] : value\n\t\treturn v === attrValue\n\t})\n\treturn theme as Theme | undefined\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAgB,8BACf,QACA,WACoB;AACpB,KAAI,cAAc,QAAQ,cAAc,GAAI,QAAO;AAOnD,+BANsB,SAAS,QAAQ;EACtC,MAAM,QAAQ,OAAO;AACrB,MAAI,UAAU,OAAW,QAAO;AAEhC,UADU,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK,WAC/B;GACZ"}
@@ -1,22 +0,0 @@
1
- import { findKey } from "type-plus";
2
-
3
- //#region src/theme/data-attribute/resolve-theme-from-data-attribute.ts
4
- /**
5
- * Resolves theme key from data attribute value by matching against theme map.
6
- *
7
- * @param attrValue - Data attribute value (e.g. from getAttribute)
8
- * @param themes - Record mapping theme keys to attribute values
9
- * @returns Theme key if a match is found, otherwise undefined
10
- */
11
- function resolveThemeFromDataAttribute(themes, attrValue) {
12
- if (attrValue === null || attrValue === "") return void 0;
13
- return findKey(themes, (key) => {
14
- const value = themes[key];
15
- if (value === void 0) return false;
16
- return (Array.isArray(value) ? value[0] : value) === attrValue;
17
- });
18
- }
19
-
20
- //#endregion
21
- export { resolveThemeFromDataAttribute };
22
- //# sourceMappingURL=resolve-theme-from-data-attribute.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-theme-from-data-attribute.mjs","names":[],"sources":["../../../src/theme/data-attribute/resolve-theme-from-data-attribute.ts"],"sourcesContent":["import { findKey } from 'type-plus'\nimport type { ThemeMap } from '../theme-map.types.ts'\n\n/**\n * Resolves theme key from data attribute value by matching against theme map.\n *\n * @param attrValue - Data attribute value (e.g. from getAttribute)\n * @param themes - Record mapping theme keys to attribute values\n * @returns Theme key if a match is found, otherwise undefined\n */\nexport function resolveThemeFromDataAttribute<Theme extends string>(\n\tthemes: ThemeMap<Theme>,\n\tattrValue: string | null\n): Theme | undefined {\n\tif (attrValue === null || attrValue === '') return undefined\n\tconst theme = findKey(themes, (key) => {\n\t\tconst value = themes[key]\n\t\tif (value === undefined) return false\n\t\tconst v = Array.isArray(value) ? value[0] : value\n\t\treturn v === attrValue\n\t})\n\treturn theme as Theme | undefined\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,8BACf,QACA,WACoB;AACpB,KAAI,cAAc,QAAQ,cAAc,GAAI,QAAO;AAOnD,QANc,QAAQ,SAAS,QAAQ;EACtC,MAAM,QAAQ,OAAO;AACrB,MAAI,UAAU,OAAW,QAAO;AAEhC,UADU,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK,WAC/B;GACZ"}
@@ -1,26 +0,0 @@
1
- import type { ThemeEntry } from '../theme-entry.types.ts'
2
- import type { ThemeMap } from '../theme-map.types.ts'
3
-
4
- /**
5
- * Applies theme to element by updating its class attribute.
6
- *
7
- * Removes all theme classes from the element, then adds classes for the given entry.
8
- * When entry is undefined, removes all theme classes (themeMap needed for clear path).
9
- *
10
- * @param element - Target element
11
- * @param entry - Theme entry to apply, or undefined to clear
12
- * @param themes - Record mapping theme keys to class names (used for clear case)
13
- */
14
- export function applyThemeToClassName<Themes extends ThemeMap>(
15
- themes: Themes,
16
- element: Element,
17
- entry: ThemeEntry<Themes> | undefined
18
- ): void {
19
- const allThemeClasses = Object.values(themes).flatMap((v) => (Array.isArray(v) ? [...v] : [v]))
20
- const current = element.className.trim()
21
- const currentClasses = current ? current.split(/\s+/) : []
22
- const withoutThemes = currentClasses.filter((c) => !allThemeClasses.includes(c))
23
- const activeClasses =
24
- entry !== undefined ? (Array.isArray(entry.value) ? [...entry.value] : [entry.value]) : []
25
- element.className = [...withoutThemes, ...activeClasses].filter(Boolean).join(' ')
26
- }