@mhmo91/schmancy 0.2.115 → 0.2.116

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 (242) hide show
  1. package/dist/{animated-text-BJ8e_TdT.cjs → animated-text-DmtCT-2q.cjs} +2 -2
  2. package/dist/{animated-text-BJ8e_TdT.cjs.map → animated-text-DmtCT-2q.cjs.map} +1 -1
  3. package/dist/{animated-text-C-LJVhLw.js → animated-text-DrH4Miy7.js} +3 -3
  4. package/dist/{animated-text-C-LJVhLw.js.map → animated-text-DrH4Miy7.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-Bf5USqvC.cjs → area.component-Bg1zJKiZ.cjs} +2 -2
  9. package/dist/{area.component-Bf5USqvC.cjs.map → area.component-Bg1zJKiZ.cjs.map} +1 -1
  10. package/dist/{area.component-6ebQ-3Kb.js → area.component-CmsssAq_.js} +3 -3
  11. package/dist/{area.component-6ebQ-3Kb.js.map → area.component-CmsssAq_.js.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-CM_YM2UF.cjs → autocomplete-BFj0YUYW.cjs} +2 -2
  14. package/dist/{autocomplete-CM_YM2UF.cjs.map → autocomplete-BFj0YUYW.cjs.map} +1 -1
  15. package/dist/{autocomplete-NTEOksdT.js → autocomplete-BsrWuTsP.js} +3 -3
  16. package/dist/{autocomplete-NTEOksdT.js.map → autocomplete-BsrWuTsP.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/busy.cjs +1 -1
  20. package/dist/busy.js +1 -1
  21. package/dist/button.cjs +1 -1
  22. package/dist/button.js +1 -1
  23. package/dist/card.cjs +1 -1
  24. package/dist/card.js +1 -1
  25. package/dist/{checkbox-jcFvgv_5.cjs → checkbox-Cb7nmI6P.cjs} +2 -2
  26. package/dist/{checkbox-jcFvgv_5.cjs.map → checkbox-Cb7nmI6P.cjs.map} +1 -1
  27. package/dist/{checkbox-1tBSHNXu.js → checkbox-DUP_qnel.js} +2 -2
  28. package/dist/{checkbox-1tBSHNXu.js.map → checkbox-DUP_qnel.js.map} +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.js +1 -1
  31. package/dist/{chips-CdcS0QXD.js → chips-0hsW-Rxx.js} +3 -3
  32. package/dist/{chips-CdcS0QXD.js.map → chips-0hsW-Rxx.js.map} +1 -1
  33. package/dist/{chips-K7p1j3Uk.cjs → chips-CiesiXpI.cjs} +2 -2
  34. package/dist/{chips-K7p1j3Uk.cjs.map → chips-CiesiXpI.cjs.map} +1 -1
  35. package/dist/chips.cjs +1 -1
  36. package/dist/chips.js +1 -1
  37. package/dist/components.cjs +1 -1
  38. package/dist/components.js +1 -1
  39. package/dist/content-drawer.cjs +1 -1
  40. package/dist/content-drawer.js +1 -1
  41. package/dist/{date-range-BSBJICYH.js → date-range-DF_kjOLs.js} +3 -3
  42. package/dist/{date-range-BSBJICYH.js.map → date-range-DF_kjOLs.js.map} +1 -1
  43. package/dist/{date-range-BmVLxD4w.cjs → date-range-DvTXqD8e.cjs} +2 -2
  44. package/dist/{date-range-BmVLxD4w.cjs.map → date-range-DvTXqD8e.cjs.map} +1 -1
  45. package/dist/date-range.cjs +1 -1
  46. package/dist/date-range.js +1 -1
  47. package/dist/{delay-CgOaVklg.js → delay-Cmf_vIaJ.js} +2 -2
  48. package/dist/{delay-CgOaVklg.js.map → delay-Cmf_vIaJ.js.map} +1 -1
  49. package/dist/{delay-BC-GT6yV.cjs → delay-DhV8MSPZ.cjs} +2 -2
  50. package/dist/{delay-BC-GT6yV.cjs.map → delay-DhV8MSPZ.cjs.map} +1 -1
  51. package/dist/delay.cjs +1 -1
  52. package/dist/delay.js +1 -1
  53. package/dist/{divider-Dw4upy-U.cjs → divider-4ev5A0v0.cjs} +2 -2
  54. package/dist/{divider-Dw4upy-U.cjs.map → divider-4ev5A0v0.cjs.map} +1 -1
  55. package/dist/{divider-lRP5ZCxr.js → divider-B7GoicdG.js} +3 -3
  56. package/dist/{divider-lRP5ZCxr.js.map → divider-B7GoicdG.js.map} +1 -1
  57. package/dist/divider.cjs +1 -1
  58. package/dist/divider.js +1 -1
  59. package/dist/extra.cjs +1 -1
  60. package/dist/extra.js +1 -1
  61. package/dist/{flex-X4APHjaR.cjs → flex-DFHDHleC.cjs} +2 -2
  62. package/dist/{flex-X4APHjaR.cjs.map → flex-DFHDHleC.cjs.map} +1 -1
  63. package/dist/{flex-BkuM0UK7.js → flex-t4F0-R-c.js} +2 -2
  64. package/dist/{flex-BkuM0UK7.js.map → flex-t4F0-R-c.js.map} +1 -1
  65. package/dist/{form-Ct_Qt0rD.cjs → form-D_ShigQq.cjs} +2 -2
  66. package/dist/{form-Ct_Qt0rD.cjs.map → form-D_ShigQq.cjs.map} +1 -1
  67. package/dist/{form-Ci8uCvU-.js → form-dVHTERy3.js} +2 -2
  68. package/dist/{form-Ci8uCvU-.js.map → form-dVHTERy3.js.map} +1 -1
  69. package/dist/form.cjs +1 -1
  70. package/dist/form.js +1 -1
  71. package/dist/{icon-BPsYPc8h.cjs → icon-BNyFKp0p.cjs} +2 -2
  72. package/dist/{icon-BPsYPc8h.cjs.map → icon-BNyFKp0p.cjs.map} +1 -1
  73. package/dist/{icon-DOJOFG3x.js → icon-C3PI8GgN.js} +3 -3
  74. package/dist/{icon-DOJOFG3x.js.map → icon-C3PI8GgN.js.map} +1 -1
  75. package/dist/{icon-button-cirbgD54.cjs → icon-button-D4D5bXCm.cjs} +2 -2
  76. package/dist/{icon-button-cirbgD54.cjs.map → icon-button-D4D5bXCm.cjs.map} +1 -1
  77. package/dist/{icon-button-BPa29txC.js → icon-button-Dr_-8Ey5.js} +3 -3
  78. package/dist/{icon-button-BPa29txC.js.map → icon-button-Dr_-8Ey5.js.map} +1 -1
  79. package/dist/icons.cjs +1 -1
  80. package/dist/icons.js +1 -1
  81. package/dist/index.cjs +1 -1
  82. package/dist/index.js +35 -35
  83. package/dist/{input-B4miYmDK.cjs → input-BHgBONgn.cjs} +2 -2
  84. package/dist/{input-B4miYmDK.cjs.map → input-BHgBONgn.cjs.map} +1 -1
  85. package/dist/{input-DTJsOi9t.js → input-BgmQpY14.js} +2 -2
  86. package/dist/{input-DTJsOi9t.js.map → input-BgmQpY14.js.map} +1 -1
  87. package/dist/input-Bk7EZhOl.cjs +51 -0
  88. package/dist/input-Bk7EZhOl.cjs.map +1 -0
  89. package/dist/{input-CuvPPYVq.js → input-_XU4ILwo.js} +34 -34
  90. package/dist/input-_XU4ILwo.js.map +1 -0
  91. package/dist/input.cjs +1 -1
  92. package/dist/input.js +1 -1
  93. package/dist/layout.cjs +1 -1
  94. package/dist/layout.js +1 -1
  95. package/dist/{list-QiglVzPK.cjs → list-CCrSL1bZ.cjs} +2 -2
  96. package/dist/{list-QiglVzPK.cjs.map → list-CCrSL1bZ.cjs.map} +1 -1
  97. package/dist/{list-CWbygRrR.js → list-r6mo_zcT.js} +2 -2
  98. package/dist/{list-CWbygRrR.js.map → list-r6mo_zcT.js.map} +1 -1
  99. package/dist/list.cjs +1 -1
  100. package/dist/list.js +1 -1
  101. package/dist/{litElement.mixin-D_oDZMIO.cjs → litElement.mixin-CAXeI5RY.cjs} +2 -2
  102. package/dist/{litElement.mixin-D_oDZMIO.cjs.map → litElement.mixin-CAXeI5RY.cjs.map} +1 -1
  103. package/dist/{litElement.mixin-MZntPOCu.js → litElement.mixin-DfYInjJd.js} +2 -2
  104. package/dist/{litElement.mixin-MZntPOCu.js.map → litElement.mixin-DfYInjJd.js.map} +1 -1
  105. package/dist/{menu-Bn4JuaBS.cjs → menu-B6x8xZng.cjs} +2 -2
  106. package/dist/{menu-Bn4JuaBS.cjs.map → menu-B6x8xZng.cjs.map} +1 -1
  107. package/dist/{menu-iSx7aWwL.js → menu-yboJ8_V4.js} +3 -3
  108. package/dist/{menu-iSx7aWwL.js.map → menu-yboJ8_V4.js.map} +1 -1
  109. package/dist/menu.cjs +1 -1
  110. package/dist/menu.js +1 -1
  111. package/dist/nav-drawer.cjs +1 -1
  112. package/dist/nav-drawer.js +1 -1
  113. package/dist/notification.cjs +1 -1
  114. package/dist/notification.js +1 -1
  115. package/dist/{option-DMwxI7ML.js → option-CmZo8fXU.js} +2 -2
  116. package/dist/{option-DMwxI7ML.js.map → option-CmZo8fXU.js.map} +1 -1
  117. package/dist/{option-DBfFfXNm.cjs → option-gnBrhD_1.cjs} +2 -2
  118. package/dist/{option-DBfFfXNm.cjs.map → option-gnBrhD_1.cjs.map} +1 -1
  119. package/dist/option.cjs +1 -1
  120. package/dist/option.js +1 -1
  121. package/dist/{outlet-KhTjvKCU.js → outlet-BgJ_WOwi.js} +2 -2
  122. package/dist/{outlet-KhTjvKCU.js.map → outlet-BgJ_WOwi.js.map} +1 -1
  123. package/dist/{outlet-CEaS1zUl.cjs → outlet-CSduKjEi.cjs} +2 -2
  124. package/dist/{outlet-CEaS1zUl.cjs.map → outlet-CSduKjEi.cjs.map} +1 -1
  125. package/dist/{payment-card-form-CVZyDkcJ.cjs → payment-card-form-CVW9uWum.cjs} +2 -2
  126. package/dist/{payment-card-form-CVZyDkcJ.cjs.map → payment-card-form-CVW9uWum.cjs.map} +1 -1
  127. package/dist/{payment-card-form-DK86Lcng.js → payment-card-form-NUTic2b3.js} +3 -3
  128. package/dist/{payment-card-form-DK86Lcng.js.map → payment-card-form-NUTic2b3.js.map} +1 -1
  129. package/dist/{radio-group-DNmZuvSj.js → radio-group-Bl5nhDCh.js} +2 -2
  130. package/dist/{radio-group-DNmZuvSj.js.map → radio-group-Bl5nhDCh.js.map} +1 -1
  131. package/dist/{radio-group-CxJXNx54.cjs → radio-group-CTCnzxmZ.cjs} +2 -2
  132. package/dist/{radio-group-CxJXNx54.cjs.map → radio-group-CTCnzxmZ.cjs.map} +1 -1
  133. package/dist/radio-group.cjs +1 -1
  134. package/dist/radio-group.js +1 -1
  135. package/dist/{select-DRi9CB_N.js → select-C2TJxenH.js} +12 -12
  136. package/dist/select-C2TJxenH.js.map +1 -0
  137. package/dist/select-D3yrgnVD.cjs +56 -0
  138. package/dist/select-D3yrgnVD.cjs.map +1 -0
  139. package/dist/select.cjs +1 -1
  140. package/dist/select.js +1 -1
  141. package/dist/sheet-CwzonocJ.cjs +62 -0
  142. package/dist/sheet-CwzonocJ.cjs.map +1 -0
  143. package/dist/sheet-DHyy-OIH.js +244 -0
  144. package/dist/sheet-DHyy-OIH.js.map +1 -0
  145. package/dist/sheet.cjs +1 -1
  146. package/dist/sheet.js +1 -1
  147. package/dist/{slider-A_LoTZ1P.js → slider-2mhXBUIM.js} +3 -3
  148. package/dist/{slider-A_LoTZ1P.js.map → slider-2mhXBUIM.js.map} +1 -1
  149. package/dist/{slider-XRH0sXZN.cjs → slider-DCJHcXt1.cjs} +2 -2
  150. package/dist/{slider-XRH0sXZN.cjs.map → slider-DCJHcXt1.cjs.map} +1 -1
  151. package/dist/slider.cjs +1 -1
  152. package/dist/slider.js +1 -1
  153. package/dist/{spinner-D0l2eAK5.js → spinner-B9JHqmoP.js} +3 -3
  154. package/dist/{spinner-D0l2eAK5.js.map → spinner-B9JHqmoP.js.map} +1 -1
  155. package/dist/{spinner-CSsb6sKK.cjs → spinner-D-vtqMqq.cjs} +2 -2
  156. package/dist/{spinner-CSsb6sKK.cjs.map → spinner-D-vtqMqq.cjs.map} +1 -1
  157. package/dist/{surface-DEAdaZUh.cjs → surface-DLHFSFU6.cjs} +2 -2
  158. package/dist/{surface-DEAdaZUh.cjs.map → surface-DLHFSFU6.cjs.map} +1 -1
  159. package/dist/{surface-D5FgxeIB.js → surface-O_-YGi6T.js} +2 -2
  160. package/dist/{surface-D5FgxeIB.js.map → surface-O_-YGi6T.js.map} +1 -1
  161. package/dist/surface.cjs +1 -1
  162. package/dist/surface.js +1 -1
  163. package/dist/{table-DC86Vj6Z.js → table-Bvb_ZG7b.js} +2 -2
  164. package/dist/{table-DC86Vj6Z.js.map → table-Bvb_ZG7b.js.map} +1 -1
  165. package/dist/{table-Cygw_pIl.cjs → table-CdkLZM2b.cjs} +2 -2
  166. package/dist/{table-Cygw_pIl.cjs.map → table-CdkLZM2b.cjs.map} +1 -1
  167. package/dist/table.cjs +1 -1
  168. package/dist/table.js +1 -1
  169. package/dist/{tabs-group-BQomo5q3.cjs → tabs-group-B-KvImY2.cjs} +2 -2
  170. package/dist/{tabs-group-BQomo5q3.cjs.map → tabs-group-B-KvImY2.cjs.map} +1 -1
  171. package/dist/{tabs-group-7bz0I9uV.js → tabs-group-CVZ2SEq3.js} +2 -2
  172. package/dist/{tabs-group-7bz0I9uV.js.map → tabs-group-CVZ2SEq3.js.map} +1 -1
  173. package/dist/tabs.cjs +1 -1
  174. package/dist/tabs.js +1 -1
  175. package/dist/tailwind.mixin-BvhzMkqK.js +43 -0
  176. package/dist/{tailwind.mixin-B-T2bBPl.js.map → tailwind.mixin-BvhzMkqK.js.map} +1 -1
  177. package/dist/tailwind.mixin-csgxM8P_.cjs +2 -0
  178. package/dist/{tailwind.mixin-CduPdozY.cjs.map → tailwind.mixin-csgxM8P_.cjs.map} +1 -1
  179. package/dist/teleport.cjs +1 -1
  180. package/dist/{teleport.component-gFIqLOrA.js → teleport.component-BRm0yYbM.js} +37 -37
  181. package/dist/{teleport.component-gFIqLOrA.js.map → teleport.component-BRm0yYbM.js.map} +1 -1
  182. package/dist/{teleport.component-BMLwCM8y.cjs → teleport.component-D9xuyN_z.cjs} +2 -2
  183. package/dist/{teleport.component-BMLwCM8y.cjs.map → teleport.component-D9xuyN_z.cjs.map} +1 -1
  184. package/dist/teleport.js +1 -1
  185. package/dist/{textarea-CixoZTFB.cjs → textarea-BaTTXEtZ.cjs} +2 -2
  186. package/dist/{textarea-CixoZTFB.cjs.map → textarea-BaTTXEtZ.cjs.map} +1 -1
  187. package/dist/{textarea-1aeql05N.js → textarea-txN6-t64.js} +2 -2
  188. package/dist/{textarea-1aeql05N.js.map → textarea-txN6-t64.js.map} +1 -1
  189. package/dist/textarea.cjs +1 -1
  190. package/dist/textarea.js +1 -1
  191. package/dist/{theme-button-MRgILdtC.js → theme-button-C2oB9OCM.js} +2 -2
  192. package/dist/{theme-button-MRgILdtC.js.map → theme-button-C2oB9OCM.js.map} +1 -1
  193. package/dist/{theme-button-DocSoRxe.cjs → theme-button-qFLBZi0_.cjs} +2 -2
  194. package/dist/{theme-button-DocSoRxe.cjs.map → theme-button-qFLBZi0_.cjs.map} +1 -1
  195. package/dist/theme-button.cjs +1 -1
  196. package/dist/theme-button.js +1 -1
  197. package/dist/theme.cjs +1 -1
  198. package/dist/{theme.component-BgOdO6iM.cjs → theme.component-C-055F7V.cjs} +2 -2
  199. package/dist/{theme.component-BgOdO6iM.cjs.map → theme.component-C-055F7V.cjs.map} +1 -1
  200. package/dist/{theme.component-BFkhNT0D.js → theme.component-UVrnuMPb.js} +2 -2
  201. package/dist/{theme.component-BFkhNT0D.js.map → theme.component-UVrnuMPb.js.map} +1 -1
  202. package/dist/theme.js +1 -1
  203. package/dist/{timezone-CvOrPfno.cjs → timezone-CvS7opKc.cjs} +2 -2
  204. package/dist/{timezone-CvOrPfno.cjs.map → timezone-CvS7opKc.cjs.map} +1 -1
  205. package/dist/{timezone-BW6MC511.js → timezone-DUYp8qD3.js} +3 -3
  206. package/dist/{timezone-BW6MC511.js.map → timezone-DUYp8qD3.js.map} +1 -1
  207. package/dist/{tree-PSCsuzDT.js → tree-Cxgw_mi9.js} +2 -2
  208. package/dist/{tree-PSCsuzDT.js.map → tree-Cxgw_mi9.js.map} +1 -1
  209. package/dist/{tree-DysB6Y8C.cjs → tree-DYLlgF1F.cjs} +2 -2
  210. package/dist/{tree-DysB6Y8C.cjs.map → tree-DYLlgF1F.cjs.map} +1 -1
  211. package/dist/tree.cjs +1 -1
  212. package/dist/tree.js +1 -1
  213. package/dist/{typewriter-DmzUuxvZ.js → typewriter-DUdvh6VO.js} +4 -4
  214. package/dist/{typewriter-DmzUuxvZ.js.map → typewriter-DUdvh6VO.js.map} +1 -1
  215. package/dist/{typewriter-C8pWgRuU.cjs → typewriter-DoGLma1z.cjs} +2 -2
  216. package/dist/{typewriter-C8pWgRuU.cjs.map → typewriter-DoGLma1z.cjs.map} +1 -1
  217. package/dist/typewriter.cjs +1 -1
  218. package/dist/typewriter.js +1 -1
  219. package/dist/{typography-D486o2A3.js → typography-BnQJ5TWy.js} +2 -2
  220. package/dist/{typography-D486o2A3.js.map → typography-BnQJ5TWy.js.map} +1 -1
  221. package/dist/{typography-BfjWKELJ.cjs → typography-DFREXmBg.cjs} +2 -2
  222. package/dist/{typography-BfjWKELJ.cjs.map → typography-DFREXmBg.cjs.map} +1 -1
  223. package/dist/typography.cjs +1 -1
  224. package/dist/typography.js +1 -1
  225. package/dist/v2.cjs +1 -1
  226. package/dist/v2.js +1 -1
  227. package/package.json +1 -1
  228. package/types/src/select/select.d.ts +1 -0
  229. package/types/src/sheet/header.d.ts +0 -1
  230. package/types/src/sheet/sheet.d.ts +120 -1
  231. package/dist/input-CuvPPYVq.js.map +0 -1
  232. package/dist/input-DibJxeWY.cjs +0 -51
  233. package/dist/input-DibJxeWY.cjs.map +0 -1
  234. package/dist/select-DRi9CB_N.js.map +0 -1
  235. package/dist/select-SQOIioEy.cjs +0 -56
  236. package/dist/select-SQOIioEy.cjs.map +0 -1
  237. package/dist/sheet-BJGyAQko.js +0 -182
  238. package/dist/sheet-BJGyAQko.js.map +0 -1
  239. package/dist/sheet-QIcFyBDD.cjs +0 -43
  240. package/dist/sheet-QIcFyBDD.cjs.map +0 -1
  241. package/dist/tailwind.mixin-B-T2bBPl.js +0 -43
  242. package/dist/tailwind.mixin-CduPdozY.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group-CxJXNx54.cjs","sources":["../src/radio-group/radio-group.ts"],"sourcesContent":["import { html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { Subject } from 'rxjs'\nimport style from './radio-group.scss?inline'\nimport { TailwindElement } from '@mixins/index'\nimport { when } from 'lit/directives/when.js'\n\nexport type SchmancyRadioGroupOption = {\n\tlabel: string\n\tvalue: string\n}\nexport type SchmancyRadioGroupChangeEvent = CustomEvent<{\n\tvalue: string\n}>\n@customElement('schmancy-radio-group')\nexport class RadioGroup extends TailwindElement(style) {\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) name = ''\n\t@property({ type: String }) selected = ''\n\t@property({ type: Array }) options: SchmancyRadioGroupOption[] = []\n\t@property({ type: Boolean }) required: boolean = false\n\tprivate selection$ = new Subject<SchmancyRadioGroupOption>()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.selection$.subscribe(value => {\n\t\t\tthis.selected = value.value\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: value,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.selection$?.unsubscribe()\n\t}\n\tprivate handleSelection(value: SchmancyRadioGroupOption) {\n\t\tthis.selection$.next(value)\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"grid gap-4\">\n\t\t\t\t${when(this.label, () => html` <label class=\"text-base font-semibold text-gray-900\">${this.label}</label> `)}\n\t\t\t\t${this.options?.map(\n\t\t\t\t\toption => html`\n\t\t\t\t\t\t<div class=\"flex items-center\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\t\t\tid=${option.value}\n\t\t\t\t\t\t\t\tclass=\"h-4 w-4 border-gray-300 text-indigo-600 focus:ring-indigo-600\"\n\t\t\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t\t\tname=${this.name}\n\t\t\t\t\t\t\t\t.value=${option.value}\n\t\t\t\t\t\t\t\t.checked=${option.value === this.selected}\n\t\t\t\t\t\t\t\t@change=${() => this.handleSelection(option)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label for=${option.value} class=\"ml-3 block text-sm font-medium leading-6 text-gray-900\"\n\t\t\t\t\t\t\t\t>${option.value}</label\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-radio-group': RadioGroup\n\t}\n}\n"],"names":["RadioGroup","TailwindElement","super","arguments","this","label","name","selected","options","required","selection$","Subject","connectedCallback","subscribe","value","dispatchEvent","CustomEvent","detail","bubbles","disconnectedCallback","unsubscribe","next","html","when","map","option","handleSelection","__decorateClass","property","type","String","prototype","Array","Boolean","customElement"],"mappings":"wbAeaA,QAAAA,WAAN,cAAyBC,6DAAzB,aAAAC,CAAAA,MAAAA,GAAAC,SAC8BC,EAAAA,KAAAC,MAAA,GACDD,KAAAE,KAAA,GACIF,KAAAG,SAAA,GACZH,KAAAI,QAAsC,CAChBJ,EAAAA,KAAAK,SAAA,GACzCL,KAAAM,WAAa,IAAIC,SAAkC,CAE3D,mBAAAC,CACCV,MAAMU,kBAAAA,EACDR,KAAAM,WAAWG,UAAmBC,GAClCV,CAAAA,KAAKG,SAAWO,EAAMA,MACjBV,KAAAW,cACJ,IAAIC,YAAY,SAAU,CACzBC,OAAQH,EACRI,QAAAA,EAEF,CAAA,CAAA,CAAA,CAAA,CACA,CAGF,sBAAAC,OACCjB,MAAMiB,qBAAAA,GACNf,EAAAA,KAAKM,aAALN,MAAAA,EAAiBgB,aAAY,CAEtB,gBAAgBN,EAClBV,CAAAA,KAAAM,WAAWW,KAAKP,EAAK,CAG3B,QACQ,OAAA,OAAAQ,EAAAA;AAAAA;AAAAA,MAEHC,EAAAA,KAAKnB,KAAKC,MAAO,IAAMiB,EAAAA,6DAA6DlB,KAAKC,KAAAA,WAAAA,CAAAA;AAAAA,OACzFD,EAAAA,KAAKI,UAALJ,YAAAA,EAAcoB,IACLC,GAAAH,EAAAA;AAAAA;AAAAA;AAAAA,oBAGKlB,KAAKK,QAAAA;AAAAA,aACZgB,EAAOX,KAAAA;AAAAA;AAAAA;AAAAA,eAGLV,KAAKE,IAAAA;AAAAA,iBACHmB,EAAOX,KAAAA;AAAAA,mBACLW,EAAOX,QAAUV,KAAKG,QAAAA;AAAAA,kBACvB,IAAMH,KAAKsB,gBAAgBD,CAAAA,CAAAA;AAAAA;AAAAA,oBAEzBA,EAAOX,KAAAA;AAAAA,WAChBW,EAAOX,KAAAA;AAAAA;AAAAA;AAAAA;;GAIb,CAAA,EAlDwBa,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MADN9B,CAAAA,CAAAA,EAAAA,mBACgB+B,UAAA,QAAA,CAAA,EACAJ,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MAAAA,CAAAA,CAAAA,EAFN9B,mBAEgB+B,UAAA,OAAA,CAAA,EACAJ,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,UAHN9B,mBAGgB+B,UAAA,WAAA,CACDJ,EAAAA,EAAA,CAA1BC,WAAS,CAAEC,KAAMG,KAJNhC,CAAAA,CAAAA,EAAAA,mBAIe+B,UAAA,UAAA,CAAA,EACEJ,EAAA,CAA5BC,WAAS,CAAEC,KAAMI,OAAAA,CAAAA,CAAAA,EALNjC,mBAKiB+B,UAAA,WAAA,CAAA,EALjB/B,QAANA,WAAA2B,EAAA,CADNO,EAAAA,cAAc,yBACFlC"}
1
+ {"version":3,"file":"radio-group-CTCnzxmZ.cjs","sources":["../src/radio-group/radio-group.ts"],"sourcesContent":["import { html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { Subject } from 'rxjs'\nimport style from './radio-group.scss?inline'\nimport { TailwindElement } from '@mixins/index'\nimport { when } from 'lit/directives/when.js'\n\nexport type SchmancyRadioGroupOption = {\n\tlabel: string\n\tvalue: string\n}\nexport type SchmancyRadioGroupChangeEvent = CustomEvent<{\n\tvalue: string\n}>\n@customElement('schmancy-radio-group')\nexport class RadioGroup extends TailwindElement(style) {\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) name = ''\n\t@property({ type: String }) selected = ''\n\t@property({ type: Array }) options: SchmancyRadioGroupOption[] = []\n\t@property({ type: Boolean }) required: boolean = false\n\tprivate selection$ = new Subject<SchmancyRadioGroupOption>()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.selection$.subscribe(value => {\n\t\t\tthis.selected = value.value\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: value,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.selection$?.unsubscribe()\n\t}\n\tprivate handleSelection(value: SchmancyRadioGroupOption) {\n\t\tthis.selection$.next(value)\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"grid gap-4\">\n\t\t\t\t${when(this.label, () => html` <label class=\"text-base font-semibold text-gray-900\">${this.label}</label> `)}\n\t\t\t\t${this.options?.map(\n\t\t\t\t\toption => html`\n\t\t\t\t\t\t<div class=\"flex items-center\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\t\t\tid=${option.value}\n\t\t\t\t\t\t\t\tclass=\"h-4 w-4 border-gray-300 text-indigo-600 focus:ring-indigo-600\"\n\t\t\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t\t\tname=${this.name}\n\t\t\t\t\t\t\t\t.value=${option.value}\n\t\t\t\t\t\t\t\t.checked=${option.value === this.selected}\n\t\t\t\t\t\t\t\t@change=${() => this.handleSelection(option)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label for=${option.value} class=\"ml-3 block text-sm font-medium leading-6 text-gray-900\"\n\t\t\t\t\t\t\t\t>${option.value}</label\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-radio-group': RadioGroup\n\t}\n}\n"],"names":["RadioGroup","TailwindElement","super","arguments","this","label","name","selected","options","required","selection$","Subject","connectedCallback","subscribe","value","dispatchEvent","CustomEvent","detail","bubbles","disconnectedCallback","unsubscribe","next","html","when","map","option","handleSelection","__decorateClass","property","type","String","prototype","Array","Boolean","customElement"],"mappings":"wbAeaA,QAAAA,WAAN,cAAyBC,6DAAzB,aAAAC,CAAAA,MAAAA,GAAAC,SAC8BC,EAAAA,KAAAC,MAAA,GACDD,KAAAE,KAAA,GACIF,KAAAG,SAAA,GACZH,KAAAI,QAAsC,CAChBJ,EAAAA,KAAAK,SAAA,GACzCL,KAAAM,WAAa,IAAIC,SAAkC,CAE3D,mBAAAC,CACCV,MAAMU,kBAAAA,EACDR,KAAAM,WAAWG,UAAmBC,GAClCV,CAAAA,KAAKG,SAAWO,EAAMA,MACjBV,KAAAW,cACJ,IAAIC,YAAY,SAAU,CACzBC,OAAQH,EACRI,QAAAA,EAEF,CAAA,CAAA,CAAA,CAAA,CACA,CAGF,sBAAAC,OACCjB,MAAMiB,qBAAAA,GACNf,EAAAA,KAAKM,aAALN,MAAAA,EAAiBgB,aAAY,CAEtB,gBAAgBN,EAClBV,CAAAA,KAAAM,WAAWW,KAAKP,EAAK,CAG3B,QACQ,OAAA,OAAAQ,EAAAA;AAAAA;AAAAA,MAEHC,EAAAA,KAAKnB,KAAKC,MAAO,IAAMiB,EAAAA,6DAA6DlB,KAAKC,KAAAA,WAAAA,CAAAA;AAAAA,OACzFD,EAAAA,KAAKI,UAALJ,YAAAA,EAAcoB,IACLC,GAAAH,EAAAA;AAAAA;AAAAA;AAAAA,oBAGKlB,KAAKK,QAAAA;AAAAA,aACZgB,EAAOX,KAAAA;AAAAA;AAAAA;AAAAA,eAGLV,KAAKE,IAAAA;AAAAA,iBACHmB,EAAOX,KAAAA;AAAAA,mBACLW,EAAOX,QAAUV,KAAKG,QAAAA;AAAAA,kBACvB,IAAMH,KAAKsB,gBAAgBD,CAAAA,CAAAA;AAAAA;AAAAA,oBAEzBA,EAAOX,KAAAA;AAAAA,WAChBW,EAAOX,KAAAA;AAAAA;AAAAA;AAAAA;;GAIb,CAAA,EAlDwBa,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MADN9B,CAAAA,CAAAA,EAAAA,mBACgB+B,UAAA,QAAA,CAAA,EACAJ,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,MAAAA,CAAAA,CAAAA,EAFN9B,mBAEgB+B,UAAA,OAAA,CAAA,EACAJ,EAAA,CAA3BC,WAAS,CAAEC,KAAMC,UAHN9B,mBAGgB+B,UAAA,WAAA,CACDJ,EAAAA,EAAA,CAA1BC,WAAS,CAAEC,KAAMG,KAJNhC,CAAAA,CAAAA,EAAAA,mBAIe+B,UAAA,UAAA,CAAA,EACEJ,EAAA,CAA5BC,WAAS,CAAEC,KAAMI,OAAAA,CAAAA,CAAAA,EALNjC,mBAKiB+B,UAAA,WAAA,CAAA,EALjB/B,QAANA,WAAA2B,EAAA,CADNO,EAAAA,cAAc,yBACFlC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./radio-group-CxJXNx54.cjs");Object.defineProperty(exports,"RadioGroup",{enumerable:!0,get:()=>e.RadioGroup});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./radio-group-CTCnzxmZ.cjs");Object.defineProperty(exports,"RadioGroup",{enumerable:!0,get:()=>e.RadioGroup});
2
2
  //# sourceMappingURL=radio-group.cjs.map
@@ -1,4 +1,4 @@
1
- import { R as a } from "./radio-group-DNmZuvSj.js";
1
+ import { R as a } from "./radio-group-Bl5nhDCh.js";
2
2
  export {
3
3
  a as RadioGroup
4
4
  };
@@ -2,18 +2,18 @@ import { autoUpdate as d, computePosition as u, offset as y, flip as v, shift as
2
2
  import "rxjs";
3
3
  import { classMap as f } from "lit/directives/class-map.js";
4
4
  import "lit/directives/style-map.js";
5
- import { $ as b } from "./litElement.mixin-MZntPOCu.js";
6
- import "./tailwind.mixin-B-T2bBPl.js";
5
+ import { $ as b } from "./litElement.mixin-DfYInjJd.js";
6
+ import "./tailwind.mixin-BvhzMkqK.js";
7
7
  import { c as g } from "./color-DrgmL7QT.js";
8
8
  import "./ripple-3indJ14o.js";
9
9
  import { S as w } from "./theme.interface-C5Kj6WjD.js";
10
10
  import { css as A, html as O } from "lit";
11
- import { property as n, state as p, query as c, queryAssignedElements as $, customElement as D } from "lit/decorators.js";
12
- var V = Object.defineProperty, x = Object.getOwnPropertyDescriptor, a = (t, e, i, s) => {
13
- for (var l, r = s > 1 ? void 0 : s ? x(e, i) : e, h = t.length - 1; h >= 0; h--) (l = t[h]) && (r = (s ? l(e, i, r) : l(r)) || r);
11
+ import { property as n, state as h, query as c, queryAssignedElements as $, customElement as D } from "lit/decorators.js";
12
+ var V = Object.defineProperty, x = Object.getOwnPropertyDescriptor, o = (t, e, i, s) => {
13
+ for (var l, r = s > 1 ? void 0 : s ? x(e, i) : e, p = t.length - 1; p >= 0; p--) (l = t[p]) && (r = (s ? l(e, i, r) : l(r)) || r);
14
14
  return s && r && V(e, i, r), r;
15
15
  };
16
- let o = class extends b(A`
16
+ let a = class extends b(A`
17
17
  :host {
18
18
  display: block;
19
19
  position: relative;
@@ -25,7 +25,7 @@ let o = class extends b(A`
25
25
  }
26
26
  `) {
27
27
  constructor() {
28
- super(), this.required = !1, this.placeholder = "", this.value = "", this.multi = !1, this.label = "", this.hint = "", this.isOpen = !1, this.valueLabel = "", this.isValid = !0, this.validationMessage = "", this.handleKeyDown = (t) => {
28
+ super(), this.required = !1, this.placeholder = "", this.value = "", this.multi = !1, this.label = "", this.hint = "", this.isOpen = !1, this.valueLabel = "", this.isValid = !0, this.validationMessage = "", this._userInteracted = !1, this.handleKeyDown = (t) => {
29
29
  if (!this.isOpen) return void (["Enter", " ", "ArrowDown"].includes(t.key) && (t.preventDefault(), this.openDropdown(!1)));
30
30
  const e = this.options.findIndex((i) => i.matches(":focus")) ?? -1;
31
31
  switch (t.key) {
@@ -67,7 +67,7 @@ let o = class extends b(A`
67
67
  var e;
68
68
  if (super.updated(t), t.has("value")) {
69
69
  const i = Array.isArray(this.value) ? this.value.join(",") : this.value;
70
- (e = this.internals) == null || e.setFormValue(i), this.required && this.checkValidity();
70
+ (e = this.internals) == null || e.setFormValue(i), this.required && this.hasUpdated && this._userInteracted && this.checkValidity();
71
71
  }
72
72
  }
73
73
  syncSelection() {
@@ -116,7 +116,7 @@ let o = class extends b(A`
116
116
  }
117
117
  handleOptionSelect(t) {
118
118
  var e;
119
- if (this.multi) {
119
+ if (this._userInteracted = !0, this.multi) {
120
120
  const i = this.options.find((l) => l.value === t);
121
121
  if (!i) return;
122
122
  i.selected = !i.selected;
@@ -199,8 +199,8 @@ let o = class extends b(A`
199
199
  `;
200
200
  }
201
201
  };
202
- o.formAssociated = !0, a([n({ type: String })], o.prototype, "name", 2), a([n({ type: Boolean, reflect: !0 })], o.prototype, "required", 2), a([n({ type: String })], o.prototype, "placeholder", 2), a([n({ type: String, reflect: !0 })], o.prototype, "value", 2), a([n({ type: Boolean })], o.prototype, "multi", 2), a([n({ type: String })], o.prototype, "label", 2), a([n({ type: String })], o.prototype, "hint", 2), a([p()], o.prototype, "isOpen", 2), a([p()], o.prototype, "valueLabel", 2), a([p()], o.prototype, "isValid", 2), a([n({ type: String })], o.prototype, "validationMessage", 2), a([c("ul")], o.prototype, "ul", 2), a([c("schmancy-input")], o.prototype, "inputRef", 2), a([$({ flatten: !0 })], o.prototype, "options", 2), o = a([D("schmancy-select")], o);
202
+ a.formAssociated = !0, o([n({ type: String })], a.prototype, "name", 2), o([n({ type: Boolean, reflect: !0 })], a.prototype, "required", 2), o([n({ type: String })], a.prototype, "placeholder", 2), o([n({ type: String, reflect: !0 })], a.prototype, "value", 2), o([n({ type: Boolean })], a.prototype, "multi", 2), o([n({ type: String })], a.prototype, "label", 2), o([n({ type: String })], a.prototype, "hint", 2), o([h()], a.prototype, "isOpen", 2), o([h()], a.prototype, "valueLabel", 2), o([h()], a.prototype, "isValid", 2), o([n({ type: String })], a.prototype, "validationMessage", 2), o([c("ul")], a.prototype, "ul", 2), o([c("schmancy-input")], a.prototype, "inputRef", 2), o([$({ flatten: !0 })], a.prototype, "options", 2), o([h()], a.prototype, "_userInteracted", 2), a = o([D("schmancy-select")], a);
203
203
  export {
204
- o as S
204
+ a as S
205
205
  };
206
- //# sourceMappingURL=select-DRi9CB_N.js.map
206
+ //# sourceMappingURL=select-C2TJxenH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-C2TJxenH.js","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value: string | string[] = '' // for single-select or multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('schmancy-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\t@state() private _userInteracted = false\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Only check validity if this isn't the first render\n\t\t\t// and the component has been interacted with\n\t\t\tif (this.required && this.hasUpdated && this._userInteracted) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\t\t\tthis.options.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tthis._userInteracted = true\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tlet selectedValues = Array.isArray(this.value) ? [...this.value] : []\n\n\t\t\tif (option.selected) {\n\t\t\t\tselectedValues = [...selectedValues, value]\n\t\t\t} else {\n\t\t\t\tselectedValues = selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.value = selectedValues\n\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\t\tthis.checkValidity()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\tthis.isValid = true // Reset validation on change\n\t\tthis.validationMessage = ''\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\t// Also dispatch a standard change event for better form compatibility\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }))\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\tconst isEmpty = this.multi ? !Array.isArray(this.value) || this.value.length === 0 : !this.value\n\n\t\tthis.isValid = !(this.required && isEmpty)\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\tconst valid = this.checkValidity()\n\n\t\tif (!valid && this.required) {\n\t\t\t// If invalid, make sure the input shows it\n\t\t\tthis.inputRef.required = true\n\t\t\tthis.inputRef.reportValidity()\n\n\t\t\t// Optionally open the dropdown to show options\n\t\t\tif (!this.isOpen) {\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tthis.internals?.setValidity(message ? { customError: true } : {}, message, this.inputRef)\n\t}\n\n\tpublic reset() {\n\t\tthis.value = ''\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis.internals?.setValidity({})\n\t\tthis.options.forEach(o => (o.selected = false))\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<schmancy-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.hint=${this.hint || this.validationMessage}\n\t\t\t\t\t.error=${!this.isValid}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></schmancy-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","super","this","required","placeholder","value","multi","label","hint","isOpen","valueLabel","isValid","validationMessage","_userInteracted","handleKeyDown","e","includes","key","preventDefault","openDropdown","current","options","findIndex","o","matches","closeDropdown","focusOption","Math","min","length","max","handleOptionSelect","internals","attachInternals","form","connectedCallback","id","random","toString","substr","addEventListener","disconnectedCallback","removeEventListener","cleanupPositioner","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","Array","isArray","join","setFormValue","hasUpdated","checkValidity","selectedValues","forEach","selected","filter","map","selectedOption","find","option","index","setAttribute","tabIndex","String","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","focus","combobox","report","updateComplete","positionDropdown","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","Event","isEmpty","setValidity","valueMissing","inputRef","valid","message","customError","render","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","formAssociated","__decorateClass","property","type","prototype","Boolean","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":";;;;;;;;;;;;;;;AAea,IAAAA,IAAN,cAA6BC,EAAYC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAoC/C,EAAA;AAAA,EAAA;AACOC,UApBgDC,GAAAA,KAAAC,eACbD,KAAAE,cAAA,IAC4BF,KAAAG,QAAA,IACjCH,KAAAI,YACDJ,KAAAK,QAAA,IACDL,KAAAM,OAAA,IAG1BN,KAAQO,aACRP,KAAQQ,aAAa,IACrBR,KAAQS,cAC+BT,KAAAU,oBAAA,IAMvCV,KAAQW,sBA0GTX,KAAAY,gBAAiBC,OACpB;AAAA,UAAA,CAACb,KAAKO,OAKT,QAAA,MAJI,CAAC,SAAS,KAAK,WAAaO,EAAAA,SAASD,EAAEE,GAC1CF,MAAAA,EAAEG,kBACFhB,KAAKiB,aAAAA;AAKD,YAAAC,IAAUlB,KAAKmB,QAAQC,iBAAeC,EAAEC,QAAQ;AAEtD,cAAQT,EAAEE,KACT;AAAA,QAAA,KAAK;AAAA,QAgBL,KAAK;AACJf,eAAKuB,cACL;AAAA;AAAA,QAfD,KAAK;AACJV,YAAEG,kBACGhB,KAAAwB,YAAYxB,KAAKmB,SAASM,KAAKC,IAAIR,IAAU,GAAGlB,KAAKmB,QAAQQ,SAAS;AAC3E;AAAA,QACD,KAAK;AACJd,YAAEG,kBACGhB,KAAAwB,YAAYxB,KAAKmB,SAASM,KAAKG,IAAIV,IAAU,GAAG;AACrD;AAAA,QACD,KAAK;AAAA,QACL,KAAK;AACJL,YAAEG,eACEE,GAAAA,KAAW,KAAQlB,KAAA6B,mBAAmB7B,KAAKmB,QAAQD,CAAAA,EAASf;;IAIhE;AAnIE,QAAA;AACEH,WAAA8B,YAAY9B,KAAK+B;;IAEiD;AAAA,EACxE;AAAA,EAGD,WACC;;AAAA,YAAO/B,IAAAA,KAAK8B,cAAL9B,gBAAAA,EAAgBgC;AAAAA,EAAA;AAAA,EAGxB,oBAAAC;AACClC,UAAMkC,kBAAAA,GACDjC,KAAKkC,OACJlC,KAAAkC,KAAK,mBAAmBT,KAAKU,SAASC,SAAS,EAAA,EAAIC,OAAO,GAAG,CAAA,CAAA,KAE9DrC,KAAAsC,iBAAiB,WAAWtC,KAAKY,aAAa;AAAA,EAAA;AAAA,EAGpD,uBACCb;;AAAAA,UAAMwC,wBACDvC,KAAAwC,oBAAoB,WAAWxC,KAAKY,aAAAA,IACzCZ,IAAAA,KAAKyC,sBAALzC,QAAAA,EAAAA;AAAAA,EAAyB;AAAA,EAG1B,eACCA;AAAAA,SAAK0C,iBACL1C,KAAK2C,0BAAAA;AAAAA,EAA0B;AAAA,EAGhC,QAAQC;;AAGH,QAFJ7C,MAAM8C,QAAQD,CAEVA,GAAAA,EAAaE,IAAI,OAAA,GAAU;AAExB,YAAAC,IAAYC,MAAMC,QAAQjD,KAAKG,SAASH,KAAKG,MAAM+C,KAAK,GAAOlD,IAAAA,KAAKG;AACrEH,OAAAA,IAAAA,KAAA8B,cAAA9B,QAAAA,EAAWmD,aAAaJ,IAIzB/C,KAAKC,YAAYD,KAAKoD,cAAcpD,KAAKW,mBAC5CX,KAAKqD;IACN;AAAA,EACD;AAAA,EAGO,gBACP;AAAA,QAAIrD,KAAKI,OAAO;AACT,YAAAkD,IAAiBN,MAAMC,QAAQjD,KAAKG,KAAAA,IAASH,KAAKG,QAAQ,CAAA;AAC3DH,WAAAmB,QAAQoC,QAAclC,CAAAA,MAAAA,EAAEmC,WAAWF,EAAexC,SAASO,EAAElB,KAC7DH,CAAAA,GAAAA,KAAAQ,aACJ8C,EAAe3B,SAAS,IACrB3B,KAAKmB,QACJsC,OAAYpC,CAAAA,MAAAiC,EAAexC,SAASO,EAAElB,KAAAA,CAAAA,EACtCuD,IAASrC,CAAAA,MAAAA,EAAEhB,OACX6C,KAAK,IAAA,IACNlD,KAAKE;AAAAA,IAAA,OACH;AACA,YAAAyD,IAAiB3D,KAAKmB,QAAQyC,YAAUvC,EAAElB,UAAUH,KAAKG,KAC1DH;AAAAA,WAAAQ,cAAamD,uBAAgBtD,UAASL,KAAKE;AAAAA,IAAA;AAAA,EACjD;AAAA,EAGO;AACPF,SAAKmB,QAAQoC,QAAQ,CAACM,GAAQC;AACtBD,QAAAE,aAAa,QAAQ,QACvBF,GAAAA,EAAO3B,OACX2B,EAAO3B,KAAK,GAAGlC,KAAKkC,EAAAA,WAAa4B,MAElCD,EAAOG,WAAAA;AACD,YAAAV,IAAiBN,MAAMC,QAAQjD,KAAKG,SAASH,KAAKG,QAAQ;AAEzD0D,QAAAE,aACN,iBACAE,OAAOjE,KAAKI,QAAQkD,EAAexC,SAAS+C,EAAO1D,KAAS0D,IAAAA,EAAO1D,UAAUH,KAAKG,KAAAA,CAAAA;AAAAA,IACnF;EACA;AAAA,EAGF,MAAA;AACC,UAAM+D,IAAYlE,KAAKmE,WAAWC,cAAc;AAChD,QAAKF,CAAAA,KAAAA,CAAclE,KAAKqE,GAAI;AAG5B,UAAMC,IAAkBC,OAAOC,cAAcN,EAAUO,sBAAAA,EAAwBC,SAAS;AACxF1E,SAAKqE,GAAGM,MAAMC,YAAY,GAAGN,CAE7BtE,MAAAA,KAAKyC,oBAAoBoC,EAAWX,GAAWlE,KAAKqE,IAAIS,YAAAA;AACjD,cAAAC,GAAEA,MAAGC,EAAYC,IAAAA,MAAAA,EAAgBf,GAAWlE,KAAKqE,IAAI,EAC1Da,WAAW,gBACXC,YAAY,CAACC,EAAO,CAAIC,GAAAA,EAAAA,GAAQC,EAAM,EAAEC,SAAS;AAG3CC,aAAAC,OAAOzF,KAAKqE,GAAGM,OAAO,EAC5Be,MAAM,GAAGX,OACTY,KAAK,GAAGX,OACRY,UAAU,WAAA,CAAA;AAAA,IACV;EACD;AAAA,EAqCM,YAAYzE,GAAwB2C,GAAAA;AACrC,UAAAD,IAAS1C,EAAQ2C;AACvB,QAAID,GAAQ;AACXA,MAAAA,EAAOgC,MAAAA;AACP,YAAMC,IAAW9F,KAAKmE,WAAWC,cAAc,UAAA;AACrC0B,MAAAA,KAAAA,QAAAA,EAAA/B,aAAa,yBAAyBF,EAAO3B;AAAAA,IAAE;AAAA,EAC1D;AAAA,EAGD,MAAA,aAA2B6D,IAAS,IAAA;AACnC/F,SAAKO,SAAS,IAAA,MACRP,KAAKgG,gBAEXhG,KAAKiG,oBACLjG,KAAK2C,0BAAAA;AAEL,UAAMxB,IAAU6B,MAAMkD,KAAKlG,KAAKqE,GAAG8B,iBAAiB,iBAC9CC,CAAAA,GAAAA,IAAgBpG,KAAKI,QAAQ,IAAIe,EAAQC,UAAeC,CAAAA,MAAAA,EAAEgF,aAAa,OAAA,MAAarG,KAAKG,KAC/FH;AAAAA,SAAKwB,YAAYL,GAASM,KAAKG,IAAIwE,GAAe,CAAA,CAAA,GAC9CL,UAAaO,eAAAA;AAAAA,EAAe;AAAA,EAGzB;;AACPtG,SAAKO,SAAAA,KACLP,IAAAA,KAAKyC,sBAALzC,QAAAA,EAAAA;AACA,UAAM8F,IAAW9F,KAAKmE,WAAWC,cAA2B,UAAA;AAC5D0B,mBAAUS,gBAAgB,0BAC1BT,eAAUD;AAAAA,EAAM;AAAA,EAGT,mBAAmB1F,GAAAA;;AAE1B,QADAH,KAAKW,kBAAAA,IACDX,KAAKI,OAAO;AACf,YAAMyD,IAAS7D,KAAKmB,QAAQyC,KAAUvC,CAAAA,MAAAA,EAAElB,UAAUA;AAClD,UAAK0D,CAAAA,EAAQ;AAENA,QAAAL,WAAAA,CAAYK,EAAOL;AACtB,UAAAF,IAAiBN,MAAMC,QAAQjD,KAAKG,KAAAA,IAAS,IAAIH,KAAKG,KAAAA,IAAS;AAGjDmD,UADdO,EAAOL,WACO,CAAIF,GAAAA,GAAgBnD,KAEpBmD,EAAeG,OAAY+C,CAAAA,MAAAA,MAAMrG,CAAAA,GAGnDH,KAAKG,QAAQmD,GAERtD,KAAAQ,aACJ8C,EAAe3B,SAAS,IACrB3B,KAAKmB,QACJsC,OAAYpC,CAAAA,MAAAiC,EAAexC,SAASO,EAAElB,QACtCuD,IAASrC,CAAAA,MAAAA,EAAEhB,KACX6C,EAAAA,KAAK,QACNlD,KAAKE,aAETF,KAAKyG,eAAenD,CAAAA;AAAAA,IAAc,MAElCtD,MAAKmB,QAAQoC,QAAQlC,OAAMA,EAAEmC,WAAWnC,EAAElB,UAAUA,CACpDH,GAAAA,KAAKG,QAAQA,GACRH,KAAAQ,eAAaR,IAAAA,KAAKmB,QAAQyC,KAAKvC,OAAKA,EAAElB,UAAUA,CAAQE,MAA3CL,gBAAAA,EAA2CK,UAASL,KAAKE,aAC3EF,KAAKyG,eAAetG,CACpBH,GAAAA,KAAKuB;AAGNvB,SAAK2C,0BAAAA,GACL3C,KAAKqD,cAAc;AAAA,EAAA;AAAA,EAGZ,eAAelD,GAAAA;AACtBH,SAAKS,UAAU,IACfT,KAAKU,oBAAoB,IAEpBV,KAAA0G,cACJ,IAAIC,YAAiD,UAAU,EAC9DC,QAAQ,EAAEzG,YACV0G,SAAS,IACTC,aAKG9G,CAAAA,CAAAA,GAAAA,KAAA0G,cAAc,IAAIK,MAAM,UAAU,EAAEF,SAAAA;EAAgB;AAAA,EAGnD;;AACN,UAAMG,IAAUhH,KAAKI,QAAS4C,CAAAA,MAAMC,QAAQjD,KAAKG,KAAAA,KAAUH,KAAKG,MAAMwB,WAAW,KAAK3B,KAAKG;AAY3F,WAVKH,KAAAS,UAAAA,EAAYT,KAAKC,YAAY+G,IAE7BhH,KAAKS,WAITT,KAAKU,oBAAoB,KACpBV,IAAAA,KAAA8B,cAAA9B,QAAAA,EAAWiH,YAAY,QAJ5BjH,KAAKU,oBAAoB,6BACpBV,IAAAA,KAAA8B,cAAA9B,QAAAA,EAAWiH,YAAY,EAAEC,iBAAsB,GAAA,4BAA4BlH,KAAKmH,YAM/EnH,KAAKS;AAAAA,EAAA;AAAA,EAGN;AACA,UAAA2G,IAAQpH,KAAKqD,cAaZ;AAAA,WAAA,CAXF+D,KAASpH,KAAKC,aAElBD,KAAKmH,SAASlH,WAAAA,IACdD,KAAKmH,SAASb,kBAGTtG,KAAKO,UACTP,KAAKiB,aAAa,EAAA,IAIbmG;AAAAA,EAAA;AAAA,EAGD,kBAAkBC,GACxBrH;;AAAAA,SAAKU,oBAAoB2G,IACpBrH,IAAAA,KAAA8B,cAAA9B,QAAAA,EAAWiH,YAAYI,IAAU,EAAEC,aAAa,GAAA,IAAS,CAAC,GAAGD,GAASrH,KAAKmH;AAAAA,EAAQ;AAAA,EAGlF,QACNnH;;AAAAA,SAAKG,QAAQ,IACbH,KAAKQ,aAAaR,KAAKE,aACvBF,KAAKS,UAAU,IACfT,KAAKU,oBAAoB,KACpBV,IAAAA,KAAA8B,cAAA9B,QAAAA,EAAWiH,YAAY,KAC5BjH,KAAKmB,QAAQoC,QAAclC,CAAAA,MAAAA,EAAEmC,WAAW,EAAA;AAAA,EAAM;AAAA,EAG/C,SAAA+D;AACQ,WAAAC;AAAAA;AAAAA;AAAAA,aAGIxH,KAAKyH,IAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,qBAKGzH,KAAKO,MAAAA;AAAAA;AAAAA;AAAAA,qBAGLP,KAAKC,QAAAA;AAAAA,cACZD,KAAKK,KAAAA;AAAAA,oBACCL,KAAKE,WAAAA;AAAAA,cACXF,KAAKQ,UAAAA;AAAAA,iBACFR,KAAKC,QAAAA;AAAAA,aACTD,KAAKM,QAAQN,KAAKU,iBAAAA;AAAAA,eAChBV,KAAKS,OAAAA;AAAAA;AAAAA,cAEN,MAAOT,KAAKO,SAASP,KAAKuB,cAAAA,IAAkBvB,KAAKiB,aAAa,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAM5DjB,KAAKO,MAAAA;AAAAA,cACPP,KAAKuB,aAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,4BAQSvB,KAAKI,KAAAA;AAAAA,aACpBsH,EAAS,EAChB,sDAAA,IACAC,QAAAA,CAAS3H,KAAKO,OAAAA,CAAAA,CAAAA;AAAAA,OAEbqH,EAAM,EAAEC,SAASC,EAAcC,IAAIH,MAAMI,QAAQC,UAAAA,CAAAA,CAAAA;AAAAA,cACzCpH,OACT;;AAAA,YAAMqH,IAAYrH,GACZsH,KAAYD,IAAAA,EAAUtB,WAAVsB,gBAAAA,EAAkB/H;AAChCgI,MAAAA,KACHnI,KAAK6B,mBAAmBsG,CAAS;AAAA,IAAA,CAAA;AAAA;AAAA;AAAA,oBAKpB,MACbnI;AAAAA,WAAK0C,cACL1C,GAAAA,KAAK2C,0BAA0B;AAAA,IAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAC/B;AAAA;AAtWM/C,EAYLwI,iBAAAA,IAIqBC,EAAA,CAA3BC,EAAS,EAAEC,MAAMtE,OAAAA,CAAAA,CAAAA,GAhBNrE,EAgBgB4I,WAAA,QAAA,CAAA,GACgBH,EAAA,CAA3CC,EAAS,EAAEC,MAAME,SAASC,SAAAA,GAjBf9I,CAAAA,CAAAA,GAAAA,EAiBgC4I,WAAA,YAAA,CAAA,GAChBH,EAAA,CAA3BC,EAAS,EAAEC,MAAMtE,OAlBNrE,CAAAA,CAAAA,GAAAA,EAkBgB4I,WAAA,eAAA,CAAA,GACeH,EAAA,CAA1CC,EAAS,EAAEC,MAAMtE,QAAQyE,YAnBd9I,CAAAA,CAAAA,GAAAA,EAmB+B4I,WAAA,SAAA,IACdH,EAAA,CAA5BC,EAAS,EAAEC,MAAME,QApBN7I,CAAAA,CAAAA,GAAAA,EAoBiB4I,WAAA,SAAA,CACDH,GAAAA,EAAA,CAA3BC,EAAS,EAAEC,MAAMtE,OAAAA,CAAAA,CAAAA,GArBNrE,EAqBgB4I,WAAA,SAAA,CACAH,GAAAA,EAAA,CAA3BC,EAAS,EAAEC,MAAMtE,OAAAA,CAAAA,CAAAA,GAtBNrE,EAsBgB4I,WAAA,QAAA,CAAA,GAGXH,EAAA,CAAhBM,MAzBW/I,EAyBK4I,WAAA,UAAA,CAAA,GACAH,EAAA,CAAhBM,EA1BW/I,CAAAA,GAAAA,EA0BK4I,WAAA,cAAA,CAAA,GACAH,EAAA,CAAhBM,EA3BW/I,CAAAA,GAAAA,EA2BK4I,WAAA,WAAA,IACWH,EAAA,CAA3BC,EAAS,EAAEC,MAAMtE,OA5BNrE,CAAAA,CAAAA,GAAAA,EA4BgB4I,WAAA,qBAAA,IAEPH,EAAA,CAApBO,EAAM,IAAA,CAAA,GA9BKhJ,EA8BS4I,WAAA,MAAA,CAAA,GACYH,EAAA,CAAhCO,EAAM,gBA/BKhJ,CAAAA,GAAAA,EA+BqB4I,WAAA,YAAA,CAAA,GACiBH,EAAA,CAAjDQ,EAAsB,EAAEC,SAAAA,GAhCblJ,CAAAA,CAAAA,GAAAA,EAgCsC4I,WAAA,WAAA,CAEjCH,GAAAA,EAAA,CAAhBM,EAlCW/I,CAAAA,GAAAA,EAkCK4I,WAAA,mBAAA,IAlCL5I,IAANyI,EAAA,CADNU,EAAc,qBACFnJ;"}
@@ -0,0 +1,56 @@
1
+ "use strict";const r=require("@floating-ui/dom");require("rxjs");const p=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const u=require("./litElement.mixin-CAXeI5RY.cjs");require("./tailwind.mixin-csgxM8P_.cjs");const d=require("./color-D8r6dpWm.cjs");require("./ripple-B_wT0zgD.cjs");const y=require("./theme.interface-Xg5Zi46a.cjs"),h=require("lit"),a=require("lit/decorators.js");var v=Object.defineProperty,m=Object.getOwnPropertyDescriptor,o=(e,t,i,s)=>{for(var n,l=s>1?void 0:s?m(t,i):t,c=e.length-1;c>=0;c--)(n=e[c])&&(l=(s?n(t,i,l):n(l))||l);return s&&l&&v(t,i,l),l};exports.SchmancySelect=class extends u.$LitElement(h.css`
2
+ :host {
3
+ display: block;
4
+ position: relative;
5
+ }
6
+
7
+ [role='listbox'] {
8
+ overflow-y: auto;
9
+ outline: none;
10
+ }
11
+ `){constructor(){super(),this.required=!1,this.placeholder="",this.value="",this.multi=!1,this.label="",this.hint="",this.isOpen=!1,this.valueLabel="",this.isValid=!0,this.validationMessage="",this._userInteracted=!1,this.handleKeyDown=e=>{if(!this.isOpen)return void(["Enter"," ","ArrowDown"].includes(e.key)&&(e.preventDefault(),this.openDropdown(!1)));const t=this.options.findIndex(i=>i.matches(":focus"))??-1;switch(e.key){case"Escape":case"Tab":this.closeDropdown();break;case"ArrowDown":e.preventDefault(),this.focusOption(this.options,Math.min(t+1,this.options.length-1));break;case"ArrowUp":e.preventDefault(),this.focusOption(this.options,Math.max(t-1,0));break;case"Enter":case" ":e.preventDefault(),t>=0&&this.handleOptionSelect(this.options[t].value)}};try{this.internals=this.attachInternals()}catch{}}get form(){var e;return(e=this.internals)==null?void 0:e.form}connectedCallback(){super.connectedCallback(),this.id||(this.id=`schmancy-select-${Math.random().toString(36).substr(2,9)}`),this.addEventListener("keydown",this.handleKeyDown)}disconnectedCallback(){var e;super.disconnectedCallback(),this.removeEventListener("keydown",this.handleKeyDown),(e=this.cleanupPositioner)==null||e.call(this)}firstUpdated(){this.syncSelection(),this.setupOptionsAccessibility()}updated(e){var t;if(super.updated(e),e.has("value")){const i=Array.isArray(this.value)?this.value.join(","):this.value;(t=this.internals)==null||t.setFormValue(i),this.required&&this.hasUpdated&&this._userInteracted&&this.checkValidity()}}syncSelection(){if(this.multi){const e=Array.isArray(this.value)?this.value:[];this.options.forEach(t=>t.selected=e.includes(t.value)),this.valueLabel=e.length>0?this.options.filter(t=>e.includes(t.value)).map(t=>t.label).join(", "):this.placeholder}else{const e=this.options.find(t=>t.value===this.value);this.valueLabel=(e==null?void 0:e.label)||this.placeholder}}setupOptionsAccessibility(){this.options.forEach((e,t)=>{e.setAttribute("role","option"),e.id||(e.id=`${this.id}-option-${t}`),e.tabIndex=-1;const i=Array.isArray(this.value)?this.value:[];e.setAttribute("aria-selected",String(this.multi?i.includes(e.value):e.value===this.value))})}async positionDropdown(){const e=this.renderRoot.querySelector(".trigger");if(!e||!this.ul)return;const t=window.innerHeight-e.getBoundingClientRect().bottom-10;this.ul.style.maxHeight=`${t}px`,this.cleanupPositioner=r.autoUpdate(e,this.ul,async()=>{const{x:i,y:s}=await r.computePosition(e,this.ul,{placement:"bottom-start",middleware:[r.offset(5),r.flip(),r.shift({padding:5})]});Object.assign(this.ul.style,{left:`${i}px`,top:`${s}px`,position:"absolute"})})}focusOption(e,t){const i=e[t];if(i){i.focus();const s=this.renderRoot.querySelector(".trigger");s==null||s.setAttribute("aria-activedescendant",i.id)}}async openDropdown(e=!1){this.isOpen=!0,await this.updateComplete,this.positionDropdown(),this.setupOptionsAccessibility();const t=Array.from(this.ul.querySelectorAll('[role="option"]')),i=this.multi?0:t.findIndex(s=>s.getAttribute("value")===this.value);this.focusOption(t,Math.max(i,0)),e&&this.reportValidity()}closeDropdown(){var t;this.isOpen=!1,(t=this.cleanupPositioner)==null||t.call(this);const e=this.renderRoot.querySelector(".trigger");e==null||e.removeAttribute("aria-activedescendant"),e==null||e.focus()}handleOptionSelect(e){var t;if(this._userInteracted=!0,this.multi){const i=this.options.find(n=>n.value===e);if(!i)return;i.selected=!i.selected;let s=Array.isArray(this.value)?[...this.value]:[];s=i.selected?[...s,e]:s.filter(n=>n!==e),this.value=s,this.valueLabel=s.length>0?this.options.filter(n=>s.includes(n.value)).map(n=>n.label).join(", "):this.placeholder,this.dispatchChange(s)}else this.options.forEach(i=>i.selected=i.value===e),this.value=e,this.valueLabel=((t=this.options.find(i=>i.value===e))==null?void 0:t.label)||this.placeholder,this.dispatchChange(e),this.closeDropdown();this.setupOptionsAccessibility(),this.checkValidity()}dispatchChange(e){this.isValid=!0,this.validationMessage="",this.dispatchEvent(new CustomEvent("change",{detail:{value:e},bubbles:!0,composed:!0})),this.dispatchEvent(new Event("change",{bubbles:!0}))}checkValidity(){var t,i;const e=this.multi?!Array.isArray(this.value)||this.value.length===0:!this.value;return this.isValid=!(this.required&&e),this.isValid?(this.validationMessage="",(t=this.internals)==null||t.setValidity({})):(this.validationMessage="Please select an option.",(i=this.internals)==null||i.setValidity({valueMissing:!0},"Please select an option.",this.inputRef)),this.isValid}reportValidity(){const e=this.checkValidity();return!e&&this.required&&(this.inputRef.required=!0,this.inputRef.reportValidity(),this.isOpen||this.openDropdown(!1)),e}setCustomValidity(e){var t;this.validationMessage=e,(t=this.internals)==null||t.setValidity(e?{customError:!0}:{},e,this.inputRef)}reset(){var e;this.value="",this.valueLabel=this.placeholder,this.isValid=!0,this.validationMessage="",(e=this.internals)==null||e.setValidity({}),this.options.forEach(t=>t.selected=!1)}render(){return h.html`
12
+ <div class="relative">
13
+ <schmancy-input
14
+ .name=${this.name}
15
+ tabIndex="0"
16
+ class="trigger"
17
+ role="combobox"
18
+ aria-haspopup="listbox"
19
+ aria-expanded=${this.isOpen}
20
+ aria-controls="options"
21
+ aria-autocomplete="none"
22
+ aria-required=${this.required}
23
+ .label=${this.label}
24
+ .placeholder=${this.placeholder}
25
+ .value=${this.valueLabel}
26
+ .required=${this.required}
27
+ .hint=${this.hint||this.validationMessage}
28
+ .error=${!this.isValid}
29
+ readonly
30
+ @click=${()=>this.isOpen?this.closeDropdown():this.openDropdown(!0)}
31
+ ></schmancy-input>
32
+
33
+ <div
34
+ id="overlay"
35
+ class="fixed inset-0"
36
+ ?hidden=${!this.isOpen}
37
+ @click=${this.closeDropdown}
38
+ tabindex="-1"
39
+ aria-hidden="true"
40
+ ></div>
41
+
42
+ <ul
43
+ id="options"
44
+ role="listbox"
45
+ aria-multiselectable=${this.multi}
46
+ class=${p.classMap({"absolute z-[1000] mt-1 w-full rounded-md shadow-sm":!0,hidden:!this.isOpen})}
47
+ ${d.color({bgColor:y.SchmancyTheme.sys.color.surface.container})}
48
+ @click=${e=>{var s;const t=e,i=(s=t.detail)==null?void 0:s.value;i&&this.handleOptionSelect(i)}}
49
+ >
50
+ <slot
51
+ @slotchange=${()=>{this.syncSelection(),this.setupOptionsAccessibility()}}
52
+ ></slot>
53
+ </ul>
54
+ </div>
55
+ `}},exports.SchmancySelect.formAssociated=!0,o([a.property({type:String})],exports.SchmancySelect.prototype,"name",2),o([a.property({type:Boolean,reflect:!0})],exports.SchmancySelect.prototype,"required",2),o([a.property({type:String})],exports.SchmancySelect.prototype,"placeholder",2),o([a.property({type:String,reflect:!0})],exports.SchmancySelect.prototype,"value",2),o([a.property({type:Boolean})],exports.SchmancySelect.prototype,"multi",2),o([a.property({type:String})],exports.SchmancySelect.prototype,"label",2),o([a.property({type:String})],exports.SchmancySelect.prototype,"hint",2),o([a.state()],exports.SchmancySelect.prototype,"isOpen",2),o([a.state()],exports.SchmancySelect.prototype,"valueLabel",2),o([a.state()],exports.SchmancySelect.prototype,"isValid",2),o([a.property({type:String})],exports.SchmancySelect.prototype,"validationMessage",2),o([a.query("ul")],exports.SchmancySelect.prototype,"ul",2),o([a.query("schmancy-input")],exports.SchmancySelect.prototype,"inputRef",2),o([a.queryAssignedElements({flatten:!0})],exports.SchmancySelect.prototype,"options",2),o([a.state()],exports.SchmancySelect.prototype,"_userInteracted",2),exports.SchmancySelect=o([a.customElement("schmancy-select")],exports.SchmancySelect);
56
+ //# sourceMappingURL=select-D3yrgnVD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-D3yrgnVD.cjs","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value: string | string[] = '' // for single-select or multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('schmancy-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\t@state() private _userInteracted = false\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Only check validity if this isn't the first render\n\t\t\t// and the component has been interacted with\n\t\t\tif (this.required && this.hasUpdated && this._userInteracted) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\t\t\tthis.options.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tthis._userInteracted = true\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tlet selectedValues = Array.isArray(this.value) ? [...this.value] : []\n\n\t\t\tif (option.selected) {\n\t\t\t\tselectedValues = [...selectedValues, value]\n\t\t\t} else {\n\t\t\t\tselectedValues = selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.value = selectedValues\n\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\t\tthis.checkValidity()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\tthis.isValid = true // Reset validation on change\n\t\tthis.validationMessage = ''\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\n\t\t// Also dispatch a standard change event for better form compatibility\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }))\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\tconst isEmpty = this.multi ? !Array.isArray(this.value) || this.value.length === 0 : !this.value\n\n\t\tthis.isValid = !(this.required && isEmpty)\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\tconst valid = this.checkValidity()\n\n\t\tif (!valid && this.required) {\n\t\t\t// If invalid, make sure the input shows it\n\t\t\tthis.inputRef.required = true\n\t\t\tthis.inputRef.reportValidity()\n\n\t\t\t// Optionally open the dropdown to show options\n\t\t\tif (!this.isOpen) {\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tthis.internals?.setValidity(message ? { customError: true } : {}, message, this.inputRef)\n\t}\n\n\tpublic reset() {\n\t\tthis.value = ''\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis.internals?.setValidity({})\n\t\tthis.options.forEach(o => (o.selected = false))\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<schmancy-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.hint=${this.hint || this.validationMessage}\n\t\t\t\t\t.error=${!this.isValid}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></schmancy-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","super","this","required","placeholder","value","multi","label","hint","isOpen","valueLabel","isValid","validationMessage","_userInteracted","handleKeyDown","e","includes","key","preventDefault","openDropdown","current","options","findIndex","o","matches","closeDropdown","focusOption","Math","min","length","max","handleOptionSelect","internals","attachInternals","form","connectedCallback","id","random","toString","substr","addEventListener","disconnectedCallback","removeEventListener","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","Array","isArray","join","setFormValue","hasUpdated","checkValidity","selectedValues","forEach","selected","filter","map","selectedOption","find","option","index","setAttribute","tabIndex","String","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","focus","combobox","report","updateComplete","positionDropdown","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","Event","isEmpty","setValidity","valueMissing","inputRef","valid","message","customError","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","formAssociated","__decorateClass","property","type","prototype","Boolean","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
package/dist/select.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-SQOIioEy.cjs");Object.defineProperty(exports,"SchmancySelect",{enumerable:!0,get:()=>e.SchmancySelect});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-D3yrgnVD.cjs");Object.defineProperty(exports,"SchmancySelect",{enumerable:!0,get:()=>e.SchmancySelect});
2
2
  //# sourceMappingURL=select.cjs.map
package/dist/select.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S } from "./select-DRi9CB_N.js";
1
+ import { S } from "./select-C2TJxenH.js";
2
2
  export {
3
3
  S as SchmancySelect
4
4
  };
@@ -0,0 +1,62 @@
1
+ "use strict";const s=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const w=require("./tailwind.mixin-csgxM8P_.cjs"),u=require("lit"),a=require("lit/decorators.js"),E=require("./litElement.mixin-CAXeI5RY.cjs"),v=require("lit/directives/if-defined.js"),f=require("lit/directives/when.js");var S=Object.getOwnPropertyDescriptor;let g=class extends w.TailwindElement(u.css``){render(){return u.html`
2
+ <sch-flex class="absolute top-0 left-0 md:left-[unset] md:right-0">
3
+ <div class="block md:hidden flex-1 justify-start items-start">
4
+ <slot name="back">
5
+ <schmancy-button
6
+ @click=${()=>{this.dispatchEvent(new CustomEvent("dismiss",{bubbles:!0,composed:!0}))}}
7
+ >
8
+ <span class="text-[24px]">&#8592; </span>
9
+ </schmancy-button>
10
+ </slot>
11
+ </div>
12
+
13
+ <div class="hidden md:block flex-1 justify-end items-end">
14
+ <slot name="actions">
15
+ <schmancy-icon-button
16
+ @click=${()=>{this.dispatchEvent(new CustomEvent("dismiss",{bubbles:!0,composed:!0}))}}
17
+ >
18
+ close
19
+ </schmancy-icon-button>
20
+ </slot>
21
+ </div>
22
+ </sch-flex>
23
+ `}};g=((t,e,i,o)=>{for(var c,h=o>1?void 0:o?S(e,i):e,l=t.length-1;l>=0;l--)(c=t[l])&&(h=c(h)||h);return h})([a.customElement("schmancy-sheet-header")],g);var d=(t=>(t.Side="side",t.Bottom="bottom",t.BottomCenter="bottom-center",t.TopRight="top-right",t.BottomRight="bottom-right",t))(d||{});const y="are-you-there-sheet",b="yes-here",x=new class{constructor(){this.bottomSheet=new s.Subject,this.$dismiss=new s.Subject,this.bottomSheet.pipe(s.switchMap(t=>s.forkJoin([s.fromEvent(window,b).pipe(s.takeUntil(s.timer(0)),s.map(e=>e.detail.sheet),s.defaultIfEmpty(void 0)),s.of(t).pipe(s.tap(()=>{window.dispatchEvent(new CustomEvent(y,{detail:{uid:t.uid??t.component.tagName}}))}))])),s.map(([t,e])=>{t||(t=document.createElement("schmancy-sheet"),document.body.appendChild(t)),t.setAttribute("uid",e.uid??e.component.tagName);const i=e.position||(window.innerWidth>=768?"side":"bottom");return t.setAttribute("position",i),t.setAttribute("allowOverlyDismiss",e.allowOverlyDismiss===!1?"false":"true"),e.title&&t.setAttribute("title",e.title),e.persist&&t.setAttribute("persist",e.persist??!1),e.header&&t.setAttribute("header",e.header),document.body.style.overflow="hidden",{target:e,sheet:t}}),s.delay(20),s.filter(({target:t,sheet:e})=>{var i,o;return!t.persist||!((o=(i=e==null?void 0:e.shadowRoot)==null?void 0:i.querySelector("slot"))!=null&&o.assignedElements().find(c=>c.tagName===t.component.tagName))||(e==null||e.setAttribute("open","true"),!1)}),s.tap(({target:t,sheet:e})=>{e==null||e.appendChild(t.component)}),s.delay(1),s.tap(({sheet:t})=>{t==null||t.setAttribute("open","true")}),s.tap(({sheet:t})=>{s.fromEvent(t,"close").pipe(s.take(1)).pipe(s.delay(300)).subscribe(e=>{const i=e.target;i!=null&&i.persist||(i==null||i.remove()),document.body.style.overflow="auto"})})).subscribe(),this.$dismiss.pipe(s.mergeMap(t=>s.forkJoin([s.fromEvent(window,b).pipe(s.takeUntil(s.timer(100)),s.map(e=>e.detail.sheet),s.defaultIfEmpty(void 0)),s.of(t).pipe(s.tap(()=>{window.dispatchEvent(new CustomEvent(y,{detail:{uid:t}}))}))])),s.tap(([t])=>{t==null||t.closeSheet()})).subscribe()}dismiss(t){this.$dismiss.next(t)}open(t){this.bottomSheet.next(t)}};var k=Object.defineProperty,C=Object.getOwnPropertyDescriptor,r=(t,e,i,o)=>{for(var c,h=o>1?void 0:o?C(e,i):e,l=t.length-1;l>=0;l--)(c=t[l])&&(h=(o?c(e,i,h):c(h))||h);return o&&h&&k(e,i,h),h};let n=class extends E.$LitElement(':host{--overlay-color: var(--schmancy-sys-color-surface-dim);--transition-duration: .2s;--transition-timing: ease-in-out;--sheet-radius: 0;--max-height: 100vh}.sheet{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;visibility:visible;transition:visibility var(--transition-duration) var(--transition-timing)}.sheet[aria-hidden=true]{visibility:hidden;pointer-events:none}.sheet[aria-hidden=true] .content{transform:translateY(100%)}.sheet[aria-hidden=true] .content[data-position=side]{transform:translate(100%)}.sheet[aria-hidden=true] .overlay{opacity:0}.overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--overlay-color);opacity:.8;transition:opacity var(--transition-duration) var(--transition-timing)}.content{z-index:1;transition:transform var(--transition-duration) var(--transition-timing);overflow:hidden}.content[data-position=side]{height:100vh;height:100%;min-width:320px;max-width:90vw;width:fit-content;margin-left:auto}.content[data-position=side] #body{max-height:100vh}.content[data-position=bottom]{width:100%;margin-top:auto;border-radius:16px 16px 0 0;max-height:90vh}.content[data-position=bottom] #body{max-height:90vh}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}[data-position=bottom]:before{content:"";position:absolute;top:8px;left:50%;transform:translate(-50%);width:36px;height:4px;background-color:var(--schmancy-sys-color-surface-onVariant);opacity:.3;border-radius:2px;z-index:10}'){constructor(){super(...arguments),this.open=!1,this.header="visible",this.position=d.Side,this.persist=!1,this.allowOverlayDismiss=!0,this.preventBackdropClick=!1,this.title="",this.animationDuration=200,this.animationEasing="ease-in-out",this.focusAttribute="autofocus",this.lastFocusedElement=null,this.startY=0,this.currentY=0,this.resizeObserver=null,this.handleFocusIn=t=>{var e;(e=this.sheet)!=null&&e.contains(t.target)||this.focus()},this.handleScroll=()=>{},this.handleTouchStart=t=>{this.position===d.Bottom&&(this.startY=t.touches[0].clientY,this.currentY=this.startY)},this.handleTouchMove=t=>{if(this.position===d.Bottom){this.currentY=t.touches[0].clientY;const e=this.currentY-this.startY;e>0&&(t.currentTarget.style.transform=`translateY(${e}px)`,t.preventDefault())}},this.handleTouchEnd=t=>{if(this.position===d.Bottom){const e=t.currentTarget,i=this.currentY-this.startY;e.style.transform="",i>Math.min(100,.3*e.offsetHeight)&&this.closeSheet()}}}onOpenChange(t,e){var i;e?(this.lastFocusedElement=document.activeElement,this.addFocusTrap(),this.focus(),this.fireEvent("open")):(this.removeFocusTrap(),(i=this.lastFocusedElement)==null||i.focus(),this.lastFocusedElement=null),this.updateCssVariables()}connectedCallback(){super.connectedCallback(),this.setupEventListeners(),this.resizeObserver=new ResizeObserver(()=>{this.open&&this.updateSheetDimensions()}),this.resizeObserver.observe(document.body),this.updateCssVariables()}firstUpdated(){var t;(t=this.bodyElement)==null||t.addEventListener("scroll",this.handleScroll,{passive:!0})}updated(t){(t.has("animationDuration")||t.has("animationEasing"))&&this.updateCssVariables()}disconnectedCallback(){var t,e;super.disconnectedCallback(),this.disconnecting.next(!0),(t=this.bodyElement)==null||t.removeEventListener("scroll",this.handleScroll),(e=this.resizeObserver)==null||e.disconnect()}updateCssVariables(){this.style.setProperty("--transition-duration",`${this.animationDuration}ms`),this.style.setProperty("--transition-timing",this.animationEasing)}setupEventListeners(){const t=s.fromEvent(window,"popstate").pipe(s.tap(o=>{o.preventDefault(),this.closeSheet()})),e=s.fromEvent(window,"keyup").pipe(s.tap(o=>{o.key!=="Escape"||this.sheetContainsFocus()||this.closeSheet()})),i=s.fromEvent(window,y).pipe(s.tap(o=>{o.detail.uid===this.uid&&this.announcePresence()}));s.merge(t,e,i).pipe(s.takeUntil(this.disconnecting)).subscribe()}sheetContainsFocus(){var t;return((t=this.sheet)==null?void 0:t.contains(document.activeElement))??!1}announcePresence(){this.dispatchEvent(new CustomEvent(b,{detail:{sheet:this},bubbles:!0,composed:!0}))}addFocusTrap(){document.addEventListener("focusin",this.handleFocusIn)}removeFocusTrap(){document.removeEventListener("focusin",this.handleFocusIn)}setIsSheetShown(t){var e,i;(e=this.sheet)==null||e.setAttribute("aria-hidden",String(!t)),(i=this.sheet)==null||i.setAttribute("aria-modal",String(t))}closeSheet(){const t=new CustomEvent("before-close",{bubbles:!0,composed:!0,cancelable:!0});this.dispatchEvent(t)&&(this.open=!1,this.fireEvent("close"))}updateSheetDimensions(){var t;if(this.position===d.Bottom){const e=(t=this.shadowRoot)==null?void 0:t.querySelector(".content");e&&(e.style.maxHeight=.9*window.innerHeight+"px")}}getFocusElement(){var e;if(this.initialFocusSelector){const i=(e=this.shadowRoot)==null?void 0:e.querySelector(this.initialFocusSelector);if(i)return i}const t=`[${this.focusAttribute}]`;return this.assignedElements.find(i=>i.matches(t)||i.querySelector(t))??null}focus(){var t;(t=this.getFocusElement())==null||t.focus()}fireEvent(t,e={}){this.dispatchEvent(new CustomEvent(t,{bubbles:!0,composed:!0,detail:e}))}render(){return u.html`
24
+ <div
25
+ class="sheet"
26
+ role="dialog"
27
+ aria-labelledby=${v.ifDefined(this.title?"sheet-title":this.ariaLabel?"sheet-aria-label":void 0)}
28
+ aria-describedby=${v.ifDefined(this.ariaDescribedBy)}
29
+ aria-hidden=${!this.open}
30
+ aria-modal=${this.open}
31
+ >
32
+ ${f.when(this.ariaLabel&&!this.title,()=>u.html`<span id="sheet-aria-label" class="sr-only">${this.ariaLabel}</span>`)}
33
+
34
+ <div
35
+ class="overlay"
36
+ @click=${t=>{t.stopPropagation(),this.allowOverlayDismiss&&!this.preventBackdropClick&&this.closeSheet()}}
37
+ ></div>
38
+
39
+ <schmancy-grid
40
+ @touchstart=${this.handleTouchStart}
41
+ @touchmove=${this.handleTouchMove}
42
+ @touchend=${this.handleTouchEnd}
43
+ rows=${this.header==="hidden"?"1fr":"auto 1fr"}
44
+ class="content w-full"
45
+ data-position=${this.position}
46
+ >
47
+ ${f.when(this.header!=="hidden",()=>u.html`<schmancy-sheet-header
48
+ class="sticky top-0 z-50 w-full"
49
+ @dismiss=${t=>{t.stopPropagation(),this.closeSheet()}}
50
+ id="sheet-title"
51
+ title=${this.title}
52
+ ></schmancy-sheet-header>`)}
53
+
54
+ <schmancy-surface rounded="left" fill="all" id="body" class="overflow-hidden" type="surface">
55
+ <schmancy-scroll>
56
+ <slot></slot>
57
+ </schmancy-scroll>
58
+ </schmancy-surface>
59
+ </schmancy-grid>
60
+ </div>
61
+ `}};var m,p;r([a.property({type:String,reflect:!0})],n.prototype,"uid",2),r([a.property({type:Boolean,reflect:!0})],n.prototype,"open",2),r([a.property({type:String,reflect:!0})],n.prototype,"header",2),r([a.property({type:String,reflect:!0})],n.prototype,"position",2),r([a.property({type:Boolean,reflect:!0})],n.prototype,"persist",2),r([a.property({type:Boolean,reflect:!0})],n.prototype,"allowOverlayDismiss",2),r([a.property({type:Boolean})],n.prototype,"preventBackdropClick",2),r([a.property({type:String,reflect:!0})],n.prototype,"title",2),r([a.property({type:String})],n.prototype,"ariaLabel",2),r([a.property({type:String})],n.prototype,"ariaDescribedBy",2),r([a.property({type:String})],n.prototype,"initialFocusSelector",2),r([a.property({type:Number})],n.prototype,"animationDuration",2),r([a.property({type:String})],n.prototype,"animationEasing",2),r([a.property()],n.prototype,"focusAttribute",2),r([a.query(".sheet")],n.prototype,"sheet",2),r([a.query("#body")],n.prototype,"bodyElement",2),r([a.queryAssignedElements({flatten:!0})],n.prototype,"assignedElements",2),r([(m="open",(t,e)=>{const{willUpdate:i}=t;p=Object.assign({waitUntilFirstUpdate:!1},p),t.willUpdate=function(o){if(i.call(this,o),o.has(m)){const c=o.get(m),h=this[m];c!==h&&(p!=null&&p.waitUntilFirstUpdate&&!this.hasUpdated||this[e].call(this,c,h))}}})],n.prototype,"onOpenChange",1),n=r([a.customElement("schmancy-sheet")],n),exports.SchmancySheetPosition=d,exports.SheetHereMorty=b,exports.SheetWhereAreYouRicky=y,exports.sheet=x;
62
+ //# sourceMappingURL=sheet-CwzonocJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet-CwzonocJ.cjs","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">&#8592; </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\tfilter,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n\t/**\n\t * @deprecated use bottom instead\n\t */\n\tBottomCenter = 'bottom-center',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tTopRight = 'top-right',\n\t/**\n\t * @deprecated use side instead\n\t */\n\tBottomRight = 'bottom-right',\n}\n\ntype BottomSheeetTarget = {\n\tcomponent: HTMLElement\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tallowOverlyDismiss?: boolean\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n}\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet: SchmancySheet\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\tconstructor() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(0)),\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid: target.uid ?? target.component.tagName },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tmap(([sheet, target]) => {\n\t\t\t\t\tconsole.log(sheet, target)\n\t\t\t\t\tif (!sheet) {\n\t\t\t\t\t\t// if sheet is not found, create it\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tdocument.body.appendChild(sheet)\n\t\t\t\t\t}\n\t\t\t\t\tsheet.setAttribute('uid', target.uid ?? target.component.tagName)\n\n\t\t\t\t\t// **Use the dynamic position function here**\n\t\t\t\t\tconst position = target.position || getPosition() // Use target.position if it's set, otherwise determine based on screen size\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tsheet.setAttribute('allowOverlyDismiss', target.allowOverlyDismiss === false ? 'false' : 'true')\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', target.persist ?? false)\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\tfilter(({ target, sheet }) => {\n\t\t\t\t\t// if the sheet has already the component, just show it\n\t\t\t\t\tif (\n\t\t\t\t\t\ttarget.persist &&\n\t\t\t\t\t\tsheet?.shadowRoot\n\t\t\t\t\t\t\t?.querySelector('slot')\n\t\t\t\t\t\t\t?.assignedElements()\n\t\t\t\t\t\t\t.find(e => e.tagName === target.component.tagName)\n\t\t\t\t\t) {\n\t\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t\t\treturn false\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true // if the sheet does not have the component, continue to the next step\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.appendChild(target.component)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\t\t\t\t}),\n\t\t\t\ttap(({ sheet }) => {\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(e => {\n\t\t\t\t\t\t\tconst target = e.target as SchmancySheet\n\t\t\t\t\t\t\tconsole.log(target)\n\n\t\t\t\t\t\t\tif (!target?.persist) target?.remove()\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)), // Some people say why 10? I say why not?\n\t\t\t\t\t\t\tmap(e => e.detail.sheet),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(SheetWhereAreYouRicky, { detail: { uid } }))\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([sheet]) => {\n\t\t\t\t\tsheet?.closeSheet()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tdismiss(uid: string) {\n\t\tthis.$dismiss.next(uid)\n\t}\n\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n}\nexport const sheet = new BottomSheetService()\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { fromEvent, merge, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n} from './sheet.service'\n\n/**\n * `<schmancy-sheet>` component\n *\n * A modal sheet component that can be positioned at the bottom or side of the viewport.\n * Supports customizable animations, focus management, and accessibility features.\n *\n * @element schmancy-sheet\n * @fires before-close - Fired before the sheet begins closing (cancelable)\n * @fires close - Fired when the sheet has closed\n * @fires open - Fired when the sheet has opened\n */\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t/** Unique identifier for the sheet */\n\t@property({ type: String, reflect: true }) uid!: string\n\n\t/** Controls whether the sheet is open or closed */\n\t@property({ type: Boolean, reflect: true }) open = false\n\n\t/** Controls visibility of the header section */\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\n\t/** Position of the sheet */\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\n\t/** Whether the sheet persists after closing */\n\t@property({ type: Boolean, reflect: true }) persist = false\n\n\t/** Whether clicking the overlay dismisses the sheet */\n\t@property({ type: Boolean, reflect: true }) allowOverlayDismiss = true\n\n\t/** Prevents closing by backdrop click, even if allowOverlayDismiss is true */\n\t@property({ type: Boolean }) preventBackdropClick = false\n\n\t/** Title displayed in the header */\n\t@property({ type: String, reflect: true }) title = ''\n\n\t/** Accessible label for the sheet (for screen readers) */\n\t@property({ type: String }) ariaLabel: string\n\n\t/** ARIA describedby attribute value */\n\t@property({ type: String }) ariaDescribedBy?: string\n\n\t/** Custom selector to specify which element receives focus when opened */\n\t@property({ type: String }) initialFocusSelector?: string\n\n\t/** Animation duration in milliseconds */\n\t@property({ type: Number }) animationDuration = 200\n\n\t/** Animation easing function */\n\t@property({ type: String }) animationEasing = 'ease-in-out'\n\n\t/** Attribute to specify which element should receive focus when the sheet opens */\n\t@property() focusAttribute = 'autofocus'\n\n\t/** Ref to the sheet container */\n\t@query('.sheet') private sheet!: HTMLElement\n\n\t/** Ref to the sheet body */\n\t@query('#body') bodyElement!: HTMLElement\n\n\t/** Collection of assigned elements */\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t/** Tracks the element that had focus before the sheet opened */\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t/** For touch interactions */\n\tprivate startY = 0\n\tprivate currentY = 0\n\n\t/** ResizeObserver instance */\n\tprivate resizeObserver: ResizeObserver | null = null\n\n\t/**\n\t * Lifecycle callback for when the 'open' property changes\n\t */\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.addFocusTrap()\n\t\t\tthis.focus()\n\t\t\tthis.fireEvent('open')\n\t\t} else {\n\t\t\tthis.removeFocusTrap()\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\n\t\t// Update CSS variables when opening/closing\n\t\tthis.updateCssVariables()\n\t}\n\n\t/**\n\t * Component connected to DOM\n\t */\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\n\t\t// Create resize observer\n\t\tthis.resizeObserver = new ResizeObserver(() => {\n\t\t\tif (this.open) {\n\t\t\t\tthis.updateSheetDimensions()\n\t\t\t}\n\t\t})\n\n\t\tthis.resizeObserver.observe(document.body)\n\n\t\t// Set initial CSS variables\n\t\tthis.updateCssVariables()\n\t}\n\n\t/**\n\t * First update lifecycle callback\n\t */\n\tfirstUpdated() {\n\t\t// Add passive scroll listeners for better performance\n\t\tthis.bodyElement?.addEventListener('scroll', this.handleScroll, { passive: true })\n\t}\n\n\t/**\n\t * Component updated lifecycle callback\n\t */\n\tupdated(changedProps: Map<string, unknown>) {\n\t\tif (changedProps.has('animationDuration') || changedProps.has('animationEasing')) {\n\t\t\tthis.updateCssVariables()\n\t\t}\n\t}\n\n\t/**\n\t * Component disconnected from DOM\n\t */\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t\tthis.bodyElement?.removeEventListener('scroll', this.handleScroll)\n\t\tthis.resizeObserver?.disconnect()\n\t}\n\n\t/**\n\t * Updates CSS custom properties\n\t */\n\tprivate updateCssVariables() {\n\t\tthis.style.setProperty('--transition-duration', `${this.animationDuration}ms`)\n\t\tthis.style.setProperty('--transition-timing', this.animationEasing)\n\t}\n\n\t/**\n\t * Sets up event listeners\n\t */\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button\n\t\tconst popState$ = fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\t// Handle ESC key\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(window, 'keyup').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.sheetContainsFocus()) {\n\t\t\t\t\tthis.closeSheet()\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid) this.announcePresence()\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\t/**\n\t * Check if focus is within the sheet\n\t */\n\tprivate sheetContainsFocus(): boolean {\n\t\treturn this.sheet?.contains(document.activeElement) ?? false\n\t}\n\n\t/**\n\t * Announce presence to the sheet service\n\t */\n\tprivate announcePresence() {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\tdetail: { sheet: 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 * Add focus trap to keep focus within sheet when open\n\t */\n\tprivate addFocusTrap() {\n\t\tdocument.addEventListener('focusin', this.handleFocusIn)\n\t}\n\n\t/**\n\t * Remove focus trap\n\t */\n\tprivate removeFocusTrap() {\n\t\tdocument.removeEventListener('focusin', this.handleFocusIn)\n\t}\n\n\t/**\n\t * Handle focus events to trap focus\n\t */\n\tprivate handleFocusIn = (e: Event) => {\n\t\tif (!this.sheet?.contains(e.target as Node)) {\n\t\t\tthis.focus()\n\t\t}\n\t}\n\n\t/**\n\t * Handle scroll events\n\t */\n\tprivate handleScroll = () => {\n\t\t// Implement scroll handling if needed\n\t}\n\n\t/**\n\t * Updates the aria-hidden and aria-modal attributes\n\t */\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheet?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheet?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\t/**\n\t * Closes the sheet\n\t */\n\tcloseSheet() {\n\t\t// Fire before-close event, allow prevention\n\t\tconst event = new CustomEvent('before-close', {\n\t\t\tbubbles: true,\n\t\t\tcomposed: true,\n\t\t\tcancelable: true,\n\t\t})\n\n\t\tconst allowed = this.dispatchEvent(event)\n\n\t\tif (!allowed) return // User prevented close\n\n\t\tthis.open = false\n\t\tthis.fireEvent('close')\n\t}\n\n\t/**\n\t * Update dimensions based on viewport\n\t */\n\tprivate updateSheetDimensions() {\n\t\tif (this.position === SchmancySheetPosition.Bottom) {\n\t\t\tconst content = this.shadowRoot?.querySelector('.content') as HTMLElement\n\t\t\tif (content) {\n\t\t\t\tcontent.style.maxHeight = `${window.innerHeight * 0.9}px`\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Find the element that should receive focus\n\t */\n\tprivate getFocusElement(): HTMLElement | null {\n\t\t// If initialFocusSelector is provided, use that first\n\t\tif (this.initialFocusSelector) {\n\t\t\tconst element = this.shadowRoot?.querySelector(this.initialFocusSelector) as HTMLElement\n\t\t\tif (element) return element\n\t\t}\n\n\t\t// Otherwise, try to find element with focusAttribute\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\t/**\n\t * Set focus within the sheet\n\t */\n\toverride focus() {\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\t/**\n\t * Fire events with consistent format\n\t */\n\tprivate fireEvent(name: string, detail = {}) {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(name, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t\tdetail,\n\t\t\t}),\n\t\t)\n\t}\n\n\t/**\n\t * Handle touch start for swipe gesture\n\t */\n\tprivate handleTouchStart = (e: TouchEvent) => {\n\t\tif (this.position === SchmancySheetPosition.Bottom) {\n\t\t\tthis.startY = e.touches[0].clientY\n\t\t\tthis.currentY = this.startY\n\t\t}\n\t}\n\n\t/**\n\t * Handle touch move for swipe gesture\n\t */\n\tprivate handleTouchMove = (e: TouchEvent) => {\n\t\tif (this.position === SchmancySheetPosition.Bottom) {\n\t\t\tthis.currentY = e.touches[0].clientY\n\t\t\tconst deltaY = this.currentY - this.startY\n\n\t\t\t// Only allow downward swipes to close\n\t\t\tif (deltaY > 0) {\n\t\t\t\tconst content = e.currentTarget as HTMLElement\n\t\t\t\tcontent.style.transform = `translateY(${deltaY}px)`\n\t\t\t\te.preventDefault()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handle touch end for swipe gesture\n\t */\n\tprivate handleTouchEnd = (e: TouchEvent) => {\n\t\tif (this.position === SchmancySheetPosition.Bottom) {\n\t\t\tconst content = e.currentTarget as HTMLElement\n\t\t\tconst deltaY = this.currentY - this.startY\n\n\t\t\t// Reset transform\n\t\t\tcontent.style.transform = ''\n\n\t\t\t// If dragged down more than 100px or 30% of height, close the sheet\n\t\t\tconst threshold = Math.min(100, content.offsetHeight * 0.3)\n\t\t\tif (deltaY > threshold) {\n\t\t\t\tthis.closeSheet()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render the component\n\t */\n\trender() {\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"sheet\"\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-labelledby=${ifDefined(this.title ? 'sheet-title' : this.ariaLabel ? 'sheet-aria-label' : undefined)}\n\t\t\t\taria-describedby=${ifDefined(this.ariaDescribedBy)}\n\t\t\t\taria-hidden=${!this.open}\n\t\t\t\taria-modal=${this.open}\n\t\t\t>\n\t\t\t\t${when(\n\t\t\t\t\tthis.ariaLabel && !this.title,\n\t\t\t\t\t() => html`<span id=\"sheet-aria-label\" class=\"sr-only\">${this.ariaLabel}</span>`,\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tclass=\"overlay\"\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\tif (this.allowOverlayDismiss && !this.preventBackdropClick) {\n\t\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t></div>\n\n\t\t\t\t<schmancy-grid\n\t\t\t\t\t@touchstart=${this.handleTouchStart}\n\t\t\t\t\t@touchmove=${this.handleTouchMove}\n\t\t\t\t\t@touchend=${this.handleTouchEnd}\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.header !== 'hidden',\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\thtml`<schmancy-sheet-header\n\t\t\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t\t\t@dismiss=${(e: CustomEvent) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t\t\ttitle=${this.title}\n\t\t\t\t\t\t\t></schmancy-sheet-header>`,\n\t\t\t\t\t)}\n\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=\"overflow-hidden\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll>\n\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","bottomSheet","Subject","$dismiss","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","of","target","tap","uid","component","tagName","document","createElement","body","appendChild","setAttribute","position","innerWidth","allowOverlyDismiss","title","persist","header","style","overflow","delay","filter","shadowRoot","querySelector","assignedElements","find","take","subscribe","remove","mergeMap","closeSheet","next","SchmancySheet","$LitElement","super","arguments","open","Side","allowOverlayDismiss","preventBackdropClick","animationDuration","animationEasing","focusAttribute","lastFocusedElement","startY","currentY","resizeObserver","handleFocusIn","contains","focus","handleScroll","handleTouchStart","Bottom","touches","clientY","handleTouchMove","deltaY","currentTarget","transform","preventDefault","handleTouchEnd","content","Math","min","offsetHeight","_oldValue","newValue","activeElement","addFocusTrap","fireEvent","removeFocusTrap","updateCssVariables","connectedCallback","setupEventListeners","ResizeObserver","updateSheetDimensions","observe","bodyElement","addEventListener","passive","changedProps","has","disconnectedCallback","disconnecting","removeEventListener","disconnect","setProperty","popState$","keyUp$","event","key","sheetContainsFocus","rickyComm$","announcePresence","merge","isShown","String","cancelable","maxHeight","innerHeight","getFocusElement","initialFocusSelector","element","selector","el","matches","name","i","render","ifDefined","ariaLabel","ariaDescribedBy","when","stopPropagation","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","Number","query","queryAssignedElements","flatten","protoOrDescriptor","willUpdate","Object","assign","waitUntilFirstUpdate","call","oldValue","get","hasUpdated"],"mappings":"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"}