@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,125 +0,0 @@
1
- import { SchmancyElement } from '@mixins/index'
2
- import { css, html } from 'lit'
3
- import { customElement, property, state } from 'lit/decorators.js'
4
- import { timer } from 'rxjs'
5
- import { take } from 'rxjs/operators'
6
-
7
- /**
8
- * @element schmancy-code-preview
9
- * A component that shows code and its rendered preview side by side
10
- * Takes the content as a slot and displays both the source and rendered result
11
- */
12
- @customElement('schmancy-code-preview')
13
- export class SchmancyCodePreview extends SchmancyElement {
14
- static styles = [
15
- css`:host{
16
- display:block;
17
- overflow:hidden;
18
- position:relative;
19
- inset:0;
20
- }`,
21
- ];
22
-
23
- /**
24
- * Programming language for syntax highlighting
25
- */
26
- @property({ type: String })
27
- language: string = 'html'
28
-
29
- /**
30
- * Show code on top or side-by-side
31
- */
32
- @property({ type: String })
33
- layout: 'vertical' | 'horizontal' = 'vertical'
34
-
35
- /**
36
- * Whether to render/execute the code in preview section
37
- * When false, only shows the code without rendering
38
- */
39
- @property({ type: Boolean })
40
- preview: boolean = true
41
-
42
- @state()
43
- private slotContent: string = ''
44
-
45
- connectedCallback() {
46
- super.connectedCallback()
47
- // Capture the slot content as HTML string
48
- timer(0).pipe(take(1)).subscribe(() => {
49
- const slot = this.shadowRoot?.querySelector('slot')
50
- if (slot) {
51
- const nodes = slot.assignedNodes({ flatten: true })
52
- const htmlStrings = nodes.map(node => {
53
- if (node.nodeType === Node.ELEMENT_NODE) {
54
- return (node as HTMLElement).outerHTML
55
- } else if (node.nodeType === Node.TEXT_NODE) {
56
- return node.textContent || ''
57
- }
58
- return ''
59
- })
60
-
61
- // Clean up the HTML string
62
- const rawContent = htmlStrings.join('')
63
-
64
- // Find the minimum indentation (excluding empty lines)
65
- const lines = rawContent.split('\n')
66
- const minIndent = lines
67
- .filter(line => line.trim().length > 0)
68
- .reduce((min, line) => {
69
- const indent = line.match(/^(\s*)/)?.[1].length || 0
70
- return Math.min(min, indent)
71
- }, Infinity)
72
-
73
- // Remove the minimum indentation from all lines
74
- this.slotContent = lines
75
- .map(line => line.slice(minIndent))
76
- .join('\n')
77
- .trim()
78
- }
79
- })
80
- }
81
-
82
- render() {
83
- const containerClass = this.layout === 'horizontal'
84
- ? 'grid grid-cols-1 lg:grid-cols-2 gap-0'
85
- : 'flex flex-col'
86
-
87
- const showPreview = this.preview && this.language.toLowerCase() === 'html'
88
-
89
- return html`
90
- <schmancy-surface class="rounded-lg overflow-hidden">
91
- <div class="${showPreview ? containerClass : ''}">
92
- <!-- Code section with proper overflow handling -->
93
- <div class="min-w-0 overflow-hidden">
94
- <schmancy-code
95
- language="${this.language}"
96
- .code="${this.slotContent}"
97
- ?copyButton="${true}"
98
- class="block w-full"
99
- ></schmancy-code>
100
- </div>
101
-
102
- <!-- Preview section (only visible for HTML and when preview is enabled) -->
103
- ${showPreview ? html`
104
- <div class="min-w-0 overflow-auto">
105
- <schmancy-surface type="solid" class="p-2 h-full">
106
- <slot></slot>
107
- </schmancy-surface>
108
- </div>
109
- ` : html`
110
- <!-- Hidden slot to capture content -->
111
- <div class="hidden">
112
- <slot></slot>
113
- </div>
114
- `}
115
- </div>
116
- </schmancy-surface>
117
- `
118
- }
119
- }
120
-
121
- declare global {
122
- interface HTMLElementTagNameMap {
123
- 'schmancy-code-preview': SchmancyCodePreview
124
- }
125
- }
@@ -1,3 +0,0 @@
1
- export { SchmancyCode } from './code-highlight'
2
- export { SchmancyCode as SchmancyCodeHighlight } from './code-highlight' // For backward compatibility
3
- export { SchmancyCodePreview } from './code-preview'
@@ -1,576 +0,0 @@
1
- import { autoPlacement, autoUpdate, computePosition, offset, shift, size } from '@floating-ui/dom'
2
- import { LitElement } from 'lit'
3
- import { distinctUntilChanged, filter, fromEvent, map, merge, Subject, takeUntil, tap } from 'rxjs'
4
- import type { Constructor } from '../../mixins/constructor'
5
- import type { IBaseMixin } from '../../mixins/baseElement'
6
- import {
7
- BLACKBIRD_EASING,
8
- DURATION_ENTER,
9
- DURATION_EXIT,
10
- DURATION_BACKDROP,
11
- EASE_OUT,
12
- EASE_IN,
13
- } from '../utils/animation'
14
- import { reducedMotion$ } from '../directives/reduced-motion'
15
-
16
- // Mobile breakpoint - matches Tailwind's sm breakpoint
17
- const MOBILE_BREAKPOINT = 640
18
-
19
- // Tablet breakpoint
20
- const TABLET_BREAKPOINT = 1024
21
-
22
- /**
23
- * Fraction of viewport a dialog can occupy before converting to bottom sheet.
24
- * Tablet (640–1024px): 60% — tighter screens benefit from bottom sheet sooner.
25
- * Desktop (>1024px): 80% — plenty of room, keep floating longer.
26
- */
27
- function largeContentThreshold(): number {
28
- return window.innerWidth < TABLET_BREAKPOINT ? 0.6 : 0.8
29
- }
30
-
31
- export interface DialogPosition {
32
- x: number
33
- y: number
34
- }
35
-
36
- export interface VirtualReference {
37
- getBoundingClientRect: () => DOMRect
38
- }
39
-
40
- /**
41
- * Interface for the DialogBase mixin methods
42
- */
43
- export interface IDialogBaseMixin {
44
- position: DialogPosition
45
- isMobile: boolean
46
- dragOffset: number
47
- show(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean>
48
- hide(result?: boolean): Promise<void>
49
- isCentered(): boolean
50
- isAnimating(): boolean
51
- }
52
-
53
- /**
54
- * Dialog mixin with smart positioning using Floating UI.
55
- *
56
- * On mobile (< 640px), automatically switches to bottom sheet mode
57
- * with swipe-to-dismiss gesture. On tablet/desktop, if content exceeds
58
- * a viewport-dependent threshold, also opens as bottom sheet.
59
- */
60
- export const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(superClass: T) => {
61
- class DialogBaseClass extends superClass {
62
- position: DialogPosition = { x: 0, y: 0 }
63
- isMobile = false
64
- dragOffset = 0
65
-
66
- protected resolvePromise?: (value: boolean) => void
67
- protected cleanupAutoUpdate?: () => void
68
- protected virtualReference?: VirtualReference
69
-
70
- // Subject to signal when to stop swipe gesture stream
71
- private readonly stopSwipe$ = new Subject<void>()
72
-
73
- // Focus trap state
74
- private lastFocusedElement: Element | null = null
75
- private inertSiblings: HTMLElement[] = []
76
-
77
- // Animation guard
78
- private animating = false
79
-
80
- /** ElementInternals — used for broadcasting `:state(open)` to consumers. */
81
- protected dialogInternals: ElementInternals | undefined = (() => {
82
- try {
83
- return this.attachInternals()
84
- } catch {
85
- return undefined
86
- }
87
- })()
88
-
89
- /**
90
- * Check if the dialog is currently animating
91
- */
92
- isAnimating(): boolean {
93
- return this.animating
94
- }
95
-
96
- /**
97
- * Override in subclass to return the dialog element
98
- */
99
- protected getDialogElement(): HTMLElement | null {
100
- return null
101
- }
102
-
103
- /**
104
- * Override in subclass to return the backdrop element for animations
105
- */
106
- protected getBackdropElement(): HTMLElement | null {
107
- return null
108
- }
109
-
110
- /**
111
- * Override in subclass to return the drag handle element for swipe gestures
112
- */
113
- protected getDragHandleElement(): HTMLElement | null {
114
- return null
115
- }
116
-
117
- connectedCallback(): void {
118
- super.connectedCallback()
119
- this.setupResizeListener()
120
- }
121
-
122
- /**
123
- * Listen for resize to switch between mobile/desktop modes
124
- */
125
- private setupResizeListener(): void {
126
- fromEvent(window, 'resize')
127
- .pipe(
128
- map(() => window.innerWidth < MOBILE_BREAKPOINT),
129
- distinctUntilChanged(),
130
- filter(() => this.hasAttribute('active')),
131
- tap(isMobile => {
132
- if (this.isMobile !== isMobile) {
133
- this.isMobile = isMobile
134
- this.requestUpdate()
135
- const dialog = this.getDialogElement()
136
- if (dialog) {
137
- if (isMobile) {
138
- this.applyBottomSheetStyles(dialog)
139
- this.setupSwipeGesture(dialog)
140
- } else {
141
- this.stopSwipe$.next()
142
- this.setupPositioning()
143
- }
144
- }
145
- }
146
- }),
147
- takeUntil(this.disconnecting),
148
- )
149
- .subscribe()
150
- }
151
-
152
- /**
153
- * Setup RxJS-based swipe gesture for dialog
154
- */
155
- private setupSwipeGesture(dialog: HTMLElement): void {
156
- // Stop any existing swipe gesture
157
- this.stopSwipe$.next()
158
-
159
- let dragStartY = 0
160
- let isDragging = false
161
- let currentY = 0
162
-
163
- const dragHandle = this.getDragHandleElement()
164
- const dragTarget = dragHandle || dialog
165
-
166
- const touchStart$ = fromEvent<TouchEvent>(dragTarget, 'touchstart', { passive: true }).pipe(
167
- tap(e => {
168
- const touch = e.touches[0]
169
- const rect = dialog.getBoundingClientRect()
170
- const touchY = touch.clientY - rect.top
171
-
172
- // Only allow drag from top 80px or drag handle
173
- if (touchY > 80 && !dragHandle) return
174
-
175
- isDragging = true
176
- dragStartY = touch.clientY
177
- currentY = 0
178
- this.dragOffset = 0
179
-
180
- // Disable transitions for immediate feedback
181
- dialog.style.transition = 'none'
182
- dialog.style.willChange = 'transform'
183
- }),
184
- )
185
-
186
- const touchMove$ = fromEvent<TouchEvent>(dialog, 'touchmove', { passive: false }).pipe(
187
- filter(() => isDragging),
188
- tap(e => {
189
- const touch = e.touches[0]
190
- const deltaY = touch.clientY - dragStartY
191
-
192
- // Rubber-band effect for upward drag
193
- if (deltaY < 0) {
194
- currentY = deltaY * 0.2
195
- } else {
196
- currentY = deltaY
197
- }
198
-
199
- this.dragOffset = Math.max(0, deltaY)
200
-
201
- // Direct DOM update - 1:1 tracking
202
- dialog.style.transform = `translateY(${currentY}px)`
203
-
204
- e.preventDefault()
205
- }),
206
- )
207
-
208
- const touchEnd$ = merge(
209
- fromEvent<TouchEvent>(dialog, 'touchend', { passive: true }),
210
- fromEvent<TouchEvent>(dialog, 'touchcancel', { passive: true }),
211
- ).pipe(
212
- filter(() => isDragging),
213
- tap(() => {
214
- isDragging = false
215
-
216
- // Re-enable transitions for snap animation
217
- dialog.style.transition = 'transform 0.3s cubic-bezier(0.16, 1, 0.3, 1)'
218
- dialog.style.willChange = ''
219
-
220
- const dialogHeight = dialog.getBoundingClientRect().height
221
- const threshold = Math.min(100, dialogHeight * 0.25)
222
-
223
- if (this.dragOffset > threshold) {
224
- // Dismiss - animate out
225
- dialog.style.transform = 'translateY(100%)'
226
- this.hide(false)
227
- } else {
228
- // Snap back
229
- dialog.style.transform = 'translateY(0)'
230
- this.dragOffset = 0
231
- }
232
- }),
233
- )
234
-
235
- // Merge all touch streams and subscribe
236
- merge(touchStart$, touchMove$, touchEnd$)
237
- .pipe(takeUntil(merge(this.stopSwipe$, this.disconnecting)))
238
- .subscribe()
239
- }
240
-
241
- /**
242
- * Apply bottom sheet styles for mobile
243
- */
244
- private applyBottomSheetStyles(dialog: HTMLElement): void {
245
- if (this.cleanupAutoUpdate) {
246
- this.cleanupAutoUpdate()
247
- this.cleanupAutoUpdate = undefined
248
- }
249
-
250
- Object.assign(dialog.style, {
251
- position: '',
252
- left: '',
253
- top: '',
254
- transform: '',
255
- maxWidth: '',
256
- })
257
- }
258
-
259
- /**
260
- * Show the dialog at a specific position
261
- */
262
- async show(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean> {
263
- if (this.cleanupAutoUpdate) {
264
- this.cleanupAutoUpdate()
265
- this.cleanupAutoUpdate = undefined
266
- }
267
-
268
- this.isMobile = window.innerWidth < MOBILE_BREAKPOINT
269
-
270
- let x: number, y: number
271
-
272
- if (!positionOrEvent) {
273
- x = window.innerWidth / 2
274
- y = window.innerHeight / 2
275
- } else if ('clientX' in positionOrEvent) {
276
- x = positionOrEvent.clientX
277
- y = positionOrEvent.clientY
278
- } else if ('touches' in positionOrEvent && positionOrEvent.touches.length) {
279
- x = positionOrEvent.touches[0].clientX
280
- y = positionOrEvent.touches[0].clientY
281
- } else {
282
- const pos = positionOrEvent as DialogPosition
283
- x = pos.x
284
- y = pos.y
285
- }
286
-
287
- this.position = { x, y }
288
-
289
- this.virtualReference = {
290
- getBoundingClientRect: () => new DOMRect(x, y, 0, 0),
291
- }
292
-
293
- this.requestUpdate()
294
- await this.updateComplete
295
-
296
- this.setAttribute('active', '')
297
- this.dialogInternals?.states.add('open')
298
- await this.updateComplete
299
-
300
- // Save focus and set siblings to inert for focus trap
301
- this.lastFocusedElement = document.activeElement
302
- const parent = this.parentElement
303
- if (parent) {
304
- this.inertSiblings = []
305
- for (let i = 0; i < parent.children.length; i++) {
306
- const sibling = parent.children[i] as HTMLElement
307
- if (sibling !== this && 'inert' in sibling) {
308
- sibling.inert = true
309
- this.inertSiblings.push(sibling)
310
- }
311
- }
312
- }
313
-
314
- // Escape key listener
315
- fromEvent<KeyboardEvent>(document, 'keydown')
316
- .pipe(
317
- filter(e => e.key === 'Escape'),
318
- tap(e => {
319
- e.preventDefault()
320
- this.hide(false)
321
- }),
322
- takeUntil(merge(this.stopSwipe$, this.disconnecting)),
323
- )
324
- .subscribe()
325
-
326
- const dialog = this.getDialogElement()
327
-
328
- // If content exceeds viewport threshold on desktop, treat as bottom sheet
329
- const threshold = largeContentThreshold()
330
- if (
331
- !this.isMobile &&
332
- dialog &&
333
- (dialog.scrollHeight > window.innerHeight * threshold ||
334
- dialog.scrollWidth > window.innerWidth * threshold)
335
- ) {
336
- this.isMobile = true
337
- this.requestUpdate()
338
- await this.updateComplete
339
- }
340
-
341
- if (this.isMobile) {
342
- if (dialog) {
343
- this.applyBottomSheetStyles(dialog)
344
- this.setupSwipeGesture(dialog)
345
- }
346
- } else {
347
- this.setupPositioning()
348
- }
349
-
350
- this.animating = true
351
- await this.animateIn()
352
- this.animating = false
353
-
354
- return new Promise<boolean>(resolve => {
355
- this.resolvePromise = resolve
356
- })
357
- }
358
-
359
- /**
360
- * Animate dialog entrance
361
- */
362
- private async animateIn(): Promise<void> {
363
- const dialog = this.getDialogElement()
364
- const backdrop = this.getBackdropElement()
365
-
366
- if (reducedMotion$.value) {
367
- if (backdrop) backdrop.style.opacity = '1'
368
- if (dialog) dialog.style.opacity = '1'
369
- return
370
- }
371
-
372
- backdrop?.animate([{ opacity: 0 }, { opacity: 1 }], {
373
- duration: DURATION_BACKDROP,
374
- easing: EASE_OUT,
375
- fill: 'forwards',
376
- })
377
-
378
- if (dialog) {
379
- const animation = this.isMobile
380
- ? [
381
- { opacity: 0, transform: 'translateY(100%)' },
382
- { opacity: 1, transform: 'translateY(0)' },
383
- ]
384
- : [
385
- { opacity: 0, transform: 'scale(0.92) translateY(16px)' },
386
- { opacity: 1, transform: 'scale(1) translateY(0)' },
387
- ]
388
-
389
- await dialog.animate(animation, {
390
- duration: DURATION_ENTER,
391
- easing: BLACKBIRD_EASING,
392
- fill: 'forwards',
393
- }).finished
394
- }
395
- }
396
-
397
- /**
398
- * Animate dialog exit
399
- */
400
- private async animateOut(): Promise<void> {
401
- const dialog = this.getDialogElement()
402
- const backdrop = this.getBackdropElement()
403
-
404
- if (reducedMotion$.value) {
405
- if (backdrop) backdrop.style.opacity = '0'
406
- if (dialog) dialog.style.opacity = '0'
407
- return
408
- }
409
-
410
- const animations: Promise<Animation>[] = []
411
-
412
- if (backdrop) {
413
- animations.push(
414
- backdrop.animate([{ opacity: 1 }, { opacity: 0 }], {
415
- duration: DURATION_EXIT,
416
- easing: EASE_OUT,
417
- fill: 'forwards',
418
- }).finished,
419
- )
420
- }
421
-
422
- if (dialog) {
423
- const animation = this.isMobile
424
- ? [
425
- { opacity: 1, transform: 'translateY(0)' },
426
- { opacity: 0, transform: 'translateY(100%)' },
427
- ]
428
- : [
429
- { opacity: 1, transform: 'scale(1) translateY(0)' },
430
- { opacity: 0, transform: 'scale(0.95) translateY(8px)' },
431
- ]
432
-
433
- animations.push(
434
- dialog.animate(animation, {
435
- duration: DURATION_EXIT,
436
- easing: EASE_IN,
437
- fill: 'forwards',
438
- }).finished,
439
- )
440
- }
441
-
442
- await Promise.all(animations)
443
- }
444
-
445
- /**
446
- * Hide the dialog
447
- */
448
- async hide(result = false): Promise<void> {
449
- this.stopSwipe$.next()
450
-
451
- this.animating = true
452
- await this.animateOut()
453
- this.animating = false
454
-
455
- this.removeAttribute('active')
456
- this.dialogInternals?.states.delete('open')
457
-
458
- // Restore inert siblings
459
- for (const el of this.inertSiblings) {
460
- el.inert = false
461
- }
462
- this.inertSiblings = []
463
-
464
- // Restore focus
465
- if (this.lastFocusedElement) {
466
- const el = this.lastFocusedElement as HTMLElement
467
- if (typeof el.focus === 'function') {
468
- el.focus()
469
- }
470
- this.lastFocusedElement = null
471
- }
472
-
473
- if (this.cleanupAutoUpdate) {
474
- this.cleanupAutoUpdate()
475
- this.cleanupAutoUpdate = undefined
476
- }
477
-
478
- if (this.resolvePromise) {
479
- this.resolvePromise(result)
480
- this.resolvePromise = undefined
481
- }
482
- }
483
-
484
- /**
485
- * Check if position is near center (only skip Floating UI for truly centered dialogs)
486
- */
487
- isCentered(): boolean {
488
- // Use tight tolerance (5%) - only skip Floating UI when position is very close to center
489
- const toleranceX = window.innerWidth * 0.05
490
- const toleranceY = window.innerHeight * 0.05
491
-
492
- return (
493
- Math.abs(this.position.x - window.innerWidth / 2) < toleranceX &&
494
- Math.abs(this.position.y - window.innerHeight / 2) < toleranceY
495
- )
496
- }
497
-
498
- /**
499
- * Setup Floating UI positioning for desktop
500
- */
501
- private setupPositioning(): void {
502
- const dialog = this.getDialogElement()
503
- if (!dialog) return
504
-
505
- if (this.isCentered()) return
506
-
507
- if (this.virtualReference) {
508
- this.cleanupAutoUpdate = autoUpdate(
509
- this.virtualReference,
510
- dialog,
511
- () => this.updatePosition(dialog),
512
- {
513
- ancestorScroll: true,
514
- ancestorResize: true,
515
- elementResize: true,
516
- },
517
- )
518
- this.updatePosition(dialog)
519
- }
520
- }
521
-
522
- /**
523
- * Update position using Floating UI
524
- */
525
- private async updatePosition(dialog: HTMLElement): Promise<void> {
526
- if (!this.virtualReference) return
527
-
528
- const padding = 16
529
-
530
- const { x, y } = await computePosition(this.virtualReference, dialog, {
531
- strategy: 'fixed',
532
- middleware: [
533
- offset(8),
534
- autoPlacement({
535
- padding,
536
- allowedPlacements: [
537
- 'top-start',
538
- 'top-end',
539
- 'bottom-start',
540
- 'bottom-end',
541
- 'left-start',
542
- 'left-end',
543
- 'right-start',
544
- 'right-end',
545
- ],
546
- }),
547
- shift({ padding }),
548
- size({
549
- padding,
550
- apply({ availableWidth, elements }) {
551
- elements.floating.style.maxWidth = `${availableWidth}px`
552
- },
553
- }),
554
- ],
555
- })
556
-
557
- Object.assign(dialog.style, {
558
- position: 'fixed',
559
- left: `${Math.round(x)}px`,
560
- top: `${Math.round(y)}px`,
561
- transform: 'none',
562
- })
563
- }
564
-
565
- disconnectedCallback(): void {
566
- this.stopSwipe$.next()
567
- if (this.cleanupAutoUpdate) {
568
- this.cleanupAutoUpdate()
569
- this.cleanupAutoUpdate = undefined
570
- }
571
- super.disconnectedCallback()
572
- }
573
- }
574
-
575
- return DialogBaseClass as Constructor<IDialogBaseMixin> & T
576
- }
@@ -1,17 +0,0 @@
1
- // Dialog discovery event constants
2
- export const DialogWhereAreYouRicky = 'are-you-there-dialog'
3
- export const DialogHereMorty = 'yes-dialog-here'
4
-
5
- // Event interfaces
6
- export interface DialogWhereAreYouRickyEvent extends CustomEvent {
7
- detail: {
8
- uid: string
9
- }
10
- }
11
-
12
- export interface DialogHereMortyEvent extends CustomEvent {
13
- detail: {
14
- dialog: any // Will be schmancy-dialog instance
15
- theme?: any // Will be schmancy-theme instance
16
- }
17
- }