@mhmo91/schmancy 0.9.3 → 0.9.5

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 (583) hide show
  1. package/.claude-plugin/plugin.json +13 -0
  2. package/README.md +14 -4
  3. package/dist/.claude-plugin/plugin.json +13 -0
  4. package/dist/{area-CC8fUnra.js → area-CRoGqD_u.js} +2 -2
  5. package/dist/area-CRoGqD_u.js.map +1 -0
  6. package/dist/{area-wnWUAHEn.cjs → area-JPykB7A9.cjs} +1 -1
  7. package/dist/area-JPykB7A9.cjs.map +1 -0
  8. package/dist/area.cjs +1 -1
  9. package/dist/area.js +1 -1
  10. package/dist/{autocomplete-B2Z3WK_7.cjs → autocomplete-5rVhbieU.cjs} +1 -1
  11. package/dist/{autocomplete-B2Z3WK_7.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
  12. package/dist/{autocomplete-CJ7YgtKN.js → autocomplete-BllPQwr8.js} +3 -3
  13. package/dist/{autocomplete-CJ7YgtKN.js.map → autocomplete-BllPQwr8.js.map} +1 -1
  14. package/dist/autocomplete.cjs +1 -1
  15. package/dist/autocomplete.js +1 -1
  16. package/dist/badge.cjs +1 -1
  17. package/dist/badge.js +1 -1
  18. package/dist/{boat-C9eU6NO-.js → boat-BDTQ-du9.js} +2 -2
  19. package/dist/{boat-C9eU6NO-.js.map → boat-BDTQ-du9.js.map} +1 -1
  20. package/dist/{boat-B57_4TzJ.cjs → boat-DYEAZ8Qj.cjs} +1 -1
  21. package/dist/{boat-B57_4TzJ.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
  22. package/dist/boat.cjs +1 -1
  23. package/dist/boat.js +1 -1
  24. package/dist/{busy-CGZXy0h-.js → busy-ChDAeaKF.js} +1 -1
  25. package/dist/{busy-CGZXy0h-.js.map → busy-ChDAeaKF.js.map} +1 -1
  26. package/dist/{busy--6oimtop.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
  27. package/dist/{busy--6oimtop.cjs.map → busy-Dj7Xn0Z0.cjs.map} +1 -1
  28. package/dist/busy.cjs +1 -1
  29. package/dist/busy.js +1 -1
  30. package/dist/button.cjs +1 -1
  31. package/dist/button.js +2 -2
  32. package/dist/{card-BGJ0Hb1O.cjs → card-BvPWVEJX.cjs} +1 -1
  33. package/dist/{card-BGJ0Hb1O.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
  34. package/dist/{card-C-ee-l5O.js → card-DZFPRPqs.js} +1 -1
  35. package/dist/{card-C-ee-l5O.js.map → card-DZFPRPqs.js.map} +1 -1
  36. package/dist/card.cjs +1 -1
  37. package/dist/card.js +1 -1
  38. package/dist/charts.cjs +1 -1
  39. package/dist/charts.js +2 -2
  40. package/dist/{checkbox-DuYaKoDZ.cjs → checkbox-BC_37rsG.cjs} +1 -1
  41. package/dist/{checkbox-DuYaKoDZ.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
  42. package/dist/{checkbox-FRcorDrD.js → checkbox-GSSjqo6w.js} +1 -1
  43. package/dist/{checkbox-FRcorDrD.js.map → checkbox-GSSjqo6w.js.map} +1 -1
  44. package/dist/checkbox.cjs +1 -1
  45. package/dist/checkbox.js +1 -1
  46. package/dist/{chips-BpA0A-qr.cjs → chips-B19XS8Xc.cjs} +1 -1
  47. package/dist/{chips-BpA0A-qr.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
  48. package/dist/{chips-CyzNbKJD.js → chips-B9oAEfE_.js} +3 -3
  49. package/dist/{chips-CyzNbKJD.js.map → chips-B9oAEfE_.js.map} +1 -1
  50. package/dist/chips.cjs +1 -1
  51. package/dist/chips.js +2 -2
  52. package/dist/{code-highlight-C7O9ltXm.js → code-highlight-DCk5lJY-.js} +1 -1
  53. package/dist/{code-highlight-C7O9ltXm.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
  54. package/dist/{code-highlight-DsBdSQBG.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
  55. package/dist/{code-highlight-DsBdSQBG.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
  56. package/dist/code-highlight.cjs +1 -1
  57. package/dist/code-highlight.js +1 -1
  58. package/dist/{components-CkMvOiTR.js → components-COsM6sJZ.js} +2 -2
  59. package/dist/{components-CkMvOiTR.js.map → components-COsM6sJZ.js.map} +1 -1
  60. package/dist/{components-dDI3xeIf.cjs → components-CyD6a7gQ.cjs} +1 -1
  61. package/dist/{components-dDI3xeIf.cjs.map → components-CyD6a7gQ.cjs.map} +1 -1
  62. package/dist/components.cjs +1 -1
  63. package/dist/components.js +1 -1
  64. package/dist/connectivity.cjs +1 -1
  65. package/dist/connectivity.js +1 -1
  66. package/dist/content-drawer.cjs +1 -1
  67. package/dist/content-drawer.js +1 -1
  68. package/dist/{date-range-BrN_Bs6_.js → date-range-Sfyco9-n.js} +3 -3
  69. package/dist/{date-range-BrN_Bs6_.js.map → date-range-Sfyco9-n.js.map} +1 -1
  70. package/dist/{date-range-70zhLUKE.cjs → date-range-ZAaQB22I.cjs} +1 -1
  71. package/dist/{date-range-70zhLUKE.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
  72. package/dist/{date-range-inline-Cp294DxR.js → date-range-inline-Bl8qbiQF.js} +1 -1
  73. package/dist/{date-range-inline-Cp294DxR.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
  74. package/dist/{date-range-inline-CPzD-tIv.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
  75. package/dist/{date-range-inline-CPzD-tIv.cjs.map → date-range-inline-m7nLjOMI.cjs.map} +1 -1
  76. package/dist/date-range-inline.cjs +1 -1
  77. package/dist/date-range-inline.js +1 -1
  78. package/dist/date-range.cjs +1 -1
  79. package/dist/date-range.js +1 -1
  80. package/dist/{delay-COcAkBqB.cjs → delay-7boauN6N.cjs} +1 -1
  81. package/dist/{delay-COcAkBqB.cjs.map → delay-7boauN6N.cjs.map} +1 -1
  82. package/dist/{delay-IV0Swce2.js → delay-CgX6m0HN.js} +3 -3
  83. package/dist/{delay-IV0Swce2.js.map → delay-CgX6m0HN.js.map} +1 -1
  84. package/dist/delay.cjs +1 -1
  85. package/dist/delay.js +1 -1
  86. package/dist/{details-DgWkPqmt.cjs → details-BHnk8l4q.cjs} +1 -1
  87. package/dist/{details-DgWkPqmt.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
  88. package/dist/{details-CuKmr3Qw.js → details-BPkUg8Cq.js} +2 -2
  89. package/dist/{details-CuKmr3Qw.js.map → details-BPkUg8Cq.js.map} +1 -1
  90. package/dist/details.cjs +1 -1
  91. package/dist/details.js +1 -1
  92. package/dist/dialog.cjs +1 -1
  93. package/dist/dialog.js +2 -2
  94. package/dist/directives.cjs.map +1 -1
  95. package/dist/directives.js.map +1 -1
  96. package/dist/discovery.cjs.map +1 -1
  97. package/dist/discovery.js.map +1 -1
  98. package/dist/{divider-BWoUbfgZ.js → divider-CW9a7MMj.js} +2 -2
  99. package/dist/{divider-BWoUbfgZ.js.map → divider-CW9a7MMj.js.map} +1 -1
  100. package/dist/{divider-BghtrMbn.cjs → divider-_khrhrZo.cjs} +1 -1
  101. package/dist/{divider-BghtrMbn.cjs.map → divider-_khrhrZo.cjs.map} +1 -1
  102. package/dist/divider.cjs +1 -1
  103. package/dist/divider.js +1 -1
  104. package/dist/dropdown.cjs +1 -1
  105. package/dist/dropdown.js +2 -2
  106. package/dist/{expand-XyDE5SsO.cjs → expand-Cp7-PH8b.cjs} +1 -1
  107. package/dist/{expand-XyDE5SsO.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
  108. package/dist/{expand-CJU9m4ga.js → expand-iQ7EOMP7.js} +3 -3
  109. package/dist/{expand-CJU9m4ga.js.map → expand-iQ7EOMP7.js.map} +1 -1
  110. package/dist/expand.cjs +1 -1
  111. package/dist/expand.js +1 -1
  112. package/dist/{extra-CsrRKKqE.cjs → extra-IKAiJJhv.cjs} +1 -1
  113. package/dist/{extra-CsrRKKqE.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
  114. package/dist/{extra-BxXFmW1w.js → extra-wEpvEFbK.js} +2 -2
  115. package/dist/{extra-BxXFmW1w.js.map → extra-wEpvEFbK.js.map} +1 -1
  116. package/dist/extra.cjs +1 -1
  117. package/dist/extra.js +1 -1
  118. package/dist/{float-BD86t_NU.js → float-BQ_urmMs.js} +2 -2
  119. package/dist/{float-BD86t_NU.js.map → float-BQ_urmMs.js.map} +1 -1
  120. package/dist/{float-DBv1FINW.cjs → float-D5rNC82i.cjs} +1 -1
  121. package/dist/{float-DBv1FINW.cjs.map → float-D5rNC82i.cjs.map} +1 -1
  122. package/dist/float.cjs +1 -1
  123. package/dist/float.js +1 -1
  124. package/dist/{form-D0bIeDWT.cjs → form-BqN1AGFj.cjs} +1 -1
  125. package/dist/{form-D0bIeDWT.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
  126. package/dist/{form-Cp5-I_ZV.js → form-CajC5HnO.js} +1 -1
  127. package/dist/{form-Cp5-I_ZV.js.map → form-CajC5HnO.js.map} +1 -1
  128. package/dist/form.cjs +1 -1
  129. package/dist/form.js +1 -1
  130. package/dist/{icons-D8w_20mO.cjs → icons-B57_93VV.cjs} +1 -1
  131. package/dist/{icons-D8w_20mO.cjs.map → icons-B57_93VV.cjs.map} +1 -1
  132. package/dist/{icons-BpU0_l92.js → icons-BDqiGXrO.js} +1 -1
  133. package/dist/{icons-BpU0_l92.js.map → icons-BDqiGXrO.js.map} +1 -1
  134. package/dist/icons.cjs +1 -1
  135. package/dist/icons.js +1 -1
  136. package/dist/{iframe-BjwxA2Pg.cjs → iframe-DNHL3GIk.cjs} +1 -1
  137. package/dist/{iframe-BjwxA2Pg.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
  138. package/dist/{iframe-tY1GY5g1.js → iframe-WnWPIrBG.js} +1 -1
  139. package/dist/{iframe-tY1GY5g1.js.map → iframe-WnWPIrBG.js.map} +1 -1
  140. package/dist/iframe.cjs +1 -1
  141. package/dist/iframe.js +1 -1
  142. package/dist/index.cjs +1 -1
  143. package/dist/index.js +33 -33
  144. package/dist/{input-BwxwognS.cjs → input-BiSrTcrR.cjs} +1 -1
  145. package/dist/{input-BwxwognS.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
  146. package/dist/{input-BnfTpRN9.js → input-VaXHFrRn.js} +1 -1
  147. package/dist/{input-BnfTpRN9.js.map → input-VaXHFrRn.js.map} +1 -1
  148. package/dist/{input-chip-MjOwX5EY.cjs → input-chip-Dy-AiP55.cjs} +1 -1
  149. package/dist/{input-chip-MjOwX5EY.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
  150. package/dist/{input-chip-CkM2aYmO.js → input-chip-QejNcRnS.js} +1 -1
  151. package/dist/{input-chip-CkM2aYmO.js.map → input-chip-QejNcRnS.js.map} +1 -1
  152. package/dist/input.cjs +1 -1
  153. package/dist/input.js +1 -1
  154. package/dist/json.cjs +1 -1
  155. package/dist/json.js +2 -2
  156. package/dist/{layout-CJSlZlFL.js → layout-CnsXeCAy.js} +2 -2
  157. package/dist/{layout-CJSlZlFL.js.map → layout-CnsXeCAy.js.map} +1 -1
  158. package/dist/{layout-BV0EeyUS.cjs → layout-DNYG3phx.cjs} +1 -1
  159. package/dist/{layout-BV0EeyUS.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
  160. package/dist/layout.cjs +1 -1
  161. package/dist/layout.js +2 -2
  162. package/dist/{lightbox-groqGmJH.js → lightbox-BrI1Z31s.js} +2 -2
  163. package/dist/{lightbox-groqGmJH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
  164. package/dist/{lightbox-CpNMZHZW.cjs → lightbox-CmACf0t5.cjs} +1 -1
  165. package/dist/{lightbox-CpNMZHZW.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
  166. package/dist/lightbox.cjs +1 -1
  167. package/dist/lightbox.js +1 -1
  168. package/dist/{list-DzkqT_r-.js → list-Cm-jjXxM.js} +2 -2
  169. package/dist/{list-DzkqT_r-.js.map → list-Cm-jjXxM.js.map} +1 -1
  170. package/dist/{list-CyHd0Zc2.cjs → list-swIL9VDv.cjs} +1 -1
  171. package/dist/{list-CyHd0Zc2.cjs.map → list-swIL9VDv.cjs.map} +1 -1
  172. package/dist/list.cjs +1 -1
  173. package/dist/list.js +1 -1
  174. package/dist/{litElement.mixin-BG6_-nYX.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
  175. package/dist/{litElement.mixin-BG6_-nYX.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
  176. package/dist/{litElement.mixin-Dm-4L8zL.js → litElement.mixin-6jJYHCrZ.js} +1 -1
  177. package/dist/{litElement.mixin-Dm-4L8zL.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
  178. package/dist/{mailbox-BcqnXYVP.js → mailbox-BuvsVaAQ.js} +4 -4
  179. package/dist/{mailbox-BcqnXYVP.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
  180. package/dist/{mailbox-C5eYTd7p.cjs → mailbox-D6LkQcN5.cjs} +1 -1
  181. package/dist/{mailbox-C5eYTd7p.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
  182. package/dist/mailbox.cjs +1 -1
  183. package/dist/mailbox.js +1 -1
  184. package/dist/{map-C0o1PgLE.js → map-CQiKAxC3.js} +1 -1
  185. package/dist/{map-C0o1PgLE.js.map → map-CQiKAxC3.js.map} +1 -1
  186. package/dist/{map-BncheFt5.cjs → map-D5NN4VET.cjs} +1 -1
  187. package/dist/{map-BncheFt5.cjs.map → map-D5NN4VET.cjs.map} +1 -1
  188. package/dist/map.cjs +1 -1
  189. package/dist/map.js +1 -1
  190. package/dist/{menu-uwqlQbLd.js → menu-C1x04YZw.js} +2 -2
  191. package/dist/{menu-uwqlQbLd.js.map → menu-C1x04YZw.js.map} +1 -1
  192. package/dist/{menu-yXzwJZFf.cjs → menu-CkgMO9K5.cjs} +1 -1
  193. package/dist/{menu-yXzwJZFf.cjs.map → menu-CkgMO9K5.cjs.map} +1 -1
  194. package/dist/menu.cjs +1 -1
  195. package/dist/menu.js +1 -1
  196. package/dist/mixins.cjs +1 -1
  197. package/dist/mixins.js +3 -3
  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 +2 -2
  204. package/dist/{notification-DzYT4deA.js → notification-BnBgxjF-.js} +3 -3
  205. package/dist/{notification-DzYT4deA.js.map → notification-BnBgxjF-.js.map} +1 -1
  206. package/dist/{notification-BjwTfLAl.cjs → notification-CZFEhWxc.cjs} +1 -1
  207. package/dist/{notification-BjwTfLAl.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
  208. package/dist/notification.cjs +1 -1
  209. package/dist/notification.js +1 -1
  210. package/dist/{option-BJsD3u2D.cjs → option-BrxCVwSx.cjs} +1 -1
  211. package/dist/{option-BJsD3u2D.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
  212. package/dist/{option-JFHxgiYl.js → option-DBO8xZwd.js} +1 -1
  213. package/dist/{option-JFHxgiYl.js.map → option-DBO8xZwd.js.map} +1 -1
  214. package/dist/option.cjs +1 -1
  215. package/dist/option.js +1 -1
  216. package/dist/page.cjs +1 -1
  217. package/dist/page.js +3 -3
  218. package/dist/{progress-BoRmyGAa.cjs → progress-Db2e4_Zd.cjs} +1 -1
  219. package/dist/{progress-BoRmyGAa.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
  220. package/dist/{progress-BUh5WBqx.js → progress-DeiHxXo7.js} +2 -2
  221. package/dist/{progress-BUh5WBqx.js.map → progress-DeiHxXo7.js.map} +1 -1
  222. package/dist/progress.cjs +1 -1
  223. package/dist/progress.js +1 -1
  224. package/dist/{provide-8MrDz_qX.js → provide-C1aQhxYo.js} +1 -1
  225. package/dist/{provide-8MrDz_qX.js.map → provide-C1aQhxYo.js.map} +1 -1
  226. package/dist/{provide-CDkxgjHb.cjs → provide-DHnhQtCH.cjs} +1 -1
  227. package/dist/{provide-CDkxgjHb.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
  228. package/dist/qr-scanner.cjs +1 -1
  229. package/dist/qr-scanner.js +2 -2
  230. package/dist/{radio-group-rhrvhB5X.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
  231. package/dist/{radio-group-rhrvhB5X.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
  232. package/dist/{radio-group-DbOWUPhi.js → radio-group-zSO0AkJf.js} +1 -1
  233. package/dist/{radio-group-DbOWUPhi.js.map → radio-group-zSO0AkJf.js.map} +1 -1
  234. package/dist/radio-group.cjs +1 -1
  235. package/dist/radio-group.js +1 -1
  236. package/dist/range.cjs +1 -1
  237. package/dist/range.js +1 -1
  238. package/dist/{scroll-BE9W9PF2.cjs → scroll-QMCmbbDv.cjs} +1 -1
  239. package/dist/{scroll-BE9W9PF2.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
  240. package/dist/{scroll-qGks1R0k.js → scroll-cBDzye64.js} +1 -1
  241. package/dist/{scroll-qGks1R0k.js.map → scroll-cBDzye64.js.map} +1 -1
  242. package/dist/{select-DXU2kzg4.cjs → select-Ct37l3lg.cjs} +1 -1
  243. package/dist/{select-DXU2kzg4.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
  244. package/dist/{select-D9sgBRjU.js → select-c6HbWvKP.js} +2 -2
  245. package/dist/{select-D9sgBRjU.js.map → select-c6HbWvKP.js.map} +1 -1
  246. package/dist/select.cjs +1 -1
  247. package/dist/select.js +1 -1
  248. package/dist/{sheet-CIxCCJ3H.js → sheet-BMXcUiIm.js} +4 -4
  249. package/dist/{sheet-CIxCCJ3H.js.map → sheet-BMXcUiIm.js.map} +1 -1
  250. package/dist/{sheet-CeX6BbNp.cjs → sheet-CQec-bCV.cjs} +1 -1
  251. package/dist/{sheet-CeX6BbNp.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
  252. package/dist/sheet.cjs +1 -1
  253. package/dist/sheet.js +2 -2
  254. package/dist/{sheet.service-CAB7weBc.js → sheet.service-BcPV3Du4.js} +1 -1
  255. package/dist/{sheet.service-CAB7weBc.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
  256. package/dist/{sheet.service-DPAp7E3x.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
  257. package/dist/{sheet.service-DPAp7E3x.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
  258. package/dist/skills/INDEX.md +72 -0
  259. package/dist/skills/SKILL.md +120 -0
  260. package/dist/skills/area.md +141 -0
  261. package/{ai → dist/skills}/mailbox.md +1 -1
  262. package/dist/skills/mixins.md +99 -0
  263. package/dist/skills/schmancy/INDEX.md +72 -0
  264. package/dist/skills/schmancy/SKILL.md +120 -0
  265. package/dist/skills/schmancy/area.md +141 -0
  266. package/dist/{ai → skills/schmancy}/mailbox.md +1 -1
  267. package/dist/skills/schmancy/mixins.md +99 -0
  268. package/dist/skills/schmancy/store.md +126 -0
  269. package/dist/skills/store.md +126 -0
  270. package/dist/slider.cjs +1 -1
  271. package/dist/slider.js +2 -2
  272. package/dist/{src-CbO5kJ2O.js → src-BLngW2bl.js} +42 -42
  273. package/dist/{src-CbO5kJ2O.js.map → src-BLngW2bl.js.map} +1 -1
  274. package/dist/{src-SraDxEeg.cjs → src-BtQVyqMy.cjs} +1 -1
  275. package/dist/{src-SraDxEeg.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
  276. package/dist/steps.cjs +1 -1
  277. package/dist/steps.js +3 -3
  278. package/dist/{surface-DuH0pm2v.cjs → surface-BjKZoJxK.cjs} +1 -1
  279. package/dist/{surface-DuH0pm2v.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
  280. package/dist/{surface-eN_Jy2MJ.js → surface-pK8hME5c.js} +3 -3
  281. package/dist/{surface-eN_Jy2MJ.js.map → surface-pK8hME5c.js.map} +1 -1
  282. package/dist/surface.cjs +1 -1
  283. package/dist/surface.js +1 -1
  284. package/dist/{surface.mixin-CIXgN6iw.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
  285. package/dist/{surface.mixin-CIXgN6iw.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
  286. package/dist/{surface.mixin-D9jv1sKG.js → surface.mixin-CBNRpJum.js} +1 -1
  287. package/dist/{surface.mixin-D9jv1sKG.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
  288. package/dist/{table-Dg_tUGB_.js → table-BXIHX9h4.js} +2 -2
  289. package/dist/{table-Dg_tUGB_.js.map → table-BXIHX9h4.js.map} +1 -1
  290. package/dist/{table-C9rRQJEB.cjs → table-CiqgZzSd.cjs} +1 -1
  291. package/dist/{table-C9rRQJEB.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
  292. package/dist/table.cjs +1 -1
  293. package/dist/table.js +1 -1
  294. package/dist/{tabs-soTL-x4G.cjs → tabs-CKa-W4qA.cjs} +1 -1
  295. package/dist/{tabs-soTL-x4G.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
  296. package/dist/{tabs-BbFC9omR.js → tabs-nbV5eblZ.js} +2 -2
  297. package/dist/{tabs-BbFC9omR.js.map → tabs-nbV5eblZ.js.map} +1 -1
  298. package/dist/tabs.cjs +1 -1
  299. package/dist/tabs.js +1 -1
  300. package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
  301. package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
  302. package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
  303. package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
  304. package/dist/teleport.cjs +1 -1
  305. package/dist/teleport.js +1 -1
  306. package/dist/{textarea-DaRUJ0ri.cjs → textarea-Cp1ZE60O.cjs} +1 -1
  307. package/dist/{textarea-DaRUJ0ri.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
  308. package/dist/{textarea-hChvHbNM.js → textarea-D7q8exMg.js} +1 -1
  309. package/dist/{textarea-hChvHbNM.js.map → textarea-D7q8exMg.js.map} +1 -1
  310. package/dist/textarea.cjs +1 -1
  311. package/dist/textarea.js +1 -1
  312. package/dist/{theme-ZYH2MqX9.cjs → theme-Da4SPq9X.cjs} +1 -1
  313. package/dist/{theme-ZYH2MqX9.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
  314. package/dist/{theme-B0M8Hlyo.js → theme-_VPV6Bxh.js} +3 -3
  315. package/dist/{theme-B0M8Hlyo.js.map → theme-_VPV6Bxh.js.map} +1 -1
  316. package/dist/{theme-button-BtlX_Zgd.js → theme-button--sX8A-m1.js} +1 -1
  317. package/dist/{theme-button-BtlX_Zgd.js.map → theme-button--sX8A-m1.js.map} +1 -1
  318. package/dist/{theme-button-Dvqg-rE_.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
  319. package/dist/{theme-button-Dvqg-rE_.cjs.map → theme-button-Ci8VQ7KW.cjs.map} +1 -1
  320. package/dist/theme-button.cjs +1 -1
  321. package/dist/theme-button.js +1 -1
  322. package/dist/theme.cjs +1 -1
  323. package/dist/theme.js +2 -2
  324. package/dist/tooltip.cjs +1 -1
  325. package/dist/tooltip.js +1 -1
  326. package/dist/tree.cjs +1 -1
  327. package/dist/tree.js +1 -1
  328. package/dist/{typewriter-Cf9f2bdx.cjs → typewriter-B2TnHPjw.cjs} +1 -1
  329. package/dist/{typewriter-Cf9f2bdx.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
  330. package/dist/{typewriter-CCel8Nta.js → typewriter-BrZNa8T-.js} +3 -3
  331. package/dist/{typewriter-CCel8Nta.js.map → typewriter-BrZNa8T-.js.map} +1 -1
  332. package/dist/typewriter.cjs +1 -1
  333. package/dist/typewriter.js +1 -1
  334. package/dist/typography.cjs +1 -1
  335. package/dist/typography.js +1 -1
  336. package/dist/{window-CbgdwOZD.js → window-CM1ycigo.js} +2 -2
  337. package/dist/{window-CbgdwOZD.js.map → window-CM1ycigo.js.map} +1 -1
  338. package/dist/{window-B9_14c12.cjs → window-Uii13x_r.cjs} +1 -1
  339. package/dist/{window-B9_14c12.cjs.map → window-Uii13x_r.cjs.map} +1 -1
  340. package/dist/window.cjs +1 -1
  341. package/dist/window.js +1 -1
  342. package/mixins/baseElement.ts +1 -1
  343. package/mixins/discovery.service.ts +1 -1
  344. package/package.json +3 -4
  345. package/skills/schmancy/INDEX.md +72 -0
  346. package/skills/schmancy/SKILL.md +120 -0
  347. package/skills/schmancy/animation.md +64 -0
  348. package/skills/schmancy/area.md +141 -0
  349. package/skills/schmancy/audio.md +69 -0
  350. package/skills/schmancy/autocomplete.md +53 -0
  351. package/skills/schmancy/avatar.md +47 -0
  352. package/skills/schmancy/badge.md +41 -0
  353. package/skills/schmancy/boat.md +47 -0
  354. package/skills/schmancy/busy.md +36 -0
  355. package/skills/schmancy/button.md +59 -0
  356. package/skills/schmancy/card.md +53 -0
  357. package/skills/schmancy/charts.md +93 -0
  358. package/skills/schmancy/checkbox.md +36 -0
  359. package/skills/schmancy/chips.md +87 -0
  360. package/skills/schmancy/code-highlight.md +47 -0
  361. package/skills/schmancy/connectivity.md +36 -0
  362. package/skills/schmancy/content-drawer.md +65 -0
  363. package/skills/schmancy/date-range-inline.md +44 -0
  364. package/skills/schmancy/date-range.md +50 -0
  365. package/skills/schmancy/delay.md +50 -0
  366. package/skills/schmancy/details.md +66 -0
  367. package/skills/schmancy/dialog.md +69 -0
  368. package/skills/schmancy/directives.md +298 -0
  369. package/skills/schmancy/discovery.md +67 -0
  370. package/skills/schmancy/divider.md +31 -0
  371. package/skills/schmancy/dropdown.md +47 -0
  372. package/skills/schmancy/expand.md +63 -0
  373. package/skills/schmancy/extra.md +59 -0
  374. package/skills/schmancy/float.md +14 -0
  375. package/skills/schmancy/form.md +49 -0
  376. package/skills/schmancy/icons.md +44 -0
  377. package/skills/schmancy/iframe.md +44 -0
  378. package/skills/schmancy/input.md +56 -0
  379. package/skills/schmancy/json.md +33 -0
  380. package/skills/schmancy/layout.md +63 -0
  381. package/skills/schmancy/lightbox.md +36 -0
  382. package/skills/schmancy/list.md +67 -0
  383. package/skills/schmancy/mailbox.md +102 -0
  384. package/skills/schmancy/map.md +55 -0
  385. package/skills/schmancy/menu.md +39 -0
  386. package/skills/schmancy/mixins.md +99 -0
  387. package/skills/schmancy/nav-drawer.md +52 -0
  388. package/skills/schmancy/navigation-bar.md +48 -0
  389. package/skills/schmancy/navigation-rail.md +62 -0
  390. package/skills/schmancy/notification.md +60 -0
  391. package/skills/schmancy/option.md +43 -0
  392. package/skills/schmancy/page.md +42 -0
  393. package/skills/schmancy/progress.md +30 -0
  394. package/skills/schmancy/qr-scanner.md +51 -0
  395. package/skills/schmancy/radio-group.md +50 -0
  396. package/skills/schmancy/range.md +47 -0
  397. package/skills/schmancy/rxjs-utils.md +60 -0
  398. package/skills/schmancy/select.md +49 -0
  399. package/skills/schmancy/sheet.md +76 -0
  400. package/skills/schmancy/slider.md +43 -0
  401. package/skills/schmancy/steps.md +53 -0
  402. package/skills/schmancy/store.md +126 -0
  403. package/skills/schmancy/surface.md +86 -0
  404. package/skills/schmancy/table.md +60 -0
  405. package/skills/schmancy/tabs.md +49 -0
  406. package/skills/schmancy/teleport.md +55 -0
  407. package/skills/schmancy/textarea.md +48 -0
  408. package/skills/schmancy/theme-button.md +26 -0
  409. package/skills/schmancy/theme.md +58 -0
  410. package/skills/schmancy/tooltip.md +38 -0
  411. package/skills/schmancy/tree.md +53 -0
  412. package/skills/schmancy/typewriter.md +46 -0
  413. package/skills/schmancy/typography.md +53 -0
  414. package/skills/schmancy/utils.md +95 -0
  415. package/skills/schmancy/window.md +67 -0
  416. package/src/area/area.service.ts +1 -1
  417. package/src/area/router.types.ts +1 -1
  418. package/src/directives/animate-text.ts +1 -1
  419. package/src/discovery/discovery.service.ts +1 -1
  420. package/src/input/input.ts +1 -1
  421. package/src/mailbox/README.md +7 -10
  422. package/src/mailbox/types.ts +0 -1
  423. package/types/mixins/discovery.service.d.ts +1 -1
  424. package/types/src/discovery/discovery.service.d.ts +1 -1
  425. package/types/src/mailbox/types.d.ts +0 -1
  426. package/ai/INDEX.md +0 -321
  427. package/ai/area.md +0 -215
  428. package/ai/mixins.md +0 -201
  429. package/ai/store.md +0 -192
  430. package/dist/ai/INDEX.md +0 -321
  431. package/dist/ai/area.md +0 -215
  432. package/dist/ai/mixins.md +0 -201
  433. package/dist/ai/store.md +0 -192
  434. package/dist/area-CC8fUnra.js.map +0 -1
  435. package/dist/area-wnWUAHEn.cjs.map +0 -1
  436. package/dist/tailwind.mixin-BIVhjNvD.js +0 -225
  437. package/dist/tailwind.mixin-BIVhjNvD.js.map +0 -1
  438. package/dist/tailwind.mixin-DSuEu-y3.cjs +0 -2
  439. package/dist/tailwind.mixin-DSuEu-y3.cjs.map +0 -1
  440. package/src/area/readme.md +0 -338
  441. package/src/area/router-guide.md +0 -360
  442. package/src/autocomplete/README.md +0 -485
  443. package/src/content-drawer/readme.md +0 -709
  444. package/src/icons/readme.md +0 -37
  445. package/src/list/readme.md +0 -62
  446. package/src/radio-group/readme.md +0 -315
  447. package/src/select/README.md +0 -405
  448. package/src/tabs/Readme.md +0 -397
  449. package/src/teleport/readme.md +0 -91
  450. package/src/tree/README.md +0 -59
  451. package/src/typewriter/IMPROVEMENTS.md +0 -174
  452. package/src/typewriter/QUICK_REFERENCE.md +0 -166
  453. package/src/typewriter/test-typewriter.html +0 -97
  454. /package/{ai → dist/skills}/animation.md +0 -0
  455. /package/{ai → dist/skills}/audio.md +0 -0
  456. /package/{ai → dist/skills}/autocomplete.md +0 -0
  457. /package/{ai → dist/skills}/avatar.md +0 -0
  458. /package/{ai → dist/skills}/badge.md +0 -0
  459. /package/{ai → dist/skills}/boat.md +0 -0
  460. /package/{ai → dist/skills}/busy.md +0 -0
  461. /package/{ai → dist/skills}/button.md +0 -0
  462. /package/{ai → dist/skills}/card.md +0 -0
  463. /package/{ai → dist/skills}/charts.md +0 -0
  464. /package/{ai → dist/skills}/checkbox.md +0 -0
  465. /package/{ai → dist/skills}/chips.md +0 -0
  466. /package/{ai → dist/skills}/code-highlight.md +0 -0
  467. /package/{ai → dist/skills}/connectivity.md +0 -0
  468. /package/{ai → dist/skills}/content-drawer.md +0 -0
  469. /package/{ai → dist/skills}/date-range-inline.md +0 -0
  470. /package/{ai → dist/skills}/date-range.md +0 -0
  471. /package/{ai → dist/skills}/delay.md +0 -0
  472. /package/{ai → dist/skills}/details.md +0 -0
  473. /package/{ai → dist/skills}/dialog.md +0 -0
  474. /package/{ai → dist/skills}/directives.md +0 -0
  475. /package/{ai → dist/skills}/discovery.md +0 -0
  476. /package/{ai → dist/skills}/divider.md +0 -0
  477. /package/{ai → dist/skills}/dropdown.md +0 -0
  478. /package/{ai → dist/skills}/expand.md +0 -0
  479. /package/{ai → dist/skills}/extra.md +0 -0
  480. /package/{ai → dist/skills}/float.md +0 -0
  481. /package/{ai → dist/skills}/form.md +0 -0
  482. /package/{ai → dist/skills}/icons.md +0 -0
  483. /package/{ai → dist/skills}/iframe.md +0 -0
  484. /package/{ai → dist/skills}/input.md +0 -0
  485. /package/{ai → dist/skills}/json.md +0 -0
  486. /package/{ai → dist/skills}/layout.md +0 -0
  487. /package/{ai → dist/skills}/lightbox.md +0 -0
  488. /package/{ai → dist/skills}/list.md +0 -0
  489. /package/{ai → dist/skills}/map.md +0 -0
  490. /package/{ai → dist/skills}/menu.md +0 -0
  491. /package/{ai → dist/skills}/nav-drawer.md +0 -0
  492. /package/{ai → dist/skills}/navigation-bar.md +0 -0
  493. /package/{ai → dist/skills}/navigation-rail.md +0 -0
  494. /package/{ai → dist/skills}/notification.md +0 -0
  495. /package/{ai → dist/skills}/option.md +0 -0
  496. /package/{ai → dist/skills}/page.md +0 -0
  497. /package/{ai → dist/skills}/progress.md +0 -0
  498. /package/{ai → dist/skills}/qr-scanner.md +0 -0
  499. /package/{ai → dist/skills}/radio-group.md +0 -0
  500. /package/{ai → dist/skills}/range.md +0 -0
  501. /package/{ai → dist/skills}/rxjs-utils.md +0 -0
  502. /package/dist/{ai → skills/schmancy}/animation.md +0 -0
  503. /package/dist/{ai → skills/schmancy}/audio.md +0 -0
  504. /package/dist/{ai → skills/schmancy}/autocomplete.md +0 -0
  505. /package/dist/{ai → skills/schmancy}/avatar.md +0 -0
  506. /package/dist/{ai → skills/schmancy}/badge.md +0 -0
  507. /package/dist/{ai → skills/schmancy}/boat.md +0 -0
  508. /package/dist/{ai → skills/schmancy}/busy.md +0 -0
  509. /package/dist/{ai → skills/schmancy}/button.md +0 -0
  510. /package/dist/{ai → skills/schmancy}/card.md +0 -0
  511. /package/dist/{ai → skills/schmancy}/charts.md +0 -0
  512. /package/dist/{ai → skills/schmancy}/checkbox.md +0 -0
  513. /package/dist/{ai → skills/schmancy}/chips.md +0 -0
  514. /package/dist/{ai → skills/schmancy}/code-highlight.md +0 -0
  515. /package/dist/{ai → skills/schmancy}/connectivity.md +0 -0
  516. /package/dist/{ai → skills/schmancy}/content-drawer.md +0 -0
  517. /package/dist/{ai → skills/schmancy}/date-range-inline.md +0 -0
  518. /package/dist/{ai → skills/schmancy}/date-range.md +0 -0
  519. /package/dist/{ai → skills/schmancy}/delay.md +0 -0
  520. /package/dist/{ai → skills/schmancy}/details.md +0 -0
  521. /package/dist/{ai → skills/schmancy}/dialog.md +0 -0
  522. /package/dist/{ai → skills/schmancy}/directives.md +0 -0
  523. /package/dist/{ai → skills/schmancy}/discovery.md +0 -0
  524. /package/dist/{ai → skills/schmancy}/divider.md +0 -0
  525. /package/dist/{ai → skills/schmancy}/dropdown.md +0 -0
  526. /package/dist/{ai → skills/schmancy}/expand.md +0 -0
  527. /package/dist/{ai → skills/schmancy}/extra.md +0 -0
  528. /package/dist/{ai → skills/schmancy}/float.md +0 -0
  529. /package/dist/{ai → skills/schmancy}/form.md +0 -0
  530. /package/dist/{ai → skills/schmancy}/icons.md +0 -0
  531. /package/dist/{ai → skills/schmancy}/iframe.md +0 -0
  532. /package/dist/{ai → skills/schmancy}/input.md +0 -0
  533. /package/dist/{ai → skills/schmancy}/json.md +0 -0
  534. /package/dist/{ai → skills/schmancy}/layout.md +0 -0
  535. /package/dist/{ai → skills/schmancy}/lightbox.md +0 -0
  536. /package/dist/{ai → skills/schmancy}/list.md +0 -0
  537. /package/dist/{ai → skills/schmancy}/map.md +0 -0
  538. /package/dist/{ai → skills/schmancy}/menu.md +0 -0
  539. /package/dist/{ai → skills/schmancy}/nav-drawer.md +0 -0
  540. /package/dist/{ai → skills/schmancy}/navigation-bar.md +0 -0
  541. /package/dist/{ai → skills/schmancy}/navigation-rail.md +0 -0
  542. /package/dist/{ai → skills/schmancy}/notification.md +0 -0
  543. /package/dist/{ai → skills/schmancy}/option.md +0 -0
  544. /package/dist/{ai → skills/schmancy}/page.md +0 -0
  545. /package/dist/{ai → skills/schmancy}/progress.md +0 -0
  546. /package/dist/{ai → skills/schmancy}/qr-scanner.md +0 -0
  547. /package/dist/{ai → skills/schmancy}/radio-group.md +0 -0
  548. /package/dist/{ai → skills/schmancy}/range.md +0 -0
  549. /package/dist/{ai → skills/schmancy}/rxjs-utils.md +0 -0
  550. /package/{ai → dist/skills/schmancy}/select.md +0 -0
  551. /package/{ai → dist/skills/schmancy}/sheet.md +0 -0
  552. /package/{ai → dist/skills/schmancy}/slider.md +0 -0
  553. /package/{ai → dist/skills/schmancy}/steps.md +0 -0
  554. /package/{ai → dist/skills/schmancy}/surface.md +0 -0
  555. /package/{ai → dist/skills/schmancy}/table.md +0 -0
  556. /package/{ai → dist/skills/schmancy}/tabs.md +0 -0
  557. /package/{ai → dist/skills/schmancy}/teleport.md +0 -0
  558. /package/{ai → dist/skills/schmancy}/textarea.md +0 -0
  559. /package/{ai → dist/skills/schmancy}/theme-button.md +0 -0
  560. /package/{ai → dist/skills/schmancy}/theme.md +0 -0
  561. /package/{ai → dist/skills/schmancy}/tooltip.md +0 -0
  562. /package/{ai → dist/skills/schmancy}/tree.md +0 -0
  563. /package/{ai → dist/skills/schmancy}/typewriter.md +0 -0
  564. /package/{ai → dist/skills/schmancy}/typography.md +0 -0
  565. /package/{ai → dist/skills/schmancy}/utils.md +0 -0
  566. /package/{ai → dist/skills/schmancy}/window.md +0 -0
  567. /package/dist/{ai → skills}/select.md +0 -0
  568. /package/dist/{ai → skills}/sheet.md +0 -0
  569. /package/dist/{ai → skills}/slider.md +0 -0
  570. /package/dist/{ai → skills}/steps.md +0 -0
  571. /package/dist/{ai → skills}/surface.md +0 -0
  572. /package/dist/{ai → skills}/table.md +0 -0
  573. /package/dist/{ai → skills}/tabs.md +0 -0
  574. /package/dist/{ai → skills}/teleport.md +0 -0
  575. /package/dist/{ai → skills}/textarea.md +0 -0
  576. /package/dist/{ai → skills}/theme-button.md +0 -0
  577. /package/dist/{ai → skills}/theme.md +0 -0
  578. /package/dist/{ai → skills}/tooltip.md +0 -0
  579. /package/dist/{ai → skills}/tree.md +0 -0
  580. /package/dist/{ai → skills}/typewriter.md +0 -0
  581. /package/dist/{ai → skills}/typography.md +0 -0
  582. /package/dist/{ai → skills}/utils.md +0 -0
  583. /package/dist/{ai → skills}/window.md +0 -0
@@ -0,0 +1,141 @@
1
+ # Area — Routing
2
+
3
+ Schmancy's client-side router. Three pieces:
4
+
5
+ | Piece | Role |
6
+ |-------|------|
7
+ | `<schmancy-area name="...">` | Named region that renders one route at a time |
8
+ | `<schmancy-route when="tag">` | Declares which component can render in an area |
9
+ | `area.push(...)` | Imperative navigation |
10
+
11
+ Areas can be nested to compose shell-plus-sub-view layouts.
12
+
13
+ ## Example
14
+
15
+ ```html
16
+ <schmancy-area name="root" .default=${lazy(() => import('./pages/home.page'))}>
17
+ <schmancy-route when="home-page"
18
+ .component=${lazy(() => import('./pages/home.page'))}></schmancy-route>
19
+
20
+ <schmancy-route when="app-index"
21
+ .component=${lazy(() => import('./app/app.page'))}
22
+ .guard=${authState$.pipe(
23
+ map(u => !!u && !u.isAnonymous),
24
+ takeUntil(this.disconnecting),
25
+ )}
26
+ @redirect=${() => area.push({
27
+ component: 'home-page',
28
+ area: 'root',
29
+ historyStrategy: 'replace',
30
+ })}></schmancy-route>
31
+ </schmancy-area>
32
+ ```
33
+
34
+ ## `schmancy-area` properties
35
+
36
+ | Property | Type | Description |
37
+ |----------|------|-------------|
38
+ | `name` | string (required) | Area identifier used in `area.push({ area })` |
39
+ | `default` | `RouteComponent \| string` | Fallback when no route matches |
40
+
41
+ ## `schmancy-route` properties
42
+
43
+ | Property | Type | Description |
44
+ |----------|------|-------------|
45
+ | `when` | string (required) | Must match a `@customElement('tag')` tag name |
46
+ | `component` | `RouteComponent` (required) | Class, tag name, or `lazy()` wrapper |
47
+ | `guard` | `Observable<boolean>` | When emits `false`, blocks and dispatches `redirect` event |
48
+ | `exact` | boolean | Strict-equality matching |
49
+
50
+ ## `area` service
51
+
52
+ ```typescript
53
+ import { area } from '@mhmo91/schmancy'
54
+
55
+ area.push({
56
+ area: 'root',
57
+ component: 'app-index',
58
+ params?: { id: '123' },
59
+ historyStrategy?: 'push' | 'replace' | 'silent',
60
+ })
61
+ ```
62
+
63
+ `historyStrategy`:
64
+ - `'push'` (default) — adds a browser-history entry
65
+ - `'replace'` — overwrites the current entry (use after guards or redirects)
66
+ - `'silent'` — changes the area without touching history
67
+
68
+ ### Subscribe to route state
69
+
70
+ ```typescript
71
+ area.on('root').pipe(
72
+ takeUntil(this.disconnecting),
73
+ ).subscribe(route => { /* route.component, route.params */ })
74
+
75
+ area.params<{ id: string }>('detail').pipe(
76
+ takeUntil(this.disconnecting),
77
+ ).subscribe(params => this.loadItem(params.id))
78
+ ```
79
+
80
+ ## Lazy loading
81
+
82
+ ```typescript
83
+ import { lazy } from '@mhmo91/schmancy'
84
+ const HomePage = lazy(() => import('./home.page'))
85
+
86
+ // Optional preload
87
+ html`<button @mouseenter=${() => HomePage.preload()}>Home</button>`
88
+ ```
89
+
90
+ ## Guards
91
+
92
+ `guard` is an Observable<boolean>.
93
+
94
+ - Emits `true` → route renders.
95
+ - Emits `false` → route dispatches a `redirect` event. Handle it with `area.push(...)`.
96
+
97
+ Auth guard:
98
+
99
+ ```typescript
100
+ <schmancy-route when="app-index"
101
+ .component=${lazy(() => import('./app'))}
102
+ .guard=${authState$.pipe(
103
+ map(u => !!u),
104
+ takeUntil(this.disconnecting),
105
+ )}
106
+ @redirect=${() => area.push({
107
+ component: 'home-page', area: 'root', historyStrategy: 'replace',
108
+ })}></schmancy-route>
109
+ ```
110
+
111
+ Compound guard (multiple streams):
112
+
113
+ ```typescript
114
+ .guard=${combineLatest([permissions$, orgContext.$]).pipe(
115
+ takeUntil(this.disconnecting),
116
+ map(([perms, org]) => perms.includes('billing.view') && org?.billing?.configured),
117
+ )}
118
+ ```
119
+
120
+ ## Nested areas
121
+
122
+ Areas nest by rendering an inner `<schmancy-area>` inside a route component. A common shape is an outer area for "signed-in vs. not" and an inner area for sub-views of the signed-in shell.
123
+
124
+ ```html
125
+ <!-- outer -->
126
+ <schmancy-area name="root">
127
+ <schmancy-route when="app-index" .component=${AppShell}></schmancy-route>
128
+ </schmancy-area>
129
+
130
+ <!-- inner (inside AppShell.render()) -->
131
+ <schmancy-area name="app" default="home-page">
132
+ <schmancy-route when="home-page" .component=${...}></schmancy-route>
133
+ <schmancy-route when="settings-page" .component=${...}></schmancy-route>
134
+ </schmancy-area>
135
+ ```
136
+
137
+ ## Rules
138
+
139
+ - `when="tag-name"` must match `@customElement('tag-name')` exactly.
140
+ - Guards emit `false` → always use `historyStrategy: 'replace'` in the `@redirect` handler.
141
+ - Every subscription in guards / route state uses `takeUntil(this.disconnecting)`.
@@ -0,0 +1,69 @@
1
+ # Schmancy Audio
2
+
3
+ > Emotional sound service — synthesizes short, empathetic sounds via Web Audio API keyed on feelings (joyful, tense, calm, etc.). No assets. No external players. Just tones + puffs generated on demand.
4
+
5
+ ## Usage
6
+ ```typescript
7
+ import { sound } from '@mhmo91/schmancy'
8
+
9
+ sound.play('joyful') // trigger a feeling sound
10
+ sound.setVolume(0.2) // 0..1
11
+ sound.setMuted(true)
12
+ sound.resetTheme() // back to defaults
13
+ ```
14
+
15
+ ## Feelings
16
+ Organized by emotional category:
17
+
18
+ | Category | Feelings |
19
+ |----------|----------|
20
+ | Happy | `joyful`, `content`, `excited`, `grateful`, `proud`, `loved` |
21
+ | Sad | `sad`, `disappointed`, `hurt`, `lonely`, `melancholy` |
22
+ | Anxious | `worried`, `nervous`, `overwhelmed`, `tense` |
23
+ | Angry | `frustrated`, `angry`, `annoyed` |
24
+ | Tired | `tired`, `drained`, `bored` |
25
+ | Calm | `calm`, `peaceful`, `relaxed`, `focused` |
26
+ | Connected | `connected`, `supported`, `welcomed` |
27
+ | Mixed | `confused`, `nostalgic`, `bittersweet` |
28
+
29
+ (See `mood-audio.types.ts` for the authoritative list.)
30
+
31
+ ## Observable API
32
+ ```typescript
33
+ sound.theme$.subscribe(theme => console.log(theme?.name ?? 'default'))
34
+ sound.volume$.subscribe(v => {})
35
+ sound.muted$.subscribe(m => {})
36
+ ```
37
+
38
+ ## Settings Persistence
39
+ Volume, mute, and custom theme persist to `localStorage` under key `schmancy-sound-settings` (via `createContext`).
40
+
41
+ ## AI-Generated Themes
42
+ ```typescript
43
+ import type { SoundTheme } from '@mhmo91/schmancy'
44
+
45
+ const customTheme: SoundTheme = {
46
+ name: 'ocean',
47
+ sounds: {
48
+ joyful: { puffs: [...], tones: [...] },
49
+ // partial override — falls through to defaults for anything omitted
50
+ }
51
+ }
52
+
53
+ sound.setTheme(customTheme)
54
+ ```
55
+
56
+ Each `FeelingSound` consists of:
57
+ - **puffs** — short bursts (air/noise, e.g. `{ startTime, duration, frequency, volume }`)
58
+ - **tones** — oscillators (`sine`/`triangle`/`square`/`sawtooth` with envelope)
59
+
60
+ ## Built-in Feedback Hooks
61
+ Other Schmancy components play these automatically:
62
+ - [`schmancy-connectivity-status`](./connectivity.md) on offline/online.
63
+ - Some success/error paths in notifications and dialogs via the `$sounds` legacy helper.
64
+
65
+ ## Legacy API
66
+ - `$sounds` — older generator exported for compatibility.
67
+ - `EmotionalSoundGenerator` — underlying class.
68
+
69
+ Prefer `sound` for new code.
@@ -0,0 +1,53 @@
1
+ # schmancy-autocomplete
2
+
3
+ > Searchable input with fuzzy filtering, single/multi-select, and inline chip display.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-autocomplete label="Assignee" placeholder="Search...">
8
+ <schmancy-option value="alice" label="Alice"></schmancy-option>
9
+ <schmancy-option value="bob" label="Bob"></schmancy-option>
10
+ </schmancy-autocomplete>
11
+ ```
12
+
13
+ ## Properties
14
+ | Property | Type | Default | Description |
15
+ |----------|------|---------|-------------|
16
+ | value | string | `''` | Selected value (single) or comma-separated (multi) |
17
+ | values | string[] | `[]` | Selected values (multi-select) |
18
+ | label | string | `''` | Label text |
19
+ | placeholder | string | `''` | Placeholder text |
20
+ | name | string | `''` | Form submission name |
21
+ | required | boolean | `false` | Whether selection is required |
22
+ | multi | boolean | `false` | Enable multi-select with inline chips |
23
+ | size | `'xs'\|'sm'\|'md'\|'lg'` | `'md'` | Input height |
24
+ | maxHeight | string | `'300px'` | Max dropdown height |
25
+ | debounceMs | number | `200` | Search debounce in ms |
26
+ | similarityThreshold | number | `0.3` | Minimum fuzzy match score (0-1) |
27
+ | error | boolean | `false` | Error state |
28
+ | validationMessage | string | `''` | Validation message |
29
+ | description | string | `''` | Screen reader description |
30
+
31
+ ## Events
32
+ | Event | Detail | Description |
33
+ |-------|--------|-------------|
34
+ | change | `{ value: string \| string[], values?: string[] }` | When selection changes |
35
+
36
+ ## Examples
37
+ ```html
38
+ <!-- Multi-select with chips -->
39
+ <schmancy-autocomplete label="Skills" multi placeholder="Type to search...">
40
+ <schmancy-option value="ts" label="TypeScript"></schmancy-option>
41
+ <schmancy-option value="lit" label="Lit"></schmancy-option>
42
+ <schmancy-option value="rxjs" label="RxJS"></schmancy-option>
43
+ </schmancy-autocomplete>
44
+
45
+ <!-- Single select, auto-selects best match on blur -->
46
+ <schmancy-autocomplete label="City" placeholder="Search city..."
47
+ @change=${(e) => console.log(e.detail.value)}>
48
+ <schmancy-option value="berlin" label="Berlin"></schmancy-option>
49
+ <schmancy-option value="munich" label="Munich"></schmancy-option>
50
+ </schmancy-autocomplete>
51
+ ```
52
+
53
+ Children must be `<schmancy-option>` elements. In multi mode, selected items appear as removable chips.
@@ -0,0 +1,47 @@
1
+ # schmancy-avatar
2
+
3
+ > Avatar component displaying initials, image, or icon with color themes, shapes, and status indicators.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-avatar initials="JD" color="primary"></schmancy-avatar>
8
+ ```
9
+
10
+ ## Properties
11
+ | Property | Type | Default | Description |
12
+ |----------|------|---------|-------------|
13
+ | initials | string | `''` | Text initials (max 2 characters) |
14
+ | src | string | `''` | Image URL |
15
+ | icon | string | `''` | Material icon name |
16
+ | size | `'xxs'\|'xs'\|'sm'\|'md'\|'lg'\|'xl'` | `'md'` | Avatar size (20-64px) |
17
+ | color | `'primary'\|'secondary'\|'tertiary'\|'success'\|'error'\|'neutral'` | `'primary'` | Color theme |
18
+ | shape | `'circle'\|'square'` | `'circle'` | Avatar shape |
19
+ | bordered | boolean | `false` | Show border ring |
20
+ | status | `'online'\|'offline'\|'busy'\|'away'\|'none'` | `'none'` | Status indicator dot |
21
+
22
+ ## Size Reference
23
+ | Token | Size | Description |
24
+ |-------|------|-------------|
25
+ | xxs | 20px | Ultra-compact |
26
+ | xs | 24px | Compact |
27
+ | sm | 32px | Small |
28
+ | md | 40px | Default |
29
+ | lg | 48px | Large |
30
+ | xl | 64px | Extra large |
31
+
32
+ ## Examples
33
+ ```html
34
+ <!-- Image avatar with status -->
35
+ <schmancy-avatar src="/photos/alice.jpg" size="lg" status="online"></schmancy-avatar>
36
+
37
+ <!-- Icon avatar -->
38
+ <schmancy-avatar icon="group" color="secondary" shape="square"></schmancy-avatar>
39
+
40
+ <!-- Bordered initials -->
41
+ <schmancy-avatar initials="AB" color="tertiary" bordered></schmancy-avatar>
42
+
43
+ <!-- Default (person icon) -->
44
+ <schmancy-avatar size="sm" color="neutral"></schmancy-avatar>
45
+ ```
46
+
47
+ Priority: `src` (image) > `initials` > `icon` > default person icon.
@@ -0,0 +1,41 @@
1
+ # schmancy-badge
2
+
3
+ > Versatile badge for status indicators, labels, and counts with color variants and shapes.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-badge color="success">Active</schmancy-badge>
8
+ ```
9
+
10
+ ## Properties
11
+ | Property | Type | Default | Description |
12
+ |----------|------|---------|-------------|
13
+ | color | `'primary'\|'secondary'\|'tertiary'\|'success'\|'warning'\|'error'\|'neutral'\|'surface'` | `'primary'` | Color variant |
14
+ | size | `'xs'\|'sm'\|'md'\|'lg'` | `'md'` | Badge size |
15
+ | shape | `'rounded'\|'pill'\|'square'` | `'pill'` | Badge shape |
16
+ | outlined | boolean | `false` | Outlined style (transparent background) |
17
+ | icon | string | `''` | Material icon name |
18
+ | pulse | boolean | `false` | Pulse animation for attention |
19
+
20
+ ## Slots
21
+ | Slot | Description |
22
+ |------|-------------|
23
+ | default | Badge text content |
24
+ | icon | Custom icon content |
25
+
26
+ ## Examples
27
+ ```html
28
+ <!-- Outlined badge -->
29
+ <schmancy-badge color="error" outlined>Overdue</schmancy-badge>
30
+
31
+ <!-- With icon -->
32
+ <schmancy-badge color="success" icon="check_circle">Verified</schmancy-badge>
33
+
34
+ <!-- Pulsing notification badge -->
35
+ <schmancy-badge color="error" size="sm" pulse>3</schmancy-badge>
36
+
37
+ <!-- Square shape -->
38
+ <schmancy-badge color="neutral" shape="square">Draft</schmancy-badge>
39
+ ```
40
+
41
+ **Tag aliases:** `<sch-badge>` (backward compatible)
@@ -0,0 +1,47 @@
1
+ # schmancy-boat
2
+
3
+ > Draggable floating FAB that expands into a panel. Great for persistent assistant/chat panels.
4
+
5
+ > **Note:** `schmancy-window` is the evolved successor with more capabilities (resize, maximize, multi-window registry). Prefer `schmancy-window` for new code unless you want the simpler FAB-to-panel model.
6
+
7
+ ## Usage
8
+ ```html
9
+ <schmancy-boat id="assistant" icon="smart_toy" label="Assistant">
10
+ <div slot="header">Assistant</div>
11
+ <div class="p-4">Panel body content</div>
12
+ </schmancy-boat>
13
+ ```
14
+
15
+ ## Properties
16
+ | Property | Type | Default | Description |
17
+ |----------|------|---------|-------------|
18
+ | `id` | string | `'default'` | Unique identifier (persists drag position in localStorage) |
19
+ | `icon` | string | — | Material icon for the FAB state |
20
+ | `label` | string | — | Label text in FAB state |
21
+ | `open` | boolean | `false` | Panel open/closed (reflected) |
22
+ | `corner` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | `'bottom-right'` | Anchor corner |
23
+ | `expandedWidth` | string | responsive | e.g. `'320px'` |
24
+ | `lowered` | boolean | `false` | Lower shadow in FAB state |
25
+
26
+ ## Getter / Setter
27
+ ```typescript
28
+ boat.state = 'expanded' | 'collapsed' // equivalent to open = true/false
29
+ boat.state // current state
30
+ boat.expand() / boat.close()
31
+ ```
32
+
33
+ ## Behavior
34
+ - Drag to reposition. Releases snap to the nearest corner.
35
+ - Open/close uses clip-path + `SPRING_SMOOTH` for elegant reveal.
36
+ - Position persists in `localStorage` under `schmancy-boat-{id}`.
37
+ - Respects `prefers-reduced-motion`.
38
+
39
+ ## Example
40
+ ```html
41
+ <schmancy-boat id="chat" icon="chat" label="Chat" corner="bottom-right">
42
+ <span slot="header">Messages</span>
43
+ <schmancy-list class="p-2">
44
+ <!-- messages -->
45
+ </schmancy-list>
46
+ </schmancy-boat>
47
+ ```
@@ -0,0 +1,36 @@
1
+ # schmancy-busy
2
+
3
+ > Full-overlay busy indicator with backdrop blur. Place inside a `position: relative` container.
4
+
5
+ ## Usage
6
+ ```html
7
+ <div class="relative">
8
+ <p>Content underneath</p>
9
+ ${when(loading, () => html`<schmancy-busy></schmancy-busy>`)}
10
+ </div>
11
+ ```
12
+
13
+ ## Properties
14
+ No configurable properties. Renders a centered spinner overlay.
15
+
16
+ ## Slots
17
+ | Slot | Description |
18
+ |------|-------------|
19
+ | default | Custom loading content (defaults to `<schmancy-spinner>`) |
20
+
21
+ ## Examples
22
+ ```html
23
+ <!-- Default spinner -->
24
+ <div class="relative h-64">
25
+ <schmancy-busy></schmancy-busy>
26
+ </div>
27
+
28
+ <!-- Custom loading content -->
29
+ <div class="relative">
30
+ <schmancy-busy>
31
+ <schmancy-typography type="body" token="lg">Loading data...</schmancy-typography>
32
+ </schmancy-busy>
33
+ </div>
34
+ ```
35
+
36
+ The component uses `position: absolute; inset: 0` with `z-index: 50` and a subtle backdrop blur.
@@ -0,0 +1,59 @@
1
+ # schmancy-button / schmancy-icon-button
2
+
3
+ > Buttons with embedded `magnetic` directive, glow hover shadow, and spring press animation.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-button variant="filled" color="primary">Save</schmancy-button>
8
+ <schmancy-icon-button icon="add"></schmancy-icon-button>
9
+ ```
10
+
11
+ ## Properties (schmancy-button)
12
+ | Property | Type | Default | Description |
13
+ |----------|------|---------|-------------|
14
+ | `variant` | `'elevated' \| 'filled' \| 'filled tonal' \| 'tonal' \| 'outlined' \| 'text'` | `'text'` | Visual style |
15
+ | `color` | `'primary' \| 'secondary' \| 'success' \| 'error' \| 'warning' \| 'info' \| 'neutral'` | Auto | Color. Defaults to `primary` (or `secondary` for tonal) |
16
+ | `size` | `'xxs' \| 'xs' \| 'sm' \| 'md' \| 'lg'` | `'md'` | Height: 24/32/40/48/56px |
17
+ | `width` | `'full' \| 'auto'` | `'auto'` | Full-width or auto |
18
+ | `type` | `'button' \| 'reset' \| 'submit'` | `'button'` | HTML button type |
19
+ | `href` | `string` | `undefined` | Renders as `<a>` when set |
20
+ | `disabled` | `boolean` | `false` | Disabled state (38% opacity) |
21
+
22
+ ## Properties (schmancy-icon-button)
23
+ | Property | Type | Default | Description |
24
+ |----------|------|---------|-------------|
25
+ | `icon` | `string` | `undefined` | Material icon name (preferred over slot content) |
26
+ | `size` | `'xxs' \| 'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Icon size: 12/16/20/24/24/40px |
27
+ | `variant` | Same as button | `'text'` | Visual style |
28
+ | `text` | `boolean` | `false` | Render slot as text label instead of icon |
29
+ | `disabled` | `boolean` | `false` | Disabled state |
30
+
31
+ ## Slots
32
+ | Slot | Description |
33
+ |------|-------------|
34
+ | (default) | Button label text |
35
+ | `prefix` | Leading content (images auto-sized) |
36
+ | `suffix` | Trailing content (images auto-sized) |
37
+
38
+ ## Physics
39
+ - **magnetic** directive embedded (strength: 3, radius: 60px for button, 50px for icon-button)
40
+ - Hover: luminous glow shadow using primary color
41
+ - Active: spring press `scale(0.97)` / `scale(0.92)` for icon-button
42
+
43
+ ## Examples
44
+ ```html
45
+ <!-- Filled primary -->
46
+ <schmancy-button variant="filled" color="primary">Submit</schmancy-button>
47
+
48
+ <!-- Outlined error with icon prefix -->
49
+ <schmancy-button variant="outlined" color="error" size="sm">
50
+ <schmancy-icon slot="prefix">delete</schmancy-icon>
51
+ Delete
52
+ </schmancy-button>
53
+
54
+ <!-- Icon button with explicit icon prop -->
55
+ <schmancy-icon-button icon="settings" variant="tonal" size="sm"></schmancy-icon-button>
56
+
57
+ <!-- Full-width submit -->
58
+ <schmancy-button variant="filled" width="full" type="submit">Save Changes</schmancy-button>
59
+ ```
@@ -0,0 +1,53 @@
1
+ # schmancy-card
2
+
3
+ > Card container with luminous hover glow and spring press animation. Interactive cards get embedded `cursorGlow` directive.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-card type="elevated" interactive>
8
+ <div class="p-4">Card content</div>
9
+ </schmancy-card>
10
+ ```
11
+
12
+ ## Properties
13
+ | Property | Type | Default | Description |
14
+ |----------|------|---------|-------------|
15
+ | `type` | `'elevated' \| 'filled' \| 'outlined'` | `'elevated'` | Visual style |
16
+ | `interactive` | `boolean` | `false` | Enables click, cursorGlow, keyboard nav, ripple |
17
+ | `disabled` | `boolean` | `false` | Disables interaction |
18
+ | `dragged` | `boolean` | `false` | Elevated drag state with extra glow |
19
+ | `href` | `string` | `undefined` | URL navigation on click |
20
+ | `target` | `string` | `undefined` | Link target (e.g. `_blank`) |
21
+ | `role` | `string` | `'article'` | ARIA role (auto-switches to `button`/`link` when interactive) |
22
+
23
+ ## Events
24
+ | Event | Detail | Description |
25
+ |-------|--------|-------------|
26
+ | `schmancy-click` | `{ value: type }` | Fired on interactive card click |
27
+
28
+ ## Physics
29
+ - **cursorGlow** directive on interactive cards (radius: 200, intensity: 0.1)
30
+ - Hover: luminous glow + lift (`translateY(-2px)` for elevated, `-1px` for others)
31
+ - Active: spring compress `scale(0.98)` with 100ms transition
32
+ - Dragged: enhanced glow + `translateY(-4px)`
33
+
34
+ ## Examples
35
+ ```html
36
+ <!-- Elevated clickable card -->
37
+ <schmancy-card type="elevated" interactive>
38
+ <div class="p-4">
39
+ <h3 class="text-surface-on font-medium">Title</h3>
40
+ <p class="text-surface-on-variant">Description</p>
41
+ </div>
42
+ </schmancy-card>
43
+
44
+ <!-- Outlined static card -->
45
+ <schmancy-card type="outlined">
46
+ <div class="p-4">Static content</div>
47
+ </schmancy-card>
48
+
49
+ <!-- Link card -->
50
+ <schmancy-card type="filled" interactive href="/details" target="_blank">
51
+ <div class="p-4">Opens in new tab</div>
52
+ </schmancy-card>
53
+ ```
@@ -0,0 +1,93 @@
1
+ # Schmancy Charts
2
+
3
+ > Canvas-rendered area chart and horizontal pill chart. Theme-aware, lazy-animated, with auto peak highlighting.
4
+
5
+ ## schmancy-area-chart
6
+
7
+ > Smooth Catmull-Rom spline area chart with peak markers and hover tooltips.
8
+
9
+ ```html
10
+ <schmancy-area-chart
11
+ .data=${[
12
+ { label: '9 AM', value: 12.4 },
13
+ { label: '10 AM', value: 18.9 },
14
+ { label: '11 AM', value: 42.1, metadata: { users: 320 } },
15
+ { label: '12 PM', value: 56.7 },
16
+ ]}
17
+ value-prefix="EUR "
18
+ value-decimals="2"
19
+ peak-count="2"
20
+ height="240"
21
+ ></schmancy-area-chart>
22
+ ```
23
+
24
+ ### Properties
25
+ | Property | Type | Default | Description |
26
+ |----------|------|---------|-------------|
27
+ | `data` | `ChartDataPoint[]` | `[]` | `{ label, value, metadata? }[]` |
28
+ | `height` | number | `200` | Chart height in px |
29
+ | `showGrid` | boolean | `true` | Background grid lines |
30
+ | `showLabels` | boolean | `true` | X-axis labels |
31
+ | `showTooltip` | boolean | `true` | Hover tooltip |
32
+ | `peakCount` | number | `3` | Top-N points highlighted larger |
33
+ | `animationDuration` | number | `800` | Entrance animation ms |
34
+ | `animated` | boolean | `true` | Animate on first visible |
35
+ | `valuePrefix` | string | `''` | Display prefix (e.g. `"EUR "`) |
36
+ | `valueSuffix` | string | `''` | Display suffix (e.g. `"%"`) |
37
+ | `valueDecimals` | number | `2` | Decimal places |
38
+ | `theme` | `Partial<ChartTheme>` | `{}` | Override colors, stroke, radii |
39
+
40
+ ### ChartTheme
41
+ | Key | Default | Description |
42
+ |-----|---------|-------------|
43
+ | `primaryColor` | `--schmancy-sys-color-primary` | Line + fill gradient color |
44
+ | `gradientOpacity` | `[0.4, 0.05]` | Top/bottom fill opacity |
45
+ | `strokeWidth` | `2` | Line thickness |
46
+ | `pointRadius` | `4` | Normal point radius |
47
+ | `peakRadius` | `6` | Peak point radius |
48
+
49
+ ## schmancy-pills
50
+
51
+ > Horizontal bar chart with optional stacked segments, medal ranks, and peak/low styling.
52
+
53
+ ```html
54
+ <schmancy-pills
55
+ .data=${[
56
+ { label: 'Mon', value: 1240, rank: 1 },
57
+ { label: 'Tue', value: 980 },
58
+ { label: 'Wed', value: 1830, rank: 2, segments: [
59
+ { label: 'Pizza', value: 1200 },
60
+ { label: 'Drinks', value: 630 }
61
+ ]},
62
+ ]}
63
+ ></schmancy-pills>
64
+ ```
65
+
66
+ ### Properties
67
+ | Property | Type | Default | Description |
68
+ |----------|------|---------|-------------|
69
+ | `data` | `PillDataPoint[]` | `[]` | Rows with optional stacked `segments` |
70
+ | `valuePrefix` / `valueSuffix` / `valueDecimals` | — | — | Value formatting (same as area chart) |
71
+ | `showMedals` | boolean | `true` | Show 🥇🥈🥉 for rank 1/2/3 |
72
+
73
+ ### PillDataPoint
74
+ ```typescript
75
+ {
76
+ label: string
77
+ value: number
78
+ segments?: { label, value, color }[] // stacked
79
+ isPeak?: boolean // highlighted
80
+ isLow?: boolean // muted
81
+ rank?: 1 | 2 | 3 // medal
82
+ metadata?: Record<string, unknown>
83
+ }
84
+ ```
85
+
86
+ ## Behavior
87
+ - Both charts use an IntersectionObserver to defer animation until visible.
88
+ - Responsive — resize triggers a re-render.
89
+ - Dark/light aware via theme CSS variables.
90
+
91
+ ## When to Use
92
+ - Area chart: time-series or comparative trends.
93
+ - Pills: ranked categorical data (leaderboards, top days, distribution).
@@ -0,0 +1,36 @@
1
+ # schmancy-checkbox
2
+
3
+ > Checkbox with label support and form association.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-checkbox label="I agree to terms" @change=${(e) => handle(e.detail.value)}>
8
+ </schmancy-checkbox>
9
+ ```
10
+
11
+ ## Properties
12
+ | Property | Type | Default | Description |
13
+ |----------|------|---------|-------------|
14
+ | value | boolean | `false` | Whether the checkbox is checked |
15
+ | checked | boolean | `false` | Alias for value |
16
+ | label | string | `undefined` | Label text (alternative to slot) |
17
+ | name | string | auto | Form submission name |
18
+ | disabled | boolean | `false` | Whether the checkbox is disabled |
19
+ | required | boolean | `false` | Whether the checkbox is required |
20
+ | size | `'xxs'\|'xs'\|'sm'\|'md'\|'lg'` | `'md'` | Checkbox size |
21
+
22
+ ## Events
23
+ | Event | Detail | Description |
24
+ |-------|--------|-------------|
25
+ | change | `{ value: boolean }` | When checked state changes |
26
+
27
+ ## Examples
28
+ ```html
29
+ <!-- With label property -->
30
+ <schmancy-checkbox label="Enable notifications" .value=${true}></schmancy-checkbox>
31
+
32
+ <!-- With slotted label -->
33
+ <schmancy-checkbox name="terms" required>
34
+ Accept <a href="/terms">terms and conditions</a>
35
+ </schmancy-checkbox>
36
+ ```