@mhmo91/schmancy 0.5.35 → 0.5.37

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 (385) hide show
  1. package/ai/content-drawer.md +114 -140
  2. package/ai/navigation-bar.md +30 -4
  3. package/ai/navigation-rail.md +72 -0
  4. package/ai/theme.md +779 -716
  5. package/dist/ai/content-drawer.md +114 -140
  6. package/dist/ai/navigation-bar.md +30 -4
  7. package/dist/ai/navigation-rail.md +72 -0
  8. package/dist/ai/theme.md +779 -716
  9. package/dist/{animated-text-COvhr8E3.js → animated-text-Cfs1zx2e.js} +4 -3
  10. package/dist/{animated-text-COvhr8E3.js.map → animated-text-Cfs1zx2e.js.map} +1 -1
  11. package/dist/{animated-text-BZUrBdvN.cjs → animated-text-DoLx8YhT.cjs} +2 -2
  12. package/dist/{animated-text-BZUrBdvN.cjs.map → animated-text-DoLx8YhT.cjs.map} +1 -1
  13. package/dist/animated-text.cjs +1 -1
  14. package/dist/animated-text.js +1 -1
  15. package/dist/area.cjs +1 -1
  16. package/dist/{area.component-BHtBHWVt.js → area.component-A6Xw-dfF.js} +4 -3
  17. package/dist/{area.component-BHtBHWVt.js.map → area.component-A6Xw-dfF.js.map} +1 -1
  18. package/dist/area.component-DMRF1lD-.cjs +12 -0
  19. package/dist/{area.component-Ch2Eaa4i.cjs.map → area.component-DMRF1lD-.cjs.map} +1 -1
  20. package/dist/area.js +1 -1
  21. package/dist/{autocomplete-9RkU9LmA.js → autocomplete-C5DIxpTG.js} +18 -18
  22. package/dist/{autocomplete-9RkU9LmA.js.map → autocomplete-C5DIxpTG.js.map} +1 -1
  23. package/dist/{autocomplete-CenwFcT1.cjs → autocomplete-DkJqOYTg.cjs} +2 -2
  24. package/dist/{autocomplete-CenwFcT1.cjs.map → autocomplete-DkJqOYTg.cjs.map} +1 -1
  25. package/dist/autocomplete.cjs +1 -1
  26. package/dist/autocomplete.js +1 -1
  27. package/dist/{avatar-CjjwZDsw.js → avatar-BDy0wAek.js} +144 -134
  28. package/dist/avatar-BDy0wAek.js.map +1 -0
  29. package/dist/avatar-BmcocEQ4.cjs +306 -0
  30. package/dist/avatar-BmcocEQ4.cjs.map +1 -0
  31. package/dist/badge.cjs +1 -1
  32. package/dist/badge.js +1 -1
  33. package/dist/boat-CfIXRMn-.cjs +78 -0
  34. package/dist/boat-CfIXRMn-.cjs.map +1 -0
  35. package/dist/boat-DumUFcmT.js +276 -0
  36. package/dist/boat-DumUFcmT.js.map +1 -0
  37. package/dist/boat.cjs +1 -1
  38. package/dist/boat.js +1 -1
  39. package/dist/busy.cjs +1 -1
  40. package/dist/busy.js +1 -1
  41. package/dist/button.cjs +1 -1
  42. package/dist/button.js +1 -1
  43. package/dist/card.cjs +1 -1
  44. package/dist/card.js +1 -1
  45. package/dist/{checkbox-D6-WQeEk.js → checkbox-CHG-gT2P.js} +3 -2
  46. package/dist/{checkbox-D6-WQeEk.js.map → checkbox-CHG-gT2P.js.map} +1 -1
  47. package/dist/{checkbox-8djp_8NK.cjs → checkbox-CsMLbxBY.cjs} +2 -2
  48. package/dist/{checkbox-8djp_8NK.cjs.map → checkbox-CsMLbxBY.cjs.map} +1 -1
  49. package/dist/checkbox.cjs +1 -1
  50. package/dist/checkbox.js +1 -1
  51. package/dist/chips.cjs +1 -1
  52. package/dist/chips.js +2 -2
  53. package/dist/code-highlight.cjs +1 -1
  54. package/dist/code-highlight.js +1 -1
  55. package/dist/{code-preview-BFoEmN8y.cjs → code-preview-BgUU7bPR.cjs} +5 -5
  56. package/dist/{code-preview-BFoEmN8y.cjs.map → code-preview-BgUU7bPR.cjs.map} +1 -1
  57. package/dist/{code-preview-Z02-2suM.js → code-preview-Bp4OemTD.js} +8 -8
  58. package/dist/{code-preview-Z02-2suM.js.map → code-preview-Bp4OemTD.js.map} +1 -1
  59. package/dist/components.cjs +1 -1
  60. package/dist/components.js +1 -1
  61. package/dist/content-drawer.cjs +1 -1
  62. package/dist/content-drawer.js +1 -1
  63. package/dist/context-create-CA907mdD.cjs +2 -0
  64. package/dist/context-create-CA907mdD.cjs.map +1 -0
  65. package/dist/{context-object-BE1o2XB3.js → context-create-DCiujzV2.js} +262 -212
  66. package/dist/context-create-DCiujzV2.js.map +1 -0
  67. package/dist/{date-range-kFnTrnHN.js → date-range-BcJ0YN2n.js} +141 -140
  68. package/dist/{date-range-kFnTrnHN.js.map → date-range-BcJ0YN2n.js.map} +1 -1
  69. package/dist/{date-range-DoCtnpW6.cjs → date-range-D_DBil9n.cjs} +2 -2
  70. package/dist/{date-range-DoCtnpW6.cjs.map → date-range-D_DBil9n.cjs.map} +1 -1
  71. package/dist/date-range-inline-DQjOVUxD.cjs +44 -0
  72. package/dist/{date-range-inline-DNr7C5X-.cjs.map → date-range-inline-DQjOVUxD.cjs.map} +1 -1
  73. package/dist/{date-range-inline-BXeX6T7R.js → date-range-inline-Dqxqgu2s.js} +8 -7
  74. package/dist/{date-range-inline-BXeX6T7R.js.map → date-range-inline-Dqxqgu2s.js.map} +1 -1
  75. package/dist/date-range-inline.cjs +1 -1
  76. package/dist/date-range-inline.js +1 -1
  77. package/dist/date-range.cjs +1 -1
  78. package/dist/date-range.js +1 -1
  79. package/dist/{delay-CrdOikhP.cjs → delay-BbtlKEc4.cjs} +2 -2
  80. package/dist/{delay-CrdOikhP.cjs.map → delay-BbtlKEc4.cjs.map} +1 -1
  81. package/dist/{delay-Cz-9rZxi.js → delay-CC_14mn4.js} +2 -2
  82. package/dist/{delay-Cz-9rZxi.js.map → delay-CC_14mn4.js.map} +1 -1
  83. package/dist/delay.cjs +1 -1
  84. package/dist/delay.js +1 -1
  85. package/dist/{details-CsqhGMjL.cjs → details-CTdm7rbG.cjs} +2 -2
  86. package/dist/{details-CsqhGMjL.cjs.map → details-CTdm7rbG.cjs.map} +1 -1
  87. package/dist/{details-DeBtsJlp.js → details-dk2hnRIp.js} +3 -2
  88. package/dist/{details-DeBtsJlp.js.map → details-dk2hnRIp.js.map} +1 -1
  89. package/dist/details.cjs +1 -1
  90. package/dist/details.js +1 -1
  91. package/dist/{dialog-content-DTKdAF_l.js → dialog-content-BM-lfqHq.js} +4 -4
  92. package/dist/{dialog-content-DTKdAF_l.js.map → dialog-content-BM-lfqHq.js.map} +1 -1
  93. package/dist/{dialog-content-BzSQoM2J.cjs → dialog-content-BSZ5dwnP.cjs} +2 -2
  94. package/dist/{dialog-content-BzSQoM2J.cjs.map → dialog-content-BSZ5dwnP.cjs.map} +1 -1
  95. package/dist/dialog.cjs +1 -1
  96. package/dist/dialog.js +1 -1
  97. package/dist/discovery.cjs +2 -0
  98. package/dist/discovery.cjs.map +1 -0
  99. package/dist/discovery.js +6 -0
  100. package/dist/discovery.js.map +1 -0
  101. package/dist/discovery.service-BbYjU5x8.js +21 -0
  102. package/dist/discovery.service-BbYjU5x8.js.map +1 -0
  103. package/dist/discovery.service-BpGCuXPd.cjs +2 -0
  104. package/dist/discovery.service-BpGCuXPd.cjs.map +1 -0
  105. package/dist/{divider-7iyyEd8k.js → divider-BWVdeJm1.js} +4 -3
  106. package/dist/{divider-7iyyEd8k.js.map → divider-BWVdeJm1.js.map} +1 -1
  107. package/dist/divider-DgJXEKxB.cjs +2 -0
  108. package/dist/{divider-CNxOc8ep.cjs.map → divider-DgJXEKxB.cjs.map} +1 -1
  109. package/dist/divider.cjs +1 -1
  110. package/dist/divider.js +1 -1
  111. package/dist/{dropdown-content-_GMpqsNq.js → dropdown-content-BgLy9dwU.js} +4 -3
  112. package/dist/{dropdown-content-_GMpqsNq.js.map → dropdown-content-BgLy9dwU.js.map} +1 -1
  113. package/dist/{dropdown-content-De0OkNoq.cjs → dropdown-content-ZAB82v-h.cjs} +2 -2
  114. package/dist/{dropdown-content-De0OkNoq.cjs.map → dropdown-content-ZAB82v-h.cjs.map} +1 -1
  115. package/dist/dropdown.cjs +1 -1
  116. package/dist/dropdown.js +1 -1
  117. package/dist/{email-recipients-CPZlUiRR.js → email-recipients-IXQLqBaI.js} +6 -5
  118. package/dist/{email-recipients-CPZlUiRR.js.map → email-recipients-IXQLqBaI.js.map} +1 -1
  119. package/dist/{email-recipients-DS01C3V3.cjs → email-recipients-R7jCXy_I.cjs} +2 -2
  120. package/dist/{email-recipients-DS01C3V3.cjs.map → email-recipients-R7jCXy_I.cjs.map} +1 -1
  121. package/dist/extra.cjs +1 -1
  122. package/dist/extra.js +1 -1
  123. package/dist/{flex-BeSoRNTu.js → flex-Cp1nomar.js} +3 -2
  124. package/dist/{flex-BeSoRNTu.js.map → flex-Cp1nomar.js.map} +1 -1
  125. package/dist/{flex-CHf9Gc5V.cjs → flex-sAQsXdsk.cjs} +2 -2
  126. package/dist/{flex-CHf9Gc5V.cjs.map → flex-sAQsXdsk.cjs.map} +1 -1
  127. package/dist/form-DHTbrnEl.cjs +2 -0
  128. package/dist/{form-DzDksPgv.cjs.map → form-DHTbrnEl.cjs.map} +1 -1
  129. package/dist/{form-DNeKagke.js → form-Dtc128QU.js} +3 -2
  130. package/dist/{form-DNeKagke.js.map → form-Dtc128QU.js.map} +1 -1
  131. package/dist/form.cjs +1 -1
  132. package/dist/form.js +1 -1
  133. package/dist/{formField.mixin-BNj75WQ4.js → formField.mixin-CCB_CKYb.js} +2 -2
  134. package/dist/{formField.mixin-BNj75WQ4.js.map → formField.mixin-CCB_CKYb.js.map} +1 -1
  135. package/dist/{formField.mixin-D5YAYIS1.cjs → formField.mixin-CZQ7alVs.cjs} +2 -2
  136. package/dist/{formField.mixin-D5YAYIS1.cjs.map → formField.mixin-CZQ7alVs.cjs.map} +1 -1
  137. package/dist/{icon-CCMpTJTp.js → icon-BHhOyVjB.js} +9 -9
  138. package/dist/{icon-CCMpTJTp.js.map → icon-BHhOyVjB.js.map} +1 -1
  139. package/dist/{icon-DebIySqv.cjs → icon-CocdSdlX.cjs} +3 -3
  140. package/dist/{icon-DebIySqv.cjs.map → icon-CocdSdlX.cjs.map} +1 -1
  141. package/dist/{icon-button-D6DH52j4.js → icon-button-CjSaBrg0.js} +4 -3
  142. package/dist/{icon-button-D6DH52j4.js.map → icon-button-CjSaBrg0.js.map} +1 -1
  143. package/dist/{icon-button-DwnnW2oj.cjs → icon-button-m8kXxOvS.cjs} +2 -2
  144. package/dist/{icon-button-DwnnW2oj.cjs.map → icon-button-m8kXxOvS.cjs.map} +1 -1
  145. package/dist/icons.cjs +1 -1
  146. package/dist/icons.js +1 -1
  147. package/dist/index.cjs +1 -1
  148. package/dist/index.js +187 -182
  149. package/dist/index.js.map +1 -1
  150. package/dist/input-BuDPnk5e.cjs +51 -0
  151. package/dist/{input-C2Vz-51i.cjs.map → input-BuDPnk5e.cjs.map} +1 -1
  152. package/dist/{input-DtHPCCyd.js → input-D_gdNxxR.js} +4 -3
  153. package/dist/{input-DtHPCCyd.js.map → input-D_gdNxxR.js.map} +1 -1
  154. package/dist/{input-chip-B7ANrtLF.cjs → input-chip-CDLblIp9.cjs} +2 -2
  155. package/dist/{input-chip-B7ANrtLF.cjs.map → input-chip-CDLblIp9.cjs.map} +1 -1
  156. package/dist/{input-chip-DbIvSyvP.js → input-chip-CLnR4vSR.js} +2 -2
  157. package/dist/{input-chip-DbIvSyvP.js.map → input-chip-CLnR4vSR.js.map} +1 -1
  158. package/dist/input.cjs +1 -1
  159. package/dist/input.js +1 -1
  160. package/dist/layout.cjs +1 -1
  161. package/dist/layout.js +1 -1
  162. package/dist/{list-BBo0--_Q.js → list-C069T9ey.js} +3 -2
  163. package/dist/{list-BBo0--_Q.js.map → list-C069T9ey.js.map} +1 -1
  164. package/dist/{list-BH8OJ3Rv.cjs → list-KCakyWxw.cjs} +2 -2
  165. package/dist/{list-BH8OJ3Rv.cjs.map → list-KCakyWxw.cjs.map} +1 -1
  166. package/dist/list.cjs +1 -1
  167. package/dist/list.js +1 -1
  168. package/dist/{litElement.mixin-LplXbzd8.cjs → litElement.mixin-DoBMt4ia.cjs} +2 -2
  169. package/dist/{litElement.mixin-LplXbzd8.cjs.map → litElement.mixin-DoBMt4ia.cjs.map} +1 -1
  170. package/dist/{litElement.mixin-CzF0mNQd.js → litElement.mixin-Dp4mBSNw.js} +2 -2
  171. package/dist/{litElement.mixin-CzF0mNQd.js.map → litElement.mixin-Dp4mBSNw.js.map} +1 -1
  172. package/dist/mailbox.cjs +1 -1
  173. package/dist/mailbox.js +1 -1
  174. package/dist/{map-DeiCBxMP.js → map-pn_6ziZf.js} +19 -19
  175. package/dist/{map-DeiCBxMP.js.map → map-pn_6ziZf.js.map} +1 -1
  176. package/dist/{map-C7lxYU4A.cjs → map-vNMrrat-.cjs} +2 -2
  177. package/dist/{map-C7lxYU4A.cjs.map → map-vNMrrat-.cjs.map} +1 -1
  178. package/dist/map.cjs +1 -1
  179. package/dist/map.js +1 -1
  180. package/dist/{media-CsYVcfaX.cjs → media-CAtXPif3.cjs} +6 -6
  181. package/dist/{media-CsYVcfaX.cjs.map → media-CAtXPif3.cjs.map} +1 -1
  182. package/dist/{media-CEnaqjig.js → media-DC3r4y8-.js} +9 -8
  183. package/dist/{media-CEnaqjig.js.map → media-DC3r4y8-.js.map} +1 -1
  184. package/dist/{menu-wtkHGlyc.js → menu-BAs2snSu.js} +4 -3
  185. package/dist/{menu-wtkHGlyc.js.map → menu-BAs2snSu.js.map} +1 -1
  186. package/dist/{menu-Boqsyfmh.cjs → menu-C2ZKJe1g.cjs} +2 -2
  187. package/dist/{menu-Boqsyfmh.cjs.map → menu-C2ZKJe1g.cjs.map} +1 -1
  188. package/dist/menu.cjs +1 -1
  189. package/dist/menu.js +1 -1
  190. package/dist/mixins/baseElement.ts +33 -1
  191. package/dist/mixins/discovery.service.ts +60 -0
  192. package/dist/nav-drawer.cjs +1 -1
  193. package/dist/nav-drawer.js +1 -1
  194. package/dist/navigation-bar.cjs +1 -1
  195. package/dist/navigation-bar.js +1 -1
  196. package/dist/{navigation-rail-6ONc-XE-.cjs → navigation-rail-B0zofile.cjs} +14 -11
  197. package/dist/navigation-rail-B0zofile.cjs.map +1 -0
  198. package/dist/{navigation-rail-D-lK9oVd.js → navigation-rail-KdVjbO1I.js} +43 -31
  199. package/dist/navigation-rail-KdVjbO1I.js.map +1 -0
  200. package/dist/navigation-rail.cjs +1 -1
  201. package/dist/navigation-rail.js +1 -1
  202. package/dist/{notification-service-ZiGUSd63.js → notification-service-BOCdK7B0.js} +7 -6
  203. package/dist/{notification-service-ZiGUSd63.js.map → notification-service-BOCdK7B0.js.map} +1 -1
  204. package/dist/{notification-service-9HXSKWcw.cjs → notification-service-DXsySIdG.cjs} +2 -2
  205. package/dist/{notification-service-9HXSKWcw.cjs.map → notification-service-DXsySIdG.cjs.map} +1 -1
  206. package/dist/notification.cjs +1 -1
  207. package/dist/notification.js +2 -2
  208. package/dist/{notify-DbfX6Z2P.js → notify-Cglpgay3.js} +2 -2
  209. package/dist/{notify-DbfX6Z2P.js.map → notify-Cglpgay3.js.map} +1 -1
  210. package/dist/{notify-W-NrP0cC.cjs → notify-CvDL-o79.cjs} +2 -2
  211. package/dist/{notify-W-NrP0cC.cjs.map → notify-CvDL-o79.cjs.map} +1 -1
  212. package/dist/{option-D2bxihLu.cjs → option-ezGy71aI.cjs} +2 -2
  213. package/dist/{option-D2bxihLu.cjs.map → option-ezGy71aI.cjs.map} +1 -1
  214. package/dist/{option-BFlWiCu0.js → option-tDU1Z_vP.js} +11 -10
  215. package/dist/{option-BFlWiCu0.js.map → option-tDU1Z_vP.js.map} +1 -1
  216. package/dist/option.cjs +1 -1
  217. package/dist/option.js +1 -1
  218. package/dist/payment-card-form-B5b-LA2Y.cjs +74 -0
  219. package/dist/{payment-card-form--v94EhJF.cjs.map → payment-card-form-B5b-LA2Y.cjs.map} +1 -1
  220. package/dist/{payment-card-form-DLRNX9NX.js → payment-card-form-CZpc-zfO.js} +4 -3
  221. package/dist/{payment-card-form-DLRNX9NX.js.map → payment-card-form-CZpc-zfO.js.map} +1 -1
  222. package/dist/{progress-BYohUvYO.js → progress-Bqih11TQ.js} +10 -9
  223. package/dist/{progress-BYohUvYO.js.map → progress-Bqih11TQ.js.map} +1 -1
  224. package/dist/{progress-CjkD8QBy.cjs → progress-OMGbiNv5.cjs} +2 -2
  225. package/dist/{progress-CjkD8QBy.cjs.map → progress-OMGbiNv5.cjs.map} +1 -1
  226. package/dist/progress.cjs +1 -1
  227. package/dist/progress.js +1 -1
  228. package/dist/{radio-button-CGmGOAil.cjs → radio-button-BuSpPTO4.cjs} +2 -2
  229. package/dist/{radio-button-CGmGOAil.cjs.map → radio-button-BuSpPTO4.cjs.map} +1 -1
  230. package/dist/{radio-button-BlxeCjdq.js → radio-button-mHT1573u.js} +4 -3
  231. package/dist/{radio-button-BlxeCjdq.js.map → radio-button-mHT1573u.js.map} +1 -1
  232. package/dist/radio-group.cjs +1 -1
  233. package/dist/radio-group.js +1 -1
  234. package/dist/{schmancy-steps-container-CydL78yk.cjs → schmancy-steps-container-Bht_BlLU.cjs} +2 -2
  235. package/dist/{schmancy-steps-container-CydL78yk.cjs.map → schmancy-steps-container-Bht_BlLU.cjs.map} +1 -1
  236. package/dist/{schmancy-steps-container-BtAHCm73.js → schmancy-steps-container-DDMiJJyw.js} +2 -2
  237. package/dist/{schmancy-steps-container-BtAHCm73.js.map → schmancy-steps-container-DDMiJJyw.js.map} +1 -1
  238. package/dist/{select-BiN334GN.js → select-CKtpFPTr.js} +13 -13
  239. package/dist/{select-BiN334GN.js.map → select-CKtpFPTr.js.map} +1 -1
  240. package/dist/{select-CrB02cIO.cjs → select-HPtumqyg.cjs} +2 -2
  241. package/dist/{select-CrB02cIO.cjs.map → select-HPtumqyg.cjs.map} +1 -1
  242. package/dist/select.cjs +1 -1
  243. package/dist/select.js +1 -1
  244. package/dist/selector-hook-BWMY8npH.cjs +2 -0
  245. package/dist/selector-hook-BWMY8npH.cjs.map +1 -0
  246. package/dist/selector-hook-CKeyK4K-.js +313 -0
  247. package/dist/selector-hook-CKeyK4K-.js.map +1 -0
  248. package/dist/{sheet-DpJv4DRi.js → sheet-B-vTiTi8.js} +4 -3
  249. package/dist/{sheet-DpJv4DRi.js.map → sheet-B-vTiTi8.js.map} +1 -1
  250. package/dist/{sheet-sgVoRMi1.cjs → sheet-DP7nFOEo.cjs} +2 -2
  251. package/dist/{sheet-sgVoRMi1.cjs.map → sheet-DP7nFOEo.cjs.map} +1 -1
  252. package/dist/sheet.cjs +1 -1
  253. package/dist/sheet.js +1 -1
  254. package/dist/{slider-D7qdxfvX.js → slider-Bu7kQ0_w.js} +9 -9
  255. package/dist/{slider-D7qdxfvX.js.map → slider-Bu7kQ0_w.js.map} +1 -1
  256. package/dist/{slider-Dd1L6oYm.cjs → slider-Diqgkt3E.cjs} +4 -4
  257. package/dist/{slider-Dd1L6oYm.cjs.map → slider-Diqgkt3E.cjs.map} +1 -1
  258. package/dist/slider.cjs +1 -1
  259. package/dist/slider.js +1 -1
  260. package/dist/{spinner-CaXU45TV.cjs → spinner-b6hiAljR.cjs} +2 -2
  261. package/dist/{spinner-CaXU45TV.cjs.map → spinner-b6hiAljR.cjs.map} +1 -1
  262. package/dist/{spinner-XN4W5ihQ.js → spinner-paAzgY93.js} +3 -2
  263. package/dist/{spinner-XN4W5ihQ.js.map → spinner-paAzgY93.js.map} +1 -1
  264. package/dist/steps.cjs +1 -1
  265. package/dist/steps.js +1 -1
  266. package/dist/store.cjs +1 -1
  267. package/dist/store.js +26 -26
  268. package/dist/{suggestion-chip-PI24Hc3s.cjs → suggestion-chip--FVeCUSI.cjs} +2 -2
  269. package/dist/{suggestion-chip-PI24Hc3s.cjs.map → suggestion-chip--FVeCUSI.cjs.map} +1 -1
  270. package/dist/{suggestion-chip-CdhoATv9.js → suggestion-chip-DnnfUAqx.js} +3 -3
  271. package/dist/{suggestion-chip-CdhoATv9.js.map → suggestion-chip-DnnfUAqx.js.map} +1 -1
  272. package/dist/{surface-CKrYJ58l.js → surface-BBhAIoZq.js} +2 -2
  273. package/dist/{surface-CKrYJ58l.js.map → surface-BBhAIoZq.js.map} +1 -1
  274. package/dist/{surface-Ax6I7ldp.cjs → surface-SICYUsoB.cjs} +2 -2
  275. package/dist/{surface-Ax6I7ldp.cjs.map → surface-SICYUsoB.cjs.map} +1 -1
  276. package/dist/surface.cjs +1 -1
  277. package/dist/surface.js +1 -1
  278. package/dist/{table-CP6_NkPm.js → table-CepjNGT6.js} +2 -2
  279. package/dist/{table-CP6_NkPm.js.map → table-CepjNGT6.js.map} +1 -1
  280. package/dist/{table-BlwUyf_4.cjs → table-yYKET4qQ.cjs} +2 -2
  281. package/dist/{table-BlwUyf_4.cjs.map → table-yYKET4qQ.cjs.map} +1 -1
  282. package/dist/table.cjs +1 -1
  283. package/dist/table.js +1 -1
  284. package/dist/{tabs-compatibility-CX0cIu_Y.cjs → tabs-compatibility-BWaRkr9s.cjs} +4 -4
  285. package/dist/{tabs-compatibility-CX0cIu_Y.cjs.map → tabs-compatibility-BWaRkr9s.cjs.map} +1 -1
  286. package/dist/{tabs-compatibility-7QKuXX4i.js → tabs-compatibility-BXdyrybs.js} +7 -6
  287. package/dist/{tabs-compatibility-7QKuXX4i.js.map → tabs-compatibility-BXdyrybs.js.map} +1 -1
  288. package/dist/tabs.cjs +1 -1
  289. package/dist/tabs.js +1 -1
  290. package/dist/tailwind.mixin-CYhJgwwb.cjs +2 -0
  291. package/dist/tailwind.mixin-CYhJgwwb.cjs.map +1 -0
  292. package/dist/tailwind.mixin-Cn7vup-6.js +64 -0
  293. package/dist/tailwind.mixin-Cn7vup-6.js.map +1 -0
  294. package/dist/teleport.cjs +1 -1
  295. package/dist/teleport.js +1 -1
  296. package/dist/{textarea-DHrDn-O6.js → textarea-BpNEwBP9.js} +3 -2
  297. package/dist/{textarea-DHrDn-O6.js.map → textarea-BpNEwBP9.js.map} +1 -1
  298. package/dist/textarea-Xgbs3rjA.cjs +44 -0
  299. package/dist/{textarea-qLA0vP78.cjs.map → textarea-Xgbs3rjA.cjs.map} +1 -1
  300. package/dist/textarea.cjs +1 -1
  301. package/dist/textarea.js +1 -1
  302. package/dist/{theme-button-BEUsbH5m.js → theme-button-77xbTIaH.js} +6 -5
  303. package/dist/{theme-button-BEUsbH5m.js.map → theme-button-77xbTIaH.js.map} +1 -1
  304. package/dist/theme-button-BsjsULjH.cjs +9 -0
  305. package/dist/{theme-button-D7fBEUGf.cjs.map → theme-button-BsjsULjH.cjs.map} +1 -1
  306. package/dist/theme-button.cjs +1 -1
  307. package/dist/theme-button.js +1 -1
  308. package/dist/theme.cjs +1 -1
  309. package/dist/theme.controls-BeNS8iSM.cjs +67 -0
  310. package/dist/theme.controls-BeNS8iSM.cjs.map +1 -0
  311. package/dist/{theme.component-ByGua01V.js → theme.controls-DtcpHuz9.js} +367 -238
  312. package/dist/theme.controls-DtcpHuz9.js.map +1 -0
  313. package/dist/theme.js +13 -11
  314. package/dist/{timezone-BpDMR26D.js → timezone-CtH2a7Hw.js} +10 -9
  315. package/dist/{timezone-BpDMR26D.js.map → timezone-CtH2a7Hw.js.map} +1 -1
  316. package/dist/{timezone-Bw4EXBt7.cjs → timezone-D3kdUX6c.cjs} +2 -2
  317. package/dist/{timezone-Bw4EXBt7.cjs.map → timezone-D3kdUX6c.cjs.map} +1 -1
  318. package/dist/{tooltip-Dhs4HL3A.cjs → tooltip-BwZ_zIEI.cjs} +2 -2
  319. package/dist/{tooltip-Dhs4HL3A.cjs.map → tooltip-BwZ_zIEI.cjs.map} +1 -1
  320. package/dist/{tooltip-B1jynZOH.js → tooltip-DgGZouB5.js} +2 -2
  321. package/dist/{tooltip-B1jynZOH.js.map → tooltip-DgGZouB5.js.map} +1 -1
  322. package/dist/tooltip.cjs +1 -1
  323. package/dist/tooltip.js +1 -1
  324. package/dist/{tree-D-ezei_U.cjs → tree-B9fWtaGW.cjs} +4 -4
  325. package/dist/{tree-D-ezei_U.cjs.map → tree-B9fWtaGW.cjs.map} +1 -1
  326. package/dist/{tree-BH1qCJ_U.js → tree-BSENnhB2.js} +3 -2
  327. package/dist/{tree-BH1qCJ_U.js.map → tree-BSENnhB2.js.map} +1 -1
  328. package/dist/tree.cjs +1 -1
  329. package/dist/tree.js +1 -1
  330. package/dist/{typewriter-DQbpNPtY.js → typewriter-BCXtlffJ.js} +5 -4
  331. package/dist/{typewriter-DQbpNPtY.js.map → typewriter-BCXtlffJ.js.map} +1 -1
  332. package/dist/typewriter-DeNR2E_p.cjs +9 -0
  333. package/dist/{typewriter-CtPh4Pyj.cjs.map → typewriter-DeNR2E_p.cjs.map} +1 -1
  334. package/dist/typewriter.cjs +1 -1
  335. package/dist/typewriter.js +1 -1
  336. package/dist/{typography-BrIaOYmC.cjs → typography-Cm7pGqRe.cjs} +2 -2
  337. package/dist/{typography-BrIaOYmC.cjs.map → typography-Cm7pGqRe.cjs.map} +1 -1
  338. package/dist/{typography-D71cmr0R.js → typography-sxQLtA6a.js} +2 -2
  339. package/dist/{typography-D71cmr0R.js.map → typography-sxQLtA6a.js.map} +1 -1
  340. package/dist/typography.cjs +1 -1
  341. package/dist/typography.js +1 -1
  342. package/package.json +1 -1
  343. package/types/mixins/baseElement.d.ts +2 -1
  344. package/types/mixins/discovery.service.d.ts +17 -0
  345. package/types/src/boat/boat.d.ts +10 -5
  346. package/types/src/discovery/discovery.service.d.ts +17 -0
  347. package/types/src/discovery/index.d.ts +1 -0
  348. package/types/src/index.d.ts +1 -0
  349. package/types/src/navigation-bar/navigation-bar.d.ts +15 -1
  350. package/types/src/navigation-rail/navigation-rail.d.ts +13 -0
  351. package/types/src/theme/index.d.ts +1 -0
  352. package/types/src/theme/theme.controls.d.ts +27 -0
  353. package/types/src/theme/theme.service.d.ts +58 -2
  354. package/dist/area.component-Ch2Eaa4i.cjs +0 -12
  355. package/dist/avatar-CjjwZDsw.js.map +0 -1
  356. package/dist/avatar-DlhBTIc8.cjs +0 -303
  357. package/dist/avatar-DlhBTIc8.cjs.map +0 -1
  358. package/dist/boat-CUsJXaLf.js +0 -240
  359. package/dist/boat-CUsJXaLf.js.map +0 -1
  360. package/dist/boat-Dfx9-P8c.cjs +0 -83
  361. package/dist/boat-Dfx9-P8c.cjs.map +0 -1
  362. package/dist/context-object-BE1o2XB3.js.map +0 -1
  363. package/dist/context-object-DA9DM9QJ.cjs +0 -2
  364. package/dist/context-object-DA9DM9QJ.cjs.map +0 -1
  365. package/dist/date-range-inline-DNr7C5X-.cjs +0 -44
  366. package/dist/divider-CNxOc8ep.cjs +0 -2
  367. package/dist/form-DzDksPgv.cjs +0 -2
  368. package/dist/input-C2Vz-51i.cjs +0 -51
  369. package/dist/navigation-rail-6ONc-XE-.cjs.map +0 -1
  370. package/dist/navigation-rail-D-lK9oVd.js.map +0 -1
  371. package/dist/payment-card-form--v94EhJF.cjs +0 -74
  372. package/dist/selector-hook-DOsvFxG2.js +0 -364
  373. package/dist/selector-hook-DOsvFxG2.js.map +0 -1
  374. package/dist/selector-hook-DQ9zoDM4.cjs +0 -2
  375. package/dist/selector-hook-DQ9zoDM4.cjs.map +0 -1
  376. package/dist/tailwind.mixin-BjDGMGbj.js +0 -43
  377. package/dist/tailwind.mixin-BjDGMGbj.js.map +0 -1
  378. package/dist/tailwind.mixin-ClfV2_Nh.cjs +0 -2
  379. package/dist/tailwind.mixin-ClfV2_Nh.cjs.map +0 -1
  380. package/dist/textarea-qLA0vP78.cjs +0 -44
  381. package/dist/theme-button-D7fBEUGf.cjs +0 -9
  382. package/dist/theme.component-ByGua01V.js.map +0 -1
  383. package/dist/theme.component-CQ1trrZB.cjs +0 -3
  384. package/dist/theme.component-CQ1trrZB.cjs.map +0 -1
  385. package/dist/typewriter-CtPh4Pyj.cjs +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-9RkU9LmA.js","sources":["../src/autocomplete/autocomplete.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n// Import chip component for multi-select display\nimport '../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Track whether value/values have been explicitly set\n _valueSet: boolean = false\n _valuesSet: boolean = false\n\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n @property({ type: Boolean }) error = false\n @property({ type: String }) validationMessage = ''\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._valuesSet = true\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n this._valueSet = true\n if (this.multi) {\n const newValues = val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n const currentValues = this._selectedValues$.value\n // Only update if values actually changed\n if (JSON.stringify(newValues) !== JSON.stringify(currentValues)) {\n this._selectedValues$.next(newValues)\n }\n } else {\n // Only update if value actually changed\n if (val !== this._selectedValue$.value) {\n this._selectedValue$.next(val)\n // Update the input display when value is set\n this._updateInputDisplay()\n }\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // Track if we're clicking on an option to prevent blur interference\n private _isSelectingOption = false\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects - only what we actually need\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n\n connectedCallback() {\n super.connectedCallback()\n\n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n }\n\n private _setupAutocompleteLogic() {\n // Sync selection state\n combineLatest([\n this._selectedValue$,\n this._selectedValues$\n ]).pipe(\n tap(([selectedValue, selectedValues]) => {\n this._updateOptionSelection(selectedValue, selectedValues)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Filter options based on input\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n tap(searchTerm => {\n if (this._open) {\n this._filterOptions(searchTerm)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupOptionHandlers() {\n this._options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n // Prevent blur handler from interfering with option selection\n option.onmousedown = (e: MouseEvent) => {\n e.preventDefault() // Prevent focus loss\n this._isSelectingOption = true\n }\n\n // Handle the actual selection\n option.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._selectOption(option)\n // Reset flag after a short delay\n setTimeout(() => {\n this._isSelectingOption = false\n }, 50)\n }\n })\n }\n\n private _updateOptionSelection(selectedValue: string, selectedValues: string[]) {\n this._options.forEach(option => {\n option.selected = this.multi\n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }\n\n private _filterOptions(searchTerm: string) {\n const term = searchTerm.trim()\n\n if (!term) {\n // Show all options if no search term\n this._options.forEach(option => {\n option.hidden = false\n option.style.order = '0'\n })\n this._visibleOptionsCount = this._options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = this._options.map(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n const score = Math.max(labelScore * 1.1, valueScore)\n\n return { option, score }\n })\n\n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n\n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n option.style.order = String(index)\n }\n })\n\n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n\n this._announceToScreenReader(\n this._visibleOptionsCount > 0\n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }\n\n private _selectOption(option: SchmancyOption) {\n if (this.multi) {\n const currentValues = this._selectedValues$.value\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? currentValues.filter(v => v !== option.value)\n : [...currentValues, option.value]\n\n this._selectedValues$.next(newValues)\n this._announceToScreenReader(\n newValues.length > 0\n ? `Selected: ${this._getSelectedLabels().join(', ')}`\n : 'No options selected'\n )\n this._fireChangeEvent()\n } else {\n // Fix the bug: Update value BEFORE firing event\n this._selectedValue$.next(option.value)\n\n // Now fire event with the NEW value\n this._fireChangeEvent()\n\n // Update UI\n this._open = false\n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n\n // Blur the input\n setTimeout(() => this._inputElementRef.value?.blur(), 100)\n\n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }\n\n private _setupDocumentClickHandler() {\n // Simple document click handler\n const handleDocumentClick = (e: MouseEvent) => {\n if (!this._open) return\n\n const path = e.composedPath()\n if (!path.includes(this) && !this._options.some(opt => path.includes(opt))) {\n this._open = false\n this._updateInputDisplay()\n }\n }\n\n document.addEventListener('click', handleDocumentClick)\n\n // Cleanup on disconnect\n this.disconnecting.pipe(take(1)).subscribe(() => {\n document.removeEventListener('click', handleDocumentClick)\n })\n }\n\n\n private _updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) return\n\n const selectedValue = this._selectedValue$.value\n const option = this._options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n\n if (this._inputElementRef.value) {\n this._inputElementRef.value.value = this._inputValue\n }\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n this._setupOptionHandlers()\n\n // Sync initial value with display after options are available\n this._updateInputDisplay()\n\n // Update options when slot changes\n const slot = this.shadowRoot?.querySelector('slot')\n slot?.addEventListener('slotchange', () => {\n this._setupOptionHandlers()\n this._updateOptionSelection(this._selectedValue$.value, this._selectedValues$.value)\n })\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this._selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this._selectedValues$.next(newValues)\n this._fireChangeEvent()\n this._announceToScreenReader(`Removed: ${this._getChipLabel(value)}`)\n }\n\n private _getChipLabel(value: string): string {\n const option = this._options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private _focusTextInput() {\n if (this._inputElementRef.value) {\n this._inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this._focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this._selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"flex-shrink-0 my-0.5\"\n >\n ${this._getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .placeholder=${this._selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this._inputValue}\n .autocomplete=${this.autocomplete}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this._inputValue = ''\n this._inputValue$.next('')\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div class=\"mt-1 text-sm text-error-default\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._setupOptionHandlers()\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private _handleAutoSelectOnBlur() {\n // Don't run if we're clicking on an option (prevents interference with click handler)\n if (this._isSelectingOption) {\n return\n }\n\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this._open || !this._inputValue.trim()) {\n return\n }\n \n const searchTerm = this._inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this._options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Select the option directly\n this._selectOption(bestMatch)\n\n // Close the dropdown\n this._open = false\n }\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const isOpen = this._open\n const selectedValues = this._selectedValues$.value\n\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this._inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open = true\n\n setTimeout(() => {\n const firstVisible = this._options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }, 10)\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = this._options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n\n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open = false\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open = false\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._selectOption(focusedOption)\n }\n break\n }\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","_valueSet","_valuesSet","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","error","validationMessage","_open","_inputValue","_visibleOptionsCount","_hasResults","_isSelectingOption","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","values","value","vals","next","Array","isArray","join","val","newValues","split","map","v","trim","filter","Boolean","currentValues","JSON","stringify","_updateInputDisplay","connectedCallback","id","Math","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","combineLatest","pipe","tap","selectedValue","selectedValues","_updateOptionSelection","takeUntil","disconnecting","subscribe","distinctUntilChanged","debounceTime","searchTerm","_filterOptions","_setupOptionHandlers","_options","forEach","option","index","setAttribute","tabIndex","onmousedown","e","preventDefault","onclick","stopPropagation","_selectOption","setTimeout","selected","includes","String","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","similarity","valueScore","score","max","sort","a","b","visibleCount","item","hidden","style","order","length","_announceToScreenReader","indexOf","_getSelectedLabels","_fireChangeEvent","blur","handleDocumentClick","path","composedPath","some","opt","document","addEventListener","take","removeEventListener","find","message","liveRegion","shadowRoot","querySelector","detail","dispatchEvent","CustomEvent","bubbles","composed","checkValidity","reportValidity","firstUpdated","_getChipLabel","_focusTextInput","focus","render","descriptionId","height","padding","fontSize","labelSize","getSizeStyles","html","when","classMap","repeat","handleChipRemove","ref","toLowerCase","replace","target","_handleKeyDown","_handleAutoSelectOnBlur","absolute","flex","bestMatch","bestScore","event","isOpen","key","lastValue","firstVisible","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete-C5DIxpTG.js","sources":["../src/autocomplete/autocomplete.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n// Import chip component for multi-select display\nimport '../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Track whether value/values have been explicitly set\n _valueSet: boolean = false\n _valuesSet: boolean = false\n\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n @property({ type: Boolean }) error = false\n @property({ type: String }) validationMessage = ''\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._valuesSet = true\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n this._valueSet = true\n if (this.multi) {\n const newValues = val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n const currentValues = this._selectedValues$.value\n // Only update if values actually changed\n if (JSON.stringify(newValues) !== JSON.stringify(currentValues)) {\n this._selectedValues$.next(newValues)\n }\n } else {\n // Only update if value actually changed\n if (val !== this._selectedValue$.value) {\n this._selectedValue$.next(val)\n // Update the input display when value is set\n this._updateInputDisplay()\n }\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // Track if we're clicking on an option to prevent blur interference\n private _isSelectingOption = false\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects - only what we actually need\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n\n connectedCallback() {\n super.connectedCallback()\n\n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n }\n\n private _setupAutocompleteLogic() {\n // Sync selection state\n combineLatest([\n this._selectedValue$,\n this._selectedValues$\n ]).pipe(\n tap(([selectedValue, selectedValues]) => {\n this._updateOptionSelection(selectedValue, selectedValues)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Filter options based on input\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n tap(searchTerm => {\n if (this._open) {\n this._filterOptions(searchTerm)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupOptionHandlers() {\n this._options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n // Prevent blur handler from interfering with option selection\n option.onmousedown = (e: MouseEvent) => {\n e.preventDefault() // Prevent focus loss\n this._isSelectingOption = true\n }\n\n // Handle the actual selection\n option.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._selectOption(option)\n // Reset flag after a short delay\n setTimeout(() => {\n this._isSelectingOption = false\n }, 50)\n }\n })\n }\n\n private _updateOptionSelection(selectedValue: string, selectedValues: string[]) {\n this._options.forEach(option => {\n option.selected = this.multi\n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }\n\n private _filterOptions(searchTerm: string) {\n const term = searchTerm.trim()\n\n if (!term) {\n // Show all options if no search term\n this._options.forEach(option => {\n option.hidden = false\n option.style.order = '0'\n })\n this._visibleOptionsCount = this._options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = this._options.map(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n const score = Math.max(labelScore * 1.1, valueScore)\n\n return { option, score }\n })\n\n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n\n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n option.style.order = String(index)\n }\n })\n\n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n\n this._announceToScreenReader(\n this._visibleOptionsCount > 0\n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }\n\n private _selectOption(option: SchmancyOption) {\n if (this.multi) {\n const currentValues = this._selectedValues$.value\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? currentValues.filter(v => v !== option.value)\n : [...currentValues, option.value]\n\n this._selectedValues$.next(newValues)\n this._announceToScreenReader(\n newValues.length > 0\n ? `Selected: ${this._getSelectedLabels().join(', ')}`\n : 'No options selected'\n )\n this._fireChangeEvent()\n } else {\n // Fix the bug: Update value BEFORE firing event\n this._selectedValue$.next(option.value)\n\n // Now fire event with the NEW value\n this._fireChangeEvent()\n\n // Update UI\n this._open = false\n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n\n // Blur the input\n setTimeout(() => this._inputElementRef.value?.blur(), 100)\n\n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }\n\n private _setupDocumentClickHandler() {\n // Simple document click handler\n const handleDocumentClick = (e: MouseEvent) => {\n if (!this._open) return\n\n const path = e.composedPath()\n if (!path.includes(this) && !this._options.some(opt => path.includes(opt))) {\n this._open = false\n this._updateInputDisplay()\n }\n }\n\n document.addEventListener('click', handleDocumentClick)\n\n // Cleanup on disconnect\n this.disconnecting.pipe(take(1)).subscribe(() => {\n document.removeEventListener('click', handleDocumentClick)\n })\n }\n\n\n private _updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) return\n\n const selectedValue = this._selectedValue$.value\n const option = this._options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n\n if (this._inputElementRef.value) {\n this._inputElementRef.value.value = this._inputValue\n }\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n this._setupOptionHandlers()\n\n // Sync initial value with display after options are available\n this._updateInputDisplay()\n\n // Update options when slot changes\n const slot = this.shadowRoot?.querySelector('slot')\n slot?.addEventListener('slotchange', () => {\n this._setupOptionHandlers()\n this._updateOptionSelection(this._selectedValue$.value, this._selectedValues$.value)\n })\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this._selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this._selectedValues$.next(newValues)\n this._fireChangeEvent()\n this._announceToScreenReader(`Removed: ${this._getChipLabel(value)}`)\n }\n\n private _getChipLabel(value: string): string {\n const option = this._options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private _focusTextInput() {\n if (this._inputElementRef.value) {\n this._inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this._focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this._selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"flex-shrink-0 my-0.5\"\n >\n ${this._getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .placeholder=${this._selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this._inputValue}\n .autocomplete=${this.autocomplete}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this._inputValue = ''\n this._inputValue$.next('')\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div class=\"mt-1 text-sm text-error-default\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._setupOptionHandlers()\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private _handleAutoSelectOnBlur() {\n // Don't run if we're clicking on an option (prevents interference with click handler)\n if (this._isSelectingOption) {\n return\n }\n\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this._open || !this._inputValue.trim()) {\n return\n }\n \n const searchTerm = this._inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this._options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Select the option directly\n this._selectOption(bestMatch)\n\n // Close the dropdown\n this._open = false\n }\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const isOpen = this._open\n const selectedValues = this._selectedValues$.value\n\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this._inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open = true\n\n setTimeout(() => {\n const firstVisible = this._options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }, 10)\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = this._options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n\n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open = false\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open = false\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._selectOption(focusedOption)\n }\n break\n }\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","_valueSet","_valuesSet","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","error","validationMessage","_open","_inputValue","_visibleOptionsCount","_hasResults","_isSelectingOption","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","values","value","vals","next","Array","isArray","join","val","newValues","split","map","v","trim","filter","Boolean","currentValues","JSON","stringify","_updateInputDisplay","connectedCallback","id","Math","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","combineLatest","pipe","tap","selectedValue","selectedValues","_updateOptionSelection","takeUntil","disconnecting","subscribe","distinctUntilChanged","debounceTime","searchTerm","_filterOptions","_setupOptionHandlers","_options","forEach","option","index","setAttribute","tabIndex","onmousedown","e","preventDefault","onclick","stopPropagation","_selectOption","setTimeout","selected","includes","String","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","similarity","valueScore","score","max","sort","a","b","visibleCount","item","hidden","style","order","length","_announceToScreenReader","indexOf","_getSelectedLabels","_fireChangeEvent","blur","handleDocumentClick","path","composedPath","some","opt","document","addEventListener","take","removeEventListener","find","message","liveRegion","shadowRoot","querySelector","detail","dispatchEvent","CustomEvent","bubbles","composed","checkValidity","reportValidity","firstUpdated","_getChipLabel","_focusTextInput","focus","render","descriptionId","height","padding","fontSize","labelSize","getSizeStyles","html","when","classMap","repeat","handleChipRemove","ref","toLowerCase","replace","target","_handleKeyDown","_handleAutoSelectOnBlur","absolute","flex","bestMatch","bestScore","event","isOpen","key","lastValue","firstVisible","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";const m=require("rxjs"),f=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const a=require("lit/decorators.js");require("./tailwind.mixin-ClfV2_Nh.cjs");const b=require("./litElement.mixin-LplXbzd8.cjs"),h=require("lit"),v=require("lit/directives/ref.js"),g=require("lit/directives/repeat.js"),y=require("lit/directives/when.js"),c=require("rxjs/operators"),_=require("./search-DWW8IoOp.cjs");require("./input-chip-B7ANrtLF.cjs");var $=Object.defineProperty,x=Object.getOwnPropertyDescriptor,r=(e,t,i,n)=>{for(var u,s=n>1?void 0:n?x(t,i):t,l=e.length-1;l>=0;l--)(u=e[l])&&(s=(n?u(t,i,s):u(s))||s);return n&&s&&$(t,i,s),s};let o=class extends b.$LitElement(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}@keyframes onAutoFillStart{}sch-input::part(input):-webkit-autofill,sch-input input:-webkit-autofill{animation-name:onAutoFillStart;animation-duration:1ms}"){constructor(){super(...arguments),this._valueSet=!1,this._valuesSet=!1,this.required=!1,this.placeholder="",this.label="",this.name="",this.maxHeight="300px",this.multi=!1,this.description="",this.size="md",this.autocomplete="off",this.debounceMs=200,this.similarityThreshold=.3,this.error=!1,this.validationMessage="",this._open=!1,this._inputValue="",this._visibleOptionsCount=0,this._hasResults=!0,this._isSelectingOption=!1,this._inputElementRef=v.createRef(),this._selectedValue$=new m.BehaviorSubject(""),this._selectedValues$=new m.BehaviorSubject([]),this._inputValue$=new m.BehaviorSubject("")}get values(){return[...this._selectedValues$.value]}set values(e){this._valuesSet=!0,this._selectedValues$.next(Array.isArray(e)?[...e]:[])}get value(){return this.multi?this._selectedValues$.value.join(","):this._selectedValue$.value}set value(e){if(this._valueSet=!0,this.multi){const t=e?e.split(",").map(n=>n.trim()).filter(Boolean):[],i=this._selectedValues$.value;JSON.stringify(t)!==JSON.stringify(i)&&this._selectedValues$.next(t)}else e!==this._selectedValue$.value&&(this._selectedValue$.next(e),this._updateInputDisplay())}connectedCallback(){super.connectedCallback(),this.id||(this.id=`sch-autocomplete-${Math.random().toString(36).slice(2,9)}`),this._setupAutocompleteLogic(),this._setupDocumentClickHandler()}_setupAutocompleteLogic(){m.combineLatest([this._selectedValue$,this._selectedValues$]).pipe(c.tap(([e,t])=>{this._updateOptionSelection(e,t)}),c.takeUntil(this.disconnecting)).subscribe(),this._inputValue$.pipe(c.distinctUntilChanged(),c.debounceTime(this.debounceMs),c.tap(e=>{this._open&&this._filterOptions(e)}),c.takeUntil(this.disconnecting)).subscribe()}_setupOptionHandlers(){this._options.forEach((e,t)=>{e.setAttribute("role","option"),e.tabIndex=-1,e.id||(e.id=`${this.id}-option-${t}`),e.onmousedown=i=>{i.preventDefault(),this._isSelectingOption=!0},e.onclick=i=>{i.stopPropagation(),this._selectOption(e),setTimeout(()=>{this._isSelectingOption=!1},50)}})}_updateOptionSelection(e,t){this._options.forEach(i=>{i.selected=this.multi?t.includes(i.value):i.value===e,i.setAttribute("aria-selected",String(i.selected))})}_filterOptions(e){const t=e.trim();if(t){const i=this._options.map(u=>{const s=u.label||u.textContent||"",l=u.value,p=_.similarity(t,s),d=_.similarity(t,l);return{option:u,score:Math.max(1.1*p,d)}});i.sort((u,s)=>s.score-u.score);let n=0;i.forEach((u,s)=>{const{option:l,score:p}=u;p<this.similarityThreshold?l.hidden=!0:(l.hidden=!1,n++,l.style.order=String(s))}),this._visibleOptionsCount=n,this._hasResults=n>0}else this._options.forEach(i=>{i.hidden=!1,i.style.order="0"}),this._visibleOptionsCount=this._options.length,this._hasResults=!0;this._announceToScreenReader(this._visibleOptionsCount>0?`${this._visibleOptionsCount} option${this._visibleOptionsCount===1?"":"s"} available.`:"No results found.")}_selectOption(e){if(this.multi){const t=this._selectedValues$.value,i=t.indexOf(e.value)>-1?t.filter(n=>n!==e.value):[...t,e.value];this._selectedValues$.next(i),this._announceToScreenReader(i.length>0?`Selected: ${this._getSelectedLabels().join(", ")}`:"No options selected"),this._fireChangeEvent()}else this._selectedValue$.next(e.value),this._fireChangeEvent(),this._open=!1,this._inputValue=e.label||e.textContent||"",this._inputValue$.next(this._inputValue),setTimeout(()=>this._inputElementRef.value?.blur(),100),this._announceToScreenReader(`Selected: ${e.label||e.textContent}`)}_setupDocumentClickHandler(){const e=t=>{if(!this._open)return;const i=t.composedPath();i.includes(this)||this._options.some(n=>i.includes(n))||(this._open=!1,this._updateInputDisplay())};document.addEventListener("click",e),this.disconnecting.pipe(c.take(1)).subscribe(()=>{document.removeEventListener("click",e)})}_updateInputDisplay(){if(this.multi)return;const e=this._selectedValue$.value,t=this._options.find(i=>i.value===e);this._inputValue=t&&(t.label||t.textContent)||"",this._inputValue$.next(this._inputValue),this._inputElementRef.value&&(this._inputElementRef.value.value=this._inputValue)}_getSelectedLabels(){return this._options.filter(e=>this.multi?this._selectedValues$.value.includes(e.value):e.value===this._selectedValue$.value).map(e=>e.label||e.textContent||"")}_announceToScreenReader(e){const t=this.shadowRoot?.querySelector("#live-status");t&&(t.textContent=e)}_fireChangeEvent(){const e={value:this.value};this.multi&&(e.values=[...this._selectedValues$.value]),this.dispatchEvent(new CustomEvent("change",{detail:e,bubbles:!0,composed:!0}))}checkValidity(){return!this.required||(this.multi?this._selectedValues$.value.length>0:!!this._selectedValue$.value)}reportValidity(){return this._inputElementRef.value?this._inputElementRef.value.reportValidity():this.checkValidity()}firstUpdated(){this._setupOptionHandlers(),this._updateInputDisplay(),this.shadowRoot?.querySelector("slot")?.addEventListener("slotchange",()=>{this._setupOptionHandlers(),this._updateOptionSelection(this._selectedValue$.value,this._selectedValues$.value)})}handleChipRemove(e){const t=this._selectedValues$.value.filter(i=>i!==e);this._selectedValues$.next(t),this._fireChangeEvent(),this._announceToScreenReader(`Removed: ${this._getChipLabel(e)}`)}_getChipLabel(e){const t=this._options.find(i=>i.value===e);return t&&(t.label||t.textContent)||e}_focusTextInput(){this._inputElementRef.value&&this._inputElementRef.value.focus()}render(){const e=`${this.id}-desc`,{height:t,padding:i,fontSize:n,labelSize:u}=(()=>{switch(this.size){case"sm":return{height:"min-h-[40px]",padding:"px-2",fontSize:"text-sm",labelSize:"text-sm"};case"lg":return{height:"min-h-[60px]",padding:"px-5",fontSize:"text-lg",labelSize:"text-lg"};default:return{height:"min-h-[50px]",padding:"px-4",fontSize:"text-base",labelSize:"text-base"}}})();return h.html`
1
+ "use strict";const m=require("rxjs"),c=require("rxjs/operators"),f=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const a=require("lit/decorators.js");require("./tailwind.mixin-CYhJgwwb.cjs");const b=require("./litElement.mixin-DoBMt4ia.cjs"),h=require("lit"),v=require("lit/directives/ref.js"),g=require("lit/directives/repeat.js"),y=require("lit/directives/when.js"),_=require("./search-DWW8IoOp.cjs");require("./input-chip-CDLblIp9.cjs");var $=Object.defineProperty,x=Object.getOwnPropertyDescriptor,r=(e,t,i,n)=>{for(var u,s=n>1?void 0:n?x(t,i):t,l=e.length-1;l>=0;l--)(u=e[l])&&(s=(n?u(t,i,s):u(s))||s);return n&&s&&$(t,i,s),s};let o=class extends b.$LitElement(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}@keyframes onAutoFillStart{}sch-input::part(input):-webkit-autofill,sch-input input:-webkit-autofill{animation-name:onAutoFillStart;animation-duration:1ms}"){constructor(){super(...arguments),this._valueSet=!1,this._valuesSet=!1,this.required=!1,this.placeholder="",this.label="",this.name="",this.maxHeight="300px",this.multi=!1,this.description="",this.size="md",this.autocomplete="off",this.debounceMs=200,this.similarityThreshold=.3,this.error=!1,this.validationMessage="",this._open=!1,this._inputValue="",this._visibleOptionsCount=0,this._hasResults=!0,this._isSelectingOption=!1,this._inputElementRef=v.createRef(),this._selectedValue$=new m.BehaviorSubject(""),this._selectedValues$=new m.BehaviorSubject([]),this._inputValue$=new m.BehaviorSubject("")}get values(){return[...this._selectedValues$.value]}set values(e){this._valuesSet=!0,this._selectedValues$.next(Array.isArray(e)?[...e]:[])}get value(){return this.multi?this._selectedValues$.value.join(","):this._selectedValue$.value}set value(e){if(this._valueSet=!0,this.multi){const t=e?e.split(",").map(n=>n.trim()).filter(Boolean):[],i=this._selectedValues$.value;JSON.stringify(t)!==JSON.stringify(i)&&this._selectedValues$.next(t)}else e!==this._selectedValue$.value&&(this._selectedValue$.next(e),this._updateInputDisplay())}connectedCallback(){super.connectedCallback(),this.id||(this.id=`sch-autocomplete-${Math.random().toString(36).slice(2,9)}`),this._setupAutocompleteLogic(),this._setupDocumentClickHandler()}_setupAutocompleteLogic(){m.combineLatest([this._selectedValue$,this._selectedValues$]).pipe(c.tap(([e,t])=>{this._updateOptionSelection(e,t)}),c.takeUntil(this.disconnecting)).subscribe(),this._inputValue$.pipe(c.distinctUntilChanged(),c.debounceTime(this.debounceMs),c.tap(e=>{this._open&&this._filterOptions(e)}),c.takeUntil(this.disconnecting)).subscribe()}_setupOptionHandlers(){this._options.forEach((e,t)=>{e.setAttribute("role","option"),e.tabIndex=-1,e.id||(e.id=`${this.id}-option-${t}`),e.onmousedown=i=>{i.preventDefault(),this._isSelectingOption=!0},e.onclick=i=>{i.stopPropagation(),this._selectOption(e),setTimeout(()=>{this._isSelectingOption=!1},50)}})}_updateOptionSelection(e,t){this._options.forEach(i=>{i.selected=this.multi?t.includes(i.value):i.value===e,i.setAttribute("aria-selected",String(i.selected))})}_filterOptions(e){const t=e.trim();if(t){const i=this._options.map(u=>{const s=u.label||u.textContent||"",l=u.value,p=_.similarity(t,s),d=_.similarity(t,l);return{option:u,score:Math.max(1.1*p,d)}});i.sort((u,s)=>s.score-u.score);let n=0;i.forEach((u,s)=>{const{option:l,score:p}=u;p<this.similarityThreshold?l.hidden=!0:(l.hidden=!1,n++,l.style.order=String(s))}),this._visibleOptionsCount=n,this._hasResults=n>0}else this._options.forEach(i=>{i.hidden=!1,i.style.order="0"}),this._visibleOptionsCount=this._options.length,this._hasResults=!0;this._announceToScreenReader(this._visibleOptionsCount>0?`${this._visibleOptionsCount} option${this._visibleOptionsCount===1?"":"s"} available.`:"No results found.")}_selectOption(e){if(this.multi){const t=this._selectedValues$.value,i=t.indexOf(e.value)>-1?t.filter(n=>n!==e.value):[...t,e.value];this._selectedValues$.next(i),this._announceToScreenReader(i.length>0?`Selected: ${this._getSelectedLabels().join(", ")}`:"No options selected"),this._fireChangeEvent()}else this._selectedValue$.next(e.value),this._fireChangeEvent(),this._open=!1,this._inputValue=e.label||e.textContent||"",this._inputValue$.next(this._inputValue),setTimeout(()=>this._inputElementRef.value?.blur(),100),this._announceToScreenReader(`Selected: ${e.label||e.textContent}`)}_setupDocumentClickHandler(){const e=t=>{if(!this._open)return;const i=t.composedPath();i.includes(this)||this._options.some(n=>i.includes(n))||(this._open=!1,this._updateInputDisplay())};document.addEventListener("click",e),this.disconnecting.pipe(c.take(1)).subscribe(()=>{document.removeEventListener("click",e)})}_updateInputDisplay(){if(this.multi)return;const e=this._selectedValue$.value,t=this._options.find(i=>i.value===e);this._inputValue=t&&(t.label||t.textContent)||"",this._inputValue$.next(this._inputValue),this._inputElementRef.value&&(this._inputElementRef.value.value=this._inputValue)}_getSelectedLabels(){return this._options.filter(e=>this.multi?this._selectedValues$.value.includes(e.value):e.value===this._selectedValue$.value).map(e=>e.label||e.textContent||"")}_announceToScreenReader(e){const t=this.shadowRoot?.querySelector("#live-status");t&&(t.textContent=e)}_fireChangeEvent(){const e={value:this.value};this.multi&&(e.values=[...this._selectedValues$.value]),this.dispatchEvent(new CustomEvent("change",{detail:e,bubbles:!0,composed:!0}))}checkValidity(){return!this.required||(this.multi?this._selectedValues$.value.length>0:!!this._selectedValue$.value)}reportValidity(){return this._inputElementRef.value?this._inputElementRef.value.reportValidity():this.checkValidity()}firstUpdated(){this._setupOptionHandlers(),this._updateInputDisplay(),this.shadowRoot?.querySelector("slot")?.addEventListener("slotchange",()=>{this._setupOptionHandlers(),this._updateOptionSelection(this._selectedValue$.value,this._selectedValues$.value)})}handleChipRemove(e){const t=this._selectedValues$.value.filter(i=>i!==e);this._selectedValues$.next(t),this._fireChangeEvent(),this._announceToScreenReader(`Removed: ${this._getChipLabel(e)}`)}_getChipLabel(e){const t=this._options.find(i=>i.value===e);return t&&(t.label||t.textContent)||e}_focusTextInput(){this._inputElementRef.value&&this._inputElementRef.value.focus()}render(){const e=`${this.id}-desc`,{height:t,padding:i,fontSize:n,labelSize:u}=(()=>{switch(this.size){case"sm":return{height:"min-h-[40px]",padding:"px-2",fontSize:"text-sm",labelSize:"text-sm"};case"lg":return{height:"min-h-[60px]",padding:"px-5",fontSize:"text-lg",labelSize:"text-lg"};default:return{height:"min-h-[50px]",padding:"px-4",fontSize:"text-base",labelSize:"text-base"}}})();return h.html`
2
2
  <div class="relative">
3
3
  <!-- Screen reader live region -->
4
4
  <div id="live-status" role="status" aria-live="polite" class="sr-only"></div>
@@ -109,4 +109,4 @@
109
109
  </ul>
110
110
  </div>
111
111
  `}_handleAutoSelectOnBlur(){if(this._isSelectingOption||this.multi||!this._open||!this._inputValue.trim())return;const e=this._inputValue.trim();let t=null,i=0;this._options.forEach(n=>{if(n.hidden)return;const u=n.label||n.textContent||"",s=n.value,l=_.similarity(e,u),p=_.similarity(e,s),d=Math.max(1.1*l,p);d>i&&d>=this.similarityThreshold&&(i=d,t=n)}),t&&(this._selectOption(t),this._open=!1)}_handleKeyDown(e){const t=this._open,i=this._selectedValues$.value;if(this.multi&&e.key==="Backspace"&&!this._inputValue&&i.length>0&&!t){e.preventDefault();const l=i[i.length-1];return void this.handleChipRemove(l)}if(!t&&(e.key==="ArrowDown"||e.key==="Enter"))return e.preventDefault(),this._open=!0,void setTimeout(()=>{this._options.find(p=>!p.hidden)?.focus()},10);if(!t)return;const n=this._options.filter(l=>!l.hidden).sort((l,p)=>parseInt(l.style.order||"0")-parseInt(p.style.order||"0")),u=n.find(l=>l===document.activeElement),s=u?n.indexOf(u):-1;switch(e.key){case"Escape":e.preventDefault(),this._open=!1,this._updateInputDisplay(),this._inputElementRef.value?.focus();break;case"Tab":this._open=!1,this._updateInputDisplay();break;case"ArrowDown":e.preventDefault();const l=s<n.length-1?s+1:0;n[l]?.focus();break;case"ArrowUp":e.preventDefault();const p=s>0?s-1:n.length-1;n[p]?.focus();break;case"Home":e.preventDefault(),n[0]?.focus();break;case"End":e.preventDefault(),n[n.length-1]?.focus();break;case"Enter":case" ":u&&(e.preventDefault(),this._selectOption(u))}}};r([a.property({type:Boolean})],o.prototype,"required",2),r([a.property({type:String})],o.prototype,"placeholder",2),r([a.property({type:String,reflect:!0})],o.prototype,"label",2),r([a.property({type:String})],o.prototype,"name",2),r([a.property({type:String})],o.prototype,"maxHeight",2),r([a.property({type:Boolean})],o.prototype,"multi",2),r([a.property({type:String})],o.prototype,"description",2),r([a.property({type:String,reflect:!0})],o.prototype,"size",2),r([a.property({type:String})],o.prototype,"autocomplete",2),r([a.property({type:Number})],o.prototype,"debounceMs",2),r([a.property({type:Number})],o.prototype,"similarityThreshold",2),r([a.property({type:Boolean})],o.prototype,"error",2),r([a.property({type:String})],o.prototype,"validationMessage",2),r([a.property({type:Array})],o.prototype,"values",1),r([a.property({type:String,reflect:!0})],o.prototype,"value",1),r([a.state()],o.prototype,"_open",2),r([a.state()],o.prototype,"_inputValue",2),r([a.state()],o.prototype,"_visibleOptionsCount",2),r([a.state()],o.prototype,"_hasResults",2),r([a.query("#options")],o.prototype,"_listbox",2),r([a.query("sch-input")],o.prototype,"_input",2),r([a.queryAssignedElements({flatten:!0})],o.prototype,"_options",2),o=r([a.customElement("schmancy-autocomplete")],o);
112
- //# sourceMappingURL=autocomplete-CenwFcT1.cjs.map
112
+ //# sourceMappingURL=autocomplete-DkJqOYTg.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-CenwFcT1.cjs","sources":["../src/autocomplete/autocomplete.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n// Import chip component for multi-select display\nimport '../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Track whether value/values have been explicitly set\n _valueSet: boolean = false\n _valuesSet: boolean = false\n\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n @property({ type: Boolean }) error = false\n @property({ type: String }) validationMessage = ''\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._valuesSet = true\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n this._valueSet = true\n if (this.multi) {\n const newValues = val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n const currentValues = this._selectedValues$.value\n // Only update if values actually changed\n if (JSON.stringify(newValues) !== JSON.stringify(currentValues)) {\n this._selectedValues$.next(newValues)\n }\n } else {\n // Only update if value actually changed\n if (val !== this._selectedValue$.value) {\n this._selectedValue$.next(val)\n // Update the input display when value is set\n this._updateInputDisplay()\n }\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // Track if we're clicking on an option to prevent blur interference\n private _isSelectingOption = false\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects - only what we actually need\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n\n connectedCallback() {\n super.connectedCallback()\n\n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n }\n\n private _setupAutocompleteLogic() {\n // Sync selection state\n combineLatest([\n this._selectedValue$,\n this._selectedValues$\n ]).pipe(\n tap(([selectedValue, selectedValues]) => {\n this._updateOptionSelection(selectedValue, selectedValues)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Filter options based on input\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n tap(searchTerm => {\n if (this._open) {\n this._filterOptions(searchTerm)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupOptionHandlers() {\n this._options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n // Prevent blur handler from interfering with option selection\n option.onmousedown = (e: MouseEvent) => {\n e.preventDefault() // Prevent focus loss\n this._isSelectingOption = true\n }\n\n // Handle the actual selection\n option.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._selectOption(option)\n // Reset flag after a short delay\n setTimeout(() => {\n this._isSelectingOption = false\n }, 50)\n }\n })\n }\n\n private _updateOptionSelection(selectedValue: string, selectedValues: string[]) {\n this._options.forEach(option => {\n option.selected = this.multi\n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }\n\n private _filterOptions(searchTerm: string) {\n const term = searchTerm.trim()\n\n if (!term) {\n // Show all options if no search term\n this._options.forEach(option => {\n option.hidden = false\n option.style.order = '0'\n })\n this._visibleOptionsCount = this._options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = this._options.map(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n const score = Math.max(labelScore * 1.1, valueScore)\n\n return { option, score }\n })\n\n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n\n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n option.style.order = String(index)\n }\n })\n\n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n\n this._announceToScreenReader(\n this._visibleOptionsCount > 0\n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }\n\n private _selectOption(option: SchmancyOption) {\n if (this.multi) {\n const currentValues = this._selectedValues$.value\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? currentValues.filter(v => v !== option.value)\n : [...currentValues, option.value]\n\n this._selectedValues$.next(newValues)\n this._announceToScreenReader(\n newValues.length > 0\n ? `Selected: ${this._getSelectedLabels().join(', ')}`\n : 'No options selected'\n )\n this._fireChangeEvent()\n } else {\n // Fix the bug: Update value BEFORE firing event\n this._selectedValue$.next(option.value)\n\n // Now fire event with the NEW value\n this._fireChangeEvent()\n\n // Update UI\n this._open = false\n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n\n // Blur the input\n setTimeout(() => this._inputElementRef.value?.blur(), 100)\n\n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }\n\n private _setupDocumentClickHandler() {\n // Simple document click handler\n const handleDocumentClick = (e: MouseEvent) => {\n if (!this._open) return\n\n const path = e.composedPath()\n if (!path.includes(this) && !this._options.some(opt => path.includes(opt))) {\n this._open = false\n this._updateInputDisplay()\n }\n }\n\n document.addEventListener('click', handleDocumentClick)\n\n // Cleanup on disconnect\n this.disconnecting.pipe(take(1)).subscribe(() => {\n document.removeEventListener('click', handleDocumentClick)\n })\n }\n\n\n private _updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) return\n\n const selectedValue = this._selectedValue$.value\n const option = this._options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n\n if (this._inputElementRef.value) {\n this._inputElementRef.value.value = this._inputValue\n }\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n this._setupOptionHandlers()\n\n // Sync initial value with display after options are available\n this._updateInputDisplay()\n\n // Update options when slot changes\n const slot = this.shadowRoot?.querySelector('slot')\n slot?.addEventListener('slotchange', () => {\n this._setupOptionHandlers()\n this._updateOptionSelection(this._selectedValue$.value, this._selectedValues$.value)\n })\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this._selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this._selectedValues$.next(newValues)\n this._fireChangeEvent()\n this._announceToScreenReader(`Removed: ${this._getChipLabel(value)}`)\n }\n\n private _getChipLabel(value: string): string {\n const option = this._options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private _focusTextInput() {\n if (this._inputElementRef.value) {\n this._inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this._focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this._selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"flex-shrink-0 my-0.5\"\n >\n ${this._getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .placeholder=${this._selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this._inputValue}\n .autocomplete=${this.autocomplete}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this._inputValue = ''\n this._inputValue$.next('')\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div class=\"mt-1 text-sm text-error-default\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._setupOptionHandlers()\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private _handleAutoSelectOnBlur() {\n // Don't run if we're clicking on an option (prevents interference with click handler)\n if (this._isSelectingOption) {\n return\n }\n\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this._open || !this._inputValue.trim()) {\n return\n }\n \n const searchTerm = this._inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this._options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Select the option directly\n this._selectOption(bestMatch)\n\n // Close the dropdown\n this._open = false\n }\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const isOpen = this._open\n const selectedValues = this._selectedValues$.value\n\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this._inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open = true\n\n setTimeout(() => {\n const firstVisible = this._options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }, 10)\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = this._options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n\n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open = false\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open = false\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._selectOption(focusedOption)\n }\n break\n }\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","_valueSet","_valuesSet","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","error","validationMessage","_open","_inputValue","_visibleOptionsCount","_hasResults","_isSelectingOption","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","values","value","vals","next","Array","isArray","join","val","newValues","split","map","v","trim","filter","Boolean","currentValues","JSON","stringify","_updateInputDisplay","connectedCallback","id","Math","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","combineLatest","pipe","tap","selectedValue","selectedValues","_updateOptionSelection","takeUntil","disconnecting","subscribe","distinctUntilChanged","debounceTime","searchTerm","_filterOptions","_setupOptionHandlers","_options","forEach","option","index","setAttribute","tabIndex","onmousedown","e","preventDefault","onclick","stopPropagation","_selectOption","setTimeout","selected","includes","String","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","similarity","valueScore","score","max","sort","a","b","visibleCount","item","hidden","style","order","length","_announceToScreenReader","indexOf","_getSelectedLabels","_fireChangeEvent","blur","handleDocumentClick","path","composedPath","some","opt","document","addEventListener","take","removeEventListener","find","message","liveRegion","shadowRoot","querySelector","detail","dispatchEvent","CustomEvent","bubbles","composed","checkValidity","reportValidity","firstUpdated","_getChipLabel","_focusTextInput","focus","render","descriptionId","height","padding","fontSize","labelSize","getSizeStyles","html","when","classMap","repeat","handleChipRemove","ref","toLowerCase","replace","target","_handleKeyDown","_handleAutoSelectOnBlur","absolute","flex","bestMatch","bestScore","event","isOpen","key","lastValue","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete-DkJqOYTg.cjs","sources":["../src/autocomplete/autocomplete.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n// Import chip component for multi-select display\nimport '../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Track whether value/values have been explicitly set\n _valueSet: boolean = false\n _valuesSet: boolean = false\n\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n @property({ type: Boolean }) error = false\n @property({ type: String }) validationMessage = ''\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._valuesSet = true\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n this._valueSet = true\n if (this.multi) {\n const newValues = val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n const currentValues = this._selectedValues$.value\n // Only update if values actually changed\n if (JSON.stringify(newValues) !== JSON.stringify(currentValues)) {\n this._selectedValues$.next(newValues)\n }\n } else {\n // Only update if value actually changed\n if (val !== this._selectedValue$.value) {\n this._selectedValue$.next(val)\n // Update the input display when value is set\n this._updateInputDisplay()\n }\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // Track if we're clicking on an option to prevent blur interference\n private _isSelectingOption = false\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects - only what we actually need\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n\n connectedCallback() {\n super.connectedCallback()\n\n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n }\n\n private _setupAutocompleteLogic() {\n // Sync selection state\n combineLatest([\n this._selectedValue$,\n this._selectedValues$\n ]).pipe(\n tap(([selectedValue, selectedValues]) => {\n this._updateOptionSelection(selectedValue, selectedValues)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Filter options based on input\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n tap(searchTerm => {\n if (this._open) {\n this._filterOptions(searchTerm)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupOptionHandlers() {\n this._options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n // Prevent blur handler from interfering with option selection\n option.onmousedown = (e: MouseEvent) => {\n e.preventDefault() // Prevent focus loss\n this._isSelectingOption = true\n }\n\n // Handle the actual selection\n option.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._selectOption(option)\n // Reset flag after a short delay\n setTimeout(() => {\n this._isSelectingOption = false\n }, 50)\n }\n })\n }\n\n private _updateOptionSelection(selectedValue: string, selectedValues: string[]) {\n this._options.forEach(option => {\n option.selected = this.multi\n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }\n\n private _filterOptions(searchTerm: string) {\n const term = searchTerm.trim()\n\n if (!term) {\n // Show all options if no search term\n this._options.forEach(option => {\n option.hidden = false\n option.style.order = '0'\n })\n this._visibleOptionsCount = this._options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = this._options.map(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n const score = Math.max(labelScore * 1.1, valueScore)\n\n return { option, score }\n })\n\n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n\n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n option.style.order = String(index)\n }\n })\n\n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n\n this._announceToScreenReader(\n this._visibleOptionsCount > 0\n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }\n\n private _selectOption(option: SchmancyOption) {\n if (this.multi) {\n const currentValues = this._selectedValues$.value\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? currentValues.filter(v => v !== option.value)\n : [...currentValues, option.value]\n\n this._selectedValues$.next(newValues)\n this._announceToScreenReader(\n newValues.length > 0\n ? `Selected: ${this._getSelectedLabels().join(', ')}`\n : 'No options selected'\n )\n this._fireChangeEvent()\n } else {\n // Fix the bug: Update value BEFORE firing event\n this._selectedValue$.next(option.value)\n\n // Now fire event with the NEW value\n this._fireChangeEvent()\n\n // Update UI\n this._open = false\n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n\n // Blur the input\n setTimeout(() => this._inputElementRef.value?.blur(), 100)\n\n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }\n\n private _setupDocumentClickHandler() {\n // Simple document click handler\n const handleDocumentClick = (e: MouseEvent) => {\n if (!this._open) return\n\n const path = e.composedPath()\n if (!path.includes(this) && !this._options.some(opt => path.includes(opt))) {\n this._open = false\n this._updateInputDisplay()\n }\n }\n\n document.addEventListener('click', handleDocumentClick)\n\n // Cleanup on disconnect\n this.disconnecting.pipe(take(1)).subscribe(() => {\n document.removeEventListener('click', handleDocumentClick)\n })\n }\n\n\n private _updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) return\n\n const selectedValue = this._selectedValue$.value\n const option = this._options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n\n if (this._inputElementRef.value) {\n this._inputElementRef.value.value = this._inputValue\n }\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n this._setupOptionHandlers()\n\n // Sync initial value with display after options are available\n this._updateInputDisplay()\n\n // Update options when slot changes\n const slot = this.shadowRoot?.querySelector('slot')\n slot?.addEventListener('slotchange', () => {\n this._setupOptionHandlers()\n this._updateOptionSelection(this._selectedValue$.value, this._selectedValues$.value)\n })\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this._selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this._selectedValues$.next(newValues)\n this._fireChangeEvent()\n this._announceToScreenReader(`Removed: ${this._getChipLabel(value)}`)\n }\n\n private _getChipLabel(value: string): string {\n const option = this._options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private _focusTextInput() {\n if (this._inputElementRef.value) {\n this._inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this._focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this._selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"flex-shrink-0 my-0.5\"\n >\n ${this._getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .placeholder=${this._selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this._inputValue}\n .autocomplete=${this.autocomplete}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this._inputValue = ''\n this._inputValue$.next('')\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div class=\"mt-1 text-sm text-error-default\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open = true\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._setupOptionHandlers()\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private _handleAutoSelectOnBlur() {\n // Don't run if we're clicking on an option (prevents interference with click handler)\n if (this._isSelectingOption) {\n return\n }\n\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this._open || !this._inputValue.trim()) {\n return\n }\n \n const searchTerm = this._inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this._options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Select the option directly\n this._selectOption(bestMatch)\n\n // Close the dropdown\n this._open = false\n }\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const isOpen = this._open\n const selectedValues = this._selectedValues$.value\n\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this._inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open = true\n\n setTimeout(() => {\n const firstVisible = this._options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }, 10)\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = this._options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n\n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open = false\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open = false\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._selectOption(focusedOption)\n }\n break\n }\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","_valueSet","_valuesSet","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","error","validationMessage","_open","_inputValue","_visibleOptionsCount","_hasResults","_isSelectingOption","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","values","value","vals","next","Array","isArray","join","val","newValues","split","map","v","trim","filter","Boolean","currentValues","JSON","stringify","_updateInputDisplay","connectedCallback","id","Math","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","combineLatest","pipe","tap","selectedValue","selectedValues","_updateOptionSelection","takeUntil","disconnecting","subscribe","distinctUntilChanged","debounceTime","searchTerm","_filterOptions","_setupOptionHandlers","_options","forEach","option","index","setAttribute","tabIndex","onmousedown","e","preventDefault","onclick","stopPropagation","_selectOption","setTimeout","selected","includes","String","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","similarity","valueScore","score","max","sort","a","b","visibleCount","item","hidden","style","order","length","_announceToScreenReader","indexOf","_getSelectedLabels","_fireChangeEvent","blur","handleDocumentClick","path","composedPath","some","opt","document","addEventListener","take","removeEventListener","find","message","liveRegion","shadowRoot","querySelector","detail","dispatchEvent","CustomEvent","bubbles","composed","checkValidity","reportValidity","firstUpdated","_getChipLabel","_focusTextInput","focus","render","descriptionId","height","padding","fontSize","labelSize","getSizeStyles","html","when","classMap","repeat","handleChipRemove","ref","toLowerCase","replace","target","_handleKeyDown","_handleAutoSelectOnBlur","absolute","flex","bestMatch","bestScore","event","isOpen","key","lastValue","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";require("./autocomplete-CenwFcT1.cjs");
1
+ "use strict";require("./autocomplete-DkJqOYTg.cjs");
2
2
  //# sourceMappingURL=autocomplete.cjs.map
@@ -1,2 +1,2 @@
1
- import "./autocomplete-9RkU9LmA.js";
1
+ import "./autocomplete-C5DIxpTG.js";
2
2
  //# sourceMappingURL=autocomplete.js.map