@mhmo91/schmancy 0.10.24 → 0.10.26

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 (432) hide show
  1. package/dist/agent/{overlay.confirm-body-CvdVfCnN.js → overlay.confirm-body-DJrL6tio.js} +242 -242
  2. package/dist/agent/{overlay.confirm-body-CvdVfCnN.js.map → overlay.confirm-body-DJrL6tio.js.map} +1 -1
  3. package/dist/agent/schmancy.agent.js +5586 -2868
  4. package/dist/agent/schmancy.agent.js.map +1 -1
  5. package/dist/{area-BuqdaUpQ.cjs → area-DkvO_oiO.cjs} +1 -1
  6. package/dist/{area-BuqdaUpQ.cjs.map → area-DkvO_oiO.cjs.map} +1 -1
  7. package/dist/{area-A_oUP4P1.js → area-fC1_kvAW.js} +1 -1
  8. package/dist/{area-A_oUP4P1.js.map → area-fC1_kvAW.js.map} +1 -1
  9. package/dist/area.cjs +1 -1
  10. package/dist/area.js +1 -1
  11. package/dist/{autocomplete-Cy46gJxK.cjs → autocomplete-Aa2IstyX.cjs} +1 -1
  12. package/dist/{autocomplete-Cy46gJxK.cjs.map → autocomplete-Aa2IstyX.cjs.map} +1 -1
  13. package/dist/{autocomplete-BoCWO26L.js → autocomplete-Hb-C11a3.js} +2 -2
  14. package/dist/{autocomplete-BoCWO26L.js.map → autocomplete-Hb-C11a3.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-BEq-AHmL.cjs +85 -0
  23. package/dist/boat-BEq-AHmL.cjs.map +1 -0
  24. package/dist/{boat-B0h5fuAA.js → boat-BW6aRcdY.js} +29 -23
  25. package/dist/boat-BW6aRcdY.js.map +1 -0
  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-CKpIblIO.cjs} +1 -1
  31. package/dist/{busy-Bn6Pioo8.cjs.map → busy-CKpIblIO.cjs.map} +1 -1
  32. package/dist/{busy-DObY7lfu.js → busy-D-ucQFSB.js} +1 -1
  33. package/dist/{busy-DObY7lfu.js.map → busy-D-ucQFSB.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-BU-X0a0S.js} +2 -2
  37. package/dist/{button-DEi3M2nV.js.map → button-BU-X0a0S.js.map} +1 -1
  38. package/dist/{button-XfdPzfZQ.cjs → button-HzLpB3NP.cjs} +1 -1
  39. package/dist/{button-XfdPzfZQ.cjs.map → button-HzLpB3NP.cjs.map} +1 -1
  40. package/dist/button.cjs +1 -1
  41. package/dist/button.js +1 -1
  42. package/dist/{card-BjUgRzFh.cjs → card-CcrUlgd3.cjs} +1 -1
  43. package/dist/{card-BjUgRzFh.cjs.map → card-CcrUlgd3.cjs.map} +1 -1
  44. package/dist/{card-jzUQK0EQ.js → card-ueXBeJ6q.js} +2 -2
  45. package/dist/{card-jzUQK0EQ.js.map → card-ueXBeJ6q.js.map} +1 -1
  46. package/dist/card.cjs +1 -1
  47. package/dist/card.js +1 -1
  48. package/dist/{checkbox-CfCm1vGN.js → checkbox-CW1kk4Tu.js} +1 -1
  49. package/dist/{checkbox-CfCm1vGN.js.map → checkbox-CW1kk4Tu.js.map} +1 -1
  50. package/dist/{checkbox-rskgUBxQ.cjs → checkbox-qsp-I5C6.cjs} +1 -1
  51. package/dist/{checkbox-rskgUBxQ.cjs.map → checkbox-qsp-I5C6.cjs.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-C_F6-gfe.js} +4 -4
  55. package/dist/{chips-Dfim_tQv.js.map → chips-C_F6-gfe.js.map} +1 -1
  56. package/dist/{chips-BiNZKu0J.cjs → chips-Dluk6RV4.cjs} +1 -1
  57. package/dist/{chips-BiNZKu0J.cjs.map → chips-Dluk6RV4.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-B8zoj6Cj.js → date-range-ASZ8h_Il.js} +2 -2
  69. package/dist/{date-range-B8zoj6Cj.js.map → date-range-ASZ8h_Il.js.map} +1 -1
  70. package/dist/{date-range-em7OwhlK.cjs → date-range-BFOqXAI2.cjs} +1 -1
  71. package/dist/{date-range-em7OwhlK.cjs.map → date-range-BFOqXAI2.cjs.map} +1 -1
  72. package/dist/{date-range-inline-DYeqoBIO.cjs → date-range-inline-BNmNOpL0.cjs} +1 -1
  73. package/dist/{date-range-inline-DYeqoBIO.cjs.map → date-range-inline-BNmNOpL0.cjs.map} +1 -1
  74. package/dist/{date-range-inline-BfUL8_vX.js → date-range-inline-DHrgolLn.js} +1 -1
  75. package/dist/{date-range-inline-BfUL8_vX.js.map → date-range-inline-DHrgolLn.js.map} +1 -1
  76. package/dist/date-range-inline.cjs +1 -1
  77. package/dist/date-range-inline.js +1 -1
  78. package/dist/date-range.cjs +1 -1
  79. package/dist/date-range.js +1 -1
  80. package/dist/delay.cjs +1 -1
  81. package/dist/delay.js +2 -2
  82. package/dist/{details-D246xN83.js → details-B9RgRw6c.js} +4 -4
  83. package/dist/{details-D246xN83.js.map → details-B9RgRw6c.js.map} +1 -1
  84. package/dist/{details-CNM1tuma.cjs → details-Bx9c4XQR.cjs} +1 -1
  85. package/dist/{details-CNM1tuma.cjs.map → details-Bx9c4XQR.cjs.map} +1 -1
  86. package/dist/details.cjs +1 -1
  87. package/dist/details.js +1 -1
  88. package/dist/directives-Dq0zi2KR.cjs +350 -0
  89. package/dist/directives-Dq0zi2KR.cjs.map +1 -0
  90. package/dist/directives-sWKTEJDb.js +4063 -0
  91. package/dist/directives-sWKTEJDb.js.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-C7BtzDcK.js} +1 -1
  101. package/dist/{divider-CbIp1je9.js.map → divider-C7BtzDcK.js.map} +1 -1
  102. package/dist/{divider-DaKsGNW-.cjs → divider-DH0BvTOv.cjs} +1 -1
  103. package/dist/{divider-DaKsGNW-.cjs.map → divider-DH0BvTOv.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-CQDm3BF3.cjs → expand-CPMF44eL.cjs} +1 -1
  109. package/dist/{expand-CQDm3BF3.cjs.map → expand-CPMF44eL.cjs.map} +1 -1
  110. package/dist/{expand-DRkiO4vw.js → expand-DcMx9dHY.js} +3 -3
  111. package/dist/{expand-DRkiO4vw.js.map → expand-DcMx9dHY.js.map} +1 -1
  112. package/dist/expand.cjs +1 -1
  113. package/dist/expand.js +1 -1
  114. package/dist/{float-5O26zNRh.cjs → float-CgBN4H3g.cjs} +1 -1
  115. package/dist/{float-5O26zNRh.cjs.map → float-CgBN4H3g.cjs.map} +1 -1
  116. package/dist/{float-CZtu8FnO.js → float-DkUw5TN4.js} +1 -1
  117. package/dist/{float-CZtu8FnO.js.map → float-DkUw5TN4.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-DxApnyVx.cjs} +1 -1
  121. package/dist/{form-B90CMeqs.cjs.map → form-DxApnyVx.cjs.map} +1 -1
  122. package/dist/{form-CE6Gwz4r.js → form-kSgJf_h4.js} +8 -8
  123. package/dist/{form-CE6Gwz4r.js.map → form-kSgJf_h4.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-3F1nQAn_.cjs +24 -0
  131. package/dist/icons-3F1nQAn_.cjs.map +1 -0
  132. package/dist/icons-DsfpmrVO.js +52 -0
  133. package/dist/icons-DsfpmrVO.js.map +1 -0
  134. package/dist/icons.cjs +1 -1
  135. package/dist/icons.js +1 -1
  136. package/dist/{iframe-C3PMj1MD.js → iframe-KrV4Cak-.js} +1 -1
  137. package/dist/{iframe-C3PMj1MD.js.map → iframe-KrV4Cak-.js.map} +1 -1
  138. package/dist/{iframe-D98csbEo.cjs → iframe-sTXBw6zB.cjs} +1 -1
  139. package/dist/{iframe-D98csbEo.cjs.map → iframe-sTXBw6zB.cjs.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-DMoggdSN.cjs} +1 -1
  145. package/dist/{input-_y92Pzon.cjs.map → input-DMoggdSN.cjs.map} +1 -1
  146. package/dist/{input-chip-CR66MWml.cjs → input-chip-B1iNQW2m.cjs} +1 -1
  147. package/dist/{input-chip-CR66MWml.cjs.map → input-chip-B1iNQW2m.cjs.map} +1 -1
  148. package/dist/{input-chip-Bzwr5-XL.js → input-chip-DHbfUatc.js} +1 -1
  149. package/dist/{input-chip-Bzwr5-XL.js.map → input-chip-DHbfUatc.js.map} +1 -1
  150. package/dist/{input-CCOkeeVM.js → input-zj3eaZM_.js} +1 -1
  151. package/dist/{input-CCOkeeVM.js.map → input-zj3eaZM_.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-86F2RgXy.cjs} +2 -2
  165. package/dist/{lightbox-Bk3ovcVu.cjs.map → lightbox-86F2RgXy.cjs.map} +1 -1
  166. package/dist/{lightbox-Dl--fEbP.js → lightbox-CAcXlJlv.js} +2 -2
  167. package/dist/{lightbox-Dl--fEbP.js.map → lightbox-CAcXlJlv.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-BIjJ6T1c.js} +1 -1
  171. package/dist/{list-B3WI_Nfs.js.map → list-BIjJ6T1c.js.map} +1 -1
  172. package/dist/{list-DWngbP2X.cjs → list-CUbI0RM6.cjs} +1 -1
  173. package/dist/{list-DWngbP2X.cjs.map → list-CUbI0RM6.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-IDhVp6zm.js → menu-CtFcvxgU.js} +2 -2
  181. package/dist/{menu-IDhVp6zm.js.map → menu-CtFcvxgU.js.map} +1 -1
  182. package/dist/{menu-CdYjxJqm.cjs → menu-DGMrjR_a.cjs} +1 -1
  183. package/dist/{menu-CdYjxJqm.cjs.map → menu-DGMrjR_a.cjs.map} +1 -1
  184. package/dist/menu.cjs +1 -1
  185. package/dist/menu.js +1 -1
  186. package/dist/mixins-CKbQ6BJo.js +642 -0
  187. package/dist/mixins-CKbQ6BJo.js.map +1 -0
  188. package/dist/mixins-DSy-enUd.cjs +254 -0
  189. package/dist/mixins-DSy-enUd.cjs.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-BqyMYtP7.js} +2 -2
  201. package/dist/{notification-CllYkvlR.js.map → notification-BqyMYtP7.js.map} +1 -1
  202. package/dist/{notification-B3wVUC8l.cjs → notification-D5eOdsMT.cjs} +1 -1
  203. package/dist/{notification-B3wVUC8l.cjs.map → notification-D5eOdsMT.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-C3UyYQi_.js} +1 -1
  207. package/dist/{option-CPOL0nHL.js.map → option-C3UyYQi_.js.map} +1 -1
  208. package/dist/{option-cRsdshy8.cjs → option-DJ3R-2Wn.cjs} +1 -1
  209. package/dist/{option-cRsdshy8.cjs.map → option-DJ3R-2Wn.cjs.map} +1 -1
  210. package/dist/option.cjs +1 -1
  211. package/dist/option.js +1 -1
  212. package/dist/{overlay-DJ-vlwtR.js → overlay-D1hFkcFA.js} +5 -5
  213. package/dist/{overlay-DJ-vlwtR.js.map → overlay-D1hFkcFA.js.map} +1 -1
  214. package/dist/{overlay-BnTvnNDc.cjs → overlay-D7nQaT5U.cjs} +1 -1
  215. package/dist/{overlay-BnTvnNDc.cjs.map → overlay-D7nQaT5U.cjs.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-DEb9xw5N.js → overlay.confirm-body-B4eCDLmU.js} +1 -1
  220. package/dist/{overlay.confirm-body-DEb9xw5N.js.map → overlay.confirm-body-B4eCDLmU.js.map} +1 -1
  221. package/dist/{overlay.confirm-body-CQ-FwySO.cjs → overlay.confirm-body-P18SmJL2.cjs} +1 -1
  222. package/dist/{overlay.confirm-body-CQ-FwySO.cjs.map → overlay.confirm-body-P18SmJL2.cjs.map} +1 -1
  223. package/dist/overlay.js +3 -3
  224. package/dist/{overlay.service-XM1YHkTk.js → overlay.service-02ZLZ8Ib.js} +2 -2
  225. package/dist/{overlay.service-XM1YHkTk.js.map → overlay.service-02ZLZ8Ib.js.map} +1 -1
  226. package/dist/{overlay.service-CKBCIP2f.cjs → overlay.service-m-8omCA-.cjs} +1 -1
  227. package/dist/{overlay.service-CKBCIP2f.cjs.map → overlay.service-m-8omCA-.cjs.map} +1 -1
  228. package/dist/{progress-CcfLfHOE.cjs → progress-CY-UbvOB.cjs} +1 -1
  229. package/dist/{progress-CcfLfHOE.cjs.map → progress-CY-UbvOB.cjs.map} +1 -1
  230. package/dist/{progress-CnMPp-9a.js → progress-YjdEWDI5.js} +1 -1
  231. package/dist/{progress-CnMPp-9a.js.map → progress-YjdEWDI5.js.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--UamzqAm.cjs} +1 -1
  235. package/dist/{radio-group-D97hflrE.cjs.map → radio-group--UamzqAm.cjs.map} +1 -1
  236. package/dist/{radio-group-BUJgfQFi.js → radio-group-aKXKHqUp.js} +1 -1
  237. package/dist/{radio-group-BUJgfQFi.js.map → radio-group-aKXKHqUp.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-B0Qk4PfT.js} +3 -3
  249. package/dist/{select-BWEh5nRM.js.map → select-B0Qk4PfT.js.map} +1 -1
  250. package/dist/{select-Cv5Oev6d.cjs → select-CIquL8LY.cjs} +2 -2
  251. package/dist/{select-Cv5Oev6d.cjs.map → select-CIquL8LY.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-CP_Idse2.js} +1 -1
  275. package/dist/{splash-screen-B6w7X2z9.js.map → splash-screen-CP_Idse2.js.map} +1 -1
  276. package/dist/{splash-screen-DFtxtO2D.cjs → splash-screen-rg56AXCf.cjs} +1 -1
  277. package/dist/{splash-screen-DFtxtO2D.cjs.map → splash-screen-rg56AXCf.cjs.map} +1 -1
  278. package/dist/splash-screen.cjs +1 -1
  279. package/dist/splash-screen.js +1 -1
  280. package/dist/{src-Asw6A018.cjs → src-BAaNnqwc.cjs} +13 -13
  281. package/dist/{src-Asw6A018.cjs.map → src-BAaNnqwc.cjs.map} +1 -1
  282. package/dist/{src-D_NK-vMA.js → src-Do0IGupa.js} +153 -153
  283. package/dist/{src-D_NK-vMA.js.map → src-Do0IGupa.js.map} +1 -1
  284. package/dist/steps.cjs +1 -1
  285. package/dist/steps.js +1 -1
  286. package/dist/{surface-B94ka2LY.cjs → surface-B7a2O5-9.cjs} +1 -1
  287. package/dist/{surface-B94ka2LY.cjs.map → surface-B7a2O5-9.cjs.map} +1 -1
  288. package/dist/{surface-ctBcRGSZ.js → surface-DGewe6IV.js} +1 -1
  289. package/dist/{surface-ctBcRGSZ.js.map → surface-DGewe6IV.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-g2aM43TH.js} +1 -1
  297. package/dist/{tabs-CrMx5z_y.js.map → tabs-g2aM43TH.js.map} +1 -1
  298. package/dist/{tabs-B7kaZIom.cjs → tabs-n4dO5fo1.cjs} +1 -1
  299. package/dist/{tabs-B7kaZIom.cjs.map → tabs-n4dO5fo1.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-D5hw4jsP.js} +1 -1
  305. package/dist/{textarea-DeHFl80i.js.map → textarea-D5hw4jsP.js.map} +1 -1
  306. package/dist/{textarea-D1crj8JD.cjs → textarea-DDx_7AfQ.cjs} +1 -1
  307. package/dist/{textarea-D1crj8JD.cjs.map → textarea-DDx_7AfQ.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-BMYkheaA.js} +3 -3
  311. package/dist/{theme-C7Yo33nh.js.map → theme-BMYkheaA.js.map} +1 -1
  312. package/dist/{theme-wE2N7Yu9.cjs → theme-BdZAj0CO.cjs} +2 -2
  313. package/dist/{theme-wE2N7Yu9.cjs.map → theme-BdZAj0CO.cjs.map} +1 -1
  314. package/dist/{theme-button-Cpc_hs2O.js → theme-button-DdI6kxY3.js} +1 -1
  315. package/dist/{theme-button-Cpc_hs2O.js.map → theme-button-DdI6kxY3.js.map} +1 -1
  316. package/dist/{theme-button-CXSM5We4.cjs → theme-button-R2f_kLEl.cjs} +1 -1
  317. package/dist/{theme-button-CXSM5We4.cjs.map → theme-button-R2f_kLEl.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-Ck_zS4bb.cjs → window-LOGPpN8K.cjs} +1 -1
  339. package/dist/{window-Ck_zS4bb.cjs.map → window-LOGPpN8K.cjs.map} +1 -1
  340. package/dist/{window-JtkeHoxS.js → window-MQxhTodp.js} +5 -5
  341. package/dist/{window-JtkeHoxS.js.map → window-MQxhTodp.js.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/boat/boat.ts +33 -23
  354. package/src/directives/ai-badge.ts +95 -0
  355. package/src/directives/art/art.directive.ts +228 -0
  356. package/src/directives/art/effects/error.ts +192 -0
  357. package/src/directives/art/effects/funkhaus.ts +121 -0
  358. package/src/directives/art/effects/howl.ts +203 -0
  359. package/src/directives/art/effects/samwa.ts +228 -0
  360. package/src/directives/art/effects/snow.ts +207 -0
  361. package/src/directives/art/effects/starfield.ts +107 -0
  362. package/src/directives/art/index.ts +2 -0
  363. package/src/directives/art/particle-pool.ts +40 -0
  364. package/src/directives/art/types.ts +129 -0
  365. package/src/directives/art/utils.ts +35 -0
  366. package/src/directives/battery.ts +1014 -0
  367. package/src/directives/beta.ts +44 -0
  368. package/src/directives/fill.ts +32 -60
  369. package/src/directives/fyi.ts +551 -0
  370. package/src/directives/hummingbird.ts +1712 -0
  371. package/src/directives/index.ts +9 -0
  372. package/src/directives/missed-punch.ts +407 -0
  373. package/src/directives/nebula.ts +64 -61
  374. package/src/directives/urgent.ts +660 -0
  375. package/src/directives/working-snake.ts +294 -0
  376. package/src/icons/icon.ts +53 -30
  377. package/src/navigation-rail/navigation-rail-item.ts +7 -12
  378. package/src/navigation-rail/navigation-rail.ts +0 -2
  379. package/types/mixins/SchmancyElement.d.ts +31 -0
  380. package/types/src/directives/ai-badge.d.ts +15 -0
  381. package/types/src/directives/art/art.directive.d.ts +19 -0
  382. package/types/src/directives/art/effects/error.d.ts +7 -0
  383. package/types/src/directives/art/effects/funkhaus.d.ts +7 -0
  384. package/types/src/directives/art/effects/howl.d.ts +7 -0
  385. package/types/src/directives/art/effects/samwa.d.ts +7 -0
  386. package/types/src/directives/art/effects/snow.d.ts +7 -0
  387. package/types/src/directives/art/effects/starfield.d.ts +10 -0
  388. package/types/src/directives/art/index.d.ts +2 -0
  389. package/types/src/directives/art/particle-pool.d.ts +16 -0
  390. package/types/src/directives/art/types.d.ts +126 -0
  391. package/types/src/directives/art/utils.d.ts +5 -0
  392. package/types/src/directives/battery.d.ts +96 -0
  393. package/types/src/directives/beta.d.ts +33 -0
  394. package/types/src/directives/fill.d.ts +4 -11
  395. package/types/src/directives/fyi.d.ts +76 -0
  396. package/types/src/directives/hummingbird.d.ts +180 -0
  397. package/types/src/directives/index.d.ts +9 -0
  398. package/types/src/directives/missed-punch.d.ts +28 -0
  399. package/types/src/directives/nebula.d.ts +1 -1
  400. package/types/src/directives/urgent.d.ts +88 -0
  401. package/types/src/directives/working-snake.d.ts +46 -0
  402. package/types/src/icons/icon.d.ts +22 -0
  403. package/dist/boat-B0h5fuAA.js.map +0 -1
  404. package/dist/boat-RRtBhD3x.cjs +0 -80
  405. package/dist/boat-RRtBhD3x.cjs.map +0 -1
  406. package/dist/directives.cjs.map +0 -1
  407. package/dist/directives.js.map +0 -1
  408. package/dist/discovery.cjs.map +0 -1
  409. package/dist/discovery.js.map +0 -1
  410. package/dist/icons-B7ppo07M.cjs +0 -33
  411. package/dist/icons-B7ppo07M.cjs.map +0 -1
  412. package/dist/icons-CGhozJ5v.js +0 -48
  413. package/dist/icons-CGhozJ5v.js.map +0 -1
  414. package/dist/mixins-BPUR4Kc4.cjs +0 -254
  415. package/dist/mixins-BPUR4Kc4.cjs.map +0 -1
  416. package/dist/mixins-C42OILRS.js +0 -636
  417. package/dist/mixins-C42OILRS.js.map +0 -1
  418. package/dist/skills/page.md +0 -84
  419. package/dist/skills/schmancy/page.md +0 -84
  420. package/skills/schmancy/page.md +0 -84
  421. /package/dist/{hashContent-dJrI-9sc.js → hashContent-Dgmzc32o.js} +0 -0
  422. /package/dist/{hashContent-Ck6laKlk.cjs → hashContent-Dh1VzIAb.cjs} +0 -0
  423. /package/dist/{overlay-stack-Dk0xETTy.cjs → overlay-stack-Bdr9lOqi.cjs} +0 -0
  424. /package/dist/{overlay-stack-BR4iYivO.js → overlay-stack-D2rgxQLh.js} +0 -0
  425. /package/dist/{reduced-motion-D7LqTUMn.js → reduced-motion-D-L12p7G.js} +0 -0
  426. /package/dist/{reduced-motion-Dzfp_w5x.cjs → reduced-motion-Ds-HjMzn.cjs} +0 -0
  427. /package/dist/{rxjs-utils-BK8VMe3K.js → rxjs-utils-BXpvHN4-.js} +0 -0
  428. /package/dist/{rxjs-utils-DhOKenkS.cjs → rxjs-utils-CaC-tdot.cjs} +0 -0
  429. /package/dist/{theme.interface-D4NeufQA.cjs → theme.interface-B5xjEk74.cjs} +0 -0
  430. /package/dist/{theme.interface-C2XNgsLB.js → theme.interface-DVEw3s8m.js} +0 -0
  431. /package/dist/{theme.service-CSzNkqBB.js → theme.service-Bh08uOSJ.js} +0 -0
  432. /package/dist/{theme.service-CnFUmUpc.cjs → theme.service-Y-e8b331.cjs} +0 -0
@@ -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
 
package/src/boat/boat.ts CHANGED
@@ -10,7 +10,7 @@ import { SPRING_SMOOTH, SPRING_SNAPPY } from '../utils/animation.js'
10
10
  import { reducedMotion$ } from '../directives/reduced-motion'
11
11
  import { theme } from '../theme/theme.service.js'
12
12
 
13
- const FAB_HEIGHT = 44
13
+ const FAB_HEIGHT = 36
14
14
  const DRAG_THRESHOLD = 5
15
15
  const POSITION_STORAGE_KEY_PREFIX = 'schmancy-boat-'
16
16
 
@@ -89,12 +89,12 @@ export default class SchmancyBoat extends SchmancyElement {
89
89
 
90
90
  private get closedClipPath(): string {
91
91
  return this.isBottomCorner
92
- ? `inset(calc(100% - ${FAB_HEIGHT}px) 0px 0px 0px round 22px)`
93
- : `inset(0px 0px calc(100% - ${FAB_HEIGHT}px) 0px round 22px)`
92
+ ? `inset(calc(100% - ${FAB_HEIGHT}px) 0px 0px 0px round 10px)`
93
+ : `inset(0px 0px calc(100% - ${FAB_HEIGHT}px) 0px round 10px)`
94
94
  }
95
95
 
96
96
  private get openClipPath(): string {
97
- return 'inset(0px 0px 0px 0px round 12px)'
97
+ return 'inset(0px 0px 0px 0px round 4px)'
98
98
  }
99
99
 
100
100
  private get elevation(): 0 | 1 | 2 | 3 | 4 | 5 {
@@ -415,7 +415,7 @@ export default class SchmancyBoat extends SchmancyElement {
415
415
  container.style.overflow = 'hidden'
416
416
 
417
417
  const openKeyframes: Keyframe[] = [
418
- { clipPath: this.closedClipPath, opacity: 0.95 },
418
+ { clipPath: this.closedClipPath, opacity: 0.85 },
419
419
  { clipPath: this.openClipPath, opacity: 1 },
420
420
  ]
421
421
  const anim = container.animate(openKeyframes, {
@@ -459,7 +459,7 @@ export default class SchmancyBoat extends SchmancyElement {
459
459
 
460
460
  const closeKeyframes: Keyframe[] = [
461
461
  { clipPath: this.openClipPath, opacity: 1 },
462
- { clipPath: this.closedClipPath, opacity: 0.95 },
462
+ { clipPath: this.closedClipPath, opacity: 0.85 },
463
463
  ]
464
464
  const anim = container.animate(closeKeyframes, {
465
465
  duration: Math.round(SPRING_SNAPPY.duration * 0.9),
@@ -527,10 +527,13 @@ export default class SchmancyBoat extends SchmancyElement {
527
527
  'flex-col-reverse': !isBottom,
528
528
  'will-change-[clip-path]': true,
529
529
  'z-1000': true,
530
- 'rounded-2xl': this.open,
531
- 'rounded-[22px]': !this.open,
530
+ // open: 4px radius (instrument-sharp); closed: 10px (status-bar pill)
531
+ 'rounded': this.open,
532
+ 'rounded-lg': !this.open,
532
533
  'overflow-hidden': true,
533
- 'opacity-95': this.isDragging,
534
+ // micro-scale + reduced opacity signals lift during drag
535
+ 'opacity-85': this.isDragging,
536
+ 'scale-95': this.isDragging,
534
537
  })
535
538
 
536
539
  const containerStyles = styleMap({
@@ -584,32 +587,39 @@ export default class SchmancyBoat extends SchmancyElement {
584
587
  </schmancy-surface>
585
588
  </section>
586
589
 
587
- <!-- Gradient separator between header and content — only when open -->
588
- ${when(
589
- this.open,
590
- () =>
591
- html`<div
592
- class="h-px shrink-0 bg-linear-to-r from-transparent via-primary-default/30 to-transparent"
593
- ></div>`,
594
- )}
595
-
596
590
  <!-- Header / FAB section — always interactive, always visible -->
597
591
  <section
598
- class="shrink-0 bg-surface-containerLowest"
592
+ class="shrink-0 bg-surface-containerLowest relative"
599
593
  style=${styleMap({ 'pointer-events': 'auto', height: `${FAB_HEIGHT}px` })}
600
594
  >
595
+ <!-- 1px top inner highlight — reads as a lit edge when open, instrument-panel HUD accent -->
596
+ ${when(
597
+ this.open,
598
+ () => html`<div
599
+ class="absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-primary-default/40 to-transparent pointer-events-none"
600
+ ></div>`,
601
+ )}
601
602
  <div
602
603
  ${ref(this._headerRef)}
603
604
  class=${headerClasses}
604
605
  title="Drag to move"
605
606
  aria-label="Drag to reposition panel"
606
607
  >
608
+ <!-- Grip indicator: only visible when collapsed, signals "this is a handle" -->
609
+ ${when(
610
+ !this.open,
611
+ () => html`<div
612
+ class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-6 h-0.5 rounded-full bg-on-surface/20 pointer-events-none"
613
+ style="z-index:0"
614
+ ></div>`,
615
+ )}
616
+
607
617
  <!-- Summary slot rendered once — avoids DOM teardown on toggle -->
608
- <div class="flex-1 min-w-0">
618
+ <div class="flex-1 min-w-0 relative" style="z-index:1">
609
619
  <slot name="summary"></slot>
610
620
  </div>
611
621
 
612
- <!-- Toggle button: collapse when open, expand when closed -->
622
+ <!-- Toggle button: chevron up/down matches open/close direction per corner -->
613
623
  ${when(
614
624
  this.open,
615
625
  () => html`
@@ -622,7 +632,7 @@ export default class SchmancyBoat extends SchmancyElement {
622
632
  }}
623
633
  title="Collapse"
624
634
  >
625
- close_fullscreen
635
+ ${isBottom ? 'expand_more' : 'expand_less'}
626
636
  </schmancy-icon-button>
627
637
  `,
628
638
  () => html`
@@ -635,7 +645,7 @@ export default class SchmancyBoat extends SchmancyElement {
635
645
  }}
636
646
  title="Expand"
637
647
  >
638
- fullscreen
648
+ ${isBottom ? 'expand_less' : 'expand_more'}
639
649
  </schmancy-icon-button>
640
650
  `,
641
651
  )}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * AI Badge Directive — Indicator for AI-generated content.
3
+ * Pulses gently on the host element; color routed through theme tokens.
4
+ */
5
+
6
+ import { noChange } from 'lit'
7
+ import { AsyncDirective, directive } from 'lit/async-directive.js'
8
+ import type { ElementPart } from 'lit'
9
+
10
+ interface State {
11
+ message: string
12
+ element: HTMLElement
13
+ badge: HTMLElement | null
14
+ animation: Animation | null
15
+ }
16
+
17
+ class AIBadgeDirective extends AsyncDirective {
18
+ private state: State | null = null
19
+
20
+ render(_message?: string) {
21
+ return noChange
22
+ }
23
+
24
+ override update(part: ElementPart, [message = '']: [string?]) {
25
+ const element = part.element as HTMLElement
26
+
27
+ if (!message) {
28
+ this.cleanup()
29
+ return noChange
30
+ }
31
+
32
+ if (this.state) return noChange
33
+
34
+ this.state = {
35
+ message,
36
+ element,
37
+ badge: null,
38
+ animation: null,
39
+ }
40
+
41
+ if (getComputedStyle(element).position === 'static') {
42
+ element.style.position = 'relative'
43
+ }
44
+
45
+ const badge = document.createElement('div')
46
+ badge.style.cssText = `
47
+ display: block;
48
+ position: absolute;
49
+ bottom: -8px;
50
+ left: 8px;
51
+ z-index: 10;
52
+ padding: 3px 10px;
53
+ border-radius: 12px;
54
+ font-size: 0.65rem;
55
+ font-weight: 600;
56
+ background: linear-gradient(
57
+ 135deg,
58
+ var(--md-sys-color-primary, #7c5cff),
59
+ var(--md-sys-color-primary-container, #6750a4)
60
+ );
61
+ color: var(--md-sys-color-on-primary, #fff);
62
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
63
+ white-space: nowrap;
64
+ `
65
+ badge.textContent = `✦ ${message}`
66
+ badge.title = message
67
+
68
+ element.appendChild(badge)
69
+ this.state.badge = badge
70
+
71
+ this.state.animation = badge.animate(
72
+ [
73
+ { transform: 'scale(1)' },
74
+ { transform: 'scale(1.03)' },
75
+ { transform: 'scale(1)' },
76
+ ],
77
+ { duration: 2000, easing: 'ease-in-out', iterations: Infinity },
78
+ )
79
+
80
+ return noChange
81
+ }
82
+
83
+ private cleanup(): void {
84
+ if (!this.state) return
85
+ this.state.animation?.cancel()
86
+ this.state.badge?.remove()
87
+ this.state = null
88
+ }
89
+
90
+ override disconnected(): void {
91
+ this.cleanup()
92
+ }
93
+ }
94
+
95
+ export const aiBadge = directive(AIBadgeDirective)
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Art Directive — GPU-accelerated decorative overlays.
3
+ * Lazy-initialised, IntersectionObserver-paused, RAF-driven, particle-pooled.
4
+ */
5
+
6
+ import type { ElementPart } from 'lit'
7
+ import { noChange } from 'lit'
8
+ import { AsyncDirective, directive } from 'lit/async-directive.js'
9
+
10
+ import type { ArtOptions, ArtState } from './types'
11
+ import { createFunkhausOverlay, animateFunkhaus } from './effects/funkhaus'
12
+ import { createSamwaOverlay, animateSamwa } from './effects/samwa'
13
+ import { createHowlOverlay, animateHowl } from './effects/howl'
14
+ import { createErrorOverlay, animateError } from './effects/error'
15
+ import { createSnowOverlay, animateSnow } from './effects/snow'
16
+ import { createStarfieldOverlay, animateStarfield } from './effects/starfield'
17
+
18
+ interface ExtendedArtState extends ArtState {
19
+ initialized: boolean
20
+ originalPosition: string
21
+ }
22
+
23
+ class ArtDirective extends AsyncDirective {
24
+ private state: ExtendedArtState | null = null
25
+
26
+ render(_options: ArtOptions) {
27
+ return noChange
28
+ }
29
+
30
+ override update(part: ElementPart, [options]: [ArtOptions]) {
31
+ const element = part.element as HTMLElement
32
+ const { name, color, intensity = 1, speed = 1 } = options
33
+
34
+ if (
35
+ this.state &&
36
+ (this.state.effect !== name ||
37
+ this.state.color !== color ||
38
+ this.state.intensity !== intensity ||
39
+ this.state.speed !== speed)
40
+ ) {
41
+ this.cleanup()
42
+ }
43
+
44
+ if (!this.state) {
45
+ const originalPosition = element.style.position
46
+
47
+ this.state = {
48
+ effect: name,
49
+ color,
50
+ intensity,
51
+ speed,
52
+ element,
53
+ isVisible: true,
54
+ initialized: false,
55
+ originalPosition,
56
+ }
57
+
58
+ requestAnimationFrame(() => {
59
+ if (!this.state) return
60
+
61
+ const rect = element.getBoundingClientRect()
62
+ const isVisible =
63
+ rect.top < window.innerHeight && rect.bottom > 0 && rect.left < window.innerWidth && rect.right > 0
64
+
65
+ if (!isVisible) {
66
+ this.state.isVisible = false
67
+ this.setupVisibilityObserver()
68
+ return
69
+ }
70
+
71
+ this.initializeResources()
72
+ this.startAnimation()
73
+ this.setupVisibilityObserver()
74
+ })
75
+ }
76
+
77
+ return noChange
78
+ }
79
+
80
+ private initializeResources(): void {
81
+ if (!this.state || this.state.initialized) return
82
+
83
+ const { element, effect: name } = this.state
84
+
85
+ const computedStyle = getComputedStyle(element)
86
+ if (computedStyle.position === 'static') {
87
+ element.style.position = 'relative'
88
+ }
89
+
90
+ switch (name) {
91
+ case 'funkhaus':
92
+ createFunkhausOverlay(this.state)
93
+ break
94
+ case 'samwa':
95
+ createSamwaOverlay(this.state)
96
+ break
97
+ case 'howl':
98
+ createHowlOverlay(this.state)
99
+ break
100
+ case 'error':
101
+ createErrorOverlay(this.state)
102
+ break
103
+ case 'snow':
104
+ createSnowOverlay(this.state)
105
+ break
106
+ case 'starfield':
107
+ createStarfieldOverlay(this.state)
108
+ break
109
+ }
110
+
111
+ this.state.initialized = true
112
+ }
113
+
114
+ private setupVisibilityObserver(): void {
115
+ if (!this.state || typeof IntersectionObserver === 'undefined') return
116
+
117
+ this.state.observer = new IntersectionObserver(
118
+ entries => {
119
+ if (!this.state) return
120
+ const isVisible = entries[0].isIntersecting
121
+
122
+ if (isVisible && !this.state.isVisible) {
123
+ this.state.isVisible = true
124
+
125
+ if (!this.state.initialized) {
126
+ this.initializeResources()
127
+ }
128
+
129
+ this.startAnimation()
130
+ } else if (!isVisible && this.state.isVisible) {
131
+ this.state.isVisible = false
132
+ if (this.state.animationId) {
133
+ cancelAnimationFrame(this.state.animationId)
134
+ this.state.animationId = undefined
135
+ }
136
+ }
137
+ },
138
+ { threshold: 0 },
139
+ )
140
+
141
+ this.state.observer.observe(this.state.element)
142
+ }
143
+
144
+ private startAnimation(): void {
145
+ if (!this.state || !this.state.isVisible) return
146
+ if (this.state.animationId) return
147
+
148
+ if (!this.state.initialized) {
149
+ this.initializeResources()
150
+ }
151
+
152
+ const animate = (currentTime: number) => {
153
+ if (!this.state || !this.state.isVisible) {
154
+ if (this.state) this.state.animationId = undefined
155
+ return
156
+ }
157
+
158
+ switch (this.state.effect) {
159
+ case 'funkhaus':
160
+ animateFunkhaus(this.state, currentTime)
161
+ break
162
+ case 'samwa':
163
+ animateSamwa(this.state, currentTime)
164
+ break
165
+ case 'howl':
166
+ animateHowl(this.state, currentTime)
167
+ break
168
+ case 'error':
169
+ animateError(this.state, currentTime)
170
+ break
171
+ case 'snow':
172
+ animateSnow(this.state, currentTime)
173
+ break
174
+ case 'starfield':
175
+ animateStarfield(this.state, currentTime)
176
+ break
177
+ }
178
+
179
+ this.state.animationId = requestAnimationFrame(animate)
180
+ }
181
+
182
+ this.state.animationId = requestAnimationFrame(animate)
183
+ }
184
+
185
+ private cleanup(): void {
186
+ if (!this.state) return
187
+
188
+ if (this.state.animationId) {
189
+ cancelAnimationFrame(this.state.animationId)
190
+ }
191
+
192
+ if (this.state.observer) {
193
+ this.state.observer.disconnect()
194
+ }
195
+
196
+ if (this.state.samwa) {
197
+ this.state.samwa.leafPool.clear()
198
+ }
199
+
200
+ if (this.state.howl) {
201
+ this.state.howl.steamPool.clear()
202
+ }
203
+
204
+ if (this.state.error) {
205
+ this.state.error.boltPool.clear()
206
+ }
207
+
208
+ if (this.state.snow) {
209
+ this.state.snow.snowflakePool.clear()
210
+ }
211
+
212
+ if (this.state.overlayElement) {
213
+ this.state.overlayElement.remove()
214
+ }
215
+
216
+ if (this.state.originalPosition !== undefined) {
217
+ this.state.element.style.position = this.state.originalPosition
218
+ }
219
+
220
+ this.state = null
221
+ }
222
+
223
+ override disconnected(): void {
224
+ this.cleanup()
225
+ }
226
+ }
227
+
228
+ export const art = directive(ArtDirective)