@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,298 @@
1
+ # Schmancy Directives — AI Reference
2
+
3
+ ## What Are Directives?
4
+
5
+ Lit directives that snap onto any element to add behavior. No components to wrap, no CSS to write — just `${directiveName()}` in your template.
6
+
7
+ ```typescript
8
+ import { magnetic, cursorGlow, gravity, reveal } from '@mhmo91/schmancy/directives'
9
+ ```
10
+
11
+ ---
12
+
13
+ ## Physics & Interaction (6 directives)
14
+
15
+ ### `magnetic` — Elements lean toward the cursor
16
+ ```html
17
+ <schmancy-button ${magnetic()}>Submit</schmancy-button>
18
+ <schmancy-icon-button ${magnetic({ strength: 6, radius: 120 })}>add</schmancy-icon-button>
19
+ ```
20
+ | Option | Default | Description |
21
+ |--------|---------|-------------|
22
+ | `strength` | 4 | Max displacement in px |
23
+ | `radius` | 100 | Activation radius in px |
24
+
25
+ Embedded in: `schmancy-button`, `schmancy-icon-button`, `schmancy-filter-chip`, `schmancy-details` (summary)
26
+
27
+ ### `cursorGlow` — Light follows cursor across a surface
28
+ ```html
29
+ <schmancy-surface type="glass" ${cursorGlow()}>content</schmancy-surface>
30
+ <div ${cursorGlow({ radius: 300, intensity: 0.2, color: 'var(--schmancy-sys-color-secondary-default)' })}>
31
+ hero panel
32
+ </div>
33
+ ```
34
+ | Option | Default | Description |
35
+ |--------|---------|-------------|
36
+ | `radius` | 200 | Glow radius in px |
37
+ | `color` | primary | CSS color value |
38
+ | `intensity` | 0.12 | Opacity 0-1 |
39
+
40
+ Embedded in: `schmancy-card` (interactive), `schmancy-dialog`
41
+
42
+ ### `livingBorder` — Animated gradient light traces element edges
43
+ ```html
44
+ <schmancy-card ${livingBorder()}>content</schmancy-card>
45
+ <div ${livingBorder({ duration: 4000, onHover: true, color: 'var(--schmancy-sys-color-secondary-default)' })}>
46
+ hero panel
47
+ </div>
48
+ ```
49
+ | Option | Default | Description |
50
+ |--------|---------|-------------|
51
+ | `duration` | 3000 | Rotation speed in ms |
52
+ | `width` | 1 | Border width in px |
53
+ | `color` | primary | Glow color |
54
+ | `spread` | 6 | Glow spread in px |
55
+ | `onHover` | false | Only animate on hover |
56
+
57
+ ### `gravity` — Elements fall into place with mass-based bounce
58
+ ```html
59
+ <!-- Single element drops in -->
60
+ <schmancy-card ${gravity()}>content</schmancy-card>
61
+
62
+ <!-- Staggered list — each item falls 50ms after the previous -->
63
+ ${repeat(items, item => item.id, (item, i) => html`
64
+ <div ${gravity({ stagger: 50 * i, mass: 0.8 })}>...</div>
65
+ `)}
66
+ ```
67
+ | Option | Default | Description |
68
+ |--------|---------|-------------|
69
+ | `mass` | 1.0 | 0.5 (bouncy) to 2.0 (heavy) |
70
+ | `distance` | 30 | Fall distance in px |
71
+ | `delay` | 0 | Delay before falling in ms |
72
+ | `stagger` | 0 | Per-item stagger in ms |
73
+
74
+ Only animates once. Re-triggers on reconnect (route change, cache toggle).
75
+
76
+ ### `depthOfField` — Progressive blur on background content
77
+ ```html
78
+ <main ${depthOfField({ active: this.dialogOpen, maxBlur: 8 })}>
79
+ page content that blurs when dialog opens
80
+ </main>
81
+ ```
82
+ | Option | Default | Description |
83
+ |--------|---------|-------------|
84
+ | `active` | required | Boolean — blur when true |
85
+ | `maxBlur` | 8 | Max blur radius in px |
86
+ | `duration` | 400 | Transition duration in ms |
87
+
88
+ ### `longPress` — Press-and-hold gesture detection
89
+ ```html
90
+ <div ${longPress(() => this.showContextMenu())}>Hold me</div>
91
+ <div ${longPress(() => this.showMenu(), { duration: 800, movementThreshold: 15 })}>
92
+ Custom timing
93
+ </div>
94
+ ```
95
+ | Option | Default | Description |
96
+ |--------|---------|-------------|
97
+ | `duration` | 500 | Time before trigger in ms |
98
+ | `movementThreshold` | 10 | Max movement in px before cancel |
99
+
100
+ ---
101
+
102
+ ## Visual Effects (3 directives)
103
+
104
+ ### `nebula` — Surreal dimensional rift loading effect
105
+ ```html
106
+ <div ${nebula()}>Content with cosmic loading effect</div>
107
+ <div ${nebula({ active: this.loading, temperature: -0.5, speed: 1.5 })}>
108
+ Cool-toned, faster nebula
109
+ </div>
110
+ ```
111
+ | Option | Default | Description |
112
+ |--------|---------|-------------|
113
+ | `active` | true | Show/hide the effect |
114
+ | `intensity` | 1 | Brightness 0-1 |
115
+ | `speed` | 1 | Animation speed multiplier |
116
+ | `temperature` | 0 | -1 (cool/blue) to 1 (warm/pink) |
117
+ | `particleCount` | 30 | Quantum particle count |
118
+ | `autoHideDuration` | 3000 | Auto-dim after ms (0 = never) |
119
+ | `background` | true | Render behind content |
120
+
121
+ ### `liquid` — Apple Liquid Glass effect (pure CSS)
122
+ ```html
123
+ <div ${liquid()}>Glass panel</div>
124
+ <div ${liquid({ intensity: 'strong', active: this.isActive })}>
125
+ Thick glass
126
+ </div>
127
+ ```
128
+ | Option | Default | Description |
129
+ |--------|---------|-------------|
130
+ | `active` | true | Toggle effect on/off |
131
+ | `intensity` | 'medium' | 'light', 'medium', or 'strong' |
132
+
133
+ Zero DOM mutation — applies only inline styles.
134
+
135
+ ### `ripple` — Material-style ink ripple on click
136
+ ```html
137
+ <div ${ripple()}>Click me</div>
138
+ ```
139
+ No options. Ripple appears at click position, fades out in 600ms.
140
+
141
+ ---
142
+
143
+ ## Text Animation (3 directives)
144
+
145
+ ### `animateText` — 5 text animation modes
146
+ ```html
147
+ <span ${animateText({ animation: 'blur-reveal', stagger: 60 })}>Hello world</span>
148
+ <span ${animateText({ animation: 'cyber-glitch', preset: 'snappy' })}>GLITCH</span>
149
+ <span ${animateText({ animation: 'fade-up' })}>Fade up</span>
150
+ ```
151
+ | Animation | Description |
152
+ |-----------|-------------|
153
+ | `typewriter` | Characters appear one by one |
154
+ | `fade-up` | Whole element fades up |
155
+ | `word-reveal` | Words appear one by one from below |
156
+ | `blur-reveal` | Words deblur + scale in |
157
+ | `cyber-glitch` | Characters pop in with overshoot |
158
+
159
+ | Option | Default | Description |
160
+ |--------|---------|-------------|
161
+ | `animation` | required | Animation type |
162
+ | `preset` | 'snappy' | Spring preset: smooth, snappy, bouncy, gentle |
163
+ | `stagger` | 50 | Ms between characters/words |
164
+ | `text` | element content | Explicit text (for Lit bindings) |
165
+ | `restart` | false | Re-animate on viewport re-entry |
166
+
167
+ Waits for element visibility before starting.
168
+
169
+ ### `cycleText` — Cycle through child elements with transitions
170
+ ```html
171
+ <span ${cycleText({ transition: 'slide', hold: 1500 })}>
172
+ <span>First</span>
173
+ <span>Second</span>
174
+ <span>Third</span>
175
+ </span>
176
+
177
+ <!-- Add mode: accumulates items -->
178
+ <span ${cycleText({ mode: 'add', transition: 'typewriter' })}>
179
+ <span>guests</span>
180
+ <span>kitchen</span>
181
+ <span>team</span>
182
+ </span>
183
+ <!-- Shows: "guests" → "guests, kitchen" → "guests, kitchen, team" → clears → repeat -->
184
+ ```
185
+ | Option | Default | Description |
186
+ |--------|---------|-------------|
187
+ | `transition` | 'fade' | 'fade', 'slide', or 'typewriter' |
188
+ | `hold` | 2000 | Display time per item in ms |
189
+ | `mode` | 'replace' | 'replace' or 'add' (accumulate) |
190
+ | `separator` | ', ' | Separator in add mode |
191
+
192
+ ### `typewriter` — Phrase cycling with typing/deleting + sound
193
+ ```html
194
+ <div ${typewriter(['Trustless', 'Permissionless', 'Transparent'])}>
195
+ <span class="typed"></span>
196
+ </div>
197
+ <div ${typewriter(['Fast', 'Typing'], { typeSpeed: 50, sound: true })}>
198
+ <span class="typed"></span>
199
+ </div>
200
+ ```
201
+ | Option | Default | Description |
202
+ |--------|---------|-------------|
203
+ | `typeSpeed` | 50 | Ms per character typed |
204
+ | `deleteSpeed` | 30 | Ms per character deleted |
205
+ | `pauseDuration` | 1500 | Pause after typing in ms |
206
+ | `loop` | true | Loop through phrases |
207
+ | `sound` | true | Web Audio typing sounds |
208
+ | `cursor` | false | Show blinking cursor |
209
+
210
+ ---
211
+
212
+ ## Show/Hide (2 directives)
213
+
214
+ ### `reveal` — Spring-physics show/hide with zero layout shift
215
+ ```html
216
+ <div ${reveal(this.isVisible)}>Content</div>
217
+ <div ${reveal(this.isOpen, { preset: 'bouncy', maxHeight: '200px' })}>
218
+ Bouncy reveal
219
+ </div>
220
+ ```
221
+ | Option | Default | Description |
222
+ |--------|---------|-------------|
223
+ | `preset` | 'smooth' | smooth, snappy, bouncy, gentle |
224
+ | `maxHeight` | '10rem' | Max height when revealed |
225
+
226
+ Element stays in DOM (no layout shift). Uses Blackbird spring physics.
227
+
228
+ ### `intersect` — Simplified IntersectionObserver
229
+ ```html
230
+ <!-- Fire once when visible (lazy load) -->
231
+ <img ${intersect(() => this.loadImage(), { once: true })} />
232
+
233
+ <!-- Enter/exit callbacks -->
234
+ <video ${intersect({ onEnter: () => this.play(), onExit: () => this.pause() })}>
235
+ ```
236
+ | Option | Default | Description |
237
+ |--------|---------|-------------|
238
+ | `once` | false | Fire only once then disconnect |
239
+ | `threshold` | 0 | Visibility threshold |
240
+ | `rootMargin` | '0px' | Observer root margin |
241
+ | `delay` | 0 | Delay before callback in ms |
242
+
243
+ ---
244
+
245
+ ## Interaction (3 directives)
246
+
247
+ ### `drag` & `drop` — HTML5 drag and drop with FLIP animations
248
+ ```html
249
+ ${repeat(items, item => item.id, item => html`
250
+ <div ${drag(item.id)} ${drop(item.id)} @drop=${this.handleReorder}>
251
+ ${item.name}
252
+ </div>
253
+ `)}
254
+ ```
255
+
256
+ ### `color` — Dynamic background/text color
257
+ ```html
258
+ <div ${color({ bgColor: '#ff0000', color: 'white' })}>Colored</div>
259
+ ```
260
+
261
+ ---
262
+
263
+ ## Reactive Utilities
264
+
265
+ ### `reducedMotion$` — Reactive reduced-motion preference
266
+ ```typescript
267
+ import { reducedMotion$ } from '@mhmo91/schmancy/directives'
268
+
269
+ if (reducedMotion$.value) return // skip animation
270
+
271
+ // Or subscribe reactively
272
+ reducedMotion$.subscribe(reduced => {
273
+ // User toggled reduced motion mid-session
274
+ })
275
+ ```
276
+
277
+ ### `fromResizeObserver` — RxJS wrapper for ResizeObserver
278
+ ```typescript
279
+ import { fromResizeObserver } from '@mhmo91/schmancy/directives'
280
+
281
+ fromResizeObserver(element).pipe(
282
+ takeUntil(this.disconnecting)
283
+ ).subscribe(entries => {
284
+ const { width, height } = entries[0].contentRect
285
+ })
286
+ ```
287
+
288
+ ---
289
+
290
+ ## Performance Notes
291
+
292
+ - All physics directives respect `prefers-reduced-motion` reactively
293
+ - `magnetic` and `cursorGlow` cache `getBoundingClientRect` on mouseenter (not per-frame)
294
+ - `gravity` only animates once — parent re-renders don't re-trigger
295
+ - `livingBorder` shares a single `<style>` element across all instances
296
+ - `nebula` uses a singleton IntersectionObserver + pauses off-screen animations
297
+ - All directives use `Subject` + `takeUntil` for subscription cleanup
298
+ - All directives implement `reconnected()` for cache/conditional rendering survival
@@ -0,0 +1,67 @@
1
+ # Schmancy Discovery
2
+
3
+ > Event-based component and element discovery across shadow DOM boundaries. No DOM traversal — just broadcast and race.
4
+
5
+ ## Why
6
+ Web components hide inside shadow DOM. Traversing with `querySelector` + `shadowRoot` everywhere is fragile. Discovery broadcasts a "where are you?" event; components respond with themselves.
7
+
8
+ ## API
9
+ ```typescript
10
+ import {
11
+ discover,
12
+ discoverComponent,
13
+ discoverAnyComponent,
14
+ discoverElement,
15
+ discoverAllElements,
16
+ } from '@mhmo91/schmancy'
17
+ ```
18
+
19
+ ### `discover(query, timeout?)`
20
+ Smart auto-detect. Routes to `discoverElement` for CSS selectors (`#`, `.`, `[`) and `discoverComponent` for tag names.
21
+ ```typescript
22
+ discover<SchmancyNavigationRail>('schmancy-navigation-rail').subscribe(el => el?.select('home'))
23
+ discover('#hero-card').subscribe(el => el?.focus())
24
+ ```
25
+
26
+ ### `discoverComponent(tag, timeout = 100)`
27
+ Broadcasts `{tag}-where-are-you`; first responder wins.
28
+ ```typescript
29
+ discoverComponent<SchmancyDialog>('schmancy-dialog')
30
+ .subscribe(dialog => dialog?.open())
31
+ ```
32
+
33
+ ### `discoverAnyComponent(...tags)`
34
+ Race between multiple tags — first to respond wins.
35
+ ```typescript
36
+ discoverAnyComponent('schmancy-navigation-rail', 'schmancy-navigation-bar')
37
+ .subscribe(nav => nav?.select(route))
38
+ ```
39
+
40
+ ### `discoverElement(selector, timeout = 150)`
41
+ Finds any element by CSS selector across shadow DOM. Uses a request ID + universal `schmancy-discover` event. Every `$LitElement` responds if it finds a match in its shadow root.
42
+ ```typescript
43
+ discoverElement('[data-section="pricing"]').subscribe(section => section?.scrollIntoView())
44
+ ```
45
+
46
+ ### `discoverAllElements(selector, timeout = 150)`
47
+ Collects **all** matching responses within the timeout window.
48
+ ```typescript
49
+ discoverAllElements('.flagged').subscribe(all => console.log(all.length))
50
+ ```
51
+
52
+ ## How the Handshake Works
53
+ 1. Caller creates a unique `requestId` and broadcasts `schmancy-discover` on `window` with `{ selector, requestId }`.
54
+ 2. Every `$LitElement` listens for this event (wired up in the base class).
55
+ 3. Any matching element dispatches `schmancy-discover-response` with `{ requestId, element }`.
56
+ 4. Caller collects responses for the timeout window and emits via RxJS.
57
+
58
+ ## Pattern in Base Class
59
+ Every `$LitElement` inherits auto-response: `discover<T>(tag)` (method on the component) and `{tagName}-where-are-you`/`{tagName}-here-i-am` events. See [mixins.md](./mixins.md).
60
+
61
+ ## When to Use
62
+ - Cross-shadow coordination between unrelated components.
63
+ - Imperatively focusing or driving a far-away UI piece from a handler.
64
+
65
+ ## When NOT to Use
66
+ - Same-tree data flow — use `@provide`/`@consume` (Lit context) or Schmancy [`store`](./store.md).
67
+ - Parent-to-child directly — just use `this.renderRoot.querySelector()`.
@@ -0,0 +1,31 @@
1
+ # schmancy-divider
2
+
3
+ > Horizontal or vertical divider line with grow animation.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-divider></schmancy-divider>
8
+ ```
9
+
10
+ ## Properties
11
+ | Property | Type | Default | Description |
12
+ |----------|------|---------|-------------|
13
+ | vertical | boolean | `false` | Vertical orientation (use inside flex/grid) |
14
+ | outline | `'default'\|'variant'` | `'variant'` | Line color intensity |
15
+ | grow | `'start'\|'end'\|'both'` | `'start'` | Animation origin direction |
16
+
17
+ ## Examples
18
+ ```html
19
+ <!-- Horizontal divider -->
20
+ <schmancy-divider></schmancy-divider>
21
+
22
+ <!-- Vertical divider in a flex container -->
23
+ <div class="flex items-stretch h-16">
24
+ <span>Left</span>
25
+ <schmancy-divider vertical></schmancy-divider>
26
+ <span>Right</span>
27
+ </div>
28
+
29
+ <!-- Grow from center -->
30
+ <schmancy-divider grow="both"></schmancy-divider>
31
+ ```
@@ -0,0 +1,47 @@
1
+ # schmancy-dropdown
2
+
3
+ > Floating dropdown with trigger slot and auto-positioned content portal.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-dropdown>
8
+ <schmancy-button slot="trigger">Open</schmancy-button>
9
+ <schmancy-dropdown-content>
10
+ <p>Dropdown content here</p>
11
+ </schmancy-dropdown-content>
12
+ </schmancy-dropdown>
13
+ ```
14
+
15
+ ## Properties
16
+ | Property | Type | Default | Description |
17
+ |----------|------|---------|-------------|
18
+ | open | boolean | `false` | Whether the dropdown is open |
19
+ | placement | string | `'bottom-start'` | Floating UI placement |
20
+ | distance | number | `8` | Offset distance in pixels |
21
+
22
+ ## Placement Values
23
+ `top`, `top-start`, `top-end`, `right`, `right-start`, `right-end`, `bottom`, `bottom-start`, `bottom-end`, `left`, `left-start`, `left-end`
24
+
25
+ ## Methods
26
+ | Method | Description |
27
+ |--------|-------------|
28
+ | toggle() | Toggle open/close state |
29
+
30
+ ## Slots
31
+ | Slot | Description |
32
+ |------|-------------|
33
+ | trigger | Element that opens the dropdown on click |
34
+ | default | Dropdown content |
35
+
36
+ ## Examples
37
+ ```html
38
+ <!-- Right-aligned dropdown -->
39
+ <schmancy-dropdown placement="bottom-end">
40
+ <schmancy-icon-button slot="trigger">more_vert</schmancy-icon-button>
41
+ <schmancy-dropdown-content>
42
+ <div class="p-4">Custom content</div>
43
+ </schmancy-dropdown-content>
44
+ </schmancy-dropdown>
45
+ ```
46
+
47
+ Content is teleported to a portal for proper z-index stacking. Closes on outside click or Escape key.
@@ -0,0 +1,63 @@
1
+ # schmancy-expand
2
+
3
+ > Expandable/accordion component. Inline mode uses grid-template-rows transitions; portal mode teleports content to a body-level `schmancy-expand-root` with backdrop.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-expand summary="Details">
8
+ <p>Content appears when expanded.</p>
9
+ </schmancy-expand>
10
+ ```
11
+
12
+ ## Properties
13
+ | Property | Type | Default | Description |
14
+ |----------|------|---------|-------------|
15
+ | `summary` | string | `''` | Summary text shown when collapsed |
16
+ | `open` | boolean | `false` | Expansion state (reflected) |
17
+ | `summary-padding` | string | — | CSS padding for the summary row |
18
+ | `content-padding` | string | — | CSS padding for the body |
19
+ | `hide-indicator` | boolean | `false` | Hide the chevron indicator |
20
+ | `indicator-rotate` | number | `90` | Rotation angle (deg) when open |
21
+ | `backdrop` | boolean | `true` | Show semi-transparent backdrop in portal mode |
22
+ | `inline` | boolean | `false` | Inline expansion instead of portal (no backdrop) |
23
+
24
+ ## Slots
25
+ | Slot | Purpose |
26
+ |------|---------|
27
+ | (default) | Expanded content |
28
+ | `summary` | Custom summary markup (overrides `summary` property) |
29
+
30
+ ## Behavior
31
+ - **Portal mode (default)**: on open, content is teleported into a body-anchored `schmancy-expand-root` with a backdrop. Click outside or press `Escape` to close.
32
+ - **Inline mode** (`inline`): uses `grid-template-rows: 0fr → 1fr` transition inside the host — no portal, no backdrop.
33
+ - `SPRING_SNAPPY` physics for indicator rotation.
34
+ - Respects `prefers-reduced-motion`.
35
+ - Broadcast event `SCHMANCY_EXPAND_REQUEST_CLOSE` on `window` closes whichever instance is currently open.
36
+
37
+ ## Example — inline accordion
38
+ ```html
39
+ ${repeat(this.faqs, faq => faq.id, faq => html`
40
+ <schmancy-expand inline .summary=${faq.question}>
41
+ <p>${faq.answer}</p>
42
+ </schmancy-expand>
43
+ `)}
44
+ ```
45
+
46
+ ## Example — portal with custom summary slot
47
+ ```html
48
+ <schmancy-expand>
49
+ <div slot="summary" class="flex items-center gap-2">
50
+ <schmancy-icon>info</schmancy-icon>
51
+ <schmancy-typography type="title">Advanced options</schmancy-typography>
52
+ </div>
53
+ <div class="p-4">
54
+ <!-- settings form -->
55
+ </div>
56
+ </schmancy-expand>
57
+ ```
58
+
59
+ ## Programmatic Close
60
+ ```typescript
61
+ import { SCHMANCY_EXPAND_REQUEST_CLOSE } from '@mhmo91/schmancy'
62
+ window.dispatchEvent(new Event(SCHMANCY_EXPAND_REQUEST_CLOSE))
63
+ ```
@@ -0,0 +1,59 @@
1
+ # Schmancy Extra
2
+
3
+ > Data-driven dropdowns for common localization fields. Country and timezone pickers, form-associated and autocomplete-backed.
4
+
5
+ ## schmancy-select-countries
6
+ Fully autocomplete-searchable country dropdown. Form-associated (participates in `<form>` submission and validation via `ElementInternals`).
7
+
8
+ ```html
9
+ <schmancy-select-countries
10
+ name="country"
11
+ label="Country"
12
+ placeholder="Select a country"
13
+ required
14
+ value="DE"
15
+ @change=${e => this.country = e.target.value}
16
+ ></schmancy-select-countries>
17
+ ```
18
+
19
+ | Property | Type | Default | Description |
20
+ |----------|------|---------|-------------|
21
+ | `value` | string | — | ISO country code (reflected) |
22
+ | `name` | string | `''` | Form field name |
23
+ | `label` | string | `'Country'` | Visible label |
24
+ | `hint` | string | `'Please select a country'` | Helper text |
25
+ | `placeholder` | string | `'Select a country'` | Placeholder in the input |
26
+ | `required` | boolean | `false` | Validation constraint |
27
+
28
+ ## schmancy-select-timezones
29
+ Same pattern as countries, backed by timezone data.
30
+
31
+ ```html
32
+ <schmancy-select-timezones
33
+ name="timezone"
34
+ label="Timezone"
35
+ value="Europe/Berlin"
36
+ ></schmancy-select-timezones>
37
+ ```
38
+
39
+ Accepts the same set of properties (`value`, `name`, `label`, `hint`, `placeholder`, `required`).
40
+
41
+ ## Raw Data Exports
42
+ If you want the underlying data without the component:
43
+ ```typescript
44
+ import countries from '@mhmo91/schmancy' // default export from countries.data
45
+ import timezones from '@mhmo91/schmancy' // default export from timezones.data
46
+ ```
47
+
48
+ Each countries row: `{ code, name, dialCode?, flag?, ... }`. Timezones: `{ name, offset, label, ... }`.
49
+
50
+ ## Form Integration
51
+ Both use `formAssociated = true` and register with the parent `<form>`. Works with native `form.checkValidity()` and with [`schmancy-form`](./form.md).
52
+
53
+ ```html
54
+ <schmancy-form @submit=${this.onSubmit}>
55
+ <schmancy-select-countries name="country" required></schmancy-select-countries>
56
+ <schmancy-select-timezones name="timezone" required></schmancy-select-timezones>
57
+ <schmancy-button type="submit" variant="filled">Save</schmancy-button>
58
+ </schmancy-form>
59
+ ```
@@ -0,0 +1,14 @@
1
+ # schmancy-float (deprecated alias)
2
+
3
+ > Backward-compatibility alias for [`schmancy-window`](./window.md). Existing code keeps working — new code should use `schmancy-window` directly.
4
+
5
+ ## Migration
6
+ ```html
7
+ <!-- Before -->
8
+ <schmancy-float id="panel">…</schmancy-float>
9
+
10
+ <!-- After -->
11
+ <schmancy-window id="panel">…</schmancy-window>
12
+ ```
13
+
14
+ All properties are identical. See [window.md](./window.md) for full API.
@@ -0,0 +1,49 @@
1
+ # schmancy-form
2
+
3
+ > Form container that collects data from child controls, validates, and emits submit/reset events.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-form @submit=${(e) => handleSubmit(e.detail)}>
8
+ <schmancy-input name="email" label="Email" required></schmancy-input>
9
+ <schmancy-button type="submit">Submit</schmancy-button>
10
+ </schmancy-form>
11
+ ```
12
+
13
+ ## Properties
14
+ | Property | Type | Default | Description |
15
+ |----------|------|---------|-------------|
16
+ | novalidate | boolean | `false` | Skip validation on submit |
17
+
18
+ ## Events
19
+ | Event | Detail | Description |
20
+ |-------|--------|-------------|
21
+ | submit | FormData | Form data from all child controls |
22
+ | reset | - | When the form is reset |
23
+
24
+ ## Methods
25
+ | Method | Returns | Description |
26
+ |--------|---------|-------------|
27
+ | submit() | boolean | Validates and dispatches submit event. Returns false if invalid. |
28
+ | reset() | void | Resets all child controls to default values |
29
+ | getFormData() | FormData | Collects current form data without submitting |
30
+ | reportValidity() | boolean | Checks and shows validation on all controls |
31
+
32
+ ## Examples
33
+ ```html
34
+ <!-- Form with validation -->
35
+ <schmancy-form @submit=${(e) => save(e.detail)} @reset=${() => clearForm()}>
36
+ <schmancy-input name="name" label="Name" required></schmancy-input>
37
+ <schmancy-select name="role" label="Role" required>
38
+ <schmancy-option value="admin" label="Admin"></schmancy-option>
39
+ <schmancy-option value="user" label="User"></schmancy-option>
40
+ </schmancy-select>
41
+ <schmancy-checkbox name="active" label="Active"></schmancy-checkbox>
42
+ <div class="flex gap-2">
43
+ <schmancy-button type="submit">Save</schmancy-button>
44
+ <schmancy-button type="reset">Reset</schmancy-button>
45
+ </div>
46
+ </schmancy-form>
47
+ ```
48
+
49
+ Submit triggers on Enter key in inputs or clicking a submit-type button.
@@ -0,0 +1,44 @@
1
+ # schmancy-icon
2
+
3
+ > Material Symbols icon with configurable fill, weight, grade, variant, and size tokens.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-icon>settings</schmancy-icon>
8
+ ```
9
+
10
+ ## Properties
11
+ | Property | Type | Default | Description |
12
+ |----------|------|---------|-------------|
13
+ | icon | string | `undefined` | Icon name (alternative to slot content, translation-safe) |
14
+ | size | `'xxs'\|'xs'\|'sm'\|'md'\|'lg'\|string` | `'md'` | Icon size (12/16/20/24/32px or custom) |
15
+ | fill | number (0-1) | `0` | Fill level (0=outlined, 1=filled) |
16
+ | weight | number (100-700) | `400` | Stroke thickness |
17
+ | grade | number (-50 to 200) | `0` | Visual weight adjustment |
18
+ | variant | `'outlined'\|'rounded'\|'sharp'` | `'outlined'` | Icon style variant |
19
+
20
+ ## Size Tokens
21
+ | Token | Size | Optical Size | Best For |
22
+ |-------|------|-------------|----------|
23
+ | xxs | 12px | 20 | Ultra-compact UIs |
24
+ | xs | 16px | 20 | 32px buttons |
25
+ | sm | 20px | 20 | 40px buttons |
26
+ | md | 24px | 24 | Default (48px buttons) |
27
+ | lg | 32px | 40 | 56px buttons |
28
+
29
+ ## Examples
30
+ ```html
31
+ <!-- Filled icon -->
32
+ <schmancy-icon .fill=${1}>favorite</schmancy-icon>
33
+
34
+ <!-- Large rounded icon -->
35
+ <schmancy-icon size="lg" variant="rounded">home</schmancy-icon>
36
+
37
+ <!-- Custom size -->
38
+ <schmancy-icon size="48px" .weight=${300}>search</schmancy-icon>
39
+
40
+ <!-- Translation-safe (use icon property instead of slot) -->
41
+ <schmancy-icon icon="delete"></schmancy-icon>
42
+ ```
43
+
44
+ Auto-loads Google Fonts on first use. Translation-protected via `translate="no"` and `notranslate` class.