@mhmo91/schmancy 0.10.17 → 0.10.19

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 (365) hide show
  1. package/dist/agent/{flow-CvG1fLW5.js.map → flow-3RrZM-e7.js.map} +1 -1
  2. package/dist/agent/overlay.confirm-body-D3jQyXgA.js +2863 -0
  3. package/dist/agent/overlay.confirm-body-D3jQyXgA.js.map +1 -0
  4. package/dist/agent/{rolldown-runtime-DsMetpgY.js → rolldown-runtime-BIIoCavz.js} +9 -2
  5. package/dist/agent/schmancy.agent.js +3938 -5911
  6. package/dist/agent/schmancy.agent.js.map +1 -1
  7. package/dist/agent/{vendor-material-color-DcL7ZPxx.js.map → vendor-material-color-33Mj762T.js.map} +1 -1
  8. package/dist/{area-ChxsDTu_.js → area-BIipuSyO.js} +1 -1
  9. package/dist/{area-ChxsDTu_.js.map → area-BIipuSyO.js.map} +1 -1
  10. package/dist/{area-Qt6yUnuA.cjs → area-C-EMiNEE.cjs} +1 -1
  11. package/dist/{area-Qt6yUnuA.cjs.map → area-C-EMiNEE.cjs.map} +1 -1
  12. package/dist/area.cjs +1 -1
  13. package/dist/area.js +1 -1
  14. package/dist/{audio-D-TZzpXF.cjs → audio-Cvmemu84.cjs} +1 -1
  15. package/dist/{audio-D-TZzpXF.cjs.map → audio-Cvmemu84.cjs.map} +1 -1
  16. package/dist/{audio-DS43uoRA.js → audio-CxO5a2HL.js} +1 -1
  17. package/dist/{audio-DS43uoRA.js.map → audio-CxO5a2HL.js.map} +1 -1
  18. package/dist/audio.cjs +1 -1
  19. package/dist/audio.js +2 -2
  20. package/dist/{autocomplete-Ck2zbdF9.cjs → autocomplete-B8CE5vGw.cjs} +1 -1
  21. package/dist/{autocomplete-Ck2zbdF9.cjs.map → autocomplete-B8CE5vGw.cjs.map} +1 -1
  22. package/dist/{autocomplete-CXvUjMD-.js → autocomplete-Mrb3koUN.js} +2 -2
  23. package/dist/{autocomplete-CXvUjMD-.js.map → autocomplete-Mrb3koUN.js.map} +1 -1
  24. package/dist/autocomplete.cjs +1 -1
  25. package/dist/autocomplete.js +1 -1
  26. package/dist/avatar.cjs +1 -1
  27. package/dist/avatar.js +1 -1
  28. package/dist/badge.cjs +1 -1
  29. package/dist/badge.js +1 -1
  30. package/dist/{boat-Bj0wVcZi.js → boat-CNWIQPA1.js} +2 -5
  31. package/dist/{boat-Bj0wVcZi.js.map → boat-CNWIQPA1.js.map} +1 -1
  32. package/dist/{boat-DpFkILFF.cjs → boat-OatK_MGh.cjs} +2 -2
  33. package/dist/{boat-DpFkILFF.cjs.map → boat-OatK_MGh.cjs.map} +1 -1
  34. package/dist/boat.cjs +1 -1
  35. package/dist/boat.js +1 -1
  36. package/dist/breadcrumb.cjs +2 -1
  37. package/dist/breadcrumb.cjs.map +1 -1
  38. package/dist/breadcrumb.js +2 -1
  39. package/dist/breadcrumb.js.map +1 -1
  40. package/dist/{busy-CtcnclA3.cjs → busy-CMKX4oQf.cjs} +1 -1
  41. package/dist/{busy-CtcnclA3.cjs.map → busy-CMKX4oQf.cjs.map} +1 -1
  42. package/dist/{busy-CyZSBnZP.js → busy-Cetzws-m.js} +1 -1
  43. package/dist/{busy-CyZSBnZP.js.map → busy-Cetzws-m.js.map} +1 -1
  44. package/dist/busy.cjs +1 -1
  45. package/dist/busy.js +1 -1
  46. package/dist/button.cjs +4 -3
  47. package/dist/button.cjs.map +1 -1
  48. package/dist/button.js +4 -3
  49. package/dist/button.js.map +1 -1
  50. package/dist/{card-Cl6jp1yX.cjs → card-8VXoo2C_.cjs} +1 -1
  51. package/dist/{card-Cl6jp1yX.cjs.map → card-8VXoo2C_.cjs.map} +1 -1
  52. package/dist/{card-nYZCKmOO.js → card-D2k3dRL0.js} +1 -1
  53. package/dist/{card-nYZCKmOO.js.map → card-D2k3dRL0.js.map} +1 -1
  54. package/dist/card.cjs +1 -1
  55. package/dist/card.js +1 -1
  56. package/dist/{checkbox-DiUrZiyc.js → checkbox-8hNsBejz.js} +1 -1
  57. package/dist/{checkbox-DiUrZiyc.js.map → checkbox-8hNsBejz.js.map} +1 -1
  58. package/dist/{checkbox-BeNo0ZGt.cjs → checkbox-Cq5wzeaY.cjs} +1 -1
  59. package/dist/{checkbox-BeNo0ZGt.cjs.map → checkbox-Cq5wzeaY.cjs.map} +1 -1
  60. package/dist/checkbox.cjs +1 -1
  61. package/dist/checkbox.js +1 -1
  62. package/dist/{chips-CfPFXv7Z.js → chips-D1kJrbzo.js} +9 -23
  63. package/dist/chips-D1kJrbzo.js.map +1 -0
  64. package/dist/{chips-DK6m-VCM.cjs → chips-Dx_WvOGk.cjs} +9 -18
  65. package/dist/chips-Dx_WvOGk.cjs.map +1 -0
  66. package/dist/chips.cjs +1 -1
  67. package/dist/chips.js +2 -2
  68. package/dist/connectivity.cjs +1 -1
  69. package/dist/connectivity.js +2 -2
  70. package/dist/content-drawer.cjs +1 -1
  71. package/dist/content-drawer.js +1 -1
  72. package/dist/{date-range-DjlF2u7o.js → date-range-Dv-DM6mB.js} +2 -2
  73. package/dist/{date-range-DjlF2u7o.js.map → date-range-Dv-DM6mB.js.map} +1 -1
  74. package/dist/{date-range-DA6anfcF.cjs → date-range-H903Vt_r.cjs} +1 -1
  75. package/dist/{date-range-DA6anfcF.cjs.map → date-range-H903Vt_r.cjs.map} +1 -1
  76. package/dist/{date-range-inline-BfYK795W.cjs → date-range-inline-Bvs2ZvEY.cjs} +1 -1
  77. package/dist/{date-range-inline-BfYK795W.cjs.map → date-range-inline-Bvs2ZvEY.cjs.map} +1 -1
  78. package/dist/{date-range-inline-n7y_H6PJ.js → date-range-inline-TWWnTZlw.js} +1 -1
  79. package/dist/{date-range-inline-n7y_H6PJ.js.map → date-range-inline-TWWnTZlw.js.map} +1 -1
  80. package/dist/date-range-inline.cjs +1 -1
  81. package/dist/date-range-inline.js +1 -1
  82. package/dist/date-range.cjs +1 -1
  83. package/dist/date-range.js +1 -1
  84. package/dist/delay.cjs +1 -1
  85. package/dist/delay.js +1 -1
  86. package/dist/{details-CS_ToAOj.js → details-Cpg8sH2F.js} +3 -8
  87. package/dist/details-Cpg8sH2F.js.map +1 -0
  88. package/dist/{details-BdAVsLl-.cjs → details-CwSDur6j.cjs} +2 -6
  89. package/dist/details-CwSDur6j.cjs.map +1 -0
  90. package/dist/details.cjs +1 -1
  91. package/dist/details.js +1 -1
  92. package/dist/directives.cjs +1 -1
  93. package/dist/directives.js +1 -1
  94. package/dist/{divider-CvWAnvdO.cjs → divider-BNdVLE0H.cjs} +1 -1
  95. package/dist/{divider-CvWAnvdO.cjs.map → divider-BNdVLE0H.cjs.map} +1 -1
  96. package/dist/{divider-COLK0RbT.js → divider-Be833gGZ.js} +1 -1
  97. package/dist/{divider-COLK0RbT.js.map → divider-Be833gGZ.js.map} +1 -1
  98. package/dist/divider.cjs +1 -1
  99. package/dist/divider.js +1 -1
  100. package/dist/dropdown.cjs +1 -1
  101. package/dist/dropdown.js +1 -1
  102. package/dist/{expand-r2sATPUJ.cjs → expand-BP6RLzHw.cjs} +1 -1
  103. package/dist/{expand-r2sATPUJ.cjs.map → expand-BP6RLzHw.cjs.map} +1 -1
  104. package/dist/{expand-D9LzmpoV.js → expand-CtoffNNj.js} +2 -2
  105. package/dist/{expand-D9LzmpoV.js.map → expand-CtoffNNj.js.map} +1 -1
  106. package/dist/expand.cjs +1 -1
  107. package/dist/expand.js +1 -1
  108. package/dist/{float-2nHYuBx-.cjs → float-CfbQM_2v.cjs} +1 -1
  109. package/dist/{float-2nHYuBx-.cjs.map → float-CfbQM_2v.cjs.map} +1 -1
  110. package/dist/{float-BWy39CXr.js → float-KmbhaQHA.js} +1 -1
  111. package/dist/{float-BWy39CXr.js.map → float-KmbhaQHA.js.map} +1 -1
  112. package/dist/float.cjs +1 -1
  113. package/dist/float.js +1 -1
  114. package/dist/{form-D1iJOLVb.js → form-8IcmP8uV.js} +9 -9
  115. package/dist/{form-D1iJOLVb.js.map → form-8IcmP8uV.js.map} +1 -1
  116. package/dist/{form-D9K1GhlP.cjs → form-CuBIrKOA.cjs} +1 -1
  117. package/dist/{form-D9K1GhlP.cjs.map → form-CuBIrKOA.cjs.map} +1 -1
  118. package/dist/form.cjs +1 -1
  119. package/dist/form.js +6 -6
  120. package/dist/handover/agent-runtime-followups.md +1 -1
  121. package/dist/handover/agent-runtime-v1.md +3 -3
  122. package/dist/{icons-BXp4vbnW.cjs → icons-BJld4JHp.cjs} +1 -1
  123. package/dist/{icons-BXp4vbnW.cjs.map → icons-BJld4JHp.cjs.map} +1 -1
  124. package/dist/{icons-COrlmBPB.js → icons-D7df1ysG.js} +1 -1
  125. package/dist/{icons-COrlmBPB.js.map → icons-D7df1ysG.js.map} +1 -1
  126. package/dist/icons.cjs +1 -1
  127. package/dist/icons.js +1 -1
  128. package/dist/{iframe-CPNsIy7k.js → iframe-DAbgW9tT.js} +1 -1
  129. package/dist/{iframe-CPNsIy7k.js.map → iframe-DAbgW9tT.js.map} +1 -1
  130. package/dist/{iframe-BwXj6mLp.cjs → iframe-GT6D8l5Z.cjs} +1 -1
  131. package/dist/{iframe-BwXj6mLp.cjs.map → iframe-GT6D8l5Z.cjs.map} +1 -1
  132. package/dist/iframe.cjs +1 -1
  133. package/dist/iframe.js +1 -1
  134. package/dist/index.cjs +1 -1
  135. package/dist/index.js +59 -56
  136. package/dist/{input-BGrF2qVq.cjs → input-BE9wEEw4.cjs} +1 -1
  137. package/dist/{input-BGrF2qVq.cjs.map → input-BE9wEEw4.cjs.map} +1 -1
  138. package/dist/{input-C1SnMNuQ.js → input-DC6ap_uN.js} +1 -1
  139. package/dist/{input-C1SnMNuQ.js.map → input-DC6ap_uN.js.map} +1 -1
  140. package/dist/{input-chip-DZktYohr.cjs → input-chip-MsiMu-b5.cjs} +4 -4
  141. package/dist/input-chip-MsiMu-b5.cjs.map +1 -0
  142. package/dist/{input-chip-CtQ0pH5b.js → input-chip-c5n547tg.js} +3 -6
  143. package/dist/input-chip-c5n547tg.js.map +1 -0
  144. package/dist/input.cjs +1 -1
  145. package/dist/input.js +1 -1
  146. package/dist/json.cjs +1 -1
  147. package/dist/json.js +2 -2
  148. package/dist/kbd.cjs +1 -1
  149. package/dist/kbd.js +1 -1
  150. package/dist/{layout-Delq-QvR.cjs → layout-BbCIfIgo.cjs} +1 -1
  151. package/dist/{layout-Delq-QvR.cjs.map → layout-BbCIfIgo.cjs.map} +1 -1
  152. package/dist/{layout-BH28sKGc.js → layout-Dq2oeOTS.js} +1 -1
  153. package/dist/{layout-BH28sKGc.js.map → layout-Dq2oeOTS.js.map} +1 -1
  154. package/dist/layout.cjs +1 -1
  155. package/dist/layout.js +1 -1
  156. package/dist/{lightbox-CLwpaiai.js → lightbox-CNX9Eg3U.js} +4 -4
  157. package/dist/lightbox-CNX9Eg3U.js.map +1 -0
  158. package/dist/{lightbox-Ck6BpN5u.cjs → lightbox-HqJBBjAT.cjs} +4 -4
  159. package/dist/lightbox-HqJBBjAT.cjs.map +1 -0
  160. package/dist/lightbox.cjs +1 -1
  161. package/dist/lightbox.js +1 -1
  162. package/dist/{list-Bmce1Rb8.js → list-C76Pb-c1.js} +1 -1
  163. package/dist/{list-Bmce1Rb8.js.map → list-C76Pb-c1.js.map} +1 -1
  164. package/dist/{list-EmRwSpTU.cjs → list-bhyuQSyO.cjs} +1 -1
  165. package/dist/{list-EmRwSpTU.cjs.map → list-bhyuQSyO.cjs.map} +1 -1
  166. package/dist/list.cjs +1 -1
  167. package/dist/list.js +1 -1
  168. package/dist/{menu-BTU3wGP6.cjs → menu-BqKQ-s0C.cjs} +1 -1
  169. package/dist/{menu-BTU3wGP6.cjs.map → menu-BqKQ-s0C.cjs.map} +1 -1
  170. package/dist/{menu-BA_B7QOG.js → menu-C5ksITpG.js} +2 -2
  171. package/dist/{menu-BA_B7QOG.js.map → menu-C5ksITpG.js.map} +1 -1
  172. package/dist/menu.cjs +1 -1
  173. package/dist/menu.js +1 -1
  174. package/dist/mixins-DCVXqL1Q.js +636 -0
  175. package/dist/{mixins-BWb9_e1s.js.map → mixins-DCVXqL1Q.js.map} +1 -1
  176. package/dist/mixins-Du9HMrIG.cjs +254 -0
  177. package/dist/{mixins-BOOu6q2n.cjs.map → mixins-Du9HMrIG.cjs.map} +1 -1
  178. package/dist/mixins.cjs +1 -1
  179. package/dist/mixins.js +1 -1
  180. package/dist/nav-drawer.cjs +1 -1
  181. package/dist/nav-drawer.js +1 -1
  182. package/dist/navigation-bar.cjs +1 -1
  183. package/dist/navigation-bar.js +1 -1
  184. package/dist/navigation-rail.cjs +1 -1
  185. package/dist/navigation-rail.js +1 -1
  186. package/dist/{notification-CliGbcfU.cjs → notification-DR3gvWt8.cjs} +1 -1
  187. package/dist/notification-DR3gvWt8.cjs.map +1 -0
  188. package/dist/{notification-R2_Mf1HR.js → notification-eZxtr3NN.js} +4 -4
  189. package/dist/notification-eZxtr3NN.js.map +1 -0
  190. package/dist/notification.cjs +1 -1
  191. package/dist/notification.js +1 -1
  192. package/dist/{option-Db98Ndzv.cjs → option-BDOKUqTy.cjs} +1 -1
  193. package/dist/{option-Db98Ndzv.cjs.map → option-BDOKUqTy.cjs.map} +1 -1
  194. package/dist/{option-DU1X4SDu.js → option-CBEHYG4U.js} +1 -1
  195. package/dist/{option-DU1X4SDu.js.map → option-CBEHYG4U.js.map} +1 -1
  196. package/dist/option.cjs +1 -1
  197. package/dist/option.js +1 -1
  198. package/dist/overlay-DG6EeyKt.cjs +80 -0
  199. package/dist/overlay-DG6EeyKt.cjs.map +1 -0
  200. package/dist/overlay-oxM9OLXP.js +745 -0
  201. package/dist/overlay-oxM9OLXP.js.map +1 -0
  202. package/dist/overlay.cjs +1 -80
  203. package/dist/{overlay.confirm-body-BkhNvr0c.cjs → overlay.confirm-body-78e1WrN9.cjs} +2 -2
  204. package/dist/{overlay.confirm-body-BkhNvr0c.cjs.map → overlay.confirm-body-78e1WrN9.cjs.map} +1 -1
  205. package/dist/{overlay.confirm-body-uFp-0Zfh.js → overlay.confirm-body-D_P2e7l6.js} +2 -2
  206. package/dist/{overlay.confirm-body-uFp-0Zfh.js.map → overlay.confirm-body-D_P2e7l6.js.map} +1 -1
  207. package/dist/overlay.js +5 -746
  208. package/dist/{overlay.service-BcF12kGb.js → overlay.service-C8NwO4Bx.js} +2 -2
  209. package/dist/{overlay.service-BcF12kGb.js.map → overlay.service-C8NwO4Bx.js.map} +1 -1
  210. package/dist/{overlay.service-1YWfUD2S.cjs → overlay.service-DQkGPUY7.cjs} +1 -1
  211. package/dist/{overlay.service-1YWfUD2S.cjs.map → overlay.service-DQkGPUY7.cjs.map} +1 -1
  212. package/dist/page.cjs +1 -1
  213. package/dist/page.js +4 -4
  214. package/dist/{progress-C9Y2D5cm.js → progress-C4kDZfb7.js} +1 -1
  215. package/dist/{progress-C9Y2D5cm.js.map → progress-C4kDZfb7.js.map} +1 -1
  216. package/dist/{progress-DiVTGAXa.cjs → progress-CMSst_2U.cjs} +1 -1
  217. package/dist/{progress-DiVTGAXa.cjs.map → progress-CMSst_2U.cjs.map} +1 -1
  218. package/dist/progress.cjs +1 -1
  219. package/dist/progress.js +1 -1
  220. package/dist/{radio-group-CAzjBI2n.js → radio-group-DB9D2ZkA.js} +1 -1
  221. package/dist/{radio-group-CAzjBI2n.js.map → radio-group-DB9D2ZkA.js.map} +1 -1
  222. package/dist/{radio-group-DIRJyYv6.cjs → radio-group-dVUvYFq7.cjs} +1 -1
  223. package/dist/{radio-group-DIRJyYv6.cjs.map → radio-group-dVUvYFq7.cjs.map} +1 -1
  224. package/dist/radio-group.cjs +1 -1
  225. package/dist/radio-group.js +1 -1
  226. package/dist/range.cjs +1 -1
  227. package/dist/range.js +1 -1
  228. package/dist/{rxjs-utils-Dv9T9IpA.js.map → rxjs-utils-Cs6XGwF6.js.map} +1 -1
  229. package/dist/{rxjs-utils-BKB2UM_j.cjs.map → rxjs-utils-Dsj75cJy.cjs.map} +1 -1
  230. package/dist/rxjs-utils.cjs +1 -1
  231. package/dist/rxjs-utils.js +1 -1
  232. package/dist/{scroll-BFHUtZOa.js → scroll-C1klVgSQ.js} +1 -1
  233. package/dist/{scroll-BFHUtZOa.js.map → scroll-C1klVgSQ.js.map} +1 -1
  234. package/dist/{scroll-nIZyoEMt.cjs → scroll-S-bXF2u6.cjs} +1 -1
  235. package/dist/{scroll-nIZyoEMt.cjs.map → scroll-S-bXF2u6.cjs.map} +1 -1
  236. package/dist/{select-7WqaUWBU.js → select-UU2pB67h.js} +1 -1
  237. package/dist/{select-7WqaUWBU.js.map → select-UU2pB67h.js.map} +1 -1
  238. package/dist/{select-DTuf6p6T.cjs → select-fu_-rZyn.cjs} +1 -1
  239. package/dist/{select-DTuf6p6T.cjs.map → select-fu_-rZyn.cjs.map} +1 -1
  240. package/dist/select.cjs +1 -1
  241. package/dist/select.js +1 -1
  242. package/dist/skeleton.cjs +1 -1
  243. package/dist/skeleton.js +1 -1
  244. package/dist/slider.cjs +1 -1
  245. package/dist/slider.js +1 -1
  246. package/dist/{sound.service-DyY78ukR.cjs → sound.service-DVJZb9ox.cjs} +1 -1
  247. package/dist/{sound.service-DyY78ukR.cjs.map → sound.service-DVJZb9ox.cjs.map} +1 -1
  248. package/dist/{sound.service-BIN2W7Rv.js → sound.service-v_jqCkos.js} +1 -1
  249. package/dist/{sound.service-BIN2W7Rv.js.map → sound.service-v_jqCkos.js.map} +1 -1
  250. package/dist/{splash-screen-Kr1sPtME.cjs → splash-screen-BvaDkvJU.cjs} +1 -1
  251. package/dist/{splash-screen-Kr1sPtME.cjs.map → splash-screen-BvaDkvJU.cjs.map} +1 -1
  252. package/dist/{splash-screen-BcjjJSlK.js → splash-screen-ChMkAPLU.js} +1 -1
  253. package/dist/{splash-screen-BcjjJSlK.js.map → splash-screen-ChMkAPLU.js.map} +1 -1
  254. package/dist/splash-screen.cjs +1 -1
  255. package/dist/splash-screen.js +1 -1
  256. package/dist/{src-BbMJeLk9.cjs → src-BIlD63Cz.cjs} +1 -1
  257. package/dist/{src-BbMJeLk9.cjs.map → src-BIlD63Cz.cjs.map} +1 -1
  258. package/dist/{src-DCu_mEk4.js → src-DnunCC4X.js} +37 -36
  259. package/dist/{src-DCu_mEk4.js.map → src-DnunCC4X.js.map} +1 -1
  260. package/dist/{state-nm8yzMPp.js → state-CHbIt2Dw.js} +198 -202
  261. package/dist/{state-nm8yzMPp.js.map → state-CHbIt2Dw.js.map} +1 -1
  262. package/dist/state-DcGj-pJJ.cjs +1 -0
  263. package/dist/{state-avic94Ft.cjs.map → state-DcGj-pJJ.cjs.map} +1 -1
  264. package/dist/state.cjs +1 -1
  265. package/dist/state.js +1 -1
  266. package/dist/steps.cjs +1 -1
  267. package/dist/steps.js +1 -1
  268. package/dist/{surface-BtMMHKol.js → surface-DCRy-EyT.js} +1 -1
  269. package/dist/{surface-BtMMHKol.js.map → surface-DCRy-EyT.js.map} +1 -1
  270. package/dist/{surface-CgXeKdGL.cjs → surface-DWwQDX9r.cjs} +1 -1
  271. package/dist/{surface-CgXeKdGL.cjs.map → surface-DWwQDX9r.cjs.map} +1 -1
  272. package/dist/surface.cjs +1 -1
  273. package/dist/surface.js +1 -1
  274. package/dist/switch.cjs +1 -1
  275. package/dist/switch.js +1 -1
  276. package/dist/table.cjs +1 -1
  277. package/dist/table.js +1 -1
  278. package/dist/{tabs-81ADWQqa.js → tabs-CkDNLbiS.js} +1 -1
  279. package/dist/{tabs-81ADWQqa.js.map → tabs-CkDNLbiS.js.map} +1 -1
  280. package/dist/{tabs-DnG3K0bu.cjs → tabs-lxQHWEb7.cjs} +1 -1
  281. package/dist/{tabs-DnG3K0bu.cjs.map → tabs-lxQHWEb7.cjs.map} +1 -1
  282. package/dist/tabs.cjs +1 -1
  283. package/dist/tabs.js +1 -1
  284. package/dist/teleport.cjs +1 -1
  285. package/dist/teleport.js +1 -1
  286. package/dist/{textarea-BenjiTXB.cjs → textarea-CNa4dSvF.cjs} +1 -1
  287. package/dist/{textarea-BenjiTXB.cjs.map → textarea-CNa4dSvF.cjs.map} +1 -1
  288. package/dist/{textarea-3mWewuAf.js → textarea-DkfGmRSI.js} +1 -1
  289. package/dist/{textarea-3mWewuAf.js.map → textarea-DkfGmRSI.js.map} +1 -1
  290. package/dist/textarea.cjs +1 -1
  291. package/dist/textarea.js +1 -1
  292. package/dist/{theme-DNymrucy.cjs → theme-CMyXTDht.cjs} +1 -1
  293. package/dist/{theme-DNymrucy.cjs.map → theme-CMyXTDht.cjs.map} +1 -1
  294. package/dist/{theme-CFPJW933.js → theme-CNWRYdfn.js} +3 -3
  295. package/dist/{theme-CFPJW933.js.map → theme-CNWRYdfn.js.map} +1 -1
  296. package/dist/{theme-button-DC_shZ_7.js → theme-button-CixloLin.js} +1 -1
  297. package/dist/{theme-button-DC_shZ_7.js.map → theme-button-CixloLin.js.map} +1 -1
  298. package/dist/{theme-button-ENKa3TPT.cjs → theme-button-kMhsX5Oe.cjs} +1 -1
  299. package/dist/{theme-button-ENKa3TPT.cjs.map → theme-button-kMhsX5Oe.cjs.map} +1 -1
  300. package/dist/theme-button.cjs +1 -1
  301. package/dist/theme-button.js +1 -1
  302. package/dist/theme.cjs +1 -1
  303. package/dist/theme.js +3 -3
  304. package/dist/{theme.service-BOWIT_5k.js → theme.service-CSzNkqBB.js} +1 -1
  305. package/dist/{theme.service-BOWIT_5k.js.map → theme.service-CSzNkqBB.js.map} +1 -1
  306. package/dist/{theme.service-DkdH1t60.cjs → theme.service-CnFUmUpc.cjs} +1 -1
  307. package/dist/{theme.service-DkdH1t60.cjs.map → theme.service-CnFUmUpc.cjs.map} +1 -1
  308. package/dist/tree.cjs +1 -1
  309. package/dist/tree.js +1 -1
  310. package/dist/typography.cjs +1 -1
  311. package/dist/typography.js +1 -1
  312. package/dist/{utils-D2QUu4-g.cjs.map → utils-C-Q8ePtG.cjs.map} +1 -1
  313. package/dist/{utils-Cj_nRRyx.js.map → utils-DXE5fBBd.js.map} +1 -1
  314. package/dist/utils.cjs +1 -1
  315. package/dist/utils.js +1 -1
  316. package/dist/visually-hidden.cjs +1 -1
  317. package/dist/visually-hidden.js +1 -1
  318. package/dist/{window-BTecgE_U.js → window-BcvDNi9D.js} +4 -11
  319. package/dist/window-BcvDNi9D.js.map +1 -0
  320. package/dist/{window-DGydMS0g.cjs → window-qaGFMn_4.cjs} +3 -3
  321. package/dist/window-qaGFMn_4.cjs.map +1 -0
  322. package/dist/window.cjs +1 -1
  323. package/dist/window.js +1 -1
  324. package/package.json +1 -1
  325. package/src/boat/boat.ts +0 -3
  326. package/src/breadcrumb/breadcrumb.ts +1 -0
  327. package/src/button/button.ts +1 -1
  328. package/src/button/icon-button.ts +2 -1
  329. package/src/chips/assist-chip.ts +2 -1
  330. package/src/chips/filter-chip.ts +2 -16
  331. package/src/chips/input-chip.ts +2 -5
  332. package/src/chips/suggestion-chip.ts +2 -3
  333. package/src/details/details.ts +2 -7
  334. package/src/index.ts +8 -0
  335. package/src/lightbox/lightbox.ts +3 -3
  336. package/src/notification/notification.scss +0 -1
  337. package/src/overlay/overlay.confirm-body.ts +1 -1
  338. package/src/state/index.ts +31 -9
  339. package/src/surface/surface.styles.ts +1 -45
  340. package/src/window/window.ts +0 -12
  341. package/types/src/index.d.ts +1 -0
  342. package/types/src/window/window.d.ts +0 -2
  343. package/dist/chips-CfPFXv7Z.js.map +0 -1
  344. package/dist/chips-DK6m-VCM.cjs.map +0 -1
  345. package/dist/details-BdAVsLl-.cjs.map +0 -1
  346. package/dist/details-CS_ToAOj.js.map +0 -1
  347. package/dist/input-chip-CtQ0pH5b.js.map +0 -1
  348. package/dist/input-chip-DZktYohr.cjs.map +0 -1
  349. package/dist/lightbox-CLwpaiai.js.map +0 -1
  350. package/dist/lightbox-Ck6BpN5u.cjs.map +0 -1
  351. package/dist/mixins-BOOu6q2n.cjs +0 -298
  352. package/dist/mixins-BWb9_e1s.js +0 -680
  353. package/dist/notification-CliGbcfU.cjs.map +0 -1
  354. package/dist/notification-R2_Mf1HR.js.map +0 -1
  355. package/dist/overlay.cjs.map +0 -1
  356. package/dist/overlay.js.map +0 -1
  357. package/dist/state-avic94Ft.cjs +0 -1
  358. package/dist/window-BTecgE_U.js.map +0 -1
  359. package/dist/window-DGydMS0g.cjs.map +0 -1
  360. /package/dist/agent/{flow-CvG1fLW5.js → flow-3RrZM-e7.js} +0 -0
  361. /package/dist/agent/{vendor-material-color-DcL7ZPxx.js → vendor-material-color-33Mj762T.js} +0 -0
  362. /package/dist/{rxjs-utils-Dv9T9IpA.js → rxjs-utils-Cs6XGwF6.js} +0 -0
  363. /package/dist/{rxjs-utils-BKB2UM_j.cjs → rxjs-utils-Dsj75cJy.cjs} +0 -0
  364. /package/dist/{utils-D2QUu4-g.cjs → utils-C-Q8ePtG.cjs} +0 -0
  365. /package/dist/{utils-Cj_nRRyx.js → utils-DXE5fBBd.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-oxM9OLXP.js","names":[],"sources":["../src/overlay/overlay.animations.ts","../src/overlay/overlay.gestures.ts","../src/overlay/overlay.layout.ts","../src/overlay/overlay.positioning.ts","../src/overlay/overlay.component.ts"],"sourcesContent":["import {\n\tDURATION_EXIT,\n\tgetEasing,\n\tSPRING_GENTLE,\n\tSPRING_SMOOTH,\n\tSPRING_SNAPPY,\n} from '../utils/animation'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport type { Anchor, OverlayLayout } from './overlay.types'\n\n/**\n * WAAPI keyframes + options per layout + direction.\n *\n * One animation vocabulary — no per-element bespoke keyframes. Aligns\n * with the `animation` skill (spring physics presets). Every easing runs\n * through `getEasing()` so modern browsers (that support\n * `animation-timing-function: linear(0, 1)`) get the true `linear()`\n * spring expression while older browsers fall through to the cubic-bezier\n * fallback. Honors `prefers-reduced-motion` by collapsing transforms to\n * opacity-only.\n *\n * Anchor-origin bloom: the caller computes\n * `anchorOriginVars(anchor, surfaceRect)` and writes the resulting CSS\n * custom properties onto the surface element BEFORE triggering the\n * entrance animation. Keyframes reference those vars via\n * `transform-origin: var(--schmancy-overlay-origin-x, 50%) var(...)`, so\n * the surface scales OUT of the click point — not from its own centre.\n */\n\n/**\n * Shape matches both DOM `AnimationEffectTiming` and\n * `KeyframeAnimationOptions` so it passes structural checks in both\n * older and newer `lib.dom.d.ts` vintages.\n */\nexport interface AnimationSpec {\n\tkeyframes: Keyframe[]\n\toptions: {\n\t\tduration: number\n\t\teasing: string\n\t\tfill?: FillMode\n\t}\n}\n\n/**\n * Module-scope reduced-motion state, kept in sync with the house\n * `reducedMotion$` BehaviorSubject. The subscribe has no teardown —\n * module lifetime IS the subscription lifetime (house rxjs rule 4:\n * module singletons don't need explicit teardown).\n */\nlet reducedMotion = reducedMotion$.value\nreducedMotion$.subscribe((v) => {\n\treducedMotion = v\n})\n\nconst ORIGIN_X_VAR = '--schmancy-overlay-origin-x'\nconst ORIGIN_Y_VAR = '--schmancy-overlay-origin-y'\nconst ORIGIN_CSS = `var(${ORIGIN_X_VAR}, 50%) var(${ORIGIN_Y_VAR}, 50%)`\n\nfunction clampPercent(value: number): number {\n\tif (Number.isNaN(value) || !Number.isFinite(value)) return 50\n\treturn Math.max(0, Math.min(100, value))\n}\n\nfunction getAnchorCenter(anchor: Anchor): { x: number; y: number } {\n\t// Element | VirtualAnchor — anything exposing getBoundingClientRect()\n\tif (\n\t\ttypeof (anchor as { getBoundingClientRect?: unknown }).getBoundingClientRect === 'function'\n\t) {\n\t\tconst r = (anchor as { getBoundingClientRect(): DOMRect }).getBoundingClientRect()\n\t\treturn { x: r.left + r.width / 2, y: r.top + r.height / 2 }\n\t}\n\t// DOMRect — has left/top/width/height but no getBoundingClientRect()\n\tif (\n\t\ttypeof (anchor as DOMRect).width === 'number' &&\n\t\ttypeof (anchor as DOMRect).height === 'number' &&\n\t\ttypeof (anchor as DOMRect).left === 'number' &&\n\t\ttypeof (anchor as DOMRect).top === 'number'\n\t) {\n\t\tconst r = anchor as DOMRect\n\t\treturn { x: r.left + r.width / 2, y: r.top + r.height / 2 }\n\t}\n\t// MouseEvent / PointerEvent\n\tif (typeof (anchor as MouseEvent).clientX === 'number' && typeof (anchor as MouseEvent).clientY === 'number') {\n\t\tconst e = anchor as MouseEvent\n\t\treturn { x: e.clientX, y: e.clientY }\n\t}\n\t// TouchEvent\n\tif (\n\t\ttypeof (anchor as TouchEvent).touches !== 'undefined' &&\n\t\t(anchor as TouchEvent).touches.length > 0\n\t) {\n\t\tconst t = (anchor as TouchEvent).touches[0]\n\t\treturn { x: t.clientX, y: t.clientY }\n\t}\n\t// Plain { x, y } point\n\tconst pt = anchor as { x: number; y: number }\n\treturn { x: pt.x, y: pt.y }\n}\n\n/**\n * Compute CSS-var values for the anchor-relative transform origin.\n * Caller writes the returned record onto the surface element's style\n * before triggering the entrance animation. When no anchor is present,\n * returns sensible per-layout defaults (caller picks which to use):\n * - centered → 50% 50% (self-centre)\n * - sheet → 50% 100% (rises from bottom edge)\n * - anchored → computed from the anchor's position relative to the\n * surface rect\n */\nexport function anchorOriginVars(\n\tanchor: Anchor | undefined,\n\tsurfaceRect: DOMRect | { left: number; top: number; width: number; height: number },\n): Record<string, string> {\n\tif (!anchor) {\n\t\treturn {\n\t\t\t[ORIGIN_X_VAR]: '50%',\n\t\t\t[ORIGIN_Y_VAR]: '50%',\n\t\t}\n\t}\n\tconst { x, y } = getAnchorCenter(anchor)\n\tif (!surfaceRect.width || !surfaceRect.height) {\n\t\treturn {\n\t\t\t[ORIGIN_X_VAR]: '50%',\n\t\t\t[ORIGIN_Y_VAR]: '50%',\n\t\t}\n\t}\n\tconst originX = clampPercent(((x - surfaceRect.left) / surfaceRect.width) * 100)\n\tconst originY = clampPercent(((y - surfaceRect.top) / surfaceRect.height) * 100)\n\treturn {\n\t\t[ORIGIN_X_VAR]: `${originX}%`,\n\t\t[ORIGIN_Y_VAR]: `${originY}%`,\n\t}\n}\n\nexport function surfaceAnimation(layout: OverlayLayout, direction: 'in' | 'out'): AnimationSpec {\n\tif (reducedMotion) {\n\t\t// Opacity-only; explicit reset to { opacity: 1, transform: none } on `in`\n\t\t// so any leftover transform from a prior `out` doesn't persist.\n\t\treturn direction === 'in'\n\t\t\t? {\n\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t{ opacity: 0, transform: 'none' },\n\t\t\t\t\t\t{ opacity: 1, transform: 'none' },\n\t\t\t\t\t],\n\t\t\t\t\toptions: { duration: 1, easing: 'linear', fill: 'forwards' },\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t{ opacity: 1, transform: 'none' },\n\t\t\t\t\t\t{ opacity: 0, transform: 'none' },\n\t\t\t\t\t],\n\t\t\t\t\toptions: { duration: 1, easing: 'linear', fill: 'forwards' },\n\t\t\t\t}\n\t}\n\n\tswitch (layout) {\n\t\tcase 'centered':\n\t\t\t// Anchor-origin bloom: scale 0.6 → 1 from the var-driven origin.\n\t\t\t// More aggressive than dialog's 0.92 because the origin carries the\n\t\t\t// spatial work, so less translate is needed. Caller sets the origin\n\t\t\t// vars via anchorOriginVars() before triggering this animation.\n\t\t\treturn direction === 'in'\n\t\t\t\t? {\n\t\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'scale(0.6)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'scale(1)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\t\t\t\teasing: getEasing(SPRING_SNAPPY),\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'scale(1)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'scale(0.95)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tduration: DURATION_EXIT,\n\t\t\t\t\t\t\teasing: getEasing(SPRING_SMOOTH),\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\n\t\tcase 'sheet':\n\t\t\treturn direction === 'in'\n\t\t\t\t? {\n\t\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'translateY(100%)' },\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tduration: SPRING_GENTLE.duration,\n\t\t\t\t\t\t\teasing: getEasing(SPRING_GENTLE),\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'translateY(100%)' },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tduration: DURATION_EXIT,\n\t\t\t\t\t\t\teasing: getEasing(SPRING_SMOOTH),\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\n\t\tcase 'anchored':\n\t\t\t// Anchored surfaces get a scale-from-origin treatment too — the\n\t\t\t// positioning strategy (Popover API / CSS Anchor / Floating UI) owns\n\t\t\t// the final placement; the surface merely blooms from the anchor.\n\t\t\treturn direction === 'in'\n\t\t\t\t? {\n\t\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'scale(0.85)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'scale(1)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\t\t\t\teasing: getEasing(SPRING_SNAPPY),\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tkeyframes: [\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'scale(1)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'scale(0.92)', transformOrigin: ORIGIN_CSS },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tduration: DURATION_EXIT,\n\t\t\t\t\t\t\teasing: getEasing(SPRING_SMOOTH),\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t}\n}\n\n/**\n * FLIP (First / Last / Invert / Play) animation from `before` rect to\n * `after` rect. Caller has already moved the element between the two\n * states; this produces the WAAPI spec that animates the delta back.\n *\n * Used by the ResizeObserver-driven layout re-resolve in the overlay\n * element — when content grows past threshold mid-session and the\n * layout switches from centered → sheet, this animates the transition\n * instead of a hard cut.\n *\n * Reduced-motion collapses to an instant 1ms no-op; caller should check\n * `reducedMotion` (not exported) — or just run this and tolerate the\n * 1ms animation.\n */\nexport function flipAnimation(\n\tbefore: DOMRect | { left: number; top: number; width: number; height: number },\n\tafter: DOMRect | { left: number; top: number; width: number; height: number },\n): AnimationSpec {\n\tif (reducedMotion) {\n\t\treturn {\n\t\t\tkeyframes: [{ transform: 'none' }, { transform: 'none' }],\n\t\t\toptions: { duration: 1, easing: 'linear', fill: 'forwards' },\n\t\t}\n\t}\n\tconst dx = before.left - after.left\n\tconst dy = before.top - after.top\n\tconst sx = after.width > 0 ? before.width / after.width : 1\n\tconst sy = after.height > 0 ? before.height / after.height : 1\n\treturn {\n\t\tkeyframes: [\n\t\t\t{\n\t\t\t\ttransform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})`,\n\t\t\t\ttransformOrigin: 'top left',\n\t\t\t},\n\t\t\t{ transform: 'none', transformOrigin: 'top left' },\n\t\t],\n\t\toptions: {\n\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\teasing: getEasing(SPRING_SMOOTH),\n\t\t\tfill: 'forwards',\n\t\t},\n\t}\n}\n","import { filter, fromEvent, merge, Observable, Subject, take, takeUntil, tap } from 'rxjs'\n\n/**\n * Swipe-to-dismiss gesture for sheet-layout overlays.\n *\n * Pointer-event based — a single pipeline covers touch, mouse, pen, and\n * any future pointer source. Without a visible drag handle, the gesture\n * only starts within the top DRAG_START_TOP_PX band of the surface (a\n * standard pull-to-dismiss convention). Escape + backdrop click cover\n * the non-pointer dismiss paths via the component's modal-tier listeners.\n *\n * RxJS-native (rxjs skill principle 3: every async source is an Observable).\n * Thresholds are policy constants, not magic numbers.\n */\n\n/** Distance (px) past which the gesture dismisses. */\nexport const DISMISS_DISTANCE_PX = 80\n/** Distance as fraction of sheet height past which the gesture dismisses. */\nexport const DISMISS_DISTANCE_FRACTION = 0.25 // Vaul's value — feels right.\n/** Velocity (px/ms) past which the gesture dismisses even short of distance. */\nexport const DISMISS_VELOCITY_PX_PER_MS = 0.4 // Vaul's value.\n/** Drag only starts if pointerdown is within this top band (unless a drag handle is used). */\nexport const DRAG_START_TOP_PX = 40\n/** Snap-back animation duration when gesture doesn't pass threshold. */\nexport const SNAP_BACK_MS = 300\n\n/**\n * Logarithmic rubber-band damping for upward (negative) drag past the\n * top detent. Pulled from Vaul — `8 * (log(v + 1) - 2)` — diminishing\n * returns that feel physical, unlike the linear × 0.2 this replaces.\n *\n * Applied only to upward motion; downward drag tracks 1:1.\n */\nexport function logDamp(delta: number): number {\n\tif (delta >= 0) return delta\n\tconst abs = -delta\n\treturn -Math.max(0, 8 * (Math.log(abs + 1) - 2))\n}\n\nexport interface SwipeInputs {\n\t/** The surface element to track gestures on. */\n\tsurface: HTMLElement\n\t/** Optional drag handle. When provided, drag can start from anywhere on\n\t * the handle; without it, drag must start in the top DRAG_START_TOP_PX band. */\n\tdragHandle?: HTMLElement | null\n\t/** Completes the gesture stream (component disconnect / layout change). */\n\tuntil$: Observable<unknown>\n}\n\n/**\n * Emits exactly once when the user commits to dismissing the sheet\n * (distance OR velocity threshold passed). Works for touch, mouse, and\n * pen via the Pointer Events API. During an in-progress drag the\n * surface's `transform` is updated directly for 1:1 tracking. On\n * release-but-not-dismissed, the surface snaps back via a CSS transition.\n */\nexport function swipeToDismiss$(inputs: SwipeInputs): Observable<'dismiss'> {\n\tconst { surface, dragHandle, until$ } = inputs\n\n\treturn new Observable<'dismiss'>((subscriber) => {\n\t\tconst dragTarget = dragHandle ?? surface\n\t\tconst stopCurrent$ = new Subject<void>()\n\n\t\tlet dragging = false\n\t\tlet activePointerId: number | null = null\n\t\tlet startY = 0\n\t\tlet startTime = 0\n\t\tlet currentDelta = 0\n\n\t\tconst pointerDown$ = fromEvent<PointerEvent>(dragTarget, 'pointerdown').pipe(\n\t\t\t// Primary button / primary finger only. For touch, isPrimary also\n\t\t\t// covers the pinch-zoom guard (only one finger has isPrimary=true).\n\t\t\tfilter((e) => e.isPrimary && (e.pointerType !== 'mouse' || e.button === 0)),\n\t\t\t// Without a dedicated drag handle, require start in the top band.\n\t\t\tfilter((e) => {\n\t\t\t\tif (dragHandle) return true\n\t\t\t\tconst rect = surface.getBoundingClientRect()\n\t\t\t\treturn e.clientY - rect.top <= DRAG_START_TOP_PX\n\t\t\t}),\n\t\t\ttap((e) => {\n\t\t\t\tdragging = true\n\t\t\t\tactivePointerId = e.pointerId\n\t\t\t\tstartY = e.clientY\n\t\t\t\tstartTime = performance.now()\n\t\t\t\tcurrentDelta = 0\n\t\t\t\tsurface.style.transition = 'none'\n\t\t\t\tsurface.style.willChange = 'transform'\n\t\t\t\t// Capture so pointermove fires even if the pointer leaves the element\n\t\t\t\t// (covers the \"drag from handle, move past surface edge\" case).\n\t\t\t\ttry {\n\t\t\t\t\t;(dragTarget as Element).setPointerCapture?.(e.pointerId)\n\t\t\t\t} catch {\n\t\t\t\t\t// setPointerCapture can throw on detached elements; safe to ignore.\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\tconst pointerMove$ = fromEvent<PointerEvent>(dragTarget, 'pointermove').pipe(\n\t\t\tfilter(() => dragging),\n\t\t\tfilter((e) => e.pointerId === activePointerId),\n\t\t\ttap((e) => {\n\t\t\t\tconst deltaY = e.clientY - startY\n\t\t\t\tcurrentDelta = logDamp(deltaY)\n\t\t\t\tsurface.style.transform = `translateY(${currentDelta}px)`\n\t\t\t\t// preventDefault is a no-op on default Pointer Events but avoids\n\t\t\t\t// accidental text selection / page scroll during the drag.\n\t\t\t\tif (e.cancelable) e.preventDefault()\n\t\t\t}),\n\t\t)\n\n\t\tconst pointerEnd$ = merge(\n\t\t\tfromEvent<PointerEvent>(dragTarget, 'pointerup'),\n\t\t\tfromEvent<PointerEvent>(dragTarget, 'pointercancel'),\n\t\t\tfromEvent<PointerEvent>(dragTarget, 'lostpointercapture'),\n\t\t).pipe(\n\t\t\tfilter(() => dragging),\n\t\t\tfilter((e) => e.pointerId === activePointerId),\n\t\t\ttap(() => {\n\t\t\t\tdragging = false\n\t\t\t\tconst pointerId = activePointerId\n\t\t\t\tactivePointerId = null\n\t\t\t\ttry {\n\t\t\t\t\tif (pointerId !== null) (dragTarget as Element).releasePointerCapture?.(pointerId)\n\t\t\t\t} catch {\n\t\t\t\t\t// same reason as setPointerCapture — ignore.\n\t\t\t\t}\n\n\t\t\t\tconst elapsed = Math.max(1, performance.now() - startTime)\n\t\t\t\tconst velocity = currentDelta / elapsed\n\t\t\t\tconst surfaceHeight = surface.getBoundingClientRect().height\n\t\t\t\tconst distanceThreshold = Math.min(DISMISS_DISTANCE_PX, surfaceHeight * DISMISS_DISTANCE_FRACTION)\n\n\t\t\t\tconst shouldDismiss =\n\t\t\t\t\tcurrentDelta > distanceThreshold ||\n\t\t\t\t\t(currentDelta > 20 && velocity > DISMISS_VELOCITY_PX_PER_MS)\n\n\t\t\t\tsurface.style.willChange = ''\n\n\t\t\t\tif (shouldDismiss) {\n\t\t\t\t\t// Finish translate off-screen for visual continuity with the dismiss\n\t\t\t\t\t// animation; the caller's teardown will unmount.\n\t\t\t\t\tsurface.style.transition = `transform ${SNAP_BACK_MS}ms cubic-bezier(0.16, 1, 0.3, 1)`\n\t\t\t\t\tsurface.style.transform = 'translateY(100%)'\n\t\t\t\t\tsubscriber.next('dismiss')\n\t\t\t\t\tsubscriber.complete()\n\t\t\t\t} else {\n\t\t\t\t\t// Snap back to 0.\n\t\t\t\t\tsurface.style.transition = `transform ${SNAP_BACK_MS}ms cubic-bezier(0.16, 1, 0.3, 1)`\n\t\t\t\t\tsurface.style.transform = 'translateY(0)'\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\tmerge(pointerDown$, pointerMove$, pointerEnd$)\n\t\t\t.pipe(takeUntil(merge(stopCurrent$, until$)))\n\t\t\t.subscribe()\n\n\t\treturn () => {\n\t\t\tstopCurrent$.next()\n\t\t\tstopCurrent$.complete()\n\t\t\tsurface.style.transition = ''\n\t\t\tsurface.style.transform = ''\n\t\t\tsurface.style.willChange = ''\n\t\t}\n\t}).pipe(take(1))\n}\n\n","import type { Anchor, OverlayLayout, VirtualAnchor } from './overlay.types'\n\n/**\n * Layout dispatch engine — pure function of (anchor, content, viewport).\n * No DOM access, no side effects — testable with synthetic inputs.\n *\n * Thresholds are policy constants, not magic numbers. Changes are visible\n * as named-constant diffs, not hidden in inline literals (state skill:\n * \"thresholds ARE the policy\").\n */\n\n/** Below this viewport width, every overlay becomes a bottom sheet. */\nexport const NARROW_VIEWPORT_PX = 640\n\n/** Content taller than this fraction of viewport height → sheet. */\nexport const TALL_CONTENT_FRACTION = 0.8\n\n/** Content wider than this fraction of viewport width → sheet. */\nexport const WIDE_CONTENT_FRACTION = 0.9\n\n/** Floating UI / CSS anchor-positioning safety padding. */\nexport const ANCHOR_FIT_PADDING_PX = 16\n\nexport interface LayoutInputs {\n\tanchor?: Anchor\n\tcontent: { width: number; height: number }\n\tviewport: {\n\t\twidth: number\n\t\theight: number\n\t\t/** `matchMedia('(pointer: coarse)').matches` at call time. */\n\t\tisCoarsePointer: boolean\n\t}\n}\n\n/**\n * Priority order:\n * 1. viewport / content forces sheet\n * 2. anchor provided → anchored (the novel default)\n * 3. fallback → centered\n *\n * Floating UI's `flip` + `shift` + `size` middleware handles \"anchor\n * doesn't fit initially\" — it returns a fitting position rather than\n * rejecting. So step 2 does NOT branch on \"does the anchor fit?\";\n * Floating UI's output IS the answer. If content is genuinely too\n * large for any anchored position, step 1 already routed to sheet.\n */\nexport function resolveLayout(inputs: LayoutInputs): OverlayLayout {\n\tconst { anchor, content, viewport } = inputs\n\n\tconst isNarrow = viewport.width < NARROW_VIEWPORT_PX\n\tconst isCoarse = viewport.isCoarsePointer\n\tconst contentTall = content.height > viewport.height * TALL_CONTENT_FRACTION\n\tconst contentWide = content.width > viewport.width * WIDE_CONTENT_FRACTION\n\n\tif (isNarrow || isCoarse || contentTall || contentWide) {\n\t\treturn 'sheet'\n\t}\n\n\tif (anchor !== undefined) {\n\t\treturn 'anchored'\n\t}\n\n\treturn 'centered'\n}\n\n/**\n * Read the current viewport + pointer inputs. Separated so tests can\n * substitute synthetic inputs and the `resolveLayout` fn stays pure.\n */\nexport function readViewport(): LayoutInputs['viewport'] {\n\treturn {\n\t\twidth: window.innerWidth,\n\t\theight: window.innerHeight,\n\t\tisCoarsePointer: window.matchMedia('(pointer: coarse)').matches,\n\t}\n}\n\n/**\n * Resolved reference the positioning strategies consume.\n *\n * `el` is populated when the anchor is an HTMLElement — the Popover API\n * tier uses it directly via the `anchor=<id>` attribute, and Tier 1 / CSS\n * Anchor Positioning sets `element.style.anchorName` on it.\n *\n * `virtual` is populated for point/rect/TouchEvent anchors — Floating UI\n * accepts any object exposing `getBoundingClientRect()` as a virtual\n * reference. The Popover API path cannot use virtual references, so a\n * caller passing a point / DOMRect / event forces Tier 3 (or Tier 2 with\n * Floating UI, not CSS Anchor Positioning).\n */\nexport interface ResolvedAnchor {\n\tel?: HTMLElement\n\tvirtual?: VirtualAnchor\n}\n\n/**\n * Normalise an `Anchor` input into the shape the positioning strategies\n * accept. One function, one decision: element wins if present; otherwise\n * synthesize a zero-size virtual reference at the anchor's point.\n *\n * Called by the overlay element during `open()` before dispatching to\n * `pickPositioner(resolved)`.\n */\nexport function resolveAnchorRef(anchor: Anchor | undefined): ResolvedAnchor | undefined {\n\tif (!anchor) return undefined\n\n\t// HTMLElement — native element reference.\n\tif (typeof HTMLElement !== 'undefined' && anchor instanceof HTMLElement) {\n\t\treturn { el: anchor }\n\t}\n\n\t// Any other object with getBoundingClientRect — treat as virtual.\n\tif (typeof (anchor as { getBoundingClientRect?: unknown }).getBoundingClientRect === 'function') {\n\t\treturn {\n\t\t\tvirtual: {\n\t\t\t\tgetBoundingClientRect: () => (anchor as { getBoundingClientRect(): DOMRect }).getBoundingClientRect(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// DOMRect — fixed rect; synthesize a virtual that returns it verbatim.\n\tif (\n\t\ttypeof (anchor as DOMRect).width === 'number' &&\n\t\ttypeof (anchor as DOMRect).height === 'number' &&\n\t\ttypeof (anchor as DOMRect).left === 'number' &&\n\t\ttypeof (anchor as DOMRect).top === 'number'\n\t) {\n\t\tconst rect = anchor as DOMRect\n\t\treturn {\n\t\t\tvirtual: {\n\t\t\t\tgetBoundingClientRect: () => rect,\n\t\t\t},\n\t\t}\n\t}\n\n\t// MouseEvent / PointerEvent — zero-size rect at click point.\n\tif (typeof (anchor as MouseEvent).clientX === 'number' && typeof (anchor as MouseEvent).clientY === 'number') {\n\t\tconst e = anchor as MouseEvent\n\t\tconst rect = makePointRect(e.clientX, e.clientY)\n\t\treturn { virtual: { getBoundingClientRect: () => rect } }\n\t}\n\n\t// TouchEvent — zero-size rect at first touch point.\n\tif (\n\t\ttypeof (anchor as TouchEvent).touches !== 'undefined' &&\n\t\t(anchor as TouchEvent).touches.length > 0\n\t) {\n\t\tconst t = (anchor as TouchEvent).touches[0]\n\t\tconst rect = makePointRect(t.clientX, t.clientY)\n\t\treturn { virtual: { getBoundingClientRect: () => rect } }\n\t}\n\n\t// { x, y } point — zero-size rect at coords.\n\tconst pt = anchor as { x: number; y: number }\n\tconst rect = makePointRect(pt.x, pt.y)\n\treturn { virtual: { getBoundingClientRect: () => rect } }\n}\n\n/**\n * Construct a DOMRect-compatible object for a zero-width / zero-height\n * point. Avoids `new DOMRect(...)` which isn't constructable across all\n * lib.dom.d.ts vintages.\n */\nfunction makePointRect(x: number, y: number): DOMRect {\n\treturn {\n\t\tx,\n\t\ty,\n\t\twidth: 0,\n\t\theight: 0,\n\t\tleft: x,\n\t\tright: x,\n\t\ttop: y,\n\t\tbottom: y,\n\t\ttoJSON() {\n\t\t\treturn { x, y, width: 0, height: 0, left: x, right: x, top: y, bottom: y }\n\t\t},\n\t}\n}\n","import {\n\tautoUpdate,\n\tcomputePosition,\n\tflip,\n\toffset,\n\tshift,\n\tsize,\n\ttype Placement,\n} from '@floating-ui/dom'\nimport { Observable } from 'rxjs'\nimport { ANCHOR_FIT_PADDING_PX, type ResolvedAnchor } from './overlay.layout'\nimport type { OverlayPlacement, OverlayTier } from './overlay.types'\n\n/**\n * Three-tier positioning ladder for anchored overlays. Public API of the\n * overlay doesn't change based on the tier — the strategy is picked\n * internally by feature-detection.\n *\n * Tier 1 — CSS Anchor Positioning (Popover + `anchor-name` / `position-anchor`)\n * Zero-JS position tracking. Chromium-only today.\n *\n * Tier 2 — Popover API + Floating UI\n * Native top-layer + light-dismiss + Esc from `popover=\"auto\"`, Floating\n * UI middleware for the position math. Safari 17+, Chrome 114+, Firefox 125+.\n *\n * Tier 3 — Floating UI only\n * Fallback for browsers without the Popover API. Caller provides manual\n * backdrop + click-outside + Esc wiring.\n */\n\n/**\n * Feature-detection snapshot captured at module load. Frozen so consumers\n * can safely destructure and compare.\n */\nexport const CAPS = Object.freeze({\n\tpopover:\n\t\ttypeof HTMLElement !== 'undefined' &&\n\t\t'popover' in HTMLElement.prototype &&\n\t\ttypeof (HTMLElement.prototype as unknown as { showPopover?: () => void }).showPopover === 'function',\n\tcssAnchor:\n\t\ttypeof CSS !== 'undefined' &&\n\t\ttypeof CSS.supports === 'function' &&\n\t\tCSS.supports('anchor-name: --x'),\n})\n\n/**\n * Pick the positioning tier for an anchor.\n *\n * CSS Anchor Positioning (Tier 1) requires a real element anchor — you\n * can't point `anchor-name` at a DOMRect or a coord. A point/rect anchor\n * forces Tier 2 (or Tier 3 if popover isn't supported).\n */\nexport function pickPositioner(anchor: ResolvedAnchor): OverlayTier {\n\tif (CAPS.popover && CAPS.cssAnchor && anchor.el) return 'css-anchor'\n\tif (CAPS.popover) return 'popover-fui'\n\treturn 'fui-only'\n}\n\n/* ======================================================================= *\n * Tier 1 — Popover API + CSS Anchor *\n * ======================================================================= */\n\n/**\n * Set up CSS Anchor Positioning. Assigns a unique `anchor-name` to the\n * anchor element and injects a stylesheet into the shadow root that\n * positions the surface relative to it. No JS running per frame.\n *\n * Returns a cleanup function that removes the injected styles and the\n * anchor-name from the anchor element.\n */\nexport function positionCSSAnchor(\n\tsurface: HTMLElement,\n\tanchor: ResolvedAnchor,\n\tshadowRoot: ShadowRoot,\n\topts: { id: string; placement?: OverlayPlacement } = { id: '' },\n): () => void {\n\tif (!anchor.el) {\n\t\tthrow new Error('positionCSSAnchor requires an element anchor')\n\t}\n\tconst anchorEl = anchor.el\n\tconst anchorName = `--ov-${opts.id || Math.random().toString(36).slice(2, 10)}`\n\tconst placement = opts.placement ?? 'bottom-start'\n\n\t// Save any prior anchor-name so we can restore it on cleanup.\n\tconst priorAnchorName = anchorEl.style.getPropertyValue('anchor-name')\n\tanchorEl.style.setProperty('anchor-name', anchorName)\n\n\tconst sheet = new CSSStyleSheet()\n\tsheet.replaceSync(`\n\t\t${surface.localName}[data-overlay-ref=\"${opts.id}\"] {\n\t\t\tposition-anchor: ${anchorName};\n\t\t\t${cssForPlacement(placement)}\n\t\t\tmargin: 8px;\n\t\t\tposition-try-fallbacks:\n\t\t\t\tflip-block,\n\t\t\t\tflip-inline,\n\t\t\t\tflip-block flip-inline;\n\t\t}\n\t`)\n\tsurface.dataset.overlayRef = opts.id\n\tconst existing = shadowRoot.adoptedStyleSheets\n\tshadowRoot.adoptedStyleSheets = [...existing, sheet]\n\n\treturn () => {\n\t\tif (priorAnchorName) {\n\t\t\tanchorEl.style.setProperty('anchor-name', priorAnchorName)\n\t\t} else {\n\t\t\tanchorEl.style.removeProperty('anchor-name')\n\t\t}\n\t\tshadowRoot.adoptedStyleSheets = shadowRoot.adoptedStyleSheets.filter((s) => s !== sheet)\n\t\tdelete surface.dataset.overlayRef\n\t}\n}\n\nfunction cssForPlacement(p: OverlayPlacement): string {\n\t// Minimal mapping for the Tier 1 stylesheet. The browser's\n\t// `position-try-fallbacks` flips when the preferred side doesn't fit,\n\t// so only the starting side needs to be encoded here.\n\tswitch (p) {\n\t\tcase 'top':\n\t\tcase 'top-start':\n\t\t\treturn 'bottom: anchor(top); left: anchor(start);'\n\t\tcase 'top-end':\n\t\t\treturn 'bottom: anchor(top); right: anchor(end);'\n\t\tcase 'bottom':\n\t\tcase 'bottom-start':\n\t\t\treturn 'top: anchor(bottom); left: anchor(start);'\n\t\tcase 'bottom-end':\n\t\t\treturn 'top: anchor(bottom); right: anchor(end);'\n\t\tcase 'left':\n\t\tcase 'left-start':\n\t\t\treturn 'right: anchor(left); top: anchor(start);'\n\t\tcase 'left-end':\n\t\t\treturn 'right: anchor(left); bottom: anchor(end);'\n\t\tcase 'right':\n\t\tcase 'right-start':\n\t\t\treturn 'left: anchor(right); top: anchor(start);'\n\t\tcase 'right-end':\n\t\t\treturn 'left: anchor(right); bottom: anchor(end);'\n\t}\n}\n\n/* ======================================================================= *\n * Tier 2 — Popover API (top-layer only) *\n * ======================================================================= */\n\n/**\n * Wire the Popover API lifecycle — the surface gets `popover=\"auto\"` and\n * `showPopover()` is called to promote it into the native top layer. No\n * position math here; the caller pairs this with `positionFloatingUI` for\n * the geometry, since Tier 2 is Popover-for-stacking + Floating UI-for-math.\n *\n * Returns a cleanup function that hides the popover and strips the attr.\n */\nexport function positionPopoverAPI(surface: HTMLElement): () => void {\n\tif (!CAPS.popover) {\n\t\tthrow new Error('positionPopoverAPI requires Popover API support')\n\t}\n\tsurface.setAttribute('popover', 'auto')\n\ttry {\n\t\t;(surface as unknown as { showPopover(): void }).showPopover()\n\t} catch {\n\t\t// showPopover can throw if already shown or detached; the component\n\t\t// is responsible for calling this on an already-mounted, not-yet-shown\n\t\t// surface. Silently swallowing a double-open is fine.\n\t}\n\treturn () => {\n\t\ttry {\n\t\t\t;(surface as unknown as { hidePopover?: () => void }).hidePopover?.()\n\t\t} catch {\n\t\t\t// already hidden / disconnected — fine.\n\t\t}\n\t\tsurface.removeAttribute('popover')\n\t}\n}\n\n/* ======================================================================= *\n * Tier 2 / 3 — Floating UI position math *\n * ======================================================================= */\n\nexport interface FloatingUIOptions {\n\t/** Preferred placement; Floating UI's `flip` middleware handles falls. */\n\tplacement?: OverlayPlacement\n\t/** Padding used by `shift` + `size` middleware. Defaults to\n\t * `ANCHOR_FIT_PADDING_PX` from overlay.layout. */\n\tpadding?: number\n\t/** Gap between anchor and surface. Default 8px. */\n\toffsetPx?: number\n\t/** Whether `autoUpdate` should track element resizes. Default true. */\n\ttrack?: boolean\n}\n\n/**\n * Floating UI-driven positioning. Returns a cold Observable — subscribe to\n * start positioning, unsubscribe to stop tracking (teardown cancels the\n * `autoUpdate` loop). The caller composes with `takeUntil(this.disconnecting)`:\n *\n * positionFloatingUI(surface, anchor, opts)\n * .pipe(takeUntil(this.disconnecting))\n * .subscribe()\n *\n * Middleware (stack, in order):\n * offset(opts.offsetPx)\n * → flip({ fallbackPlacements: [...] })\n * → shift({ padding: opts.padding })\n * → size({ apply: clamp maxWidth AND maxHeight from availableWidth/Height })\n *\n * `flip` is chosen over `autoPlacement` because element-anchored overlays\n * should respect the trigger's spatial context (menus shouldn't jump\n * sides). Dialog uses `autoPlacement` because it's point-anchored.\n */\nexport function positionFloatingUI(\n\tsurface: HTMLElement,\n\tanchor: ResolvedAnchor,\n\topts: FloatingUIOptions = {},\n): Observable<void> {\n\treturn new Observable<void>((subscriber) => {\n\t\tconst reference = anchor.el ?? anchor.virtual\n\t\tif (!reference) {\n\t\t\tsubscriber.error(new Error('positionFloatingUI requires an element or virtual anchor'))\n\t\t\treturn\n\t\t}\n\n\t\tconst placement: Placement = (opts.placement ?? 'bottom-start') as Placement\n\t\tconst padding = opts.padding ?? ANCHOR_FIT_PADDING_PX\n\t\tconst offsetPx = opts.offsetPx ?? 8\n\n\t\tconst update = async (): Promise<void> => {\n\t\t\ttry {\n\t\t\t\tconst { x, y } = await computePosition(reference, surface, {\n\t\t\t\t\tstrategy: 'fixed',\n\t\t\t\t\tplacement,\n\t\t\t\t\tmiddleware: [\n\t\t\t\t\t\toffset(offsetPx),\n\t\t\t\t\t\tflip({ padding, fallbackPlacements: defaultFallbacks(placement) }),\n\t\t\t\t\t\tshift({ padding }),\n\t\t\t\t\t\tsize({\n\t\t\t\t\t\t\tpadding,\n\t\t\t\t\t\t\tapply({ availableWidth, availableHeight, elements }) {\n\t\t\t\t\t\t\t\telements.floating.style.maxWidth = `${Math.max(0, availableWidth)}px`\n\t\t\t\t\t\t\t\telements.floating.style.maxHeight = `${Math.max(0, availableHeight)}px`\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t\tObject.assign(surface.style, {\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\tleft: `${Math.round(x)}px`,\n\t\t\t\t\ttop: `${Math.round(y)}px`,\n\t\t\t\t\ttransform: 'none',\n\t\t\t\t})\n\t\t\t\tsubscriber.next()\n\t\t\t} catch (err) {\n\t\t\t\tsubscriber.error(err)\n\t\t\t}\n\t\t}\n\n\t\tconst cleanup = autoUpdate(reference, surface, update, {\n\t\t\tancestorScroll: true,\n\t\t\tancestorResize: true,\n\t\t\telementResize: opts.track !== false,\n\t\t})\n\n\t\treturn () => {\n\t\t\tcleanup()\n\t\t}\n\t})\n}\n\nfunction defaultFallbacks(preferred: Placement): Placement[] {\n\t// Flip to the opposite side first, then try the perpendicular ends.\n\t// Small, deterministic list — not exhaustive.\n\tswitch (preferred) {\n\t\tcase 'bottom-start':\n\t\t\treturn ['top-start', 'bottom-end', 'top-end']\n\t\tcase 'bottom-end':\n\t\t\treturn ['top-end', 'bottom-start', 'top-start']\n\t\tcase 'top-start':\n\t\t\treturn ['bottom-start', 'top-end', 'bottom-end']\n\t\tcase 'top-end':\n\t\t\treturn ['bottom-end', 'top-start', 'bottom-start']\n\t\tcase 'left-start':\n\t\t\treturn ['right-start', 'left-end', 'right-end']\n\t\tcase 'left-end':\n\t\t\treturn ['right-end', 'left-start', 'right-start']\n\t\tcase 'right-start':\n\t\t\treturn ['left-start', 'right-end', 'left-end']\n\t\tcase 'right-end':\n\t\t\treturn ['left-end', 'right-start', 'left-start']\n\t\tcase 'top':\n\t\t\treturn ['bottom', 'left', 'right']\n\t\tcase 'bottom':\n\t\t\treturn ['top', 'left', 'right']\n\t\tcase 'left':\n\t\t\treturn ['right', 'top', 'bottom']\n\t\tcase 'right':\n\t\t\treturn ['left', 'top', 'bottom']\n\t\tdefault:\n\t\t\treturn ['top-start', 'bottom-end']\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, render as litRender, type TemplateResult } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n\tdebounceTime,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tSubject,\n\ttake,\n\ttakeUntil,\n\ttap,\n} from 'rxjs'\nimport type { LazyComponent } from '../area/lazy'\nimport { fromResizeObserver } from '../directives/layout'\nimport {\n\tanchorOriginVars,\n\tflipAnimation,\n\tsurfaceAnimation,\n} from './overlay.animations'\nimport { swipeToDismiss$ } from './overlay.gestures'\nimport {\n\treadViewport,\n\tresolveAnchorRef,\n\tresolveLayout,\n\ttype ResolvedAnchor,\n} from './overlay.layout'\nimport {\n\tpickPositioner,\n\tpositionCSSAnchor,\n\tpositionFloatingUI,\n\tpositionPopoverAPI,\n} from './overlay.positioning'\nimport type {\n\tAnchor,\n\tCloseReason,\n\tContent,\n\tOverlayLayout,\n\tOverlayTier,\n\tShowOptions,\n} from './overlay.types'\n\nconst MOUNT_POINT_ID = 'overlay-mount'\nconst RE_RESOLVE_COOLDOWN_MS = 600\n\n/**\n * The single overlay element. Custom `<div>` shell (not a native\n * `<dialog>`) — one backdrop mechanism for all layouts, one focus-trap\n * path, one animation orchestrator. The shell is always rendered; the\n * backdrop only renders when modal. The surface is positioned per tier:\n *\n * - Modal layouts (centered / sheet) → backdrop + surface, focus-trapped,\n * library-managed z-index.\n * - Anchored 'css-anchor' tier → surface as `popover=\"auto\"` with\n * CSS Anchor Positioning; native top-layer + light-dismiss.\n * - Anchored 'popover-fui' tier → surface as `popover=\"auto\"` + Floating\n * UI position math; native top-layer + light-dismiss.\n * - Anchored 'fui-only' tier → surface positioned by Floating UI;\n * manual click-outside + manual Esc.\n *\n * Public lifecycle: the service calls `open()` to mount content and\n * animate in, `close(reason)` to animate out and dismiss. The element\n * exposes `closed$` (Observable emitting reason + result once) and\n * `tier` / `layout` / `modal` as properties for the stack entry.\n */\n@customElement('schmancy-overlay')\nexport class SchmancyOverlay extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tposition: fixed;\n\t\tinset: 0;\n\t\tz-index: var(--schmancy-overlay-z, 10000);\n\t\tdisplay: none;\n\t\tpointer-events: none;\n\t}\n\t:host([active]) {\n\t\tdisplay: block;\n\t}\n\t.shell {\n\t\tposition: fixed;\n\t\tinset: 0;\n\t\tpointer-events: none;\n\t}\n\t.backdrop {\n\t\tposition: fixed;\n\t\tinset: 0;\n\t\tbackground: color-mix(in srgb, var(--schmancy-sys-color-surface-container, rgba(12, 12, 16, 0.28)) 60%, transparent);\n\t\tbackdrop-filter: blur(18px) saturate(150%);\n\t\t-webkit-backdrop-filter: blur(18px) saturate(150%);\n\t\tpointer-events: auto;\n\t}\n\t.surface {\n\t\tposition: fixed;\n\t\tpointer-events: auto;\n\t\tmax-width: calc(100vw - 2rem);\n\t\tmax-height: 90dvh;\n\t\toverflow: auto;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-large, 16px);\n\t\tbackground: var(--schmancy-sys-color-surface, #ffffff);\n\t\tcolor: var(--schmancy-sys-color-on-surface, #1a1a1a);\n\t\tbox-shadow: 0 24px 64px -16px rgba(0, 0, 0, 0.35);\n\t}\n\t.surface[data-layout='centered'] {\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate(-50%, -50%);\n\t}\n\t.surface[data-layout='sheet'] {\n\t\tleft: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\tmax-width: none;\n\t\twidth: 100%;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-large, 16px) var(--schmancy-sys-shape-corner-large, 16px) 0 0;\n\t\tpadding-bottom: env(safe-area-inset-bottom);\n\t}\n\t.surface[data-layout='anchored'] {\n\t\tmax-width: min(480px, calc(100vw - 2rem));\n\t\tbox-shadow: 0 12px 32px -8px rgba(0, 0, 0, 0.28);\n\t}\n\t/* Popover top-layer surfaces escape normal z-index — zero out host\n\t * display to avoid two surfaces rendering during transitions. */\n\t.surface:popover-open {\n\t\tmargin: 0;\n\t\tborder: 0;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.surface {\n\t\t\tbox-shadow: var(--schmancy-sys-elevation-2, 0 2px 6px rgba(0, 0, 0, 0.2));\n\t\t}\n\t}\n`]\n\n\t@property({ type: String, reflect: true }) layout: OverlayLayout = 'centered'\n\t@property({ type: Boolean, reflect: true }) dismissable = true\n\t@property({ type: Boolean, reflect: true }) modal = true\n\t@property({ type: String, reflect: true }) tier: OverlayTier = 'modal'\n\n\t@state() private _active = false\n\n\t@query('.backdrop') private _backdrop?: HTMLDivElement\n\t@query('.surface') private _surface!: HTMLElement\n\n\t/** Close trigger for the service; emits the reason + detail payload. */\n\tprivate readonly _closed$ = new Subject<{ reason: CloseReason; result?: unknown }>()\n\n\tprivate _mounted = false\n\tprivate _closing = false\n\tprivate _resolvedAnchor?: ResolvedAnchor\n\tprivate _rawAnchor?: Anchor\n\tprivate _anchorOriginAnchor?: Anchor\n\tprivate _positionerTeardown?: () => void\n\tprivate _lastFocusedElement: HTMLElement | null = null\n\tprivate _inertedSiblings: HTMLElement[] = []\n\tprivate _lastReResolveAt = 0\n\n\t/** Service subscribes to this to know when the overlay dismissed. */\n\tget closed$(): import('rxjs').Observable<{ reason: CloseReason; result?: unknown }> {\n\t\treturn this._closed$.asObservable()\n\t}\n\n\t/**\n\t * Mount content and animate in. Called by the service after the\n\t * element is attached to the DOM. Resolves when the entrance\n\t * animation completes.\n\t */\n\tasync open(content: Content, options: ShowOptions): Promise<void> {\n\t\tif (this._mounted) throw new Error('schmancy-overlay: open() called twice on the same element')\n\t\tthis._mounted = true\n\n\t\tthis.dismissable = options.dismissable !== false\n\t\tthis._rawAnchor = options.anchor\n\t\tthis._anchorOriginAnchor = options.anchor\n\t\tthis._resolvedAnchor = resolveAnchorRef(options.anchor)\n\n\t\t// Ensure the shell is rendered so the mount point exists.\n\t\tthis._active = true\n\t\tthis.setAttribute('active', '')\n\t\tawait this.updateComplete\n\n\t\tconst mount = this.renderRoot.querySelector(`#${MOUNT_POINT_ID}`) as HTMLElement | null\n\t\tif (!mount) throw new Error('schmancy-overlay: mount point missing')\n\t\tawait mountContent(content, mount, options.props)\n\n\t\t// Measure content after mount for layout dispatch.\n\t\tconst viewport = readViewport()\n\t\tconst contentSize = {\n\t\t\twidth: mount.scrollWidth,\n\t\t\theight: mount.scrollHeight,\n\t\t}\n\t\tthis.layout = resolveLayout({\n\t\t\tanchor: options.anchor,\n\t\t\tcontent: contentSize,\n\t\t\tviewport,\n\t\t})\n\n\t\t// Modal defaults per layout, with the caller's `modal` as escape hatch.\n\t\tthis.modal =\n\t\t\toptions.modal ?? (this.layout === 'centered' || this.layout === 'sheet')\n\n\t\t// Pick the positioning tier. Modal layouts always use the 'modal'\n\t\t// tier (custom shell + manual backdrop); anchored uses the CAPS-driven\n\t\t// ladder. `modal: true` on an anchored layout stays modal.\n\t\tthis.tier = this.modal\n\t\t\t? 'modal'\n\t\t\t: this._resolvedAnchor\n\t\t\t\t? pickPositioner(this._resolvedAnchor)\n\t\t\t\t: 'modal'\n\n\t\tawait this.updateComplete\n\n\t\t// Apply tier-specific positioning. For 'modal' the CSS data-layout\n\t\t// attribute + :host styles already place the surface; nothing to do.\n\t\t// For anchored tiers we delegate to the positioning module.\n\t\tif (this.tier === 'css-anchor' && this._resolvedAnchor?.el && this.shadowRoot) {\n\t\t\tthis._positionerTeardown = positionCSSAnchor(this._surface, this._resolvedAnchor, this.shadowRoot, {\n\t\t\t\tid: `ov-${Math.random().toString(36).slice(2, 10)}`,\n\t\t\t\tplacement: options.preferredPlacement ?? 'bottom-start',\n\t\t\t})\n\t\t\t// Pair with Popover API to get native top-layer + light-dismiss.\n\t\t\tconst popoverCleanup = positionPopoverAPI(this._surface)\n\t\t\tconst prior = this._positionerTeardown\n\t\t\tthis._positionerTeardown = () => {\n\t\t\t\tpopoverCleanup()\n\t\t\t\tprior()\n\t\t\t}\n\t\t} else if (this.tier === 'popover-fui' && this._resolvedAnchor) {\n\t\t\tconst popoverCleanup = positionPopoverAPI(this._surface)\n\t\t\tconst floatSub = positionFloatingUI(this._surface, this._resolvedAnchor, {\n\t\t\t\tplacement: options.preferredPlacement ?? 'bottom-start',\n\t\t\t\toffsetPx: 8,\n\t\t\t\ttrack: options.track !== false,\n\t\t\t})\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe()\n\t\t\tthis._positionerTeardown = () => {\n\t\t\t\tpopoverCleanup()\n\t\t\t\tfloatSub.unsubscribe()\n\t\t\t}\n\t\t} else if (this.tier === 'fui-only' && this._resolvedAnchor) {\n\t\t\tconst floatSub = positionFloatingUI(this._surface, this._resolvedAnchor, {\n\t\t\t\tplacement: options.preferredPlacement ?? 'bottom-start',\n\t\t\t\toffsetPx: 8,\n\t\t\t\ttrack: options.track !== false,\n\t\t\t})\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe()\n\t\t\tthis._positionerTeardown = () => floatSub.unsubscribe()\n\t\t}\n\n\t\t// Set the anchor-origin CSS vars so the entrance animation blooms\n\t\t// from the click point. Must happen AFTER positioning so the\n\t\t// surface rect is final.\n\t\tthis.setAnchorOriginVars()\n\n\t\t// Wire close triggers (focus trap, Esc, backdrop click, etc).\n\t\tthis.wireFocusTrap()\n\t\tthis.wireCloseTriggers(options.signal)\n\n\t\t// Watch content for mid-session re-resolves (upward-only + cooldown).\n\t\tthis.wireResizeObserver(mount)\n\n\t\t// Play entrance animations.\n\t\tawait this.playEnterAnimations()\n\t}\n\n\t/** Play exit animations then dismiss. */\n\tasync close(reason: CloseReason, result?: unknown): Promise<void> {\n\t\tif (this._closing || !this._mounted) return\n\t\tthis._closing = true\n\t\ttry {\n\t\t\tawait this.playExitAnimations()\n\t\t} catch {\n\t\t\t// animation cancelled mid-flight — not an error.\n\t\t}\n\t\tthis.releaseFocusTrap()\n\t\tif (this._positionerTeardown) {\n\t\t\ttry {\n\t\t\t\tthis._positionerTeardown()\n\t\t\t} catch {\n\t\t\t\t// cleanup shouldn't throw; ignore anything that does.\n\t\t\t}\n\t\t\tthis._positionerTeardown = undefined\n\t\t}\n\t\tthis._active = false\n\t\tthis.removeAttribute('active')\n\t\tthis._closed$.next({ reason, result })\n\t\tthis._closed$.complete()\n\t}\n\n\t/* ---------------- render ------------------------------------------- */\n\n\tprotected render(): TemplateResult {\n\t\tif (!this._active) return html``\n\t\treturn html`\n\t\t\t<div class=\"shell\" part=\"shell\">\n\t\t\t\t${when(\n\t\t\t\t\tthis.modal,\n\t\t\t\t\t() => html`<div class=\"backdrop\" part=\"backdrop\" @click=${this.onBackdropClick}></div>`,\n\t\t\t\t)}\n\t\t\t\t<section\n\t\t\t\t\tclass=\"surface\"\n\t\t\t\t\tpart=\"surface\"\n\t\t\t\t\tdata-layout=${this.layout}\n\t\t\t\t\tdata-tier=${this.tier}\n\t\t\t\t\trole=${this.modal ? 'dialog' : 'region'}\n\t\t\t\t\taria-modal=${this.modal ? 'true' : 'false'}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t>\n\t\t\t\t\t<div id=${MOUNT_POINT_ID}></div>\n\t\t\t\t</section>\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate onBackdropClick = (): void => {\n\t\tif (this.dismissable) void this.close('backdrop')\n\t}\n\n\t/* ---------------- anchor-origin bloom ------------------------------ */\n\n\tprivate setAnchorOriginVars(): void {\n\t\tconst surface = this._surface\n\t\tif (!surface) return\n\t\tconst rect = surface.getBoundingClientRect()\n\t\tconst vars =\n\t\t\tthis.layout === 'centered' && !this._anchorOriginAnchor\n\t\t\t\t? { '--schmancy-overlay-origin-x': '50%', '--schmancy-overlay-origin-y': '50%' }\n\t\t\t\t: this.layout === 'sheet' && !this._anchorOriginAnchor\n\t\t\t\t\t? { '--schmancy-overlay-origin-x': '50%', '--schmancy-overlay-origin-y': '100%' }\n\t\t\t\t\t: anchorOriginVars(this._anchorOriginAnchor, rect)\n\t\tfor (const [k, v] of Object.entries(vars)) {\n\t\t\tsurface.style.setProperty(k, v)\n\t\t}\n\t}\n\n\t/* ---------------- focus trap --------------------------------------- */\n\n\tprivate wireFocusTrap(): void {\n\t\tif (!this.modal) return\n\t\tthis._lastFocusedElement = (document.activeElement as HTMLElement) ?? null\n\t\tconst parent = this.parentElement\n\t\tif (parent) {\n\t\t\tthis._inertedSiblings = []\n\t\t\tfor (const child of Array.from(parent.children)) {\n\t\t\t\tif (child !== this && child instanceof HTMLElement && !child.inert) {\n\t\t\t\t\tchild.inert = true\n\t\t\t\t\tthis._inertedSiblings.push(child)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Focus the surface or the first [autofocus] child.\n\t\tqueueMicrotask(() => {\n\t\t\tconst auto = this._surface?.querySelector<HTMLElement>('[autofocus]')\n\t\t\t;(auto ?? this._surface)?.focus()\n\t\t})\n\t}\n\n\tprivate releaseFocusTrap(): void {\n\t\tfor (const el of this._inertedSiblings) {\n\t\t\tel.inert = false\n\t\t}\n\t\tthis._inertedSiblings = []\n\t\ttry {\n\t\t\tthis._lastFocusedElement?.focus?.()\n\t\t} catch {\n\t\t\t// trigger may be detached now; no-op.\n\t\t}\n\t\tthis._lastFocusedElement = null\n\t}\n\n\t/* ---------------- close triggers ----------------------------------- */\n\n\tprivate wireCloseTriggers(signal?: AbortSignal): void {\n\t\tconst until = this.disconnecting\n\n\t\t// Structured close — content dispatches CustomEvent('close', { detail }).\n\t\tfromEvent<CustomEvent>(this, 'close')\n\t\t\t.pipe(\n\t\t\t\tfilter((e) => e instanceof CustomEvent),\n\t\t\t\ttap((e) => {\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t\tvoid this.close('structured', e.detail)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(until),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\t// Native <form method=\"dialog\"> submission bubbles up as a regular\n\t\t// submit event with `submitter.value` (returnValue proxy for our\n\t\t// custom shell). Capture it and resolve with the string value.\n\t\tfromEvent<SubmitEvent>(this, 'submit')\n\t\t\t.pipe(\n\t\t\t\tfilter((e) => {\n\t\t\t\t\tconst form = e.target as HTMLFormElement | null\n\t\t\t\t\treturn !!form && form.method === 'dialog'\n\t\t\t\t}),\n\t\t\t\ttap((e) => {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tconst submitter = (e as SubmitEvent & { submitter?: HTMLButtonElement | HTMLInputElement })\n\t\t\t\t\t\t.submitter\n\t\t\t\t\tconst value = submitter?.value ?? ''\n\t\t\t\t\tvoid this.close('native-submit', value)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(until),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\t// Modal tier: manual Esc (popover tiers use native toggle event).\n\t\tif (this.tier === 'modal') {\n\t\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter((e) => e.key === 'Escape'),\n\t\t\t\t\ttap((e) => {\n\t\t\t\t\t\tif (!this.dismissable) {\n\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tvoid this.close('escape')\n\t\t\t\t\t}),\n\t\t\t\t\ttakeUntil(until),\n\t\t\t\t)\n\t\t\t\t.subscribe()\n\t\t}\n\n\t\t// Popover tiers: native `toggle` event fires on open/close, with\n\t\t// `newState: 'closed'` when the browser light-dismisses the popover.\n\t\tif (this.tier === 'popover-fui' || this.tier === 'css-anchor') {\n\t\t\tfromEvent<ToggleEvent>(this._surface, 'toggle')\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter((e) => e.newState === 'closed'),\n\t\t\t\t\ttake(1),\n\t\t\t\t\ttap(() => {\n\t\t\t\t\t\tif (!this._closing) void this.close('light-dismiss')\n\t\t\t\t\t}),\n\t\t\t\t\ttakeUntil(until),\n\t\t\t\t)\n\t\t\t\t.subscribe()\n\t\t}\n\n\t\t// Floating-UI-only tier: manual outside-click dismissal.\n\t\tif (this.tier === 'fui-only') {\n\t\t\tfromEvent<PointerEvent>(document, 'pointerdown', { capture: true })\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter((e) => {\n\t\t\t\t\t\tif (!this.dismissable) return false\n\t\t\t\t\t\tconst target = e.composedPath()[0] as Node | undefined\n\t\t\t\t\t\tif (!target) return false\n\t\t\t\t\t\t// Clicks inside the surface shouldn't dismiss.\n\t\t\t\t\t\tif (this._surface?.contains(target as Node)) return false\n\t\t\t\t\t\t// Clicks on the anchor itself shouldn't dismiss (avoid re-toggle).\n\t\t\t\t\t\tif (this._resolvedAnchor?.el?.contains(target as Node)) return false\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}),\n\t\t\t\t\ttake(1),\n\t\t\t\t\ttap(() => void this.close('backdrop')),\n\t\t\t\t\ttakeUntil(until),\n\t\t\t\t)\n\t\t\t\t.subscribe()\n\t\t}\n\n\t\t// Swipe-to-dismiss for sheet layout only. No visual drag handle —\n\t\t// the gesture starts from the top 40px of the surface (see\n\t\t// DRAG_START_TOP_PX in overlay.gestures). Escape + backdrop click\n\t\t// cover the other dismiss paths via the modal-tier listeners above.\n\t\tif (this.layout === 'sheet' && this.dismissable) {\n\t\t\tswipeToDismiss$({\n\t\t\t\tsurface: this._surface,\n\t\t\t\tuntil$: merge(until, this._closed$),\n\t\t\t})\n\t\t\t\t.pipe(take(1))\n\t\t\t\t.subscribe(() => void this.close('swipe'))\n\t\t}\n\n\t\t// AbortSignal — standard cancellation input.\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tqueueMicrotask(() => void this.close('abort'))\n\t\t\t} else {\n\t\t\t\tfromEvent(signal, 'abort')\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\ttake(1),\n\t\t\t\t\t\ttap(() => void this.close('abort')),\n\t\t\t\t\t\ttakeUntil(until),\n\t\t\t\t\t)\n\t\t\t\t\t.subscribe()\n\t\t\t}\n\t\t}\n\t}\n\n\t/* ---------------- ResizeObserver FLIP re-resolve ------------------- */\n\n\tprivate wireResizeObserver(mount: HTMLElement): void {\n\t\tfromResizeObserver(mount)\n\t\t\t.pipe(\n\t\t\t\tmap((entries) => {\n\t\t\t\t\tconst entry = entries[0]\n\t\t\t\t\tif (!entry) return null\n\t\t\t\t\tconst box = entry.contentRect\n\t\t\t\t\treturn { w: box.width, h: box.height }\n\t\t\t\t}),\n\t\t\t\tfilter((v): v is { w: number; h: number } => v !== null),\n\t\t\t\tdistinctUntilChanged((a, b) => a.w === b.w && a.h === b.h),\n\t\t\t\tdebounceTime(80),\n\t\t\t\ttakeUntil(merge(this.disconnecting, this._closed$)),\n\t\t\t)\n\t\t\t.subscribe((size) => this.maybeReResolve(size))\n\t}\n\n\tprivate async maybeReResolve(size: { w: number; h: number }): Promise<void> {\n\t\tif (this._closing) return\n\t\tconst viewport = readViewport()\n\t\tconst next = resolveLayout({\n\t\t\tanchor: this._rawAnchor,\n\t\t\tcontent: { width: size.w, height: size.h },\n\t\t\tviewport,\n\t\t})\n\t\tif (next === this.layout) return\n\t\t// Cooldown: prevent churn-driven bouncing.\n\t\tconst now = performance.now()\n\t\tif (now - this._lastReResolveAt < RE_RESOLVE_COOLDOWN_MS) return\n\t\t// Upward-only ratchet: centered → sheet on content-grow is OK,\n\t\t// sheet → centered on content-shrink is ignored.\n\t\tif (!isUpwardTransition(this.layout, next)) return\n\n\t\t// FLIP: capture `before` rect, apply new layout, capture `after`,\n\t\t// animate the inverse transform.\n\t\tconst surface = this._surface\n\t\tconst before = surface.getBoundingClientRect()\n\t\tthis.layout = next\n\t\tawait this.updateComplete\n\t\tconst after = surface.getBoundingClientRect()\n\t\tconst spec = flipAnimation(before, after)\n\t\ttry {\n\t\t\tawait surface.animate(spec.keyframes, spec.options).finished\n\t\t} catch {\n\t\t\t// cancelled — not an error.\n\t\t}\n\t\tthis._lastReResolveAt = performance.now()\n\t}\n\n\t/* ---------------- animations --------------------------------------- */\n\n\tprivate async playEnterAnimations(): Promise<void> {\n\t\tconst surface = this._surface\n\t\tif (!surface) return\n\t\tconst spec = surfaceAnimation(this.layout, 'in')\n\t\tconst tasks: Promise<unknown>[] = [\n\t\t\tsurface.animate(spec.keyframes, spec.options).finished.catch(() => undefined),\n\t\t]\n\t\tconst backdrop = this._backdrop\n\t\tif (this.modal && backdrop) {\n\t\t\ttasks.push(\n\t\t\t\tbackdrop\n\t\t\t\t\t.animate(\n\t\t\t\t\t\t[{ opacity: 0 }, { opacity: 1 }],\n\t\t\t\t\t\t{ duration: spec.options.duration, easing: 'ease-out', fill: 'forwards' },\n\t\t\t\t\t)\n\t\t\t\t\t.finished.catch(() => undefined),\n\t\t\t)\n\t\t}\n\t\tawait Promise.all(tasks)\n\t}\n\n\tprivate async playExitAnimations(): Promise<void> {\n\t\tconst surface = this._surface\n\t\tif (!surface) return\n\t\tconst spec = surfaceAnimation(this.layout, 'out')\n\t\tconst tasks: Promise<unknown>[] = [\n\t\t\tsurface.animate(spec.keyframes, spec.options).finished.catch(() => undefined),\n\t\t]\n\t\tconst backdrop = this._backdrop\n\t\tif (this.modal && backdrop) {\n\t\t\ttasks.push(\n\t\t\t\tbackdrop\n\t\t\t\t\t.animate(\n\t\t\t\t\t\t[{ opacity: 1 }, { opacity: 0 }],\n\t\t\t\t\t\t{ duration: spec.options.duration, easing: 'ease-in', fill: 'forwards' },\n\t\t\t\t\t)\n\t\t\t\t\t.finished.catch(() => undefined),\n\t\t\t)\n\t\t}\n\t\tawait Promise.all(tasks)\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-overlay': SchmancyOverlay\n\t}\n}\n\n/* ======================================================================= *\n * content mounting helpers *\n * ======================================================================= */\n\nasync function mountContent(\n\tcontent: Content,\n\thost: HTMLElement,\n\tprops?: Record<string, unknown>,\n): Promise<HTMLElement> {\n\t// TemplateResult — render via lit's `render`.\n\tif (isTemplateResult(content)) {\n\t\tlitRender(content, host)\n\t\treturn host\n\t}\n\n\t// Already-instantiated element — append directly.\n\tif (content instanceof HTMLElement) {\n\t\tif (props) Object.assign(content, props)\n\t\thost.appendChild(content)\n\t\treturn content\n\t}\n\n\t// LazyComponent — await the module, recurse with the default export.\n\tif (isLazy(content)) {\n\t\tconst mod = await content()\n\t\treturn mountContent(mod.default, host, props)\n\t}\n\n\t// Class constructor.\n\tif (typeof content === 'function') {\n\t\tconst Ctor = content as unknown as { new (): HTMLElement }\n\t\tconst el = new Ctor()\n\t\tif (props) Object.assign(el, props)\n\t\thost.appendChild(el)\n\t\treturn el\n\t}\n\n\t// Tag name.\n\tif (typeof content === 'string') {\n\t\tconst el = document.createElement(content)\n\t\tif (props) Object.assign(el, props)\n\t\thost.appendChild(el)\n\t\treturn el\n\t}\n\n\tthrow new Error('schmancy-overlay: unsupported content type')\n}\n\nfunction isTemplateResult(x: unknown): x is TemplateResult {\n\treturn typeof x === 'object' && x !== null && '_$litType$' in x\n}\n\nfunction isLazy(x: unknown): x is LazyComponent {\n\treturn typeof x === 'function' && ('preload' in (x as object) || '_promise' in (x as object))\n}\n\nfunction isUpwardTransition(from: OverlayLayout, to: OverlayLayout): boolean {\n\t// Upward ladder: centered < sheet. anchored → sheet is also upward\n\t// (overflow went past threshold). anchored → centered is NOT upward.\n\tif (from === 'centered' && to === 'sheet') return true\n\tif (from === 'anchored' && to === 'sheet') return true\n\treturn false\n}\n"],"mappings":"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"}
package/dist/overlay.cjs CHANGED
@@ -1,80 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BOOu6q2n.cjs`),t=require(`./active-host-jH3iloCR.cjs`),n=require(`./lazy-CayEFyC3.cjs`),r=require(`./animation-CCOIW4wJ.cjs`),i=require(`./reduced-motion-Dzfp_w5x.cjs`),a=require(`./layout-Delq-QvR.cjs`),o=require(`./overlay.service-1YWfUD2S.cjs`),s=require(`./overlay.confirm-body-BkhNvr0c.cjs`);let c=require(`rxjs`),l=require(`lit/decorators.js`),u=require(`lit`),d=require(`lit/directives/when.js`),f=require(`@floating-ui/dom`);var p=i.t.value;i.t.subscribe(e=>{p=e});var m=`--schmancy-overlay-origin-x`,h=`--schmancy-overlay-origin-y`,g=`var(${m}, 50%) var(${h}, 50%)`;function _(e){return Number.isNaN(e)||!Number.isFinite(e)?50:Math.max(0,Math.min(100,e))}function v(e,t){if(p)return t===`in`?{keyframes:[{opacity:0,transform:`none`},{opacity:1,transform:`none`}],options:{duration:1,easing:`linear`,fill:`forwards`}}:{keyframes:[{opacity:1,transform:`none`},{opacity:0,transform:`none`}],options:{duration:1,easing:`linear`,fill:`forwards`}};switch(e){case`centered`:return t===`in`?{keyframes:[{opacity:0,transform:`scale(0.6)`,transformOrigin:g},{opacity:1,transform:`scale(1)`,transformOrigin:g}],options:{duration:r.f.duration,easing:r._(r.f),fill:`forwards`}}:{keyframes:[{opacity:1,transform:`scale(1)`,transformOrigin:g},{opacity:0,transform:`scale(0.95)`,transformOrigin:g}],options:{duration:150,easing:r._(r.d),fill:`forwards`}};case`sheet`:return t===`in`?{keyframes:[{opacity:0,transform:`translateY(100%)`},{opacity:1,transform:`translateY(0)`}],options:{duration:r.u.duration,easing:r._(r.u),fill:`forwards`}}:{keyframes:[{opacity:1,transform:`translateY(0)`},{opacity:0,transform:`translateY(100%)`}],options:{duration:150,easing:r._(r.d),fill:`forwards`}};case`anchored`:return t===`in`?{keyframes:[{opacity:0,transform:`scale(0.85)`,transformOrigin:g},{opacity:1,transform:`scale(1)`,transformOrigin:g}],options:{duration:r.f.duration,easing:r._(r.f),fill:`forwards`}}:{keyframes:[{opacity:1,transform:`scale(1)`,transformOrigin:g},{opacity:0,transform:`scale(0.92)`,transformOrigin:g}],options:{duration:150,easing:r._(r.d),fill:`forwards`}}}}function y(e){let{surface:t,dragHandle:n,until$:r}=e;return new c.Observable(e=>{let i=n??t,a=new c.Subject,o=!1,s=null,l=0,u=0,d=0;return(0,c.merge)((0,c.fromEvent)(i,`pointerdown`).pipe((0,c.filter)(e=>e.isPrimary&&(e.pointerType!==`mouse`||e.button===0)),(0,c.filter)(e=>{if(n)return!0;let r=t.getBoundingClientRect();return e.clientY-r.top<=40}),(0,c.tap)(e=>{o=!0,s=e.pointerId,l=e.clientY,u=performance.now(),d=0,t.style.transition=`none`,t.style.willChange=`transform`;try{i.setPointerCapture?.(e.pointerId)}catch{}})),(0,c.fromEvent)(i,`pointermove`).pipe((0,c.filter)(()=>o),(0,c.filter)(e=>e.pointerId===s),(0,c.tap)(e=>{d=function(e){if(e>=0)return e;let t=-e;return-Math.max(0,8*(Math.log(t+1)-2))}(e.clientY-l),t.style.transform=`translateY(${d}px)`,e.cancelable&&e.preventDefault()})),(0,c.merge)((0,c.fromEvent)(i,`pointerup`),(0,c.fromEvent)(i,`pointercancel`),(0,c.fromEvent)(i,`lostpointercapture`)).pipe((0,c.filter)(()=>o),(0,c.filter)(e=>e.pointerId===s),(0,c.tap)(()=>{o=!1;let n=s;s=null;try{n!==null&&i.releasePointerCapture?.(n)}catch{}let r=Math.max(1,performance.now()-u),a=d/r,c=t.getBoundingClientRect().height,l=Math.min(80,.25*c),f=d>l||d>20&&a>.4;t.style.willChange=``,f?(t.style.transition=`transform 300ms cubic-bezier(0.16, 1, 0.3, 1)`,t.style.transform=`translateY(100%)`,e.next(`dismiss`),e.complete()):(t.style.transition=`transform 300ms cubic-bezier(0.16, 1, 0.3, 1)`,t.style.transform=`translateY(0)`)}))).pipe((0,c.takeUntil)((0,c.merge)(a,r))).subscribe(),()=>{a.next(),a.complete(),t.style.transition=``,t.style.transform=``,t.style.willChange=``}}).pipe((0,c.take)(1))}function b(e){let{anchor:t,content:n,viewport:r}=e,i=r.width<640,a=r.isCoarsePointer,o=n.height>.8*r.height,s=n.width>.9*r.width;return i||a||o||s?`sheet`:t===void 0?`centered`:`anchored`}function x(){return{width:window.innerWidth,height:window.innerHeight,isCoarsePointer:window.matchMedia(`(pointer: coarse)`).matches}}function S(e,t){return{x:e,y:t,width:0,height:0,left:e,right:e,top:t,bottom:t,toJSON:()=>({x:e,y:t,width:0,height:0,left:e,right:e,top:t,bottom:t})}}var C=Object.freeze({popover:typeof HTMLElement<`u`&&`popover`in HTMLElement.prototype&&typeof HTMLElement.prototype.showPopover==`function`,cssAnchor:typeof CSS<`u`&&typeof CSS.supports==`function`&&CSS.supports(`anchor-name: --x`)});function w(e){if(!C.popover)throw Error(`positionPopoverAPI requires Popover API support`);e.setAttribute(`popover`,`auto`);try{e.showPopover()}catch{}return()=>{try{e.hidePopover?.()}catch{}e.removeAttribute(`popover`)}}function T(e,t,n={}){return new c.Observable(r=>{let i=t.el??t.virtual;if(!i)return void r.error(Error(`positionFloatingUI requires an element or virtual anchor`));let a=n.placement??`bottom-start`,o=n.padding??16,s=n.offsetPx??8,c=(0,f.autoUpdate)(i,e,async()=>{try{let{x:t,y:n}=await(0,f.computePosition)(i,e,{strategy:`fixed`,placement:a,middleware:[(0,f.offset)(s),(0,f.flip)({padding:o,fallbackPlacements:E(a)}),(0,f.shift)({padding:o}),(0,f.size)({padding:o,apply({availableWidth:e,availableHeight:t,elements:n}){n.floating.style.maxWidth=`${Math.max(0,e)}px`,n.floating.style.maxHeight=`${Math.max(0,t)}px`}})]});Object.assign(e.style,{position:`fixed`,left:`${Math.round(t)}px`,top:`${Math.round(n)}px`,transform:`none`}),r.next()}catch(e){r.error(e)}},{ancestorScroll:!0,ancestorResize:!0,elementResize:!1!==n.track});return()=>{c()}})}function E(e){switch(e){case`bottom-start`:return[`top-start`,`bottom-end`,`top-end`];case`bottom-end`:return[`top-end`,`bottom-start`,`top-start`];case`top-start`:return[`bottom-start`,`top-end`,`bottom-end`];case`top-end`:return[`bottom-end`,`top-start`,`bottom-start`];case`left-start`:return[`right-start`,`left-end`,`right-end`];case`left-end`:return[`right-end`,`left-start`,`right-start`];case`right-start`:return[`left-start`,`right-end`,`left-end`];case`right-end`:return[`left-end`,`right-start`,`left-start`];case`top`:return[`bottom`,`left`,`right`];case`bottom`:return[`top`,`left`,`right`];case`left`:return[`right`,`top`,`bottom`];case`right`:return[`left`,`top`,`bottom`];default:return[`top-start`,`bottom-end`]}}var D=`overlay-mount`,O=class extends e.c{constructor(...e){super(...e),this.layout=`centered`,this.dismissable=!0,this.modal=!0,this.tier=`modal`,this._active=!1,this._closed$=new c.Subject,this._mounted=!1,this._closing=!1,this._lastFocusedElement=null,this._inertedSiblings=[],this._lastReResolveAt=0,this.onBackdropClick=()=>{this.dismissable&&this.close(`backdrop`)}}static{this.styles=[u.css`
2
- :host {
3
- position: fixed;
4
- inset: 0;
5
- z-index: var(--schmancy-overlay-z, 10000);
6
- display: none;
7
- pointer-events: none;
8
- }
9
- :host([active]) {
10
- display: block;
11
- }
12
- .shell {
13
- position: fixed;
14
- inset: 0;
15
- pointer-events: none;
16
- }
17
- .backdrop {
18
- position: fixed;
19
- inset: 0;
20
- background: color-mix(in srgb, var(--schmancy-sys-color-surface-container, rgba(12, 12, 16, 0.28)) 60%, transparent);
21
- backdrop-filter: blur(18px) saturate(150%);
22
- -webkit-backdrop-filter: blur(18px) saturate(150%);
23
- pointer-events: auto;
24
- }
25
- .surface {
26
- position: fixed;
27
- pointer-events: auto;
28
- max-width: calc(100vw - 2rem);
29
- max-height: 90dvh;
30
- overflow: auto;
31
- border-radius: var(--schmancy-sys-shape-corner-large, 16px);
32
- background: var(--schmancy-sys-color-surface, #ffffff);
33
- color: var(--schmancy-sys-color-on-surface, #1a1a1a);
34
- box-shadow: 0 24px 64px -16px rgba(0, 0, 0, 0.35);
35
- }
36
- .surface[data-layout='centered'] {
37
- top: 50%;
38
- left: 50%;
39
- transform: translate(-50%, -50%);
40
- }
41
- .surface[data-layout='sheet'] {
42
- left: 0;
43
- right: 0;
44
- bottom: 0;
45
- max-width: none;
46
- width: 100%;
47
- border-radius: var(--schmancy-sys-shape-corner-large, 16px) var(--schmancy-sys-shape-corner-large, 16px) 0 0;
48
- padding-bottom: env(safe-area-inset-bottom);
49
- }
50
- .surface[data-layout='anchored'] {
51
- max-width: min(480px, calc(100vw - 2rem));
52
- box-shadow: 0 12px 32px -8px rgba(0, 0, 0, 0.28);
53
- }
54
- /* Popover top-layer surfaces escape normal z-index — zero out host
55
- * display to avoid two surfaces rendering during transitions. */
56
- .surface:popover-open {
57
- margin: 0;
58
- border: 0;
59
- }
60
- @media (prefers-reduced-motion: reduce) {
61
- .surface {
62
- box-shadow: var(--schmancy-sys-elevation-2, 0 2px 6px rgba(0, 0, 0, 0.2));
63
- }
64
- }
65
- `]}get closed$(){return this._closed$.asObservable()}async open(e,t){if(this._mounted)throw Error(`schmancy-overlay: open() called twice on the same element`);this._mounted=!0,this.dismissable=!1!==t.dismissable,this._rawAnchor=t.anchor,this._anchorOriginAnchor=t.anchor,this._resolvedAnchor=function(e){if(!e)return;if(typeof HTMLElement<`u`&&e instanceof HTMLElement)return{el:e};if(typeof e.getBoundingClientRect==`function`)return{virtual:{getBoundingClientRect:()=>e.getBoundingClientRect()}};if(typeof e.width==`number`&&typeof e.height==`number`&&typeof e.left==`number`&&typeof e.top==`number`){let t=e;return{virtual:{getBoundingClientRect:()=>t}}}if(typeof e.clientX==`number`&&typeof e.clientY==`number`){let t=e,n=S(t.clientX,t.clientY);return{virtual:{getBoundingClientRect:()=>n}}}if(e.touches!==void 0&&e.touches.length>0){let t=e.touches[0],n=S(t.clientX,t.clientY);return{virtual:{getBoundingClientRect:()=>n}}}let t=e,n=S(t.x,t.y);return{virtual:{getBoundingClientRect:()=>n}}}(t.anchor),this._active=!0,this.setAttribute(`active`,``),await this.updateComplete;let n=this.renderRoot.querySelector(`#${D}`);if(!n)throw Error(`schmancy-overlay: mount point missing`);await k(e,n,t.props);let r=x(),i={width:n.scrollWidth,height:n.scrollHeight};var a;if(this.layout=b({anchor:t.anchor,content:i,viewport:r}),this.modal=t.modal??(this.layout===`centered`||this.layout===`sheet`),this.tier=this.modal?`modal`:this._resolvedAnchor?(a=this._resolvedAnchor,C.popover&&C.cssAnchor&&a.el?`css-anchor`:C.popover?`popover-fui`:`fui-only`):`modal`,await this.updateComplete,this.tier===`css-anchor`&&this._resolvedAnchor?.el&&this.shadowRoot){this._positionerTeardown=function(e,t,n,r={id:``}){if(!t.el)throw Error(`positionCSSAnchor requires an element anchor`);let i=t.el,a=`--ov-${r.id||Math.random().toString(36).slice(2,10)}`,o=r.placement??`bottom-start`,s=i.style.getPropertyValue(`anchor-name`);i.style.setProperty(`anchor-name`,a);let c=new CSSStyleSheet;return c.replaceSync(`\n\t\t${e.localName}[data-overlay-ref="${r.id}"] {\n\t\t\tposition-anchor: ${a};\n\t\t\t${function(e){switch(e){case`top`:case`top-start`:return`bottom: anchor(top); left: anchor(start);`;case`top-end`:return`bottom: anchor(top); right: anchor(end);`;case`bottom`:case`bottom-start`:return`top: anchor(bottom); left: anchor(start);`;case`bottom-end`:return`top: anchor(bottom); right: anchor(end);`;case`left`:case`left-start`:return`right: anchor(left); top: anchor(start);`;case`left-end`:return`right: anchor(left); bottom: anchor(end);`;case`right`:case`right-start`:return`left: anchor(right); top: anchor(start);`;case`right-end`:return`left: anchor(right); bottom: anchor(end);`}}(o)}\n\t\t\tmargin: 8px;\n\t\t\tposition-try-fallbacks:\n\t\t\t\tflip-block,\n\t\t\t\tflip-inline,\n\t\t\t\tflip-block flip-inline;\n\t\t}\n\t`),e.dataset.overlayRef=r.id,n.adoptedStyleSheets=[...n.adoptedStyleSheets,c],()=>{s?i.style.setProperty(`anchor-name`,s):i.style.removeProperty(`anchor-name`),n.adoptedStyleSheets=n.adoptedStyleSheets.filter(e=>e!==c),delete e.dataset.overlayRef}}(this._surface,this._resolvedAnchor,this.shadowRoot,{id:`ov-${Math.random().toString(36).slice(2,10)}`,placement:t.preferredPlacement??`bottom-start`});let e=w(this._surface),n=this._positionerTeardown;this._positionerTeardown=()=>{e(),n()}}else if(this.tier===`popover-fui`&&this._resolvedAnchor){let e=w(this._surface),n=T(this._surface,this._resolvedAnchor,{placement:t.preferredPlacement??`bottom-start`,offsetPx:8,track:!1!==t.track}).pipe((0,c.takeUntil)(this.disconnecting)).subscribe();this._positionerTeardown=()=>{e(),n.unsubscribe()}}else if(this.tier===`fui-only`&&this._resolvedAnchor){let e=T(this._surface,this._resolvedAnchor,{placement:t.preferredPlacement??`bottom-start`,offsetPx:8,track:!1!==t.track}).pipe((0,c.takeUntil)(this.disconnecting)).subscribe();this._positionerTeardown=()=>e.unsubscribe()}this.setAnchorOriginVars(),this.wireFocusTrap(),this.wireCloseTriggers(t.signal),this.wireResizeObserver(n),await this.playEnterAnimations()}async close(e,t){if(!this._closing&&this._mounted){this._closing=!0;try{await this.playExitAnimations()}catch{}if(this.releaseFocusTrap(),this._positionerTeardown){try{this._positionerTeardown()}catch{}this._positionerTeardown=void 0}this._active=!1,this.removeAttribute(`active`),this._closed$.next({reason:e,result:t}),this._closed$.complete()}}render(){return this._active?u.html`
66
- <div class="shell" part="shell">
67
- ${(0,d.when)(this.modal,()=>u.html`<div class="backdrop" part="backdrop" @click=${this.onBackdropClick}></div>`)}
68
- <section
69
- class="surface"
70
- part="surface"
71
- data-layout=${this.layout}
72
- data-tier=${this.tier}
73
- role=${this.modal?`dialog`:`region`}
74
- aria-modal=${this.modal?`true`:`false`}
75
- tabindex="-1"
76
- >
77
- <div id=${D}></div>
78
- </section>
79
- </div>
80
- `:u.html``}setAnchorOriginVars(){let e=this._surface;if(!e)return;let t=e.getBoundingClientRect(),n=this.layout!==`centered`||this._anchorOriginAnchor?this.layout!==`sheet`||this._anchorOriginAnchor?function(e,t){if(!e)return{[m]:`50%`,[h]:`50%`};let{x:n,y:r}=function(e){if(typeof e.getBoundingClientRect==`function`){let t=e.getBoundingClientRect();return{x:t.left+t.width/2,y:t.top+t.height/2}}if(typeof e.width==`number`&&typeof e.height==`number`&&typeof e.left==`number`&&typeof e.top==`number`){let t=e;return{x:t.left+t.width/2,y:t.top+t.height/2}}if(typeof e.clientX==`number`&&typeof e.clientY==`number`){let t=e;return{x:t.clientX,y:t.clientY}}if(e.touches!==void 0&&e.touches.length>0){let t=e.touches[0];return{x:t.clientX,y:t.clientY}}let t=e;return{x:t.x,y:t.y}}(e);if(!t.width||!t.height)return{[m]:`50%`,[h]:`50%`};let i=_((n-t.left)/t.width*100),a=_((r-t.top)/t.height*100);return{[m]:`${i}%`,[h]:`${a}%`}}(this._anchorOriginAnchor,t):{"--schmancy-overlay-origin-x":`50%`,"--schmancy-overlay-origin-y":`100%`}:{"--schmancy-overlay-origin-x":`50%`,"--schmancy-overlay-origin-y":`50%`};for(let[t,r]of Object.entries(n))e.style.setProperty(t,r)}wireFocusTrap(){if(!this.modal)return;this._lastFocusedElement=document.activeElement??null;let e=this.parentElement;if(e){this._inertedSiblings=[];for(let t of Array.from(e.children))t!==this&&t instanceof HTMLElement&&!t.inert&&(t.inert=!0,this._inertedSiblings.push(t))}queueMicrotask(()=>{(this._surface?.querySelector(`[autofocus]`)??this._surface)?.focus()})}releaseFocusTrap(){for(let e of this._inertedSiblings)e.inert=!1;this._inertedSiblings=[];try{this._lastFocusedElement?.focus?.()}catch{}this._lastFocusedElement=null}wireCloseTriggers(e){let t=this.disconnecting;(0,c.fromEvent)(this,`close`).pipe((0,c.filter)(e=>e instanceof CustomEvent),(0,c.tap)(e=>{e.stopPropagation(),this.close(`structured`,e.detail)}),(0,c.takeUntil)(t)).subscribe(),(0,c.fromEvent)(this,`submit`).pipe((0,c.filter)(e=>{let t=e.target;return!!t&&t.method===`dialog`}),(0,c.tap)(e=>{e.preventDefault();let t=e.submitter?.value??``;this.close(`native-submit`,t)}),(0,c.takeUntil)(t)).subscribe(),this.tier===`modal`&&(0,c.fromEvent)(document,`keydown`).pipe((0,c.filter)(e=>e.key===`Escape`),(0,c.tap)(e=>{this.dismissable?(e.preventDefault(),this.close(`escape`)):e.preventDefault()}),(0,c.takeUntil)(t)).subscribe(),this.tier!==`popover-fui`&&this.tier!==`css-anchor`||(0,c.fromEvent)(this._surface,`toggle`).pipe((0,c.filter)(e=>e.newState===`closed`),(0,c.take)(1),(0,c.tap)(()=>{this._closing||this.close(`light-dismiss`)}),(0,c.takeUntil)(t)).subscribe(),this.tier===`fui-only`&&(0,c.fromEvent)(document,`pointerdown`,{capture:!0}).pipe((0,c.filter)(e=>{if(!this.dismissable)return!1;let t=e.composedPath()[0];return!!t&&!this._surface?.contains(t)&&!this._resolvedAnchor?.el?.contains(t)}),(0,c.take)(1),(0,c.tap)(()=>{this.close(`backdrop`)}),(0,c.takeUntil)(t)).subscribe(),this.layout===`sheet`&&this.dismissable&&y({surface:this._surface,until$:(0,c.merge)(t,this._closed$)}).pipe((0,c.take)(1)).subscribe(()=>{this.close(`swipe`)}),e&&(e.aborted?queueMicrotask(()=>{this.close(`abort`)}):(0,c.fromEvent)(e,`abort`).pipe((0,c.take)(1),(0,c.tap)(()=>{this.close(`abort`)}),(0,c.takeUntil)(t)).subscribe())}wireResizeObserver(e){a.t(e).pipe((0,c.map)(e=>{let t=e[0];if(!t)return null;let n=t.contentRect;return{w:n.width,h:n.height}}),(0,c.filter)(e=>e!==null),(0,c.distinctUntilChanged)((e,t)=>e.w===t.w&&e.h===t.h),(0,c.debounceTime)(80),(0,c.takeUntil)((0,c.merge)(this.disconnecting,this._closed$))).subscribe(e=>this.maybeReResolve(e))}async maybeReResolve(e){if(this._closing)return;let t=x(),n=b({anchor:this._rawAnchor,content:{width:e.w,height:e.h},viewport:t});if(n===this.layout||performance.now()-this._lastReResolveAt<600||(i=this.layout,a=n,!(i===`centered`&&a===`sheet`||i===`anchored`&&a===`sheet`)))return;var i,a;let o=this._surface,s=o.getBoundingClientRect();this.layout=n,await this.updateComplete;let c=function(e,t){return p?{keyframes:[{transform:`none`},{transform:`none`}],options:{duration:1,easing:`linear`,fill:`forwards`}}:{keyframes:[{transform:`translate(${e.left-t.left}px, ${e.top-t.top}px) scale(${t.width>0?e.width/t.width:1}, ${t.height>0?e.height/t.height:1})`,transformOrigin:`top left`},{transform:`none`,transformOrigin:`top left`}],options:{duration:r.d.duration,easing:r._(r.d),fill:`forwards`}}}(s,o.getBoundingClientRect());try{await o.animate(c.keyframes,c.options).finished}catch{}this._lastReResolveAt=performance.now()}async playEnterAnimations(){let e=this._surface;if(!e)return;let t=v(this.layout,`in`),n=[e.animate(t.keyframes,t.options).finished.catch(()=>{})],r=this._backdrop;this.modal&&r&&n.push(r.animate([{opacity:0},{opacity:1}],{duration:t.options.duration,easing:`ease-out`,fill:`forwards`}).finished.catch(()=>{})),await Promise.all(n)}async playExitAnimations(){let e=this._surface;if(!e)return;let t=v(this.layout,`out`),n=[e.animate(t.keyframes,t.options).finished.catch(()=>{})],r=this._backdrop;this.modal&&r&&n.push(r.animate([{opacity:1},{opacity:0}],{duration:t.options.duration,easing:`ease-in`,fill:`forwards`}).finished.catch(()=>{})),await Promise.all(n)}};async function k(e,t,n){if(typeof(r=e)==`object`&&r!==null&&`_$litType$`in r)return(0,u.render)(e,t),t;var r;if(e instanceof HTMLElement)return n&&Object.assign(e,n),t.appendChild(e),e;if(function(e){return typeof e==`function`&&(`preload`in e||`_promise`in e)}(e))return k((await e()).default,t,n);if(typeof e==`function`){let r=new e;return n&&Object.assign(r,n),t.appendChild(r),r}if(typeof e==`string`){let r=document.createElement(e);return n&&Object.assign(r,n),t.appendChild(r),r}throw Error(`schmancy-overlay: unsupported content type`)}t.a([(0,l.property)({type:String,reflect:!0})],O.prototype,`layout`,void 0),t.a([(0,l.property)({type:Boolean,reflect:!0})],O.prototype,`dismissable`,void 0),t.a([(0,l.property)({type:Boolean,reflect:!0})],O.prototype,`modal`,void 0),t.a([(0,l.property)({type:String,reflect:!0})],O.prototype,`tier`,void 0),t.a([(0,l.state)()],O.prototype,`_active`,void 0),t.a([(0,l.query)(`.backdrop`)],O.prototype,`_backdrop`,void 0),t.a([(0,l.query)(`.surface`)],O.prototype,`_surface`,void 0),O=t.a([(0,l.customElement)(`schmancy-overlay`)],O),Object.defineProperty(exports,`SchmancyOverlay`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`SchmancyOverlayPromptBody`,{enumerable:!0,get:function(){return s.t}}),exports.confirm=o.t,exports.dismissAll=o.n,exports.lazy=n.t,exports.openOverlays$=o.r,exports.overlayEvents=o.i,exports.prompt=o.a,exports.show=o.o;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./lazy-CayEFyC3.cjs`),t=require(`./overlay.service-DQkGPUY7.cjs`),n=require(`./overlay-DG6EeyKt.cjs`),r=require(`./overlay.confirm-body-78e1WrN9.cjs`);Object.defineProperty(exports,`SchmancyOverlay`,{enumerable:!0,get:function(){return n.t}}),Object.defineProperty(exports,`SchmancyOverlayPromptBody`,{enumerable:!0,get:function(){return r.t}}),exports.confirm=t.t,exports.dismissAll=t.n,exports.lazy=e.t,exports.openOverlays$=t.r,exports.overlayEvents=t.i,exports.prompt=t.a,exports.show=t.o;
@@ -1,4 +1,4 @@
1
- const e=require(`./chunk-CncqDLb2.cjs`),t=require(`./mixins-BOOu6q2n.cjs`),n=require(`./active-host-jH3iloCR.cjs`);let r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`),o=require(`lit/directives/when.js`),s=require(`lit/directives/choose.js`);var c=e.n({SchmancyOverlayPromptBody:()=>l}),l=class extends t.c{constructor(...e){super(...e),this.confirmText=`Confirm`,this.cancelText=`Cancel`,this.variant=`default`,this.mode=`confirm`,this.defaultValue=``,this.inputType=`text`,this.required=!1,this.handleCancel=()=>{this.dismiss(this.mode===`prompt`&&null)},this.handleConfirm=()=>{if(this.mode===`prompt`){let e=this._input;if(e&&!e.reportValidity())return;this.dismiss(e?.value??``)}else this.dismiss(!0)},this.handleSubmit=e=>{e.preventDefault(),this.handleConfirm()}}static{this.styles=[i.css`
1
+ const e=require(`./chunk-CncqDLb2.cjs`),t=require(`./mixins-Du9HMrIG.cjs`),n=require(`./active-host-jH3iloCR.cjs`);let r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`),o=require(`lit/directives/when.js`),s=require(`lit/directives/choose.js`);var c=e.n({SchmancyOverlayPromptBody:()=>l}),l=class extends t.c{constructor(...e){super(...e),this.confirmText=`Confirm`,this.cancelText=`Cancel`,this.variant=`default`,this.mode=`confirm`,this.defaultValue=``,this.inputType=`text`,this.required=!1,this.handleCancel=()=>{this.dismiss(this.mode===`prompt`&&null)},this.handleConfirm=()=>{if(this.mode===`prompt`){let e=this._input;if(e&&!e.reportValidity())return;this.dismiss(e?.value??``)}else this.dismiss(!0)},this.handleSubmit=e=>{e.preventDefault(),this.handleConfirm()}}static{this.styles=[i.css`
2
2
  :host {
3
3
  display: block;
4
4
  padding: 20px 24px;
@@ -34,7 +34,7 @@ const e=require(`./chunk-CncqDLb2.cjs`),t=require(`./mixins-BOOu6q2n.cjs`),n=req
34
34
  <button
35
35
  type="button"
36
36
  @click=${this.handleCancel}
37
- class="px-4 py-2 rounded-md border border-outline-variant bg-transparent cursor-pointer"
37
+ class="px-4 py-2 rounded-md bg-transparent cursor-pointer hover:bg-surface-on/5"
38
38
  >
39
39
  ${this.cancelText}
40
40
  </button>
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.confirm-body-BkhNvr0c.cjs","names":[],"sources":["../src/overlay/overlay.confirm-body.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, type TemplateResult } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { choose } from 'lit/directives/choose.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n/**\n * Internal body component used by the `confirm()` / `prompt()` sugar.\n *\n * Minimal, dependency-free — plain HTML buttons / input so this file\n * doesn't need to import schmancy-form / schmancy-button (avoids the\n * risk of circular module graphs during early imports of $overlay).\n *\n * Emits a `close` CustomEvent with the typed result; the overlay picks\n * that up as the primary return channel. For custom-styled confirms,\n * callers pass their own component to `show()`.\n */\n@customElement('schmancy-overlay-prompt-body')\nexport class SchmancyOverlayPromptBody extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 20px 24px;\n\t\tmin-width: 280px;\n\t\tmax-width: 480px;\n\t\tcolor: var(--schmancy-sys-color-on-surface, #1a1a1a);\n\t\tbackground: var(--schmancy-sys-color-surface, #ffffff);\n\t\tborder-radius: var(--schmancy-sys-shape-corner-large, 16px);\n\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);\n\t}\n\t:host([variant='danger']) .cta-confirm {\n\t\tbackground: var(--schmancy-sys-color-error, #b3261e);\n\t\tcolor: var(--schmancy-sys-color-on-error, #ffffff);\n\t}\n`]\n\n\t@property({ type: String }) heading?: string\n\t@property({ type: String }) subtitle?: string\n\t@property({ type: String }) message?: string\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText = 'Confirm'\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText = 'Cancel'\n\t@property({ type: String, reflect: true }) variant: 'default' | 'danger' = 'default'\n\n\t/** Presence of `mode` switches between confirm (boolean) and prompt (string). */\n\t@property({ type: String }) mode: 'confirm' | 'prompt' = 'confirm'\n\t@property({ type: String }) label?: string\n\t@property({ type: String, attribute: 'default-value' }) defaultValue = ''\n\t@property({ type: String }) placeholder?: string\n\t@property({ type: String, attribute: 'input-type' })\n\tinputType:\n\t\t| 'text'\n\t\t| 'email'\n\t\t| 'password'\n\t\t| 'tel'\n\t\t| 'url'\n\t\t| 'number'\n\t\t| 'search'\n\t\t| 'date'\n\t\t| 'time'\n\t\t| 'datetime-local' = 'text'\n\t@property({ type: String }) pattern?: string\n\t@property({ type: Boolean }) required = false\n\n\t@query('input') private _input?: HTMLInputElement\n\n\toverride firstUpdated(): void {\n\t\t// Focus the confirm button in confirm mode; focus the input in prompt mode.\n\t\tif (this.mode === 'prompt') {\n\t\t\tqueueMicrotask(() => this._input?.focus())\n\t\t}\n\t}\n\n\tprivate dismiss(value: boolean | string | null): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('close', {\n\t\t\t\tdetail: value,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleCancel = (): void => {\n\t\tthis.dismiss(this.mode === 'prompt' ? null : false)\n\t}\n\n\tprivate handleConfirm = (): void => {\n\t\tif (this.mode === 'prompt') {\n\t\t\tconst input = this._input\n\t\t\tif (input && !input.reportValidity()) return\n\t\t\tthis.dismiss(input?.value ?? '')\n\t\t} else {\n\t\t\tthis.dismiss(true)\n\t\t}\n\t}\n\n\tprivate handleSubmit = (e: Event): void => {\n\t\te.preventDefault()\n\t\tthis.handleConfirm()\n\t}\n\n\tprotected render(): TemplateResult {\n\t\treturn html`\n\t\t\t<form @submit=${this.handleSubmit}>\n\t\t\t\t${when(\n\t\t\t\t\tthis.heading,\n\t\t\t\t\t() => html`<h2 class=\"text-lg font-semibold mb-1\">${this.heading}</h2>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.subtitle,\n\t\t\t\t\t() => html`<p class=\"text-sm opacity-70 mb-2\">${this.subtitle}</p>`,\n\t\t\t\t)}\n\t\t\t\t${choose(\n\t\t\t\t\tthis.mode,\n\t\t\t\t\t[\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'prompt',\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t${when(this.label, () => html`<label class=\"block text-sm mb-1\">${this.label}</label>`)}\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=${this.inputType}\n\t\t\t\t\t\t\t\t\t.value=${this.defaultValue}\n\t\t\t\t\t\t\t\t\tplaceholder=${ifDefined(this.placeholder)}\n\t\t\t\t\t\t\t\t\tpattern=${ifDefined(this.pattern)}\n\t\t\t\t\t\t\t\t\t?required=${this.required}\n\t\t\t\t\t\t\t\t\tclass=\"w-full px-3 py-2 rounded-md border border-outline-variant text-base mb-2\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.message,\n\t\t\t\t\t\t\t\t\t() => html`<p class=\"text-sm mb-3\">${this.message}</p>`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t],\n\t\t\t\t\t],\n\t\t\t\t\t() => html`${when(this.message, () => html`<p class=\"text-sm mb-4\">${this.message}</p>`)}`,\n\t\t\t\t)}\n\n\t\t\t\t<div class=\"flex justify-end gap-2 mt-4\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t@click=${this.handleCancel}\n\t\t\t\t\t\tclass=\"px-4 py-2 rounded-md border border-outline-variant bg-transparent cursor-pointer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.cancelText}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tclass=\"cta-confirm px-4 py-2 rounded-md border-0 bg-primary text-on-primary cursor-pointer font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.confirmText}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-overlay-prompt-body': SchmancyOverlayPromptBody\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"overlay.confirm-body-78e1WrN9.cjs","names":[],"sources":["../src/overlay/overlay.confirm-body.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, type TemplateResult } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { choose } from 'lit/directives/choose.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n/**\n * Internal body component used by the `confirm()` / `prompt()` sugar.\n *\n * Minimal, dependency-free — plain HTML buttons / input so this file\n * doesn't need to import schmancy-form / schmancy-button (avoids the\n * risk of circular module graphs during early imports of $overlay).\n *\n * Emits a `close` CustomEvent with the typed result; the overlay picks\n * that up as the primary return channel. For custom-styled confirms,\n * callers pass their own component to `show()`.\n */\n@customElement('schmancy-overlay-prompt-body')\nexport class SchmancyOverlayPromptBody extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 20px 24px;\n\t\tmin-width: 280px;\n\t\tmax-width: 480px;\n\t\tcolor: var(--schmancy-sys-color-on-surface, #1a1a1a);\n\t\tbackground: var(--schmancy-sys-color-surface, #ffffff);\n\t\tborder-radius: var(--schmancy-sys-shape-corner-large, 16px);\n\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);\n\t}\n\t:host([variant='danger']) .cta-confirm {\n\t\tbackground: var(--schmancy-sys-color-error, #b3261e);\n\t\tcolor: var(--schmancy-sys-color-on-error, #ffffff);\n\t}\n`]\n\n\t@property({ type: String }) heading?: string\n\t@property({ type: String }) subtitle?: string\n\t@property({ type: String }) message?: string\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText = 'Confirm'\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText = 'Cancel'\n\t@property({ type: String, reflect: true }) variant: 'default' | 'danger' = 'default'\n\n\t/** Presence of `mode` switches between confirm (boolean) and prompt (string). */\n\t@property({ type: String }) mode: 'confirm' | 'prompt' = 'confirm'\n\t@property({ type: String }) label?: string\n\t@property({ type: String, attribute: 'default-value' }) defaultValue = ''\n\t@property({ type: String }) placeholder?: string\n\t@property({ type: String, attribute: 'input-type' })\n\tinputType:\n\t\t| 'text'\n\t\t| 'email'\n\t\t| 'password'\n\t\t| 'tel'\n\t\t| 'url'\n\t\t| 'number'\n\t\t| 'search'\n\t\t| 'date'\n\t\t| 'time'\n\t\t| 'datetime-local' = 'text'\n\t@property({ type: String }) pattern?: string\n\t@property({ type: Boolean }) required = false\n\n\t@query('input') private _input?: HTMLInputElement\n\n\toverride firstUpdated(): void {\n\t\t// Focus the confirm button in confirm mode; focus the input in prompt mode.\n\t\tif (this.mode === 'prompt') {\n\t\t\tqueueMicrotask(() => this._input?.focus())\n\t\t}\n\t}\n\n\tprivate dismiss(value: boolean | string | null): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('close', {\n\t\t\t\tdetail: value,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleCancel = (): void => {\n\t\tthis.dismiss(this.mode === 'prompt' ? null : false)\n\t}\n\n\tprivate handleConfirm = (): void => {\n\t\tif (this.mode === 'prompt') {\n\t\t\tconst input = this._input\n\t\t\tif (input && !input.reportValidity()) return\n\t\t\tthis.dismiss(input?.value ?? '')\n\t\t} else {\n\t\t\tthis.dismiss(true)\n\t\t}\n\t}\n\n\tprivate handleSubmit = (e: Event): void => {\n\t\te.preventDefault()\n\t\tthis.handleConfirm()\n\t}\n\n\tprotected render(): TemplateResult {\n\t\treturn html`\n\t\t\t<form @submit=${this.handleSubmit}>\n\t\t\t\t${when(\n\t\t\t\t\tthis.heading,\n\t\t\t\t\t() => html`<h2 class=\"text-lg font-semibold mb-1\">${this.heading}</h2>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.subtitle,\n\t\t\t\t\t() => html`<p class=\"text-sm opacity-70 mb-2\">${this.subtitle}</p>`,\n\t\t\t\t)}\n\t\t\t\t${choose(\n\t\t\t\t\tthis.mode,\n\t\t\t\t\t[\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'prompt',\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t${when(this.label, () => html`<label class=\"block text-sm mb-1\">${this.label}</label>`)}\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=${this.inputType}\n\t\t\t\t\t\t\t\t\t.value=${this.defaultValue}\n\t\t\t\t\t\t\t\t\tplaceholder=${ifDefined(this.placeholder)}\n\t\t\t\t\t\t\t\t\tpattern=${ifDefined(this.pattern)}\n\t\t\t\t\t\t\t\t\t?required=${this.required}\n\t\t\t\t\t\t\t\t\tclass=\"w-full px-3 py-2 rounded-md border border-outline-variant text-base mb-2\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.message,\n\t\t\t\t\t\t\t\t\t() => html`<p class=\"text-sm mb-3\">${this.message}</p>`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t],\n\t\t\t\t\t],\n\t\t\t\t\t() => html`${when(this.message, () => html`<p class=\"text-sm mb-4\">${this.message}</p>`)}`,\n\t\t\t\t)}\n\n\t\t\t\t<div class=\"flex justify-end gap-2 mt-4\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t@click=${this.handleCancel}\n\t\t\t\t\t\tclass=\"px-4 py-2 rounded-md bg-transparent cursor-pointer hover:bg-surface-on/5\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.cancelText}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tclass=\"cta-confirm px-4 py-2 rounded-md border-0 bg-primary text-on-primary cursor-pointer font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.confirmText}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-overlay-prompt-body': SchmancyOverlayPromptBody\n\t}\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { n as e } from "./chunk-BM5alsTp.js";
2
- import { c as t } from "./mixins-BWb9_e1s.js";
2
+ import { c as t } from "./mixins-DCVXqL1Q.js";
3
3
  import { a as n } from "./active-host-BP0zy_Y9.js";
4
4
  import { customElement as r, property as i, query as a } from "lit/decorators.js";
5
5
  import { css as o, html as s } from "lit";
@@ -70,7 +70,7 @@ var d = e({ SchmancyOverlayPromptBody: () => f }), f = class extends t {
70
70
  <button
71
71
  type="button"
72
72
  @click=${this.handleCancel}
73
- class="px-4 py-2 rounded-md border border-outline-variant bg-transparent cursor-pointer"
73
+ class="px-4 py-2 rounded-md bg-transparent cursor-pointer hover:bg-surface-on/5"
74
74
  >
75
75
  ${this.cancelText}
76
76
  </button>
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.confirm-body-uFp-0Zfh.js","names":[],"sources":["../src/overlay/overlay.confirm-body.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, type TemplateResult } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { choose } from 'lit/directives/choose.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n/**\n * Internal body component used by the `confirm()` / `prompt()` sugar.\n *\n * Minimal, dependency-free — plain HTML buttons / input so this file\n * doesn't need to import schmancy-form / schmancy-button (avoids the\n * risk of circular module graphs during early imports of $overlay).\n *\n * Emits a `close` CustomEvent with the typed result; the overlay picks\n * that up as the primary return channel. For custom-styled confirms,\n * callers pass their own component to `show()`.\n */\n@customElement('schmancy-overlay-prompt-body')\nexport class SchmancyOverlayPromptBody extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 20px 24px;\n\t\tmin-width: 280px;\n\t\tmax-width: 480px;\n\t\tcolor: var(--schmancy-sys-color-on-surface, #1a1a1a);\n\t\tbackground: var(--schmancy-sys-color-surface, #ffffff);\n\t\tborder-radius: var(--schmancy-sys-shape-corner-large, 16px);\n\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);\n\t}\n\t:host([variant='danger']) .cta-confirm {\n\t\tbackground: var(--schmancy-sys-color-error, #b3261e);\n\t\tcolor: var(--schmancy-sys-color-on-error, #ffffff);\n\t}\n`]\n\n\t@property({ type: String }) heading?: string\n\t@property({ type: String }) subtitle?: string\n\t@property({ type: String }) message?: string\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText = 'Confirm'\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText = 'Cancel'\n\t@property({ type: String, reflect: true }) variant: 'default' | 'danger' = 'default'\n\n\t/** Presence of `mode` switches between confirm (boolean) and prompt (string). */\n\t@property({ type: String }) mode: 'confirm' | 'prompt' = 'confirm'\n\t@property({ type: String }) label?: string\n\t@property({ type: String, attribute: 'default-value' }) defaultValue = ''\n\t@property({ type: String }) placeholder?: string\n\t@property({ type: String, attribute: 'input-type' })\n\tinputType:\n\t\t| 'text'\n\t\t| 'email'\n\t\t| 'password'\n\t\t| 'tel'\n\t\t| 'url'\n\t\t| 'number'\n\t\t| 'search'\n\t\t| 'date'\n\t\t| 'time'\n\t\t| 'datetime-local' = 'text'\n\t@property({ type: String }) pattern?: string\n\t@property({ type: Boolean }) required = false\n\n\t@query('input') private _input?: HTMLInputElement\n\n\toverride firstUpdated(): void {\n\t\t// Focus the confirm button in confirm mode; focus the input in prompt mode.\n\t\tif (this.mode === 'prompt') {\n\t\t\tqueueMicrotask(() => this._input?.focus())\n\t\t}\n\t}\n\n\tprivate dismiss(value: boolean | string | null): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('close', {\n\t\t\t\tdetail: value,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleCancel = (): void => {\n\t\tthis.dismiss(this.mode === 'prompt' ? null : false)\n\t}\n\n\tprivate handleConfirm = (): void => {\n\t\tif (this.mode === 'prompt') {\n\t\t\tconst input = this._input\n\t\t\tif (input && !input.reportValidity()) return\n\t\t\tthis.dismiss(input?.value ?? '')\n\t\t} else {\n\t\t\tthis.dismiss(true)\n\t\t}\n\t}\n\n\tprivate handleSubmit = (e: Event): void => {\n\t\te.preventDefault()\n\t\tthis.handleConfirm()\n\t}\n\n\tprotected render(): TemplateResult {\n\t\treturn html`\n\t\t\t<form @submit=${this.handleSubmit}>\n\t\t\t\t${when(\n\t\t\t\t\tthis.heading,\n\t\t\t\t\t() => html`<h2 class=\"text-lg font-semibold mb-1\">${this.heading}</h2>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.subtitle,\n\t\t\t\t\t() => html`<p class=\"text-sm opacity-70 mb-2\">${this.subtitle}</p>`,\n\t\t\t\t)}\n\t\t\t\t${choose(\n\t\t\t\t\tthis.mode,\n\t\t\t\t\t[\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'prompt',\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t${when(this.label, () => html`<label class=\"block text-sm mb-1\">${this.label}</label>`)}\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=${this.inputType}\n\t\t\t\t\t\t\t\t\t.value=${this.defaultValue}\n\t\t\t\t\t\t\t\t\tplaceholder=${ifDefined(this.placeholder)}\n\t\t\t\t\t\t\t\t\tpattern=${ifDefined(this.pattern)}\n\t\t\t\t\t\t\t\t\t?required=${this.required}\n\t\t\t\t\t\t\t\t\tclass=\"w-full px-3 py-2 rounded-md border border-outline-variant text-base mb-2\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.message,\n\t\t\t\t\t\t\t\t\t() => html`<p class=\"text-sm mb-3\">${this.message}</p>`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t],\n\t\t\t\t\t],\n\t\t\t\t\t() => html`${when(this.message, () => html`<p class=\"text-sm mb-4\">${this.message}</p>`)}`,\n\t\t\t\t)}\n\n\t\t\t\t<div class=\"flex justify-end gap-2 mt-4\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t@click=${this.handleCancel}\n\t\t\t\t\t\tclass=\"px-4 py-2 rounded-md border border-outline-variant bg-transparent cursor-pointer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.cancelText}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tclass=\"cta-confirm px-4 py-2 rounded-md border-0 bg-primary text-on-primary cursor-pointer font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.confirmText}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-overlay-prompt-body': SchmancyOverlayPromptBody\n\t}\n}\n"],"mappings":";;;;;;;;mDAmBO,IAAA,cAAwC,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,cAqBuB,WAAA,KAAA,aACF,UAAA,KAAA,UACQ,WAAA,KAAA,OAGlB,WAAA,KAAA,eAEc,IAAA,KAAA,YAajD,QAAA,KAAA,WAAA,CAEkB,GAAA,KAAA,qBAAA;GAsBvC,KAAK,QAAQ,KAAK,SAAS,YAAW,KAAA;KAAA,KAAA,sBAAA;GAItC,IAAI,KAAK,SAAS,UAAU;IAC3B,IAAM,IAAQ,KAAK;IACnB,IAAI,KAAA,CAAU,EAAM,gBAAA,EAAkB;IACtC,KAAK,QAAQ,GAAO,SAAS,GAAA;UAE7B,KAAK,QAAA,CAAQ,EAAA;KAAA,KAAA,gBAIS,MAAA;GACvB,EAAE,gBAAA,EACF,KAAK,eAAA;;;CAAA;EAAA,KAAA,SA/EU,CAAC,CAAG;;;;;;;;;;;;;;;;;CA8CpB,eAAA;EAEmB,AAAd,KAAK,SAAS,YACjB,qBAAqB,KAAK,QAAQ,OAAA,CAAA;;CAIpC,QAAgB,GAAA;EACf,KAAK,cACJ,IAAI,YAAY,SAAS;GACxB,QAAQ;GACR,SAAA,CAAS;GACT,UAAA,CAAU;GAAA,CAAA,CAAA;;CAwBb,SAAA;EACC,OAAO,CAAI;mBACM,KAAK,aAAA;MAClB,EACD,KAAK,eACC,CAAI,0CAA0C,KAAK,QAAA,OAAA,CAAA;MAExD,EACD,KAAK,gBACC,CAAI,sCAAsC,KAAK,SAAA,MAAA,CAAA;MAEpD,EACD,KAAK,MACL,CACC,CACC,gBACM,CAAI;UACP,EAAK,KAAK,aAAa,CAAI,qCAAqC,KAAK,MAAA,UAAA,CAAA;;gBAE/D,KAAK,UAAA;kBACH,KAAK,aAAA;uBACA,EAAU,KAAK,YAAA,CAAA;mBACnB,EAAU,KAAK,QAAA,CAAA;qBACb,KAAK,SAAA;;;UAGhB,EACD,KAAK,eACC,CAAI,2BAA2B,KAAK,QAAA,MAAA,CAAA;kBAKxC,CAAI,GAAG,EAAK,KAAK,eAAe,CAAI,2BAA2B,KAAK,QAAA,MAAA,GAAA,CAAA;;;;;eAMhE,KAAK,aAAA;;;QAGZ,KAAK,WAAA;;;;;;QAML,KAAK,YAAA;;;;;;;GAjHX,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,YAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS;CAAE,MAAM;CAAQ,WAAW;CAAA,CAAA,CAAA,EAAiB,EAAA,WAAA,eAAA,KAAA,EAAA,EAAA,EAAA,CACrD,EAAS;CAAE,MAAM;CAAQ,WAAW;CAAA,CAAA,CAAA,EAAgB,EAAA,WAAA,cAAA,KAAA,EAAA,EAAA,EAAA,CACpD,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAGzC,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS;CAAE,MAAM;CAAQ,WAAW;CAAA,CAAA,CAAA,EAAkB,EAAA,WAAA,gBAAA,KAAA,EAAA,EAAA,EAAA,CACtD,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,eAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS;CAAE,MAAM;CAAQ,WAAW;CAAA,CAAA,CAAA,EAAe,EAAA,WAAA,aAAA,KAAA,EAAA,EAAA,EAAA,CAYnD,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,SAAA,CAAA,CAAA,EAAU,EAAA,WAAA,YAAA,KAAA,EAAA,EAAA,EAAA,CAE3B,EAAM,QAAA,CAAA,EAAQ,EAAA,WAAA,UAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CA9Cf,EAAc,+BAAA,CAAA,EAA+B,EAAA;AAAA,SAAA,KAAA,GAAA,KAAA"}
1
+ {"version":3,"file":"overlay.confirm-body-D_P2e7l6.js","names":[],"sources":["../src/overlay/overlay.confirm-body.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, type TemplateResult } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { choose } from 'lit/directives/choose.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n/**\n * Internal body component used by the `confirm()` / `prompt()` sugar.\n *\n * Minimal, dependency-free — plain HTML buttons / input so this file\n * doesn't need to import schmancy-form / schmancy-button (avoids the\n * risk of circular module graphs during early imports of $overlay).\n *\n * Emits a `close` CustomEvent with the typed result; the overlay picks\n * that up as the primary return channel. For custom-styled confirms,\n * callers pass their own component to `show()`.\n */\n@customElement('schmancy-overlay-prompt-body')\nexport class SchmancyOverlayPromptBody extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 20px 24px;\n\t\tmin-width: 280px;\n\t\tmax-width: 480px;\n\t\tcolor: var(--schmancy-sys-color-on-surface, #1a1a1a);\n\t\tbackground: var(--schmancy-sys-color-surface, #ffffff);\n\t\tborder-radius: var(--schmancy-sys-shape-corner-large, 16px);\n\t\tbox-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);\n\t}\n\t:host([variant='danger']) .cta-confirm {\n\t\tbackground: var(--schmancy-sys-color-error, #b3261e);\n\t\tcolor: var(--schmancy-sys-color-on-error, #ffffff);\n\t}\n`]\n\n\t@property({ type: String }) heading?: string\n\t@property({ type: String }) subtitle?: string\n\t@property({ type: String }) message?: string\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText = 'Confirm'\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText = 'Cancel'\n\t@property({ type: String, reflect: true }) variant: 'default' | 'danger' = 'default'\n\n\t/** Presence of `mode` switches between confirm (boolean) and prompt (string). */\n\t@property({ type: String }) mode: 'confirm' | 'prompt' = 'confirm'\n\t@property({ type: String }) label?: string\n\t@property({ type: String, attribute: 'default-value' }) defaultValue = ''\n\t@property({ type: String }) placeholder?: string\n\t@property({ type: String, attribute: 'input-type' })\n\tinputType:\n\t\t| 'text'\n\t\t| 'email'\n\t\t| 'password'\n\t\t| 'tel'\n\t\t| 'url'\n\t\t| 'number'\n\t\t| 'search'\n\t\t| 'date'\n\t\t| 'time'\n\t\t| 'datetime-local' = 'text'\n\t@property({ type: String }) pattern?: string\n\t@property({ type: Boolean }) required = false\n\n\t@query('input') private _input?: HTMLInputElement\n\n\toverride firstUpdated(): void {\n\t\t// Focus the confirm button in confirm mode; focus the input in prompt mode.\n\t\tif (this.mode === 'prompt') {\n\t\t\tqueueMicrotask(() => this._input?.focus())\n\t\t}\n\t}\n\n\tprivate dismiss(value: boolean | string | null): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('close', {\n\t\t\t\tdetail: value,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleCancel = (): void => {\n\t\tthis.dismiss(this.mode === 'prompt' ? null : false)\n\t}\n\n\tprivate handleConfirm = (): void => {\n\t\tif (this.mode === 'prompt') {\n\t\t\tconst input = this._input\n\t\t\tif (input && !input.reportValidity()) return\n\t\t\tthis.dismiss(input?.value ?? '')\n\t\t} else {\n\t\t\tthis.dismiss(true)\n\t\t}\n\t}\n\n\tprivate handleSubmit = (e: Event): void => {\n\t\te.preventDefault()\n\t\tthis.handleConfirm()\n\t}\n\n\tprotected render(): TemplateResult {\n\t\treturn html`\n\t\t\t<form @submit=${this.handleSubmit}>\n\t\t\t\t${when(\n\t\t\t\t\tthis.heading,\n\t\t\t\t\t() => html`<h2 class=\"text-lg font-semibold mb-1\">${this.heading}</h2>`,\n\t\t\t\t)}\n\t\t\t\t${when(\n\t\t\t\t\tthis.subtitle,\n\t\t\t\t\t() => html`<p class=\"text-sm opacity-70 mb-2\">${this.subtitle}</p>`,\n\t\t\t\t)}\n\t\t\t\t${choose(\n\t\t\t\t\tthis.mode,\n\t\t\t\t\t[\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'prompt',\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t${when(this.label, () => html`<label class=\"block text-sm mb-1\">${this.label}</label>`)}\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=${this.inputType}\n\t\t\t\t\t\t\t\t\t.value=${this.defaultValue}\n\t\t\t\t\t\t\t\t\tplaceholder=${ifDefined(this.placeholder)}\n\t\t\t\t\t\t\t\t\tpattern=${ifDefined(this.pattern)}\n\t\t\t\t\t\t\t\t\t?required=${this.required}\n\t\t\t\t\t\t\t\t\tclass=\"w-full px-3 py-2 rounded-md border border-outline-variant text-base mb-2\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.message,\n\t\t\t\t\t\t\t\t\t() => html`<p class=\"text-sm mb-3\">${this.message}</p>`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t],\n\t\t\t\t\t],\n\t\t\t\t\t() => html`${when(this.message, () => html`<p class=\"text-sm mb-4\">${this.message}</p>`)}`,\n\t\t\t\t)}\n\n\t\t\t\t<div class=\"flex justify-end gap-2 mt-4\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t@click=${this.handleCancel}\n\t\t\t\t\t\tclass=\"px-4 py-2 rounded-md bg-transparent cursor-pointer hover:bg-surface-on/5\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.cancelText}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tclass=\"cta-confirm px-4 py-2 rounded-md border-0 bg-primary text-on-primary cursor-pointer font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.confirmText}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-overlay-prompt-body': SchmancyOverlayPromptBody\n\t}\n}\n"],"mappings":"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"}