@expressivecss/expressive 0.14.1 → 0.16.0

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 (603) hide show
  1. package/CHANGELOG.md +1589 -1
  2. package/README.md +9 -8
  3. package/dist/css/expressive.css +19304 -12021
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/fonts/LICENSE-noto-sans-arabic +93 -0
  8. package/dist/fonts/LICENSE-noto-sans-hebrew +93 -0
  9. package/dist/fonts/LICENSE-noto-sans-thai +93 -0
  10. package/dist/fonts/material-symbols-outlined.woff2 +0 -0
  11. package/dist/fonts/material-symbols-rounded.woff2 +0 -0
  12. package/dist/fonts/material-symbols-sharp.woff2 +0 -0
  13. package/dist/fonts/noto-sans-arabic-arabic-400.woff2 +0 -0
  14. package/dist/fonts/noto-sans-arabic-arabic-500.woff2 +0 -0
  15. package/dist/fonts/noto-sans-arabic-arabic-700.woff2 +0 -0
  16. package/dist/fonts/noto-sans-cyrillic-400.woff2 +0 -0
  17. package/dist/fonts/noto-sans-cyrillic-500.woff2 +0 -0
  18. package/dist/fonts/noto-sans-cyrillic-700.woff2 +0 -0
  19. package/dist/fonts/noto-sans-cyrillic-ext-400.woff2 +0 -0
  20. package/dist/fonts/noto-sans-cyrillic-ext-500.woff2 +0 -0
  21. package/dist/fonts/noto-sans-cyrillic-ext-700.woff2 +0 -0
  22. package/dist/fonts/noto-sans-devanagari-400.woff2 +0 -0
  23. package/dist/fonts/noto-sans-devanagari-500.woff2 +0 -0
  24. package/dist/fonts/noto-sans-devanagari-700.woff2 +0 -0
  25. package/dist/fonts/noto-sans-greek-400.woff2 +0 -0
  26. package/dist/fonts/noto-sans-greek-500.woff2 +0 -0
  27. package/dist/fonts/noto-sans-greek-700.woff2 +0 -0
  28. package/dist/fonts/noto-sans-greek-ext-400.woff2 +0 -0
  29. package/dist/fonts/noto-sans-greek-ext-500.woff2 +0 -0
  30. package/dist/fonts/noto-sans-greek-ext-700.woff2 +0 -0
  31. package/dist/fonts/noto-sans-hebrew-hebrew-400.woff2 +0 -0
  32. package/dist/fonts/noto-sans-hebrew-hebrew-500.woff2 +0 -0
  33. package/dist/fonts/noto-sans-hebrew-hebrew-700.woff2 +0 -0
  34. package/dist/fonts/noto-sans-latin-700.woff2 +0 -0
  35. package/dist/fonts/noto-sans-latin-ext-400.woff2 +0 -0
  36. package/dist/fonts/noto-sans-latin-ext-500.woff2 +0 -0
  37. package/dist/fonts/noto-sans-latin-ext-700.woff2 +0 -0
  38. package/dist/fonts/noto-sans-thai-thai-400.woff2 +0 -0
  39. package/dist/fonts/noto-sans-thai-thai-500.woff2 +0 -0
  40. package/dist/fonts/noto-sans-thai-thai-700.woff2 +0 -0
  41. package/dist/fonts/noto-sans-vietnamese-400.woff2 +0 -0
  42. package/dist/fonts/noto-sans-vietnamese-500.woff2 +0 -0
  43. package/dist/fonts/noto-sans-vietnamese-700.woff2 +0 -0
  44. package/dist/fonts/roboto-cyrillic-400.woff2 +0 -0
  45. package/dist/fonts/roboto-cyrillic-500.woff2 +0 -0
  46. package/dist/fonts/roboto-cyrillic-700.woff2 +0 -0
  47. package/dist/fonts/roboto-cyrillic-ext-400.woff2 +0 -0
  48. package/dist/fonts/roboto-cyrillic-ext-500.woff2 +0 -0
  49. package/dist/fonts/roboto-cyrillic-ext-700.woff2 +0 -0
  50. package/dist/fonts/roboto-greek-400.woff2 +0 -0
  51. package/dist/fonts/roboto-greek-500.woff2 +0 -0
  52. package/dist/fonts/roboto-greek-700.woff2 +0 -0
  53. package/dist/fonts/roboto-greek-ext-400.woff2 +0 -0
  54. package/dist/fonts/roboto-greek-ext-500.woff2 +0 -0
  55. package/dist/fonts/roboto-greek-ext-700.woff2 +0 -0
  56. package/dist/fonts/roboto-latin-700.woff2 +0 -0
  57. package/dist/fonts/roboto-latin-ext-400.woff2 +0 -0
  58. package/dist/fonts/roboto-latin-ext-500.woff2 +0 -0
  59. package/dist/fonts/roboto-latin-ext-700.woff2 +0 -0
  60. package/dist/fonts/roboto-vietnamese-400.woff2 +0 -0
  61. package/dist/fonts/roboto-vietnamese-500.woff2 +0 -0
  62. package/dist/fonts/roboto-vietnamese-700.woff2 +0 -0
  63. package/dist/js/chunks/chunk-2CS6TITK.mjs +219 -0
  64. package/dist/js/chunks/chunk-2CS6TITK.mjs.map +7 -0
  65. package/dist/js/chunks/chunk-2RLBDFH4.mjs +108 -0
  66. package/dist/js/chunks/chunk-2RLBDFH4.mjs.map +7 -0
  67. package/dist/js/chunks/chunk-3L3QIYLC.mjs +85 -0
  68. package/dist/js/chunks/chunk-3L3QIYLC.mjs.map +7 -0
  69. package/dist/js/chunks/chunk-4EWGD4V2.mjs +75 -0
  70. package/dist/js/chunks/chunk-4EWGD4V2.mjs.map +7 -0
  71. package/dist/js/chunks/chunk-4IKVPCSU.mjs +7 -0
  72. package/dist/js/chunks/chunk-4IKVPCSU.mjs.map +7 -0
  73. package/dist/js/chunks/chunk-4PIXLDNJ.mjs +127 -0
  74. package/dist/js/chunks/chunk-4PIXLDNJ.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-A7ALMYUR.mjs → chunk-4QUCNFSD.mjs} +68 -125
  76. package/dist/js/chunks/chunk-4QUCNFSD.mjs.map +7 -0
  77. package/dist/js/chunks/{chunk-4TKTLGEM.mjs → chunk-4TRZ2AER.mjs} +35 -41
  78. package/dist/js/chunks/chunk-4TRZ2AER.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-BG6ZRB5H.mjs → chunk-5KIHWJI2.mjs} +40 -26
  80. package/dist/js/chunks/chunk-5KIHWJI2.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-67ZPPKXS.mjs} +20 -33
  82. package/dist/js/chunks/chunk-67ZPPKXS.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-6FSEUFVW.mjs} +40 -29
  84. package/dist/js/chunks/chunk-6FSEUFVW.mjs.map +7 -0
  85. package/dist/js/chunks/chunk-752ADW4M.mjs +225 -0
  86. package/dist/js/chunks/chunk-752ADW4M.mjs.map +7 -0
  87. package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-75E5EDJF.mjs} +3 -11
  88. package/dist/js/chunks/chunk-75E5EDJF.mjs.map +7 -0
  89. package/dist/js/chunks/{chunk-TBM3FT7G.mjs → chunk-7NLUI3RR.mjs} +148 -78
  90. package/dist/js/chunks/chunk-7NLUI3RR.mjs.map +7 -0
  91. package/dist/js/chunks/chunk-7W7TV6NY.mjs +108 -0
  92. package/dist/js/chunks/chunk-7W7TV6NY.mjs.map +7 -0
  93. package/dist/js/chunks/chunk-7YQBHTK3.mjs +225 -0
  94. package/dist/js/chunks/chunk-7YQBHTK3.mjs.map +7 -0
  95. package/dist/js/chunks/chunk-7YZ5CN3V.mjs +33 -0
  96. package/dist/js/chunks/chunk-7YZ5CN3V.mjs.map +7 -0
  97. package/dist/js/chunks/chunk-AI73GJKG.mjs +28 -0
  98. package/dist/js/chunks/chunk-AI73GJKG.mjs.map +7 -0
  99. package/dist/js/chunks/{chunk-NS2UMNZV.mjs → chunk-ANKFWNWT.mjs} +21 -45
  100. package/dist/js/chunks/chunk-ANKFWNWT.mjs.map +7 -0
  101. package/dist/js/chunks/{chunk-GIW4K4SE.mjs → chunk-B7DQFHA5.mjs} +37 -53
  102. package/dist/js/chunks/chunk-B7DQFHA5.mjs.map +7 -0
  103. package/dist/js/chunks/chunk-BIGU5RCJ.mjs +153 -0
  104. package/dist/js/chunks/chunk-BIGU5RCJ.mjs.map +7 -0
  105. package/dist/js/chunks/{chunk-GUB3TNO2.mjs → chunk-BPF3I2MN.mjs} +109 -27
  106. package/dist/js/chunks/chunk-BPF3I2MN.mjs.map +7 -0
  107. package/dist/js/chunks/chunk-CMGXGYUC.mjs +74 -0
  108. package/dist/js/chunks/chunk-CMGXGYUC.mjs.map +7 -0
  109. package/dist/js/chunks/{chunk-JIDMQGK6.mjs → chunk-CSYWKEK3.mjs} +322 -223
  110. package/dist/js/chunks/chunk-CSYWKEK3.mjs.map +7 -0
  111. package/dist/js/chunks/chunk-CZSQHXEV.mjs +227 -0
  112. package/dist/js/chunks/chunk-CZSQHXEV.mjs.map +7 -0
  113. package/dist/js/chunks/chunk-DZYVU75J.mjs +121 -0
  114. package/dist/js/chunks/chunk-DZYVU75J.mjs.map +7 -0
  115. package/dist/js/chunks/{chunk-QDAL4IYN.mjs → chunk-EC26RU2D.mjs} +11 -29
  116. package/dist/js/chunks/chunk-EC26RU2D.mjs.map +7 -0
  117. package/dist/js/chunks/{chunk-3GVFZ4XO.mjs → chunk-EVCVFEV3.mjs} +238 -152
  118. package/dist/js/chunks/chunk-EVCVFEV3.mjs.map +7 -0
  119. package/dist/js/chunks/chunk-FCNF4GRJ.mjs +445 -0
  120. package/dist/js/chunks/chunk-FCNF4GRJ.mjs.map +7 -0
  121. package/dist/js/chunks/chunk-GCWWEZKO.mjs +342 -0
  122. package/dist/js/chunks/chunk-GCWWEZKO.mjs.map +7 -0
  123. package/dist/js/chunks/chunk-GNRSYMVH.mjs +1 -0
  124. package/dist/js/chunks/chunk-GVZQH2H5.mjs +54 -0
  125. package/dist/js/chunks/chunk-GVZQH2H5.mjs.map +7 -0
  126. package/dist/js/chunks/chunk-GWZ76SR4.mjs +435 -0
  127. package/dist/js/chunks/chunk-GWZ76SR4.mjs.map +7 -0
  128. package/dist/js/chunks/{chunk-ZAS25YFD.mjs → chunk-ILDRRG7T.mjs} +21 -23
  129. package/dist/js/chunks/chunk-ILDRRG7T.mjs.map +7 -0
  130. package/dist/js/chunks/chunk-INLZWHLY.mjs +80 -0
  131. package/dist/js/chunks/chunk-INLZWHLY.mjs.map +7 -0
  132. package/dist/js/chunks/chunk-JUKBBN6P.mjs +175 -0
  133. package/dist/js/chunks/chunk-JUKBBN6P.mjs.map +7 -0
  134. package/dist/js/chunks/chunk-KYIEG4U3.mjs +730 -0
  135. package/dist/js/chunks/chunk-KYIEG4U3.mjs.map +7 -0
  136. package/dist/js/chunks/{chunk-KHV6DZXX.mjs → chunk-KZPSAXIU.mjs} +156 -46
  137. package/dist/js/chunks/chunk-KZPSAXIU.mjs.map +7 -0
  138. package/dist/js/chunks/chunk-LDXCC2L3.mjs +438 -0
  139. package/dist/js/chunks/chunk-LDXCC2L3.mjs.map +7 -0
  140. package/dist/js/chunks/chunk-NAC72P7R.mjs +137 -0
  141. package/dist/js/chunks/chunk-NAC72P7R.mjs.map +7 -0
  142. package/dist/js/chunks/chunk-NBJAUGPP.mjs +244 -0
  143. package/dist/js/chunks/chunk-NBJAUGPP.mjs.map +7 -0
  144. package/dist/js/chunks/chunk-NNHVANQA.mjs +113 -0
  145. package/dist/js/chunks/chunk-NNHVANQA.mjs.map +7 -0
  146. package/dist/js/chunks/chunk-NVQ5EHCU.mjs +376 -0
  147. package/dist/js/chunks/chunk-NVQ5EHCU.mjs.map +7 -0
  148. package/dist/js/chunks/{chunk-Z2NRKI7R.mjs → chunk-OP43LLIC.mjs} +44 -73
  149. package/dist/js/chunks/chunk-OP43LLIC.mjs.map +7 -0
  150. package/dist/js/chunks/chunk-OUCHKSAW.mjs +63 -0
  151. package/dist/js/chunks/chunk-OUCHKSAW.mjs.map +7 -0
  152. package/dist/js/chunks/{chunk-PM655FXL.mjs → chunk-OYNUDOHR.mjs} +20 -48
  153. package/dist/js/chunks/chunk-OYNUDOHR.mjs.map +7 -0
  154. package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-P6DRQ6KS.mjs} +36 -31
  155. package/dist/js/chunks/chunk-P6DRQ6KS.mjs.map +7 -0
  156. package/dist/js/chunks/chunk-PA7NU5AK.mjs +99 -0
  157. package/dist/js/chunks/chunk-PA7NU5AK.mjs.map +7 -0
  158. package/dist/js/chunks/chunk-QACZ6TUP.mjs +224 -0
  159. package/dist/js/chunks/chunk-QACZ6TUP.mjs.map +7 -0
  160. package/dist/js/chunks/{chunk-5HQSGDZ5.mjs → chunk-QXKWVHBD.mjs} +286 -203
  161. package/dist/js/chunks/chunk-QXKWVHBD.mjs.map +7 -0
  162. package/dist/js/chunks/{chunk-DAIU5SLG.mjs → chunk-ROH2HDB4.mjs} +7 -6
  163. package/dist/js/chunks/chunk-ROH2HDB4.mjs.map +7 -0
  164. package/dist/js/chunks/chunk-S23RJ3XY.mjs +86 -0
  165. package/dist/js/chunks/chunk-S23RJ3XY.mjs.map +7 -0
  166. package/dist/js/chunks/{chunk-FS7XY3HT.mjs → chunk-SPPHF7YZ.mjs} +36 -29
  167. package/dist/js/chunks/chunk-SPPHF7YZ.mjs.map +7 -0
  168. package/dist/js/chunks/chunk-T3BNSRP3.mjs +152 -0
  169. package/dist/js/chunks/chunk-T3BNSRP3.mjs.map +7 -0
  170. package/dist/js/chunks/chunk-TFABTUAZ.mjs +108 -0
  171. package/dist/js/chunks/chunk-TFABTUAZ.mjs.map +7 -0
  172. package/dist/js/chunks/chunk-U4B3VHFS.mjs +507 -0
  173. package/dist/js/chunks/chunk-U4B3VHFS.mjs.map +7 -0
  174. package/dist/js/chunks/chunk-UGJHCHXG.mjs +341 -0
  175. package/dist/js/chunks/chunk-UGJHCHXG.mjs.map +7 -0
  176. package/dist/js/chunks/chunk-VFV75DHF.mjs +70 -0
  177. package/dist/js/chunks/chunk-VFV75DHF.mjs.map +7 -0
  178. package/dist/js/chunks/{chunk-4HZMB7LI.mjs → chunk-VGY4M57S.mjs} +281 -135
  179. package/dist/js/chunks/chunk-VGY4M57S.mjs.map +7 -0
  180. package/dist/js/chunks/chunk-VH4BMAZS.mjs +167 -0
  181. package/dist/js/chunks/chunk-VH4BMAZS.mjs.map +7 -0
  182. package/dist/js/chunks/chunk-VJVQIXHC.mjs +123 -0
  183. package/dist/js/chunks/chunk-VJVQIXHC.mjs.map +7 -0
  184. package/dist/js/chunks/{chunk-S3XDFGSZ.mjs → chunk-VMY55K2X.mjs} +92 -141
  185. package/dist/js/chunks/chunk-VMY55K2X.mjs.map +7 -0
  186. package/dist/js/chunks/{chunk-UEXCIMJZ.mjs → chunk-VR3L2WN5.mjs} +11 -17
  187. package/dist/js/chunks/chunk-VR3L2WN5.mjs.map +7 -0
  188. package/dist/js/chunks/chunk-W6FAL3TI.mjs +38 -0
  189. package/dist/js/chunks/chunk-W6FAL3TI.mjs.map +7 -0
  190. package/dist/js/chunks/chunk-WU7XJ4RR.mjs +450 -0
  191. package/dist/js/chunks/chunk-WU7XJ4RR.mjs.map +7 -0
  192. package/dist/js/chunks/chunk-X7SDA2J5.mjs +116 -0
  193. package/dist/js/chunks/chunk-X7SDA2J5.mjs.map +7 -0
  194. package/dist/js/chunks/chunk-Y6H2X7ZC.mjs +209 -0
  195. package/dist/js/chunks/chunk-Y6H2X7ZC.mjs.map +7 -0
  196. package/dist/js/chunks/chunk-Y6TLRA3U.mjs +129 -0
  197. package/dist/js/chunks/chunk-Y6TLRA3U.mjs.map +7 -0
  198. package/dist/js/chunks/chunk-Z4GICXR2.mjs +190 -0
  199. package/dist/js/chunks/chunk-Z4GICXR2.mjs.map +7 -0
  200. package/dist/js/chunks/chunk-Z4OARDZ7.mjs +442 -0
  201. package/dist/js/chunks/chunk-Z4OARDZ7.mjs.map +7 -0
  202. package/dist/js/chunks/{chunk-MZ6Z24BX.mjs → chunk-ZJNLAGY5.mjs} +19 -34
  203. package/dist/js/chunks/chunk-ZJNLAGY5.mjs.map +7 -0
  204. package/dist/js/chunks/chunk-ZKWUWBUB.mjs +81 -0
  205. package/dist/js/chunks/chunk-ZKWUWBUB.mjs.map +7 -0
  206. package/dist/js/chunks/chunk-ZM3XBHWV.mjs +746 -0
  207. package/dist/js/chunks/chunk-ZM3XBHWV.mjs.map +7 -0
  208. package/dist/js/chunks/chunk-ZO6ZLHFF.mjs +48 -0
  209. package/dist/js/chunks/chunk-ZO6ZLHFF.mjs.map +7 -0
  210. package/dist/js/chunks/chunk-ZVLOUDIJ.mjs +251 -0
  211. package/dist/js/chunks/chunk-ZVLOUDIJ.mjs.map +7 -0
  212. package/dist/js/expressive.cjs +10333 -4070
  213. package/dist/js/expressive.cjs.map +4 -4
  214. package/dist/js/expressive.js +10333 -4070
  215. package/dist/js/expressive.js.map +4 -4
  216. package/dist/js/expressive.min.js +23 -25
  217. package/dist/js/expressive.min.js.map +4 -4
  218. package/dist/js/expressive.mjs +184 -69
  219. package/dist/js/expressive.mjs.map +2 -2
  220. package/dist/js/internal/behaviors/bottomSheets.mjs +4 -3
  221. package/dist/js/internal/behaviors/copy.mjs +9 -0
  222. package/dist/js/internal/behaviors/copy.mjs.map +7 -0
  223. package/dist/js/internal/behaviors/dataTables.mjs +10 -0
  224. package/dist/js/internal/behaviors/dataTables.mjs.map +7 -0
  225. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  226. package/dist/js/internal/behaviors/forms.mjs +2 -2
  227. package/dist/js/internal/behaviors/imageCompare.mjs +8 -0
  228. package/dist/js/internal/behaviors/imageCompare.mjs.map +7 -0
  229. package/dist/js/internal/behaviors/lists.mjs +8 -0
  230. package/dist/js/internal/behaviors/lists.mjs.map +7 -0
  231. package/dist/js/internal/behaviors/paneResize.mjs +8 -0
  232. package/dist/js/internal/behaviors/paneResize.mjs.map +7 -0
  233. package/dist/js/internal/behaviors/sheetDrag.mjs +7 -2
  234. package/dist/js/internal/behaviors/sideSheets.mjs +4 -3
  235. package/dist/js/internal/behaviors/sortable.mjs +8 -0
  236. package/dist/js/internal/behaviors/sortable.mjs.map +7 -0
  237. package/dist/js/internal/behaviors/theme.mjs +8 -0
  238. package/dist/js/internal/behaviors/theme.mjs.map +7 -0
  239. package/dist/js/internal/behaviors/tour.mjs +8 -0
  240. package/dist/js/internal/behaviors/tour.mjs.map +7 -0
  241. package/dist/js/internal/behaviors/transferList.mjs +8 -0
  242. package/dist/js/internal/behaviors/transferList.mjs.map +7 -0
  243. package/dist/js/internal/components/appBar.mjs +3 -2
  244. package/dist/js/internal/components/autocomplete.mjs +4 -4
  245. package/dist/js/internal/components/backToTop.mjs +9 -0
  246. package/dist/js/internal/components/backToTop.mjs.map +7 -0
  247. package/dist/js/internal/components/barChart.mjs +5 -4
  248. package/dist/js/internal/components/buttonGroup.mjs +3 -2
  249. package/dist/js/internal/components/buttons.mjs +3 -3
  250. package/dist/js/internal/components/cards.mjs +3 -3
  251. package/dist/js/internal/components/carousel.mjs +3 -3
  252. package/dist/js/internal/components/cascader.mjs +10 -0
  253. package/dist/js/internal/components/cascader.mjs.map +7 -0
  254. package/dist/js/internal/components/characterCounter.mjs +3 -2
  255. package/dist/js/internal/components/chips.mjs +6 -5
  256. package/dist/js/internal/components/colorPicker.mjs +9 -0
  257. package/dist/js/internal/components/colorPicker.mjs.map +7 -0
  258. package/dist/js/internal/components/columnChart.mjs +4 -3
  259. package/dist/js/internal/components/commandPalette.mjs +3 -3
  260. package/dist/js/internal/components/confetti.mjs +3 -2
  261. package/dist/js/internal/components/currencyInput.mjs +9 -0
  262. package/dist/js/internal/components/currencyInput.mjs.map +7 -0
  263. package/dist/js/internal/components/datepicker.mjs +11 -8
  264. package/dist/js/internal/components/expandingCard.mjs +3 -3
  265. package/dist/js/internal/components/funnelChart.mjs +10 -0
  266. package/dist/js/internal/components/funnelChart.mjs.map +7 -0
  267. package/dist/js/internal/components/heatmapChart.mjs +4 -3
  268. package/dist/js/internal/components/hoverCard.mjs +9 -0
  269. package/dist/js/internal/components/hoverCard.mjs.map +7 -0
  270. package/dist/js/internal/components/index.mjs +133 -64
  271. package/dist/js/internal/components/inputMask.mjs +9 -0
  272. package/dist/js/internal/components/inputMask.mjs.map +7 -0
  273. package/dist/js/internal/components/keypad.mjs +9 -0
  274. package/dist/js/internal/components/keypad.mjs.map +7 -0
  275. package/dist/js/internal/components/lightbox.mjs +3 -3
  276. package/dist/js/internal/components/lineChart.mjs +29 -4
  277. package/dist/js/internal/components/loadingOverlay.mjs +9 -0
  278. package/dist/js/internal/components/loadingOverlay.mjs.map +7 -0
  279. package/dist/js/internal/components/mapView.mjs +3 -3
  280. package/dist/js/internal/components/menu.mjs +3 -3
  281. package/dist/js/internal/components/menubar.mjs +10 -0
  282. package/dist/js/internal/components/menubar.mjs.map +7 -0
  283. package/dist/js/internal/components/messageScroller.mjs +3 -3
  284. package/dist/js/internal/components/mixedChart.mjs +5 -4
  285. package/dist/js/internal/components/navigationRail.mjs +3 -2
  286. package/dist/js/internal/components/particles.mjs +3 -2
  287. package/dist/js/internal/components/pieChart.mjs +4 -3
  288. package/dist/js/internal/components/pullToRefresh.mjs +9 -0
  289. package/dist/js/internal/components/pullToRefresh.mjs.map +7 -0
  290. package/dist/js/internal/components/questionnaire.mjs +3 -3
  291. package/dist/js/internal/components/radarChart.mjs +4 -3
  292. package/dist/js/internal/components/radialChart.mjs +4 -3
  293. package/dist/js/internal/components/registry.mjs +59 -40
  294. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  295. package/dist/js/internal/components/sankeyChart.mjs +10 -0
  296. package/dist/js/internal/components/sankeyChart.mjs.map +7 -0
  297. package/dist/js/internal/components/scatterChart.mjs +10 -0
  298. package/dist/js/internal/components/scatterChart.mjs.map +7 -0
  299. package/dist/js/internal/components/scrollspy.mjs +3 -2
  300. package/dist/js/internal/components/select.mjs +4 -4
  301. package/dist/js/internal/components/showMore.mjs +9 -0
  302. package/dist/js/internal/components/showMore.mjs.map +7 -0
  303. package/dist/js/internal/components/slider.mjs +3 -3
  304. package/dist/js/internal/components/snackbar.mjs +2 -2
  305. package/dist/js/internal/components/swipeActions.mjs +9 -0
  306. package/dist/js/internal/components/swipeActions.mjs.map +7 -0
  307. package/dist/js/internal/components/tabs.mjs +3 -4
  308. package/dist/js/internal/components/timepicker.mjs +5 -4
  309. package/dist/js/internal/components/tooltip.mjs +3 -3
  310. package/dist/js/internal/components/treeSelect.mjs +13 -0
  311. package/dist/js/internal/components/treeSelect.mjs.map +7 -0
  312. package/dist/js/internal/components/treemapChart.mjs +10 -0
  313. package/dist/js/internal/components/treemapChart.mjs.map +7 -0
  314. package/dist/js/internal/core/component.mjs +2 -1
  315. package/dist/js/internal/core/formControl.mjs +12 -0
  316. package/dist/js/internal/core/formControl.mjs.map +7 -0
  317. package/dist/js/internal/core/spring.mjs +11 -0
  318. package/dist/js/internal/core/spring.mjs.map +7 -0
  319. package/dist/js/internal/core/utils.mjs +11 -3
  320. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  321. package/dist/js/internal/plugins/modalDisplayPlugin.mjs +13 -0
  322. package/dist/js/internal/plugins/modalDisplayPlugin.mjs.map +7 -0
  323. package/dist/js/modular.mjs +175 -69
  324. package/dist/types/behaviors/bottomSheets.d.ts +19 -3
  325. package/dist/types/behaviors/copy.d.ts +18 -0
  326. package/dist/types/behaviors/dataTables.d.ts +129 -0
  327. package/dist/types/behaviors/dialogs.d.ts +27 -1
  328. package/dist/types/behaviors/forms.d.ts +68 -2
  329. package/dist/types/behaviors/imageCompare.d.ts +12 -0
  330. package/dist/types/behaviors/lists.d.ts +12 -0
  331. package/dist/types/behaviors/paneResize.d.ts +29 -0
  332. package/dist/types/behaviors/sheetDrag.d.ts +18 -0
  333. package/dist/types/behaviors/sideSheets.d.ts +1 -1
  334. package/dist/types/behaviors/sortable.d.ts +28 -0
  335. package/dist/types/behaviors/theme.d.ts +22 -0
  336. package/dist/types/behaviors/tour.d.ts +36 -0
  337. package/dist/types/behaviors/transferList.d.ts +51 -0
  338. package/dist/types/components/appBar.d.ts +5 -6
  339. package/dist/types/components/autocomplete.d.ts +92 -17
  340. package/dist/types/components/backToTop.d.ts +36 -0
  341. package/dist/types/components/barChart.d.ts +3 -6
  342. package/dist/types/components/buttonGroup.d.ts +2 -4
  343. package/dist/types/components/buttons.d.ts +5 -5
  344. package/dist/types/components/cards.d.ts +3 -16
  345. package/dist/types/components/carousel.d.ts +9 -15
  346. package/dist/types/components/cascader.d.ts +130 -0
  347. package/dist/types/components/characterCounter.d.ts +2 -15
  348. package/dist/types/components/chips.d.ts +65 -19
  349. package/dist/types/components/colorPicker.d.ts +42 -0
  350. package/dist/types/components/columnChart.d.ts +23 -10
  351. package/dist/types/components/commandPalette.d.ts +11 -16
  352. package/dist/types/components/confetti.d.ts +2 -4
  353. package/dist/types/components/currencyInput.d.ts +59 -0
  354. package/dist/types/components/datepicker.d.ts +59 -36
  355. package/dist/types/components/expandingCard.d.ts +6 -6
  356. package/dist/types/components/funnelChart.d.ts +38 -0
  357. package/dist/types/components/heatmapChart.d.ts +39 -8
  358. package/dist/types/components/hoverCard.d.ts +58 -0
  359. package/dist/types/components/index.d.ts +17 -1
  360. package/dist/types/components/inputMask.d.ts +30 -0
  361. package/dist/types/components/keypad.d.ts +66 -0
  362. package/dist/types/components/lightbox.d.ts +17 -25
  363. package/dist/types/components/lineChart.d.ts +176 -10
  364. package/dist/types/components/loadingOverlay.d.ts +42 -0
  365. package/dist/types/components/mapView.d.ts +26 -17
  366. package/dist/types/components/menu.d.ts +61 -22
  367. package/dist/types/components/menubar.d.ts +37 -0
  368. package/dist/types/components/messageScroller.d.ts +2 -14
  369. package/dist/types/components/mixedChart.d.ts +15 -6
  370. package/dist/types/components/navigationRail.d.ts +16 -5
  371. package/dist/types/components/particles.d.ts +8 -4
  372. package/dist/types/components/pieChart.d.ts +32 -7
  373. package/dist/types/components/pullToRefresh.d.ts +80 -0
  374. package/dist/types/components/questionnaire.d.ts +58 -16
  375. package/dist/types/components/radarChart.d.ts +10 -6
  376. package/dist/types/components/radialChart.d.ts +58 -8
  377. package/dist/types/components/registry.d.ts +77 -3
  378. package/dist/types/components/richTextEditor.d.ts +6 -14
  379. package/dist/types/components/sankeyChart.d.ts +72 -0
  380. package/dist/types/components/scatterChart.d.ts +102 -0
  381. package/dist/types/components/scrollspy.d.ts +3 -5
  382. package/dist/types/components/select.d.ts +43 -30
  383. package/dist/types/components/showMore.d.ts +51 -0
  384. package/dist/types/components/slider.d.ts +5 -15
  385. package/dist/types/components/snackbar.d.ts +62 -0
  386. package/dist/types/components/swipeActions.d.ts +81 -0
  387. package/dist/types/components/tabs.d.ts +93 -27
  388. package/dist/types/components/timepicker.d.ts +114 -20
  389. package/dist/types/components/tooltip.d.ts +56 -20
  390. package/dist/types/components/treeSelect.d.ts +106 -0
  391. package/dist/types/components/treemapChart.d.ts +56 -0
  392. package/dist/types/core/component.d.ts +43 -25
  393. package/dist/types/core/formControl.d.ts +21 -0
  394. package/dist/types/core/spring.d.ts +20 -0
  395. package/dist/types/core/utils.d.ts +85 -72
  396. package/dist/types/modular.d.ts +33 -1
  397. package/dist/types/plugins/dockedDisplayPlugin.d.ts +10 -7
  398. package/dist/types/plugins/modalDisplayPlugin.d.ts +32 -0
  399. package/package.json +10 -8
  400. package/src/sass/README.md +27 -18
  401. package/src/sass/abstracts/_breakpoints.scss +0 -1
  402. package/src/sass/abstracts/_elevation.scss +13 -7
  403. package/src/sass/abstracts/_index.scss +1 -0
  404. package/src/sass/abstracts/_mixins.scss +438 -92
  405. package/src/sass/abstracts/_spring.scss +63 -0
  406. package/src/sass/abstracts/_variables.scss +43 -15
  407. package/src/sass/base/_fonts.scss +61 -48
  408. package/src/sass/base/_global.scss +105 -34
  409. package/src/sass/base/_index.scss +3 -1
  410. package/src/sass/base/_normalize.scss +59 -114
  411. package/src/sass/base/_print.scss +21 -0
  412. package/src/sass/base/_prose.scss +68 -0
  413. package/src/sass/base/_typography.scss +9 -5
  414. package/src/sass/components/_accordion.scss +9 -16
  415. package/src/sass/components/_alert.scss +102 -0
  416. package/src/sass/components/_aura.scss +8 -3
  417. package/src/sass/components/_avatar.scss +3 -3
  418. package/src/sass/components/_back-to-top.scss +38 -0
  419. package/src/sass/components/_badges.scss +7 -13
  420. package/src/sass/components/_bar-chart.scss +41 -19
  421. package/src/sass/components/_bottom-sheet.scss +44 -16
  422. package/src/sass/components/_breadcrumb.scss +8 -1
  423. package/src/sass/components/_button-groups.scss +44 -89
  424. package/src/sass/components/_buttons.scss +156 -63
  425. package/src/sass/components/_calendar.scss +246 -0
  426. package/src/sass/components/_cards.scss +41 -68
  427. package/src/sass/components/_carousel.scss +43 -158
  428. package/src/sass/components/_cascader.scss +142 -0
  429. package/src/sass/components/_chips.scss +36 -52
  430. package/src/sass/components/_column-chart.scss +19 -12
  431. package/src/sass/components/_command-palette.scss +4 -7
  432. package/src/sass/components/_confetti.scss +0 -2
  433. package/src/sass/components/_countdown.scss +1 -1
  434. package/src/sass/components/_data-table.scss +162 -27
  435. package/src/sass/components/_datepicker.scss +57 -62
  436. package/src/sass/components/_description-list.scss +85 -0
  437. package/src/sass/components/_dialog.scss +42 -44
  438. package/src/sass/components/_docked-display.scss +1 -3
  439. package/src/sass/components/_drag-handle.scss +16 -20
  440. package/src/sass/components/_expanding-card.scss +20 -9
  441. package/src/sass/components/_fab-menu.scss +44 -32
  442. package/src/sass/components/_funnel-chart.scss +124 -0
  443. package/src/sass/components/_heatmap-chart.scss +113 -24
  444. package/src/sass/components/_icon-buttons.scss +7 -8
  445. package/src/sass/components/_icons-material-design.scss +2 -2
  446. package/src/sass/components/_image-compare.scss +108 -0
  447. package/src/sass/components/_index.scss +21 -0
  448. package/src/sass/components/_keypad.scss +182 -0
  449. package/src/sass/components/_kpi.scss +6 -11
  450. package/src/sass/components/_lightbox.scss +26 -20
  451. package/src/sass/components/_line-chart.scss +16 -2
  452. package/src/sass/components/_list.scss +59 -14
  453. package/src/sass/components/_loading-indicator.scss +1 -0
  454. package/src/sass/components/_loading-overlay.scss +105 -0
  455. package/src/sass/components/_map.scss +35 -13
  456. package/src/sass/components/_marquee.scss +3 -2
  457. package/src/sass/components/_mega-menu.scss +137 -0
  458. package/src/sass/components/_menu.scss +159 -182
  459. package/src/sass/components/_menubar.scss +59 -0
  460. package/src/sass/components/_message-scroller.scss +2 -2
  461. package/src/sass/components/_message.scss +3 -3
  462. package/src/sass/components/_mixed-chart.scss +37 -9
  463. package/src/sass/components/_modal-display.scss +21 -0
  464. package/src/sass/components/_navbar.scss +43 -65
  465. package/src/sass/components/_navigation-bar.scss +15 -77
  466. package/src/sass/components/_navigation-rail.scss +171 -121
  467. package/src/sass/components/_org-chart.scss +192 -0
  468. package/src/sass/components/_page-footer.scss +16 -13
  469. package/src/sass/components/_pagination.scss +6 -13
  470. package/src/sass/components/_panes.scss +33 -31
  471. package/src/sass/components/_particles.scss +0 -2
  472. package/src/sass/components/_pie-chart.scss +91 -11
  473. package/src/sass/components/_popover.scss +18 -5
  474. package/src/sass/components/_progress.scss +158 -35
  475. package/src/sass/components/_pull-to-refresh.scss +90 -0
  476. package/src/sass/components/_questionnaire.scss +74 -3
  477. package/src/sass/components/_radar-chart.scss +38 -10
  478. package/src/sass/components/_radial-chart.scss +113 -5
  479. package/src/sass/components/_rich-text-editor.scss +2 -2
  480. package/src/sass/components/_sankey-chart.scss +114 -0
  481. package/src/sass/components/_scatter-chart.scss +153 -0
  482. package/src/sass/components/_scrim.scss +0 -2
  483. package/src/sass/components/_scrollspy.scss +0 -2
  484. package/src/sass/components/_search.scss +26 -22
  485. package/src/sass/components/_show-more.scss +8 -0
  486. package/src/sass/components/_side-sheet.scss +23 -40
  487. package/src/sass/components/_skeleton.scss +2 -4
  488. package/src/sass/components/_snackbar.scss +27 -21
  489. package/src/sass/components/_split-button.scss +5 -5
  490. package/src/sass/components/_stat.scss +3 -8
  491. package/src/sass/components/_stepper.scss +1 -5
  492. package/src/sass/components/_swipe-actions.scss +71 -0
  493. package/src/sass/components/_tabs.scss +51 -32
  494. package/src/sass/components/_timeline.scss +12 -12
  495. package/src/sass/components/_timepicker.scss +111 -112
  496. package/src/sass/components/_toolbar.scss +35 -47
  497. package/src/sass/components/_tooltip.scss +21 -12
  498. package/src/sass/components/_tour.scss +89 -0
  499. package/src/sass/components/_transfer-list.scss +73 -0
  500. package/src/sass/components/_transitions.scss +4 -4
  501. package/src/sass/components/_tree.scss +3 -16
  502. package/src/sass/components/_treemap-chart.scss +122 -0
  503. package/src/sass/components/forms/_checkboxes.scss +140 -86
  504. package/src/sass/components/forms/_color-picker.scss +135 -0
  505. package/src/sass/components/forms/_color-swatches.scss +85 -0
  506. package/src/sass/components/forms/_drop-zone.scss +15 -9
  507. package/src/sass/components/forms/_fieldset.scss +10 -10
  508. package/src/sass/components/forms/_file-input.scss +6 -9
  509. package/src/sass/components/forms/_index.scss +3 -1
  510. package/src/sass/components/forms/_input-fields.scss +254 -90
  511. package/src/sass/components/forms/_radio-buttons.scss +40 -127
  512. package/src/sass/components/forms/_rating.scss +2 -32
  513. package/src/sass/components/forms/_select.scss +199 -23
  514. package/src/sass/components/forms/_slider.scss +140 -330
  515. package/src/sass/components/forms/_switches.scss +53 -164
  516. package/src/sass/custom.scss +10 -1
  517. package/src/sass/expressive.scss +3 -63
  518. package/src/sass/tokens/_contrast.scss +94 -0
  519. package/src/sass/tokens/_elevation.scss +16 -0
  520. package/src/sass/tokens/_index.scss +5 -0
  521. package/src/sass/tokens/_motion.scss +109 -0
  522. package/src/sass/tokens/_reference.scss +72 -141
  523. package/src/sass/tokens/_shape.scss +38 -0
  524. package/src/sass/tokens/_stacking.scss +27 -0
  525. package/src/sass/tokens/_state.scss +2 -4
  526. package/src/sass/tokens/_theme.scss +11 -2
  527. package/src/sass/tokens/_vibrant.scss +2 -5
  528. package/src/sass/utilities/_colors.scss +6 -1
  529. package/src/sass/utilities/_defer-render.scss +17 -0
  530. package/src/sass/utilities/_helpers.scss +183 -26
  531. package/src/sass/utilities/_index.scss +2 -1
  532. package/src/sass/utilities/_scroll-area.scss +0 -2
  533. package/src/sass/utilities/_spacing.scss +52 -34
  534. package/src/sass/utilities/_typescale.scss +8 -1
  535. package/src/sass/utilities/_visibility.scss +47 -76
  536. package/src/sass/utilities/_z-depth.scss +7 -4
  537. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
  538. package/dist/js/chunks/chunk-3GVFZ4XO.mjs.map +0 -7
  539. package/dist/js/chunks/chunk-4HZMB7LI.mjs.map +0 -7
  540. package/dist/js/chunks/chunk-4KMNFIFZ.mjs +0 -270
  541. package/dist/js/chunks/chunk-4KMNFIFZ.mjs.map +0 -7
  542. package/dist/js/chunks/chunk-4TKTLGEM.mjs.map +0 -7
  543. package/dist/js/chunks/chunk-5BKHWHYY.mjs +0 -292
  544. package/dist/js/chunks/chunk-5BKHWHYY.mjs.map +0 -7
  545. package/dist/js/chunks/chunk-5HQSGDZ5.mjs.map +0 -7
  546. package/dist/js/chunks/chunk-6N2XAEFK.mjs +0 -125
  547. package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
  548. package/dist/js/chunks/chunk-A7ALMYUR.mjs.map +0 -7
  549. package/dist/js/chunks/chunk-BG6ZRB5H.mjs.map +0 -7
  550. package/dist/js/chunks/chunk-CUQPB25U.mjs +0 -55
  551. package/dist/js/chunks/chunk-CUQPB25U.mjs.map +0 -7
  552. package/dist/js/chunks/chunk-DAIU5SLG.mjs.map +0 -7
  553. package/dist/js/chunks/chunk-FS7XY3HT.mjs.map +0 -7
  554. package/dist/js/chunks/chunk-GIW4K4SE.mjs.map +0 -7
  555. package/dist/js/chunks/chunk-GUB3TNO2.mjs.map +0 -7
  556. package/dist/js/chunks/chunk-GVGT6MIU.mjs.map +0 -7
  557. package/dist/js/chunks/chunk-GZKEFWPM.mjs +0 -181
  558. package/dist/js/chunks/chunk-GZKEFWPM.mjs.map +0 -7
  559. package/dist/js/chunks/chunk-HKT2S7VM.mjs +0 -48
  560. package/dist/js/chunks/chunk-HKT2S7VM.mjs.map +0 -7
  561. package/dist/js/chunks/chunk-ILP3PDTL.mjs +0 -187
  562. package/dist/js/chunks/chunk-ILP3PDTL.mjs.map +0 -7
  563. package/dist/js/chunks/chunk-JIDMQGK6.mjs.map +0 -7
  564. package/dist/js/chunks/chunk-KBNN3QDH.mjs +0 -7
  565. package/dist/js/chunks/chunk-KBNN3QDH.mjs.map +0 -7
  566. package/dist/js/chunks/chunk-KHV6DZXX.mjs.map +0 -7
  567. package/dist/js/chunks/chunk-KY6U46SM.mjs +0 -345
  568. package/dist/js/chunks/chunk-KY6U46SM.mjs.map +0 -7
  569. package/dist/js/chunks/chunk-LRZMJZ3T.mjs +0 -291
  570. package/dist/js/chunks/chunk-LRZMJZ3T.mjs.map +0 -7
  571. package/dist/js/chunks/chunk-LTWPGFBR.mjs +0 -59
  572. package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
  573. package/dist/js/chunks/chunk-MNPROCZF.mjs +0 -328
  574. package/dist/js/chunks/chunk-MNPROCZF.mjs.map +0 -7
  575. package/dist/js/chunks/chunk-MZ6Z24BX.mjs.map +0 -7
  576. package/dist/js/chunks/chunk-NS2UMNZV.mjs.map +0 -7
  577. package/dist/js/chunks/chunk-O5XPWXIQ.mjs +0 -406
  578. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
  579. package/dist/js/chunks/chunk-PM655FXL.mjs.map +0 -7
  580. package/dist/js/chunks/chunk-QDAL4IYN.mjs.map +0 -7
  581. package/dist/js/chunks/chunk-QERLECVU.mjs +0 -572
  582. package/dist/js/chunks/chunk-QERLECVU.mjs.map +0 -7
  583. package/dist/js/chunks/chunk-QJABDLSD.mjs +0 -112
  584. package/dist/js/chunks/chunk-QJABDLSD.mjs.map +0 -7
  585. package/dist/js/chunks/chunk-RHRQKTTX.mjs +0 -139
  586. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
  587. package/dist/js/chunks/chunk-S3XDFGSZ.mjs.map +0 -7
  588. package/dist/js/chunks/chunk-SPETGK25.mjs +0 -59
  589. package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
  590. package/dist/js/chunks/chunk-TBM3FT7G.mjs.map +0 -7
  591. package/dist/js/chunks/chunk-UEXCIMJZ.mjs.map +0 -7
  592. package/dist/js/chunks/chunk-UEZUJQ66.mjs.map +0 -7
  593. package/dist/js/chunks/chunk-VGZSAFTX.mjs +0 -173
  594. package/dist/js/chunks/chunk-VGZSAFTX.mjs.map +0 -7
  595. package/dist/js/chunks/chunk-X7OCHZVF.mjs +0 -76
  596. package/dist/js/chunks/chunk-X7OCHZVF.mjs.map +0 -7
  597. package/dist/js/chunks/chunk-YDCS5S3J.mjs.map +0 -7
  598. package/dist/js/chunks/chunk-YMSXJON6.mjs +0 -79
  599. package/dist/js/chunks/chunk-YMSXJON6.mjs.map +0 -7
  600. package/dist/js/chunks/chunk-Z2NRKI7R.mjs.map +0 -7
  601. package/dist/js/chunks/chunk-ZAS25YFD.mjs.map +0 -7
  602. package/dist/js/chunks/chunk-ZKZKNSLC.mjs +0 -1
  603. /package/dist/js/chunks/{chunk-ZKZKNSLC.mjs.map → chunk-GNRSYMVH.mjs.map} +0 -0
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  Menu
3
- } from "./chunk-JIDMQGK6.mjs";
4
- import {
5
- Utils
6
- } from "./chunk-MNPROCZF.mjs";
3
+ } from "./chunk-CSYWKEK3.mjs";
7
4
  import {
8
5
  Component
9
- } from "./chunk-LTWPGFBR.mjs";
6
+ } from "./chunk-CMGXGYUC.mjs";
7
+ import {
8
+ Utils
9
+ } from "./chunk-ZVLOUDIJ.mjs";
10
10
 
11
11
  // src/ts/components/autocomplete.ts
12
12
  var _defaults = {
@@ -14,7 +14,8 @@ var _defaults = {
14
14
  loading: "Loading results.",
15
15
  noResults: "No results.",
16
16
  results: (count) => `${count} ${count === 1 ? "result" : "results"} available.`,
17
- selected: (count) => `${count} ${count === 1 ? "item" : "items"} selected.`
17
+ selected: (count) => `${count} ${count === 1 ? "item" : "items"} selected.`,
18
+ create: (text) => `Add "${text}"`
18
19
  },
19
20
  data: [],
20
21
  // Autocomplete data set
@@ -28,16 +29,17 @@ var _defaults = {
28
29
  },
29
30
  minLength: 1,
30
31
  // Min characters before autocomplete starts
32
+ searchDelay: 0,
33
+ allowCreate: false,
34
+ onCreate: null,
31
35
  isMultiSelect: false,
32
36
  onSearch: (text, autocomplete) => {
33
37
  const normSearch = text.toLocaleLowerCase();
34
- const data = autocomplete.options.data;
35
38
  autocomplete.setMenuItems(
36
- data.filter(
39
+ autocomplete.options.data.filter(
37
40
  (option) => option.id.toString().toLocaleLowerCase().includes(normSearch) || option.text?.toLocaleLowerCase().includes(normSearch)
38
41
  )
39
42
  );
40
- autocomplete.options.data = data;
41
43
  },
42
44
  maxMenuHeight: "300px",
43
45
  allowUnsafeHTML: false,
@@ -45,9 +47,20 @@ var _defaults = {
45
47
  };
46
48
  var _Autocomplete = class _Autocomplete extends Component {
47
49
  constructor(el, options) {
48
- super(el, options, _Autocomplete);
50
+ super(el, options);
51
+ /**
52
+ * Whether the user left or dismissed the field since the last search, so
53
+ * late results must not reopen it. A field nobody has focused yet counts.
54
+ */
55
+ this._left = true;
56
+ // Counts selections, so a callback that selects again silences the stale event.
57
+ this._selection = 0;
58
+ /** The last search returned no suggestions. A text change clears it until the next one returns. */
59
+ this._noResults = false;
49
60
  this._handleInputBlur = () => {
50
61
  if (!this._pointerDown) {
62
+ this._left = true;
63
+ this._cancelPendingSearch();
51
64
  this.close();
52
65
  this._resetAutocomplete();
53
66
  }
@@ -56,65 +69,69 @@ var _Autocomplete = class _Autocomplete extends Component {
56
69
  _Autocomplete._keydown = false;
57
70
  };
58
71
  this._handleInput = () => {
72
+ this._left = false;
59
73
  this.count = 0;
60
74
  const actualValue = this.el.value.toLocaleLowerCase();
61
75
  if (this.oldVal !== actualValue) {
62
76
  this._resetCurrentElementPosition();
77
+ this._noResults = false;
63
78
  if (this.el.matches(":focus-visible") && (!this.menu.isOpen || actualValue.length < this.options.minLength)) this.open();
64
79
  }
65
- this._inputChangeDetection(actualValue);
80
+ this._inputChangeDetection(actualValue, true);
66
81
  };
67
82
  this._handleInputFocus = () => {
83
+ this._left = false;
68
84
  this.count = 0;
69
85
  const actualValue = this.el.value.toLocaleLowerCase();
70
86
  this._inputChangeDetection(actualValue);
71
87
  };
72
- this._inputChangeDetection = (value) => {
73
- if (!this.options.isMultiSelect && this.selectedValues.length && this.el.value !== (this.selectedValues[0].text || String(this.selectedValues[0].id))) {
74
- this.selectedValues = [];
75
- }
88
+ this._inputChangeDetection = (value, typed) => {
89
+ const deselected = !this.options.isMultiSelect && this.selectedValues.length > 0 && this.el.value !== (this.selectedValues[0].text || String(this.selectedValues[0].id));
90
+ if (deselected) this.selectedValues = [];
76
91
  if (this.oldVal !== value) {
92
+ this._noResults = false;
77
93
  this._setStatusLoading();
78
- this.options.onSearch(this.el.value, this);
79
- }
80
- if (!this.options.isMultiSelect && this.el.value.length === 0) {
81
- this.selectedValues = [];
82
- this._triggerChanged();
94
+ this._queueSearch(typed);
83
95
  }
96
+ if (deselected) this._triggerChanged();
84
97
  this.oldVal = value;
85
98
  };
86
- this._handleInputKeydown = (e) => {
99
+ this._handleInputKeydown = Utils.ignoringComposition((e) => {
87
100
  _Autocomplete._keydown = true;
88
- if (e.key === Utils.keys.ESC || e.key === "Tab") {
89
- this.close();
90
- this._resetCurrentElementPosition();
101
+ if (e.key === "Escape" || e.key === "Tab") {
102
+ this._dismiss(e);
91
103
  return;
92
104
  }
93
- const numItems = this.container.querySelectorAll("li").length;
94
- if (e.key === Utils.keys.ENTER && this.activeIndex >= 0) {
95
- const liElement = this.container.querySelectorAll("li")[this.activeIndex];
105
+ const options = this._options();
106
+ const numItems = options.length;
107
+ if (e.key === "Enter" && this.activeIndex >= 0) {
108
+ const liElement = options[this.activeIndex];
96
109
  if (liElement) {
97
- this.selectOption(liElement.getAttribute("data-id"));
110
+ this._choose(liElement);
98
111
  e.preventDefault();
99
112
  }
100
113
  return;
101
114
  }
102
- if (e.key === Utils.keys.ARROW_UP || e.key === Utils.keys.ARROW_DOWN) {
115
+ if (e.key === "ArrowUp" || e.key === "ArrowDown") {
103
116
  e.preventDefault();
104
- if (e.key === Utils.keys.ARROW_UP && this.activeIndex > 0) this.activeIndex--;
105
- if (e.key === Utils.keys.ARROW_DOWN && this.activeIndex < numItems - 1)
117
+ if (!this.menu.isOpen && this._openTimer === void 0) {
118
+ this.open();
119
+ return;
120
+ }
121
+ if (e.key === "ArrowUp" && this.activeIndex > 0) this.activeIndex--;
122
+ if (e.key === "ArrowDown" && this.activeIndex < numItems - 1)
106
123
  this.activeIndex++;
107
124
  this._setActive(null);
108
125
  if (this.activeIndex >= 0) {
109
- this._setActive(this.container.querySelectorAll("li")[this.activeIndex]);
110
- this.container.children[this.activeIndex].scrollIntoView({
126
+ this._setActive(options[this.activeIndex]);
127
+ options[this.activeIndex].scrollIntoView({
111
128
  behavior: "smooth",
112
129
  block: "nearest",
113
130
  inline: "nearest"
114
131
  });
115
132
  }
116
133
  }
117
- };
134
+ });
118
135
  this._handleInputClick = () => {
119
136
  this.open();
120
137
  };
@@ -130,6 +147,14 @@ var _Autocomplete = class _Autocomplete extends Component {
130
147
  this._handleContainerPointerUp = () => {
131
148
  this._pointerDown = false;
132
149
  };
150
+ // The no-results row and group headings are not options, and a disabled row
151
+ // cannot be chosen. A press on any of them would move focus to the list,
152
+ // which nothing hands back, and Menu would report the row as chosen.
153
+ this._handleInertRowPress = (e) => {
154
+ if (!(e.target instanceof Element) || !e.target.closest('.autocomplete-no-results, .autocomplete-group-label, [aria-disabled="true"]')) return;
155
+ e.preventDefault();
156
+ e.stopPropagation();
157
+ };
133
158
  /**
134
159
  * Show autocomplete.
135
160
  */
@@ -138,7 +163,7 @@ var _Autocomplete = class _Autocomplete extends Component {
138
163
  this._resetAutocomplete();
139
164
  if (inputText.length >= this.options.minLength) {
140
165
  this._renderMenu();
141
- this._announce(this.menuItems.length ? this.options.i18n.results(this.menuItems.length) : this.options.i18n.noResults);
166
+ this._announce(this._resultsMessage());
142
167
  }
143
168
  if (!this.menu.isOpen) {
144
169
  if (this._openTimer !== void 0) clearTimeout(this._openTimer);
@@ -160,12 +185,6 @@ var _Autocomplete = class _Autocomplete extends Component {
160
185
  this.isOpen = false;
161
186
  this.menu.close();
162
187
  };
163
- this.el["Expressive_Autocomplete"] = this;
164
- this.options = {
165
- ..._Autocomplete.defaults,
166
- ...options,
167
- i18n: { ..._Autocomplete.defaults.i18n, ...options?.i18n }
168
- };
169
188
  this.isOpen = false;
170
189
  this.count = 0;
171
190
  this.activeIndex = -1;
@@ -200,17 +219,6 @@ var _Autocomplete = class _Autocomplete extends Component {
200
219
  static get defaults() {
201
220
  return _defaults;
202
221
  }
203
- /**
204
- * Initializes instances of Autocomplete.
205
- * @param els HTML elements.
206
- * @param options Component options.
207
- */
208
- static init(els, options = {}) {
209
- return super.init(els, options, _Autocomplete);
210
- }
211
- static getInstance(el) {
212
- return el["Expressive_Autocomplete"];
213
- }
214
222
  static _loadingIndicator() {
215
223
  if (!_Autocomplete._loadingTemplate) {
216
224
  const template = document.createElement("template");
@@ -228,35 +236,32 @@ var _Autocomplete = class _Autocomplete extends Component {
228
236
  clearTimeout(this._openTimer);
229
237
  this._openTimer = void 0;
230
238
  }
231
- this._removeEventHandlers();
239
+ this._cancelPendingSearch();
240
+ this._searchAbort?.abort();
241
+ this._events.abort();
232
242
  this.menu.destroy();
233
243
  this.isOpen = false;
234
244
  this._removeMenu();
245
+ for (const name of ["role", "aria-autocomplete", "aria-controls", "data-target", "aria-haspopup", "aria-expanded", "aria-activedescendant"]) {
246
+ this.el.removeAttribute(name);
247
+ }
235
248
  this._statusInfo.remove();
236
249
  this._announcer.remove();
237
- this.el["Expressive_Autocomplete"] = void 0;
250
+ super.destroy();
238
251
  }
239
252
  _setupEventHandlers() {
240
- this.el.addEventListener("blur", this._handleInputBlur);
241
- this.el.addEventListener("input", this._handleInput);
242
- this.el.addEventListener("keyup", this._handleInputKeyup);
243
- this.el.addEventListener("focus", this._handleInputFocus);
244
- this.el.addEventListener("keydown", this._handleInputKeydown);
245
- this.el.addEventListener("click", this._handleInputClick);
246
- this.container.addEventListener("pointerdown", this._handleContainerPointerDown);
247
- this.container.addEventListener("pointerup", this._handleContainerPointerUp);
248
- this.container.addEventListener("pointercancel", this._handleContainerPointerUp);
249
- }
250
- _removeEventHandlers() {
251
- this.el.removeEventListener("blur", this._handleInputBlur);
252
- this.el.removeEventListener("input", this._handleInput);
253
- this.el.removeEventListener("keyup", this._handleInputKeyup);
254
- this.el.removeEventListener("focus", this._handleInputFocus);
255
- this.el.removeEventListener("keydown", this._handleInputKeydown);
256
- this.el.removeEventListener("click", this._handleInputClick);
257
- this.container.removeEventListener("pointerdown", this._handleContainerPointerDown);
258
- this.container.removeEventListener("pointerup", this._handleContainerPointerUp);
259
- this.container.removeEventListener("pointercancel", this._handleContainerPointerUp);
253
+ const { signal } = this._events;
254
+ this.el.addEventListener("blur", this._handleInputBlur, { signal });
255
+ this.el.addEventListener("input", this._handleInput, { signal });
256
+ this.el.addEventListener("keyup", this._handleInputKeyup, { signal });
257
+ this.el.addEventListener("focus", this._handleInputFocus, { signal });
258
+ this.el.addEventListener("keydown", this._handleInputKeydown, { signal });
259
+ this.el.addEventListener("click", this._handleInputClick, { signal });
260
+ this.container.addEventListener("pointerdown", this._handleContainerPointerDown, { signal });
261
+ this.container.addEventListener("pointerup", this._handleContainerPointerUp, { signal });
262
+ this.container.addEventListener("pointercancel", this._handleContainerPointerUp, { signal });
263
+ this.container.addEventListener("mousedown", this._handleInertRowPress, { capture: true, signal });
264
+ this.container.addEventListener("click", this._handleInertRowPress, { capture: true, signal });
260
265
  }
261
266
  _setupMenu() {
262
267
  this.container = document.createElement("menu");
@@ -291,8 +296,7 @@ var _Autocomplete = class _Autocomplete extends Component {
291
296
  const userOnItemClick = menuOptions.onItemClick;
292
297
  menuOptions.onItemClick = (li) => {
293
298
  if (!li) return;
294
- const entryID = li.getAttribute("data-id");
295
- this.selectOption(entryID);
299
+ this._choose(li);
296
300
  if (typeof userOnItemClick === "function") userOnItemClick.call(this.menu, li);
297
301
  };
298
302
  this.menu = Menu.init(this.el, menuOptions);
@@ -300,6 +304,7 @@ var _Autocomplete = class _Autocomplete extends Component {
300
304
  const label = this.el.parentElement.querySelector("label");
301
305
  if (label) this.el.after(label);
302
306
  this.el.removeEventListener("click", this.menu._handleClick);
307
+ this.el.removeEventListener("keydown", this.menu._handleTriggerKeydown);
303
308
  if (!this.options.isMultiSelect) this._refreshInputText();
304
309
  if (this.el.value) this.selectOption(this.el.value);
305
310
  const div = document.createElement("div");
@@ -320,6 +325,39 @@ var _Autocomplete = class _Autocomplete extends Component {
320
325
  this.container.ariaExpanded = "false";
321
326
  this.container.parentNode.removeChild(this.container);
322
327
  }
328
+ /** Searches now, or once typing pauses for `searchDelay`. Focus never waits. */
329
+ _queueSearch(typed) {
330
+ this._cancelPendingSearch();
331
+ const delay = this.options.searchDelay;
332
+ if (!typed || !(delay > 0 && delay < Infinity)) return this._search(this.el.value);
333
+ this._searchAbort?.abort();
334
+ this._searchTimer = setTimeout(() => {
335
+ this._searchTimer = void 0;
336
+ this._search(this.el.value);
337
+ }, delay);
338
+ }
339
+ _cancelPendingSearch() {
340
+ clearTimeout(this._searchTimer);
341
+ this._searchTimer = void 0;
342
+ }
343
+ /** Starts a search and aborts the one before, whose response is now stale. */
344
+ _search(text) {
345
+ this._searchAbort?.abort();
346
+ this._searchAbort = new AbortController();
347
+ this.options.onSearch(text, this, this._searchAbort.signal);
348
+ }
349
+ _dismiss(e) {
350
+ if (e.key === "Escape") {
351
+ if (this.menu.isOpen || this._openTimer !== void 0) e.preventDefault();
352
+ this._left = true;
353
+ }
354
+ this.close();
355
+ this._resetCurrentElementPosition();
356
+ }
357
+ /** The rows that can be chosen. The no-results row and disabled rows are not. */
358
+ _options() {
359
+ return this.container.querySelectorAll('li[role="option"]:not([aria-disabled="true"])');
360
+ }
323
361
  _resetCurrentElementPosition() {
324
362
  this.activeIndex = -1;
325
363
  this._setActive(null);
@@ -331,7 +369,7 @@ var _Autocomplete = class _Autocomplete extends Component {
331
369
  this._pointerDown = false;
332
370
  }
333
371
  _highlightPartialText(input, label) {
334
- const start = label.toLocaleLowerCase().indexOf("" + input.toLocaleLowerCase());
372
+ const start = label.toLocaleLowerCase().indexOf(input.toLocaleLowerCase());
335
373
  const end = start + input.length - 1;
336
374
  if (start == -1 || end == -1) {
337
375
  return [label, "", ""];
@@ -345,6 +383,7 @@ var _Autocomplete = class _Autocomplete extends Component {
345
383
  const isSelected = this.selectedValues.some((sel) => sel.id === entry.id);
346
384
  item.setAttribute("aria-selected", isSelected ? "true" : "false");
347
385
  item.setAttribute("data-id", entry.id);
386
+ _Autocomplete._markDisabled(item, entry);
348
387
  item.setAttribute(
349
388
  "style",
350
389
  "display:grid; grid-auto-flow: column; user-select: none; align-items: center;"
@@ -358,6 +397,7 @@ var _Autocomplete = class _Autocomplete extends Component {
358
397
  checkbox.type = "checkbox";
359
398
  checkbox.tabIndex = -1;
360
399
  checkbox.checked = isSelected;
400
+ checkbox.disabled = entry.disabled === true;
361
401
  const spacer = document.createElement("span");
362
402
  spacer.style.paddingLeft = "21px";
363
403
  selection.append(checkbox, spacer);
@@ -369,40 +409,12 @@ var _Autocomplete = class _Autocomplete extends Component {
369
409
  img.src = entry.image;
370
410
  item.appendChild(img);
371
411
  }
372
- const inputText = this.el.value.toLocaleLowerCase();
373
- const label = (entry.text || entry.id).toString();
374
- const parts = this._highlightPartialText(inputText, label);
375
- const div = document.createElement("div");
376
- div.setAttribute("style", "line-height:1.2;font-weight:500;");
377
- if (this.options.allowUnsafeHTML) {
378
- div.innerHTML = label;
379
- const walker = document.createTreeWalker(div, NodeFilter.SHOW_TEXT);
380
- for (let node = walker.nextNode(); node; node = walker.nextNode()) {
381
- const [before, match] = this._highlightPartialText(inputText, node.data);
382
- if (!match) continue;
383
- const matched = node.splitText(before.length);
384
- matched.splitText(match.length);
385
- const highlight = document.createElement("span");
386
- highlight.classList.add("highlight");
387
- matched.replaceWith(highlight);
388
- highlight.append(matched);
389
- break;
390
- }
391
- } else {
392
- div.appendChild(document.createTextNode(parts[0]));
393
- if (parts[1]) {
394
- const highlight = document.createElement("span");
395
- highlight.textContent = parts[1];
396
- highlight.classList.add("highlight");
397
- div.appendChild(highlight);
398
- div.appendChild(document.createTextNode(parts[2]));
399
- }
400
- }
412
+ const div = this._createLabel(entry);
401
413
  const itemText = document.createElement("div");
402
414
  itemText.classList.add("item-text");
403
415
  itemText.setAttribute("style", "padding:5px;overflow:hidden;");
404
416
  item.appendChild(itemText);
405
- item.querySelector(".item-text").appendChild(div);
417
+ itemText.appendChild(div);
406
418
  if (typeof entry.description === "string" || typeof entry.description === "number" && !isNaN(entry.description)) {
407
419
  const description = document.createElement("small");
408
420
  description.setAttribute(
@@ -410,7 +422,7 @@ var _Autocomplete = class _Autocomplete extends Component {
410
422
  "line-height:1.3;color:grey;white-space:nowrap;text-overflow:ellipsis;display:block;width:90%;overflow:hidden;"
411
423
  );
412
424
  description.innerText = entry.description;
413
- item.querySelector(".item-text").appendChild(description);
425
+ itemText.appendChild(description);
414
426
  }
415
427
  const getGridConfig = () => {
416
428
  if (this.options.isMultiSelect) {
@@ -423,15 +435,118 @@ var _Autocomplete = class _Autocomplete extends Component {
423
435
  item.style.gridTemplateColumns = getGridConfig();
424
436
  return item;
425
437
  }
438
+ /** Menu already ignores a click on an aria-disabled row. */
439
+ static _markDisabled(item, entry) {
440
+ if (entry.disabled === true) item.setAttribute("aria-disabled", "true");
441
+ }
442
+ _createLabel(entry) {
443
+ const inputText = this.el.value.toLocaleLowerCase();
444
+ const label = (entry.text || entry.id).toString();
445
+ const div = document.createElement("div");
446
+ div.setAttribute("style", "line-height:1.2;font-weight:500;");
447
+ if (this.options.allowUnsafeHTML && entry.text) this._highlightHTML(div, label, inputText);
448
+ else this._highlightText(div, this._highlightPartialText(inputText, label));
449
+ return div;
450
+ }
451
+ _highlightHTML(div, label, inputText) {
452
+ div.innerHTML = label;
453
+ const walker = document.createTreeWalker(div, NodeFilter.SHOW_TEXT);
454
+ for (let node = walker.nextNode(); node; node = walker.nextNode()) {
455
+ const [before, match] = this._highlightPartialText(inputText, node.data);
456
+ if (!match) continue;
457
+ const matched = node.splitText(before.length);
458
+ matched.splitText(match.length);
459
+ const highlight = document.createElement("span");
460
+ highlight.classList.add("highlight");
461
+ matched.replaceWith(highlight);
462
+ highlight.append(matched);
463
+ break;
464
+ }
465
+ }
466
+ _highlightText(div, parts) {
467
+ div.appendChild(document.createTextNode(parts[0]));
468
+ if (parts[1]) {
469
+ const highlight = document.createElement("span");
470
+ highlight.textContent = parts[1];
471
+ highlight.classList.add("highlight");
472
+ div.appendChild(highlight);
473
+ div.appendChild(document.createTextNode(parts[2]));
474
+ }
475
+ }
426
476
  _renderMenu() {
427
477
  this._resetAutocomplete();
478
+ if (this._noResults) this.container.append(this._createNoResultsRow());
428
479
  if (this.menuItems.length === 0) {
429
480
  this.menuItems = this.selectedValues;
430
481
  }
431
- for (let i = 0; i < this.menuItems.length; i++) {
432
- const item = this._createMenuItem(this.menuItems[i]);
433
- this.container.append(item);
434
- }
482
+ const groups = /* @__PURE__ */ new Map();
483
+ this.menuItems.forEach((entry) => this._groupList(entry.group, groups).append(this._createMenuItem(entry)));
484
+ const createText = this._createText();
485
+ if (createText) this.container.append(this._createRow(createText));
486
+ }
487
+ /** The list a row goes in: the listbox, or its group's list, made where the group first appears. */
488
+ _groupList(name, groups) {
489
+ if (!name) return this.container;
490
+ if (!groups.has(name)) groups.set(name, this._createGroup(name));
491
+ return groups.get(name);
492
+ }
493
+ /**
494
+ * A labelled group of options, as the APG grouped listbox nests it. The
495
+ * heading is not an option, so the arrow keys and the count pass over it.
496
+ * Its name is set as text: only an entry's own `text` may be HTML.
497
+ */
498
+ _createGroup(name) {
499
+ const heading = document.createElement("li");
500
+ heading.id = `autocomplete-group-${Utils.guid()}`;
501
+ heading.setAttribute("role", "presentation");
502
+ heading.classList.add("label", "autocomplete-group-label");
503
+ heading.textContent = name;
504
+ const list = document.createElement("ul");
505
+ list.setAttribute("role", "group");
506
+ list.setAttribute("aria-labelledby", heading.id);
507
+ list.append(heading);
508
+ const wrapper = document.createElement("li");
509
+ wrapper.setAttribute("role", "none");
510
+ wrapper.append(list);
511
+ this.container.append(wrapper);
512
+ return list;
513
+ }
514
+ /** The typed text to offer as a new value, or '' when the option is off, the text is short or a suggestion matches it. */
515
+ _createText() {
516
+ const text = this.el.value.trim();
517
+ if (!this.options.allowCreate || text.length < this.options.minLength) return "";
518
+ const typed = text.toLocaleLowerCase();
519
+ return this.menuItems.some((entry) => (entry.text || String(entry.id)).toLocaleLowerCase() === typed) ? "" : text;
520
+ }
521
+ /** The "Add" row. Its label is what the person typed, so it is set as text, never as HTML. */
522
+ _createRow(text) {
523
+ const item = document.createElement("li");
524
+ item.id = `autocomplete-option-${Utils.guid()}`;
525
+ item.setAttribute("role", "option");
526
+ item.setAttribute("aria-selected", "false");
527
+ item.setAttribute("data-create", text);
528
+ item.classList.add("autocomplete-create");
529
+ item.setAttribute("style", "display:grid; user-select: none; align-items: center;");
530
+ item.tabIndex = -1;
531
+ const label = document.createElement("div");
532
+ label.classList.add("item-text");
533
+ label.setAttribute("style", "padding:5px;overflow:hidden;line-height:1.2;font-weight:500;");
534
+ label.textContent = this.options.i18n.create(text);
535
+ item.append(label);
536
+ return item;
537
+ }
538
+ /**
539
+ * Shows sighted users the `i18n.noResults` that the live region announces.
540
+ * Screen readers already hear that, and a listbox may only own options, so
541
+ * the row is hidden from them.
542
+ */
543
+ _createNoResultsRow() {
544
+ const row = document.createElement("li");
545
+ row.classList.add("autocomplete-no-results");
546
+ row.setAttribute("role", "none");
547
+ row.setAttribute("aria-hidden", "true");
548
+ row.textContent = this.options.i18n.noResults;
549
+ return row;
435
550
  }
436
551
  _setStatusLoading() {
437
552
  const statusElement = this._statusInfo;
@@ -443,6 +558,11 @@ var _Autocomplete = class _Autocomplete extends Component {
443
558
  const text = this.el.matches(":focus") && this.el.value.length >= this.options.minLength ? message : "";
444
559
  if (this._announcer.textContent !== text) this._announcer.textContent = text;
445
560
  }
561
+ /** Announces the entries a person can choose. Disabled ones are shown, not counted. */
562
+ _resultsMessage() {
563
+ const count = this.menuItems.filter((entry) => entry.disabled !== true).length;
564
+ return count ? this.options.i18n.results(count) : this.options.i18n.noResults;
565
+ }
446
566
  _updateSelectedInfo() {
447
567
  const statusElement = this._statusInfo;
448
568
  if (statusElement) {
@@ -458,9 +578,11 @@ var _Autocomplete = class _Autocomplete extends Component {
458
578
  }
459
579
  }
460
580
  _triggerChanged() {
581
+ const values = this.selectedValues;
582
+ const selection = ++this._selection;
461
583
  this.el.dispatchEvent(new Event("change", { bubbles: true, cancelable: true, composed: true }));
462
- if (typeof this.options.onAutocomplete === "function")
463
- this.options.onAutocomplete.call(this, this.selectedValues);
584
+ if (selection !== this._selection) return;
585
+ this._notify("autocomplete", this.options.onAutocomplete, { args: [values], detail: { values }, current: () => selection === this._selection });
464
586
  }
465
587
  /**
466
588
  * Updates the visible or selectable items shown in the menu.
@@ -470,9 +592,9 @@ var _Autocomplete = class _Autocomplete extends Component {
470
592
  */
471
593
  setMenuItems(menuItems, selected = null, open = true) {
472
594
  if (this.el["Expressive_Autocomplete"] !== this) return;
473
- const resultCount = menuItems.length;
595
+ open && (open = !this._left);
596
+ this._noResults = menuItems.length === 0;
474
597
  this.menuItems = menuItems;
475
- this.options.data = menuItems;
476
598
  if (selected) {
477
599
  this.selectedValues = this.menuItems.filter(
478
600
  (item) => !(selected.indexOf(item.id) === -1)
@@ -485,36 +607,60 @@ var _Autocomplete = class _Autocomplete extends Component {
485
607
  }
486
608
  if (open) this.open();
487
609
  this._updateSelectedInfo();
488
- this._announce(open ? resultCount ? this.options.i18n.results(resultCount) : this.options.i18n.noResults : "");
489
- this._triggerChanged();
610
+ this._announce(open ? this._resultsMessage() : "");
611
+ if (selected) this._triggerChanged();
612
+ }
613
+ _toggleOption(entry) {
614
+ const selected = !this.selectedValues.some((selectedEntry) => selectedEntry.id === entry.id);
615
+ if (selected) this.selectedValues.push(entry);
616
+ else this.selectedValues = this.selectedValues.filter((selectedEntry) => selectedEntry.id !== entry.id);
617
+ const row = Array.from(this.container.querySelectorAll("li[data-id]")).find((li) => li.getAttribute("data-id") === String(entry.id));
618
+ if (row) {
619
+ row.setAttribute("aria-selected", String(selected));
620
+ row.querySelector("input").checked = selected;
621
+ }
622
+ this.el.focus();
623
+ }
624
+ _selectSingle(entry) {
625
+ const refocus = Utils.focusIsIn(this.container);
626
+ this._cancelPendingSearch();
627
+ this.selectedValues = [entry];
628
+ this._refreshInputText();
629
+ this._resetAutocomplete();
630
+ this.close();
631
+ if (refocus) {
632
+ this.oldVal = this.el.value.toLocaleLowerCase();
633
+ this.el.focus();
634
+ }
635
+ }
636
+ /** Commits a row chosen by Enter or a click. */
637
+ _choose(li) {
638
+ if (li.hasAttribute("data-create")) this._create(li.getAttribute("data-create"));
639
+ else this.selectOption(li.getAttribute("data-id"));
640
+ }
641
+ _create(text) {
642
+ const refocus = Utils.focusIsIn(this.container);
643
+ this._cancelPendingSearch();
644
+ this.oldVal = this.el.value.toLocaleLowerCase();
645
+ this.close();
646
+ if (refocus) this.el.focus();
647
+ this._notify("create", this.options.onCreate, { args: [text, this], detail: { text } });
490
648
  }
491
649
  /**
492
650
  * Select a specific autocomplete option via id-property.
493
651
  * @param id The id of a data-entry.
494
652
  */
495
653
  selectOption(id) {
496
- const entry = this.menuItems.find((item) => item.id == id);
654
+ const entry = this.menuItems.find((item) => item.id == id && item.disabled !== true);
497
655
  if (!entry) return;
498
- if (this.options.isMultiSelect) {
499
- if (!(this.selectedValues.filter(
500
- (selectedEntry) => selectedEntry.id === entry.id
501
- ).length >= 1)) this.selectedValues.push(entry);
502
- else this.selectedValues = this.selectedValues.filter(
503
- (selectedEntry) => selectedEntry.id !== entry.id
504
- );
505
- this._renderMenu();
506
- this.el.focus();
507
- } else {
508
- this.selectedValues = [entry];
509
- this._refreshInputText();
510
- this._resetAutocomplete();
511
- this.close();
512
- }
656
+ if (this.options.isMultiSelect) this._toggleOption(entry);
657
+ else this._selectSingle(entry);
513
658
  this._updateSelectedInfo();
514
659
  if (this.options.isMultiSelect) this._announce(this.options.i18n.selected(this.selectedValues.length));
515
660
  this._triggerChanged();
516
661
  }
517
662
  };
663
+ _Autocomplete.key = "Expressive_Autocomplete";
518
664
  /**
519
665
  * The three-dot loading indicator, parsed once and cloned thereafter.
520
666
  *
@@ -528,4 +674,4 @@ var Autocomplete = _Autocomplete;
528
674
  export {
529
675
  Autocomplete
530
676
  };
531
- //# sourceMappingURL=chunk-4HZMB7LI.mjs.map
677
+ //# sourceMappingURL=chunk-VGY4M57S.mjs.map