@mhmo91/schmancy 0.10.24 → 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 (426) hide show
  1. package/dist/agent/{overlay.confirm-body-CvdVfCnN.js → overlay.confirm-body-DozUyDYx.js} +242 -242
  2. package/dist/agent/{overlay.confirm-body-CvdVfCnN.js.map → overlay.confirm-body-DozUyDYx.js.map} +1 -1
  3. package/dist/agent/schmancy.agent.js +5658 -2927
  4. package/dist/agent/schmancy.agent.js.map +1 -1
  5. package/dist/{area-A_oUP4P1.js → area-1EG1LrkX.js} +1 -1
  6. package/dist/{area-A_oUP4P1.js.map → area-1EG1LrkX.js.map} +1 -1
  7. package/dist/{area-BuqdaUpQ.cjs → area-DrVE5pXW.cjs} +1 -1
  8. package/dist/{area-BuqdaUpQ.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-Cy46gJxK.cjs → autocomplete-6pdZxEab.cjs} +1 -1
  12. package/dist/{autocomplete-Cy46gJxK.cjs.map → autocomplete-6pdZxEab.cjs.map} +1 -1
  13. package/dist/{autocomplete-BoCWO26L.js → autocomplete-nrIcCilw.js} +2 -2
  14. package/dist/{autocomplete-BoCWO26L.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-B0h5fuAA.js → boat--fLgbDAE.js} +3 -3
  23. package/dist/{boat-B0h5fuAA.js.map → boat--fLgbDAE.js.map} +1 -1
  24. package/dist/{boat-RRtBhD3x.cjs → boat-BIB-gPqy.cjs} +1 -1
  25. package/dist/{boat-RRtBhD3x.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-Bn6Pioo8.cjs → busy-DVCIxBVf.cjs} +1 -1
  31. package/dist/{busy-Bn6Pioo8.cjs.map → busy-DVCIxBVf.cjs.map} +1 -1
  32. package/dist/{busy-DObY7lfu.js → busy-DshZcVZ4.js} +1 -1
  33. package/dist/{busy-DObY7lfu.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-DEi3M2nV.js → button-D9UJ7I6Z.js} +2 -2
  37. package/dist/{button-DEi3M2nV.js.map → button-D9UJ7I6Z.js.map} +1 -1
  38. package/dist/{button-XfdPzfZQ.cjs → button-JrTMzwHY.cjs} +1 -1
  39. package/dist/{button-XfdPzfZQ.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-jzUQK0EQ.js → card-BvCFuX3J.js} +2 -2
  43. package/dist/{card-jzUQK0EQ.js.map → card-BvCFuX3J.js.map} +1 -1
  44. package/dist/{card-BjUgRzFh.cjs → card-CTotavhH.cjs} +1 -1
  45. package/dist/{card-BjUgRzFh.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-rskgUBxQ.cjs → checkbox-By4fFmjt.cjs} +1 -1
  49. package/dist/{checkbox-rskgUBxQ.cjs.map → checkbox-By4fFmjt.cjs.map} +1 -1
  50. package/dist/{checkbox-CfCm1vGN.js → checkbox-GPsdCUbs.js} +1 -1
  51. package/dist/{checkbox-CfCm1vGN.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-Dfim_tQv.js → chips-27umqnat.js} +4 -4
  55. package/dist/{chips-Dfim_tQv.js.map → chips-27umqnat.js.map} +1 -1
  56. package/dist/{chips-BiNZKu0J.cjs → chips-BZf9sGA8.cjs} +1 -1
  57. package/dist/{chips-BiNZKu0J.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-em7OwhlK.cjs → date-range-BJnLWCRF.cjs} +1 -1
  69. package/dist/{date-range-em7OwhlK.cjs.map → date-range-BJnLWCRF.cjs.map} +1 -1
  70. package/dist/{date-range-inline-DYeqoBIO.cjs → date-range-inline-B6uKUliV.cjs} +1 -1
  71. package/dist/{date-range-inline-DYeqoBIO.cjs.map → date-range-inline-B6uKUliV.cjs.map} +1 -1
  72. package/dist/{date-range-inline-BfUL8_vX.js → date-range-inline-BNbbRfIA.js} +1 -1
  73. package/dist/{date-range-inline-BfUL8_vX.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-B8zoj6Cj.js → date-range-wDVHcr0u.js} +2 -2
  77. package/dist/{date-range-B8zoj6Cj.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-D246xN83.js → details-Ckxpwacj.js} +4 -4
  83. package/dist/{details-D246xN83.js.map → details-Ckxpwacj.js.map} +1 -1
  84. package/dist/{details-CNM1tuma.cjs → details-DNrWIes6.cjs} +1 -1
  85. package/dist/{details-CNM1tuma.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-CbIp1je9.js → divider-BzcZGo4S.js} +1 -1
  101. package/dist/{divider-CbIp1je9.js.map → divider-BzcZGo4S.js.map} +1 -1
  102. package/dist/{divider-DaKsGNW-.cjs → divider-Cde33ivs.cjs} +1 -1
  103. package/dist/{divider-DaKsGNW-.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-DRkiO4vw.js → expand-DI144OzN.js} +3 -3
  109. package/dist/{expand-DRkiO4vw.js.map → expand-DI144OzN.js.map} +1 -1
  110. package/dist/{expand-CQDm3BF3.cjs → expand-Db4V0jj-.cjs} +1 -1
  111. package/dist/{expand-CQDm3BF3.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-5O26zNRh.cjs → float--RScf9BZ.cjs} +1 -1
  115. package/dist/{float-5O26zNRh.cjs.map → float--RScf9BZ.cjs.map} +1 -1
  116. package/dist/{float-CZtu8FnO.js → float-DIyzy1c2.js} +1 -1
  117. package/dist/{float-CZtu8FnO.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-B90CMeqs.cjs → form-DWNpOsIU.cjs} +1 -1
  121. package/dist/{form-B90CMeqs.cjs.map → form-DWNpOsIU.cjs.map} +1 -1
  122. package/dist/{form-CE6Gwz4r.js → form-RtXH8UHQ.js} +8 -8
  123. package/dist/{form-CE6Gwz4r.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-D98csbEo.cjs → iframe-B1XWRaLC.cjs} +1 -1
  137. package/dist/{iframe-D98csbEo.cjs.map → iframe-B1XWRaLC.cjs.map} +1 -1
  138. package/dist/{iframe-C3PMj1MD.js → iframe-BlHK0cjy.js} +1 -1
  139. package/dist/{iframe-C3PMj1MD.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-_y92Pzon.cjs → input-C-_XU9AX.cjs} +1 -1
  145. package/dist/{input-_y92Pzon.cjs.map → input-C-_XU9AX.cjs.map} +1 -1
  146. package/dist/{input-CCOkeeVM.js → input-CiGa8Dkl.js} +1 -1
  147. package/dist/{input-CCOkeeVM.js.map → input-CiGa8Dkl.js.map} +1 -1
  148. package/dist/{input-chip-CR66MWml.cjs → input-chip-5aYnuRZ_.cjs} +1 -1
  149. package/dist/{input-chip-CR66MWml.cjs.map → input-chip-5aYnuRZ_.cjs.map} +1 -1
  150. package/dist/{input-chip-Bzwr5-XL.js → input-chip-l--zCMGR.js} +1 -1
  151. package/dist/{input-chip-Bzwr5-XL.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 +1 -1
  155. package/dist/json.js +2 -2
  156. package/dist/kbd.cjs +1 -1
  157. package/dist/kbd.js +1 -1
  158. package/dist/{layout-Dq2oeOTS.js → layout-DSAjo92m.js} +1 -1
  159. package/dist/{layout-Dq2oeOTS.js.map → layout-DSAjo92m.js.map} +1 -1
  160. package/dist/{layout-BbCIfIgo.cjs → layout-eXb9wjDh.cjs} +1 -1
  161. package/dist/{layout-BbCIfIgo.cjs.map → layout-eXb9wjDh.cjs.map} +1 -1
  162. package/dist/layout.cjs +1 -1
  163. package/dist/layout.js +1 -1
  164. package/dist/{lightbox-Bk3ovcVu.cjs → lightbox-CfRDkeeb.cjs} +2 -2
  165. package/dist/{lightbox-Bk3ovcVu.cjs.map → lightbox-CfRDkeeb.cjs.map} +1 -1
  166. package/dist/{lightbox-Dl--fEbP.js → lightbox-D9oiu1Nv.js} +2 -2
  167. package/dist/{lightbox-Dl--fEbP.js.map → lightbox-D9oiu1Nv.js.map} +1 -1
  168. package/dist/lightbox.cjs +1 -1
  169. package/dist/lightbox.js +1 -1
  170. package/dist/{list-B3WI_Nfs.js → list-BOlRka4v.js} +1 -1
  171. package/dist/{list-B3WI_Nfs.js.map → list-BOlRka4v.js.map} +1 -1
  172. package/dist/{list-DWngbP2X.cjs → list-CDJi3_Ut.cjs} +1 -1
  173. package/dist/{list-DWngbP2X.cjs.map → list-CDJi3_Ut.cjs.map} +1 -1
  174. package/dist/list.cjs +1 -1
  175. package/dist/list.js +1 -1
  176. package/dist/{magnetic-Bgh7aHHI.cjs → magnetic-D-ph029G.cjs} +1 -1
  177. package/dist/{magnetic-Bgh7aHHI.cjs.map → magnetic-D-ph029G.cjs.map} +1 -1
  178. package/dist/{magnetic-DxvoEz8_.js → magnetic-mHXl54Z8.js} +1 -1
  179. package/dist/{magnetic-DxvoEz8_.js.map → magnetic-mHXl54Z8.js.map} +1 -1
  180. package/dist/{menu-CdYjxJqm.cjs → menu-CJaDL2cd.cjs} +1 -1
  181. package/dist/{menu-CdYjxJqm.cjs.map → menu-CJaDL2cd.cjs.map} +1 -1
  182. package/dist/{menu-IDhVp6zm.js → menu-XyrLmCi_.js} +2 -2
  183. package/dist/{menu-IDhVp6zm.js.map → menu-XyrLmCi_.js.map} +1 -1
  184. package/dist/menu.cjs +1 -1
  185. package/dist/menu.js +1 -1
  186. package/dist/mixins-CsYsIJOI.cjs +254 -0
  187. package/dist/mixins-CsYsIJOI.cjs.map +1 -0
  188. package/dist/mixins-DySzfmal.js +642 -0
  189. package/dist/mixins-DySzfmal.js.map +1 -0
  190. package/dist/mixins.cjs +1 -1
  191. package/dist/mixins.js +2 -2
  192. package/dist/nav-drawer.cjs +1 -1
  193. package/dist/nav-drawer.js +1 -1
  194. package/dist/navigation-bar.cjs +1 -1
  195. package/dist/navigation-bar.js +1 -1
  196. package/dist/navigation-rail.cjs +5 -9
  197. package/dist/navigation-rail.cjs.map +1 -1
  198. package/dist/navigation-rail.js +5 -11
  199. package/dist/navigation-rail.js.map +1 -1
  200. package/dist/{notification-CllYkvlR.js → notification-CHrEY4u8.js} +2 -2
  201. package/dist/{notification-CllYkvlR.js.map → notification-CHrEY4u8.js.map} +1 -1
  202. package/dist/{notification-B3wVUC8l.cjs → notification-DKp4tjaB.cjs} +1 -1
  203. package/dist/{notification-B3wVUC8l.cjs.map → notification-DKp4tjaB.cjs.map} +1 -1
  204. package/dist/notification.cjs +1 -1
  205. package/dist/notification.js +1 -1
  206. package/dist/{option-CPOL0nHL.js → option-Vpy4UQ-D.js} +1 -1
  207. package/dist/{option-CPOL0nHL.js.map → option-Vpy4UQ-D.js.map} +1 -1
  208. package/dist/{option-cRsdshy8.cjs → option-nRk4MuXH.cjs} +1 -1
  209. package/dist/{option-cRsdshy8.cjs.map → option-nRk4MuXH.cjs.map} +1 -1
  210. package/dist/option.cjs +1 -1
  211. package/dist/option.js +1 -1
  212. package/dist/{overlay-BnTvnNDc.cjs → overlay-HNrWZ4sB.cjs} +1 -1
  213. package/dist/{overlay-BnTvnNDc.cjs.map → overlay-HNrWZ4sB.cjs.map} +1 -1
  214. package/dist/{overlay-DJ-vlwtR.js → overlay-jlkcrt8F.js} +5 -5
  215. package/dist/{overlay-DJ-vlwtR.js.map → overlay-jlkcrt8F.js.map} +1 -1
  216. package/dist/{overlay-stack-Dk0xETTy.cjs.map → overlay-stack-Bdr9lOqi.cjs.map} +1 -1
  217. package/dist/{overlay-stack-BR4iYivO.js.map → overlay-stack-D2rgxQLh.js.map} +1 -1
  218. package/dist/overlay.cjs +1 -1
  219. package/dist/{overlay.confirm-body-CQ-FwySO.cjs → overlay.confirm-body-B8dFI3cj.cjs} +1 -1
  220. package/dist/{overlay.confirm-body-CQ-FwySO.cjs.map → overlay.confirm-body-B8dFI3cj.cjs.map} +1 -1
  221. package/dist/{overlay.confirm-body-DEb9xw5N.js → overlay.confirm-body-CYShkjI6.js} +1 -1
  222. package/dist/{overlay.confirm-body-DEb9xw5N.js.map → overlay.confirm-body-CYShkjI6.js.map} +1 -1
  223. package/dist/overlay.js +3 -3
  224. package/dist/{overlay.service-CKBCIP2f.cjs → overlay.service-BTPn7Uv7.cjs} +1 -1
  225. package/dist/{overlay.service-CKBCIP2f.cjs.map → overlay.service-BTPn7Uv7.cjs.map} +1 -1
  226. package/dist/{overlay.service-XM1YHkTk.js → overlay.service-BqhhxVJp.js} +2 -2
  227. package/dist/{overlay.service-XM1YHkTk.js.map → overlay.service-BqhhxVJp.js.map} +1 -1
  228. package/dist/{progress-CnMPp-9a.js → progress-8Bn88GK_.js} +1 -1
  229. package/dist/{progress-CnMPp-9a.js.map → progress-8Bn88GK_.js.map} +1 -1
  230. package/dist/{progress-CcfLfHOE.cjs → progress-CAp_4jtq.cjs} +1 -1
  231. package/dist/{progress-CcfLfHOE.cjs.map → progress-CAp_4jtq.cjs.map} +1 -1
  232. package/dist/progress.cjs +1 -1
  233. package/dist/progress.js +1 -1
  234. package/dist/{radio-group-D97hflrE.cjs → radio-group-CN44mAoc.cjs} +1 -1
  235. package/dist/{radio-group-D97hflrE.cjs.map → radio-group-CN44mAoc.cjs.map} +1 -1
  236. package/dist/{radio-group-BUJgfQFi.js → radio-group-GNHA7qJR.js} +1 -1
  237. package/dist/{radio-group-BUJgfQFi.js.map → radio-group-GNHA7qJR.js.map} +1 -1
  238. package/dist/radio-group.cjs +1 -1
  239. package/dist/radio-group.js +1 -1
  240. package/dist/range.cjs +1 -1
  241. package/dist/range.js +1 -1
  242. package/dist/{reduced-motion-D7LqTUMn.js.map → reduced-motion-D-L12p7G.js.map} +1 -1
  243. package/dist/{reduced-motion-Dzfp_w5x.cjs.map → reduced-motion-Ds-HjMzn.cjs.map} +1 -1
  244. package/dist/{rxjs-utils-BK8VMe3K.js.map → rxjs-utils-BXpvHN4-.js.map} +1 -1
  245. package/dist/{rxjs-utils-DhOKenkS.cjs.map → rxjs-utils-CaC-tdot.cjs.map} +1 -1
  246. package/dist/rxjs-utils.cjs +1 -1
  247. package/dist/rxjs-utils.js +1 -1
  248. package/dist/{select-BWEh5nRM.js → select-BnuXRHS4.js} +3 -3
  249. package/dist/{select-BWEh5nRM.js.map → select-BnuXRHS4.js.map} +1 -1
  250. package/dist/{select-Cv5Oev6d.cjs → select-DZNns5Pa.cjs} +2 -2
  251. package/dist/{select-Cv5Oev6d.cjs.map → select-DZNns5Pa.cjs.map} +1 -1
  252. package/dist/select.cjs +1 -1
  253. package/dist/select.js +1 -1
  254. package/dist/skeleton.cjs +1 -1
  255. package/dist/skeleton.js +1 -1
  256. package/dist/skills/INDEX.md +2 -1
  257. package/dist/skills/SKILL.md +33 -23
  258. package/dist/skills/area.md +5 -4
  259. package/dist/skills/connectivity.md +1 -3
  260. package/dist/skills/directives.md +36 -0
  261. package/dist/skills/icons.md +95 -31
  262. package/dist/skills/layout.md +36 -53
  263. package/dist/skills/mixins.md +26 -5
  264. package/dist/skills/schmancy/INDEX.md +2 -1
  265. package/dist/skills/schmancy/SKILL.md +33 -23
  266. package/dist/skills/schmancy/area.md +5 -4
  267. package/dist/skills/schmancy/connectivity.md +1 -3
  268. package/dist/skills/schmancy/directives.md +36 -0
  269. package/dist/skills/schmancy/icons.md +95 -31
  270. package/dist/skills/schmancy/layout.md +36 -53
  271. package/dist/skills/schmancy/mixins.md +26 -5
  272. package/dist/slider.cjs +1 -1
  273. package/dist/slider.js +1 -1
  274. package/dist/{splash-screen-B6w7X2z9.js → splash-screen-CUP_elaT.js} +1 -1
  275. package/dist/{splash-screen-B6w7X2z9.js.map → splash-screen-CUP_elaT.js.map} +1 -1
  276. package/dist/{splash-screen-DFtxtO2D.cjs → splash-screen-DeoPRrOu.cjs} +1 -1
  277. package/dist/{splash-screen-DFtxtO2D.cjs.map → splash-screen-DeoPRrOu.cjs.map} +1 -1
  278. package/dist/splash-screen.cjs +1 -1
  279. package/dist/splash-screen.js +1 -1
  280. package/dist/{src-D_NK-vMA.js → src-B1VkLX3l.js} +153 -153
  281. package/dist/{src-D_NK-vMA.js.map → src-B1VkLX3l.js.map} +1 -1
  282. package/dist/{src-Asw6A018.cjs → src-DQ4wr0qq.cjs} +13 -13
  283. package/dist/{src-Asw6A018.cjs.map → src-DQ4wr0qq.cjs.map} +1 -1
  284. package/dist/steps.cjs +1 -1
  285. package/dist/steps.js +1 -1
  286. package/dist/{surface-B94ka2LY.cjs → surface-LkaZQXZn.cjs} +1 -1
  287. package/dist/{surface-B94ka2LY.cjs.map → surface-LkaZQXZn.cjs.map} +1 -1
  288. package/dist/{surface-ctBcRGSZ.js → surface-hOvkrjGN.js} +1 -1
  289. package/dist/{surface-ctBcRGSZ.js.map → surface-hOvkrjGN.js.map} +1 -1
  290. package/dist/surface.cjs +1 -1
  291. package/dist/surface.js +1 -1
  292. package/dist/switch.cjs +1 -1
  293. package/dist/switch.js +1 -1
  294. package/dist/table.cjs +1 -1
  295. package/dist/table.js +1 -1
  296. package/dist/{tabs-CrMx5z_y.js → tabs-CfwIHhHo.js} +1 -1
  297. package/dist/{tabs-CrMx5z_y.js.map → tabs-CfwIHhHo.js.map} +1 -1
  298. package/dist/{tabs-B7kaZIom.cjs → tabs-bplzstz6.cjs} +1 -1
  299. package/dist/{tabs-B7kaZIom.cjs.map → tabs-bplzstz6.cjs.map} +1 -1
  300. package/dist/tabs.cjs +1 -1
  301. package/dist/tabs.js +1 -1
  302. package/dist/teleport.cjs +1 -1
  303. package/dist/teleport.js +1 -1
  304. package/dist/{textarea-DeHFl80i.js → textarea-C1A5xuw9.js} +1 -1
  305. package/dist/{textarea-DeHFl80i.js.map → textarea-C1A5xuw9.js.map} +1 -1
  306. package/dist/{textarea-D1crj8JD.cjs → textarea-hrDp5gQq.cjs} +1 -1
  307. package/dist/{textarea-D1crj8JD.cjs.map → textarea-hrDp5gQq.cjs.map} +1 -1
  308. package/dist/textarea.cjs +1 -1
  309. package/dist/textarea.js +1 -1
  310. package/dist/{theme-C7Yo33nh.js → theme-BniFOMEo.js} +3 -3
  311. package/dist/{theme-C7Yo33nh.js.map → theme-BniFOMEo.js.map} +1 -1
  312. package/dist/{theme-wE2N7Yu9.cjs → theme-DmR6PKV8.cjs} +2 -2
  313. package/dist/{theme-wE2N7Yu9.cjs.map → theme-DmR6PKV8.cjs.map} +1 -1
  314. package/dist/{theme-button-Cpc_hs2O.js → theme-button--ruZIb0T.js} +1 -1
  315. package/dist/{theme-button-Cpc_hs2O.js.map → theme-button--ruZIb0T.js.map} +1 -1
  316. package/dist/{theme-button-CXSM5We4.cjs → theme-button-a0LgZ7hQ.cjs} +1 -1
  317. package/dist/{theme-button-CXSM5We4.cjs.map → theme-button-a0LgZ7hQ.cjs.map} +1 -1
  318. package/dist/theme-button.cjs +1 -1
  319. package/dist/theme-button.js +1 -1
  320. package/dist/theme.cjs +1 -1
  321. package/dist/{theme.interface-D4NeufQA.cjs.map → theme.interface-B5xjEk74.cjs.map} +1 -1
  322. package/dist/{theme.interface-C2XNgsLB.js.map → theme.interface-DVEw3s8m.js.map} +1 -1
  323. package/dist/theme.js +4 -4
  324. package/dist/{theme.service-CSzNkqBB.js.map → theme.service-Bh08uOSJ.js.map} +1 -1
  325. package/dist/{theme.service-CnFUmUpc.cjs.map → theme.service-Y-e8b331.cjs.map} +1 -1
  326. package/dist/tree.cjs +1 -1
  327. package/dist/tree.js +1 -1
  328. package/dist/typography.cjs +1 -1
  329. package/dist/typography.js +1 -1
  330. package/dist/{utils-Cxg0Kfy5.js → utils-578eFTx4.js} +1 -1
  331. package/dist/{utils-Cxg0Kfy5.js.map → utils-578eFTx4.js.map} +1 -1
  332. package/dist/{utils-aCJYAGUr.cjs → utils-CVWUrECT.cjs} +1 -1
  333. package/dist/{utils-aCJYAGUr.cjs.map → utils-CVWUrECT.cjs.map} +1 -1
  334. package/dist/utils.cjs +1 -1
  335. package/dist/utils.js +2 -2
  336. package/dist/visually-hidden.cjs +1 -1
  337. package/dist/visually-hidden.js +1 -1
  338. package/dist/{window-JtkeHoxS.js → window-BT9JecWy.js} +5 -5
  339. package/dist/{window-JtkeHoxS.js.map → window-BT9JecWy.js.map} +1 -1
  340. package/dist/{window-Ck_zS4bb.cjs → window-Bp7zWZpu.cjs} +1 -1
  341. package/dist/{window-Ck_zS4bb.cjs.map → window-Bp7zWZpu.cjs.map} +1 -1
  342. package/dist/window.cjs +1 -1
  343. package/dist/window.js +1 -1
  344. package/package.json +1 -1
  345. package/skills/schmancy/INDEX.md +2 -1
  346. package/skills/schmancy/SKILL.md +33 -23
  347. package/skills/schmancy/area.md +5 -4
  348. package/skills/schmancy/connectivity.md +1 -3
  349. package/skills/schmancy/directives.md +36 -0
  350. package/skills/schmancy/icons.md +95 -31
  351. package/skills/schmancy/layout.md +36 -53
  352. package/skills/schmancy/mixins.md +26 -5
  353. package/src/directives/ai-badge.ts +95 -0
  354. package/src/directives/art/art.directive.ts +228 -0
  355. package/src/directives/art/effects/error.ts +192 -0
  356. package/src/directives/art/effects/funkhaus.ts +121 -0
  357. package/src/directives/art/effects/howl.ts +203 -0
  358. package/src/directives/art/effects/samwa.ts +228 -0
  359. package/src/directives/art/effects/snow.ts +207 -0
  360. package/src/directives/art/effects/starfield.ts +107 -0
  361. package/src/directives/art/index.ts +2 -0
  362. package/src/directives/art/particle-pool.ts +40 -0
  363. package/src/directives/art/types.ts +129 -0
  364. package/src/directives/art/utils.ts +35 -0
  365. package/src/directives/battery.ts +1014 -0
  366. package/src/directives/beta.ts +44 -0
  367. package/src/directives/fill.ts +32 -60
  368. package/src/directives/fyi.ts +551 -0
  369. package/src/directives/hummingbird.ts +1712 -0
  370. package/src/directives/index.ts +9 -0
  371. package/src/directives/missed-punch.ts +407 -0
  372. package/src/directives/urgent.ts +660 -0
  373. package/src/directives/working-snake.ts +294 -0
  374. package/src/icons/icon.ts +53 -30
  375. package/src/navigation-rail/navigation-rail-item.ts +7 -12
  376. package/src/navigation-rail/navigation-rail.ts +0 -2
  377. package/types/mixins/SchmancyElement.d.ts +31 -0
  378. package/types/src/directives/ai-badge.d.ts +15 -0
  379. package/types/src/directives/art/art.directive.d.ts +19 -0
  380. package/types/src/directives/art/effects/error.d.ts +7 -0
  381. package/types/src/directives/art/effects/funkhaus.d.ts +7 -0
  382. package/types/src/directives/art/effects/howl.d.ts +7 -0
  383. package/types/src/directives/art/effects/samwa.d.ts +7 -0
  384. package/types/src/directives/art/effects/snow.d.ts +7 -0
  385. package/types/src/directives/art/effects/starfield.d.ts +10 -0
  386. package/types/src/directives/art/index.d.ts +2 -0
  387. package/types/src/directives/art/particle-pool.d.ts +16 -0
  388. package/types/src/directives/art/types.d.ts +126 -0
  389. package/types/src/directives/art/utils.d.ts +5 -0
  390. package/types/src/directives/battery.d.ts +96 -0
  391. package/types/src/directives/beta.d.ts +33 -0
  392. package/types/src/directives/fill.d.ts +4 -11
  393. package/types/src/directives/fyi.d.ts +76 -0
  394. package/types/src/directives/hummingbird.d.ts +180 -0
  395. package/types/src/directives/index.d.ts +9 -0
  396. package/types/src/directives/missed-punch.d.ts +28 -0
  397. package/types/src/directives/urgent.d.ts +88 -0
  398. package/types/src/directives/working-snake.d.ts +46 -0
  399. package/types/src/icons/icon.d.ts +22 -0
  400. package/dist/directives.cjs.map +0 -1
  401. package/dist/directives.js.map +0 -1
  402. package/dist/discovery.cjs.map +0 -1
  403. package/dist/discovery.js.map +0 -1
  404. package/dist/icons-B7ppo07M.cjs +0 -33
  405. package/dist/icons-B7ppo07M.cjs.map +0 -1
  406. package/dist/icons-CGhozJ5v.js +0 -48
  407. package/dist/icons-CGhozJ5v.js.map +0 -1
  408. package/dist/mixins-BPUR4Kc4.cjs +0 -254
  409. package/dist/mixins-BPUR4Kc4.cjs.map +0 -1
  410. package/dist/mixins-C42OILRS.js +0 -636
  411. package/dist/mixins-C42OILRS.js.map +0 -1
  412. package/dist/skills/page.md +0 -84
  413. package/dist/skills/schmancy/page.md +0 -84
  414. package/skills/schmancy/page.md +0 -84
  415. /package/dist/{hashContent-dJrI-9sc.js → hashContent-Dgmzc32o.js} +0 -0
  416. /package/dist/{hashContent-Ck6laKlk.cjs → hashContent-Dh1VzIAb.cjs} +0 -0
  417. /package/dist/{overlay-stack-Dk0xETTy.cjs → overlay-stack-Bdr9lOqi.cjs} +0 -0
  418. /package/dist/{overlay-stack-BR4iYivO.js → overlay-stack-D2rgxQLh.js} +0 -0
  419. /package/dist/{reduced-motion-D7LqTUMn.js → reduced-motion-D-L12p7G.js} +0 -0
  420. /package/dist/{reduced-motion-Dzfp_w5x.cjs → reduced-motion-Ds-HjMzn.cjs} +0 -0
  421. /package/dist/{rxjs-utils-BK8VMe3K.js → rxjs-utils-BXpvHN4-.js} +0 -0
  422. /package/dist/{rxjs-utils-DhOKenkS.cjs → rxjs-utils-CaC-tdot.cjs} +0 -0
  423. /package/dist/{theme.interface-D4NeufQA.cjs → theme.interface-B5xjEk74.cjs} +0 -0
  424. /package/dist/{theme.interface-C2XNgsLB.js → theme.interface-DVEw3s8m.js} +0 -0
  425. /package/dist/{theme.service-CSzNkqBB.js → theme.service-Bh08uOSJ.js} +0 -0
  426. /package/dist/{theme.service-CnFUmUpc.cjs → theme.service-Y-e8b331.cjs} +0 -0
@@ -5,11 +5,47 @@
5
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
6
 
7
7
  ```typescript
8
+ import { fill, overflowWithin } from '@mhmo91/schmancy/directives'
8
9
  import { magnetic, cursorGlow, gravity, reveal } from '@mhmo91/schmancy/directives'
9
10
  ```
10
11
 
11
12
  ---
12
13
 
14
+ ## Layout (2 directives — use these for every app shell)
15
+
16
+ > These replace the deleted `<schmancy-page>` primitive. See `layout.md` for the full paradigm.
17
+
18
+ ### `fill()` — Viewport-anchor a container
19
+
20
+ Measures the element's position against `visualViewport` and applies an exact `height` (and `width`) in pixels — cascade-independent. Tracks `visualViewport` resize/scroll, orientation change, iOS soft-keyboard (via `focusout`), and `theme.bottomOffset$` for safe-area padding.
21
+
22
+ ```html
23
+ <!-- Root area — anchored to the full viewport -->
24
+ <schmancy-area ${fill()} name="root" .default=${...}>...</schmancy-area>
25
+
26
+ <!-- Custom element shell — fill() bypasses display:inline collapse -->
27
+ <my-shell class="grid grid-cols-[auto_1fr]" ${fill()}>...</my-shell>
28
+ ```
29
+
30
+ **Sets:** `height: Npx`, `width: Npx`, `overflow: hidden`, `min-height/width: 0`, `box-sizing: border-box`, `padding-bottom` (safe area).
31
+ **Does NOT set:** `display`, `grid-template-*` — put Tailwind layout classes on the same element.
32
+
33
+ ### `overflowWithin()` — Contained scroll region
34
+
35
+ Turns a grid cell or flex child into a scroll container with `overscroll-behavior: contain`.
36
+
37
+ ```html
38
+ <div ${overflowWithin()} class="grid grid-rows-[auto_1fr] min-h-0">
39
+ <header>...</header>
40
+ <schmancy-area name="app">...</schmancy-area>
41
+ </div>
42
+ ```
43
+
44
+ **Sets:** `overflow-y/x: auto`, `overscroll-behavior: contain`, `scroll-behavior: smooth`, `min-height/width: 0`, `box-sizing: border-box`.
45
+ Dispatches debounced `schmancy:scroll` event; listens for `@schmancy:scrollTo` command.
46
+
47
+ ---
48
+
13
49
  ## Physics & Interaction (6 directives)
14
50
 
15
51
  ### `magnetic` — Elements lean toward the cursor
@@ -1,44 +1,108 @@
1
1
  # schmancy-icon
2
2
 
3
- > Material Symbols icon with configurable fill, weight, grade, variant, and size tokens.
3
+ Renders a Material Symbol as an inline SVG. Path data is supplied at build
4
+ time by the `schmancy-icons` Vite plugin — no font file, no network request,
5
+ works offline from first byte.
4
6
 
5
7
  ## Usage
8
+
9
+ ```html
10
+ <schmancy-icon>home</schmancy-icon>
11
+ <schmancy-icon>delete</schmancy-icon>
12
+ ```
13
+
14
+ Slot text IS the icon name (Material Symbols ligature name). No properties needed.
15
+
16
+ ## Sizing
17
+
18
+ Size is set with Tailwind `text-*` on the host. Default is `24px` (`text-2xl`).
19
+ `width` and `height` track `font-size` via `1em`.
20
+
6
21
  ```html
7
- <schmancy-icon>settings</schmancy-icon>
22
+ <schmancy-icon class="text-base">close</schmancy-icon> <!-- 16px -->
23
+ <schmancy-icon class="text-xl">search</schmancy-icon> <!-- 20px -->
24
+ <schmancy-icon class="text-2xl">home</schmancy-icon> <!-- 24px (default) -->
25
+ <schmancy-icon class="text-4xl">check_circle</schmancy-icon> <!-- 36px -->
8
26
  ```
9
27
 
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
28
+ ## Color
29
+
30
+ Inherits `currentColor`. Override with Tailwind color utilities:
31
+
32
+ ```html
33
+ <schmancy-icon class="text-primary-default">star</schmancy-icon>
34
+ <schmancy-icon class="opacity-50">info</schmancy-icon>
35
+ ```
36
+
37
+ ## Fill variant (active states)
38
+
39
+ Append `-fill` to the icon name for the filled variant. No CSS animation —
40
+ a clean swap between outlined and filled symbols:
41
+
30
42
  ```html
31
- <!-- Filled icon -->
32
- <schmancy-icon .fill=${1}>favorite</schmancy-icon>
43
+ <!-- Static filled -->
44
+ <schmancy-icon>favorite-fill</schmancy-icon>
33
45
 
34
- <!-- Large rounded icon -->
35
- <schmancy-icon size="lg" variant="rounded">home</schmancy-icon>
46
+ <!-- Dynamic active state -->
47
+ <schmancy-icon>${active ? 'home-fill' : 'home'}</schmancy-icon>
48
+ ```
49
+
50
+ The plugin auto-includes `-fill` variants for every detected base icon.
51
+
52
+ ## Vite plugin setup (web workspace)
53
+
54
+ The plugin scans all `.ts` source files at build start and injects
55
+ `window.__siIcons = { name: 'svgPathData', ... }` inline in `<head>`.
56
+
57
+ ```typescript
58
+ // web/vite.config.ts
59
+ import { schmancyIcons } from './plugins/schmancy-icons.ts'
60
+
61
+ export default defineConfig({
62
+ plugins: [
63
+ schmancyIcons({
64
+ // Icon names used in runtime variables (not statically detectable).
65
+ // Type them as SchmancyIconName in consuming code.
66
+ additional: ['widgets', 'inventory_2', 'description'],
67
+ }),
68
+ ],
69
+ })
70
+ ```
36
71
 
37
- <!-- Custom size -->
38
- <schmancy-icon size="48px" .weight=${300}>search</schmancy-icon>
72
+ ### Adding icons for dynamic usage
39
73
 
40
- <!-- Translation-safe (use icon property instead of slot) -->
41
- <schmancy-icon icon="delete"></schmancy-icon>
74
+ Any icon name carried in a variable at runtime must be declared in `additional`.
75
+ TypeScript enforcement: the plugin generates `src/types/icon-name.d.ts` with
76
+ a `SchmancyIconName` union of every icon in the bundle. Type dynamic icon props
77
+ as `SchmancyIconName` to get compile-time coverage.
78
+
79
+ ```typescript
80
+ import type { SchmancyIconName } from './types/icon-name'
81
+
82
+ @property({ type: String }) icon: SchmancyIconName = 'home'
42
83
  ```
43
84
 
44
- Auto-loads Google Fonts on first use. Translation-protected via `translate="no"` and `notranslate` class.
85
+ ## What was removed
86
+
87
+ The following properties are **gone** — the component has no public API beyond
88
+ slot text content:
89
+
90
+ | Removed | Replacement |
91
+ |---------|-------------|
92
+ | `size="lg"` | `class="text-4xl"` (Tailwind) |
93
+ | `fill`, `weight`, `grade`, `variant` | n/a — use `-fill` suffix for filled, rest unsupported |
94
+ | `icon="name"` prop | slot text: `<schmancy-icon>name</schmancy-icon>` |
95
+ | Google Fonts auto-load | n/a — self-contained inline SVG |
96
+
97
+ ## How it works
98
+
99
+ 1. Vite plugin walks `web/src/**/*.ts`, extracts icon names from
100
+ `<schmancy-icon>name</schmancy-icon>` and `icon="name"` patterns.
101
+ 2. Reads `@material-symbols/svg-400/outlined/{name}.svg`, extracts the `d`
102
+ attribute from each `<path>`.
103
+ 3. Injects `<script>window.__siIcons={...}</script>` before `</head>`.
104
+ 4. `schmancy-icon.connectedCallback` reads `this.textContent`, looks up
105
+ `window.__siIcons[name]`, and renders `<svg><path d="..."/></svg>` inside
106
+ its shadow DOM.
107
+
108
+ No `<use>` references — those can't cross shadow DOM boundaries.
@@ -1,63 +1,46 @@
1
- # Schmancy Layout
1
+ # Layout Directives
2
2
 
3
- > Layout primitives: `schmancy-grid`, `schmancy-flex`, `schmancy-scroll`, plus `sch-grid` / `sch-flex` v2 variants.
3
+ ```typescript
4
+ import { fill, overflowWithin } from '@mhmo91/schmancy/directives'
5
+ ```
4
6
 
5
- > **Prefer Tailwind classes directly** for layout in new code. These components exist for quick composition and design-token consistency (`gap="sm|md|lg"` maps to theme spacing).
7
+ ## `fill()` viewport-anchor an element
6
8
 
7
- ## schmancy-grid
8
- ```html
9
- <schmancy-grid cols="1fr 2fr 1fr" gap="md" align="center">
10
- <div>Left</div><div>Center</div><div>Right</div>
11
- </schmancy-grid>
12
- ```
9
+ Measures against `visualViewport` and writes exact `height`/`width` in px. Cascade-independent — works even when parent custom elements default to `display: inline`. Tracks iOS keyboard, orientation change, and `theme.bottomOffset$`.
13
10
 
14
- | Property | Type | Default | Description |
15
- |----------|------|---------|-------------|
16
- | `flow` | `'row' \| 'col' \| 'dense' \| 'row-dense' \| 'col-dense'` | `'row'` | Grid auto-flow |
17
- | `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'stretch'` | Item alignment |
18
- | `justify` | `'start' \| 'center' \| 'end' \| 'stretch'` | `'stretch'` | Item justification |
19
- | `content` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'around' \| 'evenly' \| 'between'` | — | Align-content |
20
- | `gap` | `'none' \| 'xs' \| 'sm' \| 'md' \| 'lg'` | `'none'` | Grid gap |
21
- | `cols` | string | — | grid-template-columns (e.g. `"1fr 2fr"`) |
22
- | `rows` | string | — | grid-template-rows |
23
- | `rcols` | object | — | Responsive cols: `{ sm: '1fr', md: '1fr 1fr', lg: '1fr 2fr 1fr' }` |
24
- | `wrap` | boolean | `false` | Grid auto-wrap |
25
-
26
- ## schmancy-flex
27
- ```html
28
- <schmancy-flex flow="row" justify="between" align="center" gap="md">
29
- <div>Logo</div><div>Nav</div>
30
- </schmancy-flex>
31
- ```
11
+ Sets: `height: Npx`, `width: Npx`, `overflow: hidden`, `min-h/w: 0`, `box-sizing: border-box`, `padding-bottom` (safe area).
12
+ Does **not** set `display` or `grid-template-*` — use Tailwind classes on the same element.
32
13
 
33
- | Property | Type | Default |
34
- |----------|------|---------|
35
- | `flow` | `'row' \| 'row-reverse' \| 'col' \| 'col-reverse'` | `'col'` |
36
- | `wrap` | `'wrap' \| 'nowrap' \| 'wrap-reverse'` | `'wrap'` |
37
- | `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'start'` |
38
- | `justify` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'between'` | `'start'` |
39
- | `gap` | `'none' \| 'sm' \| 'md' \| 'lg'` | `'none'` |
40
-
41
- ## schmancy-scroll
42
- ```html
43
- <schmancy-scroll hide direction="vertical" name="main">
44
- <!-- long content -->
45
- </schmancy-scroll>
46
- ```
14
+ ## `overflowWithin()` contained scroll region
47
15
 
48
- | Property | Type | Default | Description |
49
- |----------|------|---------|-------------|
50
- | `hide` | boolean | `false` | Hide scrollbar in supported browsers |
51
- | `direction` | `'vertical' \| 'horizontal' \| 'both'` | `'both'` | Scroll axes |
52
- | `name` | string | — | Identifier for global scroll events |
53
- | `debounce` | number | — | Debounce time in ms for scroll events |
16
+ Sets: `overflow: auto`, `overscroll-behavior: contain`, `scroll-behavior: smooth`, `min-h/w: 0`, `box-sizing: border-box`.
54
17
 
55
- Smooth scroll-behavior, overscroll containment, and support for flex-shrink sizing.
18
+ ## Canonical shell
56
19
 
57
- ## sch-grid / sch-flex (v2)
20
+ ```typescript
21
+ // app-shell.view.ts
22
+ html`<schmancy-area ${fill()} name="root" .default=${...}>...</schmancy-area>`
23
+
24
+ // app-home.view.ts
25
+ html`
26
+ <my-shell class="grid grid-cols-[auto_1fr]" ${fill()}>
27
+ <app-rail></app-rail>
28
+ <div ${overflowWithin()} class="grid grid-rows-[auto_1fr] min-h-0">
29
+ <tree-picker></tree-picker>
30
+ <schmancy-area name="app" .default=${...}>...</schmancy-area>
31
+ </div>
32
+ </my-shell>
33
+ `
34
+ ```
35
+
36
+ ```css
37
+ /* styles.css */
38
+ html, body { margin: 0; padding: 0; overflow: hidden; }
39
+ ```
58
40
 
59
- Reflected-attribute variants optimized for styling via CSS selectors. Same prop model as the classic components with a `sch-` prefix. Use when you need to target the layout from parent CSS without Tailwind.
41
+ ## Rules
60
42
 
61
- ## Notes
62
- - All layout components extend the base `Layout` class which exposes pass-through CSS properties (padding, margin, width, position, border, etc.).
63
- - Prefer Tailwind (`class="flex items-center gap-2"`) for new code these components remain for consistent theme-driven gaps and rapid prototyping.
43
+ - One `fill()` per shell level. Inner levels get `min-h-0` grid cells.
44
+ - `overflowWithin()` goes on the element that should scroll, not on `:host`.
45
+ - Do not write `h-full`, `w-full`, or `:host { height: 100% }` anywhere. `schmancy-area`'s `::slotted` rule sizes mounted views.
46
+ - `<schmancy-page>` is removed — `fill()` replaces it.
@@ -8,11 +8,10 @@ factory — composing `LitElement` + Tailwind injection + `BaseElement`
8
8
  ## Usage
9
9
 
10
10
  ```typescript
11
- import { SchmancyElement } from '@mhmo91/schmancy/mixins'
12
- import { customElement } from 'lit/decorators.js'
11
+ import { SchmancyElement, schmancyElement } from '@mhmo91/schmancy/mixins'
13
12
  import { css, html } from 'lit'
14
13
 
15
- @customElement('my-component')
14
+ @schmancyElement('my-component')
16
15
  class MyComponent extends SchmancyElement {
17
16
  static styles = [css`
18
17
  :host { display: block }
@@ -33,12 +32,34 @@ declare global {
33
32
  No styles? Just drop `static styles`:
34
33
 
35
34
  ```typescript
36
- @customElement('my-component')
35
+ @schmancyElement('my-component')
37
36
  class MyComponent extends SchmancyElement {
38
37
  render() { return html`<slot></slot>` }
39
38
  }
40
39
  ```
41
40
 
41
+ ### Why `@schmancyElement` instead of Lit's `@customElement`
42
+
43
+ `@schmancyElement` wraps the class's prototype methods with the active-host
44
+ tracker BEFORE calling `customElements.define`. Lit's `@customElement` only
45
+ calls `define` — the wrap then runs inside the `SchmancyElement` constructor,
46
+ which is too late: per the HTML spec, the browser captures lifecycle callback
47
+ references off the prototype at `define` time and invokes those cached
48
+ references for every connect / disconnect.
49
+
50
+ If you use plain `@customElement` and read state inside `connectedCallback`,
51
+ the active-host stack is empty, the read falls through to `document.activeElement`,
52
+ misses the enclosing `<schmancy-context>`, and silently resolves to the
53
+ module-scoped global instead of the isolated copy. The constructor-time wrap
54
+ still catches `render`, class methods, and inherited lifecycle methods on
55
+ ancestor prototypes (the browser's cached reference for those is the
56
+ ancestor's, which gets wrapped by an earlier sibling). But your subclass's
57
+ own `connectedCallback` / `disconnectedCallback` overrides fall through.
58
+ The symptom is silent: writes go to the wrong slot, reads return the wrong
59
+ value, and the form looks broken for no obvious reason.
60
+
61
+ `@schmancyElement` makes this impossible. Use it as the default.
62
+
42
63
  Tailwind is injected automatically — your `static styles` only declares
43
64
  component-local CSS.
44
65
 
@@ -99,7 +120,7 @@ Every SchmancyElement responds to `{its-tag}-where-are-you` events with
99
120
  ## Component skeleton
100
121
 
101
122
  ```typescript
102
- @customElement('my-component')
123
+ @schmancyElement('my-component')
103
124
  export class MyComponent extends SchmancyElement {
104
125
  static styles = [css`:host { display: block }`]
105
126
 
@@ -11,6 +11,7 @@ The framework pieces — touch before components.
11
11
  - [Mixins](./mixins.md) — `SchmancyElement` base class.
12
12
  - [Theme](./theme.md) — `<schmancy-theme>`, color scheme, CSS variables.
13
13
  - [Directives](./directives.md) — Lit directives for physics, effects, text, visibility, interaction.
14
+ - [Layout](./layout.md) — `fill()` + `overflowWithin()` directives for app-shell sizing (replaces `<schmancy-page>`).
14
15
  - [Animation](./animation.md) — Spring presets (`SPRING_SMOOTH`, etc.), `createAnimation`.
15
16
 
16
17
  ## Components by job
@@ -21,7 +22,7 @@ The framework pieces — touch before components.
21
22
  > Lab: [Map](../../lab/skills/map.md) · [Charts](../../lab/skills/charts.md) — install `@mhmo91/schmancy-lab`
22
23
 
23
24
  ### Surfaces & layout
24
- [Surface](./surface.md) · [Card](./card.md) · [Scroll / Grid / Flex](./layout.md) · [Page](./page.md) · [Content Drawer](./content-drawer.md) · [Window](./window.md) · [Boat](./boat.md) · [Float](./float.md) · [Splash Screen](./splash-screen.md)
25
+ [Surface](./surface.md) · [Card](./card.md) · [Scroll / Grid / Flex](./layout.md) · [Content Drawer](./content-drawer.md) · [Window](./window.md) · [Boat](./boat.md) · [Float](./float.md) · [Splash Screen](./splash-screen.md)
25
26
 
26
27
  ### Forms
27
28
  [Form](./form.md) · [Input](./input.md) · [Textarea](./textarea.md) · [Select](./select.md) · [Autocomplete](./autocomplete.md) · [Option](./option.md) · [Checkbox](./checkbox.md) · [Switch](./switch.md) · [Radio Group](./radio-group.md) · [Chips](./chips.md) · [Date Range](./date-range.md) · [Date Range Inline](./date-range-inline.md) · [Range](./range.md)
@@ -25,6 +25,7 @@ All reference files live in this directory. Read by filename.
25
25
  | Base class (`SchmancyElement`) | `mixins.md` |
26
26
  | Theme (`<schmancy-theme>`, `theme` service) | `theme.md` |
27
27
  | Directives (`magnetic`, `cursorGlow`, `gravity`, `reveal`, `animateText`, …) | `directives.md` |
28
+ | Layout (`fill()`, `overflowWithin()` — viewport-anchored shell sizing) | `layout.md` |
28
29
  | Spring physics presets | `animation.md` |
29
30
 
30
31
  ## Overlay services (prefer over tags)
@@ -78,6 +79,11 @@ State signals are the integration layer between co-located Schmancy view compone
78
79
  - Detection signals: a view component with `.property=${value}` inputs from a parent; a view component dispatching `CustomEvent`s that a sibling or parent handles; an orchestrator file co-located with a view where routing complexity does not exceed schmancy's `.guard`+`@redirect` capability (i.e., the flow is a linear sequence with no branching or cross-route hand-off).
79
80
  - Remediation: move shared state into schmancy state signals; have each component read/write signals directly in render() and connectedCallback(); delete the orchestrator if its only job was to pass data down and receive events up.
80
81
 
82
+ **TYPOGRAPHY_NO_REDUNDANT_COLOR** (`TYPOGRAPHY_NO_REDUNDANT_COLOR`). `schmancy-typography` color classes override the component's default rendering color.
83
+
84
+ - Detection signals: `class` attributes on `<schmancy-typography>` containing `text-on-surface`, `text-surface-on`, `text-surface-on-variant`, or any other color utility that matches the component's default — these restate what the component already renders and add no information.
85
+ - Remediation: remove the redundant color class from the `class` attribute. Keep a color class only when it intentionally overrides the default (e.g. `text-primary-default`, `text-error`, a custom accent). The test: if removing the class produces no visual change, it is redundant.
86
+
81
87
  **EVENTS_UP_PROPS_DOWN** (cross-component communication when signals don't cover it)
82
88
  When two components genuinely cannot share a signal (e.g., a generic reusable component that must not import app state), user actions travel upward via `CustomEvent` dispatch and data travels downward via Lit property bindings — not via callable property bindings (`onXxx`, `handleXxx`) set on child elements.
83
89
 
@@ -125,31 +131,35 @@ Plus a live region: `<div id="live-status" role="status" aria-live="polite" clas
125
131
  ## Minimal app skeleton
126
132
 
127
133
  ```typescript
128
- <schmancy-theme root scheme="dark">
129
- <schmancy-surface type="solid" fill="all">
130
- <schmancy-scroll>
131
- <schmancy-area
132
- name="root"
133
- .default=${lazy(() => import('./home.page'))}
134
- >
135
- <schmancy-route when="home-page"
136
- .component=${lazy(() => import('./home.page'))}></schmancy-route>
137
-
138
- <schmancy-route when="app-index"
139
- .component=${lazy(() => import('./app.page'))}
140
- .guard=${authState$.pipe(
141
- map(u => !!u),
142
- takeUntil(this.disconnecting),
143
- )}
144
- @redirect=${() => area.push({
145
- component: 'home-page', area: 'root', historyStrategy: 'replace',
146
- })}></schmancy-route>
147
- </schmancy-area>
148
- </schmancy-scroll>
149
- </schmancy-surface>
150
- </schmancy-theme>
134
+ // styles.css: html, body { margin: 0; padding: 0; overflow: hidden; }
135
+ import { fill } from '@mhmo91/schmancy/directives'
136
+
137
+ html`
138
+ <schmancy-theme root scheme="dark">
139
+ <schmancy-area
140
+ ${fill()}
141
+ name="root"
142
+ .default=${lazy(() => import('./home.page'))}
143
+ >
144
+ <schmancy-route when="home-page"
145
+ .component=${lazy(() => import('./home.page'))}></schmancy-route>
146
+
147
+ <schmancy-route when="app-index"
148
+ .component=${lazy(() => import('./app.page'))}
149
+ .guard=${authState$.pipe(
150
+ map(u => !!u),
151
+ takeUntil(this.disconnecting),
152
+ )}
153
+ @redirect=${() => area.push({
154
+ component: 'home-page', area: 'root', historyStrategy: 'replace',
155
+ })}></schmancy-route>
156
+ </schmancy-area>
157
+ </schmancy-theme>
158
+ `
151
159
  ```
152
160
 
161
+ See `layout.md` for the full shell pattern with rail + content area.
162
+
153
163
  ## Workflow
154
164
 
155
165
  1. User describes a UI task.
@@ -14,9 +14,10 @@ Areas can be nested to compose shell-plus-sub-view layouts.
14
14
 
15
15
  `<schmancy-area>` is the routing leaf in the layout cascade. Its shadow CSS guarantees:
16
16
 
17
- 1. **Stretch the mounted component.** The routed view fills the area (`min-height: 100%; width: 100%`). The area itself is `height: 100%; width: 100%` so it consumes whatever cell its parent gave it (typically a `<schmancy-page>` slot or a grid `1fr` row / column).
18
- 2. **Scroll by default.** The host is `overflow: auto` when the mounted component grows past the area's box, the area scrolls. Pages that need a custom scroll strategy (virtualized lists, multi-pane scroll) declare `<schmancy-area no-scroll>` and own their scroll.
19
- 3. **Reset scroll on route change.** The area sets `scrollTop = 0` after every route swap so a new view starts at the top.
17
+ 1. **Stretch the mounted component.** `::slotted(:not(schmancy-route))` gives every mounted view `min-height: 100%; width: 100%; min-width: 0` so it fills the area cell.
18
+ 2. **Area sizing.** The host is `height: 100%; width: 100%; min-height: 0; min-width: 0` it fills whatever grid cell or `fill()` box its parent gave it.
19
+ 3. **No built-in scroll.** Scroll is opt-in via `${overflowWithin()}` at the use site. Put `overflowWithin()` on the element that should scroll (the area itself, or a wrapper around it), not on the routed component.
20
+ 4. **Reset scroll on route change.** The area sets `scrollTop = 0` after every route swap so a new view starts at the top.
20
21
 
21
22
  Consumers do not write `h-full`, `w-full`, or `:host { height: 100% }` on routed components. The area's `::slotted` rule sizes them.
22
23
 
@@ -57,7 +58,7 @@ Consumers do not write `h-full`, `w-full`, or `:host { height: 100% }` on routed
57
58
  | `guard` | `Observable<boolean>` | When emits `false`, blocks and dispatches `redirect` event |
58
59
  | `exact` | boolean | Strict-equality matching |
59
60
 
60
- `<schmancy-area>` also accepts the `no-scroll` boolean attribute to opt out of default `overflow: auto` (for virtualized lists or custom scroll containers).
61
+ Scroll is opt-in: apply `${overflowWithin()}` to the element (or a wrapper) that should scroll. The area has no `no-scroll` attribute that concept is gone.
61
62
 
62
63
  ## `area` service
63
64
 
@@ -26,9 +26,7 @@ Place it once at the root — typically just inside your main `schmancy-theme` o
26
26
  ```html
27
27
  <schmancy-theme>
28
28
  <schmancy-connectivity-status></schmancy-connectivity-status>
29
- <schmancy-page>
30
- <!-- rest of app -->
31
- </schmancy-page>
29
+ <schmancy-area ${fill()} name="root" .default=${...}>...</schmancy-area>
32
30
  </schmancy-theme>
33
31
  ```
34
32
 
@@ -5,11 +5,47 @@
5
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
6
 
7
7
  ```typescript
8
+ import { fill, overflowWithin } from '@mhmo91/schmancy/directives'
8
9
  import { magnetic, cursorGlow, gravity, reveal } from '@mhmo91/schmancy/directives'
9
10
  ```
10
11
 
11
12
  ---
12
13
 
14
+ ## Layout (2 directives — use these for every app shell)
15
+
16
+ > These replace the deleted `<schmancy-page>` primitive. See `layout.md` for the full paradigm.
17
+
18
+ ### `fill()` — Viewport-anchor a container
19
+
20
+ Measures the element's position against `visualViewport` and applies an exact `height` (and `width`) in pixels — cascade-independent. Tracks `visualViewport` resize/scroll, orientation change, iOS soft-keyboard (via `focusout`), and `theme.bottomOffset$` for safe-area padding.
21
+
22
+ ```html
23
+ <!-- Root area — anchored to the full viewport -->
24
+ <schmancy-area ${fill()} name="root" .default=${...}>...</schmancy-area>
25
+
26
+ <!-- Custom element shell — fill() bypasses display:inline collapse -->
27
+ <my-shell class="grid grid-cols-[auto_1fr]" ${fill()}>...</my-shell>
28
+ ```
29
+
30
+ **Sets:** `height: Npx`, `width: Npx`, `overflow: hidden`, `min-height/width: 0`, `box-sizing: border-box`, `padding-bottom` (safe area).
31
+ **Does NOT set:** `display`, `grid-template-*` — put Tailwind layout classes on the same element.
32
+
33
+ ### `overflowWithin()` — Contained scroll region
34
+
35
+ Turns a grid cell or flex child into a scroll container with `overscroll-behavior: contain`.
36
+
37
+ ```html
38
+ <div ${overflowWithin()} class="grid grid-rows-[auto_1fr] min-h-0">
39
+ <header>...</header>
40
+ <schmancy-area name="app">...</schmancy-area>
41
+ </div>
42
+ ```
43
+
44
+ **Sets:** `overflow-y/x: auto`, `overscroll-behavior: contain`, `scroll-behavior: smooth`, `min-height/width: 0`, `box-sizing: border-box`.
45
+ Dispatches debounced `schmancy:scroll` event; listens for `@schmancy:scrollTo` command.
46
+
47
+ ---
48
+
13
49
  ## Physics & Interaction (6 directives)
14
50
 
15
51
  ### `magnetic` — Elements lean toward the cursor