@mhmo91/schmancy 0.10.23 → 0.10.25

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 (438) hide show
  1. package/dist/agent/{overlay.confirm-body-xfOh5Q28.js → overlay.confirm-body-DozUyDYx.js} +242 -242
  2. package/dist/agent/{overlay.confirm-body-xfOh5Q28.js.map → overlay.confirm-body-DozUyDYx.js.map} +1 -1
  3. package/dist/agent/schmancy.agent.js +5670 -2939
  4. package/dist/agent/schmancy.agent.js.map +1 -1
  5. package/dist/{area-Ddk7P5wD.js → area-1EG1LrkX.js} +1 -1
  6. package/dist/{area-Ddk7P5wD.js.map → area-1EG1LrkX.js.map} +1 -1
  7. package/dist/{area-Cbkt0NX4.cjs → area-DrVE5pXW.cjs} +1 -1
  8. package/dist/{area-Cbkt0NX4.cjs.map → area-DrVE5pXW.cjs.map} +1 -1
  9. package/dist/area.cjs +1 -1
  10. package/dist/area.js +1 -1
  11. package/dist/{autocomplete-CfBFDSc3.cjs → autocomplete-6pdZxEab.cjs} +1 -1
  12. package/dist/{autocomplete-CfBFDSc3.cjs.map → autocomplete-6pdZxEab.cjs.map} +1 -1
  13. package/dist/{autocomplete-Ds3Q2cwR.js → autocomplete-nrIcCilw.js} +2 -2
  14. package/dist/{autocomplete-Ds3Q2cwR.js.map → autocomplete-nrIcCilw.js.map} +1 -1
  15. package/dist/autocomplete.cjs +1 -1
  16. package/dist/autocomplete.js +1 -1
  17. package/dist/avatar.cjs +2 -2
  18. package/dist/avatar.cjs.map +1 -1
  19. package/dist/avatar.js +3 -3
  20. package/dist/badge.cjs +1 -1
  21. package/dist/badge.js +1 -1
  22. package/dist/{boat-BF5P6p_f.js → boat--fLgbDAE.js} +3 -3
  23. package/dist/{boat-BF5P6p_f.js.map → boat--fLgbDAE.js.map} +1 -1
  24. package/dist/{boat-BPN8HLzZ.cjs → boat-BIB-gPqy.cjs} +1 -1
  25. package/dist/{boat-BPN8HLzZ.cjs.map → boat-BIB-gPqy.cjs.map} +1 -1
  26. package/dist/boat.cjs +1 -1
  27. package/dist/boat.js +1 -1
  28. package/dist/breadcrumb.cjs +1 -1
  29. package/dist/breadcrumb.js +1 -1
  30. package/dist/{busy-C7ejPa-Q.cjs → busy-DVCIxBVf.cjs} +1 -1
  31. package/dist/{busy-C7ejPa-Q.cjs.map → busy-DVCIxBVf.cjs.map} +1 -1
  32. package/dist/{busy-BuACDJy6.js → busy-DshZcVZ4.js} +1 -1
  33. package/dist/{busy-BuACDJy6.js.map → busy-DshZcVZ4.js.map} +1 -1
  34. package/dist/busy.cjs +1 -1
  35. package/dist/busy.js +1 -1
  36. package/dist/{button-C1IMGS6M.js → button-D9UJ7I6Z.js} +5 -5
  37. package/dist/{button-C1IMGS6M.js.map → button-D9UJ7I6Z.js.map} +1 -1
  38. package/dist/{button-CWNbPPq-.cjs → button-JrTMzwHY.cjs} +4 -4
  39. package/dist/{button-CWNbPPq-.cjs.map → button-JrTMzwHY.cjs.map} +1 -1
  40. package/dist/button.cjs +1 -1
  41. package/dist/button.js +1 -1
  42. package/dist/{card-CgQwXO8L.js → card-BvCFuX3J.js} +2 -2
  43. package/dist/{card-CgQwXO8L.js.map → card-BvCFuX3J.js.map} +1 -1
  44. package/dist/{card-BIzaLuEg.cjs → card-CTotavhH.cjs} +1 -1
  45. package/dist/{card-BIzaLuEg.cjs.map → card-CTotavhH.cjs.map} +1 -1
  46. package/dist/card.cjs +1 -1
  47. package/dist/card.js +1 -1
  48. package/dist/{checkbox-BAqE3sTx.cjs → checkbox-By4fFmjt.cjs} +1 -1
  49. package/dist/{checkbox-BAqE3sTx.cjs.map → checkbox-By4fFmjt.cjs.map} +1 -1
  50. package/dist/{checkbox-BNdg57Om.js → checkbox-GPsdCUbs.js} +1 -1
  51. package/dist/{checkbox-BNdg57Om.js.map → checkbox-GPsdCUbs.js.map} +1 -1
  52. package/dist/checkbox.cjs +1 -1
  53. package/dist/checkbox.js +1 -1
  54. package/dist/{chips-DnqLaOb1.js → chips-27umqnat.js} +4 -4
  55. package/dist/{chips-DnqLaOb1.js.map → chips-27umqnat.js.map} +1 -1
  56. package/dist/{chips-DS3y4Lbn.cjs → chips-BZf9sGA8.cjs} +1 -1
  57. package/dist/{chips-DS3y4Lbn.cjs.map → chips-BZf9sGA8.cjs.map} +1 -1
  58. package/dist/chips.cjs +1 -1
  59. package/dist/chips.js +2 -2
  60. package/dist/connectivity.cjs +1 -1
  61. package/dist/connectivity.js +1 -1
  62. package/dist/content-drawer.cjs +1 -1
  63. package/dist/content-drawer.js +1 -1
  64. package/dist/{cursor-glow-Cs2XLDB9.js → cursor-glow-Ah7VXSj7.js} +1 -1
  65. package/dist/{cursor-glow-Cs2XLDB9.js.map → cursor-glow-Ah7VXSj7.js.map} +1 -1
  66. package/dist/{cursor-glow-C8LgCxpI.cjs → cursor-glow-Bulq-38P.cjs} +1 -1
  67. package/dist/{cursor-glow-C8LgCxpI.cjs.map → cursor-glow-Bulq-38P.cjs.map} +1 -1
  68. package/dist/{date-range-VA1mi1N7.cjs → date-range-BJnLWCRF.cjs} +1 -1
  69. package/dist/{date-range-VA1mi1N7.cjs.map → date-range-BJnLWCRF.cjs.map} +1 -1
  70. package/dist/{date-range-inline-CAa0_4EI.cjs → date-range-inline-B6uKUliV.cjs} +1 -1
  71. package/dist/{date-range-inline-CAa0_4EI.cjs.map → date-range-inline-B6uKUliV.cjs.map} +1 -1
  72. package/dist/{date-range-inline-PeRt1iIF.js → date-range-inline-BNbbRfIA.js} +1 -1
  73. package/dist/{date-range-inline-PeRt1iIF.js.map → date-range-inline-BNbbRfIA.js.map} +1 -1
  74. package/dist/date-range-inline.cjs +1 -1
  75. package/dist/date-range-inline.js +1 -1
  76. package/dist/{date-range-CAqB-B0M.js → date-range-wDVHcr0u.js} +2 -2
  77. package/dist/{date-range-CAqB-B0M.js.map → date-range-wDVHcr0u.js.map} +1 -1
  78. package/dist/date-range.cjs +1 -1
  79. package/dist/date-range.js +1 -1
  80. package/dist/delay.cjs +1 -1
  81. package/dist/delay.js +2 -2
  82. package/dist/{details-BpFjVclg.js → details-Ckxpwacj.js} +4 -4
  83. package/dist/{details-BpFjVclg.js.map → details-Ckxpwacj.js.map} +1 -1
  84. package/dist/{details-BnXbDpt7.cjs → details-DNrWIes6.cjs} +1 -1
  85. package/dist/{details-BnXbDpt7.cjs.map → details-DNrWIes6.cjs.map} +1 -1
  86. package/dist/details.cjs +1 -1
  87. package/dist/details.js +1 -1
  88. package/dist/directives-BBMqe8x3.js +4082 -0
  89. package/dist/directives-BBMqe8x3.js.map +1 -0
  90. package/dist/directives-F15SJZUR.cjs +348 -0
  91. package/dist/directives-F15SJZUR.cjs.map +1 -0
  92. package/dist/directives.cjs +1 -99
  93. package/dist/directives.js +6 -1363
  94. package/dist/discovery.cjs +1 -1
  95. package/dist/discovery.js +2 -61
  96. package/dist/discovery.service-COmbHaoI.js +61 -0
  97. package/dist/discovery.service-COmbHaoI.js.map +1 -0
  98. package/dist/discovery.service-CVDXO9rH.cjs +1 -0
  99. package/dist/discovery.service-CVDXO9rH.cjs.map +1 -0
  100. package/dist/{divider-D8cBBkdG.js → divider-BzcZGo4S.js} +1 -1
  101. package/dist/{divider-D8cBBkdG.js.map → divider-BzcZGo4S.js.map} +1 -1
  102. package/dist/{divider-B84lt1A3.cjs → divider-Cde33ivs.cjs} +1 -1
  103. package/dist/{divider-B84lt1A3.cjs.map → divider-Cde33ivs.cjs.map} +1 -1
  104. package/dist/divider.cjs +1 -1
  105. package/dist/divider.js +1 -1
  106. package/dist/dropdown.cjs +1 -1
  107. package/dist/dropdown.js +1 -1
  108. package/dist/{expand-BJiKggfg.js → expand-DI144OzN.js} +3 -3
  109. package/dist/{expand-BJiKggfg.js.map → expand-DI144OzN.js.map} +1 -1
  110. package/dist/{expand-DK-O37-j.cjs → expand-Db4V0jj-.cjs} +1 -1
  111. package/dist/{expand-DK-O37-j.cjs.map → expand-Db4V0jj-.cjs.map} +1 -1
  112. package/dist/expand.cjs +1 -1
  113. package/dist/expand.js +1 -1
  114. package/dist/{float-RWR6Q1Hh.cjs → float--RScf9BZ.cjs} +1 -1
  115. package/dist/{float-RWR6Q1Hh.cjs.map → float--RScf9BZ.cjs.map} +1 -1
  116. package/dist/{float-B4FDN40h.js → float-DIyzy1c2.js} +1 -1
  117. package/dist/{float-B4FDN40h.js.map → float-DIyzy1c2.js.map} +1 -1
  118. package/dist/float.cjs +1 -1
  119. package/dist/float.js +1 -1
  120. package/dist/{form-ha3df3K7.cjs → form-DWNpOsIU.cjs} +1 -1
  121. package/dist/{form-ha3df3K7.cjs.map → form-DWNpOsIU.cjs.map} +1 -1
  122. package/dist/{form-B-Sm6u25.js → form-RtXH8UHQ.js} +8 -8
  123. package/dist/{form-B-Sm6u25.js.map → form-RtXH8UHQ.js.map} +1 -1
  124. package/dist/form.cjs +1 -1
  125. package/dist/form.js +6 -6
  126. package/dist/handover/agent-runtime-followups.md +1 -1
  127. package/dist/handover/agent-runtime-v1.md +3 -3
  128. package/dist/{hashContent-dJrI-9sc.js.map → hashContent-Dgmzc32o.js.map} +1 -1
  129. package/dist/{hashContent-Ck6laKlk.cjs.map → hashContent-Dh1VzIAb.cjs.map} +1 -1
  130. package/dist/icons-DXanGDZ_.js +52 -0
  131. package/dist/icons-DXanGDZ_.js.map +1 -0
  132. package/dist/icons-bNxlWLlk.cjs +24 -0
  133. package/dist/icons-bNxlWLlk.cjs.map +1 -0
  134. package/dist/icons.cjs +1 -1
  135. package/dist/icons.js +1 -1
  136. package/dist/{iframe-BXe1TPx1.cjs → iframe-B1XWRaLC.cjs} +1 -1
  137. package/dist/{iframe-BXe1TPx1.cjs.map → iframe-B1XWRaLC.cjs.map} +1 -1
  138. package/dist/{iframe-CByrVlZy.js → iframe-BlHK0cjy.js} +1 -1
  139. package/dist/{iframe-CByrVlZy.js.map → iframe-BlHK0cjy.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 +60 -60
  144. package/dist/{input-BY9OCQWr.cjs → input-C-_XU9AX.cjs} +1 -1
  145. package/dist/{input-BY9OCQWr.cjs.map → input-C-_XU9AX.cjs.map} +1 -1
  146. package/dist/{input-Q0fm34Co.js → input-CiGa8Dkl.js} +1 -1
  147. package/dist/{input-Q0fm34Co.js.map → input-CiGa8Dkl.js.map} +1 -1
  148. package/dist/{input-chip-BwNf3GD0.cjs → input-chip-5aYnuRZ_.cjs} +1 -1
  149. package/dist/{input-chip-BwNf3GD0.cjs.map → input-chip-5aYnuRZ_.cjs.map} +1 -1
  150. package/dist/{input-chip-CytUirVS.js → input-chip-l--zCMGR.js} +1 -1
  151. package/dist/{input-chip-CytUirVS.js.map → input-chip-l--zCMGR.js.map} +1 -1
  152. package/dist/input.cjs +1 -1
  153. package/dist/input.js +1 -1
  154. package/dist/json.cjs +2 -2
  155. package/dist/json.cjs.map +1 -1
  156. package/dist/json.js +3 -3
  157. package/dist/json.js.map +1 -1
  158. package/dist/kbd.cjs +1 -1
  159. package/dist/kbd.js +1 -1
  160. package/dist/{layout-Dq2oeOTS.js → layout-DSAjo92m.js} +1 -1
  161. package/dist/{layout-Dq2oeOTS.js.map → layout-DSAjo92m.js.map} +1 -1
  162. package/dist/{layout-BbCIfIgo.cjs → layout-eXb9wjDh.cjs} +1 -1
  163. package/dist/{layout-BbCIfIgo.cjs.map → layout-eXb9wjDh.cjs.map} +1 -1
  164. package/dist/layout.cjs +1 -1
  165. package/dist/layout.js +1 -1
  166. package/dist/{lightbox-p2E0oVR0.cjs → lightbox-CfRDkeeb.cjs} +2 -2
  167. package/dist/{lightbox-p2E0oVR0.cjs.map → lightbox-CfRDkeeb.cjs.map} +1 -1
  168. package/dist/{lightbox-Ckvn5YNF.js → lightbox-D9oiu1Nv.js} +2 -2
  169. package/dist/{lightbox-Ckvn5YNF.js.map → lightbox-D9oiu1Nv.js.map} +1 -1
  170. package/dist/lightbox.cjs +1 -1
  171. package/dist/lightbox.js +1 -1
  172. package/dist/{list-CsrPVvmm.js → list-BOlRka4v.js} +1 -1
  173. package/dist/{list-CsrPVvmm.js.map → list-BOlRka4v.js.map} +1 -1
  174. package/dist/{list-r57UFHu3.cjs → list-CDJi3_Ut.cjs} +1 -1
  175. package/dist/{list-r57UFHu3.cjs.map → list-CDJi3_Ut.cjs.map} +1 -1
  176. package/dist/list.cjs +1 -1
  177. package/dist/list.js +1 -1
  178. package/dist/{magnetic-Bgh7aHHI.cjs → magnetic-D-ph029G.cjs} +1 -1
  179. package/dist/{magnetic-Bgh7aHHI.cjs.map → magnetic-D-ph029G.cjs.map} +1 -1
  180. package/dist/{magnetic-DxvoEz8_.js → magnetic-mHXl54Z8.js} +1 -1
  181. package/dist/{magnetic-DxvoEz8_.js.map → magnetic-mHXl54Z8.js.map} +1 -1
  182. package/dist/{menu-DBuZiPyW.cjs → menu-CJaDL2cd.cjs} +1 -1
  183. package/dist/{menu-DBuZiPyW.cjs.map → menu-CJaDL2cd.cjs.map} +1 -1
  184. package/dist/{menu-Csm6Fg88.js → menu-XyrLmCi_.js} +2 -2
  185. package/dist/{menu-Csm6Fg88.js.map → menu-XyrLmCi_.js.map} +1 -1
  186. package/dist/menu.cjs +1 -1
  187. package/dist/menu.js +1 -1
  188. package/dist/mixins-CsYsIJOI.cjs +254 -0
  189. package/dist/mixins-CsYsIJOI.cjs.map +1 -0
  190. package/dist/mixins-DySzfmal.js +642 -0
  191. package/dist/mixins-DySzfmal.js.map +1 -0
  192. package/dist/mixins.cjs +1 -1
  193. package/dist/mixins.js +2 -2
  194. package/dist/nav-drawer.cjs +1 -1
  195. package/dist/nav-drawer.js +1 -1
  196. package/dist/navigation-bar.cjs +1 -1
  197. package/dist/navigation-bar.js +1 -1
  198. package/dist/navigation-rail.cjs +5 -9
  199. package/dist/navigation-rail.cjs.map +1 -1
  200. package/dist/navigation-rail.js +5 -11
  201. package/dist/navigation-rail.js.map +1 -1
  202. package/dist/{notification-CgTBiAdf.js → notification-CHrEY4u8.js} +2 -2
  203. package/dist/{notification-CgTBiAdf.js.map → notification-CHrEY4u8.js.map} +1 -1
  204. package/dist/{notification-58tkVys8.cjs → notification-DKp4tjaB.cjs} +1 -1
  205. package/dist/{notification-58tkVys8.cjs.map → notification-DKp4tjaB.cjs.map} +1 -1
  206. package/dist/notification.cjs +1 -1
  207. package/dist/notification.js +1 -1
  208. package/dist/{option-Bicf6xpI.js → option-Vpy4UQ-D.js} +1 -1
  209. package/dist/{option-Bicf6xpI.js.map → option-Vpy4UQ-D.js.map} +1 -1
  210. package/dist/{option-61YE3gub.cjs → option-nRk4MuXH.cjs} +1 -1
  211. package/dist/{option-61YE3gub.cjs.map → option-nRk4MuXH.cjs.map} +1 -1
  212. package/dist/option.cjs +1 -1
  213. package/dist/option.js +1 -1
  214. package/dist/{overlay-CpvmytrQ.cjs → overlay-HNrWZ4sB.cjs} +1 -1
  215. package/dist/{overlay-CpvmytrQ.cjs.map → overlay-HNrWZ4sB.cjs.map} +1 -1
  216. package/dist/{overlay-CAI2FAp7.js → overlay-jlkcrt8F.js} +5 -5
  217. package/dist/{overlay-CAI2FAp7.js.map → overlay-jlkcrt8F.js.map} +1 -1
  218. package/dist/{overlay-stack-Dk0xETTy.cjs.map → overlay-stack-Bdr9lOqi.cjs.map} +1 -1
  219. package/dist/{overlay-stack-BR4iYivO.js.map → overlay-stack-D2rgxQLh.js.map} +1 -1
  220. package/dist/overlay.cjs +1 -1
  221. package/dist/{overlay.confirm-body-QD-5cj3_.cjs → overlay.confirm-body-B8dFI3cj.cjs} +1 -1
  222. package/dist/{overlay.confirm-body-QD-5cj3_.cjs.map → overlay.confirm-body-B8dFI3cj.cjs.map} +1 -1
  223. package/dist/{overlay.confirm-body-Cq25CkTw.js → overlay.confirm-body-CYShkjI6.js} +1 -1
  224. package/dist/{overlay.confirm-body-Cq25CkTw.js.map → overlay.confirm-body-CYShkjI6.js.map} +1 -1
  225. package/dist/overlay.js +3 -3
  226. package/dist/{overlay.service-BG0bqPwJ.cjs → overlay.service-BTPn7Uv7.cjs} +1 -1
  227. package/dist/{overlay.service-BG0bqPwJ.cjs.map → overlay.service-BTPn7Uv7.cjs.map} +1 -1
  228. package/dist/{overlay.service-Bpjrhaxh.js → overlay.service-BqhhxVJp.js} +2 -2
  229. package/dist/{overlay.service-Bpjrhaxh.js.map → overlay.service-BqhhxVJp.js.map} +1 -1
  230. package/dist/{progress-Zqx-S9NZ.js → progress-8Bn88GK_.js} +1 -1
  231. package/dist/{progress-Zqx-S9NZ.js.map → progress-8Bn88GK_.js.map} +1 -1
  232. package/dist/{progress-D8XZJVl5.cjs → progress-CAp_4jtq.cjs} +1 -1
  233. package/dist/{progress-D8XZJVl5.cjs.map → progress-CAp_4jtq.cjs.map} +1 -1
  234. package/dist/progress.cjs +1 -1
  235. package/dist/progress.js +1 -1
  236. package/dist/{radio-group-bl8K4Gls.cjs → radio-group-CN44mAoc.cjs} +1 -1
  237. package/dist/{radio-group-bl8K4Gls.cjs.map → radio-group-CN44mAoc.cjs.map} +1 -1
  238. package/dist/{radio-group-D9MU1Mxz.js → radio-group-GNHA7qJR.js} +1 -1
  239. package/dist/{radio-group-D9MU1Mxz.js.map → radio-group-GNHA7qJR.js.map} +1 -1
  240. package/dist/radio-group.cjs +1 -1
  241. package/dist/radio-group.js +1 -1
  242. package/dist/range.cjs +1 -1
  243. package/dist/range.js +1 -1
  244. package/dist/{reduced-motion-D7LqTUMn.js.map → reduced-motion-D-L12p7G.js.map} +1 -1
  245. package/dist/{reduced-motion-Dzfp_w5x.cjs.map → reduced-motion-Ds-HjMzn.cjs.map} +1 -1
  246. package/dist/{rxjs-utils-BK8VMe3K.js.map → rxjs-utils-BXpvHN4-.js.map} +1 -1
  247. package/dist/{rxjs-utils-DhOKenkS.cjs.map → rxjs-utils-CaC-tdot.cjs.map} +1 -1
  248. package/dist/rxjs-utils.cjs +1 -1
  249. package/dist/rxjs-utils.js +1 -1
  250. package/dist/{select-CMwkl-D6.js → select-BnuXRHS4.js} +3 -3
  251. package/dist/{select-CMwkl-D6.js.map → select-BnuXRHS4.js.map} +1 -1
  252. package/dist/{select-COIfVtZl.cjs → select-DZNns5Pa.cjs} +2 -2
  253. package/dist/{select-COIfVtZl.cjs.map → select-DZNns5Pa.cjs.map} +1 -1
  254. package/dist/select.cjs +1 -1
  255. package/dist/select.js +1 -1
  256. package/dist/skeleton.cjs +1 -1
  257. package/dist/skeleton.js +1 -1
  258. package/dist/skills/INDEX.md +2 -1
  259. package/dist/skills/SKILL.md +33 -23
  260. package/dist/skills/area.md +5 -4
  261. package/dist/skills/connectivity.md +1 -3
  262. package/dist/skills/directives.md +36 -0
  263. package/dist/skills/icons.md +95 -31
  264. package/dist/skills/layout.md +36 -53
  265. package/dist/skills/mixins.md +26 -5
  266. package/dist/skills/schmancy/INDEX.md +2 -1
  267. package/dist/skills/schmancy/SKILL.md +33 -23
  268. package/dist/skills/schmancy/area.md +5 -4
  269. package/dist/skills/schmancy/connectivity.md +1 -3
  270. package/dist/skills/schmancy/directives.md +36 -0
  271. package/dist/skills/schmancy/icons.md +95 -31
  272. package/dist/skills/schmancy/layout.md +36 -53
  273. package/dist/skills/schmancy/mixins.md +26 -5
  274. package/dist/slider.cjs +1 -1
  275. package/dist/slider.js +1 -1
  276. package/dist/{splash-screen-xrMNpzkm.js → splash-screen-CUP_elaT.js} +1 -1
  277. package/dist/{splash-screen-xrMNpzkm.js.map → splash-screen-CUP_elaT.js.map} +1 -1
  278. package/dist/{splash-screen-2hxq8Sft.cjs → splash-screen-DeoPRrOu.cjs} +1 -1
  279. package/dist/{splash-screen-2hxq8Sft.cjs.map → splash-screen-DeoPRrOu.cjs.map} +1 -1
  280. package/dist/splash-screen.cjs +1 -1
  281. package/dist/splash-screen.js +1 -1
  282. package/dist/{src-B15R32Sp.js → src-B1VkLX3l.js} +159 -159
  283. package/dist/src-B1VkLX3l.js.map +1 -0
  284. package/dist/{src-BWQvtOOf.cjs → src-DQ4wr0qq.cjs} +13 -13
  285. package/dist/src-DQ4wr0qq.cjs.map +1 -0
  286. package/dist/steps.cjs +1 -1
  287. package/dist/steps.js +1 -1
  288. package/dist/{surface-BkQ44Wuo.cjs → surface-LkaZQXZn.cjs} +1 -1
  289. package/dist/{surface-BkQ44Wuo.cjs.map → surface-LkaZQXZn.cjs.map} +1 -1
  290. package/dist/{surface-3nnvlxeE.js → surface-hOvkrjGN.js} +1 -1
  291. package/dist/{surface-3nnvlxeE.js.map → surface-hOvkrjGN.js.map} +1 -1
  292. package/dist/surface.cjs +1 -1
  293. package/dist/surface.js +1 -1
  294. package/dist/switch.cjs +1 -1
  295. package/dist/switch.js +1 -1
  296. package/dist/table.cjs +2 -2
  297. package/dist/table.cjs.map +1 -1
  298. package/dist/table.js +2 -2
  299. package/dist/table.js.map +1 -1
  300. package/dist/{tabs-CnLIe8nE.js → tabs-CfwIHhHo.js} +1 -1
  301. package/dist/{tabs-CnLIe8nE.js.map → tabs-CfwIHhHo.js.map} +1 -1
  302. package/dist/{tabs-Dql0rcqZ.cjs → tabs-bplzstz6.cjs} +1 -1
  303. package/dist/{tabs-Dql0rcqZ.cjs.map → tabs-bplzstz6.cjs.map} +1 -1
  304. package/dist/tabs.cjs +1 -1
  305. package/dist/tabs.js +1 -1
  306. package/dist/teleport.cjs +1 -1
  307. package/dist/teleport.js +1 -1
  308. package/dist/{textarea-BAogS_Ff.js → textarea-C1A5xuw9.js} +1 -1
  309. package/dist/{textarea-BAogS_Ff.js.map → textarea-C1A5xuw9.js.map} +1 -1
  310. package/dist/{textarea-CGD6lAEe.cjs → textarea-hrDp5gQq.cjs} +1 -1
  311. package/dist/{textarea-CGD6lAEe.cjs.map → textarea-hrDp5gQq.cjs.map} +1 -1
  312. package/dist/textarea.cjs +1 -1
  313. package/dist/textarea.js +1 -1
  314. package/dist/{theme-CUK0HrS3.js → theme-BniFOMEo.js} +4 -4
  315. package/dist/{theme-CUK0HrS3.js.map → theme-BniFOMEo.js.map} +1 -1
  316. package/dist/{theme-DKrrQ-ic.cjs → theme-DmR6PKV8.cjs} +3 -3
  317. package/dist/{theme-DKrrQ-ic.cjs.map → theme-DmR6PKV8.cjs.map} +1 -1
  318. package/dist/{theme-button-Bb8qW2IH.js → theme-button--ruZIb0T.js} +1 -1
  319. package/dist/{theme-button-Bb8qW2IH.js.map → theme-button--ruZIb0T.js.map} +1 -1
  320. package/dist/{theme-button-CmTwFm3l.cjs → theme-button-a0LgZ7hQ.cjs} +1 -1
  321. package/dist/{theme-button-CmTwFm3l.cjs.map → theme-button-a0LgZ7hQ.cjs.map} +1 -1
  322. package/dist/theme-button.cjs +1 -1
  323. package/dist/theme-button.js +1 -1
  324. package/dist/theme.cjs +1 -1
  325. package/dist/{theme.interface-D4NeufQA.cjs.map → theme.interface-B5xjEk74.cjs.map} +1 -1
  326. package/dist/{theme.interface-C2XNgsLB.js.map → theme.interface-DVEw3s8m.js.map} +1 -1
  327. package/dist/theme.js +4 -4
  328. package/dist/{theme.service-CSzNkqBB.js.map → theme.service-Bh08uOSJ.js.map} +1 -1
  329. package/dist/{theme.service-CnFUmUpc.cjs.map → theme.service-Y-e8b331.cjs.map} +1 -1
  330. package/dist/tree.cjs +1 -1
  331. package/dist/tree.js +1 -1
  332. package/dist/typography.cjs +1 -1
  333. package/dist/typography.js +1 -1
  334. package/dist/{utils-Cxg0Kfy5.js → utils-578eFTx4.js} +1 -1
  335. package/dist/{utils-Cxg0Kfy5.js.map → utils-578eFTx4.js.map} +1 -1
  336. package/dist/{utils-aCJYAGUr.cjs → utils-CVWUrECT.cjs} +1 -1
  337. package/dist/{utils-aCJYAGUr.cjs.map → utils-CVWUrECT.cjs.map} +1 -1
  338. package/dist/utils.cjs +1 -1
  339. package/dist/utils.js +2 -2
  340. package/dist/visually-hidden.cjs +1 -1
  341. package/dist/visually-hidden.js +1 -1
  342. package/dist/{window-DuDAQa6y.js → window-BT9JecWy.js} +5 -5
  343. package/dist/{window-DuDAQa6y.js.map → window-BT9JecWy.js.map} +1 -1
  344. package/dist/{window-BbWlaPZv.cjs → window-Bp7zWZpu.cjs} +1 -1
  345. package/dist/{window-BbWlaPZv.cjs.map → window-Bp7zWZpu.cjs.map} +1 -1
  346. package/dist/window.cjs +1 -1
  347. package/dist/window.js +1 -1
  348. package/package.json +1 -1
  349. package/skills/schmancy/INDEX.md +2 -1
  350. package/skills/schmancy/SKILL.md +33 -23
  351. package/skills/schmancy/area.md +5 -4
  352. package/skills/schmancy/connectivity.md +1 -3
  353. package/skills/schmancy/directives.md +36 -0
  354. package/skills/schmancy/icons.md +95 -31
  355. package/skills/schmancy/layout.md +36 -53
  356. package/skills/schmancy/mixins.md +26 -5
  357. package/src/badge/badge.ts +7 -11
  358. package/src/button/icon-button.ts +3 -4
  359. package/src/directives/ai-badge.ts +95 -0
  360. package/src/directives/art/art.directive.ts +228 -0
  361. package/src/directives/art/effects/error.ts +192 -0
  362. package/src/directives/art/effects/funkhaus.ts +121 -0
  363. package/src/directives/art/effects/howl.ts +203 -0
  364. package/src/directives/art/effects/samwa.ts +228 -0
  365. package/src/directives/art/effects/snow.ts +207 -0
  366. package/src/directives/art/effects/starfield.ts +107 -0
  367. package/src/directives/art/index.ts +2 -0
  368. package/src/directives/art/particle-pool.ts +40 -0
  369. package/src/directives/art/types.ts +129 -0
  370. package/src/directives/art/utils.ts +35 -0
  371. package/src/directives/battery.ts +1014 -0
  372. package/src/directives/beta.ts +44 -0
  373. package/src/directives/fill.ts +32 -60
  374. package/src/directives/fyi.ts +551 -0
  375. package/src/directives/hummingbird.ts +1712 -0
  376. package/src/directives/index.ts +9 -0
  377. package/src/directives/missed-punch.ts +407 -0
  378. package/src/directives/urgent.ts +660 -0
  379. package/src/directives/working-snake.ts +294 -0
  380. package/src/icons/icon.ts +53 -30
  381. package/src/json/json.ts +1 -1
  382. package/src/navigation-rail/navigation-rail-item.ts +7 -12
  383. package/src/navigation-rail/navigation-rail.ts +0 -2
  384. package/src/table/table.ts +2 -2
  385. package/src/theme/theme-audio-player.ts +1 -1
  386. package/types/mixins/SchmancyElement.d.ts +31 -0
  387. package/types/src/badge/badge.d.ts +1 -1
  388. package/types/src/directives/ai-badge.d.ts +15 -0
  389. package/types/src/directives/art/art.directive.d.ts +19 -0
  390. package/types/src/directives/art/effects/error.d.ts +7 -0
  391. package/types/src/directives/art/effects/funkhaus.d.ts +7 -0
  392. package/types/src/directives/art/effects/howl.d.ts +7 -0
  393. package/types/src/directives/art/effects/samwa.d.ts +7 -0
  394. package/types/src/directives/art/effects/snow.d.ts +7 -0
  395. package/types/src/directives/art/effects/starfield.d.ts +10 -0
  396. package/types/src/directives/art/index.d.ts +2 -0
  397. package/types/src/directives/art/particle-pool.d.ts +16 -0
  398. package/types/src/directives/art/types.d.ts +126 -0
  399. package/types/src/directives/art/utils.d.ts +5 -0
  400. package/types/src/directives/battery.d.ts +96 -0
  401. package/types/src/directives/beta.d.ts +33 -0
  402. package/types/src/directives/fill.d.ts +4 -11
  403. package/types/src/directives/fyi.d.ts +76 -0
  404. package/types/src/directives/hummingbird.d.ts +180 -0
  405. package/types/src/directives/index.d.ts +9 -0
  406. package/types/src/directives/missed-punch.d.ts +28 -0
  407. package/types/src/directives/urgent.d.ts +88 -0
  408. package/types/src/directives/working-snake.d.ts +46 -0
  409. package/types/src/icons/icon.d.ts +22 -0
  410. package/dist/directives.cjs.map +0 -1
  411. package/dist/directives.js.map +0 -1
  412. package/dist/discovery.cjs.map +0 -1
  413. package/dist/discovery.js.map +0 -1
  414. package/dist/icons-DJuXwn8D.js +0 -48
  415. package/dist/icons-DJuXwn8D.js.map +0 -1
  416. package/dist/icons-oNRUCAEY.cjs +0 -33
  417. package/dist/icons-oNRUCAEY.cjs.map +0 -1
  418. package/dist/mixins-DTCHPEd4.cjs +0 -254
  419. package/dist/mixins-DTCHPEd4.cjs.map +0 -1
  420. package/dist/mixins-pU53qf6R.js +0 -636
  421. package/dist/mixins-pU53qf6R.js.map +0 -1
  422. package/dist/skills/page.md +0 -84
  423. package/dist/skills/schmancy/page.md +0 -84
  424. package/dist/src-B15R32Sp.js.map +0 -1
  425. package/dist/src-BWQvtOOf.cjs.map +0 -1
  426. package/skills/schmancy/page.md +0 -84
  427. /package/dist/{hashContent-dJrI-9sc.js → hashContent-Dgmzc32o.js} +0 -0
  428. /package/dist/{hashContent-Ck6laKlk.cjs → hashContent-Dh1VzIAb.cjs} +0 -0
  429. /package/dist/{overlay-stack-Dk0xETTy.cjs → overlay-stack-Bdr9lOqi.cjs} +0 -0
  430. /package/dist/{overlay-stack-BR4iYivO.js → overlay-stack-D2rgxQLh.js} +0 -0
  431. /package/dist/{reduced-motion-D7LqTUMn.js → reduced-motion-D-L12p7G.js} +0 -0
  432. /package/dist/{reduced-motion-Dzfp_w5x.cjs → reduced-motion-Ds-HjMzn.cjs} +0 -0
  433. /package/dist/{rxjs-utils-BK8VMe3K.js → rxjs-utils-BXpvHN4-.js} +0 -0
  434. /package/dist/{rxjs-utils-DhOKenkS.cjs → rxjs-utils-CaC-tdot.cjs} +0 -0
  435. /package/dist/{theme.interface-D4NeufQA.cjs → theme.interface-B5xjEk74.cjs} +0 -0
  436. /package/dist/{theme.interface-C2XNgsLB.js → theme.interface-DVEw3s8m.js} +0 -0
  437. /package/dist/{theme.service-CSzNkqBB.js → theme.service-Bh08uOSJ.js} +0 -0
  438. /package/dist/{theme.service-CnFUmUpc.cjs → theme.service-Y-e8b331.cjs} +0 -0
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Working Snake Directive - Animated trail indicating active work
3
+ *
4
+ * Creates a visual "snake" effect emanating from a punch point when
5
+ * an employee is currently working (single check-in, no check-out yet).
6
+ *
7
+ * The animation creates a visual illusion of forward motion - dots flow
8
+ * rightward with a subtle sine wave oscillation, representing time passing.
9
+ *
10
+ * Follows patterns from art.ts:
11
+ * - RequestAnimationFrame for smooth 60fps
12
+ * - Intersection Observer to pause when off-screen
13
+ * - GPU-accelerated CSS transforms
14
+ * - Object pooling for performance
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * html`
19
+ * <div ${workingSnake({ active: true, color: 'var(--md-sys-color-primary)' })}>
20
+ * <div class="punch-dot"></div>
21
+ * </div>
22
+ * `
23
+ * ```
24
+ */
25
+
26
+ import type { ElementPart } from 'lit'
27
+ import { noChange } from 'lit'
28
+ import { AsyncDirective, directive } from 'lit/async-directive.js'
29
+
30
+ export interface WorkingSnakeOptions {
31
+ /** Whether the snake animation is active */
32
+ active: boolean
33
+ /** CSS color value for the snake segments */
34
+ color?: string
35
+ /** Width in pixels the snake should travel */
36
+ travelWidth?: number
37
+ }
38
+
39
+ interface Segment {
40
+ element: SVGCircleElement
41
+ progress: number // 0 to 1 - position along the path
42
+ phase: number // offset for sine wave
43
+ }
44
+
45
+ interface SnakeState {
46
+ active: boolean
47
+ color: string
48
+ travelWidth: number
49
+ element: HTMLElement
50
+ overlayElement?: HTMLDivElement
51
+ svg?: SVGSVGElement
52
+ segments: Segment[]
53
+ animationId?: number
54
+ isVisible: boolean
55
+ observer?: IntersectionObserver
56
+ startTime: number
57
+ }
58
+
59
+ const SEGMENT_COUNT = 10
60
+ const CYCLE_DURATION = 3000 // 3 seconds for full cycle
61
+ const SINE_AMPLITUDE = 3 // vertical oscillation in pixels
62
+ const HEAD_RADIUS = 4
63
+ const TAIL_RADIUS = 1.5
64
+
65
+ class WorkingSnakeDirective extends AsyncDirective {
66
+ private state: SnakeState | null = null
67
+
68
+ render(_options: WorkingSnakeOptions) {
69
+ return noChange
70
+ }
71
+
72
+ override update(part: ElementPart, [options]: [WorkingSnakeOptions]) {
73
+ const element = part.element as HTMLElement
74
+ // Auto-calculate travelWidth to use 100% of container if not specified
75
+ const calculatedWidth = element.offsetWidth || element.clientWidth
76
+ const { active, color = 'var(--md-sys-color-primary)', travelWidth = calculatedWidth } = options
77
+
78
+ // If becoming inactive, cleanup
79
+ if (!active && this.state) {
80
+ this.cleanup()
81
+ return noChange
82
+ }
83
+
84
+ // If not active and no state, nothing to do
85
+ if (!active) {
86
+ return noChange
87
+ }
88
+
89
+ // If options changed, recreate
90
+ if (this.state && (this.state.color !== color || this.state.travelWidth !== travelWidth)) {
91
+ this.cleanup()
92
+ }
93
+
94
+ // Initialize if needed
95
+ if (!this.state) {
96
+ this.state = {
97
+ active: true,
98
+ color,
99
+ travelWidth,
100
+ element,
101
+ segments: [],
102
+ isVisible: true,
103
+ startTime: performance.now(),
104
+ }
105
+
106
+ // Ensure element has relative positioning for absolute overlay
107
+ const computedStyle = getComputedStyle(element)
108
+ if (computedStyle.position === 'static') {
109
+ element.style.position = 'relative'
110
+ }
111
+
112
+ this.createOverlay()
113
+ this.setupVisibilityObserver()
114
+ this.startAnimation()
115
+ }
116
+
117
+ return noChange
118
+ }
119
+
120
+ private createOverlay() {
121
+ if (!this.state) return
122
+
123
+ const { element, color, travelWidth } = this.state
124
+
125
+ // Create overlay container - starts from the punch point
126
+ const overlay = document.createElement('div')
127
+ overlay.className = 'working-snake-overlay'
128
+ overlay.style.cssText = `
129
+ position: absolute;
130
+ top: 50%;
131
+ left: 0;
132
+ width: ${travelWidth}px;
133
+ height: 20px;
134
+ transform: translateY(-50%);
135
+ pointer-events: none;
136
+ overflow: visible;
137
+ z-index: 5;
138
+ `
139
+
140
+ // Create SVG
141
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
142
+ svg.setAttribute('width', '100%')
143
+ svg.setAttribute('height', '100%')
144
+ svg.setAttribute('viewBox', `0 0 ${travelWidth} 20`)
145
+ svg.setAttribute('preserveAspectRatio', 'none')
146
+ svg.style.cssText = `
147
+ position: absolute;
148
+ top: 0;
149
+ left: 0;
150
+ width: 100%;
151
+ height: 100%;
152
+ overflow: visible;
153
+ `
154
+
155
+ // Create segments (circles)
156
+ const segments: Segment[] = []
157
+ for (let i = 0; i < SEGMENT_COUNT; i++) {
158
+ const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle')
159
+
160
+ // Calculate radius - head is bigger, tail is smaller
161
+ const normalizedIndex = i / (SEGMENT_COUNT - 1)
162
+ const radius = HEAD_RADIUS - normalizedIndex * (HEAD_RADIUS - TAIL_RADIUS)
163
+
164
+ circle.setAttribute('r', radius.toString())
165
+ circle.setAttribute('fill', color)
166
+ circle.setAttribute('cy', '10') // Center vertically in 20px height
167
+ circle.style.willChange = 'transform, opacity'
168
+
169
+ // Stagger initial progress and phase for organic movement
170
+ const progress = (i / SEGMENT_COUNT) * 0.5 // Start staggered
171
+ const phase = (i / SEGMENT_COUNT) * Math.PI * 2
172
+
173
+ segments.push({ element: circle, progress, phase })
174
+ svg.appendChild(circle)
175
+ }
176
+
177
+ overlay.appendChild(svg)
178
+ element.appendChild(overlay)
179
+
180
+ this.state.overlayElement = overlay
181
+ this.state.svg = svg
182
+ this.state.segments = segments
183
+ }
184
+
185
+ private setupVisibilityObserver() {
186
+ if (!this.state || typeof IntersectionObserver === 'undefined') return
187
+
188
+ this.state.observer = new IntersectionObserver(
189
+ entries => {
190
+ if (!this.state) return
191
+ const isVisible = entries[0].isIntersecting
192
+
193
+ if (isVisible && !this.state.isVisible) {
194
+ this.state.isVisible = true
195
+ this.startAnimation()
196
+ } else if (!isVisible && this.state.isVisible) {
197
+ this.state.isVisible = false
198
+ if (this.state.animationId) {
199
+ cancelAnimationFrame(this.state.animationId)
200
+ this.state.animationId = undefined
201
+ }
202
+ }
203
+ },
204
+ { threshold: 0 }
205
+ )
206
+
207
+ this.state.observer.observe(this.state.element)
208
+ }
209
+
210
+ private startAnimation() {
211
+ if (!this.state || !this.state.isVisible) return
212
+
213
+ const animate = (currentTime: number) => {
214
+ if (!this.state || !this.state.isVisible) return
215
+
216
+ const elapsed = currentTime - this.state.startTime
217
+ const cycleProgress = (elapsed % CYCLE_DURATION) / CYCLE_DURATION
218
+
219
+ const { segments, travelWidth } = this.state
220
+
221
+ // Animate each segment
222
+ for (let i = 0; i < segments.length; i++) {
223
+ const segment = segments[i]
224
+
225
+ // Each segment is offset in the cycle
226
+ const segmentOffset = i / SEGMENT_COUNT
227
+ let progress = (cycleProgress + segmentOffset) % 1
228
+
229
+ // Ease the progress for more organic feel (ease-out)
230
+ const easedProgress = 1 - Math.pow(1 - progress, 2)
231
+
232
+ // Calculate x position
233
+ const x = easedProgress * travelWidth
234
+
235
+ // Calculate y position with sine wave
236
+ const sineWave = Math.sin(progress * Math.PI * 4 + segment.phase) * SINE_AMPLITUDE
237
+ const y = 10 + sineWave
238
+
239
+ // Calculate opacity - fade out as it travels
240
+ const baseOpacity = i === 0 ? 0.9 : 0.7 - (i / SEGMENT_COUNT) * 0.55
241
+ const fadeOut = 1 - easedProgress * 0.7
242
+ const opacity = baseOpacity * fadeOut
243
+
244
+ // Head has subtle pulse
245
+ let scale = 1
246
+ if (i === 0) {
247
+ const pulse = Math.sin(currentTime / 200) * 0.1 + 1
248
+ scale = pulse
249
+ }
250
+
251
+ // Apply transforms
252
+ segment.element.setAttribute('cx', x.toFixed(1))
253
+ segment.element.setAttribute('cy', y.toFixed(1))
254
+ segment.element.setAttribute('opacity', Math.max(0.1, opacity).toFixed(2))
255
+
256
+ if (scale !== 1) {
257
+ segment.element.style.transform = `scale(${scale.toFixed(2)})`
258
+ segment.element.style.transformOrigin = `${x}px ${y}px`
259
+ }
260
+ }
261
+
262
+ this.state.animationId = requestAnimationFrame(animate)
263
+ }
264
+
265
+ this.state.animationId = requestAnimationFrame(animate)
266
+ }
267
+
268
+ private cleanup() {
269
+ if (!this.state) return
270
+
271
+ // Cancel animation
272
+ if (this.state.animationId) {
273
+ cancelAnimationFrame(this.state.animationId)
274
+ }
275
+
276
+ // Disconnect observer
277
+ if (this.state.observer) {
278
+ this.state.observer.disconnect()
279
+ }
280
+
281
+ // Remove overlay
282
+ if (this.state.overlayElement) {
283
+ this.state.overlayElement.remove()
284
+ }
285
+
286
+ this.state = null
287
+ }
288
+
289
+ override disconnected() {
290
+ this.cleanup()
291
+ }
292
+ }
293
+
294
+ export const workingSnake = directive(WorkingSnakeDirective)
package/src/icons/icon.ts CHANGED
@@ -1,56 +1,79 @@
1
1
  import { SchmancyElement } from '@mixins/index'
2
- import { css, html } from 'lit'
3
- import { customElement } from 'lit/decorators.js'
2
+ import { css, html, nothing, svg } from 'lit'
3
+ import { customElement, state } from 'lit/decorators.js'
4
4
 
5
+ declare global {
6
+ interface Window {
7
+ __siIcons?: Record<string, string>
8
+ }
9
+ }
10
+
11
+ /**
12
+ * @element schmancy-icon
13
+ * Renders a Material Symbol inline as SVG — path data comes from
14
+ * window.__siIcons populated by the schmancy-icons Vite plugin.
15
+ *
16
+ * Size: set font-size on the host via Tailwind (e.g. class="text-2xl").
17
+ * Color: inherits currentColor.
18
+ * Active fill: use the "-fill" variant name: "home-fill".
19
+ *
20
+ * Usage:
21
+ * <schmancy-icon>home</schmancy-icon>
22
+ * <schmancy-icon class="text-lg text-primary-default">delete</schmancy-icon>
23
+ * <schmancy-icon>${active ? 'home-fill' : 'home'}</schmancy-icon>
24
+ */
5
25
  @customElement('schmancy-icon')
6
26
  export default class SchmancyIcon extends SchmancyElement {
7
27
  static styles = [css`
8
28
  :host {
9
- font-family: 'Material Symbols Outlined';
10
- font-size: 24px;
11
- width: 1em;
12
- height: 1em;
13
- color: inherit;
14
- font-variation-settings: inherit;
15
- font-weight: 400;
16
29
  display: inline-flex;
17
- font-style: normal;
18
30
  place-items: center;
19
31
  place-content: center;
20
- line-height: 1;
21
- overflow: hidden;
22
- letter-spacing: normal;
23
- text-transform: none;
24
- user-select: none;
25
- white-space: nowrap;
32
+ font-size: 24px;
33
+ width: 1em;
34
+ height: 1em;
26
35
  flex-shrink: 0;
27
- -webkit-font-smoothing: antialiased;
28
- text-rendering: optimizeLegibility;
29
- }
30
-
31
- ::slotted(svg) {
32
- fill: currentColor;
36
+ color: inherit;
33
37
  }
34
38
 
35
- ::slotted(*) {
36
- height: 100%;
39
+ svg {
37
40
  width: 100%;
41
+ height: 100%;
42
+ fill: currentColor;
43
+ overflow: visible;
38
44
  }
39
45
  `]
40
46
 
47
+ @state() private _name = ''
48
+
49
+ private _observer?: MutationObserver
50
+
41
51
  override connectedCallback(): void {
42
52
  super.connectedCallback()
43
- const ariaHidden = this.getAttribute('aria-hidden')
44
- if (ariaHidden === 'false') {
45
- this.removeAttribute('aria-hidden')
46
- return
47
- }
53
+ this._name = this.textContent?.trim() ?? ''
54
+ this._observer = new MutationObserver(() => {
55
+ this._name = this.textContent?.trim() ?? ''
56
+ })
57
+ this._observer.observe(this, { childList: true, characterData: true, subtree: true })
48
58
  this.setAttribute('aria-hidden', 'true')
49
59
  this.setAttribute('translate', 'no')
50
60
  }
51
61
 
62
+ override disconnectedCallback(): void {
63
+ super.disconnectedCallback()
64
+ this._observer?.disconnect()
65
+ }
66
+
52
67
  protected override render(): unknown {
53
- return html`<slot></slot>`
68
+ const path = window.__siIcons?.[this._name]
69
+ return html`
70
+ <slot style="display:none"></slot>
71
+ ${path
72
+ ? html`<svg viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
73
+ ${svg`<path d="${path}"/>`}
74
+ </svg>`
75
+ : nothing}
76
+ `
54
77
  }
55
78
  }
56
79
 
package/src/json/json.ts CHANGED
@@ -41,7 +41,7 @@ export class SchmancyJson extends SchmancyElement {
41
41
  @click=${this.copyJSON}
42
42
  >
43
43
  <div class="flex items-center justify-between mb-1">
44
- <schmancy-icon size="12px" class="text-on-surface-variant">content_copy</schmancy-icon>
44
+ <schmancy-icon class="text-xs text-on-surface-variant">content_copy</schmancy-icon>
45
45
  </div>
46
46
  <pre class="text-[10px] leading-tight">${unsafeHTML(highlighted)}</pre>
47
47
  </div>
@@ -264,10 +264,11 @@ export class SchmancyNavigationRailItem extends SchmancyElement {
264
264
 
265
265
  // M3 Navigation Rail Item classes with theme integration
266
266
  const containerClasses = this.classMap({
267
- // Layout & Spacing (M3 56px height, 12px vertical padding)
268
- 'flex flex-col items-center justify-center': true,
267
+ // Layout & Spacing (M3 56px minimum hit target; vertical padding is consumer-controlled)
268
+ // justify-start pins the icon to the row top so its vertical center is invariant
269
+ // across label-visibility states — consumer rows can align siblings to it.
270
+ 'flex flex-col items-center justify-start': true,
269
271
  'min-h-14 w-full': true, // min-h-14 = 56px
270
- 'py-3': true, // py-3 = 12px top/bottom
271
272
  'gap-1': true, // gap-1 = 4px
272
273
 
273
274
  // M3 Shape & Interaction
@@ -383,15 +384,9 @@ export class SchmancyNavigationRailItem extends SchmancyElement {
383
384
  when(
384
385
  this.icon,
385
386
  () => html`
386
- <span
387
- class=${iconClasses}
388
- part="icon-text"
389
- style="font-family: 'Material Symbols Outlined'; font-variation-settings: 'FILL' ${this.active
390
- ? '1'
391
- : '0'}, 'wght' 400, 'GRAD' 0, 'opsz' ${this.nested ? '20' : '24'};"
392
- >
393
- ${this.icon}
394
- </span>
387
+ <schmancy-icon class=${iconClasses} part="icon-text">
388
+ ${this.active ? `${this.icon}-fill` : this.icon}
389
+ </schmancy-icon>
395
390
  `,
396
391
  ),
397
392
  )}
@@ -379,8 +379,6 @@ export class SchmancyNavigationRail extends SchmancyElement {
379
379
  // Layout & Structure
380
380
  'flex flex-col h-full': true,
381
381
  'box-border relative': true,
382
- 'py-2': true,
383
-
384
382
 
385
383
  // M3 Colors & Theme
386
384
  'bg-container-lowest text-surface-on': true,
@@ -182,9 +182,9 @@ export class SchmancyDataTable<T extends Record<string, any> = any> extends Schm
182
182
  return html`
183
183
  <span class="ml-1">
184
184
  ${this.sortDirection === 'asc'
185
- ? html`<schmancy-icon size="16px">arrow_upward</schmancy-icon>`
185
+ ? html`<schmancy-icon class="text-base">arrow_upward</schmancy-icon>`
186
186
  : this.sortDirection === 'desc'
187
- ? html`<schmancy-icon size="16px">arrow_downward</schmancy-icon>`
187
+ ? html`<schmancy-icon class="text-base">arrow_downward</schmancy-icon>`
188
188
  : null}
189
189
  </span>
190
190
  `
@@ -349,7 +349,7 @@ export class SchmancyThemeAudioPlayer extends SchmancyElement {
349
349
  this.currentThemeName !== 'default',
350
350
  () => html`
351
351
  <schmancy-button variant="text" size="sm" @click=${() => this.resetToDefaults()}>
352
- <schmancy-icon size="16px">refresh</schmancy-icon>
352
+ <schmancy-icon class="text-base">refresh</schmancy-icon>
353
353
  Reset
354
354
  </schmancy-button>
355
355
  `
@@ -46,4 +46,35 @@ export declare class SchmancyElement extends SchmancyElementBase {
46
46
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void;
47
47
  disconnectedCallback(): void;
48
48
  }
49
+ /**
50
+ * Decorator: `@schmancyElement('tag-name')`. The standard way to register
51
+ * a `SchmancyElement` subclass.
52
+ *
53
+ * Drop-in replacement for Lit's `@customElement`. The difference is
54
+ * timing: this decorator wraps the prototype's methods with
55
+ * `_activeHost.run` BEFORE calling `customElements.define`.
56
+ *
57
+ * Why this matters: the HTML spec captures the element's lifecycle
58
+ * callback references (`connectedCallback`, `disconnectedCallback`, etc.)
59
+ * off the prototype at `customElements.define` time, and the browser
60
+ * invokes those cached references for the element's lifecycle — it does
61
+ * NOT re-look-up the prototype each time. SchmancyElement's constructor
62
+ * installs the active-host wrap on first instantiation, which is strictly
63
+ * later than `define`, so the browser ends up calling unwrapped
64
+ * lifecycle callbacks. Reads inside `connectedCallback` then fall through
65
+ * to `document.activeElement`, miss the enclosing `<schmancy-context>`,
66
+ * and resolve to the module-scoped global instead of the isolated copy.
67
+ *
68
+ * Use this decorator for any subclass that:
69
+ * - Reads or writes a state-singleton inside `connectedCallback` or
70
+ * `disconnectedCallback`, AND
71
+ * - May appear inside a `<schmancy-context>` subtree.
72
+ *
73
+ * For elements that never touch state in lifecycle callbacks, plain
74
+ * `@customElement` from `lit/decorators.js` still works — the
75
+ * constructor's wrap covers everything else (render, class methods,
76
+ * event handlers attached via the prototype). The two decorators are
77
+ * interchangeable for those cases.
78
+ */
79
+ export declare function schmancyElement(tagName: string): <T extends CustomElementConstructor>(cls: T) => T;
49
80
  export {};
@@ -68,7 +68,7 @@ export declare class SchmancyBadgeV2 extends SchmancyElement {
68
68
  * Get icon size based on badge size with harmonious proportions
69
69
  * Using golden ratio-inspired proportions relative to text size
70
70
  */
71
- private getIconSize;
71
+ private getIconSizeClass;
72
72
  /**
73
73
  * Get additional styling for specific sizes
74
74
  */
@@ -0,0 +1,15 @@
1
+ /**
2
+ * AI Badge Directive — Indicator for AI-generated content.
3
+ * Pulses gently on the host element; color routed through theme tokens.
4
+ */
5
+ import { AsyncDirective } from 'lit/async-directive.js';
6
+ import type { ElementPart } from 'lit';
7
+ declare class AIBadgeDirective extends AsyncDirective {
8
+ private state;
9
+ render(_message?: string): symbol;
10
+ update(part: ElementPart, [message]: [string?]): symbol;
11
+ private cleanup;
12
+ disconnected(): void;
13
+ }
14
+ export declare const aiBadge: (_message?: string) => import("lit-html/directive").DirectiveResult<typeof AIBadgeDirective>;
15
+ export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Art Directive — GPU-accelerated decorative overlays.
3
+ * Lazy-initialised, IntersectionObserver-paused, RAF-driven, particle-pooled.
4
+ */
5
+ import type { ElementPart } from 'lit';
6
+ import { AsyncDirective } from 'lit/async-directive.js';
7
+ import type { ArtOptions } from './types';
8
+ declare class ArtDirective extends AsyncDirective {
9
+ private state;
10
+ render(_options: ArtOptions): symbol;
11
+ update(part: ElementPart, [options]: [ArtOptions]): symbol;
12
+ private initializeResources;
13
+ private setupVisibilityObserver;
14
+ private startAnimation;
15
+ private cleanup;
16
+ disconnected(): void;
17
+ }
18
+ export declare const art: (_options: ArtOptions) => import("lit-html/directive").DirectiveResult<typeof ArtDirective>;
19
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Error Effect — Electrical/warning glow on edges with static particles and lightning bolts.
3
+ * 2.5-second main pulse cycle.
4
+ */
5
+ import type { ArtState } from '../types';
6
+ export declare function createErrorOverlay(state: ArtState): void;
7
+ export declare function animateError(state: ArtState, currentTime: number): void;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Funkhaus Effect — Grid wave animation with window panes glowing diagonally.
3
+ * 7-second cycle, exponential intensity curve.
4
+ */
5
+ import type { ArtState } from '../types';
6
+ export declare function createFunkhausOverlay(state: ArtState): void;
7
+ export declare function animateFunkhaus(state: ArtState, currentTime: number): void;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Howl Effect — Steampunk gears, sparkles, crystals, rising steam.
3
+ * 17-second cycle, layered animations.
4
+ */
5
+ import type { ArtState } from '../types';
6
+ export declare function createHowlOverlay(state: ArtState): void;
7
+ export declare function animateHowl(state: ArtState, currentTime: number): void;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Samwa Effect — Ambient geometric particles with gentle physics.
3
+ * Color-responsive palette derived from the passed `color` prop; organic wind system.
4
+ */
5
+ import type { ArtState } from '../types';
6
+ export declare function createSamwaOverlay(state: ArtState): void;
7
+ export declare function animateSamwa(state: ArtState, currentTime: number): void;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Snow Effect — Peaceful winter snowfall with snow/leaf shapes.
3
+ * Same physics pattern as samwa effect but tuned for slower, floatier fall.
4
+ */
5
+ import type { ArtState } from '../types';
6
+ export declare function createSnowOverlay(state: ArtState): void;
7
+ export declare function animateSnow(state: ArtState, currentTime: number): void;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Starfield Effect — Night sky with twinkling stars.
3
+ *
4
+ * 6 groups × 7 stars using CSS radial-gradient backgrounds.
5
+ * Wave-by-wave fade-in (group 0 first, then 1, 2, …); gentle twinkle once visible.
6
+ * Opacity driven by RAF instead of CSS @keyframes to avoid Shadow DOM scoping.
7
+ */
8
+ import type { ArtState } from '../types';
9
+ export declare function createStarfieldOverlay(state: ArtState): void;
10
+ export declare function animateStarfield(state: ArtState, currentTime: number): void;
@@ -0,0 +1,2 @@
1
+ export { art } from './art.directive';
2
+ export type { ArtEffect, ArtOptions } from './types';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Particle Pool
3
+ *
4
+ * Reusable object pool for SVG particles to avoid constant creation/destruction.
5
+ * Used by samwa (leaves), howl (steam), error (lightning), snow (flakes) effects.
6
+ */
7
+ export declare class ParticlePool<T extends SVGElement> {
8
+ private pool;
9
+ private active;
10
+ private factory;
11
+ constructor(factory: () => T, initialSize?: number);
12
+ acquire(): T;
13
+ release(particle: T): void;
14
+ clear(): void;
15
+ get activeCount(): number;
16
+ }