@mhmo91/schmancy 0.10.4 → 0.10.6

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 (478) hide show
  1. package/custom-elements.json +43 -949
  2. package/dist/agent/{flow-CaPi2G8y.js.map → flow-3RrZM-e7.js.map} +1 -1
  3. package/dist/agent/schmancy.agent.js +3817 -6527
  4. package/dist/agent/schmancy.agent.js.map +1 -1
  5. package/dist/agent/schmancy.manifest.json +10 -680
  6. package/dist/agent/{vendor-jsqr-r7GNh4P3.js.map → vendor-jsqr-BUVwyoGC.js.map} +1 -1
  7. package/dist/agent/{vendor-material-color-Be96dpGE.js.map → vendor-material-color-33Mj762T.js.map} +1 -1
  8. package/dist/{area-DHVANBbr.js → area-CIZZ5tbB.js} +1 -1
  9. package/dist/{area-DHVANBbr.js.map → area-CIZZ5tbB.js.map} +1 -1
  10. package/dist/{area-ZupIezvU.cjs → area-oZjYJlUy.cjs} +1 -1
  11. package/dist/{area-ZupIezvU.cjs.map → area-oZjYJlUy.cjs.map} +1 -1
  12. package/dist/area.cjs +1 -1
  13. package/dist/area.js +1 -1
  14. package/dist/{autocomplete-pHvsyfbH.js → autocomplete-C1oDLuol.js} +2 -2
  15. package/dist/{autocomplete-pHvsyfbH.js.map → autocomplete-C1oDLuol.js.map} +1 -1
  16. package/dist/{autocomplete-Bn525CTp.cjs → autocomplete-X20i6D62.cjs} +1 -1
  17. package/dist/{autocomplete-Bn525CTp.cjs.map → autocomplete-X20i6D62.cjs.map} +1 -1
  18. package/dist/autocomplete.cjs +1 -1
  19. package/dist/autocomplete.js +1 -1
  20. package/dist/avatar.cjs +1 -1
  21. package/dist/avatar.js +2 -2
  22. package/dist/badge.cjs +1 -1
  23. package/dist/badge.js +1 -1
  24. package/dist/{boat-IyEtsNI4.cjs → boat-CUx58Gwe.cjs} +1 -1
  25. package/dist/{boat-IyEtsNI4.cjs.map → boat-CUx58Gwe.cjs.map} +1 -1
  26. package/dist/{boat-_Yv3M6YM.js → boat-CpE0yAlK.js} +2 -2
  27. package/dist/{boat-_Yv3M6YM.js.map → boat-CpE0yAlK.js.map} +1 -1
  28. package/dist/boat.cjs +1 -1
  29. package/dist/boat.js +1 -1
  30. package/dist/breadcrumb.cjs +1 -1
  31. package/dist/breadcrumb.js +1 -1
  32. package/dist/{busy-Ck2IXJ4r.js → busy-C9n-DUY4.js} +1 -1
  33. package/dist/{busy-Ck2IXJ4r.js.map → busy-C9n-DUY4.js.map} +1 -1
  34. package/dist/{busy-CjM39APN.cjs → busy-D1DKZhgV.cjs} +1 -1
  35. package/dist/{busy-CjM39APN.cjs.map → busy-D1DKZhgV.cjs.map} +1 -1
  36. package/dist/busy.cjs +1 -1
  37. package/dist/busy.js +1 -1
  38. package/dist/button.cjs +1 -1
  39. package/dist/button.js +3 -3
  40. package/dist/{card-DUWZmMHc.js → card-B3hN-qzk.js} +1 -1
  41. package/dist/{card-DUWZmMHc.js.map → card-B3hN-qzk.js.map} +1 -1
  42. package/dist/{card-DIxDuuth.cjs → card-DZJ7qjf2.cjs} +1 -1
  43. package/dist/{card-DIxDuuth.cjs.map → card-DZJ7qjf2.cjs.map} +1 -1
  44. package/dist/card.cjs +1 -1
  45. package/dist/card.js +1 -1
  46. package/dist/charts.cjs +1 -1
  47. package/dist/charts.js +1 -1
  48. package/dist/{checkbox-DPS1mWG-.js → checkbox-CvmB1ev9.js} +1 -1
  49. package/dist/{checkbox-DPS1mWG-.js.map → checkbox-CvmB1ev9.js.map} +1 -1
  50. package/dist/{checkbox-CGdFXuWQ.cjs → checkbox-DapdzDow.cjs} +1 -1
  51. package/dist/{checkbox-CGdFXuWQ.cjs.map → checkbox-DapdzDow.cjs.map} +1 -1
  52. package/dist/checkbox.cjs +1 -1
  53. package/dist/checkbox.js +1 -1
  54. package/dist/{chips-UoFbwmlG.cjs → chips-7g6mWRuh.cjs} +1 -1
  55. package/dist/{chips-UoFbwmlG.cjs.map → chips-7g6mWRuh.cjs.map} +1 -1
  56. package/dist/{chips-BnnXQSA-.js → chips-C8Y3_3ke.js} +4 -4
  57. package/dist/{chips-BnnXQSA-.js.map → chips-C8Y3_3ke.js.map} +1 -1
  58. package/dist/chips.cjs +1 -1
  59. package/dist/chips.js +2 -2
  60. package/dist/connectivity.cjs +1 -1
  61. package/dist/connectivity.js +1 -1
  62. package/dist/content-drawer.cjs +1 -1
  63. package/dist/content-drawer.js +1 -1
  64. package/dist/{context-daN5G6HS.cjs.map → context-BpCETidA.cjs.map} +1 -1
  65. package/dist/{context-Bdu1xt0W.js.map → context-DJTJnSK4.js.map} +1 -1
  66. package/dist/{date-range-DOstCIg8.js → date-range-DdcaPX7C.js} +99 -113
  67. package/dist/date-range-DdcaPX7C.js.map +1 -0
  68. package/dist/date-range-ZfUl4duV.cjs +131 -0
  69. package/dist/date-range-ZfUl4duV.cjs.map +1 -0
  70. package/dist/{date-range-inline-4P7zqeVe.cjs → date-range-inline-D-d7N6bh.cjs} +1 -1
  71. package/dist/{date-range-inline-4P7zqeVe.cjs.map → date-range-inline-D-d7N6bh.cjs.map} +1 -1
  72. package/dist/{date-range-inline-BVycTWLb.js → date-range-inline-QQmIWhZ4.js} +1 -1
  73. package/dist/{date-range-inline-BVycTWLb.js.map → date-range-inline-QQmIWhZ4.js.map} +1 -1
  74. package/dist/date-range-inline.cjs +1 -1
  75. package/dist/date-range-inline.js +1 -1
  76. package/dist/date-range.cjs +1 -1
  77. package/dist/date-range.js +1 -1
  78. package/dist/delay.cjs +1 -1
  79. package/dist/delay.js +2 -2
  80. package/dist/{details-BJBbZOO6.cjs → details-3rL6UQU8.cjs} +1 -1
  81. package/dist/{details-BJBbZOO6.cjs.map → details-3rL6UQU8.cjs.map} +1 -1
  82. package/dist/{details-DPc5GxPa.js → details-Dpjh-XnJ.js} +2 -2
  83. package/dist/{details-DPc5GxPa.js.map → details-Dpjh-XnJ.js.map} +1 -1
  84. package/dist/details.cjs +1 -1
  85. package/dist/details.js +1 -1
  86. package/dist/directives.cjs +1 -1
  87. package/dist/directives.js +2 -2
  88. package/dist/{divider-BvJsmSPH.js → divider-BdfEKQsH.js} +1 -1
  89. package/dist/{divider-BvJsmSPH.js.map → divider-BdfEKQsH.js.map} +1 -1
  90. package/dist/{divider-DPT3XnG5.cjs → divider-CutXDz3F.cjs} +1 -1
  91. package/dist/{divider-DPT3XnG5.cjs.map → divider-CutXDz3F.cjs.map} +1 -1
  92. package/dist/divider.cjs +1 -1
  93. package/dist/divider.js +1 -1
  94. package/dist/dropdown.cjs +1 -1
  95. package/dist/dropdown.js +1 -1
  96. package/dist/{expand-CTqBWVXo.cjs → expand-DM6zfZf7.cjs} +1 -1
  97. package/dist/{expand-CTqBWVXo.cjs.map → expand-DM6zfZf7.cjs.map} +1 -1
  98. package/dist/{expand-BMzocdtj.js → expand-DrgMPJbu.js} +2 -2
  99. package/dist/{expand-BMzocdtj.js.map → expand-DrgMPJbu.js.map} +1 -1
  100. package/dist/expand.cjs +1 -1
  101. package/dist/expand.js +1 -1
  102. package/dist/{extra-BeHlUhzv.js → extra-B6gFu4_1.js} +1 -1
  103. package/dist/{extra-BeHlUhzv.js.map → extra-B6gFu4_1.js.map} +1 -1
  104. package/dist/{extra-h_cuxRII.cjs → extra-DJRYaOXe.cjs} +1 -1
  105. package/dist/{extra-h_cuxRII.cjs.map → extra-DJRYaOXe.cjs.map} +1 -1
  106. package/dist/extra.cjs +1 -1
  107. package/dist/extra.js +1 -1
  108. package/dist/{float-CTc1xxqH.js → float-1iihPek5.js} +1 -1
  109. package/dist/{float-CTc1xxqH.js.map → float-1iihPek5.js.map} +1 -1
  110. package/dist/{float-CwVBs11k.cjs → float-Ckyk85XG.cjs} +1 -1
  111. package/dist/{float-CwVBs11k.cjs.map → float-Ckyk85XG.cjs.map} +1 -1
  112. package/dist/float.cjs +1 -1
  113. package/dist/float.js +1 -1
  114. package/dist/{form-BtwOBMZ9.js.map → form-BF1c3Dk1.js.map} +1 -1
  115. package/dist/{form-CSJp687X.cjs.map → form-DeO5XX3b.cjs.map} +1 -1
  116. package/dist/form.cjs +1 -1
  117. package/dist/form.js +1 -1
  118. package/dist/handover/agent-runtime-followups.md +1 -1
  119. package/dist/handover/agent-runtime-v1.md +3 -3
  120. package/dist/{hashContent-1ARKIsx9.js.map → hashContent-BU6jl5ih.js.map} +1 -1
  121. package/dist/{hashContent-Bp5S6T4U.cjs.map → hashContent-Bobsobip.cjs.map} +1 -1
  122. package/dist/{icons-qEQW4pjM.cjs → icons-CV-fiGcW.cjs} +1 -1
  123. package/dist/{icons-qEQW4pjM.cjs.map → icons-CV-fiGcW.cjs.map} +1 -1
  124. package/dist/{icons-BbCVrcas.js → icons-DUkcTZAY.js} +2 -2
  125. package/dist/{icons-BbCVrcas.js.map → icons-DUkcTZAY.js.map} +1 -1
  126. package/dist/icons.cjs +1 -1
  127. package/dist/icons.js +1 -1
  128. package/dist/{iframe-BJfDIEJf.js → iframe-C9tj7F6Y.js} +1 -1
  129. package/dist/{iframe-BJfDIEJf.js.map → iframe-C9tj7F6Y.js.map} +1 -1
  130. package/dist/{iframe-D6HTruav.cjs → iframe-DF97oGtZ.cjs} +1 -1
  131. package/dist/{iframe-D6HTruav.cjs.map → iframe-DF97oGtZ.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 +70 -76
  136. package/dist/{input-LTK3cctF.js → input-DE7x223Y.js} +1 -1
  137. package/dist/{input-LTK3cctF.js.map → input-DE7x223Y.js.map} +1 -1
  138. package/dist/{input-U26axtcs.cjs → input-TW9G3n7X.cjs} +1 -1
  139. package/dist/{input-U26axtcs.cjs.map → input-TW9G3n7X.cjs.map} +1 -1
  140. package/dist/{input-chip-Ch-aCs3c.js → input-chip-BdoaVw_D.js} +1 -1
  141. package/dist/{input-chip-Ch-aCs3c.js.map → input-chip-BdoaVw_D.js.map} +1 -1
  142. package/dist/{input-chip-CADXt0X5.cjs → input-chip-Do48eI5r.cjs} +1 -1
  143. package/dist/{input-chip-CADXt0X5.cjs.map → input-chip-Do48eI5r.cjs.map} +1 -1
  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-C4xmnU4n.js → layout-CXPNsUIo.js} +1 -1
  151. package/dist/{layout-C4xmnU4n.js.map → layout-CXPNsUIo.js.map} +1 -1
  152. package/dist/{layout-Dmh6fxh0.cjs → layout-Zhe7wSZ_.cjs} +1 -1
  153. package/dist/{layout-Dmh6fxh0.cjs.map → layout-Zhe7wSZ_.cjs.map} +1 -1
  154. package/dist/layout.cjs +1 -1
  155. package/dist/layout.js +1 -1
  156. package/dist/{lightbox-DqG2z3Cn.js → lightbox-DcutIyjx.js} +2 -2
  157. package/dist/{lightbox-DqG2z3Cn.js.map → lightbox-DcutIyjx.js.map} +1 -1
  158. package/dist/{lightbox-DbYUSfVl.cjs → lightbox-sPfnYzjJ.cjs} +1 -1
  159. package/dist/{lightbox-DbYUSfVl.cjs.map → lightbox-sPfnYzjJ.cjs.map} +1 -1
  160. package/dist/lightbox.cjs +1 -1
  161. package/dist/lightbox.js +1 -1
  162. package/dist/{list-D6-_E5ZD.js → list-BWrtrdgs.js} +1 -1
  163. package/dist/{list-D6-_E5ZD.js.map → list-BWrtrdgs.js.map} +1 -1
  164. package/dist/{list-CLX4sSAw.cjs → list-C4vasUly.cjs} +1 -1
  165. package/dist/{list-CLX4sSAw.cjs.map → list-C4vasUly.cjs.map} +1 -1
  166. package/dist/list.cjs +1 -1
  167. package/dist/list.js +1 -1
  168. package/dist/{magnetic-BH0TsofV.cjs.map → magnetic-BJgB1dVi.cjs.map} +1 -1
  169. package/dist/{magnetic-BZGFxAWG.js.map → magnetic-YwCNvtbB.js.map} +1 -1
  170. package/dist/{map-WXeVkx2K.cjs → map-BAQ9FEB6.cjs} +1 -1
  171. package/dist/{map-WXeVkx2K.cjs.map → map-BAQ9FEB6.cjs.map} +1 -1
  172. package/dist/{map-Dhy3ta9v.js → map-CEreveeI.js} +1 -1
  173. package/dist/{map-Dhy3ta9v.js.map → map-CEreveeI.js.map} +1 -1
  174. package/dist/map.cjs +1 -1
  175. package/dist/map.js +1 -1
  176. package/dist/menu-3yXDZusj.cjs +23 -0
  177. package/dist/menu-3yXDZusj.cjs.map +1 -0
  178. package/dist/menu-CxChOxWT.js +62 -0
  179. package/dist/menu-CxChOxWT.js.map +1 -0
  180. package/dist/menu.cjs +1 -1
  181. package/dist/menu.js +1 -1
  182. package/dist/mixins-Db7gjDah.cjs +298 -0
  183. package/dist/{mixins-De3xfjrm.cjs.map → mixins-Db7gjDah.cjs.map} +1 -1
  184. package/dist/mixins-Dw6hVfy-.js +627 -0
  185. package/dist/{mixins-CcIWET41.js.map → mixins-Dw6hVfy-.js.map} +1 -1
  186. package/dist/mixins.cjs +1 -1
  187. package/dist/mixins.js +1 -1
  188. package/dist/nav-drawer.cjs +1 -1
  189. package/dist/nav-drawer.js +1 -1
  190. package/dist/navigation-bar.cjs +1 -1
  191. package/dist/navigation-bar.js +1 -1
  192. package/dist/navigation-rail.cjs +1 -1
  193. package/dist/navigation-rail.js +1 -1
  194. package/dist/{notification-D_PQjBSf.cjs → notification-DKYy9qVe.cjs} +1 -1
  195. package/dist/{notification-D_PQjBSf.cjs.map → notification-DKYy9qVe.cjs.map} +1 -1
  196. package/dist/{notification-CVLqQ8c_.js → notification-ycbUBbOu.js} +2 -2
  197. package/dist/{notification-CVLqQ8c_.js.map → notification-ycbUBbOu.js.map} +1 -1
  198. package/dist/notification.cjs +1 -1
  199. package/dist/notification.js +1 -1
  200. package/dist/{option-rm4HebVs.js → option-DtOhMd3k.js} +1 -1
  201. package/dist/{option-rm4HebVs.js.map → option-DtOhMd3k.js.map} +1 -1
  202. package/dist/{option-DDU_goh1.cjs → option-zgVge3BH.cjs} +1 -1
  203. package/dist/{option-DDU_goh1.cjs.map → option-zgVge3BH.cjs.map} +1 -1
  204. package/dist/option.cjs +1 -1
  205. package/dist/option.js +1 -1
  206. package/dist/{overlay-stack-CAQno0CK.js.map → overlay-stack-DCDS17uj.js.map} +1 -1
  207. package/dist/{overlay-stack-BprhAE9a.cjs.map → overlay-stack-DPIe_aYv.cjs.map} +1 -1
  208. package/dist/overlay.cjs +5 -53
  209. package/dist/overlay.cjs.map +1 -1
  210. package/dist/overlay.confirm-body-AFqYBqrI.js +104 -0
  211. package/dist/overlay.confirm-body-AFqYBqrI.js.map +1 -0
  212. package/dist/overlay.confirm-body-DctQLDao.cjs +49 -0
  213. package/dist/overlay.confirm-body-DctQLDao.cjs.map +1 -0
  214. package/dist/overlay.js +120 -360
  215. package/dist/overlay.js.map +1 -1
  216. package/dist/overlay.service-B9On2-Aa.js +146 -0
  217. package/dist/overlay.service-B9On2-Aa.js.map +1 -0
  218. package/dist/overlay.service-k2nCE4pi.cjs +1 -0
  219. package/dist/overlay.service-k2nCE4pi.cjs.map +1 -0
  220. package/dist/page.cjs +1 -1
  221. package/dist/page.js +4 -4
  222. package/dist/{payment-card-form-C0dHYZIv.js → payment-card-form-Be1-OVlL.js} +1 -1
  223. package/dist/{payment-card-form-C0dHYZIv.js.map → payment-card-form-Be1-OVlL.js.map} +1 -1
  224. package/dist/{payment-card-form-DNvmZxs4.cjs → payment-card-form-CNnGePG4.cjs} +1 -1
  225. package/dist/{payment-card-form-DNvmZxs4.cjs.map → payment-card-form-CNnGePG4.cjs.map} +1 -1
  226. package/dist/payment-card-form.cjs +1 -1
  227. package/dist/payment-card-form.js +1 -1
  228. package/dist/{progress-BRerM5Bn.js → progress-BFWzmTlz.js} +1 -1
  229. package/dist/{progress-BRerM5Bn.js.map → progress-BFWzmTlz.js.map} +1 -1
  230. package/dist/{progress-U3LQkpM2.cjs → progress-C4TGG2eN.cjs} +1 -1
  231. package/dist/{progress-U3LQkpM2.cjs.map → progress-C4TGG2eN.cjs.map} +1 -1
  232. package/dist/progress.cjs +1 -1
  233. package/dist/progress.js +1 -1
  234. package/dist/qr-scanner.cjs +1 -1
  235. package/dist/qr-scanner.js +1 -1
  236. package/dist/{radio-group-BZ2WoOXJ.js → radio-group-DTNAW5dd.js} +1 -1
  237. package/dist/{radio-group-BZ2WoOXJ.js.map → radio-group-DTNAW5dd.js.map} +1 -1
  238. package/dist/{radio-group-D7mm-yvJ.cjs → radio-group-xLRp1g57.cjs} +1 -1
  239. package/dist/{radio-group-D7mm-yvJ.cjs.map → radio-group-xLRp1g57.cjs.map} +1 -1
  240. package/dist/radio-group.cjs +1 -1
  241. package/dist/radio-group.js +1 -1
  242. package/dist/range.cjs +1 -1
  243. package/dist/range.js +1 -1
  244. package/dist/{rxjs-utils-d-ivVN84.js.map → rxjs-utils-BK8VMe3K.js.map} +1 -1
  245. package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-DhOKenkS.cjs.map} +1 -1
  246. package/dist/rxjs-utils.cjs +1 -1
  247. package/dist/rxjs-utils.js +1 -1
  248. package/dist/{scroll-qL-HkMdP.js → scroll-BCmdqSQU.js} +1 -1
  249. package/dist/{scroll-qL-HkMdP.js.map → scroll-BCmdqSQU.js.map} +1 -1
  250. package/dist/{scroll-DJTjNIT_.cjs → scroll-Bdgb-vRy.cjs} +1 -1
  251. package/dist/{scroll-DJTjNIT_.cjs.map → scroll-Bdgb-vRy.cjs.map} +1 -1
  252. package/dist/{select-CnPXUeSf.js → select-COGARE0b.js} +2 -2
  253. package/dist/{select-CnPXUeSf.js.map → select-COGARE0b.js.map} +1 -1
  254. package/dist/{select-BvA7v-gL.cjs → select-Cv5t_PT3.cjs} +1 -1
  255. package/dist/{select-BvA7v-gL.cjs.map → select-Cv5t_PT3.cjs.map} +1 -1
  256. package/dist/select.cjs +1 -1
  257. package/dist/select.js +1 -1
  258. package/dist/skeleton.cjs +1 -1
  259. package/dist/skeleton.js +1 -1
  260. package/dist/skills/INDEX.md +3 -6
  261. package/dist/skills/SKILL.md +13 -9
  262. package/dist/skills/schmancy/INDEX.md +3 -6
  263. package/dist/skills/schmancy/SKILL.md +13 -9
  264. package/dist/slider.cjs +1 -1
  265. package/dist/slider.js +1 -1
  266. package/dist/{splash-screen-BDt4PInk.cjs → splash-screen-B8rFbjqT.cjs} +1 -1
  267. package/dist/{splash-screen-BDt4PInk.cjs.map → splash-screen-B8rFbjqT.cjs.map} +1 -1
  268. package/dist/{splash-screen-C8JCqX5L.js → splash-screen-DbGbGttg.js} +1 -1
  269. package/dist/{splash-screen-C8JCqX5L.js.map → splash-screen-DbGbGttg.js.map} +1 -1
  270. package/dist/splash-screen.cjs +1 -1
  271. package/dist/splash-screen.js +1 -1
  272. package/dist/{src-CqdnWGgr.js → src-YRir9pOP.js} +162 -162
  273. package/dist/src-YRir9pOP.js.map +1 -0
  274. package/dist/{src-CpRNClhg.cjs → src-b8D-Ec-Q.cjs} +13 -13
  275. package/dist/src-b8D-Ec-Q.cjs.map +1 -0
  276. package/dist/steps.cjs +1 -1
  277. package/dist/steps.js +1 -1
  278. package/dist/{surface-C8jQy8Ym.js → surface-BE7sGTBt.js} +1 -1
  279. package/dist/{surface-C8jQy8Ym.js.map → surface-BE7sGTBt.js.map} +1 -1
  280. package/dist/{surface-Du2Y4vXd.cjs → surface-BvudRtf5.cjs} +1 -1
  281. package/dist/{surface-Du2Y4vXd.cjs.map → surface-BvudRtf5.cjs.map} +1 -1
  282. package/dist/surface.cjs +1 -1
  283. package/dist/surface.js +1 -1
  284. package/dist/switch.cjs +1 -1
  285. package/dist/switch.js +1 -1
  286. package/dist/table.cjs +1 -1
  287. package/dist/table.js +1 -1
  288. package/dist/{tabs-0RfeCa00.cjs → tabs-C0XKld1Z.cjs} +1 -1
  289. package/dist/{tabs-0RfeCa00.cjs.map → tabs-C0XKld1Z.cjs.map} +1 -1
  290. package/dist/{tabs-Cyahh9Q6.js → tabs-DIzCRsA3.js} +1 -1
  291. package/dist/{tabs-Cyahh9Q6.js.map → tabs-DIzCRsA3.js.map} +1 -1
  292. package/dist/tabs.cjs +1 -1
  293. package/dist/tabs.js +1 -1
  294. package/dist/teleport.cjs +1 -1
  295. package/dist/teleport.js +1 -1
  296. package/dist/{textarea-jqRrLxmo.cjs → textarea-BCDCGCJd.cjs} +1 -1
  297. package/dist/{textarea-jqRrLxmo.cjs.map → textarea-BCDCGCJd.cjs.map} +1 -1
  298. package/dist/{textarea-CXCcTVnf.js → textarea-UbZzBwqm.js} +1 -1
  299. package/dist/{textarea-CXCcTVnf.js.map → textarea-UbZzBwqm.js.map} +1 -1
  300. package/dist/textarea.cjs +1 -1
  301. package/dist/textarea.js +1 -1
  302. package/dist/theme-CIsI-sFj.cjs +181 -0
  303. package/dist/{theme-Hjz9sCN-.cjs.map → theme-CIsI-sFj.cjs.map} +1 -1
  304. package/dist/{theme-2KZW2Rfs.js → theme-Qh-yPEPL.js} +3 -4
  305. package/dist/{theme-2KZW2Rfs.js.map → theme-Qh-yPEPL.js.map} +1 -1
  306. package/dist/{theme-button-9uF1eoHz.js → theme-button-CjTnfs9x.js} +1 -1
  307. package/dist/{theme-button-9uF1eoHz.js.map → theme-button-CjTnfs9x.js.map} +1 -1
  308. package/dist/{theme-button-C7QIbke1.cjs → theme-button-Dv1D_Vil.cjs} +1 -1
  309. package/dist/{theme-button-C7QIbke1.cjs.map → theme-button-Dv1D_Vil.cjs.map} +1 -1
  310. package/dist/theme-button.cjs +1 -1
  311. package/dist/theme-button.js +1 -1
  312. package/dist/theme.cjs +1 -1
  313. package/dist/{theme.interface-D9l33b-M.cjs.map → theme.interface-BeW-sz_g.cjs.map} +1 -1
  314. package/dist/{theme.interface-DnVNre4O.js.map → theme.interface-v7SkAnDH.js.map} +1 -1
  315. package/dist/theme.js +5 -6
  316. package/dist/theme.service-Cfk88qHK.cjs +1 -0
  317. package/dist/theme.service-Cfk88qHK.cjs.map +1 -0
  318. package/dist/{theme.service-CmbOGMA8.js → theme.service-DIUo1mBP.js} +13 -14
  319. package/dist/theme.service-DIUo1mBP.js.map +1 -0
  320. package/dist/timeline.cjs +1 -1
  321. package/dist/timeline.js +1 -1
  322. package/dist/tree.cjs +1 -1
  323. package/dist/tree.js +1 -1
  324. package/dist/typography.cjs +1 -1
  325. package/dist/typography.js +1 -1
  326. package/dist/{utils-hp-DnFf5.js → utils-BfOze6Tk.js} +1 -1
  327. package/dist/{utils-hp-DnFf5.js.map → utils-BfOze6Tk.js.map} +1 -1
  328. package/dist/{utils-Cr-YO4Np.cjs → utils-CJ9y2Jz9.cjs} +1 -1
  329. package/dist/{utils-Cr-YO4Np.cjs.map → utils-CJ9y2Jz9.cjs.map} +1 -1
  330. package/dist/utils.cjs +1 -1
  331. package/dist/utils.js +2 -2
  332. package/dist/visually-hidden.cjs +1 -1
  333. package/dist/visually-hidden.js +1 -1
  334. package/dist/{window-DtUOWiAj.cjs → window-9HOUXrTU.cjs} +1 -1
  335. package/dist/{window-DtUOWiAj.cjs.map → window-9HOUXrTU.cjs.map} +1 -1
  336. package/dist/{window-C7yY9yp5.js → window-B_55dzk0.js} +3 -3
  337. package/dist/{window-C7yY9yp5.js.map → window-B_55dzk0.js.map} +1 -1
  338. package/dist/window.cjs +1 -1
  339. package/dist/window.js +1 -1
  340. package/package.json +1 -2
  341. package/skills/schmancy/INDEX.md +3 -6
  342. package/skills/schmancy/SKILL.md +13 -9
  343. package/src/content-drawer/drawer.ts +24 -7
  344. package/src/content-drawer/events.ts +6 -0
  345. package/src/content-drawer/sheet.ts +13 -12
  346. package/src/date-range/date-range-dialog.ts +4 -4
  347. package/src/date-range/date-range.ts +35 -53
  348. package/src/index.ts +0 -4
  349. package/src/menu/menu-item.ts +7 -2
  350. package/src/menu/menu.ts +24 -20
  351. package/types/src/content-drawer/drawer.d.ts +2 -0
  352. package/types/src/content-drawer/events.d.ts +6 -0
  353. package/types/src/content-drawer/sheet.d.ts +6 -5
  354. package/types/src/date-range/date-range.d.ts +1 -5
  355. package/types/src/index.d.ts +0 -4
  356. package/types/src/menu/menu-item.d.ts +1 -0
  357. package/types/src/menu/menu.d.ts +9 -7
  358. package/dist/agent/vendor-highlight-CHJZQQB7.js +0 -2178
  359. package/dist/agent/vendor-highlight-CHJZQQB7.js.map +0 -1
  360. package/dist/code-highlight-CMilN0B8.cjs +0 -190
  361. package/dist/code-highlight-CMilN0B8.cjs.map +0 -1
  362. package/dist/code-highlight-kFUJ1Eet.js +0 -296
  363. package/dist/code-highlight-kFUJ1Eet.js.map +0 -1
  364. package/dist/code-highlight.cjs +0 -1
  365. package/dist/code-highlight.js +0 -2
  366. package/dist/date-range-BIyrzTRZ.cjs +0 -131
  367. package/dist/date-range-BIyrzTRZ.cjs.map +0 -1
  368. package/dist/date-range-DOstCIg8.js.map +0 -1
  369. package/dist/dialog-service-DI9PPy4H.js +0 -193
  370. package/dist/dialog-service-DI9PPy4H.js.map +0 -1
  371. package/dist/dialog-service-DJd5L0f5.cjs +0 -1
  372. package/dist/dialog-service-DJd5L0f5.cjs.map +0 -1
  373. package/dist/dialog.cjs +0 -89
  374. package/dist/dialog.cjs.map +0 -1
  375. package/dist/dialog.js +0 -419
  376. package/dist/dialog.js.map +0 -1
  377. package/dist/mailbox-Ct6iYe-4.cjs +0 -1140
  378. package/dist/mailbox-Ct6iYe-4.cjs.map +0 -1
  379. package/dist/mailbox-DsPII8HR.js +0 -1596
  380. package/dist/mailbox-DsPII8HR.js.map +0 -1
  381. package/dist/mailbox.cjs +0 -1
  382. package/dist/mailbox.js +0 -2
  383. package/dist/menu-Bhd3EapX.js +0 -56
  384. package/dist/menu-Bhd3EapX.js.map +0 -1
  385. package/dist/menu-Cg2aaDjs.cjs +0 -23
  386. package/dist/menu-Cg2aaDjs.cjs.map +0 -1
  387. package/dist/mixins-CcIWET41.js +0 -627
  388. package/dist/mixins-De3xfjrm.cjs +0 -298
  389. package/dist/sheet-BRL07BB4.js +0 -170
  390. package/dist/sheet-BRL07BB4.js.map +0 -1
  391. package/dist/sheet-BYQJAHQn.cjs +0 -35
  392. package/dist/sheet-BYQJAHQn.cjs.map +0 -1
  393. package/dist/sheet.cjs +0 -1
  394. package/dist/sheet.js +0 -3
  395. package/dist/sheet.service-B25bsrYG.cjs +0 -1
  396. package/dist/sheet.service-B25bsrYG.cjs.map +0 -1
  397. package/dist/sheet.service-SPQ8oLCi.js +0 -86
  398. package/dist/sheet.service-SPQ8oLCi.js.map +0 -1
  399. package/dist/skills/code-highlight.md +0 -47
  400. package/dist/skills/dialog.md +0 -69
  401. package/dist/skills/mailbox.md +0 -102
  402. package/dist/skills/schmancy/code-highlight.md +0 -47
  403. package/dist/skills/schmancy/dialog.md +0 -69
  404. package/dist/skills/schmancy/mailbox.md +0 -102
  405. package/dist/skills/schmancy/sheet.md +0 -76
  406. package/dist/skills/sheet.md +0 -76
  407. package/dist/src-CpRNClhg.cjs.map +0 -1
  408. package/dist/src-CqdnWGgr.js.map +0 -1
  409. package/dist/theme-Hjz9sCN-.cjs +0 -181
  410. package/dist/theme.events-Cv7N4Toe.js +0 -2
  411. package/dist/theme.events-Cv7N4Toe.js.map +0 -1
  412. package/dist/theme.events-DM4H5F2d.cjs +0 -1
  413. package/dist/theme.events-DM4H5F2d.cjs.map +0 -1
  414. package/dist/theme.service-BrUbGoeQ.cjs +0 -1
  415. package/dist/theme.service-BrUbGoeQ.cjs.map +0 -1
  416. package/dist/theme.service-CmbOGMA8.js.map +0 -1
  417. package/skills/schmancy/code-highlight.md +0 -47
  418. package/skills/schmancy/dialog.md +0 -69
  419. package/skills/schmancy/mailbox.md +0 -102
  420. package/skills/schmancy/sheet.md +0 -76
  421. package/src/code-highlight/code-highlight.ts +0 -345
  422. package/src/code-highlight/code-preview.ts +0 -125
  423. package/src/code-highlight/index.ts +0 -3
  424. package/src/dialog/dialog-base.mixin.ts +0 -576
  425. package/src/dialog/dialog-events.ts +0 -17
  426. package/src/dialog/dialog-service.ts +0 -494
  427. package/src/dialog/dialog.component.ts +0 -414
  428. package/src/dialog/index.ts +0 -3
  429. package/src/mailbox/README.md +0 -128
  430. package/src/mailbox/email-editor.ts +0 -1077
  431. package/src/mailbox/email-layout-selector.ts +0 -58
  432. package/src/mailbox/email-recipients.ts +0 -599
  433. package/src/mailbox/email-template-picker.ts +0 -297
  434. package/src/mailbox/email-viewer.ts +0 -717
  435. package/src/mailbox/index.ts +0 -31
  436. package/src/mailbox/mailbox.ts +0 -364
  437. package/src/mailbox/types.ts +0 -180
  438. package/src/sheet/hook.ts +0 -40
  439. package/src/sheet/index.ts +0 -2
  440. package/src/sheet/sheet.service.ts +0 -245
  441. package/src/sheet/sheet.ts +0 -238
  442. package/types/src/code-highlight/code-highlight.d.ts +0 -49
  443. package/types/src/code-highlight/code-preview.d.ts +0 -30
  444. package/types/src/code-highlight/index.d.ts +0 -3
  445. package/types/src/dialog/dialog-base.mixin.d.ts +0 -30
  446. package/types/src/dialog/dialog-events.d.ts +0 -13
  447. package/types/src/dialog/dialog-service.d.ts +0 -91
  448. package/types/src/dialog/dialog.component.d.ts +0 -150
  449. package/types/src/dialog/index.d.ts +0 -3
  450. package/types/src/mailbox/email-editor.d.ts +0 -101
  451. package/types/src/mailbox/email-layout-selector.d.ts +0 -18
  452. package/types/src/mailbox/email-recipients.d.ts +0 -122
  453. package/types/src/mailbox/email-template-picker.d.ts +0 -54
  454. package/types/src/mailbox/email-viewer.d.ts +0 -86
  455. package/types/src/mailbox/index.d.ts +0 -12
  456. package/types/src/mailbox/mailbox.d.ts +0 -82
  457. package/types/src/mailbox/types.d.ts +0 -176
  458. package/types/src/sheet/hook.d.ts +0 -5
  459. package/types/src/sheet/index.d.ts +0 -2
  460. package/types/src/sheet/sheet.d.ts +0 -29
  461. package/types/src/sheet/sheet.service.d.ts +0 -65
  462. /package/dist/agent/{flow-CaPi2G8y.js → flow-3RrZM-e7.js} +0 -0
  463. /package/dist/agent/{vendor-jsqr-r7GNh4P3.js → vendor-jsqr-BUVwyoGC.js} +0 -0
  464. /package/dist/agent/{vendor-material-color-Be96dpGE.js → vendor-material-color-33Mj762T.js} +0 -0
  465. /package/dist/{context-daN5G6HS.cjs → context-BpCETidA.cjs} +0 -0
  466. /package/dist/{context-Bdu1xt0W.js → context-DJTJnSK4.js} +0 -0
  467. /package/dist/{form-BtwOBMZ9.js → form-BF1c3Dk1.js} +0 -0
  468. /package/dist/{form-CSJp687X.cjs → form-DeO5XX3b.cjs} +0 -0
  469. /package/dist/{hashContent-1ARKIsx9.js → hashContent-BU6jl5ih.js} +0 -0
  470. /package/dist/{hashContent-Bp5S6T4U.cjs → hashContent-Bobsobip.cjs} +0 -0
  471. /package/dist/{magnetic-BH0TsofV.cjs → magnetic-BJgB1dVi.cjs} +0 -0
  472. /package/dist/{magnetic-BZGFxAWG.js → magnetic-YwCNvtbB.js} +0 -0
  473. /package/dist/{overlay-stack-CAQno0CK.js → overlay-stack-DCDS17uj.js} +0 -0
  474. /package/dist/{overlay-stack-BprhAE9a.cjs → overlay-stack-DPIe_aYv.cjs} +0 -0
  475. /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-BK8VMe3K.js} +0 -0
  476. /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-DhOKenkS.cjs} +0 -0
  477. /package/dist/{theme.interface-D9l33b-M.cjs → theme.interface-BeW-sz_g.cjs} +0 -0
  478. /package/dist/{theme.interface-DnVNre4O.js → theme.interface-v7SkAnDH.js} +0 -0
@@ -1,193 +0,0 @@
1
- import { n as e, t } from "./theme.events-Cv7N4Toe.js";
2
- import { t as n } from "./overlay-stack-CAQno0CK.js";
3
- import { Subject as r, defaultIfEmpty as i, forkJoin as a, fromEvent as o, map as s, of as c, switchMap as l, takeUntil as u, tap as d, timer as f } from "rxjs";
4
- import { render as p } from "lit";
5
- var m = "are-you-there-dialog", h = "yes-dialog-here", g = class g {
6
- static {
7
- this.DEFAULT_OPTIONS = {
8
- title: void 0,
9
- subtitle: void 0,
10
- confirmText: void 0,
11
- cancelText: void 0,
12
- variant: "default"
13
- };
14
- }
15
- constructor() {
16
- this.activeDialogs = [], this.dialogSubject = new r(), this.dismissSubject = new r(), this.lastClickPosition = null, this.clickTrackingInitialized = !1, this.setupDialogOpeningLogic(), this.setupDialogDismissLogic(), this.setupClickPositionTracking();
17
- }
18
- setupClickPositionTracking() {
19
- this.clickTrackingInitialized || typeof document > "u" || (this.clickTrackingInitialized = !0, o(document, "pointerdown", {
20
- capture: !0,
21
- passive: !0
22
- }).pipe(d((e) => {
23
- this.lastClickPosition = {
24
- x: e.clientX,
25
- y: e.clientY
26
- };
27
- })).subscribe());
28
- }
29
- static getInstance() {
30
- return g.instance ||= new g(), g.instance;
31
- }
32
- setupDialogOpeningLogic() {
33
- this.dialogSubject.pipe(l((n) => a([o(window, t).pipe(u(f(50)), s((e) => e.detail.theme), i(void 0)), c(n).pipe(d(() => {
34
- let t = `dialog-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
35
- window.dispatchEvent(new CustomEvent(e, {
36
- bubbles: !0,
37
- composed: !0
38
- })), n.uid = t;
39
- }))])), s(([e, t]) => {
40
- let r = e || t.options.targetContainer || document.querySelector("schmancy-theme") || document.body, i = t.uid, a = document.createElement("schmancy-dialog");
41
- return a.setAttribute("uid", i), a.style.setProperty("--schmancy-overlay-z", String(n.getNextZIndex())), r.appendChild(a), {
42
- dialog: a,
43
- target: t
44
- };
45
- }), d(({ dialog: e, target: t }) => {
46
- let n = t.options;
47
- if (t.type === "confirm") {
48
- if (e.title = n.title, e.subtitle = n.subtitle, e.message = n.message, e.confirmText = n.confirmText ?? "Confirm", e.cancelText = n.cancelText ?? "Cancel", e.variant = n.variant ?? "default", n.content) {
49
- let t = document.createElement("div");
50
- if (t.slot = "content", typeof n.content == "function") {
51
- let e = n.content();
52
- e instanceof HTMLElement ? t.appendChild(e) : p(e, t);
53
- } else n.content instanceof HTMLElement ? t.appendChild(n.content) : p(n.content, t);
54
- e.appendChild(t);
55
- }
56
- } else if (e.hideActions = !0, t.content) {
57
- let n = document.createElement("div");
58
- if (n.style.display = "contents", n.classList.add("schmancy-dialog-content-container"), typeof t.content == "function") {
59
- let e = t.content();
60
- e instanceof HTMLElement ? n.appendChild(e) : p(e, n);
61
- } else t.content instanceof HTMLElement ? n.appendChild(t.content) : p(t.content, n);
62
- e.appendChild(n);
63
- }
64
- this.activeDialogs.push(e);
65
- }), d(({ dialog: e, target: t }) => {
66
- let r = t.options.position || this.getDefaultPosition();
67
- e.show(r).then((r) => {
68
- t.resolve?.(r);
69
- let i = this.activeDialogs.indexOf(e);
70
- i !== -1 && this.activeDialogs.splice(i, 1), n.release();
71
- let a = e.querySelector("[slot=\"content\"]");
72
- a && e.removeChild(a);
73
- let o = e.querySelector(".schmancy-dialog-content-container");
74
- o?.parentNode && o.parentNode.removeChild(o), e._eventSubscriptions?.forEach((e) => e.unsubscribe()), e.parentElement?.removeChild(e);
75
- }).catch((e) => {
76
- t.reject?.(e);
77
- });
78
- let i = [];
79
- if (t.options.onConfirm) {
80
- let n = o(e, "confirm").subscribe(() => {
81
- t.options.onConfirm(), n.unsubscribe();
82
- });
83
- i.push(n);
84
- }
85
- if (t.options.onCancel) {
86
- let n = o(e, "cancel").subscribe(() => {
87
- t.options.onCancel(), n.unsubscribe();
88
- });
89
- i.push(n);
90
- }
91
- e._eventSubscriptions = i;
92
- })).subscribe();
93
- }
94
- setupDialogDismissLogic() {
95
- this.dismissSubject.pipe(l((e) => a([o(window, h).pipe(u(f(100)), s((e) => e.detail), i(void 0)), c(e).pipe(d(() => {
96
- window.dispatchEvent(new CustomEvent(m, {
97
- detail: { uid: e },
98
- bubbles: !0,
99
- composed: !0
100
- }));
101
- }))])), d(([e]) => {
102
- if (e?.dialog) {
103
- e.dialog.hide(!1), e.dialog._eventSubscriptions?.forEach((e) => e.unsubscribe());
104
- let t = this.activeDialogs.indexOf(e.dialog);
105
- t !== -1 && this.activeDialogs.splice(t, 1), n.release(), e.dialog.parentElement?.removeChild(e.dialog);
106
- }
107
- })).subscribe();
108
- }
109
- confirm(e) {
110
- return new Promise((t, n) => {
111
- let r = {
112
- ...g.DEFAULT_OPTIONS,
113
- ...e
114
- };
115
- r.position ||= this.getDefaultPosition(), this.dialogSubject.next({
116
- options: r,
117
- type: "confirm",
118
- content: r.content,
119
- resolve: t,
120
- reject: n
121
- });
122
- });
123
- }
124
- component(e, t = {}) {
125
- return new Promise((n, r) => {
126
- t.position ||= this.getDefaultPosition(), this.dialogSubject.next({
127
- options: t,
128
- type: "component",
129
- content: e,
130
- resolve: n,
131
- reject: r
132
- });
133
- });
134
- }
135
- dismiss() {
136
- if (this.activeDialogs.length > 0) {
137
- let e = this.activeDialogs[this.activeDialogs.length - 1].getAttribute("uid");
138
- if (e) return this.dismissSubject.next(e), !0;
139
- }
140
- return !1;
141
- }
142
- close() {
143
- return this.dismiss();
144
- }
145
- ask(e, t) {
146
- return this.confirm({
147
- message: e,
148
- confirmText: "Confirm",
149
- cancelText: "Cancel",
150
- position: t
151
- });
152
- }
153
- danger(e) {
154
- return this.confirm({
155
- ...e,
156
- variant: "danger"
157
- });
158
- }
159
- prompt(e) {
160
- return new Promise((t) => {
161
- let n = e.defaultValue || "", r = document.createElement("div");
162
- r.style.width = "100%", r.style.minWidth = "280px";
163
- let i = document.createElement("schmancy-input");
164
- i.setAttribute("type", e.inputType || "text"), e.label && i.setAttribute("label", e.label), e.placeholder && i.setAttribute("placeholder", e.placeholder), e.defaultValue && i.setAttribute("value", e.defaultValue), i.addEventListener("input", (e) => {
165
- n = e.target.value;
166
- }), r.appendChild(i), this.confirm({
167
- title: e.title,
168
- message: e.message,
169
- confirmText: e.confirmText ?? "OK",
170
- cancelText: e.cancelText ?? "Cancel",
171
- position: e.position,
172
- content: r
173
- }).then((e) => {
174
- t(e ? n : null);
175
- });
176
- });
177
- }
178
- getDefaultPosition() {
179
- return this.lastClickPosition ? { ...this.lastClickPosition } : {
180
- x: window.innerWidth / 2,
181
- y: window.innerHeight / 2
182
- };
183
- }
184
- }, _ = g.getInstance(), v = {
185
- confirm: (e) => _.confirm(e),
186
- ask: (e, t) => _.ask(e, t),
187
- danger: (e) => _.danger(e),
188
- prompt: (e) => _.prompt(e),
189
- component: (e, t) => _.component(e, t),
190
- dismiss: () => _.dismiss(),
191
- close: () => _.close()
192
- };
193
- export { m as i, g as n, h as r, v as t };
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog-service-DI9PPy4H.js","names":[],"sources":["../src/dialog/dialog-events.ts","../src/dialog/dialog-service.ts"],"sourcesContent":["// Dialog discovery event constants\r\nexport const DialogWhereAreYouRicky = 'are-you-there-dialog'\r\nexport const DialogHereMorty = 'yes-dialog-here'\r\n\r\n// Event interfaces\r\nexport interface DialogWhereAreYouRickyEvent extends CustomEvent {\r\n detail: {\r\n uid: string\r\n }\r\n}\r\n\r\nexport interface DialogHereMortyEvent extends CustomEvent {\r\n detail: {\r\n dialog: any // Will be schmancy-dialog instance\r\n theme?: any // Will be schmancy-theme instance\r\n }\r\n}","import { render, TemplateResult } from 'lit'\nimport {\n\tdefaultIfEmpty,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tof,\n\tSubject,\n\tSubscription,\n\tswitchMap,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.events'\nimport { overlayStack } from '../utils/overlay-stack'\nimport { SchmancyDialog } from './dialog.component'\nimport { DialogHereMorty, DialogHereMortyEvent, DialogWhereAreYouRicky } from './dialog-events'\n\n/**\n * Dialog service options interface\n */\nexport interface DialogOptions {\n\ttitle?: string\n\tsubtitle?: string\n\tmessage?: string\n\tconfirmText?: string\n\tcancelText?: string\n\tvariant?: 'default' | 'danger'\n\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\tcontent?: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult)\n\tonConfirm?: () => void\n\tonCancel?: () => void\n\thideActions?: boolean\n\ttargetContainer?: HTMLElement\n}\n\n/**\n * Prompt dialog options\n */\nexport interface PromptOptions {\n\ttitle?: string\n\tmessage?: string\n\tlabel?: string\n\tplaceholder?: string\n\tdefaultValue?: string\n\tinputType?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\n\tconfirmText?: string\n\tcancelText?: string\n\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n}\n\ninterface DialogTarget {\n\toptions: DialogOptions\n\ttype: 'confirm' | 'component'\n\tcontent?: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult)\n\tresolve?: (value: boolean) => void\n\treject?: (reason?: unknown) => void\n}\n\n/**\n * Dialog service for centralized dialog management.\n * Uses a single unified SchmancyDialog component for all dialog types.\n */\nexport class DialogService {\n\tprivate static instance: DialogService\n\n\tprivate static DEFAULT_OPTIONS: Partial<DialogOptions> = {\n\t\ttitle: undefined,\n\t\tsubtitle: undefined,\n\t\tconfirmText: undefined,\n\t\tcancelText: undefined,\n\t\tvariant: 'default',\n\t}\n\n\t// Single array to track all dialogs\n\tprivate activeDialogs: SchmancyDialog[] = []\n\n\tprivate dialogSubject = new Subject<DialogTarget>()\n\tprivate dismissSubject = new Subject<string>()\n\n\t// Lazy click position tracking - only initialized when first dialog opens\n\tprivate lastClickPosition: { x: number; y: number } | null = null\n\tprivate clickTrackingInitialized = false\n\n\tprivate constructor() {\n\t\tthis.setupDialogOpeningLogic()\n\t\tthis.setupDialogDismissLogic()\n\t\tthis.setupClickPositionTracking()\n\t}\n\n\tprivate setupClickPositionTracking() {\n\t\tif (this.clickTrackingInitialized || typeof document === 'undefined') return\n\t\tthis.clickTrackingInitialized = true\n\n\t\tfromEvent<PointerEvent>(document, 'pointerdown', { capture: true, passive: true })\n\t\t\t.pipe(\n\t\t\t\ttap(event => {\n\t\t\t\t\tthis.lastClickPosition = { x: event.clientX, y: event.clientY }\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tpublic static getInstance(): DialogService {\n\t\tif (!DialogService.instance) {\n\t\t\tDialogService.instance = new DialogService()\n\t\t}\n\t\treturn DialogService.instance\n\t}\n\n\tprivate setupDialogOpeningLogic() {\n\t\tthis.dialogSubject\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\n\t\t\t\t\t\t\tmap(e => e.detail.theme),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tconst uid = `dialog-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(ThemeWhereAreYou, {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t;(target as { uid?: string }).uid = uid\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\tmap(([theme, target]) => {\n\t\t\t\t\tconst targetContainer =\n\t\t\t\t\t\ttheme ||\n\t\t\t\t\t\ttarget.options.targetContainer ||\n\t\t\t\t\t\t(document.querySelector('schmancy-theme') as HTMLElement) ||\n\t\t\t\t\t\tdocument.body\n\n\t\t\t\t\tconst uid = (target as { uid?: string }).uid!\n\t\t\t\t\tconst dialog = document.createElement('schmancy-dialog') as SchmancyDialog\n\t\t\t\t\tdialog.setAttribute('uid', uid)\n\t\t\t\t\tdialog.style.setProperty('--schmancy-overlay-z', String(overlayStack.getNextZIndex()))\n\t\t\t\t\ttargetContainer.appendChild(dialog)\n\n\t\t\t\t\treturn { dialog, target }\n\t\t\t\t}),\n\t\t\t\ttap(({ dialog, target }) => {\n\t\t\t\t\tconst options = target.options\n\n\t\t\t\t\tif (target.type === 'confirm') {\n\t\t\t\t\t\t// Configure for confirm mode\n\t\t\t\t\t\tdialog.title = options.title\n\t\t\t\t\t\tdialog.subtitle = options.subtitle\n\t\t\t\t\t\tdialog.message = options.message\n\t\t\t\t\t\tdialog.confirmText = options.confirmText ?? 'Confirm'\n\t\t\t\t\t\tdialog.cancelText = options.cancelText ?? 'Cancel'\n\t\t\t\t\t\tdialog.variant = options.variant ?? 'default'\n\n\t\t\t\t\t\t// Handle custom content slot\n\t\t\t\t\t\tif (options.content) {\n\t\t\t\t\t\t\tconst contentContainer = document.createElement('div')\n\t\t\t\t\t\t\tcontentContainer.slot = 'content'\n\n\t\t\t\t\t\t\tif (typeof options.content === 'function') {\n\t\t\t\t\t\t\t\tconst result = options.content()\n\t\t\t\t\t\t\t\tif (result instanceof HTMLElement) {\n\t\t\t\t\t\t\t\t\tcontentContainer.appendChild(result)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trender(result, contentContainer)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (options.content instanceof HTMLElement) {\n\t\t\t\t\t\t\t\tcontentContainer.appendChild(options.content)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trender(options.content, contentContainer)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdialog.appendChild(contentContainer)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Configure for content mode\n\t\t\t\t\t\tdialog.hideActions = true\n\n\t\t\t\t\t\tif (target.content) {\n\t\t\t\t\t\t\tconst contentContainer = document.createElement('div')\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcontentContainer.style.display = 'contents'\n\t\t\t\t\t\t\tcontentContainer.classList.add('schmancy-dialog-content-container')\n\n\t\t\t\t\t\t\tif (typeof target.content === 'function') {\n\t\t\t\t\t\t\t\tconst result = target.content()\n\t\t\t\t\t\t\t\tif (result instanceof HTMLElement) {\n\t\t\t\t\t\t\t\t\tcontentContainer.appendChild(result)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trender(result, contentContainer)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (target.content instanceof HTMLElement) {\n\t\t\t\t\t\t\t\tcontentContainer.appendChild(target.content)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trender(target.content, contentContainer)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdialog.appendChild(contentContainer)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.activeDialogs.push(dialog)\n\t\t\t\t}),\n\t\t\t\ttap(({ dialog, target }) => {\n\t\t\t\t\tconst position = target.options.position || this.getDefaultPosition()\n\n\t\t\t\t\tdialog\n\t\t\t\t\t\t.show(position)\n\t\t\t\t\t\t.then((result: boolean) => {\n\t\t\t\t\t\t\ttarget.resolve?.(result)\n\n\t\t\t\t\t\t\t// Cleanup\n\t\t\t\t\t\t\tconst index = this.activeDialogs.indexOf(dialog)\n\t\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\t\tthis.activeDialogs.splice(index, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\t\t// Clean up content\n\t\t\t\t\t\t\tconst contentEl = dialog.querySelector('[slot=\"content\"]')\n\t\t\t\t\t\t\tif (contentEl) dialog.removeChild(contentEl)\n\n\t\t\t\t\t\t\tconst contentContainer = dialog.querySelector('.schmancy-dialog-content-container')\n\t\t\t\t\t\t\tif (contentContainer?.parentNode) {\n\t\t\t\t\t\t\t\tcontentContainer.parentNode.removeChild(contentContainer)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Clean up event subscriptions\n\t\t\t\t\t\t\tconst eventSubscriptions = (dialog as unknown as { _eventSubscriptions?: Subscription[] })\n\t\t\t\t\t\t\t\t._eventSubscriptions\n\t\t\t\t\t\t\teventSubscriptions?.forEach(sub => sub.unsubscribe())\n\n\t\t\t\t\t\t\t// Remove from DOM\n\t\t\t\t\t\t\tdialog.parentElement?.removeChild(dialog)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\t\ttarget.reject?.(error)\n\t\t\t\t\t\t})\n\n\t\t\t\t\t// Set up event listeners\n\t\t\t\t\tconst eventSubscriptions: Subscription[] = []\n\n\t\t\t\t\tif (target.options.onConfirm) {\n\t\t\t\t\t\tconst confirmSub = fromEvent(dialog, 'confirm').subscribe(() => {\n\t\t\t\t\t\t\ttarget.options.onConfirm!()\n\t\t\t\t\t\t\tconfirmSub.unsubscribe()\n\t\t\t\t\t\t})\n\t\t\t\t\t\teventSubscriptions.push(confirmSub)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (target.options.onCancel) {\n\t\t\t\t\t\tconst cancelSub = fromEvent(dialog, 'cancel').subscribe(() => {\n\t\t\t\t\t\t\ttarget.options.onCancel!()\n\t\t\t\t\t\t\tcancelSub.unsubscribe()\n\t\t\t\t\t\t})\n\t\t\t\t\t\teventSubscriptions.push(cancelSub)\n\t\t\t\t\t}\n\n\t\t\t\t\t;(dialog as unknown as { _eventSubscriptions: Subscription[] })._eventSubscriptions = eventSubscriptions\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate setupDialogDismissLogic() {\n\t\tthis.dismissSubject\n\t\t\t.pipe(\n\t\t\t\tswitchMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<DialogHereMortyEvent>(window, DialogHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(DialogWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid },\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\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),\n\t\t\t\ttap(([response]) => {\n\t\t\t\t\tif (response?.dialog) {\n\t\t\t\t\t\tresponse.dialog.hide(false)\n\n\t\t\t\t\t\tconst eventSubscriptions = (response.dialog as unknown as { _eventSubscriptions?: Subscription[] })\n\t\t\t\t\t\t\t._eventSubscriptions\n\t\t\t\t\t\teventSubscriptions?.forEach(sub => sub.unsubscribe())\n\n\t\t\t\t\t\tconst index = this.activeDialogs.indexOf(response.dialog as SchmancyDialog)\n\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\tthis.activeDialogs.splice(index, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\tresponse.dialog.parentElement?.removeChild(response.dialog)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tpublic confirm(options: DialogOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst completeOptions = {\n\t\t\t\t...DialogService.DEFAULT_OPTIONS,\n\t\t\t\t...options,\n\t\t\t}\n\n\t\t\tif (!completeOptions.position) {\n\t\t\t\tcompleteOptions.position = this.getDefaultPosition()\n\t\t\t}\n\n\t\t\tthis.dialogSubject.next({\n\t\t\t\toptions: completeOptions,\n\t\t\t\ttype: 'confirm',\n\t\t\t\tcontent: completeOptions.content,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic component(\n\t\tcontent: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult),\n\t\toptions: Omit<DialogOptions, 'content' | 'message'> = {},\n\t): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!options.position) {\n\t\t\t\toptions.position = this.getDefaultPosition()\n\t\t\t}\n\n\t\t\tthis.dialogSubject.next({\n\t\t\t\toptions: options as DialogOptions,\n\t\t\t\ttype: 'component',\n\t\t\t\tcontent,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic dismiss(): boolean {\n\t\tif (this.activeDialogs.length > 0) {\n\t\t\tconst dialog = this.activeDialogs[this.activeDialogs.length - 1]\n\t\t\tconst uid = dialog.getAttribute('uid')\n\n\t\t\tif (uid) {\n\t\t\t\tthis.dismissSubject.next(uid)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tpublic close(): boolean {\n\t\treturn this.dismiss()\n\t}\n\n\tpublic ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tconfirmText: 'Confirm',\n\t\t\tcancelText: 'Cancel',\n\t\t\tposition: event,\n\t\t})\n\t}\n\n\tpublic danger(options: Omit<DialogOptions, 'variant'>): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\t...options,\n\t\t\tvariant: 'danger',\n\t\t})\n\t}\n\n\t/**\n\t * Shows a prompt dialog with an input field.\n\t * Returns the input value if confirmed, null if cancelled.\n\t */\n\tpublic prompt(options: PromptOptions): Promise<string | null> {\n\t\treturn new Promise(resolve => {\n\t\t\tlet inputValue = options.defaultValue || ''\n\n\t\t\t// Create container for input\n\t\t\tconst container = document.createElement('div')\n\t\t\tcontainer.style.width = '100%'\n\t\t\tcontainer.style.minWidth = '280px'\n\n\t\t\tconst input = document.createElement('schmancy-input') as HTMLElement\n\t\t\tinput.setAttribute('type', options.inputType || 'text')\n\t\t\tif (options.label) input.setAttribute('label', options.label)\n\t\t\tif (options.placeholder) input.setAttribute('placeholder', options.placeholder)\n\t\t\tif (options.defaultValue) input.setAttribute('value', options.defaultValue)\n\n\t\t\tinput.addEventListener('input', (e: Event) => {\n\t\t\t\tinputValue = (e.target as HTMLInputElement).value\n\t\t\t})\n\n\t\t\tcontainer.appendChild(input)\n\n\t\t\tthis.confirm({\n\t\t\t\ttitle: options.title,\n\t\t\t\tmessage: options.message,\n\t\t\t\tconfirmText: options.confirmText ?? 'OK',\n\t\t\t\tcancelText: options.cancelText ?? 'Cancel',\n\t\t\t\tposition: options.position,\n\t\t\t\tcontent: container,\n\t\t\t}).then(confirmed => {\n\t\t\t\tresolve(confirmed ? inputValue : null)\n\t\t\t\treturn\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate getDefaultPosition(): { x: number; y: number } {\n\t\t// Use last click position if available, otherwise center of screen\n\t\tif (this.lastClickPosition) {\n\t\t\treturn { ...this.lastClickPosition }\n\t\t}\n\t\treturn {\n\t\t\tx: window.innerWidth / 2,\n\t\t\ty: window.innerHeight / 2,\n\t\t}\n\t}\n}\n\n/**\n * Eagerly instantiate so click tracking starts immediately on import,\n * not on first dialog open (which would miss the triggering click).\n */\nconst service = DialogService.getInstance()\n\n/**\n * Global dialog utility. Imperative modal API — open any element as a dialog,\n * or use the built-in `confirm` / `ask` / `danger` prompts. Returns Promises\n * that resolve when the user picks an action.\n *\n * @service\n * @summary Imperative modal dialogs and built-in confirm/ask/danger prompts.\n * @method confirm(options: DialogOptions) - Built-in confirm prompt. Returns Promise<boolean>.\n * @method ask(message, event?) - One-line yes/no prompt anchored to the triggering event.\n * @method danger(options) - Destructive-action confirm styled with the error palette.\n * @method component(element, options?) - Open any element as a modal.\n * @method dismiss(id?) - Dismiss a dialog by id, or the topmost dialog.\n */\nexport const $dialog = {\n\tconfirm: (options: DialogOptions): Promise<boolean> => {\n\t\treturn service.confirm(options)\n\t},\n\n\task: (message: string, event?: MouseEvent | TouchEvent): Promise<boolean> => {\n\t\treturn service.ask(message, event)\n\t},\n\n\tdanger: (options: Omit<DialogOptions, 'variant'>): Promise<boolean> => {\n\t\treturn service.danger(options)\n\t},\n\n\tprompt: (options: PromptOptions): Promise<string | null> => {\n\t\treturn service.prompt(options)\n\t},\n\n\tcomponent: (\n\t\tcontent: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult),\n\t\toptions?: Omit<DialogOptions, 'content' | 'message'>,\n\t): Promise<boolean> => {\n\t\treturn service.component(content, options)\n\t},\n\n\tdismiss: (): boolean => {\n\t\treturn service.dismiss()\n\t},\n\n\tclose: (): boolean => {\n\t\treturn service.close()\n\t},\n}\n\nexport default DialogService\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./theme.events-DM4H5F2d.cjs`),t=require(`./overlay-stack-BprhAE9a.cjs`);let n=require(`rxjs`),r=require(`lit`);var i=`are-you-there-dialog`,a=`yes-dialog-here`,o=class o{static{this.DEFAULT_OPTIONS={title:void 0,subtitle:void 0,confirmText:void 0,cancelText:void 0,variant:`default`}}constructor(){this.activeDialogs=[],this.dialogSubject=new n.Subject,this.dismissSubject=new n.Subject,this.lastClickPosition=null,this.clickTrackingInitialized=!1,this.setupDialogOpeningLogic(),this.setupDialogDismissLogic(),this.setupClickPositionTracking()}setupClickPositionTracking(){this.clickTrackingInitialized||typeof document>`u`||(this.clickTrackingInitialized=!0,(0,n.fromEvent)(document,`pointerdown`,{capture:!0,passive:!0}).pipe((0,n.tap)(e=>{this.lastClickPosition={x:e.clientX,y:e.clientY}})).subscribe())}static getInstance(){return o.instance||=new o,o.instance}setupDialogOpeningLogic(){this.dialogSubject.pipe((0,n.switchMap)(t=>(0,n.forkJoin)([(0,n.fromEvent)(window,e.t).pipe((0,n.takeUntil)((0,n.timer)(50)),(0,n.map)(e=>e.detail.theme),(0,n.defaultIfEmpty)(void 0)),(0,n.of)(t).pipe((0,n.tap)(()=>{let n=`dialog-${Date.now()}-${Math.random().toString(36).substring(2,9)}`;window.dispatchEvent(new CustomEvent(e.n,{bubbles:!0,composed:!0})),t.uid=n}))])),(0,n.map)(([e,n])=>{let r=e||n.options.targetContainer||document.querySelector(`schmancy-theme`)||document.body,i=n.uid,a=document.createElement(`schmancy-dialog`);return a.setAttribute(`uid`,i),a.style.setProperty(`--schmancy-overlay-z`,String(t.t.getNextZIndex())),r.appendChild(a),{dialog:a,target:n}}),(0,n.tap)(({dialog:e,target:t})=>{let n=t.options;if(t.type===`confirm`){if(e.title=n.title,e.subtitle=n.subtitle,e.message=n.message,e.confirmText=n.confirmText??`Confirm`,e.cancelText=n.cancelText??`Cancel`,e.variant=n.variant??`default`,n.content){let t=document.createElement(`div`);if(t.slot=`content`,typeof n.content==`function`){let e=n.content();e instanceof HTMLElement?t.appendChild(e):(0,r.render)(e,t)}else n.content instanceof HTMLElement?t.appendChild(n.content):(0,r.render)(n.content,t);e.appendChild(t)}}else if(e.hideActions=!0,t.content){let n=document.createElement(`div`);if(n.style.display=`contents`,n.classList.add(`schmancy-dialog-content-container`),typeof t.content==`function`){let e=t.content();e instanceof HTMLElement?n.appendChild(e):(0,r.render)(e,n)}else t.content instanceof HTMLElement?n.appendChild(t.content):(0,r.render)(t.content,n);e.appendChild(n)}this.activeDialogs.push(e)}),(0,n.tap)(({dialog:e,target:r})=>{let i=r.options.position||this.getDefaultPosition();e.show(i).then(n=>{r.resolve?.(n);let i=this.activeDialogs.indexOf(e);i!==-1&&this.activeDialogs.splice(i,1),t.t.release();let a=e.querySelector(`[slot="content"]`);a&&e.removeChild(a);let o=e.querySelector(`.schmancy-dialog-content-container`);o?.parentNode&&o.parentNode.removeChild(o),e._eventSubscriptions?.forEach(e=>e.unsubscribe()),e.parentElement?.removeChild(e)}).catch(e=>{r.reject?.(e)});let a=[];if(r.options.onConfirm){let t=(0,n.fromEvent)(e,`confirm`).subscribe(()=>{r.options.onConfirm(),t.unsubscribe()});a.push(t)}if(r.options.onCancel){let t=(0,n.fromEvent)(e,`cancel`).subscribe(()=>{r.options.onCancel(),t.unsubscribe()});a.push(t)}e._eventSubscriptions=a})).subscribe()}setupDialogDismissLogic(){this.dismissSubject.pipe((0,n.switchMap)(e=>(0,n.forkJoin)([(0,n.fromEvent)(window,a).pipe((0,n.takeUntil)((0,n.timer)(100)),(0,n.map)(e=>e.detail),(0,n.defaultIfEmpty)(void 0)),(0,n.of)(e).pipe((0,n.tap)(()=>{window.dispatchEvent(new CustomEvent(i,{detail:{uid:e},bubbles:!0,composed:!0}))}))])),(0,n.tap)(([e])=>{if(e?.dialog){e.dialog.hide(!1),e.dialog._eventSubscriptions?.forEach(e=>e.unsubscribe());let n=this.activeDialogs.indexOf(e.dialog);n!==-1&&this.activeDialogs.splice(n,1),t.t.release(),e.dialog.parentElement?.removeChild(e.dialog)}})).subscribe()}confirm(e){return new Promise((t,n)=>{let r={...o.DEFAULT_OPTIONS,...e};r.position||=this.getDefaultPosition(),this.dialogSubject.next({options:r,type:`confirm`,content:r.content,resolve:t,reject:n})})}component(e,t={}){return new Promise((n,r)=>{t.position||=this.getDefaultPosition(),this.dialogSubject.next({options:t,type:`component`,content:e,resolve:n,reject:r})})}dismiss(){if(this.activeDialogs.length>0){let e=this.activeDialogs[this.activeDialogs.length-1].getAttribute(`uid`);if(e)return this.dismissSubject.next(e),!0}return!1}close(){return this.dismiss()}ask(e,t){return this.confirm({message:e,confirmText:`Confirm`,cancelText:`Cancel`,position:t})}danger(e){return this.confirm({...e,variant:`danger`})}prompt(e){return new Promise(t=>{let n=e.defaultValue||``,r=document.createElement(`div`);r.style.width=`100%`,r.style.minWidth=`280px`;let i=document.createElement(`schmancy-input`);i.setAttribute(`type`,e.inputType||`text`),e.label&&i.setAttribute(`label`,e.label),e.placeholder&&i.setAttribute(`placeholder`,e.placeholder),e.defaultValue&&i.setAttribute(`value`,e.defaultValue),i.addEventListener(`input`,e=>{n=e.target.value}),r.appendChild(i),this.confirm({title:e.title,message:e.message,confirmText:e.confirmText??`OK`,cancelText:e.cancelText??`Cancel`,position:e.position,content:r}).then(e=>{t(e?n:null)})})}getDefaultPosition(){return this.lastClickPosition?{...this.lastClickPosition}:{x:window.innerWidth/2,y:window.innerHeight/2}}},s=o.getInstance(),c={confirm:e=>s.confirm(e),ask:(e,t)=>s.ask(e,t),danger:e=>s.danger(e),prompt:e=>s.prompt(e),component:(e,t)=>s.component(e,t),dismiss:()=>s.dismiss(),close:()=>s.close()};Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog-service-DJd5L0f5.cjs","names":[],"sources":["../src/dialog/dialog-events.ts","../src/dialog/dialog-service.ts"],"sourcesContent":["// Dialog discovery event constants\r\nexport const DialogWhereAreYouRicky = 'are-you-there-dialog'\r\nexport const DialogHereMorty = 'yes-dialog-here'\r\n\r\n// Event interfaces\r\nexport interface DialogWhereAreYouRickyEvent extends CustomEvent {\r\n detail: {\r\n uid: string\r\n }\r\n}\r\n\r\nexport interface DialogHereMortyEvent extends CustomEvent {\r\n detail: {\r\n dialog: any // Will be schmancy-dialog instance\r\n theme?: any // Will be schmancy-theme instance\r\n }\r\n}","import { render, TemplateResult } from 'lit'\nimport {\n\tdefaultIfEmpty,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tof,\n\tSubject,\n\tSubscription,\n\tswitchMap,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.events'\nimport { overlayStack } from '../utils/overlay-stack'\nimport { SchmancyDialog } from './dialog.component'\nimport { DialogHereMorty, DialogHereMortyEvent, DialogWhereAreYouRicky } from './dialog-events'\n\n/**\n * Dialog service options interface\n */\nexport interface DialogOptions {\n\ttitle?: string\n\tsubtitle?: string\n\tmessage?: string\n\tconfirmText?: string\n\tcancelText?: string\n\tvariant?: 'default' | 'danger'\n\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\tcontent?: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult)\n\tonConfirm?: () => void\n\tonCancel?: () => void\n\thideActions?: boolean\n\ttargetContainer?: HTMLElement\n}\n\n/**\n * Prompt dialog options\n */\nexport interface PromptOptions {\n\ttitle?: string\n\tmessage?: string\n\tlabel?: string\n\tplaceholder?: string\n\tdefaultValue?: string\n\tinputType?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'\n\tconfirmText?: string\n\tcancelText?: string\n\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n}\n\ninterface DialogTarget {\n\toptions: DialogOptions\n\ttype: 'confirm' | 'component'\n\tcontent?: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult)\n\tresolve?: (value: boolean) => void\n\treject?: (reason?: unknown) => void\n}\n\n/**\n * Dialog service for centralized dialog management.\n * Uses a single unified SchmancyDialog component for all dialog types.\n */\nexport class DialogService {\n\tprivate static instance: DialogService\n\n\tprivate static DEFAULT_OPTIONS: Partial<DialogOptions> = {\n\t\ttitle: undefined,\n\t\tsubtitle: undefined,\n\t\tconfirmText: undefined,\n\t\tcancelText: undefined,\n\t\tvariant: 'default',\n\t}\n\n\t// Single array to track all dialogs\n\tprivate activeDialogs: SchmancyDialog[] = []\n\n\tprivate dialogSubject = new Subject<DialogTarget>()\n\tprivate dismissSubject = new Subject<string>()\n\n\t// Lazy click position tracking - only initialized when first dialog opens\n\tprivate lastClickPosition: { x: number; y: number } | null = null\n\tprivate clickTrackingInitialized = false\n\n\tprivate constructor() {\n\t\tthis.setupDialogOpeningLogic()\n\t\tthis.setupDialogDismissLogic()\n\t\tthis.setupClickPositionTracking()\n\t}\n\n\tprivate setupClickPositionTracking() {\n\t\tif (this.clickTrackingInitialized || typeof document === 'undefined') return\n\t\tthis.clickTrackingInitialized = true\n\n\t\tfromEvent<PointerEvent>(document, 'pointerdown', { capture: true, passive: true })\n\t\t\t.pipe(\n\t\t\t\ttap(event => {\n\t\t\t\t\tthis.lastClickPosition = { x: event.clientX, y: event.clientY }\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tpublic static getInstance(): DialogService {\n\t\tif (!DialogService.instance) {\n\t\t\tDialogService.instance = new DialogService()\n\t\t}\n\t\treturn DialogService.instance\n\t}\n\n\tprivate setupDialogOpeningLogic() {\n\t\tthis.dialogSubject\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\n\t\t\t\t\t\t\tmap(e => e.detail.theme),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tconst uid = `dialog-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(ThemeWhereAreYou, {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t;(target as { uid?: string }).uid = uid\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\tmap(([theme, target]) => {\n\t\t\t\t\tconst targetContainer =\n\t\t\t\t\t\ttheme ||\n\t\t\t\t\t\ttarget.options.targetContainer ||\n\t\t\t\t\t\t(document.querySelector('schmancy-theme') as HTMLElement) ||\n\t\t\t\t\t\tdocument.body\n\n\t\t\t\t\tconst uid = (target as { uid?: string }).uid!\n\t\t\t\t\tconst dialog = document.createElement('schmancy-dialog') as SchmancyDialog\n\t\t\t\t\tdialog.setAttribute('uid', uid)\n\t\t\t\t\tdialog.style.setProperty('--schmancy-overlay-z', String(overlayStack.getNextZIndex()))\n\t\t\t\t\ttargetContainer.appendChild(dialog)\n\n\t\t\t\t\treturn { dialog, target }\n\t\t\t\t}),\n\t\t\t\ttap(({ dialog, target }) => {\n\t\t\t\t\tconst options = target.options\n\n\t\t\t\t\tif (target.type === 'confirm') {\n\t\t\t\t\t\t// Configure for confirm mode\n\t\t\t\t\t\tdialog.title = options.title\n\t\t\t\t\t\tdialog.subtitle = options.subtitle\n\t\t\t\t\t\tdialog.message = options.message\n\t\t\t\t\t\tdialog.confirmText = options.confirmText ?? 'Confirm'\n\t\t\t\t\t\tdialog.cancelText = options.cancelText ?? 'Cancel'\n\t\t\t\t\t\tdialog.variant = options.variant ?? 'default'\n\n\t\t\t\t\t\t// Handle custom content slot\n\t\t\t\t\t\tif (options.content) {\n\t\t\t\t\t\t\tconst contentContainer = document.createElement('div')\n\t\t\t\t\t\t\tcontentContainer.slot = 'content'\n\n\t\t\t\t\t\t\tif (typeof options.content === 'function') {\n\t\t\t\t\t\t\t\tconst result = options.content()\n\t\t\t\t\t\t\t\tif (result instanceof HTMLElement) {\n\t\t\t\t\t\t\t\t\tcontentContainer.appendChild(result)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trender(result, contentContainer)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (options.content instanceof HTMLElement) {\n\t\t\t\t\t\t\t\tcontentContainer.appendChild(options.content)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trender(options.content, contentContainer)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdialog.appendChild(contentContainer)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Configure for content mode\n\t\t\t\t\t\tdialog.hideActions = true\n\n\t\t\t\t\t\tif (target.content) {\n\t\t\t\t\t\t\tconst contentContainer = document.createElement('div')\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcontentContainer.style.display = 'contents'\n\t\t\t\t\t\t\tcontentContainer.classList.add('schmancy-dialog-content-container')\n\n\t\t\t\t\t\t\tif (typeof target.content === 'function') {\n\t\t\t\t\t\t\t\tconst result = target.content()\n\t\t\t\t\t\t\t\tif (result instanceof HTMLElement) {\n\t\t\t\t\t\t\t\t\tcontentContainer.appendChild(result)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trender(result, contentContainer)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (target.content instanceof HTMLElement) {\n\t\t\t\t\t\t\t\tcontentContainer.appendChild(target.content)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trender(target.content, contentContainer)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdialog.appendChild(contentContainer)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.activeDialogs.push(dialog)\n\t\t\t\t}),\n\t\t\t\ttap(({ dialog, target }) => {\n\t\t\t\t\tconst position = target.options.position || this.getDefaultPosition()\n\n\t\t\t\t\tdialog\n\t\t\t\t\t\t.show(position)\n\t\t\t\t\t\t.then((result: boolean) => {\n\t\t\t\t\t\t\ttarget.resolve?.(result)\n\n\t\t\t\t\t\t\t// Cleanup\n\t\t\t\t\t\t\tconst index = this.activeDialogs.indexOf(dialog)\n\t\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\t\tthis.activeDialogs.splice(index, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\t\t// Clean up content\n\t\t\t\t\t\t\tconst contentEl = dialog.querySelector('[slot=\"content\"]')\n\t\t\t\t\t\t\tif (contentEl) dialog.removeChild(contentEl)\n\n\t\t\t\t\t\t\tconst contentContainer = dialog.querySelector('.schmancy-dialog-content-container')\n\t\t\t\t\t\t\tif (contentContainer?.parentNode) {\n\t\t\t\t\t\t\t\tcontentContainer.parentNode.removeChild(contentContainer)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Clean up event subscriptions\n\t\t\t\t\t\t\tconst eventSubscriptions = (dialog as unknown as { _eventSubscriptions?: Subscription[] })\n\t\t\t\t\t\t\t\t._eventSubscriptions\n\t\t\t\t\t\t\teventSubscriptions?.forEach(sub => sub.unsubscribe())\n\n\t\t\t\t\t\t\t// Remove from DOM\n\t\t\t\t\t\t\tdialog.parentElement?.removeChild(dialog)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\t\ttarget.reject?.(error)\n\t\t\t\t\t\t})\n\n\t\t\t\t\t// Set up event listeners\n\t\t\t\t\tconst eventSubscriptions: Subscription[] = []\n\n\t\t\t\t\tif (target.options.onConfirm) {\n\t\t\t\t\t\tconst confirmSub = fromEvent(dialog, 'confirm').subscribe(() => {\n\t\t\t\t\t\t\ttarget.options.onConfirm!()\n\t\t\t\t\t\t\tconfirmSub.unsubscribe()\n\t\t\t\t\t\t})\n\t\t\t\t\t\teventSubscriptions.push(confirmSub)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (target.options.onCancel) {\n\t\t\t\t\t\tconst cancelSub = fromEvent(dialog, 'cancel').subscribe(() => {\n\t\t\t\t\t\t\ttarget.options.onCancel!()\n\t\t\t\t\t\t\tcancelSub.unsubscribe()\n\t\t\t\t\t\t})\n\t\t\t\t\t\teventSubscriptions.push(cancelSub)\n\t\t\t\t\t}\n\n\t\t\t\t\t;(dialog as unknown as { _eventSubscriptions: Subscription[] })._eventSubscriptions = eventSubscriptions\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate setupDialogDismissLogic() {\n\t\tthis.dismissSubject\n\t\t\t.pipe(\n\t\t\t\tswitchMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<DialogHereMortyEvent>(window, DialogHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(DialogWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid },\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\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),\n\t\t\t\ttap(([response]) => {\n\t\t\t\t\tif (response?.dialog) {\n\t\t\t\t\t\tresponse.dialog.hide(false)\n\n\t\t\t\t\t\tconst eventSubscriptions = (response.dialog as unknown as { _eventSubscriptions?: Subscription[] })\n\t\t\t\t\t\t\t._eventSubscriptions\n\t\t\t\t\t\teventSubscriptions?.forEach(sub => sub.unsubscribe())\n\n\t\t\t\t\t\tconst index = this.activeDialogs.indexOf(response.dialog as SchmancyDialog)\n\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\tthis.activeDialogs.splice(index, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\tresponse.dialog.parentElement?.removeChild(response.dialog)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tpublic confirm(options: DialogOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst completeOptions = {\n\t\t\t\t...DialogService.DEFAULT_OPTIONS,\n\t\t\t\t...options,\n\t\t\t}\n\n\t\t\tif (!completeOptions.position) {\n\t\t\t\tcompleteOptions.position = this.getDefaultPosition()\n\t\t\t}\n\n\t\t\tthis.dialogSubject.next({\n\t\t\t\toptions: completeOptions,\n\t\t\t\ttype: 'confirm',\n\t\t\t\tcontent: completeOptions.content,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic component(\n\t\tcontent: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult),\n\t\toptions: Omit<DialogOptions, 'content' | 'message'> = {},\n\t): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!options.position) {\n\t\t\t\toptions.position = this.getDefaultPosition()\n\t\t\t}\n\n\t\t\tthis.dialogSubject.next({\n\t\t\t\toptions: options as DialogOptions,\n\t\t\t\ttype: 'component',\n\t\t\t\tcontent,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic dismiss(): boolean {\n\t\tif (this.activeDialogs.length > 0) {\n\t\t\tconst dialog = this.activeDialogs[this.activeDialogs.length - 1]\n\t\t\tconst uid = dialog.getAttribute('uid')\n\n\t\t\tif (uid) {\n\t\t\t\tthis.dismissSubject.next(uid)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tpublic close(): boolean {\n\t\treturn this.dismiss()\n\t}\n\n\tpublic ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tconfirmText: 'Confirm',\n\t\t\tcancelText: 'Cancel',\n\t\t\tposition: event,\n\t\t})\n\t}\n\n\tpublic danger(options: Omit<DialogOptions, 'variant'>): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\t...options,\n\t\t\tvariant: 'danger',\n\t\t})\n\t}\n\n\t/**\n\t * Shows a prompt dialog with an input field.\n\t * Returns the input value if confirmed, null if cancelled.\n\t */\n\tpublic prompt(options: PromptOptions): Promise<string | null> {\n\t\treturn new Promise(resolve => {\n\t\t\tlet inputValue = options.defaultValue || ''\n\n\t\t\t// Create container for input\n\t\t\tconst container = document.createElement('div')\n\t\t\tcontainer.style.width = '100%'\n\t\t\tcontainer.style.minWidth = '280px'\n\n\t\t\tconst input = document.createElement('schmancy-input') as HTMLElement\n\t\t\tinput.setAttribute('type', options.inputType || 'text')\n\t\t\tif (options.label) input.setAttribute('label', options.label)\n\t\t\tif (options.placeholder) input.setAttribute('placeholder', options.placeholder)\n\t\t\tif (options.defaultValue) input.setAttribute('value', options.defaultValue)\n\n\t\t\tinput.addEventListener('input', (e: Event) => {\n\t\t\t\tinputValue = (e.target as HTMLInputElement).value\n\t\t\t})\n\n\t\t\tcontainer.appendChild(input)\n\n\t\t\tthis.confirm({\n\t\t\t\ttitle: options.title,\n\t\t\t\tmessage: options.message,\n\t\t\t\tconfirmText: options.confirmText ?? 'OK',\n\t\t\t\tcancelText: options.cancelText ?? 'Cancel',\n\t\t\t\tposition: options.position,\n\t\t\t\tcontent: container,\n\t\t\t}).then(confirmed => {\n\t\t\t\tresolve(confirmed ? inputValue : null)\n\t\t\t\treturn\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate getDefaultPosition(): { x: number; y: number } {\n\t\t// Use last click position if available, otherwise center of screen\n\t\tif (this.lastClickPosition) {\n\t\t\treturn { ...this.lastClickPosition }\n\t\t}\n\t\treturn {\n\t\t\tx: window.innerWidth / 2,\n\t\t\ty: window.innerHeight / 2,\n\t\t}\n\t}\n}\n\n/**\n * Eagerly instantiate so click tracking starts immediately on import,\n * not on first dialog open (which would miss the triggering click).\n */\nconst service = DialogService.getInstance()\n\n/**\n * Global dialog utility. Imperative modal API — open any element as a dialog,\n * or use the built-in `confirm` / `ask` / `danger` prompts. Returns Promises\n * that resolve when the user picks an action.\n *\n * @service\n * @summary Imperative modal dialogs and built-in confirm/ask/danger prompts.\n * @method confirm(options: DialogOptions) - Built-in confirm prompt. Returns Promise<boolean>.\n * @method ask(message, event?) - One-line yes/no prompt anchored to the triggering event.\n * @method danger(options) - Destructive-action confirm styled with the error palette.\n * @method component(element, options?) - Open any element as a modal.\n * @method dismiss(id?) - Dismiss a dialog by id, or the topmost dialog.\n */\nexport const $dialog = {\n\tconfirm: (options: DialogOptions): Promise<boolean> => {\n\t\treturn service.confirm(options)\n\t},\n\n\task: (message: string, event?: MouseEvent | TouchEvent): Promise<boolean> => {\n\t\treturn service.ask(message, event)\n\t},\n\n\tdanger: (options: Omit<DialogOptions, 'variant'>): Promise<boolean> => {\n\t\treturn service.danger(options)\n\t},\n\n\tprompt: (options: PromptOptions): Promise<string | null> => {\n\t\treturn service.prompt(options)\n\t},\n\n\tcomponent: (\n\t\tcontent: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult),\n\t\toptions?: Omit<DialogOptions, 'content' | 'message'>,\n\t): Promise<boolean> => {\n\t\treturn service.component(content, options)\n\t},\n\n\tdismiss: (): boolean => {\n\t\treturn service.dismiss()\n\t},\n\n\tclose: (): boolean => {\n\t\treturn service.close()\n\t},\n}\n\nexport default DialogService\n"],"mappings":"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"}
package/dist/dialog.cjs DELETED
@@ -1,89 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`),n=require(`./animation-CO_Csq84.cjs`),r=require(`./reduced-motion-Ds-HjMzn.cjs`),i=require(`./cursor-glow-Bulq-38P.cjs`),a=require(`./dialog-service-DJd5L0f5.cjs`);let o=require(`rxjs`),s=require(`rxjs/operators`),c=require(`lit/decorators.js`),l=require(`lit`),u=require(`lit/directives/ref.js`),d=require(`lit/directives/when.js`),f=require(`@floating-ui/dom`);var p=e=>class extends e{constructor(...e){super(...e),this.position={x:0,y:0},this.isMobile=!1,this.dragOffset=0,this.stopSwipe$=new o.Subject,this.lastFocusedElement=null,this.inertSiblings=[],this.animating=!1,this.dialogInternals=(()=>{try{return this.attachInternals()}catch{return}})()}isAnimating(){return this.animating}getDialogElement(){return null}getBackdropElement(){return null}getDragHandleElement(){return null}connectedCallback(){super.connectedCallback(),this.setupResizeListener()}setupResizeListener(){(0,o.fromEvent)(window,`resize`).pipe((0,o.map)(()=>window.innerWidth<640),(0,o.distinctUntilChanged)(),(0,o.filter)(()=>this.hasAttribute(`active`)),(0,o.tap)(e=>{if(this.isMobile!==e){this.isMobile=e,this.requestUpdate();let t=this.getDialogElement();t&&(e?(this.applyBottomSheetStyles(t),this.setupSwipeGesture(t)):(this.stopSwipe$.next(),this.setupPositioning()))}}),(0,o.takeUntil)(this.disconnecting)).subscribe()}setupSwipeGesture(e){this.stopSwipe$.next();let t=0,n=!1,r=0,i=this.getDragHandleElement();(0,o.merge)((0,o.fromEvent)(i||e,`touchstart`,{passive:!0}).pipe((0,o.tap)(a=>{let o=a.touches[0],s=e.getBoundingClientRect();o.clientY-s.top>80&&!i||(n=!0,t=o.clientY,r=0,this.dragOffset=0,e.style.transition=`none`,e.style.willChange=`transform`)})),(0,o.fromEvent)(e,`touchmove`,{passive:!1}).pipe((0,o.filter)(()=>n),(0,o.tap)(n=>{let i=n.touches[0].clientY-t;r=i<0?.2*i:i,this.dragOffset=Math.max(0,i),e.style.transform=`translateY(${r}px)`,n.preventDefault()})),(0,o.merge)((0,o.fromEvent)(e,`touchend`,{passive:!0}),(0,o.fromEvent)(e,`touchcancel`,{passive:!0})).pipe((0,o.filter)(()=>n),(0,o.tap)(()=>{n=!1,e.style.transition=`transform 0.3s cubic-bezier(0.16, 1, 0.3, 1)`,e.style.willChange=``;let t=e.getBoundingClientRect().height,r=Math.min(100,.25*t);this.dragOffset>r?(e.style.transform=`translateY(100%)`,this.hide(!1)):(e.style.transform=`translateY(0)`,this.dragOffset=0)}))).pipe((0,o.takeUntil)((0,o.merge)(this.stopSwipe$,this.disconnecting))).subscribe()}applyBottomSheetStyles(e){this.cleanupAutoUpdate&&=(this.cleanupAutoUpdate(),void 0),Object.assign(e.style,{position:``,left:``,top:``,transform:``,maxWidth:``})}async show(e){let t,n;if(this.cleanupAutoUpdate&&=(this.cleanupAutoUpdate(),void 0),this.isMobile=window.innerWidth<640,e)if(`clientX`in e)t=e.clientX,n=e.clientY;else if(`touches`in e&&e.touches.length)t=e.touches[0].clientX,n=e.touches[0].clientY;else{let r=e;t=r.x,n=r.y}else t=window.innerWidth/2,n=window.innerHeight/2;this.position={x:t,y:n},this.virtualReference={getBoundingClientRect:()=>new DOMRect(t,n,0,0)},this.requestUpdate(),await this.updateComplete,this.setAttribute(`active`,``),this.dialogInternals?.states.add(`open`),await this.updateComplete,this.lastFocusedElement=document.activeElement;let r=this.parentElement;if(r){this.inertSiblings=[];for(let e=0;e<r.children.length;e++){let t=r.children[e];t!==this&&`inert`in t&&(t.inert=!0,this.inertSiblings.push(t))}}(0,o.fromEvent)(document,`keydown`).pipe((0,o.filter)(e=>e.key===`Escape`),(0,o.tap)(e=>{e.preventDefault(),this.hide(!1)}),(0,o.takeUntil)((0,o.merge)(this.stopSwipe$,this.disconnecting))).subscribe();let i=this.getDialogElement(),a=window.innerWidth<1024?.6:.8;return!this.isMobile&&i&&(i.scrollHeight>window.innerHeight*a||i.scrollWidth>window.innerWidth*a)&&(this.isMobile=!0,this.requestUpdate(),await this.updateComplete),this.isMobile?i&&(this.applyBottomSheetStyles(i),this.setupSwipeGesture(i)):this.setupPositioning(),this.animating=!0,await this.animateIn(),this.animating=!1,new Promise(e=>{this.resolvePromise=e})}async animateIn(){let e=this.getDialogElement(),t=this.getBackdropElement();if(r.t.value)return t&&(t.style.opacity=`1`),void(e&&(e.style.opacity=`1`));if(t?.animate([{opacity:0},{opacity:1}],{duration:200,easing:n.s,fill:`forwards`}),e){let t=this.isMobile?[{opacity:0,transform:`translateY(100%)`},{opacity:1,transform:`translateY(0)`}]:[{opacity:0,transform:`scale(0.92) translateY(16px)`},{opacity:1,transform:`scale(1) translateY(0)`}];await e.animate(t,{duration:n.i,easing:n.n,fill:`forwards`}).finished}}async animateOut(){let e=this.getDialogElement(),t=this.getBackdropElement();if(r.t.value)return t&&(t.style.opacity=`0`),void(e&&(e.style.opacity=`0`));let i=[];if(t&&i.push(t.animate([{opacity:1},{opacity:0}],{duration:150,easing:n.s,fill:`forwards`}).finished),e){let t=this.isMobile?[{opacity:1,transform:`translateY(0)`},{opacity:0,transform:`translateY(100%)`}]:[{opacity:1,transform:`scale(1) translateY(0)`},{opacity:0,transform:`scale(0.95) translateY(8px)`}];i.push(e.animate(t,{duration:150,easing:n.o,fill:`forwards`}).finished)}await Promise.all(i)}async hide(e=!1){this.stopSwipe$.next(),this.animating=!0,await this.animateOut(),this.animating=!1,this.removeAttribute(`active`),this.dialogInternals?.states.delete(`open`);for(let e of this.inertSiblings)e.inert=!1;if(this.inertSiblings=[],this.lastFocusedElement){let e=this.lastFocusedElement;typeof e.focus==`function`&&e.focus(),this.lastFocusedElement=null}this.cleanupAutoUpdate&&=(this.cleanupAutoUpdate(),void 0),this.resolvePromise&&=(this.resolvePromise(e),void 0)}isCentered(){let e=.05*window.innerWidth,t=.05*window.innerHeight;return Math.abs(this.position.x-window.innerWidth/2)<e&&Math.abs(this.position.y-window.innerHeight/2)<t}setupPositioning(){let e=this.getDialogElement();e&&(this.isCentered()||this.virtualReference&&(this.cleanupAutoUpdate=(0,f.autoUpdate)(this.virtualReference,e,()=>this.updatePosition(e),{ancestorScroll:!0,ancestorResize:!0,elementResize:!0}),this.updatePosition(e)))}async updatePosition(e){if(!this.virtualReference)return;let{x:t,y:n}=await(0,f.computePosition)(this.virtualReference,e,{strategy:`fixed`,middleware:[(0,f.offset)(8),(0,f.autoPlacement)({padding:16,allowedPlacements:[`top-start`,`top-end`,`bottom-start`,`bottom-end`,`left-start`,`left-end`,`right-start`,`right-end`]}),(0,f.shift)({padding:16}),(0,f.size)({padding:16,apply({availableWidth:e,elements:t}){t.floating.style.maxWidth=`${e}px`}})]});Object.assign(e.style,{position:`fixed`,left:`${Math.round(t)}px`,top:`${Math.round(n)}px`,transform:`none`})}disconnectedCallback(){this.stopSwipe$.next(),this.cleanupAutoUpdate&&=(this.cleanupAutoUpdate(),void 0),super.disconnectedCallback()}},m=class extends p(e.n(l.css`
2
- :host {
3
- position: fixed;
4
- z-index: var(--schmancy-overlay-z, 10000);
5
- inset: 0;
6
- display: none;
7
- --dialog-width: fit-content;
8
- }
9
-
10
- :host([active]) {
11
- display: block;
12
- }
13
-
14
-
15
- /* Luminous glow around the dialog container */
16
- .dialog {
17
- box-shadow: 0 8px 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);
18
- border-radius: var(--schmancy-sys-shape-corner-large);
19
- }
20
-
21
- @media (prefers-reduced-motion: reduce) {
22
- .dialog { box-shadow: var(--schmancy-sys-elevation-2); }
23
- }
24
- `)){constructor(...e){super(...e),this.title=void 0,this.subtitle=void 0,this.message=void 0,this.confirmText=void 0,this.cancelText=void 0,this.variant=`default`,this.hideActions=!1,this._confirmDialogRef=(0,u.createRef)(),this._contentDialogRef=(0,u.createRef)(),this._backdropRef=(0,u.createRef)(),this._dragHandleRef=(0,u.createRef)(),this._a11yId=`schmancy-dialog-${Math.random().toString(36).slice(2,10)}`}get _titleId(){return`${this._a11yId}-title`}get _descId(){return`${this._a11yId}-desc`}getDialogElement(){return this._contentDialogRef.value?this._contentDialogRef.value:this._confirmDialogRef.value??null}getBackdropElement(){return this._backdropRef.value??null}getDragHandleElement(){return this._dragHandleRef.value??null}get isConfirmMode(){return!this.hideActions&&!(!this.confirmText?.trim()||!this.cancelText?.trim())}connectedCallback(){super.connectedCallback(),(0,o.fromEvent)(window,a.i).pipe((0,o.tap)(e=>{e.detail.uid===this.uid&&this.announcePresence()}),(0,s.takeUntil)(this.disconnecting)).subscribe()}announcePresence(){this.dispatchEvent(new CustomEvent(a.r,{detail:{dialog:this},bubbles:!0,composed:!0}))}handleConfirm(){this.hide(!0),this.dispatchEvent(new CustomEvent(`confirm`,{bubbles:!0,composed:!0}))}handleClose(){this.isAnimating()||(this.hide(!1),this.dispatchEvent(new CustomEvent(this.isConfirmMode?`cancel`:`close`,{bubbles:!0,composed:!0})))}renderDragHandle(){return l.html`
25
- <div ${(0,u.ref)(this._dragHandleRef)} class="dialog-drag-handle flex justify-center pt-2 pb-1 cursor-grab active:cursor-grabbing touch-none">
26
- <div class="w-10 h-1 rounded-full bg-outline-variant"></div>
27
- </div>
28
- `}render(){let e=this.isCentered(),t=this._contentSlotElements?.length>0,n={dialog:!0,fixed:!0,"w-[var(--dialog-width)]":!0,"max-w-[calc(100vw-2rem)]":!0,"max-h-[90dvh]":!0,"overflow-hidden":!0,"top-1/2":e,"left-1/2":e,"-translate-x-1/2":e,"-translate-y-1/2":e},r=this.isMobile?{dialog:!0,fixed:!0,"inset-x-0":!0,"bottom-0":!0,"w-full":!0,"max-h-[90dvh]":!0,"overflow-hidden":!0,"pb-[env(safe-area-inset-bottom)]":!0}:n,a=this.isMobile?`flex flex-col-reverse gap-2 w-full`:`flex justify-end gap-3`;if(this.isConfirmMode){let e=!!this.title?.trim(),n=!!this.subtitle?.trim(),o=!!this.message?.trim(),s=[n&&this._descId+`-sub`,o&&this._descId+`-msg`].filter(Boolean).join(` `)||``;return l.html`
29
- <div ${(0,u.ref)(this._backdropRef)} class="fixed inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 backdrop-brightness-105" @click=${this.handleClose}></div>
30
-
31
- <div
32
- ${(0,u.ref)(this._confirmDialogRef)}
33
- class=${this.classMap(r)}
34
- role="alertdialog"
35
- aria-modal="true"
36
- aria-labelledby=${e?this._titleId:l.nothing}
37
- aria-describedby=${s||l.nothing}
38
- >
39
- <schmancy-surface
40
- ${i.t({radius:250,intensity:.1})}
41
- rounded=${this.isMobile?`top`:`all`}
42
- type="glass"
43
- fill="all"
44
- class="overflow-hidden"
45
- >
46
- ${this.isMobile?this.renderDragHandle():null}
47
- <schmancy-scroll direction="vertical" hide class="p-4 pt-2">
48
- <schmancy-form @submit=${this.handleConfirm}>
49
- ${(0,d.when)(e,()=>l.html`
50
- <schmancy-typography id=${this._titleId} type="title" token="md" class="mb-1">${this.title}</schmancy-typography>
51
- ${(0,d.when)(n,()=>l.html`
52
- <schmancy-typography id="${this._descId}-sub" type="subtitle" token="xs" class="mb-2">
53
- ${this.subtitle}
54
- </schmancy-typography>
55
- `)}
56
- `)}
57
- ${t?l.html`<div class="mb-4"><slot name="content"></slot></div>`:(0,d.when)(o,()=>l.html`<schmancy-typography id="${this._descId}-msg" type="body" class="mb-4">${this.message}</schmancy-typography>`)}
58
- <div class=${a}>
59
- <schmancy-button
60
- variant="outlined"
61
- @click=${this.handleClose}
62
- class=${this.isMobile?`w-full`:``}
63
- >
64
- ${this.cancelText}
65
- </schmancy-button>
66
- <schmancy-button
67
- type="submit"
68
- variant="filled"
69
- class=${this.isMobile?`w-full`:``}
70
- >
71
- ${this.confirmText}
72
- </schmancy-button>
73
- </div>
74
- </schmancy-form>
75
- </schmancy-scroll>
76
- </schmancy-surface>
77
- </div>
78
- `}return l.html`
79
- <div ${(0,u.ref)(this._backdropRef)} class="fixed inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 backdrop-brightness-105" @click=${this.handleClose}></div>
80
-
81
- <section ${(0,u.ref)(this._contentDialogRef)} class=${this.classMap(r)} role="dialog" aria-modal="true">
82
- <schmancy-surface ${i.t({radius:250,intensity:.1})} rounded=${this.isMobile?`top`:`all`} type="glass" fill="all">
83
- ${this.isMobile?this.renderDragHandle():null}
84
- <schmancy-scroll direction="vertical" hide class="max-h-[85dvh]">
85
- <slot></slot>
86
- </schmancy-scroll>
87
- </schmancy-surface>
88
- </section>
89
- `}static async confirm(e){let t=document.querySelector(`schmancy-dialog[data-static-confirm]`);return t||(t=document.createElement(`schmancy-dialog`),t.setAttribute(`data-static-confirm`,``),document.body.appendChild(t)),t.title=e.title,t.subtitle=e.subtitle,t.message=e.message,t.confirmText=e.confirmText??`Confirm`,t.cancelText=e.cancelText??`Cancel`,t.variant=e.variant??`default`,e.width&&t.style.setProperty(`--dialog-width`,e.width),t.show(e.position)}static async ask(e,t){return this.confirm({message:e,position:t})}};t.t([(0,c.property)({type:String,reflect:!0})],m.prototype,`uid`,void 0),t.t([(0,c.property)({type:String})],m.prototype,`title`,void 0),t.t([(0,c.property)({type:String})],m.prototype,`subtitle`,void 0),t.t([(0,c.property)({type:String})],m.prototype,`message`,void 0),t.t([(0,c.property)({type:String,attribute:`confirm-text`})],m.prototype,`confirmText`,void 0),t.t([(0,c.property)({type:String,attribute:`cancel-text`})],m.prototype,`cancelText`,void 0),t.t([(0,c.property)({type:String})],m.prototype,`variant`,void 0),t.t([(0,c.property)({type:Boolean,attribute:`hide-actions`})],m.prototype,`hideActions`,void 0),t.t([(0,c.queryAssignedElements)({slot:`content`,flatten:!0})],m.prototype,`_contentSlotElements`,void 0),m=t.t([(0,c.customElement)(`schmancy-dialog`)],m),exports.$dialog=a.t,Object.defineProperty(exports,`ConfirmDialog`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`SchmancyDialog`,{enumerable:!0,get:function(){return m}}),exports.DialogBase=p,exports.DialogService=a.n;
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog.cjs","names":[],"sources":["../src/dialog/dialog-base.mixin.ts","../src/dialog/dialog.component.ts"],"sourcesContent":["import { autoPlacement, autoUpdate, computePosition, offset, shift, size } from '@floating-ui/dom'\nimport { LitElement } from 'lit'\nimport { distinctUntilChanged, filter, fromEvent, map, merge, Subject, takeUntil, tap } from 'rxjs'\nimport type { Constructor } from '../../mixins/constructor'\nimport type { IBaseMixin } from '../../mixins/baseElement'\nimport {\n\tBLACKBIRD_EASING,\n\tDURATION_ENTER,\n\tDURATION_EXIT,\n\tDURATION_BACKDROP,\n\tEASE_OUT,\n\tEASE_IN,\n} from '../utils/animation'\nimport { reducedMotion$ } from '../directives/reduced-motion'\n\n// Mobile breakpoint - matches Tailwind's sm breakpoint\nconst MOBILE_BREAKPOINT = 640\n\n// Tablet breakpoint\nconst TABLET_BREAKPOINT = 1024\n\n/**\n * Fraction of viewport a dialog can occupy before converting to bottom sheet.\n * Tablet (640–1024px): 60% — tighter screens benefit from bottom sheet sooner.\n * Desktop (>1024px): 80% — plenty of room, keep floating longer.\n */\nfunction largeContentThreshold(): number {\n\treturn window.innerWidth < TABLET_BREAKPOINT ? 0.6 : 0.8\n}\n\nexport interface DialogPosition {\n\tx: number\n\ty: number\n}\n\nexport interface VirtualReference {\n\tgetBoundingClientRect: () => DOMRect\n}\n\n/**\n * Interface for the DialogBase mixin methods\n */\nexport interface IDialogBaseMixin {\n\tposition: DialogPosition\n\tisMobile: boolean\n\tdragOffset: number\n\tshow(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean>\n\thide(result?: boolean): Promise<void>\n\tisCentered(): boolean\n\tisAnimating(): boolean\n}\n\n/**\n * Dialog mixin with smart positioning using Floating UI.\n *\n * On mobile (< 640px), automatically switches to bottom sheet mode\n * with swipe-to-dismiss gesture. On tablet/desktop, if content exceeds\n * a viewport-dependent threshold, also opens as bottom sheet.\n */\nexport const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(superClass: T) => {\n\tclass DialogBaseClass extends superClass {\n\t\tposition: DialogPosition = { x: 0, y: 0 }\n\t\tisMobile = false\n\t\tdragOffset = 0\n\n\t\tprotected resolvePromise?: (value: boolean) => void\n\t\tprotected cleanupAutoUpdate?: () => void\n\t\tprotected virtualReference?: VirtualReference\n\n\t\t// Subject to signal when to stop swipe gesture stream\n\t\tprivate readonly stopSwipe$ = new Subject<void>()\n\n\t\t// Focus trap state\n\t\tprivate lastFocusedElement: Element | null = null\n\t\tprivate inertSiblings: HTMLElement[] = []\n\n\t\t// Animation guard\n\t\tprivate animating = false\n\n\t\t/** ElementInternals — used for broadcasting `:state(open)` to consumers. */\n\t\tprotected dialogInternals: ElementInternals | undefined = (() => {\n\t\t\ttry {\n\t\t\t\treturn this.attachInternals()\n\t\t\t} catch {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t})()\n\n\t\t/**\n\t\t * Check if the dialog is currently animating\n\t\t */\n\t\tisAnimating(): boolean {\n\t\t\treturn this.animating\n\t\t}\n\n\t\t/**\n\t\t * Override in subclass to return the dialog element\n\t\t */\n\t\tprotected getDialogElement(): HTMLElement | null {\n\t\t\treturn null\n\t\t}\n\n\t\t/**\n\t\t * Override in subclass to return the backdrop element for animations\n\t\t */\n\t\tprotected getBackdropElement(): HTMLElement | null {\n\t\t\treturn null\n\t\t}\n\n\t\t/**\n\t\t * Override in subclass to return the drag handle element for swipe gestures\n\t\t */\n\t\tprotected getDragHandleElement(): HTMLElement | null {\n\t\t\treturn null\n\t\t}\n\n\t\tconnectedCallback(): void {\n\t\t\tsuper.connectedCallback()\n\t\t\tthis.setupResizeListener()\n\t\t}\n\n\t\t/**\n\t\t * Listen for resize to switch between mobile/desktop modes\n\t\t */\n\t\tprivate setupResizeListener(): void {\n\t\t\tfromEvent(window, 'resize')\n\t\t\t\t.pipe(\n\t\t\t\t\tmap(() => window.innerWidth < MOBILE_BREAKPOINT),\n\t\t\t\t\tdistinctUntilChanged(),\n\t\t\t\t\tfilter(() => this.hasAttribute('active')),\n\t\t\t\t\ttap(isMobile => {\n\t\t\t\t\t\tif (this.isMobile !== isMobile) {\n\t\t\t\t\t\t\tthis.isMobile = isMobile\n\t\t\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t\t\t\tconst dialog = this.getDialogElement()\n\t\t\t\t\t\t\tif (dialog) {\n\t\t\t\t\t\t\t\tif (isMobile) {\n\t\t\t\t\t\t\t\t\tthis.applyBottomSheetStyles(dialog)\n\t\t\t\t\t\t\t\t\tthis.setupSwipeGesture(dialog)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.stopSwipe$.next()\n\t\t\t\t\t\t\t\t\tthis.setupPositioning()\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\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe()\n\t\t}\n\n\t\t/**\n\t\t * Setup RxJS-based swipe gesture for dialog\n\t\t */\n\t\tprivate setupSwipeGesture(dialog: HTMLElement): void {\n\t\t\t// Stop any existing swipe gesture\n\t\t\tthis.stopSwipe$.next()\n\n\t\t\tlet dragStartY = 0\n\t\t\tlet isDragging = false\n\t\t\tlet currentY = 0\n\n\t\t\tconst dragHandle = this.getDragHandleElement()\n\t\t\tconst dragTarget = dragHandle || dialog\n\n\t\t\tconst touchStart$ = fromEvent<TouchEvent>(dragTarget, 'touchstart', { passive: true }).pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tconst touch = e.touches[0]\n\t\t\t\t\tconst rect = dialog.getBoundingClientRect()\n\t\t\t\t\tconst touchY = touch.clientY - rect.top\n\n\t\t\t\t\t// Only allow drag from top 80px or drag handle\n\t\t\t\t\tif (touchY > 80 && !dragHandle) return\n\n\t\t\t\t\tisDragging = true\n\t\t\t\t\tdragStartY = touch.clientY\n\t\t\t\t\tcurrentY = 0\n\t\t\t\t\tthis.dragOffset = 0\n\n\t\t\t\t\t// Disable transitions for immediate feedback\n\t\t\t\t\tdialog.style.transition = 'none'\n\t\t\t\t\tdialog.style.willChange = 'transform'\n\t\t\t\t}),\n\t\t\t)\n\n\t\t\tconst touchMove$ = fromEvent<TouchEvent>(dialog, 'touchmove', { passive: false }).pipe(\n\t\t\t\tfilter(() => isDragging),\n\t\t\t\ttap(e => {\n\t\t\t\t\tconst touch = e.touches[0]\n\t\t\t\t\tconst deltaY = touch.clientY - dragStartY\n\n\t\t\t\t\t// Rubber-band effect for upward drag\n\t\t\t\t\tif (deltaY < 0) {\n\t\t\t\t\t\tcurrentY = deltaY * 0.2\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentY = deltaY\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dragOffset = Math.max(0, deltaY)\n\n\t\t\t\t\t// Direct DOM update - 1:1 tracking\n\t\t\t\t\tdialog.style.transform = `translateY(${currentY}px)`\n\n\t\t\t\t\te.preventDefault()\n\t\t\t\t}),\n\t\t\t)\n\n\t\t\tconst touchEnd$ = merge(\n\t\t\t\tfromEvent<TouchEvent>(dialog, 'touchend', { passive: true }),\n\t\t\t\tfromEvent<TouchEvent>(dialog, 'touchcancel', { passive: true }),\n\t\t\t).pipe(\n\t\t\t\tfilter(() => isDragging),\n\t\t\t\ttap(() => {\n\t\t\t\t\tisDragging = false\n\n\t\t\t\t\t// Re-enable transitions for snap animation\n\t\t\t\t\tdialog.style.transition = 'transform 0.3s cubic-bezier(0.16, 1, 0.3, 1)'\n\t\t\t\t\tdialog.style.willChange = ''\n\n\t\t\t\t\tconst dialogHeight = dialog.getBoundingClientRect().height\n\t\t\t\t\tconst threshold = Math.min(100, dialogHeight * 0.25)\n\n\t\t\t\t\tif (this.dragOffset > threshold) {\n\t\t\t\t\t\t// Dismiss - animate out\n\t\t\t\t\t\tdialog.style.transform = 'translateY(100%)'\n\t\t\t\t\t\tthis.hide(false)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Snap back\n\t\t\t\t\t\tdialog.style.transform = 'translateY(0)'\n\t\t\t\t\t\tthis.dragOffset = 0\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\n\t\t\t// Merge all touch streams and subscribe\n\t\t\tmerge(touchStart$, touchMove$, touchEnd$)\n\t\t\t\t.pipe(takeUntil(merge(this.stopSwipe$, this.disconnecting)))\n\t\t\t\t.subscribe()\n\t\t}\n\n\t\t/**\n\t\t * Apply bottom sheet styles for mobile\n\t\t */\n\t\tprivate applyBottomSheetStyles(dialog: HTMLElement): void {\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tObject.assign(dialog.style, {\n\t\t\t\tposition: '',\n\t\t\t\tleft: '',\n\t\t\t\ttop: '',\n\t\t\t\ttransform: '',\n\t\t\t\tmaxWidth: '',\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Show the dialog at a specific position\n\t\t */\n\t\tasync show(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean> {\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tthis.isMobile = window.innerWidth < MOBILE_BREAKPOINT\n\n\t\t\tlet x: number, y: number\n\n\t\t\tif (!positionOrEvent) {\n\t\t\t\tx = window.innerWidth / 2\n\t\t\t\ty = window.innerHeight / 2\n\t\t\t} else if ('clientX' in positionOrEvent) {\n\t\t\t\tx = positionOrEvent.clientX\n\t\t\t\ty = positionOrEvent.clientY\n\t\t\t} else if ('touches' in positionOrEvent && positionOrEvent.touches.length) {\n\t\t\t\tx = positionOrEvent.touches[0].clientX\n\t\t\t\ty = positionOrEvent.touches[0].clientY\n\t\t\t} else {\n\t\t\t\tconst pos = positionOrEvent as DialogPosition\n\t\t\t\tx = pos.x\n\t\t\t\ty = pos.y\n\t\t\t}\n\n\t\t\tthis.position = { x, y }\n\n\t\t\tthis.virtualReference = {\n\t\t\t\tgetBoundingClientRect: () => new DOMRect(x, y, 0, 0),\n\t\t\t}\n\n\t\t\tthis.requestUpdate()\n\t\t\tawait this.updateComplete\n\n\t\t\tthis.setAttribute('active', '')\n\t\t\tthis.dialogInternals?.states.add('open')\n\t\t\tawait this.updateComplete\n\n\t\t\t// Save focus and set siblings to inert for focus trap\n\t\t\tthis.lastFocusedElement = document.activeElement\n\t\t\tconst parent = this.parentElement\n\t\t\tif (parent) {\n\t\t\t\tthis.inertSiblings = []\n\t\t\t\tfor (let i = 0; i < parent.children.length; i++) {\n\t\t\t\t\tconst sibling = parent.children[i] as HTMLElement\n\t\t\t\t\tif (sibling !== this && 'inert' in sibling) {\n\t\t\t\t\t\tsibling.inert = true\n\t\t\t\t\t\tthis.inertSiblings.push(sibling)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Escape key listener\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\te.preventDefault()\n\t\t\t\t\t\tthis.hide(false)\n\t\t\t\t\t}),\n\t\t\t\t\ttakeUntil(merge(this.stopSwipe$, this.disconnecting)),\n\t\t\t\t)\n\t\t\t\t.subscribe()\n\n\t\t\tconst dialog = this.getDialogElement()\n\n\t\t\t// If content exceeds viewport threshold on desktop, treat as bottom sheet\n\t\t\tconst threshold = largeContentThreshold()\n\t\t\tif (\n\t\t\t\t!this.isMobile &&\n\t\t\t\tdialog &&\n\t\t\t\t(dialog.scrollHeight > window.innerHeight * threshold ||\n\t\t\t\t\tdialog.scrollWidth > window.innerWidth * threshold)\n\t\t\t) {\n\t\t\t\tthis.isMobile = true\n\t\t\t\tthis.requestUpdate()\n\t\t\t\tawait this.updateComplete\n\t\t\t}\n\n\t\t\tif (this.isMobile) {\n\t\t\t\tif (dialog) {\n\t\t\t\t\tthis.applyBottomSheetStyles(dialog)\n\t\t\t\t\tthis.setupSwipeGesture(dialog)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setupPositioning()\n\t\t\t}\n\n\t\t\tthis.animating = true\n\t\t\tawait this.animateIn()\n\t\t\tthis.animating = false\n\n\t\t\treturn new Promise<boolean>(resolve => {\n\t\t\t\tthis.resolvePromise = resolve\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Animate dialog entrance\n\t\t */\n\t\tprivate async animateIn(): Promise<void> {\n\t\t\tconst dialog = this.getDialogElement()\n\t\t\tconst backdrop = this.getBackdropElement()\n\n\t\t\tif (reducedMotion$.value) {\n\t\t\t\tif (backdrop) backdrop.style.opacity = '1'\n\t\t\t\tif (dialog) dialog.style.opacity = '1'\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tbackdrop?.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\tduration: DURATION_BACKDROP,\n\t\t\t\teasing: EASE_OUT,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\n\t\t\tif (dialog) {\n\t\t\t\tconst animation = this.isMobile\n\t\t\t\t\t? [\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: [\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'scale(0.92) translateY(16px)' },\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'scale(1) translateY(0)' },\n\t\t\t\t\t\t]\n\n\t\t\t\tawait dialog.animate(animation, {\n\t\t\t\t\tduration: DURATION_ENTER,\n\t\t\t\t\teasing: BLACKBIRD_EASING,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t}).finished\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Animate dialog exit\n\t\t */\n\t\tprivate async animateOut(): Promise<void> {\n\t\t\tconst dialog = this.getDialogElement()\n\t\t\tconst backdrop = this.getBackdropElement()\n\n\t\t\tif (reducedMotion$.value) {\n\t\t\t\tif (backdrop) backdrop.style.opacity = '0'\n\t\t\t\tif (dialog) dialog.style.opacity = '0'\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst animations: Promise<Animation>[] = []\n\n\t\t\tif (backdrop) {\n\t\t\t\tanimations.push(\n\t\t\t\t\tbackdrop.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\t\t\tduration: DURATION_EXIT,\n\t\t\t\t\t\teasing: EASE_OUT,\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t}).finished,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (dialog) {\n\t\t\t\tconst animation = this.isMobile\n\t\t\t\t\t? [\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: [\n\t\t\t\t\t\t\t{ opacity: 1, transform: 'scale(1) translateY(0)' },\n\t\t\t\t\t\t\t{ opacity: 0, transform: 'scale(0.95) translateY(8px)' },\n\t\t\t\t\t\t]\n\n\t\t\t\tanimations.push(\n\t\t\t\t\tdialog.animate(animation, {\n\t\t\t\t\t\tduration: DURATION_EXIT,\n\t\t\t\t\t\teasing: EASE_IN,\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t}).finished,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tawait Promise.all(animations)\n\t\t}\n\n\t\t/**\n\t\t * Hide the dialog\n\t\t */\n\t\tasync hide(result = false): Promise<void> {\n\t\t\tthis.stopSwipe$.next()\n\n\t\t\tthis.animating = true\n\t\t\tawait this.animateOut()\n\t\t\tthis.animating = false\n\n\t\t\tthis.removeAttribute('active')\n\t\t\tthis.dialogInternals?.states.delete('open')\n\n\t\t\t// Restore inert siblings\n\t\t\tfor (const el of this.inertSiblings) {\n\t\t\t\tel.inert = false\n\t\t\t}\n\t\t\tthis.inertSiblings = []\n\n\t\t\t// Restore focus\n\t\t\tif (this.lastFocusedElement) {\n\t\t\t\tconst el = this.lastFocusedElement as HTMLElement\n\t\t\t\tif (typeof el.focus === 'function') {\n\t\t\t\t\tel.focus()\n\t\t\t\t}\n\t\t\t\tthis.lastFocusedElement = null\n\t\t\t}\n\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tif (this.resolvePromise) {\n\t\t\t\tthis.resolvePromise(result)\n\t\t\t\tthis.resolvePromise = undefined\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Check if position is near center (only skip Floating UI for truly centered dialogs)\n\t\t */\n\t\tisCentered(): boolean {\n\t\t\t// Use tight tolerance (5%) - only skip Floating UI when position is very close to center\n\t\t\tconst toleranceX = window.innerWidth * 0.05\n\t\t\tconst toleranceY = window.innerHeight * 0.05\n\n\t\t\treturn (\n\t\t\t\tMath.abs(this.position.x - window.innerWidth / 2) < toleranceX &&\n\t\t\t\tMath.abs(this.position.y - window.innerHeight / 2) < toleranceY\n\t\t\t)\n\t\t}\n\n\t\t/**\n\t\t * Setup Floating UI positioning for desktop\n\t\t */\n\t\tprivate setupPositioning(): void {\n\t\t\tconst dialog = this.getDialogElement()\n\t\t\tif (!dialog) return\n\n\t\t\tif (this.isCentered()) return\n\n\t\t\tif (this.virtualReference) {\n\t\t\t\tthis.cleanupAutoUpdate = autoUpdate(\n\t\t\t\t\tthis.virtualReference,\n\t\t\t\t\tdialog,\n\t\t\t\t\t() => this.updatePosition(dialog),\n\t\t\t\t\t{\n\t\t\t\t\t\tancestorScroll: true,\n\t\t\t\t\t\tancestorResize: true,\n\t\t\t\t\t\telementResize: true,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tthis.updatePosition(dialog)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Update position using Floating UI\n\t\t */\n\t\tprivate async updatePosition(dialog: HTMLElement): Promise<void> {\n\t\t\tif (!this.virtualReference) return\n\n\t\t\tconst padding = 16\n\n\t\t\tconst { x, y } = await computePosition(this.virtualReference, dialog, {\n\t\t\t\tstrategy: 'fixed',\n\t\t\t\tmiddleware: [\n\t\t\t\t\toffset(8),\n\t\t\t\t\tautoPlacement({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tallowedPlacements: [\n\t\t\t\t\t\t\t'top-start',\n\t\t\t\t\t\t\t'top-end',\n\t\t\t\t\t\t\t'bottom-start',\n\t\t\t\t\t\t\t'bottom-end',\n\t\t\t\t\t\t\t'left-start',\n\t\t\t\t\t\t\t'left-end',\n\t\t\t\t\t\t\t'right-start',\n\t\t\t\t\t\t\t'right-end',\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\t\t\t\t\tshift({ padding }),\n\t\t\t\t\tsize({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tapply({ availableWidth, elements }) {\n\t\t\t\t\t\t\telements.floating.style.maxWidth = `${availableWidth}px`\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tObject.assign(dialog.style, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tleft: `${Math.round(x)}px`,\n\t\t\t\ttop: `${Math.round(y)}px`,\n\t\t\t\ttransform: 'none',\n\t\t\t})\n\t\t}\n\n\t\tdisconnectedCallback(): void {\n\t\t\tthis.stopSwipe$.next()\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\n\treturn DialogBaseClass as Constructor<IDialogBaseMixin> & T\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html, nothing } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { fromEvent, tap } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { DialogBase } from './dialog-base.mixin'\nimport { DialogHereMorty, DialogWhereAreYouRicky, DialogWhereAreYouRickyEvent } from './dialog-events'\n\n/**\n * Unified dialog component that handles both content-only and confirm modes.\n *\n * @element schmancy-dialog\n * @slot default - Content slot for dialog body (used in content mode)\n * @slot content - Named slot for custom content in confirm mode\n *\n * @example Content mode (no buttons):\n * ```html\n * <schmancy-dialog>\n * <my-custom-content></my-custom-content>\n * </schmancy-dialog>\n * ```\n *\n * @example Confirm mode (with buttons):\n * ```html\n * <schmancy-dialog\n * title=\"Confirm Action\"\n * message=\"Are you sure?\"\n * confirm-text=\"Yes\"\n * cancel-text=\"No\"\n * ></schmancy-dialog>\n * ```\n */\n@customElement('schmancy-dialog')\nexport class SchmancyDialog extends DialogBase(\n\t$LitElement(css`\n\t\t:host {\n\t\t\tposition: fixed;\n\t\t\tz-index: var(--schmancy-overlay-z, 10000);\n\t\t\tinset: 0;\n\t\t\tdisplay: none;\n\t\t\t--dialog-width: fit-content;\n\t\t}\n\n\t\t:host([active]) {\n\t\t\tdisplay: block;\n\t\t}\n\n\n\t\t/* Luminous glow around the dialog container */\n\t\t.dialog {\n\t\t\tbox-shadow: 0 8px 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t\t\tborder-radius: var(--schmancy-sys-shape-corner-large);\n\t\t}\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t.dialog { box-shadow: var(--schmancy-sys-elevation-2); }\n\t\t}\n\t`),\n) {\n\t/**\n\t * Unique identifier for the dialog instance\n\t */\n\t@property({ type: String, reflect: true }) uid!: string\n\n\t/**\n\t * Dialog title (enables confirm mode when set)\n\t */\n\t@property({ type: String }) title: string | undefined = undefined\n\n\t/**\n\t * Dialog subtitle\n\t */\n\t@property({ type: String }) subtitle: string | undefined = undefined\n\n\t/**\n\t * Dialog message\n\t */\n\t@property({ type: String }) message: string | undefined = undefined\n\n\t/**\n\t * Text for confirm button (enables confirm mode when set with cancelText)\n\t */\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText: string | undefined = undefined\n\n\t/**\n\t * Text for cancel button\n\t */\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText: string | undefined = undefined\n\n\t/**\n\t * Dialog variant (affects button colors in confirm mode)\n\t */\n\t@property({ type: String }) variant: 'default' | 'danger' = 'default'\n\n\t/**\n\t * Whether to hide action buttons (force content mode)\n\t */\n\t@property({ type: Boolean, attribute: 'hide-actions' }) hideActions = false\n\n\t/**\n\t * Slotted children in the named \"content\" slot (confirm mode custom content)\n\t */\n\t@queryAssignedElements({ slot: 'content', flatten: true })\n\tprivate _contentSlotElements!: HTMLElement[]\n\n\t/**\n\t * Ref to the confirm mode wrapper div\n\t */\n\tprivate _confirmDialogRef: Ref<HTMLElement> = createRef()\n\n\t/**\n\t * Ref to the content mode section element\n\t */\n\tprivate _contentDialogRef: Ref<HTMLElement> = createRef()\n\n\t/**\n\t * Ref to the backdrop element for animations\n\t */\n\tprivate _backdropRef: Ref<HTMLElement> = createRef()\n\n\t/**\n\t * Ref to the drag handle element for swipe gestures\n\t */\n\tprivate _dragHandleRef: Ref<HTMLElement> = createRef()\n\n\t/**\n\t * Stable per-instance id used for ARIA labelledby/describedby wiring\n\t */\n\tprivate readonly _a11yId = `schmancy-dialog-${Math.random().toString(36).slice(2, 10)}`\n\tprivate get _titleId() { return `${this._a11yId}-title` }\n\tprivate get _descId() { return `${this._a11yId}-desc` }\n\n\t/**\n\t * Return the dialog element for positioning/size measurement.\n\t * In content mode, returns the first slotted child (the actual component).\n\t * In confirm mode, returns the wrapper div.\n\t */\n\tprotected getDialogElement(): HTMLElement | null {\n\t\t// Content mode: use the section wrapper (slotted content may be display:contents)\n\t\tif (this._contentDialogRef.value) return this._contentDialogRef.value\n\t\t// Confirm mode: use the wrapper div\n\t\treturn this._confirmDialogRef.value ?? null\n\t}\n\n\t/**\n\t * Return the backdrop element for animations\n\t */\n\tprotected getBackdropElement(): HTMLElement | null {\n\t\treturn this._backdropRef.value ?? null\n\t}\n\n\t/**\n\t * Return the drag handle element for swipe gestures\n\t */\n\tprotected getDragHandleElement(): HTMLElement | null {\n\t\treturn this._dragHandleRef.value ?? null\n\t}\n\n\t/**\n\t * Check if dialog is in confirm mode (has buttons)\n\t */\n\tprivate get isConfirmMode(): boolean {\n\t\tif (this.hideActions) return false\n\t\treturn !!(this.confirmText?.trim() && this.cancelText?.trim())\n\t}\n\n\t/**\n\t * Handle component connection to DOM\n\t */\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Listen for \"where are you ricky\" events\n\t\tfromEvent<DialogWhereAreYouRickyEvent>(window, DialogWhereAreYouRicky)\n\t\t\t.pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Announce this dialog's presence to the service\n\t */\n\tprivate announcePresence(): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(DialogHereMorty, {\n\t\t\t\tdetail: { dialog: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle confirm action\n\t */\n\tprivate handleConfirm(): void {\n\t\tthis.hide(true)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('confirm', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle cancel/close action\n\t */\n\tprivate handleClose(): void {\n\t\tif (this.isAnimating()) return\n\t\tthis.hide(false)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(this.isConfirmMode ? 'cancel' : 'close', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Render drag handle for mobile bottom sheet\n\t */\n\tprivate renderDragHandle() {\n\t\treturn html`\n\t\t\t<div ${ref(this._dragHandleRef)} class=\"dialog-drag-handle flex justify-center pt-2 pb-1 cursor-grab active:cursor-grabbing touch-none\">\n\t\t\t\t<div class=\"w-10 h-1 rounded-full bg-outline-variant\"></div>\n\t\t\t</div>\n\t\t`\n\t}\n\n\trender() {\n\t\tconst isCentered = this.isCentered()\n\t\tconst hasCustomContent = this._contentSlotElements?.length > 0\n\n\t\t// Mobile bottom sheet classes\n\t\tconst mobileDialogClasses = {\n\t\t\tdialog: true,\n\t\t\tfixed: true,\n\t\t\t'inset-x-0': true,\n\t\t\t'bottom-0': true,\n\t\t\t'w-full': true,\n\t\t\t'max-h-[90dvh]': true,\n\t\t\t'overflow-hidden': true,\n\t\t\t// Safe area padding for notched devices\n\t\t\t'pb-[env(safe-area-inset-bottom)]': true,\n\t\t}\n\n\t\t// Desktop dialog classes\n\t\tconst desktopDialogClasses = {\n\t\t\tdialog: true,\n\t\t\tfixed: true,\n\t\t\t'w-[var(--dialog-width)]': true,\n\t\t\t'max-w-[calc(100vw-2rem)]': true,\n\t\t\t'max-h-[90dvh]': true,\n\t\t\t'overflow-hidden': true,\n\t\t\t'top-1/2': isCentered,\n\t\t\t'left-1/2': isCentered,\n\t\t\t'-translate-x-1/2': isCentered,\n\t\t\t'-translate-y-1/2': isCentered,\n\t\t}\n\n\t\tconst dialogClasses = this.isMobile ? mobileDialogClasses : desktopDialogClasses\n\n\t\t// Button classes - stack vertically on mobile\n\t\tconst buttonContainerClasses = this.isMobile\n\t\t\t? 'flex flex-col-reverse gap-2 w-full'\n\t\t\t: 'flex justify-end gap-3'\n\n\t\t// Confirm mode: with title/buttons\n\t\tif (this.isConfirmMode) {\n\t\t\tconst hasTitle = !!this.title?.trim()\n\t\t\tconst hasSubtitle = !!this.subtitle?.trim()\n\t\t\tconst hasMessage = !!this.message?.trim()\n\t\t\tconst describedBy = [hasSubtitle && this._descId + '-sub', hasMessage && this._descId + '-msg']\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(' ') || ''\n\t\t\treturn html`\n\t\t\t\t<div ${ref(this._backdropRef)} class=\"fixed inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 backdrop-brightness-105\" @click=${this.handleClose}></div>\n\n\t\t\t\t<div\n\t\t\t\t\t${ref(this._confirmDialogRef)}\n\t\t\t\t\tclass=${this.classMap(dialogClasses)}\n\t\t\t\t\trole=\"alertdialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-labelledby=${hasTitle ? this._titleId : nothing}\n\t\t\t\t\taria-describedby=${describedBy || nothing}\n\t\t\t\t>\n\t\t\t\t\t<schmancy-surface\n\t\t\t\t\t\t${cursorGlow({ radius: 250, intensity: 0.1 })}\n\t\t\t\t\t\trounded=${this.isMobile ? 'top' : 'all'}\n\t\t\t\t\t\ttype=\"glass\"\n\t\t\t\t\t\tfill=\"all\"\n\t\t\t\t\t\tclass=\"overflow-hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.isMobile ? this.renderDragHandle() : null}\n\t\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-4 pt-2\">\n\t\t\t\t\t\t\t<schmancy-form @submit=${this.handleConfirm}>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\thasTitle,\n\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography id=${this._titleId} type=\"title\" token=\"md\" class=\"mb-1\">${this.title}</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\t\t\thasSubtitle,\n\t\t\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t\t\t<schmancy-typography id=\"${this._descId}-sub\" type=\"subtitle\" token=\"xs\" class=\"mb-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t${this.subtitle}\n\t\t\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t${hasCustomContent\n\t\t\t\t\t\t\t\t\t? html`<div class=\"mb-4\"><slot name=\"content\"></slot></div>`\n\t\t\t\t\t\t\t\t\t: when(\n\t\t\t\t\t\t\t\t\t\t\thasMessage,\n\t\t\t\t\t\t\t\t\t\t\t() => html`<schmancy-typography id=\"${this._descId}-msg\" type=\"body\" class=\"mb-4\">${this.message}</schmancy-typography>`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div class=${buttonContainerClasses}>\n\t\t\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\t\t\t\t@click=${this.handleClose}\n\t\t\t\t\t\t\t\t\t\tclass=${this.isMobile ? 'w-full' : ''}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t${this.cancelText}\n\t\t\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"filled\"\n\t\t\t\t\t\t\t\t\t\tclass=${this.isMobile ? 'w-full' : ''}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t${this.confirmText}\n\t\t\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</schmancy-form>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Content mode: minimal, just slot\n\t\treturn html`\n\t\t\t<div ${ref(this._backdropRef)} class=\"fixed inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 backdrop-brightness-105\" @click=${this.handleClose}></div>\n\n\t\t\t<section ${ref(this._contentDialogRef)} class=${this.classMap(dialogClasses)} role=\"dialog\" aria-modal=\"true\">\n\t\t\t\t<schmancy-surface ${cursorGlow({ radius: 250, intensity: 0.1 })} rounded=${this.isMobile ? 'top' : 'all'} type=\"glass\" fill=\"all\">\n\t\t\t\t\t${this.isMobile ? this.renderDragHandle() : null}\n\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"max-h-[85dvh]\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t</schmancy-surface>\n\t\t\t</section>\n\t\t`\n\t}\n\n\t/**\n\t * Static helper for confirm dialogs\n\t */\n\tstatic async confirm(options: {\n\t\ttitle?: string\n\t\tsubtitle?: string\n\t\tmessage?: string\n\t\tconfirmText?: string\n\t\tcancelText?: string\n\t\tvariant?: 'default' | 'danger'\n\t\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\t\twidth?: string\n\t}): Promise<boolean> {\n\t\tlet dialog = document.querySelector('schmancy-dialog[data-static-confirm]') as SchmancyDialog\n\n\t\tif (!dialog) {\n\t\t\tdialog = document.createElement('schmancy-dialog') as SchmancyDialog\n\t\t\tdialog.setAttribute('data-static-confirm', '')\n\t\t\tdocument.body.appendChild(dialog)\n\t\t}\n\n\t\t// Set options\n\t\tdialog.title = options.title\n\t\tdialog.subtitle = options.subtitle\n\t\tdialog.message = options.message\n\t\tdialog.confirmText = options.confirmText ?? 'Confirm'\n\t\tdialog.cancelText = options.cancelText ?? 'Cancel'\n\t\tdialog.variant = options.variant ?? 'default'\n\t\tif (options.width) dialog.style.setProperty('--dialog-width', options.width)\n\n\t\treturn dialog.show(options.position)\n\t}\n\n\t/**\n\t * Simple shorthand - just pass message and optionally an event\n\t */\n\tstatic async ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tposition: event,\n\t\t})\n\t}\n}\n\n// Alias for backward compatibility\nexport { SchmancyDialog as ConfirmDialog }\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dialog': SchmancyDialog\n\t}\n}\n"],"mappings":"4hBA2DA,IAAa,EAA8D,GAC1E,cAA8B,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,EAAA,CAAA,KAAA,SACF,CAAE,EAAG,EAAG,EAAG,EAAA,CAAA,KAAA,SAAA,CAC3B,EAAA,KAAA,WACE,EAAA,KAAA,WAOiB,IAAI,EAAA,QAAA,KAAA,mBAGW,KAAA,KAAA,cACN,EAAA,CAAA,KAAA,UAAA,CAGnB,EAAA,KAAA,qBAAA,CAInB,GAAA,CACC,OAAO,KAAK,iBAAA,MAAA,CAEZ,WAAA,CAOF,aAAA,CACC,OAAO,KAAK,UAMb,kBAAA,CACC,OAAO,KAMR,oBAAA,CACC,OAAO,KAMR,sBAAA,CACC,OAAO,KAGR,mBAAA,CACC,MAAM,mBAAA,CACN,KAAK,qBAAA,CAMN,qBAAA,EACC,EAAA,EAAA,WAAU,OAAQ,SAAA,CAChB,MAAA,EAAA,EAAA,SACU,OAAO,WA/GI,IAAA,EA+G2B,EAAA,EAAA,uBAAA,EAC1B,EAAA,EAAA,YACT,KAAK,aAAa,SAAA,CAAA,EAAU,EAAA,EAAA,KACrC,GAAA,CACH,GAAI,KAAK,WAAa,EAAU,CAC/B,KAAK,SAAW,EAChB,KAAK,eAAA,CACL,IAAM,EAAS,KAAK,kBAAA,CAChB,IACC,GACH,KAAK,uBAAuB,EAAA,CAC5B,KAAK,kBAAkB,EAAA,GAEvB,KAAK,WAAW,MAAA,CAChB,KAAK,kBAAA,KAAA,EAIP,EAAA,EAAA,WACQ,KAAK,cAAA,CAAA,CAEf,WAAA,CAMH,kBAA0B,EAAA,CAEzB,KAAK,WAAW,MAAA,CAEhB,IAAI,EAAa,EACb,EAAA,CAAa,EACb,EAAW,EAET,EAAa,KAAK,sBAAA,EAyExB,EAAA,EAAA,QAAA,EAAA,EAAA,WAxEmB,GAAc,EAEqB,aAAc,CAAE,QAAA,CAAS,EAAA,CAAA,CAAQ,MAAA,EAAA,EAAA,KAClF,GAAA,CACH,IAAM,EAAQ,EAAE,QAAQ,GAClB,EAAO,EAAO,uBAAA,CACL,EAAM,QAAU,EAAK,IAGvB,IAAA,CAAO,IAEpB,EAAA,CAAa,EACb,EAAa,EAAM,QACnB,EAAW,EACX,KAAK,WAAa,EAGlB,EAAO,MAAM,WAAa,OAC1B,EAAO,MAAM,WAAa,cAAA,CAAA,EAsDtB,EAAA,EAAA,WAlDmC,EAAQ,YAAa,CAAE,QAAA,CAAS,EAAA,CAAA,CAAS,MAAA,EAAA,EAAA,YACpE,EAAA,EAAW,EAAA,EAAA,KACpB,GAAA,CAEH,IAAM,EADQ,EAAE,QAAQ,GACH,QAAU,EAI9B,EADG,EAAS,EACQ,GAAT,EAEA,EAGZ,KAAK,WAAa,KAAK,IAAI,EAAG,EAAA,CAG9B,EAAO,MAAM,UAAY,cAAc,EAAA,KAEvC,EAAE,gBAAA,EAAA,CAAA,EAgCe,EAAA,EAAA,QAAA,EAAA,EAAA,WA3BI,EAAQ,WAAY,CAAE,QAAA,CAAS,EAAA,CAAA,EAAO,EAAA,EAAA,WACtC,EAAQ,cAAe,CAAE,QAAA,CAAS,EAAA,CAAA,CAAA,CACvD,MAAA,EAAA,EAAA,YACY,EAAA,EAAW,EAAA,EAAA,SAAA,CAEvB,EAAA,CAAa,EAGb,EAAO,MAAM,WAAa,+CAC1B,EAAO,MAAM,WAAa,GAE1B,IAAM,EAAe,EAAO,uBAAA,CAAwB,OAC9C,EAAY,KAAK,IAAI,IAAoB,IAAf,EAAA,CAE5B,KAAK,WAAa,GAErB,EAAO,MAAM,UAAY,mBACzB,KAAK,KAAA,CAAK,EAAA,GAGV,EAAO,MAAM,UAAY,gBACzB,KAAK,WAAa,IAAA,CAAA,CAAA,CAOnB,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,OAAqB,KAAK,WAAY,KAAK,cAAA,CAAA,CAAA,CAC3C,WAAA,CAMH,uBAA+B,EAAA,CAC1B,AAEH,KAAK,qBADL,KAAK,mBAAA,CACA,IAAoB,IAG1B,OAAO,OAAO,EAAO,MAAO,CAC3B,SAAU,GACV,KAAM,GACN,IAAK,GACL,UAAW,GACX,SAAU,GAAA,CAAA,CAOZ,MAAA,KAAW,EAAA,CAQV,IAAI,EAAW,EAEf,GATI,AAEH,KAAK,qBADL,KAAK,mBAAA,CACA,IAAoB,IAG1B,KAAK,SAAW,OAAO,WA3PA,IA+PlB,EAAA,GAGM,YAAa,EACvB,EAAI,EAAgB,QACpB,EAAI,EAAgB,gBACV,YAAa,GAAmB,EAAgB,QAAQ,OAClE,EAAI,EAAgB,QAAQ,GAAG,QAC/B,EAAI,EAAgB,QAAQ,GAAG,YACzB,CACN,IAAM,EAAM,EACZ,EAAI,EAAI,EACR,EAAI,EAAI,OAXR,EAAI,OAAO,WAAa,EACxB,EAAI,OAAO,YAAc,EAa1B,KAAK,SAAW,CAAE,EAAA,EAAG,EAAA,EAAA,CAErB,KAAK,iBAAmB,CACvB,0BAA6B,IAAI,QAAQ,EAAG,EAAG,EAAG,EAAA,CAAA,CAGnD,KAAK,eAAA,CAAA,MACC,KAAK,eAEX,KAAK,aAAa,SAAU,GAAA,CAC5B,KAAK,iBAAiB,OAAO,IAAI,OAAA,CAAA,MAC3B,KAAK,eAGX,KAAK,mBAAqB,SAAS,cACnC,IAAM,EAAS,KAAK,cACpB,GAAI,EAAQ,CACX,KAAK,cAAgB,EAAA,CACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,SAAS,OAAQ,IAAK,CAChD,IAAM,EAAU,EAAO,SAAS,GAC5B,IAAY,MAAQ,UAAW,IAClC,EAAQ,MAAA,CAAQ,EAChB,KAAK,cAAc,KAAK,EAAA,IAM3B,EAAA,EAAA,WAAyB,SAAU,UAAA,CACjC,MAAA,EAAA,EAAA,QACO,GAAK,EAAE,MAAQ,SAAR,EAAiB,EAAA,EAAA,KAC3B,GAAA,CACH,EAAE,gBAAA,CACF,KAAK,KAAA,CAAK,EAAA,EAAA,EACT,EAAA,EAAA,YAAA,EAAA,EAAA,OACc,KAAK,WAAY,KAAK,cAAA,CAAA,CAAA,CAEtC,WAAA,CAEF,IAAM,EAAS,KAAK,kBAAA,CAGd,EA7SD,OAAO,WARW,KAQsB,GAAM,GAsUnD,MAAA,CAvBE,KAAK,UACN,IACC,EAAO,aAAe,OAAO,YAAc,GAC3C,EAAO,YAAc,OAAO,WAAa,KAE1C,KAAK,SAAA,CAAW,EAChB,KAAK,eAAA,CAAA,MACC,KAAK,gBAGR,KAAK,SACJ,IACH,KAAK,uBAAuB,EAAA,CAC5B,KAAK,kBAAkB,EAAA,EAGxB,KAAK,kBAAA,CAGN,KAAK,UAAA,CAAY,EAAA,MACX,KAAK,WAAA,CACX,KAAK,UAAA,CAAY,EAEV,IAAI,QAAiB,GAAA,CAC3B,KAAK,eAAiB,GAAA,CAOxB,MAAA,WAAc,CACb,IAAM,EAAS,KAAK,kBAAA,CACd,EAAW,KAAK,oBAAA,CAEtB,GAAI,EAAA,EAAe,MAGlB,OAFI,IAAU,EAAS,MAAM,QAAU,KAAA,KACnC,IAAQ,EAAO,MAAM,QAAU,MAUpC,GANA,GAAU,QAAQ,CAAC,CAAE,QAAS,EAAA,CAAK,CAAE,QAAS,EAAA,CAAA,CAAM,CACnD,SAAA,IACA,OAAQ,EAAA,EACR,KAAM,WAAA,CAAA,CAGH,EAAQ,CACX,IAAM,EAAY,KAAK,SACpB,CACA,CAAE,QAAS,EAAG,UAAW,mBAAA,CACzB,CAAE,QAAS,EAAG,UAAW,gBAAA,CAAA,CAEzB,CACA,CAAE,QAAS,EAAG,UAAW,+BAAA,CACzB,CAAE,QAAS,EAAG,UAAW,yBAAA,CAAA,CAAA,MAGtB,EAAO,QAAQ,EAAW,CAC/B,SAAU,EAAA,EACV,OAAQ,EAAA,EACR,KAAM,WAAA,CAAA,CACJ,UAOL,MAAA,YAAc,CACb,IAAM,EAAS,KAAK,kBAAA,CACd,EAAW,KAAK,oBAAA,CAEtB,GAAI,EAAA,EAAe,MAGlB,OAFI,IAAU,EAAS,MAAM,QAAU,KAAA,KACnC,IAAQ,EAAO,MAAM,QAAU,MAIpC,IAAM,EAAmC,EAAA,CAYzC,GAVI,GACH,EAAW,KACV,EAAS,QAAQ,CAAC,CAAE,QAAS,EAAA,CAAK,CAAE,QAAS,EAAA,CAAA,CAAM,CAClD,SAAA,IACA,OAAQ,EAAA,EACR,KAAM,WAAA,CAAA,CACJ,SAAA,CAID,EAAQ,CACX,IAAM,EAAY,KAAK,SACpB,CACA,CAAE,QAAS,EAAG,UAAW,gBAAA,CACzB,CAAE,QAAS,EAAG,UAAW,mBAAA,CAAA,CAEzB,CACA,CAAE,QAAS,EAAG,UAAW,yBAAA,CACzB,CAAE,QAAS,EAAG,UAAW,8BAAA,CAAA,CAG5B,EAAW,KACV,EAAO,QAAQ,EAAW,CACzB,SAAA,IACA,OAAQ,EAAA,EACR,KAAM,WAAA,CAAA,CACJ,SAAA,CAAA,MAIC,QAAQ,IAAI,EAAA,CAMnB,MAAA,KAAW,EAAA,CAAS,EAAA,CACnB,KAAK,WAAW,MAAA,CAEhB,KAAK,UAAA,CAAY,EAAA,MACX,KAAK,YAAA,CACX,KAAK,UAAA,CAAY,EAEjB,KAAK,gBAAgB,SAAA,CACrB,KAAK,iBAAiB,OAAO,OAAO,OAAA,CAGpC,IAAK,IAAM,KAAM,KAAK,cACrB,EAAG,MAAA,CAAQ,EAKZ,GAHA,KAAK,cAAgB,EAAA,CAGjB,KAAK,mBAAoB,CAC5B,IAAM,EAAK,KAAK,mBACQ,OAAb,EAAG,OAAU,YACvB,EAAG,OAAA,CAEJ,KAAK,mBAAqB,KAGvB,AAEH,KAAK,qBADL,KAAK,mBAAA,CACA,IAAoB,IAGtB,AAEH,KAAK,kBADL,KAAK,eAAe,EAAA,CACf,IAAiB,IAOxB,YAAA,CAEC,IAAM,EAAiC,IAApB,OAAO,WACpB,EAAkC,IAArB,OAAO,YAE1B,OACC,KAAK,IAAI,KAAK,SAAS,EAAI,OAAO,WAAa,EAAA,CAAK,GACpD,KAAK,IAAI,KAAK,SAAS,EAAI,OAAO,YAAc,EAAA,CAAK,EAOvD,kBAAA,CACC,IAAM,EAAS,KAAK,kBAAA,CACf,IAED,KAAK,YAAA,EAEL,KAAK,mBACR,KAAK,mBAAA,EAAA,EAAA,YACJ,KAAK,iBACL,MACM,KAAK,eAAe,EAAA,CAC1B,CACC,eAAA,CAAgB,EAChB,eAAA,CAAgB,EAChB,cAAA,CAAe,EAAA,CAAA,CAGjB,KAAK,eAAe,EAAA,GAOtB,MAAA,eAA6B,EAAA,CAC5B,GAAA,CAAK,KAAK,iBAAkB,OAE5B,GAAA,CAEM,EAAE,EAAA,EAAG,GAAA,MAAM,EAAA,EAAA,iBAAsB,KAAK,iBAAkB,EAAQ,CACrE,SAAU,QACV,WAAY,EAAA,EAAA,EAAA,QACJ,EAAA,EAAA,EAAA,EAAA,eACO,CACb,QAPa,GAQb,kBAAmB,CAClB,YACA,UACA,eACA,aACA,aACA,WACA,cACA,YAAA,CAAA,CAAA,EAAA,EAAA,EAAA,OAGI,CAAE,QAnBM,GAAA,CAAA,EAAA,EAAA,EAAA,MAoBT,CACJ,QArBa,GAsBb,MAAA,CAAM,eAAE,EAAA,SAAgB,GAAA,CACvB,EAAS,SAAS,MAAM,SAAW,GAAG,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAM1C,OAAO,OAAO,EAAO,MAAO,CAC3B,SAAU,QACV,KAAM,GAAG,KAAK,MAAM,EAAA,CAAA,IACpB,IAAK,GAAG,KAAK,MAAM,EAAA,CAAA,IACnB,UAAW,OAAA,CAAA,CAIb,sBAAA,CACC,KAAK,WAAW,MAAA,CACZ,AAEH,KAAK,qBADL,KAAK,mBAAA,CACA,IAAoB,IAE1B,MAAM,sBAAA,GCthBF,EAAA,cAA6B,EACnC,EAAA,EAAY,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;kDAiCyC,GAAA,KAAA,SAAA,IAKG,GAAA,KAAA,QAAA,IAKD,GAAA,KAAA,YAAA,IAK+B,GAAA,KAAA,WAAA,IAKF,GAAA,KAAA,QAK3B,UAAA,KAAA,YAAA,CAKU,EAAA,KAAA,mBAAA,EAAA,EAAA,YAAA,CAAA,KAAA,mBAAA,EAAA,EAAA,YAAA,CAAA,KAAA,cAAA,EAAA,EAAA,YAAA,CAAA,KAAA,gBAAA,EAAA,EAAA,YAAA,CAAA,KAAA,QA+B3C,mBAAmB,KAAK,QAAA,CAAS,SAAS,GAAA,CAAI,MAAM,EAAG,GAAA,GAClF,IAAA,UAAY,CAAa,MAAO,GAAG,KAAK,QAAA,QACxC,IAAA,SAAY,CAAY,MAAO,GAAG,KAAK,QAAA,OAOvC,kBAAA,CAEC,OAAI,KAAK,kBAAkB,MAAc,KAAK,kBAAkB,MAEzD,KAAK,kBAAkB,OAAS,KAMxC,oBAAA,CACC,OAAO,KAAK,aAAa,OAAS,KAMnC,sBAAA,CACC,OAAO,KAAK,eAAe,OAAS,KAMrC,IAAA,eAAY,CACX,MAAA,CAAI,KAAK,aAAA,EAAA,CACC,KAAK,aAAa,MAAA,EAAA,CAAU,KAAK,YAAY,MAAA,EAMxD,mBAAA,CACC,MAAM,mBAAA,EAGN,EAAA,EAAA,WAAuC,OAAQ,EAAA,EAAA,CAC7C,MAAA,EAAA,EAAA,KACI,GAAA,CACC,EAAE,OAAO,MAAQ,KAAK,KAAK,KAAK,kBAAA,EAAA,EACnC,EAAA,EAAA,WACQ,KAAK,cAAA,CAAA,CAEf,WAAA,CAMH,kBAAA,CACC,KAAK,cACJ,IAAI,YAAY,EAAA,EAAiB,CAChC,OAAQ,CAAE,OAAQ,KAAA,CAClB,QAAA,CAAS,EACT,SAAA,CAAU,EAAA,CAAA,CAAA,CAQb,eAAA,CACC,KAAK,KAAA,CAAK,EAAA,CACV,KAAK,cACJ,IAAI,YAAY,UAAW,CAC1B,QAAA,CAAS,EACT,SAAA,CAAU,EAAA,CAAA,CAAA,CAQb,aAAA,CACK,KAAK,aAAA,GACT,KAAK,KAAA,CAAK,EAAA,CACV,KAAK,cACJ,IAAI,YAAY,KAAK,cAAgB,SAAW,QAAS,CACxD,QAAA,CAAS,EACT,SAAA,CAAU,EAAA,CAAA,CAAA,EAQb,kBAAA,CACC,MAAO,GAAA,IAAI;oBACC,KAAK,eAAA,CAAA;;;IAMlB,QAAA,CACC,IAAM,EAAa,KAAK,YAAA,CAClB,EAAmB,KAAK,sBAAsB,OAAS,EAgBvD,EAAuB,CAC5B,OAAA,CAAQ,EACR,MAAA,CAAO,EACP,0BAAA,CAA2B,EAC3B,2BAAA,CAA4B,EAC5B,gBAAA,CAAiB,EACjB,kBAAA,CAAmB,EACnB,UAAW,EACX,WAAY,EACZ,mBAAoB,EACpB,mBAAoB,EAAA,CAGf,EAAgB,KAAK,SA1BC,CAC3B,OAAA,CAAQ,EACR,MAAA,CAAO,EACP,YAAA,CAAa,EACb,WAAA,CAAY,EACZ,SAAA,CAAU,EACV,gBAAA,CAAiB,EACjB,kBAAA,CAAmB,EAEnB,mCAAA,CAAoC,EAAA,CAiBuB,EAGtD,EAAyB,KAAK,SACjC,qCACA,yBAGH,GAAI,KAAK,cAAe,CACvB,IAAM,EAAA,CAAA,CAAa,KAAK,OAAO,MAAA,CACzB,EAAA,CAAA,CAAgB,KAAK,UAAU,MAAA,CAC/B,EAAA,CAAA,CAAe,KAAK,SAAS,MAAA,CAC7B,EAAc,CAAC,GAAe,KAAK,QAAU,OAAQ,GAAc,KAAK,QAAU,OAAA,CACtF,OAAO,QAAA,CACP,KAAK,IAAA,EAAQ,GACf,MAAO,GAAA,IAAI;qBACC,KAAK,aAAA,CAAA,uHAAqI,KAAK,YAAA;;;iBAGnJ,KAAK,kBAAA,CAAA;aACH,KAAK,SAAS,EAAA,CAAA;;;uBAGJ,EAAW,KAAK,SAAW,EAAA,QAAA;wBAC1B,GAAe,EAAA,QAAA;;;QAG/B,EAAA,EAAW,CAAE,OAAQ,IAAK,UAAW,GAAA,CAAA,CAAA;gBAC7B,KAAK,SAAW,MAAQ,MAAA;;;;;QAKhC,KAAK,SAAW,KAAK,kBAAA,CAAqB,KAAA;;gCAElB,KAAK,cAAA;qBAE5B,MACM,EAAA,IAAI;oCACiB,KAAK,SAAA,wCAAiD,KAAK,MAAA;uBAEpF,MACM,EAAA,IAAI;uCACkB,KAAK,QAAA;eAC7B,KAAK,SAAA;;;;UAMV,EACC,EAAA,IAAI,wDAAA,EAAA,EAAA,MAEJ,MACM,EAAA,IAAI,4BAA4B,KAAK,QAAA,iCAAyC,KAAK,QAAA,wBAAA,CAAA;qBAE/E,EAAA;;;mBAGF,KAAK,YAAA;kBACN,KAAK,SAAW,SAAW,GAAA;;YAEjC,KAAK,WAAA;;;;;kBAKC,KAAK,SAAW,SAAW,GAAA;;YAEjC,KAAK,YAAA;;;;;;;KAWf,MAAO,GAAA,IAAI;oBACC,KAAK,aAAA,CAAA,uHAAqI,KAAK,YAAA;;wBAE3I,KAAK,kBAAA,CAAA,SAA4B,KAAK,SAAS,EAAA,CAAA;wBACzC,EAAA,EAAW,CAAE,OAAQ,IAAK,UAAW,GAAA,CAAA,CAAA,WAAkB,KAAK,SAAW,MAAQ,MAAA;OAChG,KAAK,SAAW,KAAK,kBAAA,CAAqB,KAAA;;;;;;IAYhD,aAAA,QAAqB,EAAA,CAUpB,IAAI,EAAS,SAAS,cAAc,uCAAA,CAiBpC,OAfK,IACJ,EAAS,SAAS,cAAc,kBAAA,CAChC,EAAO,aAAa,sBAAuB,GAAA,CAC3C,SAAS,KAAK,YAAY,EAAA,EAI3B,EAAO,MAAQ,EAAQ,MACvB,EAAO,SAAW,EAAQ,SAC1B,EAAO,QAAU,EAAQ,QACzB,EAAO,YAAc,EAAQ,aAAe,UAC5C,EAAO,WAAa,EAAQ,YAAc,SAC1C,EAAO,QAAU,EAAQ,SAAW,UAChC,EAAQ,OAAO,EAAO,MAAM,YAAY,iBAAkB,EAAQ,MAAA,CAE/D,EAAO,KAAK,EAAQ,SAAA,CAM5B,aAAA,IAAiB,EAAiB,EAAA,CACjC,OAAO,KAAK,QAAQ,CACnB,QAAA,EACA,SAAU,EAAA,CAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAhVF,CAAE,KAAM,OAAQ,QAAA,CAAS,EAAA,CAAA,CAAA,CAAO,EAAA,UAAA,MAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAKhC,CAAE,KAAM,OAAA,CAAA,CAAA,CAAS,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAKjB,CAAE,KAAM,OAAA,CAAA,CAAA,CAAS,EAAA,UAAA,WAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAKjB,CAAE,KAAM,OAAA,CAAA,CAAA,CAAS,EAAA,UAAA,UAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAKjB,CAAE,KAAM,OAAQ,UAAW,eAAA,CAAA,CAAA,CAAiB,EAAA,UAAA,cAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAK5C,CAAE,KAAM,OAAQ,UAAW,cAAA,CAAA,CAAA,CAAgB,EAAA,UAAA,aAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAK3C,CAAE,KAAM,OAAA,CAAA,CAAA,CAAS,EAAA,UAAA,UAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAKjB,CAAE,KAAM,QAAS,UAAW,eAAA,CAAA,CAAA,CAAiB,EAAA,UAAA,cAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,uBAKhC,CAAE,KAAM,UAAW,QAAA,CAAS,EAAA,CAAA,CAAA,CAAO,EAAA,UAAA,uBAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAtE5C,kBAAA,CAAA,CAAkB,EAAA,CAAA,QAAA,QAAA,EAAA,EAAA,OAAA,eAAA,QAAA,gBAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,iBAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,QAAA,WAAA,EAAA,QAAA,cAAA,EAAA"}