@expressivecss/expressive 0.15.0 → 0.17.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 (609) hide show
  1. package/CHANGELOG.md +1807 -1
  2. package/README.md +9 -8
  3. package/dist/css/expressive.css +19176 -11958
  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-26VUH75M.mjs +102 -0
  64. package/dist/js/chunks/chunk-26VUH75M.mjs.map +7 -0
  65. package/dist/js/chunks/chunk-2LFCOGC3.mjs +233 -0
  66. package/dist/js/chunks/chunk-2LFCOGC3.mjs.map +7 -0
  67. package/dist/js/chunks/{chunk-DXGRXYYL.mjs → chunk-36GELQGX.mjs} +29 -46
  68. package/dist/js/chunks/chunk-36GELQGX.mjs.map +7 -0
  69. package/dist/js/chunks/{chunk-74MXKKLN.mjs → chunk-3FKWIRHW.mjs} +15 -29
  70. package/dist/js/chunks/chunk-3FKWIRHW.mjs.map +7 -0
  71. package/dist/js/chunks/chunk-3KF65KGL.mjs +209 -0
  72. package/dist/js/chunks/chunk-3KF65KGL.mjs.map +7 -0
  73. package/dist/js/chunks/{chunk-KVJAVDBC.mjs → chunk-3KLZRQZI.mjs} +88 -116
  74. package/dist/js/chunks/chunk-3KLZRQZI.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-CK2XCICY.mjs → chunk-3XORNED5.mjs} +3 -11
  76. package/dist/js/chunks/chunk-3XORNED5.mjs.map +7 -0
  77. package/dist/js/chunks/chunk-4WBGAQN3.mjs +113 -0
  78. package/dist/js/chunks/chunk-4WBGAQN3.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-FM5CZOUB.mjs → chunk-5F4URJHL.mjs} +19 -30
  80. package/dist/js/chunks/chunk-5F4URJHL.mjs.map +7 -0
  81. package/dist/js/chunks/chunk-67UNY7RH.mjs +299 -0
  82. package/dist/js/chunks/chunk-67UNY7RH.mjs.map +7 -0
  83. package/dist/js/chunks/chunk-7CXNATJS.mjs +97 -0
  84. package/dist/js/chunks/chunk-7CXNATJS.mjs.map +7 -0
  85. package/dist/js/chunks/{chunk-UETTGDLI.mjs → chunk-7X44MKEQ.mjs} +43 -48
  86. package/dist/js/chunks/chunk-7X44MKEQ.mjs.map +7 -0
  87. package/dist/js/chunks/chunk-7ZAMOMGY.mjs +440 -0
  88. package/dist/js/chunks/chunk-7ZAMOMGY.mjs.map +7 -0
  89. package/dist/js/chunks/chunk-AEG6LOAJ.mjs +54 -0
  90. package/dist/js/chunks/chunk-AEG6LOAJ.mjs.map +7 -0
  91. package/dist/js/chunks/chunk-AQNFCJJ5.mjs +135 -0
  92. package/dist/js/chunks/chunk-AQNFCJJ5.mjs.map +7 -0
  93. package/dist/js/chunks/chunk-B55LWKBM.mjs +75 -0
  94. package/dist/js/chunks/chunk-B55LWKBM.mjs.map +7 -0
  95. package/dist/js/chunks/chunk-BB5VXYXT.mjs +28 -0
  96. package/dist/js/chunks/chunk-BB5VXYXT.mjs.map +7 -0
  97. package/dist/js/chunks/chunk-BDATLH3H.mjs +108 -0
  98. package/dist/js/chunks/chunk-BDATLH3H.mjs.map +7 -0
  99. package/dist/js/chunks/chunk-CWMQOT4O.mjs +232 -0
  100. package/dist/js/chunks/chunk-CWMQOT4O.mjs.map +7 -0
  101. package/dist/js/chunks/chunk-CY2CTOVM.mjs +81 -0
  102. package/dist/js/chunks/chunk-CY2CTOVM.mjs.map +7 -0
  103. package/dist/js/chunks/{chunk-NUHMOAOY.mjs → chunk-DWA5UYLJ.mjs} +363 -218
  104. package/dist/js/chunks/chunk-DWA5UYLJ.mjs.map +7 -0
  105. package/dist/js/chunks/chunk-EB2V4OKL.mjs +79 -0
  106. package/dist/js/chunks/chunk-EB2V4OKL.mjs.map +7 -0
  107. package/dist/js/chunks/chunk-EWO662ZC.mjs +188 -0
  108. package/dist/js/chunks/chunk-EWO662ZC.mjs.map +7 -0
  109. package/dist/js/chunks/{chunk-ZX6M7SWO.mjs → chunk-F7LAKFMX.mjs} +320 -141
  110. package/dist/js/chunks/chunk-F7LAKFMX.mjs.map +7 -0
  111. package/dist/js/chunks/{chunk-L27Q6ZMI.mjs → chunk-FNIIH2LU.mjs} +20 -33
  112. package/dist/js/chunks/chunk-FNIIH2LU.mjs.map +7 -0
  113. package/dist/js/chunks/chunk-GE3YMFS6.mjs +15 -0
  114. package/dist/js/chunks/chunk-GE3YMFS6.mjs.map +7 -0
  115. package/dist/js/chunks/chunk-GFWYMWYN.mjs +125 -0
  116. package/dist/js/chunks/chunk-GFWYMWYN.mjs.map +7 -0
  117. package/dist/js/chunks/chunk-GNRSYMVH.mjs +1 -0
  118. package/dist/js/chunks/chunk-H5ISU45X.mjs +87 -0
  119. package/dist/js/chunks/chunk-H5ISU45X.mjs.map +7 -0
  120. package/dist/js/chunks/{chunk-GJL6GCIU.mjs → chunk-H6YIKFAQ.mjs} +311 -186
  121. package/dist/js/chunks/chunk-H6YIKFAQ.mjs.map +7 -0
  122. package/dist/js/chunks/{chunk-BGZLF6JZ.mjs → chunk-HEH7E3KO.mjs} +155 -35
  123. package/dist/js/chunks/chunk-HEH7E3KO.mjs.map +7 -0
  124. package/dist/js/chunks/chunk-HQRLBTNM.mjs +152 -0
  125. package/dist/js/chunks/chunk-HQRLBTNM.mjs.map +7 -0
  126. package/dist/js/chunks/chunk-I2F7MLUU.mjs +137 -0
  127. package/dist/js/chunks/chunk-I2F7MLUU.mjs.map +7 -0
  128. package/dist/js/chunks/chunk-IQOTGGHX.mjs +797 -0
  129. package/dist/js/chunks/chunk-IQOTGGHX.mjs.map +7 -0
  130. package/dist/js/chunks/chunk-JH3YWKA6.mjs +225 -0
  131. package/dist/js/chunks/chunk-JH3YWKA6.mjs.map +7 -0
  132. package/dist/js/chunks/chunk-JOLJAYIJ.mjs +7 -0
  133. package/dist/js/chunks/chunk-JOLJAYIJ.mjs.map +7 -0
  134. package/dist/js/chunks/{chunk-VGNYF6FB.mjs → chunk-KOTGMCMI.mjs} +116 -24
  135. package/dist/js/chunks/chunk-KOTGMCMI.mjs.map +7 -0
  136. package/dist/js/chunks/{chunk-LQWUDNHZ.mjs → chunk-LC4O5LFS.mjs} +21 -45
  137. package/dist/js/chunks/chunk-LC4O5LFS.mjs.map +7 -0
  138. package/dist/js/chunks/chunk-LEF33SCP.mjs +127 -0
  139. package/dist/js/chunks/chunk-LEF33SCP.mjs.map +7 -0
  140. package/dist/js/chunks/{chunk-PDG64UHF.mjs → chunk-LFORZRPH.mjs} +21 -23
  141. package/dist/js/chunks/chunk-LFORZRPH.mjs.map +7 -0
  142. package/dist/js/chunks/chunk-LWLNV5EC.mjs +451 -0
  143. package/dist/js/chunks/chunk-LWLNV5EC.mjs.map +7 -0
  144. package/dist/js/chunks/chunk-LXRHUQAX.mjs +491 -0
  145. package/dist/js/chunks/chunk-LXRHUQAX.mjs.map +7 -0
  146. package/dist/js/chunks/{chunk-SFI2U4YW.mjs → chunk-MA2SZZFB.mjs} +82 -111
  147. package/dist/js/chunks/chunk-MA2SZZFB.mjs.map +7 -0
  148. package/dist/js/chunks/chunk-MDBZAMIV.mjs +121 -0
  149. package/dist/js/chunks/chunk-MDBZAMIV.mjs.map +7 -0
  150. package/dist/js/chunks/chunk-NODZ5VAD.mjs +75 -0
  151. package/dist/js/chunks/chunk-NODZ5VAD.mjs.map +7 -0
  152. package/dist/js/chunks/chunk-O2WJB6TH.mjs +365 -0
  153. package/dist/js/chunks/chunk-O2WJB6TH.mjs.map +7 -0
  154. package/dist/js/chunks/chunk-PCABY5BN.mjs +35 -0
  155. package/dist/js/chunks/chunk-PCABY5BN.mjs.map +7 -0
  156. package/dist/js/chunks/chunk-PWKYVMND.mjs +120 -0
  157. package/dist/js/chunks/chunk-PWKYVMND.mjs.map +7 -0
  158. package/dist/js/chunks/{chunk-SMY7GJSS.mjs → chunk-QHZZT7YO.mjs} +66 -38
  159. package/dist/js/chunks/chunk-QHZZT7YO.mjs.map +7 -0
  160. package/dist/js/chunks/chunk-QND56EW2.mjs +439 -0
  161. package/dist/js/chunks/chunk-QND56EW2.mjs.map +7 -0
  162. package/dist/js/chunks/chunk-QNODAANY.mjs +376 -0
  163. package/dist/js/chunks/chunk-QNODAANY.mjs.map +7 -0
  164. package/dist/js/chunks/{chunk-KHXZ2A4K.mjs → chunk-QRO5FV3I.mjs} +156 -73
  165. package/dist/js/chunks/chunk-QRO5FV3I.mjs.map +7 -0
  166. package/dist/js/chunks/chunk-R7A7JRC5.mjs +440 -0
  167. package/dist/js/chunks/chunk-R7A7JRC5.mjs.map +7 -0
  168. package/dist/js/chunks/chunk-RKG2CBFE.mjs +74 -0
  169. package/dist/js/chunks/chunk-RKG2CBFE.mjs.map +7 -0
  170. package/dist/js/chunks/{chunk-XAEAEHIX.mjs → chunk-RSNS5OYS.mjs} +38 -25
  171. package/dist/js/chunks/chunk-RSNS5OYS.mjs.map +7 -0
  172. package/dist/js/chunks/{chunk-X4ISMKE2.mjs → chunk-RUDYMEJ3.mjs} +7 -6
  173. package/dist/js/chunks/chunk-RUDYMEJ3.mjs.map +7 -0
  174. package/dist/js/chunks/chunk-STJR62SU.mjs +161 -0
  175. package/dist/js/chunks/chunk-STJR62SU.mjs.map +7 -0
  176. package/dist/js/chunks/chunk-SUSD4UTN.mjs +220 -0
  177. package/dist/js/chunks/chunk-SUSD4UTN.mjs.map +7 -0
  178. package/dist/js/chunks/{chunk-5CEAOLUA.mjs → chunk-SYBOA5HC.mjs} +26 -48
  179. package/dist/js/chunks/chunk-SYBOA5HC.mjs.map +7 -0
  180. package/dist/js/chunks/chunk-T4MOBP3J.mjs +108 -0
  181. package/dist/js/chunks/chunk-T4MOBP3J.mjs.map +7 -0
  182. package/dist/js/chunks/chunk-TM7HPGTV.mjs +342 -0
  183. package/dist/js/chunks/chunk-TM7HPGTV.mjs.map +7 -0
  184. package/dist/js/chunks/{chunk-C6CHEWYP.mjs → chunk-TMQDZSDC.mjs} +71 -35
  185. package/dist/js/chunks/chunk-TMQDZSDC.mjs.map +7 -0
  186. package/dist/js/chunks/chunk-TVSX5YA2.mjs +48 -0
  187. package/dist/js/chunks/chunk-TVSX5YA2.mjs.map +7 -0
  188. package/dist/js/chunks/chunk-UHO5CV6K.mjs +80 -0
  189. package/dist/js/chunks/chunk-UHO5CV6K.mjs.map +7 -0
  190. package/dist/js/chunks/chunk-UKCNELUN.mjs +223 -0
  191. package/dist/js/chunks/chunk-UKCNELUN.mjs.map +7 -0
  192. package/dist/js/chunks/chunk-UKQK5GWR.mjs +167 -0
  193. package/dist/js/chunks/chunk-UKQK5GWR.mjs.map +7 -0
  194. package/dist/js/chunks/{chunk-TSZYSW7F.mjs → chunk-UTSLYQ65.mjs} +21 -48
  195. package/dist/js/chunks/chunk-UTSLYQ65.mjs.map +7 -0
  196. package/dist/js/chunks/chunk-VS5OJBOD.mjs +108 -0
  197. package/dist/js/chunks/chunk-VS5OJBOD.mjs.map +7 -0
  198. package/dist/js/chunks/chunk-VZMROW5A.mjs +759 -0
  199. package/dist/js/chunks/chunk-VZMROW5A.mjs.map +7 -0
  200. package/dist/js/chunks/chunk-W6FAL3TI.mjs +38 -0
  201. package/dist/js/chunks/chunk-W6FAL3TI.mjs.map +7 -0
  202. package/dist/js/chunks/chunk-XB6Y7P5W.mjs +69 -0
  203. package/dist/js/chunks/chunk-XB6Y7P5W.mjs.map +7 -0
  204. package/dist/js/chunks/chunk-XDAMOMVD.mjs +226 -0
  205. package/dist/js/chunks/chunk-XDAMOMVD.mjs.map +7 -0
  206. package/dist/js/chunks/{chunk-WDK4T63U.mjs → chunk-XJPMW5SP.mjs} +247 -172
  207. package/dist/js/chunks/chunk-XJPMW5SP.mjs.map +7 -0
  208. package/dist/js/chunks/{chunk-KUFHW3DS.mjs → chunk-YKANQILZ.mjs} +16 -21
  209. package/dist/js/chunks/chunk-YKANQILZ.mjs.map +7 -0
  210. package/dist/js/chunks/chunk-YLZOJLDI.mjs +175 -0
  211. package/dist/js/chunks/chunk-YLZOJLDI.mjs.map +7 -0
  212. package/dist/js/chunks/chunk-ZK7YY322.mjs +514 -0
  213. package/dist/js/chunks/chunk-ZK7YY322.mjs.map +7 -0
  214. package/dist/js/expressive.cjs +10266 -3628
  215. package/dist/js/expressive.cjs.map +4 -4
  216. package/dist/js/expressive.js +10266 -3628
  217. package/dist/js/expressive.js.map +4 -4
  218. package/dist/js/expressive.min.js +23 -22
  219. package/dist/js/expressive.min.js.map +4 -4
  220. package/dist/js/expressive.mjs +181 -69
  221. package/dist/js/expressive.mjs.map +2 -2
  222. package/dist/js/internal/behaviors/bottomSheets.mjs +4 -3
  223. package/dist/js/internal/behaviors/copy.mjs +9 -0
  224. package/dist/js/internal/behaviors/copy.mjs.map +7 -0
  225. package/dist/js/internal/behaviors/dataTables.mjs +8 -0
  226. package/dist/js/internal/behaviors/dataTables.mjs.map +7 -0
  227. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  228. package/dist/js/internal/behaviors/forms.mjs +2 -2
  229. package/dist/js/internal/behaviors/imageCompare.mjs +8 -0
  230. package/dist/js/internal/behaviors/imageCompare.mjs.map +7 -0
  231. package/dist/js/internal/behaviors/lists.mjs +8 -0
  232. package/dist/js/internal/behaviors/lists.mjs.map +7 -0
  233. package/dist/js/internal/behaviors/paneResize.mjs +8 -0
  234. package/dist/js/internal/behaviors/paneResize.mjs.map +7 -0
  235. package/dist/js/internal/behaviors/sheetDrag.mjs +7 -2
  236. package/dist/js/internal/behaviors/sideSheets.mjs +4 -3
  237. package/dist/js/internal/behaviors/sortable.mjs +8 -0
  238. package/dist/js/internal/behaviors/sortable.mjs.map +7 -0
  239. package/dist/js/internal/behaviors/theme.mjs +8 -0
  240. package/dist/js/internal/behaviors/theme.mjs.map +7 -0
  241. package/dist/js/internal/behaviors/tour.mjs +8 -0
  242. package/dist/js/internal/behaviors/tour.mjs.map +7 -0
  243. package/dist/js/internal/behaviors/transferList.mjs +8 -0
  244. package/dist/js/internal/behaviors/transferList.mjs.map +7 -0
  245. package/dist/js/internal/components/appBar.mjs +3 -2
  246. package/dist/js/internal/components/autocomplete.mjs +5 -4
  247. package/dist/js/internal/components/backToTop.mjs +9 -0
  248. package/dist/js/internal/components/backToTop.mjs.map +7 -0
  249. package/dist/js/internal/components/barChart.mjs +5 -4
  250. package/dist/js/internal/components/buttonGroup.mjs +3 -2
  251. package/dist/js/internal/components/buttons.mjs +3 -3
  252. package/dist/js/internal/components/cards.mjs +3 -3
  253. package/dist/js/internal/components/carousel.mjs +3 -3
  254. package/dist/js/internal/components/cascader.mjs +10 -0
  255. package/dist/js/internal/components/cascader.mjs.map +7 -0
  256. package/dist/js/internal/components/characterCounter.mjs +3 -2
  257. package/dist/js/internal/components/chips.mjs +7 -5
  258. package/dist/js/internal/components/colorPicker.mjs +9 -0
  259. package/dist/js/internal/components/colorPicker.mjs.map +7 -0
  260. package/dist/js/internal/components/columnChart.mjs +4 -3
  261. package/dist/js/internal/components/commandPalette.mjs +3 -3
  262. package/dist/js/internal/components/confetti.mjs +3 -2
  263. package/dist/js/internal/components/currencyInput.mjs +9 -0
  264. package/dist/js/internal/components/currencyInput.mjs.map +7 -0
  265. package/dist/js/internal/components/datepicker.mjs +12 -8
  266. package/dist/js/internal/components/expandingCard.mjs +3 -3
  267. package/dist/js/internal/components/funnelChart.mjs +10 -0
  268. package/dist/js/internal/components/funnelChart.mjs.map +7 -0
  269. package/dist/js/internal/components/heatmapChart.mjs +4 -3
  270. package/dist/js/internal/components/hoverCard.mjs +9 -0
  271. package/dist/js/internal/components/hoverCard.mjs.map +7 -0
  272. package/dist/js/internal/components/index.mjs +131 -65
  273. package/dist/js/internal/components/inputMask.mjs +9 -0
  274. package/dist/js/internal/components/inputMask.mjs.map +7 -0
  275. package/dist/js/internal/components/keypad.mjs +3 -3
  276. package/dist/js/internal/components/lightbox.mjs +3 -3
  277. package/dist/js/internal/components/lineChart.mjs +41 -4
  278. package/dist/js/internal/components/loadingOverlay.mjs +9 -0
  279. package/dist/js/internal/components/loadingOverlay.mjs.map +7 -0
  280. package/dist/js/internal/components/mapView.mjs +3 -3
  281. package/dist/js/internal/components/menu.mjs +3 -3
  282. package/dist/js/internal/components/menubar.mjs +10 -0
  283. package/dist/js/internal/components/menubar.mjs.map +7 -0
  284. package/dist/js/internal/components/messageScroller.mjs +3 -3
  285. package/dist/js/internal/components/mixedChart.mjs +5 -4
  286. package/dist/js/internal/components/navigationRail.mjs +3 -2
  287. package/dist/js/internal/components/particles.mjs +3 -2
  288. package/dist/js/internal/components/pieChart.mjs +4 -3
  289. package/dist/js/internal/components/pullToRefresh.mjs +9 -0
  290. package/dist/js/internal/components/pullToRefresh.mjs.map +7 -0
  291. package/dist/js/internal/components/questionnaire.mjs +3 -3
  292. package/dist/js/internal/components/radarChart.mjs +4 -3
  293. package/dist/js/internal/components/radialChart.mjs +4 -3
  294. package/dist/js/internal/components/registry.mjs +60 -41
  295. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  296. package/dist/js/internal/components/sankeyChart.mjs +10 -0
  297. package/dist/js/internal/components/sankeyChart.mjs.map +7 -0
  298. package/dist/js/internal/components/scatterChart.mjs +10 -0
  299. package/dist/js/internal/components/scatterChart.mjs.map +7 -0
  300. package/dist/js/internal/components/scrollspy.mjs +3 -2
  301. package/dist/js/internal/components/select.mjs +5 -4
  302. package/dist/js/internal/components/showMore.mjs +9 -0
  303. package/dist/js/internal/components/showMore.mjs.map +7 -0
  304. package/dist/js/internal/components/slider.mjs +3 -3
  305. package/dist/js/internal/components/snackbar.mjs +2 -2
  306. package/dist/js/internal/components/swipeActions.mjs +9 -0
  307. package/dist/js/internal/components/swipeActions.mjs.map +7 -0
  308. package/dist/js/internal/components/tabs.mjs +3 -4
  309. package/dist/js/internal/components/timepicker.mjs +5 -4
  310. package/dist/js/internal/components/tooltip.mjs +3 -3
  311. package/dist/js/internal/components/treeSelect.mjs +14 -0
  312. package/dist/js/internal/components/treeSelect.mjs.map +7 -0
  313. package/dist/js/internal/components/treemapChart.mjs +10 -0
  314. package/dist/js/internal/components/treemapChart.mjs.map +7 -0
  315. package/dist/js/internal/core/component.mjs +6 -3
  316. package/dist/js/internal/core/formControl.mjs +12 -0
  317. package/dist/js/internal/core/formControl.mjs.map +7 -0
  318. package/dist/js/internal/core/imageURL.mjs +7 -0
  319. package/dist/js/internal/core/imageURL.mjs.map +7 -0
  320. package/dist/js/internal/core/spring.mjs +11 -0
  321. package/dist/js/internal/core/spring.mjs.map +7 -0
  322. package/dist/js/internal/core/utils.mjs +21 -3
  323. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  324. package/dist/js/internal/plugins/modalDisplayPlugin.mjs +13 -0
  325. package/dist/js/internal/plugins/modalDisplayPlugin.mjs.map +7 -0
  326. package/dist/js/modular.mjs +172 -69
  327. package/dist/types/behaviors/bottomSheets.d.ts +23 -5
  328. package/dist/types/behaviors/copy.d.ts +18 -0
  329. package/dist/types/behaviors/dataTables.d.ts +125 -0
  330. package/dist/types/behaviors/dialogs.d.ts +27 -1
  331. package/dist/types/behaviors/forms.d.ts +70 -4
  332. package/dist/types/behaviors/imageCompare.d.ts +13 -0
  333. package/dist/types/behaviors/lists.d.ts +12 -0
  334. package/dist/types/behaviors/paneResize.d.ts +29 -0
  335. package/dist/types/behaviors/sheetDrag.d.ts +18 -0
  336. package/dist/types/behaviors/sideSheets.d.ts +1 -1
  337. package/dist/types/behaviors/sortable.d.ts +28 -0
  338. package/dist/types/behaviors/theme.d.ts +22 -0
  339. package/dist/types/behaviors/tour.d.ts +36 -0
  340. package/dist/types/behaviors/transferList.d.ts +53 -0
  341. package/dist/types/components/appBar.d.ts +5 -6
  342. package/dist/types/components/autocomplete.d.ts +105 -20
  343. package/dist/types/components/backToTop.d.ts +36 -0
  344. package/dist/types/components/barChart.d.ts +3 -6
  345. package/dist/types/components/buttonGroup.d.ts +2 -4
  346. package/dist/types/components/buttons.d.ts +5 -5
  347. package/dist/types/components/cards.d.ts +3 -16
  348. package/dist/types/components/carousel.d.ts +16 -15
  349. package/dist/types/components/cascader.d.ts +130 -0
  350. package/dist/types/components/characterCounter.d.ts +2 -15
  351. package/dist/types/components/chips.d.ts +80 -19
  352. package/dist/types/components/colorPicker.d.ts +56 -0
  353. package/dist/types/components/columnChart.d.ts +23 -10
  354. package/dist/types/components/commandPalette.d.ts +11 -16
  355. package/dist/types/components/confetti.d.ts +2 -4
  356. package/dist/types/components/currencyInput.d.ts +60 -0
  357. package/dist/types/components/datepicker.d.ts +107 -56
  358. package/dist/types/components/expandingCard.d.ts +4 -6
  359. package/dist/types/components/funnelChart.d.ts +35 -0
  360. package/dist/types/components/heatmapChart.d.ts +42 -8
  361. package/dist/types/components/hoverCard.d.ts +59 -0
  362. package/dist/types/components/index.d.ts +16 -1
  363. package/dist/types/components/inputMask.d.ts +28 -0
  364. package/dist/types/components/keypad.d.ts +38 -6
  365. package/dist/types/components/lightbox.d.ts +14 -20
  366. package/dist/types/components/lineChart.d.ts +212 -12
  367. package/dist/types/components/loadingOverlay.d.ts +42 -0
  368. package/dist/types/components/mapView.d.ts +138 -27
  369. package/dist/types/components/menu.d.ts +74 -22
  370. package/dist/types/components/menubar.d.ts +37 -0
  371. package/dist/types/components/messageScroller.d.ts +2 -14
  372. package/dist/types/components/mixedChart.d.ts +15 -6
  373. package/dist/types/components/navigationRail.d.ts +16 -5
  374. package/dist/types/components/particles.d.ts +22 -5
  375. package/dist/types/components/pieChart.d.ts +33 -9
  376. package/dist/types/components/pullToRefresh.d.ts +80 -0
  377. package/dist/types/components/questionnaire.d.ts +58 -16
  378. package/dist/types/components/radarChart.d.ts +10 -6
  379. package/dist/types/components/radialChart.d.ts +58 -7
  380. package/dist/types/components/registry.d.ts +73 -3
  381. package/dist/types/components/richTextEditor.d.ts +45 -22
  382. package/dist/types/components/sankeyChart.d.ts +72 -0
  383. package/dist/types/components/scatterChart.d.ts +102 -0
  384. package/dist/types/components/scrollspy.d.ts +3 -5
  385. package/dist/types/components/select.d.ts +44 -33
  386. package/dist/types/components/showMore.d.ts +53 -0
  387. package/dist/types/components/slider.d.ts +2 -15
  388. package/dist/types/components/snackbar.d.ts +68 -1
  389. package/dist/types/components/swipeActions.d.ts +81 -0
  390. package/dist/types/components/tabs.d.ts +92 -30
  391. package/dist/types/components/timepicker.d.ts +128 -27
  392. package/dist/types/components/tooltip.d.ts +57 -21
  393. package/dist/types/components/treeSelect.d.ts +106 -0
  394. package/dist/types/components/treemapChart.d.ts +56 -0
  395. package/dist/types/core/component.d.ts +49 -25
  396. package/dist/types/core/formControl.d.ts +21 -0
  397. package/dist/types/core/imageURL.d.ts +2 -0
  398. package/dist/types/core/spring.d.ts +20 -0
  399. package/dist/types/core/utils.d.ts +123 -72
  400. package/dist/types/modular.d.ts +33 -1
  401. package/dist/types/plugins/dockedDisplayPlugin.d.ts +10 -8
  402. package/dist/types/plugins/modalDisplayPlugin.d.ts +39 -0
  403. package/package.json +17 -13
  404. package/src/sass/README.md +27 -18
  405. package/src/sass/abstracts/_elevation.scss +13 -7
  406. package/src/sass/abstracts/_index.scss +1 -0
  407. package/src/sass/abstracts/_mixins.scss +864 -78
  408. package/src/sass/abstracts/_spring.scss +63 -0
  409. package/src/sass/abstracts/_variables.scss +64 -21
  410. package/src/sass/base/_fonts.scss +61 -48
  411. package/src/sass/base/_global.scss +104 -24
  412. package/src/sass/base/_index.scss +2 -0
  413. package/src/sass/base/_normalize.scss +59 -114
  414. package/src/sass/base/_print.scss +21 -0
  415. package/src/sass/base/_prose.scss +68 -0
  416. package/src/sass/base/_typography.scss +9 -5
  417. package/src/sass/components/_accordion.scss +10 -19
  418. package/src/sass/components/_alert.scss +102 -0
  419. package/src/sass/components/_aura.scss +9 -3
  420. package/src/sass/components/_avatar.scss +3 -3
  421. package/src/sass/components/_back-to-top.scss +38 -0
  422. package/src/sass/components/_badges.scss +6 -5
  423. package/src/sass/components/_bar-chart.scss +31 -90
  424. package/src/sass/components/_bottom-sheet.scss +51 -16
  425. package/src/sass/components/_breadcrumb.scss +8 -7
  426. package/src/sass/components/_button-groups.scss +30 -63
  427. package/src/sass/components/_buttons.scss +137 -94
  428. package/src/sass/components/_calendar.scss +244 -0
  429. package/src/sass/components/_cards.scss +36 -44
  430. package/src/sass/components/_carousel.scss +37 -113
  431. package/src/sass/components/_cascader.scss +131 -0
  432. package/src/sass/components/_chips.scss +36 -46
  433. package/src/sass/components/_column-chart.scss +15 -26
  434. package/src/sass/components/_command-palette.scss +4 -7
  435. package/src/sass/components/_confetti.scss +1 -4
  436. package/src/sass/components/_countdown.scss +1 -1
  437. package/src/sass/components/_data-table.scss +172 -25
  438. package/src/sass/components/_datepicker.scss +54 -40
  439. package/src/sass/components/_description-list.scss +85 -0
  440. package/src/sass/components/_dialog.scss +48 -55
  441. package/src/sass/components/_docked-display.scss +1 -3
  442. package/src/sass/components/_drag-handle.scss +16 -20
  443. package/src/sass/components/_expanding-card.scss +21 -14
  444. package/src/sass/components/_fab-menu.scss +43 -39
  445. package/src/sass/components/_funnel-chart.scss +63 -0
  446. package/src/sass/components/_heatmap-chart.scss +114 -29
  447. package/src/sass/components/_icon-buttons.scss +8 -11
  448. package/src/sass/components/_icons-material-design.scss +2 -2
  449. package/src/sass/components/_image-compare.scss +108 -0
  450. package/src/sass/components/_index.scss +20 -0
  451. package/src/sass/components/_keypad.scss +39 -19
  452. package/src/sass/components/_kpi.scss +6 -11
  453. package/src/sass/components/_lightbox.scss +24 -13
  454. package/src/sass/components/_line-chart.scss +9 -63
  455. package/src/sass/components/_list.scss +59 -14
  456. package/src/sass/components/_loading-indicator.scss +1 -0
  457. package/src/sass/components/_loading-overlay.scss +105 -0
  458. package/src/sass/components/_map.scss +37 -11
  459. package/src/sass/components/_marquee.scss +4 -3
  460. package/src/sass/components/_mega-menu.scss +128 -0
  461. package/src/sass/components/_menu.scss +146 -127
  462. package/src/sass/components/_menubar.scss +47 -0
  463. package/src/sass/components/_message-scroller.scss +2 -2
  464. package/src/sass/components/_message.scss +3 -3
  465. package/src/sass/components/_mixed-chart.scss +27 -35
  466. package/src/sass/components/_modal-display.scss +21 -0
  467. package/src/sass/components/_navbar.scss +45 -36
  468. package/src/sass/components/_navigation-bar.scss +12 -77
  469. package/src/sass/components/_navigation-rail.scss +161 -92
  470. package/src/sass/components/_org-chart.scss +192 -0
  471. package/src/sass/components/_page-footer.scss +2 -4
  472. package/src/sass/components/_pagination.scss +9 -27
  473. package/src/sass/components/_panes.scss +35 -42
  474. package/src/sass/components/_particles.scss +1 -4
  475. package/src/sass/components/_pie-chart.scss +86 -68
  476. package/src/sass/components/_popover.scss +18 -5
  477. package/src/sass/components/_progress.scss +183 -44
  478. package/src/sass/components/_pull-to-refresh.scss +90 -0
  479. package/src/sass/components/_questionnaire.scss +74 -3
  480. package/src/sass/components/_radar-chart.scss +40 -42
  481. package/src/sass/components/_radial-chart.scss +108 -46
  482. package/src/sass/components/_rich-text-editor.scss +2 -2
  483. package/src/sass/components/_sankey-chart.scss +91 -0
  484. package/src/sass/components/_scatter-chart.scss +144 -0
  485. package/src/sass/components/_scrim.scss +0 -2
  486. package/src/sass/components/_scrollspy.scss +0 -2
  487. package/src/sass/components/_search.scss +27 -26
  488. package/src/sass/components/_show-more.scss +8 -0
  489. package/src/sass/components/_side-sheet.scss +32 -51
  490. package/src/sass/components/_skeleton.scss +26 -19
  491. package/src/sass/components/_snackbar.scss +25 -21
  492. package/src/sass/components/_split-button.scss +5 -5
  493. package/src/sass/components/_stat.scss +3 -8
  494. package/src/sass/components/_stepper.scss +1 -1
  495. package/src/sass/components/_swipe-actions.scss +71 -0
  496. package/src/sass/components/_table_of_contents.scss +1 -3
  497. package/src/sass/components/_tabs.scss +49 -46
  498. package/src/sass/components/_timeline.scss +12 -12
  499. package/src/sass/components/_timepicker.scss +111 -79
  500. package/src/sass/components/_toolbar.scss +36 -47
  501. package/src/sass/components/_tooltip.scss +25 -12
  502. package/src/sass/components/_tour.scss +89 -0
  503. package/src/sass/components/_transfer-list.scss +73 -0
  504. package/src/sass/components/_transitions.scss +4 -4
  505. package/src/sass/components/_tree.scss +7 -32
  506. package/src/sass/components/_treemap-chart.scss +98 -0
  507. package/src/sass/components/forms/_checkboxes.scss +107 -44
  508. package/src/sass/components/forms/_color-picker.scss +135 -0
  509. package/src/sass/components/forms/_color-swatches.scss +85 -0
  510. package/src/sass/components/forms/_drop-zone.scss +16 -13
  511. package/src/sass/components/forms/_fieldset.scss +4 -7
  512. package/src/sass/components/forms/_file-input.scss +12 -8
  513. package/src/sass/components/forms/_index.scss +3 -1
  514. package/src/sass/components/forms/_input-fields.scss +271 -90
  515. package/src/sass/components/forms/_radio-buttons.scss +34 -117
  516. package/src/sass/components/forms/_rating.scss +2 -32
  517. package/src/sass/components/forms/_select.scss +198 -20
  518. package/src/sass/components/forms/_slider.scss +92 -98
  519. package/src/sass/components/forms/_switches.scss +62 -180
  520. package/src/sass/custom.scss +10 -1
  521. package/src/sass/expressive.scss +3 -63
  522. package/src/sass/tokens/_contrast.scss +94 -0
  523. package/src/sass/tokens/_elevation.scss +16 -0
  524. package/src/sass/tokens/_index.scss +5 -0
  525. package/src/sass/tokens/_motion.scss +109 -0
  526. package/src/sass/tokens/_reference.scss +72 -141
  527. package/src/sass/tokens/_shape.scss +38 -0
  528. package/src/sass/tokens/_stacking.scss +27 -0
  529. package/src/sass/tokens/_state.scss +0 -2
  530. package/src/sass/tokens/_theme.scss +10 -1
  531. package/src/sass/tokens/_vibrant.scss +2 -5
  532. package/src/sass/utilities/_defer-render.scss +17 -0
  533. package/src/sass/utilities/_helpers.scss +184 -27
  534. package/src/sass/utilities/_index.scss +1 -0
  535. package/src/sass/utilities/_scroll-area.scss +0 -2
  536. package/src/sass/utilities/_spacing.scss +52 -34
  537. package/src/sass/utilities/_typescale.scss +8 -1
  538. package/src/sass/utilities/_visibility.scss +46 -77
  539. package/src/sass/utilities/_z-depth.scss +7 -4
  540. package/dist/js/chunks/chunk-33QVDDGR.mjs +0 -270
  541. package/dist/js/chunks/chunk-33QVDDGR.mjs.map +0 -7
  542. package/dist/js/chunks/chunk-45FER6RI.mjs +0 -59
  543. package/dist/js/chunks/chunk-45FER6RI.mjs.map +0 -7
  544. package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +0 -7
  545. package/dist/js/chunks/chunk-6VATUZC6.mjs +0 -295
  546. package/dist/js/chunks/chunk-6VATUZC6.mjs.map +0 -7
  547. package/dist/js/chunks/chunk-74MXKKLN.mjs.map +0 -7
  548. package/dist/js/chunks/chunk-AIURVCG6.mjs +0 -55
  549. package/dist/js/chunks/chunk-AIURVCG6.mjs.map +0 -7
  550. package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +0 -7
  551. package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +0 -7
  552. package/dist/js/chunks/chunk-CK2XCICY.mjs.map +0 -7
  553. package/dist/js/chunks/chunk-CXXM2L4F.mjs +0 -344
  554. package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +0 -7
  555. package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +0 -7
  556. package/dist/js/chunks/chunk-FM5CZOUB.mjs.map +0 -7
  557. package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +0 -7
  558. package/dist/js/chunks/chunk-K3HZMFMD.mjs +0 -135
  559. package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +0 -7
  560. package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +0 -7
  561. package/dist/js/chunks/chunk-KQACNQ22.mjs +0 -7
  562. package/dist/js/chunks/chunk-KQACNQ22.mjs.map +0 -7
  563. package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +0 -7
  564. package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +0 -7
  565. package/dist/js/chunks/chunk-L27Q6ZMI.mjs.map +0 -7
  566. package/dist/js/chunks/chunk-LQWUDNHZ.mjs.map +0 -7
  567. package/dist/js/chunks/chunk-M372EDXD.mjs +0 -322
  568. package/dist/js/chunks/chunk-M372EDXD.mjs.map +0 -7
  569. package/dist/js/chunks/chunk-M3MURWMB.mjs +0 -82
  570. package/dist/js/chunks/chunk-M3MURWMB.mjs.map +0 -7
  571. package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +0 -7
  572. package/dist/js/chunks/chunk-OWG3LMUL.mjs +0 -169
  573. package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +0 -7
  574. package/dist/js/chunks/chunk-PD6HYHAE.mjs +0 -48
  575. package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +0 -7
  576. package/dist/js/chunks/chunk-PDG64UHF.mjs.map +0 -7
  577. package/dist/js/chunks/chunk-PO3AXVR3.mjs +0 -546
  578. package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +0 -7
  579. package/dist/js/chunks/chunk-QYGK36OG.mjs +0 -181
  580. package/dist/js/chunks/chunk-QYGK36OG.mjs.map +0 -7
  581. package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +0 -7
  582. package/dist/js/chunks/chunk-SMY7GJSS.mjs.map +0 -7
  583. package/dist/js/chunks/chunk-TCCA2HDG.mjs +0 -414
  584. package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +0 -7
  585. package/dist/js/chunks/chunk-TSZYSW7F.mjs.map +0 -7
  586. package/dist/js/chunks/chunk-UAZSDUVP.mjs +0 -90
  587. package/dist/js/chunks/chunk-UAZSDUVP.mjs.map +0 -7
  588. package/dist/js/chunks/chunk-UBRZZWRA.mjs +0 -127
  589. package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +0 -7
  590. package/dist/js/chunks/chunk-UCOE7ZDL.mjs +0 -287
  591. package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +0 -7
  592. package/dist/js/chunks/chunk-UETTGDLI.mjs.map +0 -7
  593. package/dist/js/chunks/chunk-UNCRDLP6.mjs +0 -136
  594. package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +0 -7
  595. package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +0 -7
  596. package/dist/js/chunks/chunk-VGPGBNGL.mjs +0 -68
  597. package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +0 -7
  598. package/dist/js/chunks/chunk-VKAUVTQY.mjs +0 -1
  599. package/dist/js/chunks/chunk-VM4FTS7L.mjs +0 -48
  600. package/dist/js/chunks/chunk-VM4FTS7L.mjs.map +0 -7
  601. package/dist/js/chunks/chunk-WDK4T63U.mjs.map +0 -7
  602. package/dist/js/chunks/chunk-WOCCTVUF.mjs +0 -185
  603. package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +0 -7
  604. package/dist/js/chunks/chunk-WQYN5L4E.mjs +0 -107
  605. package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +0 -7
  606. package/dist/js/chunks/chunk-X4ISMKE2.mjs.map +0 -7
  607. package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +0 -7
  608. package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +0 -7
  609. /package/dist/js/chunks/{chunk-VKAUVTQY.mjs.map → chunk-GNRSYMVH.mjs.map} +0 -0
@@ -0,0 +1,491 @@
1
+ import {
2
+ formAssociated,
3
+ unwrapControl,
4
+ wrapInControl
5
+ } from "./chunk-UHO5CV6K.mjs";
6
+ import {
7
+ Autocomplete
8
+ } from "./chunk-F7LAKFMX.mjs";
9
+ import {
10
+ Component
11
+ } from "./chunk-EB2V4OKL.mjs";
12
+ import {
13
+ Utils,
14
+ restoreAttribute
15
+ } from "./chunk-67UNY7RH.mjs";
16
+
17
+ // src/ts/components/chips.ts
18
+ var isMoveKey = (e) => (e.key === "ArrowLeft" || e.key === "ArrowRight") && Utils.plainKey(e);
19
+ var CONTROL = "expressive-chips-control";
20
+ var pastedValues = (e) => (e.clipboardData?.getData("text") ?? "").split(/[,\t\n]/).map((value) => value.trim()).filter(Boolean);
21
+ var _defaults = {
22
+ data: [],
23
+ placeholder: "",
24
+ secondaryPlaceholder: "",
25
+ closeIconClass: "material-symbols",
26
+ autocompleteOptions: {},
27
+ autocompleteOnly: false,
28
+ limit: Infinity,
29
+ allowUserInput: false,
30
+ i18n: { remove: "Remove", required: "Add at least one item." },
31
+ onChipAdd: null,
32
+ onChipSelect: null,
33
+ onChipDelete: null
34
+ };
35
+ var _Chips = class _Chips extends Component {
36
+ constructor(el, options) {
37
+ super(el, options);
38
+ /** The form name the text input had, which the chips submit instead. */
39
+ this._name = "";
40
+ /** The chips the field started with, which a form reset puts back. */
41
+ this._initialData = [];
42
+ /** Undoes each change setup made to the markup, newest last. */
43
+ this._undo = [];
44
+ /** The input's own aria-required, or null, put back on destroy. */
45
+ this._ariaRequired = null;
46
+ /** The form control wrapping a named input, which the form reads instead of it. */
47
+ this._control = null;
48
+ /** The named text input, whose form, disabled state and required the chips take over. */
49
+ this._source = null;
50
+ this._required = false;
51
+ /** Pasted text that lists several values, split by commas, tabs or lines, adds a chip for each. */
52
+ this._handleInputPaste = (e) => {
53
+ const values = pastedValues(e);
54
+ if (values.length < 2 || this._suggestionsOnly) return;
55
+ e.preventDefault();
56
+ values.every((id) => (this.addChip({ id }), _Chips.getInstance(this.el) === this));
57
+ };
58
+ this._handleChipClick = (e) => {
59
+ const _chip = e.target.closest(".chip");
60
+ const clickedClose = !!e.target.closest(".close");
61
+ if (_chip) {
62
+ const index = this._chips.indexOf(_chip);
63
+ if (index < 0) return;
64
+ if (clickedClose) {
65
+ this._deleteChip(index, "input");
66
+ } else {
67
+ this.selectChip(index);
68
+ }
69
+ } else {
70
+ this._input.focus();
71
+ }
72
+ };
73
+ // Selection follows focus: a chip is selected while focus is inside it, and
74
+ // none is once focus moves to the input or out of the field.
75
+ this._handleFocusIn = (e) => {
76
+ const chip = e.target.closest(".chip");
77
+ this._setSelected(chip && this._chips.includes(chip) ? chip : null);
78
+ };
79
+ this._handleFocusOut = (e) => {
80
+ if (!this.el.contains(e.relatedTarget)) this._setSelected(null);
81
+ };
82
+ this._handleInputFocus = () => {
83
+ this.el.classList.add("focus");
84
+ };
85
+ this._handleInputBlur = () => {
86
+ this.el.classList.remove("focus");
87
+ };
88
+ this._handleInputKeydown = (e) => {
89
+ if (Utils.isComposing(e)) return;
90
+ if (e.key === "Enter") {
91
+ if (this.hasAutocomplete && this.autocomplete?.isOpen && this.autocomplete.container.querySelector('[role="option"]')) {
92
+ return;
93
+ }
94
+ e.preventDefault();
95
+ if (!this.hasAutocomplete || !this.options.autocompleteOnly) {
96
+ this.addChip({ id: this._input.value.trim() });
97
+ }
98
+ this._input.value = "";
99
+ this.autocomplete?.close();
100
+ } else if (this._leavesInput(e)) {
101
+ e.preventDefault();
102
+ this.selectChip(this.chipsData.length - 1);
103
+ }
104
+ };
105
+ this._addClass(this.el, "chips");
106
+ this.chipsData = [];
107
+ this._chips = [];
108
+ this._takeName();
109
+ this._takeInitialData(this.options.data);
110
+ if (this.chipsData.length) this._renderChips();
111
+ if (this.options.allowUserInput) {
112
+ this._addClass(this.el, "field");
113
+ this._setupInput();
114
+ this._setupEventHandlers();
115
+ this.el.append(this._end);
116
+ }
117
+ this._setupLabel();
118
+ this._sync();
119
+ this._initialData = [...this.chipsData];
120
+ }
121
+ /**
122
+ * Selection is drawn by a class now, not by `:focus`, so it does not clear
123
+ * itself when focus moves - every path that changes the selection has to go
124
+ * through here or the class and the field drift apart.
125
+ *
126
+ * Deliberately no `aria-selected`: the chip is not an option in a listbox,
127
+ * and putting the attribute on an element with no such role is the same
128
+ * defect the semantics standard exists to remove.
129
+ */
130
+ _setSelected(chip) {
131
+ this._selectedChip?.classList.remove("selected");
132
+ this._selectedChip = chip;
133
+ chip?.classList.add("selected");
134
+ }
135
+ static get defaults() {
136
+ return _defaults;
137
+ }
138
+ getData() {
139
+ return this.chipsData;
140
+ }
141
+ destroy() {
142
+ if (this.autocomplete && Autocomplete.getInstance(this._input) === this.autocomplete) {
143
+ this.autocomplete.destroy();
144
+ }
145
+ this._events.abort();
146
+ this._chips.forEach((c) => c.remove());
147
+ this._chips = [];
148
+ this._giveNameBack();
149
+ this.el.classList.remove("focus");
150
+ this._undo.reverse().forEach((undo) => undo());
151
+ this._undo = [];
152
+ super.destroy();
153
+ }
154
+ _setupEventHandlers() {
155
+ const { signal } = this._events;
156
+ this.el.addEventListener("click", this._handleChipClick, { signal });
157
+ this.el.addEventListener("keydown", _Chips._handleChipsKeydown, { signal });
158
+ this.el.addEventListener("focusin", this._handleFocusIn, { signal });
159
+ this.el.addEventListener("focusout", this._handleFocusOut, { signal });
160
+ this._input.addEventListener("focus", this._handleInputFocus, { signal });
161
+ this._input.addEventListener("blur", this._handleInputBlur, { signal });
162
+ this._input.addEventListener("keydown", this._handleInputKeydown, { signal });
163
+ this._input.addEventListener("paste", this._handleInputPaste, { signal });
164
+ }
165
+ /**
166
+ * A text input with a `name` would submit whatever is half typed. The chips
167
+ * submit under that name instead, one value per chip, as a multiple select
168
+ * does, so the input gives its name up until destroy().
169
+ */
170
+ _takeName() {
171
+ const input = this._editorInput();
172
+ this._name = input?.getAttribute("name") ?? "";
173
+ if (this._name && formAssociated()) this._wrap(input);
174
+ }
175
+ /**
176
+ * Wraps the input in the form control, which takes its name and required.
177
+ * `display: contents` lays the input out as a child of the field still.
178
+ */
179
+ _wrap(input) {
180
+ this._source = input;
181
+ this._takeRequired(input);
182
+ this._control = wrapInControl(CONTROL, input, () => this._validate());
183
+ this._control.onFormReset = () => this._resetChips();
184
+ this._validate();
185
+ }
186
+ /**
187
+ * The editor's text field, or null. A static .chips of filter checkboxes,
188
+ * which AutoInit also starts, keeps its own native form values.
189
+ */
190
+ _editorInput() {
191
+ return this.options.allowUserInput ? this.el.querySelector('input:is(:not([type]), [type="text"])') : null;
192
+ }
193
+ /** Where the text field ends: chips go before it, and it goes last. */
194
+ get _end() {
195
+ return this._control ?? this._input;
196
+ }
197
+ /** After the chips change: give the form one value per chip and update a required field's validity. */
198
+ _sync() {
199
+ if (!this._control) return;
200
+ const data = new FormData();
201
+ this.chipsData.forEach((chip) => data.append(this._name, String(chip.id)));
202
+ this._control.internals.setFormValue(data);
203
+ this._validate();
204
+ }
205
+ /**
206
+ * The chips are what is required, not the text, so `required` moves to the
207
+ * control, and aria-required keeps telling assistive technology.
208
+ */
209
+ _takeRequired(input) {
210
+ this._required = input.required;
211
+ if (!this._required) return;
212
+ this._ariaRequired = input.getAttribute("aria-required");
213
+ input.required = false;
214
+ input.setAttribute("aria-required", "true");
215
+ }
216
+ /**
217
+ * A required field is valid once it has a chip, whatever is half typed. The
218
+ * control holds this validity, apart from any error the page sets on the
219
+ * input, and anchors it at the input, which a submit then focuses.
220
+ */
221
+ _validate() {
222
+ const internals = this._control.internals;
223
+ if (this._required && !this._source.readOnly && !this.chipsData.length) {
224
+ internals.setValidity({ valueMissing: true }, this._requiredMessage, this._anchor);
225
+ } else internals.setValidity({});
226
+ }
227
+ /** The input, unless page script moved it out of the control, where it cannot anchor the message. */
228
+ get _anchor() {
229
+ return this._control.contains(this._source) ? this._source : void 0;
230
+ }
231
+ /** A validity flag needs a message, so an empty i18n.required falls back to the default. */
232
+ get _requiredMessage() {
233
+ return this.options.i18n.required || _defaults.i18n.required;
234
+ }
235
+ _resetChips() {
236
+ this._setSelected(null);
237
+ this._chips.forEach((chip) => chip.remove());
238
+ this.chipsData = [...this._initialData];
239
+ this._chips = this.chipsData.map((chip) => this._renderChip(chip));
240
+ this._control.before(...this._chips);
241
+ this._setPlaceholder();
242
+ this._sync();
243
+ }
244
+ /** Unwraps the input, with whatever else went in the control, and gives it its name and required back. */
245
+ _giveNameBack() {
246
+ if (!this._control) return;
247
+ unwrapControl(this._control, this._source);
248
+ this._control = null;
249
+ if (!this._required) return;
250
+ this._source.required = true;
251
+ restoreAttribute(this._source, "aria-required", this._ariaRequired);
252
+ }
253
+ /** Whether only an autocomplete suggestion can become a chip. */
254
+ get _suggestionsOnly() {
255
+ return this.hasAutocomplete && this.options.autocompleteOnly;
256
+ }
257
+ /** The arrow that points back towards the first chip, which in RTL is Right. */
258
+ static _backKey(el) {
259
+ return getComputedStyle(el).direction === "rtl" ? "ArrowRight" : "ArrowLeft";
260
+ }
261
+ static _handleChipsKeydown(e) {
262
+ const chips = e.target.closest(".chips");
263
+ const tag = e.target.tagName;
264
+ if (tag === "INPUT" || tag === "TEXTAREA" || !chips) return;
265
+ const currChips = _Chips.getInstance(chips);
266
+ if (!currChips) return;
267
+ if (e.key === "Backspace" || e.key === "Delete") {
268
+ const index = currChips._chips.indexOf(e.target.closest(".chip"));
269
+ if (index < 0) return;
270
+ e.preventDefault();
271
+ currChips._deleteChip(index, "previous");
272
+ } else if (isMoveKey(e)) {
273
+ const current = e.target.closest(".chip") ?? currChips._selectedChip;
274
+ const index = currChips._chips.indexOf(current);
275
+ if (index < 0) return;
276
+ if (e.key === _Chips._backKey(chips)) {
277
+ if (index > 0) currChips.selectChip(index - 1);
278
+ } else {
279
+ const selectIndex = index + 1;
280
+ if (selectIndex >= currChips.chipsData.length) {
281
+ currChips._setSelected(null);
282
+ currChips._input.focus();
283
+ } else currChips.selectChip(selectIndex);
284
+ }
285
+ }
286
+ }
287
+ /** Whether a key moves from the empty input back to the last chip. */
288
+ _leavesInput(e) {
289
+ return this._input.value === "" && this.chipsData.length > 0 && Utils.plainKey(e) && ["Backspace", _Chips._backKey(this.el)].includes(e.key);
290
+ }
291
+ _renderChip(chip) {
292
+ if (!chip.id && chip.id !== 0) return;
293
+ const label = chip.text || chip.id;
294
+ const renderedChip = document.createElement("span");
295
+ renderedChip.classList.add("chip");
296
+ renderedChip.innerText = label;
297
+ if (chip.image) {
298
+ const img = document.createElement("img");
299
+ img.setAttribute("src", chip.image);
300
+ renderedChip.insertBefore(img, renderedChip.firstChild);
301
+ }
302
+ if (this.options.allowUserInput) {
303
+ const closeButton = document.createElement("button");
304
+ closeButton.type = "button";
305
+ closeButton.classList.add("close");
306
+ closeButton.setAttribute("aria-label", `${this.options.i18n.remove} ${label}`);
307
+ const closeIcon = document.createElement("span");
308
+ closeIcon.classList.add(this.options.closeIconClass);
309
+ closeIcon.setAttribute("aria-hidden", "true");
310
+ closeIcon.innerText = "close";
311
+ closeButton.appendChild(closeIcon);
312
+ renderedChip.appendChild(closeButton);
313
+ }
314
+ return renderedChip;
315
+ }
316
+ /**
317
+ * Copies the starting chips, so adding or deleting one does not edit the
318
+ * caller's array and a batch init does not share one list. Blank ids,
319
+ * duplicates and chips past the limit are dropped, as addChip drops them: a
320
+ * blank id used to render nothing and throw from the constructor.
321
+ */
322
+ _takeInitialData(data) {
323
+ for (const chip of data) {
324
+ if (this.chipsData.length < this.options.limit && this._isValidAndNotExist(chip)) this.chipsData.push(chip);
325
+ }
326
+ }
327
+ _renderChips() {
328
+ this._chips = [];
329
+ for (let i = 0; i < this.chipsData.length; i++) {
330
+ const chipElem = this._renderChip(this.chipsData[i]);
331
+ this.el.appendChild(chipElem);
332
+ this._chips.push(chipElem);
333
+ }
334
+ }
335
+ _setupAutocomplete() {
336
+ this.options.autocompleteOptions.onAutocomplete = (items) => {
337
+ if (_Chips.getInstance(this.el) !== this) return;
338
+ if (items.length > 0) {
339
+ this.addChip({
340
+ id: items[0].id,
341
+ text: items[0].text,
342
+ image: items[0].image
343
+ });
344
+ this._input.value = "";
345
+ this._input.focus();
346
+ }
347
+ };
348
+ const pageOnCreate = this.options.autocompleteOptions.onCreate;
349
+ this.autocomplete = Autocomplete.init(this._input, {
350
+ ...this.options.autocompleteOptions,
351
+ onCreate: (text, autocomplete) => {
352
+ this._addTyped(text);
353
+ if (typeof pageOnCreate === "function") pageOnCreate.call(autocomplete, text, autocomplete);
354
+ }
355
+ });
356
+ }
357
+ /** The "Add" row is a deliberate choice, so it adds a chip even in an autocompleteOnly field. */
358
+ _addTyped(text) {
359
+ if (_Chips.getInstance(this.el) !== this) return;
360
+ this.addChip({ id: text.trim() });
361
+ this._input.value = "";
362
+ this._input.focus();
363
+ }
364
+ _setupInput() {
365
+ this._input = this.el.querySelector("input");
366
+ if (!this._input) {
367
+ const input = this._input = document.createElement("input");
368
+ this.el.append(input);
369
+ this._undo.push(() => input.remove());
370
+ }
371
+ this._addClass(this._input, "input");
372
+ this._keepAttribute(this._input, "placeholder");
373
+ this.hasAutocomplete = Object.keys(this.options.autocompleteOptions).length > 0;
374
+ if (this.hasAutocomplete) this._setupAutocomplete();
375
+ this._setPlaceholder();
376
+ if (!this._input.getAttribute("id")) {
377
+ this._keepAttribute(this._input, "id");
378
+ this._input.setAttribute("id", Utils.guid());
379
+ }
380
+ }
381
+ _setupLabel() {
382
+ this._label = this.el.querySelector("label");
383
+ if (!this._label || !this._input) return;
384
+ this._keepAttribute(this._label, "for");
385
+ this._label.setAttribute("for", this._input.getAttribute("id"));
386
+ }
387
+ /** Adds a class the markup did not have, for destroy() to take off. */
388
+ _addClass(el, name) {
389
+ if (el.classList.contains(name)) return;
390
+ const hadClass = el.hasAttribute("class");
391
+ el.classList.add(name);
392
+ this._undo.push(() => {
393
+ el.classList.remove(name);
394
+ if (!hadClass && !el.classList.length) el.removeAttribute("class");
395
+ });
396
+ }
397
+ /** Keeps an attribute's value for destroy() to put back. */
398
+ _keepAttribute(el, name) {
399
+ const value = el.getAttribute(name);
400
+ this._undo.push(() => restoreAttribute(el, name, value));
401
+ }
402
+ _setPlaceholder() {
403
+ if (!this._input) return;
404
+ if (!this.chipsData.length && this.options.placeholder) {
405
+ this._input.placeholder = this.options.placeholder;
406
+ } else if (this.chipsData.length && this.options.secondaryPlaceholder) {
407
+ this._input.placeholder = this.options.secondaryPlaceholder;
408
+ }
409
+ }
410
+ _isValidAndNotExist(chip) {
411
+ const isValid = (!!chip.id || chip.id === 0) && String(chip.id).trim() !== "";
412
+ const doesNotExist = !this.chipsData.some((item) => String(item.id) === String(chip.id));
413
+ return isValid && doesNotExist;
414
+ }
415
+ /**
416
+ * Add chip to input.
417
+ * @param chip Chip data object
418
+ */
419
+ addChip(chip) {
420
+ if (!this._isValidAndNotExist(chip) || this.chipsData.length >= this.options.limit) return;
421
+ const renderedChip = this._renderChip(chip);
422
+ this._chips.push(renderedChip);
423
+ this.chipsData.push(chip);
424
+ if (this._end) this._end.before(renderedChip);
425
+ else this.el.append(renderedChip);
426
+ this._setPlaceholder();
427
+ this._sync();
428
+ this._notify("chip-add", this.options.onChipAdd, { args: [this.el, renderedChip], detail: { chip: renderedChip }, current: () => this._chips.includes(renderedChip) });
429
+ }
430
+ /**
431
+ * Delete nth chip.
432
+ * @param chipIndex Index of chip
433
+ */
434
+ deleteChip(chipIndex) {
435
+ const root = this.el.getRootNode();
436
+ this._deleteChip(chipIndex, this._chips[chipIndex]?.contains(root.activeElement) ? "input" : null);
437
+ }
438
+ _deleteChip(chipIndex, focus) {
439
+ const chip = this._chips[chipIndex];
440
+ if (!chip) return;
441
+ if (this._selectedChip === chip) this._setSelected(null);
442
+ chip.remove();
443
+ this._chips.splice(chipIndex, 1);
444
+ this.chipsData.splice(chipIndex, 1);
445
+ this._setPlaceholder();
446
+ this._sync();
447
+ const focusPath = [];
448
+ let root = this.el.getRootNode();
449
+ while (root) {
450
+ focusPath.push({ root, element: root.activeElement });
451
+ root = "host" in root ? root.host.getRootNode() : null;
452
+ }
453
+ this._notify("chip-delete", this.options.onChipDelete, { args: [this.el, chip], detail: { chip }, current: () => !this._chips.includes(chip) });
454
+ if (!focus || focusPath.some(({ root: root2, element }) => root2.activeElement !== element) || _Chips.getInstance(this.el) !== this) return;
455
+ if (focus === "previous" && this._chips.length) this.selectChip(Math.max(chipIndex - 1, 0));
456
+ else {
457
+ this._setSelected(null);
458
+ this._input?.focus();
459
+ }
460
+ }
461
+ /**
462
+ * Select nth chip.
463
+ * @param chipIndex Index of chip
464
+ */
465
+ selectChip(chipIndex) {
466
+ const chip = this._chips[chipIndex];
467
+ if (!chip) return;
468
+ this._setSelected(chip);
469
+ chip.querySelector(".close")?.focus();
470
+ this._notify("chip-select", this.options.onChipSelect, { args: [this.el, chip], detail: { chip }, current: () => this._selectedChip === chip });
471
+ }
472
+ static Init() {
473
+ Utils.onDocumentReady(() => {
474
+ const chips = document.querySelectorAll(".chips");
475
+ chips.forEach((el) => {
476
+ el.addEventListener("click", (e) => {
477
+ if (!e.target.closest(".close")) return;
478
+ const chip = e.target.closest(".chip");
479
+ if (chip && !_Chips.getInstance(el)?._chips.includes(chip)) chip.remove();
480
+ });
481
+ });
482
+ });
483
+ }
484
+ };
485
+ _Chips.key = "Expressive_Chips";
486
+ var Chips = _Chips;
487
+
488
+ export {
489
+ Chips
490
+ };
491
+ //# sourceMappingURL=chunk-LXRHUQAX.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/chips.ts"],
4
+ "sourcesContent": ["import { Utils, restoreAttribute } from '../core/utils';\nimport { Autocomplete, AutocompleteOptions } from './autocomplete';\nimport { Component, BaseOptions } from '../core/component';\nimport { FormControl, formAssociated, wrapInControl, unwrapControl } from '../core/formControl';\n\n/** Whether a key moves between chips. Alt, Ctrl and Meta stay the browser's. */\nconst isMoveKey = (e: KeyboardEvent) => (e.key === 'ArrowLeft' || e.key === 'ArrowRight') && Utils.plainKey(e);\n\nexport interface ChipData {\n /**\n * Unique identifier.\n */\n id: number | string;\n /**\n * Chip text. If not specified, \"id\" will be used.\n */\n text?: string;\n /**\n * Chip image (URL).\n */\n image?: string;\n}\n\n/** The form control a named field submits through, wrapping its input. */\nconst CONTROL = 'expressive-chips-control';\n\n/** The values in pasted text, split by commas, tabs or lines. */\nconst pastedValues = (e: ClipboardEvent) =>\n (e.clipboardData?.getData('text') ?? '').split(/[,\\t\\n]/).map((value) => value.trim()).filter(Boolean);\n\nexport interface ChipsI18nOptions {\n /** Prefix for the delete button's accessible name. */\n remove: string;\n /** What a required field says while it has no chips. */\n required: string;\n}\n\nexport interface ChipsOptions extends BaseOptions {\n /**\n * Set the chip data.\n * @default []\n */\n data: ChipData[];\n /**\n * Set first placeholder when there are no tags.\n * @default \"\"\n */\n placeholder: string;\n /**\n * Set second placeholder when adding additional tags.\n * @default \"\"\n */\n secondaryPlaceholder: string;\n /**\n * Set autocomplete options.\n * @default {}\n */\n autocompleteOptions: Partial<AutocompleteOptions>;\n /**\n * Toggles abililty to add custom value not in autocomplete list.\n * @default false\n */\n autocompleteOnly: boolean;\n /**\n * Set chips limit.\n * @default Infinity\n */\n limit: number;\n /**\n * Specifies class to be used in \"close\" button.\n * @default 'material-symbols'\n */\n closeIconClass: string;\n /**\n * Specifies option to render user input field\n * @default false;\n */\n allowUserInput: boolean;\n /**\n * Strings the component generates. `remove` prefixes the delete button's\n * accessible name, giving \"Remove Apple\". `required` is what a required\n * field says while it has no chips.\n * @default { remove: 'Remove', required: 'Add at least one item.' }\n */\n i18n: Partial<ChipsI18nOptions>;\n /**\n * Callback for chip add.\n * @default null\n */\n onChipAdd: (element: HTMLElement, chip: HTMLElement) => void;\n /**\n * Callback for chip select.\n * @default null\n */\n onChipSelect: (element: HTMLElement, chip: HTMLElement) => void;\n /**\n * Callback for chip delete.\n * @default null\n */\n onChipDelete: (element: HTMLElement, chip: HTMLElement) => void;\n}\n\nconst _defaults: ChipsOptions = {\n data: [],\n placeholder: '',\n secondaryPlaceholder: '',\n closeIconClass: 'material-symbols',\n autocompleteOptions: {},\n autocompleteOnly: false,\n limit: Infinity,\n allowUserInput: false,\n i18n: { remove: 'Remove', required: 'Add at least one item.' },\n onChipAdd: null,\n onChipSelect: null,\n onChipDelete: null\n};\n\nexport class Chips extends Component<ChipsOptions> {\n /** Array of the current chips data. */\n chipsData: ChipData[];\n /** If the chips has autocomplete enabled. */\n hasAutocomplete: boolean;\n /** Autocomplete instance, if any. */\n autocomplete: Autocomplete;\n _input: HTMLInputElement;\n _label: HTMLLabelElement;\n _chips: HTMLElement[];\n private _selectedChip: HTMLElement;\n /** The form name the text input had, which the chips submit instead. */\n private _name = '';\n /** The chips the field started with, which a form reset puts back. */\n private _initialData: ChipData[] = [];\n /** Undoes each change setup made to the markup, newest last. */\n private _undo: (() => void)[] = [];\n /** The input's own aria-required, or null, put back on destroy. */\n private _ariaRequired: string | null = null;\n /** The form control wrapping a named input, which the form reads instead of it. */\n private _control: FormControl | null = null;\n /** The named text input, whose form, disabled state and required the chips take over. */\n private _source: HTMLInputElement | null = null;\n private _required = false;\n\n /**\n * Selection is drawn by a class now, not by `:focus`, so it does not clear\n * itself when focus moves - every path that changes the selection has to go\n * through here or the class and the field drift apart.\n *\n * Deliberately no `aria-selected`: the chip is not an option in a listbox,\n * and putting the attribute on an element with no such role is the same\n * defect the semantics standard exists to remove.\n */\n private _setSelected(chip: HTMLElement | null) {\n this._selectedChip?.classList.remove('selected');\n this._selectedChip = chip;\n chip?.classList.add('selected');\n }\n\n constructor(el: HTMLElement, options: Partial<ChipsOptions>) {\n super(el, options);\n\n this._addClass(this.el, 'chips');\n this.chipsData = [];\n this._chips = [];\n this._takeName();\n\n // Render initial chips\n this._takeInitialData(this.options.data);\n if (this.chipsData.length) this._renderChips();\n\n // Render input element, setup event handlers\n if (this.options.allowUserInput) {\n this._addClass(this.el, 'field');\n this._setupInput();\n this._setupEventHandlers();\n // move input to end, inside its control when it has one\n this.el.append(this._end);\n }\n // After _setupInput: the label points at the input's id, which is only\n // assigned there. Running this first threw on any .chips with a <label>.\n this._setupLabel();\n this._sync();\n // After autocomplete, which can turn the input's value into a chip.\n this._initialData = [...this.chipsData];\n }\n\n static get defaults() {\n return _defaults;\n }\n\n static key = 'Expressive_Chips';\n\n getData() {\n return this.chipsData;\n }\n\n destroy() {\n if (this.autocomplete && Autocomplete.getInstance(this._input) === this.autocomplete) {\n this.autocomplete.destroy();\n }\n this._events.abort();\n this._chips.forEach((c) => c.remove());\n this._chips = [];\n this._giveNameBack();\n this.el.classList.remove('focus');\n this._undo.reverse().forEach((undo) => undo());\n this._undo = [];\n super.destroy();\n }\n\n _setupEventHandlers() {\n const { signal } = this._events;\n this.el.addEventListener('click', this._handleChipClick, { signal });\n this.el.addEventListener('keydown', Chips._handleChipsKeydown, { signal });\n this.el.addEventListener('focusin', this._handleFocusIn, { signal });\n this.el.addEventListener('focusout', this._handleFocusOut, { signal });\n this._input.addEventListener('focus', this._handleInputFocus, { signal });\n this._input.addEventListener('blur', this._handleInputBlur, { signal });\n this._input.addEventListener('keydown', this._handleInputKeydown, { signal });\n this._input.addEventListener('paste', this._handleInputPaste, { signal });\n }\n\n /**\n * A text input with a `name` would submit whatever is half typed. The chips\n * submit under that name instead, one value per chip, as a multiple select\n * does, so the input gives its name up until destroy().\n */\n private _takeName() {\n const input = this._editorInput();\n this._name = input?.getAttribute('name') ?? '';\n // ponytail: without form-associated custom elements (jsdom) the input keeps its name and submits its text.\n if (this._name && formAssociated()) this._wrap(input);\n }\n\n /**\n * Wraps the input in the form control, which takes its name and required.\n * `display: contents` lays the input out as a child of the field still.\n */\n private _wrap(input: HTMLInputElement) {\n this._source = input;\n this._takeRequired(input);\n // The control follows the input's disabled state and form; a read-only input is not validated, so its required no longer counts.\n this._control = wrapInControl(CONTROL, input, () => this._validate());\n this._control.onFormReset = () => this._resetChips();\n this._validate();\n }\n\n /**\n * The editor's text field, or null. A static .chips of filter checkboxes,\n * which AutoInit also starts, keeps its own native form values.\n */\n private _editorInput() {\n return this.options.allowUserInput ? this.el.querySelector<HTMLInputElement>('input:is(:not([type]), [type=\"text\"])') : null;\n }\n\n /** Where the text field ends: chips go before it, and it goes last. */\n private get _end() {\n return this._control ?? this._input;\n }\n\n /** After the chips change: give the form one value per chip and update a required field's validity. */\n private _sync() {\n if (!this._control) return;\n const data = new FormData();\n this.chipsData.forEach((chip) => data.append(this._name, String(chip.id)));\n this._control.internals.setFormValue(data);\n this._validate();\n }\n\n /**\n * The chips are what is required, not the text, so `required` moves to the\n * control, and aria-required keeps telling assistive technology.\n */\n private _takeRequired(input: HTMLInputElement) {\n this._required = input.required;\n if (!this._required) return;\n this._ariaRequired = input.getAttribute('aria-required');\n input.required = false;\n input.setAttribute('aria-required', 'true');\n }\n\n /**\n * A required field is valid once it has a chip, whatever is half typed. The\n * control holds this validity, apart from any error the page sets on the\n * input, and anchors it at the input, which a submit then focuses.\n */\n private _validate() {\n const internals = this._control.internals;\n if (this._required && !this._source.readOnly && !this.chipsData.length) {\n internals.setValidity({ valueMissing: true }, this._requiredMessage, this._anchor);\n } else internals.setValidity({});\n }\n\n /** The input, unless page script moved it out of the control, where it cannot anchor the message. */\n private get _anchor() {\n return this._control.contains(this._source) ? this._source : undefined;\n }\n\n /** A validity flag needs a message, so an empty i18n.required falls back to the default. */\n private get _requiredMessage() {\n return this.options.i18n.required || _defaults.i18n.required;\n }\n\n private _resetChips() {\n this._setSelected(null);\n this._chips.forEach((chip) => chip.remove());\n this.chipsData = [...this._initialData];\n this._chips = this.chipsData.map((chip) => this._renderChip(chip));\n this._control.before(...this._chips);\n this._setPlaceholder();\n this._sync();\n }\n\n /** Unwraps the input, with whatever else went in the control, and gives it its name and required back. */\n private _giveNameBack() {\n if (!this._control) return;\n unwrapControl(this._control, this._source);\n this._control = null;\n if (!this._required) return;\n this._source.required = true;\n restoreAttribute(this._source, 'aria-required', this._ariaRequired);\n }\n\n /** Whether only an autocomplete suggestion can become a chip. */\n private get _suggestionsOnly() {\n return this.hasAutocomplete && this.options.autocompleteOnly;\n }\n\n /** Pasted text that lists several values, split by commas, tabs or lines, adds a chip for each. */\n _handleInputPaste = (e: ClipboardEvent) => {\n const values = pastedValues(e);\n if (values.length < 2 || this._suggestionsOnly) return;\n e.preventDefault();\n // An add callback can destroy or replace the instance; the rest of the paste is its.\n values.every((id) => (this.addChip({ id }), Chips.getInstance(this.el) === this));\n };\n\n _handleChipClick = (e: MouseEvent) => {\n const _chip = (<HTMLElement>e.target).closest('.chip');\n // closest, not classList: the close button now wraps an icon span, so a\n // click on the glyph reports the span as the target.\n const clickedClose = !!(<HTMLElement>e.target).closest('.close');\n if (_chip) {\n // Index into the chip list, not into the container's children: the\n // container also holds the label and the input, so counting children\n // gave an index that did not line up with chipsData.\n const index = this._chips.indexOf(_chip as HTMLElement);\n if (index < 0) return;\n if (clickedClose) {\n this._deleteChip(index, 'input');\n } else {\n this.selectChip(index);\n }\n // Default handle click to focus on input\n } else {\n this._input.focus();\n }\n };\n\n /** The arrow that points back towards the first chip, which in RTL is Right. */\n private static _backKey(el: Element) {\n return getComputedStyle(el).direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n }\n\n static _handleChipsKeydown(e: KeyboardEvent) {\n const chips = (<HTMLElement>e.target).closest('.chips');\n\n // Don't handle keydown inputs on input and textarea\n const tag = (<HTMLElement>e.target).tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || !chips) return;\n\n const currChips = Chips.getInstance(chips);\n if (!currChips) return; // .chips markup without an instance behind it\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n const index = currChips._chips.indexOf((e.target as HTMLElement).closest('.chip'));\n if (index < 0) return;\n e.preventDefault();\n currChips._deleteChip(index, 'previous');\n } else if (isMoveKey(e)) {\n // Move from the chip that has focus, the same one Backspace deletes.\n const current = (e.target as HTMLElement).closest<HTMLElement>('.chip') ?? currChips._selectedChip;\n const index = currChips._chips.indexOf(current);\n if (index < 0) return;\n if (e.key === Chips._backKey(chips)) {\n if (index > 0) currChips.selectChip(index - 1);\n } else {\n const selectIndex = index + 1;\n if (selectIndex >= currChips.chipsData.length) {\n // Walking off the end returns to the input, so nothing is selected\n // any more - without this the last chip kept the class.\n currChips._setSelected(null);\n currChips._input.focus();\n }\n else currChips.selectChip(selectIndex);\n }\n }\n }\n\n // Selection follows focus: a chip is selected while focus is inside it, and\n // none is once focus moves to the input or out of the field.\n _handleFocusIn = (e: FocusEvent) => {\n const chip = (e.target as HTMLElement).closest<HTMLElement>('.chip');\n this._setSelected(chip && this._chips.includes(chip) ? chip : null);\n };\n\n _handleFocusOut = (e: FocusEvent) => {\n if (!this.el.contains(e.relatedTarget as Node | null)) this._setSelected(null);\n };\n\n _handleInputFocus = () => {\n this.el.classList.add('focus');\n };\n\n _handleInputBlur = () => {\n this.el.classList.remove('focus');\n };\n\n _handleInputKeydown = (e: KeyboardEvent) => {\n // Enter that confirms an IME composition is not a request to add a chip.\n if (Utils.isComposing(e)) return;\n if (e.key === 'Enter') {\n // Override enter if autocompleting.\n if (this.hasAutocomplete && this.autocomplete?.isOpen &&\n this.autocomplete.container.querySelector('[role=\"option\"]')) {\n return;\n }\n e.preventDefault();\n if (!this.hasAutocomplete || !this.options.autocompleteOnly) {\n this.addChip({ id: this._input.value.trim() });\n }\n this._input.value = '';\n // The list answered the text Enter just used up.\n this.autocomplete?.close();\n } else if (this._leavesInput(e)) {\n e.preventDefault();\n this.selectChip(this.chipsData.length - 1);\n }\n };\n\n /** Whether a key moves from the empty input back to the last chip. */\n private _leavesInput(e: KeyboardEvent) {\n return this._input.value === '' && this.chipsData.length > 0 && Utils.plainKey(e) &&\n ['Backspace', Chips._backKey(this.el)].includes(e.key);\n }\n\n _renderChip(chip: ChipData): HTMLElement {\n if (!chip.id && chip.id !== 0) return;\n const label = chip.text || <string>chip.id;\n // <span>, not <div>: a chip is inline, and the container itself is not a\n // control. It used to be a <div tabindex=\"0\"> with no role - focusable,\n // and announcing nothing.\n const renderedChip = document.createElement('span');\n renderedChip.classList.add('chip');\n renderedChip.innerText = label;\n // attach image if needed\n if (chip.image) {\n const img = document.createElement('img');\n img.setAttribute('src', chip.image);\n renderedChip.insertBefore(img, renderedChip.firstChild);\n }\n if (this.options.allowUserInput) {\n // The delete affordance is the control, so it is the <button> and it\n // carries the name. `type` is explicit because a bare button inside a\n // form submits it.\n const closeButton = document.createElement('button');\n closeButton.type = 'button';\n closeButton.classList.add('close');\n closeButton.setAttribute('aria-label', `${this.options.i18n.remove} ${label}`);\n // The ligature is text and is read out, so the glyph is hidden and the\n // button's own label is what gets announced.\n const closeIcon = document.createElement('span');\n closeIcon.classList.add(this.options.closeIconClass);\n closeIcon.setAttribute('aria-hidden', 'true');\n closeIcon.innerText = 'close';\n closeButton.appendChild(closeIcon);\n renderedChip.appendChild(closeButton);\n }\n return renderedChip;\n }\n\n /**\n * Copies the starting chips, so adding or deleting one does not edit the\n * caller's array and a batch init does not share one list. Blank ids,\n * duplicates and chips past the limit are dropped, as addChip drops them: a\n * blank id used to render nothing and throw from the constructor.\n */\n private _takeInitialData(data: ChipData[]) {\n for (const chip of data) {\n if (this.chipsData.length < this.options.limit && this._isValidAndNotExist(chip)) this.chipsData.push(chip);\n }\n }\n\n _renderChips() {\n this._chips = []; //.remove();\n for (let i = 0; i < this.chipsData.length; i++) {\n const chipElem = this._renderChip(this.chipsData[i]);\n this.el.appendChild(chipElem);\n this._chips.push(chipElem);\n }\n }\n\n _setupAutocomplete() {\n this.options.autocompleteOptions.onAutocomplete = (items) => {\n if (Chips.getInstance(this.el) !== this) return;\n if (items.length > 0) {\n this.addChip({\n id: items[0].id,\n text: items[0].text,\n image: items[0].image\n });\n this._input.value = '';\n this._input.focus();\n }\n };\n // A new object, so a second Chips given the same options does not wrap this wrapper.\n const pageOnCreate = this.options.autocompleteOptions.onCreate;\n this.autocomplete = Autocomplete.init(this._input, {\n ...this.options.autocompleteOptions,\n onCreate: (text, autocomplete) => {\n this._addTyped(text);\n if (typeof pageOnCreate === 'function') pageOnCreate.call(autocomplete, text, autocomplete);\n }\n });\n }\n\n /** The \"Add\" row is a deliberate choice, so it adds a chip even in an autocompleteOnly field. */\n private _addTyped(text: string) {\n if (Chips.getInstance(this.el) !== this) return;\n this.addChip({ id: text.trim() });\n this._input.value = '';\n this._input.focus();\n }\n\n _setupInput() {\n this._input = this.el.querySelector('input');\n if (!this._input) {\n const input = (this._input = document.createElement('input'));\n this.el.append(input);\n this._undo.push(() => input.remove());\n }\n this._addClass(this._input, 'input');\n this._keepAttribute(this._input, 'placeholder');\n this.hasAutocomplete = Object.keys(this.options.autocompleteOptions).length > 0;\n // Setup autocomplete if needed\n if (this.hasAutocomplete) this._setupAutocomplete();\n this._setPlaceholder();\n // Set input id\n if (!this._input.getAttribute('id')) {\n this._keepAttribute(this._input, 'id');\n this._input.setAttribute('id', Utils.guid());\n }\n }\n\n _setupLabel() {\n this._label = this.el.querySelector('label');\n // No input to point at when allowUserInput is off.\n if (!this._label || !this._input) return;\n this._keepAttribute(this._label, 'for');\n this._label.setAttribute('for', this._input.getAttribute('id'));\n }\n\n /** Adds a class the markup did not have, for destroy() to take off. */\n private _addClass(el: Element, name: string) {\n if (el.classList.contains(name)) return;\n const hadClass = el.hasAttribute('class');\n el.classList.add(name);\n this._undo.push(() => {\n el.classList.remove(name);\n if (!hadClass && !el.classList.length) el.removeAttribute('class');\n });\n }\n\n /** Keeps an attribute's value for destroy() to put back. */\n private _keepAttribute(el: Element, name: string) {\n const value = el.getAttribute(name);\n this._undo.push(() => restoreAttribute(el, name, value));\n }\n\n _setPlaceholder() {\n if (!this._input) return;\n if (!this.chipsData.length && this.options.placeholder) {\n this._input.placeholder = this.options.placeholder;\n } else if (this.chipsData.length && this.options.secondaryPlaceholder) {\n this._input.placeholder = this.options.secondaryPlaceholder;\n }\n }\n\n _isValidAndNotExist(chip: ChipData) {\n // A blank or whitespace-only label is no chip.\n const isValid = (!!chip.id || chip.id === 0) && String(chip.id).trim() !== '';\n const doesNotExist = !this.chipsData.some((item) => String(item.id) === String(chip.id));\n return isValid && doesNotExist;\n }\n\n /**\n * Add chip to input.\n * @param chip Chip data object\n */\n addChip(chip: ChipData) {\n if (!this._isValidAndNotExist(chip) || this.chipsData.length >= this.options.limit) return;\n const renderedChip = this._renderChip(chip);\n this._chips.push(renderedChip);\n this.chipsData.push(chip);\n if (this._end) this._end.before(renderedChip);\n else this.el.append(renderedChip);\n this._setPlaceholder();\n this._sync();\n this._notify('chip-add', this.options.onChipAdd, { args: [this.el, renderedChip], detail: { chip: renderedChip }, current: () => this._chips.includes(renderedChip) });\n }\n\n /**\n * Delete nth chip.\n * @param chipIndex Index of chip\n */\n deleteChip(chipIndex: number) {\n const root = this.el.getRootNode() as Document | ShadowRoot;\n this._deleteChip(chipIndex, this._chips[chipIndex]?.contains(root.activeElement) ? 'input' : null);\n }\n\n private _deleteChip(chipIndex: number, focus: 'input' | 'previous' | null) {\n const chip = this._chips[chipIndex];\n if (!chip) return;\n if (this._selectedChip === chip) this._setSelected(null);\n chip.remove();\n this._chips.splice(chipIndex, 1);\n this.chipsData.splice(chipIndex, 1);\n this._setPlaceholder();\n this._sync();\n const focusPath: { root: Document | ShadowRoot; element: Element | null }[] = [];\n let root = this.el.getRootNode() as Document | ShadowRoot;\n while (root) {\n focusPath.push({ root, element: root.activeElement });\n root = 'host' in root ? root.host.getRootNode() as Document | ShadowRoot : null;\n }\n this._notify('chip-delete', this.options.onChipDelete, { args: [this.el, chip], detail: { chip }, current: () => !this._chips.includes(chip) });\n if (!focus || focusPath.some(({ root, element }) => root.activeElement !== element) || Chips.getInstance(this.el) !== this) return;\n if (focus === 'previous' && this._chips.length) this.selectChip(Math.max(chipIndex - 1, 0));\n else {\n this._setSelected(null);\n this._input?.focus();\n }\n }\n\n /**\n * Select nth chip.\n * @param chipIndex Index of chip\n */\n selectChip(chipIndex: number) {\n const chip = this._chips[chipIndex];\n if (!chip) return;\n this._setSelected(chip);\n // The chip is not a control any more, so focus goes to the one thing in it\n // that is - the delete button.\n (chip.querySelector('.close') as HTMLElement | null)?.focus();\n this._notify('chip-select', this.options.onChipSelect, { args: [this.el, chip], detail: { chip }, current: () => this._selectedChip === chip });\n }\n\n static Init() {\n // Handle removal of static chips - markup written by hand, which no Chips\n // instance tracks even when one sits on the container (AutoInit gives every\n // .chips one, usually without allowUserInput and so without a click\n // handler). A chip the instance rendered belongs to _handleChipClick:\n // removing the node here as well left chipsData holding an entry whose\n // element was gone.\n Utils.onDocumentReady(() => {\n const chips = document.querySelectorAll('.chips');\n chips.forEach((el) => {\n el.addEventListener('click', (e) => {\n // closest: the close button wraps an icon span, so a click on the\n // glyph reports the span.\n if (!(<HTMLElement>e.target).closest('.close')) return;\n const chip = (<HTMLElement>e.target).closest<HTMLElement>('.chip');\n if (chip && !Chips.getInstance(el)?._chips.includes(chip)) chip.remove();\n });\n });\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["root"]
7
+ }