@mhmo91/schmancy 0.8.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/dist/{animated-text-Bc3qyXjp.cjs → animated-text-B3DQRJBy.cjs} +2 -2
  2. package/dist/{animated-text-Bc3qyXjp.cjs.map → animated-text-B3DQRJBy.cjs.map} +1 -1
  3. package/dist/{animated-text-CNx6Pmlo.js → animated-text-BAj4-6hE.js} +3 -3
  4. package/dist/{animated-text-CNx6Pmlo.js.map → animated-text-BAj4-6hE.js.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-7mWxekxE.js → area.component-CP4DZ0d8.js} +3 -3
  9. package/dist/{area.component-7mWxekxE.js.map → area.component-CP4DZ0d8.js.map} +1 -1
  10. package/dist/{area.component-CS_gSutH.cjs → area.component-ChxSLt16.cjs} +2 -2
  11. package/dist/{area.component-CS_gSutH.cjs.map → area.component-ChxSLt16.cjs.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-y-IyzH4r.cjs → autocomplete-CAaVSg4g.cjs} +2 -2
  14. package/dist/{autocomplete-y-IyzH4r.cjs.map → autocomplete-CAaVSg4g.cjs.map} +1 -1
  15. package/dist/{autocomplete-Ci4jo3Ur.js → autocomplete-CGbACUYd.js} +4 -4
  16. package/dist/{autocomplete-Ci4jo3Ur.js.map → autocomplete-CGbACUYd.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/{avatar-DBfJucB9.cjs → avatar-nWOZXEsW.cjs} +3 -3
  20. package/dist/avatar-nWOZXEsW.cjs.map +1 -0
  21. package/dist/{avatar-BdyuuIk7.js → avatar-rLCF6MSI.js} +58 -58
  22. package/dist/avatar-rLCF6MSI.js.map +1 -0
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-CowHieO2.js → boat-Ckt9v__d.js} +3 -3
  26. package/dist/{boat-CowHieO2.js.map → boat-Ckt9v__d.js.map} +1 -1
  27. package/dist/{boat-DkNUc1UO.cjs → boat-yNAZ2LLB.cjs} +2 -2
  28. package/dist/{boat-DkNUc1UO.cjs.map → boat-yNAZ2LLB.cjs.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/busy.cjs +1 -1
  32. package/dist/busy.js +1 -1
  33. package/dist/button.cjs +1 -1
  34. package/dist/button.js +1 -1
  35. package/dist/card.cjs +1 -1
  36. package/dist/card.js +1 -1
  37. package/dist/charts.cjs +1 -1
  38. package/dist/charts.js +1 -1
  39. package/dist/{checkbox-BvWcABPr.cjs → checkbox-BnAlpsJN.cjs} +2 -2
  40. package/dist/{checkbox-BvWcABPr.cjs.map → checkbox-BnAlpsJN.cjs.map} +1 -1
  41. package/dist/{checkbox-BY4Sn8F2.js → checkbox-D22yfGe3.js} +2 -2
  42. package/dist/{checkbox-BY4Sn8F2.js.map → checkbox-D22yfGe3.js.map} +1 -1
  43. package/dist/checkbox.cjs +1 -1
  44. package/dist/checkbox.js +1 -1
  45. package/dist/chips.cjs +1 -1
  46. package/dist/chips.js +2 -2
  47. package/dist/code-highlight.cjs +1 -1
  48. package/dist/code-highlight.js +1 -1
  49. package/dist/{code-preview-CYjmAxfs.js → code-preview-DPlQayFd.js} +2 -2
  50. package/dist/{code-preview-CYjmAxfs.js.map → code-preview-DPlQayFd.js.map} +1 -1
  51. package/dist/{code-preview-BIFIJigy.cjs → code-preview-jPnX60FF.cjs} +2 -2
  52. package/dist/{code-preview-BIFIJigy.cjs.map → code-preview-jPnX60FF.cjs.map} +1 -1
  53. package/dist/components.cjs +1 -1
  54. package/dist/components.js +1 -1
  55. package/dist/content-drawer.cjs +1 -1
  56. package/dist/content-drawer.js +1 -1
  57. package/dist/{date-range-BdIqI7LC.js → date-range-GFm5NG33.js} +4 -4
  58. package/dist/{date-range-BdIqI7LC.js.map → date-range-GFm5NG33.js.map} +1 -1
  59. package/dist/{date-range-inline-Df8u6Ecy.cjs → date-range-inline-CgX2o0FP.cjs} +2 -2
  60. package/dist/{date-range-inline-Df8u6Ecy.cjs.map → date-range-inline-CgX2o0FP.cjs.map} +1 -1
  61. package/dist/{date-range-inline-Cnhs9atd.js → date-range-inline-DTQLESAZ.js} +3 -3
  62. package/dist/{date-range-inline-Cnhs9atd.js.map → date-range-inline-DTQLESAZ.js.map} +1 -1
  63. package/dist/date-range-inline.cjs +1 -1
  64. package/dist/date-range-inline.js +1 -1
  65. package/dist/{date-range-B80Ummtv.cjs → date-range-ug3B9CFT.cjs} +2 -2
  66. package/dist/{date-range-B80Ummtv.cjs.map → date-range-ug3B9CFT.cjs.map} +1 -1
  67. package/dist/date-range.cjs +1 -1
  68. package/dist/date-range.js +1 -1
  69. package/dist/{delay-BWsVHQib.cjs → delay-CWtBL0VD.cjs} +2 -2
  70. package/dist/{delay-BWsVHQib.cjs.map → delay-CWtBL0VD.cjs.map} +1 -1
  71. package/dist/{delay-CCa9nN4A.js → delay-DEe1CmHc.js} +2 -2
  72. package/dist/{delay-CCa9nN4A.js.map → delay-DEe1CmHc.js.map} +1 -1
  73. package/dist/delay.cjs +1 -1
  74. package/dist/delay.js +1 -1
  75. package/dist/{details-Bee5ya0L.js → details-D-LXW23W.js} +2 -2
  76. package/dist/{details-Bee5ya0L.js.map → details-D-LXW23W.js.map} +1 -1
  77. package/dist/{details-oaVHXU7U.cjs → details-DVke77dU.cjs} +2 -2
  78. package/dist/{details-oaVHXU7U.cjs.map → details-DVke77dU.cjs.map} +1 -1
  79. package/dist/details.cjs +1 -1
  80. package/dist/details.js +1 -1
  81. package/dist/dialog.cjs +1 -1
  82. package/dist/{dialog.component-BriB-kFi.cjs → dialog.component-BM0D-hK9.cjs} +2 -2
  83. package/dist/{dialog.component-BriB-kFi.cjs.map → dialog.component-BM0D-hK9.cjs.map} +1 -1
  84. package/dist/{dialog.component-CMUoCC7O.js → dialog.component-a7FlKhGD.js} +3 -3
  85. package/dist/{dialog.component-CMUoCC7O.js.map → dialog.component-a7FlKhGD.js.map} +1 -1
  86. package/dist/dialog.js +1 -1
  87. package/dist/{divider-B7DBbYFI.js → divider-CzTpxOqt.js} +3 -3
  88. package/dist/{divider-B7DBbYFI.js.map → divider-CzTpxOqt.js.map} +1 -1
  89. package/dist/{divider-Dl4TToQZ.cjs → divider-D8KStUhN.cjs} +2 -2
  90. package/dist/{divider-Dl4TToQZ.cjs.map → divider-D8KStUhN.cjs.map} +1 -1
  91. package/dist/divider.cjs +1 -1
  92. package/dist/divider.js +1 -1
  93. package/dist/{dropdown-content-C2W7OttQ.cjs → dropdown-content-CngZN3vv.cjs} +2 -2
  94. package/dist/{dropdown-content-C2W7OttQ.cjs.map → dropdown-content-CngZN3vv.cjs.map} +1 -1
  95. package/dist/{dropdown-content-DzhOtilY.js → dropdown-content-DCn-g0-f.js} +3 -3
  96. package/dist/{dropdown-content-DzhOtilY.js.map → dropdown-content-DCn-g0-f.js.map} +1 -1
  97. package/dist/dropdown.cjs +1 -1
  98. package/dist/dropdown.js +1 -1
  99. package/dist/{email-recipients-Bh5VC0rc.cjs → email-recipients-BhntMZMf.cjs} +2 -2
  100. package/dist/{email-recipients-Bh5VC0rc.cjs.map → email-recipients-BhntMZMf.cjs.map} +1 -1
  101. package/dist/{email-recipients-BWqZKo3m.js → email-recipients-BzjAKNJ0.js} +6 -6
  102. package/dist/{email-recipients-BWqZKo3m.js.map → email-recipients-BzjAKNJ0.js.map} +1 -1
  103. package/dist/extra.cjs +1 -1
  104. package/dist/extra.js +1 -1
  105. package/dist/{flex-53G-PJx7.js → flex-5dR48zie.js} +2 -2
  106. package/dist/{flex-53G-PJx7.js.map → flex-5dR48zie.js.map} +1 -1
  107. package/dist/{flex-DFSIy0t4.cjs → flex-oHl2EfYB.cjs} +2 -2
  108. package/dist/{flex-DFSIy0t4.cjs.map → flex-oHl2EfYB.cjs.map} +1 -1
  109. package/dist/{form-Zq7g2JS8.cjs → form-BlPiAPt7.cjs} +2 -2
  110. package/dist/{form-Zq7g2JS8.cjs.map → form-BlPiAPt7.cjs.map} +1 -1
  111. package/dist/{form-BtRK9bnp.js → form-BxVM6JTn.js} +2 -2
  112. package/dist/{form-BtRK9bnp.js.map → form-BxVM6JTn.js.map} +1 -1
  113. package/dist/form.cjs +1 -1
  114. package/dist/form.js +1 -1
  115. package/dist/{formField.mixin-2jSL7WF_.js → formField.mixin-BCGA7Ea3.js} +2 -2
  116. package/dist/{formField.mixin-2jSL7WF_.js.map → formField.mixin-BCGA7Ea3.js.map} +1 -1
  117. package/dist/{formField.mixin-DkN2ufR_.cjs → formField.mixin-BfJMifU9.cjs} +2 -2
  118. package/dist/{formField.mixin-DkN2ufR_.cjs.map → formField.mixin-BfJMifU9.cjs.map} +1 -1
  119. package/dist/{icon-pU_cfmpD.cjs → icon-DHEXr3c-.cjs} +2 -2
  120. package/dist/{icon-pU_cfmpD.cjs.map → icon-DHEXr3c-.cjs.map} +1 -1
  121. package/dist/{icon-B5qeYrDu.js → icon-DYpLoegR.js} +2 -2
  122. package/dist/{icon-B5qeYrDu.js.map → icon-DYpLoegR.js.map} +1 -1
  123. package/dist/{icon-button-HSYaQBNF.js → icon-button-CmZBLHWC.js} +3 -3
  124. package/dist/{icon-button-HSYaQBNF.js.map → icon-button-CmZBLHWC.js.map} +1 -1
  125. package/dist/{icon-button-BpmGFjaR.cjs → icon-button-IbSX8C98.cjs} +2 -2
  126. package/dist/{icon-button-BpmGFjaR.cjs.map → icon-button-IbSX8C98.cjs.map} +1 -1
  127. package/dist/icons.cjs +1 -1
  128. package/dist/icons.js +1 -1
  129. package/dist/index.cjs +1 -1
  130. package/dist/index.js +56 -56
  131. package/dist/{input-8G9YY9qv.cjs → input-BByjYlgl.cjs} +2 -2
  132. package/dist/{input-8G9YY9qv.cjs.map → input-BByjYlgl.cjs.map} +1 -1
  133. package/dist/{input-BJMF5Fyk.js → input-D0cQ9DOY.js} +3 -3
  134. package/dist/{input-BJMF5Fyk.js.map → input-D0cQ9DOY.js.map} +1 -1
  135. package/dist/{input-chip-tbrw56ix.js → input-chip-B5ErXgCB.js} +2 -2
  136. package/dist/{input-chip-tbrw56ix.js.map → input-chip-B5ErXgCB.js.map} +1 -1
  137. package/dist/{input-chip-CocdqTzr.cjs → input-chip-DkWaTciP.cjs} +2 -2
  138. package/dist/{input-chip-CocdqTzr.cjs.map → input-chip-DkWaTciP.cjs.map} +1 -1
  139. package/dist/input.cjs +1 -1
  140. package/dist/input.js +1 -1
  141. package/dist/{json-DPnyOA3K.cjs → json-BZVe74np.cjs} +2 -2
  142. package/dist/{json-DPnyOA3K.cjs.map → json-BZVe74np.cjs.map} +1 -1
  143. package/dist/{json-CvcloKQv.js → json-PKewOWuJ.js} +3 -3
  144. package/dist/{json-CvcloKQv.js.map → json-PKewOWuJ.js.map} +1 -1
  145. package/dist/json.cjs +1 -1
  146. package/dist/json.js +1 -1
  147. package/dist/layout.cjs +1 -1
  148. package/dist/layout.js +2 -2
  149. package/dist/{lightbox-service-3mHqBKEh.cjs → lightbox-service-D-0JtxB1.cjs} +2 -2
  150. package/dist/lightbox-service-D-0JtxB1.cjs.map +1 -0
  151. package/dist/{lightbox-service-DxbYZAuv.js → lightbox-service-DZMnb1eU.js} +3 -3
  152. package/dist/lightbox-service-DZMnb1eU.js.map +1 -0
  153. package/dist/lightbox.cjs +1 -1
  154. package/dist/lightbox.js +1 -1
  155. package/dist/{list-JjR7WOrd.cjs → list-B_2m7l3g.cjs} +6 -6
  156. package/dist/list-B_2m7l3g.cjs.map +1 -0
  157. package/dist/{list-FWXmY-eQ.js → list-CW56LV-v.js} +13 -13
  158. package/dist/list-CW56LV-v.js.map +1 -0
  159. package/dist/list.cjs +1 -1
  160. package/dist/list.js +1 -1
  161. package/dist/{litElement.mixin-BVBdv0GP.cjs → litElement.mixin-CrpeGpZ7.cjs} +2 -2
  162. package/dist/{litElement.mixin-BVBdv0GP.cjs.map → litElement.mixin-CrpeGpZ7.cjs.map} +1 -1
  163. package/dist/{litElement.mixin-Wcu4yIIs.js → litElement.mixin-DHZXtvYq.js} +2 -2
  164. package/dist/{litElement.mixin-Wcu4yIIs.js.map → litElement.mixin-DHZXtvYq.js.map} +1 -1
  165. package/dist/mailbox.cjs +1 -1
  166. package/dist/mailbox.js +1 -1
  167. package/dist/{map-Br6xJFxG.js → map-2Hl60a0A.js} +6 -6
  168. package/dist/{map-Br6xJFxG.js.map → map-2Hl60a0A.js.map} +1 -1
  169. package/dist/{map-D9R3OCne.cjs → map-DyPS9G7M.cjs} +3 -3
  170. package/dist/{map-D9R3OCne.cjs.map → map-DyPS9G7M.cjs.map} +1 -1
  171. package/dist/map.cjs +1 -1
  172. package/dist/map.js +1 -1
  173. package/dist/{media-DibPwAjJ.cjs → media-CS8HpKnK.cjs} +2 -2
  174. package/dist/{media-DibPwAjJ.cjs.map → media-CS8HpKnK.cjs.map} +1 -1
  175. package/dist/{media-BV_1DfcW.js → media-DtWbcRxL.js} +2 -2
  176. package/dist/{media-BV_1DfcW.js.map → media-DtWbcRxL.js.map} +1 -1
  177. package/dist/{menu-HKqlq99V.js → menu-Caju5-zd.js} +3 -3
  178. package/dist/{menu-HKqlq99V.js.map → menu-Caju5-zd.js.map} +1 -1
  179. package/dist/{menu-vNrV-Nuq.cjs → menu-rX5RPAI2.cjs} +2 -2
  180. package/dist/{menu-vNrV-Nuq.cjs.map → menu-rX5RPAI2.cjs.map} +1 -1
  181. package/dist/menu.cjs +1 -1
  182. package/dist/menu.js +1 -1
  183. package/dist/mixins.cjs +1 -1
  184. package/dist/mixins.js +3 -3
  185. package/dist/nav-drawer.cjs +1 -1
  186. package/dist/nav-drawer.js +1 -1
  187. package/dist/navigation-bar.cjs +1 -1
  188. package/dist/navigation-bar.js +1 -1
  189. package/dist/{navigation-rail-DKXumnmt.js → navigation-rail-Ctketq5a.js} +32 -25
  190. package/dist/navigation-rail-Ctketq5a.js.map +1 -0
  191. package/dist/{navigation-rail-D1o3qDe_.cjs → navigation-rail-DC9_oSIM.cjs} +12 -12
  192. package/dist/navigation-rail-DC9_oSIM.cjs.map +1 -0
  193. package/dist/navigation-rail.cjs +1 -1
  194. package/dist/navigation-rail.js +1 -1
  195. package/dist/{notification-service-B5ljba4P.js → notification-service-CUlfXqmj.js} +3 -3
  196. package/dist/{notification-service-B5ljba4P.js.map → notification-service-CUlfXqmj.js.map} +1 -1
  197. package/dist/{notification-service-ICRT05L0.cjs → notification-service-DknbpqTt.cjs} +2 -2
  198. package/dist/{notification-service-ICRT05L0.cjs.map → notification-service-DknbpqTt.cjs.map} +1 -1
  199. package/dist/notification.cjs +1 -1
  200. package/dist/notification.js +2 -2
  201. package/dist/{notify-B9CpO1Ru.js → notify-DJSOWTxv.js} +2 -2
  202. package/dist/{notify-B9CpO1Ru.js.map → notify-DJSOWTxv.js.map} +1 -1
  203. package/dist/{notify-NX-dl60E.cjs → notify-DickIEHW.cjs} +2 -2
  204. package/dist/{notify-NX-dl60E.cjs.map → notify-DickIEHW.cjs.map} +1 -1
  205. package/dist/{option-B4JKMrLg.js → option-Bng41-rY.js} +2 -2
  206. package/dist/{option-B4JKMrLg.js.map → option-Bng41-rY.js.map} +1 -1
  207. package/dist/{option-epyXLWoY.cjs → option-DYT5Rkgy.cjs} +2 -2
  208. package/dist/{option-epyXLWoY.cjs.map → option-DYT5Rkgy.cjs.map} +1 -1
  209. package/dist/option.cjs +1 -1
  210. package/dist/option.js +1 -1
  211. package/dist/{page-Bmi1QHtq.cjs → page-BLn9gtSd.cjs} +2 -2
  212. package/dist/{page-Bmi1QHtq.cjs.map → page-BLn9gtSd.cjs.map} +1 -1
  213. package/dist/{page-BpygEntU.js → page-D-ROcQDd.js} +4 -4
  214. package/dist/{page-BpygEntU.js.map → page-D-ROcQDd.js.map} +1 -1
  215. package/dist/page.cjs +1 -1
  216. package/dist/page.js +1 -1
  217. package/dist/{payment-card-form-3kAXDbXf.cjs → payment-card-form-5UtfWzoW.cjs} +2 -2
  218. package/dist/{payment-card-form-3kAXDbXf.cjs.map → payment-card-form-5UtfWzoW.cjs.map} +1 -1
  219. package/dist/{payment-card-form-BxkHuSls.js → payment-card-form-BJa4RgF2.js} +3 -3
  220. package/dist/{payment-card-form-BxkHuSls.js.map → payment-card-form-BJa4RgF2.js.map} +1 -1
  221. package/dist/{pills-C3fIvfn8.js → pills-BS5rZ6C3.js} +3 -3
  222. package/dist/{pills-C3fIvfn8.js.map → pills-BS5rZ6C3.js.map} +1 -1
  223. package/dist/{pills-MmHyBGQu.cjs → pills-Blf7IAeq.cjs} +2 -2
  224. package/dist/{pills-MmHyBGQu.cjs.map → pills-Blf7IAeq.cjs.map} +1 -1
  225. package/dist/{progress-qx8jtrOA.cjs → progress-DlhYniW_.cjs} +5 -5
  226. package/dist/progress-DlhYniW_.cjs.map +1 -0
  227. package/dist/{progress-0POmJs5o.js → progress-yTIX6EqC.js} +10 -13
  228. package/dist/progress-yTIX6EqC.js.map +1 -0
  229. package/dist/progress.cjs +1 -1
  230. package/dist/progress.js +1 -1
  231. package/dist/{qr-scanner-DQq-WLyo.cjs → qr-scanner-DOs7uNS_.cjs} +2 -2
  232. package/dist/{qr-scanner-DQq-WLyo.cjs.map → qr-scanner-DOs7uNS_.cjs.map} +1 -1
  233. package/dist/{qr-scanner-jwOSrD0N.js → qr-scanner-DjZ8mgHV.js} +2 -2
  234. package/dist/{qr-scanner-jwOSrD0N.js.map → qr-scanner-DjZ8mgHV.js.map} +1 -1
  235. package/dist/qr-scanner.cjs +1 -1
  236. package/dist/qr-scanner.js +1 -1
  237. package/dist/{radio-button-DraEYR2R.cjs → radio-button-N_PrrxKB.cjs} +2 -2
  238. package/dist/{radio-button-DraEYR2R.cjs.map → radio-button-N_PrrxKB.cjs.map} +1 -1
  239. package/dist/{radio-button-B0EUK_wg.js → radio-button-me3SRHGu.js} +3 -3
  240. package/dist/{radio-button-B0EUK_wg.js.map → radio-button-me3SRHGu.js.map} +1 -1
  241. package/dist/radio-group.cjs +1 -1
  242. package/dist/radio-group.js +1 -1
  243. package/dist/{schmancy-steps-container-C2StAA5K.js → schmancy-steps-container-J6P-NNNj.js} +2 -2
  244. package/dist/{schmancy-steps-container-C2StAA5K.js.map → schmancy-steps-container-J6P-NNNj.js.map} +1 -1
  245. package/dist/{schmancy-steps-container-B5aiqgMA.cjs → schmancy-steps-container-T57BKMzi.cjs} +2 -2
  246. package/dist/{schmancy-steps-container-B5aiqgMA.cjs.map → schmancy-steps-container-T57BKMzi.cjs.map} +1 -1
  247. package/dist/{scroll-Bu-vAg3d.js → scroll-C_gfUgjn.js} +2 -2
  248. package/dist/{scroll-Bu-vAg3d.js.map → scroll-C_gfUgjn.js.map} +1 -1
  249. package/dist/{scroll-BqT7bvhu.cjs → scroll-CecsowP7.cjs} +2 -2
  250. package/dist/{scroll-BqT7bvhu.cjs.map → scroll-CecsowP7.cjs.map} +1 -1
  251. package/dist/{select-i-uKur-W.js → select-BBA0gBHf.js} +3 -3
  252. package/dist/{select-i-uKur-W.js.map → select-BBA0gBHf.js.map} +1 -1
  253. package/dist/{select-HiEGJvOX.cjs → select-D9oCjv7N.cjs} +2 -2
  254. package/dist/{select-HiEGJvOX.cjs.map → select-D9oCjv7N.cjs.map} +1 -1
  255. package/dist/select.cjs +1 -1
  256. package/dist/select.js +1 -1
  257. package/dist/{sheet-BbrRW0S5.cjs → sheet-0oUfBmXX.cjs} +2 -2
  258. package/dist/{sheet-BbrRW0S5.cjs.map → sheet-0oUfBmXX.cjs.map} +1 -1
  259. package/dist/{sheet-B1g7E4dQ.js → sheet-CNcDT3VP.js} +5 -5
  260. package/dist/{sheet-B1g7E4dQ.js.map → sheet-CNcDT3VP.js.map} +1 -1
  261. package/dist/sheet.cjs +1 -1
  262. package/dist/sheet.js +2 -2
  263. package/dist/{sheet.service-4etIM-p6.js → sheet.service-2MobB-9z.js} +2 -2
  264. package/dist/{sheet.service-4etIM-p6.js.map → sheet.service-2MobB-9z.js.map} +1 -1
  265. package/dist/{sheet.service-BiRZjCdN.cjs → sheet.service-su_7yDQ-.cjs} +2 -2
  266. package/dist/{sheet.service-BiRZjCdN.cjs.map → sheet.service-su_7yDQ-.cjs.map} +1 -1
  267. package/dist/{slider-VYnbIRH2.cjs → slider-CV-Ehp_5.cjs} +2 -2
  268. package/dist/{slider-VYnbIRH2.cjs.map → slider-CV-Ehp_5.cjs.map} +1 -1
  269. package/dist/{slider-8E3Wad0t.js → slider-CkE-iFUy.js} +3 -3
  270. package/dist/{slider-8E3Wad0t.js.map → slider-CkE-iFUy.js.map} +1 -1
  271. package/dist/slider.cjs +1 -1
  272. package/dist/slider.js +1 -1
  273. package/dist/{spinner-DJgcI5wr.cjs → spinner-Bfn8KC-9.cjs} +2 -2
  274. package/dist/{spinner-DJgcI5wr.cjs.map → spinner-Bfn8KC-9.cjs.map} +1 -1
  275. package/dist/{spinner-CKm13CKN.js → spinner-DiMbWXp9.js} +2 -2
  276. package/dist/{spinner-CKm13CKN.js.map → spinner-DiMbWXp9.js.map} +1 -1
  277. package/dist/steps.cjs +1 -1
  278. package/dist/steps.js +1 -1
  279. package/dist/{suggestion-chip-6njXvvHm.js → suggestion-chip-CEDqUNoS.js} +3 -3
  280. package/dist/{suggestion-chip-6njXvvHm.js.map → suggestion-chip-CEDqUNoS.js.map} +1 -1
  281. package/dist/{suggestion-chip-DdLfqk7o.cjs → suggestion-chip-HhsLtZXR.cjs} +2 -2
  282. package/dist/{suggestion-chip-DdLfqk7o.cjs.map → suggestion-chip-HhsLtZXR.cjs.map} +1 -1
  283. package/dist/{surface-DcqbWGub.cjs → surface-CW3H23Va.cjs} +2 -2
  284. package/dist/{surface-DcqbWGub.cjs.map → surface-CW3H23Va.cjs.map} +1 -1
  285. package/dist/{surface-BYU3l_Q2.js → surface-eBfnSwQS.js} +2 -2
  286. package/dist/{surface-BYU3l_Q2.js.map → surface-eBfnSwQS.js.map} +1 -1
  287. package/dist/surface.cjs +1 -1
  288. package/dist/surface.js +1 -1
  289. package/dist/{table-C9fzDjjk.cjs → table-D0tiSL_u.cjs} +2 -2
  290. package/dist/{table-C9fzDjjk.cjs.map → table-D0tiSL_u.cjs.map} +1 -1
  291. package/dist/{table-Dq12ollZ.js → table-Dmo4TvTx.js} +2 -2
  292. package/dist/{table-Dq12ollZ.js.map → table-Dmo4TvTx.js.map} +1 -1
  293. package/dist/table.cjs +1 -1
  294. package/dist/table.js +1 -1
  295. package/dist/{tabs-compatibility-wnzlHtln.js → tabs-compatibility-Bit6y6en.js} +2 -2
  296. package/dist/{tabs-compatibility-wnzlHtln.js.map → tabs-compatibility-Bit6y6en.js.map} +1 -1
  297. package/dist/{tabs-compatibility-Dwtjfkcf.cjs → tabs-compatibility-Vq_2-ekz.cjs} +2 -2
  298. package/dist/{tabs-compatibility-Dwtjfkcf.cjs.map → tabs-compatibility-Vq_2-ekz.cjs.map} +1 -1
  299. package/dist/tabs.cjs +1 -1
  300. package/dist/tabs.js +1 -1
  301. package/dist/{tailwind.mixin-Ddt05Frc.js → tailwind.mixin-Bp_PR6yc.js} +2 -2
  302. package/dist/{tailwind.mixin-Ddt05Frc.js.map → tailwind.mixin-Bp_PR6yc.js.map} +1 -1
  303. package/dist/{tailwind.mixin-UijsBrYW.cjs → tailwind.mixin-Cp4PyXok.cjs} +2 -2
  304. package/dist/{tailwind.mixin-UijsBrYW.cjs.map → tailwind.mixin-Cp4PyXok.cjs.map} +1 -1
  305. package/dist/teleport.cjs +1 -1
  306. package/dist/teleport.js +1 -1
  307. package/dist/{textarea-Vd3zayJZ.js → textarea-B1d1QCqT.js} +2 -2
  308. package/dist/{textarea-Vd3zayJZ.js.map → textarea-B1d1QCqT.js.map} +1 -1
  309. package/dist/{textarea-DGmsw1B_.cjs → textarea-DG8CHhZA.cjs} +2 -2
  310. package/dist/{textarea-DGmsw1B_.cjs.map → textarea-DG8CHhZA.cjs.map} +1 -1
  311. package/dist/textarea.cjs +1 -1
  312. package/dist/textarea.js +1 -1
  313. package/dist/{theme-button-DG_Xwg9H.cjs → theme-button-CPL6Eaqd.cjs} +2 -2
  314. package/dist/{theme-button-DG_Xwg9H.cjs.map → theme-button-CPL6Eaqd.cjs.map} +1 -1
  315. package/dist/{theme-button-rGpEW_xS.js → theme-button-CrLuMQNe.js} +2 -2
  316. package/dist/{theme-button-rGpEW_xS.js.map → theme-button-CrLuMQNe.js.map} +1 -1
  317. package/dist/theme-button.cjs +1 -1
  318. package/dist/theme-button.js +1 -1
  319. package/dist/{theme-controller-boat-pLzK5zxL.cjs → theme-controller-boat-CXbNJSI3.cjs} +2 -2
  320. package/dist/{theme-controller-boat-pLzK5zxL.cjs.map → theme-controller-boat-CXbNJSI3.cjs.map} +1 -1
  321. package/dist/{theme-controller-boat-B1fjcqJI.js → theme-controller-boat-CzSmjyKq.js} +3 -3
  322. package/dist/{theme-controller-boat-B1fjcqJI.js.map → theme-controller-boat-CzSmjyKq.js.map} +1 -1
  323. package/dist/theme.cjs +1 -1
  324. package/dist/theme.js +1 -1
  325. package/dist/{timezone-IQkwr6Oh.js → timezone-4vwX0BgA.js} +3 -3
  326. package/dist/{timezone-IQkwr6Oh.js.map → timezone-4vwX0BgA.js.map} +1 -1
  327. package/dist/{timezone-BhUaIAV7.cjs → timezone-BxvQcqe1.cjs} +2 -2
  328. package/dist/{timezone-BhUaIAV7.cjs.map → timezone-BxvQcqe1.cjs.map} +1 -1
  329. package/dist/{tooltip-CwaiZC8f.js → tooltip-CjdvBf4X.js} +2 -2
  330. package/dist/{tooltip-CwaiZC8f.js.map → tooltip-CjdvBf4X.js.map} +1 -1
  331. package/dist/{tooltip-iEvxKg8g.cjs → tooltip-ZtnGjoJd.cjs} +2 -2
  332. package/dist/{tooltip-iEvxKg8g.cjs.map → tooltip-ZtnGjoJd.cjs.map} +1 -1
  333. package/dist/tooltip.cjs +1 -1
  334. package/dist/tooltip.js +1 -1
  335. package/dist/{tree-D9EbEsxn.js → tree-CBEjV7jP.js} +2 -2
  336. package/dist/{tree-D9EbEsxn.js.map → tree-CBEjV7jP.js.map} +1 -1
  337. package/dist/{tree-Bclu6uvv.cjs → tree-DP5U00NA.cjs} +2 -2
  338. package/dist/{tree-Bclu6uvv.cjs.map → tree-DP5U00NA.cjs.map} +1 -1
  339. package/dist/tree.cjs +1 -1
  340. package/dist/tree.js +1 -1
  341. package/dist/{typewriter-Bscwd-36.cjs → typewriter-C6kFjLcX.cjs} +2 -2
  342. package/dist/{typewriter-Bscwd-36.cjs.map → typewriter-C6kFjLcX.cjs.map} +1 -1
  343. package/dist/{typewriter-BjDPgRlj.js → typewriter-Eo5qXoGC.js} +4 -4
  344. package/dist/{typewriter-BjDPgRlj.js.map → typewriter-Eo5qXoGC.js.map} +1 -1
  345. package/dist/typewriter.cjs +1 -1
  346. package/dist/typewriter.js +1 -1
  347. package/dist/{typography-CConBBFH.js → typography-C_1gdM2I.js} +2 -2
  348. package/dist/{typography-CConBBFH.js.map → typography-C_1gdM2I.js.map} +1 -1
  349. package/dist/{typography-DLGT3DGz.cjs → typography-DGyjlLCE.cjs} +2 -2
  350. package/dist/{typography-DLGT3DGz.cjs.map → typography-DGyjlLCE.cjs.map} +1 -1
  351. package/dist/typography.cjs +1 -1
  352. package/dist/typography.js +1 -1
  353. package/package.json +1 -1
  354. package/types/src/navigation-rail/navigation-rail.d.ts +2 -0
  355. package/types/src/progress/progress.d.ts +1 -1
  356. package/dist/avatar-BdyuuIk7.js.map +0 -1
  357. package/dist/avatar-DBfJucB9.cjs.map +0 -1
  358. package/dist/lightbox-service-3mHqBKEh.cjs.map +0 -1
  359. package/dist/lightbox-service-DxbYZAuv.js.map +0 -1
  360. package/dist/list-FWXmY-eQ.js.map +0 -1
  361. package/dist/list-JjR7WOrd.cjs.map +0 -1
  362. package/dist/navigation-rail-D1o3qDe_.cjs.map +0 -1
  363. package/dist/navigation-rail-DKXumnmt.js.map +0 -1
  364. package/dist/progress-0POmJs5o.js.map +0 -1
  365. package/dist/progress-qx8jtrOA.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.component-BriB-kFi.cjs","sources":["../src/dialog/dialog-base.mixin.ts","../src/dialog/dialog.component.ts"],"sourcesContent":["import { autoPlacement, autoUpdate, computePosition, offset, shift, size } from '@floating-ui/dom'\nimport { LitElement } from 'lit'\nimport type { Constructor } from '../../mixins/constructor'\nimport type { IBaseMixin } from '../../mixins/baseElement'\n\nexport interface DialogPosition {\n\tx: number\n\ty: number\n}\n\nexport interface VirtualReference {\n\tgetBoundingClientRect: () => DOMRect\n}\n\n/**\n * Interface for the DialogBase mixin methods\n */\nexport interface IDialogBaseMixin {\n\tposition: DialogPosition\n\tshow(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean>\n\thide(result?: boolean): void\n\tisCentered(): boolean\n}\n\n/**\n * Dialog mixin with smart positioning using Floating UI.\n *\n * Uses autoPlacement to find the position with MOST available space,\n * minimizing the need for content scrolling.\n */\nexport const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(superClass: T) => {\n\tclass DialogBaseClass extends superClass {\n\t\tposition: DialogPosition = { x: 0, y: 0 }\n\t\tprotected resolvePromise?: (value: boolean) => void\n\t\tprotected cleanupAutoUpdate?: () => void\n\t\tprotected virtualReference?: VirtualReference\n\n\t\t/**\n\t\t * Override in subclass to return the dialog element\n\t\t */\n\t\tprotected getDialogElement(): HTMLElement | null {\n\t\t\treturn null\n\t\t}\n\n\t\t/**\n\t\t * Show the dialog at a specific position\n\t\t */\n\t\tasync show(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean> {\n\t\t\t// Cleanup previous positioning\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tlet x: number, y: number\n\n\t\t\tif (!positionOrEvent) {\n\t\t\t\tx = window.innerWidth / 2\n\t\t\t\ty = window.innerHeight / 2\n\t\t\t} else if ('clientX' in positionOrEvent) {\n\t\t\t\tx = positionOrEvent.clientX\n\t\t\t\ty = positionOrEvent.clientY\n\t\t\t} else if ('touches' in positionOrEvent && positionOrEvent.touches.length) {\n\t\t\t\tx = positionOrEvent.touches[0].clientX\n\t\t\t\ty = positionOrEvent.touches[0].clientY\n\t\t\t} else {\n\t\t\t\tconst pos = positionOrEvent as DialogPosition\n\t\t\t\tx = pos.x\n\t\t\t\ty = pos.y\n\t\t\t}\n\n\t\t\tthis.position = { x, y }\n\n\t\t\t// Virtual reference at click position\n\t\t\tthis.virtualReference = {\n\t\t\t\tgetBoundingClientRect: () => new DOMRect(x, y, 0, 0),\n\t\t\t}\n\n\t\t\t// Trigger re-render with new position (for correct isCentered() in render)\n\t\t\tthis.requestUpdate()\n\t\t\tawait this.updateComplete\n\n\t\t\tthis.setAttribute('active', '')\n\n\t\t\t// Setup Floating UI positioning for non-centered dialogs\n\t\t\tthis.setupPositioning()\n\n\t\t\treturn new Promise<boolean>(resolve => {\n\t\t\t\tthis.resolvePromise = resolve\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Hide the dialog\n\t\t */\n\t\thide(result = false): void {\n\t\t\tthis.removeAttribute('active')\n\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tif (this.resolvePromise) {\n\t\t\t\tthis.resolvePromise(result)\n\t\t\t\tthis.resolvePromise = undefined\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Check if position is near center\n\t\t */\n\t\tisCentered(): boolean {\n\t\t\tconst toleranceX = window.innerWidth * 0.3\n\t\t\tconst toleranceY = window.innerHeight * 0.3\n\n\t\t\treturn (\n\t\t\t\tMath.abs(this.position.x - window.innerWidth / 2) < toleranceX &&\n\t\t\t\tMath.abs(this.position.y - window.innerHeight / 2) < toleranceY\n\t\t\t)\n\t\t}\n\n\t\t/**\n\t\t * Setup positioning based on whether dialog is centered or positioned\n\t\t */\n\t\tprivate setupPositioning(): void {\n\t\t\tconst dialog = this.getDialogElement()\n\t\t\tif (!dialog) return\n\n\t\t\t// Centered dialogs: CSS handles everything, no JS positioning needed\n\t\t\tif (this.isCentered()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Positioned dialogs: use Floating UI with autoPlacement\n\t\t\tif (this.virtualReference) {\n\t\t\t\tthis.cleanupAutoUpdate = autoUpdate(\n\t\t\t\t\tthis.virtualReference,\n\t\t\t\t\tdialog,\n\t\t\t\t\t() => this.updatePosition(dialog),\n\t\t\t\t\t{\n\t\t\t\t\t\tancestorScroll: true,\n\t\t\t\t\t\tancestorResize: true,\n\t\t\t\t\t\telementResize: true,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tthis.updatePosition(dialog)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Update position using Floating UI.\n\t\t * autoPlacement finds the side with MOST space to minimize scrolling.\n\t\t */\n\t\tprivate async updatePosition(dialog: HTMLElement): Promise<void> {\n\t\t\tif (!this.virtualReference) return\n\n\t\t\tconst padding = 16\n\n\t\t\tconst { x, y } = await computePosition(this.virtualReference, dialog, {\n\t\t\t\tstrategy: 'fixed',\n\t\t\t\tmiddleware: [\n\t\t\t\t\t// Small offset from click point\n\t\t\t\t\toffset(8),\n\n\t\t\t\t\t// autoPlacement: picks placement with MOST available space\n\t\t\t\t\tautoPlacement({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tallowedPlacements: [\n\t\t\t\t\t\t\t'top-start',\n\t\t\t\t\t\t\t'top-end',\n\t\t\t\t\t\t\t'bottom-start',\n\t\t\t\t\t\t\t'bottom-end',\n\t\t\t\t\t\t\t'left-start',\n\t\t\t\t\t\t\t'left-end',\n\t\t\t\t\t\t\t'right-start',\n\t\t\t\t\t\t\t'right-end',\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\n\t\t\t\t\t// Keep on screen\n\t\t\t\t\tshift({ padding }),\n\n\t\t\t\t\t// Constrain width to available space (CSS handles height via dvh)\n\t\t\t\t\tsize({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tapply({ availableWidth, elements }) {\n\t\t\t\t\t\t\telements.floating.style.maxWidth = `${availableWidth}px`\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tObject.assign(dialog.style, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tleft: `${Math.round(x)}px`,\n\t\t\t\ttop: `${Math.round(y)}px`,\n\t\t\t\ttransform: 'none',\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Cleanup on disconnect\n\t\t */\n\t\tdisconnectedCallback(): void {\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\n\treturn DialogBaseClass as Constructor<IDialogBaseMixin> & T\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { fromEvent, tap } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { DialogBase } from './dialog-base.mixin'\nimport { DialogHereMorty, DialogWhereAreYouRicky, DialogWhereAreYouRickyEvent } from './dialog-events'\n\n/**\n * Unified dialog component that handles both content-only and confirm modes.\n *\n * @element schmancy-dialog\n * @slot default - Content slot for dialog body (used in content mode)\n * @slot content - Named slot for custom content in confirm mode\n *\n * @example Content mode (no buttons):\n * ```html\n * <schmancy-dialog>\n * <my-custom-content></my-custom-content>\n * </schmancy-dialog>\n * ```\n *\n * @example Confirm mode (with buttons):\n * ```html\n * <schmancy-dialog\n * title=\"Confirm Action\"\n * message=\"Are you sure?\"\n * confirm-text=\"Yes\"\n * cancel-text=\"No\"\n * ></schmancy-dialog>\n * ```\n */\n@customElement('schmancy-dialog')\nexport class SchmancyDialog extends DialogBase(\n\t$LitElement(css`\n\t\t:host {\n\t\t\tposition: fixed;\n\t\t\tz-index: 10000;\n\t\t\tinset: 0;\n\t\t\tdisplay: none;\n\t\t\t--dialog-width: fit-content;\n\t\t}\n\n\t\t:host([active]) {\n\t\t\tdisplay: block;\n\t\t}\n\t`),\n) {\n\t/**\n\t * Unique identifier for the dialog instance\n\t */\n\t@property({ type: String, reflect: true }) uid!: string\n\n\t/**\n\t * Dialog title (enables confirm mode when set)\n\t */\n\t@property({ type: String }) title: string | undefined = undefined\n\n\t/**\n\t * Dialog subtitle\n\t */\n\t@property({ type: String }) subtitle: string | undefined = undefined\n\n\t/**\n\t * Dialog message\n\t */\n\t@property({ type: String }) message: string | undefined = undefined\n\n\t/**\n\t * Text for confirm button (enables confirm mode when set with cancelText)\n\t */\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText: string | undefined = undefined\n\n\t/**\n\t * Text for cancel button\n\t */\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText: string | undefined = undefined\n\n\t/**\n\t * Dialog variant (affects button colors in confirm mode)\n\t */\n\t@property({ type: String }) variant: 'default' | 'danger' = 'default'\n\n\t/**\n\t * Whether to hide action buttons (force content mode)\n\t */\n\t@property({ type: Boolean, attribute: 'hide-actions' }) hideActions = false\n\n\t/**\n\t * Return the dialog element for positioning\n\t */\n\tprotected getDialogElement(): HTMLElement | null {\n\t\treturn this.shadowRoot?.querySelector('[role=\"dialog\"], [role=\"alertdialog\"]') as HTMLElement\n\t}\n\n\t/**\n\t * Check if dialog is in confirm mode (has buttons)\n\t */\n\tprivate get isConfirmMode(): boolean {\n\t\tif (this.hideActions) return false\n\t\treturn !!(this.confirmText?.trim() && this.cancelText?.trim())\n\t}\n\n\t/**\n\t * Handle component connection to DOM\n\t */\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Listen for \"where are you ricky\" events\n\t\tfromEvent<DialogWhereAreYouRickyEvent>(window, DialogWhereAreYouRicky)\n\t\t\t.pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Announce this dialog's presence to the service\n\t */\n\tprivate announcePresence(): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(DialogHereMorty, {\n\t\t\t\tdetail: { dialog: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle confirm action\n\t */\n\tprivate handleConfirm(): void {\n\t\tthis.hide(true)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('confirm', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle cancel/close action\n\t */\n\tprivate handleClose(): void {\n\t\tthis.hide(false)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(this.isConfirmMode ? 'cancel' : 'close', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\trender() {\n\t\tconst isCentered = this.isCentered()\n\t\tconst hasCustomContent = this.querySelectorAll('[slot=\"content\"]').length > 0\n\n\t\tconst dialogClasses = {\n\t\t\tdialog: true,\n\t\t\tfixed: true,\n\t\t\t'w-[var(--dialog-width)]': true,\n\t\t\t'max-w-[calc(100vw-2rem)]': true,\n\t\t\t'max-h-[90dvh]': true,\n\t\t\t'overflow-hidden': true,\n\t\t\t'top-1/2': isCentered,\n\t\t\t'left-1/2': isCentered,\n\t\t\t'-translate-x-1/2': isCentered,\n\t\t\t'-translate-y-1/2': isCentered,\n\t\t}\n\n\t\t// Confirm mode: with title/buttons\n\t\tif (this.isConfirmMode) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"fixed inset-0 bg-scrim/40\" @click=${this.handleClose}></div>\n\n\t\t\t\t<div class=${this.classMap(dialogClasses)} role=\"alertdialog\" aria-modal=\"true\">\n\t\t\t\t\t<schmancy-surface rounded=\"all\" elevation=\"3\" type=\"containerHigh\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-4\">\n\t\t\t\t\t\t\t<schmancy-form @submit=${this.handleConfirm}>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.title?.trim(),\n\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\" class=\"mb-1\">${this.title}</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\t\t\tthis.subtitle?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"subtitle\" token=\"xs\" class=\"mb-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t${this.subtitle}\n\t\t\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t${hasCustomContent\n\t\t\t\t\t\t\t\t\t? html`<div class=\"mb-4\"><slot name=\"content\"></slot></div>`\n\t\t\t\t\t\t\t\t\t: when(\n\t\t\t\t\t\t\t\t\t\t\tthis.message?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`<schmancy-typography type=\"body\" class=\"mb-4\">${this.message}</schmancy-typography>`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div class=\"flex justify-end gap-3\">\n\t\t\t\t\t\t\t\t\t<schmancy-button variant=\"outlined\" @click=${this.handleClose}>${this.cancelText}</schmancy-button>\n\t\t\t\t\t\t\t\t\t<schmancy-button type=\"submit\" variant=\"filled\">${this.confirmText}</schmancy-button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</schmancy-form>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Content mode: minimal, just slot\n\t\treturn html`\n\t\t\t<div class=\"fixed inset-0 bg-surface-container/10 backdrop-blur-xs\" @click=${this.handleClose}></div>\n\n\t\t\t<section class=${this.classMap(dialogClasses)} role=\"dialog\" aria-modal=\"true\">\n\t\t\t\t<schmancy-surface rounded=\"all\" type=\"surface\" elevation=\"2\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-2 md:p-4 max-h-[90dvh]\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t</schmancy-surface>\n\t\t\t</section>\n\t\t`\n\t}\n\n\t/**\n\t * Static helper for confirm dialogs\n\t */\n\tstatic async confirm(options: {\n\t\ttitle?: string\n\t\tsubtitle?: string\n\t\tmessage?: string\n\t\tconfirmText?: string\n\t\tcancelText?: string\n\t\tvariant?: 'default' | 'danger'\n\t\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\t\twidth?: string\n\t}): Promise<boolean> {\n\t\tlet dialog = document.querySelector('schmancy-dialog[data-static-confirm]') as SchmancyDialog\n\n\t\tif (!dialog) {\n\t\t\tdialog = document.createElement('schmancy-dialog') as SchmancyDialog\n\t\t\tdialog.setAttribute('data-static-confirm', '')\n\t\t\tdocument.body.appendChild(dialog)\n\t\t}\n\n\t\t// Set options\n\t\tdialog.title = options.title\n\t\tdialog.subtitle = options.subtitle\n\t\tdialog.message = options.message\n\t\tdialog.confirmText = options.confirmText ?? 'Confirm'\n\t\tdialog.cancelText = options.cancelText ?? 'Cancel'\n\t\tdialog.variant = options.variant ?? 'default'\n\t\tif (options.width) dialog.style.setProperty('--dialog-width', options.width)\n\n\t\treturn dialog.show(options.position)\n\t}\n\n\t/**\n\t * Simple shorthand - just pass message and optionally an event\n\t */\n\tstatic async ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tposition: event,\n\t\t})\n\t}\n}\n\n// Alias for backward compatibility\nexport { SchmancyDialog as ConfirmDialog }\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dialog': SchmancyDialog\n\t}\n}\n"],"names":["DialogBase","superClass","constructor","super","arguments","this","position","x","y","positionOrEvent","cleanupAutoUpdate","clientX","clientY","touches","length","pos","window","innerWidth","innerHeight","virtualReference","getBoundingClientRect","DOMRect","requestUpdate","updateComplete","setAttribute","setupPositioning","Promise","resolve","resolvePromise","result","removeAttribute","isCentered","toleranceX","toleranceY","Math","abs","dialog","getDialogElement","autoUpdate","updatePosition","ancestorScroll","ancestorResize","elementResize","computePosition","strategy","middleware","offset","autoPlacement","padding","allowedPlacements","shift","size","availableWidth","elements","floating","style","maxWidth","Object","assign","left","round","top","transform","disconnectedCallback","SchmancyDialog","$LitElement","css","title","subtitle","message","confirmText","cancelText","variant","hideActions","shadowRoot","querySelector","isConfirmMode","trim","connectedCallback","fromEvent","DialogWhereAreYouRicky","pipe","tap","e","detail","uid","announcePresence","takeUntil","disconnecting","subscribe","dispatchEvent","CustomEvent","DialogHereMorty","bubbles","composed","handleConfirm","hide","handleClose","render","hasCustomContent","querySelectorAll","dialogClasses","fixed","html","classMap","when","options","document","createElement","body","appendChild","width","setProperty","show","event","confirm","__decorateClass","property","type","String","reflect","prototype","attribute","Boolean","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.component-BM0D-hK9.cjs","sources":["../src/dialog/dialog-base.mixin.ts","../src/dialog/dialog.component.ts"],"sourcesContent":["import { autoPlacement, autoUpdate, computePosition, offset, shift, size } from '@floating-ui/dom'\nimport { LitElement } from 'lit'\nimport type { Constructor } from '../../mixins/constructor'\nimport type { IBaseMixin } from '../../mixins/baseElement'\n\nexport interface DialogPosition {\n\tx: number\n\ty: number\n}\n\nexport interface VirtualReference {\n\tgetBoundingClientRect: () => DOMRect\n}\n\n/**\n * Interface for the DialogBase mixin methods\n */\nexport interface IDialogBaseMixin {\n\tposition: DialogPosition\n\tshow(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean>\n\thide(result?: boolean): void\n\tisCentered(): boolean\n}\n\n/**\n * Dialog mixin with smart positioning using Floating UI.\n *\n * Uses autoPlacement to find the position with MOST available space,\n * minimizing the need for content scrolling.\n */\nexport const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(superClass: T) => {\n\tclass DialogBaseClass extends superClass {\n\t\tposition: DialogPosition = { x: 0, y: 0 }\n\t\tprotected resolvePromise?: (value: boolean) => void\n\t\tprotected cleanupAutoUpdate?: () => void\n\t\tprotected virtualReference?: VirtualReference\n\n\t\t/**\n\t\t * Override in subclass to return the dialog element\n\t\t */\n\t\tprotected getDialogElement(): HTMLElement | null {\n\t\t\treturn null\n\t\t}\n\n\t\t/**\n\t\t * Show the dialog at a specific position\n\t\t */\n\t\tasync show(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean> {\n\t\t\t// Cleanup previous positioning\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tlet x: number, y: number\n\n\t\t\tif (!positionOrEvent) {\n\t\t\t\tx = window.innerWidth / 2\n\t\t\t\ty = window.innerHeight / 2\n\t\t\t} else if ('clientX' in positionOrEvent) {\n\t\t\t\tx = positionOrEvent.clientX\n\t\t\t\ty = positionOrEvent.clientY\n\t\t\t} else if ('touches' in positionOrEvent && positionOrEvent.touches.length) {\n\t\t\t\tx = positionOrEvent.touches[0].clientX\n\t\t\t\ty = positionOrEvent.touches[0].clientY\n\t\t\t} else {\n\t\t\t\tconst pos = positionOrEvent as DialogPosition\n\t\t\t\tx = pos.x\n\t\t\t\ty = pos.y\n\t\t\t}\n\n\t\t\tthis.position = { x, y }\n\n\t\t\t// Virtual reference at click position\n\t\t\tthis.virtualReference = {\n\t\t\t\tgetBoundingClientRect: () => new DOMRect(x, y, 0, 0),\n\t\t\t}\n\n\t\t\t// Trigger re-render with new position (for correct isCentered() in render)\n\t\t\tthis.requestUpdate()\n\t\t\tawait this.updateComplete\n\n\t\t\tthis.setAttribute('active', '')\n\n\t\t\t// Setup Floating UI positioning for non-centered dialogs\n\t\t\tthis.setupPositioning()\n\n\t\t\treturn new Promise<boolean>(resolve => {\n\t\t\t\tthis.resolvePromise = resolve\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Hide the dialog\n\t\t */\n\t\thide(result = false): void {\n\t\t\tthis.removeAttribute('active')\n\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tif (this.resolvePromise) {\n\t\t\t\tthis.resolvePromise(result)\n\t\t\t\tthis.resolvePromise = undefined\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Check if position is near center\n\t\t */\n\t\tisCentered(): boolean {\n\t\t\tconst toleranceX = window.innerWidth * 0.3\n\t\t\tconst toleranceY = window.innerHeight * 0.3\n\n\t\t\treturn (\n\t\t\t\tMath.abs(this.position.x - window.innerWidth / 2) < toleranceX &&\n\t\t\t\tMath.abs(this.position.y - window.innerHeight / 2) < toleranceY\n\t\t\t)\n\t\t}\n\n\t\t/**\n\t\t * Setup positioning based on whether dialog is centered or positioned\n\t\t */\n\t\tprivate setupPositioning(): void {\n\t\t\tconst dialog = this.getDialogElement()\n\t\t\tif (!dialog) return\n\n\t\t\t// Centered dialogs: CSS handles everything, no JS positioning needed\n\t\t\tif (this.isCentered()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Positioned dialogs: use Floating UI with autoPlacement\n\t\t\tif (this.virtualReference) {\n\t\t\t\tthis.cleanupAutoUpdate = autoUpdate(\n\t\t\t\t\tthis.virtualReference,\n\t\t\t\t\tdialog,\n\t\t\t\t\t() => this.updatePosition(dialog),\n\t\t\t\t\t{\n\t\t\t\t\t\tancestorScroll: true,\n\t\t\t\t\t\tancestorResize: true,\n\t\t\t\t\t\telementResize: true,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tthis.updatePosition(dialog)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Update position using Floating UI.\n\t\t * autoPlacement finds the side with MOST space to minimize scrolling.\n\t\t */\n\t\tprivate async updatePosition(dialog: HTMLElement): Promise<void> {\n\t\t\tif (!this.virtualReference) return\n\n\t\t\tconst padding = 16\n\n\t\t\tconst { x, y } = await computePosition(this.virtualReference, dialog, {\n\t\t\t\tstrategy: 'fixed',\n\t\t\t\tmiddleware: [\n\t\t\t\t\t// Small offset from click point\n\t\t\t\t\toffset(8),\n\n\t\t\t\t\t// autoPlacement: picks placement with MOST available space\n\t\t\t\t\tautoPlacement({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tallowedPlacements: [\n\t\t\t\t\t\t\t'top-start',\n\t\t\t\t\t\t\t'top-end',\n\t\t\t\t\t\t\t'bottom-start',\n\t\t\t\t\t\t\t'bottom-end',\n\t\t\t\t\t\t\t'left-start',\n\t\t\t\t\t\t\t'left-end',\n\t\t\t\t\t\t\t'right-start',\n\t\t\t\t\t\t\t'right-end',\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\n\t\t\t\t\t// Keep on screen\n\t\t\t\t\tshift({ padding }),\n\n\t\t\t\t\t// Constrain width to available space (CSS handles height via dvh)\n\t\t\t\t\tsize({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tapply({ availableWidth, elements }) {\n\t\t\t\t\t\t\telements.floating.style.maxWidth = `${availableWidth}px`\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tObject.assign(dialog.style, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tleft: `${Math.round(x)}px`,\n\t\t\t\ttop: `${Math.round(y)}px`,\n\t\t\t\ttransform: 'none',\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Cleanup on disconnect\n\t\t */\n\t\tdisconnectedCallback(): void {\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\n\treturn DialogBaseClass as Constructor<IDialogBaseMixin> & T\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { fromEvent, tap } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { DialogBase } from './dialog-base.mixin'\nimport { DialogHereMorty, DialogWhereAreYouRicky, DialogWhereAreYouRickyEvent } from './dialog-events'\n\n/**\n * Unified dialog component that handles both content-only and confirm modes.\n *\n * @element schmancy-dialog\n * @slot default - Content slot for dialog body (used in content mode)\n * @slot content - Named slot for custom content in confirm mode\n *\n * @example Content mode (no buttons):\n * ```html\n * <schmancy-dialog>\n * <my-custom-content></my-custom-content>\n * </schmancy-dialog>\n * ```\n *\n * @example Confirm mode (with buttons):\n * ```html\n * <schmancy-dialog\n * title=\"Confirm Action\"\n * message=\"Are you sure?\"\n * confirm-text=\"Yes\"\n * cancel-text=\"No\"\n * ></schmancy-dialog>\n * ```\n */\n@customElement('schmancy-dialog')\nexport class SchmancyDialog extends DialogBase(\n\t$LitElement(css`\n\t\t:host {\n\t\t\tposition: fixed;\n\t\t\tz-index: 10000;\n\t\t\tinset: 0;\n\t\t\tdisplay: none;\n\t\t\t--dialog-width: fit-content;\n\t\t}\n\n\t\t:host([active]) {\n\t\t\tdisplay: block;\n\t\t}\n\t`),\n) {\n\t/**\n\t * Unique identifier for the dialog instance\n\t */\n\t@property({ type: String, reflect: true }) uid!: string\n\n\t/**\n\t * Dialog title (enables confirm mode when set)\n\t */\n\t@property({ type: String }) title: string | undefined = undefined\n\n\t/**\n\t * Dialog subtitle\n\t */\n\t@property({ type: String }) subtitle: string | undefined = undefined\n\n\t/**\n\t * Dialog message\n\t */\n\t@property({ type: String }) message: string | undefined = undefined\n\n\t/**\n\t * Text for confirm button (enables confirm mode when set with cancelText)\n\t */\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText: string | undefined = undefined\n\n\t/**\n\t * Text for cancel button\n\t */\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText: string | undefined = undefined\n\n\t/**\n\t * Dialog variant (affects button colors in confirm mode)\n\t */\n\t@property({ type: String }) variant: 'default' | 'danger' = 'default'\n\n\t/**\n\t * Whether to hide action buttons (force content mode)\n\t */\n\t@property({ type: Boolean, attribute: 'hide-actions' }) hideActions = false\n\n\t/**\n\t * Return the dialog element for positioning\n\t */\n\tprotected getDialogElement(): HTMLElement | null {\n\t\treturn this.shadowRoot?.querySelector('[role=\"dialog\"], [role=\"alertdialog\"]') as HTMLElement\n\t}\n\n\t/**\n\t * Check if dialog is in confirm mode (has buttons)\n\t */\n\tprivate get isConfirmMode(): boolean {\n\t\tif (this.hideActions) return false\n\t\treturn !!(this.confirmText?.trim() && this.cancelText?.trim())\n\t}\n\n\t/**\n\t * Handle component connection to DOM\n\t */\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Listen for \"where are you ricky\" events\n\t\tfromEvent<DialogWhereAreYouRickyEvent>(window, DialogWhereAreYouRicky)\n\t\t\t.pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Announce this dialog's presence to the service\n\t */\n\tprivate announcePresence(): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(DialogHereMorty, {\n\t\t\t\tdetail: { dialog: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle confirm action\n\t */\n\tprivate handleConfirm(): void {\n\t\tthis.hide(true)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('confirm', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle cancel/close action\n\t */\n\tprivate handleClose(): void {\n\t\tthis.hide(false)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(this.isConfirmMode ? 'cancel' : 'close', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\trender() {\n\t\tconst isCentered = this.isCentered()\n\t\tconst hasCustomContent = this.querySelectorAll('[slot=\"content\"]').length > 0\n\n\t\tconst dialogClasses = {\n\t\t\tdialog: true,\n\t\t\tfixed: true,\n\t\t\t'w-[var(--dialog-width)]': true,\n\t\t\t'max-w-[calc(100vw-2rem)]': true,\n\t\t\t'max-h-[90dvh]': true,\n\t\t\t'overflow-hidden': true,\n\t\t\t'top-1/2': isCentered,\n\t\t\t'left-1/2': isCentered,\n\t\t\t'-translate-x-1/2': isCentered,\n\t\t\t'-translate-y-1/2': isCentered,\n\t\t}\n\n\t\t// Confirm mode: with title/buttons\n\t\tif (this.isConfirmMode) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"fixed inset-0 bg-scrim/40\" @click=${this.handleClose}></div>\n\n\t\t\t\t<div class=${this.classMap(dialogClasses)} role=\"alertdialog\" aria-modal=\"true\">\n\t\t\t\t\t<schmancy-surface rounded=\"all\" elevation=\"3\" type=\"containerHigh\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-4\">\n\t\t\t\t\t\t\t<schmancy-form @submit=${this.handleConfirm}>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.title?.trim(),\n\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\" class=\"mb-1\">${this.title}</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\t\t\tthis.subtitle?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"subtitle\" token=\"xs\" class=\"mb-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t${this.subtitle}\n\t\t\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t${hasCustomContent\n\t\t\t\t\t\t\t\t\t? html`<div class=\"mb-4\"><slot name=\"content\"></slot></div>`\n\t\t\t\t\t\t\t\t\t: when(\n\t\t\t\t\t\t\t\t\t\t\tthis.message?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`<schmancy-typography type=\"body\" class=\"mb-4\">${this.message}</schmancy-typography>`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div class=\"flex justify-end gap-3\">\n\t\t\t\t\t\t\t\t\t<schmancy-button variant=\"outlined\" @click=${this.handleClose}>${this.cancelText}</schmancy-button>\n\t\t\t\t\t\t\t\t\t<schmancy-button type=\"submit\" variant=\"filled\">${this.confirmText}</schmancy-button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</schmancy-form>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Content mode: minimal, just slot\n\t\treturn html`\n\t\t\t<div class=\"fixed inset-0 bg-surface-container/10 backdrop-blur-xs\" @click=${this.handleClose}></div>\n\n\t\t\t<section class=${this.classMap(dialogClasses)} role=\"dialog\" aria-modal=\"true\">\n\t\t\t\t<schmancy-surface rounded=\"all\" type=\"surface\" elevation=\"2\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-2 md:p-4 max-h-[90dvh]\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t</schmancy-surface>\n\t\t\t</section>\n\t\t`\n\t}\n\n\t/**\n\t * Static helper for confirm dialogs\n\t */\n\tstatic async confirm(options: {\n\t\ttitle?: string\n\t\tsubtitle?: string\n\t\tmessage?: string\n\t\tconfirmText?: string\n\t\tcancelText?: string\n\t\tvariant?: 'default' | 'danger'\n\t\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\t\twidth?: string\n\t}): Promise<boolean> {\n\t\tlet dialog = document.querySelector('schmancy-dialog[data-static-confirm]') as SchmancyDialog\n\n\t\tif (!dialog) {\n\t\t\tdialog = document.createElement('schmancy-dialog') as SchmancyDialog\n\t\t\tdialog.setAttribute('data-static-confirm', '')\n\t\t\tdocument.body.appendChild(dialog)\n\t\t}\n\n\t\t// Set options\n\t\tdialog.title = options.title\n\t\tdialog.subtitle = options.subtitle\n\t\tdialog.message = options.message\n\t\tdialog.confirmText = options.confirmText ?? 'Confirm'\n\t\tdialog.cancelText = options.cancelText ?? 'Cancel'\n\t\tdialog.variant = options.variant ?? 'default'\n\t\tif (options.width) dialog.style.setProperty('--dialog-width', options.width)\n\n\t\treturn dialog.show(options.position)\n\t}\n\n\t/**\n\t * Simple shorthand - just pass message and optionally an event\n\t */\n\tstatic async ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tposition: event,\n\t\t})\n\t}\n}\n\n// Alias for backward compatibility\nexport { SchmancyDialog as ConfirmDialog }\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dialog': SchmancyDialog\n\t}\n}\n"],"names":["DialogBase","superClass","constructor","super","arguments","this","position","x","y","positionOrEvent","cleanupAutoUpdate","clientX","clientY","touches","length","pos","window","innerWidth","innerHeight","virtualReference","getBoundingClientRect","DOMRect","requestUpdate","updateComplete","setAttribute","setupPositioning","Promise","resolve","resolvePromise","result","removeAttribute","isCentered","toleranceX","toleranceY","Math","abs","dialog","getDialogElement","autoUpdate","updatePosition","ancestorScroll","ancestorResize","elementResize","computePosition","strategy","middleware","offset","autoPlacement","padding","allowedPlacements","shift","size","availableWidth","elements","floating","style","maxWidth","Object","assign","left","round","top","transform","disconnectedCallback","SchmancyDialog","$LitElement","css","title","subtitle","message","confirmText","cancelText","variant","hideActions","shadowRoot","querySelector","isConfirmMode","trim","connectedCallback","fromEvent","DialogWhereAreYouRicky","pipe","tap","e","detail","uid","announcePresence","takeUntil","disconnecting","subscribe","dispatchEvent","CustomEvent","DialogHereMorty","bubbles","composed","handleConfirm","hide","handleClose","render","hasCustomContent","querySelectorAll","dialogClasses","fixed","html","classMap","when","options","document","createElement","body","appendChild","width","setProperty","show","event","confirm","__decorateClass","property","type","String","reflect","prototype","attribute","Boolean","customElement"],"mappings":"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"}
@@ -3,8 +3,8 @@ import { takeUntil as u } from "rxjs/operators";
3
3
  import "lit/directives/class-map.js";
4
4
  import "lit/directives/style-map.js";
5
5
  import { property as r, customElement as y } from "lit/decorators.js";
6
- import "./tailwind.mixin-Ddt05Frc.js";
7
- import { $ as f } from "./litElement.mixin-Wcu4yIIs.js";
6
+ import "./tailwind.mixin-Bp_PR6yc.js";
7
+ import { $ as f } from "./litElement.mixin-DHZXtvYq.js";
8
8
  import { css as g, html as l } from "lit";
9
9
  import { when as h } from "lit/directives/when.js";
10
10
  import { autoUpdate as v, computePosition as b, offset as x, autoPlacement as w, shift as C, size as P } from "@floating-ui/dom";
@@ -142,4 +142,4 @@ export {
142
142
  k as D,
143
143
  n as S
144
144
  };
145
- //# sourceMappingURL=dialog.component-CMUoCC7O.js.map
145
+ //# sourceMappingURL=dialog.component-a7FlKhGD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.component-CMUoCC7O.js","sources":["../src/dialog/dialog-base.mixin.ts","../src/dialog/dialog.component.ts"],"sourcesContent":["import { autoPlacement, autoUpdate, computePosition, offset, shift, size } from '@floating-ui/dom'\nimport { LitElement } from 'lit'\nimport type { Constructor } from '../../mixins/constructor'\nimport type { IBaseMixin } from '../../mixins/baseElement'\n\nexport interface DialogPosition {\n\tx: number\n\ty: number\n}\n\nexport interface VirtualReference {\n\tgetBoundingClientRect: () => DOMRect\n}\n\n/**\n * Interface for the DialogBase mixin methods\n */\nexport interface IDialogBaseMixin {\n\tposition: DialogPosition\n\tshow(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean>\n\thide(result?: boolean): void\n\tisCentered(): boolean\n}\n\n/**\n * Dialog mixin with smart positioning using Floating UI.\n *\n * Uses autoPlacement to find the position with MOST available space,\n * minimizing the need for content scrolling.\n */\nexport const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(superClass: T) => {\n\tclass DialogBaseClass extends superClass {\n\t\tposition: DialogPosition = { x: 0, y: 0 }\n\t\tprotected resolvePromise?: (value: boolean) => void\n\t\tprotected cleanupAutoUpdate?: () => void\n\t\tprotected virtualReference?: VirtualReference\n\n\t\t/**\n\t\t * Override in subclass to return the dialog element\n\t\t */\n\t\tprotected getDialogElement(): HTMLElement | null {\n\t\t\treturn null\n\t\t}\n\n\t\t/**\n\t\t * Show the dialog at a specific position\n\t\t */\n\t\tasync show(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean> {\n\t\t\t// Cleanup previous positioning\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tlet x: number, y: number\n\n\t\t\tif (!positionOrEvent) {\n\t\t\t\tx = window.innerWidth / 2\n\t\t\t\ty = window.innerHeight / 2\n\t\t\t} else if ('clientX' in positionOrEvent) {\n\t\t\t\tx = positionOrEvent.clientX\n\t\t\t\ty = positionOrEvent.clientY\n\t\t\t} else if ('touches' in positionOrEvent && positionOrEvent.touches.length) {\n\t\t\t\tx = positionOrEvent.touches[0].clientX\n\t\t\t\ty = positionOrEvent.touches[0].clientY\n\t\t\t} else {\n\t\t\t\tconst pos = positionOrEvent as DialogPosition\n\t\t\t\tx = pos.x\n\t\t\t\ty = pos.y\n\t\t\t}\n\n\t\t\tthis.position = { x, y }\n\n\t\t\t// Virtual reference at click position\n\t\t\tthis.virtualReference = {\n\t\t\t\tgetBoundingClientRect: () => new DOMRect(x, y, 0, 0),\n\t\t\t}\n\n\t\t\t// Trigger re-render with new position (for correct isCentered() in render)\n\t\t\tthis.requestUpdate()\n\t\t\tawait this.updateComplete\n\n\t\t\tthis.setAttribute('active', '')\n\n\t\t\t// Setup Floating UI positioning for non-centered dialogs\n\t\t\tthis.setupPositioning()\n\n\t\t\treturn new Promise<boolean>(resolve => {\n\t\t\t\tthis.resolvePromise = resolve\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Hide the dialog\n\t\t */\n\t\thide(result = false): void {\n\t\t\tthis.removeAttribute('active')\n\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tif (this.resolvePromise) {\n\t\t\t\tthis.resolvePromise(result)\n\t\t\t\tthis.resolvePromise = undefined\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Check if position is near center\n\t\t */\n\t\tisCentered(): boolean {\n\t\t\tconst toleranceX = window.innerWidth * 0.3\n\t\t\tconst toleranceY = window.innerHeight * 0.3\n\n\t\t\treturn (\n\t\t\t\tMath.abs(this.position.x - window.innerWidth / 2) < toleranceX &&\n\t\t\t\tMath.abs(this.position.y - window.innerHeight / 2) < toleranceY\n\t\t\t)\n\t\t}\n\n\t\t/**\n\t\t * Setup positioning based on whether dialog is centered or positioned\n\t\t */\n\t\tprivate setupPositioning(): void {\n\t\t\tconst dialog = this.getDialogElement()\n\t\t\tif (!dialog) return\n\n\t\t\t// Centered dialogs: CSS handles everything, no JS positioning needed\n\t\t\tif (this.isCentered()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Positioned dialogs: use Floating UI with autoPlacement\n\t\t\tif (this.virtualReference) {\n\t\t\t\tthis.cleanupAutoUpdate = autoUpdate(\n\t\t\t\t\tthis.virtualReference,\n\t\t\t\t\tdialog,\n\t\t\t\t\t() => this.updatePosition(dialog),\n\t\t\t\t\t{\n\t\t\t\t\t\tancestorScroll: true,\n\t\t\t\t\t\tancestorResize: true,\n\t\t\t\t\t\telementResize: true,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tthis.updatePosition(dialog)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Update position using Floating UI.\n\t\t * autoPlacement finds the side with MOST space to minimize scrolling.\n\t\t */\n\t\tprivate async updatePosition(dialog: HTMLElement): Promise<void> {\n\t\t\tif (!this.virtualReference) return\n\n\t\t\tconst padding = 16\n\n\t\t\tconst { x, y } = await computePosition(this.virtualReference, dialog, {\n\t\t\t\tstrategy: 'fixed',\n\t\t\t\tmiddleware: [\n\t\t\t\t\t// Small offset from click point\n\t\t\t\t\toffset(8),\n\n\t\t\t\t\t// autoPlacement: picks placement with MOST available space\n\t\t\t\t\tautoPlacement({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tallowedPlacements: [\n\t\t\t\t\t\t\t'top-start',\n\t\t\t\t\t\t\t'top-end',\n\t\t\t\t\t\t\t'bottom-start',\n\t\t\t\t\t\t\t'bottom-end',\n\t\t\t\t\t\t\t'left-start',\n\t\t\t\t\t\t\t'left-end',\n\t\t\t\t\t\t\t'right-start',\n\t\t\t\t\t\t\t'right-end',\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\n\t\t\t\t\t// Keep on screen\n\t\t\t\t\tshift({ padding }),\n\n\t\t\t\t\t// Constrain width to available space (CSS handles height via dvh)\n\t\t\t\t\tsize({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tapply({ availableWidth, elements }) {\n\t\t\t\t\t\t\telements.floating.style.maxWidth = `${availableWidth}px`\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tObject.assign(dialog.style, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tleft: `${Math.round(x)}px`,\n\t\t\t\ttop: `${Math.round(y)}px`,\n\t\t\t\ttransform: 'none',\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Cleanup on disconnect\n\t\t */\n\t\tdisconnectedCallback(): void {\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\n\treturn DialogBaseClass as Constructor<IDialogBaseMixin> & T\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { fromEvent, tap } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { DialogBase } from './dialog-base.mixin'\nimport { DialogHereMorty, DialogWhereAreYouRicky, DialogWhereAreYouRickyEvent } from './dialog-events'\n\n/**\n * Unified dialog component that handles both content-only and confirm modes.\n *\n * @element schmancy-dialog\n * @slot default - Content slot for dialog body (used in content mode)\n * @slot content - Named slot for custom content in confirm mode\n *\n * @example Content mode (no buttons):\n * ```html\n * <schmancy-dialog>\n * <my-custom-content></my-custom-content>\n * </schmancy-dialog>\n * ```\n *\n * @example Confirm mode (with buttons):\n * ```html\n * <schmancy-dialog\n * title=\"Confirm Action\"\n * message=\"Are you sure?\"\n * confirm-text=\"Yes\"\n * cancel-text=\"No\"\n * ></schmancy-dialog>\n * ```\n */\n@customElement('schmancy-dialog')\nexport class SchmancyDialog extends DialogBase(\n\t$LitElement(css`\n\t\t:host {\n\t\t\tposition: fixed;\n\t\t\tz-index: 10000;\n\t\t\tinset: 0;\n\t\t\tdisplay: none;\n\t\t\t--dialog-width: fit-content;\n\t\t}\n\n\t\t:host([active]) {\n\t\t\tdisplay: block;\n\t\t}\n\t`),\n) {\n\t/**\n\t * Unique identifier for the dialog instance\n\t */\n\t@property({ type: String, reflect: true }) uid!: string\n\n\t/**\n\t * Dialog title (enables confirm mode when set)\n\t */\n\t@property({ type: String }) title: string | undefined = undefined\n\n\t/**\n\t * Dialog subtitle\n\t */\n\t@property({ type: String }) subtitle: string | undefined = undefined\n\n\t/**\n\t * Dialog message\n\t */\n\t@property({ type: String }) message: string | undefined = undefined\n\n\t/**\n\t * Text for confirm button (enables confirm mode when set with cancelText)\n\t */\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText: string | undefined = undefined\n\n\t/**\n\t * Text for cancel button\n\t */\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText: string | undefined = undefined\n\n\t/**\n\t * Dialog variant (affects button colors in confirm mode)\n\t */\n\t@property({ type: String }) variant: 'default' | 'danger' = 'default'\n\n\t/**\n\t * Whether to hide action buttons (force content mode)\n\t */\n\t@property({ type: Boolean, attribute: 'hide-actions' }) hideActions = false\n\n\t/**\n\t * Return the dialog element for positioning\n\t */\n\tprotected getDialogElement(): HTMLElement | null {\n\t\treturn this.shadowRoot?.querySelector('[role=\"dialog\"], [role=\"alertdialog\"]') as HTMLElement\n\t}\n\n\t/**\n\t * Check if dialog is in confirm mode (has buttons)\n\t */\n\tprivate get isConfirmMode(): boolean {\n\t\tif (this.hideActions) return false\n\t\treturn !!(this.confirmText?.trim() && this.cancelText?.trim())\n\t}\n\n\t/**\n\t * Handle component connection to DOM\n\t */\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Listen for \"where are you ricky\" events\n\t\tfromEvent<DialogWhereAreYouRickyEvent>(window, DialogWhereAreYouRicky)\n\t\t\t.pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Announce this dialog's presence to the service\n\t */\n\tprivate announcePresence(): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(DialogHereMorty, {\n\t\t\t\tdetail: { dialog: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle confirm action\n\t */\n\tprivate handleConfirm(): void {\n\t\tthis.hide(true)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('confirm', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle cancel/close action\n\t */\n\tprivate handleClose(): void {\n\t\tthis.hide(false)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(this.isConfirmMode ? 'cancel' : 'close', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\trender() {\n\t\tconst isCentered = this.isCentered()\n\t\tconst hasCustomContent = this.querySelectorAll('[slot=\"content\"]').length > 0\n\n\t\tconst dialogClasses = {\n\t\t\tdialog: true,\n\t\t\tfixed: true,\n\t\t\t'w-[var(--dialog-width)]': true,\n\t\t\t'max-w-[calc(100vw-2rem)]': true,\n\t\t\t'max-h-[90dvh]': true,\n\t\t\t'overflow-hidden': true,\n\t\t\t'top-1/2': isCentered,\n\t\t\t'left-1/2': isCentered,\n\t\t\t'-translate-x-1/2': isCentered,\n\t\t\t'-translate-y-1/2': isCentered,\n\t\t}\n\n\t\t// Confirm mode: with title/buttons\n\t\tif (this.isConfirmMode) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"fixed inset-0 bg-scrim/40\" @click=${this.handleClose}></div>\n\n\t\t\t\t<div class=${this.classMap(dialogClasses)} role=\"alertdialog\" aria-modal=\"true\">\n\t\t\t\t\t<schmancy-surface rounded=\"all\" elevation=\"3\" type=\"containerHigh\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-4\">\n\t\t\t\t\t\t\t<schmancy-form @submit=${this.handleConfirm}>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.title?.trim(),\n\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\" class=\"mb-1\">${this.title}</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\t\t\tthis.subtitle?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"subtitle\" token=\"xs\" class=\"mb-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t${this.subtitle}\n\t\t\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t${hasCustomContent\n\t\t\t\t\t\t\t\t\t? html`<div class=\"mb-4\"><slot name=\"content\"></slot></div>`\n\t\t\t\t\t\t\t\t\t: when(\n\t\t\t\t\t\t\t\t\t\t\tthis.message?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`<schmancy-typography type=\"body\" class=\"mb-4\">${this.message}</schmancy-typography>`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div class=\"flex justify-end gap-3\">\n\t\t\t\t\t\t\t\t\t<schmancy-button variant=\"outlined\" @click=${this.handleClose}>${this.cancelText}</schmancy-button>\n\t\t\t\t\t\t\t\t\t<schmancy-button type=\"submit\" variant=\"filled\">${this.confirmText}</schmancy-button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</schmancy-form>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Content mode: minimal, just slot\n\t\treturn html`\n\t\t\t<div class=\"fixed inset-0 bg-surface-container/10 backdrop-blur-xs\" @click=${this.handleClose}></div>\n\n\t\t\t<section class=${this.classMap(dialogClasses)} role=\"dialog\" aria-modal=\"true\">\n\t\t\t\t<schmancy-surface rounded=\"all\" type=\"surface\" elevation=\"2\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-2 md:p-4 max-h-[90dvh]\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t</schmancy-surface>\n\t\t\t</section>\n\t\t`\n\t}\n\n\t/**\n\t * Static helper for confirm dialogs\n\t */\n\tstatic async confirm(options: {\n\t\ttitle?: string\n\t\tsubtitle?: string\n\t\tmessage?: string\n\t\tconfirmText?: string\n\t\tcancelText?: string\n\t\tvariant?: 'default' | 'danger'\n\t\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\t\twidth?: string\n\t}): Promise<boolean> {\n\t\tlet dialog = document.querySelector('schmancy-dialog[data-static-confirm]') as SchmancyDialog\n\n\t\tif (!dialog) {\n\t\t\tdialog = document.createElement('schmancy-dialog') as SchmancyDialog\n\t\t\tdialog.setAttribute('data-static-confirm', '')\n\t\t\tdocument.body.appendChild(dialog)\n\t\t}\n\n\t\t// Set options\n\t\tdialog.title = options.title\n\t\tdialog.subtitle = options.subtitle\n\t\tdialog.message = options.message\n\t\tdialog.confirmText = options.confirmText ?? 'Confirm'\n\t\tdialog.cancelText = options.cancelText ?? 'Cancel'\n\t\tdialog.variant = options.variant ?? 'default'\n\t\tif (options.width) dialog.style.setProperty('--dialog-width', options.width)\n\n\t\treturn dialog.show(options.position)\n\t}\n\n\t/**\n\t * Simple shorthand - just pass message and optionally an event\n\t */\n\tstatic async ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tposition: event,\n\t\t})\n\t}\n}\n\n// Alias for backward compatibility\nexport { SchmancyDialog as ConfirmDialog }\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dialog': SchmancyDialog\n\t}\n}\n"],"names":["DialogBase","superClass","super","arguments","this","position","x","y","getDialogElement","positionOrEvent","cleanupAutoUpdate","clientX","clientY","touches","length","pos","window","innerWidth","innerHeight","virtualReference","getBoundingClientRect","DOMRect","requestUpdate","updateComplete","setAttribute","setupPositioning","Promise","resolve","resolvePromise","result","removeAttribute","toleranceX","toleranceY","Math","abs","dialog","isCentered","autoUpdate","updatePosition","ancestorScroll","ancestorResize","elementResize","computePosition","strategy","middleware","offset","autoPlacement","padding","allowedPlacements","shift","size","apply","availableWidth","elements","floating","style","maxWidth","Object","assign","left","round","top","transform","disconnectedCallback","SchmancyDialog","$LitElement","css","title","subtitle","message","confirmText","cancelText","variant","hideActions","shadowRoot","querySelector","isConfirmMode","trim","connectedCallback","fromEvent","DialogWhereAreYouRicky","pipe","tap","e","detail","uid","announcePresence","takeUntil","disconnecting","subscribe","dispatchEvent","CustomEvent","DialogHereMorty","bubbles","composed","hide","handleClose","hasCustomContent","querySelectorAll","dialogClasses","fixed","html","classMap","handleConfirm","when","options","document","createElement","body","appendChild","width","setProperty","show","event","confirm","__decorateClass","property","type","String","reflect","prototype","attribute","Boolean","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.component-a7FlKhGD.js","sources":["../src/dialog/dialog-base.mixin.ts","../src/dialog/dialog.component.ts"],"sourcesContent":["import { autoPlacement, autoUpdate, computePosition, offset, shift, size } from '@floating-ui/dom'\nimport { LitElement } from 'lit'\nimport type { Constructor } from '../../mixins/constructor'\nimport type { IBaseMixin } from '../../mixins/baseElement'\n\nexport interface DialogPosition {\n\tx: number\n\ty: number\n}\n\nexport interface VirtualReference {\n\tgetBoundingClientRect: () => DOMRect\n}\n\n/**\n * Interface for the DialogBase mixin methods\n */\nexport interface IDialogBaseMixin {\n\tposition: DialogPosition\n\tshow(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean>\n\thide(result?: boolean): void\n\tisCentered(): boolean\n}\n\n/**\n * Dialog mixin with smart positioning using Floating UI.\n *\n * Uses autoPlacement to find the position with MOST available space,\n * minimizing the need for content scrolling.\n */\nexport const DialogBase = <T extends Constructor<LitElement & IBaseMixin>>(superClass: T) => {\n\tclass DialogBaseClass extends superClass {\n\t\tposition: DialogPosition = { x: 0, y: 0 }\n\t\tprotected resolvePromise?: (value: boolean) => void\n\t\tprotected cleanupAutoUpdate?: () => void\n\t\tprotected virtualReference?: VirtualReference\n\n\t\t/**\n\t\t * Override in subclass to return the dialog element\n\t\t */\n\t\tprotected getDialogElement(): HTMLElement | null {\n\t\t\treturn null\n\t\t}\n\n\t\t/**\n\t\t * Show the dialog at a specific position\n\t\t */\n\t\tasync show(positionOrEvent?: DialogPosition | MouseEvent | TouchEvent): Promise<boolean> {\n\t\t\t// Cleanup previous positioning\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tlet x: number, y: number\n\n\t\t\tif (!positionOrEvent) {\n\t\t\t\tx = window.innerWidth / 2\n\t\t\t\ty = window.innerHeight / 2\n\t\t\t} else if ('clientX' in positionOrEvent) {\n\t\t\t\tx = positionOrEvent.clientX\n\t\t\t\ty = positionOrEvent.clientY\n\t\t\t} else if ('touches' in positionOrEvent && positionOrEvent.touches.length) {\n\t\t\t\tx = positionOrEvent.touches[0].clientX\n\t\t\t\ty = positionOrEvent.touches[0].clientY\n\t\t\t} else {\n\t\t\t\tconst pos = positionOrEvent as DialogPosition\n\t\t\t\tx = pos.x\n\t\t\t\ty = pos.y\n\t\t\t}\n\n\t\t\tthis.position = { x, y }\n\n\t\t\t// Virtual reference at click position\n\t\t\tthis.virtualReference = {\n\t\t\t\tgetBoundingClientRect: () => new DOMRect(x, y, 0, 0),\n\t\t\t}\n\n\t\t\t// Trigger re-render with new position (for correct isCentered() in render)\n\t\t\tthis.requestUpdate()\n\t\t\tawait this.updateComplete\n\n\t\t\tthis.setAttribute('active', '')\n\n\t\t\t// Setup Floating UI positioning for non-centered dialogs\n\t\t\tthis.setupPositioning()\n\n\t\t\treturn new Promise<boolean>(resolve => {\n\t\t\t\tthis.resolvePromise = resolve\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Hide the dialog\n\t\t */\n\t\thide(result = false): void {\n\t\t\tthis.removeAttribute('active')\n\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\n\t\t\tif (this.resolvePromise) {\n\t\t\t\tthis.resolvePromise(result)\n\t\t\t\tthis.resolvePromise = undefined\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Check if position is near center\n\t\t */\n\t\tisCentered(): boolean {\n\t\t\tconst toleranceX = window.innerWidth * 0.3\n\t\t\tconst toleranceY = window.innerHeight * 0.3\n\n\t\t\treturn (\n\t\t\t\tMath.abs(this.position.x - window.innerWidth / 2) < toleranceX &&\n\t\t\t\tMath.abs(this.position.y - window.innerHeight / 2) < toleranceY\n\t\t\t)\n\t\t}\n\n\t\t/**\n\t\t * Setup positioning based on whether dialog is centered or positioned\n\t\t */\n\t\tprivate setupPositioning(): void {\n\t\t\tconst dialog = this.getDialogElement()\n\t\t\tif (!dialog) return\n\n\t\t\t// Centered dialogs: CSS handles everything, no JS positioning needed\n\t\t\tif (this.isCentered()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Positioned dialogs: use Floating UI with autoPlacement\n\t\t\tif (this.virtualReference) {\n\t\t\t\tthis.cleanupAutoUpdate = autoUpdate(\n\t\t\t\t\tthis.virtualReference,\n\t\t\t\t\tdialog,\n\t\t\t\t\t() => this.updatePosition(dialog),\n\t\t\t\t\t{\n\t\t\t\t\t\tancestorScroll: true,\n\t\t\t\t\t\tancestorResize: true,\n\t\t\t\t\t\telementResize: true,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tthis.updatePosition(dialog)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Update position using Floating UI.\n\t\t * autoPlacement finds the side with MOST space to minimize scrolling.\n\t\t */\n\t\tprivate async updatePosition(dialog: HTMLElement): Promise<void> {\n\t\t\tif (!this.virtualReference) return\n\n\t\t\tconst padding = 16\n\n\t\t\tconst { x, y } = await computePosition(this.virtualReference, dialog, {\n\t\t\t\tstrategy: 'fixed',\n\t\t\t\tmiddleware: [\n\t\t\t\t\t// Small offset from click point\n\t\t\t\t\toffset(8),\n\n\t\t\t\t\t// autoPlacement: picks placement with MOST available space\n\t\t\t\t\tautoPlacement({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tallowedPlacements: [\n\t\t\t\t\t\t\t'top-start',\n\t\t\t\t\t\t\t'top-end',\n\t\t\t\t\t\t\t'bottom-start',\n\t\t\t\t\t\t\t'bottom-end',\n\t\t\t\t\t\t\t'left-start',\n\t\t\t\t\t\t\t'left-end',\n\t\t\t\t\t\t\t'right-start',\n\t\t\t\t\t\t\t'right-end',\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\n\t\t\t\t\t// Keep on screen\n\t\t\t\t\tshift({ padding }),\n\n\t\t\t\t\t// Constrain width to available space (CSS handles height via dvh)\n\t\t\t\t\tsize({\n\t\t\t\t\t\tpadding,\n\t\t\t\t\t\tapply({ availableWidth, elements }) {\n\t\t\t\t\t\t\telements.floating.style.maxWidth = `${availableWidth}px`\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tObject.assign(dialog.style, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\tleft: `${Math.round(x)}px`,\n\t\t\t\ttop: `${Math.round(y)}px`,\n\t\t\t\ttransform: 'none',\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * Cleanup on disconnect\n\t\t */\n\t\tdisconnectedCallback(): void {\n\t\t\tif (this.cleanupAutoUpdate) {\n\t\t\t\tthis.cleanupAutoUpdate()\n\t\t\t\tthis.cleanupAutoUpdate = undefined\n\t\t\t}\n\t\t\tsuper.disconnectedCallback()\n\t\t}\n\t}\n\n\treturn DialogBaseClass as Constructor<IDialogBaseMixin> & T\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { fromEvent, tap } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { DialogBase } from './dialog-base.mixin'\nimport { DialogHereMorty, DialogWhereAreYouRicky, DialogWhereAreYouRickyEvent } from './dialog-events'\n\n/**\n * Unified dialog component that handles both content-only and confirm modes.\n *\n * @element schmancy-dialog\n * @slot default - Content slot for dialog body (used in content mode)\n * @slot content - Named slot for custom content in confirm mode\n *\n * @example Content mode (no buttons):\n * ```html\n * <schmancy-dialog>\n * <my-custom-content></my-custom-content>\n * </schmancy-dialog>\n * ```\n *\n * @example Confirm mode (with buttons):\n * ```html\n * <schmancy-dialog\n * title=\"Confirm Action\"\n * message=\"Are you sure?\"\n * confirm-text=\"Yes\"\n * cancel-text=\"No\"\n * ></schmancy-dialog>\n * ```\n */\n@customElement('schmancy-dialog')\nexport class SchmancyDialog extends DialogBase(\n\t$LitElement(css`\n\t\t:host {\n\t\t\tposition: fixed;\n\t\t\tz-index: 10000;\n\t\t\tinset: 0;\n\t\t\tdisplay: none;\n\t\t\t--dialog-width: fit-content;\n\t\t}\n\n\t\t:host([active]) {\n\t\t\tdisplay: block;\n\t\t}\n\t`),\n) {\n\t/**\n\t * Unique identifier for the dialog instance\n\t */\n\t@property({ type: String, reflect: true }) uid!: string\n\n\t/**\n\t * Dialog title (enables confirm mode when set)\n\t */\n\t@property({ type: String }) title: string | undefined = undefined\n\n\t/**\n\t * Dialog subtitle\n\t */\n\t@property({ type: String }) subtitle: string | undefined = undefined\n\n\t/**\n\t * Dialog message\n\t */\n\t@property({ type: String }) message: string | undefined = undefined\n\n\t/**\n\t * Text for confirm button (enables confirm mode when set with cancelText)\n\t */\n\t@property({ type: String, attribute: 'confirm-text' }) confirmText: string | undefined = undefined\n\n\t/**\n\t * Text for cancel button\n\t */\n\t@property({ type: String, attribute: 'cancel-text' }) cancelText: string | undefined = undefined\n\n\t/**\n\t * Dialog variant (affects button colors in confirm mode)\n\t */\n\t@property({ type: String }) variant: 'default' | 'danger' = 'default'\n\n\t/**\n\t * Whether to hide action buttons (force content mode)\n\t */\n\t@property({ type: Boolean, attribute: 'hide-actions' }) hideActions = false\n\n\t/**\n\t * Return the dialog element for positioning\n\t */\n\tprotected getDialogElement(): HTMLElement | null {\n\t\treturn this.shadowRoot?.querySelector('[role=\"dialog\"], [role=\"alertdialog\"]') as HTMLElement\n\t}\n\n\t/**\n\t * Check if dialog is in confirm mode (has buttons)\n\t */\n\tprivate get isConfirmMode(): boolean {\n\t\tif (this.hideActions) return false\n\t\treturn !!(this.confirmText?.trim() && this.cancelText?.trim())\n\t}\n\n\t/**\n\t * Handle component connection to DOM\n\t */\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Listen for \"where are you ricky\" events\n\t\tfromEvent<DialogWhereAreYouRickyEvent>(window, DialogWhereAreYouRicky)\n\t\t\t.pipe(\n\t\t\t\ttap(e => {\n\t\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Announce this dialog's presence to the service\n\t */\n\tprivate announcePresence(): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(DialogHereMorty, {\n\t\t\t\tdetail: { dialog: this },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle confirm action\n\t */\n\tprivate handleConfirm(): void {\n\t\tthis.hide(true)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('confirm', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle cancel/close action\n\t */\n\tprivate handleClose(): void {\n\t\tthis.hide(false)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(this.isConfirmMode ? 'cancel' : 'close', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\trender() {\n\t\tconst isCentered = this.isCentered()\n\t\tconst hasCustomContent = this.querySelectorAll('[slot=\"content\"]').length > 0\n\n\t\tconst dialogClasses = {\n\t\t\tdialog: true,\n\t\t\tfixed: true,\n\t\t\t'w-[var(--dialog-width)]': true,\n\t\t\t'max-w-[calc(100vw-2rem)]': true,\n\t\t\t'max-h-[90dvh]': true,\n\t\t\t'overflow-hidden': true,\n\t\t\t'top-1/2': isCentered,\n\t\t\t'left-1/2': isCentered,\n\t\t\t'-translate-x-1/2': isCentered,\n\t\t\t'-translate-y-1/2': isCentered,\n\t\t}\n\n\t\t// Confirm mode: with title/buttons\n\t\tif (this.isConfirmMode) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"fixed inset-0 bg-scrim/40\" @click=${this.handleClose}></div>\n\n\t\t\t\t<div class=${this.classMap(dialogClasses)} role=\"alertdialog\" aria-modal=\"true\">\n\t\t\t\t\t<schmancy-surface rounded=\"all\" elevation=\"3\" type=\"containerHigh\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-4\">\n\t\t\t\t\t\t\t<schmancy-form @submit=${this.handleConfirm}>\n\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\tthis.title?.trim(),\n\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"title\" token=\"md\" class=\"mb-1\">${this.title}</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t\t\t\t\tthis.subtitle?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"subtitle\" token=\"xs\" class=\"mb-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t${this.subtitle}\n\t\t\t\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t${hasCustomContent\n\t\t\t\t\t\t\t\t\t? html`<div class=\"mb-4\"><slot name=\"content\"></slot></div>`\n\t\t\t\t\t\t\t\t\t: when(\n\t\t\t\t\t\t\t\t\t\t\tthis.message?.trim(),\n\t\t\t\t\t\t\t\t\t\t\t() => html`<schmancy-typography type=\"body\" class=\"mb-4\">${this.message}</schmancy-typography>`,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div class=\"flex justify-end gap-3\">\n\t\t\t\t\t\t\t\t\t<schmancy-button variant=\"outlined\" @click=${this.handleClose}>${this.cancelText}</schmancy-button>\n\t\t\t\t\t\t\t\t\t<schmancy-button type=\"submit\" variant=\"filled\">${this.confirmText}</schmancy-button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</schmancy-form>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Content mode: minimal, just slot\n\t\treturn html`\n\t\t\t<div class=\"fixed inset-0 bg-surface-container/10 backdrop-blur-xs\" @click=${this.handleClose}></div>\n\n\t\t\t<section class=${this.classMap(dialogClasses)} role=\"dialog\" aria-modal=\"true\">\n\t\t\t\t<schmancy-surface rounded=\"all\" type=\"surface\" elevation=\"2\" fill=\"all\" class=\"overflow-hidden\">\n\t\t\t\t\t<schmancy-scroll direction=\"vertical\" hide class=\"p-2 md:p-4 max-h-[90dvh]\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t</schmancy-surface>\n\t\t\t</section>\n\t\t`\n\t}\n\n\t/**\n\t * Static helper for confirm dialogs\n\t */\n\tstatic async confirm(options: {\n\t\ttitle?: string\n\t\tsubtitle?: string\n\t\tmessage?: string\n\t\tconfirmText?: string\n\t\tcancelText?: string\n\t\tvariant?: 'default' | 'danger'\n\t\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\t\twidth?: string\n\t}): Promise<boolean> {\n\t\tlet dialog = document.querySelector('schmancy-dialog[data-static-confirm]') as SchmancyDialog\n\n\t\tif (!dialog) {\n\t\t\tdialog = document.createElement('schmancy-dialog') as SchmancyDialog\n\t\t\tdialog.setAttribute('data-static-confirm', '')\n\t\t\tdocument.body.appendChild(dialog)\n\t\t}\n\n\t\t// Set options\n\t\tdialog.title = options.title\n\t\tdialog.subtitle = options.subtitle\n\t\tdialog.message = options.message\n\t\tdialog.confirmText = options.confirmText ?? 'Confirm'\n\t\tdialog.cancelText = options.cancelText ?? 'Cancel'\n\t\tdialog.variant = options.variant ?? 'default'\n\t\tif (options.width) dialog.style.setProperty('--dialog-width', options.width)\n\n\t\treturn dialog.show(options.position)\n\t}\n\n\t/**\n\t * Simple shorthand - just pass message and optionally an event\n\t */\n\tstatic async ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tposition: event,\n\t\t})\n\t}\n}\n\n// Alias for backward compatibility\nexport { SchmancyDialog as ConfirmDialog }\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dialog': SchmancyDialog\n\t}\n}\n"],"names":["DialogBase","superClass","super","arguments","this","position","x","y","getDialogElement","positionOrEvent","cleanupAutoUpdate","clientX","clientY","touches","length","pos","window","innerWidth","innerHeight","virtualReference","getBoundingClientRect","DOMRect","requestUpdate","updateComplete","setAttribute","setupPositioning","Promise","resolve","resolvePromise","result","removeAttribute","toleranceX","toleranceY","Math","abs","dialog","isCentered","autoUpdate","updatePosition","ancestorScroll","ancestorResize","elementResize","computePosition","strategy","middleware","offset","autoPlacement","padding","allowedPlacements","shift","size","apply","availableWidth","elements","floating","style","maxWidth","Object","assign","left","round","top","transform","disconnectedCallback","SchmancyDialog","$LitElement","css","title","subtitle","message","confirmText","cancelText","variant","hideActions","shadowRoot","querySelector","isConfirmMode","trim","connectedCallback","fromEvent","DialogWhereAreYouRicky","pipe","tap","e","detail","uid","announcePresence","takeUntil","disconnecting","subscribe","dispatchEvent","CustomEvent","DialogHereMorty","bubbles","composed","hide","handleClose","hasCustomContent","querySelectorAll","dialogClasses","fixed","html","classMap","handleConfirm","when","options","document","createElement","body","appendChild","width","setProperty","show","event","confirm","__decorateClass","property","type","String","reflect","prototype","attribute","Boolean","customElement"],"mappings":"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"}
package/dist/dialog.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { $ as i, D as r } from "./dialog-service-D9E3jLAR.js";
2
- import { S as D, D as e, S as g } from "./dialog.component-CMUoCC7O.js";
2
+ import { S as D, D as e, S as g } from "./dialog.component-a7FlKhGD.js";
3
3
  export {
4
4
  i as $dialog,
5
5
  D as ConfirmDialog,
@@ -3,8 +3,8 @@ import "rxjs/operators";
3
3
  import "lit/directives/class-map.js";
4
4
  import "lit/directives/style-map.js";
5
5
  import { property as n, customElement as c } from "lit/decorators.js";
6
- import "./tailwind.mixin-Ddt05Frc.js";
7
- import { $ as g } from "./litElement.mixin-Wcu4yIIs.js";
6
+ import "./tailwind.mixin-Bp_PR6yc.js";
7
+ import { $ as g } from "./litElement.mixin-DHZXtvYq.js";
8
8
  import { css as h, html as p } from "lit";
9
9
  var f = Object.defineProperty, u = Object.getOwnPropertyDescriptor, o = (i, e, s, a) => {
10
10
  for (var l, t = a > 1 ? void 0 : a ? u(e, s) : e, m = i.length - 1; m >= 0; m--) (l = i[m]) && (t = (a ? l(e, s, t) : l(t)) || t);
@@ -81,4 +81,4 @@ let r = class extends g(h`
81
81
  }
82
82
  };
83
83
  o([n({ type: String })], r.prototype, "outline", 2), o([n({ type: Boolean })], r.prototype, "vertical", 2), o([n({ type: String })], r.prototype, "grow", 2), o([n({ reflect: !0, type: String })], r.prototype, "orientation", 1), r = o([c("schmancy-divider")], r);
84
- //# sourceMappingURL=divider-B7DBbYFI.js.map
84
+ //# sourceMappingURL=divider-CzTpxOqt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"divider-B7DBbYFI.js","sources":["../src/divider/divider.ts"],"sourcesContent":["// divider.ts\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-divider')\nexport default class SchmancyDivider extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t@keyframes grow-horizontal {\n\t\tfrom {\n\t\t\ttransform: scaleX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleX(1);\n\t\t}\n\t}\n\n\t@keyframes grow-vertical {\n\t\tfrom {\n\t\t\ttransform: scaleY(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleY(1);\n\t\t}\n\t}\n\n\t/* Horizontal divider grow animations */\n\t.grow-start:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: left;\n\t}\n\n\t.grow-end:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: right;\n\t}\n\n\t.grow-both:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n\n\t/* Vertical divider grow animations */\n\t.grow-start.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: top;\n\t}\n\n\t.grow-end.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: bottom;\n\t}\n\n\t.grow-both.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n`) {\n\t@property({ type: String }) outline: 'default' | 'variant' = 'variant'\n\t@property({ type: Boolean }) vertical = false\n\t@property({ type: String }) grow: 'start' | 'end' | 'both' = 'start'\n\n\t/**\n\t * @deprecated Use `vertical` property instead. Will be removed in next major version.\n\t */\n\t@property({ reflect: true, type: String })\n\tset orientation(value: 'horizontal' | 'vertical') {\n\t\tthis.vertical = value === 'vertical'\n\t}\n\tget orientation(): 'horizontal' | 'vertical' {\n\t\treturn this.vertical ? 'vertical' : 'horizontal'\n\t}\n\n\tprotected render() {\n\t\treturn html`<div\n\t\t\tclass=${this.classMap({\n\t\t\t\t// Dimensions\n\t\t\t\t'w-full h-px': !this.vertical,\n\t\t\t\t'h-full w-px': this.vertical,\n\t\t\t\t// Border color\n\t\t\t\t'border-outlineVariant': this.outline === 'variant',\n\t\t\t\t'border-outline': this.outline === 'default',\n\t\t\t\t// Border style\n\t\t\t\t'border-t': !this.vertical,\n\t\t\t\t'border-l': this.vertical,\n\t\t\t\t// Grow behavior\n\t\t\t\t[`grow-${this.grow}`]: true,\n\t\t\t})}\n\t\t></div>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-divider': SchmancyDivider\n\t}\n}\n"],"names":["SchmancyDivider","$LitElement","css","constructor","super","arguments","this","outline","vertical","grow","value","render","html","classMap","__decorateClass","property","type","String","prototype","Boolean","reflect","customElement"],"mappings":";;;;;;;;;;;;AAMA,IAAqBA,IAArB,cAA6CC,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;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;AAAAA;AAAAA;AAAAA;AAAAA,CAAzD,EAAA;AAAA,EAAA,cAAAC;AAAAC,UAAAA,GAAAC,SAAAA,GAuD6BC,KAAAC,UAAiC,WAChCD,KAAAE,WAAAA,IACDF,KAAAG,OAAiC;AAAA,EAAA;AAAA,EAM7D,gBAAgBC,GAAAA;AACfJ,SAAKE,WAAWE,MAAU;AAAA,EAC3B;AAAA,EACA,IAAA;AACC,WAAOJ,KAAKE,WAAW,aAAa;AAAA,EACrC;AAAA,EAEU,SAAAG;AACT,WAAOC;AAAAA,WACEN,KAAKO,SAAS,EAErB,eAAA,CAAgBP,KAAKE,UACrB,eAAeF,KAAKE,UAEpB,yBAAyBF,KAAKC,YAAY,WAC1C,kBAAkBD,KAAKC,YAAY,WAEnC,YAAA,CAAaD,KAAKE,UAClB,YAAYF,KAAKE,UAEjB,CAAC,QAAQF,KAAKG,IAAAA,EAAAA,GAAAA,GAAS,CAAA,CAAA;AAAA;AAAA,EAG1B;AAAA;AA/B4BK,EAAA,CAA3BC,EAAS,EAAEC,MAAMC,OAAAA,CAAAA,CAAAA,GAvDEjB,EAuDQkB,WAAA,WAAA,CAAA,GACCJ,EAAA,CAA5BC,EAAS,EAAEC,MAAMG,QAAAA,CAAAA,CAAAA,GAxDEnB,EAwDSkB,WAAA,YAAA,CAAA,GACDJ,EAAA,CAA3BC,EAAS,EAAEC,MAAMC,OAAAA,CAAAA,CAAAA,GAzDEjB,EAyDQkB,WAAA,QAAA,IAMxBJ,EAAA,CADHC,EAAS,EAAEK,SAAAA,IAAeJ,MAAMC,OAAAA,CAAAA,CAAAA,GA9DbjB,EA+DhBkB,WAAA,eAAA,IA/DgBlB,IAArBc,EAAA,CADCO,EAAc,kBAAA,CAAA,GACMrB,CAAAA;"}
1
+ {"version":3,"file":"divider-CzTpxOqt.js","sources":["../src/divider/divider.ts"],"sourcesContent":["// divider.ts\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-divider')\nexport default class SchmancyDivider extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t@keyframes grow-horizontal {\n\t\tfrom {\n\t\t\ttransform: scaleX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleX(1);\n\t\t}\n\t}\n\n\t@keyframes grow-vertical {\n\t\tfrom {\n\t\t\ttransform: scaleY(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleY(1);\n\t\t}\n\t}\n\n\t/* Horizontal divider grow animations */\n\t.grow-start:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: left;\n\t}\n\n\t.grow-end:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: right;\n\t}\n\n\t.grow-both:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n\n\t/* Vertical divider grow animations */\n\t.grow-start.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: top;\n\t}\n\n\t.grow-end.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: bottom;\n\t}\n\n\t.grow-both.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n`) {\n\t@property({ type: String }) outline: 'default' | 'variant' = 'variant'\n\t@property({ type: Boolean }) vertical = false\n\t@property({ type: String }) grow: 'start' | 'end' | 'both' = 'start'\n\n\t/**\n\t * @deprecated Use `vertical` property instead. Will be removed in next major version.\n\t */\n\t@property({ reflect: true, type: String })\n\tset orientation(value: 'horizontal' | 'vertical') {\n\t\tthis.vertical = value === 'vertical'\n\t}\n\tget orientation(): 'horizontal' | 'vertical' {\n\t\treturn this.vertical ? 'vertical' : 'horizontal'\n\t}\n\n\tprotected render() {\n\t\treturn html`<div\n\t\t\tclass=${this.classMap({\n\t\t\t\t// Dimensions\n\t\t\t\t'w-full h-px': !this.vertical,\n\t\t\t\t'h-full w-px': this.vertical,\n\t\t\t\t// Border color\n\t\t\t\t'border-outlineVariant': this.outline === 'variant',\n\t\t\t\t'border-outline': this.outline === 'default',\n\t\t\t\t// Border style\n\t\t\t\t'border-t': !this.vertical,\n\t\t\t\t'border-l': this.vertical,\n\t\t\t\t// Grow behavior\n\t\t\t\t[`grow-${this.grow}`]: true,\n\t\t\t})}\n\t\t></div>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-divider': SchmancyDivider\n\t}\n}\n"],"names":["SchmancyDivider","$LitElement","css","constructor","super","arguments","this","outline","vertical","grow","value","render","html","classMap","__decorateClass","property","type","String","prototype","Boolean","reflect","customElement"],"mappings":";;;;;;;;;;;;AAMA,IAAqBA,IAArB,cAA6CC,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;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;AAAAA;AAAAA;AAAAA;AAAAA,CAAzD,EAAA;AAAA,EAAA,cAAAC;AAAAC,UAAAA,GAAAC,SAAAA,GAuD6BC,KAAAC,UAAiC,WAChCD,KAAAE,WAAAA,IACDF,KAAAG,OAAiC;AAAA,EAAA;AAAA,EAM7D,gBAAgBC,GAAAA;AACfJ,SAAKE,WAAWE,MAAU;AAAA,EAC3B;AAAA,EACA,IAAA;AACC,WAAOJ,KAAKE,WAAW,aAAa;AAAA,EACrC;AAAA,EAEU,SAAAG;AACT,WAAOC;AAAAA,WACEN,KAAKO,SAAS,EAErB,eAAA,CAAgBP,KAAKE,UACrB,eAAeF,KAAKE,UAEpB,yBAAyBF,KAAKC,YAAY,WAC1C,kBAAkBD,KAAKC,YAAY,WAEnC,YAAA,CAAaD,KAAKE,UAClB,YAAYF,KAAKE,UAEjB,CAAC,QAAQF,KAAKG,IAAAA,EAAAA,GAAAA,GAAS,CAAA,CAAA;AAAA;AAAA,EAG1B;AAAA;AA/B4BK,EAAA,CAA3BC,EAAS,EAAEC,MAAMC,OAAAA,CAAAA,CAAAA,GAvDEjB,EAuDQkB,WAAA,WAAA,CAAA,GACCJ,EAAA,CAA5BC,EAAS,EAAEC,MAAMG,QAAAA,CAAAA,CAAAA,GAxDEnB,EAwDSkB,WAAA,YAAA,CAAA,GACDJ,EAAA,CAA3BC,EAAS,EAAEC,MAAMC,OAAAA,CAAAA,CAAAA,GAzDEjB,EAyDQkB,WAAA,QAAA,IAMxBJ,EAAA,CADHC,EAAS,EAAEK,SAAAA,IAAeJ,MAAMC,OAAAA,CAAAA,CAAAA,GA9DbjB,EA+DhBkB,WAAA,eAAA,IA/DgBlB,IAArBc,EAAA,CADCO,EAAc,kBAAA,CAAA,GACMrB,CAAAA;"}
@@ -1,4 +1,4 @@
1
- "use strict";require("rxjs"),require("rxjs/operators"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const e=require("lit/decorators.js");require("./tailwind.mixin-UijsBrYW.cjs");const m=require("./litElement.mixin-BVBdv0GP.cjs"),u=require("lit");var g=Object.defineProperty,h=Object.getOwnPropertyDescriptor,o=(i,a,s,n)=>{for(var l,r=n>1?void 0:n?h(a,s):a,c=i.length-1;c>=0;c--)(l=i[c])&&(r=(n?l(a,s,r):l(r))||r);return n&&r&&g(a,s,r),r};let t=class extends m.$LitElement(u.css`
1
+ "use strict";require("rxjs"),require("rxjs/operators"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const e=require("lit/decorators.js");require("./tailwind.mixin-Cp4PyXok.cjs");const m=require("./litElement.mixin-CrpeGpZ7.cjs"),u=require("lit");var g=Object.defineProperty,h=Object.getOwnPropertyDescriptor,o=(i,a,s,n)=>{for(var l,r=n>1?void 0:n?h(a,s):a,c=i.length-1;c>=0;c--)(l=i[c])&&(r=(n?l(a,s,r):l(r))||r);return n&&r&&g(a,s,r),r};let t=class extends m.$LitElement(u.css`
2
2
  :host {
3
3
  display: block;
4
4
  }
@@ -55,4 +55,4 @@
55
55
  `){constructor(){super(...arguments),this.outline="variant",this.vertical=!1,this.grow="start"}set orientation(i){this.vertical=i==="vertical"}get orientation(){return this.vertical?"vertical":"horizontal"}render(){return u.html`<div
56
56
  class=${this.classMap({"w-full h-px":!this.vertical,"h-full w-px":this.vertical,"border-outlineVariant":this.outline==="variant","border-outline":this.outline==="default","border-t":!this.vertical,"border-l":this.vertical,[`grow-${this.grow}`]:!0})}
57
57
  ></div>`}};o([e.property({type:String})],t.prototype,"outline",2),o([e.property({type:Boolean})],t.prototype,"vertical",2),o([e.property({type:String})],t.prototype,"grow",2),o([e.property({reflect:!0,type:String})],t.prototype,"orientation",1),t=o([e.customElement("schmancy-divider")],t);
58
- //# sourceMappingURL=divider-Dl4TToQZ.cjs.map
58
+ //# sourceMappingURL=divider-D8KStUhN.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"divider-Dl4TToQZ.cjs","sources":["../src/divider/divider.ts"],"sourcesContent":["// divider.ts\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-divider')\nexport default class SchmancyDivider extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t@keyframes grow-horizontal {\n\t\tfrom {\n\t\t\ttransform: scaleX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleX(1);\n\t\t}\n\t}\n\n\t@keyframes grow-vertical {\n\t\tfrom {\n\t\t\ttransform: scaleY(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleY(1);\n\t\t}\n\t}\n\n\t/* Horizontal divider grow animations */\n\t.grow-start:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: left;\n\t}\n\n\t.grow-end:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: right;\n\t}\n\n\t.grow-both:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n\n\t/* Vertical divider grow animations */\n\t.grow-start.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: top;\n\t}\n\n\t.grow-end.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: bottom;\n\t}\n\n\t.grow-both.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n`) {\n\t@property({ type: String }) outline: 'default' | 'variant' = 'variant'\n\t@property({ type: Boolean }) vertical = false\n\t@property({ type: String }) grow: 'start' | 'end' | 'both' = 'start'\n\n\t/**\n\t * @deprecated Use `vertical` property instead. Will be removed in next major version.\n\t */\n\t@property({ reflect: true, type: String })\n\tset orientation(value: 'horizontal' | 'vertical') {\n\t\tthis.vertical = value === 'vertical'\n\t}\n\tget orientation(): 'horizontal' | 'vertical' {\n\t\treturn this.vertical ? 'vertical' : 'horizontal'\n\t}\n\n\tprotected render() {\n\t\treturn html`<div\n\t\t\tclass=${this.classMap({\n\t\t\t\t// Dimensions\n\t\t\t\t'w-full h-px': !this.vertical,\n\t\t\t\t'h-full w-px': this.vertical,\n\t\t\t\t// Border color\n\t\t\t\t'border-outlineVariant': this.outline === 'variant',\n\t\t\t\t'border-outline': this.outline === 'default',\n\t\t\t\t// Border style\n\t\t\t\t'border-t': !this.vertical,\n\t\t\t\t'border-l': this.vertical,\n\t\t\t\t// Grow behavior\n\t\t\t\t[`grow-${this.grow}`]: true,\n\t\t\t})}\n\t\t></div>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-divider': SchmancyDivider\n\t}\n}\n"],"names":["SchmancyDivider","$LitElement","css","constructor","super","arguments","this","outline","vertical","grow","value","render","html","classMap","__decorateClass","property","type","String","prototype","Boolean","reflect","customElement"],"mappings":"udAMA,IAAqBA,EAArB,cAA6CC,EAAAA,YAAYC,EAAAA;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;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;AAAAA;AAAAA;AAAAA;AAAAA,CAAzD,CAAA,CAAA,aAAAC,CAAAC,MAAAA,GAAAC,SAAAA,EAuD6BC,KAAAC,QAAiC,UAChCD,KAAAE,SAAAA,GACDF,KAAAG,KAAiC,OAAA,CAM7D,gBAAgBC,EAAAA,CACfJ,KAAKE,SAAWE,IAAU,UAC3B,CACA,IAAA,cACC,OAAOJ,KAAKE,SAAW,WAAa,YACrC,CAEU,QAAAG,CACT,OAAOC;WACEN,KAAKO,SAAS,CAErB,cAAA,CAAgBP,KAAKE,SACrB,cAAeF,KAAKE,SAEpB,wBAAyBF,KAAKC,UAAY,UAC1C,iBAAkBD,KAAKC,UAAY,UAEnC,WAAA,CAAaD,KAAKE,SAClB,WAAYF,KAAKE,SAEjB,CAAC,QAAQF,KAAKG,IAAAA,EAAAA,EAAAA,EAAS,CAAA,CAAA;AAAA,UAG1B,CAAA,EA/B4BK,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MAAAA,CAAAA,CAAAA,EAvDEjB,EAuDQkB,UAAA,UAAA,CAAA,EACCJ,EAAA,CAA5BC,WAAS,CAAEC,KAAMG,OAAAA,CAAAA,CAAAA,EAxDEnB,EAwDSkB,UAAA,WAAA,CAAA,EACDJ,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MAAAA,CAAAA,CAAAA,EAzDEjB,EAyDQkB,UAAA,OAAA,GAMxBJ,EAAA,CADHC,EAAAA,SAAS,CAAEK,QAAAA,GAAeJ,KAAMC,MAAAA,CAAAA,CAAAA,EA9DbjB,EA+DhBkB,UAAA,cAAA,CAAA,EA/DgBlB,EAArBc,EAAA,CADCO,EAAAA,cAAc,kBAAA,CAAA,EACMrB,CAAAA"}
1
+ {"version":3,"file":"divider-D8KStUhN.cjs","sources":["../src/divider/divider.ts"],"sourcesContent":["// divider.ts\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-divider')\nexport default class SchmancyDivider extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t@keyframes grow-horizontal {\n\t\tfrom {\n\t\t\ttransform: scaleX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleX(1);\n\t\t}\n\t}\n\n\t@keyframes grow-vertical {\n\t\tfrom {\n\t\t\ttransform: scaleY(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleY(1);\n\t\t}\n\t}\n\n\t/* Horizontal divider grow animations */\n\t.grow-start:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: left;\n\t}\n\n\t.grow-end:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: right;\n\t}\n\n\t.grow-both:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n\n\t/* Vertical divider grow animations */\n\t.grow-start.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: top;\n\t}\n\n\t.grow-end.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: bottom;\n\t}\n\n\t.grow-both.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n`) {\n\t@property({ type: String }) outline: 'default' | 'variant' = 'variant'\n\t@property({ type: Boolean }) vertical = false\n\t@property({ type: String }) grow: 'start' | 'end' | 'both' = 'start'\n\n\t/**\n\t * @deprecated Use `vertical` property instead. Will be removed in next major version.\n\t */\n\t@property({ reflect: true, type: String })\n\tset orientation(value: 'horizontal' | 'vertical') {\n\t\tthis.vertical = value === 'vertical'\n\t}\n\tget orientation(): 'horizontal' | 'vertical' {\n\t\treturn this.vertical ? 'vertical' : 'horizontal'\n\t}\n\n\tprotected render() {\n\t\treturn html`<div\n\t\t\tclass=${this.classMap({\n\t\t\t\t// Dimensions\n\t\t\t\t'w-full h-px': !this.vertical,\n\t\t\t\t'h-full w-px': this.vertical,\n\t\t\t\t// Border color\n\t\t\t\t'border-outlineVariant': this.outline === 'variant',\n\t\t\t\t'border-outline': this.outline === 'default',\n\t\t\t\t// Border style\n\t\t\t\t'border-t': !this.vertical,\n\t\t\t\t'border-l': this.vertical,\n\t\t\t\t// Grow behavior\n\t\t\t\t[`grow-${this.grow}`]: true,\n\t\t\t})}\n\t\t></div>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-divider': SchmancyDivider\n\t}\n}\n"],"names":["SchmancyDivider","$LitElement","css","constructor","super","arguments","this","outline","vertical","grow","value","render","html","classMap","__decorateClass","property","type","String","prototype","Boolean","reflect","customElement"],"mappings":"udAMA,IAAqBA,EAArB,cAA6CC,EAAAA,YAAYC,EAAAA;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;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;AAAAA;AAAAA;AAAAA;AAAAA,CAAzD,CAAA,CAAA,aAAAC,CAAAC,MAAAA,GAAAC,SAAAA,EAuD6BC,KAAAC,QAAiC,UAChCD,KAAAE,SAAAA,GACDF,KAAAG,KAAiC,OAAA,CAM7D,gBAAgBC,EAAAA,CACfJ,KAAKE,SAAWE,IAAU,UAC3B,CACA,IAAA,cACC,OAAOJ,KAAKE,SAAW,WAAa,YACrC,CAEU,QAAAG,CACT,OAAOC;WACEN,KAAKO,SAAS,CAErB,cAAA,CAAgBP,KAAKE,SACrB,cAAeF,KAAKE,SAEpB,wBAAyBF,KAAKC,UAAY,UAC1C,iBAAkBD,KAAKC,UAAY,UAEnC,WAAA,CAAaD,KAAKE,SAClB,WAAYF,KAAKE,SAEjB,CAAC,QAAQF,KAAKG,IAAAA,EAAAA,EAAAA,EAAS,CAAA,CAAA;AAAA,UAG1B,CAAA,EA/B4BK,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MAAAA,CAAAA,CAAAA,EAvDEjB,EAuDQkB,UAAA,UAAA,CAAA,EACCJ,EAAA,CAA5BC,WAAS,CAAEC,KAAMG,OAAAA,CAAAA,CAAAA,EAxDEnB,EAwDSkB,UAAA,WAAA,CAAA,EACDJ,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MAAAA,CAAAA,CAAAA,EAzDEjB,EAyDQkB,UAAA,OAAA,GAMxBJ,EAAA,CADHC,EAAAA,SAAS,CAAEK,QAAAA,GAAeJ,KAAMC,MAAAA,CAAAA,CAAAA,EA9DbjB,EA+DhBkB,UAAA,cAAA,CAAA,EA/DgBlB,EAArBc,EAAA,CADCO,EAAAA,cAAc,kBAAA,CAAA,EACMrB,CAAAA"}
package/dist/divider.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";require("./divider-Dl4TToQZ.cjs");
1
+ "use strict";require("./divider-D8KStUhN.cjs");
2
2
  //# sourceMappingURL=divider.cjs.map
package/dist/divider.js CHANGED
@@ -1,2 +1,2 @@
1
- import "./divider-B7DBbYFI.js";
1
+ import "./divider-CzTpxOqt.js";
2
2
  //# sourceMappingURL=divider.js.map
@@ -1,4 +1,4 @@
1
- "use strict";const l=require("@floating-ui/dom"),c=require("rxjs");require("rxjs/operators"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const n=require("lit/decorators.js"),m=require("./tailwind.mixin-UijsBrYW.cjs"),y=require("./litElement.mixin-BVBdv0GP.cjs"),h=require("lit");var u=Object.defineProperty,g=Object.getOwnPropertyDescriptor,i=(t,o,s,r)=>{for(var a,e=r>1?void 0:r?g(o,s):o,p=t.length-1;p>=0;p--)(a=t[p])&&(e=(r?a(o,s,e):a(e))||e);return r&&e&&u(o,s,e),e};exports.SchmancyDropdown=class extends y.$LitElement(){constructor(){super(...arguments),this.open=!1,this.placement="bottom-start",this.distance=8,this.portal=null,this.portalSubscriptions=[]}connectedCallback(){super.connectedCallback(),this.setupPortal(),c.fromEvent(document,"click").pipe(c.filter(t=>this.open&&!this.isEventFromSelf(t)),c.takeUntil(this.disconnecting)).subscribe(()=>{this.open=!1}),c.fromEvent(document,"keydown").pipe(c.filter(t=>this.open&&t.key==="Escape"),c.takeUntil(this.disconnecting)).subscribe(()=>{this.open=!1})}setupPortal(){let t=document.getElementById("schmancy-portal-container");t||(t=document.createElement("div"),t.id="schmancy-portal-container",t.style.position="fixed",t.style.zIndex="10000",t.style.top="0",t.style.left="0",t.style.pointerEvents="none",document.body.appendChild(t));const o=document.createElement("div");o.className="schmancy-dropdown-portal",o.style.position="absolute",o.style.pointerEvents="auto",o.style.display="none",t.appendChild(o),this.portal=o}isEventFromSelf(t){return t.composedPath().some(o=>o===this)}disconnectedCallback(){this.cleanupPositioner?.(),this.portalSubscriptions.forEach(t=>t.unsubscribe()),this.portalSubscriptions=[],this.portal&&(this.portal.remove(),this.portal=null),super.disconnectedCallback()}toggle(){this.open=!this.open}updated(t){super.updated(t),t.has("open")&&(this.open?this.setupPositioner():(this.cleanupPositioner?.(),this.portal&&(this.portal.style.display="none",this.portal.innerHTML="",this.portalSubscriptions.forEach(o=>o.unsubscribe()),this.portalSubscriptions=[])))}setupPositioner(){this.triggerContainer&&this.portal&&(this.portal.style.display="block",this.teleportContentToPortal(),this.cleanupPositioner=l.autoUpdate(this.triggerContainer,this.portal,()=>{l.computePosition(this.triggerContainer,this.portal,{placement:this.placement,middleware:[l.offset(this.distance),l.flip({fallbackPlacements:["top-start","bottom-start"]}),l.shift({padding:0})]}).then(({x:t,y:o})=>{Object.assign(this.portal.style,{left:`${t}px`,top:o-8+"px"})})}))}teleportContentToPortal(){this.portal&&(this.portalSubscriptions.forEach(t=>t.unsubscribe()),this.portalSubscriptions=[],this.portal.innerHTML="",this.contentElements.forEach(t=>{const o=t.cloneNode(!0);if(t.tagName.toLowerCase()==="schmancy-dropdown-content"){const s=c.fromEvent(o,"slotchange").subscribe(()=>{const r=o.shadowRoot?.querySelector('[part="content"]');r&&r.classList.add("schmancy-dropdown-content")});this.portalSubscriptions.push(s)}this.portal?.appendChild(o)}))}handleTriggerClick(t){t.stopPropagation(),this.toggle()}render(){return h.html`
1
+ "use strict";const l=require("@floating-ui/dom"),c=require("rxjs");require("rxjs/operators"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const n=require("lit/decorators.js"),m=require("./tailwind.mixin-Cp4PyXok.cjs"),y=require("./litElement.mixin-CrpeGpZ7.cjs"),h=require("lit");var u=Object.defineProperty,g=Object.getOwnPropertyDescriptor,i=(t,o,s,r)=>{for(var a,e=r>1?void 0:r?g(o,s):o,p=t.length-1;p>=0;p--)(a=t[p])&&(e=(r?a(o,s,e):a(e))||e);return r&&e&&u(o,s,e),e};exports.SchmancyDropdown=class extends y.$LitElement(){constructor(){super(...arguments),this.open=!1,this.placement="bottom-start",this.distance=8,this.portal=null,this.portalSubscriptions=[]}connectedCallback(){super.connectedCallback(),this.setupPortal(),c.fromEvent(document,"click").pipe(c.filter(t=>this.open&&!this.isEventFromSelf(t)),c.takeUntil(this.disconnecting)).subscribe(()=>{this.open=!1}),c.fromEvent(document,"keydown").pipe(c.filter(t=>this.open&&t.key==="Escape"),c.takeUntil(this.disconnecting)).subscribe(()=>{this.open=!1})}setupPortal(){let t=document.getElementById("schmancy-portal-container");t||(t=document.createElement("div"),t.id="schmancy-portal-container",t.style.position="fixed",t.style.zIndex="10000",t.style.top="0",t.style.left="0",t.style.pointerEvents="none",document.body.appendChild(t));const o=document.createElement("div");o.className="schmancy-dropdown-portal",o.style.position="absolute",o.style.pointerEvents="auto",o.style.display="none",t.appendChild(o),this.portal=o}isEventFromSelf(t){return t.composedPath().some(o=>o===this)}disconnectedCallback(){this.cleanupPositioner?.(),this.portalSubscriptions.forEach(t=>t.unsubscribe()),this.portalSubscriptions=[],this.portal&&(this.portal.remove(),this.portal=null),super.disconnectedCallback()}toggle(){this.open=!this.open}updated(t){super.updated(t),t.has("open")&&(this.open?this.setupPositioner():(this.cleanupPositioner?.(),this.portal&&(this.portal.style.display="none",this.portal.innerHTML="",this.portalSubscriptions.forEach(o=>o.unsubscribe()),this.portalSubscriptions=[])))}setupPositioner(){this.triggerContainer&&this.portal&&(this.portal.style.display="block",this.teleportContentToPortal(),this.cleanupPositioner=l.autoUpdate(this.triggerContainer,this.portal,()=>{l.computePosition(this.triggerContainer,this.portal,{placement:this.placement,middleware:[l.offset(this.distance),l.flip({fallbackPlacements:["top-start","bottom-start"]}),l.shift({padding:0})]}).then(({x:t,y:o})=>{Object.assign(this.portal.style,{left:`${t}px`,top:o-8+"px"})})}))}teleportContentToPortal(){this.portal&&(this.portalSubscriptions.forEach(t=>t.unsubscribe()),this.portalSubscriptions=[],this.portal.innerHTML="",this.contentElements.forEach(t=>{const o=t.cloneNode(!0);if(t.tagName.toLowerCase()==="schmancy-dropdown-content"){const s=c.fromEvent(o,"slotchange").subscribe(()=>{const r=o.shadowRoot?.querySelector('[part="content"]');r&&r.classList.add("schmancy-dropdown-content")});this.portalSubscriptions.push(s)}this.portal?.appendChild(o)}))}handleTriggerClick(t){t.stopPropagation(),this.toggle()}render(){return h.html`
2
2
  <div class="trigger-container" @click=${this.handleTriggerClick}>
3
3
  <slot name="trigger"></slot>
4
4
  </div>
@@ -55,4 +55,4 @@
55
55
  <slot></slot>
56
56
  </div>
57
57
  `}},d([n.property({type:String})],exports.SchmancyDropdownContent.prototype,"width",2),d([n.property({type:String})],exports.SchmancyDropdownContent.prototype,"maxHeight",2),d([n.property({type:Boolean})],exports.SchmancyDropdownContent.prototype,"shadow",2),d([n.property({type:String})],exports.SchmancyDropdownContent.prototype,"radius",2),exports.SchmancyDropdownContent=d([n.customElement("schmancy-dropdown-content")],exports.SchmancyDropdownContent);
58
- //# sourceMappingURL=dropdown-content-C2W7OttQ.cjs.map
58
+ //# sourceMappingURL=dropdown-content-CngZN3vv.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-content-C2W7OttQ.cjs","sources":["../src/dropdown/dropdown-component.ts","../src/dropdown/dropdown-content.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { filter, fromEvent, takeUntil, Subscription } from 'rxjs'\n\n/**\n * A dropdown component that displays content when triggered.\n *\n * @element schmancy-dropdown\n * @slot trigger - The element that triggers the dropdown\n * @slot - Default slot for the dropdown content\n */\n@customElement('schmancy-dropdown')\nexport class SchmancyDropdown extends $LitElement() {\n\t/**\n\t * Whether the dropdown is currently open\n\t */\n\t@property({ type: Boolean, reflect: true })\n\topen = false\n\n\t/**\n\t * Placement of the dropdown relative to the trigger\n\t */\n\t@property({ type: String })\n\tplacement:\n\t\t| 'top'\n\t\t| 'top-start'\n\t\t| 'top-end'\n\t\t| 'right'\n\t\t| 'right-start'\n\t\t| 'right-end'\n\t\t| 'bottom'\n\t\t| 'bottom-start'\n\t\t| 'bottom-end'\n\t\t| 'left'\n\t\t| 'left-start'\n\t\t| 'left-end' = 'bottom-start'\n\n\t/**\n\t * Offset distance in pixels\n\t */\n\t@property({ type: Number })\n\tdistance = 8\n\n\t@query('.trigger-container') triggerContainer!: HTMLElement\n\t@query('.dropdown-content-container') contentContainer!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) contentElements!: HTMLElement[]\n\t@state() private portal: HTMLElement | null = null\n\n\t@queryAssignedElements({ slot: 'trigger', flatten: true })\n\ttriggerElements!: Array<HTMLElement>\n\n\tprivate cleanupPositioner?: () => void\n\tprivate portalSubscriptions: Subscription[] = []\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Create portal container for teleporting content to document body\n\t\tthis.setupPortal()\n\n\t\t// Listen for document clicks to close dropdown when clicking outside\n\t\tfromEvent<MouseEvent>(document, 'click')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && !this.isEventFromSelf(event)),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\n\t\t// Listen for escape key to close dropdown\n\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && event.key === 'Escape'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up the portal element for teleporting content\n\t */\n\tprivate setupPortal() {\n\t\t// Check if portal container exists\n\t\tlet portalContainer = document.getElementById('schmancy-portal-container')\n\n\t\t// Create portal container if it doesn't exist\n\t\tif (!portalContainer) {\n\t\t\tportalContainer = document.createElement('div')\n\t\t\tportalContainer.id = 'schmancy-portal-container'\n\t\t\tportalContainer.style.position = 'fixed'\n\t\t\tportalContainer.style.zIndex = '10000'\n\t\t\tportalContainer.style.top = '0'\n\t\t\tportalContainer.style.left = '0'\n\t\t\tportalContainer.style.pointerEvents = 'none'\n\t\t\tdocument.body.appendChild(portalContainer)\n\t\t}\n\n\t\t// Create portal for this specific dropdown\n\t\tconst portal = document.createElement('div')\n\t\tportal.className = 'schmancy-dropdown-portal'\n\t\tportal.style.position = 'absolute'\n\t\tportal.style.pointerEvents = 'auto'\n\t\tportal.style.display = 'none'\n\t\tportalContainer.appendChild(portal)\n\n\t\tthis.portal = portal\n\t}\n\n\t/**\n\t * Check if an event originated from within this component\n\t */\n\tprivate isEventFromSelf(event: Event): boolean {\n\t\treturn event.composedPath().some(el => el === this)\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Clean up portal subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Remove portal when component is disconnected\n\t\tif (this.portal) {\n\t\t\tthis.portal.remove()\n\t\t\tthis.portal = null\n\t\t}\n\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Toggle the dropdown open state\n\t */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\tupdated(changedProps: Map<string, any>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tthis.setupPositioner()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\n\t\t\t\t// Hide portal when dropdown is closed\n\t\t\t\tif (this.portal) {\n\t\t\t\t\tthis.portal.style.display = 'none'\n\t\t\t\t\tthis.portal.innerHTML = ''\n\t\t\t\t\t// Clean up subscriptions when content is cleared\n\t\t\t\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\t\t\t\tthis.portalSubscriptions = []\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Setup floating UI positioning with teleportation\n\t */\n\tprivate setupPositioner() {\n\t\tif (!this.triggerContainer || !this.portal) return\n\n\t\t// Show the portal\n\t\tthis.portal.style.display = 'block'\n\n\t\t// Move content to portal\n\t\tthis.teleportContentToPortal()\n\n\t\t// Setup positioning\n\t\tthis.cleanupPositioner = autoUpdate(this.triggerContainer, this.portal, () => {\n\t\t\tcomputePosition(this.triggerContainer, this.portal, {\n\t\t\t\tplacement: this.placement,\n\t\t\t\tmiddleware: [\n\t\t\t\t\toffset(this.distance),\n\t\t\t\t\tflip({\n\t\t\t\t\t\tfallbackPlacements: ['top-start', 'bottom-start'],\n\t\t\t\t\t}),\n\t\t\t\t\tshift({ padding: 0 }),\n\t\t\t\t],\n\t\t\t}).then(({ x, y }) => {\n\t\t\t\t// Update portal position\n\t\t\t\tObject.assign(this.portal.style, {\n\t\t\t\t\tleft: `${x}px`,\n\t\t\t\t\ttop: `${y - 8}px`,\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Move slotted content to the portal\n\t */\n\tprivate teleportContentToPortal() {\n\t\tif (!this.portal) return\n\n\t\t// Clean up existing subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Clear existing content\n\t\tthis.portal.innerHTML = ''\n\n\t\t// Clone and move slotted content to portal\n\t\tthis.contentElements.forEach(element => {\n\t\t\t// Get computed styles to ensure portal content matches original styling\n\t\t\tconst clonedElement = element.cloneNode(true) as HTMLElement\n\n\t\t\t// Ensure dropdown-content elements maintain their styles when teleported\n\t\t\tif (element.tagName.toLowerCase() === 'schmancy-dropdown-content') {\n\t\t\t\tconst subscription = fromEvent(clonedElement, 'slotchange').subscribe(() => {\n\t\t\t\t\t// Propagate any slot changes to class changes on children\n\t\t\t\t\tconst contentDiv = clonedElement.shadowRoot?.querySelector('[part=\"content\"]')\n\t\t\t\t\tif (contentDiv) {\n\t\t\t\t\t\tcontentDiv.classList.add('schmancy-dropdown-content')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.portalSubscriptions.push(subscription)\n\t\t\t}\n\n\t\t\tthis.portal?.appendChild(clonedElement)\n\t\t})\n\t}\n\n\t/**\n\t * Handle trigger click to toggle dropdown\n\t */\n\tprivate handleTriggerClick(e: Event) {\n\t\te.stopPropagation()\n\t\tthis.toggle()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"trigger-container\" @click=${this.handleTriggerClick}>\n\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t</div>\n\n\t\t\t<div class=\"dropdown-content-container\" ?hidden=${!this.open}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.teleportContentToPortal()\n\t\t\t\t\t\t\tthis.setupPositioner()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown': SchmancyDropdown\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * Content container for the schmancy-dropdown component.\n *\n * @element schmancy-dropdown-content\n * @slot - Default slot for dropdown content\n */\n@customElement('schmancy-dropdown-content')\nexport class SchmancyDropdownContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tz-index: 1000;\n\t\tmin-width: 10rem;\n\t\tmargin: 0;\n\t\ttext-align: left;\n\t\tlist-style: none;\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tbackground-clip: padding-box;\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n\n\t:host([hidden]) {\n\t\tdisplay: none;\n\t}\n\n\t@keyframes dropdownAnimation {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.95);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t}\n\n\t/* Apply styles to content both in the component and when teleported to the portal */\n\t.schmancy-dropdown-content {\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n`) {\n\t/**\n\t * Width of the dropdown content\n\t */\n\t@property({ type: String })\n\twidth: string = 'auto'\n\n\t/**\n\t * Maximum height of the dropdown content\n\t */\n\t@property({ type: String })\n\tmaxHeight: string = '80vh'\n\n\t/**\n\t * Whether to render with a shadow\n\t */\n\t@property({ type: Boolean })\n\tshadow: boolean = true\n\n\t/**\n\t * Border radius style\n\t */\n\t@property({ type: String })\n\tradius: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md'\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'schmancy-dropdown-content': true,\n\t\t\t'overflow-auto': true,\n\t\t\t'shadow-none': !this.shadow,\n\t\t\t'rounded-none': this.radius === 'none',\n\t\t\t'rounded-sm': this.radius === 'sm',\n\t\t\t'rounded-md': this.radius === 'md',\n\t\t\t'rounded-lg': this.radius === 'lg',\n\t\t\t'rounded-full': this.radius === 'full',\n\t\t}\n\n\t\tconst styles = {\n\t\t\twidth: this.width,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=${this.classMap(classes)} style=${this.styleMap(styles)} part=\"content\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown-content': SchmancyDropdownContent\n\t}\n}\n"],"names":["SchmancyDropdown","$LitElement","constructor","super","arguments","this","open","placement","distance","portal","portalSubscriptions","connectedCallback","setupPortal","fromEvent","document","pipe","filter","isEventFromSelf","event","takeUntil","disconnecting","subscribe","key","portalContainer","getElementById","createElement","id","style","position","zIndex","top","left","pointerEvents","body","appendChild","className","display","composedPath","some","el","cleanupPositioner","forEach","subscription","unsubscribe","remove","disconnectedCallback","toggle","changedProps","updated","has","setupPositioner","innerHTML","triggerContainer","teleportContentToPortal","autoUpdate","computePosition","middleware","offset","flip","fallbackPlacements","shift","padding","then","x","y","Object","assign","contentElements","element","clonedElement","cloneNode","tagName","toLowerCase","contentDiv","shadowRoot","querySelector","classList","add","push","e","stopPropagation","render","html","handleTriggerClick","__decorateClass","property","type","Boolean","reflect","prototype","String","Number","query","queryAssignedElements","flatten","state","slot","customElement","SchmancyDropdownContent","TailwindElement","css","width","maxHeight","shadow","radius","classes","styles","classMap","styleMap"],"mappings":"yfAcaA,QAAAA,iBAAN,cAA+BC,EAAAA,YAAAA,CAAAA,CAA/B,aAAAC,CAAAC,MAAAA,GAAAC,SAAAA,EAKNC,KAAAC,KAAAA,GAMAD,KAAAE,UAYgB,eAMhBF,KAAAG,SAAW,EAKFH,KAAQI,OAA6B,KAM9CJ,KAAQK,oBAAsC,EAAC,CAE/C,mBAAAC,CACCR,MAAMQ,kBAAAA,EAGNN,KAAKO,cAGLC,YAAsBC,SAAU,OAAA,EAC9BC,KACAC,YAAgBX,KAAKC,MAAAA,CAASD,KAAKY,gBAAgBC,IACnDC,EAAAA,UAAUd,KAAKe,aAAAA,CAAAA,EAEfC,UAAU,IAAA,CACVhB,KAAKC,KAAAA,EAAO,CAAA,EAIdO,YAAyBC,SAAU,SAAA,EACjCC,KACAC,EAAAA,OAAOE,GAASb,KAAKC,MAAQY,EAAMI,MAAQ,QAARA,EACnCH,EAAAA,UAAUd,KAAKe,aAAAA,CAAAA,EAEfC,UAAU,KACVhB,KAAKC,KAAAA,EAAO,CAAA,CAEf,CAKQ,aAAAM,CAEP,IAAIW,EAAkBT,SAASU,eAAe,2BAAA,EAGzCD,IACJA,EAAkBT,SAASW,cAAc,KAAA,EACzCF,EAAgBG,GAAK,4BACrBH,EAAgBI,MAAMC,SAAW,QACjCL,EAAgBI,MAAME,OAAS,QAC/BN,EAAgBI,MAAMG,IAAM,IAC5BP,EAAgBI,MAAMI,KAAO,IAC7BR,EAAgBI,MAAMK,cAAgB,OACtClB,SAASmB,KAAKC,YAAYX,CAAAA,GAI3B,MAAMd,EAASK,SAASW,cAAc,KAAA,EACtChB,EAAO0B,UAAY,2BACnB1B,EAAOkB,MAAMC,SAAW,WACxBnB,EAAOkB,MAAMK,cAAgB,OAC7BvB,EAAOkB,MAAMS,QAAU,OACvBb,EAAgBW,YAAYzB,CAAAA,EAE5BJ,KAAKI,OAASA,CACf,CAKQ,gBAAgBS,GACvB,OAAOA,EAAMmB,eAAeC,KAAKC,GAAMA,IAAOlC,IAAAA,CAC/C,CAEA,uBACCA,KAAKmC,oBAAAA,EAGLnC,KAAKK,oBAAoB+B,QAAQC,GAAgBA,EAAaC,YAAAA,CAAAA,EAC9DtC,KAAKK,oBAAsB,CAAA,EAGvBL,KAAKI,SACRJ,KAAKI,OAAOmC,OAAAA,EACZvC,KAAKI,OAAS,MAGfN,MAAM0C,sBACP,CAKA,QAAAC,CACCzC,KAAKC,KAAAA,CAAQD,KAAKC,IACnB,CAEA,QAAQyC,EAAAA,CACP5C,MAAM6C,QAAQD,GAEVA,EAAaE,IAAI,MAAA,IAChB5C,KAAKC,KACRD,KAAK6C,mBAEL7C,KAAKmC,oBAAAA,EAGDnC,KAAKI,SACRJ,KAAKI,OAAOkB,MAAMS,QAAU,OAC5B/B,KAAKI,OAAO0C,UAAY,GAExB9C,KAAKK,oBAAoB+B,QAAQC,GAAgBA,EAAaC,YAAAA,CAAAA,EAC9DtC,KAAKK,oBAAsB,CAAA,IAI/B,CAKQ,iBAAAwC,CACF7C,KAAK+C,kBAAqB/C,KAAKI,SAGpCJ,KAAKI,OAAOkB,MAAMS,QAAU,QAG5B/B,KAAKgD,wBAAAA,EAGLhD,KAAKmC,kBAAoBc,aAAWjD,KAAK+C,iBAAkB/C,KAAKI,OAAQ,IAAA,CACvE8C,EAAAA,gBAAgBlD,KAAK+C,iBAAkB/C,KAAKI,OAAQ,CACnDF,UAAWF,KAAKE,UAChBiD,WAAY,CACXC,EAAAA,OAAOpD,KAAKG,QAAAA,EACZkD,OAAK,CACJC,mBAAoB,CAAC,YAAa,cAAA,CAAA,CAAA,EAEnCC,QAAM,CAAEC,QAAS,CAAA,CAAA,CAAA,CAAA,CAAA,EAEhBC,KAAK,CAAA,CAAGC,IAAGC,EAAAA,CAAAA,IAAAA,CAEbC,OAAOC,OAAO7D,KAAKI,OAAOkB,MAAO,CAChCI,KAAM,GAAGgC,CAAAA,KACTjC,IAAQkC,EAAI,EAAP,WAIT,CAKQ,yBAAAX,CACFhD,KAAKI,SAGVJ,KAAKK,oBAAoB+B,QAAQC,GAAgBA,EAAaC,YAAAA,CAAAA,EAC9DtC,KAAKK,oBAAsB,GAG3BL,KAAKI,OAAO0C,UAAY,GAGxB9C,KAAK8D,gBAAgB1B,QAAQ2B,GAAAA,CAE5B,MAAMC,EAAgBD,EAAQE,UAAAA,EAAU,EAGxC,GAAIF,EAAQG,QAAQC,YAAAA,IAAkB,4BAA6B,CAClE,MAAM9B,EAAe7B,EAAAA,UAAUwD,EAAe,YAAA,EAAchD,UAAU,IAAA,CAErE,MAAMoD,EAAaJ,EAAcK,YAAYC,cAAc,kBAAA,EACvDF,GACHA,EAAWG,UAAUC,IAAI,2BAAA,CAAA,CAAA,EAG3BxE,KAAKK,oBAAoBoE,KAAKpC,EAC/B,CAEArC,KAAKI,QAAQyB,YAAYmC,CAAAA,CAAAA,CAAAA,EAE3B,CAKQ,mBAAmBU,EAAAA,CAC1BA,EAAEC,gBAAAA,EACF3E,KAAKyC,OAAAA,CACN,CAEA,QAAAmC,CACC,OAAOC,EAAAA;AAAAA,2CACkC7E,KAAK8E,kBAAAA;AAAAA;AAAAA;AAAAA;AAAAA,sDAIM9E,KAAKC,IAAAA;AAAAA;AAAAA,mBAExC,IAAA,CACTD,KAAKC,OACRD,KAAKgD,wBAAAA,EACLhD,KAAK6C,gBAAAA,EAAAA,CAAAA;AAAAA;AAAAA;AAAAA,GAMX,CAAA,EA7OAkC,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMC,QAASC,QAAAA,EAAS,CAAA,CAAA,EAJxBxF,yBAKZyF,UAAA,OAAA,CAAA,EAMAL,EAAA,CADCC,WAAS,CAAEC,KAAMI,UAVN1F,yBAWZyF,UAAA,YAAA,GAkBAL,EAAA,CADCC,WAAS,CAAEC,KAAMK,MAAAA,CAAAA,CAAAA,EA5BN3F,yBA6BZyF,UAAA,WAAA,CAAA,EAE6BL,EAAA,CAA5BQ,EAAAA,MAAM,oBAAA,CAAA,EA/BK5F,yBA+BiByF,UAAA,mBAAA,CAAA,EACSL,EAAA,CAArCQ,EAAAA,MAAM,6BAAA,CAAA,EAhCK5F,yBAgC0ByF,UAAA,mBAAA,CAAA,EACIL,EAAA,CAAzCS,wBAAsB,CAAEC,QAAAA,EAAS,CAAA,CAAA,EAjCtB9F,yBAiC8ByF,UAAA,kBAAA,CAAA,EACzBL,EAAA,CAAhBW,EAAAA,MAAAA,CAAAA,EAlCW/F,yBAkCKyF,UAAA,SAAA,CAAA,EAGjBL,EAAA,CADCS,EAAAA,sBAAsB,CAAEG,KAAM,UAAWF,QAAAA,MApC9B9F,yBAqCZyF,UAAA,kBAAA,GArCYzF,QAAAA,iBAANoF,EAAA,CADNa,EAAAA,cAAc,mBAAA,CAAA,EACFjG,0NCHAkG,QAAAA,wBAAN,cAAsCC,EAAAA,gBAAgBC,EAAAA;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;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAAtD,aAAAlG,CAAAC,MAAAA,GAAAC,SAAAA,EA+CNC,KAAAgG,MAAgB,OAMhBhG,KAAAiG,UAAoB,OAMpBjG,KAAAkG,OAAAA,GAMAlG,KAAAmG,OAA+C,IAAA,CAE/C,QAAAvB,CACC,MAAMwB,EAAU,CACf,4BAAA,GACA,gBAAA,GACA,cAAA,CAAgBpG,KAAKkG,OACrB,eAAgBlG,KAAKmG,SAAW,OAChC,aAAcnG,KAAKmG,SAAW,KAC9B,aAAcnG,KAAKmG,SAAW,KAC9B,aAAcnG,KAAKmG,SAAW,KAC9B,eAAgBnG,KAAKmG,SAAW,MAAXA,EAGhBE,EAAS,CACdL,MAAOhG,KAAKgG,MACZC,UAAWjG,KAAKiG,SAAAA,EAGjB,OAAOpB,EAAAA;AAAAA,gBACO7E,KAAKsG,SAASF,CAAAA,CAAAA,UAAkBpG,KAAKuG,SAASF,CAAAA,CAAAA;AAAAA;AAAAA;AAAAA,GAI7D,CAAA,EA1CAtB,EAAA,CADCC,WAAS,CAAEC,KAAMI,MAAAA,CAAAA,CAAAA,EA9CNQ,gCA+CZT,UAAA,QAAA,CAAA,EAMAL,EAAA,CADCC,WAAS,CAAEC,KAAMI,MAAAA,CAAAA,CAAAA,EApDNQ,gCAqDZT,UAAA,YAAA,CAAA,EAMAL,EAAA,CADCC,WAAS,CAAEC,KAAMC,OAAAA,CAAAA,CAAAA,EA1DNW,gCA2DZT,UAAA,SAAA,CAAA,EAMAL,EAAA,CADCC,WAAS,CAAEC,KAAMI,UAhENQ,gCAiEZT,UAAA,SAAA,CAAA,EAjEYS,QAAAA,wBAANd,EAAA,CADNa,EAAAA,cAAc,2BAAA,CAAA,EACFC"}
1
+ {"version":3,"file":"dropdown-content-CngZN3vv.cjs","sources":["../src/dropdown/dropdown-component.ts","../src/dropdown/dropdown-content.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { filter, fromEvent, takeUntil, Subscription } from 'rxjs'\n\n/**\n * A dropdown component that displays content when triggered.\n *\n * @element schmancy-dropdown\n * @slot trigger - The element that triggers the dropdown\n * @slot - Default slot for the dropdown content\n */\n@customElement('schmancy-dropdown')\nexport class SchmancyDropdown extends $LitElement() {\n\t/**\n\t * Whether the dropdown is currently open\n\t */\n\t@property({ type: Boolean, reflect: true })\n\topen = false\n\n\t/**\n\t * Placement of the dropdown relative to the trigger\n\t */\n\t@property({ type: String })\n\tplacement:\n\t\t| 'top'\n\t\t| 'top-start'\n\t\t| 'top-end'\n\t\t| 'right'\n\t\t| 'right-start'\n\t\t| 'right-end'\n\t\t| 'bottom'\n\t\t| 'bottom-start'\n\t\t| 'bottom-end'\n\t\t| 'left'\n\t\t| 'left-start'\n\t\t| 'left-end' = 'bottom-start'\n\n\t/**\n\t * Offset distance in pixels\n\t */\n\t@property({ type: Number })\n\tdistance = 8\n\n\t@query('.trigger-container') triggerContainer!: HTMLElement\n\t@query('.dropdown-content-container') contentContainer!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) contentElements!: HTMLElement[]\n\t@state() private portal: HTMLElement | null = null\n\n\t@queryAssignedElements({ slot: 'trigger', flatten: true })\n\ttriggerElements!: Array<HTMLElement>\n\n\tprivate cleanupPositioner?: () => void\n\tprivate portalSubscriptions: Subscription[] = []\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Create portal container for teleporting content to document body\n\t\tthis.setupPortal()\n\n\t\t// Listen for document clicks to close dropdown when clicking outside\n\t\tfromEvent<MouseEvent>(document, 'click')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && !this.isEventFromSelf(event)),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\n\t\t// Listen for escape key to close dropdown\n\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && event.key === 'Escape'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up the portal element for teleporting content\n\t */\n\tprivate setupPortal() {\n\t\t// Check if portal container exists\n\t\tlet portalContainer = document.getElementById('schmancy-portal-container')\n\n\t\t// Create portal container if it doesn't exist\n\t\tif (!portalContainer) {\n\t\t\tportalContainer = document.createElement('div')\n\t\t\tportalContainer.id = 'schmancy-portal-container'\n\t\t\tportalContainer.style.position = 'fixed'\n\t\t\tportalContainer.style.zIndex = '10000'\n\t\t\tportalContainer.style.top = '0'\n\t\t\tportalContainer.style.left = '0'\n\t\t\tportalContainer.style.pointerEvents = 'none'\n\t\t\tdocument.body.appendChild(portalContainer)\n\t\t}\n\n\t\t// Create portal for this specific dropdown\n\t\tconst portal = document.createElement('div')\n\t\tportal.className = 'schmancy-dropdown-portal'\n\t\tportal.style.position = 'absolute'\n\t\tportal.style.pointerEvents = 'auto'\n\t\tportal.style.display = 'none'\n\t\tportalContainer.appendChild(portal)\n\n\t\tthis.portal = portal\n\t}\n\n\t/**\n\t * Check if an event originated from within this component\n\t */\n\tprivate isEventFromSelf(event: Event): boolean {\n\t\treturn event.composedPath().some(el => el === this)\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Clean up portal subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Remove portal when component is disconnected\n\t\tif (this.portal) {\n\t\t\tthis.portal.remove()\n\t\t\tthis.portal = null\n\t\t}\n\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Toggle the dropdown open state\n\t */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\tupdated(changedProps: Map<string, any>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tthis.setupPositioner()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\n\t\t\t\t// Hide portal when dropdown is closed\n\t\t\t\tif (this.portal) {\n\t\t\t\t\tthis.portal.style.display = 'none'\n\t\t\t\t\tthis.portal.innerHTML = ''\n\t\t\t\t\t// Clean up subscriptions when content is cleared\n\t\t\t\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\t\t\t\tthis.portalSubscriptions = []\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Setup floating UI positioning with teleportation\n\t */\n\tprivate setupPositioner() {\n\t\tif (!this.triggerContainer || !this.portal) return\n\n\t\t// Show the portal\n\t\tthis.portal.style.display = 'block'\n\n\t\t// Move content to portal\n\t\tthis.teleportContentToPortal()\n\n\t\t// Setup positioning\n\t\tthis.cleanupPositioner = autoUpdate(this.triggerContainer, this.portal, () => {\n\t\t\tcomputePosition(this.triggerContainer, this.portal, {\n\t\t\t\tplacement: this.placement,\n\t\t\t\tmiddleware: [\n\t\t\t\t\toffset(this.distance),\n\t\t\t\t\tflip({\n\t\t\t\t\t\tfallbackPlacements: ['top-start', 'bottom-start'],\n\t\t\t\t\t}),\n\t\t\t\t\tshift({ padding: 0 }),\n\t\t\t\t],\n\t\t\t}).then(({ x, y }) => {\n\t\t\t\t// Update portal position\n\t\t\t\tObject.assign(this.portal.style, {\n\t\t\t\t\tleft: `${x}px`,\n\t\t\t\t\ttop: `${y - 8}px`,\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Move slotted content to the portal\n\t */\n\tprivate teleportContentToPortal() {\n\t\tif (!this.portal) return\n\n\t\t// Clean up existing subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Clear existing content\n\t\tthis.portal.innerHTML = ''\n\n\t\t// Clone and move slotted content to portal\n\t\tthis.contentElements.forEach(element => {\n\t\t\t// Get computed styles to ensure portal content matches original styling\n\t\t\tconst clonedElement = element.cloneNode(true) as HTMLElement\n\n\t\t\t// Ensure dropdown-content elements maintain their styles when teleported\n\t\t\tif (element.tagName.toLowerCase() === 'schmancy-dropdown-content') {\n\t\t\t\tconst subscription = fromEvent(clonedElement, 'slotchange').subscribe(() => {\n\t\t\t\t\t// Propagate any slot changes to class changes on children\n\t\t\t\t\tconst contentDiv = clonedElement.shadowRoot?.querySelector('[part=\"content\"]')\n\t\t\t\t\tif (contentDiv) {\n\t\t\t\t\t\tcontentDiv.classList.add('schmancy-dropdown-content')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.portalSubscriptions.push(subscription)\n\t\t\t}\n\n\t\t\tthis.portal?.appendChild(clonedElement)\n\t\t})\n\t}\n\n\t/**\n\t * Handle trigger click to toggle dropdown\n\t */\n\tprivate handleTriggerClick(e: Event) {\n\t\te.stopPropagation()\n\t\tthis.toggle()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"trigger-container\" @click=${this.handleTriggerClick}>\n\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t</div>\n\n\t\t\t<div class=\"dropdown-content-container\" ?hidden=${!this.open}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.teleportContentToPortal()\n\t\t\t\t\t\t\tthis.setupPositioner()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown': SchmancyDropdown\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * Content container for the schmancy-dropdown component.\n *\n * @element schmancy-dropdown-content\n * @slot - Default slot for dropdown content\n */\n@customElement('schmancy-dropdown-content')\nexport class SchmancyDropdownContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tz-index: 1000;\n\t\tmin-width: 10rem;\n\t\tmargin: 0;\n\t\ttext-align: left;\n\t\tlist-style: none;\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tbackground-clip: padding-box;\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n\n\t:host([hidden]) {\n\t\tdisplay: none;\n\t}\n\n\t@keyframes dropdownAnimation {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.95);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t}\n\n\t/* Apply styles to content both in the component and when teleported to the portal */\n\t.schmancy-dropdown-content {\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n`) {\n\t/**\n\t * Width of the dropdown content\n\t */\n\t@property({ type: String })\n\twidth: string = 'auto'\n\n\t/**\n\t * Maximum height of the dropdown content\n\t */\n\t@property({ type: String })\n\tmaxHeight: string = '80vh'\n\n\t/**\n\t * Whether to render with a shadow\n\t */\n\t@property({ type: Boolean })\n\tshadow: boolean = true\n\n\t/**\n\t * Border radius style\n\t */\n\t@property({ type: String })\n\tradius: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md'\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'schmancy-dropdown-content': true,\n\t\t\t'overflow-auto': true,\n\t\t\t'shadow-none': !this.shadow,\n\t\t\t'rounded-none': this.radius === 'none',\n\t\t\t'rounded-sm': this.radius === 'sm',\n\t\t\t'rounded-md': this.radius === 'md',\n\t\t\t'rounded-lg': this.radius === 'lg',\n\t\t\t'rounded-full': this.radius === 'full',\n\t\t}\n\n\t\tconst styles = {\n\t\t\twidth: this.width,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=${this.classMap(classes)} style=${this.styleMap(styles)} part=\"content\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown-content': SchmancyDropdownContent\n\t}\n}\n"],"names":["SchmancyDropdown","$LitElement","constructor","super","arguments","this","open","placement","distance","portal","portalSubscriptions","connectedCallback","setupPortal","fromEvent","document","pipe","filter","isEventFromSelf","event","takeUntil","disconnecting","subscribe","key","portalContainer","getElementById","createElement","id","style","position","zIndex","top","left","pointerEvents","body","appendChild","className","display","composedPath","some","el","cleanupPositioner","forEach","subscription","unsubscribe","remove","disconnectedCallback","toggle","changedProps","updated","has","setupPositioner","innerHTML","triggerContainer","teleportContentToPortal","autoUpdate","computePosition","middleware","offset","flip","fallbackPlacements","shift","padding","then","x","y","Object","assign","contentElements","element","clonedElement","cloneNode","tagName","toLowerCase","contentDiv","shadowRoot","querySelector","classList","add","push","e","stopPropagation","render","html","handleTriggerClick","__decorateClass","property","type","Boolean","reflect","prototype","String","Number","query","queryAssignedElements","flatten","state","slot","customElement","SchmancyDropdownContent","TailwindElement","css","width","maxHeight","shadow","radius","classes","styles","classMap","styleMap"],"mappings":"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"}
@@ -4,8 +4,8 @@ import "rxjs/operators";
4
4
  import "lit/directives/class-map.js";
5
5
  import "lit/directives/style-map.js";
6
6
  import { property as l, query as y, queryAssignedElements as g, state as C, customElement as f } from "lit/decorators.js";
7
- import { T as E } from "./tailwind.mixin-Ddt05Frc.js";
8
- import { $ as S } from "./litElement.mixin-Wcu4yIIs.js";
7
+ import { T as E } from "./tailwind.mixin-Bp_PR6yc.js";
8
+ import { $ as S } from "./litElement.mixin-DHZXtvYq.js";
9
9
  import { html as b, css as T } from "lit";
10
10
  var $ = Object.defineProperty, O = Object.getOwnPropertyDescriptor, i = (t, o, r, s) => {
11
11
  for (var a, e = s > 1 ? void 0 : s ? O(o, r) : o, p = t.length - 1; p >= 0; p--) (a = t[p]) && (e = (s ? a(o, r, e) : a(e)) || e);
@@ -144,4 +144,4 @@ export {
144
144
  n as S,
145
145
  c as a
146
146
  };
147
- //# sourceMappingURL=dropdown-content-DzhOtilY.js.map
147
+ //# sourceMappingURL=dropdown-content-DCn-g0-f.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-content-DzhOtilY.js","sources":["../src/dropdown/dropdown-component.ts","../src/dropdown/dropdown-content.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { filter, fromEvent, takeUntil, Subscription } from 'rxjs'\n\n/**\n * A dropdown component that displays content when triggered.\n *\n * @element schmancy-dropdown\n * @slot trigger - The element that triggers the dropdown\n * @slot - Default slot for the dropdown content\n */\n@customElement('schmancy-dropdown')\nexport class SchmancyDropdown extends $LitElement() {\n\t/**\n\t * Whether the dropdown is currently open\n\t */\n\t@property({ type: Boolean, reflect: true })\n\topen = false\n\n\t/**\n\t * Placement of the dropdown relative to the trigger\n\t */\n\t@property({ type: String })\n\tplacement:\n\t\t| 'top'\n\t\t| 'top-start'\n\t\t| 'top-end'\n\t\t| 'right'\n\t\t| 'right-start'\n\t\t| 'right-end'\n\t\t| 'bottom'\n\t\t| 'bottom-start'\n\t\t| 'bottom-end'\n\t\t| 'left'\n\t\t| 'left-start'\n\t\t| 'left-end' = 'bottom-start'\n\n\t/**\n\t * Offset distance in pixels\n\t */\n\t@property({ type: Number })\n\tdistance = 8\n\n\t@query('.trigger-container') triggerContainer!: HTMLElement\n\t@query('.dropdown-content-container') contentContainer!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) contentElements!: HTMLElement[]\n\t@state() private portal: HTMLElement | null = null\n\n\t@queryAssignedElements({ slot: 'trigger', flatten: true })\n\ttriggerElements!: Array<HTMLElement>\n\n\tprivate cleanupPositioner?: () => void\n\tprivate portalSubscriptions: Subscription[] = []\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Create portal container for teleporting content to document body\n\t\tthis.setupPortal()\n\n\t\t// Listen for document clicks to close dropdown when clicking outside\n\t\tfromEvent<MouseEvent>(document, 'click')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && !this.isEventFromSelf(event)),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\n\t\t// Listen for escape key to close dropdown\n\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && event.key === 'Escape'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up the portal element for teleporting content\n\t */\n\tprivate setupPortal() {\n\t\t// Check if portal container exists\n\t\tlet portalContainer = document.getElementById('schmancy-portal-container')\n\n\t\t// Create portal container if it doesn't exist\n\t\tif (!portalContainer) {\n\t\t\tportalContainer = document.createElement('div')\n\t\t\tportalContainer.id = 'schmancy-portal-container'\n\t\t\tportalContainer.style.position = 'fixed'\n\t\t\tportalContainer.style.zIndex = '10000'\n\t\t\tportalContainer.style.top = '0'\n\t\t\tportalContainer.style.left = '0'\n\t\t\tportalContainer.style.pointerEvents = 'none'\n\t\t\tdocument.body.appendChild(portalContainer)\n\t\t}\n\n\t\t// Create portal for this specific dropdown\n\t\tconst portal = document.createElement('div')\n\t\tportal.className = 'schmancy-dropdown-portal'\n\t\tportal.style.position = 'absolute'\n\t\tportal.style.pointerEvents = 'auto'\n\t\tportal.style.display = 'none'\n\t\tportalContainer.appendChild(portal)\n\n\t\tthis.portal = portal\n\t}\n\n\t/**\n\t * Check if an event originated from within this component\n\t */\n\tprivate isEventFromSelf(event: Event): boolean {\n\t\treturn event.composedPath().some(el => el === this)\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Clean up portal subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Remove portal when component is disconnected\n\t\tif (this.portal) {\n\t\t\tthis.portal.remove()\n\t\t\tthis.portal = null\n\t\t}\n\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Toggle the dropdown open state\n\t */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\tupdated(changedProps: Map<string, any>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tthis.setupPositioner()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\n\t\t\t\t// Hide portal when dropdown is closed\n\t\t\t\tif (this.portal) {\n\t\t\t\t\tthis.portal.style.display = 'none'\n\t\t\t\t\tthis.portal.innerHTML = ''\n\t\t\t\t\t// Clean up subscriptions when content is cleared\n\t\t\t\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\t\t\t\tthis.portalSubscriptions = []\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Setup floating UI positioning with teleportation\n\t */\n\tprivate setupPositioner() {\n\t\tif (!this.triggerContainer || !this.portal) return\n\n\t\t// Show the portal\n\t\tthis.portal.style.display = 'block'\n\n\t\t// Move content to portal\n\t\tthis.teleportContentToPortal()\n\n\t\t// Setup positioning\n\t\tthis.cleanupPositioner = autoUpdate(this.triggerContainer, this.portal, () => {\n\t\t\tcomputePosition(this.triggerContainer, this.portal, {\n\t\t\t\tplacement: this.placement,\n\t\t\t\tmiddleware: [\n\t\t\t\t\toffset(this.distance),\n\t\t\t\t\tflip({\n\t\t\t\t\t\tfallbackPlacements: ['top-start', 'bottom-start'],\n\t\t\t\t\t}),\n\t\t\t\t\tshift({ padding: 0 }),\n\t\t\t\t],\n\t\t\t}).then(({ x, y }) => {\n\t\t\t\t// Update portal position\n\t\t\t\tObject.assign(this.portal.style, {\n\t\t\t\t\tleft: `${x}px`,\n\t\t\t\t\ttop: `${y - 8}px`,\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Move slotted content to the portal\n\t */\n\tprivate teleportContentToPortal() {\n\t\tif (!this.portal) return\n\n\t\t// Clean up existing subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Clear existing content\n\t\tthis.portal.innerHTML = ''\n\n\t\t// Clone and move slotted content to portal\n\t\tthis.contentElements.forEach(element => {\n\t\t\t// Get computed styles to ensure portal content matches original styling\n\t\t\tconst clonedElement = element.cloneNode(true) as HTMLElement\n\n\t\t\t// Ensure dropdown-content elements maintain their styles when teleported\n\t\t\tif (element.tagName.toLowerCase() === 'schmancy-dropdown-content') {\n\t\t\t\tconst subscription = fromEvent(clonedElement, 'slotchange').subscribe(() => {\n\t\t\t\t\t// Propagate any slot changes to class changes on children\n\t\t\t\t\tconst contentDiv = clonedElement.shadowRoot?.querySelector('[part=\"content\"]')\n\t\t\t\t\tif (contentDiv) {\n\t\t\t\t\t\tcontentDiv.classList.add('schmancy-dropdown-content')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.portalSubscriptions.push(subscription)\n\t\t\t}\n\n\t\t\tthis.portal?.appendChild(clonedElement)\n\t\t})\n\t}\n\n\t/**\n\t * Handle trigger click to toggle dropdown\n\t */\n\tprivate handleTriggerClick(e: Event) {\n\t\te.stopPropagation()\n\t\tthis.toggle()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"trigger-container\" @click=${this.handleTriggerClick}>\n\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t</div>\n\n\t\t\t<div class=\"dropdown-content-container\" ?hidden=${!this.open}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.teleportContentToPortal()\n\t\t\t\t\t\t\tthis.setupPositioner()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown': SchmancyDropdown\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * Content container for the schmancy-dropdown component.\n *\n * @element schmancy-dropdown-content\n * @slot - Default slot for dropdown content\n */\n@customElement('schmancy-dropdown-content')\nexport class SchmancyDropdownContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tz-index: 1000;\n\t\tmin-width: 10rem;\n\t\tmargin: 0;\n\t\ttext-align: left;\n\t\tlist-style: none;\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tbackground-clip: padding-box;\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n\n\t:host([hidden]) {\n\t\tdisplay: none;\n\t}\n\n\t@keyframes dropdownAnimation {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.95);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t}\n\n\t/* Apply styles to content both in the component and when teleported to the portal */\n\t.schmancy-dropdown-content {\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n`) {\n\t/**\n\t * Width of the dropdown content\n\t */\n\t@property({ type: String })\n\twidth: string = 'auto'\n\n\t/**\n\t * Maximum height of the dropdown content\n\t */\n\t@property({ type: String })\n\tmaxHeight: string = '80vh'\n\n\t/**\n\t * Whether to render with a shadow\n\t */\n\t@property({ type: Boolean })\n\tshadow: boolean = true\n\n\t/**\n\t * Border radius style\n\t */\n\t@property({ type: String })\n\tradius: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md'\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'schmancy-dropdown-content': true,\n\t\t\t'overflow-auto': true,\n\t\t\t'shadow-none': !this.shadow,\n\t\t\t'rounded-none': this.radius === 'none',\n\t\t\t'rounded-sm': this.radius === 'sm',\n\t\t\t'rounded-md': this.radius === 'md',\n\t\t\t'rounded-lg': this.radius === 'lg',\n\t\t\t'rounded-full': this.radius === 'full',\n\t\t}\n\n\t\tconst styles = {\n\t\t\twidth: this.width,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=${this.classMap(classes)} style=${this.styleMap(styles)} part=\"content\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown-content': SchmancyDropdownContent\n\t}\n}\n"],"names":["SchmancyDropdown","$LitElement","constructor","super","arguments","this","open","placement","distance","portal","portalSubscriptions","connectedCallback","setupPortal","fromEvent","document","pipe","filter","isEventFromSelf","event","takeUntil","disconnecting","subscribe","key","portalContainer","getElementById","createElement","id","style","position","zIndex","top","left","pointerEvents","body","appendChild","className","display","composedPath","some","el","disconnectedCallback","cleanupPositioner","forEach","subscription","unsubscribe","remove","toggle","changedProps","updated","has","setupPositioner","innerHTML","triggerContainer","teleportContentToPortal","autoUpdate","computePosition","middleware","offset","flip","fallbackPlacements","shift","padding","then","x","y","Object","assign","contentElements","element","clonedElement","cloneNode","tagName","toLowerCase","contentDiv","shadowRoot","querySelector","classList","add","push","e","stopPropagation","render","html","handleTriggerClick","__decorateClass","property","type","Boolean","reflect","prototype","String","Number","query","queryAssignedElements","flatten","state","slot","customElement","SchmancyDropdownContent","TailwindElement","css","width","maxHeight","shadow","radius","classes","styles","classMap","styleMap"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown-content-DCn-g0-f.js","sources":["../src/dropdown/dropdown-component.ts","../src/dropdown/dropdown-content.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { filter, fromEvent, takeUntil, Subscription } from 'rxjs'\n\n/**\n * A dropdown component that displays content when triggered.\n *\n * @element schmancy-dropdown\n * @slot trigger - The element that triggers the dropdown\n * @slot - Default slot for the dropdown content\n */\n@customElement('schmancy-dropdown')\nexport class SchmancyDropdown extends $LitElement() {\n\t/**\n\t * Whether the dropdown is currently open\n\t */\n\t@property({ type: Boolean, reflect: true })\n\topen = false\n\n\t/**\n\t * Placement of the dropdown relative to the trigger\n\t */\n\t@property({ type: String })\n\tplacement:\n\t\t| 'top'\n\t\t| 'top-start'\n\t\t| 'top-end'\n\t\t| 'right'\n\t\t| 'right-start'\n\t\t| 'right-end'\n\t\t| 'bottom'\n\t\t| 'bottom-start'\n\t\t| 'bottom-end'\n\t\t| 'left'\n\t\t| 'left-start'\n\t\t| 'left-end' = 'bottom-start'\n\n\t/**\n\t * Offset distance in pixels\n\t */\n\t@property({ type: Number })\n\tdistance = 8\n\n\t@query('.trigger-container') triggerContainer!: HTMLElement\n\t@query('.dropdown-content-container') contentContainer!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) contentElements!: HTMLElement[]\n\t@state() private portal: HTMLElement | null = null\n\n\t@queryAssignedElements({ slot: 'trigger', flatten: true })\n\ttriggerElements!: Array<HTMLElement>\n\n\tprivate cleanupPositioner?: () => void\n\tprivate portalSubscriptions: Subscription[] = []\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Create portal container for teleporting content to document body\n\t\tthis.setupPortal()\n\n\t\t// Listen for document clicks to close dropdown when clicking outside\n\t\tfromEvent<MouseEvent>(document, 'click')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && !this.isEventFromSelf(event)),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\n\t\t// Listen for escape key to close dropdown\n\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && event.key === 'Escape'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up the portal element for teleporting content\n\t */\n\tprivate setupPortal() {\n\t\t// Check if portal container exists\n\t\tlet portalContainer = document.getElementById('schmancy-portal-container')\n\n\t\t// Create portal container if it doesn't exist\n\t\tif (!portalContainer) {\n\t\t\tportalContainer = document.createElement('div')\n\t\t\tportalContainer.id = 'schmancy-portal-container'\n\t\t\tportalContainer.style.position = 'fixed'\n\t\t\tportalContainer.style.zIndex = '10000'\n\t\t\tportalContainer.style.top = '0'\n\t\t\tportalContainer.style.left = '0'\n\t\t\tportalContainer.style.pointerEvents = 'none'\n\t\t\tdocument.body.appendChild(portalContainer)\n\t\t}\n\n\t\t// Create portal for this specific dropdown\n\t\tconst portal = document.createElement('div')\n\t\tportal.className = 'schmancy-dropdown-portal'\n\t\tportal.style.position = 'absolute'\n\t\tportal.style.pointerEvents = 'auto'\n\t\tportal.style.display = 'none'\n\t\tportalContainer.appendChild(portal)\n\n\t\tthis.portal = portal\n\t}\n\n\t/**\n\t * Check if an event originated from within this component\n\t */\n\tprivate isEventFromSelf(event: Event): boolean {\n\t\treturn event.composedPath().some(el => el === this)\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Clean up portal subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Remove portal when component is disconnected\n\t\tif (this.portal) {\n\t\t\tthis.portal.remove()\n\t\t\tthis.portal = null\n\t\t}\n\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Toggle the dropdown open state\n\t */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\tupdated(changedProps: Map<string, any>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tthis.setupPositioner()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\n\t\t\t\t// Hide portal when dropdown is closed\n\t\t\t\tif (this.portal) {\n\t\t\t\t\tthis.portal.style.display = 'none'\n\t\t\t\t\tthis.portal.innerHTML = ''\n\t\t\t\t\t// Clean up subscriptions when content is cleared\n\t\t\t\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\t\t\t\tthis.portalSubscriptions = []\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Setup floating UI positioning with teleportation\n\t */\n\tprivate setupPositioner() {\n\t\tif (!this.triggerContainer || !this.portal) return\n\n\t\t// Show the portal\n\t\tthis.portal.style.display = 'block'\n\n\t\t// Move content to portal\n\t\tthis.teleportContentToPortal()\n\n\t\t// Setup positioning\n\t\tthis.cleanupPositioner = autoUpdate(this.triggerContainer, this.portal, () => {\n\t\t\tcomputePosition(this.triggerContainer, this.portal, {\n\t\t\t\tplacement: this.placement,\n\t\t\t\tmiddleware: [\n\t\t\t\t\toffset(this.distance),\n\t\t\t\t\tflip({\n\t\t\t\t\t\tfallbackPlacements: ['top-start', 'bottom-start'],\n\t\t\t\t\t}),\n\t\t\t\t\tshift({ padding: 0 }),\n\t\t\t\t],\n\t\t\t}).then(({ x, y }) => {\n\t\t\t\t// Update portal position\n\t\t\t\tObject.assign(this.portal.style, {\n\t\t\t\t\tleft: `${x}px`,\n\t\t\t\t\ttop: `${y - 8}px`,\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Move slotted content to the portal\n\t */\n\tprivate teleportContentToPortal() {\n\t\tif (!this.portal) return\n\n\t\t// Clean up existing subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Clear existing content\n\t\tthis.portal.innerHTML = ''\n\n\t\t// Clone and move slotted content to portal\n\t\tthis.contentElements.forEach(element => {\n\t\t\t// Get computed styles to ensure portal content matches original styling\n\t\t\tconst clonedElement = element.cloneNode(true) as HTMLElement\n\n\t\t\t// Ensure dropdown-content elements maintain their styles when teleported\n\t\t\tif (element.tagName.toLowerCase() === 'schmancy-dropdown-content') {\n\t\t\t\tconst subscription = fromEvent(clonedElement, 'slotchange').subscribe(() => {\n\t\t\t\t\t// Propagate any slot changes to class changes on children\n\t\t\t\t\tconst contentDiv = clonedElement.shadowRoot?.querySelector('[part=\"content\"]')\n\t\t\t\t\tif (contentDiv) {\n\t\t\t\t\t\tcontentDiv.classList.add('schmancy-dropdown-content')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.portalSubscriptions.push(subscription)\n\t\t\t}\n\n\t\t\tthis.portal?.appendChild(clonedElement)\n\t\t})\n\t}\n\n\t/**\n\t * Handle trigger click to toggle dropdown\n\t */\n\tprivate handleTriggerClick(e: Event) {\n\t\te.stopPropagation()\n\t\tthis.toggle()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"trigger-container\" @click=${this.handleTriggerClick}>\n\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t</div>\n\n\t\t\t<div class=\"dropdown-content-container\" ?hidden=${!this.open}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.teleportContentToPortal()\n\t\t\t\t\t\t\tthis.setupPositioner()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown': SchmancyDropdown\n\t}\n}\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * Content container for the schmancy-dropdown component.\n *\n * @element schmancy-dropdown-content\n * @slot - Default slot for dropdown content\n */\n@customElement('schmancy-dropdown-content')\nexport class SchmancyDropdownContent extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tz-index: 1000;\n\t\tmin-width: 10rem;\n\t\tmargin: 0;\n\t\ttext-align: left;\n\t\tlist-style: none;\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tbackground-clip: padding-box;\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n\n\t:host([hidden]) {\n\t\tdisplay: none;\n\t}\n\n\t@keyframes dropdownAnimation {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.95);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t}\n\n\t/* Apply styles to content both in the component and when teleported to the portal */\n\t.schmancy-dropdown-content {\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n`) {\n\t/**\n\t * Width of the dropdown content\n\t */\n\t@property({ type: String })\n\twidth: string = 'auto'\n\n\t/**\n\t * Maximum height of the dropdown content\n\t */\n\t@property({ type: String })\n\tmaxHeight: string = '80vh'\n\n\t/**\n\t * Whether to render with a shadow\n\t */\n\t@property({ type: Boolean })\n\tshadow: boolean = true\n\n\t/**\n\t * Border radius style\n\t */\n\t@property({ type: String })\n\tradius: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md'\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'schmancy-dropdown-content': true,\n\t\t\t'overflow-auto': true,\n\t\t\t'shadow-none': !this.shadow,\n\t\t\t'rounded-none': this.radius === 'none',\n\t\t\t'rounded-sm': this.radius === 'sm',\n\t\t\t'rounded-md': this.radius === 'md',\n\t\t\t'rounded-lg': this.radius === 'lg',\n\t\t\t'rounded-full': this.radius === 'full',\n\t\t}\n\n\t\tconst styles = {\n\t\t\twidth: this.width,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=${this.classMap(classes)} style=${this.styleMap(styles)} part=\"content\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown-content': SchmancyDropdownContent\n\t}\n}\n"],"names":["SchmancyDropdown","$LitElement","constructor","super","arguments","this","open","placement","distance","portal","portalSubscriptions","connectedCallback","setupPortal","fromEvent","document","pipe","filter","isEventFromSelf","event","takeUntil","disconnecting","subscribe","key","portalContainer","getElementById","createElement","id","style","position","zIndex","top","left","pointerEvents","body","appendChild","className","display","composedPath","some","el","disconnectedCallback","cleanupPositioner","forEach","subscription","unsubscribe","remove","toggle","changedProps","updated","has","setupPositioner","innerHTML","triggerContainer","teleportContentToPortal","autoUpdate","computePosition","middleware","offset","flip","fallbackPlacements","shift","padding","then","x","y","Object","assign","contentElements","element","clonedElement","cloneNode","tagName","toLowerCase","contentDiv","shadowRoot","querySelector","classList","add","push","e","stopPropagation","render","html","handleTriggerClick","__decorateClass","property","type","Boolean","reflect","prototype","String","Number","query","queryAssignedElements","flatten","state","slot","customElement","SchmancyDropdownContent","TailwindElement","css","width","maxHeight","shadow","radius","classes","styles","classMap","styleMap"],"mappings":"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"}