@mhmo91/schmancy 0.2.116 → 0.2.118

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 (237) hide show
  1. package/dist/{animated-text-DrH4Miy7.js → animated-text-6DhYKKzt.js} +3 -3
  2. package/dist/{animated-text-DrH4Miy7.js.map → animated-text-6DhYKKzt.js.map} +1 -1
  3. package/dist/{animated-text-DmtCT-2q.cjs → animated-text-C2EvhDmf.cjs} +2 -2
  4. package/dist/{animated-text-DmtCT-2q.cjs.map → animated-text-C2EvhDmf.cjs.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-CmsssAq_.js → area.component-DAry93pl.js} +3 -3
  9. package/dist/{area.component-CmsssAq_.js.map → area.component-DAry93pl.js.map} +1 -1
  10. package/dist/{area.component-Bg1zJKiZ.cjs → area.component-X-1ZwgJL.cjs} +2 -2
  11. package/dist/{area.component-Bg1zJKiZ.cjs.map → area.component-X-1ZwgJL.cjs.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-BFj0YUYW.cjs → autocomplete-BIJ9G0y1.cjs} +2 -2
  14. package/dist/{autocomplete-BFj0YUYW.cjs.map → autocomplete-BIJ9G0y1.cjs.map} +1 -1
  15. package/dist/{autocomplete-BsrWuTsP.js → autocomplete-C_QyhPJw.js} +3 -3
  16. package/dist/{autocomplete-BsrWuTsP.js.map → autocomplete-C_QyhPJw.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-Cb7nmI6P.cjs → checkbox-BkGLOzBe.cjs} +2 -2
  26. package/dist/{checkbox-Cb7nmI6P.cjs.map → checkbox-BkGLOzBe.cjs.map} +1 -1
  27. package/dist/{checkbox-DUP_qnel.js → checkbox-CTRhgYJB.js} +2 -2
  28. package/dist/{checkbox-DUP_qnel.js.map → checkbox-CTRhgYJB.js.map} +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.js +1 -1
  31. package/dist/{chips-CiesiXpI.cjs → chips-B4X5PxUQ.cjs} +2 -2
  32. package/dist/{chips-CiesiXpI.cjs.map → chips-B4X5PxUQ.cjs.map} +1 -1
  33. package/dist/{chips-0hsW-Rxx.js → chips-DjX_Zznh.js} +3 -3
  34. package/dist/{chips-0hsW-Rxx.js.map → chips-DjX_Zznh.js.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-DvTXqD8e.cjs → date-range-CCsKoZUV.cjs} +2 -2
  42. package/dist/{date-range-DvTXqD8e.cjs.map → date-range-CCsKoZUV.cjs.map} +1 -1
  43. package/dist/{date-range-DF_kjOLs.js → date-range-CRJ7wYwK.js} +3 -3
  44. package/dist/{date-range-DF_kjOLs.js.map → date-range-CRJ7wYwK.js.map} +1 -1
  45. package/dist/date-range.cjs +1 -1
  46. package/dist/date-range.js +1 -1
  47. package/dist/{delay-Cmf_vIaJ.js → delay-BkSIN-In.js} +2 -2
  48. package/dist/{delay-Cmf_vIaJ.js.map → delay-BkSIN-In.js.map} +1 -1
  49. package/dist/{delay-DhV8MSPZ.cjs → delay-ttYmIqo7.cjs} +2 -2
  50. package/dist/{delay-DhV8MSPZ.cjs.map → delay-ttYmIqo7.cjs.map} +1 -1
  51. package/dist/delay.cjs +1 -1
  52. package/dist/delay.js +1 -1
  53. package/dist/{divider-4ev5A0v0.cjs → divider-2AVp1yWB.cjs} +2 -2
  54. package/dist/{divider-4ev5A0v0.cjs.map → divider-2AVp1yWB.cjs.map} +1 -1
  55. package/dist/{divider-B7GoicdG.js → divider-C3zQQjqq.js} +3 -3
  56. package/dist/{divider-B7GoicdG.js.map → divider-C3zQQjqq.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-DFHDHleC.cjs → flex-CfGGWirm.cjs} +3 -3
  62. package/dist/flex-CfGGWirm.cjs.map +1 -0
  63. package/dist/{flex-t4F0-R-c.js → flex-CfRUWQWK.js} +13 -13
  64. package/dist/flex-CfRUWQWK.js.map +1 -0
  65. package/dist/{form-dVHTERy3.js → form-BTg8x5QO.js} +2 -2
  66. package/dist/{form-dVHTERy3.js.map → form-BTg8x5QO.js.map} +1 -1
  67. package/dist/{form-D_ShigQq.cjs → form-DPRTjp4Q.cjs} +2 -2
  68. package/dist/{form-D_ShigQq.cjs.map → form-DPRTjp4Q.cjs.map} +1 -1
  69. package/dist/form.cjs +1 -1
  70. package/dist/form.js +1 -1
  71. package/dist/{icon-C3PI8GgN.js → icon-BLvikygg.js} +3 -3
  72. package/dist/{icon-C3PI8GgN.js.map → icon-BLvikygg.js.map} +1 -1
  73. package/dist/{icon-BNyFKp0p.cjs → icon-BfUZ5ZBV.cjs} +2 -2
  74. package/dist/{icon-BNyFKp0p.cjs.map → icon-BfUZ5ZBV.cjs.map} +1 -1
  75. package/dist/{icon-button-D4D5bXCm.cjs → icon-button-BefimCfp.cjs} +2 -2
  76. package/dist/{icon-button-D4D5bXCm.cjs.map → icon-button-BefimCfp.cjs.map} +1 -1
  77. package/dist/{icon-button-Dr_-8Ey5.js → icon-button-OidywZ1U.js} +3 -3
  78. package/dist/{icon-button-Dr_-8Ey5.js.map → icon-button-OidywZ1U.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-_XU4ILwo.js → input-BNIa-xYu.js} +2 -2
  84. package/dist/{input-_XU4ILwo.js.map → input-BNIa-xYu.js.map} +1 -1
  85. package/dist/{input-Bk7EZhOl.cjs → input-CqYkuOF4.cjs} +2 -2
  86. package/dist/{input-Bk7EZhOl.cjs.map → input-CqYkuOF4.cjs.map} +1 -1
  87. package/dist/{input-BHgBONgn.cjs → input-Dq3dT_7p.cjs} +2 -2
  88. package/dist/{input-BHgBONgn.cjs.map → input-Dq3dT_7p.cjs.map} +1 -1
  89. package/dist/{input-BgmQpY14.js → input-igN7Vis2.js} +2 -2
  90. package/dist/{input-BgmQpY14.js.map → input-igN7Vis2.js.map} +1 -1
  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-CCrSL1bZ.cjs → list-C78nnFIZ.cjs} +2 -2
  96. package/dist/{list-CCrSL1bZ.cjs.map → list-C78nnFIZ.cjs.map} +1 -1
  97. package/dist/{list-r6mo_zcT.js → list-CQV0ecrY.js} +2 -2
  98. package/dist/{list-r6mo_zcT.js.map → list-CQV0ecrY.js.map} +1 -1
  99. package/dist/list.cjs +1 -1
  100. package/dist/list.js +1 -1
  101. package/dist/{litElement.mixin-DfYInjJd.js → litElement.mixin-B1ZP2iG4.js} +2 -2
  102. package/dist/{litElement.mixin-DfYInjJd.js.map → litElement.mixin-B1ZP2iG4.js.map} +1 -1
  103. package/dist/{litElement.mixin-CAXeI5RY.cjs → litElement.mixin-DGx3SrGX.cjs} +2 -2
  104. package/dist/{litElement.mixin-CAXeI5RY.cjs.map → litElement.mixin-DGx3SrGX.cjs.map} +1 -1
  105. package/dist/{menu-yboJ8_V4.js → menu-15yMmtd2.js} +3 -3
  106. package/dist/{menu-yboJ8_V4.js.map → menu-15yMmtd2.js.map} +1 -1
  107. package/dist/{menu-B6x8xZng.cjs → menu-DqLKbEXx.cjs} +2 -2
  108. package/dist/{menu-B6x8xZng.cjs.map → menu-DqLKbEXx.cjs.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-gnBrhD_1.cjs → option-BaOmCXP8.cjs} +2 -2
  116. package/dist/{option-gnBrhD_1.cjs.map → option-BaOmCXP8.cjs.map} +1 -1
  117. package/dist/{option-CmZo8fXU.js → option-DleJMgj-.js} +2 -2
  118. package/dist/{option-CmZo8fXU.js.map → option-DleJMgj-.js.map} +1 -1
  119. package/dist/option.cjs +1 -1
  120. package/dist/option.js +1 -1
  121. package/dist/{outlet-BgJ_WOwi.js → outlet-I1IE2wTK.js} +2 -2
  122. package/dist/{outlet-BgJ_WOwi.js.map → outlet-I1IE2wTK.js.map} +1 -1
  123. package/dist/{outlet-CSduKjEi.cjs → outlet-mNvq9oaA.cjs} +2 -2
  124. package/dist/{outlet-CSduKjEi.cjs.map → outlet-mNvq9oaA.cjs.map} +1 -1
  125. package/dist/{payment-card-form-CVW9uWum.cjs → payment-card-form-Cm_-ul4G.cjs} +2 -2
  126. package/dist/{payment-card-form-CVW9uWum.cjs.map → payment-card-form-Cm_-ul4G.cjs.map} +1 -1
  127. package/dist/{payment-card-form-NUTic2b3.js → payment-card-form-DHmtfa_H.js} +3 -3
  128. package/dist/{payment-card-form-NUTic2b3.js.map → payment-card-form-DHmtfa_H.js.map} +1 -1
  129. package/dist/{radio-group-Bl5nhDCh.js → radio-group-CSKgiPxL.js} +2 -2
  130. package/dist/{radio-group-Bl5nhDCh.js.map → radio-group-CSKgiPxL.js.map} +1 -1
  131. package/dist/{radio-group-CTCnzxmZ.cjs → radio-group-RChAvIUM.cjs} +2 -2
  132. package/dist/{radio-group-CTCnzxmZ.cjs.map → radio-group-RChAvIUM.cjs.map} +1 -1
  133. package/dist/radio-group.cjs +1 -1
  134. package/dist/radio-group.js +1 -1
  135. package/dist/{select-C2TJxenH.js → select-CHXdCR-t.js} +3 -3
  136. package/dist/{select-C2TJxenH.js.map → select-CHXdCR-t.js.map} +1 -1
  137. package/dist/{select-D3yrgnVD.cjs → select-Gbo-xjwq.cjs} +2 -2
  138. package/dist/{select-D3yrgnVD.cjs.map → select-Gbo-xjwq.cjs.map} +1 -1
  139. package/dist/select.cjs +1 -1
  140. package/dist/select.js +1 -1
  141. package/dist/sheet-DcDDkPRG.js +212 -0
  142. package/dist/sheet-DcDDkPRG.js.map +1 -0
  143. package/dist/sheet-OQg2AgBP.cjs +47 -0
  144. package/dist/sheet-OQg2AgBP.cjs.map +1 -0
  145. package/dist/sheet.cjs +1 -1
  146. package/dist/sheet.js +1 -1
  147. package/dist/{slider-2mhXBUIM.js → slider-njrfDqrk.js} +3 -3
  148. package/dist/{slider-2mhXBUIM.js.map → slider-njrfDqrk.js.map} +1 -1
  149. package/dist/{slider-DCJHcXt1.cjs → slider-rumGp8Bz.cjs} +2 -2
  150. package/dist/{slider-DCJHcXt1.cjs.map → slider-rumGp8Bz.cjs.map} +1 -1
  151. package/dist/slider.cjs +1 -1
  152. package/dist/slider.js +1 -1
  153. package/dist/{spinner-B9JHqmoP.js → spinner-C3JUT7Lx.js} +3 -3
  154. package/dist/{spinner-B9JHqmoP.js.map → spinner-C3JUT7Lx.js.map} +1 -1
  155. package/dist/{spinner-D-vtqMqq.cjs → spinner-DVEN9TFJ.cjs} +2 -2
  156. package/dist/{spinner-D-vtqMqq.cjs.map → spinner-DVEN9TFJ.cjs.map} +1 -1
  157. package/dist/{surface-O_-YGi6T.js → surface-BpQasVOW.js} +2 -2
  158. package/dist/{surface-O_-YGi6T.js.map → surface-BpQasVOW.js.map} +1 -1
  159. package/dist/{surface-DLHFSFU6.cjs → surface-CZayNjQ8.cjs} +2 -2
  160. package/dist/{surface-DLHFSFU6.cjs.map → surface-CZayNjQ8.cjs.map} +1 -1
  161. package/dist/surface.cjs +1 -1
  162. package/dist/surface.js +1 -1
  163. package/dist/{table-CdkLZM2b.cjs → table-BzJFv5qf.cjs} +2 -2
  164. package/dist/{table-CdkLZM2b.cjs.map → table-BzJFv5qf.cjs.map} +1 -1
  165. package/dist/{table-Bvb_ZG7b.js → table-CWRqwAtQ.js} +2 -2
  166. package/dist/{table-Bvb_ZG7b.js.map → table-CWRqwAtQ.js.map} +1 -1
  167. package/dist/table.cjs +1 -1
  168. package/dist/table.js +1 -1
  169. package/dist/{tabs-group-B-KvImY2.cjs → tabs-group-BWmuXV1M.cjs} +2 -2
  170. package/dist/{tabs-group-B-KvImY2.cjs.map → tabs-group-BWmuXV1M.cjs.map} +1 -1
  171. package/dist/{tabs-group-CVZ2SEq3.js → tabs-group-Dsupy-TK.js} +2 -2
  172. package/dist/{tabs-group-CVZ2SEq3.js.map → tabs-group-Dsupy-TK.js.map} +1 -1
  173. package/dist/tabs.cjs +1 -1
  174. package/dist/tabs.js +1 -1
  175. package/dist/tailwind.mixin-C2MUeArS.js +43 -0
  176. package/dist/{tailwind.mixin-BvhzMkqK.js.map → tailwind.mixin-C2MUeArS.js.map} +1 -1
  177. package/dist/tailwind.mixin-UzdLTEsN.cjs +2 -0
  178. package/dist/{tailwind.mixin-csgxM8P_.cjs.map → tailwind.mixin-UzdLTEsN.cjs.map} +1 -1
  179. package/dist/teleport.cjs +1 -1
  180. package/dist/{teleport.component-BRm0yYbM.js → teleport.component-Cf9BZUyf.js} +37 -37
  181. package/dist/{teleport.component-BRm0yYbM.js.map → teleport.component-Cf9BZUyf.js.map} +1 -1
  182. package/dist/{teleport.component-D9xuyN_z.cjs → teleport.component-DElxiimP.cjs} +2 -2
  183. package/dist/{teleport.component-D9xuyN_z.cjs.map → teleport.component-DElxiimP.cjs.map} +1 -1
  184. package/dist/teleport.js +1 -1
  185. package/dist/{textarea-txN6-t64.js → textarea-DZhAzd2-.js} +2 -2
  186. package/dist/{textarea-txN6-t64.js.map → textarea-DZhAzd2-.js.map} +1 -1
  187. package/dist/{textarea-BaTTXEtZ.cjs → textarea-DtP4CN8S.cjs} +2 -2
  188. package/dist/{textarea-BaTTXEtZ.cjs.map → textarea-DtP4CN8S.cjs.map} +1 -1
  189. package/dist/textarea.cjs +1 -1
  190. package/dist/textarea.js +1 -1
  191. package/dist/{theme-button-C2oB9OCM.js → theme-button-B7v53G35.js} +2 -2
  192. package/dist/{theme-button-C2oB9OCM.js.map → theme-button-B7v53G35.js.map} +1 -1
  193. package/dist/{theme-button-qFLBZi0_.cjs → theme-button-XUBpRyVd.cjs} +2 -2
  194. package/dist/{theme-button-qFLBZi0_.cjs.map → theme-button-XUBpRyVd.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-UVrnuMPb.js → theme.component-4tKB3U5D.js} +2 -2
  199. package/dist/{theme.component-UVrnuMPb.js.map → theme.component-4tKB3U5D.js.map} +1 -1
  200. package/dist/{theme.component-C-055F7V.cjs → theme.component-Df85q2pE.cjs} +2 -2
  201. package/dist/{theme.component-C-055F7V.cjs.map → theme.component-Df85q2pE.cjs.map} +1 -1
  202. package/dist/theme.js +1 -1
  203. package/dist/{timezone-DUYp8qD3.js → timezone-C9zQrHBV.js} +3 -3
  204. package/dist/{timezone-DUYp8qD3.js.map → timezone-C9zQrHBV.js.map} +1 -1
  205. package/dist/{timezone-CvS7opKc.cjs → timezone-FYjFkh4S.cjs} +2 -2
  206. package/dist/{timezone-CvS7opKc.cjs.map → timezone-FYjFkh4S.cjs.map} +1 -1
  207. package/dist/{tree-Cxgw_mi9.js → tree-BEsQyzsP.js} +2 -2
  208. package/dist/{tree-Cxgw_mi9.js.map → tree-BEsQyzsP.js.map} +1 -1
  209. package/dist/{tree-DYLlgF1F.cjs → tree-k_BipeY0.cjs} +2 -2
  210. package/dist/{tree-DYLlgF1F.cjs.map → tree-k_BipeY0.cjs.map} +1 -1
  211. package/dist/tree.cjs +1 -1
  212. package/dist/tree.js +1 -1
  213. package/dist/{typewriter-DoGLma1z.cjs → typewriter-B3B8JBRl.cjs} +2 -2
  214. package/dist/{typewriter-DoGLma1z.cjs.map → typewriter-B3B8JBRl.cjs.map} +1 -1
  215. package/dist/{typewriter-DUdvh6VO.js → typewriter-CjgsbmTc.js} +4 -4
  216. package/dist/{typewriter-DUdvh6VO.js.map → typewriter-CjgsbmTc.js.map} +1 -1
  217. package/dist/typewriter.cjs +1 -1
  218. package/dist/typewriter.js +1 -1
  219. package/dist/{typography-BnQJ5TWy.js → typography-BzTRpIGt.js} +2 -2
  220. package/dist/{typography-BnQJ5TWy.js.map → typography-BzTRpIGt.js.map} +1 -1
  221. package/dist/{typography-DFREXmBg.cjs → typography-Cs7PQACq.cjs} +2 -2
  222. package/dist/{typography-DFREXmBg.cjs.map → typography-Cs7PQACq.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/sheet/sheet.d.ts +3 -121
  229. package/types/src/sheet/sheet.service.d.ts +30 -1
  230. package/dist/flex-DFHDHleC.cjs.map +0 -1
  231. package/dist/flex-t4F0-R-c.js.map +0 -1
  232. package/dist/sheet-CwzonocJ.cjs +0 -62
  233. package/dist/sheet-CwzonocJ.cjs.map +0 -1
  234. package/dist/sheet-DHyy-OIH.js +0 -244
  235. package/dist/sheet-DHyy-OIH.js.map +0 -1
  236. package/dist/tailwind.mixin-BvhzMkqK.js +0 -43
  237. package/dist/tailwind.mixin-csgxM8P_.cjs +0 -2
@@ -1 +1 @@
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
+ {"version":3,"file":"radio-group-RChAvIUM.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-CTCnzxmZ.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-RChAvIUM.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-Bl5nhDCh.js";
1
+ import { R as a } from "./radio-group-CSKgiPxL.js";
2
2
  export {
3
3
  a as RadioGroup
4
4
  };
@@ -2,8 +2,8 @@ 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-DfYInjJd.js";
6
- import "./tailwind.mixin-BvhzMkqK.js";
5
+ import { $ as b } from "./litElement.mixin-B1ZP2iG4.js";
6
+ import "./tailwind.mixin-C2MUeArS.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";
@@ -203,4 +203,4 @@ a.formAssociated = !0, o([n({ type: String })], a.prototype, "name", 2), o([n({
203
203
  export {
204
204
  a as S
205
205
  };
206
- //# sourceMappingURL=select-C2TJxenH.js.map
206
+ //# sourceMappingURL=select-CHXdCR-t.js.map
@@ -1 +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":"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"}
1
+ {"version":3,"file":"select-CHXdCR-t.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":"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"}
@@ -1,4 +1,4 @@
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`
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-DGx3SrGX.cjs");require("./tailwind.mixin-UzdLTEsN.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
2
  :host {
3
3
  display: block;
4
4
  position: relative;
@@ -53,4 +53,4 @@
53
53
  </ul>
54
54
  </div>
55
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
56
+ //# sourceMappingURL=select-Gbo-xjwq.cjs.map
@@ -1 +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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"}
1
+ {"version":3,"file":"select-Gbo-xjwq.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-D3yrgnVD.cjs");Object.defineProperty(exports,"SchmancySelect",{enumerable:!0,get:()=>e.SchmancySelect});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-Gbo-xjwq.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-C2TJxenH.js";
1
+ import { S } from "./select-CHXdCR-t.js";
2
2
  export {
3
3
  S as SchmancySelect
4
4
  };
@@ -0,0 +1,212 @@
1
+ import { Subject as E, switchMap as O, forkJoin as x, fromEvent as p, of as b, takeUntil as f, timer as k, map as m, defaultIfEmpty as A, tap as c, delay as y, filter as P, take as F, mergeMap as j, merge as B } from "rxjs";
2
+ import "lit/directives/class-map.js";
3
+ import "lit/directives/style-map.js";
4
+ import { T as H } from "./tailwind.mixin-C2MUeArS.js";
5
+ import { css as T, html as g } from "lit";
6
+ import { customElement as $, property as h, query as U, queryAssignedElements as z } from "lit/decorators.js";
7
+ import { $ as D } from "./litElement.mixin-B1ZP2iG4.js";
8
+ import { when as I } from "lit/directives/when.js";
9
+ var N = Object.getOwnPropertyDescriptor;
10
+ let C = class extends H(T``) {
11
+ render() {
12
+ return g`
13
+ <sch-flex class="absolute top-0 left-0 md:left-[unset] md:right-0">
14
+ <div class="block md:hidden flex-1 justify-start items-start">
15
+ <slot name="back">
16
+ <schmancy-button
17
+ @click=${() => {
18
+ this.dispatchEvent(new CustomEvent("dismiss", { bubbles: !0, composed: !0 }));
19
+ }}
20
+ >
21
+ <span class="text-[24px]">&#8592; </span>
22
+ </schmancy-button>
23
+ </slot>
24
+ </div>
25
+
26
+ <div class="hidden md:block flex-1 justify-end items-end">
27
+ <slot name="actions">
28
+ <schmancy-icon-button
29
+ @click=${() => {
30
+ this.dispatchEvent(new CustomEvent("dismiss", { bubbles: !0, composed: !0 }));
31
+ }}
32
+ >
33
+ close
34
+ </schmancy-icon-button>
35
+ </slot>
36
+ </div>
37
+ </sch-flex>
38
+ `;
39
+ }
40
+ };
41
+ C = ((t, e, s, i) => {
42
+ for (var r, o = i > 1 ? void 0 : i ? N(e, s) : e, d = t.length - 1; d >= 0; d--) (r = t[d]) && (o = r(o) || o);
43
+ return o;
44
+ })([$("schmancy-sheet-header")], C);
45
+ var L = ((t) => (t.Side = "side", t.Bottom = "bottom", t.BottomCenter = "bottom-center", t.TopRight = "top-right", t.BottomRight = "bottom-right", t))(L || {});
46
+ const w = "are-you-there-sheet", S = "yes-here", v = new class {
47
+ constructor() {
48
+ this.bottomSheet = new E(), this.$dismiss = new E(), this.activeSheets = /* @__PURE__ */ new Set(), this.popStateListenerActive = !1, this.setupSheetOpeningLogic(), this.setupSheetDismissLogic(), this.setupPopStateListener();
49
+ }
50
+ setupSheetOpeningLogic() {
51
+ this.bottomSheet.pipe(O((t) => x([p(window, S).pipe(f(k(100)), m((e) => e.detail.sheet), A(void 0)), b(t).pipe(c(() => {
52
+ window.dispatchEvent(new CustomEvent(w, { detail: { uid: t.uid ?? t.component.tagName } }));
53
+ }))])), m(([t, e]) => {
54
+ t || (t = document.createElement("schmancy-sheet"), document.body.appendChild(t)), t.setAttribute("uid", e.uid ?? e.component.tagName), e.lock && t.setAttribute("lock", "true");
55
+ const s = e.position || (window.innerWidth >= 768 ? "side" : "bottom");
56
+ return t.setAttribute("position", s), e.title && t.setAttribute("title", e.title), e.persist && t.setAttribute("persist", e.persist ?? !1), e.header && t.setAttribute("header", e.header), e.handleHistory !== void 0 && t.setAttribute("handleHistory", String(e.handleHistory)), document.body.style.overflow = "hidden", { target: e, sheet: t };
57
+ }), y(20), P(({ target: t, sheet: e }) => {
58
+ var s, i;
59
+ return !t.persist || !((i = (s = e == null ? void 0 : e.shadowRoot) == null ? void 0 : s.querySelector("slot")) != null && i.assignedElements().find((r) => r.tagName === t.component.tagName)) || (e == null || e.setAttribute("open", "true"), !1);
60
+ }), c(({ target: t, sheet: e }) => {
61
+ e == null || e.appendChild(t.component);
62
+ }), y(1), c(({ target: t, sheet: e }) => {
63
+ e == null || e.setAttribute("open", "true");
64
+ const s = t.uid ?? t.component.tagName;
65
+ if (this.activeSheets.add(s), t.handleHistory !== !1) {
66
+ const i = { schmancySheet: !0, uid: s, timestamp: Date.now() };
67
+ history.pushState(i, "", window.location.href);
68
+ }
69
+ }), c(({ sheet: t }) => {
70
+ p(t, "close").pipe(F(1)).pipe(y(300)).subscribe((e) => {
71
+ const s = e.target, i = s.getAttribute("uid");
72
+ i && this.activeSheets.delete(i), s != null && s.persist || (s == null || s.remove()), document.body.style.overflow = "auto";
73
+ });
74
+ })).subscribe();
75
+ }
76
+ setupSheetDismissLogic() {
77
+ this.$dismiss.pipe(j((t) => x([p(window, S).pipe(f(k(100)), m((e) => e.detail.sheet), A(void 0)), b(t).pipe(c(() => {
78
+ window.dispatchEvent(new CustomEvent(w, { detail: { uid: t } }));
79
+ }))])), c(([t, e]) => {
80
+ t && (t.closeSheet(), this.activeSheets.delete(e));
81
+ })).subscribe();
82
+ }
83
+ setupPopStateListener() {
84
+ this.popStateListenerActive || (p(window, "popstate").subscribe((t) => {
85
+ if (this.activeSheets.size > 0) {
86
+ const e = Array.from(this.activeSheets).pop();
87
+ e && (this.dismiss(e), t.state && t.state.schmancySheet && history.pushState({}, "", window.location.href));
88
+ }
89
+ }), this.popStateListenerActive = !0);
90
+ }
91
+ dismiss(t) {
92
+ this.$dismiss.next(t);
93
+ }
94
+ open(t) {
95
+ this.bottomSheet.next(t);
96
+ }
97
+ isOpen(t) {
98
+ return this.activeSheets.has(t);
99
+ }
100
+ closeAll() {
101
+ Array.from(this.activeSheets).forEach((t) => {
102
+ this.dismiss(t);
103
+ });
104
+ }
105
+ }();
106
+ var q = Object.defineProperty, R = Object.getOwnPropertyDescriptor, a = (t, e, s, i) => {
107
+ for (var r, o = i > 1 ? void 0 : i ? R(e, s) : e, d = t.length - 1; d >= 0; d--) (r = t[d]) && (o = (i ? r(e, s, o) : r(o)) || o);
108
+ return i && o && q(e, s, o), o;
109
+ };
110
+ let n = class extends D(":host{--overlay-color: var(--schmancy-sys-color-surface-dim);--transition-timing: cubic-bezier(.16, 1, .3, 1);--transition-duration: .25s;--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}") {
111
+ constructor() {
112
+ super(...arguments), this.open = !1, this.header = "visible", this.position = L.Side, this.persist = !1, this.lock = !1, this.handleHistory = !0, this.title = "", this.focusAttribute = "autofocus", this.lastFocusedElement = null, this.handleFocusIn = (t) => {
113
+ var e;
114
+ (e = this.sheet) != null && e.contains(t.target) || this.focus();
115
+ };
116
+ }
117
+ onOpenChange(t, e) {
118
+ var s;
119
+ e ? (this.lastFocusedElement = document.activeElement, this.addFocusTrap(), this.focus()) : (this.removeFocusTrap(), (s = this.lastFocusedElement) == null || s.focus(), this.lastFocusedElement = null);
120
+ }
121
+ connectedCallback() {
122
+ super.connectedCallback(), this.setupEventListeners();
123
+ }
124
+ disconnectedCallback() {
125
+ super.disconnectedCallback(), this.disconnecting.next(!0);
126
+ }
127
+ setupEventListeners() {
128
+ const t = this.handleHistory ? p(window, "popstate").pipe(c((i) => {
129
+ i.preventDefault(), this.closeSheet();
130
+ })) : b(null).pipe(F(0)), e = p(window, "keyup").pipe(c((i) => {
131
+ i.key !== "Escape" || this.sheetContainsFocus() || this.lock || v.dismiss(this.uid);
132
+ })), s = p(window, w).pipe(c((i) => {
133
+ i.detail.uid === this.uid && this.announcePresence();
134
+ }));
135
+ B(t, e, s).pipe(f(this.disconnecting)).subscribe();
136
+ }
137
+ sheetContainsFocus() {
138
+ var t;
139
+ return ((t = this.sheet) == null ? void 0 : t.contains(document.activeElement)) ?? !1;
140
+ }
141
+ announcePresence() {
142
+ this.dispatchEvent(new CustomEvent(S, { detail: { sheet: this }, bubbles: !0, composed: !0 }));
143
+ }
144
+ addFocusTrap() {
145
+ document.addEventListener("focusin", this.handleFocusIn);
146
+ }
147
+ removeFocusTrap() {
148
+ document.removeEventListener("focusin", this.handleFocusIn);
149
+ }
150
+ setIsSheetShown(t) {
151
+ var e, s;
152
+ (e = this.sheet) == null || e.setAttribute("aria-hidden", String(!t)), (s = this.sheet) == null || s.setAttribute("aria-modal", String(t));
153
+ }
154
+ closeSheet() {
155
+ this.open = !1, this.dispatchEvent(new CustomEvent("close"));
156
+ }
157
+ getFocusElement() {
158
+ const t = `[${this.focusAttribute}]`;
159
+ return this.assignedElements.find((e) => e.matches(t) || e.querySelector(t)) ?? null;
160
+ }
161
+ focus() {
162
+ var t;
163
+ (t = this.getFocusElement()) == null || t.focus();
164
+ }
165
+ render() {
166
+ return g`
167
+ <div class="sheet" role="dialog" aria-labelledby="sheet-title" aria-hidden=${!this.open} aria-modal=${this.open}>
168
+ <div
169
+ class="overlay"
170
+ @click=${(t) => {
171
+ t.stopPropagation(), this.lock || v.dismiss(this.uid);
172
+ }}
173
+ ></div>
174
+ <schmancy-grid
175
+ rows=${this.header === "hidden" ? "1fr" : "auto 1fr"}
176
+ class="content w-full"
177
+ data-position=${this.position}
178
+ >
179
+ ${I(this.header !== "hidden", () => g`<schmancy-sheet-header
180
+ class="sticky top-0 z-50 w-full"
181
+ @dismiss=${(t) => {
182
+ t.stopPropagation(), v.dismiss(this.uid);
183
+ }}
184
+ id="sheet-title"
185
+ title=${this.title}
186
+ ></schmancy-sheet-header>`)}
187
+
188
+ <schmancy-surface rounded="left" fill="all" id="body" class="overflow-auto" type="surface">
189
+ <schmancy-scroll> <slot></slot></schmancy-scroll>
190
+ </schmancy-surface>
191
+ </schmancy-grid>
192
+ </div>
193
+ `;
194
+ }
195
+ };
196
+ var u, l;
197
+ a([h({ type: String, reflect: !0 })], n.prototype, "uid", 2), a([h({ type: Boolean, reflect: !0 })], n.prototype, "open", 2), a([h({ type: String, reflect: !0 })], n.prototype, "header", 2), a([h({ type: String, reflect: !0 })], n.prototype, "position", 2), a([h({ type: Boolean, reflect: !0 })], n.prototype, "persist", 2), a([h({ type: Boolean, reflect: !0 })], n.prototype, "lock", 2), a([h({ type: Boolean, reflect: !0 })], n.prototype, "handleHistory", 2), a([h({ type: String, reflect: !0 })], n.prototype, "title", 2), a([U(".sheet")], n.prototype, "sheet", 2), a([z({ flatten: !0 })], n.prototype, "assignedElements", 2), a([h()], n.prototype, "focusAttribute", 2), a([(u = "open", (t, e) => {
198
+ const { willUpdate: s } = t;
199
+ l = Object.assign({ waitUntilFirstUpdate: !1 }, l), t.willUpdate = function(i) {
200
+ if (s.call(this, i), i.has(u)) {
201
+ const r = i.get(u), o = this[u];
202
+ r !== o && (l != null && l.waitUntilFirstUpdate && !this.hasUpdated || this[e].call(this, r, o));
203
+ }
204
+ };
205
+ })], n.prototype, "onOpenChange", 1), n = a([$("schmancy-sheet")], n);
206
+ export {
207
+ L as S,
208
+ w as a,
209
+ S as b,
210
+ v as s
211
+ };
212
+ //# sourceMappingURL=sheet-DcDDkPRG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet-DcDDkPRG.js","sources":["../src/sheet/header.ts","../src/sheet/sheet.service.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">&#8592; </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import {\n\tdefaultIfEmpty,\n\tdelay,\n\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\tlock?: boolean // Controls both ESC and overlay click dismissal\n\thandleHistory?: boolean // Controls browser back button behavior\n\ttitle?: string\n\theader?: 'hidden' | 'visible'\n}\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\t// Track currently open sheets by uid\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupSheetDismissLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail.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\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\ttarget.lock && sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\t// Use the dynamic position function here\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\ttarget.title && sheet.setAttribute('title', target.title)\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', target.persist ?? false)\n\t\t\t\t\ttarget.header && sheet.setAttribute('header', target.header)\n\n\t\t\t\t\t// Handle history logic if the property exists\n\t\t\t\t\tif (target.handleHistory !== undefined) {\n\t\t\t\t\t\tsheet.setAttribute('handleHistory', String(target.handleHistory))\n\t\t\t\t\t}\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet }\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(({ target, sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tconst uid = target.uid ?? target.component.tagName\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Handle history integration - default to true if not specified\n\t\t\t\t\tconst shouldHandleHistory = target.handleHistory !== false\n\n\t\t\t\t\tif (shouldHandleHistory) {\n\t\t\t\t\t\t// Use history state to track this specific sheet\n\t\t\t\t\t\tconst historyState = {\n\t\t\t\t\t\t\tschmancySheet: true,\n\t\t\t\t\t\t\tuid: uid,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Push a new history state\n\t\t\t\t\t\thistory.pushState(historyState, '', window.location.href)\n\t\t\t\t\t}\n\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\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tconst uid = target.getAttribute('uid')\n\t\t\t\t\t\t\tif (uid) {\n\t\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\t}\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\t}\n\n\t/**\n\t * Sets up the sheet closing/dismissal logic\n\t */\n\tprivate setupSheetDismissLogic() {\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail.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, uid]) => {\n\t\t\t\t\tif (sheet) {\n\t\t\t\t\t\tsheet.closeSheet()\n\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid\n\t */\n\tdismiss(uid: string) {\n\t\tthis.$dismiss.next(uid)\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\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 { when } from 'lit/directives/when.js'\nimport { fromEvent, merge, of, take, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t@query('.sheet') private sheet!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.addFocusTrap()\n\t\t\tthis.focus()\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\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button - only if handleHistory is true\n\t\tconst popState$ = this.handleHistory\n\t\t\t? fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\t\ttap(e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: of(null).pipe(take(0)) // Empty observable if handleHistory is false\n\n\t\t// Handle ESC key - respect allowOverlayDismiss\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(window, 'keyup').pipe(\n\t\t\ttap(event => {\n\t\t\t\t// Only handle ESC key dismissal if allowOverlayDismiss is true\n\t\t\t\tif (event.key === 'Escape' && !this.sheetContainsFocus() && !this.lock) {\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid) 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\tprivate sheetContainsFocus(): boolean {\n\t\treturn this.sheet?.contains(document.activeElement) ?? false\n\t}\n\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\tprivate addFocusTrap() {\n\t\tdocument.addEventListener('focusin', this.handleFocusIn)\n\t}\n\n\tprivate removeFocusTrap() {\n\t\tdocument.removeEventListener('focusin', this.handleFocusIn)\n\t}\n\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\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\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"sheet\" role=\"dialog\" aria-labelledby=\"sheet-title\" aria-hidden=${!this.open} aria-modal=${this.open}>\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.lock) sheet.dismiss(this.uid)\n\t\t\t\t\t}}\n\t\t\t\t></div>\n\t\t\t\t<schmancy-grid\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${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\tsheet.dismiss(this.uid)\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-auto\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll> <slot></slot></schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","render","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","bottomSheet","Subject","$dismiss","activeSheets","Set","popStateListenerActive","setupSheetOpeningLogic","setupSheetDismissLogic","setupPopStateListener","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","of","target","tap","uid","component","tagName","document","createElement","body","appendChild","setAttribute","lock","position","innerWidth","title","persist","header","handleHistory","String","style","overflow","delay","filter","shadowRoot","querySelector","assignedElements","find","add","historyState","schmancySheet","timestamp","Date","now","history","pushState","location","href","take","subscribe","getAttribute","delete","remove","mergeMap","closeSheet","event","size","lastSheet","Array","from","pop","dismiss","state","next","has","forEach","SchmancySheet","$LitElement","super","arguments","open","Side","focusAttribute","lastFocusedElement","handleFocusIn","contains","focus","_oldValue","newValue","activeElement","addFocusTrap","removeFocusTrap","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","popState$","preventDefault","keyUp$","key","sheetContainsFocus","rickyComm$","announcePresence","merge","addEventListener","removeEventListener","isShown","getFocusElement","selector","el","matches","stopPropagation","when","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","query","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","oldValue","get","hasUpdated"],"mappings":"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"}