@mhmo91/schmancy 0.4.67 → 0.4.69

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 (330) hide show
  1. package/ai/textarea.md +128 -43
  2. package/dist/ai/textarea.md +128 -43
  3. package/dist/{animated-text-Bgciqenw.cjs → animated-text-Bm1G50ol.cjs} +2 -2
  4. package/dist/{animated-text-Bgciqenw.cjs.map → animated-text-Bm1G50ol.cjs.map} +1 -1
  5. package/dist/{animated-text-BnE_bSQh.js → animated-text-DhaihRNU.js} +3 -3
  6. package/dist/{animated-text-BnE_bSQh.js.map → animated-text-DhaihRNU.js.map} +1 -1
  7. package/dist/animated-text.cjs +1 -1
  8. package/dist/animated-text.js +1 -1
  9. package/dist/area.cjs +1 -1
  10. package/dist/{area.component-4Xj6grAn.js → area.component-Cybfl9fo.js} +10 -10
  11. package/dist/{area.component-4Xj6grAn.js.map → area.component-Cybfl9fo.js.map} +1 -1
  12. package/dist/{area.component-jRAVAvAI.cjs → area.component-e7ccHmOi.cjs} +2 -2
  13. package/dist/{area.component-jRAVAvAI.cjs.map → area.component-e7ccHmOi.cjs.map} +1 -1
  14. package/dist/area.js +1 -1
  15. package/dist/{autocomplete-CdizrMKV.js → autocomplete-CHPr_eII.js} +3 -3
  16. package/dist/{autocomplete-CdizrMKV.js.map → autocomplete-CHPr_eII.js.map} +1 -1
  17. package/dist/{autocomplete-G8K-mb5t.cjs → autocomplete-DhRURo6G.cjs} +2 -2
  18. package/dist/{autocomplete-G8K-mb5t.cjs.map → autocomplete-DhRURo6G.cjs.map} +1 -1
  19. package/dist/autocomplete.cjs +1 -1
  20. package/dist/autocomplete.js +1 -1
  21. package/dist/{avatar-BSGuwqy5.js → avatar-B3rxuPbq.js} +62 -61
  22. package/dist/{avatar-BSGuwqy5.js.map → avatar-B3rxuPbq.js.map} +1 -1
  23. package/dist/{avatar-DdQOlXAG.cjs → avatar-BREyQJqy.cjs} +2 -2
  24. package/dist/{avatar-DdQOlXAG.cjs.map → avatar-BREyQJqy.cjs.map} +1 -1
  25. package/dist/badge.cjs +1 -1
  26. package/dist/badge.js +1 -1
  27. package/dist/{boat-rC0ERLqn.js → boat-Ch2Dn8n_.js} +2 -2
  28. package/dist/{boat-rC0ERLqn.js.map → boat-Ch2Dn8n_.js.map} +1 -1
  29. package/dist/{boat-CA8Wc6Hd.cjs → boat-IQenN8zy.cjs} +2 -2
  30. package/dist/{boat-CA8Wc6Hd.cjs.map → boat-IQenN8zy.cjs.map} +1 -1
  31. package/dist/boat.cjs +1 -1
  32. package/dist/boat.js +1 -1
  33. package/dist/busy.cjs +1 -1
  34. package/dist/busy.js +1 -1
  35. package/dist/button.cjs +1 -1
  36. package/dist/button.js +1 -1
  37. package/dist/card.cjs +1 -1
  38. package/dist/card.js +1 -1
  39. package/dist/{checkbox-xHdrDdwF.js → checkbox-DTtOgNWH.js} +2 -2
  40. package/dist/{checkbox-xHdrDdwF.js.map → checkbox-DTtOgNWH.js.map} +1 -1
  41. package/dist/{checkbox-DeYOFxaq.cjs → checkbox-EV_8e4Q9.cjs} +2 -2
  42. package/dist/{checkbox-DeYOFxaq.cjs.map → checkbox-EV_8e4Q9.cjs.map} +1 -1
  43. package/dist/checkbox.cjs +1 -1
  44. package/dist/checkbox.js +1 -1
  45. package/dist/{chips-DuCD124M.cjs → chips-D9bYHkvu.cjs} +2 -2
  46. package/dist/{chips-DuCD124M.cjs.map → chips-D9bYHkvu.cjs.map} +1 -1
  47. package/dist/{chips-Cd1wXy3x.js → chips-xlNsY8Dl.js} +3 -3
  48. package/dist/{chips-Cd1wXy3x.js.map → chips-xlNsY8Dl.js.map} +1 -1
  49. package/dist/chips.cjs +1 -1
  50. package/dist/chips.js +1 -1
  51. package/dist/code-highlight.cjs +1 -1
  52. package/dist/code-highlight.js +1 -1
  53. package/dist/{code-preview-C2z91M9H.cjs → code-preview-CC_QZwlB.cjs} +2 -2
  54. package/dist/{code-preview-C2z91M9H.cjs.map → code-preview-CC_QZwlB.cjs.map} +1 -1
  55. package/dist/{code-preview-BjdXVACE.js → code-preview-Dy4fNmOI.js} +2 -2
  56. package/dist/{code-preview-BjdXVACE.js.map → code-preview-Dy4fNmOI.js.map} +1 -1
  57. package/dist/components.cjs +1 -1
  58. package/dist/components.js +1 -1
  59. package/dist/content-drawer.cjs +1 -1
  60. package/dist/content-drawer.js +1 -1
  61. package/dist/{date-range-BS3TwBp1.js → date-range-CEhn7Gvg.js} +4 -4
  62. package/dist/{date-range-BS3TwBp1.js.map → date-range-CEhn7Gvg.js.map} +1 -1
  63. package/dist/{date-range-BfIiLrUu.cjs → date-range-XTs2K2Rp.cjs} +2 -2
  64. package/dist/{date-range-BfIiLrUu.cjs.map → date-range-XTs2K2Rp.cjs.map} +1 -1
  65. package/dist/{date-range-inline-BEfwxm4K.cjs → date-range-inline-BW6v6aDq.cjs} +2 -2
  66. package/dist/{date-range-inline-BEfwxm4K.cjs.map → date-range-inline-BW6v6aDq.cjs.map} +1 -1
  67. package/dist/{date-range-inline-zda6EO9f.js → date-range-inline-D-F8YwDL.js} +3 -3
  68. package/dist/{date-range-inline-zda6EO9f.js.map → date-range-inline-D-F8YwDL.js.map} +1 -1
  69. package/dist/date-range-inline.cjs +1 -1
  70. package/dist/date-range-inline.js +1 -1
  71. package/dist/date-range.cjs +1 -1
  72. package/dist/date-range.js +1 -1
  73. package/dist/{delay-BJ-Ce2HT.cjs → delay-BYwpzSYY.cjs} +2 -2
  74. package/dist/{delay-BJ-Ce2HT.cjs.map → delay-BYwpzSYY.cjs.map} +1 -1
  75. package/dist/{delay-5re8EU0Q.js → delay-CqcMq7V3.js} +12 -12
  76. package/dist/{delay-5re8EU0Q.js.map → delay-CqcMq7V3.js.map} +1 -1
  77. package/dist/delay.cjs +1 -1
  78. package/dist/delay.js +1 -1
  79. package/dist/{details-BeuCI3Tb.cjs → details-C9Vr2c8F.cjs} +2 -2
  80. package/dist/{details-BeuCI3Tb.cjs.map → details-C9Vr2c8F.cjs.map} +1 -1
  81. package/dist/{details-BBYG4_kG.js → details-gxjy3noS.js} +2 -2
  82. package/dist/{details-BBYG4_kG.js.map → details-gxjy3noS.js.map} +1 -1
  83. package/dist/details.cjs +1 -1
  84. package/dist/details.js +1 -1
  85. package/dist/{dialog-content-BHrlCw_t.js → dialog-content-CJ21oAff.js} +4 -4
  86. package/dist/{dialog-content-BHrlCw_t.js.map → dialog-content-CJ21oAff.js.map} +1 -1
  87. package/dist/{dialog-content-BYpfUBG3.cjs → dialog-content-DfXB0r6A.cjs} +2 -2
  88. package/dist/{dialog-content-BYpfUBG3.cjs.map → dialog-content-DfXB0r6A.cjs.map} +1 -1
  89. package/dist/dialog-service-ClZa-7cE.cjs +2 -0
  90. package/dist/dialog-service-ClZa-7cE.cjs.map +1 -0
  91. package/dist/dialog-service-Dwnyl4Gg.js +141 -0
  92. package/dist/dialog-service-Dwnyl4Gg.js.map +1 -0
  93. package/dist/dialog.cjs +1 -1
  94. package/dist/dialog.js +2 -2
  95. package/dist/{divider-B0LQxG1L.js → divider-Dw3OYKoH.js} +3 -3
  96. package/dist/{divider-B0LQxG1L.js.map → divider-Dw3OYKoH.js.map} +1 -1
  97. package/dist/{divider-Qgqzg8Od.cjs → divider-ZX6UG8fE.cjs} +2 -2
  98. package/dist/{divider-Qgqzg8Od.cjs.map → divider-ZX6UG8fE.cjs.map} +1 -1
  99. package/dist/divider.cjs +1 -1
  100. package/dist/divider.js +1 -1
  101. package/dist/{dropdown-content-Bh7Uek2_.js → dropdown-content-QWlP1OxV.js} +3 -3
  102. package/dist/{dropdown-content-Bh7Uek2_.js.map → dropdown-content-QWlP1OxV.js.map} +1 -1
  103. package/dist/{dropdown-content-B0T9NcP0.cjs → dropdown-content-ULdb1NeW.cjs} +2 -2
  104. package/dist/{dropdown-content-B0T9NcP0.cjs.map → dropdown-content-ULdb1NeW.cjs.map} +1 -1
  105. package/dist/dropdown.cjs +1 -1
  106. package/dist/dropdown.js +1 -1
  107. package/dist/email-recipients-DQ36ickQ.js +1358 -0
  108. package/dist/email-recipients-DQ36ickQ.js.map +1 -0
  109. package/dist/email-recipients-H9HVkFvE.cjs +851 -0
  110. package/dist/email-recipients-H9HVkFvE.cjs.map +1 -0
  111. package/dist/extra.cjs +1 -1
  112. package/dist/extra.js +1 -1
  113. package/dist/{flex-wnw8ri9G.js → flex-Cam0G_h7.js} +2 -2
  114. package/dist/{flex-wnw8ri9G.js.map → flex-Cam0G_h7.js.map} +1 -1
  115. package/dist/{flex-Cciddlkr.cjs → flex-DEiJ9fDk.cjs} +2 -2
  116. package/dist/{flex-Cciddlkr.cjs.map → flex-DEiJ9fDk.cjs.map} +1 -1
  117. package/dist/{form-LhR76UQp.cjs → form-B87v130C.cjs} +2 -2
  118. package/dist/{form-LhR76UQp.cjs.map → form-B87v130C.cjs.map} +1 -1
  119. package/dist/{form-Cd1Z72nI.js → form-EPO5N6pI.js} +2 -2
  120. package/dist/{form-Cd1Z72nI.js.map → form-EPO5N6pI.js.map} +1 -1
  121. package/dist/form.cjs +1 -1
  122. package/dist/form.js +1 -1
  123. package/dist/{formField.mixin-D67_ge3i.js → formField.mixin-B6XjIwKN.js} +2 -2
  124. package/dist/{formField.mixin-D67_ge3i.js.map → formField.mixin-B6XjIwKN.js.map} +1 -1
  125. package/dist/{formField.mixin-Dbrz3WX3.cjs → formField.mixin-Dpx2Zk8-.cjs} +2 -2
  126. package/dist/{formField.mixin-Dbrz3WX3.cjs.map → formField.mixin-Dpx2Zk8-.cjs.map} +1 -1
  127. package/dist/{icon--ULeGfN_.js → icon-C6CXTo3Z.js} +2 -2
  128. package/dist/{icon--ULeGfN_.js.map → icon-C6CXTo3Z.js.map} +1 -1
  129. package/dist/{icon-CZ3mMGdX.cjs → icon-MrlToWLJ.cjs} +2 -2
  130. package/dist/{icon-CZ3mMGdX.cjs.map → icon-MrlToWLJ.cjs.map} +1 -1
  131. package/dist/{icon-button-BXMUskpY.cjs → icon-button-BwAStx3H.cjs} +2 -2
  132. package/dist/{icon-button-BXMUskpY.cjs.map → icon-button-BwAStx3H.cjs.map} +1 -1
  133. package/dist/{icon-button-PxCZVq78.js → icon-button-Csj8jwj8.js} +3 -3
  134. package/dist/{icon-button-PxCZVq78.js.map → icon-button-Csj8jwj8.js.map} +1 -1
  135. package/dist/icons.cjs +1 -1
  136. package/dist/icons.js +1 -1
  137. package/dist/index.cjs +1 -1
  138. package/dist/index.js +171 -165
  139. package/dist/index.js.map +1 -1
  140. package/dist/{input-D3cF4qal.js → input-B9PDbNB9.js} +3 -3
  141. package/dist/{input-D3cF4qal.js.map → input-B9PDbNB9.js.map} +1 -1
  142. package/dist/{input-DxUZYu34.cjs → input-D4L413yG.cjs} +2 -2
  143. package/dist/{input-DxUZYu34.cjs.map → input-D4L413yG.cjs.map} +1 -1
  144. package/dist/input.cjs +1 -1
  145. package/dist/input.js +1 -1
  146. package/dist/layout.cjs +1 -1
  147. package/dist/layout.js +1 -1
  148. package/dist/{list-BiiXBLxU.js → list-Cdd7ht2E.js} +2 -2
  149. package/dist/{list-BiiXBLxU.js.map → list-Cdd7ht2E.js.map} +1 -1
  150. package/dist/{list-nLrSaYiQ.cjs → list-DLUbjS69.cjs} +2 -2
  151. package/dist/{list-nLrSaYiQ.cjs.map → list-DLUbjS69.cjs.map} +1 -1
  152. package/dist/list.cjs +1 -1
  153. package/dist/list.js +1 -1
  154. package/dist/{litElement.mixin-C7_rhUMZ.js → litElement.mixin-BYVS1wwl.js} +2 -2
  155. package/dist/{litElement.mixin-C7_rhUMZ.js.map → litElement.mixin-BYVS1wwl.js.map} +1 -1
  156. package/dist/{litElement.mixin-PLxdthiY.cjs → litElement.mixin-CbFQ2uxn.cjs} +2 -2
  157. package/dist/{litElement.mixin-PLxdthiY.cjs.map → litElement.mixin-CbFQ2uxn.cjs.map} +1 -1
  158. package/dist/mailbox.cjs +2 -0
  159. package/dist/mailbox.cjs.map +1 -0
  160. package/dist/mailbox.js +9 -0
  161. package/dist/mailbox.js.map +1 -0
  162. package/dist/{map-2DO-_UXg.js → map-DmjQ1Izx.js} +2 -2
  163. package/dist/{map-2DO-_UXg.js.map → map-DmjQ1Izx.js.map} +1 -1
  164. package/dist/{map-D_75VnFg.cjs → map-DxUajvGo.cjs} +2 -2
  165. package/dist/{map-D_75VnFg.cjs.map → map-DxUajvGo.cjs.map} +1 -1
  166. package/dist/map.cjs +1 -1
  167. package/dist/map.js +1 -1
  168. package/dist/{media-CdRUD9xD.cjs → media-DCIVM-cE.cjs} +2 -2
  169. package/dist/{media-CdRUD9xD.cjs.map → media-DCIVM-cE.cjs.map} +1 -1
  170. package/dist/{media-D1TDtKlB.js → media-DPurU9FS.js} +2 -2
  171. package/dist/{media-D1TDtKlB.js.map → media-DPurU9FS.js.map} +1 -1
  172. package/dist/{menu-9xXJweN3.cjs → menu-CIObvZ7n.cjs} +2 -2
  173. package/dist/{menu-9xXJweN3.cjs.map → menu-CIObvZ7n.cjs.map} +1 -1
  174. package/dist/{menu-B06dErqi.js → menu-CwRGjbC-.js} +3 -3
  175. package/dist/{menu-B06dErqi.js.map → menu-CwRGjbC-.js.map} +1 -1
  176. package/dist/menu.cjs +1 -1
  177. package/dist/menu.js +1 -1
  178. package/dist/nav-drawer.cjs +1 -1
  179. package/dist/nav-drawer.js +1 -1
  180. package/dist/netlify.toml +366 -0
  181. package/dist/{notification-service-DklXKZwa.cjs → notification-service-BMnjQVrQ.cjs} +2 -2
  182. package/dist/{notification-service-DklXKZwa.cjs.map → notification-service-BMnjQVrQ.cjs.map} +1 -1
  183. package/dist/{notification-service-BfUKN9-l.js → notification-service-DypTYarw.js} +4 -4
  184. package/dist/{notification-service-BfUKN9-l.js.map → notification-service-DypTYarw.js.map} +1 -1
  185. package/dist/notification.cjs +1 -1
  186. package/dist/notification.js +2 -2
  187. package/dist/{notify-D2k-BxXf.cjs → notify-CqCSy8Ek.cjs} +2 -2
  188. package/dist/{notify-D2k-BxXf.cjs.map → notify-CqCSy8Ek.cjs.map} +1 -1
  189. package/dist/{notify-BMbySVQI.js → notify-DUMaApt7.js} +2 -2
  190. package/dist/{notify-BMbySVQI.js.map → notify-DUMaApt7.js.map} +1 -1
  191. package/dist/{option-CXQpOQBl.cjs → option-BuN5MSy7.cjs} +2 -2
  192. package/dist/{option-CXQpOQBl.cjs.map → option-BuN5MSy7.cjs.map} +1 -1
  193. package/dist/{option-BS4qufvu.js → option-CvjLp3CB.js} +2 -2
  194. package/dist/{option-BS4qufvu.js.map → option-CvjLp3CB.js.map} +1 -1
  195. package/dist/option.cjs +1 -1
  196. package/dist/option.js +1 -1
  197. package/dist/{payment-card-form-CYT-w3-T.cjs → payment-card-form-C9VN_H07.cjs} +2 -2
  198. package/dist/{payment-card-form-CYT-w3-T.cjs.map → payment-card-form-C9VN_H07.cjs.map} +1 -1
  199. package/dist/{payment-card-form-Dj2YF8_1.js → payment-card-form-CFDdmSH2.js} +3 -3
  200. package/dist/{payment-card-form-Dj2YF8_1.js.map → payment-card-form-CFDdmSH2.js.map} +1 -1
  201. package/dist/{progress-J9tCvn5j.js → progress-BeOOCcPN.js} +2 -2
  202. package/dist/{progress-J9tCvn5j.js.map → progress-BeOOCcPN.js.map} +1 -1
  203. package/dist/{progress-DfFxDR56.cjs → progress-C-6ieScw.cjs} +2 -2
  204. package/dist/{progress-DfFxDR56.cjs.map → progress-C-6ieScw.cjs.map} +1 -1
  205. package/dist/progress.cjs +1 -1
  206. package/dist/progress.js +1 -1
  207. package/dist/{radio-button-CKUtPC82.cjs → radio-button-Bi4ywYhW.cjs} +2 -2
  208. package/dist/{radio-button-CKUtPC82.cjs.map → radio-button-Bi4ywYhW.cjs.map} +1 -1
  209. package/dist/{radio-button-BxGi5VfV.js → radio-button-D6zvMVQb.js} +3 -3
  210. package/dist/{radio-button-BxGi5VfV.js.map → radio-button-D6zvMVQb.js.map} +1 -1
  211. package/dist/radio-group.cjs +1 -1
  212. package/dist/radio-group.js +1 -1
  213. package/dist/{schmancy-steps-container-BFeVc0lq.js → schmancy-steps-container-CfDatUf8.js} +2 -2
  214. package/dist/{schmancy-steps-container-BFeVc0lq.js.map → schmancy-steps-container-CfDatUf8.js.map} +1 -1
  215. package/dist/{schmancy-steps-container-DoN92rxe.cjs → schmancy-steps-container-i8rqaPet.cjs} +2 -2
  216. package/dist/{schmancy-steps-container-DoN92rxe.cjs.map → schmancy-steps-container-i8rqaPet.cjs.map} +1 -1
  217. package/dist/{select-C426DSrs.cjs → select-BPkJhj-o.cjs} +2 -2
  218. package/dist/{select-C426DSrs.cjs.map → select-BPkJhj-o.cjs.map} +1 -1
  219. package/dist/{select-BWQJus8Q.js → select-X7b74OI8.js} +3 -3
  220. package/dist/{select-BWQJus8Q.js.map → select-X7b74OI8.js.map} +1 -1
  221. package/dist/select.cjs +1 -1
  222. package/dist/select.js +1 -1
  223. package/dist/{sheet-4oJm8fkG.cjs → sheet-BBT4JQ3Z.cjs} +2 -2
  224. package/dist/{sheet-4oJm8fkG.cjs.map → sheet-BBT4JQ3Z.cjs.map} +1 -1
  225. package/dist/{sheet-CD8QHsiF.js → sheet-DvCIJGFo.js} +4 -4
  226. package/dist/{sheet-CD8QHsiF.js.map → sheet-DvCIJGFo.js.map} +1 -1
  227. package/dist/sheet.cjs +1 -1
  228. package/dist/sheet.js +1 -1
  229. package/dist/{slider-Dexp5Nxu.cjs → slider-DWO4L_qC.cjs} +2 -2
  230. package/dist/{slider-Dexp5Nxu.cjs.map → slider-DWO4L_qC.cjs.map} +1 -1
  231. package/dist/{slider-Cfy-71n8.js → slider-py-bz6Vv.js} +3 -3
  232. package/dist/{slider-Cfy-71n8.js.map → slider-py-bz6Vv.js.map} +1 -1
  233. package/dist/slider.cjs +1 -1
  234. package/dist/slider.js +1 -1
  235. package/dist/{spinner-CFBJounC.js → spinner-DpmMO5_E.js} +2 -2
  236. package/dist/{spinner-CFBJounC.js.map → spinner-DpmMO5_E.js.map} +1 -1
  237. package/dist/{spinner-Cj8PYiDt.cjs → spinner-Dv1WJaIf.cjs} +2 -2
  238. package/dist/{spinner-Cj8PYiDt.cjs.map → spinner-Dv1WJaIf.cjs.map} +1 -1
  239. package/dist/steps.cjs +1 -1
  240. package/dist/steps.js +1 -1
  241. package/dist/{surface-DfnuU19H.cjs → surface-Bn4-n1lT.cjs} +2 -2
  242. package/dist/{surface-DfnuU19H.cjs.map → surface-Bn4-n1lT.cjs.map} +1 -1
  243. package/dist/{surface-CwbyjcPh.js → surface-CFNIITaq.js} +2 -2
  244. package/dist/{surface-CwbyjcPh.js.map → surface-CFNIITaq.js.map} +1 -1
  245. package/dist/surface.cjs +1 -1
  246. package/dist/surface.js +1 -1
  247. package/dist/{table-Bs4s_UXJ.cjs → table-A_oEWQzm.cjs} +2 -2
  248. package/dist/{table-Bs4s_UXJ.cjs.map → table-A_oEWQzm.cjs.map} +1 -1
  249. package/dist/{table-DKcZiidt.js → table-DNUpAcQk.js} +2 -2
  250. package/dist/{table-DKcZiidt.js.map → table-DNUpAcQk.js.map} +1 -1
  251. package/dist/table.cjs +1 -1
  252. package/dist/table.js +1 -1
  253. package/dist/{tabs-compatibility-CGLNEqTc.js → tabs-compatibility-Bxoz71f7.js} +2 -2
  254. package/dist/{tabs-compatibility-CGLNEqTc.js.map → tabs-compatibility-Bxoz71f7.js.map} +1 -1
  255. package/dist/{tabs-compatibility-BNmTv9gA.cjs → tabs-compatibility-DNVqDoQh.cjs} +2 -2
  256. package/dist/{tabs-compatibility-BNmTv9gA.cjs.map → tabs-compatibility-DNVqDoQh.cjs.map} +1 -1
  257. package/dist/tabs.cjs +1 -1
  258. package/dist/tabs.js +1 -1
  259. package/dist/tailwind.mixin-BU9fMdfc.cjs +2 -0
  260. package/dist/{tailwind.mixin-8-I14rPu.cjs.map → tailwind.mixin-BU9fMdfc.cjs.map} +1 -1
  261. package/dist/tailwind.mixin-Bpgmqass.js +43 -0
  262. package/dist/{tailwind.mixin-Bvelb8bX.js.map → tailwind.mixin-Bpgmqass.js.map} +1 -1
  263. package/dist/teleport.cjs +1 -1
  264. package/dist/teleport.js +1 -1
  265. package/dist/textarea-BE5TqYmx.js +131 -0
  266. package/dist/textarea-BE5TqYmx.js.map +1 -0
  267. package/dist/textarea-DTlpsJ-V.cjs +44 -0
  268. package/dist/textarea-DTlpsJ-V.cjs.map +1 -0
  269. package/dist/textarea.cjs +1 -1
  270. package/dist/textarea.js +1 -1
  271. package/dist/{theme-button-C0HcsMoz.js → theme-button-BsojGTM7.js} +2 -2
  272. package/dist/{theme-button-C0HcsMoz.js.map → theme-button-BsojGTM7.js.map} +1 -1
  273. package/dist/{theme-button-BVdmrvuO.cjs → theme-button-DG8sPYM-.cjs} +2 -2
  274. package/dist/{theme-button-BVdmrvuO.cjs.map → theme-button-DG8sPYM-.cjs.map} +1 -1
  275. package/dist/theme-button.cjs +1 -1
  276. package/dist/theme-button.js +1 -1
  277. package/dist/theme.cjs +1 -1
  278. package/dist/{theme.component-C5vE2dqN.js → theme.component-BG4oCMuV.js} +4 -4
  279. package/dist/{theme.component-C5vE2dqN.js.map → theme.component-BG4oCMuV.js.map} +1 -1
  280. package/dist/{theme.component-B70iwARu.cjs → theme.component-D7TpDD6q.cjs} +3 -3
  281. package/dist/{theme.component-B70iwARu.cjs.map → theme.component-D7TpDD6q.cjs.map} +1 -1
  282. package/dist/theme.js +1 -1
  283. package/dist/{timezone-B-nHxpsM.js → timezone-DtsS7reI.js} +3 -3
  284. package/dist/{timezone-B-nHxpsM.js.map → timezone-DtsS7reI.js.map} +1 -1
  285. package/dist/{timezone-C9aeURj9.cjs → timezone-dc6VVlU0.cjs} +2 -2
  286. package/dist/{timezone-C9aeURj9.cjs.map → timezone-dc6VVlU0.cjs.map} +1 -1
  287. package/dist/{tooltip-DGcANl1x.js → tooltip-C5C8KN_9.js} +2 -2
  288. package/dist/{tooltip-DGcANl1x.js.map → tooltip-C5C8KN_9.js.map} +1 -1
  289. package/dist/{tooltip-DLT2gEm_.cjs → tooltip-CA2yHZN6.cjs} +2 -2
  290. package/dist/{tooltip-DLT2gEm_.cjs.map → tooltip-CA2yHZN6.cjs.map} +1 -1
  291. package/dist/tooltip.cjs +1 -1
  292. package/dist/tooltip.js +1 -1
  293. package/dist/{tree-OqQirABn.cjs → tree-D7CAcAHa.cjs} +2 -2
  294. package/dist/{tree-OqQirABn.cjs.map → tree-D7CAcAHa.cjs.map} +1 -1
  295. package/dist/{tree-Bp3kM_9E.js → tree-jBMmDqPl.js} +2 -2
  296. package/dist/{tree-Bp3kM_9E.js.map → tree-jBMmDqPl.js.map} +1 -1
  297. package/dist/tree.cjs +1 -1
  298. package/dist/tree.js +1 -1
  299. package/dist/{typewriter-BxVFLdsv.cjs → typewriter-BMfjokvJ.cjs} +2 -2
  300. package/dist/{typewriter-BxVFLdsv.cjs.map → typewriter-BMfjokvJ.cjs.map} +1 -1
  301. package/dist/{typewriter-vjeXbFlZ.js → typewriter-DDgmwo1Z.js} +7 -7
  302. package/dist/{typewriter-vjeXbFlZ.js.map → typewriter-DDgmwo1Z.js.map} +1 -1
  303. package/dist/typewriter.cjs +1 -1
  304. package/dist/typewriter.js +1 -1
  305. package/dist/{typography-Deoe8ty2.cjs → typography-CeAzj0Al.cjs} +2 -2
  306. package/dist/{typography-Deoe8ty2.cjs.map → typography-CeAzj0Al.cjs.map} +1 -1
  307. package/dist/{typography-DvwRgRtf.js → typography-D0JH1nwp.js} +2 -2
  308. package/dist/{typography-DvwRgRtf.js.map → typography-D0JH1nwp.js.map} +1 -1
  309. package/dist/typography.cjs +1 -1
  310. package/dist/typography.js +1 -1
  311. package/package.json +1 -1
  312. package/types/src/index.d.ts +1 -0
  313. package/types/src/mailbox/email-editor.d.ts +103 -0
  314. package/types/src/mailbox/email-layout-selector.d.ts +19 -0
  315. package/types/src/mailbox/email-recipients.d.ts +118 -0
  316. package/types/src/mailbox/email-viewer.d.ts +86 -0
  317. package/types/src/mailbox/index.d.ts +12 -0
  318. package/types/src/mailbox/mailbox.d.ts +82 -0
  319. package/types/src/mailbox/types.d.ts +174 -0
  320. package/types/src/textarea/textarea.d.ts +24 -0
  321. package/dist/dialog-service-C8W7JHTQ.cjs +0 -2
  322. package/dist/dialog-service-C8W7JHTQ.cjs.map +0 -1
  323. package/dist/dialog-service-CQ6UYq9I.js +0 -135
  324. package/dist/dialog-service-CQ6UYq9I.js.map +0 -1
  325. package/dist/tailwind.mixin-8-I14rPu.cjs +0 -2
  326. package/dist/tailwind.mixin-Bvelb8bX.js +0 -43
  327. package/dist/textarea-Cdl89jnK.cjs +0 -42
  328. package/dist/textarea-Cdl89jnK.cjs.map +0 -1
  329. package/dist/textarea-DU0mANOS.js +0 -126
  330. package/dist/textarea-DU0mANOS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sheet-4oJm8fkG.cjs","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\t<span class=\"text-[24px]\">&#8592; </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.component'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\thandleHistory?: boolean // Controls browser back button behavior\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet?: SchmancySheet\n\ttheme?: HTMLElement\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// Track sheet components for retrieval\n\tprivate sheetComponents = new Map<string, HTMLElement>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupSheetDismissLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\t// First check for existing sheet\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\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\t// Then find theme container\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\t// Determine uid - use provided uid or component tagName\n\t\t\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\n\t\t\t\t\t\t\t\t// First ask for existing sheet\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\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\t// Then ask for theme container\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}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\n\t\t\t\tmap(([existingSheet, theme, target]) => {\n\t\t\t\t\tlet sheet = existingSheet?.sheet\n\t\t\t\t\tlet targetContainer: HTMLElement\n\n\t\t\t\t\tif (sheet) {\n\t\t\t\t\t\t// Use existing sheet\n\t\t\t\t\t\tconsole.log('Found existing sheet:', sheet)\n\t\t\t\t\t\ttargetContainer = sheet.parentElement as HTMLElement\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Determine container - use theme from discovery or fallback\n\t\t\t\t\t\ttargetContainer = theme || (document.querySelector('schmancy-theme') as HTMLElement) || document.body\n\n\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\t\t\t\t\t\tconsole.log('Creating new sheet for uid:', uid)\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget.lock && sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\t// Use the dynamic position function here\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', String(target.persist))\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\n\t\t\t\t\t// Handle history logic if the property exists\n\t\t\t\t\tif (target.handleHistory !== undefined) {\n\t\t\t\t\t\tsheet.setAttribute('handleHistory', String(target.handleHistory))\n\t\t\t\t\t}\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Call onBeforeOpen callback if provided\n\t\t\t\t\tif (target.onBeforeOpen) {\n\t\t\t\t\t\ttarget.onBeforeOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle HTMLElement components\n\t\t\t\t\tconst assignedElements = sheet?.shadowRoot?.querySelector('slot')?.assignedElements() || []\n\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'Assigned elements in sheet:',\n\t\t\t\t\t\tassignedElements.map(e => (e as HTMLElement).tagName),\n\t\t\t\t\t)\n\n\t\t\t\t\tconst existingComponent = assignedElements.find(e => (e as HTMLElement).tagName === target.component.tagName)\n\n\t\t\t\t\tif (!existingComponent) {\n\t\t\t\t\t\t// Need to append the component\n\t\t\t\t\t\tconsole.log('Component not found, will append:', target.component.tagName)\n\t\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Component already exists, reusing:', target.component.tagName)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tconst uid =\n\t\t\t\t\t\ttarget.uid ?? (target.component instanceof HTMLElement ? target.component.tagName : `sheet-${Date.now()}`)\n\t\t\t\t\tthis.activeSheets.add(uid)\n\t\t\t\t\tthis.sheetComponents.set(uid, target.component)\n\n\t\t\t\t\t// Handle history integration - default to true if not specified\n\t\t\t\t\tconst shouldHandleHistory = target.handleHistory !== false\n\n\t\t\t\t\tif (shouldHandleHistory) {\n\t\t\t\t\t\t// Use history state to track this specific sheet\n\t\t\t\t\t\tconst historyState = {\n\t\t\t\t\t\t\tschmancySheet: true,\n\t\t\t\t\t\t\tuid: uid,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Push a new history state\n\t\t\t\t\t\thistory.pushState(historyState, '', window.location.href)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Call onAfterOpen callback if provided\n\t\t\t\t\tif (target.onAfterOpen) {\n\t\t\t\t\t\ttarget.onAfterOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up close event listener (always, not just for new sheets)\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(_ => {\n\t\t\t\t\t\t\t// Use the sheet reference directly, not e.target\n\t\t\t\t\t\t\tconst sheetElement = sheet as SchmancySheet\n\t\t\t\t\t\t\tconsole.log('Close event fired for sheet:', sheetElement)\n\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tif (sheetElement) {\n\t\t\t\t\t\t\t\tconst uid = sheetElement.getAttribute('uid')\n\t\t\t\t\t\t\t\tif (uid) {\n\t\t\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\t\t\tthis.sheetComponents.delete(uid)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\t\tconst persistAttr = sheetElement.getAttribute('persist')\n\t\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\t\t\t\t\t\t\t\tconsole.log('Sheet close - persist:', persistAttr, 'shouldRemove:', shouldRemove)\n\n\t\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\t\tconsole.log('Removing sheet from DOM:', uid)\n\t\t\t\t\t\t\t\t\tsheetElement.remove()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the sheet closing/dismissal logic\n\t */\n\tprivate setupSheetDismissLogic() {\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).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(new CustomEvent(SheetWhereAreYouRicky, { detail: { 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\ttap(([response, uid]) => {\n\t\t\t\t\tconsole.log('Dismiss called for uid:', uid, 'Found sheet:', !!response?.sheet)\n\t\t\t\t\tif (response?.sheet) {\n\t\t\t\t\t\tresponse.sheet.closeSheet()\n\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('No sheet found to dismiss for uid:', uid)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\tthis.$dismiss.next(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n\t/**\n\t * Gets the component instance for a given sheet\n\t * @param uid - The unique identifier of the sheet\n\t * @returns The component instance, or undefined if not found\n\t */\n\tgetComponent<T extends HTMLElement = HTMLElement>(uid: string): T | undefined {\n\t\treturn this.sheetComponents.get(uid) as T | undefined\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { fromEvent, merge, of, take, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t// Use ref directive instead of @query\n\tprivate sheetRef = createRef<HTMLDivElement>()\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\t// Use native inert attribute to prevent focus outside sheet\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button - only if handleHistory is true\n\t\tconst popState$ = this.handleHistory\n\t\t\t? fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\t\ttap(e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: of(null).pipe(take(0)) // Empty observable if handleHistory is false\n\n\t\t// Handle ESC key - listen on the sheet element for better event capture\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid)\n\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\t\t\t\tdetail: { sheet: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\t// Get all sibling elements and make them inert\n\t\tconst parent = this.parentElement\n\t\tif (parent) {\n\t\t\tArray.from(parent.children).forEach(child => {\n\t\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t// Also handle body's direct children if sheet is attached to body\n\t\tif (this.parentElement === document.body) {\n\t\t\tArray.from(document.body.children).forEach(child => {\n\t\t\t\tif (child !== this && child !== parent && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheetRef.value?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheetRef.value?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\t// First try native autofocus attribute\n\t\tconst autofocusElement = this.querySelector('[autofocus]') as HTMLElement\n\t\tif (autofocusElement) {\n\t\t\tautofocusElement.focus()\n\t\t\treturn\n\t\t}\n\n\t\t// Fallback to custom focus attribute\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\tprivate handleHeaderDismiss = (e: CustomEvent) => {\n\t\te.stopPropagation()\n\t\tsheet.dismiss(this.uid)\n\t}\n\n\trender() {\n\t\tconst sheetClasses = {\n\t\t\tsheet: true,\n\t\t\t'sheet--open': this.open,\n\t\t\t'sheet--locked': this.lock,\n\t\t}\n\n\t\tconst overlayClasses = {\n\t\t\toverlay: true,\n\t\t\t'overlay--interactive': !this.lock,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(sheetClasses)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-labelledby=${ifDefined(this.header !== 'hidden' ? 'sheet-title' : undefined)}\n\t\t\t\taria-hidden=${!this.open}\n\t\t\t\taria-modal=${this.open}\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t${ref(this.sheetRef)}\n\t\t\t>\n\t\t\t\t<div class=${classMap(overlayClasses)} @click=${this.lock ? undefined : this.handleOverlayClick}></div>\n\t\t\t\t<schmancy-grid\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${cache(\n\t\t\t\t\t\tthis.header !== 'hidden'\n\t\t\t\t\t\t\t? html`<schmancy-sheet-header\n\t\t\t\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t\t\t\t@dismiss=${this.handleHeaderDismiss}\n\t\t\t\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t\t\t\ttitle=${ifDefined(this.title || undefined)}\n\t\t\t\t\t\t\t\t></schmancy-sheet-header>`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t)}\n\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=\"overflow-auto\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll> <slot></slot></schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","render","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","bottomSheet","Subject","$dismiss","activeSheets","Set","sheetComponents","Map","popStateListenerActive","setupSheetOpeningLogic","setupSheetDismissLogic","setupPopStateListener","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","ThemeHereIAm","theme","of","target","tap","uid","component","tagName","ThemeWhereAreYou","existingSheet","targetContainer","parentElement","document","querySelector","body","createElement","setAttribute","appendChild","lock","position","innerWidth","title","persist","String","header","handleHistory","style","overflow","delay","onBeforeOpen","shadowRoot","assignedElements","find","HTMLElement","Date","now","add","set","historyState","schmancySheet","timestamp","history","pushState","location","href","onAfterOpen","take","subscribe","_","sheetElement","getAttribute","delete","persistAttr","remove","mergeMap","response","closeSheet","event","size","lastSheet","Array","from","pop","dismiss","state","sheetsArray","length","next","has","forEach","get","SchmancySheet","$LitElement","super","arguments","open","Side","sheetRef","createRef","focusAttribute","lastFocusedElement","handleOverlayClick","stopPropagation","handleHeaderDismiss","_oldValue","newValue","activeElement","setBackgroundInert","focus","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","key","rickyComm$","merge","inert","parent","children","child","removeAttribute","isShown","value","getFocusElement","selector","el","matches","autofocusElement","sheetClasses","overlayClasses","overlay","classMap","ifDefined","ref","cache","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","oldValue","hasUpdated"],"mappings":"ucAKA,IAAqBA,EAArB,cAAiDC,EAAAA,gBAAgBC,EAAAA,OAChE,QAAAC,CACC,OAAOC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,gBAKO,IAAA,CACRC,KAAKC,cACJ,IAAIC,YAAY,UAAW,CAC1BC,QAAAA,GACAC,SAAAA,EAAU,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAaJ,IAAA,CACRJ,KAAKC,cACJ,IAAIC,YAAY,UAAW,CAC1BC,QAAAA,GACAC,SAAAA,EAAU,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWnB,CAAA,EAvCoBT,wGAArB,CADCU,EAAAA,cAAc,uBAAA,CAAA,EACMV,CAAAA,ECad,IAAKW,GAAAA,IACXA,EAAA,KAAO,OACPA,EAAA,OAAS,SAFEA,IAAAA,GAAA,CAAA,CAAA,EA0BL,MAAMC,EAAwB,sBAMxBC,EAAiB,WA+SjBC,EAAQ,IAxSrB,KAAA,CAUC,aAAAC,CATAV,KAAAW,YAAc,IAAIC,UAClBZ,KAAAa,SAAW,IAAID,UAEfZ,KAAQc,iBAAmBC,IAE3Bf,KAAQgB,oBAAsBC,IAE9BjB,KAAQkB,uBAAAA,GAGPlB,KAAKmB,uBAAAA,EACLnB,KAAKoB,yBACLpB,KAAKqB,sBAAAA,CAAsB,CAMpB,wBAAAF,CACPnB,KAAKW,YACHW,KACAC,EAAAA,aACCC,EAAAA,SAAS,CAERC,YAA+BC,OAAQlB,CAAAA,EAAgBc,KACtDK,YAAUC,EAAAA,MAAM,EAAA,CAAA,EAChBC,EAAAA,IAAIC,GAAKA,EAAEC,MAAAA,EACXC,EAAAA,qBAAe,CAAA,EAGhBP,YAA6BC,OAAQO,EAAAA,YAAAA,EAAcX,KAClDK,YAAUC,EAAAA,MAAM,EAAA,CAAA,EAChBC,EAAAA,IAAIC,GAAKA,EAAEC,OAAOG,KAAAA,EAClBF,EAAAA,eAAAA,MAAe,CAAA,EAEhBG,EAAAA,GAAGC,CAAAA,EAAQd,KACVe,EAAAA,IAAI,IAAA,CAEH,MAAMC,EAAMF,EAAOE,KAAOF,EAAOG,UAAUC,QAG3Cd,OAAOzB,cACN,IAAIC,YAAYK,EAAuB,CACtCwB,OAAQ,CAAEO,IAAAA,CAAAA,EACVnC,QAAAA,GACAC,SAAAA,EAAU,CAAA,CAAA,EAIZsB,OAAOzB,cACN,IAAIC,YAAYuC,EAAAA,iBAAkB,CACjCtC,QAAAA,GACAC,SAAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAQhByB,EAAAA,IAAI,EAAEa,EAAeR,EAAOE,CAAAA,IAAAA,CAC3B,IACIO,EADAlC,EAAQiC,GAAejC,MAG3B,GAAIA,EAGHkC,EAAkBlC,EAAMmC,kBAClB,CAEND,EAAkBT,GAAUW,SAASC,cAAc,gBAAA,GAAqCD,SAASE,KAGjG,MAAMT,EAAMF,EAAOE,KAAOF,EAAOG,UAAUC,QAE3C/B,EAAQoC,SAASG,cAAc,gBAAA,EAC/BvC,EAAMwC,aAAa,MAAOX,CAAAA,EAC1BK,EAAgBO,YAAYzC,CAAAA,CAAK,CAGlC2B,EAAOe,MAAQ1C,EAAMwC,aAAa,OAAQ,MAAA,EAG1C,MAAMG,EAAWhB,EAAOgB,WAvFrB1B,OAAO2B,YAAc,IAAM,OAA6B,UAoG3D,OAZA5C,EAAMwC,aAAa,WAAYG,CAAAA,EAE/BhB,EAAOkB,OAAS7C,EAAMwC,aAAa,QAASb,EAAOkB,KAAAA,EACnDlB,EAAOmB,SAAW9C,EAAMwC,aAAa,UAAWO,OAAOpB,EAAOmB,OAAAA,CAAAA,EAC9DnB,EAAOqB,QAAUhD,EAAMwC,aAAa,SAAUb,EAAOqB,MAAAA,EAGjDrB,EAAOsB,gBAH0CD,QAIpDhD,EAAMwC,aAAa,gBAAiBO,OAAOpB,EAAOsB,aAAAA,CAAAA,EAGnDb,SAASE,KAAKY,MAAMC,SAAW,SACxB,CAAExB,OAAAA,EAAQ3B,MAAOA,CAAAA,CAAAA,CAAAA,EAEzBoD,EAAAA,MAAM,EAAA,EACNxB,EAAAA,IAAI,CAAA,CAAGD,OAAAA,EAAQ3B,MAAAA,CAAAA,IAAAA,CAEV2B,EAAO0B,cACV1B,EAAO0B,aAAa1B,EAAOG,SAAAA,GAIH9B,GAAOsD,YAAYjB,cAAc,MAAA,GAASkB,iBAAAA,GAAsB,CAAA,GAO9CC,KAAKnC,GAAMA,EAAkBU,UAAYJ,EAAOG,UAAUC,OAAAA,GAKpG/B,GAAOyC,YAAYd,EAAOG,SAAAA,CAAAA,CAAAA,EAK5BsB,EAAAA,MAAM,CAAA,EACNxB,EAAAA,IAAI,CAAA,CAAGD,OAAAA,EAAQ3B,MAAAA,CAAAA,IAAAA,CACdA,GAAOwC,aAAa,OAAQ,MAAA,EAG5B,MAAMX,EACLF,EAAOE,MAAQF,EAAOG,qBAAqB2B,YAAc9B,EAAOG,UAAUC,QAAU,SAAS2B,KAAKC,IAAAA,CAAAA,IAOnG,GANApE,KAAKc,aAAauD,IAAI/B,CAAAA,EACtBtC,KAAKgB,gBAAgBsD,IAAIhC,EAAKF,EAAOG,SAAAA,EAGTH,EAAOsB,gBAEnC,GAAyB,CAExB,MAAMa,EAAe,CACpBC,cAAAA,GACAlC,IAAAA,EACAmC,UAAWN,KAAKC,IAAAA,CAAAA,EAIjBM,QAAQC,UAAUJ,EAAc,GAAI7C,OAAOkD,SAASC,IAAAA,CAAI,CAIrDzC,EAAO0C,aACV1C,EAAO0C,YAAY1C,EAAOG,SAAAA,EAI3Bd,EAAAA,UAAuBhB,EAAO,OAAA,EAC5Ba,KAAKyD,EAAAA,KAAK,CAAA,CAAA,EACVzD,KAAKuC,EAAAA,MAAM,GAAA,CAAA,EACXmB,UAAUC,GAAAA,CAEV,MAAMC,EAAezE,EAIrB,GAAIyE,EAAc,CACjB,MAAM5C,EAAM4C,EAAaC,aAAa,KAAA,EAClC7C,IACHtC,KAAKc,aAAasE,OAAO9C,CAAAA,EACzBtC,KAAKgB,gBAAgBoE,OAAO9C,CAAAA,GAI7B,MAAM+C,EAAcH,EAAaC,aAAa,SAAA,GAAA,CACxBE,GAAeA,IAAgB,UAKpDH,EAAaI,OAAAA,CACd,CAGDzC,SAASE,KAAKY,MAAMC,SAAW,MAAA,CAAA,CAAA,CAAA,CAAA,EAIlCoB,WAAU,CAML,wBAAA5D,CACPpB,KAAKa,SACHS,KACAiE,EAAAA,YACC/D,EAAAA,SAAS,CACRC,YAA+BC,OAAQlB,CAAAA,EAAgBc,KACtDK,YAAUC,EAAAA,MAAM,GAAA,CAAA,EAChBC,EAAAA,IAAIC,GAAKA,EAAEC,MAAAA,EACXC,EAAAA,eAAAA,MAAe,CAAA,EAEhBG,EAAAA,GAAGG,CAAAA,EAAKhB,KACPe,EAAAA,IAAI,IAAA,CACHX,OAAOzB,cAAc,IAAIC,YAAYK,EAAuB,CAAEwB,OAAQ,CAAEO,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAK5ED,EAAAA,IAAI,CAAA,CAAEmD,EAAUlD,CAAAA,IAAAA,CAEXkD,GAAU/E,QACb+E,EAAS/E,MAAMgF,WAAAA,EACfzF,KAAKc,aAAasE,OAAO9C,CAAAA,EAAAA,CAAAA,CAAAA,EAM3B0C,UAAAA,CAAU,CAML,uBAAA3D,CACHrB,KAAKkB,yBAETO,EAAAA,UAAyBC,OAAQ,UAAA,EAAYsD,UAAUU,GAAAA,CAEtD,GAAI1F,KAAKc,aAAa6E,KAAO,EAAG,CAE/B,MAAMC,EAAYC,MAAMC,KAAK9F,KAAKc,YAAAA,EAAciF,IAAAA,EAC5CH,IACH5F,KAAKgG,QAAQJ,CAAAA,EAITF,EAAMO,OAASP,EAAMO,MAAMzB,eAC9BE,QAAQC,UAAU,CAAA,EAAI,GAAIjD,OAAOkD,SAASC,IAAAA,EAE5C,CAAA,CAAA,EAIF7E,KAAKkB,uBAAAA,GAAyB,CAM/B,QAAQoB,EAAAA,CACP,GAAA,CAAKA,GAAOtC,KAAKc,aAAa6E,KAAO,EAAG,CAEvC,MAAMO,EAAcL,MAAMC,KAAK9F,KAAKc,cACpCwB,EAAM4D,EAAYA,EAAYC,OAAS,CAAA,CAAC,CAGrC7D,GACHtC,KAAKa,SAASuF,KAAK9D,CAAAA,CACpB,CAMD,KAAKF,EAAAA,CACJpC,KAAKW,YAAYyF,KAAKhE,CAAAA,CAAM,CAM7B,OAAOE,EAAAA,CACN,OAAOtC,KAAKc,aAAauF,IAAI/D,CAAAA,CAAG,CAMjC,WAECuD,MAAMC,KAAK9F,KAAKc,YAAAA,EAAcwF,QAAQhE,GAAAA,CACrCtC,KAAKgG,QAAQ1D,CAAAA,CAAAA,CAAAA,CACb,CAQF,aAAkDA,EAAAA,CACjD,OAAOtC,KAAKgB,gBAAgBuF,IAAIjE,CAAAA,CAAG,CAAA,kMC3UrC,IAAqBkE,EAArB,cAA2CC,iyCAA3C,aAAA/F,CAAAgG,MAAAA,GAAAC,SAAAA,EAE6C3G,KAAA4G,KAAAA,GACD5G,KAAAyD,OAA+B,UAC/BzD,KAAAoD,SAAkC9C,EAAsBuG,KACvD7G,KAAAuD,WACAvD,KAAAmD,KAAAA,GACAnD,KAAA0D,cAAAA,GACD1D,KAAAsD,MAAQ,GAGnDtD,KAAQ8G,SAAWC,cAGP/G,KAAAgH,eAAiB,YAC7BhH,KAAQiH,mBAAyC,KAyHjDjH,KAAQkH,mBAAsBpF,GAAAA,CAC7BA,EAAEqF,gBAAAA,EACGnH,KAAKmD,MACT1C,EAAMuF,QAAQhG,KAAKsC,MAIrBtC,KAAQoH,oBAAuBtF,GAAAA,CAC9BA,EAAEqF,gBAAAA,EACF1G,EAAMuF,QAAQhG,KAAKsC,GAAAA,CAAAA,CACpB,CAhIA,aAAa+E,EAAoBC,EAAAA,CAC5BA,GACHtH,KAAKiH,mBAAqBpE,SAAS0E,cAEnCvH,KAAKwH,mBAAAA,EAAmB,EACxBxH,KAAKyH,MAAAA,IAELzH,KAAKwH,mBAAAA,EAAmB,EACxBxH,KAAKiH,oBAAoBQ,MAAAA,EACzBzH,KAAKiH,mBAAqB,KAE5B,CAEA,mBAAAS,CACChB,MAAMgB,kBAAAA,EACN1H,KAAK2H,oBAAAA,CACN,CAEA,sBAAAC,CACClB,MAAMkB,qBAAAA,EACN5H,KAAK6H,cAAczB,KAAAA,EAAK,CACzB,CAEQ,qBAAAuB,CAEP,MAAMG,EAAY9H,KAAK0D,cACpBjC,EAAAA,UAAyBC,OAAQ,UAAA,EAAYJ,KAC7Ce,EAAAA,IAAIP,GAAAA,CACHA,EAAEiG,eAAAA,EACF/H,KAAKyF,WAAAA,CAAAA,CAAAA,CAAAA,EAGNtD,EAAAA,GAAG,IAAA,EAAMb,KAAKyD,EAAAA,KAAK,CAAA,CAAA,EAGhBiD,EAASvG,EAAAA,UAAyBzB,KAAM,SAAA,EAAWsB,KACxDe,EAAAA,IAAIqD,GAAAA,CACCA,EAAMuC,MAAQ,UAARA,CAAqBjI,KAAKmD,MAAQnD,KAAK4G,OAChDlB,EAAMqC,iBACNrC,EAAMyB,gBAAAA,EACN1G,EAAMuF,QAAQhG,KAAKsC,GAAAA,EAAAA,CAAAA,CAAAA,EAMhB4F,EAAazG,EAAAA,UAAsCC,OAAQnB,CAAAA,EAAuBe,KACvFe,EAAAA,IAAIP,GAAAA,CACCA,EAAEC,OAAOO,MAAQtC,KAAKsC,KACzBtC,KAAKC,cACJ,IAAIC,YAAYM,EAAgB,CAC/BuB,OAAQ,CAAEtB,MAAOT,IAAAA,EACjBG,WACAC,SAAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,EAMf+H,EAAAA,MAAML,EAAWE,EAAQE,CAAAA,EAAY5G,KAAKK,EAAAA,UAAU3B,KAAK6H,aAAAA,CAAAA,EAAgB7C,UAAAA,CAC1E,CAEQ,mBAAmBoD,EAAAA,CAE1B,MAAMC,EAASrI,KAAK4C,cAChByF,GACHxC,MAAMC,KAAKuC,EAAOC,QAAAA,EAAUhC,QAAQiC,GAAAA,CAC/BA,IAAUvI,MAAQuI,aAAiBrE,cAClCkE,EACHG,EAAMtF,aAAa,QAAS,EAAA,EAE5BsF,EAAMC,gBAAgB,OAAA,EAAA,CAAA,EAOtBxI,KAAK4C,gBAAkBC,SAASE,MACnC8C,MAAMC,KAAKjD,SAASE,KAAKuF,QAAAA,EAAUhC,QAAQiC,GAAAA,CACtCA,IAAUvI,MAAQuI,IAAUF,GAAUE,aAAiBrE,cACtDkE,EACHG,EAAMtF,aAAa,QAAS,EAAA,EAE5BsF,EAAMC,gBAAgB,OAAA,EAAA,CAAA,CAK3B,CAEA,gBAAgBC,EAAAA,CACfzI,KAAK8G,SAAS4B,OAAOzF,aAAa,cAAeO,OAAAA,CAAQiF,CAAAA,CAAAA,EACzDzI,KAAK8G,SAAS4B,OAAOzF,aAAa,aAAcO,OAAOiF,CAAAA,CAAAA,CACxD,CAEA,YAAAhD,CACCzF,KAAK4G,KAAAA,GACL5G,KAAKC,cAAc,IAAIC,YAAY,OAAA,CAAA,CACpC,CAEQ,iBAAAyI,CACP,MAAMC,EAAW,IAAI5I,KAAKgH,cAAAA,IAC1B,OAAQhH,KAAKgE,iBAAiBC,KAAK4E,GAAMA,EAAGC,QAAQF,CAAAA,GAAaC,EAAG/F,cAAc8F,CAAAA,CAAAA,GAA8B,IACjH,CAES,OAAAnB,CAER,MAAMsB,EAAmB/I,KAAK8C,cAAc,aAAA,EACxCiG,EACHA,EAAiBtB,MAAAA,EAKlBzH,KAAK2I,gBAAAA,GAAmBlB,MAAAA,CACzB,CAcA,QAAA3H,CACC,MAAMkJ,EAAe,CACpBvI,MAAAA,GACA,cAAeT,KAAK4G,KACpB,gBAAiB5G,KAAKmD,IAAAA,EAGjB8F,EAAiB,CACtBC,QAAAA,GACA,uBAAA,CAAyBlJ,KAAKmD,IAAAA,EAG/B,OAAOpD,EAAAA;AAAAA;AAAAA,YAEGoJ,EAAAA,SAASH,CAAAA,CAAAA;AAAAA;AAAAA,sBAECI,EAAAA,UAAUpJ,KAAKyD,SAAW,SAAW,cAAA,MAAgB,CAAA;AAAA,mBACxDzD,KAAK4G,IAAAA;AAAAA,iBACP5G,KAAK4G,IAAAA;AAAAA;AAAAA,MAEhByC,EAAAA,IAAIrJ,KAAK8G,QAAAA,CAAAA;AAAAA;AAAAA,iBAEEqC,EAAAA,SAASF,CAAAA,CAAAA,WAA0BjJ,KAAKmD,KAAAA,OAAmBnD,KAAKkH,kBAAAA;AAAAA;AAAAA,YAErElH,KAAKyD,SAAW,SAAW,MAAQ,UAAA;AAAA;AAAA,qBAE1BzD,KAAKoD,QAAAA;AAAAA;AAAAA,OAEnBkG,EAAAA,MACDtJ,KAAKyD,SAAW,SACb1D;;oBAEWC,KAAKoH,mBAAAA;AAAAA;AAAAA,iBAERgC,YAAUpJ,KAAKsD,OAAAA,MAAS,CAAA;AAAA,mCAEhC,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASR,CAAA,EClMM,IAAYiG,EAAkBC,EDEOC,EAAA,CAA1CC,EAAAA,SAAS,CAAEC,KAAMnG,OAAQoG,UAAS,CAAA,CAAA,EADfpD,EACuBqD,UAAA,MAAA,CAAA,EACCJ,EAAA,CAA3CC,EAAAA,SAAS,CAAEC,KAAMG,QAASF,UAAS,CAAA,CAAA,EAFhBpD,EAEwBqD,UAAA,OAAA,CAAA,EACDJ,EAAA,CAA1CC,EAAAA,SAAS,CAAEC,KAAMnG,OAAQoG,UAAS,CAAA,CAAA,EAHfpD,EAGuBqD,UAAA,SAAA,CAAA,EACAJ,EAAA,CAA1CC,EAAAA,SAAS,CAAEC,KAAMnG,OAAQoG,UAAS,CAAA,CAAA,EAJfpD,EAIuBqD,UAAA,WAAA,CAAA,EACCJ,EAAA,CAA3CC,EAAAA,SAAS,CAAEC,KAAMG,QAASF,QAAAA,EAAS,CAAA,CAAA,EALhBpD,EAKwBqD,UAAA,UAAA,GACAJ,EAAA,CAA3CC,EAAAA,SAAS,CAAEC,KAAMG,QAASF,QAAAA,EAAS,CAAA,CAAA,EANhBpD,EAMwBqD,UAAA,OAAA,GACAJ,EAAA,CAA3CC,EAAAA,SAAS,CAAEC,KAAMG,QAASF,QAAAA,EAAS,CAAA,CAAA,EAPhBpD,EAOwBqD,UAAA,gBAAA,GACDJ,EAAA,CAA1CC,EAAAA,SAAS,CAAEC,KAAMnG,OAAQoG,QAAAA,EAAS,CAAA,CAAA,EARfpD,EAQuBqD,UAAA,QAAA,GAIOJ,EAAA,CAAjDM,wBAAsB,CAAEC,UAAS,CAAA,CAAA,EAZdxD,EAY8BqD,UAAA,mBAAA,CAAA,EAEtCJ,EAAA,CAAXC,EAAAA,SAAAA,CAAAA,EAdmBlD,EAcRqD,UAAA,iBAAA,GAIZJ,EAAA,ECnBkBF,EDkBd,OCjBG,CAACU,EAAwBC,IAAAA,CAC/B,KAAA,CAAMC,WAAEA,CAAAA,EAAeF,EAEvBT,EAAUY,OAAOC,OAAO,CAAEC,uBAAsB,EAASd,CAAAA,EAEzDS,EAAkBE,WAAa,SAAUI,EAAAA,CAGxC,GAFAJ,EAAWK,KAAKxK,KAAMuK,CAAAA,EAElBA,EAAalE,IAAIkD,CAAAA,EAAW,CAC/B,MAAMkB,EAAWF,EAAahE,IAAIgD,CAAAA,EAC5BjC,EAAWtH,KAAKuJ,CAAAA,EAElBkB,IAAanD,IACXkC,GAASc,sBAAAA,CAAwBtK,KAAK0K,YAC1C1K,KAAKkK,CAAAA,EAAMM,KAAKxK,KAAMyK,EAAUnD,GAGnC,CACD,CAAA,EAAA,EDlBmBd,EAkBpBqD,UAAA,eAAA,GAlBoBrD,EAArBiD,EAAA,CADCpJ,EAAAA,cAAc,gBAAA,CAAA,EACMmG"}
1
+ {"version":3,"file":"sheet-BBT4JQ3Z.cjs","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\t<span class=\"text-[24px]\">&#8592; </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.component'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\thandleHistory?: boolean // Controls browser back button behavior\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet?: SchmancySheet\n\ttheme?: HTMLElement\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// Track sheet components for retrieval\n\tprivate sheetComponents = new Map<string, HTMLElement>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupSheetDismissLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\t// First check for existing sheet\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\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\t// Then find theme container\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\t// Determine uid - use provided uid or component tagName\n\t\t\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\n\t\t\t\t\t\t\t\t// First ask for existing sheet\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\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\t// Then ask for theme container\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}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\n\t\t\t\tmap(([existingSheet, theme, target]) => {\n\t\t\t\t\tlet sheet = existingSheet?.sheet\n\t\t\t\t\tlet targetContainer: HTMLElement\n\n\t\t\t\t\tif (sheet) {\n\t\t\t\t\t\t// Use existing sheet\n\t\t\t\t\t\tconsole.log('Found existing sheet:', sheet)\n\t\t\t\t\t\ttargetContainer = sheet.parentElement as HTMLElement\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Determine container - use theme from discovery or fallback\n\t\t\t\t\t\ttargetContainer = theme || (document.querySelector('schmancy-theme') as HTMLElement) || document.body\n\n\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\t\t\t\t\t\tconsole.log('Creating new sheet for uid:', uid)\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget.lock && sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\t// Use the dynamic position function here\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', String(target.persist))\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\n\t\t\t\t\t// Handle history logic if the property exists\n\t\t\t\t\tif (target.handleHistory !== undefined) {\n\t\t\t\t\t\tsheet.setAttribute('handleHistory', String(target.handleHistory))\n\t\t\t\t\t}\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Call onBeforeOpen callback if provided\n\t\t\t\t\tif (target.onBeforeOpen) {\n\t\t\t\t\t\ttarget.onBeforeOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle HTMLElement components\n\t\t\t\t\tconst assignedElements = sheet?.shadowRoot?.querySelector('slot')?.assignedElements() || []\n\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'Assigned elements in sheet:',\n\t\t\t\t\t\tassignedElements.map(e => (e as HTMLElement).tagName),\n\t\t\t\t\t)\n\n\t\t\t\t\tconst existingComponent = assignedElements.find(e => (e as HTMLElement).tagName === target.component.tagName)\n\n\t\t\t\t\tif (!existingComponent) {\n\t\t\t\t\t\t// Need to append the component\n\t\t\t\t\t\tconsole.log('Component not found, will append:', target.component.tagName)\n\t\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Component already exists, reusing:', target.component.tagName)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tconst uid =\n\t\t\t\t\t\ttarget.uid ?? (target.component instanceof HTMLElement ? target.component.tagName : `sheet-${Date.now()}`)\n\t\t\t\t\tthis.activeSheets.add(uid)\n\t\t\t\t\tthis.sheetComponents.set(uid, target.component)\n\n\t\t\t\t\t// Handle history integration - default to true if not specified\n\t\t\t\t\tconst shouldHandleHistory = target.handleHistory !== false\n\n\t\t\t\t\tif (shouldHandleHistory) {\n\t\t\t\t\t\t// Use history state to track this specific sheet\n\t\t\t\t\t\tconst historyState = {\n\t\t\t\t\t\t\tschmancySheet: true,\n\t\t\t\t\t\t\tuid: uid,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Push a new history state\n\t\t\t\t\t\thistory.pushState(historyState, '', window.location.href)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Call onAfterOpen callback if provided\n\t\t\t\t\tif (target.onAfterOpen) {\n\t\t\t\t\t\ttarget.onAfterOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up close event listener (always, not just for new sheets)\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(_ => {\n\t\t\t\t\t\t\t// Use the sheet reference directly, not e.target\n\t\t\t\t\t\t\tconst sheetElement = sheet as SchmancySheet\n\t\t\t\t\t\t\tconsole.log('Close event fired for sheet:', sheetElement)\n\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tif (sheetElement) {\n\t\t\t\t\t\t\t\tconst uid = sheetElement.getAttribute('uid')\n\t\t\t\t\t\t\t\tif (uid) {\n\t\t\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\t\t\tthis.sheetComponents.delete(uid)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\t\tconst persistAttr = sheetElement.getAttribute('persist')\n\t\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\t\t\t\t\t\t\t\tconsole.log('Sheet close - persist:', persistAttr, 'shouldRemove:', shouldRemove)\n\n\t\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\t\tconsole.log('Removing sheet from DOM:', uid)\n\t\t\t\t\t\t\t\t\tsheetElement.remove()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the sheet closing/dismissal logic\n\t */\n\tprivate setupSheetDismissLogic() {\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).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(new CustomEvent(SheetWhereAreYouRicky, { detail: { 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\ttap(([response, uid]) => {\n\t\t\t\t\tconsole.log('Dismiss called for uid:', uid, 'Found sheet:', !!response?.sheet)\n\t\t\t\t\tif (response?.sheet) {\n\t\t\t\t\t\tresponse.sheet.closeSheet()\n\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('No sheet found to dismiss for uid:', uid)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\tthis.$dismiss.next(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n\t/**\n\t * Gets the component instance for a given sheet\n\t * @param uid - The unique identifier of the sheet\n\t * @returns The component instance, or undefined if not found\n\t */\n\tgetComponent<T extends HTMLElement = HTMLElement>(uid: string): T | undefined {\n\t\treturn this.sheetComponents.get(uid) as T | undefined\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { fromEvent, merge, of, take, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t// Use ref directive instead of @query\n\tprivate sheetRef = createRef<HTMLDivElement>()\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\t// Use native inert attribute to prevent focus outside sheet\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button - only if handleHistory is true\n\t\tconst popState$ = this.handleHistory\n\t\t\t? fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\t\ttap(e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: of(null).pipe(take(0)) // Empty observable if handleHistory is false\n\n\t\t// Handle ESC key - listen on the sheet element for better event capture\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid)\n\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\t\t\t\tdetail: { sheet: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\t// Get all sibling elements and make them inert\n\t\tconst parent = this.parentElement\n\t\tif (parent) {\n\t\t\tArray.from(parent.children).forEach(child => {\n\t\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t// Also handle body's direct children if sheet is attached to body\n\t\tif (this.parentElement === document.body) {\n\t\t\tArray.from(document.body.children).forEach(child => {\n\t\t\t\tif (child !== this && child !== parent && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheetRef.value?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheetRef.value?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\t// First try native autofocus attribute\n\t\tconst autofocusElement = this.querySelector('[autofocus]') as HTMLElement\n\t\tif (autofocusElement) {\n\t\t\tautofocusElement.focus()\n\t\t\treturn\n\t\t}\n\n\t\t// Fallback to custom focus attribute\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\tprivate handleHeaderDismiss = (e: CustomEvent) => {\n\t\te.stopPropagation()\n\t\tsheet.dismiss(this.uid)\n\t}\n\n\trender() {\n\t\tconst sheetClasses = {\n\t\t\tsheet: true,\n\t\t\t'sheet--open': this.open,\n\t\t\t'sheet--locked': this.lock,\n\t\t}\n\n\t\tconst overlayClasses = {\n\t\t\toverlay: true,\n\t\t\t'overlay--interactive': !this.lock,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(sheetClasses)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-labelledby=${ifDefined(this.header !== 'hidden' ? 'sheet-title' : undefined)}\n\t\t\t\taria-hidden=${!this.open}\n\t\t\t\taria-modal=${this.open}\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t${ref(this.sheetRef)}\n\t\t\t>\n\t\t\t\t<div class=${classMap(overlayClasses)} @click=${this.lock ? undefined : this.handleOverlayClick}></div>\n\t\t\t\t<schmancy-grid\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${cache(\n\t\t\t\t\t\tthis.header !== 'hidden'\n\t\t\t\t\t\t\t? html`<schmancy-sheet-header\n\t\t\t\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t\t\t\t@dismiss=${this.handleHeaderDismiss}\n\t\t\t\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t\t\t\ttitle=${ifDefined(this.title || undefined)}\n\t\t\t\t\t\t\t\t></schmancy-sheet-header>`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t)}\n\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=\"overflow-auto\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll> <slot></slot></schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","render","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","bottomSheet","Subject","$dismiss","activeSheets","Set","sheetComponents","Map","popStateListenerActive","setupSheetOpeningLogic","setupSheetDismissLogic","setupPopStateListener","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","ThemeHereIAm","theme","of","target","tap","uid","component","tagName","ThemeWhereAreYou","existingSheet","targetContainer","parentElement","document","querySelector","body","createElement","setAttribute","appendChild","lock","position","innerWidth","title","persist","String","header","handleHistory","style","overflow","delay","onBeforeOpen","shadowRoot","assignedElements","find","HTMLElement","Date","now","add","set","historyState","schmancySheet","timestamp","history","pushState","location","href","onAfterOpen","take","subscribe","_","sheetElement","getAttribute","delete","persistAttr","remove","mergeMap","response","closeSheet","event","size","lastSheet","Array","from","pop","dismiss","state","sheetsArray","length","next","has","forEach","get","SchmancySheet","$LitElement","super","arguments","open","Side","sheetRef","createRef","focusAttribute","lastFocusedElement","handleOverlayClick","stopPropagation","handleHeaderDismiss","_oldValue","newValue","activeElement","setBackgroundInert","focus","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","key","rickyComm$","merge","inert","parent","children","child","removeAttribute","isShown","value","getFocusElement","selector","el","matches","autofocusElement","sheetClasses","overlayClasses","overlay","classMap","ifDefined","ref","cache","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","oldValue","hasUpdated"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { Subject as A, switchMap as B, forkJoin as x, fromEvent as d, of as w, takeUntil as u, timer as f, map as p, defaultIfEmpty as y, tap as l, delay as v, take as L, mergeMap as F, merge as U } from "rxjs";
2
2
  import { classMap as C } from "lit/directives/class-map.js";
3
3
  import "lit/directives/style-map.js";
4
- import { T as j } from "./tailwind.mixin-Bvelb8bX.js";
4
+ import { T as j } from "./tailwind.mixin-Bpgmqass.js";
5
5
  import { customElement as H, property as c, queryAssignedElements as M } from "lit/decorators.js";
6
6
  import { css as P, html as S } from "lit";
7
- import { $ as z } from "./litElement.mixin-C7_rhUMZ.js";
7
+ import { $ as z } from "./litElement.mixin-BYVS1wwl.js";
8
8
  import { cache as I } from "lit/directives/cache.js";
9
9
  import { ifDefined as $ } from "lit/directives/if-defined.js";
10
10
  import { createRef as R, ref as T } from "lit/directives/ref.js";
11
- import { a as q, T as N } from "./theme.component-C5vE2dqN.js";
11
+ import { a as q, T as N } from "./theme.component-BG4oCMuV.js";
12
12
  var J = Object.getOwnPropertyDescriptor;
13
13
  let O = class extends j(P``) {
14
14
  render() {
@@ -225,4 +225,4 @@ export {
225
225
  k as b,
226
226
  b as s
227
227
  };
228
- //# sourceMappingURL=sheet-CD8QHsiF.js.map
228
+ //# sourceMappingURL=sheet-DvCIJGFo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sheet-CD8QHsiF.js","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\t<span class=\"text-[24px]\">&#8592; </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.component'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\thandleHistory?: boolean // Controls browser back button behavior\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet?: SchmancySheet\n\ttheme?: HTMLElement\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// Track sheet components for retrieval\n\tprivate sheetComponents = new Map<string, HTMLElement>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupSheetDismissLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\t// First check for existing sheet\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\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\t// Then find theme container\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\t// Determine uid - use provided uid or component tagName\n\t\t\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\n\t\t\t\t\t\t\t\t// First ask for existing sheet\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\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\t// Then ask for theme container\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}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\n\t\t\t\tmap(([existingSheet, theme, target]) => {\n\t\t\t\t\tlet sheet = existingSheet?.sheet\n\t\t\t\t\tlet targetContainer: HTMLElement\n\n\t\t\t\t\tif (sheet) {\n\t\t\t\t\t\t// Use existing sheet\n\t\t\t\t\t\tconsole.log('Found existing sheet:', sheet)\n\t\t\t\t\t\ttargetContainer = sheet.parentElement as HTMLElement\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Determine container - use theme from discovery or fallback\n\t\t\t\t\t\ttargetContainer = theme || (document.querySelector('schmancy-theme') as HTMLElement) || document.body\n\n\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\t\t\t\t\t\tconsole.log('Creating new sheet for uid:', uid)\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget.lock && sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\t// Use the dynamic position function here\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', String(target.persist))\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\n\t\t\t\t\t// Handle history logic if the property exists\n\t\t\t\t\tif (target.handleHistory !== undefined) {\n\t\t\t\t\t\tsheet.setAttribute('handleHistory', String(target.handleHistory))\n\t\t\t\t\t}\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Call onBeforeOpen callback if provided\n\t\t\t\t\tif (target.onBeforeOpen) {\n\t\t\t\t\t\ttarget.onBeforeOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle HTMLElement components\n\t\t\t\t\tconst assignedElements = sheet?.shadowRoot?.querySelector('slot')?.assignedElements() || []\n\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'Assigned elements in sheet:',\n\t\t\t\t\t\tassignedElements.map(e => (e as HTMLElement).tagName),\n\t\t\t\t\t)\n\n\t\t\t\t\tconst existingComponent = assignedElements.find(e => (e as HTMLElement).tagName === target.component.tagName)\n\n\t\t\t\t\tif (!existingComponent) {\n\t\t\t\t\t\t// Need to append the component\n\t\t\t\t\t\tconsole.log('Component not found, will append:', target.component.tagName)\n\t\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Component already exists, reusing:', target.component.tagName)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tconst uid =\n\t\t\t\t\t\ttarget.uid ?? (target.component instanceof HTMLElement ? target.component.tagName : `sheet-${Date.now()}`)\n\t\t\t\t\tthis.activeSheets.add(uid)\n\t\t\t\t\tthis.sheetComponents.set(uid, target.component)\n\n\t\t\t\t\t// Handle history integration - default to true if not specified\n\t\t\t\t\tconst shouldHandleHistory = target.handleHistory !== false\n\n\t\t\t\t\tif (shouldHandleHistory) {\n\t\t\t\t\t\t// Use history state to track this specific sheet\n\t\t\t\t\t\tconst historyState = {\n\t\t\t\t\t\t\tschmancySheet: true,\n\t\t\t\t\t\t\tuid: uid,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Push a new history state\n\t\t\t\t\t\thistory.pushState(historyState, '', window.location.href)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Call onAfterOpen callback if provided\n\t\t\t\t\tif (target.onAfterOpen) {\n\t\t\t\t\t\ttarget.onAfterOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up close event listener (always, not just for new sheets)\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(_ => {\n\t\t\t\t\t\t\t// Use the sheet reference directly, not e.target\n\t\t\t\t\t\t\tconst sheetElement = sheet as SchmancySheet\n\t\t\t\t\t\t\tconsole.log('Close event fired for sheet:', sheetElement)\n\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tif (sheetElement) {\n\t\t\t\t\t\t\t\tconst uid = sheetElement.getAttribute('uid')\n\t\t\t\t\t\t\t\tif (uid) {\n\t\t\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\t\t\tthis.sheetComponents.delete(uid)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\t\tconst persistAttr = sheetElement.getAttribute('persist')\n\t\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\t\t\t\t\t\t\t\tconsole.log('Sheet close - persist:', persistAttr, 'shouldRemove:', shouldRemove)\n\n\t\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\t\tconsole.log('Removing sheet from DOM:', uid)\n\t\t\t\t\t\t\t\t\tsheetElement.remove()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the sheet closing/dismissal logic\n\t */\n\tprivate setupSheetDismissLogic() {\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).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(new CustomEvent(SheetWhereAreYouRicky, { detail: { 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\ttap(([response, uid]) => {\n\t\t\t\t\tconsole.log('Dismiss called for uid:', uid, 'Found sheet:', !!response?.sheet)\n\t\t\t\t\tif (response?.sheet) {\n\t\t\t\t\t\tresponse.sheet.closeSheet()\n\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('No sheet found to dismiss for uid:', uid)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\tthis.$dismiss.next(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n\t/**\n\t * Gets the component instance for a given sheet\n\t * @param uid - The unique identifier of the sheet\n\t * @returns The component instance, or undefined if not found\n\t */\n\tgetComponent<T extends HTMLElement = HTMLElement>(uid: string): T | undefined {\n\t\treturn this.sheetComponents.get(uid) as T | undefined\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { fromEvent, merge, of, take, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t// Use ref directive instead of @query\n\tprivate sheetRef = createRef<HTMLDivElement>()\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\t// Use native inert attribute to prevent focus outside sheet\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button - only if handleHistory is true\n\t\tconst popState$ = this.handleHistory\n\t\t\t? fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\t\ttap(e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: of(null).pipe(take(0)) // Empty observable if handleHistory is false\n\n\t\t// Handle ESC key - listen on the sheet element for better event capture\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid)\n\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\t\t\t\tdetail: { sheet: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\t// Get all sibling elements and make them inert\n\t\tconst parent = this.parentElement\n\t\tif (parent) {\n\t\t\tArray.from(parent.children).forEach(child => {\n\t\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t// Also handle body's direct children if sheet is attached to body\n\t\tif (this.parentElement === document.body) {\n\t\t\tArray.from(document.body.children).forEach(child => {\n\t\t\t\tif (child !== this && child !== parent && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheetRef.value?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheetRef.value?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\t// First try native autofocus attribute\n\t\tconst autofocusElement = this.querySelector('[autofocus]') as HTMLElement\n\t\tif (autofocusElement) {\n\t\t\tautofocusElement.focus()\n\t\t\treturn\n\t\t}\n\n\t\t// Fallback to custom focus attribute\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\tprivate handleHeaderDismiss = (e: CustomEvent) => {\n\t\te.stopPropagation()\n\t\tsheet.dismiss(this.uid)\n\t}\n\n\trender() {\n\t\tconst sheetClasses = {\n\t\t\tsheet: true,\n\t\t\t'sheet--open': this.open,\n\t\t\t'sheet--locked': this.lock,\n\t\t}\n\n\t\tconst overlayClasses = {\n\t\t\toverlay: true,\n\t\t\t'overlay--interactive': !this.lock,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(sheetClasses)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-labelledby=${ifDefined(this.header !== 'hidden' ? 'sheet-title' : undefined)}\n\t\t\t\taria-hidden=${!this.open}\n\t\t\t\taria-modal=${this.open}\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t${ref(this.sheetRef)}\n\t\t\t>\n\t\t\t\t<div class=${classMap(overlayClasses)} @click=${this.lock ? undefined : this.handleOverlayClick}></div>\n\t\t\t\t<schmancy-grid\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${cache(\n\t\t\t\t\t\tthis.header !== 'hidden'\n\t\t\t\t\t\t\t? html`<schmancy-sheet-header\n\t\t\t\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t\t\t\t@dismiss=${this.handleHeaderDismiss}\n\t\t\t\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t\t\t\ttitle=${ifDefined(this.title || undefined)}\n\t\t\t\t\t\t\t\t></schmancy-sheet-header>`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t)}\n\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=\"overflow-auto\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll> <slot></slot></schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","render","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","bottomSheet","Subject","$dismiss","activeSheets","Set","sheetComponents","Map","popStateListenerActive","setupSheetOpeningLogic","setupSheetDismissLogic","setupPopStateListener","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","ThemeHereIAm","theme","of","target","tap","uid","component","tagName","ThemeWhereAreYou","existingSheet","targetContainer","parentElement","document","querySelector","body","createElement","setAttribute","appendChild","lock","position","innerWidth","title","persist","String","header","handleHistory","style","overflow","delay","onBeforeOpen","shadowRoot","assignedElements","find","HTMLElement","Date","now","add","set","historyState","schmancySheet","timestamp","history","pushState","location","href","onAfterOpen","take","subscribe","_","sheetElement","getAttribute","delete","persistAttr","remove","mergeMap","response","closeSheet","event","size","lastSheet","Array","from","pop","dismiss","state","sheetsArray","length","next","has","closeAll","forEach","get","SchmancySheet","$LitElement","super","arguments","open","Side","sheetRef","createRef","focusAttribute","lastFocusedElement","handleOverlayClick","stopPropagation","handleHeaderDismiss","_oldValue","newValue","activeElement","setBackgroundInert","focus","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","key","rickyComm$","merge","inert","parent","children","child","removeAttribute","isShown","value","getFocusElement","selector","el","matches","autofocusElement","sheetClasses","overlayClasses","overlay","classMap","ifDefined","ref","cache","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","oldValue","hasUpdated"],"mappings":"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"}
1
+ {"version":3,"file":"sheet-DvCIJGFo.js","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\t<span class=\"text-[24px]\">&#8592; </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\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\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.component'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\thandleHistory?: boolean // Controls browser back button behavior\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet?: SchmancySheet\n\ttheme?: HTMLElement\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// Track sheet components for retrieval\n\tprivate sheetComponents = new Map<string, HTMLElement>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupSheetDismissLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\t// First check for existing sheet\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\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\t// Then find theme container\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\t// Determine uid - use provided uid or component tagName\n\t\t\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\n\t\t\t\t\t\t\t\t// First ask for existing sheet\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\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\t// Then ask for theme container\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}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\n\t\t\t\tmap(([existingSheet, theme, target]) => {\n\t\t\t\t\tlet sheet = existingSheet?.sheet\n\t\t\t\t\tlet targetContainer: HTMLElement\n\n\t\t\t\t\tif (sheet) {\n\t\t\t\t\t\t// Use existing sheet\n\t\t\t\t\t\tconsole.log('Found existing sheet:', sheet)\n\t\t\t\t\t\ttargetContainer = sheet.parentElement as HTMLElement\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Determine container - use theme from discovery or fallback\n\t\t\t\t\t\ttargetContainer = theme || (document.querySelector('schmancy-theme') as HTMLElement) || document.body\n\n\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\t\t\t\t\t\tconsole.log('Creating new sheet for uid:', uid)\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget.lock && sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\t// Use the dynamic position function here\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', String(target.persist))\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\n\t\t\t\t\t// Handle history logic if the property exists\n\t\t\t\t\tif (target.handleHistory !== undefined) {\n\t\t\t\t\t\tsheet.setAttribute('handleHistory', String(target.handleHistory))\n\t\t\t\t\t}\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Call onBeforeOpen callback if provided\n\t\t\t\t\tif (target.onBeforeOpen) {\n\t\t\t\t\t\ttarget.onBeforeOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle HTMLElement components\n\t\t\t\t\tconst assignedElements = sheet?.shadowRoot?.querySelector('slot')?.assignedElements() || []\n\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'Assigned elements in sheet:',\n\t\t\t\t\t\tassignedElements.map(e => (e as HTMLElement).tagName),\n\t\t\t\t\t)\n\n\t\t\t\t\tconst existingComponent = assignedElements.find(e => (e as HTMLElement).tagName === target.component.tagName)\n\n\t\t\t\t\tif (!existingComponent) {\n\t\t\t\t\t\t// Need to append the component\n\t\t\t\t\t\tconsole.log('Component not found, will append:', target.component.tagName)\n\t\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Component already exists, reusing:', target.component.tagName)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tconst uid =\n\t\t\t\t\t\ttarget.uid ?? (target.component instanceof HTMLElement ? target.component.tagName : `sheet-${Date.now()}`)\n\t\t\t\t\tthis.activeSheets.add(uid)\n\t\t\t\t\tthis.sheetComponents.set(uid, target.component)\n\n\t\t\t\t\t// Handle history integration - default to true if not specified\n\t\t\t\t\tconst shouldHandleHistory = target.handleHistory !== false\n\n\t\t\t\t\tif (shouldHandleHistory) {\n\t\t\t\t\t\t// Use history state to track this specific sheet\n\t\t\t\t\t\tconst historyState = {\n\t\t\t\t\t\t\tschmancySheet: true,\n\t\t\t\t\t\t\tuid: uid,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Push a new history state\n\t\t\t\t\t\thistory.pushState(historyState, '', window.location.href)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Call onAfterOpen callback if provided\n\t\t\t\t\tif (target.onAfterOpen) {\n\t\t\t\t\t\ttarget.onAfterOpen(target.component)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up close event listener (always, not just for new sheets)\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(_ => {\n\t\t\t\t\t\t\t// Use the sheet reference directly, not e.target\n\t\t\t\t\t\t\tconst sheetElement = sheet as SchmancySheet\n\t\t\t\t\t\t\tconsole.log('Close event fired for sheet:', sheetElement)\n\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tif (sheetElement) {\n\t\t\t\t\t\t\t\tconst uid = sheetElement.getAttribute('uid')\n\t\t\t\t\t\t\t\tif (uid) {\n\t\t\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\t\t\tthis.sheetComponents.delete(uid)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\t\tconst persistAttr = sheetElement.getAttribute('persist')\n\t\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\t\t\t\t\t\t\t\tconsole.log('Sheet close - persist:', persistAttr, 'shouldRemove:', shouldRemove)\n\n\t\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\t\tconsole.log('Removing sheet from DOM:', uid)\n\t\t\t\t\t\t\t\t\tsheetElement.remove()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the sheet closing/dismissal logic\n\t */\n\tprivate setupSheetDismissLogic() {\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).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(new CustomEvent(SheetWhereAreYouRicky, { detail: { 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\ttap(([response, uid]) => {\n\t\t\t\t\tconsole.log('Dismiss called for uid:', uid, 'Found sheet:', !!response?.sheet)\n\t\t\t\t\tif (response?.sheet) {\n\t\t\t\t\t\tresponse.sheet.closeSheet()\n\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('No sheet found to dismiss for uid:', uid)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\tthis.$dismiss.next(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n\t/**\n\t * Gets the component instance for a given sheet\n\t * @param uid - The unique identifier of the sheet\n\t * @returns The component instance, or undefined if not found\n\t */\n\tgetComponent<T extends HTMLElement = HTMLElement>(uid: string): T | undefined {\n\t\treturn this.sheetComponents.get(uid) as T | undefined\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { fromEvent, merge, of, take, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t// Use ref directive instead of @query\n\tprivate sheetRef = createRef<HTMLDivElement>()\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\t// Use native inert attribute to prevent focus outside sheet\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button - only if handleHistory is true\n\t\tconst popState$ = this.handleHistory\n\t\t\t? fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\t\ttap(e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: of(null).pipe(take(0)) // Empty observable if handleHistory is false\n\n\t\t// Handle ESC key - listen on the sheet element for better event capture\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid)\n\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\t\t\t\tdetail: { sheet: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\t// Get all sibling elements and make them inert\n\t\tconst parent = this.parentElement\n\t\tif (parent) {\n\t\t\tArray.from(parent.children).forEach(child => {\n\t\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t// Also handle body's direct children if sheet is attached to body\n\t\tif (this.parentElement === document.body) {\n\t\t\tArray.from(document.body.children).forEach(child => {\n\t\t\t\tif (child !== this && child !== parent && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheetRef.value?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheetRef.value?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\t// First try native autofocus attribute\n\t\tconst autofocusElement = this.querySelector('[autofocus]') as HTMLElement\n\t\tif (autofocusElement) {\n\t\t\tautofocusElement.focus()\n\t\t\treturn\n\t\t}\n\n\t\t// Fallback to custom focus attribute\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\tprivate handleHeaderDismiss = (e: CustomEvent) => {\n\t\te.stopPropagation()\n\t\tsheet.dismiss(this.uid)\n\t}\n\n\trender() {\n\t\tconst sheetClasses = {\n\t\t\tsheet: true,\n\t\t\t'sheet--open': this.open,\n\t\t\t'sheet--locked': this.lock,\n\t\t}\n\n\t\tconst overlayClasses = {\n\t\t\toverlay: true,\n\t\t\t'overlay--interactive': !this.lock,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(sheetClasses)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-labelledby=${ifDefined(this.header !== 'hidden' ? 'sheet-title' : undefined)}\n\t\t\t\taria-hidden=${!this.open}\n\t\t\t\taria-modal=${this.open}\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t${ref(this.sheetRef)}\n\t\t\t>\n\t\t\t\t<div class=${classMap(overlayClasses)} @click=${this.lock ? undefined : this.handleOverlayClick}></div>\n\t\t\t\t<schmancy-grid\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${cache(\n\t\t\t\t\t\tthis.header !== 'hidden'\n\t\t\t\t\t\t\t? html`<schmancy-sheet-header\n\t\t\t\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t\t\t\t@dismiss=${this.handleHeaderDismiss}\n\t\t\t\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t\t\t\ttitle=${ifDefined(this.title || undefined)}\n\t\t\t\t\t\t\t\t></schmancy-sheet-header>`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t)}\n\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=\"overflow-auto\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll> <slot></slot></schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","render","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","bottomSheet","Subject","$dismiss","activeSheets","Set","sheetComponents","Map","popStateListenerActive","setupSheetOpeningLogic","setupSheetDismissLogic","setupPopStateListener","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","ThemeHereIAm","theme","of","target","tap","uid","component","tagName","ThemeWhereAreYou","existingSheet","targetContainer","parentElement","document","querySelector","body","createElement","setAttribute","appendChild","lock","position","innerWidth","title","persist","String","header","handleHistory","style","overflow","delay","onBeforeOpen","shadowRoot","assignedElements","find","HTMLElement","Date","now","add","set","historyState","schmancySheet","timestamp","history","pushState","location","href","onAfterOpen","take","subscribe","_","sheetElement","getAttribute","delete","persistAttr","remove","mergeMap","response","closeSheet","event","size","lastSheet","Array","from","pop","dismiss","state","sheetsArray","length","next","has","closeAll","forEach","get","SchmancySheet","$LitElement","super","arguments","open","Side","sheetRef","createRef","focusAttribute","lastFocusedElement","handleOverlayClick","stopPropagation","handleHeaderDismiss","_oldValue","newValue","activeElement","setBackgroundInert","focus","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","key","rickyComm$","merge","inert","parent","children","child","removeAttribute","isShown","value","getFocusElement","selector","el","matches","autofocusElement","sheetClasses","overlayClasses","overlay","classMap","ifDefined","ref","cache","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","oldValue","hasUpdated"],"mappings":"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"}
package/dist/sheet.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./sheet-4oJm8fkG.cjs");exports.SchmancySheetPosition=e.SchmancySheetPosition,exports.SheetHereMorty=e.SheetHereMorty,exports.SheetWhereAreYouRicky=e.SheetWhereAreYouRicky,exports.sheet=e.sheet;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./sheet-BBT4JQ3Z.cjs");exports.SchmancySheetPosition=e.SchmancySheetPosition,exports.SheetHereMorty=e.SheetHereMorty,exports.SheetWhereAreYouRicky=e.SheetWhereAreYouRicky,exports.sheet=e.sheet;
2
2
  //# sourceMappingURL=sheet.cjs.map
package/dist/sheet.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as t, b as a, a as h, s as o } from "./sheet-CD8QHsiF.js";
1
+ import { S as t, b as a, a as h, s as o } from "./sheet-DvCIJGFo.js";
2
2
  export {
3
3
  t as SchmancySheetPosition,
4
4
  a as SheetHereMorty,
@@ -1,4 +1,4 @@
1
- "use strict";const u=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const p=require("./litElement.mixin-PLxdthiY.cjs");require("./tailwind.mixin-8-I14rPu.cjs");const o=require("lit/decorators.js"),d=require("lit"),m=require("lit/directives/cache.js"),S=require("rxjs/operators");var f=Object.defineProperty,v=Object.getOwnPropertyDescriptor,c=(t,s,i,l)=>{for(var r,e=l>1?void 0:l?v(s,i):s,n=t.length-1;n>=0;n--)(r=t[n])&&(e=(l?r(s,i,e):r(e))||e);return l&&e&&f(s,i,e),e};exports.SchmancySlide=class extends p.$LitElement(d.css`
1
+ "use strict";const u=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const p=require("./litElement.mixin-CbFQ2uxn.cjs");require("./tailwind.mixin-BU9fMdfc.cjs");const o=require("lit/decorators.js"),d=require("lit"),m=require("lit/directives/cache.js"),S=require("rxjs/operators");var f=Object.defineProperty,v=Object.getOwnPropertyDescriptor,c=(t,s,i,l)=>{for(var r,e=l>1?void 0:l?v(s,i):s,n=t.length-1;n>=0;n--)(r=t[n])&&(e=(l?r(s,i,e):r(e))||e);return l&&e&&f(s,i,e),e};exports.SchmancySlide=class extends p.$LitElement(d.css`
2
2
  :host {
3
3
  display: block;
4
4
  scroll-snap-align: center; /* If your slider uses scroll-snap */
@@ -80,4 +80,4 @@
80
80
  </div>
81
81
  </div>
82
82
  `}},a([o.state()],exports.SchmancySlider.prototype,"selectedIndex",2),a([o.property({type:Boolean})],exports.SchmancySlider.prototype,"showArrows",2),a([o.query("#slider")],exports.SchmancySlider.prototype,"slider",2),a([o.query("slot")],exports.SchmancySlider.prototype,"defaultSlot",2),exports.SchmancySlider=a([o.customElement("schmancy-slider")],exports.SchmancySlider);
83
- //# sourceMappingURL=slider-Dexp5Nxu.cjs.map
83
+ //# sourceMappingURL=slider-DWO4L_qC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"slider-Dexp5Nxu.cjs","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","constructor","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","render","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":"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"}
1
+ {"version":3,"file":"slider-DWO4L_qC.cjs","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","constructor","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","render","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { fromEvent as g } from "rxjs";
2
2
  import "lit/directives/class-map.js";
3
3
  import "lit/directives/style-map.js";
4
- import { $ as f } from "./litElement.mixin-C7_rhUMZ.js";
5
- import "./tailwind.mixin-Bvelb8bX.js";
4
+ import { $ as f } from "./litElement.mixin-BYVS1wwl.js";
5
+ import "./tailwind.mixin-Bpgmqass.js";
6
6
  import { property as d, customElement as m, state as x, query as y } from "lit/decorators.js";
7
7
  import { css as v, html as c } from "lit";
8
8
  import { cache as S } from "lit/directives/cache.js";
@@ -158,4 +158,4 @@ export {
158
158
  i as S,
159
159
  h as a
160
160
  };
161
- //# sourceMappingURL=slider-Cfy-71n8.js.map
161
+ //# sourceMappingURL=slider-py-bz6Vv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slider-Cfy-71n8.js","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","constructor","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","render","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":";;;;;;;;;;;;;AAoBO,IAAMA,IAAN,cAA4BC,EAAYC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;EAAxC,cAAAC;AAAAC,UAAAA,GAAAC,SAAAA,GAiBsBC,KAAAC,OAAkB,WAKlBD,KAAAE,MAAc,IAKdF,KAAAG,MAAc,IAKbH,KAAAI,eAKAJ,KAAAK,WAAAA,IAKAL,KAAAM,OAAAA,IAKAN,KAAAO,QAAAA,IAKDP,KAAAQ,MAAiB;AAAA,EAAA;AAAA,EAE7C,SAAAC;AACC,WAAOC,+BAAkCV,KAAKQ,GAAAA,KAAQG,EAAMX,KAAKY,YAAAA,CAAAA,CAAAA;AAAAA,EAClE;AAAA,EAEQ,cAAAA;AACP,YAAQZ,KAAKC;MACZ,KAAK;AACJ,eAAOS,6BAAgCV,KAAKE,GAAAA,UAAaF,KAAKG,GAAAA;AAAAA,MAC/D,KAAK;AACJ,eAAOO;AAAAA;AAAAA;AAAAA,aAGEV,KAAKE,GAAAA;AAAAA,mBACCF,KAAKI,QAAAA;AAAAA,mBACLJ,KAAKK,QAAAA;AAAAA,eACTL,KAAKM,IAAAA;AAAAA,gBACJN,KAAKO,KAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,MAMlB;AACC,eAAOG;AAAAA,IAAA;AAAA,EAEV;AAAA;AA9D4BG,EAAA,CAA3BC,EAAS,EAAEb,MAAMc,OAAAA,CAAAA,CAAAA,GAjBNrB,EAiBgBsB,WAAA,QAAA,IAKAH,EAAA,CAA3BC,EAAS,EAAEb,MAAMc,OAAAA,CAAAA,CAAAA,GAtBNrB,EAsBgBsB,WAAA,OAAA,CAAA,GAKAH,EAAA,CAA3BC,EAAS,EAAEb,MAAMc,OAAAA,CAAAA,CAAAA,GA3BNrB,EA2BgBsB,WAAA,OAAA,CAAA,GAKCH,EAAA,CAA5BC,EAAS,EAAEb,MAAMgB,QAAAA,CAAAA,CAAAA,GAhCNvB,EAgCiBsB,WAAA,YAAA,CAAA,GAKAH,EAAA,CAA5BC,EAAS,EAAEb,MAAMgB,QAAAA,CAAAA,CAAAA,GArCNvB,EAqCiBsB,WAAA,YAAA,CAAA,GAKAH,EAAA,CAA5BC,EAAS,EAAEb,MAAMgB,QAAAA,CAAAA,CAAAA,GA1CNvB,EA0CiBsB,WAAA,QAAA,CAAA,GAKAH,EAAA,CAA5BC,EAAS,EAAEb,MAAMgB,QAAAA,CAAAA,CAAAA,GA/CNvB,EA+CiBsB,WAAA,SAAA,CAAA,GAKDH,EAAA,CAA3BC,EAAS,EAAEb,MAAMc,YApDNrB,EAoDgBsB,WAAA,OAAA,CAAA,GApDhBtB,IAANmB,EAAA,CADNK,EAAc,oBACFxB,CAAAA;;;;;ACbN,IAAMyB,IAAN,cAA6BxB,EAAYC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAAzC,EAAA;AAAA,EAAA;AAAAE,UAAAA,GAAAC,SAAAA,GA6BGC,KAAQoB,gBAAwB,GAKZpB,KAAAqB,aAAAA;AAAAA,EAAsB;AAAA,EAKzC;AAETrB,SAAKsB,OAAOC,aAAa,GAGzBC,EAAUxB,KAAKsB,QAAQ,QAAA,EACrBG,KAAKC,EAAa,aAAgB,EAAEC,aAAU,CAAA,CAAA,EAC9CC,UAAU;AACV5B,WAAK6B,4BAAAA;AAAAA,IAAAA,CAAAA;AAAAA,EAER;AAAA,EAEQ;AACP,UAAMC,IAAS9B,KAAK+B,aAAaC,iBAAiB,EAAEC,SAAAA,GAAS,CAAA,KAAW,CAAA;AACxE,QAAA,CAAKH,EAAOI,OAAQ;AAEpB,UAAMC,IAAWnC,KAAKoB,eAGhBgB,IAAepC,KAAKsB,OAAOC,aAAavB,KAAKsB,OAAOe,cAAc;AAExE,QAAIC,IAAe,GACfC,IAAkBC;AAEtBV,IAAAA,EAAOW,QAAQ,CAACC,GAAOC,MAAAA;AACtB,YACMC,IADaF,EAAsBG,aACVH,EAAML,cAAc,GAC7CS,IAAWC,KAAKC,IAAIZ,IAAeQ;AAErCE,MAAAA,IAAWP,MACdA,IAAkBO,GAClBR,IAAeK;AAAAA,IAAAA,CAAAA,GAIjB3C,KAAKoB,gBAAgBkB,GAGjBtC,KAAKoB,kBAAkBe,KAC1BnC,KAAKiD,cACJ,IAAIC,YAAY,iBAAiB,EAChCC,QAAQ,EAAER,OAAO3C,KAAKoB,cAAAA,EAAAA,CAAAA,CAAAA;AAAAA,EAI1B;AAAA,EAEQ,UAAUgC,GAAAA;AACjB,UAAMtB,IAAS9B,KAAK+B,aAAaC,iBAAiB,EAAEC,SAAAA,GAAS,CAAA,KAAW;AACnEH,MAAOsB,CAAAA,KAEZpD,KAAKsB,OAAO+B,SAAS,EACpBC,MAAOxB,EAAOsB,CAAAA,EAA0BP,YACxCU,UAAU,SAAA,CAAA;AAAA,EAEZ;AAAA,EAEQ,cAAAC;AACPxD,SAAKyD,UAAUzD,KAAKoB,gBAAgB,CAAA;AAAA,EACrC;AAAA,EAEQ,cAAAsC;AACP,UAAM5B,IAAS9B,KAAK+B,aAAaC,iBAAiB,EAAEC,YAAS,CAAA,KAAW,CAAA;AACpEjC,SAAKoB,gBAAgBU,EAAOI,SAAS,KACxClC,KAAKyD,UAAUzD,KAAKoB,gBAAgB,CAAA;AAAA,EAEtC;AAAA,EAEA,SAAAX;AACC,UAAMqB,IAAS9B,KAAK+B,aAAaC,iBAAiB,EAAEC,YAAS,CAAA,KAAW,CAAA;AAExE,WAAOvB;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,MAQHV,KAAKqB,aACJX;AAAAA;AAAAA;AAAAA,iBAGUV,KAAKwD,WAAAA;AAAAA,oBACFxD,KAAKoB,kBAAkB,CAAlBA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,iBAMRpB,KAAK0D,WAAAA;AAAAA,oBACF1D,KAAKoB,kBAAkBU,EAAOI,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA,UAKpD,IAAA;AAAA;AAAA;AAAA;AAAA,OAIAJ,EAAO6B,IAAI,CAACC,GAAGjB,MAAAA;AAChB,YAAMkB,IAAalB,MAAU3C,KAAKoB;AAClC,aAAOV;AAAAA,mCACsBmD,IAAa,iBAAiB,UAAA;AAAA;AAAA;AAAA;;;;EAOhE;AAAA;AAxHiBhD,EAAA,CAAhBiD,EAAAA,CAAAA,GA7BW3C,EA6BKH,WAAA,iBAAA,CAAA,GAKYH,EAAA,CAA5BC,EAAS,EAAEb,MAAMgB,QAAAA,CAAAA,CAAAA,GAlCNE,EAkCiBH,WAAA,cAAA,IAEHH,EAAA,CAAzBkD,EAAM,SAAA,CAAA,GApCK5C,EAoCcH,WAAA,UAAA,IACHH,EAAA,CAAtBkD,EAAM,MAAA,CAAA,GArCK5C,EAqCWH,WAAA,eAAA,IArCXG,IAANN,EAAA,CADNK,EAAc,iBAAA,CAAA,GACFC;"}
1
+ {"version":3,"file":"slider-py-bz6Vv.js","sources":["../src/slider/slide.ts","../src/slider/slider.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\n\n/**\n * Supported slide \"types.\"\n * - 'image': Renders an <img>\n * - 'video': Renders a <video>\n * - 'content': Renders a <slot> (the default)\n */\ntype SlideType = 'image' | 'video' | 'content'\n\n/**\n * Allowed values for the 'fit' property,\n * which maps to CSS object-fit.\n */\ntype ObjectFit = 'cover' | 'contain' | 'fill' | 'scale-down' | 'none'\n\n@customElement('schmancy-slide')\nexport class SchmancySlide extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tscroll-snap-align: center; /* If your slider uses scroll-snap */\n\t}\n\n\t.slide {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: auto;\n\t\tobject-fit: var(--object-fit, cover);\n\t}\n`) {\n\t/**\n\t * Determines how this slide should be rendered.\n\t * Defaults to 'content' if not provided.\n\t */\n\t@property({ type: String }) type: SlideType = 'content'\n\n\t/**\n\t * Source for images or videos (if `type` is 'image' or 'video').\n\t */\n\t@property({ type: String }) src: string = ''\n\n\t/**\n\t * Alternate text for images.\n\t */\n\t@property({ type: String }) alt: string = ''\n\n\t/**\n\t * Whether to show default video controls (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) controls = true\n\n\t/**\n\t * Whether the video should autoplay (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) autoplay = false\n\n\t/**\n\t * Whether the video should loop (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Whether the video is muted (if `type` is 'video').\n\t */\n\t@property({ type: Boolean }) muted = false\n\n\t/**\n\t * CSS `object-fit` property, applied to images/videos.\n\t */\n\t@property({ type: String }) fit: ObjectFit = 'cover'\n\n\trender() {\n\t\treturn html` <div style=\"--object-fit: ${this.fit}\">${cache(this.renderSlide())}</div> `\n\t}\n\n\tprivate renderSlide() {\n\t\tswitch (this.type) {\n\t\t\tcase 'image':\n\t\t\t\treturn html` <img class=\"slide\" src=\"${this.src}\" alt=\"${this.alt}\" loading=\"lazy\" /> `\n\t\t\tcase 'video':\n\t\t\t\treturn html`\n\t\t\t\t\t<video\n\t\t\t\t\t\tclass=\"slide\"\n\t\t\t\t\t\tsrc=\"${this.src}\"\n\t\t\t\t\t\t?controls=\"${this.controls}\"\n\t\t\t\t\t\t?autoplay=\"${this.autoplay}\"\n\t\t\t\t\t\t?loop=\"${this.loop}\"\n\t\t\t\t\t\t?muted=\"${this.muted}\"\n\t\t\t\t\t>\n\t\t\t\t\t\tYour browser does not support HTML video.\n\t\t\t\t\t</video>\n\t\t\t\t`\n\t\t\tcase 'content':\n\t\t\tdefault:\n\t\t\t\treturn html`<slot></slot>`\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slide': SchmancySlide\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { fromEvent } from 'rxjs'\nimport { throttleTime } from 'rxjs/operators'\n\n@customElement('schmancy-slider')\nexport class SchmancySlider extends $LitElement(css`\n\t.slider {\n\t\t/* Lay out slides horizontally, one after another */\n\t\tdisplay: flex;\n\t\toverflow-x: auto;\n\n\t\t/* Optional: scroll snapping */\n\t\tscroll-snap-type: x mandatory;\n\n\t\t/* Hide scrollbars */\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n\t.slider::-webkit-scrollbar {\n\t\tdisplay: none; /* Chrome, Safari, Opera */\n\t}\n\n\t/* \n Ensure each slide takes up the full slider width.\n \"schmancy-slide\" is the child custom element.\n */\n\t::slotted(schmancy-slide) {\n\t\tflex: 0 0 100%;\n\t\tbox-sizing: border-box;\n\t}\n`) {\n\t/**\n\t * Currently centered slide index\n\t */\n\t@state() private selectedIndex: number = 0\n\n\t/**\n\t * If true, renders next/prev buttons\n\t */\n\t@property({ type: Boolean }) showArrows: boolean = true\n\n\t@query('#slider') private slider!: HTMLDivElement\n\t@query('slot') private defaultSlot!: HTMLSlotElement\n\n\tprotected firstUpdated() {\n\t\t// Start at leftmost position\n\t\tthis.slider.scrollLeft = 0\n\n\t\t// Throttle scroll events to update selected index\n\t\tfromEvent(this.slider, 'scroll')\n\t\t\t.pipe(throttleTime(100, undefined, { trailing: true }))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.updateSelectedIndexOnScroll()\n\t\t\t})\n\t}\n\n\tprivate updateSelectedIndexOnScroll() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides.length) return\n\n\t\tconst oldIndex = this.selectedIndex\n\n\t\t// Center of the slider’s visible area\n\t\tconst sliderCenter = this.slider.scrollLeft + this.slider.clientWidth / 2\n\n\t\tlet closestIndex = 0\n\t\tlet closestDistance = Infinity\n\n\t\tslides.forEach((slide, index) => {\n\t\t\tconst itemStart = (slide as HTMLElement).offsetLeft\n\t\t\tconst itemCenter = itemStart + slide.clientWidth / 2\n\t\t\tconst distance = Math.abs(sliderCenter - itemCenter)\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance\n\t\t\t\tclosestIndex = index\n\t\t\t}\n\t\t})\n\n\t\tthis.selectedIndex = closestIndex\n\n\t\t// If the index changed, dispatch event\n\t\tif (this.selectedIndex !== oldIndex) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('slide-changed', {\n\t\t\t\t\tdetail: { index: this.selectedIndex },\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate goToSlide(newIndex: number) {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (!slides[newIndex]) return\n\n\t\tthis.slider.scrollTo({\n\t\t\tleft: (slides[newIndex] as HTMLElement).offsetLeft,\n\t\t\tbehavior: 'smooth',\n\t\t})\n\t}\n\n\tprivate onPrevClick() {\n\t\tthis.goToSlide(this.selectedIndex - 1)\n\t}\n\n\tprivate onNextClick() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\t\tif (this.selectedIndex < slides.length - 1) {\n\t\t\tthis.goToSlide(this.selectedIndex + 1)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst slides = this.defaultSlot?.assignedElements({ flatten: true }) ?? []\n\n\t\treturn html`\n\t\t\t<div class=\"relative inset-0\">\n\t\t\t\t<!-- The scrollable track -->\n\t\t\t\t<div class=\"slider\" id=\"slider\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Next/Prev Buttons (Optional) -->\n\t\t\t\t${this.showArrows\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute left-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onPrevClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === 0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_left\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\tclass=\"absolute right-2 top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\t\t\t@click=${this.onNextClick}\n\t\t\t\t\t\t\t\t?disabled=${this.selectedIndex === slides.length - 1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tchevron_right\n\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: null}\n\n\t\t\t\t<!-- Dots / indicators -->\n\t\t\t\t<div class=\"absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2\">\n\t\t\t\t\t${slides.map((_, index) => {\n\t\t\t\t\t\tconst isSelected = index === this.selectedIndex\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<schmancy-button .variant=${isSelected ? 'filled tonal' : 'outlined'} class=\"rounded-full \">\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-slider': SchmancySlider\n\t}\n}\n"],"names":["SchmancySlide","$LitElement","css","constructor","super","arguments","this","type","src","alt","controls","autoplay","loop","muted","fit","render","html","cache","renderSlide","__decorateClass","property","String","prototype","Boolean","customElement","SchmancySlider","selectedIndex","showArrows","slider","scrollLeft","fromEvent","pipe","throttleTime","trailing","subscribe","updateSelectedIndexOnScroll","slides","defaultSlot","assignedElements","flatten","length","oldIndex","sliderCenter","clientWidth","closestIndex","closestDistance","Infinity","forEach","slide","index","itemCenter","offsetLeft","distance","Math","abs","dispatchEvent","CustomEvent","detail","newIndex","scrollTo","left","behavior","onPrevClick","goToSlide","onNextClick","map","_","isSelected","state","query"],"mappings":"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"}
package/dist/slider.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./slider-Dexp5Nxu.cjs");Object.defineProperty(exports,"SchmancySlide",{enumerable:!0,get:()=>e.SchmancySlide}),Object.defineProperty(exports,"SchmancySlider",{enumerable:!0,get:()=>e.SchmancySlider});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./slider-DWO4L_qC.cjs");Object.defineProperty(exports,"SchmancySlide",{enumerable:!0,get:()=>e.SchmancySlide}),Object.defineProperty(exports,"SchmancySlider",{enumerable:!0,get:()=>e.SchmancySlider});
2
2
  //# sourceMappingURL=slider.cjs.map
package/dist/slider.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as c, a as e } from "./slider-Cfy-71n8.js";
1
+ import { S as c, a as e } from "./slider-py-bz6Vv.js";
2
2
  export {
3
3
  c as SchmancySlide,
4
4
  e as SchmancySlider
@@ -1,7 +1,7 @@
1
1
  import "rxjs";
2
2
  import "lit/directives/class-map.js";
3
3
  import "lit/directives/style-map.js";
4
- import { T as d } from "./tailwind.mixin-Bvelb8bX.js";
4
+ import { T as d } from "./tailwind.mixin-Bpgmqass.js";
5
5
  import { customElement as y, property as l } from "lit/decorators.js";
6
6
  import { css as u, html as p } from "lit";
7
7
  var v = Object.getOwnPropertyDescriptor;
@@ -132,4 +132,4 @@ let n = class extends d(u`
132
132
  }
133
133
  };
134
134
  c([l({ type: String, reflect: !0 })], n.prototype, "color", 2), c([l({ type: Number })], n.prototype, "size", 2), c([l({ type: Boolean })], n.prototype, "glass", 2), n = c([y("schmancy-spinner")], n);
135
- //# sourceMappingURL=spinner-CFBJounC.js.map
135
+ //# sourceMappingURL=spinner-DpmMO5_E.js.map