@mhmo91/schmancy 0.4.72 → 0.4.74

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 (422) hide show
  1. package/ai/area.md +525 -108
  2. package/ai/busy.md +2 -1
  3. package/ai/button.md +4 -0
  4. package/ai/code-highlight.md +2 -1
  5. package/ai/content-drawer.md +2 -1
  6. package/ai/context.md +7 -2
  7. package/ai/countries.md +2 -1
  8. package/ai/date-range-inline.md +262 -0
  9. package/ai/date-range.md +2 -1
  10. package/ai/details.md +194 -0
  11. package/ai/dialog.md +2 -1
  12. package/ai/directives.md +2 -1
  13. package/ai/form.md +10 -10
  14. package/ai/list.md +10 -9
  15. package/ai/mailbox.md +530 -0
  16. package/ai/map.md +2 -1
  17. package/ai/notification.md +14 -12
  18. package/ai/payment-card-form.md +2 -1
  19. package/ai/sheet.md +6 -4
  20. package/ai/steps.md +193 -9
  21. package/ai/store.md +8 -4
  22. package/ai/surface.md +2 -1
  23. package/ai/teleport.md +2 -1
  24. package/ai/theme.md +690 -8
  25. package/ai/timezone.md +2 -1
  26. package/ai/typography.md +2 -1
  27. package/dist/ai/area.md +525 -108
  28. package/dist/ai/busy.md +2 -1
  29. package/dist/ai/button.md +4 -0
  30. package/dist/ai/code-highlight.md +2 -1
  31. package/dist/ai/content-drawer.md +2 -1
  32. package/dist/ai/context.md +7 -2
  33. package/dist/ai/countries.md +2 -1
  34. package/dist/ai/date-range-inline.md +262 -0
  35. package/dist/ai/date-range.md +2 -1
  36. package/dist/ai/details.md +194 -0
  37. package/dist/ai/dialog.md +2 -1
  38. package/dist/ai/directives.md +2 -1
  39. package/dist/ai/form.md +10 -10
  40. package/dist/ai/list.md +10 -9
  41. package/dist/ai/mailbox.md +530 -0
  42. package/dist/ai/map.md +2 -1
  43. package/dist/ai/notification.md +14 -12
  44. package/dist/ai/payment-card-form.md +2 -1
  45. package/dist/ai/sheet.md +6 -4
  46. package/dist/ai/steps.md +193 -9
  47. package/dist/ai/store.md +8 -4
  48. package/dist/ai/surface.md +2 -1
  49. package/dist/ai/teleport.md +2 -1
  50. package/dist/ai/theme.md +690 -8
  51. package/dist/ai/timezone.md +2 -1
  52. package/dist/ai/typography.md +2 -1
  53. package/dist/{animated-text-CBOMltQE.js → animated-text-CqpyC7Y0.js} +3 -3
  54. package/dist/{animated-text-CBOMltQE.js.map → animated-text-CqpyC7Y0.js.map} +1 -1
  55. package/dist/{animated-text-rE-SkQgz.cjs → animated-text-DlRt6Q09.cjs} +2 -2
  56. package/dist/{animated-text-rE-SkQgz.cjs.map → animated-text-DlRt6Q09.cjs.map} +1 -1
  57. package/dist/animated-text.cjs +1 -1
  58. package/dist/animated-text.js +1 -1
  59. package/dist/area.cjs +1 -1
  60. package/dist/area.js +14 -13
  61. package/dist/{autocomplete-BAcf_l63.js → autocomplete-B-oKMH7m.js} +3 -3
  62. package/dist/{autocomplete-BAcf_l63.js.map → autocomplete-B-oKMH7m.js.map} +1 -1
  63. package/dist/{autocomplete-CuO8ztL4.cjs → autocomplete-BOGG_9iL.cjs} +2 -2
  64. package/dist/{autocomplete-CuO8ztL4.cjs.map → autocomplete-BOGG_9iL.cjs.map} +1 -1
  65. package/dist/autocomplete.cjs +1 -1
  66. package/dist/autocomplete.js +1 -1
  67. package/dist/{avatar-D3gNBale.js → avatar-U5IpwJuj.js} +70 -71
  68. package/dist/avatar-U5IpwJuj.js.map +1 -0
  69. package/dist/{avatar-N3BODeY1.cjs → avatar-qkIAB2cX.cjs} +3 -3
  70. package/dist/avatar-qkIAB2cX.cjs.map +1 -0
  71. package/dist/badge.cjs +1 -1
  72. package/dist/badge.js +1 -1
  73. package/dist/{boat-BQoWbDxu.js → boat-CdR5Pqik.js} +2 -2
  74. package/dist/{boat-BQoWbDxu.js.map → boat-CdR5Pqik.js.map} +1 -1
  75. package/dist/{boat-CWXlAq65.cjs → boat-DMKcZpZb.cjs} +2 -2
  76. package/dist/{boat-CWXlAq65.cjs.map → boat-DMKcZpZb.cjs.map} +1 -1
  77. package/dist/boat.cjs +1 -1
  78. package/dist/boat.js +1 -1
  79. package/dist/busy.cjs +1 -1
  80. package/dist/busy.js +1 -1
  81. package/dist/button.cjs +1 -1
  82. package/dist/button.js +1 -1
  83. package/dist/card.cjs +1 -1
  84. package/dist/card.js +1 -1
  85. package/dist/{checkbox-DBO-neG5.js → checkbox-CVwU3M4h.js} +2 -2
  86. package/dist/{checkbox-DBO-neG5.js.map → checkbox-CVwU3M4h.js.map} +1 -1
  87. package/dist/{checkbox-DIYmuPtk.cjs → checkbox-DP_zX786.cjs} +2 -2
  88. package/dist/{checkbox-DIYmuPtk.cjs.map → checkbox-DP_zX786.cjs.map} +1 -1
  89. package/dist/checkbox.cjs +1 -1
  90. package/dist/checkbox.js +1 -1
  91. package/dist/{chips-BYE5hQQr.cjs → chips-BuMUH3zA.cjs} +2 -2
  92. package/dist/{chips-BYE5hQQr.cjs.map → chips-BuMUH3zA.cjs.map} +1 -1
  93. package/dist/{chips-C_7proIN.js → chips-DcCUwYBu.js} +3 -3
  94. package/dist/{chips-C_7proIN.js.map → chips-DcCUwYBu.js.map} +1 -1
  95. package/dist/chips.cjs +1 -1
  96. package/dist/chips.js +1 -1
  97. package/dist/code-highlight.cjs +1 -1
  98. package/dist/code-highlight.js +1 -1
  99. package/dist/{code-preview-CQ-EAz9F.js → code-preview-CIXEd04f.js} +2 -2
  100. package/dist/{code-preview-CQ-EAz9F.js.map → code-preview-CIXEd04f.js.map} +1 -1
  101. package/dist/{code-preview-CzcyBpl-.cjs → code-preview-CdCzzZTX.cjs} +2 -2
  102. package/dist/{code-preview-CzcyBpl-.cjs.map → code-preview-CdCzzZTX.cjs.map} +1 -1
  103. package/dist/components.cjs +1 -1
  104. package/dist/components.js +1 -1
  105. package/dist/content-drawer.cjs +1 -1
  106. package/dist/content-drawer.js +1 -1
  107. package/dist/{context-object-K_1gDFu-.cjs → context-object-bNADqf9U.cjs} +2 -2
  108. package/dist/{context-object-K_1gDFu-.cjs.map → context-object-bNADqf9U.cjs.map} +1 -1
  109. package/dist/{context-object-CDDP4bTk.js → context-object-u5gBaozZ.js} +46 -32
  110. package/dist/{context-object-CDDP4bTk.js.map → context-object-u5gBaozZ.js.map} +1 -1
  111. package/dist/{date-range-DCghMsV8.cjs → date-range-CvD9zwK9.cjs} +2 -2
  112. package/dist/{date-range-DCghMsV8.cjs.map → date-range-CvD9zwK9.cjs.map} +1 -1
  113. package/dist/{date-range-inline-JgIiOHQM.js → date-range-inline-5QP9av94.js} +3 -3
  114. package/dist/{date-range-inline-JgIiOHQM.js.map → date-range-inline-5QP9av94.js.map} +1 -1
  115. package/dist/{date-range-inline-Z0ASWN4I.cjs → date-range-inline-CP_a_w01.cjs} +2 -2
  116. package/dist/{date-range-inline-Z0ASWN4I.cjs.map → date-range-inline-CP_a_w01.cjs.map} +1 -1
  117. package/dist/date-range-inline.cjs +1 -1
  118. package/dist/date-range-inline.js +1 -1
  119. package/dist/{date-range-WqwMEh16.js → date-range-lJ_fPY4v.js} +4 -4
  120. package/dist/{date-range-WqwMEh16.js.map → date-range-lJ_fPY4v.js.map} +1 -1
  121. package/dist/date-range.cjs +1 -1
  122. package/dist/date-range.js +1 -1
  123. package/dist/{delay-LnWlFwkK.js → delay-BM1jk7XF.js} +2 -2
  124. package/dist/delay-BM1jk7XF.js.map +1 -0
  125. package/dist/{delay-Ew4cphs1.cjs → delay-CB0Wohe7.cjs} +2 -2
  126. package/dist/delay-CB0Wohe7.cjs.map +1 -0
  127. package/dist/delay.cjs +1 -1
  128. package/dist/delay.js +1 -1
  129. package/dist/{details-BVEV0hUx.js → details-B9JrXrCO.js} +2 -2
  130. package/dist/{details-BVEV0hUx.js.map → details-B9JrXrCO.js.map} +1 -1
  131. package/dist/{details-C01m-iWQ.cjs → details-C22WoRWP.cjs} +2 -2
  132. package/dist/{details-C01m-iWQ.cjs.map → details-C22WoRWP.cjs.map} +1 -1
  133. package/dist/details.cjs +1 -1
  134. package/dist/details.js +1 -1
  135. package/dist/{dialog-content-B_w_iJyW.js → dialog-content-BHR9cUJ-.js} +4 -4
  136. package/dist/{dialog-content-B_w_iJyW.js.map → dialog-content-BHR9cUJ-.js.map} +1 -1
  137. package/dist/{dialog-content-BFmy9Sbo.cjs → dialog-content-CpxWMPlh.cjs} +2 -2
  138. package/dist/{dialog-content-BFmy9Sbo.cjs.map → dialog-content-CpxWMPlh.cjs.map} +1 -1
  139. package/dist/{dialog-service-DwJ_7FB3.js → dialog-service-DwhuICgc.js} +2 -2
  140. package/dist/dialog-service-DwhuICgc.js.map +1 -0
  141. package/dist/dialog-service-juvsgc5X.cjs +2 -0
  142. package/dist/dialog-service-juvsgc5X.cjs.map +1 -0
  143. package/dist/dialog.cjs +1 -1
  144. package/dist/dialog.js +2 -2
  145. package/dist/{divider-FkKYlJY3.js → divider-Cz4g_Ept.js} +3 -3
  146. package/dist/{divider-FkKYlJY3.js.map → divider-Cz4g_Ept.js.map} +1 -1
  147. package/dist/{divider-BWG6TAr2.cjs → divider-DAg0oW4T.cjs} +2 -2
  148. package/dist/{divider-BWG6TAr2.cjs.map → divider-DAg0oW4T.cjs.map} +1 -1
  149. package/dist/divider.cjs +1 -1
  150. package/dist/divider.js +1 -1
  151. package/dist/{dropdown-content-BStJGihR.js → dropdown-content-Bto1swKT.js} +3 -3
  152. package/dist/{dropdown-content-BStJGihR.js.map → dropdown-content-Bto1swKT.js.map} +1 -1
  153. package/dist/{dropdown-content-m1aSF-Oh.cjs → dropdown-content-QvR9QvT0.cjs} +2 -2
  154. package/dist/{dropdown-content-m1aSF-Oh.cjs.map → dropdown-content-QvR9QvT0.cjs.map} +1 -1
  155. package/dist/dropdown.cjs +1 -1
  156. package/dist/dropdown.js +1 -1
  157. package/dist/{email-recipients-CpghUhQ1.js → email-recipients-C9Yx0eML.js} +7 -7
  158. package/dist/{email-recipients-CpghUhQ1.js.map → email-recipients-C9Yx0eML.js.map} +1 -1
  159. package/dist/{email-recipients-CbZNnzoj.cjs → email-recipients-aEI5Hz1y.cjs} +2 -2
  160. package/dist/{email-recipients-CbZNnzoj.cjs.map → email-recipients-aEI5Hz1y.cjs.map} +1 -1
  161. package/dist/extra.cjs +1 -1
  162. package/dist/extra.js +1 -1
  163. package/dist/{flex-C6yj5Sxi.js → flex-8Zt64KfZ.js} +2 -2
  164. package/dist/{flex-C6yj5Sxi.js.map → flex-8Zt64KfZ.js.map} +1 -1
  165. package/dist/{flex-BNVtJlgu.cjs → flex-BWZv2xik.cjs} +2 -2
  166. package/dist/{flex-BNVtJlgu.cjs.map → flex-BWZv2xik.cjs.map} +1 -1
  167. package/dist/{form-ns7c4fcj.cjs → form-BH43OMu3.cjs} +2 -2
  168. package/dist/{form-ns7c4fcj.cjs.map → form-BH43OMu3.cjs.map} +1 -1
  169. package/dist/{form-C85Qev2L.js → form-DeoSuBtM.js} +2 -2
  170. package/dist/{form-C85Qev2L.js.map → form-DeoSuBtM.js.map} +1 -1
  171. package/dist/form.cjs +1 -1
  172. package/dist/form.js +1 -1
  173. package/dist/{formField.mixin-CKb_MTS7.js → formField.mixin-BaPL0TYo.js} +2 -2
  174. package/dist/{formField.mixin-CKb_MTS7.js.map → formField.mixin-BaPL0TYo.js.map} +1 -1
  175. package/dist/{formField.mixin-B3CXBJKX.cjs → formField.mixin-Dta3OeAY.cjs} +2 -2
  176. package/dist/{formField.mixin-B3CXBJKX.cjs.map → formField.mixin-Dta3OeAY.cjs.map} +1 -1
  177. package/dist/{icon-DKPLcbdu.js → icon-B0JNrBfq.js} +2 -2
  178. package/dist/{icon-DKPLcbdu.js.map → icon-B0JNrBfq.js.map} +1 -1
  179. package/dist/{icon-DUstfLaC.cjs → icon-DY2pBLIU.cjs} +2 -2
  180. package/dist/{icon-DUstfLaC.cjs.map → icon-DY2pBLIU.cjs.map} +1 -1
  181. package/dist/{icon-button-DiRex-eZ.cjs → icon-button-D1GjgM8z.cjs} +2 -2
  182. package/dist/{icon-button-DiRex-eZ.cjs.map → icon-button-D1GjgM8z.cjs.map} +1 -1
  183. package/dist/{icon-button-CIkRej0r.js → icon-button-OZM1xg0D.js} +3 -3
  184. package/dist/{icon-button-CIkRej0r.js.map → icon-button-OZM1xg0D.js.map} +1 -1
  185. package/dist/icons.cjs +1 -1
  186. package/dist/icons.js +1 -1
  187. package/dist/index-CCi1otmh.cjs +2 -0
  188. package/dist/{index-DyJ0oDpR.cjs.map → index-CCi1otmh.cjs.map} +1 -1
  189. package/dist/index-CW6PhEkx.js +17 -0
  190. package/dist/{index-CuY8m6ta.js.map → index-CW6PhEkx.js.map} +1 -1
  191. package/dist/index.cjs +1 -1
  192. package/dist/index.js +221 -218
  193. package/dist/index.js.map +1 -1
  194. package/dist/{input-DODcsAZu.js → input-CkvjCut5.js} +3 -3
  195. package/dist/{input-DODcsAZu.js.map → input-CkvjCut5.js.map} +1 -1
  196. package/dist/{input-B7MqsI2h.cjs → input-lUWuO40Q.cjs} +2 -2
  197. package/dist/{input-B7MqsI2h.cjs.map → input-lUWuO40Q.cjs.map} +1 -1
  198. package/dist/input.cjs +1 -1
  199. package/dist/input.js +1 -1
  200. package/dist/layout.cjs +1 -1
  201. package/dist/layout.js +1 -1
  202. package/dist/{list-Cx6tpiFE.js → list-5rw56k73.js} +2 -2
  203. package/dist/{list-Cx6tpiFE.js.map → list-5rw56k73.js.map} +1 -1
  204. package/dist/{list-DxduK4sb.cjs → list-CIt75CB5.cjs} +2 -2
  205. package/dist/{list-DxduK4sb.cjs.map → list-CIt75CB5.cjs.map} +1 -1
  206. package/dist/list.cjs +1 -1
  207. package/dist/list.js +1 -1
  208. package/dist/{litElement.mixin-B12Y4mEr.cjs → litElement.mixin-BLa7fWsS.cjs} +2 -2
  209. package/dist/{litElement.mixin-B12Y4mEr.cjs.map → litElement.mixin-BLa7fWsS.cjs.map} +1 -1
  210. package/dist/{litElement.mixin-BZ8iGvPl.js → litElement.mixin-BZErt4H3.js} +2 -2
  211. package/dist/{litElement.mixin-BZ8iGvPl.js.map → litElement.mixin-BZErt4H3.js.map} +1 -1
  212. package/dist/mailbox.cjs +1 -1
  213. package/dist/mailbox.js +1 -1
  214. package/dist/{map-sgCf8pYD.cjs → map-BY_0W4ER.cjs} +2 -2
  215. package/dist/{map-sgCf8pYD.cjs.map → map-BY_0W4ER.cjs.map} +1 -1
  216. package/dist/{map-dT8yp1iK.js → map-BrguuFGa.js} +2 -2
  217. package/dist/{map-dT8yp1iK.js.map → map-BrguuFGa.js.map} +1 -1
  218. package/dist/map.cjs +1 -1
  219. package/dist/map.js +1 -1
  220. package/dist/{media-CgH0D5rY.js → media-CLz2t5zS.js} +2 -2
  221. package/dist/{media-CgH0D5rY.js.map → media-CLz2t5zS.js.map} +1 -1
  222. package/dist/{media-CwjupDLj.cjs → media-D6ZtvTjC.cjs} +2 -2
  223. package/dist/{media-CwjupDLj.cjs.map → media-D6ZtvTjC.cjs.map} +1 -1
  224. package/dist/{menu-oZRtmhVd.js → menu-CgDSJpDV.js} +3 -3
  225. package/dist/{menu-oZRtmhVd.js.map → menu-CgDSJpDV.js.map} +1 -1
  226. package/dist/{menu-X25Q7tpY.cjs → menu-DWD_IywE.cjs} +2 -2
  227. package/dist/{menu-X25Q7tpY.cjs.map → menu-DWD_IywE.cjs.map} +1 -1
  228. package/dist/menu.cjs +1 -1
  229. package/dist/menu.js +1 -1
  230. package/dist/nav-drawer.cjs +1 -1
  231. package/dist/nav-drawer.js +1 -1
  232. package/dist/{notification-service-y0T4rXdS.js → notification-service-1HGYK2tM.js} +4 -4
  233. package/dist/notification-service-1HGYK2tM.js.map +1 -0
  234. package/dist/{notification-service-kLTt3JtW.cjs → notification-service-A3reAJZQ.cjs} +2 -2
  235. package/dist/notification-service-A3reAJZQ.cjs.map +1 -0
  236. package/dist/notification.cjs +1 -1
  237. package/dist/notification.js +2 -2
  238. package/dist/{notify-BnjvURrc.js → notify-Bt-KiLeP.js} +2 -2
  239. package/dist/{notify-BnjvURrc.js.map → notify-Bt-KiLeP.js.map} +1 -1
  240. package/dist/{notify-EGStToeW.cjs → notify-CVbsMt75.cjs} +2 -2
  241. package/dist/{notify-EGStToeW.cjs.map → notify-CVbsMt75.cjs.map} +1 -1
  242. package/dist/{option-D4_WBCWz.cjs → option-Cd0TxMBE.cjs} +2 -2
  243. package/dist/{option-D4_WBCWz.cjs.map → option-Cd0TxMBE.cjs.map} +1 -1
  244. package/dist/{option-CD1NSUXu.js → option-DvSZ0D0R.js} +2 -2
  245. package/dist/{option-CD1NSUXu.js.map → option-DvSZ0D0R.js.map} +1 -1
  246. package/dist/option.cjs +1 -1
  247. package/dist/option.js +1 -1
  248. package/dist/{payment-card-form-lWlhuDb3.js → payment-card-form-C6wrIT_X.js} +3 -3
  249. package/dist/{payment-card-form-lWlhuDb3.js.map → payment-card-form-C6wrIT_X.js.map} +1 -1
  250. package/dist/{payment-card-form-96Rw6cLf.cjs → payment-card-form-CJkWQ3j4.cjs} +2 -2
  251. package/dist/{payment-card-form-96Rw6cLf.cjs.map → payment-card-form-CJkWQ3j4.cjs.map} +1 -1
  252. package/dist/{progress-BkxGzGOm.cjs → progress-D0iWLtHk.cjs} +2 -2
  253. package/dist/{progress-BkxGzGOm.cjs.map → progress-D0iWLtHk.cjs.map} +1 -1
  254. package/dist/{progress-DGk9tC4y.js → progress-pOL6OHwT.js} +2 -2
  255. package/dist/{progress-DGk9tC4y.js.map → progress-pOL6OHwT.js.map} +1 -1
  256. package/dist/progress.cjs +1 -1
  257. package/dist/progress.js +1 -1
  258. package/dist/{radio-button-DHM38A7h.js → radio-button-C-t6JJsj.js} +3 -3
  259. package/dist/{radio-button-DHM38A7h.js.map → radio-button-C-t6JJsj.js.map} +1 -1
  260. package/dist/{radio-button-w9ZxzEPa.cjs → radio-button-CSV7-ftB.cjs} +2 -2
  261. package/dist/{radio-button-w9ZxzEPa.cjs.map → radio-button-CSV7-ftB.cjs.map} +1 -1
  262. package/dist/radio-group.cjs +1 -1
  263. package/dist/radio-group.js +1 -1
  264. package/dist/route.component-DaBx0B3g.cjs +12 -0
  265. package/dist/route.component-DaBx0B3g.cjs.map +1 -0
  266. package/dist/route.component-DlVlAMWF.js +341 -0
  267. package/dist/route.component-DlVlAMWF.js.map +1 -0
  268. package/dist/rxjs-utils.cjs +1 -1
  269. package/dist/rxjs-utils.js +1 -1
  270. package/dist/{schmancy-steps-container-WYO4SOrb.js → schmancy-steps-container-AIJ2_ZSN.js} +12 -12
  271. package/dist/schmancy-steps-container-AIJ2_ZSN.js.map +1 -0
  272. package/dist/{schmancy-steps-container-CPSL_8H0.cjs → schmancy-steps-container-CgzGlBCk.cjs} +6 -6
  273. package/dist/schmancy-steps-container-CgzGlBCk.cjs.map +1 -0
  274. package/dist/{select-bDAzyQOZ.js → select-CwJ4OuVo.js} +3 -3
  275. package/dist/{select-bDAzyQOZ.js.map → select-CwJ4OuVo.js.map} +1 -1
  276. package/dist/{select-CxCcgqW_.cjs → select-GBaqnfMC.cjs} +2 -2
  277. package/dist/{select-CxCcgqW_.cjs.map → select-GBaqnfMC.cjs.map} +1 -1
  278. package/dist/select.cjs +1 -1
  279. package/dist/select.js +1 -1
  280. package/dist/{selector-hook-CIpuCUbr.js → selector-hook-ChImS_JT.js} +2 -2
  281. package/dist/{selector-hook-CIpuCUbr.js.map → selector-hook-ChImS_JT.js.map} +1 -1
  282. package/dist/{selector-hook-DB8RFC1y.cjs → selector-hook-cqmAutda.cjs} +2 -2
  283. package/dist/{selector-hook-DB8RFC1y.cjs.map → selector-hook-cqmAutda.cjs.map} +1 -1
  284. package/dist/{sheet-Bm0ukLXt.cjs → sheet-CXd47YKG.cjs} +2 -2
  285. package/dist/{sheet-Bm0ukLXt.cjs.map → sheet-CXd47YKG.cjs.map} +1 -1
  286. package/dist/{sheet-pO6PmiAf.js → sheet-fT1oxKgG.js} +4 -4
  287. package/dist/{sheet-pO6PmiAf.js.map → sheet-fT1oxKgG.js.map} +1 -1
  288. package/dist/sheet.cjs +1 -1
  289. package/dist/sheet.js +2 -2
  290. package/dist/sheet.service-BxvWBGsJ.cjs +2 -0
  291. package/dist/sheet.service-BxvWBGsJ.cjs.map +1 -0
  292. package/dist/{sheet.service-ieSXeqCj.js → sheet.service-lXqUf6n5.js} +2 -2
  293. package/dist/sheet.service-lXqUf6n5.js.map +1 -0
  294. package/dist/{slider-CxZGMYF-.js → slider-CYsku-3b.js} +3 -3
  295. package/dist/{slider-CxZGMYF-.js.map → slider-CYsku-3b.js.map} +1 -1
  296. package/dist/{slider-BwXXp74f.cjs → slider-DxSzFbQe.cjs} +2 -2
  297. package/dist/{slider-BwXXp74f.cjs.map → slider-DxSzFbQe.cjs.map} +1 -1
  298. package/dist/slider.cjs +1 -1
  299. package/dist/slider.js +1 -1
  300. package/dist/{spinner-b3VWC6It.js → spinner-CrK1E8LD.js} +2 -2
  301. package/dist/{spinner-b3VWC6It.js.map → spinner-CrK1E8LD.js.map} +1 -1
  302. package/dist/{spinner-nN77H00p.cjs → spinner-DrG_NQpx.cjs} +2 -2
  303. package/dist/{spinner-nN77H00p.cjs.map → spinner-DrG_NQpx.cjs.map} +1 -1
  304. package/dist/steps.cjs +1 -1
  305. package/dist/steps.js +1 -1
  306. package/dist/store.cjs +1 -1
  307. package/dist/store.js +2 -2
  308. package/dist/{surface-C2WjztRc.js → surface-C64YekDh.js} +2 -2
  309. package/dist/{surface-C2WjztRc.js.map → surface-C64YekDh.js.map} +1 -1
  310. package/dist/{surface-Cm8zYK5d.cjs → surface-DVNi8l6T.cjs} +2 -2
  311. package/dist/{surface-Cm8zYK5d.cjs.map → surface-DVNi8l6T.cjs.map} +1 -1
  312. package/dist/surface.cjs +1 -1
  313. package/dist/surface.js +1 -1
  314. package/dist/{table-BfhuaB9J.cjs → table-B3WKGYlu.cjs} +2 -2
  315. package/dist/{table-BfhuaB9J.cjs.map → table-B3WKGYlu.cjs.map} +1 -1
  316. package/dist/{table-Dp7npAuy.js → table-DmrYZ1hR.js} +2 -2
  317. package/dist/{table-Dp7npAuy.js.map → table-DmrYZ1hR.js.map} +1 -1
  318. package/dist/table.cjs +1 -1
  319. package/dist/table.js +1 -1
  320. package/dist/{tabs-compatibility-CA-wWRoe.cjs → tabs-compatibility-Ds7SEeST.cjs} +2 -2
  321. package/dist/{tabs-compatibility-CA-wWRoe.cjs.map → tabs-compatibility-Ds7SEeST.cjs.map} +1 -1
  322. package/dist/{tabs-compatibility-U4cq8X3I.js → tabs-compatibility-Uetjk25R.js} +2 -2
  323. package/dist/{tabs-compatibility-U4cq8X3I.js.map → tabs-compatibility-Uetjk25R.js.map} +1 -1
  324. package/dist/tabs.cjs +1 -1
  325. package/dist/tabs.js +1 -1
  326. package/dist/tailwind.mixin-B6ADeWOc.js +43 -0
  327. package/dist/{tailwind.mixin-D2DVHS9V.js.map → tailwind.mixin-B6ADeWOc.js.map} +1 -1
  328. package/dist/tailwind.mixin-df9KoZ9x.cjs +2 -0
  329. package/dist/{tailwind.mixin-BlZIIaOE.cjs.map → tailwind.mixin-df9KoZ9x.cjs.map} +1 -1
  330. package/dist/teleport.cjs +1 -1
  331. package/dist/teleport.js +1 -1
  332. package/dist/{textarea-BRNj3tvi.js → textarea-B1Tng7F9.js} +2 -2
  333. package/dist/{textarea-BRNj3tvi.js.map → textarea-B1Tng7F9.js.map} +1 -1
  334. package/dist/{textarea-CxZKoXaU.cjs → textarea-QKNA3oAQ.cjs} +2 -2
  335. package/dist/{textarea-CxZKoXaU.cjs.map → textarea-QKNA3oAQ.cjs.map} +1 -1
  336. package/dist/textarea.cjs +1 -1
  337. package/dist/textarea.js +1 -1
  338. package/dist/{theme-button-N_Wt3bos.js → theme-button-CYEhS3ub.js} +2 -2
  339. package/dist/{theme-button-N_Wt3bos.js.map → theme-button-CYEhS3ub.js.map} +1 -1
  340. package/dist/{theme-button-MrIoOFEB.cjs → theme-button-CoCFS3Rx.cjs} +2 -2
  341. package/dist/{theme-button-MrIoOFEB.cjs.map → theme-button-CoCFS3Rx.cjs.map} +1 -1
  342. package/dist/theme-button.cjs +1 -1
  343. package/dist/theme-button.js +1 -1
  344. package/dist/theme.cjs +1 -1
  345. package/dist/theme.component-C12jLwtB.cjs +3 -0
  346. package/dist/theme.component-C12jLwtB.cjs.map +1 -0
  347. package/dist/{theme.component-6VfET_t-.js → theme.component-Df731_fn.js} +247 -171
  348. package/dist/theme.component-Df731_fn.js.map +1 -0
  349. package/dist/theme.events-CPSLaOlR.js +6 -0
  350. package/dist/theme.events-CPSLaOlR.js.map +1 -0
  351. package/dist/theme.events-Car6U_SQ.cjs +2 -0
  352. package/dist/theme.events-Car6U_SQ.cjs.map +1 -0
  353. package/dist/theme.interface-C5Kj6WjD.js.map +1 -1
  354. package/dist/theme.interface-Xg5Zi46a.cjs.map +1 -1
  355. package/dist/theme.js +9 -7
  356. package/dist/theme.js.map +1 -1
  357. package/dist/{timezone-BVd9UEba.cjs → timezone-B7bscKFN.cjs} +2 -2
  358. package/dist/{timezone-BVd9UEba.cjs.map → timezone-B7bscKFN.cjs.map} +1 -1
  359. package/dist/{timezone-DR_4m9Cc.js → timezone-CdtCVjMF.js} +3 -3
  360. package/dist/{timezone-DR_4m9Cc.js.map → timezone-CdtCVjMF.js.map} +1 -1
  361. package/dist/{tooltip-DOQVLRaH.cjs → tooltip-CjoNCIvr.cjs} +2 -2
  362. package/dist/{tooltip-DOQVLRaH.cjs.map → tooltip-CjoNCIvr.cjs.map} +1 -1
  363. package/dist/{tooltip-BpPHc8Wr.js → tooltip-JVkexTyf.js} +2 -2
  364. package/dist/{tooltip-BpPHc8Wr.js.map → tooltip-JVkexTyf.js.map} +1 -1
  365. package/dist/tooltip.cjs +1 -1
  366. package/dist/tooltip.js +1 -1
  367. package/dist/{tree-BANkyLn7.cjs → tree-Be48ABq4.cjs} +2 -2
  368. package/dist/{tree-BANkyLn7.cjs.map → tree-Be48ABq4.cjs.map} +1 -1
  369. package/dist/{tree-C5zu8wXc.js → tree-CaqiNcJJ.js} +2 -2
  370. package/dist/{tree-C5zu8wXc.js.map → tree-CaqiNcJJ.js.map} +1 -1
  371. package/dist/tree.cjs +1 -1
  372. package/dist/tree.js +1 -1
  373. package/dist/{typewriter-CdztqkoR.js → typewriter-CoMrmwFJ.js} +8 -8
  374. package/dist/{typewriter-CdztqkoR.js.map → typewriter-CoMrmwFJ.js.map} +1 -1
  375. package/dist/{typewriter-DS0D0UZM.cjs → typewriter-DCYDScE9.cjs} +2 -2
  376. package/dist/{typewriter-DS0D0UZM.cjs.map → typewriter-DCYDScE9.cjs.map} +1 -1
  377. package/dist/typewriter.cjs +1 -1
  378. package/dist/typewriter.js +1 -1
  379. package/dist/{typography-C8vZfuLF.cjs → typography-BQg6J2hD.cjs} +2 -2
  380. package/dist/{typography-C8vZfuLF.cjs.map → typography-BQg6J2hD.cjs.map} +1 -1
  381. package/dist/{typography-o9FJ6Lzo.js → typography-DkJagEoF.js} +2 -2
  382. package/dist/{typography-o9FJ6Lzo.js.map → typography-DkJagEoF.js.map} +1 -1
  383. package/dist/typography.cjs +1 -1
  384. package/dist/typography.js +1 -1
  385. package/package.json +1 -1
  386. package/types/src/area/area.component.d.ts +25 -5
  387. package/types/src/area/index.d.ts +1 -0
  388. package/types/src/area/route.component.d.ts +43 -0
  389. package/types/src/area/route.test.d.ts +20 -0
  390. package/types/src/steps/schmancy-steps-container.d.ts +9 -0
  391. package/types/src/store/context-collection.d.ts +26 -2
  392. package/types/src/theme/context.d.ts +24 -0
  393. package/types/src/theme/index.d.ts +2 -0
  394. package/types/src/theme/theme.component.d.ts +49 -6
  395. package/types/src/theme/theme.events.d.ts +55 -0
  396. package/types/src/theme/theme.interface.d.ts +36 -0
  397. package/types/src/theme/theme.service.d.ts +261 -0
  398. package/dist/area.component-C86pi_TT.js +0 -283
  399. package/dist/area.component-C86pi_TT.js.map +0 -1
  400. package/dist/area.component-nX_dCv4R.cjs +0 -8
  401. package/dist/area.component-nX_dCv4R.cjs.map +0 -1
  402. package/dist/avatar-D3gNBale.js.map +0 -1
  403. package/dist/avatar-N3BODeY1.cjs.map +0 -1
  404. package/dist/delay-Ew4cphs1.cjs.map +0 -1
  405. package/dist/delay-LnWlFwkK.js.map +0 -1
  406. package/dist/dialog-service-DS-aEjlX.cjs +0 -2
  407. package/dist/dialog-service-DS-aEjlX.cjs.map +0 -1
  408. package/dist/dialog-service-DwJ_7FB3.js.map +0 -1
  409. package/dist/index-CuY8m6ta.js +0 -19
  410. package/dist/index-DyJ0oDpR.cjs +0 -2
  411. package/dist/notification-service-kLTt3JtW.cjs.map +0 -1
  412. package/dist/notification-service-y0T4rXdS.js.map +0 -1
  413. package/dist/schmancy-steps-container-CPSL_8H0.cjs.map +0 -1
  414. package/dist/schmancy-steps-container-WYO4SOrb.js.map +0 -1
  415. package/dist/sheet.service-DV9xNhS8.cjs +0 -2
  416. package/dist/sheet.service-DV9xNhS8.cjs.map +0 -1
  417. package/dist/sheet.service-ieSXeqCj.js.map +0 -1
  418. package/dist/tailwind.mixin-BlZIIaOE.cjs +0 -2
  419. package/dist/tailwind.mixin-D2DVHS9V.js +0 -43
  420. package/dist/theme.component-6VfET_t-.js.map +0 -1
  421. package/dist/theme.component-B_EubPsq.cjs +0 -3
  422. package/dist/theme.component-B_EubPsq.cjs.map +0 -1
package/dist/ai/theme.md CHANGED
@@ -1,9 +1,17 @@
1
- # Theme Component
1
+ # Theme System Documentation
2
2
 
3
- A powerful theming system that generates Material Design 3 color schemes from a source color, with automatic dark/light mode support and CSS custom property injection.
3
+ A comprehensive theming system that provides both a visual configuration component and a programmatic service API. Built on Material Design 3 principles, it generates complete color schemes with automatic dark/light mode support and CSS custom property injection.
4
+
5
+ ## Overview
6
+
7
+ The Schmancy theme system consists of two main parts:
8
+ 1. **Theme Component** (`<schmancy-theme>`) - Visual theme configuration interface
9
+ 2. **Theme Service API** (`themeService`) - Programmatic theme management and subscriptions
4
10
 
5
11
  ## Quick Start
6
12
 
13
+ ### Using the Theme Component
14
+
7
15
  ```html
8
16
  <!-- Basic theme with auto color -->
9
17
  <schmancy-theme>
@@ -25,7 +33,28 @@ A powerful theming system that generates Material Design 3 color schemes from a
25
33
  </schmancy-theme>
26
34
  ```
27
35
 
28
- ## Properties
36
+ ### Using the Theme Service
37
+
38
+ ```typescript
39
+ import { themeService } from '@schmancy/index'
40
+ // Or specific import: import { themeService } from '@schmancy/theme'
41
+
42
+ // Get current theme
43
+ const theme = themeService.getCurrentTheme()
44
+
45
+ // Set theme mode
46
+ themeService.setMode('dark')
47
+
48
+ // Set primary color
49
+ themeService.setPrimaryColor('#6750A4')
50
+
51
+ // Subscribe to theme changes
52
+ themeService.theme$.subscribe(theme => {
53
+ console.log('Theme updated:', theme)
54
+ })
55
+ ```
56
+
57
+ ## Component Properties
29
58
 
30
59
  | Property | Type | Default | Description |
31
60
  |----------|------|---------|-------------|
@@ -171,7 +200,9 @@ The theme component provides its theme via Lit Context:
171
200
 
172
201
  ```javascript
173
202
  import { consume } from '@lit/context';
174
- import { themeContext } from '@schmancy/theme';
203
+ import { themeContext } from '@schmancy/index';
204
+ // Or specific import: import { themeContext } from '@schmancy/index'
205
+ // Or specific import: import { themeContext } from '@schmancy/theme';
175
206
 
176
207
  // In child components
177
208
  @consume({ context: themeContext })
@@ -217,13 +248,661 @@ themeEl.theme = {
217
248
  };
218
249
  ```
219
250
 
251
+ ## Theme Service API
252
+
253
+ The theme service provides programmatic control over the theme system with reactive observables for state management.
254
+
255
+ ### Service Methods
256
+
257
+ #### `getCurrentTheme()`
258
+ Returns the current theme configuration.
259
+
260
+ ```typescript
261
+ const theme = themeService.getCurrentTheme()
262
+ console.log(theme.mode) // 'light' | 'dark' | 'auto'
263
+ console.log(theme.primaryColor) // hex color string
264
+ console.log(theme.isDark) // boolean
265
+ ```
266
+
267
+ #### `setMode(mode: 'light' | 'dark' | 'auto')`
268
+ Sets the theme mode.
269
+
270
+ ```typescript
271
+ // Force light mode
272
+ themeService.setMode('light')
273
+
274
+ // Force dark mode
275
+ themeService.setMode('dark')
276
+
277
+ // Auto mode (follows system preference)
278
+ themeService.setMode('auto')
279
+ ```
280
+
281
+ #### `setPrimaryColor(color: string)`
282
+ Sets the primary color and regenerates the theme palette.
283
+
284
+ ```typescript
285
+ themeService.setPrimaryColor('#6750A4')
286
+ ```
287
+
288
+ #### `setTheme(theme: ThemeConfig)`
289
+ Sets the complete theme configuration at once.
290
+
291
+ ```typescript
292
+ themeService.setTheme({
293
+ mode: 'dark',
294
+ primaryColor: '#00897B',
295
+ fontFamily: 'Roboto',
296
+ borderRadius: 'medium'
297
+ })
298
+ ```
299
+
300
+ #### `reset()`
301
+ Resets the theme to default settings.
302
+
303
+ ```typescript
304
+ themeService.reset()
305
+ ```
306
+
307
+ ### Reactive Subscriptions
308
+
309
+ The theme service exposes RxJS observables for reactive updates:
310
+
311
+ #### `theme$` - Complete Theme State
312
+ ```typescript
313
+ import { takeUntil } from 'rxjs'
314
+
315
+ themeService.theme$
316
+ .pipe(takeUntil(this.disconnecting))
317
+ .subscribe(theme => {
318
+ console.log('Theme updated:', theme)
319
+ // theme.mode, theme.primaryColor, theme.isDark, etc.
320
+ })
321
+ ```
322
+
323
+ #### `mode$` - Mode Changes Only
324
+ ```typescript
325
+ themeService.mode$
326
+ .pipe(takeUntil(this.disconnecting))
327
+ .subscribe(mode => {
328
+ console.log('Mode changed to:', mode)
329
+ })
330
+ ```
331
+
332
+ #### `primaryColor$` - Color Changes Only
333
+ ```typescript
334
+ themeService.primaryColor$
335
+ .pipe(takeUntil(this.disconnecting))
336
+ .subscribe(color => {
337
+ console.log('Primary color changed to:', color)
338
+ })
339
+ ```
340
+
341
+ ### Using with Lit Context
342
+
343
+ Components can also access theme state via context:
344
+
345
+ ```typescript
346
+ import { select } from '@schmancy/index'
347
+ // Or specific import: import { select } from '@schmancy/store'
348
+ import { themeContext } from '@schmancy/index'
349
+ // Or specific import: import { themeContext } from '@schmancy/theme'
350
+
351
+ @customElement('my-component')
352
+ class MyComponent extends LitElement {
353
+ @select(themeContext) theme!: ThemeState
354
+
355
+ render() {
356
+ return html`
357
+ <div>Current mode: ${this.theme.mode}</div>
358
+ <div>Is dark: ${this.theme.isDark}</div>
359
+ <div>Primary: ${this.theme.primaryColor}</div>
360
+ `
361
+ }
362
+ }
363
+ ```
364
+
365
+ ### Practical Examples
366
+
367
+ #### Theme Toggle Button
368
+ ```typescript
369
+ @customElement('theme-toggle')
370
+ export class ThemeToggle extends LitElement {
371
+ @state() private currentMode: 'light' | 'dark' | 'auto' = 'auto'
372
+
373
+ connectedCallback() {
374
+ super.connectedCallback()
375
+
376
+ themeService.mode$
377
+ .pipe(takeUntil(this.disconnecting))
378
+ .subscribe(mode => {
379
+ this.currentMode = mode
380
+ })
381
+ }
382
+
383
+ private toggleMode() {
384
+ const modes: Array<'light' | 'dark' | 'auto'> = ['light', 'dark', 'auto']
385
+ const currentIndex = modes.indexOf(this.currentMode)
386
+ const nextMode = modes[(currentIndex + 1) % modes.length]
387
+ themeService.setMode(nextMode)
388
+ }
389
+
390
+ render() {
391
+ const icon = this.currentMode === 'light' ? 'light_mode' :
392
+ this.currentMode === 'dark' ? 'dark_mode' : 'brightness_auto'
393
+
394
+ return html`
395
+ <schmancy-button @click=${this.toggleMode}>
396
+ <schmancy-icon slot="leading">${icon}</schmancy-icon>
397
+ ${this.currentMode}
398
+ </schmancy-button>
399
+ `
400
+ }
401
+ }
402
+ ```
403
+
404
+ #### Dynamic Color Picker
405
+ ```typescript
406
+ @customElement('color-picker')
407
+ export class ColorPicker extends LitElement {
408
+ @state() private selectedColor = '#6750A4'
409
+
410
+ private colors = [
411
+ { name: 'Purple', value: '#6750A4' },
412
+ { name: 'Blue', value: '#0061A4' },
413
+ { name: 'Green', value: '#006E1C' },
414
+ { name: 'Orange', value: '#D84315' },
415
+ { name: 'Pink', value: '#C2185B' }
416
+ ]
417
+
418
+ connectedCallback() {
419
+ super.connectedCallback()
420
+
421
+ themeService.primaryColor$
422
+ .pipe(takeUntil(this.disconnecting))
423
+ .subscribe(color => {
424
+ this.selectedColor = color
425
+ })
426
+ }
427
+
428
+ private selectColor(color: string) {
429
+ themeService.setPrimaryColor(color)
430
+ }
431
+
432
+ render() {
433
+ return html`
434
+ <div class="flex gap-2 p-4">
435
+ ${this.colors.map(color => html`
436
+ <button
437
+ @click=${() => this.selectColor(color.value)}
438
+ style="background-color: ${color.value}"
439
+ class="w-10 h-10 rounded-full border-2 transition-all ${
440
+ this.selectedColor === color.value ?
441
+ 'border-white shadow-lg scale-110' :
442
+ 'border-transparent'
443
+ }"
444
+ title=${color.name}
445
+ ></button>
446
+ `)}
447
+ </div>
448
+ `
449
+ }
450
+ }
451
+ ```
452
+
453
+ #### Persisting Theme Preferences
454
+ ```typescript
455
+ import { debounceTime } from 'rxjs'
456
+
457
+ // Save theme to localStorage
458
+ class ThemePersistence {
459
+ constructor() {
460
+ // Load saved theme on initialization
461
+ this.loadTheme()
462
+
463
+ // Save theme changes
464
+ themeService.theme$
465
+ .pipe(
466
+ debounceTime(500) // Debounce to avoid excessive saves
467
+ )
468
+ .subscribe(theme => {
469
+ this.saveTheme(theme)
470
+ })
471
+ }
472
+
473
+ private loadTheme() {
474
+ const saved = localStorage.getItem('user-theme')
475
+ if (saved) {
476
+ try {
477
+ const theme = JSON.parse(saved)
478
+ themeService.setTheme(theme)
479
+ } catch (e) {
480
+ console.error('Failed to load saved theme', e)
481
+ }
482
+ }
483
+ }
484
+
485
+ private saveTheme(theme: ThemeState) {
486
+ localStorage.setItem('user-theme', JSON.stringify({
487
+ mode: theme.mode,
488
+ primaryColor: theme.primaryColor
489
+ }))
490
+ }
491
+ }
492
+
493
+ // Initialize once in your app
494
+ new ThemePersistence()
495
+ ```
496
+
497
+ #### Responding to System Preferences
498
+ ```typescript
499
+ @customElement('system-aware')
500
+ export class SystemAware extends LitElement {
501
+ @state() private isDark = false
502
+ @state() private isAuto = false
503
+
504
+ connectedCallback() {
505
+ super.connectedCallback()
506
+
507
+ // Subscribe to theme changes
508
+ themeService.theme$
509
+ .pipe(takeUntil(this.disconnecting))
510
+ .subscribe(theme => {
511
+ this.isAuto = theme.mode === 'auto'
512
+ this.isDark = theme.isDark
513
+ })
514
+
515
+ // Listen to system preference changes
516
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
517
+ mediaQuery.addEventListener('change', (e) => {
518
+ if (this.isAuto) {
519
+ this.isDark = e.matches
520
+ }
521
+ })
522
+ }
523
+
524
+ render() {
525
+ return html`
526
+ <div class="p-4">
527
+ <p>Mode: ${this.isAuto ? 'Auto' : this.isDark ? 'Dark' : 'Light'}</p>
528
+ <p>System prefers: ${
529
+ window.matchMedia('(prefers-color-scheme: dark)').matches ?
530
+ 'Dark' : 'Light'
531
+ }</p>
532
+ </div>
533
+ `
534
+ }
535
+ }
536
+ ```
537
+
538
+ ## TypeScript Types
539
+
540
+ ```typescript
541
+ interface ThemeConfig {
542
+ mode: 'light' | 'dark' | 'auto'
543
+ primaryColor: string
544
+ fontFamily?: string
545
+ borderRadius?: 'none' | 'small' | 'medium' | 'large' | 'full'
546
+ contrast?: 'standard' | 'medium' | 'high'
547
+ }
548
+
549
+ interface ThemeState extends ThemeConfig {
550
+ isDark: boolean
551
+ isAuto: boolean
552
+ systemPreference: 'light' | 'dark'
553
+ theme: TSchmancyTheme // Full Material Design 3 theme object
554
+ }
555
+
556
+ interface ThemeService {
557
+ // Observables
558
+ theme$: Observable<ThemeState>
559
+ mode$: Observable<'light' | 'dark' | 'auto'>
560
+ primaryColor$: Observable<string>
561
+
562
+ // Methods
563
+ getCurrentTheme(): ThemeState
564
+ setMode(mode: 'light' | 'dark' | 'auto'): void
565
+ setPrimaryColor(color: string): void
566
+ setTheme(theme: ThemeConfig): void
567
+ reset(): void
568
+ }
569
+ ```
570
+
220
571
  ## Best Practices
221
572
 
222
573
  1. **Root Theme**: Use one root theme for consistency
223
574
  2. **Color Choice**: Pick colors with good contrast ratios
224
575
  3. **Scheme Handling**: Respect user preferences with 'auto'
225
- 4. **Performance**: Limit nested themes
576
+ 4. **Performance**: Limit nested themes, debounce theme changes
226
577
  5. **Accessibility**: Test themes with contrast checkers
578
+ 6. **Persistence**: Save user preferences to localStorage
579
+ 7. **Cleanup**: Always use `takeUntil(this.disconnecting)` in components
580
+ 8. **Type Safety**: Use provided TypeScript interfaces
581
+
582
+ ## CSS Variables Reference
583
+
584
+ ### Using Theme Variables in Styles
585
+
586
+ ```css
587
+ /* Always use CSS variables for theme-aware styling */
588
+ .my-component {
589
+ /* Backgrounds */
590
+ background: var(--schmancy-sys-color-surface-default);
591
+
592
+ /* Text colors */
593
+ color: var(--schmancy-sys-color-surface-on);
594
+
595
+ /* Borders */
596
+ border: 1px solid var(--schmancy-sys-color-outline);
597
+
598
+ /* Elevation/shadows */
599
+ box-shadow: var(--schmancy-sys-elevation-1);
600
+ }
601
+
602
+ /* Semantic color usage */
603
+ .primary-action {
604
+ background: var(--schmancy-sys-color-primary-default);
605
+ color: var(--schmancy-sys-color-primary-onDefault);
606
+ }
607
+
608
+ .error-message {
609
+ background: var(--schmancy-sys-color-error-container);
610
+ color: var(--schmancy-sys-color-error-onContainer);
611
+ }
612
+ ```
613
+
614
+ ### Complete Variable List
615
+
616
+ #### Primary Colors
617
+ - `--schmancy-sys-color-primary-default`
618
+ - `--schmancy-sys-color-primary-onDefault`
619
+ - `--schmancy-sys-color-primary-container`
620
+ - `--schmancy-sys-color-primary-onContainer`
621
+
622
+ #### Secondary Colors
623
+ - `--schmancy-sys-color-secondary-default`
624
+ - `--schmancy-sys-color-secondary-onDefault`
625
+ - `--schmancy-sys-color-secondary-container`
626
+ - `--schmancy-sys-color-secondary-onContainer`
627
+
628
+ #### Tertiary Colors
629
+ - `--schmancy-sys-color-tertiary-default`
630
+ - `--schmancy-sys-color-tertiary-onDefault`
631
+ - `--schmancy-sys-color-tertiary-container`
632
+ - `--schmancy-sys-color-tertiary-onContainer`
633
+
634
+ #### Error Colors
635
+ - `--schmancy-sys-color-error-default`
636
+ - `--schmancy-sys-color-error-onDefault`
637
+ - `--schmancy-sys-color-error-container`
638
+ - `--schmancy-sys-color-error-onContainer`
639
+
640
+ #### Surface Colors
641
+ - `--schmancy-sys-color-surface-default`
642
+ - `--schmancy-sys-color-surface-on`
643
+ - `--schmancy-sys-color-surface-onVariant`
644
+ - `--schmancy-sys-color-surface-container`
645
+ - `--schmancy-sys-color-surface-containerLow`
646
+ - `--schmancy-sys-color-surface-containerHigh`
647
+ - `--schmancy-sys-color-surface-containerHighest`
648
+
649
+ #### Background & Outline
650
+ - `--schmancy-sys-color-background-default`
651
+ - `--schmancy-sys-color-background-on`
652
+ - `--schmancy-sys-color-outline-default`
653
+ - `--schmancy-sys-color-outline-variant`
654
+
655
+ ## Migration Guide
656
+
657
+ ### From Hardcoded Colors
658
+
659
+ ```css
660
+ /* Before - Hardcoded colors */
661
+ .card {
662
+ background: #ffffff;
663
+ color: #000000;
664
+ border: 1px solid #e0e0e0;
665
+ }
666
+
667
+ /* After - Theme-aware */
668
+ .card {
669
+ background: var(--schmancy-sys-color-surface-default);
670
+ color: var(--schmancy-sys-color-surface-on);
671
+ border: 1px solid var(--schmancy-sys-color-outline-variant);
672
+ }
673
+ ```
674
+
675
+ ### From CSS-in-JS
676
+
677
+ ```typescript
678
+ // Before - CSS-in-JS theme object
679
+ const styles = {
680
+ card: {
681
+ backgroundColor: theme.colors.background,
682
+ color: theme.colors.text
683
+ }
684
+ }
685
+
686
+ // After - CSS with variables
687
+ static styles = css`
688
+ .card {
689
+ background: var(--schmancy-sys-color-surface-default);
690
+ color: var(--schmancy-sys-color-surface-on);
691
+ }
692
+ `
693
+ ```
694
+
695
+ ### From Manual Dark Mode
696
+
697
+ ```typescript
698
+ // Before - Manual dark mode handling
699
+ @state() isDark = false
700
+
701
+ render() {
702
+ return html`
703
+ <div class=${this.isDark ? 'dark-theme' : 'light-theme'}>
704
+ <!-- content -->
705
+ </div>
706
+ `
707
+ }
708
+
709
+ // After - Automatic with theme service
710
+ render() {
711
+ // CSS variables automatically update
712
+ return html`
713
+ <div>
714
+ <!-- content automatically themed -->
715
+ </div>
716
+ `
717
+ }
718
+ ```
719
+
720
+ ## Advanced Patterns
721
+
722
+ ### Theme-Aware Component
723
+
724
+ ```typescript
725
+ @customElement('themed-card')
726
+ export class ThemedCard extends LitElement {
727
+ @select(themeContext) theme!: ThemeState
728
+
729
+ static styles = css`
730
+ :host {
731
+ display: block;
732
+ background: var(--schmancy-sys-color-surface-container);
733
+ color: var(--schmancy-sys-color-surface-on);
734
+ border-radius: var(--schmancy-sys-shape-corner-medium);
735
+ padding: 16px;
736
+ transition: all 200ms ease-in-out;
737
+ }
738
+
739
+ :host([elevated]) {
740
+ box-shadow: var(--schmancy-sys-elevation-2);
741
+ }
742
+
743
+ .header {
744
+ color: var(--schmancy-sys-color-primary-default);
745
+ font-size: var(--schmancy-sys-typescale-headline-small-size);
746
+ }
747
+ `
748
+
749
+ render() {
750
+ return html`
751
+ <div class="header">
752
+ <slot name="header"></slot>
753
+ </div>
754
+ <slot></slot>
755
+ `
756
+ }
757
+ }
758
+ ```
759
+
760
+ ### Theme Presets
761
+
762
+ ```typescript
763
+ class ThemePresets {
764
+ static readonly presets = {
765
+ corporate: {
766
+ mode: 'light' as const,
767
+ primaryColor: '#003D82',
768
+ fontFamily: 'Inter, system-ui',
769
+ borderRadius: 'small'
770
+ },
771
+
772
+ vibrant: {
773
+ mode: 'auto' as const,
774
+ primaryColor: '#FF6B6B',
775
+ fontFamily: 'Poppins, sans-serif',
776
+ borderRadius: 'large'
777
+ },
778
+
779
+ minimal: {
780
+ mode: 'auto' as const,
781
+ primaryColor: '#2C3E50',
782
+ fontFamily: 'system-ui',
783
+ borderRadius: 'none'
784
+ },
785
+
786
+ accessibility: {
787
+ mode: 'light' as const,
788
+ primaryColor: '#0055AA',
789
+ contrast: 'high',
790
+ fontFamily: 'Arial, sans-serif',
791
+ borderRadius: 'medium'
792
+ }
793
+ }
794
+
795
+ static apply(presetName: keyof typeof ThemePresets.presets) {
796
+ const preset = ThemePresets.presets[presetName]
797
+ themeService.setTheme(preset)
798
+ }
799
+ }
800
+
801
+ // Usage
802
+ ThemePresets.apply('corporate')
803
+ ```
804
+
805
+ ### Multi-Brand Support
806
+
807
+ ```typescript
808
+ class BrandManager {
809
+ private brands = {
810
+ main: {
811
+ primaryColor: '#6750A4',
812
+ logo: '/assets/main-logo.svg'
813
+ },
814
+ partner: {
815
+ primaryColor: '#00897B',
816
+ logo: '/assets/partner-logo.svg'
817
+ }
818
+ }
819
+
820
+ switchBrand(brandKey: keyof typeof this.brands) {
821
+ const brand = this.brands[brandKey]
822
+ themeService.setPrimaryColor(brand.primaryColor)
823
+ // Update logo and other brand assets
824
+ this.updateBrandAssets(brand)
825
+ }
826
+
827
+ private updateBrandAssets(brand: any) {
828
+ // Update logos, fonts, etc.
829
+ }
830
+ }
831
+ ```
832
+
833
+ ## Testing Themes
834
+
835
+ ```typescript
836
+ // Test component in different themes
837
+ describe('ThemedComponent', () => {
838
+ beforeEach(() => {
839
+ themeService.reset()
840
+ })
841
+
842
+ it('renders correctly in light mode', async () => {
843
+ themeService.setMode('light')
844
+ const el = await fixture(html`<themed-component></themed-component>`)
845
+ // Test light mode rendering
846
+ })
847
+
848
+ it('renders correctly in dark mode', async () => {
849
+ themeService.setMode('dark')
850
+ const el = await fixture(html`<themed-component></themed-component>`)
851
+ // Test dark mode rendering
852
+ })
853
+
854
+ it('responds to theme changes', async () => {
855
+ const el = await fixture(html`<themed-component></themed-component>`)
856
+
857
+ themeService.setPrimaryColor('#FF5722')
858
+ await el.updateComplete
859
+
860
+ // Verify component updated with new theme
861
+ })
862
+ })
863
+ ```
864
+
865
+ ## Performance Optimization
866
+
867
+ ### Debouncing Theme Changes
868
+
869
+ ```typescript
870
+ import { debounceTime, distinctUntilChanged } from 'rxjs'
871
+
872
+ themeService.theme$
873
+ .pipe(
874
+ debounceTime(300), // Debounce rapid changes
875
+ distinctUntilChanged((a, b) =>
876
+ a.primaryColor === b.primaryColor &&
877
+ a.mode === b.mode
878
+ ),
879
+ takeUntil(this.disconnecting)
880
+ )
881
+ .subscribe(theme => {
882
+ // Handle theme changes
883
+ })
884
+ ```
885
+
886
+ ### Lazy Loading Theme Components
887
+
888
+ ```typescript
889
+ // Only load theme UI when needed
890
+ async function openThemeSettings() {
891
+ const { ThemeSettings } = await import('./theme-settings')
892
+ const settings = new ThemeSettings()
893
+ document.body.appendChild(settings)
894
+ }
895
+ ```
896
+
897
+ ## Troubleshooting
898
+
899
+ ### Common Issues
900
+
901
+ 1. **Theme not applying**: Ensure theme component or service is initialized at app root
902
+ 2. **CSS variables undefined**: Check that schmancy-theme is imported before use
903
+ 3. **Dark mode not working**: Verify `scheme="auto"` and system preferences
904
+ 4. **Performance issues**: Use debouncing and avoid excessive nesting
905
+ 5. **Colors not updating**: Ensure using CSS variables, not hardcoded values
227
906
 
228
907
  ## Related Components
229
908
 
@@ -235,7 +914,10 @@ themeEl.theme = {
235
914
  ## Use Cases
236
915
 
237
916
  1. **App Theming**: Consistent app-wide styling
238
- 2. **White-Label**: Dynamic branding
239
- 3. **User Preferences**: Personalized themes
917
+ 2. **White-Label**: Dynamic branding for multiple clients
918
+ 3. **User Preferences**: Personalized themes saved per user
240
919
  4. **Section Theming**: Different themes for app sections
241
- 5. **A/B Testing**: Theme variations for testing
920
+ 5. **A/B Testing**: Theme variations for testing
921
+ 6. **Accessibility**: High contrast modes for better readability
922
+ 7. **Dark Mode**: Automatic or manual dark mode support
923
+ 8. **Brand Compliance**: Enforce brand colors across components