@mhmo91/schmancy 0.10.26 → 0.10.27

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 (389) hide show
  1. package/custom-elements.json +9 -18
  2. package/dist/agent/overlay.confirm-body-BZoUgkdK.js +4574 -0
  3. package/dist/agent/overlay.confirm-body-BZoUgkdK.js.map +1 -0
  4. package/dist/agent/schmancy.agent.js +3113 -4893
  5. package/dist/agent/schmancy.agent.js.map +1 -1
  6. package/dist/agent/schmancy.manifest.json +68 -24
  7. package/dist/{area-DkvO_oiO.cjs → area-BSVOYQDA.cjs} +1 -1
  8. package/dist/{area-DkvO_oiO.cjs.map → area-BSVOYQDA.cjs.map} +1 -1
  9. package/dist/{area-fC1_kvAW.js → area-C_Yvjmad.js} +1 -1
  10. package/dist/{area-fC1_kvAW.js.map → area-C_Yvjmad.js.map} +1 -1
  11. package/dist/area.cjs +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-Aa2IstyX.cjs → autocomplete-B50VXUzw.cjs} +1 -1
  14. package/dist/{autocomplete-Aa2IstyX.cjs.map → autocomplete-B50VXUzw.cjs.map} +1 -1
  15. package/dist/{autocomplete-Hb-C11a3.js → autocomplete-C6I1mfOT.js} +2 -2
  16. package/dist/{autocomplete-Hb-C11a3.js.map → autocomplete-C6I1mfOT.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/avatar.cjs +2 -2
  20. package/dist/avatar.js +3 -3
  21. package/dist/badge.cjs +1 -1
  22. package/dist/badge.js +1 -1
  23. package/dist/{boat-BW6aRcdY.js → boat-C94QZ4Zt.js} +1 -1
  24. package/dist/{boat-BW6aRcdY.js.map → boat-C94QZ4Zt.js.map} +1 -1
  25. package/dist/{boat-BEq-AHmL.cjs → boat-DVQBNkk5.cjs} +1 -1
  26. package/dist/{boat-BEq-AHmL.cjs.map → boat-DVQBNkk5.cjs.map} +1 -1
  27. package/dist/boat.cjs +1 -1
  28. package/dist/boat.js +1 -1
  29. package/dist/breadcrumb.cjs +1 -1
  30. package/dist/breadcrumb.js +1 -1
  31. package/dist/{busy-D-ucQFSB.js → busy--bNb42rM.js} +1 -1
  32. package/dist/{busy-D-ucQFSB.js.map → busy--bNb42rM.js.map} +1 -1
  33. package/dist/{busy-CKpIblIO.cjs → busy-DuxFvEkY.cjs} +1 -1
  34. package/dist/{busy-CKpIblIO.cjs.map → busy-DuxFvEkY.cjs.map} +1 -1
  35. package/dist/busy.cjs +1 -1
  36. package/dist/busy.js +1 -1
  37. package/dist/{button-BU-X0a0S.js → button-B7b9L_h5.js} +26 -187
  38. package/dist/button-B7b9L_h5.js.map +1 -0
  39. package/dist/{button-HzLpB3NP.cjs → button-DAFZ5A4O.cjs} +2 -60
  40. package/dist/button-DAFZ5A4O.cjs.map +1 -0
  41. package/dist/button.cjs +59 -1
  42. package/dist/button.cjs.map +1 -0
  43. package/dist/button.js +170 -2
  44. package/dist/button.js.map +1 -0
  45. package/dist/{card-CcrUlgd3.cjs → card-DZPd24Sn.cjs} +1 -1
  46. package/dist/{card-CcrUlgd3.cjs.map → card-DZPd24Sn.cjs.map} +1 -1
  47. package/dist/{card-ueXBeJ6q.js → card-ixzxOW-Q.js} +1 -1
  48. package/dist/{card-ueXBeJ6q.js.map → card-ixzxOW-Q.js.map} +1 -1
  49. package/dist/card.cjs +1 -1
  50. package/dist/card.js +1 -1
  51. package/dist/{checkbox-qsp-I5C6.cjs → checkbox-Bi_Fm2mf.cjs} +1 -1
  52. package/dist/{checkbox-qsp-I5C6.cjs.map → checkbox-Bi_Fm2mf.cjs.map} +1 -1
  53. package/dist/{checkbox-CW1kk4Tu.js → checkbox-DdGpepTh.js} +1 -1
  54. package/dist/{checkbox-CW1kk4Tu.js.map → checkbox-DdGpepTh.js.map} +1 -1
  55. package/dist/checkbox.cjs +1 -1
  56. package/dist/checkbox.js +1 -1
  57. package/dist/{chips-C_F6-gfe.js → chips-DLTynyVB.js} +3 -3
  58. package/dist/{chips-C_F6-gfe.js.map → chips-DLTynyVB.js.map} +1 -1
  59. package/dist/{chips-Dluk6RV4.cjs → chips-DWQMZErr.cjs} +1 -1
  60. package/dist/{chips-Dluk6RV4.cjs.map → chips-DWQMZErr.cjs.map} +1 -1
  61. package/dist/chips.cjs +1 -1
  62. package/dist/chips.js +2 -2
  63. package/dist/connectivity.cjs +1 -1
  64. package/dist/connectivity.js +1 -1
  65. package/dist/content-drawer.cjs +1 -1
  66. package/dist/content-drawer.js +1 -1
  67. package/dist/{date-range-BFOqXAI2.cjs → date-range-BgGQyxOC.cjs} +1 -1
  68. package/dist/{date-range-BFOqXAI2.cjs.map → date-range-BgGQyxOC.cjs.map} +1 -1
  69. package/dist/{date-range-ASZ8h_Il.js → date-range-CT6ckjmV.js} +2 -2
  70. package/dist/{date-range-ASZ8h_Il.js.map → date-range-CT6ckjmV.js.map} +1 -1
  71. package/dist/{date-range-inline-DHrgolLn.js → date-range-inline-Ho3CENTh.js} +1 -1
  72. package/dist/{date-range-inline-DHrgolLn.js.map → date-range-inline-Ho3CENTh.js.map} +1 -1
  73. package/dist/{date-range-inline-BNmNOpL0.cjs → date-range-inline-nPWIs-3C.cjs} +1 -1
  74. package/dist/{date-range-inline-BNmNOpL0.cjs.map → date-range-inline-nPWIs-3C.cjs.map} +1 -1
  75. package/dist/date-range-inline.cjs +1 -1
  76. package/dist/date-range-inline.js +1 -1
  77. package/dist/date-range.cjs +1 -1
  78. package/dist/date-range.js +1 -1
  79. package/dist/delay.cjs +1 -1
  80. package/dist/delay.js +2 -2
  81. package/dist/{details-Bx9c4XQR.cjs → details-BnRWMZdt.cjs} +1 -1
  82. package/dist/{details-Bx9c4XQR.cjs.map → details-BnRWMZdt.cjs.map} +1 -1
  83. package/dist/{details-B9RgRw6c.js → details-CcMTvYo7.js} +2 -2
  84. package/dist/{details-B9RgRw6c.js.map → details-CcMTvYo7.js.map} +1 -1
  85. package/dist/details.cjs +1 -1
  86. package/dist/details.js +1 -1
  87. package/dist/{directives-Dq0zi2KR.cjs → directives-BkSqmLBV.cjs} +11 -11
  88. package/dist/directives-BkSqmLBV.cjs.map +1 -0
  89. package/dist/{directives-sWKTEJDb.js → directives-DgPbz0lQ.js} +116 -153
  90. package/dist/directives-DgPbz0lQ.js.map +1 -0
  91. package/dist/directives.cjs +1 -1
  92. package/dist/directives.js +7 -6
  93. package/dist/discovery.cjs +1 -1
  94. package/dist/discovery.js +1 -1
  95. package/dist/{discovery.service-CVDXO9rH.cjs.map → discovery.service-CIa3Eeuk.cjs.map} +1 -1
  96. package/dist/{discovery.service-COmbHaoI.js.map → discovery.service-DZFxtRwW.js.map} +1 -1
  97. package/dist/{divider-DH0BvTOv.cjs → divider-C6yJSL1c.cjs} +1 -1
  98. package/dist/{divider-DH0BvTOv.cjs.map → divider-C6yJSL1c.cjs.map} +1 -1
  99. package/dist/{divider-C7BtzDcK.js → divider-CZCj0ioH.js} +1 -1
  100. package/dist/{divider-C7BtzDcK.js.map → divider-CZCj0ioH.js.map} +1 -1
  101. package/dist/divider.cjs +1 -1
  102. package/dist/divider.js +1 -1
  103. package/dist/dropdown.cjs +1 -1
  104. package/dist/dropdown.js +1 -1
  105. package/dist/{expand-DcMx9dHY.js → expand-Cc6ogXsR.js} +2 -2
  106. package/dist/{expand-DcMx9dHY.js.map → expand-Cc6ogXsR.js.map} +1 -1
  107. package/dist/{expand-CPMF44eL.cjs → expand-D4EhwOYh.cjs} +1 -1
  108. package/dist/{expand-CPMF44eL.cjs.map → expand-D4EhwOYh.cjs.map} +1 -1
  109. package/dist/expand.cjs +1 -1
  110. package/dist/expand.js +1 -1
  111. package/dist/{float-CgBN4H3g.cjs → float-B8EPc_OG.cjs} +1 -1
  112. package/dist/{float-CgBN4H3g.cjs.map → float-B8EPc_OG.cjs.map} +1 -1
  113. package/dist/{float-DkUw5TN4.js → float-BvI3HTtB.js} +1 -1
  114. package/dist/{float-DkUw5TN4.js.map → float-BvI3HTtB.js.map} +1 -1
  115. package/dist/float.cjs +1 -1
  116. package/dist/float.js +1 -1
  117. package/dist/form-C4eFgFwF.cjs +42 -0
  118. package/dist/{form-DxApnyVx.cjs.map → form-C4eFgFwF.cjs.map} +1 -1
  119. package/dist/{form-kSgJf_h4.js → form-CGe9rVox.js} +8 -8
  120. package/dist/{form-kSgJf_h4.js.map → form-CGe9rVox.js.map} +1 -1
  121. package/dist/form.cjs +1 -1
  122. package/dist/form.js +6 -6
  123. package/dist/gravity-6pL6CfIr.cjs +1 -0
  124. package/dist/gravity-6pL6CfIr.cjs.map +1 -0
  125. package/dist/gravity-sVK3zGBF.js +46 -0
  126. package/dist/gravity-sVK3zGBF.js.map +1 -0
  127. package/dist/handover/agent-runtime-followups.md +1 -1
  128. package/dist/handover/agent-runtime-v1.md +3 -3
  129. package/dist/{hashContent-Dgmzc32o.js.map → hashContent-BqU6v1Xr.js.map} +1 -1
  130. package/dist/{hashContent-Dh1VzIAb.cjs.map → hashContent-iRZJJWtE.cjs.map} +1 -1
  131. package/dist/{icons-DsfpmrVO.js → icon-B1eZr2ZL.js} +1 -1
  132. package/dist/icon-B1eZr2ZL.js.map +1 -0
  133. package/dist/{icons-3F1nQAn_.cjs → icon-CgIXAvKI.cjs} +1 -1
  134. package/dist/{icons-DsfpmrVO.js.map → icon-CgIXAvKI.cjs.map} +1 -1
  135. package/dist/icons.cjs +1 -1
  136. package/dist/icons.js +1 -1
  137. package/dist/{iframe-sTXBw6zB.cjs → iframe-BO3BpRLH.cjs} +1 -1
  138. package/dist/{iframe-sTXBw6zB.cjs.map → iframe-BO3BpRLH.cjs.map} +1 -1
  139. package/dist/{iframe-KrV4Cak-.js → iframe-CmpAZc61.js} +1 -1
  140. package/dist/{iframe-KrV4Cak-.js.map → iframe-CmpAZc61.js.map} +1 -1
  141. package/dist/iframe.cjs +1 -1
  142. package/dist/iframe.js +1 -1
  143. package/dist/index.cjs +1 -1
  144. package/dist/index.js +49 -47
  145. package/dist/{input-DMoggdSN.cjs → input-5YL2oUBr.cjs} +1 -1
  146. package/dist/{input-DMoggdSN.cjs.map → input-5YL2oUBr.cjs.map} +1 -1
  147. package/dist/{input-zj3eaZM_.js → input-_Hft9vov.js} +1 -1
  148. package/dist/{input-zj3eaZM_.js.map → input-_Hft9vov.js.map} +1 -1
  149. package/dist/{input-chip-DHbfUatc.js → input-chip-BNTojQT6.js} +1 -1
  150. package/dist/{input-chip-DHbfUatc.js.map → input-chip-BNTojQT6.js.map} +1 -1
  151. package/dist/{input-chip-B1iNQW2m.cjs → input-chip-DKMNpcED.cjs} +1 -1
  152. package/dist/{input-chip-B1iNQW2m.cjs.map → input-chip-DKMNpcED.cjs.map} +1 -1
  153. package/dist/input.cjs +1 -1
  154. package/dist/input.js +1 -1
  155. package/dist/json.cjs +1 -1
  156. package/dist/json.js +2 -2
  157. package/dist/kbd.cjs +1 -1
  158. package/dist/kbd.js +1 -1
  159. package/dist/layout.cjs +1 -1
  160. package/dist/layout.js +1 -1
  161. package/dist/{lightbox-CAcXlJlv.js → lightbox-CKlYcnHV.js} +1 -1
  162. package/dist/{lightbox-CAcXlJlv.js.map → lightbox-CKlYcnHV.js.map} +1 -1
  163. package/dist/{lightbox-86F2RgXy.cjs → lightbox-t4dvb8_A.cjs} +1 -1
  164. package/dist/{lightbox-86F2RgXy.cjs.map → lightbox-t4dvb8_A.cjs.map} +1 -1
  165. package/dist/lightbox.cjs +1 -1
  166. package/dist/lightbox.js +1 -1
  167. package/dist/{list-CUbI0RM6.cjs → list-21mWtDKg.cjs} +4 -4
  168. package/dist/list-21mWtDKg.cjs.map +1 -0
  169. package/dist/{list-BIjJ6T1c.js → list-B6QhxgRJ.js} +4 -7
  170. package/dist/list-B6QhxgRJ.js.map +1 -0
  171. package/dist/list.cjs +1 -1
  172. package/dist/list.js +1 -1
  173. package/dist/{magnetic-mHXl54Z8.js.map → magnetic-B2VKNfDu.js.map} +1 -1
  174. package/dist/{magnetic-D-ph029G.cjs.map → magnetic-MQ3HMHJi.cjs.map} +1 -1
  175. package/dist/{menu-CtFcvxgU.js → menu-CjOgPSOG.js} +2 -2
  176. package/dist/{menu-CtFcvxgU.js.map → menu-CjOgPSOG.js.map} +1 -1
  177. package/dist/{menu-DGMrjR_a.cjs → menu-Cu5G4vcR.cjs} +1 -1
  178. package/dist/{menu-DGMrjR_a.cjs.map → menu-Cu5G4vcR.cjs.map} +1 -1
  179. package/dist/menu.cjs +1 -1
  180. package/dist/menu.js +1 -1
  181. package/dist/mixins-8dT5j6CS.js +627 -0
  182. package/dist/mixins-8dT5j6CS.js.map +1 -0
  183. package/dist/mixins-BF3Vj8_c.cjs +242 -0
  184. package/dist/mixins-BF3Vj8_c.cjs.map +1 -0
  185. package/dist/mixins.cjs +1 -1
  186. package/dist/mixins.js +1 -1
  187. package/dist/nav-drawer.cjs +1 -1
  188. package/dist/nav-drawer.js +1 -1
  189. package/dist/navigation-bar.cjs +1 -1
  190. package/dist/navigation-bar.js +1 -1
  191. package/dist/navigation-rail.cjs +7 -5
  192. package/dist/navigation-rail.cjs.map +1 -1
  193. package/dist/navigation-rail.js +52 -38
  194. package/dist/navigation-rail.js.map +1 -1
  195. package/dist/notification-CDKBKh63.js +243 -0
  196. package/dist/notification-CDKBKh63.js.map +1 -0
  197. package/dist/notification-CcNoBFEJ.cjs +24 -0
  198. package/dist/notification-CcNoBFEJ.cjs.map +1 -0
  199. package/dist/notification.cjs +1 -1
  200. package/dist/notification.js +1 -1
  201. package/dist/{option-C3UyYQi_.js → option-BWfmDJvm.js} +1 -1
  202. package/dist/{option-C3UyYQi_.js.map → option-BWfmDJvm.js.map} +1 -1
  203. package/dist/{option-DJ3R-2Wn.cjs → option-DejeqOad.cjs} +1 -1
  204. package/dist/{option-DJ3R-2Wn.cjs.map → option-DejeqOad.cjs.map} +1 -1
  205. package/dist/option.cjs +1 -1
  206. package/dist/option.js +1 -1
  207. package/dist/{overlay-D1hFkcFA.js → overlay-D3c_NY18.js} +214 -265
  208. package/dist/overlay-D3c_NY18.js.map +1 -0
  209. package/dist/overlay-Dv2utO4C.cjs +43 -0
  210. package/dist/overlay-Dv2utO4C.cjs.map +1 -0
  211. package/dist/overlay.cjs +1 -1
  212. package/dist/overlay.confirm-body-B2ntyquG.cjs +79 -0
  213. package/dist/overlay.confirm-body-B2ntyquG.cjs.map +1 -0
  214. package/dist/overlay.confirm-body-B_v0ivkn.js +159 -0
  215. package/dist/overlay.confirm-body-B_v0ivkn.js.map +1 -0
  216. package/dist/overlay.js +3 -3
  217. package/dist/overlay.service-B3FjXCqc.js +143 -0
  218. package/dist/overlay.service-B3FjXCqc.js.map +1 -0
  219. package/dist/overlay.service-BkSeqXIv.cjs +1 -0
  220. package/dist/overlay.service-BkSeqXIv.cjs.map +1 -0
  221. package/dist/{progress-CY-UbvOB.cjs → progress-6_rb3Ah9.cjs} +1 -1
  222. package/dist/{progress-CY-UbvOB.cjs.map → progress-6_rb3Ah9.cjs.map} +1 -1
  223. package/dist/{progress-YjdEWDI5.js → progress-CFcmO0wv.js} +1 -1
  224. package/dist/{progress-YjdEWDI5.js.map → progress-CFcmO0wv.js.map} +1 -1
  225. package/dist/progress.cjs +1 -1
  226. package/dist/progress.js +1 -1
  227. package/dist/{radio-group-aKXKHqUp.js → radio-group-Bd8y9QpX.js} +1 -1
  228. package/dist/{radio-group-aKXKHqUp.js.map → radio-group-Bd8y9QpX.js.map} +1 -1
  229. package/dist/{radio-group--UamzqAm.cjs → radio-group-_WZg8EKM.cjs} +1 -1
  230. package/dist/{radio-group--UamzqAm.cjs.map → radio-group-_WZg8EKM.cjs.map} +1 -1
  231. package/dist/radio-group.cjs +1 -1
  232. package/dist/radio-group.js +1 -1
  233. package/dist/range.cjs +1 -1
  234. package/dist/range.js +1 -1
  235. package/dist/{rxjs-utils-CaC-tdot.cjs.map → rxjs-utils-Csnks202.cjs.map} +1 -1
  236. package/dist/{rxjs-utils-BXpvHN4-.js.map → rxjs-utils-d-ivVN84.js.map} +1 -1
  237. package/dist/rxjs-utils.cjs +1 -1
  238. package/dist/rxjs-utils.js +1 -1
  239. package/dist/{select-CIquL8LY.cjs → select-BaioT3yY.cjs} +2 -2
  240. package/dist/{select-CIquL8LY.cjs.map → select-BaioT3yY.cjs.map} +1 -1
  241. package/dist/{select-B0Qk4PfT.js → select-Czpl1ztD.js} +3 -3
  242. package/dist/{select-B0Qk4PfT.js.map → select-Czpl1ztD.js.map} +1 -1
  243. package/dist/select.cjs +1 -1
  244. package/dist/select.js +1 -1
  245. package/dist/skeleton.cjs +1 -1
  246. package/dist/skeleton.js +1 -1
  247. package/dist/skills/SKILL.md +1 -1
  248. package/dist/skills/list.md +0 -1
  249. package/dist/skills/schmancy/SKILL.md +1 -1
  250. package/dist/skills/schmancy/list.md +0 -1
  251. package/dist/slider.cjs +1 -1
  252. package/dist/slider.js +1 -1
  253. package/dist/{splash-screen-rg56AXCf.cjs → splash-screen-3FtgdVy3.cjs} +1 -1
  254. package/dist/{splash-screen-rg56AXCf.cjs.map → splash-screen-3FtgdVy3.cjs.map} +1 -1
  255. package/dist/{splash-screen-CP_Idse2.js → splash-screen-YtTVkJg8.js} +1 -1
  256. package/dist/{splash-screen-CP_Idse2.js.map → splash-screen-YtTVkJg8.js.map} +1 -1
  257. package/dist/splash-screen.cjs +1 -1
  258. package/dist/splash-screen.js +1 -1
  259. package/dist/{src-BAaNnqwc.cjs → src-0LIdvAX6.cjs} +8 -8
  260. package/dist/{src-BAaNnqwc.cjs.map → src-0LIdvAX6.cjs.map} +1 -1
  261. package/dist/{src-Do0IGupa.js → src-BJHws7IS.js} +37 -37
  262. package/dist/{src-Do0IGupa.js.map → src-BJHws7IS.js.map} +1 -1
  263. package/dist/steps.cjs +1 -1
  264. package/dist/steps.js +1 -1
  265. package/dist/{surface-B7a2O5-9.cjs → surface-BNvxLEDN.cjs} +1 -1
  266. package/dist/surface-BNvxLEDN.cjs.map +1 -0
  267. package/dist/{surface-DGewe6IV.js → surface-CVxyQPln.js} +1 -1
  268. package/dist/surface-CVxyQPln.js.map +1 -0
  269. package/dist/surface.cjs +1 -1
  270. package/dist/surface.js +1 -1
  271. package/dist/switch.cjs +1 -1
  272. package/dist/switch.js +1 -1
  273. package/dist/table.cjs +1 -1
  274. package/dist/table.js +1 -1
  275. package/dist/{tabs-g2aM43TH.js → tabs-CnPXvZuZ.js} +1 -1
  276. package/dist/{tabs-g2aM43TH.js.map → tabs-CnPXvZuZ.js.map} +1 -1
  277. package/dist/{tabs-n4dO5fo1.cjs → tabs-DTU7748z.cjs} +1 -1
  278. package/dist/{tabs-n4dO5fo1.cjs.map → tabs-DTU7748z.cjs.map} +1 -1
  279. package/dist/tabs.cjs +1 -1
  280. package/dist/tabs.js +1 -1
  281. package/dist/teleport.cjs +1 -1
  282. package/dist/teleport.js +1 -1
  283. package/dist/{textarea-DDx_7AfQ.cjs → textarea-Bqth6Q8P.cjs} +1 -1
  284. package/dist/{textarea-DDx_7AfQ.cjs.map → textarea-Bqth6Q8P.cjs.map} +1 -1
  285. package/dist/{textarea-D5hw4jsP.js → textarea-mQPsppmd.js} +1 -1
  286. package/dist/{textarea-D5hw4jsP.js.map → textarea-mQPsppmd.js.map} +1 -1
  287. package/dist/textarea.cjs +1 -1
  288. package/dist/textarea.js +1 -1
  289. package/dist/{theme-BMYkheaA.js → theme-BJqpv4cG.js} +2 -2
  290. package/dist/{theme-BMYkheaA.js.map → theme-BJqpv4cG.js.map} +1 -1
  291. package/dist/{theme-BdZAj0CO.cjs → theme-D4HGKt7N.cjs} +1 -1
  292. package/dist/{theme-BdZAj0CO.cjs.map → theme-D4HGKt7N.cjs.map} +1 -1
  293. package/dist/{theme-button-DdI6kxY3.js → theme-button-Jap7G_IH.js} +1 -1
  294. package/dist/{theme-button-DdI6kxY3.js.map → theme-button-Jap7G_IH.js.map} +1 -1
  295. package/dist/{theme-button-R2f_kLEl.cjs → theme-button-LP-Dgr17.cjs} +1 -1
  296. package/dist/{theme-button-R2f_kLEl.cjs.map → theme-button-LP-Dgr17.cjs.map} +1 -1
  297. package/dist/theme-button.cjs +1 -1
  298. package/dist/theme-button.js +1 -1
  299. package/dist/theme.cjs +1 -1
  300. package/dist/{theme.interface-B5xjEk74.cjs.map → theme.interface-CSt7JUBD.cjs.map} +1 -1
  301. package/dist/{theme.interface-DVEw3s8m.js.map → theme.interface-odQEpZZH.js.map} +1 -1
  302. package/dist/theme.js +3 -3
  303. package/dist/tree.cjs +1 -1
  304. package/dist/tree.js +1 -1
  305. package/dist/typography-BJMm6b0b.js +358 -0
  306. package/dist/typography-BJMm6b0b.js.map +1 -0
  307. package/dist/typography-Bc4MmSal.cjs +282 -0
  308. package/dist/typography-Bc4MmSal.cjs.map +1 -0
  309. package/dist/typography.cjs +1 -282
  310. package/dist/typography.js +2 -358
  311. package/dist/{utils-CVWUrECT.cjs.map → utils-DTa3QHxk.cjs.map} +1 -1
  312. package/dist/{utils-578eFTx4.js.map → utils-H8wNknWC.js.map} +1 -1
  313. package/dist/utils.cjs +1 -1
  314. package/dist/utils.js +1 -1
  315. package/dist/visually-hidden.cjs +1 -1
  316. package/dist/visually-hidden.js +1 -1
  317. package/dist/{window-LOGPpN8K.cjs → window-CNu_WnsY.cjs} +1 -1
  318. package/dist/{window-LOGPpN8K.cjs.map → window-CNu_WnsY.cjs.map} +1 -1
  319. package/dist/{window-MQxhTodp.js → window-DZTjkE24.js} +1 -1
  320. package/dist/{window-MQxhTodp.js.map → window-DZTjkE24.js.map} +1 -1
  321. package/dist/window.cjs +1 -1
  322. package/dist/window.js +1 -1
  323. package/package.json +1 -1
  324. package/skills/schmancy/SKILL.md +1 -1
  325. package/skills/schmancy/list.md +0 -1
  326. package/src/list/list.ts +1 -12
  327. package/src/navigation-rail/navigation-rail.ts +558 -490
  328. package/src/notification/notification-service.ts +81 -263
  329. package/src/notification/notification.scss +93 -50
  330. package/src/notification/notification.ts +32 -69
  331. package/src/overlay/overlay.component.ts +99 -158
  332. package/src/overlay/overlay.confirm-body.ts +106 -61
  333. package/src/overlay/overlay.service.ts +81 -108
  334. package/src/surface/surface.styles.ts +0 -17
  335. package/src/surface/surface.ts +5 -7
  336. package/types/mixins/surface.mixin.d.ts +0 -3
  337. package/types/src/list/list.d.ts +0 -9
  338. package/types/src/navigation-rail/navigation-rail.d.ts +21 -1
  339. package/types/src/notification/notification-service.d.ts +3 -86
  340. package/types/src/notification/notification.d.ts +1 -1
  341. package/types/src/overlay/overlay.component.d.ts +1 -2
  342. package/types/src/overlay/overlay.confirm-body.d.ts +8 -4
  343. package/types/src/surface/surface.d.ts +5 -6
  344. package/types/src/surface/surface.styles.d.ts +0 -4
  345. package/dist/agent/overlay.confirm-body-DJrL6tio.js +0 -2859
  346. package/dist/agent/overlay.confirm-body-DJrL6tio.js.map +0 -1
  347. package/dist/button-BU-X0a0S.js.map +0 -1
  348. package/dist/button-HzLpB3NP.cjs.map +0 -1
  349. package/dist/directives-Dq0zi2KR.cjs.map +0 -1
  350. package/dist/directives-sWKTEJDb.js.map +0 -1
  351. package/dist/form-DxApnyVx.cjs +0 -42
  352. package/dist/icons-3F1nQAn_.cjs.map +0 -1
  353. package/dist/list-BIjJ6T1c.js.map +0 -1
  354. package/dist/list-CUbI0RM6.cjs.map +0 -1
  355. package/dist/mixins-CKbQ6BJo.js +0 -642
  356. package/dist/mixins-CKbQ6BJo.js.map +0 -1
  357. package/dist/mixins-DSy-enUd.cjs +0 -254
  358. package/dist/mixins-DSy-enUd.cjs.map +0 -1
  359. package/dist/notification-BqyMYtP7.js +0 -306
  360. package/dist/notification-BqyMYtP7.js.map +0 -1
  361. package/dist/notification-D5eOdsMT.cjs +0 -23
  362. package/dist/notification-D5eOdsMT.cjs.map +0 -1
  363. package/dist/overlay-D1hFkcFA.js.map +0 -1
  364. package/dist/overlay-D7nQaT5U.cjs +0 -81
  365. package/dist/overlay-D7nQaT5U.cjs.map +0 -1
  366. package/dist/overlay.confirm-body-B4eCDLmU.js +0 -100
  367. package/dist/overlay.confirm-body-B4eCDLmU.js.map +0 -1
  368. package/dist/overlay.confirm-body-P18SmJL2.cjs +0 -45
  369. package/dist/overlay.confirm-body-P18SmJL2.cjs.map +0 -1
  370. package/dist/overlay.service-02ZLZ8Ib.js +0 -146
  371. package/dist/overlay.service-02ZLZ8Ib.js.map +0 -1
  372. package/dist/overlay.service-m-8omCA-.cjs +0 -1
  373. package/dist/overlay.service-m-8omCA-.cjs.map +0 -1
  374. package/dist/surface-B7a2O5-9.cjs.map +0 -1
  375. package/dist/surface-DGewe6IV.js.map +0 -1
  376. package/dist/typography.cjs.map +0 -1
  377. package/dist/typography.js.map +0 -1
  378. /package/dist/{discovery.service-CVDXO9rH.cjs → discovery.service-CIa3Eeuk.cjs} +0 -0
  379. /package/dist/{discovery.service-COmbHaoI.js → discovery.service-DZFxtRwW.js} +0 -0
  380. /package/dist/{hashContent-Dgmzc32o.js → hashContent-BqU6v1Xr.js} +0 -0
  381. /package/dist/{hashContent-Dh1VzIAb.cjs → hashContent-iRZJJWtE.cjs} +0 -0
  382. /package/dist/{magnetic-mHXl54Z8.js → magnetic-B2VKNfDu.js} +0 -0
  383. /package/dist/{magnetic-D-ph029G.cjs → magnetic-MQ3HMHJi.cjs} +0 -0
  384. /package/dist/{rxjs-utils-CaC-tdot.cjs → rxjs-utils-Csnks202.cjs} +0 -0
  385. /package/dist/{rxjs-utils-BXpvHN4-.js → rxjs-utils-d-ivVN84.js} +0 -0
  386. /package/dist/{theme.interface-B5xjEk74.cjs → theme.interface-CSt7JUBD.cjs} +0 -0
  387. /package/dist/{theme.interface-DVEw3s8m.js → theme.interface-odQEpZZH.js} +0 -0
  388. /package/dist/{utils-CVWUrECT.cjs → utils-DTa3QHxk.cjs} +0 -0
  389. /package/dist/{utils-578eFTx4.js → utils-H8wNknWC.js} +0 -0
@@ -8,40 +8,22 @@ import style from './notification.scss?inline'
8
8
 
9
9
  export type NotificationType = 'info' | 'success' | 'warning' | 'error'
10
10
 
11
- /**
12
- * Calculate a point on an arc between two points
13
- */
14
- function calculateArcPoint(
15
- start: { x: number; y: number },
16
- end: { x: number; y: number },
17
- arcDirection: 'up' | 'down' = 'up',
18
- intensity: number = 0.3,
19
- ): { x: number; y: number } {
20
- const midX = (start.x + end.x) / 2
21
- const midY = (start.y + end.y) / 2
22
- const distance = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2))
23
- const arcHeight = Math.min(distance * intensity, 150)
24
- return {
25
- x: midX,
26
- y: arcDirection === 'up' ? midY - arcHeight : midY + arcHeight,
27
- }
28
- }
29
-
30
11
  /**
31
12
  * @fires close - When notification is closed
32
13
  */
33
14
  @customElement('sch-notification')
34
15
  export default class SchmancyNotification extends SchmancyElement {
35
- static styles = [unsafeCSS(style)];
16
+ static styles = [unsafeCSS(style)]
36
17
 
37
18
  @property({ type: String }) title = ''
38
19
  @property({ type: String }) message = ''
39
20
  @property({ type: String }) type: NotificationType = 'info'
40
21
  @property({ type: Boolean }) closable = true
41
- @property({ type: Number }) duration = 5000 // 0 means no auto-close
22
+ @property({ type: Number }) duration = 5000
42
23
  @property({ type: String }) id = `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`
43
24
  @property({ type: Boolean }) playSound = true
44
- @property({ type: Boolean }) showProgress = false // Show indeterminate progress bar
25
+ @property({ type: Boolean }) showProgress = false
26
+ // startPosition retained for API compatibility — not used in entrance animation
45
27
  @property({ type: Object }) startPosition: { x: number; y: number } = { x: 0, y: 0 }
46
28
 
47
29
  @state() private _visible = true
@@ -57,14 +39,12 @@ export default class SchmancyNotification extends SchmancyElement {
57
39
  connectedCallback() {
58
40
  super.connectedCallback()
59
41
 
60
- // Set fixed positioning for blackbird animation
61
42
  this.style.position = 'fixed'
62
43
  this.style.top = '16px'
63
44
  this.style.right = '16px'
64
45
  this.style.zIndex = '10001'
65
46
  this.style.opacity = '0'
66
47
 
67
- // Animate in after first render
68
48
  this.updateComplete.then(() => {
69
49
  this.animateIn()
70
50
  return
@@ -81,34 +61,17 @@ export default class SchmancyNotification extends SchmancyElement {
81
61
  }
82
62
 
83
63
  private async animateIn() {
84
- // Get the notification element's final position
85
- const rect = this.getBoundingClientRect()
86
- const targetX = rect.left + rect.width / 2
87
- const targetY = rect.top + rect.height / 2
88
-
89
- // Calculate arc point for upward arc
90
- const arcPoint = calculateArcPoint(this.startPosition, { x: targetX, y: targetY }, 'up', 0.3)
91
-
92
- // Animate from click position to final position with arc
64
+ const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches
93
65
  await this.animate(
94
- [
95
- {
96
- transform: `translate(${this.startPosition.x - targetX}px, ${this.startPosition.y - targetY}px) scale(0.1)`,
97
- opacity: 0,
98
- },
99
- {
100
- transform: `translate(${arcPoint.x - targetX}px, ${arcPoint.y - targetY}px) scale(0.6)`,
101
- opacity: 0.9,
102
- offset: 0.5,
103
- },
104
- {
105
- transform: 'translate(0, 0) scale(1)',
106
- opacity: 1,
107
- },
108
- ],
66
+ reduced
67
+ ? [{ opacity: 0 }, { opacity: 1 }]
68
+ : [
69
+ { transform: 'translateX(40px) scale(0.96)', opacity: 0 },
70
+ { transform: 'translateX(0) scale(1)', opacity: 1 },
71
+ ],
109
72
  {
110
- duration: 400,
111
- easing: 'cubic-bezier(0.34, 1.2, 0.64, 1)',
73
+ duration: reduced ? 200 : 360,
74
+ easing: 'cubic-bezier(0.22, 1, 0.36, 1)',
112
75
  fill: 'forwards',
113
76
  },
114
77
  ).finished
@@ -191,14 +154,13 @@ export default class SchmancyNotification extends SchmancyElement {
191
154
  this._closing = true
192
155
  this._visible = false
193
156
 
194
- // Animate out before dispatching close event
195
157
  await this.animate(
196
158
  [
197
- { transform: 'translate(0, 0) scale(1)', opacity: 1 },
198
- { transform: 'translate(0, -20px) scale(0.8)', opacity: 0 },
159
+ { transform: 'translateX(0) scale(1)', opacity: 1 },
160
+ { transform: 'translateX(20px) scale(0.98)', opacity: 0 },
199
161
  ],
200
162
  {
201
- duration: 200,
163
+ duration: 180,
202
164
  easing: 'cubic-bezier(0.4, 0, 1, 1)',
203
165
  fill: 'forwards',
204
166
  },
@@ -213,16 +175,16 @@ export default class SchmancyNotification extends SchmancyElement {
213
175
  )
214
176
  }
215
177
 
216
- private _getEmoji(): string {
178
+ private _getTypeLabel(): string {
217
179
  switch (this.type) {
218
180
  case 'success':
219
- return '\u2705'
181
+ return 'SUCCESS'
220
182
  case 'warning':
221
- return '\u26A0\uFE0F'
183
+ return 'WARNING'
222
184
  case 'error':
223
- return '\u274C'
185
+ return 'ERROR'
224
186
  default:
225
- return '\u{1F4A1}'
187
+ return 'INFO'
226
188
  }
227
189
  }
228
190
 
@@ -236,24 +198,25 @@ export default class SchmancyNotification extends SchmancyElement {
236
198
  @mouseenter=${this._handleMouseEnter}
237
199
  @mouseleave=${this._handleMouseLeave}
238
200
  >
239
- <span class="emoji">${this._getEmoji()}</span>
201
+ ${this.showProgress || this.duration > 0
202
+ ? html`<schmancy-progress
203
+ class="progress"
204
+ size="xs"
205
+ .value=${this._progress}
206
+ ?indeterminate=${this.showProgress && this.duration === 0}
207
+ ></schmancy-progress>`
208
+ : ''}
209
+ <div class="accent-rail"></div>
240
210
  <div class="content">
211
+ <span class="type-tag">${this._getTypeLabel()}</span>
241
212
  ${this.title ? html`<div class="title">${this.title}</div>` : ''}
242
213
  <div class="message">${this.message}</div>
243
214
  </div>
244
215
  ${this.closable
245
216
  ? html`
246
- <button class="close" aria-label="Close notification" @click=${this.close}>x</button>
217
+ <button class="close" aria-label="Close notification" @click=${this.close}>&#215;</button>
247
218
  `
248
219
  : ''}
249
- ${this.showProgress || this.duration > 0
250
- ? html`<schmancy-progress
251
- class="progress"
252
- size="xs"
253
- .value=${this._progress}
254
- ?indeterminate=${this.showProgress && this.duration === 0}
255
- ></schmancy-progress>`
256
- : ''}
257
220
  </div>
258
221
  `
259
222
  }
@@ -5,6 +5,7 @@ import { when } from 'lit/directives/when.js'
5
5
  import {
6
6
  debounceTime,
7
7
  distinctUntilChanged,
8
+ EMPTY,
8
9
  filter,
9
10
  fromEvent,
10
11
  map,
@@ -72,67 +73,29 @@ export class SchmancyOverlay extends SchmancyElement {
72
73
  :host {
73
74
  position: fixed;
74
75
  inset: 0;
75
- z-index: var(--schmancy-overlay-z, 10000);
76
+ z-index: 10000;
76
77
  display: none;
77
78
  pointer-events: none;
78
79
  }
79
80
  :host([active]) {
80
81
  display: block;
81
82
  }
82
- .shell {
83
- position: fixed;
84
- inset: 0;
85
- pointer-events: none;
86
- }
83
+ /* Vertical-gradient scrim — Tailwind's bg-gradient utilities cannot reach
84
+ * these color-mix percentages with sufficient control. */
87
85
  .backdrop {
88
- position: fixed;
89
- inset: 0;
90
- background: color-mix(in srgb, var(--schmancy-sys-color-surface-container, rgba(12, 12, 16, 0.28)) 60%, transparent);
91
- backdrop-filter: blur(18px) saturate(150%);
92
- -webkit-backdrop-filter: blur(18px) saturate(150%);
93
- pointer-events: auto;
94
- }
95
- .surface {
96
- position: fixed;
97
- pointer-events: auto;
98
- max-width: calc(100vw - 2rem);
99
- max-height: 90dvh;
100
- overflow: auto;
101
- border-radius: var(--schmancy-sys-shape-corner-large, 16px);
102
- background: var(--schmancy-sys-color-surface, #ffffff);
103
- color: var(--schmancy-sys-color-on-surface, #1a1a1a);
104
- box-shadow: 0 24px 64px -16px rgba(0, 0, 0, 0.35);
105
- padding: var(--schmancy-overlay-padding, 1.5rem);
106
- }
107
- .surface[data-layout='centered'] {
108
- top: 50%;
109
- left: 50%;
110
- transform: translate(-50%, -50%);
111
- }
112
- .surface[data-layout='sheet'] {
113
- left: 0;
114
- right: 0;
115
- bottom: 0;
116
- max-width: none;
117
- width: 100%;
118
- border-radius: var(--schmancy-sys-shape-corner-large, 16px) var(--schmancy-sys-shape-corner-large, 16px) 0 0;
119
- padding-bottom: env(safe-area-inset-bottom);
120
- }
121
- .surface[data-layout='anchored'] {
122
- max-width: min(480px, calc(100vw - 2rem));
123
- box-shadow: 0 12px 32px -8px rgba(0, 0, 0, 0.28);
86
+ background: linear-gradient(
87
+ to bottom,
88
+ color-mix(in srgb, var(--schmancy-sys-color-scrim) 18%, transparent) 0%,
89
+ color-mix(in srgb, var(--schmancy-sys-color-scrim) 56%, transparent) 100%
90
+ );
91
+ -webkit-backdrop-filter: blur(16px) saturate(160%);
92
+ backdrop-filter: blur(16px) saturate(160%);
124
93
  }
125
- /* Popover top-layer surfaces escape normal z-index zero out host
126
- * display to avoid two surfaces rendering during transitions. */
94
+ /* Popover top-layer surfaces UA defaults push surface off-screen. */
127
95
  .surface:popover-open {
128
96
  margin: 0;
129
97
  border: 0;
130
98
  }
131
- @media (prefers-reduced-motion: reduce) {
132
- .surface {
133
- box-shadow: var(--schmancy-sys-elevation-2, 0 2px 6px rgba(0, 0, 0, 0.2));
134
- }
135
- }
136
99
  `]
137
100
 
138
101
  @property({ type: String, reflect: true }) layout: OverlayLayout = 'centered'
@@ -223,10 +186,10 @@ export class SchmancyOverlay extends SchmancyElement {
223
186
  })
224
187
  // Pair with Popover API to get native top-layer + light-dismiss.
225
188
  const popoverCleanup = positionPopoverAPI(this._surface)
226
- const prior = this._positionerTeardown
189
+ const cssAnchorTeardown = this._positionerTeardown
227
190
  this._positionerTeardown = () => {
228
191
  popoverCleanup()
229
- prior()
192
+ cssAnchorTeardown?.()
230
193
  }
231
194
  } else if (this.tier === 'popover-fui' && this._resolvedAnchor) {
232
195
  const popoverCleanup = positionPopoverAPI(this._surface)
@@ -265,7 +228,7 @@ export class SchmancyOverlay extends SchmancyElement {
265
228
  this.wireResizeObserver(mount)
266
229
 
267
230
  // Play entrance animations.
268
- await this.playEnterAnimations()
231
+ await this.playAnimations('in')
269
232
  }
270
233
 
271
234
  /** Play exit animations then dismiss. */
@@ -273,7 +236,7 @@ export class SchmancyOverlay extends SchmancyElement {
273
236
  if (this._closing || !this._mounted) return
274
237
  this._closing = true
275
238
  try {
276
- await this.playExitAnimations()
239
+ await this.playAnimations('out')
277
240
  } catch {
278
241
  // animation cancelled mid-flight — not an error.
279
242
  }
@@ -296,14 +259,24 @@ export class SchmancyOverlay extends SchmancyElement {
296
259
 
297
260
  protected render(): TemplateResult {
298
261
  if (!this._active) return html``
262
+ const baseClasses =
263
+ 'surface fixed pointer-events-auto overflow-auto ' +
264
+ 'bg-surface-container/85 text-surface-on backdrop-blur-md ' +
265
+ 'border border-surface-on/8'
266
+ const layoutClasses =
267
+ this.layout === 'centered'
268
+ ? 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 max-w-[min(calc(100vw-2rem),560px)] max-h-[90dvh] rounded-3xl shadow-overlay'
269
+ : this.layout === 'sheet'
270
+ ? 'left-0 right-0 bottom-0 w-full max-h-[90dvh] rounded-t-[28px] shadow-overlay'
271
+ : 'max-w-[min(480px,calc(100vw-2rem))] max-h-[90dvh] rounded-3xl shadow-overlay-anchored'
299
272
  return html`
300
- <div class="shell" part="shell">
273
+ <div class="shell fixed inset-0 pointer-events-none" part="shell">
301
274
  ${when(
302
275
  this.modal,
303
- () => html`<div class="backdrop" part="backdrop" @click=${this.onBackdropClick}></div>`,
276
+ () => html`<div class="backdrop fixed inset-0 pointer-events-auto" part="backdrop" @click=${this.onBackdropClick}></div>`,
304
277
  )}
305
278
  <section
306
- class="surface"
279
+ class="${baseClasses} ${layoutClasses}"
307
280
  part="surface"
308
281
  data-layout=${this.layout}
309
282
  data-tier=${this.tier}
@@ -378,56 +351,46 @@ export class SchmancyOverlay extends SchmancyElement {
378
351
  private wireCloseTriggers(signal?: AbortSignal): void {
379
352
  const until = this.disconnecting
380
353
 
354
+ // Handle already-aborted signal synchronously — no stream needed.
355
+ if (signal?.aborted) {
356
+ queueMicrotask(() => void this.close('abort'))
357
+ return
358
+ }
359
+
381
360
  // Structured close — content dispatches CustomEvent('close', { detail }).
382
- fromEvent<CustomEvent>(this, 'close')
383
- .pipe(
384
- filter((e) => e instanceof CustomEvent),
385
- tap((e) => {
386
- e.stopPropagation()
387
- void this.close('structured', e.detail)
388
- }),
389
- takeUntil(until),
390
- )
391
- .subscribe()
361
+ const structured$ = fromEvent<CustomEvent>(this, 'close').pipe(
362
+ filter((e) => e instanceof CustomEvent),
363
+ tap((e) => e.stopPropagation()),
364
+ map((e) => ({ reason: 'structured' as CloseReason, result: e.detail })),
365
+ )
392
366
 
393
367
  // Native <form method="dialog"> submission bubbles up as a regular
394
368
  // submit event with `submitter.value` (returnValue proxy for our
395
369
  // custom shell). Capture it and resolve with the string value.
396
- fromEvent<SubmitEvent>(this, 'submit')
397
- .pipe(
398
- filter((e) => {
399
- const form = e.target as HTMLFormElement | null
400
- return !!form && form.method === 'dialog'
401
- }),
402
- tap((e) => {
403
- e.preventDefault()
404
- const submitter = (e as SubmitEvent & { submitter?: HTMLButtonElement | HTMLInputElement })
405
- .submitter
406
- const value = submitter?.value ?? ''
407
- void this.close('native-submit', value)
408
- }),
409
- takeUntil(until),
410
- )
411
- .subscribe()
370
+ const nativeSubmit$ = fromEvent<SubmitEvent>(this, 'submit').pipe(
371
+ filter((e) => {
372
+ const form = e.target as HTMLFormElement | null
373
+ return !!form && form.method === 'dialog'
374
+ }),
375
+ tap((e) => e.preventDefault()),
376
+ map((e) => {
377
+ const submitter = (e as SubmitEvent & { submitter?: HTMLButtonElement | HTMLInputElement })
378
+ .submitter
379
+ return { reason: 'native-submit' as CloseReason, result: submitter?.value ?? '' }
380
+ }),
381
+ )
412
382
 
413
383
  // Manual Esc — all tiers. Modal has no native dismiss; anchored
414
384
  // tiers use `popover="manual"` so the browser doesn't auto-Esc them
415
385
  // either (the auto popover-stack would close ancestor overlays when
416
386
  // a nested overlay opens — see positionPopoverAPI's comment).
417
- fromEvent<KeyboardEvent>(document, 'keydown')
418
- .pipe(
419
- filter((e) => e.key === 'Escape'),
420
- tap((e) => {
421
- if (!this.dismissable) {
422
- e.preventDefault()
423
- return
424
- }
425
- e.preventDefault()
426
- void this.close('escape')
427
- }),
428
- takeUntil(until),
429
- )
430
- .subscribe()
387
+ const escape$ = fromEvent<KeyboardEvent>(document, 'keydown').pipe(
388
+ filter((e) => e.key === 'Escape'),
389
+ tap((e) => e.preventDefault()),
390
+ filter(() => this.dismissable),
391
+ map(() => ({ reason: 'escape' as CloseReason })),
392
+ take(1),
393
+ )
431
394
 
432
395
  // Manual outside-click — all anchored tiers. Modal layouts have a
433
396
  // backdrop that catches outside clicks via `onBackdropClick`; the
@@ -437,50 +400,49 @@ export class SchmancyOverlay extends SchmancyElement {
437
400
  // `Node.contains`) so clicks on elements inside slotted /
438
401
  // shadow-DOM descendants of the surface are correctly classified
439
402
  // as "inside".
440
- if (this.tier !== 'modal') {
441
- fromEvent<PointerEvent>(document, 'pointerdown', { capture: true })
442
- .pipe(
443
- filter((e) => {
444
- if (!this.dismissable) return false
445
- const path = e.composedPath()
446
- if (this._surface && path.includes(this._surface)) return false
447
- if (this._resolvedAnchor?.el && path.includes(this._resolvedAnchor.el)) return false
448
- return true
449
- }),
450
- take(1),
451
- tap(() => void this.close('backdrop')),
452
- takeUntil(until),
453
- )
454
- .subscribe()
455
- }
403
+ const outsideClick$ = this.tier !== 'modal'
404
+ ? fromEvent<PointerEvent>(document, 'pointerdown', { capture: true }).pipe(
405
+ filter((e) => {
406
+ if (!this.dismissable) return false
407
+ const path = e.composedPath()
408
+ if (this._surface && path.includes(this._surface)) return false
409
+ if (this._resolvedAnchor?.el && path.includes(this._resolvedAnchor.el)) return false
410
+ return true
411
+ }),
412
+ map(() => ({ reason: 'backdrop' as CloseReason })),
413
+ take(1),
414
+ )
415
+ : null
456
416
 
457
417
  // Swipe-to-dismiss for sheet layout only. No visual drag handle —
458
418
  // the gesture starts from the top 40px of the surface (see
459
419
  // DRAG_START_TOP_PX in overlay.gestures). Escape + backdrop click
460
420
  // cover the other dismiss paths via the modal-tier listeners above.
461
- if (this.layout === 'sheet' && this.dismissable) {
462
- swipeToDismiss$({
463
- surface: this._surface,
464
- until$: merge(until, this._closed$),
465
- })
466
- .pipe(take(1))
467
- .subscribe(() => void this.close('swipe'))
468
- }
421
+ const swipe$ = this.layout === 'sheet' && this.dismissable
422
+ ? swipeToDismiss$({ surface: this._surface, until$: merge(until, this._closed$) }).pipe(
423
+ take(1),
424
+ map(() => ({ reason: 'swipe' as CloseReason })),
425
+ )
426
+ : null
469
427
 
470
428
  // AbortSignal — standard cancellation input.
471
- if (signal) {
472
- if (signal.aborted) {
473
- queueMicrotask(() => void this.close('abort'))
474
- } else {
475
- fromEvent(signal, 'abort')
476
- .pipe(
477
- take(1),
478
- tap(() => void this.close('abort')),
479
- takeUntil(until),
480
- )
481
- .subscribe()
482
- }
483
- }
429
+ const abort$ = signal
430
+ ? fromEvent(signal, 'abort').pipe(
431
+ take(1),
432
+ map(() => ({ reason: 'abort' as CloseReason })),
433
+ )
434
+ : null
435
+
436
+ merge(
437
+ structured$,
438
+ nativeSubmit$,
439
+ escape$,
440
+ outsideClick$ ?? EMPTY,
441
+ swipe$ ?? EMPTY,
442
+ abort$ ?? EMPTY,
443
+ )
444
+ .pipe(takeUntil(until))
445
+ .subscribe(({ reason, result }: { reason: CloseReason; result?: unknown }) => void this.close(reason, result))
484
446
  }
485
447
 
486
448
  /* ---------------- ResizeObserver FLIP re-resolve ------------------- */
@@ -536,31 +498,10 @@ export class SchmancyOverlay extends SchmancyElement {
536
498
 
537
499
  /* ---------------- animations --------------------------------------- */
538
500
 
539
- private async playEnterAnimations(): Promise<void> {
540
- const surface = this._surface
541
- if (!surface) return
542
- const spec = surfaceAnimation(this.layout, 'in')
543
- const tasks: Promise<unknown>[] = [
544
- surface.animate(spec.keyframes, spec.options).finished.catch(() => undefined),
545
- ]
546
- const backdrop = this._backdrop
547
- if (this.modal && backdrop) {
548
- tasks.push(
549
- backdrop
550
- .animate(
551
- [{ opacity: 0 }, { opacity: 1 }],
552
- { duration: spec.options.duration, easing: 'ease-out', fill: 'forwards' },
553
- )
554
- .finished.catch(() => undefined),
555
- )
556
- }
557
- await Promise.all(tasks)
558
- }
559
-
560
- private async playExitAnimations(): Promise<void> {
501
+ private async playAnimations(direction: 'in' | 'out'): Promise<void> {
561
502
  const surface = this._surface
562
503
  if (!surface) return
563
- const spec = surfaceAnimation(this.layout, 'out')
504
+ const spec = surfaceAnimation(this.layout, direction)
564
505
  const tasks: Promise<unknown>[] = [
565
506
  surface.animate(spec.keyframes, spec.options).finished.catch(() => undefined),
566
507
  ]
@@ -569,8 +510,8 @@ export class SchmancyOverlay extends SchmancyElement {
569
510
  tasks.push(
570
511
  backdrop
571
512
  .animate(
572
- [{ opacity: 1 }, { opacity: 0 }],
573
- { duration: spec.options.duration, easing: 'ease-in', fill: 'forwards' },
513
+ direction === 'in' ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 1 }, { opacity: 0 }],
514
+ { duration: spec.options.duration, easing: direction === 'in' ? 'ease-out' : 'ease-in', fill: 'forwards' },
574
515
  )
575
516
  .finished.catch(() => undefined),
576
517
  )