@mhmo91/schmancy 0.10.1 → 0.10.2

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 (371) hide show
  1. package/custom-elements.json +20 -0
  2. package/dist/active-host-CcIa2tmW.cjs +1 -0
  3. package/dist/active-host-CcIa2tmW.cjs.map +1 -0
  4. package/dist/{active-host-D-a1X-nq.js → active-host-CvNYoprt.js} +12 -12
  5. package/dist/active-host-CvNYoprt.js.map +1 -0
  6. package/dist/agent/schmancy.agent.js +1546 -1524
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/{area-C_J4qxKO.js → area-DHVANBbr.js} +1 -1
  9. package/dist/{area-C_J4qxKO.js.map → area-DHVANBbr.js.map} +1 -1
  10. package/dist/{area-ISC8Mdkh.cjs → area-ZupIezvU.cjs} +1 -1
  11. package/dist/{area-ISC8Mdkh.cjs.map → area-ZupIezvU.cjs.map} +1 -1
  12. package/dist/area.cjs +1 -1
  13. package/dist/area.js +1 -1
  14. package/dist/{audio-DZN8HsSS.cjs → audio-CluX8Qpq.cjs} +1 -1
  15. package/dist/{audio-DZN8HsSS.cjs.map → audio-CluX8Qpq.cjs.map} +1 -1
  16. package/dist/{audio-Tmre4WyL.js → audio-DcXphulJ.js} +1 -1
  17. package/dist/{audio-Tmre4WyL.js.map → audio-DcXphulJ.js.map} +1 -1
  18. package/dist/audio.cjs +1 -1
  19. package/dist/audio.js +2 -2
  20. package/dist/{autocomplete-BDF85W0J.cjs → autocomplete-Bn525CTp.cjs} +1 -1
  21. package/dist/{autocomplete-BDF85W0J.cjs.map → autocomplete-Bn525CTp.cjs.map} +1 -1
  22. package/dist/{autocomplete-CM8VqW9S.js → autocomplete-pHvsyfbH.js} +2 -2
  23. package/dist/{autocomplete-CM8VqW9S.js.map → autocomplete-pHvsyfbH.js.map} +1 -1
  24. package/dist/autocomplete.cjs +1 -1
  25. package/dist/autocomplete.js +1 -1
  26. package/dist/avatar.cjs +1 -1
  27. package/dist/avatar.js +1 -1
  28. package/dist/badge.cjs +1 -1
  29. package/dist/badge.js +1 -1
  30. package/dist/{boat-CpXe-Qto.cjs → boat-IyEtsNI4.cjs} +1 -1
  31. package/dist/{boat-CpXe-Qto.cjs.map → boat-IyEtsNI4.cjs.map} +1 -1
  32. package/dist/{boat-DxYNK4xT.js → boat-_Yv3M6YM.js} +2 -2
  33. package/dist/{boat-DxYNK4xT.js.map → boat-_Yv3M6YM.js.map} +1 -1
  34. package/dist/boat.cjs +1 -1
  35. package/dist/boat.js +1 -1
  36. package/dist/breadcrumb.cjs +1 -1
  37. package/dist/breadcrumb.js +1 -1
  38. package/dist/{busy-Dma4gtnz.cjs → busy-CjM39APN.cjs} +1 -1
  39. package/dist/{busy-Dma4gtnz.cjs.map → busy-CjM39APN.cjs.map} +1 -1
  40. package/dist/{busy-CP-gRfAP.js → busy-Ck2IXJ4r.js} +1 -1
  41. package/dist/{busy-CP-gRfAP.js.map → busy-Ck2IXJ4r.js.map} +1 -1
  42. package/dist/busy.cjs +1 -1
  43. package/dist/busy.js +1 -1
  44. package/dist/button.cjs +1 -1
  45. package/dist/button.js +1 -1
  46. package/dist/{card-ClroODSK.cjs → card-DIxDuuth.cjs} +1 -1
  47. package/dist/{card-ClroODSK.cjs.map → card-DIxDuuth.cjs.map} +1 -1
  48. package/dist/{card-Bv--HeGO.js → card-DUWZmMHc.js} +1 -1
  49. package/dist/{card-Bv--HeGO.js.map → card-DUWZmMHc.js.map} +1 -1
  50. package/dist/card.cjs +1 -1
  51. package/dist/card.js +1 -1
  52. package/dist/charts.cjs +1 -1
  53. package/dist/charts.js +1 -1
  54. package/dist/{checkbox-DvTZXN1Y.cjs → checkbox-CGdFXuWQ.cjs} +1 -1
  55. package/dist/{checkbox-DvTZXN1Y.cjs.map → checkbox-CGdFXuWQ.cjs.map} +1 -1
  56. package/dist/{checkbox-1gQOOcja.js → checkbox-DPS1mWG-.js} +1 -1
  57. package/dist/{checkbox-1gQOOcja.js.map → checkbox-DPS1mWG-.js.map} +1 -1
  58. package/dist/checkbox.cjs +1 -1
  59. package/dist/checkbox.js +1 -1
  60. package/dist/{chips-wkfKzf_e.js → chips-BnnXQSA-.js} +3 -3
  61. package/dist/{chips-wkfKzf_e.js.map → chips-BnnXQSA-.js.map} +1 -1
  62. package/dist/{chips-Bw7FNDpX.cjs → chips-UoFbwmlG.cjs} +1 -1
  63. package/dist/{chips-Bw7FNDpX.cjs.map → chips-UoFbwmlG.cjs.map} +1 -1
  64. package/dist/chips.cjs +1 -1
  65. package/dist/chips.js +2 -2
  66. package/dist/{code-highlight-CJzuds4c.cjs → code-highlight-CMilN0B8.cjs} +1 -1
  67. package/dist/{code-highlight-CJzuds4c.cjs.map → code-highlight-CMilN0B8.cjs.map} +1 -1
  68. package/dist/{code-highlight-CcdCFMrn.js → code-highlight-kFUJ1Eet.js} +1 -1
  69. package/dist/{code-highlight-CcdCFMrn.js.map → code-highlight-kFUJ1Eet.js.map} +1 -1
  70. package/dist/code-highlight.cjs +1 -1
  71. package/dist/code-highlight.js +1 -1
  72. package/dist/connectivity.cjs +1 -1
  73. package/dist/connectivity.js +2 -2
  74. package/dist/content-drawer.cjs +1 -1
  75. package/dist/content-drawer.js +1 -1
  76. package/dist/{date-range-BsPW60vp.cjs → date-range-BIyrzTRZ.cjs} +1 -1
  77. package/dist/{date-range-BsPW60vp.cjs.map → date-range-BIyrzTRZ.cjs.map} +1 -1
  78. package/dist/{date-range-BDHz_Olm.js → date-range-DOstCIg8.js} +2 -2
  79. package/dist/{date-range-BDHz_Olm.js.map → date-range-DOstCIg8.js.map} +1 -1
  80. package/dist/{date-range-inline-BsjNNGFR.cjs → date-range-inline-4P7zqeVe.cjs} +1 -1
  81. package/dist/{date-range-inline-BsjNNGFR.cjs.map → date-range-inline-4P7zqeVe.cjs.map} +1 -1
  82. package/dist/{date-range-inline-1NmZE_Xr.js → date-range-inline-BVycTWLb.js} +1 -1
  83. package/dist/{date-range-inline-1NmZE_Xr.js.map → date-range-inline-BVycTWLb.js.map} +1 -1
  84. package/dist/date-range-inline.cjs +1 -1
  85. package/dist/date-range-inline.js +1 -1
  86. package/dist/date-range.cjs +1 -1
  87. package/dist/date-range.js +1 -1
  88. package/dist/delay.cjs +1 -1
  89. package/dist/delay.js +1 -1
  90. package/dist/{details-BtUNqzn8.cjs → details-BJBbZOO6.cjs} +1 -1
  91. package/dist/{details-BtUNqzn8.cjs.map → details-BJBbZOO6.cjs.map} +1 -1
  92. package/dist/{details-BEp2s2ca.js → details-DPc5GxPa.js} +1 -1
  93. package/dist/{details-BEp2s2ca.js.map → details-DPc5GxPa.js.map} +1 -1
  94. package/dist/details.cjs +1 -1
  95. package/dist/details.js +1 -1
  96. package/dist/dialog.cjs +1 -1
  97. package/dist/dialog.js +1 -1
  98. package/dist/directives.cjs +1 -1
  99. package/dist/directives.js +1 -1
  100. package/dist/{divider-VxpjZ8hk.js → divider-BvJsmSPH.js} +1 -1
  101. package/dist/{divider-VxpjZ8hk.js.map → divider-BvJsmSPH.js.map} +1 -1
  102. package/dist/{divider-CpNT11Iy.cjs → divider-DPT3XnG5.cjs} +1 -1
  103. package/dist/{divider-CpNT11Iy.cjs.map → divider-DPT3XnG5.cjs.map} +1 -1
  104. package/dist/divider.cjs +1 -1
  105. package/dist/divider.js +1 -1
  106. package/dist/dropdown.cjs +1 -1
  107. package/dist/dropdown.js +1 -1
  108. package/dist/{expand-CRUl3-mN.js → expand-BMzocdtj.js} +2 -2
  109. package/dist/{expand-CRUl3-mN.js.map → expand-BMzocdtj.js.map} +1 -1
  110. package/dist/{expand-05azMpho.cjs → expand-CTqBWVXo.cjs} +1 -1
  111. package/dist/{expand-05azMpho.cjs.map → expand-CTqBWVXo.cjs.map} +1 -1
  112. package/dist/expand.cjs +1 -1
  113. package/dist/expand.js +1 -1
  114. package/dist/{extra-aNV1fO6W.js → extra-BeHlUhzv.js} +1 -1
  115. package/dist/{extra-aNV1fO6W.js.map → extra-BeHlUhzv.js.map} +1 -1
  116. package/dist/{extra-CyERULfm.cjs → extra-h_cuxRII.cjs} +1 -1
  117. package/dist/{extra-CyERULfm.cjs.map → extra-h_cuxRII.cjs.map} +1 -1
  118. package/dist/extra.cjs +1 -1
  119. package/dist/extra.js +1 -1
  120. package/dist/{float-N3qhNET_.js → float-CTc1xxqH.js} +1 -1
  121. package/dist/{float-N3qhNET_.js.map → float-CTc1xxqH.js.map} +1 -1
  122. package/dist/{float-DRET9mVZ.cjs → float-CwVBs11k.cjs} +1 -1
  123. package/dist/{float-DRET9mVZ.cjs.map → float-CwVBs11k.cjs.map} +1 -1
  124. package/dist/float.cjs +1 -1
  125. package/dist/float.js +1 -1
  126. package/dist/handover/agent-runtime-followups.md +1 -1
  127. package/dist/handover/agent-runtime-v1.md +3 -3
  128. package/dist/{icons-BBJqwT_B.js → icons-BbCVrcas.js} +1 -1
  129. package/dist/{icons-BBJqwT_B.js.map → icons-BbCVrcas.js.map} +1 -1
  130. package/dist/{icons-CNixJ6kL.cjs → icons-qEQW4pjM.cjs} +1 -1
  131. package/dist/{icons-CNixJ6kL.cjs.map → icons-qEQW4pjM.cjs.map} +1 -1
  132. package/dist/icons.cjs +1 -1
  133. package/dist/icons.js +1 -1
  134. package/dist/{iframe-DoN_toqE.js → iframe-BJfDIEJf.js} +1 -1
  135. package/dist/{iframe-DoN_toqE.js.map → iframe-BJfDIEJf.js.map} +1 -1
  136. package/dist/{iframe-g-4DjAD7.cjs → iframe-D6HTruav.cjs} +1 -1
  137. package/dist/{iframe-g-4DjAD7.cjs.map → iframe-D6HTruav.cjs.map} +1 -1
  138. package/dist/iframe.cjs +1 -1
  139. package/dist/iframe.js +1 -1
  140. package/dist/index.cjs +1 -1
  141. package/dist/index.js +35 -35
  142. package/dist/{input-ClnkMJgh.js → input-LTK3cctF.js} +32 -32
  143. package/dist/input-LTK3cctF.js.map +1 -0
  144. package/dist/input-U26axtcs.cjs +51 -0
  145. package/dist/input-U26axtcs.cjs.map +1 -0
  146. package/dist/{input-chip-DMXRT7bK.cjs → input-chip-CADXt0X5.cjs} +1 -1
  147. package/dist/{input-chip-DMXRT7bK.cjs.map → input-chip-CADXt0X5.cjs.map} +1 -1
  148. package/dist/{input-chip-DwSyFv1x.js → input-chip-Ch-aCs3c.js} +1 -1
  149. package/dist/{input-chip-DwSyFv1x.js.map → input-chip-Ch-aCs3c.js.map} +1 -1
  150. package/dist/input.cjs +1 -1
  151. package/dist/input.js +1 -1
  152. package/dist/json.cjs +1 -1
  153. package/dist/json.js +2 -2
  154. package/dist/kbd.cjs +1 -1
  155. package/dist/kbd.js +1 -1
  156. package/dist/{layout-BghHmee6.js → layout-C4xmnU4n.js} +1 -1
  157. package/dist/{layout-BghHmee6.js.map → layout-C4xmnU4n.js.map} +1 -1
  158. package/dist/{layout-VmxXuGGp.cjs → layout-Dmh6fxh0.cjs} +1 -1
  159. package/dist/{layout-VmxXuGGp.cjs.map → layout-Dmh6fxh0.cjs.map} +1 -1
  160. package/dist/layout.cjs +1 -1
  161. package/dist/layout.js +1 -1
  162. package/dist/{lightbox-m5FLmYlv.cjs → lightbox-DbYUSfVl.cjs} +1 -1
  163. package/dist/{lightbox-m5FLmYlv.cjs.map → lightbox-DbYUSfVl.cjs.map} +1 -1
  164. package/dist/{lightbox-IleIcq19.js → lightbox-DqG2z3Cn.js} +1 -1
  165. package/dist/{lightbox-IleIcq19.js.map → lightbox-DqG2z3Cn.js.map} +1 -1
  166. package/dist/lightbox.cjs +1 -1
  167. package/dist/lightbox.js +1 -1
  168. package/dist/{list-C-b9p1yi.cjs → list-CLX4sSAw.cjs} +1 -1
  169. package/dist/{list-C-b9p1yi.cjs.map → list-CLX4sSAw.cjs.map} +1 -1
  170. package/dist/{list-BlXJlm16.js → list-D6-_E5ZD.js} +1 -1
  171. package/dist/{list-BlXJlm16.js.map → list-D6-_E5ZD.js.map} +1 -1
  172. package/dist/list.cjs +1 -1
  173. package/dist/list.js +1 -1
  174. package/dist/{mailbox-B0hZLpF1.cjs → mailbox-Ct6iYe-4.cjs} +1 -1
  175. package/dist/{mailbox-B0hZLpF1.cjs.map → mailbox-Ct6iYe-4.cjs.map} +1 -1
  176. package/dist/{mailbox-DAmejcKa.js → mailbox-DsPII8HR.js} +3 -3
  177. package/dist/{mailbox-DAmejcKa.js.map → mailbox-DsPII8HR.js.map} +1 -1
  178. package/dist/mailbox.cjs +1 -1
  179. package/dist/mailbox.js +1 -1
  180. package/dist/{map-BoIu47qU.js → map-Dhy3ta9v.js} +1 -1
  181. package/dist/{map-BoIu47qU.js.map → map-Dhy3ta9v.js.map} +1 -1
  182. package/dist/{map-CZ0816EI.cjs → map-WXeVkx2K.cjs} +1 -1
  183. package/dist/{map-CZ0816EI.cjs.map → map-WXeVkx2K.cjs.map} +1 -1
  184. package/dist/map.cjs +1 -1
  185. package/dist/map.js +1 -1
  186. package/dist/{menu-BV9_8ys8.js → menu-Bhd3EapX.js} +1 -1
  187. package/dist/{menu-BV9_8ys8.js.map → menu-Bhd3EapX.js.map} +1 -1
  188. package/dist/{menu-BFHBnp5M.cjs → menu-Cg2aaDjs.cjs} +1 -1
  189. package/dist/{menu-BFHBnp5M.cjs.map → menu-Cg2aaDjs.cjs.map} +1 -1
  190. package/dist/menu.cjs +1 -1
  191. package/dist/menu.js +1 -1
  192. package/dist/{mixins-CL1krSOE.js → mixins-CcIWET41.js} +1 -1
  193. package/dist/{mixins-CL1krSOE.js.map → mixins-CcIWET41.js.map} +1 -1
  194. package/dist/{mixins-BIXF7xkF.cjs → mixins-De3xfjrm.cjs} +1 -1
  195. package/dist/{mixins-BIXF7xkF.cjs.map → mixins-De3xfjrm.cjs.map} +1 -1
  196. package/dist/mixins.cjs +1 -1
  197. package/dist/mixins.js +1 -1
  198. package/dist/nav-drawer.cjs +1 -1
  199. package/dist/nav-drawer.js +1 -1
  200. package/dist/navigation-bar.cjs +1 -1
  201. package/dist/navigation-bar.js +1 -1
  202. package/dist/navigation-rail.cjs +1 -1
  203. package/dist/navigation-rail.js +1 -1
  204. package/dist/{notification-Dzm6zWxX.js → notification-CVLqQ8c_.js} +3 -3
  205. package/dist/{notification-Dzm6zWxX.js.map → notification-CVLqQ8c_.js.map} +1 -1
  206. package/dist/{notification-CigTy3ia.cjs → notification-D_PQjBSf.cjs} +1 -1
  207. package/dist/{notification-CigTy3ia.cjs.map → notification-D_PQjBSf.cjs.map} +1 -1
  208. package/dist/notification.cjs +1 -1
  209. package/dist/notification.js +1 -1
  210. package/dist/{option-BfvzzkzM.cjs → option-DDU_goh1.cjs} +1 -1
  211. package/dist/{option-BfvzzkzM.cjs.map → option-DDU_goh1.cjs.map} +1 -1
  212. package/dist/{option-Dyb0Q45u.js → option-rm4HebVs.js} +1 -1
  213. package/dist/{option-Dyb0Q45u.js.map → option-rm4HebVs.js.map} +1 -1
  214. package/dist/option.cjs +1 -1
  215. package/dist/option.js +1 -1
  216. package/dist/overlay.cjs +1 -1
  217. package/dist/overlay.cjs.map +1 -1
  218. package/dist/overlay.js +2 -2
  219. package/dist/overlay.js.map +1 -1
  220. package/dist/page.cjs +1 -1
  221. package/dist/page.js +4 -4
  222. package/dist/{payment-card-form-D9N2Q0wM.js → payment-card-form-C0dHYZIv.js} +1 -1
  223. package/dist/{payment-card-form-D9N2Q0wM.js.map → payment-card-form-C0dHYZIv.js.map} +1 -1
  224. package/dist/{payment-card-form-CQ6sLlrh.cjs → payment-card-form-DNvmZxs4.cjs} +1 -1
  225. package/dist/{payment-card-form-CQ6sLlrh.cjs.map → payment-card-form-DNvmZxs4.cjs.map} +1 -1
  226. package/dist/payment-card-form.cjs +1 -1
  227. package/dist/payment-card-form.js +1 -1
  228. package/dist/{progress-LPwPfzBi.js → progress-BRerM5Bn.js} +1 -1
  229. package/dist/{progress-LPwPfzBi.js.map → progress-BRerM5Bn.js.map} +1 -1
  230. package/dist/{progress-Dyri7dc2.cjs → progress-U3LQkpM2.cjs} +1 -1
  231. package/dist/{progress-Dyri7dc2.cjs.map → progress-U3LQkpM2.cjs.map} +1 -1
  232. package/dist/progress.cjs +1 -1
  233. package/dist/progress.js +1 -1
  234. package/dist/qr-scanner.cjs +1 -1
  235. package/dist/qr-scanner.js +1 -1
  236. package/dist/{radio-group-DqP886F-.js → radio-group-BZ2WoOXJ.js} +1 -1
  237. package/dist/{radio-group-DqP886F-.js.map → radio-group-BZ2WoOXJ.js.map} +1 -1
  238. package/dist/{radio-group-DK-T6jGy.cjs → radio-group-D7mm-yvJ.cjs} +1 -1
  239. package/dist/{radio-group-DK-T6jGy.cjs.map → radio-group-D7mm-yvJ.cjs.map} +1 -1
  240. package/dist/radio-group.cjs +1 -1
  241. package/dist/radio-group.js +1 -1
  242. package/dist/range.cjs +1 -1
  243. package/dist/range.js +1 -1
  244. package/dist/{scroll-yfNU0zNO.cjs → scroll-DJTjNIT_.cjs} +1 -1
  245. package/dist/{scroll-yfNU0zNO.cjs.map → scroll-DJTjNIT_.cjs.map} +1 -1
  246. package/dist/{scroll-BD82ANjm.js → scroll-qL-HkMdP.js} +1 -1
  247. package/dist/{scroll-BD82ANjm.js.map → scroll-qL-HkMdP.js.map} +1 -1
  248. package/dist/{select-BR3r3SZe.cjs → select-BvA7v-gL.cjs} +1 -1
  249. package/dist/{select-BR3r3SZe.cjs.map → select-BvA7v-gL.cjs.map} +1 -1
  250. package/dist/{select-GONAphZI.js → select-CnPXUeSf.js} +1 -1
  251. package/dist/{select-GONAphZI.js.map → select-CnPXUeSf.js.map} +1 -1
  252. package/dist/select.cjs +1 -1
  253. package/dist/select.js +1 -1
  254. package/dist/{sheet-C4sAGqTf.js → sheet-BRL07BB4.js} +3 -3
  255. package/dist/{sheet-C4sAGqTf.js.map → sheet-BRL07BB4.js.map} +1 -1
  256. package/dist/{sheet-D9pZMrzs.cjs → sheet-BYQJAHQn.cjs} +1 -1
  257. package/dist/{sheet-D9pZMrzs.cjs.map → sheet-BYQJAHQn.cjs.map} +1 -1
  258. package/dist/sheet.cjs +1 -1
  259. package/dist/sheet.js +2 -2
  260. package/dist/{sheet.service-C1J0-i4d.cjs → sheet.service-B25bsrYG.cjs} +1 -1
  261. package/dist/{sheet.service-C1J0-i4d.cjs.map → sheet.service-B25bsrYG.cjs.map} +1 -1
  262. package/dist/{sheet.service-B7h_-e-q.js → sheet.service-SPQ8oLCi.js} +2 -2
  263. package/dist/{sheet.service-B7h_-e-q.js.map → sheet.service-SPQ8oLCi.js.map} +1 -1
  264. package/dist/skeleton.cjs +1 -1
  265. package/dist/skeleton.js +1 -1
  266. package/dist/slider.cjs +1 -1
  267. package/dist/slider.js +1 -1
  268. package/dist/{sound.service-CvdB2yUJ.cjs → sound.service-BGs6m0Cm.cjs} +1 -1
  269. package/dist/{sound.service-CvdB2yUJ.cjs.map → sound.service-BGs6m0Cm.cjs.map} +1 -1
  270. package/dist/{sound.service-Ba_HNBLD.js → sound.service-kKfsN0m-.js} +1 -1
  271. package/dist/{sound.service-Ba_HNBLD.js.map → sound.service-kKfsN0m-.js.map} +1 -1
  272. package/dist/{splash-screen-DqULOTZ0.cjs → splash-screen-BDt4PInk.cjs} +1 -1
  273. package/dist/{splash-screen-DqULOTZ0.cjs.map → splash-screen-BDt4PInk.cjs.map} +1 -1
  274. package/dist/{splash-screen-BGMZmQRT.js → splash-screen-C8JCqX5L.js} +1 -1
  275. package/dist/{splash-screen-BGMZmQRT.js.map → splash-screen-C8JCqX5L.js.map} +1 -1
  276. package/dist/splash-screen.cjs +1 -1
  277. package/dist/splash-screen.js +1 -1
  278. package/dist/{src-DzFcGdcn.cjs → src-CpRNClhg.cjs} +1 -1
  279. package/dist/{src-DzFcGdcn.cjs.map → src-CpRNClhg.cjs.map} +1 -1
  280. package/dist/{src-CHM4hrEr.js → src-CqdnWGgr.js} +39 -39
  281. package/dist/{src-CHM4hrEr.js.map → src-CqdnWGgr.js.map} +1 -1
  282. package/dist/{state-ClRXrqDA.js → state-BusMG6sM.js} +266 -244
  283. package/dist/{state-ClRXrqDA.js.map → state-BusMG6sM.js.map} +1 -1
  284. package/dist/state-DNdCPITt.cjs +1 -0
  285. package/dist/{state-BAW3C11I.cjs.map → state-DNdCPITt.cjs.map} +1 -1
  286. package/dist/state.cjs +1 -1
  287. package/dist/state.js +2 -2
  288. package/dist/steps.cjs +1 -1
  289. package/dist/steps.js +1 -1
  290. package/dist/{surface-BHJgIDz9.js → surface-C8jQy8Ym.js} +1 -1
  291. package/dist/{surface-BHJgIDz9.js.map → surface-C8jQy8Ym.js.map} +1 -1
  292. package/dist/{surface-DW78bc8W.cjs → surface-Du2Y4vXd.cjs} +1 -1
  293. package/dist/{surface-DW78bc8W.cjs.map → surface-Du2Y4vXd.cjs.map} +1 -1
  294. package/dist/surface.cjs +1 -1
  295. package/dist/surface.js +1 -1
  296. package/dist/switch.cjs +1 -1
  297. package/dist/switch.js +1 -1
  298. package/dist/table.cjs +1 -1
  299. package/dist/table.js +1 -1
  300. package/dist/{tabs-EIEhkEUb.cjs → tabs-0RfeCa00.cjs} +1 -1
  301. package/dist/{tabs-EIEhkEUb.cjs.map → tabs-0RfeCa00.cjs.map} +1 -1
  302. package/dist/{tabs-BCRVyQU1.js → tabs-Cyahh9Q6.js} +1 -1
  303. package/dist/{tabs-BCRVyQU1.js.map → tabs-Cyahh9Q6.js.map} +1 -1
  304. package/dist/tabs.cjs +1 -1
  305. package/dist/tabs.js +1 -1
  306. package/dist/teleport.cjs +1 -1
  307. package/dist/teleport.js +1 -1
  308. package/dist/{textarea-DApOhSAL.js → textarea-CXCcTVnf.js} +1 -1
  309. package/dist/{textarea-DApOhSAL.js.map → textarea-CXCcTVnf.js.map} +1 -1
  310. package/dist/{textarea-zxNlRLVm.cjs → textarea-jqRrLxmo.cjs} +1 -1
  311. package/dist/{textarea-zxNlRLVm.cjs.map → textarea-jqRrLxmo.cjs.map} +1 -1
  312. package/dist/textarea.cjs +1 -1
  313. package/dist/textarea.js +1 -1
  314. package/dist/{theme-BCUjQH6-.js → theme-2KZW2Rfs.js} +3 -3
  315. package/dist/{theme-BCUjQH6-.js.map → theme-2KZW2Rfs.js.map} +1 -1
  316. package/dist/{theme-Z43TLE61.cjs → theme-Hjz9sCN-.cjs} +1 -1
  317. package/dist/{theme-Z43TLE61.cjs.map → theme-Hjz9sCN-.cjs.map} +1 -1
  318. package/dist/{theme-button-DdSbcivT.js → theme-button-9uF1eoHz.js} +1 -1
  319. package/dist/{theme-button-DdSbcivT.js.map → theme-button-9uF1eoHz.js.map} +1 -1
  320. package/dist/{theme-button-Czsdp3o1.cjs → theme-button-C7QIbke1.cjs} +1 -1
  321. package/dist/{theme-button-Czsdp3o1.cjs.map → theme-button-C7QIbke1.cjs.map} +1 -1
  322. package/dist/theme-button.cjs +1 -1
  323. package/dist/theme-button.js +1 -1
  324. package/dist/theme.cjs +1 -1
  325. package/dist/theme.js +3 -3
  326. package/dist/{theme.service-CP71ojp6.cjs → theme.service-BrUbGoeQ.cjs} +1 -1
  327. package/dist/{theme.service-CP71ojp6.cjs.map → theme.service-BrUbGoeQ.cjs.map} +1 -1
  328. package/dist/{theme.service-9clsqyee.js → theme.service-CmbOGMA8.js} +1 -1
  329. package/dist/{theme.service-9clsqyee.js.map → theme.service-CmbOGMA8.js.map} +1 -1
  330. package/dist/timeline.cjs +1 -1
  331. package/dist/timeline.js +1 -1
  332. package/dist/tree.cjs +1 -1
  333. package/dist/tree.js +1 -1
  334. package/dist/typography.cjs +1 -1
  335. package/dist/typography.js +1 -1
  336. package/dist/visually-hidden.cjs +1 -1
  337. package/dist/visually-hidden.js +1 -1
  338. package/dist/{window-moDKyGLZ.js → window-C7yY9yp5.js} +2 -2
  339. package/dist/{window-moDKyGLZ.js.map → window-C7yY9yp5.js.map} +1 -1
  340. package/dist/{window-DTgKAQgz.cjs → window-DtUOWiAj.cjs} +1 -1
  341. package/dist/{window-DTgKAQgz.cjs.map → window-DtUOWiAj.cjs.map} +1 -1
  342. package/dist/window.cjs +1 -1
  343. package/dist/window.js +1 -1
  344. package/package.json +2 -3
  345. package/src/agent/helpers.ts +0 -2
  346. package/src/audio/emotional-sounds.ts +0 -2
  347. package/src/audio/sound.service.ts +0 -2
  348. package/src/input/input.ts +2 -2
  349. package/src/notification/notification-service.ts +0 -2
  350. package/src/overlay/overlay.animations.ts +0 -25
  351. package/src/overlay/overlay.stack.ts +0 -6
  352. package/src/state/active-host.ts +53 -19
  353. package/src/state/schmancy-context.ts +47 -1
  354. package/src/state/state.test.ts +50 -2
  355. package/types/src/agent/helpers.d.ts +0 -1
  356. package/types/src/audio/emotional-sounds.d.ts +0 -1
  357. package/types/src/audio/sound.service.d.ts +1 -1
  358. package/types/src/notification/notification-service.d.ts +0 -1
  359. package/types/src/overlay/overlay.animations.d.ts +0 -1
  360. package/types/src/overlay/overlay.stack.d.ts +0 -2
  361. package/types/src/state/active-host.d.ts +5 -0
  362. package/types/src/state/schmancy-context.d.ts +1 -0
  363. package/dist/active-host-0of-L858.cjs +0 -1
  364. package/dist/active-host-0of-L858.cjs.map +0 -1
  365. package/dist/active-host-D-a1X-nq.js.map +0 -1
  366. package/dist/input-ClnkMJgh.js.map +0 -1
  367. package/dist/input-CwFslLcF.cjs +0 -51
  368. package/dist/input-CwFslLcF.cjs.map +0 -1
  369. package/dist/state-BAW3C11I.cjs +0 -1
  370. package/src/agent/index.ts +0 -1
  371. package/types/src/agent/index.d.ts +0 -1
@@ -1,4 +1,4 @@
1
- import { s as e } from "./mixins-CL1krSOE.js";
1
+ import { s as e } from "./mixins-CcIWET41.js";
2
2
  import { t } from "./decorate-23nYs4Le.js";
3
3
  import { customElement as n, query as r } from "lit/decorators.js";
4
4
  import { html as i } from "lit";
@@ -1 +1 @@
1
- {"version":3,"file":"theme-button-DdSbcivT.js","names":[],"sources":["../src/theme-button/theme-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, query } from 'lit/decorators.js'\n\n@customElement('schmancy-theme-button')\nexport default class SchmancyThemeButton extends SchmancyElement {\n\t@query('#color') color!: HTMLElement\n\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<schmancy-button\n\t\t\t\t@click=${() => {\n\t\t\t\t\t// Trigger any other effects you have\n\t\t\t\t\t// $newSchmancyTheme.next(undefined)\n\n\t\t\t\t\t// Native Web Animations API usage:\n\t\t\t\t\tthis.color.animate([{ transform: 'rotate(0deg)' }, { transform: 'rotate(360deg)' }], {\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\t// fill: 'forwards', // Use if you want it to remain rotated at 360°\n\t\t\t\t\t\t// easing: 'ease-out', // Or another easing function\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t\tvariant=\"text\"\n\t\t\t>\n\t\t\t\t<schmancy-icon id=\"color\">palette</schmancy-icon>\n\t\t\t</schmancy-button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-button': SchmancyThemeButton\n\t}\n}\n"],"mappings":";;;;AAKe,IAAA,IAAA,cAAkC,EAAA;CAGhD,SAAA;AACC,SAAO,CAAI;;;AAOR,QAAK,MAAM,QAAQ,CAAC,EAAE,WAAW,gBAAA,EAAkB,EAAE,WAAW,kBAAA,CAAA,EAAqB,EACpF,UAAU,KAAA,CAAA;IAAA;;;;;;;;GAXd,EAAM,SAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAFhB,EAAc,wBAAA,CAAA,EAAwB,EAAA"}
1
+ {"version":3,"file":"theme-button-9uF1eoHz.js","names":[],"sources":["../src/theme-button/theme-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, query } from 'lit/decorators.js'\n\n@customElement('schmancy-theme-button')\nexport default class SchmancyThemeButton extends SchmancyElement {\n\t@query('#color') color!: HTMLElement\n\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<schmancy-button\n\t\t\t\t@click=${() => {\n\t\t\t\t\t// Trigger any other effects you have\n\t\t\t\t\t// $newSchmancyTheme.next(undefined)\n\n\t\t\t\t\t// Native Web Animations API usage:\n\t\t\t\t\tthis.color.animate([{ transform: 'rotate(0deg)' }, { transform: 'rotate(360deg)' }], {\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\t// fill: 'forwards', // Use if you want it to remain rotated at 360°\n\t\t\t\t\t\t// easing: 'ease-out', // Or another easing function\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t\tvariant=\"text\"\n\t\t\t>\n\t\t\t\t<schmancy-icon id=\"color\">palette</schmancy-icon>\n\t\t\t</schmancy-button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-button': SchmancyThemeButton\n\t}\n}\n"],"mappings":";;;;AAKe,IAAA,IAAA,cAAkC,EAAA;CAGhD,SAAA;AACC,SAAO,CAAI;;;AAOR,QAAK,MAAM,QAAQ,CAAC,EAAE,WAAW,gBAAA,EAAkB,EAAE,WAAW,kBAAA,CAAA,EAAqB,EACpF,UAAU,KAAA,CAAA;IAAA;;;;;;;;GAXd,EAAM,SAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAFhB,EAAc,wBAAA,CAAA,EAAwB,EAAA"}
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BIXF7xkF.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.s{render(){return r.html`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.s{render(){return r.html`
2
2
  <schmancy-button
3
3
  @click=${()=>{this.color.animate([{transform:`rotate(0deg)`},{transform:`rotate(360deg)`}],{duration:300})}}
4
4
  variant="text"
@@ -1 +1 @@
1
- {"version":3,"file":"theme-button-Czsdp3o1.cjs","names":[],"sources":["../src/theme-button/theme-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, query } from 'lit/decorators.js'\n\n@customElement('schmancy-theme-button')\nexport default class SchmancyThemeButton extends SchmancyElement {\n\t@query('#color') color!: HTMLElement\n\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<schmancy-button\n\t\t\t\t@click=${() => {\n\t\t\t\t\t// Trigger any other effects you have\n\t\t\t\t\t// $newSchmancyTheme.next(undefined)\n\n\t\t\t\t\t// Native Web Animations API usage:\n\t\t\t\t\tthis.color.animate([{ transform: 'rotate(0deg)' }, { transform: 'rotate(360deg)' }], {\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\t// fill: 'forwards', // Use if you want it to remain rotated at 360°\n\t\t\t\t\t\t// easing: 'ease-out', // Or another easing function\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t\tvariant=\"text\"\n\t\t\t>\n\t\t\t\t<schmancy-icon id=\"color\">palette</schmancy-icon>\n\t\t\t</schmancy-button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-button': SchmancyThemeButton\n\t}\n}\n"],"mappings":"kKAKe,IAAA,EAAA,cAAkC,EAAA,CAAA,CAGhD,QAAA,CACC,MAAO,GAAA,IAAI;;kBAOR,KAAK,MAAM,QAAQ,CAAC,CAAE,UAAW,eAAA,CAAkB,CAAE,UAAW,iBAAA,CAAA,CAAqB,CACpF,SAAU,IAAA,CAAA,EAAA;;;;;uBAXR,SAAA,CAAA,CAAS,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAFF,wBAAA,CAAA,CAAwB,EAAA"}
1
+ {"version":3,"file":"theme-button-C7QIbke1.cjs","names":[],"sources":["../src/theme-button/theme-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, query } from 'lit/decorators.js'\n\n@customElement('schmancy-theme-button')\nexport default class SchmancyThemeButton extends SchmancyElement {\n\t@query('#color') color!: HTMLElement\n\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<schmancy-button\n\t\t\t\t@click=${() => {\n\t\t\t\t\t// Trigger any other effects you have\n\t\t\t\t\t// $newSchmancyTheme.next(undefined)\n\n\t\t\t\t\t// Native Web Animations API usage:\n\t\t\t\t\tthis.color.animate([{ transform: 'rotate(0deg)' }, { transform: 'rotate(360deg)' }], {\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\t// fill: 'forwards', // Use if you want it to remain rotated at 360°\n\t\t\t\t\t\t// easing: 'ease-out', // Or another easing function\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t\tvariant=\"text\"\n\t\t\t>\n\t\t\t\t<schmancy-icon id=\"color\">palette</schmancy-icon>\n\t\t\t</schmancy-button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-button': SchmancyThemeButton\n\t}\n}\n"],"mappings":"kKAKe,IAAA,EAAA,cAAkC,EAAA,CAAA,CAGhD,QAAA,CACC,MAAO,GAAA,IAAI;;kBAOR,KAAK,MAAM,QAAQ,CAAC,CAAE,UAAW,eAAA,CAAkB,CAAE,UAAW,iBAAA,CAAA,CAAqB,CACpF,SAAU,IAAA,CAAA,EAAA;;;;;uBAXR,SAAA,CAAA,CAAS,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAFF,wBAAA,CAAA,CAAwB,EAAA"}
@@ -1 +1 @@
1
- require(`./theme-button-Czsdp3o1.cjs`);
1
+ require(`./theme-button-C7QIbke1.cjs`);
@@ -1 +1 @@
1
- import "./theme-button-DdSbcivT.js";
1
+ import "./theme-button-9uF1eoHz.js";
package/dist/theme.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./mixins-BIXF7xkF.cjs`),t=require(`./theme.events-DM4H5F2d.cjs`),n=require(`./theme.service-CP71ojp6.cjs`),r=require(`./theme.interface-D9l33b-M.cjs`),i=require(`./theme-Z43TLE61.cjs`);exports.SchmancyGenerateMoodAudioEvent=i.n,exports.SchmancyTheme=r.t,Object.defineProperty(exports,`SchmancyThemeAudioPlayer`,{enumerable:!0,get:function(){return i.r}}),Object.defineProperty(exports,`SchmancyThemeComponent`,{enumerable:!0,get:function(){return i.a}}),Object.defineProperty(exports,`SchmancyThemeController`,{enumerable:!0,get:function(){return i.i}}),Object.defineProperty(exports,`SchmancyThemeControllerBoat`,{enumerable:!0,get:function(){return i.t}}),exports.ThemeHereIAm=t.t,exports.ThemeWhereAreYou=t.n,exports.createDarkTonalPaletteFromBaseColor=i.s,exports.createLightTonalPaletteFromBaseColor=i.c,exports.formatTheme=i.l,exports.schmancyTheme=n.t,exports.tailwindStyles=i.o,exports.theme=n.n,exports.themeContext=e.d;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./theme.events-DM4H5F2d.cjs`),n=require(`./theme.service-BrUbGoeQ.cjs`),r=require(`./theme.interface-D9l33b-M.cjs`),i=require(`./theme-Hjz9sCN-.cjs`);exports.SchmancyGenerateMoodAudioEvent=i.n,exports.SchmancyTheme=r.t,Object.defineProperty(exports,`SchmancyThemeAudioPlayer`,{enumerable:!0,get:function(){return i.r}}),Object.defineProperty(exports,`SchmancyThemeComponent`,{enumerable:!0,get:function(){return i.a}}),Object.defineProperty(exports,`SchmancyThemeController`,{enumerable:!0,get:function(){return i.i}}),Object.defineProperty(exports,`SchmancyThemeControllerBoat`,{enumerable:!0,get:function(){return i.t}}),exports.ThemeHereIAm=t.t,exports.ThemeWhereAreYou=t.n,exports.createDarkTonalPaletteFromBaseColor=i.s,exports.createLightTonalPaletteFromBaseColor=i.c,exports.formatTheme=i.l,exports.schmancyTheme=n.t,exports.tailwindStyles=i.o,exports.theme=n.n,exports.themeContext=e.d;
package/dist/theme.js CHANGED
@@ -1,6 +1,6 @@
1
- import { d as e } from "./mixins-CL1krSOE.js";
1
+ import { d as e } from "./mixins-CcIWET41.js";
2
2
  import { n as t, t as n } from "./theme.events-Cv7N4Toe.js";
3
- import { n as r, t as i } from "./theme.service-9clsqyee.js";
3
+ import { n as r, t as i } from "./theme.service-CmbOGMA8.js";
4
4
  import { t as a } from "./theme.interface-DnVNre4O.js";
5
- import { a as o, c as s, i as c, l, n as u, o as d, r as f, s as p, t as m } from "./theme-BCUjQH6-.js";
5
+ import { a as o, c as s, i as c, l, n as u, o as d, r as f, s as p, t as m } from "./theme-2KZW2Rfs.js";
6
6
  export { u as SchmancyGenerateMoodAudioEvent, a as SchmancyTheme, f as SchmancyThemeAudioPlayer, o as SchmancyThemeComponent, c as SchmancyThemeController, m as SchmancyThemeControllerBoat, n as ThemeHereIAm, t as ThemeWhereAreYou, p as createDarkTonalPaletteFromBaseColor, s as createLightTonalPaletteFromBaseColor, l as formatTheme, i as schmancyTheme, d as tailwindStyles, r as theme, e as themeContext };
@@ -1 +1 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./state-BAW3C11I.cjs`),t=require(`./theme.events-DM4H5F2d.cjs`);let n=require(`rxjs`);var r=e.i(`schmancy/theme`).local({scheme:`auto`,color:`#6200ee`}),i=class e{get scheme(){return r.value.scheme}get color(){return r.value.color}get theme(){return this._theme$.getValue()}get themeComponent(){return this._themeComponent$.getValue()}get fullscreen(){return this._fullscreen$.getValue()}get bottomOffset(){return this._bottomOffset$.getValue()}constructor(){this._theme$=new n.BehaviorSubject({}),this._themeComponent$=new n.BehaviorSubject(null),this._fullscreen$=new n.BehaviorSubject(!1),this._bottomOffset$=new n.BehaviorSubject(0),this.scheme$=r.$.pipe((0,n.map)(e=>e.scheme),(0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.color$=r.$.pipe((0,n.map)(e=>e.color),(0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.theme$=this._theme$.asObservable().pipe((0,n.distinctUntilChanged)((e,t)=>JSON.stringify(e)===JSON.stringify(t)),(0,n.shareReplay)(1)),this.themeComponent$=this._themeComponent$.asObservable().pipe((0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.fullscreen$=this._fullscreen$.asObservable().pipe((0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.bottomOffset$=this._bottomOffset$.asObservable().pipe((0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.resolvedScheme$=this.scheme$.pipe((0,n.switchMap)(e=>{if(e===`auto`){let e=window.matchMedia(`(prefers-color-scheme: dark)`);return new n.Observable(t=>{let n=e=>{t.next(e.matches?`dark`:`light`)};return e.addEventListener(`change`,n),t.next(e.matches?`dark`:`light`),()=>e.removeEventListener(`change`,n)})}return(0,n.of)(e)}),(0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.discoverTheme()}discoverTheme(){return(0,n.fromEvent)(window,t.t).pipe((0,n.takeUntil)((0,n.timer)(100)),(0,n.map)(e=>e.detail.theme),(0,n.defaultIfEmpty)(null),(0,n.tap)(e=>{e&&this.registerThemeComponent(e)})).pipe((0,n.tap)(()=>{window.dispatchEvent(new CustomEvent(t.n,{bubbles:!0,composed:!0}))}),(0,n.switchMap)(()=>(0,n.fromEvent)(window,t.t).pipe((0,n.takeUntil)((0,n.timer)(100)),(0,n.map)(e=>e.detail.theme),(0,n.defaultIfEmpty)(null),(0,n.tap)(e=>{e&&this.registerThemeComponent(e)}))))}registerThemeComponent(e){this._themeComponent$.next(e),r.set({scheme:e.scheme,color:e.color}),this._theme$.next(e.theme)}updateTheme(e){let t={};e.scheme!==void 0&&(t.scheme=e.scheme),e.color!==void 0&&(t.color=e.color),Object.keys(t).length>0&&r.set(t),e.theme!==void 0&&this._theme$.next(e.theme)}setScheme(e){let t=this.themeComponent;t&&(t.scheme=e),r.set({scheme:e})}setColor(e){let t=this.themeComponent;t&&(t.color=e),r.set({color:e})}isDarkMode(){return this.resolvedScheme$.pipe((0,n.map)(e=>e===`dark`))}toggleScheme(){let e=this.scheme,t=e===`dark`?`light`:e===`light`?`dark`:`light`;this.setScheme(t)}getCSSVariable(e){let t=this.themeComponent;if(t){let n=t.root?document.body:t.shadowRoot?.host;if(n)return getComputedStyle(n).getPropertyValue(`--schmancy-${e}`).trim()}return``}watchCSSVariable(e){return this.theme$.pipe((0,n.map)(()=>this.getCSSVariable(e)),(0,n.distinctUntilChanged)())}setFullscreen(e){this._fullscreen$.next(e),window.dispatchEvent(new CustomEvent(`fullscreen`,{detail:e,bubbles:!0,composed:!0}))}toggleFullscreen(){this.setFullscreen(!this.fullscreen)}setBottomOffset(e){this._bottomOffset$.next(e)}next(e){e.fullscreen!==void 0&&this.setFullscreen(e.fullscreen),e.scheme!==void 0&&this.setScheme(e.scheme),e.color!==void 0&&this.setColor(e.color)}static getInstance(){return e.instance||=new e,e.instance}}.getInstance(),a=i;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./state-DNdCPITt.cjs`),t=require(`./theme.events-DM4H5F2d.cjs`);let n=require(`rxjs`);var r=e.i(`schmancy/theme`).local({scheme:`auto`,color:`#6200ee`}),i=class e{get scheme(){return r.value.scheme}get color(){return r.value.color}get theme(){return this._theme$.getValue()}get themeComponent(){return this._themeComponent$.getValue()}get fullscreen(){return this._fullscreen$.getValue()}get bottomOffset(){return this._bottomOffset$.getValue()}constructor(){this._theme$=new n.BehaviorSubject({}),this._themeComponent$=new n.BehaviorSubject(null),this._fullscreen$=new n.BehaviorSubject(!1),this._bottomOffset$=new n.BehaviorSubject(0),this.scheme$=r.$.pipe((0,n.map)(e=>e.scheme),(0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.color$=r.$.pipe((0,n.map)(e=>e.color),(0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.theme$=this._theme$.asObservable().pipe((0,n.distinctUntilChanged)((e,t)=>JSON.stringify(e)===JSON.stringify(t)),(0,n.shareReplay)(1)),this.themeComponent$=this._themeComponent$.asObservable().pipe((0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.fullscreen$=this._fullscreen$.asObservable().pipe((0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.bottomOffset$=this._bottomOffset$.asObservable().pipe((0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.resolvedScheme$=this.scheme$.pipe((0,n.switchMap)(e=>{if(e===`auto`){let e=window.matchMedia(`(prefers-color-scheme: dark)`);return new n.Observable(t=>{let n=e=>{t.next(e.matches?`dark`:`light`)};return e.addEventListener(`change`,n),t.next(e.matches?`dark`:`light`),()=>e.removeEventListener(`change`,n)})}return(0,n.of)(e)}),(0,n.distinctUntilChanged)(),(0,n.shareReplay)(1)),this.discoverTheme()}discoverTheme(){return(0,n.fromEvent)(window,t.t).pipe((0,n.takeUntil)((0,n.timer)(100)),(0,n.map)(e=>e.detail.theme),(0,n.defaultIfEmpty)(null),(0,n.tap)(e=>{e&&this.registerThemeComponent(e)})).pipe((0,n.tap)(()=>{window.dispatchEvent(new CustomEvent(t.n,{bubbles:!0,composed:!0}))}),(0,n.switchMap)(()=>(0,n.fromEvent)(window,t.t).pipe((0,n.takeUntil)((0,n.timer)(100)),(0,n.map)(e=>e.detail.theme),(0,n.defaultIfEmpty)(null),(0,n.tap)(e=>{e&&this.registerThemeComponent(e)}))))}registerThemeComponent(e){this._themeComponent$.next(e),r.set({scheme:e.scheme,color:e.color}),this._theme$.next(e.theme)}updateTheme(e){let t={};e.scheme!==void 0&&(t.scheme=e.scheme),e.color!==void 0&&(t.color=e.color),Object.keys(t).length>0&&r.set(t),e.theme!==void 0&&this._theme$.next(e.theme)}setScheme(e){let t=this.themeComponent;t&&(t.scheme=e),r.set({scheme:e})}setColor(e){let t=this.themeComponent;t&&(t.color=e),r.set({color:e})}isDarkMode(){return this.resolvedScheme$.pipe((0,n.map)(e=>e===`dark`))}toggleScheme(){let e=this.scheme,t=e===`dark`?`light`:e===`light`?`dark`:`light`;this.setScheme(t)}getCSSVariable(e){let t=this.themeComponent;if(t){let n=t.root?document.body:t.shadowRoot?.host;if(n)return getComputedStyle(n).getPropertyValue(`--schmancy-${e}`).trim()}return``}watchCSSVariable(e){return this.theme$.pipe((0,n.map)(()=>this.getCSSVariable(e)),(0,n.distinctUntilChanged)())}setFullscreen(e){this._fullscreen$.next(e),window.dispatchEvent(new CustomEvent(`fullscreen`,{detail:e,bubbles:!0,composed:!0}))}toggleFullscreen(){this.setFullscreen(!this.fullscreen)}setBottomOffset(e){this._bottomOffset$.next(e)}next(e){e.fullscreen!==void 0&&this.setFullscreen(e.fullscreen),e.scheme!==void 0&&this.setScheme(e.scheme),e.color!==void 0&&this.setColor(e.color)}static getInstance(){return e.instance||=new e,e.instance}}.getInstance(),a=i;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
@@ -1 +1 @@
1
- {"version":3,"file":"theme.service-CP71ojp6.cjs","names":[],"sources":["../src/theme/theme.service.ts"],"sourcesContent":["import {\n BehaviorSubject,\n Observable,\n fromEvent,\n timer,\n map,\n takeUntil,\n defaultIfEmpty,\n distinctUntilChanged,\n shareReplay,\n tap,\n switchMap,\n of\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from './theme.events'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type { TSchmancyTheme } from './theme.interface'\nimport { state } from '../state'\n\ninterface ThemeSettings {\n scheme: 'dark' | 'light' | 'auto'\n color: string\n}\n\n// Theme settings — persists to localStorage under namespace `schmancy/theme`.\nconst ThemeContext = state<ThemeSettings>('schmancy/theme').local({\n scheme: 'auto',\n color: '#6200ee',\n})\n\n/**\n * Theme Service - Provides centralized theme management for Schmancy components.\n *\n * This service acts as a singleton interface to interact with the theme system,\n * providing reactive observables for theme state and methods to control theming.\n *\n * @example\n * ```typescript\n * import { theme } from '@schmancy/theme'\n *\n * // Subscribe to theme changes\n * theme.scheme$.subscribe(scheme => {\n * console.log('Current scheme:', scheme) // 'light' | 'dark' | 'auto'\n * })\n *\n * // Get current values synchronously\n * const currentScheme = theme.scheme\n * const currentColor = theme.color\n *\n * // Toggle between light and dark mode\n * theme.toggleScheme()\n *\n * // Set specific scheme\n * theme.setScheme('dark')\n *\n * // Check if dark mode is active\n * theme.isDarkMode().subscribe(isDark => {\n * console.log('Is dark mode:', isDark)\n * })\n * ```\n */\nclass ThemeService {\n private static instance: ThemeService\n\n // Observable properties for theme values\n private _theme$ = new BehaviorSubject<Partial<TSchmancyTheme>>({})\n private _themeComponent$ = new BehaviorSubject<SchmancyThemeComponent | null>(null)\n private _fullscreen$ = new BehaviorSubject<boolean>(false)\n private _bottomOffset$ = new BehaviorSubject<number>(0)\n\n // Public observables derived from context\n public readonly scheme$ = ThemeContext.$.pipe(\n map(settings => settings.scheme),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly color$ = ThemeContext.$.pipe(\n map(settings => settings.color),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly theme$ = this._theme$.asObservable().pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n shareReplay(1)\n )\n\n public readonly themeComponent$ = this._themeComponent$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly fullscreen$ = this._fullscreen$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly bottomOffset$ = this._bottomOffset$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n // Getters for synchronous access to current values\n get scheme(): 'dark' | 'light' | 'auto' {\n return ThemeContext.value.scheme\n }\n\n get color(): string {\n return ThemeContext.value.color\n }\n\n get theme(): Partial<TSchmancyTheme> {\n return this._theme$.getValue()\n }\n\n get themeComponent(): SchmancyThemeComponent | null {\n return this._themeComponent$.getValue()\n }\n\n get fullscreen(): boolean {\n return this._fullscreen$.getValue()\n }\n\n get bottomOffset(): number {\n return this._bottomOffset$.getValue()\n }\n\n // Computed observable for actual scheme (resolving 'auto')\n public readonly resolvedScheme$ = this.scheme$.pipe(\n switchMap(scheme => {\n if (scheme === 'auto') {\n // Listen to system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return new Observable<'dark' | 'light'>(subscriber => {\n const handler = (e: MediaQueryListEvent) => {\n subscriber.next(e.matches ? 'dark' : 'light')\n }\n mediaQuery.addEventListener('change', handler)\n\n // Emit initial value\n subscriber.next(mediaQuery.matches ? 'dark' : 'light')\n\n // Cleanup\n return () => mediaQuery.removeEventListener('change', handler)\n })\n }\n return of(scheme as 'dark' | 'light')\n }),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n constructor() {\n this.discoverTheme()\n }\n\n /**\n * Discover the nearest theme component in the DOM.\n * This method can be called to refresh the theme discovery process.\n *\n * @returns {Observable<SchmancyThemeComponent | null>} Observable that emits the discovered theme component or null\n *\n * @example\n * ```typescript\n * theme.discoverTheme().subscribe(component => {\n * if (component) {\n * console.log('Theme component found:', component)\n * } else {\n * console.log('No theme component found')\n * }\n * })\n * ```\n */\n public discoverTheme(): Observable<SchmancyThemeComponent | null> {\n // Dispatch discovery event and wait for response\n return fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)), // Wait up to 100ms for response\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n ).pipe(\n tap(() => {\n // Trigger theme discovery\n window.dispatchEvent(\n new CustomEvent(ThemeWhereAreYou, {\n bubbles: true,\n composed: true,\n })\n )\n }),\n switchMap(() =>\n fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)),\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n )\n )\n )\n }\n\n /**\n * Register a theme component and subscribe to its changes.\n * This is typically called internally by theme components when they mount or update.\n *\n * @param {SchmancyThemeComponent} component - The theme component to register\n *\n * @internal\n */\n public registerThemeComponent(component: SchmancyThemeComponent): void {\n this._themeComponent$.next(component)\n\n // Update values from the component\n ThemeContext.set({ scheme: component.scheme, color: component.color })\n this._theme$.next(component.theme)\n }\n\n /**\n * Update theme values. Usually called internally by theme components.\n *\n * @param {Object} values - Theme values to update\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme to set\n * @param {string} [values.color] - Primary color in hex format\n * @param {Partial<TSchmancyTheme>} [values.theme] - Theme configuration object\n *\n * @internal\n */\n public updateTheme(values: {\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n theme?: Partial<TSchmancyTheme>\n }): void {\n const updates: Partial<ThemeSettings> = {}\n if (values.scheme !== undefined) {\n updates.scheme = values.scheme\n }\n if (values.color !== undefined) {\n updates.color = values.color\n }\n if (Object.keys(updates).length > 0) {\n ThemeContext.set(updates)\n }\n if (values.theme !== undefined) {\n this._theme$.next(values.theme)\n }\n }\n\n /**\n * Set the color scheme for the application.\n *\n * @param {'dark' | 'light' | 'auto'} scheme - The color scheme to set\n *\n * @example\n * ```typescript\n * // Set to dark mode\n * theme.setScheme('dark')\n *\n * // Set to auto (follows system preference)\n * theme.setScheme('auto')\n * ```\n */\n public setScheme(scheme: 'dark' | 'light' | 'auto'): void {\n const component = this.themeComponent\n if (component) {\n component.scheme = scheme\n ThemeContext.set({ scheme })\n } else {\n console.warn('No theme component found. Scheme change may not persist.')\n ThemeContext.set({ scheme })\n }\n }\n\n /**\n * Set the primary color for the theme.\n *\n * @param {string} color - Primary color in hex format (e.g., '#6200ee')\n *\n * @example\n * ```typescript\n * // Set primary color to purple\n * theme.setColor('#6200ee')\n *\n * // Set primary color to blue\n * theme.setColor('#2196f3')\n * ```\n */\n public setColor(color: string): void {\n const component = this.themeComponent\n if (component) {\n component.color = color\n ThemeContext.set({ color })\n } else {\n console.warn('No theme component found. Color change may not persist.')\n ThemeContext.set({ color })\n }\n }\n\n /**\n * Check if dark mode is currently active.\n * This resolves 'auto' scheme to the actual value based on system preference.\n *\n * @returns {Observable<boolean>} Observable that emits true if dark mode is active, false otherwise\n *\n * @example\n * ```typescript\n * theme.isDarkMode().subscribe(isDark => {\n * if (isDark) {\n * console.log('Dark mode is active')\n * } else {\n * console.log('Light mode is active')\n * }\n * })\n * ```\n */\n public isDarkMode(): Observable<boolean> {\n return this.resolvedScheme$.pipe(\n map(scheme => scheme === 'dark')\n )\n }\n\n /**\n * Toggle between light and dark mode.\n * If currently in 'auto' mode, defaults to 'light'.\n *\n * @example\n * ```typescript\n * // Toggle theme on button click\n * button.addEventListener('click', () => {\n * theme.toggleScheme()\n * })\n * ```\n */\n public toggleScheme(): void {\n const currentScheme = this.scheme\n const newScheme = currentScheme === 'dark' ? 'light' :\n currentScheme === 'light' ? 'dark' :\n 'light' // If 'auto', default to 'light'\n this.setScheme(newScheme)\n }\n\n /**\n * Get the current value of a CSS variable from the theme.\n *\n * @param {string} variableName - Name of the CSS variable (without '--schmancy-' prefix)\n * @returns {string} The CSS variable value or empty string if not found\n *\n * @example\n * ```typescript\n * // Get primary color variable\n * const primaryColor = theme.getCSSVariable('color-primary')\n *\n * // Get surface color\n * const surfaceColor = theme.getCSSVariable('color-surface')\n * ```\n */\n public getCSSVariable(variableName: string): string {\n const component = this.themeComponent\n if (component) {\n const host = component.root ? document.body : (component.shadowRoot?.host as HTMLElement)\n if (host) {\n return getComputedStyle(host).getPropertyValue(`--schmancy-${variableName}`).trim()\n }\n }\n return ''\n }\n\n /**\n * Subscribe to changes of a specific CSS variable.\n *\n * @param {string} variableName - Name of the CSS variable to watch (without '--schmancy-' prefix)\n * @returns {Observable<string>} Observable that emits the CSS variable value when it changes\n *\n * @example\n * ```typescript\n * // Watch for primary color changes\n * theme.watchCSSVariable('color-primary').subscribe(color => {\n * console.log('Primary color changed to:', color)\n * })\n *\n * // Watch for surface color changes\n * theme.watchCSSVariable('color-surface').subscribe(color => {\n * console.log('Surface color changed to:', color)\n * })\n * ```\n */\n public watchCSSVariable(variableName: string): Observable<string> {\n return this.theme$.pipe(\n map(() => this.getCSSVariable(variableName)),\n distinctUntilChanged()\n )\n }\n\n /**\n * Set the fullscreen state for the application.\n * This emits a custom event that navigation components can listen to.\n *\n * @param {boolean} value - Whether fullscreen mode is active\n *\n * @example\n * ```typescript\n * // Enter fullscreen mode\n * theme.setFullscreen(true)\n *\n * // Exit fullscreen mode\n * theme.setFullscreen(false)\n * ```\n */\n public setFullscreen(value: boolean): void {\n this._fullscreen$.next(value)\n\n // Emit custom event for components to listen to\n window.dispatchEvent(\n new CustomEvent('fullscreen', {\n detail: value,\n bubbles: true,\n composed: true\n })\n )\n }\n\n /**\n * Toggle fullscreen mode.\n *\n * @example\n * ```typescript\n * // Toggle fullscreen mode on button click\n * button.addEventListener('click', () => {\n * theme.toggleFullscreen()\n * })\n * ```\n */\n public toggleFullscreen(): void {\n this.setFullscreen(!this.fullscreen)\n }\n\n /**\n * Set the bottom offset for viewport calculations.\n * Used by navigation bars to inform fullHeight directive of reserved space.\n *\n * @param {number} value - Bottom offset in pixels\n *\n * @example\n * ```typescript\n * // Set bottom offset when nav bar is visible\n * theme.setBottomOffset(80)\n *\n * // Clear bottom offset when nav bar is hidden\n * theme.setBottomOffset(0)\n * ```\n */\n public setBottomOffset(value: number): void {\n this._bottomOffset$.next(value)\n }\n\n /**\n * Convenience method to update theme state including fullscreen.\n * Can be called with next() like syntax for familiarity.\n *\n * @param {Object} values - Theme values to update\n * @param {boolean} [values.fullscreen] - Fullscreen state\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme\n * @param {string} [values.color] - Primary color\n *\n * @example\n * ```typescript\n * // Set fullscreen mode\n * theme.next({ fullscreen: true })\n *\n * // Update multiple values\n * theme.next({\n * fullscreen: true,\n * scheme: 'dark'\n * })\n * ```\n */\n public next(values: {\n fullscreen?: boolean\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n }): void {\n if (values.fullscreen !== undefined) {\n this.setFullscreen(values.fullscreen)\n }\n if (values.scheme !== undefined) {\n this.setScheme(values.scheme)\n }\n if (values.color !== undefined) {\n this.setColor(values.color)\n }\n }\n\n /**\n * Get the singleton instance of ThemeService.\n *\n * @returns {ThemeService} The singleton ThemeService instance\n *\n * @internal\n */\n static getInstance(): ThemeService {\n if (!ThemeService.instance) {\n ThemeService.instance = new ThemeService()\n }\n return ThemeService.instance\n }\n}\n\n/**\n * Theme singleton. Reads and mutates the active theme (scheme, source color,\n * locale); persists the user's scheme choice. Components subscribe via\n * `theme.theme$` for changes.\n *\n * @service\n * @summary Theme service — active scheme, source color, locale.\n * @method next({ scheme?, source?, locale? }) - Update theme state.\n * @method theme$ - Observable<TSchmancyTheme>; emits on every theme change.\n * @method toggle() - Toggle between light and dark schemes.\n */\nexport const theme = ThemeService.getInstance()\nexport const schmancyTheme = theme // Alias for convenience\nexport default theme"],"mappings":"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"}
1
+ {"version":3,"file":"theme.service-BrUbGoeQ.cjs","names":[],"sources":["../src/theme/theme.service.ts"],"sourcesContent":["import {\n BehaviorSubject,\n Observable,\n fromEvent,\n timer,\n map,\n takeUntil,\n defaultIfEmpty,\n distinctUntilChanged,\n shareReplay,\n tap,\n switchMap,\n of\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from './theme.events'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type { TSchmancyTheme } from './theme.interface'\nimport { state } from '../state'\n\ninterface ThemeSettings {\n scheme: 'dark' | 'light' | 'auto'\n color: string\n}\n\n// Theme settings — persists to localStorage under namespace `schmancy/theme`.\nconst ThemeContext = state<ThemeSettings>('schmancy/theme').local({\n scheme: 'auto',\n color: '#6200ee',\n})\n\n/**\n * Theme Service - Provides centralized theme management for Schmancy components.\n *\n * This service acts as a singleton interface to interact with the theme system,\n * providing reactive observables for theme state and methods to control theming.\n *\n * @example\n * ```typescript\n * import { theme } from '@schmancy/theme'\n *\n * // Subscribe to theme changes\n * theme.scheme$.subscribe(scheme => {\n * console.log('Current scheme:', scheme) // 'light' | 'dark' | 'auto'\n * })\n *\n * // Get current values synchronously\n * const currentScheme = theme.scheme\n * const currentColor = theme.color\n *\n * // Toggle between light and dark mode\n * theme.toggleScheme()\n *\n * // Set specific scheme\n * theme.setScheme('dark')\n *\n * // Check if dark mode is active\n * theme.isDarkMode().subscribe(isDark => {\n * console.log('Is dark mode:', isDark)\n * })\n * ```\n */\nclass ThemeService {\n private static instance: ThemeService\n\n // Observable properties for theme values\n private _theme$ = new BehaviorSubject<Partial<TSchmancyTheme>>({})\n private _themeComponent$ = new BehaviorSubject<SchmancyThemeComponent | null>(null)\n private _fullscreen$ = new BehaviorSubject<boolean>(false)\n private _bottomOffset$ = new BehaviorSubject<number>(0)\n\n // Public observables derived from context\n public readonly scheme$ = ThemeContext.$.pipe(\n map(settings => settings.scheme),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly color$ = ThemeContext.$.pipe(\n map(settings => settings.color),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly theme$ = this._theme$.asObservable().pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n shareReplay(1)\n )\n\n public readonly themeComponent$ = this._themeComponent$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly fullscreen$ = this._fullscreen$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly bottomOffset$ = this._bottomOffset$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n // Getters for synchronous access to current values\n get scheme(): 'dark' | 'light' | 'auto' {\n return ThemeContext.value.scheme\n }\n\n get color(): string {\n return ThemeContext.value.color\n }\n\n get theme(): Partial<TSchmancyTheme> {\n return this._theme$.getValue()\n }\n\n get themeComponent(): SchmancyThemeComponent | null {\n return this._themeComponent$.getValue()\n }\n\n get fullscreen(): boolean {\n return this._fullscreen$.getValue()\n }\n\n get bottomOffset(): number {\n return this._bottomOffset$.getValue()\n }\n\n // Computed observable for actual scheme (resolving 'auto')\n public readonly resolvedScheme$ = this.scheme$.pipe(\n switchMap(scheme => {\n if (scheme === 'auto') {\n // Listen to system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return new Observable<'dark' | 'light'>(subscriber => {\n const handler = (e: MediaQueryListEvent) => {\n subscriber.next(e.matches ? 'dark' : 'light')\n }\n mediaQuery.addEventListener('change', handler)\n\n // Emit initial value\n subscriber.next(mediaQuery.matches ? 'dark' : 'light')\n\n // Cleanup\n return () => mediaQuery.removeEventListener('change', handler)\n })\n }\n return of(scheme as 'dark' | 'light')\n }),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n constructor() {\n this.discoverTheme()\n }\n\n /**\n * Discover the nearest theme component in the DOM.\n * This method can be called to refresh the theme discovery process.\n *\n * @returns {Observable<SchmancyThemeComponent | null>} Observable that emits the discovered theme component or null\n *\n * @example\n * ```typescript\n * theme.discoverTheme().subscribe(component => {\n * if (component) {\n * console.log('Theme component found:', component)\n * } else {\n * console.log('No theme component found')\n * }\n * })\n * ```\n */\n public discoverTheme(): Observable<SchmancyThemeComponent | null> {\n // Dispatch discovery event and wait for response\n return fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)), // Wait up to 100ms for response\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n ).pipe(\n tap(() => {\n // Trigger theme discovery\n window.dispatchEvent(\n new CustomEvent(ThemeWhereAreYou, {\n bubbles: true,\n composed: true,\n })\n )\n }),\n switchMap(() =>\n fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)),\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n )\n )\n )\n }\n\n /**\n * Register a theme component and subscribe to its changes.\n * This is typically called internally by theme components when they mount or update.\n *\n * @param {SchmancyThemeComponent} component - The theme component to register\n *\n * @internal\n */\n public registerThemeComponent(component: SchmancyThemeComponent): void {\n this._themeComponent$.next(component)\n\n // Update values from the component\n ThemeContext.set({ scheme: component.scheme, color: component.color })\n this._theme$.next(component.theme)\n }\n\n /**\n * Update theme values. Usually called internally by theme components.\n *\n * @param {Object} values - Theme values to update\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme to set\n * @param {string} [values.color] - Primary color in hex format\n * @param {Partial<TSchmancyTheme>} [values.theme] - Theme configuration object\n *\n * @internal\n */\n public updateTheme(values: {\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n theme?: Partial<TSchmancyTheme>\n }): void {\n const updates: Partial<ThemeSettings> = {}\n if (values.scheme !== undefined) {\n updates.scheme = values.scheme\n }\n if (values.color !== undefined) {\n updates.color = values.color\n }\n if (Object.keys(updates).length > 0) {\n ThemeContext.set(updates)\n }\n if (values.theme !== undefined) {\n this._theme$.next(values.theme)\n }\n }\n\n /**\n * Set the color scheme for the application.\n *\n * @param {'dark' | 'light' | 'auto'} scheme - The color scheme to set\n *\n * @example\n * ```typescript\n * // Set to dark mode\n * theme.setScheme('dark')\n *\n * // Set to auto (follows system preference)\n * theme.setScheme('auto')\n * ```\n */\n public setScheme(scheme: 'dark' | 'light' | 'auto'): void {\n const component = this.themeComponent\n if (component) {\n component.scheme = scheme\n ThemeContext.set({ scheme })\n } else {\n console.warn('No theme component found. Scheme change may not persist.')\n ThemeContext.set({ scheme })\n }\n }\n\n /**\n * Set the primary color for the theme.\n *\n * @param {string} color - Primary color in hex format (e.g., '#6200ee')\n *\n * @example\n * ```typescript\n * // Set primary color to purple\n * theme.setColor('#6200ee')\n *\n * // Set primary color to blue\n * theme.setColor('#2196f3')\n * ```\n */\n public setColor(color: string): void {\n const component = this.themeComponent\n if (component) {\n component.color = color\n ThemeContext.set({ color })\n } else {\n console.warn('No theme component found. Color change may not persist.')\n ThemeContext.set({ color })\n }\n }\n\n /**\n * Check if dark mode is currently active.\n * This resolves 'auto' scheme to the actual value based on system preference.\n *\n * @returns {Observable<boolean>} Observable that emits true if dark mode is active, false otherwise\n *\n * @example\n * ```typescript\n * theme.isDarkMode().subscribe(isDark => {\n * if (isDark) {\n * console.log('Dark mode is active')\n * } else {\n * console.log('Light mode is active')\n * }\n * })\n * ```\n */\n public isDarkMode(): Observable<boolean> {\n return this.resolvedScheme$.pipe(\n map(scheme => scheme === 'dark')\n )\n }\n\n /**\n * Toggle between light and dark mode.\n * If currently in 'auto' mode, defaults to 'light'.\n *\n * @example\n * ```typescript\n * // Toggle theme on button click\n * button.addEventListener('click', () => {\n * theme.toggleScheme()\n * })\n * ```\n */\n public toggleScheme(): void {\n const currentScheme = this.scheme\n const newScheme = currentScheme === 'dark' ? 'light' :\n currentScheme === 'light' ? 'dark' :\n 'light' // If 'auto', default to 'light'\n this.setScheme(newScheme)\n }\n\n /**\n * Get the current value of a CSS variable from the theme.\n *\n * @param {string} variableName - Name of the CSS variable (without '--schmancy-' prefix)\n * @returns {string} The CSS variable value or empty string if not found\n *\n * @example\n * ```typescript\n * // Get primary color variable\n * const primaryColor = theme.getCSSVariable('color-primary')\n *\n * // Get surface color\n * const surfaceColor = theme.getCSSVariable('color-surface')\n * ```\n */\n public getCSSVariable(variableName: string): string {\n const component = this.themeComponent\n if (component) {\n const host = component.root ? document.body : (component.shadowRoot?.host as HTMLElement)\n if (host) {\n return getComputedStyle(host).getPropertyValue(`--schmancy-${variableName}`).trim()\n }\n }\n return ''\n }\n\n /**\n * Subscribe to changes of a specific CSS variable.\n *\n * @param {string} variableName - Name of the CSS variable to watch (without '--schmancy-' prefix)\n * @returns {Observable<string>} Observable that emits the CSS variable value when it changes\n *\n * @example\n * ```typescript\n * // Watch for primary color changes\n * theme.watchCSSVariable('color-primary').subscribe(color => {\n * console.log('Primary color changed to:', color)\n * })\n *\n * // Watch for surface color changes\n * theme.watchCSSVariable('color-surface').subscribe(color => {\n * console.log('Surface color changed to:', color)\n * })\n * ```\n */\n public watchCSSVariable(variableName: string): Observable<string> {\n return this.theme$.pipe(\n map(() => this.getCSSVariable(variableName)),\n distinctUntilChanged()\n )\n }\n\n /**\n * Set the fullscreen state for the application.\n * This emits a custom event that navigation components can listen to.\n *\n * @param {boolean} value - Whether fullscreen mode is active\n *\n * @example\n * ```typescript\n * // Enter fullscreen mode\n * theme.setFullscreen(true)\n *\n * // Exit fullscreen mode\n * theme.setFullscreen(false)\n * ```\n */\n public setFullscreen(value: boolean): void {\n this._fullscreen$.next(value)\n\n // Emit custom event for components to listen to\n window.dispatchEvent(\n new CustomEvent('fullscreen', {\n detail: value,\n bubbles: true,\n composed: true\n })\n )\n }\n\n /**\n * Toggle fullscreen mode.\n *\n * @example\n * ```typescript\n * // Toggle fullscreen mode on button click\n * button.addEventListener('click', () => {\n * theme.toggleFullscreen()\n * })\n * ```\n */\n public toggleFullscreen(): void {\n this.setFullscreen(!this.fullscreen)\n }\n\n /**\n * Set the bottom offset for viewport calculations.\n * Used by navigation bars to inform fullHeight directive of reserved space.\n *\n * @param {number} value - Bottom offset in pixels\n *\n * @example\n * ```typescript\n * // Set bottom offset when nav bar is visible\n * theme.setBottomOffset(80)\n *\n * // Clear bottom offset when nav bar is hidden\n * theme.setBottomOffset(0)\n * ```\n */\n public setBottomOffset(value: number): void {\n this._bottomOffset$.next(value)\n }\n\n /**\n * Convenience method to update theme state including fullscreen.\n * Can be called with next() like syntax for familiarity.\n *\n * @param {Object} values - Theme values to update\n * @param {boolean} [values.fullscreen] - Fullscreen state\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme\n * @param {string} [values.color] - Primary color\n *\n * @example\n * ```typescript\n * // Set fullscreen mode\n * theme.next({ fullscreen: true })\n *\n * // Update multiple values\n * theme.next({\n * fullscreen: true,\n * scheme: 'dark'\n * })\n * ```\n */\n public next(values: {\n fullscreen?: boolean\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n }): void {\n if (values.fullscreen !== undefined) {\n this.setFullscreen(values.fullscreen)\n }\n if (values.scheme !== undefined) {\n this.setScheme(values.scheme)\n }\n if (values.color !== undefined) {\n this.setColor(values.color)\n }\n }\n\n /**\n * Get the singleton instance of ThemeService.\n *\n * @returns {ThemeService} The singleton ThemeService instance\n *\n * @internal\n */\n static getInstance(): ThemeService {\n if (!ThemeService.instance) {\n ThemeService.instance = new ThemeService()\n }\n return ThemeService.instance\n }\n}\n\n/**\n * Theme singleton. Reads and mutates the active theme (scheme, source color,\n * locale); persists the user's scheme choice. Components subscribe via\n * `theme.theme$` for changes.\n *\n * @service\n * @summary Theme service — active scheme, source color, locale.\n * @method next({ scheme?, source?, locale? }) - Update theme state.\n * @method theme$ - Observable<TSchmancyTheme>; emits on every theme change.\n * @method toggle() - Toggle between light and dark schemes.\n */\nexport const theme = ThemeService.getInstance()\nexport const schmancyTheme = theme // Alias for convenience\nexport default theme"],"mappings":"uIAyBA,IAAM,EAAe,EAAA,EAAqB,iBAAA,CAAkB,MAAM,CAChE,OAAQ,OACR,MAAO,UAAA,CAAA,CAmfI,EAjdb,MAAM,CAAA,CA2CJ,IAAA,QAAI,CACF,OAAO,EAAa,MAAM,OAG5B,IAAA,OAAI,CACF,OAAO,EAAa,MAAM,MAG5B,IAAA,OAAI,CACF,OAAO,KAAK,QAAQ,UAAA,CAGtB,IAAA,gBAAI,CACF,OAAO,KAAK,iBAAiB,UAAA,CAG/B,IAAA,YAAI,CACF,OAAO,KAAK,aAAa,UAAA,CAG3B,IAAA,cAAI,CACF,OAAO,KAAK,eAAe,UAAA,CA4B7B,aAAA,CAAA,KAAA,QAxFkB,IAAI,EAAA,gBAAyC,EAAA,CAAA,CAAA,KAAA,iBACpC,IAAI,EAAA,gBAA+C,KAAA,CAAA,KAAA,aACvD,IAAI,EAAA,gBAAA,CAAyB,EAAA,CAAA,KAAA,eAC3B,IAAI,EAAA,gBAAwB,EAAA,CAAA,KAAA,QAG3B,EAAa,EAAE,MAAA,EAAA,EAAA,KACnC,GAAY,EAAS,OAAA,EAAO,EAAA,EAAA,uBAAA,EACV,EAAA,EAAA,aACV,EAAA,CAAA,CAAA,KAAA,OAGW,EAAa,EAAE,MAAA,EAAA,EAAA,KAClC,GAAY,EAAS,MAAA,EAAM,EAAA,EAAA,uBAAA,EACT,EAAA,EAAA,aACV,EAAA,CAAA,CAAA,KAAA,OAGW,KAAK,QAAQ,cAAA,CAAe,MAAA,EAAA,EAAA,uBAC7B,EAAG,IAAM,KAAK,UAAU,EAAA,GAAO,KAAK,UAAU,EAAA,CAAA,EAAG,EAAA,EAAA,aAC3D,EAAA,CAAA,CAAA,KAAA,gBAGoB,KAAK,iBAAiB,cAAA,CAAe,MAAA,EAAA,EAAA,uBAAA,EAC/C,EAAA,EAAA,aACV,EAAA,CAAA,CAAA,KAAA,YAGgB,KAAK,aAAa,cAAA,CAAe,MAAA,EAAA,EAAA,uBAAA,EACvC,EAAA,EAAA,aACV,EAAA,CAAA,CAAA,KAAA,cAGkB,KAAK,eAAe,cAAA,CAAe,MAAA,EAAA,EAAA,uBAAA,EAC3C,EAAA,EAAA,aACV,EAAA,CAAA,CAAA,KAAA,gBA6BoB,KAAK,QAAQ,MAAA,EAAA,EAAA,WACnC,GAAA,CACR,GAAI,IAAW,OAAQ,CAErB,IAAM,EAAa,OAAO,WAAW,+BAAA,CACrC,OAAO,IAAI,EAAA,WAA6B,GAAA,CACtC,IAAM,EAAW,GAAA,CACf,EAAW,KAAK,EAAE,QAAU,OAAS,QAAA,EAQvC,OANA,EAAW,iBAAiB,SAAU,EAAA,CAGtC,EAAW,KAAK,EAAW,QAAU,OAAS,QAAA,KAGjC,EAAW,oBAAoB,SAAU,EAAA,EAAA,CAG1D,OAAA,EAAA,EAAA,IAAU,EAAA,EAAA,EACV,EAAA,EAAA,uBAAA,EACoB,EAAA,EAAA,aACV,EAAA,CAAA,CAIZ,KAAK,eAAA,CAoBP,eAAA,CAEE,OAAA,EAAA,EAAA,WAAoC,OAAQ,EAAA,EAAA,CAAc,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,OACxC,IAAA,CAAA,EAAK,EAAA,EAAA,KACjB,GAAK,EAAE,OAAO,MAAA,EAAgC,EAAA,EAAA,gBACnC,KAAA,EAAK,EAAA,EAAA,KAChB,GAAA,CACE,GACF,KAAK,uBAAuB,EAAA,EAAA,CAAA,CAGhC,MAAA,EAAA,EAAA,SAAA,CAGE,OAAO,cACL,IAAI,YAAY,EAAA,EAAkB,CAChC,QAAA,CAAS,EACT,SAAA,CAAU,EAAA,CAAA,CAAA,EAAA,EAGd,EAAA,EAAA,gBAAA,EAAA,EAAA,WAE6B,OAAQ,EAAA,EAAA,CAAc,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,OACjC,IAAA,CAAA,EAAK,EAAA,EAAA,KACjB,GAAK,EAAE,OAAO,MAAA,EAAgC,EAAA,EAAA,gBACnC,KAAA,EAAK,EAAA,EAAA,KAChB,GAAA,CACE,GACF,KAAK,uBAAuB,EAAA,EAAA,CAAA,CAAA,CAAA,CAgBxC,uBAA8B,EAAA,CAC5B,KAAK,iBAAiB,KAAK,EAAA,CAG3B,EAAa,IAAI,CAAE,OAAQ,EAAU,OAAQ,MAAO,EAAU,MAAA,CAAA,CAC9D,KAAK,QAAQ,KAAK,EAAU,MAAA,CAa9B,YAAmB,EAAA,CAKjB,IAAM,EAAkC,EAAA,CACpC,EAAO,SAD6B,IAClB,KACpB,EAAQ,OAAS,EAAO,QAEtB,EAAO,QAFe,IAEL,KACnB,EAAQ,MAAQ,EAAO,OAErB,OAAO,KAAK,EAAA,CAAS,OAAS,GAChC,EAAa,IAAI,EAAA,CAEf,EAAO,QAFQ,IAEE,IACnB,KAAK,QAAQ,KAAK,EAAO,MAAA,CAkB7B,UAAiB,EAAA,CACf,IAAM,EAAY,KAAK,eACnB,IACF,EAAU,OAAS,GAInB,EAAa,IAAI,CAAE,OAAA,EAAA,CAAA,CAkBvB,SAAgB,EAAA,CACd,IAAM,EAAY,KAAK,eACnB,IACF,EAAU,MAAQ,GAIlB,EAAa,IAAI,CAAE,MAAA,EAAA,CAAA,CAqBvB,YAAA,CACE,OAAO,KAAK,gBAAgB,MAAA,EAAA,EAAA,KACtB,GAAU,IAAW,OAAX,CAAA,CAgBlB,cAAA,CACE,IAAM,EAAgB,KAAK,OACrB,EAAY,IAAkB,OAAS,QAC5B,IAAkB,QAAU,OAC5B,QACjB,KAAK,UAAU,EAAA,CAkBjB,eAAsB,EAAA,CACpB,IAAM,EAAY,KAAK,eACvB,GAAI,EAAW,CACb,IAAM,EAAO,EAAU,KAAO,SAAS,KAAQ,EAAU,YAAY,KACrE,GAAI,EACF,OAAO,iBAAiB,EAAA,CAAM,iBAAiB,cAAc,IAAA,CAAgB,MAAA,CAGjF,MAAO,GAsBT,iBAAwB,EAAA,CACtB,OAAO,KAAK,OAAO,MAAA,EAAA,EAAA,SACP,KAAK,eAAe,EAAA,CAAA,EAAc,EAAA,EAAA,uBAAA,CAAA,CAoBhD,cAAqB,EAAA,CACnB,KAAK,aAAa,KAAK,EAAA,CAGvB,OAAO,cACL,IAAI,YAAY,aAAc,CAC5B,OAAQ,EACR,QAAA,CAAS,EACT,SAAA,CAAU,EAAA,CAAA,CAAA,CAgBhB,kBAAA,CACE,KAAK,cAAA,CAAe,KAAK,WAAA,CAkB3B,gBAAuB,EAAA,CACrB,KAAK,eAAe,KAAK,EAAA,CAwB3B,KAAY,EAAA,CAKN,EAAO,aALD,IAKgB,IACxB,KAAK,cAAc,EAAO,WAAA,CAExB,EAAO,SAFiB,IAEN,IACpB,KAAK,UAAU,EAAO,OAAA,CAEpB,EAAO,QAFa,IAEH,IACnB,KAAK,SAAS,EAAO,MAAA,CAWzB,OAAA,aAAO,CAIL,MAHK,CACH,EAAa,WAAW,IAAI,EAEvB,EAAa,WAeU,aAAA,CACrB,EAAgB,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA"}
@@ -1,4 +1,4 @@
1
- import { o as e } from "./state-ClRXrqDA.js";
1
+ import { o as e } from "./state-BusMG6sM.js";
2
2
  import { n as t, t as n } from "./theme.events-Cv7N4Toe.js";
3
3
  import { BehaviorSubject as r, Observable as i, defaultIfEmpty as a, distinctUntilChanged as o, fromEvent as s, map as c, of as l, shareReplay as u, switchMap as d, takeUntil as f, tap as p, timer as m } from "rxjs";
4
4
  var h = e("schmancy/theme").local({
@@ -1 +1 @@
1
- {"version":3,"file":"theme.service-9clsqyee.js","names":[],"sources":["../src/theme/theme.service.ts"],"sourcesContent":["import {\n BehaviorSubject,\n Observable,\n fromEvent,\n timer,\n map,\n takeUntil,\n defaultIfEmpty,\n distinctUntilChanged,\n shareReplay,\n tap,\n switchMap,\n of\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from './theme.events'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type { TSchmancyTheme } from './theme.interface'\nimport { state } from '../state'\n\ninterface ThemeSettings {\n scheme: 'dark' | 'light' | 'auto'\n color: string\n}\n\n// Theme settings — persists to localStorage under namespace `schmancy/theme`.\nconst ThemeContext = state<ThemeSettings>('schmancy/theme').local({\n scheme: 'auto',\n color: '#6200ee',\n})\n\n/**\n * Theme Service - Provides centralized theme management for Schmancy components.\n *\n * This service acts as a singleton interface to interact with the theme system,\n * providing reactive observables for theme state and methods to control theming.\n *\n * @example\n * ```typescript\n * import { theme } from '@schmancy/theme'\n *\n * // Subscribe to theme changes\n * theme.scheme$.subscribe(scheme => {\n * console.log('Current scheme:', scheme) // 'light' | 'dark' | 'auto'\n * })\n *\n * // Get current values synchronously\n * const currentScheme = theme.scheme\n * const currentColor = theme.color\n *\n * // Toggle between light and dark mode\n * theme.toggleScheme()\n *\n * // Set specific scheme\n * theme.setScheme('dark')\n *\n * // Check if dark mode is active\n * theme.isDarkMode().subscribe(isDark => {\n * console.log('Is dark mode:', isDark)\n * })\n * ```\n */\nclass ThemeService {\n private static instance: ThemeService\n\n // Observable properties for theme values\n private _theme$ = new BehaviorSubject<Partial<TSchmancyTheme>>({})\n private _themeComponent$ = new BehaviorSubject<SchmancyThemeComponent | null>(null)\n private _fullscreen$ = new BehaviorSubject<boolean>(false)\n private _bottomOffset$ = new BehaviorSubject<number>(0)\n\n // Public observables derived from context\n public readonly scheme$ = ThemeContext.$.pipe(\n map(settings => settings.scheme),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly color$ = ThemeContext.$.pipe(\n map(settings => settings.color),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly theme$ = this._theme$.asObservable().pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n shareReplay(1)\n )\n\n public readonly themeComponent$ = this._themeComponent$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly fullscreen$ = this._fullscreen$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly bottomOffset$ = this._bottomOffset$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n // Getters for synchronous access to current values\n get scheme(): 'dark' | 'light' | 'auto' {\n return ThemeContext.value.scheme\n }\n\n get color(): string {\n return ThemeContext.value.color\n }\n\n get theme(): Partial<TSchmancyTheme> {\n return this._theme$.getValue()\n }\n\n get themeComponent(): SchmancyThemeComponent | null {\n return this._themeComponent$.getValue()\n }\n\n get fullscreen(): boolean {\n return this._fullscreen$.getValue()\n }\n\n get bottomOffset(): number {\n return this._bottomOffset$.getValue()\n }\n\n // Computed observable for actual scheme (resolving 'auto')\n public readonly resolvedScheme$ = this.scheme$.pipe(\n switchMap(scheme => {\n if (scheme === 'auto') {\n // Listen to system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return new Observable<'dark' | 'light'>(subscriber => {\n const handler = (e: MediaQueryListEvent) => {\n subscriber.next(e.matches ? 'dark' : 'light')\n }\n mediaQuery.addEventListener('change', handler)\n\n // Emit initial value\n subscriber.next(mediaQuery.matches ? 'dark' : 'light')\n\n // Cleanup\n return () => mediaQuery.removeEventListener('change', handler)\n })\n }\n return of(scheme as 'dark' | 'light')\n }),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n constructor() {\n this.discoverTheme()\n }\n\n /**\n * Discover the nearest theme component in the DOM.\n * This method can be called to refresh the theme discovery process.\n *\n * @returns {Observable<SchmancyThemeComponent | null>} Observable that emits the discovered theme component or null\n *\n * @example\n * ```typescript\n * theme.discoverTheme().subscribe(component => {\n * if (component) {\n * console.log('Theme component found:', component)\n * } else {\n * console.log('No theme component found')\n * }\n * })\n * ```\n */\n public discoverTheme(): Observable<SchmancyThemeComponent | null> {\n // Dispatch discovery event and wait for response\n return fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)), // Wait up to 100ms for response\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n ).pipe(\n tap(() => {\n // Trigger theme discovery\n window.dispatchEvent(\n new CustomEvent(ThemeWhereAreYou, {\n bubbles: true,\n composed: true,\n })\n )\n }),\n switchMap(() =>\n fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)),\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n )\n )\n )\n }\n\n /**\n * Register a theme component and subscribe to its changes.\n * This is typically called internally by theme components when they mount or update.\n *\n * @param {SchmancyThemeComponent} component - The theme component to register\n *\n * @internal\n */\n public registerThemeComponent(component: SchmancyThemeComponent): void {\n this._themeComponent$.next(component)\n\n // Update values from the component\n ThemeContext.set({ scheme: component.scheme, color: component.color })\n this._theme$.next(component.theme)\n }\n\n /**\n * Update theme values. Usually called internally by theme components.\n *\n * @param {Object} values - Theme values to update\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme to set\n * @param {string} [values.color] - Primary color in hex format\n * @param {Partial<TSchmancyTheme>} [values.theme] - Theme configuration object\n *\n * @internal\n */\n public updateTheme(values: {\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n theme?: Partial<TSchmancyTheme>\n }): void {\n const updates: Partial<ThemeSettings> = {}\n if (values.scheme !== undefined) {\n updates.scheme = values.scheme\n }\n if (values.color !== undefined) {\n updates.color = values.color\n }\n if (Object.keys(updates).length > 0) {\n ThemeContext.set(updates)\n }\n if (values.theme !== undefined) {\n this._theme$.next(values.theme)\n }\n }\n\n /**\n * Set the color scheme for the application.\n *\n * @param {'dark' | 'light' | 'auto'} scheme - The color scheme to set\n *\n * @example\n * ```typescript\n * // Set to dark mode\n * theme.setScheme('dark')\n *\n * // Set to auto (follows system preference)\n * theme.setScheme('auto')\n * ```\n */\n public setScheme(scheme: 'dark' | 'light' | 'auto'): void {\n const component = this.themeComponent\n if (component) {\n component.scheme = scheme\n ThemeContext.set({ scheme })\n } else {\n console.warn('No theme component found. Scheme change may not persist.')\n ThemeContext.set({ scheme })\n }\n }\n\n /**\n * Set the primary color for the theme.\n *\n * @param {string} color - Primary color in hex format (e.g., '#6200ee')\n *\n * @example\n * ```typescript\n * // Set primary color to purple\n * theme.setColor('#6200ee')\n *\n * // Set primary color to blue\n * theme.setColor('#2196f3')\n * ```\n */\n public setColor(color: string): void {\n const component = this.themeComponent\n if (component) {\n component.color = color\n ThemeContext.set({ color })\n } else {\n console.warn('No theme component found. Color change may not persist.')\n ThemeContext.set({ color })\n }\n }\n\n /**\n * Check if dark mode is currently active.\n * This resolves 'auto' scheme to the actual value based on system preference.\n *\n * @returns {Observable<boolean>} Observable that emits true if dark mode is active, false otherwise\n *\n * @example\n * ```typescript\n * theme.isDarkMode().subscribe(isDark => {\n * if (isDark) {\n * console.log('Dark mode is active')\n * } else {\n * console.log('Light mode is active')\n * }\n * })\n * ```\n */\n public isDarkMode(): Observable<boolean> {\n return this.resolvedScheme$.pipe(\n map(scheme => scheme === 'dark')\n )\n }\n\n /**\n * Toggle between light and dark mode.\n * If currently in 'auto' mode, defaults to 'light'.\n *\n * @example\n * ```typescript\n * // Toggle theme on button click\n * button.addEventListener('click', () => {\n * theme.toggleScheme()\n * })\n * ```\n */\n public toggleScheme(): void {\n const currentScheme = this.scheme\n const newScheme = currentScheme === 'dark' ? 'light' :\n currentScheme === 'light' ? 'dark' :\n 'light' // If 'auto', default to 'light'\n this.setScheme(newScheme)\n }\n\n /**\n * Get the current value of a CSS variable from the theme.\n *\n * @param {string} variableName - Name of the CSS variable (without '--schmancy-' prefix)\n * @returns {string} The CSS variable value or empty string if not found\n *\n * @example\n * ```typescript\n * // Get primary color variable\n * const primaryColor = theme.getCSSVariable('color-primary')\n *\n * // Get surface color\n * const surfaceColor = theme.getCSSVariable('color-surface')\n * ```\n */\n public getCSSVariable(variableName: string): string {\n const component = this.themeComponent\n if (component) {\n const host = component.root ? document.body : (component.shadowRoot?.host as HTMLElement)\n if (host) {\n return getComputedStyle(host).getPropertyValue(`--schmancy-${variableName}`).trim()\n }\n }\n return ''\n }\n\n /**\n * Subscribe to changes of a specific CSS variable.\n *\n * @param {string} variableName - Name of the CSS variable to watch (without '--schmancy-' prefix)\n * @returns {Observable<string>} Observable that emits the CSS variable value when it changes\n *\n * @example\n * ```typescript\n * // Watch for primary color changes\n * theme.watchCSSVariable('color-primary').subscribe(color => {\n * console.log('Primary color changed to:', color)\n * })\n *\n * // Watch for surface color changes\n * theme.watchCSSVariable('color-surface').subscribe(color => {\n * console.log('Surface color changed to:', color)\n * })\n * ```\n */\n public watchCSSVariable(variableName: string): Observable<string> {\n return this.theme$.pipe(\n map(() => this.getCSSVariable(variableName)),\n distinctUntilChanged()\n )\n }\n\n /**\n * Set the fullscreen state for the application.\n * This emits a custom event that navigation components can listen to.\n *\n * @param {boolean} value - Whether fullscreen mode is active\n *\n * @example\n * ```typescript\n * // Enter fullscreen mode\n * theme.setFullscreen(true)\n *\n * // Exit fullscreen mode\n * theme.setFullscreen(false)\n * ```\n */\n public setFullscreen(value: boolean): void {\n this._fullscreen$.next(value)\n\n // Emit custom event for components to listen to\n window.dispatchEvent(\n new CustomEvent('fullscreen', {\n detail: value,\n bubbles: true,\n composed: true\n })\n )\n }\n\n /**\n * Toggle fullscreen mode.\n *\n * @example\n * ```typescript\n * // Toggle fullscreen mode on button click\n * button.addEventListener('click', () => {\n * theme.toggleFullscreen()\n * })\n * ```\n */\n public toggleFullscreen(): void {\n this.setFullscreen(!this.fullscreen)\n }\n\n /**\n * Set the bottom offset for viewport calculations.\n * Used by navigation bars to inform fullHeight directive of reserved space.\n *\n * @param {number} value - Bottom offset in pixels\n *\n * @example\n * ```typescript\n * // Set bottom offset when nav bar is visible\n * theme.setBottomOffset(80)\n *\n * // Clear bottom offset when nav bar is hidden\n * theme.setBottomOffset(0)\n * ```\n */\n public setBottomOffset(value: number): void {\n this._bottomOffset$.next(value)\n }\n\n /**\n * Convenience method to update theme state including fullscreen.\n * Can be called with next() like syntax for familiarity.\n *\n * @param {Object} values - Theme values to update\n * @param {boolean} [values.fullscreen] - Fullscreen state\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme\n * @param {string} [values.color] - Primary color\n *\n * @example\n * ```typescript\n * // Set fullscreen mode\n * theme.next({ fullscreen: true })\n *\n * // Update multiple values\n * theme.next({\n * fullscreen: true,\n * scheme: 'dark'\n * })\n * ```\n */\n public next(values: {\n fullscreen?: boolean\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n }): void {\n if (values.fullscreen !== undefined) {\n this.setFullscreen(values.fullscreen)\n }\n if (values.scheme !== undefined) {\n this.setScheme(values.scheme)\n }\n if (values.color !== undefined) {\n this.setColor(values.color)\n }\n }\n\n /**\n * Get the singleton instance of ThemeService.\n *\n * @returns {ThemeService} The singleton ThemeService instance\n *\n * @internal\n */\n static getInstance(): ThemeService {\n if (!ThemeService.instance) {\n ThemeService.instance = new ThemeService()\n }\n return ThemeService.instance\n }\n}\n\n/**\n * Theme singleton. Reads and mutates the active theme (scheme, source color,\n * locale); persists the user's scheme choice. Components subscribe via\n * `theme.theme$` for changes.\n *\n * @service\n * @summary Theme service — active scheme, source color, locale.\n * @method next({ scheme?, source?, locale? }) - Update theme state.\n * @method theme$ - Observable<TSchmancyTheme>; emits on every theme change.\n * @method toggle() - Toggle between light and dark schemes.\n */\nexport const theme = ThemeService.getInstance()\nexport const schmancyTheme = theme // Alias for convenience\nexport default theme"],"mappings":"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"}
1
+ {"version":3,"file":"theme.service-CmbOGMA8.js","names":[],"sources":["../src/theme/theme.service.ts"],"sourcesContent":["import {\n BehaviorSubject,\n Observable,\n fromEvent,\n timer,\n map,\n takeUntil,\n defaultIfEmpty,\n distinctUntilChanged,\n shareReplay,\n tap,\n switchMap,\n of\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from './theme.events'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type { TSchmancyTheme } from './theme.interface'\nimport { state } from '../state'\n\ninterface ThemeSettings {\n scheme: 'dark' | 'light' | 'auto'\n color: string\n}\n\n// Theme settings — persists to localStorage under namespace `schmancy/theme`.\nconst ThemeContext = state<ThemeSettings>('schmancy/theme').local({\n scheme: 'auto',\n color: '#6200ee',\n})\n\n/**\n * Theme Service - Provides centralized theme management for Schmancy components.\n *\n * This service acts as a singleton interface to interact with the theme system,\n * providing reactive observables for theme state and methods to control theming.\n *\n * @example\n * ```typescript\n * import { theme } from '@schmancy/theme'\n *\n * // Subscribe to theme changes\n * theme.scheme$.subscribe(scheme => {\n * console.log('Current scheme:', scheme) // 'light' | 'dark' | 'auto'\n * })\n *\n * // Get current values synchronously\n * const currentScheme = theme.scheme\n * const currentColor = theme.color\n *\n * // Toggle between light and dark mode\n * theme.toggleScheme()\n *\n * // Set specific scheme\n * theme.setScheme('dark')\n *\n * // Check if dark mode is active\n * theme.isDarkMode().subscribe(isDark => {\n * console.log('Is dark mode:', isDark)\n * })\n * ```\n */\nclass ThemeService {\n private static instance: ThemeService\n\n // Observable properties for theme values\n private _theme$ = new BehaviorSubject<Partial<TSchmancyTheme>>({})\n private _themeComponent$ = new BehaviorSubject<SchmancyThemeComponent | null>(null)\n private _fullscreen$ = new BehaviorSubject<boolean>(false)\n private _bottomOffset$ = new BehaviorSubject<number>(0)\n\n // Public observables derived from context\n public readonly scheme$ = ThemeContext.$.pipe(\n map(settings => settings.scheme),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly color$ = ThemeContext.$.pipe(\n map(settings => settings.color),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly theme$ = this._theme$.asObservable().pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n shareReplay(1)\n )\n\n public readonly themeComponent$ = this._themeComponent$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly fullscreen$ = this._fullscreen$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly bottomOffset$ = this._bottomOffset$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n // Getters for synchronous access to current values\n get scheme(): 'dark' | 'light' | 'auto' {\n return ThemeContext.value.scheme\n }\n\n get color(): string {\n return ThemeContext.value.color\n }\n\n get theme(): Partial<TSchmancyTheme> {\n return this._theme$.getValue()\n }\n\n get themeComponent(): SchmancyThemeComponent | null {\n return this._themeComponent$.getValue()\n }\n\n get fullscreen(): boolean {\n return this._fullscreen$.getValue()\n }\n\n get bottomOffset(): number {\n return this._bottomOffset$.getValue()\n }\n\n // Computed observable for actual scheme (resolving 'auto')\n public readonly resolvedScheme$ = this.scheme$.pipe(\n switchMap(scheme => {\n if (scheme === 'auto') {\n // Listen to system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return new Observable<'dark' | 'light'>(subscriber => {\n const handler = (e: MediaQueryListEvent) => {\n subscriber.next(e.matches ? 'dark' : 'light')\n }\n mediaQuery.addEventListener('change', handler)\n\n // Emit initial value\n subscriber.next(mediaQuery.matches ? 'dark' : 'light')\n\n // Cleanup\n return () => mediaQuery.removeEventListener('change', handler)\n })\n }\n return of(scheme as 'dark' | 'light')\n }),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n constructor() {\n this.discoverTheme()\n }\n\n /**\n * Discover the nearest theme component in the DOM.\n * This method can be called to refresh the theme discovery process.\n *\n * @returns {Observable<SchmancyThemeComponent | null>} Observable that emits the discovered theme component or null\n *\n * @example\n * ```typescript\n * theme.discoverTheme().subscribe(component => {\n * if (component) {\n * console.log('Theme component found:', component)\n * } else {\n * console.log('No theme component found')\n * }\n * })\n * ```\n */\n public discoverTheme(): Observable<SchmancyThemeComponent | null> {\n // Dispatch discovery event and wait for response\n return fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)), // Wait up to 100ms for response\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n ).pipe(\n tap(() => {\n // Trigger theme discovery\n window.dispatchEvent(\n new CustomEvent(ThemeWhereAreYou, {\n bubbles: true,\n composed: true,\n })\n )\n }),\n switchMap(() =>\n fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)),\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n )\n )\n )\n }\n\n /**\n * Register a theme component and subscribe to its changes.\n * This is typically called internally by theme components when they mount or update.\n *\n * @param {SchmancyThemeComponent} component - The theme component to register\n *\n * @internal\n */\n public registerThemeComponent(component: SchmancyThemeComponent): void {\n this._themeComponent$.next(component)\n\n // Update values from the component\n ThemeContext.set({ scheme: component.scheme, color: component.color })\n this._theme$.next(component.theme)\n }\n\n /**\n * Update theme values. Usually called internally by theme components.\n *\n * @param {Object} values - Theme values to update\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme to set\n * @param {string} [values.color] - Primary color in hex format\n * @param {Partial<TSchmancyTheme>} [values.theme] - Theme configuration object\n *\n * @internal\n */\n public updateTheme(values: {\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n theme?: Partial<TSchmancyTheme>\n }): void {\n const updates: Partial<ThemeSettings> = {}\n if (values.scheme !== undefined) {\n updates.scheme = values.scheme\n }\n if (values.color !== undefined) {\n updates.color = values.color\n }\n if (Object.keys(updates).length > 0) {\n ThemeContext.set(updates)\n }\n if (values.theme !== undefined) {\n this._theme$.next(values.theme)\n }\n }\n\n /**\n * Set the color scheme for the application.\n *\n * @param {'dark' | 'light' | 'auto'} scheme - The color scheme to set\n *\n * @example\n * ```typescript\n * // Set to dark mode\n * theme.setScheme('dark')\n *\n * // Set to auto (follows system preference)\n * theme.setScheme('auto')\n * ```\n */\n public setScheme(scheme: 'dark' | 'light' | 'auto'): void {\n const component = this.themeComponent\n if (component) {\n component.scheme = scheme\n ThemeContext.set({ scheme })\n } else {\n console.warn('No theme component found. Scheme change may not persist.')\n ThemeContext.set({ scheme })\n }\n }\n\n /**\n * Set the primary color for the theme.\n *\n * @param {string} color - Primary color in hex format (e.g., '#6200ee')\n *\n * @example\n * ```typescript\n * // Set primary color to purple\n * theme.setColor('#6200ee')\n *\n * // Set primary color to blue\n * theme.setColor('#2196f3')\n * ```\n */\n public setColor(color: string): void {\n const component = this.themeComponent\n if (component) {\n component.color = color\n ThemeContext.set({ color })\n } else {\n console.warn('No theme component found. Color change may not persist.')\n ThemeContext.set({ color })\n }\n }\n\n /**\n * Check if dark mode is currently active.\n * This resolves 'auto' scheme to the actual value based on system preference.\n *\n * @returns {Observable<boolean>} Observable that emits true if dark mode is active, false otherwise\n *\n * @example\n * ```typescript\n * theme.isDarkMode().subscribe(isDark => {\n * if (isDark) {\n * console.log('Dark mode is active')\n * } else {\n * console.log('Light mode is active')\n * }\n * })\n * ```\n */\n public isDarkMode(): Observable<boolean> {\n return this.resolvedScheme$.pipe(\n map(scheme => scheme === 'dark')\n )\n }\n\n /**\n * Toggle between light and dark mode.\n * If currently in 'auto' mode, defaults to 'light'.\n *\n * @example\n * ```typescript\n * // Toggle theme on button click\n * button.addEventListener('click', () => {\n * theme.toggleScheme()\n * })\n * ```\n */\n public toggleScheme(): void {\n const currentScheme = this.scheme\n const newScheme = currentScheme === 'dark' ? 'light' :\n currentScheme === 'light' ? 'dark' :\n 'light' // If 'auto', default to 'light'\n this.setScheme(newScheme)\n }\n\n /**\n * Get the current value of a CSS variable from the theme.\n *\n * @param {string} variableName - Name of the CSS variable (without '--schmancy-' prefix)\n * @returns {string} The CSS variable value or empty string if not found\n *\n * @example\n * ```typescript\n * // Get primary color variable\n * const primaryColor = theme.getCSSVariable('color-primary')\n *\n * // Get surface color\n * const surfaceColor = theme.getCSSVariable('color-surface')\n * ```\n */\n public getCSSVariable(variableName: string): string {\n const component = this.themeComponent\n if (component) {\n const host = component.root ? document.body : (component.shadowRoot?.host as HTMLElement)\n if (host) {\n return getComputedStyle(host).getPropertyValue(`--schmancy-${variableName}`).trim()\n }\n }\n return ''\n }\n\n /**\n * Subscribe to changes of a specific CSS variable.\n *\n * @param {string} variableName - Name of the CSS variable to watch (without '--schmancy-' prefix)\n * @returns {Observable<string>} Observable that emits the CSS variable value when it changes\n *\n * @example\n * ```typescript\n * // Watch for primary color changes\n * theme.watchCSSVariable('color-primary').subscribe(color => {\n * console.log('Primary color changed to:', color)\n * })\n *\n * // Watch for surface color changes\n * theme.watchCSSVariable('color-surface').subscribe(color => {\n * console.log('Surface color changed to:', color)\n * })\n * ```\n */\n public watchCSSVariable(variableName: string): Observable<string> {\n return this.theme$.pipe(\n map(() => this.getCSSVariable(variableName)),\n distinctUntilChanged()\n )\n }\n\n /**\n * Set the fullscreen state for the application.\n * This emits a custom event that navigation components can listen to.\n *\n * @param {boolean} value - Whether fullscreen mode is active\n *\n * @example\n * ```typescript\n * // Enter fullscreen mode\n * theme.setFullscreen(true)\n *\n * // Exit fullscreen mode\n * theme.setFullscreen(false)\n * ```\n */\n public setFullscreen(value: boolean): void {\n this._fullscreen$.next(value)\n\n // Emit custom event for components to listen to\n window.dispatchEvent(\n new CustomEvent('fullscreen', {\n detail: value,\n bubbles: true,\n composed: true\n })\n )\n }\n\n /**\n * Toggle fullscreen mode.\n *\n * @example\n * ```typescript\n * // Toggle fullscreen mode on button click\n * button.addEventListener('click', () => {\n * theme.toggleFullscreen()\n * })\n * ```\n */\n public toggleFullscreen(): void {\n this.setFullscreen(!this.fullscreen)\n }\n\n /**\n * Set the bottom offset for viewport calculations.\n * Used by navigation bars to inform fullHeight directive of reserved space.\n *\n * @param {number} value - Bottom offset in pixels\n *\n * @example\n * ```typescript\n * // Set bottom offset when nav bar is visible\n * theme.setBottomOffset(80)\n *\n * // Clear bottom offset when nav bar is hidden\n * theme.setBottomOffset(0)\n * ```\n */\n public setBottomOffset(value: number): void {\n this._bottomOffset$.next(value)\n }\n\n /**\n * Convenience method to update theme state including fullscreen.\n * Can be called with next() like syntax for familiarity.\n *\n * @param {Object} values - Theme values to update\n * @param {boolean} [values.fullscreen] - Fullscreen state\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme\n * @param {string} [values.color] - Primary color\n *\n * @example\n * ```typescript\n * // Set fullscreen mode\n * theme.next({ fullscreen: true })\n *\n * // Update multiple values\n * theme.next({\n * fullscreen: true,\n * scheme: 'dark'\n * })\n * ```\n */\n public next(values: {\n fullscreen?: boolean\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n }): void {\n if (values.fullscreen !== undefined) {\n this.setFullscreen(values.fullscreen)\n }\n if (values.scheme !== undefined) {\n this.setScheme(values.scheme)\n }\n if (values.color !== undefined) {\n this.setColor(values.color)\n }\n }\n\n /**\n * Get the singleton instance of ThemeService.\n *\n * @returns {ThemeService} The singleton ThemeService instance\n *\n * @internal\n */\n static getInstance(): ThemeService {\n if (!ThemeService.instance) {\n ThemeService.instance = new ThemeService()\n }\n return ThemeService.instance\n }\n}\n\n/**\n * Theme singleton. Reads and mutates the active theme (scheme, source color,\n * locale); persists the user's scheme choice. Components subscribe via\n * `theme.theme$` for changes.\n *\n * @service\n * @summary Theme service — active scheme, source color, locale.\n * @method next({ scheme?, source?, locale? }) - Update theme state.\n * @method theme$ - Observable<TSchmancyTheme>; emits on every theme change.\n * @method toggle() - Toggle between light and dark schemes.\n */\nexport const theme = ThemeService.getInstance()\nexport const schmancyTheme = theme // Alias for convenience\nexport default theme"],"mappings":"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"}
package/dist/timeline.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BIXF7xkF.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/when.js`);var o=class extends e.s{constructor(...e){super(...e),this.state=`empty`,this.glyph=``,this._onClick=()=>{this.state!==`empty`&&this.dispatchEvent(new CustomEvent(`tile-click`,{detail:{glyph:this.glyph,state:this.state},bubbles:!0,composed:!0}))}}static{this.styles=[i.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/when.js`);var o=class extends e.s{constructor(...e){super(...e),this.state=`empty`,this.glyph=``,this._onClick=()=>{this.state!==`empty`&&this.dispatchEvent(new CustomEvent(`tile-click`,{detail:{glyph:this.glyph,state:this.state},bubbles:!0,composed:!0}))}}static{this.styles=[i.css`
2
2
  :host {
3
3
  --schmancy-tile-w: 32px;
4
4
  --schmancy-tile-h: 40px;
package/dist/timeline.js CHANGED
@@ -1,4 +1,4 @@
1
- import { s as e } from "./mixins-CL1krSOE.js";
1
+ import { s as e } from "./mixins-CcIWET41.js";
2
2
  import { t } from "./decorate-23nYs4Le.js";
3
3
  import { EMPTY as n, Observable as r, distinctUntilChanged as i, fromEvent as a, map as o, of as s, switchMap as c, takeUntil as l, timer as u } from "rxjs";
4
4
  import { customElement as d, property as f } from "lit/decorators.js";
package/dist/tree.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BIXF7xkF.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`);var a=class extends e.s{constructor(...e){super(...e),this.open=!1,this._a11yId=`schmancy-tree-${Math.random().toString(36).slice(2,10)}`,this._internals=(()=>{try{return this.attachInternals()}catch{return}})()}static{this.styles=[i.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`);var a=class extends e.s{constructor(...e){super(...e),this.open=!1,this._a11yId=`schmancy-tree-${Math.random().toString(36).slice(2,10)}`,this._internals=(()=>{try{return this.attachInternals()}catch{return}})()}static{this.styles=[i.css`
2
2
  :host {
3
3
  display: block;
4
4
  position: relative;
package/dist/tree.js CHANGED
@@ -1,4 +1,4 @@
1
- import { s as e } from "./mixins-CL1krSOE.js";
1
+ import { s as e } from "./mixins-CcIWET41.js";
2
2
  import { t } from "./decorate-23nYs4Le.js";
3
3
  import { fromEvent as n, merge as r, switchMap as i, takeUntil as a, tap as o, zip as s } from "rxjs";
4
4
  import { customElement as c, property as l, query as u } from "lit/decorators.js";
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BIXF7xkF.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`rxjs/operators`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/ref.js`);var s=class extends e.s{constructor(...e){super(...e),this.type=`body`,this.token=`md`,this.editable=!1,this.value=``,this.placeholder=``,this._editRef=(0,o.createRef)()}static{this.styles=[a.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`rxjs/operators`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/ref.js`);var s=class extends e.s{constructor(...e){super(...e),this.type=`body`,this.token=`md`,this.editable=!1,this.value=``,this.placeholder=``,this._editRef=(0,o.createRef)()}static{this.styles=[a.css`
2
2
  :host {
3
3
  display: block;
4
4
  font-family: inherit;
@@ -1,4 +1,4 @@
1
- import { s as e } from "./mixins-CL1krSOE.js";
1
+ import { s as e } from "./mixins-CcIWET41.js";
2
2
  import { t } from "./decorate-23nYs4Le.js";
3
3
  import { fromEvent as n } from "rxjs";
4
4
  import { filter as r, takeUntil as i, tap as a } from "rxjs/operators";
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BIXF7xkF.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.s{static{this.styles=[r.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.s{static{this.styles=[r.css`
2
2
  :host {
3
3
  position: absolute;
4
4
  width: 1px;
@@ -1,4 +1,4 @@
1
- import { s as e } from "./mixins-CL1krSOE.js";
1
+ import { s as e } from "./mixins-CcIWET41.js";
2
2
  import { t } from "./decorate-23nYs4Le.js";
3
3
  import { customElement as n } from "lit/decorators.js";
4
4
  import { css as r, html as i } from "lit";
@@ -1,9 +1,9 @@
1
- import { s as e } from "./mixins-CL1krSOE.js";
1
+ import { s as e } from "./mixins-CcIWET41.js";
2
2
  import { t } from "./decorate-23nYs4Le.js";
3
3
  import { d as n, f as r } from "./animation-BK-8BwY8.js";
4
4
  import { t as i } from "./reduced-motion-D-L12p7G.js";
5
5
  import { t as a } from "./cursor-glow-Ah7VXSj7.js";
6
- import { n as o } from "./theme.service-9clsqyee.js";
6
+ import { n as o } from "./theme.service-CmbOGMA8.js";
7
7
  import { t as s } from "./overlay-stack-CAQno0CK.js";
8
8
  import { BehaviorSubject as c, EMPTY as l, Observable as u, animationFrameScheduler as d, auditTime as f, catchError as p, distinctUntilChanged as m, filter as h, finalize as g, from as _, fromEvent as v, map as y, merge as b, switchMap as x, take as S, takeUntil as C, tap as w } from "rxjs";
9
9
  import { classMap as T } from "lit/directives/class-map.js";