@ui5/webcomponents 1.11.0-rc.3 → 1.11.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 (802) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/Avatar.d.ts +0 -5
  3. package/dist/Avatar.js +8 -15
  4. package/dist/Avatar.js.map +1 -1
  5. package/dist/AvatarGroup.d.ts +2 -4
  6. package/dist/AvatarGroup.js +9 -15
  7. package/dist/AvatarGroup.js.map +1 -1
  8. package/dist/Badge.d.ts +0 -3
  9. package/dist/Badge.js +7 -12
  10. package/dist/Badge.js.map +1 -1
  11. package/dist/Breadcrumbs.d.ts +0 -10
  12. package/dist/Breadcrumbs.js +19 -30
  13. package/dist/Breadcrumbs.js.map +1 -1
  14. package/dist/BusyIndicator.d.ts +0 -5
  15. package/dist/BusyIndicator.js +8 -15
  16. package/dist/BusyIndicator.js.map +1 -1
  17. package/dist/Button.d.ts +1 -6
  18. package/dist/Button.js +8 -15
  19. package/dist/Button.js.map +1 -1
  20. package/dist/Calendar.d.ts +0 -7
  21. package/dist/Calendar.js +13 -18
  22. package/dist/Calendar.js.map +1 -1
  23. package/dist/CalendarHeader.d.ts +0 -5
  24. package/dist/CalendarHeader.js +9 -16
  25. package/dist/CalendarHeader.js.map +1 -1
  26. package/dist/Card.d.ts +0 -5
  27. package/dist/Card.js +8 -15
  28. package/dist/Card.js.map +1 -1
  29. package/dist/CardHeader.d.ts +0 -3
  30. package/dist/CardHeader.js +7 -12
  31. package/dist/CardHeader.js.map +1 -1
  32. package/dist/Carousel.d.ts +0 -6
  33. package/dist/Carousel.js +12 -20
  34. package/dist/Carousel.js.map +1 -1
  35. package/dist/CheckBox.d.ts +0 -6
  36. package/dist/CheckBox.js +21 -20
  37. package/dist/CheckBox.js.map +1 -1
  38. package/dist/ColorPalette.d.ts +0 -6
  39. package/dist/ColorPalette.js +12 -23
  40. package/dist/ColorPalette.js.map +1 -1
  41. package/dist/ColorPaletteItem.d.ts +0 -3
  42. package/dist/ColorPaletteItem.js +6 -10
  43. package/dist/ColorPaletteItem.js.map +1 -1
  44. package/dist/ColorPalettePopover.d.ts +1 -7
  45. package/dist/ColorPalettePopover.js +12 -18
  46. package/dist/ColorPalettePopover.js.map +1 -1
  47. package/dist/ColorPicker.d.ts +0 -7
  48. package/dist/ColorPicker.js +11 -17
  49. package/dist/ColorPicker.js.map +1 -1
  50. package/dist/ComboBox.d.ts +1 -14
  51. package/dist/ComboBox.js +27 -33
  52. package/dist/ComboBox.js.map +1 -1
  53. package/dist/ComboBoxGroupItem.d.ts +1 -1
  54. package/dist/CustomListItem.d.ts +1 -3
  55. package/dist/CustomListItem.js +5 -7
  56. package/dist/CustomListItem.js.map +1 -1
  57. package/dist/DateComponentBase.d.ts +0 -1
  58. package/dist/DateComponentBase.js +5 -5
  59. package/dist/DateComponentBase.js.map +1 -1
  60. package/dist/DatePicker.d.ts +0 -7
  61. package/dist/DatePicker.js +19 -23
  62. package/dist/DatePicker.js.map +1 -1
  63. package/dist/DateRangePicker.d.ts +0 -2
  64. package/dist/DateRangePicker.js +4 -4
  65. package/dist/DateRangePicker.js.map +1 -1
  66. package/dist/DateTimePicker.d.ts +0 -6
  67. package/dist/DateTimePicker.js +20 -20
  68. package/dist/DateTimePicker.js.map +1 -1
  69. package/dist/DayPicker.d.ts +0 -2
  70. package/dist/DayPicker.js +5 -7
  71. package/dist/DayPicker.js.map +1 -1
  72. package/dist/Dialog.d.ts +0 -4
  73. package/dist/Dialog.js +12 -12
  74. package/dist/Dialog.js.map +1 -1
  75. package/dist/FileUploader.d.ts +0 -7
  76. package/dist/FileUploader.js +14 -21
  77. package/dist/FileUploader.js.map +1 -1
  78. package/dist/GroupHeaderListItem.d.ts +0 -2
  79. package/dist/GroupHeaderListItem.js +6 -9
  80. package/dist/GroupHeaderListItem.js.map +1 -1
  81. package/dist/Icon.d.ts +0 -3
  82. package/dist/Icon.js +8 -14
  83. package/dist/Icon.js.map +1 -1
  84. package/dist/Input.d.ts +0 -6
  85. package/dist/Input.js +15 -24
  86. package/dist/Input.js.map +1 -1
  87. package/dist/Label.d.ts +0 -3
  88. package/dist/Label.js +6 -10
  89. package/dist/Label.js.map +1 -1
  90. package/dist/Link.d.ts +0 -3
  91. package/dist/Link.js +8 -13
  92. package/dist/Link.js.map +1 -1
  93. package/dist/List.d.ts +1 -6
  94. package/dist/List.js +8 -15
  95. package/dist/List.js.map +1 -1
  96. package/dist/ListItem.d.ts +1 -4
  97. package/dist/ListItem.js +12 -14
  98. package/dist/ListItem.js.map +1 -1
  99. package/dist/ListItemBase.d.ts +1 -3
  100. package/dist/ListItemBase.js +5 -6
  101. package/dist/ListItemBase.js.map +1 -1
  102. package/dist/Menu.d.ts +0 -8
  103. package/dist/Menu.js +13 -19
  104. package/dist/Menu.js.map +1 -1
  105. package/dist/MessageStrip.d.ts +0 -5
  106. package/dist/MessageStrip.js +8 -15
  107. package/dist/MessageStrip.js.map +1 -1
  108. package/dist/MonthPicker.d.ts +0 -2
  109. package/dist/MonthPicker.js +6 -8
  110. package/dist/MonthPicker.js.map +1 -1
  111. package/dist/MultiComboBox.d.ts +426 -0
  112. package/dist/MultiComboBox.js +1110 -1565
  113. package/dist/MultiComboBox.js.map +1 -0
  114. package/dist/MultiComboBoxGroupItem.d.ts +36 -0
  115. package/dist/MultiComboBoxGroupItem.js +30 -50
  116. package/dist/MultiComboBoxGroupItem.js.map +1 -0
  117. package/dist/MultiComboBoxItem.d.ts +27 -0
  118. package/dist/MultiComboBoxItem.js +20 -28
  119. package/dist/MultiComboBoxItem.js.map +1 -0
  120. package/dist/MultiInput.d.ts +113 -0
  121. package/dist/MultiInput.js +258 -360
  122. package/dist/MultiInput.js.map +1 -0
  123. package/dist/Option.d.ts +5 -5
  124. package/dist/Panel.d.ts +0 -6
  125. package/dist/Panel.js +9 -17
  126. package/dist/Panel.js.map +1 -1
  127. package/dist/Popover.d.ts +1 -4
  128. package/dist/Popover.js +12 -10
  129. package/dist/Popover.js.map +1 -1
  130. package/dist/Popup.d.ts +1 -13
  131. package/dist/Popup.js +18 -24
  132. package/dist/Popup.js.map +1 -1
  133. package/dist/ProgressIndicator.d.ts +0 -5
  134. package/dist/ProgressIndicator.js +7 -13
  135. package/dist/ProgressIndicator.js.map +1 -1
  136. package/dist/RadioButton.d.ts +0 -5
  137. package/dist/RadioButton.js +8 -15
  138. package/dist/RadioButton.js.map +1 -1
  139. package/dist/RangeSlider.d.ts +1 -5
  140. package/dist/RangeSlider.js +10 -12
  141. package/dist/RangeSlider.js.map +1 -1
  142. package/dist/RatingIndicator.d.ts +133 -0
  143. package/dist/RatingIndicator.js +165 -274
  144. package/dist/RatingIndicator.js.map +1 -0
  145. package/dist/ResponsivePopover.d.ts +1 -7
  146. package/dist/ResponsivePopover.js +19 -23
  147. package/dist/ResponsivePopover.js.map +1 -1
  148. package/dist/SegmentedButton.d.ts +1 -5
  149. package/dist/SegmentedButton.js +9 -16
  150. package/dist/SegmentedButton.js.map +1 -1
  151. package/dist/SegmentedButtonItem.d.ts +0 -3
  152. package/dist/SegmentedButtonItem.js +5 -7
  153. package/dist/SegmentedButtonItem.js.map +1 -1
  154. package/dist/Select.d.ts +7 -17
  155. package/dist/Select.js +24 -30
  156. package/dist/Select.js.map +1 -1
  157. package/dist/Slider.d.ts +0 -3
  158. package/dist/Slider.js +6 -9
  159. package/dist/Slider.js.map +1 -1
  160. package/dist/SliderBase.d.ts +1 -9
  161. package/dist/SliderBase.js +13 -13
  162. package/dist/SliderBase.js.map +1 -1
  163. package/dist/SplitButton.d.ts +0 -4
  164. package/dist/SplitButton.js +7 -13
  165. package/dist/SplitButton.js.map +1 -1
  166. package/dist/StandardListItem.d.ts +0 -4
  167. package/dist/StandardListItem.js +9 -11
  168. package/dist/StandardListItem.js.map +1 -1
  169. package/dist/StepInput.d.ts +0 -5
  170. package/dist/StepInput.js +10 -16
  171. package/dist/StepInput.js.map +1 -1
  172. package/dist/SuggestionGroupItem.d.ts +0 -2
  173. package/dist/SuggestionGroupItem.js +4 -6
  174. package/dist/SuggestionGroupItem.js.map +1 -1
  175. package/dist/SuggestionItem.d.ts +0 -2
  176. package/dist/SuggestionItem.js +4 -6
  177. package/dist/SuggestionItem.js.map +1 -1
  178. package/dist/SuggestionListItem.d.ts +0 -1
  179. package/dist/SuggestionListItem.js +4 -4
  180. package/dist/SuggestionListItem.js.map +1 -1
  181. package/dist/Switch.d.ts +0 -5
  182. package/dist/Switch.js +8 -15
  183. package/dist/Switch.js.map +1 -1
  184. package/dist/Tab.d.ts +3 -9
  185. package/dist/Tab.js +19 -25
  186. package/dist/Tab.js.map +1 -1
  187. package/dist/TabContainer.d.ts +1 -8
  188. package/dist/TabContainer.js +17 -28
  189. package/dist/TabContainer.js.map +1 -1
  190. package/dist/TabSeparator.d.ts +1 -1
  191. package/dist/TabSeparator.js +5 -4
  192. package/dist/TabSeparator.js.map +1 -1
  193. package/dist/Table.d.ts +0 -6
  194. package/dist/Table.js +9 -16
  195. package/dist/Table.js.map +1 -1
  196. package/dist/TableCell.d.ts +0 -11
  197. package/dist/TableCell.js +7 -19
  198. package/dist/TableCell.js.map +1 -1
  199. package/dist/TableColumn.d.ts +0 -11
  200. package/dist/TableColumn.js +7 -19
  201. package/dist/TableColumn.js.map +1 -1
  202. package/dist/TableGroupRow.d.ts +0 -5
  203. package/dist/TableGroupRow.js +10 -26
  204. package/dist/TableGroupRow.js.map +1 -1
  205. package/dist/TableRow.d.ts +0 -5
  206. package/dist/TableRow.js +8 -14
  207. package/dist/TableRow.js.map +1 -1
  208. package/dist/TextArea.d.ts +2 -9
  209. package/dist/TextArea.js +10 -21
  210. package/dist/TextArea.js.map +1 -1
  211. package/dist/TimePickerBase.d.ts +0 -9
  212. package/dist/TimePickerBase.js +18 -28
  213. package/dist/TimePickerBase.js.map +1 -1
  214. package/dist/TimeSelection.d.ts +0 -4
  215. package/dist/TimeSelection.js +8 -15
  216. package/dist/TimeSelection.js.map +1 -1
  217. package/dist/Title.d.ts +0 -3
  218. package/dist/Title.js +7 -11
  219. package/dist/Title.js.map +1 -1
  220. package/dist/Toast.d.ts +0 -3
  221. package/dist/Toast.js +6 -10
  222. package/dist/Toast.js.map +1 -1
  223. package/dist/ToggleButton.d.ts +0 -3
  224. package/dist/ToggleButton.js +5 -7
  225. package/dist/ToggleButton.js.map +1 -1
  226. package/dist/Token.d.ts +0 -5
  227. package/dist/Token.js +9 -16
  228. package/dist/Token.js.map +1 -1
  229. package/dist/Tokenizer.d.ts +10 -11
  230. package/dist/Tokenizer.js +40 -38
  231. package/dist/Tokenizer.js.map +1 -1
  232. package/dist/Tree.d.ts +1 -6
  233. package/dist/Tree.js +14 -17
  234. package/dist/Tree.js.map +1 -1
  235. package/dist/TreeItem.d.ts +0 -2
  236. package/dist/TreeItem.js +5 -7
  237. package/dist/TreeItem.js.map +1 -1
  238. package/dist/TreeItemBase.d.ts +3 -5
  239. package/dist/TreeItemBase.js +15 -14
  240. package/dist/TreeItemBase.js.map +1 -1
  241. package/dist/TreeItemCustom.d.ts +0 -2
  242. package/dist/TreeItemCustom.js +5 -7
  243. package/dist/TreeItemCustom.js.map +1 -1
  244. package/dist/TreeList.js +1 -1
  245. package/dist/TreeList.js.map +1 -1
  246. package/dist/WheelSlider.d.ts +0 -5
  247. package/dist/WheelSlider.js +11 -14
  248. package/dist/WheelSlider.js.map +1 -1
  249. package/dist/YearPicker.d.ts +0 -2
  250. package/dist/YearPicker.js +6 -8
  251. package/dist/YearPicker.js.map +1 -1
  252. package/dist/api.json +1 -1
  253. package/dist/assets/SAP-icons-business-suite.5e4d496e.js +1 -0
  254. package/dist/assets/SAP-icons-business-suite.7313c1b1.js +1 -0
  255. package/dist/assets/messagebundle_ar.74efb031.js +1 -0
  256. package/dist/assets/messagebundle_bg.369c6fc8.js +1 -0
  257. package/dist/assets/messagebundle_ca.a3cd4b52.js +1 -0
  258. package/dist/assets/messagebundle_cs.289421ac.js +1 -0
  259. package/dist/assets/messagebundle_cy.b1830522.js +1 -0
  260. package/dist/assets/messagebundle_da.c05fe259.js +1 -0
  261. package/dist/assets/messagebundle_de.8a4032cc.js +1 -0
  262. package/dist/assets/messagebundle_el.7c63c645.js +1 -0
  263. package/dist/assets/{messagebundle_en.d20271ec.js → messagebundle_en.6e890ca9.js} +1 -1
  264. package/dist/assets/{messagebundle_en_GB.ec8334b8.js → messagebundle_en_GB.6a665cc2.js} +1 -1
  265. package/dist/assets/messagebundle_es.0f0c4cdc.js +1 -0
  266. package/dist/assets/messagebundle_es_MX.f88d6e93.js +1 -0
  267. package/dist/assets/messagebundle_et.6e83e7fa.js +1 -0
  268. package/dist/assets/messagebundle_fi.ebcedd15.js +1 -0
  269. package/dist/assets/messagebundle_fr.f0c09c02.js +1 -0
  270. package/dist/assets/messagebundle_fr_CA.241e035f.js +1 -0
  271. package/dist/assets/messagebundle_hi.ea9222e3.js +1 -0
  272. package/dist/assets/messagebundle_hr.29b90b8a.js +1 -0
  273. package/dist/assets/messagebundle_hu.28f6367c.js +1 -0
  274. package/dist/assets/messagebundle_it.ef9f06fc.js +1 -0
  275. package/dist/assets/messagebundle_iw.52eeba6c.js +1 -0
  276. package/dist/assets/messagebundle_ja.54f39fb4.js +1 -0
  277. package/dist/assets/messagebundle_kk.4795b8bf.js +1 -0
  278. package/dist/assets/messagebundle_ko.298dee97.js +1 -0
  279. package/dist/assets/messagebundle_lt.50d45929.js +1 -0
  280. package/dist/assets/messagebundle_lv.6deb88b8.js +1 -0
  281. package/dist/assets/messagebundle_ms.0eb3e9fb.js +1 -0
  282. package/dist/assets/messagebundle_nl.d86b913f.js +1 -0
  283. package/dist/assets/messagebundle_no.4b4b68f9.js +1 -0
  284. package/dist/assets/messagebundle_pl.90d2d216.js +1 -0
  285. package/dist/assets/messagebundle_pt.682bdce3.js +1 -0
  286. package/dist/assets/messagebundle_pt_PT.5931734e.js +1 -0
  287. package/dist/assets/messagebundle_ro.c8b49647.js +1 -0
  288. package/dist/assets/messagebundle_ru.03b05c74.js +1 -0
  289. package/dist/assets/messagebundle_sh.d85d5fca.js +1 -0
  290. package/dist/assets/messagebundle_sk.0c356651.js +1 -0
  291. package/dist/assets/messagebundle_sl.6fbd00d2.js +1 -0
  292. package/dist/assets/messagebundle_sv.fd3992b5.js +1 -0
  293. package/dist/assets/messagebundle_th.69c4b78b.js +1 -0
  294. package/dist/assets/messagebundle_tr.f5e05dea.js +1 -0
  295. package/dist/assets/messagebundle_uk.8fe7f052.js +1 -0
  296. package/dist/assets/messagebundle_vi.dfccc988.js +1 -0
  297. package/dist/assets/messagebundle_zh_CN.0bec6825.js +1 -0
  298. package/dist/assets/messagebundle_zh_TW.be5ac4ff.js +1 -0
  299. package/dist/assets/parameters-bundle.css.09a8d17f.js +1 -0
  300. package/dist/assets/parameters-bundle.css.22c70329.js +1 -0
  301. package/dist/assets/parameters-bundle.css.3e7ea7bd.js +1 -0
  302. package/dist/assets/parameters-bundle.css.568a0fcb.js +1 -0
  303. package/dist/assets/parameters-bundle.css.6baa4ec8.js +1 -0
  304. package/dist/assets/parameters-bundle.css.6e0935a3.js +1 -0
  305. package/dist/assets/parameters-bundle.css.832a51a3.js +1 -0
  306. package/dist/assets/parameters-bundle.css.8425804e.js +1 -0
  307. package/dist/assets/parameters-bundle.css.aa4080ac.js +1 -0
  308. package/dist/assets/parameters-bundle.css.b12ea801.js +1 -0
  309. package/dist/assets/parameters-bundle.css.b429cbbc.js +1 -0
  310. package/dist/assets/parameters-bundle.css.d211215e.js +1 -0
  311. package/dist/assets/test/pages/ComboBox.html.6ad00df2.js +1 -0
  312. package/dist/assets/test/pages/{Icon.html.0938cf9b.js → Icon.html.97607346.js} +1 -1
  313. package/dist/assets/test/pages/{Label.html.5556ce5f.js → Label.html.850402e1.js} +1 -1
  314. package/dist/assets/test/pages/{Popups.html.2f66d88c.js → Popups.html.de40ab2a.js} +1 -1
  315. package/dist/css/themes/Icon.css +1 -1
  316. package/dist/css/themes/MultiComboBox.css +1 -1
  317. package/dist/css/themes/MultiInput.css +1 -1
  318. package/dist/css/themes/ToggleButton.css +1 -1
  319. package/dist/css/themes/sap_belize/parameters-bundle.css +1 -1
  320. package/dist/css/themes/sap_belize_hcb/parameters-bundle.css +1 -1
  321. package/dist/css/themes/sap_belize_hcw/parameters-bundle.css +1 -1
  322. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  323. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  324. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  325. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  326. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  327. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  328. package/dist/css/themes/sap_horizon_exp/parameters-bundle.css +1 -1
  329. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  330. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  331. package/dist/custom-elements.json +1 -1
  332. package/dist/features/InputSuggestions.d.ts +1 -1
  333. package/dist/features/InputSuggestions.js.map +1 -1
  334. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  335. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  336. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  337. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  338. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  339. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  340. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  341. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  342. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  343. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  344. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  345. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  346. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  347. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  348. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  349. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  350. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  351. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  352. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  353. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  354. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  355. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  356. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  357. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  358. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  359. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  360. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  361. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  362. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  363. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  364. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  365. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  366. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  367. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  368. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  369. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  370. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  371. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  372. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  373. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  374. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  375. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  376. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  377. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  378. package/dist/generated/assets/themes/sap_belize/parameters-bundle.css.json +1 -1
  379. package/dist/generated/assets/themes/sap_belize_hcb/parameters-bundle.css.json +1 -1
  380. package/dist/generated/assets/themes/sap_belize_hcw/parameters-bundle.css.json +1 -1
  381. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  382. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  383. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  384. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  385. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  386. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  387. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -1
  388. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  389. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  390. package/dist/generated/templates/ComboBoxTemplate.lit.js +1 -1
  391. package/dist/generated/templates/DatePickerTemplate.lit.js +1 -1
  392. package/dist/generated/templates/MultiComboBoxPopoverTemplate.lit.js +1 -1
  393. package/dist/generated/templates/MultiComboBoxTemplate.lit.js +3 -3
  394. package/dist/generated/templates/MultiInputTemplate.lit.js +1 -1
  395. package/dist/generated/templates/RangeSliderTemplate.lit.js +1 -1
  396. package/dist/generated/templates/RatingIndicatorTemplate.lit.js +1 -1
  397. package/dist/generated/templates/SelectPopoverTemplate.lit.js +3 -3
  398. package/dist/generated/templates/StepInputTemplate.lit.js +2 -2
  399. package/dist/generated/templates/TimePickerTemplate.lit.js +1 -1
  400. package/dist/generated/templates/TreeItemBaseTemplate.lit.js +3 -3
  401. package/dist/generated/templates/TreeItemCustomTemplate.lit.js +3 -3
  402. package/dist/generated/templates/TreeItemTemplate.lit.js +3 -3
  403. package/dist/generated/templates/TreeTemplate.lit.js +2 -1
  404. package/dist/generated/themes/Icon.css.js +1 -1
  405. package/dist/generated/themes/Icon.css.js.map +1 -1
  406. package/dist/generated/themes/MultiComboBox.css.js +1 -1
  407. package/dist/generated/themes/MultiComboBox.css.js.map +1 -1
  408. package/dist/generated/themes/MultiInput.css.js +1 -1
  409. package/dist/generated/themes/MultiInput.css.js.map +1 -1
  410. package/dist/generated/themes/ToggleButton.css.js +1 -1
  411. package/dist/generated/themes/ToggleButton.css.js.map +1 -1
  412. package/dist/generated/themes/sap_belize/parameters-bundle.css.js +1 -1
  413. package/dist/generated/themes/sap_belize/parameters-bundle.css.js.map +1 -1
  414. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js +1 -1
  415. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js.map +1 -1
  416. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js +1 -1
  417. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js.map +1 -1
  418. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  419. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
  420. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  421. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js.map +1 -1
  422. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  423. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js.map +1 -1
  424. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  425. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js.map +1 -1
  426. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  427. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  428. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  429. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  430. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -1
  431. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js.map +1 -1
  432. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  433. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  434. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  435. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  436. package/dist/i18n/messagebundle_ar.properties +2 -2
  437. package/dist/i18n/messagebundle_bg.properties +2 -2
  438. package/dist/i18n/messagebundle_ca.properties +2 -2
  439. package/dist/i18n/messagebundle_cs.properties +2 -2
  440. package/dist/i18n/messagebundle_cy.properties +2 -2
  441. package/dist/i18n/messagebundle_da.properties +2 -2
  442. package/dist/i18n/messagebundle_de.properties +2 -2
  443. package/dist/i18n/messagebundle_el.properties +2 -2
  444. package/dist/i18n/messagebundle_en.properties +1 -1
  445. package/dist/i18n/messagebundle_en_GB.properties +1 -1
  446. package/dist/i18n/messagebundle_es.properties +2 -2
  447. package/dist/i18n/messagebundle_es_MX.properties +2 -2
  448. package/dist/i18n/messagebundle_et.properties +2 -2
  449. package/dist/i18n/messagebundle_fi.properties +2 -2
  450. package/dist/i18n/messagebundle_fr.properties +2 -2
  451. package/dist/i18n/messagebundle_fr_CA.properties +2 -2
  452. package/dist/i18n/messagebundle_hi.properties +2 -2
  453. package/dist/i18n/messagebundle_hr.properties +2 -2
  454. package/dist/i18n/messagebundle_hu.properties +2 -2
  455. package/dist/i18n/messagebundle_id.properties +2 -2
  456. package/dist/i18n/messagebundle_it.properties +2 -2
  457. package/dist/i18n/messagebundle_iw.properties +2 -2
  458. package/dist/i18n/messagebundle_ja.properties +2 -2
  459. package/dist/i18n/messagebundle_kk.properties +2 -2
  460. package/dist/i18n/messagebundle_ko.properties +2 -2
  461. package/dist/i18n/messagebundle_lt.properties +2 -2
  462. package/dist/i18n/messagebundle_lv.properties +2 -2
  463. package/dist/i18n/messagebundle_ms.properties +2 -2
  464. package/dist/i18n/messagebundle_nl.properties +2 -2
  465. package/dist/i18n/messagebundle_no.properties +2 -2
  466. package/dist/i18n/messagebundle_pl.properties +2 -2
  467. package/dist/i18n/messagebundle_pt.properties +2 -2
  468. package/dist/i18n/messagebundle_pt_PT.properties +2 -2
  469. package/dist/i18n/messagebundle_ro.properties +2 -2
  470. package/dist/i18n/messagebundle_ru.properties +2 -2
  471. package/dist/i18n/messagebundle_sh.properties +2 -2
  472. package/dist/i18n/messagebundle_sk.properties +2 -2
  473. package/dist/i18n/messagebundle_sl.properties +2 -2
  474. package/dist/i18n/messagebundle_sv.properties +2 -2
  475. package/dist/i18n/messagebundle_th.properties +2 -2
  476. package/dist/i18n/messagebundle_tr.properties +3 -3
  477. package/dist/i18n/messagebundle_uk.properties +2 -2
  478. package/dist/i18n/messagebundle_vi.properties +2 -2
  479. package/dist/i18n/messagebundle_zh_CN.properties +2 -2
  480. package/dist/i18n/messagebundle_zh_TW.properties +2 -2
  481. package/dist/test/pages/72override.html +1 -1
  482. package/dist/test/pages/AnimanitionOff.html +1 -1
  483. package/dist/test/pages/Avatar.html +1 -1
  484. package/dist/test/pages/AvatarGroup.html +1 -1
  485. package/dist/test/pages/Badge.html +1 -1
  486. package/dist/test/pages/Breadcrumbs.html +1 -1
  487. package/dist/test/pages/BusyIndicator.html +1 -1
  488. package/dist/test/pages/Button.html +1 -1
  489. package/dist/test/pages/Calendar.html +1 -1
  490. package/dist/test/pages/Card.html +1 -1
  491. package/dist/test/pages/Carousel.html +1 -1
  492. package/dist/test/pages/CheckBox.html +15 -1
  493. package/dist/test/pages/ColorPalette.html +1 -1
  494. package/dist/test/pages/ColorPalettePopover.html +1 -1
  495. package/dist/test/pages/ColorPicker.html +1 -1
  496. package/dist/test/pages/ComboBox.html +31 -18
  497. package/dist/test/pages/Components.html +1 -1
  498. package/dist/test/pages/CoreControls.html +1 -1
  499. package/dist/test/pages/CoreControls_exp.html +1 -1
  500. package/dist/test/pages/CustomCSS.html +1 -1
  501. package/dist/test/pages/DatePicker.html +1 -1
  502. package/dist/test/pages/DatePicker_test_page.html +1 -1
  503. package/dist/test/pages/DateRangePicker.html +1 -1
  504. package/dist/test/pages/DateTimePicker.html +1 -1
  505. package/dist/test/pages/DayPicker.html +1 -1
  506. package/dist/test/pages/Dialog.html +1 -1
  507. package/dist/test/pages/DialogLifecycle.html +1 -1
  508. package/dist/test/pages/DialogSemantic.html +1 -1
  509. package/dist/test/pages/DurationPicker.html +1 -1
  510. package/dist/test/pages/Eventing.html +1 -1
  511. package/dist/test/pages/F6Test1.html +1 -1
  512. package/dist/test/pages/F6Test2.html +1 -1
  513. package/dist/test/pages/F6Test3.html +1 -1
  514. package/dist/test/pages/F6Test4.html +1 -1
  515. package/dist/test/pages/F6Test5.html +1 -1
  516. package/dist/test/pages/F6Test6.html +1 -1
  517. package/dist/test/pages/F6Test7.html +1 -1
  518. package/dist/test/pages/FileUploader.html +1 -1
  519. package/dist/test/pages/FormSupport.html +1 -1
  520. package/dist/test/pages/HCB.html +1 -1
  521. package/dist/test/pages/Icon.html +3 -3
  522. package/dist/test/pages/Icon_and_theming.html +7 -7
  523. package/dist/test/pages/Icon_custom.html +1 -1
  524. package/dist/test/pages/Input.html +1 -1
  525. package/dist/test/pages/InputFieldLabels.html +1 -1
  526. package/dist/test/pages/InputFieldMinWidth.html +1 -1
  527. package/dist/test/pages/InputIcons.html +1 -1
  528. package/dist/test/pages/Input_quickview.html +1 -1
  529. package/dist/test/pages/InputsAlignment.html +1 -1
  530. package/dist/test/pages/InputsLazyLoading.html +1 -1
  531. package/dist/test/pages/ItemNavigation.html +1 -1
  532. package/dist/test/pages/Kitchen.html +1 -1
  533. package/dist/test/pages/Kitchen.openui5.html +1 -1
  534. package/dist/test/pages/Label.html +2 -2
  535. package/dist/test/pages/Link.html +1 -1
  536. package/dist/test/pages/List.html +1 -1
  537. package/dist/test/pages/ListGrowing_Button.html +1 -1
  538. package/dist/test/pages/ListGrowing_Scroll.html +1 -1
  539. package/dist/test/pages/List_keyboard_support.html +1 -1
  540. package/dist/test/pages/List_test_page.html +3 -1
  541. package/dist/test/pages/LitKeyFunction.html +1 -1
  542. package/dist/test/pages/MemoryLeak.html +1 -1
  543. package/dist/test/pages/Menu.html +1 -1
  544. package/dist/test/pages/MessagePage.html +1 -1
  545. package/dist/test/pages/MessageStrip.html +1 -1
  546. package/dist/test/pages/MultiComboBox.html +1 -1
  547. package/dist/test/pages/MultiInput.html +1 -1
  548. package/dist/test/pages/MultiInput_Suggestions.html +1 -1
  549. package/dist/test/pages/OpenUI5.html +1 -1
  550. package/dist/test/pages/Panel.html +1 -1
  551. package/dist/test/pages/Popover.html +1 -1
  552. package/dist/test/pages/PopoverArrowBounds.html +1 -1
  553. package/dist/test/pages/Popups.html +2 -2
  554. package/dist/test/pages/ProgressIndicator.html +1 -1
  555. package/dist/test/pages/RTL.html +1 -1
  556. package/dist/test/pages/RadioButton.html +1 -1
  557. package/dist/test/pages/RangeSlider.html +1 -1
  558. package/dist/test/pages/RatingIndicator.html +1 -1
  559. package/dist/test/pages/ResizeHandler.html +1 -1
  560. package/dist/test/pages/ResponsivePopover.html +1 -1
  561. package/dist/test/pages/SegmentedButton.html +1 -1
  562. package/dist/test/pages/Select.html +1 -1
  563. package/dist/test/pages/Simple.html +1 -1
  564. package/dist/test/pages/Slider.html +1 -1
  565. package/dist/test/pages/SplitButton.html +1 -1
  566. package/dist/test/pages/StepInput.html +1 -1
  567. package/dist/test/pages/Switch.html +1 -1
  568. package/dist/test/pages/TabContainer.html +1 -1
  569. package/dist/test/pages/Table-perf-pure.html +1 -1
  570. package/dist/test/pages/Table-perf.html +1 -1
  571. package/dist/test/pages/Table.html +1 -1
  572. package/dist/test/pages/Table2.html +1 -1
  573. package/dist/test/pages/TableAllPopin.html +1 -1
  574. package/dist/test/pages/TableCustomStyling.html +1 -1
  575. package/dist/test/pages/TableGrouping.html +1 -1
  576. package/dist/test/pages/TableGrowingWithButton.html +1 -1
  577. package/dist/test/pages/TableGrowingWithScroll.html +1 -1
  578. package/dist/test/pages/TableSelection.html +1 -1
  579. package/dist/test/pages/TextArea.html +1 -1
  580. package/dist/test/pages/TimePicker.html +1 -1
  581. package/dist/test/pages/TimeSelection.html +1 -1
  582. package/dist/test/pages/Title.html +1 -1
  583. package/dist/test/pages/Toast.html +1 -1
  584. package/dist/test/pages/ToggleButton.html +3 -1
  585. package/dist/test/pages/Tree.html +14 -1
  586. package/dist/test/pages/WheelSlider_Test_Page.html +1 -1
  587. package/dist/test/pages/base/AriaLabelHelper.html +1 -1
  588. package/dist/test/pages/base/DOMObserver.html +1 -1
  589. package/dist/test/pages/base/InvisibleMessage.html +1 -1
  590. package/dist/test/pages/form.html +1 -1
  591. package/dist/test/pages/i18n-defaultLang.html +1 -1
  592. package/dist/test/pages/i18n-demo.html +1 -1
  593. package/package.json +7 -7
  594. package/src/Avatar.ts +8 -20
  595. package/src/AvatarGroup.ts +9 -20
  596. package/src/Badge.ts +7 -15
  597. package/src/Breadcrumbs.ts +20 -38
  598. package/src/BusyIndicator.ts +8 -19
  599. package/src/Button.ts +9 -20
  600. package/src/Calendar.ts +13 -21
  601. package/src/CalendarHeader.ts +9 -20
  602. package/src/Card.ts +8 -19
  603. package/src/CardHeader.ts +7 -15
  604. package/src/Carousel.ts +12 -25
  605. package/src/CheckBox.ts +22 -24
  606. package/src/ColorPalette.ts +13 -32
  607. package/src/ColorPaletteItem.ts +6 -13
  608. package/src/ColorPalettePopover.ts +13 -23
  609. package/src/ColorPicker.ts +11 -21
  610. package/src/ComboBox.hbs +10 -9
  611. package/src/ComboBox.ts +34 -48
  612. package/src/ComboBoxGroupItem.ts +1 -1
  613. package/src/CustomListItem.ts +6 -10
  614. package/src/DateComponentBase.ts +5 -6
  615. package/src/DatePicker.hbs +12 -12
  616. package/src/DatePicker.ts +20 -30
  617. package/src/DateRangePicker.ts +4 -6
  618. package/src/DateTimePicker.ts +20 -26
  619. package/src/DayPicker.ts +5 -9
  620. package/src/Dialog.ts +12 -15
  621. package/src/FileUploader.ts +14 -27
  622. package/src/GroupHeaderListItem.ts +6 -11
  623. package/src/Icon.ts +8 -17
  624. package/src/Input.ts +15 -32
  625. package/src/Label.ts +6 -13
  626. package/src/Link.ts +8 -16
  627. package/src/List.ts +10 -22
  628. package/src/ListItem.ts +13 -18
  629. package/src/ListItemBase.ts +6 -9
  630. package/src/Menu.ts +13 -23
  631. package/src/MessageStrip.ts +8 -20
  632. package/src/MonthPicker.ts +6 -10
  633. package/src/MultiComboBox.hbs +13 -12
  634. package/src/{MultiComboBox.js → MultiComboBox.ts} +591 -554
  635. package/src/{MultiComboBoxGroupItem.js → MultiComboBoxGroupItem.ts} +19 -34
  636. package/src/MultiComboBoxItem.ts +38 -0
  637. package/src/MultiComboBoxPopover.hbs +0 -2
  638. package/src/MultiInput.hbs +8 -7
  639. package/src/{MultiInput.js → MultiInput.ts} +133 -149
  640. package/src/Option.ts +5 -5
  641. package/src/Panel.ts +9 -21
  642. package/src/Popover.ts +13 -14
  643. package/src/Popup.ts +11 -24
  644. package/src/ProgressIndicator.ts +7 -17
  645. package/src/RadioButton.ts +8 -20
  646. package/src/RangeSlider.hbs +1 -0
  647. package/src/RangeSlider.ts +11 -16
  648. package/src/RatingIndicator.hbs +1 -1
  649. package/src/{RatingIndicator.js → RatingIndicator.ts} +134 -147
  650. package/src/ResponsivePopover.ts +22 -30
  651. package/src/SegmentedButton.ts +11 -23
  652. package/src/SegmentedButtonItem.ts +5 -9
  653. package/src/Select.ts +30 -42
  654. package/src/SelectPopover.hbs +3 -3
  655. package/src/Slider.ts +6 -11
  656. package/src/SliderBase.ts +7 -11
  657. package/src/SplitButton.ts +7 -17
  658. package/src/StandardListItem.ts +9 -13
  659. package/src/StepInput.hbs +2 -2
  660. package/src/StepInput.ts +10 -20
  661. package/src/SuggestionGroupItem.ts +4 -7
  662. package/src/SuggestionItem.ts +4 -7
  663. package/src/SuggestionListItem.ts +5 -6
  664. package/src/Switch.ts +8 -20
  665. package/src/Tab.ts +21 -31
  666. package/src/TabContainer.ts +17 -34
  667. package/src/TabSeparator.ts +5 -5
  668. package/src/Table.ts +9 -20
  669. package/src/TableCell.ts +7 -14
  670. package/src/TableColumn.ts +7 -14
  671. package/src/TableGroupRow.ts +10 -20
  672. package/src/TableRow.ts +8 -18
  673. package/src/TextArea.ts +13 -31
  674. package/src/TimePicker.hbs +10 -10
  675. package/src/TimePickerBase.ts +18 -35
  676. package/src/TimeSelection.ts +8 -19
  677. package/src/Title.ts +7 -14
  678. package/src/Toast.ts +6 -14
  679. package/src/ToggleButton.ts +5 -10
  680. package/src/Token.ts +9 -21
  681. package/src/Tokenizer.ts +43 -48
  682. package/src/Tree.hbs +3 -1
  683. package/src/Tree.ts +15 -22
  684. package/src/TreeItem.ts +5 -9
  685. package/src/TreeItemBase.hbs +3 -2
  686. package/src/TreeItemBase.ts +16 -19
  687. package/src/TreeItemCustom.ts +6 -10
  688. package/src/TreeList.ts +2 -2
  689. package/src/WheelSlider.ts +14 -22
  690. package/src/YearPicker.ts +6 -10
  691. package/src/features/InputSuggestions.ts +1 -1
  692. package/src/i18n/messagebundle_ar.properties +2 -2
  693. package/src/i18n/messagebundle_bg.properties +2 -2
  694. package/src/i18n/messagebundle_ca.properties +2 -2
  695. package/src/i18n/messagebundle_cs.properties +2 -2
  696. package/src/i18n/messagebundle_cy.properties +2 -2
  697. package/src/i18n/messagebundle_da.properties +2 -2
  698. package/src/i18n/messagebundle_de.properties +2 -2
  699. package/src/i18n/messagebundle_el.properties +2 -2
  700. package/src/i18n/messagebundle_en.properties +1 -1
  701. package/src/i18n/messagebundle_en_GB.properties +1 -1
  702. package/src/i18n/messagebundle_es.properties +2 -2
  703. package/src/i18n/messagebundle_es_MX.properties +2 -2
  704. package/src/i18n/messagebundle_et.properties +2 -2
  705. package/src/i18n/messagebundle_fi.properties +2 -2
  706. package/src/i18n/messagebundle_fr.properties +2 -2
  707. package/src/i18n/messagebundle_fr_CA.properties +2 -2
  708. package/src/i18n/messagebundle_hi.properties +2 -2
  709. package/src/i18n/messagebundle_hr.properties +2 -2
  710. package/src/i18n/messagebundle_hu.properties +2 -2
  711. package/src/i18n/messagebundle_id.properties +2 -2
  712. package/src/i18n/messagebundle_it.properties +2 -2
  713. package/src/i18n/messagebundle_iw.properties +2 -2
  714. package/src/i18n/messagebundle_ja.properties +2 -2
  715. package/src/i18n/messagebundle_kk.properties +2 -2
  716. package/src/i18n/messagebundle_ko.properties +2 -2
  717. package/src/i18n/messagebundle_lt.properties +2 -2
  718. package/src/i18n/messagebundle_lv.properties +2 -2
  719. package/src/i18n/messagebundle_ms.properties +2 -2
  720. package/src/i18n/messagebundle_nl.properties +2 -2
  721. package/src/i18n/messagebundle_no.properties +2 -2
  722. package/src/i18n/messagebundle_pl.properties +2 -2
  723. package/src/i18n/messagebundle_pt.properties +2 -2
  724. package/src/i18n/messagebundle_pt_PT.properties +2 -2
  725. package/src/i18n/messagebundle_ro.properties +2 -2
  726. package/src/i18n/messagebundle_ru.properties +2 -2
  727. package/src/i18n/messagebundle_sh.properties +2 -2
  728. package/src/i18n/messagebundle_sk.properties +2 -2
  729. package/src/i18n/messagebundle_sl.properties +2 -2
  730. package/src/i18n/messagebundle_sv.properties +2 -2
  731. package/src/i18n/messagebundle_th.properties +2 -2
  732. package/src/i18n/messagebundle_tr.properties +3 -3
  733. package/src/i18n/messagebundle_uk.properties +2 -2
  734. package/src/i18n/messagebundle_vi.properties +2 -2
  735. package/src/i18n/messagebundle_zh_CN.properties +2 -2
  736. package/src/i18n/messagebundle_zh_TW.properties +2 -2
  737. package/src/themes/Icon.css +4 -0
  738. package/src/themes/MultiComboBox.css +6 -1
  739. package/src/themes/MultiInput.css +3 -2
  740. package/src/themes/ToggleButton.css +5 -0
  741. package/src/themes/base/ToggleButton-parameters.css +1 -0
  742. package/src/themes/base/sizes-parameters.css +2 -0
  743. package/src/themes/sap_belize/ToggleButton-parameters.css +5 -0
  744. package/src/themes/sap_belize/parameters-bundle.css +1 -0
  745. package/dist/assets/SAP-icons-business-suite.2f68bcd1.js +0 -1
  746. package/dist/assets/SAP-icons-business-suite.4ab90b1f.js +0 -1
  747. package/dist/assets/messagebundle_ar.e3544a09.js +0 -1
  748. package/dist/assets/messagebundle_bg.ee6b6771.js +0 -1
  749. package/dist/assets/messagebundle_ca.99eca69b.js +0 -1
  750. package/dist/assets/messagebundle_cs.e670f1f8.js +0 -1
  751. package/dist/assets/messagebundle_cy.39115ed1.js +0 -1
  752. package/dist/assets/messagebundle_da.95305936.js +0 -1
  753. package/dist/assets/messagebundle_de.58869681.js +0 -1
  754. package/dist/assets/messagebundle_el.e471f4c3.js +0 -1
  755. package/dist/assets/messagebundle_es.259f7ab8.js +0 -1
  756. package/dist/assets/messagebundle_es_MX.7607283e.js +0 -1
  757. package/dist/assets/messagebundle_et.51409b09.js +0 -1
  758. package/dist/assets/messagebundle_fi.2c90e808.js +0 -1
  759. package/dist/assets/messagebundle_fr.cd7d6b7f.js +0 -1
  760. package/dist/assets/messagebundle_fr_CA.fdf43c6c.js +0 -1
  761. package/dist/assets/messagebundle_hi.ca658292.js +0 -1
  762. package/dist/assets/messagebundle_hr.5edbff43.js +0 -1
  763. package/dist/assets/messagebundle_hu.681d5c09.js +0 -1
  764. package/dist/assets/messagebundle_it.1f8ed3bf.js +0 -1
  765. package/dist/assets/messagebundle_iw.87620c3d.js +0 -1
  766. package/dist/assets/messagebundle_ja.2e52dfca.js +0 -1
  767. package/dist/assets/messagebundle_kk.8f48fb6c.js +0 -1
  768. package/dist/assets/messagebundle_ko.98c05546.js +0 -1
  769. package/dist/assets/messagebundle_lt.b08e4a4f.js +0 -1
  770. package/dist/assets/messagebundle_lv.37afce84.js +0 -1
  771. package/dist/assets/messagebundle_ms.ebc7401f.js +0 -1
  772. package/dist/assets/messagebundle_nl.9e163987.js +0 -1
  773. package/dist/assets/messagebundle_no.ddf35aef.js +0 -1
  774. package/dist/assets/messagebundle_pl.5fc87ae1.js +0 -1
  775. package/dist/assets/messagebundle_pt.30219ffe.js +0 -1
  776. package/dist/assets/messagebundle_pt_PT.4c1e9d80.js +0 -1
  777. package/dist/assets/messagebundle_ro.5148dac8.js +0 -1
  778. package/dist/assets/messagebundle_ru.d7074ec3.js +0 -1
  779. package/dist/assets/messagebundle_sh.db5a9ad4.js +0 -1
  780. package/dist/assets/messagebundle_sk.c3812e12.js +0 -1
  781. package/dist/assets/messagebundle_sl.26fceb50.js +0 -1
  782. package/dist/assets/messagebundle_sv.b755fe40.js +0 -1
  783. package/dist/assets/messagebundle_th.7babcfb2.js +0 -1
  784. package/dist/assets/messagebundle_tr.677aef37.js +0 -1
  785. package/dist/assets/messagebundle_uk.20fa19ec.js +0 -1
  786. package/dist/assets/messagebundle_vi.f964192e.js +0 -1
  787. package/dist/assets/messagebundle_zh_CN.9113f380.js +0 -1
  788. package/dist/assets/messagebundle_zh_TW.eb07bfcb.js +0 -1
  789. package/dist/assets/parameters-bundle.css.15d6a649.js +0 -1
  790. package/dist/assets/parameters-bundle.css.403dcfda.js +0 -1
  791. package/dist/assets/parameters-bundle.css.40f479ef.js +0 -1
  792. package/dist/assets/parameters-bundle.css.46691ebb.js +0 -1
  793. package/dist/assets/parameters-bundle.css.50b92a3f.js +0 -1
  794. package/dist/assets/parameters-bundle.css.6134bfac.js +0 -1
  795. package/dist/assets/parameters-bundle.css.64a71ab2.js +0 -1
  796. package/dist/assets/parameters-bundle.css.71af3bfd.js +0 -1
  797. package/dist/assets/parameters-bundle.css.78b9e86c.js +0 -1
  798. package/dist/assets/parameters-bundle.css.aed0c807.js +0 -1
  799. package/dist/assets/parameters-bundle.css.e2f45e50.js +0 -1
  800. package/dist/assets/parameters-bundle.css.fbc5cb77.js +0 -1
  801. package/dist/assets/test/pages/ComboBox.html.0e2117f1.js +0 -1
  802. package/src/MultiComboBoxItem.js +0 -44
@@ -1,43 +1,22 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var MultiComboBox_1;
1
8
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
9
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
10
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
11
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
12
+ import event from "@ui5/webcomponents-base/dist/decorators/event.js";
2
13
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
14
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
4
15
  import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
5
- import {
6
- isShow,
7
- isDown,
8
- isUp,
9
- isSpace,
10
- isSpaceCtrl,
11
- isSpaceShift,
12
- isRight,
13
- isHome,
14
- isEnd,
15
- isTabNext,
16
- isTabPrevious,
17
- isUpShift,
18
- isDownShift,
19
- isLeftCtrl,
20
- isRightCtrl,
21
- isUpCtrl,
22
- isDownCtrl,
23
- isHomeCtrl,
24
- isEndCtrl,
25
- isCtrlA,
26
- isCtrlV,
27
- isDeleteShift,
28
- isInsertShift,
29
- isInsertCtrl,
30
- isBackSpace,
31
- isDelete,
32
- isEscape,
33
- isEnter,
34
- } from "@ui5/webcomponents-base/dist/Keys.js";
16
+ import { isShow, isDown, isUp, isSpace, isSpaceCtrl, isSpaceShift, isRight, isHome, isEnd, isTabNext, isTabPrevious, isUpShift, isDownShift, isLeftCtrl, isRightCtrl, isUpCtrl, isDownCtrl, isHomeCtrl, isEndCtrl, isCtrlA, isCtrlV, isDeleteShift, isInsertShift, isInsertCtrl, isBackSpace, isDelete, isEscape, isEnter, } from "@ui5/webcomponents-base/dist/Keys.js";
35
17
  import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
36
18
  import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
37
- import {
38
- isPhone,
39
- isAndroid,
40
- } from "@ui5/webcomponents-base/dist/Device.js";
19
+ import { isPhone, isAndroid, } from "@ui5/webcomponents-base/dist/Device.js";
41
20
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
42
21
  import "@ui5/webcomponents-icons/dist/decline.js";
43
22
  import "@ui5/webcomponents-icons/dist/multiselect-all.js";
@@ -51,7 +30,7 @@ import { getEffectiveAriaLabelText } from "@ui5/webcomponents-base/dist/util/Ari
51
30
  import MultiComboBoxItem from "./MultiComboBoxItem.js";
52
31
  import MultiComboBoxGroupItem from "./MultiComboBoxGroupItem.js";
53
32
  import GroupHeaderListItem from "./GroupHeaderListItem.js";
54
- import Tokenizer from "./Tokenizer.js";
33
+ import Tokenizer, { ClipboardDataOperation } from "./Tokenizer.js";
55
34
  import Token from "./Token.js";
56
35
  import Icon from "./Icon.js";
57
36
  import Popover from "./Popover.js";
@@ -61,332 +40,17 @@ import StandardListItem from "./StandardListItem.js";
61
40
  import ToggleButton from "./ToggleButton.js";
62
41
  import * as Filters from "./Filters.js";
63
42
  import Button from "./Button.js";
64
- import {
65
- VALUE_STATE_SUCCESS,
66
- VALUE_STATE_ERROR,
67
- VALUE_STATE_WARNING,
68
- VALUE_STATE_INFORMATION,
69
- VALUE_STATE_TYPE_SUCCESS,
70
- VALUE_STATE_TYPE_INFORMATION,
71
- VALUE_STATE_TYPE_ERROR,
72
- VALUE_STATE_TYPE_WARNING,
73
- INPUT_SUGGESTIONS_TITLE,
74
- SELECT_OPTIONS,
75
- MULTICOMBOBOX_DIALOG_OK_BUTTON,
76
- VALUE_STATE_ERROR_ALREADY_SELECTED,
77
- } from "./generated/i18n/i18n-defaults.js";
78
-
43
+ import { VALUE_STATE_SUCCESS, VALUE_STATE_ERROR, VALUE_STATE_WARNING, VALUE_STATE_INFORMATION, VALUE_STATE_TYPE_SUCCESS, VALUE_STATE_TYPE_INFORMATION, VALUE_STATE_TYPE_ERROR, VALUE_STATE_TYPE_WARNING, INPUT_SUGGESTIONS_TITLE, SELECT_OPTIONS, MULTICOMBOBOX_DIALOG_OK_BUTTON, VALUE_STATE_ERROR_ALREADY_SELECTED, } from "./generated/i18n/i18n-defaults.js";
79
44
  // Templates
80
45
  import MultiComboBoxTemplate from "./generated/templates/MultiComboBoxTemplate.lit.js";
81
46
  import MultiComboBoxPopoverTemplate from "./generated/templates/MultiComboBoxPopoverTemplate.lit.js";
82
-
83
47
  // Styles
84
- import styles from "./generated/themes/MultiComboBox.css.js";
48
+ import multiCbxStyles from "./generated/themes/MultiComboBox.css.js";
85
49
  import ResponsivePopoverCommonCss from "./generated/themes/ResponsivePopoverCommon.css.js";
86
50
  import ValueStateMessageCss from "./generated/themes/ValueStateMessage.css.js";
87
51
  import SuggestionsCss from "./generated/themes/Suggestions.css.js";
88
52
  import MultiComboBoxPopover from "./generated/themes/MultiComboBoxPopover.css.js";
89
-
90
- /**
91
- * @public
92
- */
93
- const metadata = {
94
- tag: "ui5-multi-combobox",
95
- languageAware: true,
96
- managedSlots: true,
97
- slots: /** @lends sap.ui.webc.main.MultiComboBox.prototype */ {
98
- /**
99
- * Defines the component items.
100
- *
101
- * @type {sap.ui.webc.main.IMultiComboBoxItem[]}
102
- * @slot items
103
- * @public
104
- */
105
- "default": {
106
- propertyName: "items",
107
- type: HTMLElement,
108
- invalidateOnChildChange: true,
109
- },
110
-
111
- /**
112
- * Defines the icon to be displayed in the component.
113
- *
114
- * @type {sap.ui.webc.main.IIcon[]}
115
- * @slot
116
- * @public
117
- * @since 1.0.0-rc.9
118
- */
119
- icon: {
120
- type: HTMLElement,
121
- },
122
-
123
- /**
124
- * Defines the value state message that will be displayed as pop up under the component.
125
- * <br><br>
126
- *
127
- * <b>Note:</b> If not specified, a default text (in the respective language) will be displayed.
128
- * <br>
129
- * <b>Note:</b> The <code>valueStateMessage</code> would be displayed,
130
- * when the component is in <code>Information</code>, <code>Warning</code> or <code>Error</code> value state.
131
- * @type {HTMLElement[]}
132
- * @since 1.0.0-rc.9
133
- * @slot
134
- * @public
135
- */
136
- valueStateMessage: {
137
- type: HTMLElement,
138
- },
139
- },
140
- properties: /** @lends sap.ui.webc.main.MultiComboBox.prototype */ {
141
- /**
142
- * Defines the value of the component.
143
- * <br><br>
144
- * <b>Note:</b> The property is updated upon typing.
145
- *
146
- * @type {string}
147
- * @defaultvalue ""
148
- * @formEvents change input
149
- * @formProperty
150
- * @public
151
- */
152
- value: {
153
- type: String,
154
- defaultValue: "",
155
- },
156
-
157
- /**
158
- * Defines whether the value will be autcompleted to match an item
159
- *
160
- * @type {boolean}
161
- * @defaultvalue false
162
- * @public
163
- * @since 1.4.0
164
- */
165
- noTypeahead: {
166
- type: Boolean,
167
- },
168
-
169
- /**
170
- * Defines a short hint intended to aid the user with data entry when the
171
- * component has no value.
172
- * @type {string}
173
- * @defaultvalue ""
174
- * @public
175
- */
176
- placeholder: {
177
- type: String,
178
- defaultValue: "",
179
- },
180
-
181
- /**
182
- * Defines if the user input will be prevented, if no matching item has been found
183
- *
184
- * @type {boolean}
185
- * @defaultvalue false
186
- * @public
187
- */
188
- allowCustomValues: {
189
- type: Boolean,
190
- },
191
-
192
- /**
193
- * Defines whether the component is in disabled state.
194
- * <br><br>
195
- * <b>Note:</b> A disabled component is completely noninteractive.
196
- *
197
- * @type {boolean}
198
- * @defaultvalue false
199
- * @public
200
- */
201
- disabled: {
202
- type: Boolean,
203
- },
204
-
205
- /**
206
- * Defines the value state of the component.
207
- * <br><br>
208
- * Available options are:
209
- * <ul>
210
- * <li><code>None</code></li>
211
- * <li><code>Error</code></li>
212
- * <li><code>Warning</code></li>
213
- * <li><code>Success</code></li>
214
- * <li><code>Information</code></li>
215
- * </ul>
216
- *
217
- * @type {sap.ui.webc.base.types.ValueState}
218
- * @defaultvalue "None"
219
- * @public
220
- */
221
- valueState: {
222
- type: ValueState,
223
- defaultValue: ValueState.None,
224
- },
225
-
226
- /**
227
- * Defines whether the component is read-only.
228
- * <br><br>
229
- * <b>Note:</b> A read-only component is not editable,
230
- * but still provides visual feedback upon user interaction.
231
- *
232
- * @type {boolean}
233
- * @defaultvalue false
234
- * @public
235
- */
236
- readonly: {
237
- type: Boolean,
238
- },
239
-
240
- /**
241
- * Defines whether the component is required.
242
- *
243
- * @type {boolean}
244
- * @defaultvalue false
245
- * @public
246
- * @since 1.0.0-rc.5
247
- */
248
- required: {
249
- type: Boolean,
250
- },
251
-
252
- /**
253
- * Defines the filter type of the component.
254
- * Available options are: <code>StartsWithPerTerm</code>, <code>StartsWith</code>, <code>Contains</code> and <code>None</code>.
255
- *
256
- * @type {string}
257
- * @defaultvalue "StartsWithPerTerm"
258
- * @public
259
- */
260
- filter: {
261
- type: String,
262
- defaultValue: "StartsWithPerTerm",
263
- },
264
-
265
- /**
266
- * Indicates whether the dropdown is open. True if the dropdown is open, false otherwise.
267
- *
268
- * @type {boolean}
269
- * @defaultvalue false
270
- * @readonly
271
- * @since 1.0.0-rc.5
272
- * @public
273
- */
274
- open: {
275
- type: Boolean,
276
- },
277
-
278
- /**
279
- * Defines the accessible ARIA name of the component.
280
- *
281
- * @type {string}
282
- * @defaultvalue: ""
283
- * @public
284
- * @since 1.4.0
285
- */
286
- accessibleName: {
287
- type: String,
288
- defaultValue: undefined,
289
- },
290
-
291
- /**
292
- * Receives id(or many ids) of the elements that label the component.
293
- *
294
- * @type {string}
295
- * @defaultvalue ""
296
- * @public
297
- * @since 1.4.0
298
- */
299
- accessibleNameRef: {
300
- type: String,
301
- defaultValue: "",
302
- },
303
-
304
- _filteredItems: {
305
- type: Object,
306
- },
307
-
308
- filterSelected: {
309
- type: Boolean,
310
- },
311
-
312
- focused: {
313
- type: Boolean,
314
- },
315
-
316
- _tokenizerFocused: {
317
- type: Boolean,
318
- },
319
-
320
- _iconPressed: {
321
- type: Boolean,
322
- noAttribute: true,
323
- },
324
-
325
- _inputWidth: {
326
- type: Integer,
327
- noAttribute: true,
328
- },
329
-
330
- _listWidth: {
331
- type: Integer,
332
- defaultValue: 0,
333
- noAttribute: true,
334
- },
335
-
336
- _performingSelectionTwice: {
337
- type: Boolean,
338
- },
339
-
340
- /**
341
- * Indicates whether the tokenizer has tokens
342
- * @private
343
- */
344
- tokenizerAvailable: {
345
- type: Boolean,
346
- },
347
- },
348
- events: /** @lends sap.ui.webc.main.MultiComboBox.prototype */ {
349
- /**
350
- * Fired when the input operation has finished by pressing Enter or on focusout.
351
- *
352
- * @event
353
- * @public
354
- */
355
- change: {},
356
-
357
- /**
358
- * Fired when the value of the component changes at each keystroke.
359
- *
360
- * @event
361
- * @public
362
- */
363
- input: {},
364
-
365
- /**
366
- * Fired when the dropdown is opened or closed.
367
- *
368
- * @event sap.ui.webc.main.MultiComboBox#open-change
369
- * @since 1.0.0-rc.5
370
- * @public
371
- */
372
- "open-change": {},
373
-
374
- /**
375
- * Fired when selection is changed by user interaction
376
- * in <code>SingleSelect</code> and <code>MultiSelect</code> modes.
377
- *
378
- * @event sap.ui.webc.main.MultiComboBox#selection-change
379
- * @param {Array} items an array of the selected items.
380
- * @public
381
- */
382
- "selection-change": {
383
- detail: {
384
- items: { type: Array },
385
- },
386
- },
387
- },
388
- };
389
-
53
+ import ComboBoxFilter from "./types/ComboBoxFilter.js";
390
54
  /**
391
55
  * @class
392
56
  *
@@ -445,1217 +109,1098 @@ const metadata = {
445
109
  * @appenddocs sap.ui.webc.main.MultiComboBoxItem sap.ui.webc.main.MultiComboBoxGroupItem
446
110
  * @since 0.11.0
447
111
  */
448
- class MultiComboBox extends UI5Element {
449
- static get metadata() {
450
- return metadata;
451
- }
452
-
453
- static get render() {
454
- return litRender;
455
- }
456
-
457
- static get template() {
458
- return MultiComboBoxTemplate;
459
- }
460
-
461
- static get staticAreaTemplate() {
462
- return MultiComboBoxPopoverTemplate;
463
- }
464
-
465
- static get styles() {
466
- return styles;
467
- }
468
-
469
- static get staticAreaStyles() {
470
- return [ResponsivePopoverCommonCss, ValueStateMessageCss, SuggestionsCss, MultiComboBoxPopover];
471
- }
472
-
473
- static get dependencies() {
474
- return [
475
- MultiComboBoxItem,
476
- MultiComboBoxGroupItem,
477
- Tokenizer,
478
- Token,
479
- Icon,
480
- ResponsivePopover,
481
- Popover,
482
- List,
483
- StandardListItem,
484
- GroupHeaderListItem,
485
- ToggleButton,
486
- Button,
487
- ];
488
- }
489
-
490
- constructor() {
491
- super();
492
-
493
- this._filteredItems = [];
494
- this.selectedValues = [];
495
- this._inputLastValue = "";
496
- this._valueBeforeOpen = "";
497
- this._deleting = false;
498
- this._validationTimeout = null;
499
- this._handleResizeBound = this._handleResize.bind(this);
500
- this.valueBeforeAutoComplete = "";
501
- this.currentItemIdx = -1;
502
- this.FormSupport = undefined;
503
- }
504
-
505
- onEnterDOM() {
506
- ResizeHandler.register(this, this._handleResizeBound);
507
- }
508
-
509
- onExitDOM() {
510
- ResizeHandler.deregister(this, this._handleResizeBound);
511
- }
512
-
513
- _handleResize() {
514
- this._inputWidth = this.offsetWidth;
515
- }
516
-
517
- _inputChange() {
518
- this.fireEvent("change");
519
- }
520
-
521
- togglePopover() {
522
- this.allItemsPopover.toggle(this);
523
- }
524
-
525
- togglePopoverByDropdownIcon() {
526
- this._shouldFilterItems = false;
527
- this.allItemsPopover.toggle(this);
528
- }
529
-
530
- _showFilteredItems() {
531
- this.filterSelected = true;
532
- this._showMorePressed = true;
533
-
534
- this.togglePopover();
535
- }
536
-
537
- filterSelectedItems(event) {
538
- this.filterSelected = event.target.pressed;
539
- const selectedItems = this._filteredItems.filter(item => item.selected);
540
- this.selectedItems = this.items.filter((item, idx, allItems) => MultiComboBox._groupItemFilter(item, ++idx, allItems, selectedItems) || selectedItems.indexOf(item) !== -1);
541
- }
542
-
543
- get _showAllItemsButtonPressed() {
544
- return this.filterSelected;
545
- }
546
-
547
- get _inputDom() {
548
- return this.shadowRoot.querySelector("#ui5-multi-combobox-input");
549
- }
550
-
551
- _inputLiveChange(event) {
552
- const input = event.target;
553
- const value = input.value;
554
- const filteredItems = this._filterItems(value);
555
- const oldValueState = this.valueState;
556
-
557
- this._shouldFilterItems = true;
558
-
559
- if (this.filterSelected) {
560
- this.filterSelected = false;
561
- }
562
-
563
- if (this._validationTimeout) {
564
- input.value = this._inputLastValue;
565
- return;
566
- }
567
-
568
- if (!filteredItems.length && value && !this.allowCustomValues) {
569
- input.value = this.valueBeforeAutoComplete || this._inputLastValue;
570
- this.valueState = "Error";
571
-
572
- this._shouldAutocomplete = false;
573
- this._resetValueState(oldValueState);
574
-
575
- return;
576
- }
577
-
578
- this._inputLastValue = input.value;
579
- this.value = input.value;
580
- this._filteredItems = filteredItems;
581
-
582
- if (!isPhone()) {
583
- if (filteredItems.length === 0) {
584
- this.allItemsPopover.close();
585
- } else {
586
- this.allItemsPopover.showAt(this);
587
- }
588
- }
589
-
590
- this.fireEvent("input");
591
- }
592
-
593
- _tokenDelete(event) {
594
- const token = event.detail.ref;
595
- const deletingItem = this.items.find(item => item._id === token.getAttribute("data-ui5-id"));
596
-
597
- deletingItem.selected = false;
598
- this._deleting = true;
599
-
600
- this.fireSelectionChange();
601
- }
602
-
603
- get _getPlaceholder() {
604
- if (this._getSelectedItems().length) {
605
- return "";
606
- }
607
-
608
- return this.placeholder;
609
- }
610
-
611
- _handleArrowLeft() {
612
- const cursorPosition = this.getDomRef().querySelector(`input`).selectionStart;
613
- const isTextSelected = this.getDomRef().querySelector(`input`).selectionEnd - cursorPosition > 0;
614
-
615
- if (cursorPosition === 0 && !isTextSelected) {
616
- this._tokenizer._focusLastToken();
617
- }
618
- }
619
-
620
- _tokenizerFocusOut(event) {
621
- this._tokenizerFocused = false;
622
-
623
- const tokensCount = this._tokenizer.tokens.length;
624
- const selectedTokens = this._selectedTokensCount;
625
- const lastTokenBeingDeleted = tokensCount - 1 === 0 && this._deleting;
626
- const allTokensAreBeingDeleted = selectedTokens === tokensCount && this._deleting;
627
-
628
- if (!event.relatedTarget || !event.relatedTarget.hasAttribute("ui5-token")) {
629
- this._tokenizer.tokens.forEach(token => { token.selected = false; });
630
- this._tokenizer.expanded = this._preventTokenizerToggle ? this._tokenizer.expanded : false;
631
- }
632
-
633
- if (allTokensAreBeingDeleted || lastTokenBeingDeleted) {
634
- setTimeout(() => {
635
- if (!isPhone()) {
636
- this.shadowRoot.querySelector("input").focus();
637
- }
638
-
639
- this._deleting = false;
640
- }, 0);
641
- }
642
- }
643
-
644
- _tokenizerFocusIn() {
645
- this._tokenizerFocused = true;
646
- this.focused = false;
647
- }
648
-
649
- async _onkeydown(event) {
650
- const isArrowDownCtrl = isDownCtrl(event);
651
-
652
- if (isShow(event) && !this.disabled) {
653
- this._handleShow(event);
654
- return;
655
- }
656
-
657
- if (isDownShift(event) || isUpShift(event)) {
658
- event.preventDefault();
659
- return;
660
- }
661
-
662
- if (isUp(event) || isDown(event) || isUpCtrl(event) || isArrowDownCtrl) {
663
- this._handleArrowNavigation(event, isArrowDownCtrl);
664
- return;
665
- }
666
-
667
- // CTRL + Arrow Down navigation is performed by the ItemNavigation module of the List,
668
- // here we only implement the text selection of the selected item
669
- if (isArrowDownCtrl && !this.allItemsPopover.opened) {
670
- setTimeout(() => this._inputDom.setSelectionRange(0, this._inputDom.value.length), 0);
671
- }
672
-
673
- if (isLeftCtrl(event) || isRightCtrl(event)) {
674
- this._handleArrowCtrl(event);
675
- return;
676
- }
677
-
678
- if (isCtrlV(event) || isInsertShift(event)) {
679
- this._handlePaste(event);
680
- return;
681
- }
682
-
683
- if (isSpaceShift(event)) {
684
- event.preventDefault();
685
- }
686
-
687
- this[`_handle${event.key}`] && this[`_handle${event.key}`](event);
688
- this._shouldAutocomplete = !this.noTypeahead && !(isBackSpace(event) || isDelete(event) || isEscape(event) || isEnter(event));
689
- }
690
-
691
- async _handlePaste(event) {
692
- if (this.readonly) {
693
- return;
694
- }
695
-
696
- const pastedText = await navigator.clipboard.readText();
697
-
698
- if (!pastedText) {
699
- return;
700
- }
701
-
702
- const separatedText = pastedText.split(/\r\n|\r|\n/g);
703
- const matchingItems = this.items.filter(item => separatedText.indexOf(item.text) > -1 && !item.selected);
704
-
705
- if (matchingItems.length) {
706
- matchingItems.forEach(item => {
707
- item.selected = true;
708
- this.value = "";
709
- this.fireSelectionChange();
710
- });
711
- } else {
712
- this.value = pastedText;
713
- this.fireEvent("input");
714
- }
715
- }
716
-
717
- _handleShow(event) {
718
- const items = this.items;
719
- const selectedItem = this._getSelectedItems()[0];
720
- const focusedToken = this._tokenizer.tokens.find(token => token.focused);
721
- const value = this.value;
722
- const matchingItem = this.items.find(item => item.text.localeCompare(value, undefined, { sensitivity: "base" }) === 0);
723
-
724
- event.preventDefault();
725
-
726
- if (this.readonly) {
727
- return;
728
- }
729
-
730
- this._isOpenedByKeyboard = true;
731
- this._shouldFilterItems = false;
732
- this._filteredItems = this.items;
733
-
734
- this.togglePopover();
735
-
736
- if (!focusedToken && matchingItem) {
737
- this._itemToFocus = matchingItem;
738
- return;
739
- }
740
-
741
- if (selectedItem && !focusedToken) {
742
- this._itemToFocus = selectedItem;
743
- } else if (focusedToken && event.target === focusedToken) {
744
- this._itemToFocus = items.find(item => item.text === focusedToken.text);
745
- } else {
746
- this._itemToFocus = items[0];
747
- }
748
- }
749
-
750
- _handlePageUp(event) {
751
- event.preventDefault();
752
- }
753
-
754
- _handlePageDown(event) {
755
- event.preventDefault();
756
- }
757
-
758
- _handleBackspace(event) {
759
- if (event.target.value === "") {
760
- event.preventDefault();
761
- this._tokenizer._focusLastToken();
762
- }
763
- }
764
-
765
- _handleEscape(event) {
766
- const innerInput = this._innerInput;
767
- const isAutoCompleted = innerInput.selectionEnd - innerInput.selectionStart > 0;
768
-
769
- if (isAutoCompleted) {
770
- this.value = this.valueBeforeAutoComplete;
771
- }
772
-
773
- if (!this.allowCustomValues || (!this.open && this.allowCustomValues)) {
774
- this.value = this._lastValue;
775
- }
776
- }
777
-
778
- _handleHome(event) {
779
- const shouldFocusToken = this._isFocusInside && event.target.selectionStart === 0 && this._tokenizer.tokens.length > 0;
780
-
781
- if (shouldFocusToken) {
782
- event.preventDefault();
783
- this._tokenizer.tokens[0].focus();
784
- }
785
- }
786
-
787
- _handleEnd(event) {
788
- const tokens = this._tokenizer.tokens;
789
- const lastTokenIdx = tokens.length - 1;
790
- const shouldFocusInput = event.target === tokens[lastTokenIdx] && tokens[lastTokenIdx] === this.shadowRoot.activeElement;
791
-
792
- if (shouldFocusInput) {
793
- event.preventDefault();
794
- this._inputDom.focus();
795
- }
796
- }
797
-
798
- _handleTab(event) {
799
- this.allItemsPopover.close();
800
- }
801
-
802
- _handleSelectAll(event) {
803
- const filteredItems = this._filteredItems;
804
- const allItemsSelected = filteredItems.every(item => item.selected);
805
-
806
- filteredItems.forEach(item => {
807
- item.selected = !allItemsSelected;
808
- });
809
-
810
- this.fireSelectionChange();
811
- }
812
-
813
- _onValueStateKeydown(event) {
814
- const isArrowDown = isDown(event);
815
- const isArrowUp = isUp(event);
816
-
817
- if (isTabNext(event) || isTabPrevious(event)) {
818
- this._onItemTab(event);
819
- return;
820
- }
821
-
822
- event.preventDefault();
823
-
824
- if (isArrowDown || isDownCtrl(event)) {
825
- this._handleArrowDown(event);
826
- }
827
-
828
- if (isArrowUp || isUpCtrl(event)) {
829
- this._shouldAutocomplete = true;
830
- this._inputDom.focus();
831
- }
832
- }
833
-
834
- async _onItemKeydown(event) {
835
- const isFirstItem = this.list.items[0] === event.target;
836
- const isArrowUp = isUp(event) || isUpCtrl(event);
837
-
838
- if (this.hasValueStateMessage && !this.valueStateHeader) {
839
- await this._setValueStateHeader();
840
- }
841
-
842
- if (isTabNext(event) || isTabPrevious(event)) {
843
- this._onItemTab(event);
844
- return;
845
- }
846
-
847
- if (isHomeCtrl(event)) {
848
- this.list._itemNavigation._handleHome(event);
849
- this.list.items[this.list._itemNavigation._currentIndex].focus();
850
- }
851
-
852
- if (isEndCtrl(event)) {
853
- this.list._itemNavigation._handleEnd(event);
854
- this.list.items[this.list._itemNavigation._currentIndex].focus();
855
- }
856
-
857
- event.preventDefault();
858
-
859
- if (isDownShift(event) || isUpShift(event)) {
860
- this._handleItemRangeSelection(event);
861
- return;
862
- }
863
-
864
- if ((isUpCtrl(event)) && !isFirstItem) {
865
- this.list._itemNavigation._handleUp(event);
866
- this.list.items[this.list._itemNavigation._currentIndex].focus();
867
- }
868
-
869
- if (isDownCtrl(event)) {
870
- this.list._itemNavigation._handleDown(event);
871
- this.list.items[this.list._itemNavigation._currentIndex].focus();
872
- }
873
-
874
- if (isShow(event)) {
875
- this.togglePopover();
876
- }
877
-
878
- if (isCtrlA(event)) {
879
- this._handleSelectAll(event);
880
- return;
881
- }
882
-
883
- if (((isArrowUp && isFirstItem) || isHome(event)) && this.valueStateHeader) {
884
- this.valueStateHeader.focus();
885
- }
886
-
887
- if (!this.valueStateHeader && isFirstItem && isArrowUp) {
888
- this._inputDom.focus();
889
- this._shouldAutocomplete = true;
890
- }
891
- }
892
-
893
- _handleArrowCtrl(event) {
894
- const input = this._inputDom;
895
- const isArrowLeft = isLeftCtrl(event);
896
-
897
- if (isArrowLeft && input.selectionStart === 0 && input.selectionEnd === 0) {
898
- event.preventDefault();
899
- }
900
-
901
- if (isArrowLeft && ((input.selectionEnd - input.selectionStart) > 0)) {
902
- input.setSelectionRange(0, 0);
903
- }
904
- }
905
-
906
- _onItemTab(event) {
907
- this._inputDom.focus();
908
- this.allItemsPopover.close();
909
- }
910
-
911
- async _handleArrowNavigation(event, isDownControl) {
912
- const isArrowDown = isDownControl || isDown(event);
913
- const hasSuggestions = this.items.length;
914
- const isOpen = this.allItemsPopover.opened;
915
-
916
- event.preventDefault();
917
-
918
- if (this.hasValueStateMessage && !this.valueStateHeader) {
919
- await this._setValueStateHeader();
920
- }
921
-
922
- if (isArrowDown && isOpen && this.valueStateHeader) {
923
- this.value = this.valueBeforeAutoComplete || this.value;
924
- this.valueStateHeader.focus();
925
- return;
926
- }
927
-
928
- if (isArrowDown && hasSuggestions) {
929
- this._handleArrowDown(event);
930
- }
931
-
932
- if (!isArrowDown && !isOpen && !this.readonly) {
933
- this._navigateToPrevItem();
934
- }
935
- }
936
-
937
- _handleArrowDown(event) {
938
- const isOpen = this.allItemsPopover.opened;
939
- const firstListItem = this.list.items[0];
940
-
941
- if (isOpen) {
942
- this.list._itemNavigation.setCurrentItem(firstListItem);
943
- this.value = this.valueBeforeAutoComplete || this.value;
944
- firstListItem.focus();
945
- } else if (!this.readonly) {
946
- this._navigateToNextItem();
947
- }
948
- }
949
-
950
- _handleItemRangeSelection(event) {
951
- const items = this.items;
952
- const listItems = this.list.items;
953
- const currentItemIdx = listItems.indexOf(event.target);
954
- const nextItemIdx = currentItemIdx + 1;
955
- const prevItemIdx = currentItemIdx - 1;
956
-
957
- if (isDownShift(event) && items[nextItemIdx]) {
958
- items[nextItemIdx].selected = items[currentItemIdx].selected;
959
- items[nextItemIdx].focus();
960
- }
961
-
962
- if (isUpShift(event) && items[prevItemIdx]) {
963
- items[prevItemIdx].selected = items[currentItemIdx].selected;
964
- items[prevItemIdx].focus();
965
- }
966
-
967
- this.fireSelectionChange();
968
- }
969
-
970
- _navigateToNextItem() {
971
- const items = this.items;
972
- const itemsCount = items.length;
973
- const previousItemIdx = this.currentItemIdx;
974
-
975
- if (previousItemIdx > -1 && items[previousItemIdx].text !== this.value) {
976
- this.currentItemIdx = -1;
977
- }
978
-
979
- if (previousItemIdx >= itemsCount - 1) {
980
- return;
981
- }
982
-
983
- let currentItem = this.items[++this.currentItemIdx];
984
-
985
- while ((this.currentItemIdx < itemsCount - 1 && currentItem.selected) || currentItem.isGroupItem) {
986
- currentItem = this.items[++this.currentItemIdx];
987
- }
988
-
989
- if (currentItem.selected === true || currentItem.isGroupItem) {
990
- this.currentItemIdx = previousItemIdx;
991
- return;
992
- }
993
-
994
- this.value = currentItem.text;
995
- this._innerInput.value = currentItem.text;
996
- this._innerInput.setSelectionRange(0, currentItem.text.length);
997
- }
998
-
999
- _navigateToPrevItem() {
1000
- const items = this.items;
1001
- let previousItemIdx = this.currentItemIdx;
1002
-
1003
- if ((!this.value && previousItemIdx !== -1) || (previousItemIdx !== -1 && this.value && this.value !== items[previousItemIdx].text)) {
1004
- previousItemIdx = -1;
1005
- }
1006
-
1007
- if (previousItemIdx === -1) {
1008
- this.currentItemIdx = items.length;
1009
- }
1010
-
1011
- if (previousItemIdx === 0) {
1012
- this.currentItemIdx = 0;
1013
- return;
1014
- }
1015
-
1016
- let currentItem = this.items[--this.currentItemIdx];
1017
-
1018
- while ((currentItem && this.currentItemIdx > 0) && (currentItem.selected || currentItem.isGroupItem)) {
1019
- currentItem = this.items[--this.currentItemIdx];
1020
- }
1021
-
1022
- if (!currentItem) {
1023
- return;
1024
- }
1025
-
1026
- if (currentItem.selected || currentItem.isGroupItem) {
1027
- this.currentItemIdx = previousItemIdx;
1028
- return;
1029
- }
1030
-
1031
- this.value = currentItem.text;
1032
- this._innerInput.value = currentItem.text;
1033
- this._innerInput.setSelectionRange(0, currentItem.text.length);
1034
- }
1035
-
1036
- _handleEnter() {
1037
- const lowerCaseValue = this.value.toLowerCase();
1038
- const matchingItem = this.items.find(item => (item.text.toLowerCase() === lowerCaseValue && !item.isGroupItem));
1039
- const oldValueState = this.valueState;
1040
- const innerInput = this._innerInput;
1041
-
1042
- if (this.FormSupport) {
1043
- this.FormSupport.triggerFormSubmit(this);
1044
- }
1045
-
1046
- if (matchingItem) {
1047
- if (matchingItem.selected) {
1048
- if (this._validationTimeout) {
1049
- return;
1050
- }
1051
-
1052
- this.valueState = "Error";
1053
- this._performingSelectionTwice = true;
1054
- this._resetValueState(oldValueState, () => {
1055
- this._performingSelectionTwice = false;
1056
- });
1057
- } else {
1058
- matchingItem.selected = true;
1059
- this.value = "";
1060
- this.fireSelectionChange();
1061
- }
1062
-
1063
- innerInput.setSelectionRange(matchingItem.text.length, matchingItem.text.length);
1064
- this.allItemsPopover.close();
1065
- }
1066
- }
1067
-
1068
- _resetValueState(valueState, callback) {
1069
- this._validationTimeout = setTimeout(() => {
1070
- this.valueState = valueState;
1071
- this._validationTimeout = null;
1072
-
1073
- callback && callback();
1074
- }, 2000);
1075
- }
1076
-
1077
- _onTokenizerKeydown(event) {
1078
- const isCtrl = !!(event.metaKey || event.ctrlKey);
1079
-
1080
- if (isRight(event)) {
1081
- const lastTokenIndex = this._tokenizer.tokens.length - this._tokenizer.overflownTokens.length - 1;
1082
-
1083
- if (event.target === this._tokenizer.tokens[lastTokenIndex]) {
1084
- setTimeout(() => {
1085
- this.shadowRoot.querySelector("input").focus();
1086
- }, 0);
1087
- }
1088
- }
1089
-
1090
- if ((isCtrl && ["c", "x"].includes(event.key.toLowerCase())) || isDeleteShift(event) || isInsertCtrl(event)) {
1091
- event.preventDefault();
1092
-
1093
- const isCut = event.key.toLowerCase() === "x" || isDeleteShift(event);
1094
- const selectedTokens = this._tokenizer.tokens.filter(token => token.selected);
1095
-
1096
- if (isCut) {
1097
- const cutResult = this._tokenizer._fillClipboard("cut", selectedTokens);
1098
- selectedTokens.forEach(token => {
1099
- this._tokenizer._tokenKeyboardDelete(event, token);
1100
- });
1101
-
1102
- this.focus();
1103
- return cutResult;
1104
- }
1105
- return this._tokenizer._fillClipboard("copy", selectedTokens);
1106
- }
1107
-
1108
- if (isCtrlV(event) || isInsertShift(event)) {
1109
- this._handlePaste(event);
1110
- }
1111
-
1112
- if (isHome(event)) {
1113
- this._handleHome(event);
1114
- }
1115
-
1116
- if (isEnd(event)) {
1117
- this._handleEnd(event);
1118
- }
1119
-
1120
- if (isShow(event) && !this.readonly && !this.disabled) {
1121
- this._preventTokenizerToggle = true;
1122
- this._handleShow(event);
1123
- }
1124
- }
1125
-
1126
- _filterItems(str) {
1127
- const itemsToFilter = this.items.filter(item => !item.isGroupItem);
1128
- const filteredItems = (Filters[this.filter] || Filters.StartsWithPerTerm)(str, itemsToFilter, "text");
1129
-
1130
- // Return the filtered items and their group items
1131
- return this.items.filter((item, idx, allItems) => MultiComboBox._groupItemFilter(item, ++idx, allItems, filteredItems) || filteredItems.indexOf(item) !== -1);
1132
- }
1133
-
1134
- /**
1135
- * Returns true if the group header should be shown (if there is a filtered suggestion item for this group item)
1136
- *
1137
- * @private
1138
- */
1139
- static _groupItemFilter(item, idx, allItems, filteredItems) {
1140
- if (item.isGroupItem) {
1141
- let groupHasFilteredItems;
1142
-
1143
- while (allItems[idx] && !allItems[idx].isGroupItem && !groupHasFilteredItems) {
1144
- groupHasFilteredItems = filteredItems.indexOf(allItems[idx]) !== -1;
1145
- idx++;
1146
- }
1147
-
1148
- return groupHasFilteredItems;
1149
- }
1150
- }
1151
-
1152
- _afterOpenPicker() {
1153
- this._toggle();
1154
-
1155
- if (!isPhone() && !this._isOpenedByKeyboard) {
1156
- this._innerInput.focus();
1157
- } else if (this._isOpenedByKeyboard) {
1158
- this._itemToFocus.focus();
1159
- } else {
1160
- this.allItemsPopover.focus();
1161
- }
1162
-
1163
- this._isOpenedByKeyboard = false;
1164
- }
1165
-
1166
- _toggle() {
1167
- this.open = !this.open;
1168
- this.fireEvent("open-change");
1169
- }
1170
-
1171
- _getSelectedItems() {
1172
- // Angular 2 way data binding
1173
- this.selectedValues = this.items.filter(item => item.selected);
1174
- return this.selectedValues;
1175
- }
1176
-
1177
- _listSelectionChange(event) {
1178
- // sync list items and cb items
1179
- this.syncItems(event.target.items);
1180
-
1181
- // don't call selection change right after selection as user can cancel it on phone
1182
- if (!isPhone()) {
1183
- this.fireSelectionChange();
1184
- }
1185
-
1186
- if (!event.detail.selectionComponentPressed && !isSpace(event.detail) && !isSpaceCtrl(event.detail)) {
1187
- this.allItemsPopover.close();
1188
- this.value = "";
1189
-
1190
- // if the item (not checkbox) is clicked, call the selection change
1191
- if (isPhone()) {
1192
- this.fireSelectionChange();
1193
- }
1194
-
1195
- this.fireEvent("input");
1196
- }
1197
-
1198
- this.value = this.valueBeforeAutoComplete || "";
1199
- }
1200
-
1201
- syncItems(listItems) {
1202
- listItems.forEach(item => {
1203
- this.items.forEach(mcbItem => {
1204
- if (mcbItem._id === item.getAttribute("data-ui5-token-id")) {
1205
- mcbItem.selected = item.selected;
1206
- }
1207
- });
1208
- });
1209
- }
1210
-
1211
- fireSelectionChange() {
1212
- this.fireEvent("selection-change", { items: this._getSelectedItems() });
1213
- // Angular 2 way data binding
1214
- this.fireEvent("value-changed");
1215
- }
1216
-
1217
- async _getRespPopover() {
1218
- const staticAreaItem = await this.getStaticAreaItemDomRef();
1219
- this.allItemsPopover = staticAreaItem.querySelector(`.ui5-multi-combobox-all-items-responsive-popover`);
1220
- }
1221
-
1222
- async _getList() {
1223
- const staticAreaItem = await this.getStaticAreaItemDomRef();
1224
- this.list = staticAreaItem.querySelector(".ui5-multi-combobox-all-items-list");
1225
- }
1226
-
1227
- _click(event) {
1228
- if (isPhone() && !this.readonly && !this._showMorePressed && !this._deleting) {
1229
- this.allItemsPopover.showAt(this);
1230
- }
1231
-
1232
- this._showMorePressed = false;
1233
- }
1234
-
1235
- _afterClosePicker() {
1236
- // close device's keyboard and prevent further typing
1237
- if (isPhone()) {
1238
- this.blur();
1239
- }
1240
-
1241
- this._toggle();
1242
-
1243
- this._iconPressed = false;
1244
- this._preventTokenizerToggle = false;
1245
- this.filterSelected = false;
1246
- }
1247
-
1248
- _beforeOpen() {
1249
- this._itemsBeforeOpen = this.items.map(item => {
1250
- return {
1251
- ref: item,
1252
- selected: item.selected,
1253
- };
1254
- });
1255
-
1256
- this._valueBeforeOpen = this.value;
1257
-
1258
- if (this.filterSelected) {
1259
- const selectedItems = this._filteredItems.filter(item => item.selected);
1260
- this.selectedItems = this.items.filter((item, idx, allItems) => MultiComboBox._groupItemFilter(item, ++idx, allItems, selectedItems) || selectedItems.indexOf(item) !== -1);
1261
- }
1262
- }
1263
-
1264
- _handleTypeAhead(item, filterValue) {
1265
- if (!item) {
1266
- return;
1267
- }
1268
-
1269
- const value = item.text;
1270
- const innerInput = this._innerInput;
1271
-
1272
- filterValue = filterValue || "";
1273
- this.value = value;
1274
-
1275
- innerInput.value = value;
1276
- innerInput.setSelectionRange(filterValue.length, value.length);
1277
-
1278
- this._shouldAutocomplete = false;
1279
- }
1280
-
1281
- _getFirstMatchingItem(current) {
1282
- if (!this.items.length) {
1283
- return;
1284
- }
1285
-
1286
- const matchingItems = this._startsWithMatchingItems(current).filter(item => !item.isGroupItem && !item.selected);
1287
-
1288
- if (matchingItems.length) {
1289
- return matchingItems[0];
1290
- }
1291
- }
1292
-
1293
- _startsWithMatchingItems(str) {
1294
- return Filters.StartsWith(str, this.items, "text");
1295
- }
1296
-
1297
- onBeforeRendering() {
1298
- const input = this._innerInput;
1299
- const autoCompletedChars = input && input.selectionEnd - input.selectionStart;
1300
- const value = input && input.value;
1301
-
1302
- this.FormSupport = getFeature("FormSupport");
1303
- this._inputLastValue = value;
1304
-
1305
- if (input && !input.value) {
1306
- this.valueBeforeAutoComplete = "";
1307
- this._filteredItems = this.items;
1308
- }
1309
-
1310
- this.items.forEach(item => {
1311
- item._getRealDomRef = () => this.allItemsPopover.querySelector(`*[data-ui5-stable=${item.stableDomRef}]`);
1312
- });
1313
-
1314
- this.tokenizerAvailable = this.items && this.items.length > 0;
1315
- this.style.setProperty("--_ui5-input-icons-count", this.iconsCount);
1316
-
1317
- if (!input || !value) {
1318
- return;
1319
- }
1320
-
1321
- // Typehead causes issues on Android devices, so we disable it for now
1322
- // If there is already a selection the autocomplete has already been performed
1323
- if (this._shouldAutocomplete && !isAndroid() && !autoCompletedChars) {
1324
- const item = this._getFirstMatchingItem(value);
1325
-
1326
- // Keep the original typed in text intact
1327
- this.valueBeforeAutoComplete = value;
1328
- this._handleTypeAhead(item, value);
1329
- }
1330
-
1331
- if (this._shouldFilterItems) {
1332
- this._filteredItems = this._filterItems(this._shouldAutocomplete || !!autoCompletedChars ? this.valueBeforeAutoComplete : value);
1333
- } else {
1334
- this._filteredItems = this.items;
1335
- }
1336
- }
1337
-
1338
- async onAfterRendering() {
1339
- await this._getRespPopover();
1340
- await this._getList();
1341
-
1342
- this.toggle(this.shouldDisplayOnlyValueStateMessage);
1343
- this.storeResponsivePopoverWidth();
1344
-
1345
- this._deleting = false;
1346
- // force resize of the tokenizer on invalidation
1347
- this._tokenizer._handleResize();
1348
- }
1349
-
1350
- get _isPhone() {
1351
- return isPhone();
1352
- }
1353
-
1354
- _onIconMousedown() {
1355
- this._iconPressed = true;
1356
- }
1357
-
1358
- storeResponsivePopoverWidth() {
1359
- if (this.open && !this._listWidth) {
1360
- this._listWidth = this.list.offsetWidth;
1361
- }
1362
- }
1363
-
1364
- toggle(isToggled) {
1365
- if (isToggled && !this.open) {
1366
- this.openPopover();
1367
- } else {
1368
- this.closePopover();
1369
- }
1370
- }
1371
-
1372
- handleCancel() {
1373
- this._itemsBeforeOpen.forEach(item => {
1374
- item.ref.selected = item.selected;
1375
- });
1376
-
1377
- this.togglePopover();
1378
-
1379
- this.value = this._valueBeforeOpen;
1380
- }
1381
-
1382
- handleOK() {
1383
- if (isPhone()) {
1384
- this.fireSelectionChange();
1385
- }
1386
-
1387
- this.togglePopover();
1388
- }
1389
-
1390
- async openPopover() {
1391
- const popover = await this._getPopover();
1392
-
1393
- if (popover) {
1394
- popover.showAt(this);
1395
- }
1396
- }
1397
-
1398
- _forwardFocusToInner() {
1399
- this._innerInput.focus();
1400
- }
1401
-
1402
- async closePopover() {
1403
- const popover = await this._getPopover();
1404
-
1405
- popover && popover.close();
1406
- }
1407
-
1408
- async _getPopover() {
1409
- const staticAreaItem = await this.getStaticAreaItemDomRef();
1410
- return staticAreaItem.querySelector("[ui5-popover]");
1411
- }
1412
-
1413
- async _getResponsivePopover() {
1414
- const staticAreaItem = await this.getStaticAreaItemDomRef();
1415
- return staticAreaItem.querySelector("[ui5-responsive-popover]");
1416
- }
1417
-
1418
- async _setValueStateHeader() {
1419
- const responsivePopover = await this._getResponsivePopover();
1420
- this.valueStateHeader = responsivePopover.querySelector("div.ui5-responsive-popover-header.ui5-valuestatemessage-root");
1421
- }
1422
-
1423
- get _tokenizer() {
1424
- return this.shadowRoot.querySelector("[ui5-tokenizer]");
1425
- }
1426
-
1427
- inputFocusIn(event) {
1428
- if (!isPhone() || this.readonly) {
1429
- this.focused = true;
1430
- this._tokenizer.expanded = true;
1431
- } else {
1432
- this._innerInput.blur();
1433
- }
1434
-
1435
- if (!isPhone() && ((event.relatedTarget && event.relatedTarget.tagName !== "UI5-STATIC-AREA-ITEM") || !event.relatedTarget)) {
1436
- this._innerInput.setSelectionRange(0, this.value.length);
1437
- }
1438
-
1439
- this._lastValue = this.value;
1440
- this.valueBeforeAutoComplete = "";
1441
- }
1442
-
1443
- inputFocusOut(event) {
1444
- if (!this.shadowRoot.contains(event.relatedTarget) && !this._deleting) {
1445
- this.focused = false;
1446
- this._tokenizer.expanded = this.open;
1447
- // remove the value if user focus out the input and focus is not going in the popover
1448
- if (!isPhone() && !this.allowCustomValues && (this.staticAreaItem !== event.relatedTarget)) {
1449
- this.value = "";
1450
- }
1451
- }
1452
- }
1453
-
1454
- get editable() {
1455
- return !this.readonly;
1456
- }
1457
-
1458
- get _isFocusInside() {
1459
- return !isPhone() && (this.focused || this._tokenizerFocused);
1460
- }
1461
-
1462
- get selectedItemsListMode() {
1463
- return this.readonly ? "None" : "MultiSelect";
1464
- }
1465
-
1466
- get _listItemsType() {
1467
- return this.readonly ? "Inactive" : "Active";
1468
- }
1469
-
1470
- get hasValueState() {
1471
- return this.valueState !== ValueState.None;
1472
- }
1473
-
1474
- get hasValueStateMessage() {
1475
- return this.hasValueState && this.valueState !== ValueState.Success;
1476
- }
1477
-
1478
- get ariaValueStateHiddenText() {
1479
- if (!this.hasValueState) {
1480
- return;
1481
- }
1482
-
1483
- if (this.shouldDisplayDefaultValueStateMessage) {
1484
- return `${this.valueStateTypeMappings[this.valueState]} ${this.valueStateDefaultText}`;
1485
- }
1486
-
1487
- return `${this.valueStateTypeMappings[this.valueState]}`.concat(" ", this.valueStateMessageText.map(el => el.textContent).join(" "));
1488
- }
1489
-
1490
- get valueStateDefaultText() {
1491
- let key = this.valueState;
1492
-
1493
- if (this._performingSelectionTwice) {
1494
- key = "Error_Selection";
1495
- }
1496
-
1497
- return this.valueStateTextMappings[key];
1498
- }
1499
-
1500
- get valueStateTextId() {
1501
- return this.hasValueState ? `${this._id}-valueStateDesc` : undefined;
1502
- }
1503
-
1504
- get valueStateMessageText() {
1505
- return this.getSlottedNodes("valueStateMessage").map(el => el.cloneNode(true));
1506
- }
1507
-
1508
- get ariaLabelText() {
1509
- return getEffectiveAriaLabelText(this);
1510
- }
1511
-
1512
- /**
1513
- * This method is relevant for sap_horizon theme only
1514
- */
1515
- get _valueStateMessageIcon() {
1516
- const iconPerValueState = {
1517
- Error: "error",
1518
- Warning: "alert",
1519
- Success: "sys-enter-2",
1520
- Information: "information",
1521
- };
1522
-
1523
- return this.valueState !== ValueState.None ? iconPerValueState[this.valueState] : "";
1524
- }
1525
-
1526
- get _tokensCountText() {
1527
- if (!this._tokenizer) {
1528
- return;
1529
- }
1530
- return this._tokenizer._tokensCountText();
1531
- }
1532
-
1533
- get _tokensCountTextId() {
1534
- return `${this._id}-hiddenText-nMore`;
1535
- }
1536
-
1537
- get _selectedTokensCount() {
1538
- return this._tokenizer.tokens.filter(token => token.selected).length;
1539
- }
1540
-
1541
- get ariaDescribedByText() {
1542
- return this.valueStateTextId ? `${this._tokensCountTextId} ${this.valueStateTextId}` : `${this._tokensCountTextId}`;
1543
- }
1544
-
1545
- get shouldDisplayDefaultValueStateMessage() {
1546
- return !this.valueStateMessage.length && this.hasValueStateMessage;
1547
- }
1548
-
1549
- get shouldDisplayOnlyValueStateMessage() {
1550
- return this.focused && !this.readonly && this.hasValueStateMessage && !this._iconPressed;
1551
- }
1552
-
1553
- get valueStateTextMappings() {
1554
- return {
1555
- "Success": MultiComboBox.i18nBundle.getText(VALUE_STATE_SUCCESS),
1556
- "Error": MultiComboBox.i18nBundle.getText(VALUE_STATE_ERROR),
1557
- "Error_Selection": MultiComboBox.i18nBundle.getText(VALUE_STATE_ERROR_ALREADY_SELECTED),
1558
- "Warning": MultiComboBox.i18nBundle.getText(VALUE_STATE_WARNING),
1559
- "Information": MultiComboBox.i18nBundle.getText(VALUE_STATE_INFORMATION),
1560
- };
1561
- }
1562
-
1563
- get valueStateTypeMappings() {
1564
- return {
1565
- "Success": MultiComboBox.i18nBundle.getText(VALUE_STATE_TYPE_SUCCESS),
1566
- "Information": MultiComboBox.i18nBundle.getText(VALUE_STATE_TYPE_INFORMATION),
1567
- "Error": MultiComboBox.i18nBundle.getText(VALUE_STATE_TYPE_ERROR),
1568
- "Warning": MultiComboBox.i18nBundle.getText(VALUE_STATE_TYPE_WARNING),
1569
- };
1570
- }
1571
-
1572
- get _innerInput() {
1573
- if (isPhone()) {
1574
- if (this.allItemsPopover && this.allItemsPopover.opened) {
1575
- return this.allItemsPopover.querySelector("input");
1576
- }
1577
- }
1578
-
1579
- return this.getDomRef() ? this.getDomRef().querySelector("#ui5-multi-combobox-input") : null;
1580
- }
1581
-
1582
- get _headerTitleText() {
1583
- return MultiComboBox.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
1584
- }
1585
-
1586
- get _iconAccessibleNameText() {
1587
- return MultiComboBox.i18nBundle.getText(SELECT_OPTIONS);
1588
- }
1589
-
1590
- get _dialogOkButton() {
1591
- return MultiComboBox.i18nBundle.getText(MULTICOMBOBOX_DIALOG_OK_BUTTON);
1592
- }
1593
-
1594
- get _tokenizerExpanded() {
1595
- if (isPhone() || this.readonly) {
1596
- return false;
1597
- }
1598
-
1599
- if (this._preventTokenizerToggle) {
1600
- return this._tokenizer.expanded;
1601
- }
1602
-
1603
- const isCurrentlyExpanded = !!this._tokenizer && this._tokenizer.expanded;
1604
- const shouldBeExpanded = this.focused || this.open || isCurrentlyExpanded;
1605
-
1606
- return shouldBeExpanded;
1607
- }
1608
-
1609
- get _valueStatePopoverHorizontalAlign() {
1610
- return this.effectiveDir !== "rtl" ? "Left" : "Right";
1611
- }
1612
-
1613
- get iconsCount() {
1614
- const slottedIconsCount = this.icon ? this.icon.length : 0;
1615
- const arrowDownIconsCount = this.readonly ? 0 : 1;
1616
- return slottedIconsCount + arrowDownIconsCount;
1617
- }
1618
-
1619
- get classes() {
1620
- return {
1621
- popover: {
1622
- "ui5-multi-combobox-all-items-responsive-popover": true,
1623
- "ui5-suggestions-popover": !this.isPhone,
1624
- "ui5-suggestions-popover-with-value-state-header": !this.isPhone && this.hasValueStateMessage,
1625
- },
1626
- popoverValueState: {
1627
- "ui5-valuestatemessage-root": true,
1628
- "ui5-valuestatemessage-header": true,
1629
- "ui5-valuestatemessage--success": this.valueState === ValueState.Success,
1630
- "ui5-valuestatemessage--error": this.valueState === ValueState.Error,
1631
- "ui5-valuestatemessage--warning": this.valueState === ValueState.Warning,
1632
- "ui5-valuestatemessage--information": this.valueState === ValueState.Information,
1633
- },
1634
- };
1635
- }
1636
-
1637
- get styles() {
1638
- const remSizeIxPx = parseInt(getComputedStyle(document.documentElement).fontSize);
1639
- return {
1640
- popoverValueStateMessage: {
1641
- "width": `${this._listWidth}px`,
1642
- "display": this._listWidth === 0 ? "none" : "inline-block",
1643
- },
1644
- popoverHeader: {
1645
- "max-width": isPhone() ? "100%" : `${this._inputWidth}px`,
1646
- },
1647
- suggestionsPopover: {
1648
- "min-width": `${this._inputWidth}px`,
1649
- "max-width": (this._inputWidth / remSizeIxPx) > 40 ? `${this._inputWidth}px` : "40rem",
1650
- },
1651
- };
1652
- }
1653
-
1654
- static async onDefine() {
1655
- MultiComboBox.i18nBundle = await getI18nBundle("@ui5/webcomponents");
1656
- }
1657
- }
1658
-
112
+ let MultiComboBox = MultiComboBox_1 = class MultiComboBox extends UI5Element {
113
+ constructor() {
114
+ super();
115
+ this._filteredItems = [];
116
+ this.selectedValues = [];
117
+ this._itemsBeforeOpen = [];
118
+ this._inputLastValue = "";
119
+ this._valueBeforeOpen = "";
120
+ this._deleting = false;
121
+ this._validationTimeout = null;
122
+ this._handleResizeBound = this._handleResize.bind(this);
123
+ this.valueBeforeAutoComplete = "";
124
+ this._lastValue = "";
125
+ this.currentItemIdx = -1;
126
+ this.FormSupport = undefined;
127
+ }
128
+ onEnterDOM() {
129
+ ResizeHandler.register(this, this._handleResizeBound);
130
+ }
131
+ onExitDOM() {
132
+ ResizeHandler.deregister(this, this._handleResizeBound);
133
+ }
134
+ _handleResize() {
135
+ this._inputWidth = this.offsetWidth;
136
+ }
137
+ _inputChange() {
138
+ this.fireEvent("change");
139
+ }
140
+ togglePopover() {
141
+ this.allItemsPopover?.toggle(this);
142
+ }
143
+ togglePopoverByDropdownIcon() {
144
+ this._shouldFilterItems = false;
145
+ this.allItemsPopover?.toggle(this);
146
+ }
147
+ _showFilteredItems() {
148
+ this.filterSelected = true;
149
+ this._showMorePressed = true;
150
+ this.togglePopover();
151
+ }
152
+ filterSelectedItems(e) {
153
+ this.filterSelected = e.target.pressed;
154
+ const selectedItems = this._filteredItems.filter(item => item.selected);
155
+ this.selectedItems = this.items.filter((item, idx, allItems) => MultiComboBox_1._groupItemFilter(item, ++idx, allItems, selectedItems) || selectedItems.indexOf(item) !== -1);
156
+ }
157
+ get _showAllItemsButtonPressed() {
158
+ return this.filterSelected;
159
+ }
160
+ get _inputDom() {
161
+ return this.shadowRoot.querySelector("#ui5-multi-combobox-input");
162
+ }
163
+ _inputLiveChange(e) {
164
+ const input = e.target;
165
+ const value = input.value;
166
+ const filteredItems = this._filterItems(value);
167
+ const oldValueState = this.valueState;
168
+ this._shouldFilterItems = true;
169
+ if (this.filterSelected) {
170
+ this.filterSelected = false;
171
+ }
172
+ if (this._validationTimeout) {
173
+ input.value = this._inputLastValue;
174
+ return;
175
+ }
176
+ if (!filteredItems.length && value && !this.allowCustomValues) {
177
+ input.value = this.valueBeforeAutoComplete || this._inputLastValue;
178
+ this.valueState = ValueState.Error;
179
+ this._shouldAutocomplete = false;
180
+ this._resetValueState(oldValueState);
181
+ return;
182
+ }
183
+ this._inputLastValue = input.value;
184
+ this.value = input.value;
185
+ this._filteredItems = filteredItems;
186
+ if (!isPhone()) {
187
+ if (filteredItems.length === 0) {
188
+ this.allItemsPopover?.close();
189
+ }
190
+ else {
191
+ this.allItemsPopover?.showAt(this);
192
+ }
193
+ }
194
+ this.fireEvent("input");
195
+ }
196
+ _tokenDelete(e) {
197
+ const token = e.detail.ref;
198
+ const deletingItem = this.items.find(item => item._id === token.getAttribute("data-ui5-id"));
199
+ deletingItem.selected = false;
200
+ this._deleting = true;
201
+ this.fireSelectionChange();
202
+ }
203
+ get _getPlaceholder() {
204
+ if (this._getSelectedItems().length) {
205
+ return "";
206
+ }
207
+ return this.placeholder;
208
+ }
209
+ _handleArrowLeft() {
210
+ const inputDomRef = this._inputDom;
211
+ const cursorPosition = inputDomRef.selectionStart || 0;
212
+ const isTextSelected = ((inputDomRef.selectionEnd || 0) - cursorPosition) > 0;
213
+ if (cursorPosition === 0 && !isTextSelected) {
214
+ this._tokenizer._focusLastToken();
215
+ }
216
+ }
217
+ _tokenizerFocusOut(e) {
218
+ this._tokenizerFocused = false;
219
+ const tokensCount = this._tokenizer.tokens.length;
220
+ const selectedTokens = this._selectedTokensCount;
221
+ const lastTokenBeingDeleted = tokensCount - 1 === 0 && this._deleting;
222
+ const allTokensAreBeingDeleted = selectedTokens === tokensCount && this._deleting;
223
+ const relatedTarget = e.relatedTarget;
224
+ if (!relatedTarget || !relatedTarget.hasAttribute("ui5-token")) {
225
+ this._tokenizer.tokens.forEach(token => {
226
+ token.selected = false;
227
+ });
228
+ this._tokenizer.expanded = this._preventTokenizerToggle ? this._tokenizer.expanded : false;
229
+ }
230
+ if (allTokensAreBeingDeleted || lastTokenBeingDeleted) {
231
+ setTimeout(() => {
232
+ if (!isPhone()) {
233
+ this._inputDom.focus();
234
+ }
235
+ this._deleting = false;
236
+ }, 0);
237
+ }
238
+ }
239
+ _tokenizerFocusIn() {
240
+ this._tokenizerFocused = true;
241
+ this.focused = false;
242
+ }
243
+ _onkeydown(e) {
244
+ const isArrowDownCtrl = isDownCtrl(e);
245
+ if (isShow(e) && !this.disabled) {
246
+ this._handleShow(e);
247
+ return;
248
+ }
249
+ if (isDownShift(e) || isUpShift(e)) {
250
+ e.preventDefault();
251
+ return;
252
+ }
253
+ if (isUp(e) || isDown(e) || isUpCtrl(e) || isArrowDownCtrl) {
254
+ this._handleArrowNavigation(e, isArrowDownCtrl);
255
+ return;
256
+ }
257
+ // CTRL + Arrow Down navigation is performed by the ItemNavigation module of the List,
258
+ // here we only implement the text selection of the selected item
259
+ if (isArrowDownCtrl && !this.allItemsPopover?.opened) {
260
+ setTimeout(() => this._inputDom.setSelectionRange(0, this._inputDom.value.length), 0);
261
+ }
262
+ if (isLeftCtrl(e) || isRightCtrl(e)) {
263
+ this._handleArrowCtrl(e);
264
+ return;
265
+ }
266
+ if (isCtrlV(e) || isInsertShift(e)) {
267
+ this._handlePaste();
268
+ return;
269
+ }
270
+ if (isSpaceShift(e)) {
271
+ e.preventDefault();
272
+ }
273
+ if (e.key === "ArrowLeft"
274
+ || e.key === "Show"
275
+ || e.key === "PageUp"
276
+ || e.key === "PageDown"
277
+ || e.key === "Backspace"
278
+ || e.key === "Escape"
279
+ || e.key === "Home"
280
+ || e.key === "End"
281
+ || e.key === "Tab"
282
+ || e.key === "ArrowDown"
283
+ || e.key === "Enter") {
284
+ this[`_handle${e.key}`](e);
285
+ }
286
+ this._shouldAutocomplete = !this.noTypeahead && !(isBackSpace(e) || isDelete(e) || isEscape(e) || isEnter(e));
287
+ }
288
+ async _handlePaste() {
289
+ if (this.readonly) {
290
+ return;
291
+ }
292
+ const pastedText = await navigator.clipboard.readText();
293
+ if (!pastedText) {
294
+ return;
295
+ }
296
+ const separatedText = pastedText.split(/\r\n|\r|\n/g);
297
+ const matchingItems = this.items.filter(item => separatedText.indexOf(item.text) > -1 && !item.selected);
298
+ if (matchingItems.length) {
299
+ matchingItems.forEach(item => {
300
+ item.selected = true;
301
+ this.value = "";
302
+ this.fireSelectionChange();
303
+ });
304
+ }
305
+ else {
306
+ this.value = pastedText;
307
+ this.fireEvent("input");
308
+ }
309
+ }
310
+ _handleShow(e) {
311
+ const items = this.items;
312
+ const selectedItem = this._getSelectedItems()[0];
313
+ const focusedToken = this._tokenizer.tokens.find(token => token.focused);
314
+ const value = this.value;
315
+ const matchingItem = this.items.find(item => item.text.localeCompare(value, undefined, { sensitivity: "base" }) === 0);
316
+ e.preventDefault();
317
+ if (this.readonly) {
318
+ return;
319
+ }
320
+ this._isOpenedByKeyboard = true;
321
+ this._shouldFilterItems = false;
322
+ this._filteredItems = this.items;
323
+ this.togglePopover();
324
+ if (!focusedToken && matchingItem) {
325
+ this._itemToFocus = matchingItem;
326
+ return;
327
+ }
328
+ if (selectedItem && !focusedToken) {
329
+ this._itemToFocus = selectedItem;
330
+ }
331
+ else if (focusedToken && e.target === focusedToken) {
332
+ this._itemToFocus = items.find(item => item.text === focusedToken.text);
333
+ }
334
+ else {
335
+ this._itemToFocus = items[0];
336
+ }
337
+ }
338
+ _handlePageUp(e) {
339
+ e.preventDefault();
340
+ }
341
+ _handlePageDown(e) {
342
+ e.preventDefault();
343
+ }
344
+ _handleBackspace(e) {
345
+ if (e.target.value === "") {
346
+ e.preventDefault();
347
+ this._tokenizer._focusLastToken();
348
+ }
349
+ }
350
+ _handleEscape() {
351
+ const innerInput = this._innerInput;
352
+ const isAutoCompleted = ((innerInput.selectionEnd || 0) - (innerInput.selectionStart || 0)) > 0;
353
+ if (isAutoCompleted) {
354
+ this.value = this.valueBeforeAutoComplete;
355
+ }
356
+ if (!this.allowCustomValues || (!this.open && this.allowCustomValues)) {
357
+ this.value = this._lastValue;
358
+ }
359
+ }
360
+ _handleHome(e) {
361
+ const shouldFocusToken = this._isFocusInside && e.target.selectionStart === 0 && this._tokenizer.tokens.length > 0;
362
+ if (shouldFocusToken) {
363
+ e.preventDefault();
364
+ this._tokenizer.tokens[0].focus();
365
+ }
366
+ }
367
+ _handleEnd(e) {
368
+ const tokens = this._tokenizer.tokens;
369
+ const lastTokenIdx = tokens.length - 1;
370
+ const shouldFocusInput = e.target === tokens[lastTokenIdx] && tokens[lastTokenIdx] === this.shadowRoot.activeElement;
371
+ if (shouldFocusInput) {
372
+ e.preventDefault();
373
+ this._inputDom.focus();
374
+ }
375
+ }
376
+ _handleTab() {
377
+ this.allItemsPopover?.close();
378
+ }
379
+ _handleSelectAll() {
380
+ const filteredItems = this._filteredItems;
381
+ const allItemsSelected = filteredItems.every(item => item.selected);
382
+ filteredItems.forEach(item => {
383
+ item.selected = !allItemsSelected;
384
+ });
385
+ this.fireSelectionChange();
386
+ }
387
+ _onValueStateKeydown(e) {
388
+ const isArrowDown = isDown(e);
389
+ const isArrowUp = isUp(e);
390
+ if (isTabNext(e) || isTabPrevious(e)) {
391
+ this._onItemTab();
392
+ return;
393
+ }
394
+ e.preventDefault();
395
+ if (isArrowDown || isDownCtrl(e)) {
396
+ this._handleArrowDown();
397
+ }
398
+ if (isArrowUp || isUpCtrl(e)) {
399
+ this._shouldAutocomplete = true;
400
+ this._inputDom.focus();
401
+ }
402
+ }
403
+ async _onItemKeydown(e) {
404
+ const isFirstItem = this.list?.items[0] === e.target;
405
+ const isArrowUp = isUp(e) || isUpCtrl(e);
406
+ if (this.hasValueStateMessage && !this.valueStateHeader) {
407
+ await this._setValueStateHeader();
408
+ }
409
+ if (isTabNext(e) || isTabPrevious(e)) {
410
+ this._onItemTab();
411
+ return;
412
+ }
413
+ if (isHomeCtrl(e)) {
414
+ this.list?._itemNavigation._handleHome();
415
+ this.list?.items[this.list?._itemNavigation._currentIndex].focus();
416
+ }
417
+ if (isEndCtrl(e)) {
418
+ this.list?._itemNavigation._handleEnd();
419
+ this.list?.items[this.list?._itemNavigation._currentIndex].focus();
420
+ }
421
+ e.preventDefault();
422
+ if (isDownShift(e) || isUpShift(e)) {
423
+ this._handleItemRangeSelection(e);
424
+ return;
425
+ }
426
+ if ((isUpCtrl(e)) && !isFirstItem) {
427
+ this.list?._itemNavigation._handleUp();
428
+ this.list?.items[this.list?._itemNavigation._currentIndex].focus();
429
+ }
430
+ if (isDownCtrl(e)) {
431
+ this.list?._itemNavigation._handleDown();
432
+ this.list?.items[this.list?._itemNavigation._currentIndex].focus();
433
+ }
434
+ if (isShow(e)) {
435
+ this.togglePopover();
436
+ }
437
+ if (isCtrlA(e)) {
438
+ this._handleSelectAll();
439
+ return;
440
+ }
441
+ if (((isArrowUp && isFirstItem) || isHome(e)) && this.valueStateHeader) {
442
+ this.valueStateHeader.focus();
443
+ }
444
+ if (!this.valueStateHeader && isFirstItem && isArrowUp) {
445
+ this._inputDom.focus();
446
+ this._shouldAutocomplete = true;
447
+ }
448
+ }
449
+ _handleArrowCtrl(e) {
450
+ const input = this._inputDom;
451
+ const isArrowLeft = isLeftCtrl(e);
452
+ if (isArrowLeft && input.selectionStart === 0 && input.selectionEnd === 0) {
453
+ e.preventDefault();
454
+ }
455
+ if (isArrowLeft && ((input.selectionEnd || 0) - (input.selectionStart || 0) > 0)) {
456
+ input.setSelectionRange(0, 0);
457
+ }
458
+ }
459
+ _onItemTab() {
460
+ this._inputDom.focus();
461
+ this.allItemsPopover?.close();
462
+ }
463
+ async _handleArrowNavigation(e, isDownControl) {
464
+ const isArrowDown = isDownControl || isDown(e);
465
+ const hasSuggestions = this.items.length;
466
+ const isOpen = this.allItemsPopover?.opened;
467
+ e.preventDefault();
468
+ if (this.hasValueStateMessage && !this.valueStateHeader) {
469
+ await this._setValueStateHeader();
470
+ }
471
+ if (isArrowDown && isOpen && this.valueStateHeader) {
472
+ this.value = this.valueBeforeAutoComplete || this.value;
473
+ this.valueStateHeader.focus();
474
+ return;
475
+ }
476
+ if (isArrowDown && hasSuggestions) {
477
+ this._handleArrowDown();
478
+ }
479
+ if (!isArrowDown && !isOpen && !this.readonly) {
480
+ this._navigateToPrevItem();
481
+ }
482
+ }
483
+ _handleArrowDown() {
484
+ const isOpen = this.allItemsPopover?.opened;
485
+ const firstListItem = this.list?.items[0];
486
+ if (isOpen) {
487
+ firstListItem && this.list?._itemNavigation.setCurrentItem(firstListItem);
488
+ this.value = this.valueBeforeAutoComplete || this.value;
489
+ firstListItem?.focus();
490
+ }
491
+ else if (!this.readonly) {
492
+ this._navigateToNextItem();
493
+ }
494
+ }
495
+ _handleItemRangeSelection(e) {
496
+ const items = this.items;
497
+ const listItems = this.list?.items;
498
+ const currentItemIdx = listItems?.indexOf(e.target) || -1;
499
+ const nextItemIdx = currentItemIdx + 1;
500
+ const prevItemIdx = currentItemIdx - 1;
501
+ if (isDownShift(e) && items[nextItemIdx]) {
502
+ items[nextItemIdx].selected = items[currentItemIdx].selected;
503
+ items[nextItemIdx].focus();
504
+ }
505
+ if (isUpShift(e) && items[prevItemIdx]) {
506
+ items[prevItemIdx].selected = items[currentItemIdx].selected;
507
+ items[prevItemIdx].focus();
508
+ }
509
+ this.fireSelectionChange();
510
+ }
511
+ _navigateToNextItem() {
512
+ const items = this.items;
513
+ const itemsCount = items.length;
514
+ const previousItemIdx = this.currentItemIdx;
515
+ if (previousItemIdx > -1 && items[previousItemIdx].text !== this.value) {
516
+ this.currentItemIdx = -1;
517
+ }
518
+ if (previousItemIdx >= itemsCount - 1) {
519
+ return;
520
+ }
521
+ let currentItem = this.items[++this.currentItemIdx];
522
+ while ((this.currentItemIdx < itemsCount - 1 && currentItem.selected) || currentItem.isGroupItem) {
523
+ currentItem = this.items[++this.currentItemIdx];
524
+ }
525
+ if (currentItem.selected === true || currentItem.isGroupItem) {
526
+ this.currentItemIdx = previousItemIdx;
527
+ return;
528
+ }
529
+ this.value = currentItem.text;
530
+ this._innerInput.value = currentItem.text;
531
+ this._innerInput.setSelectionRange(0, currentItem.text.length);
532
+ }
533
+ _navigateToPrevItem() {
534
+ const items = this.items;
535
+ let previousItemIdx = this.currentItemIdx;
536
+ if ((!this.value && previousItemIdx !== -1) || (previousItemIdx !== -1 && this.value && this.value !== items[previousItemIdx].text)) {
537
+ previousItemIdx = -1;
538
+ }
539
+ if (previousItemIdx === -1) {
540
+ this.currentItemIdx = items.length;
541
+ }
542
+ if (previousItemIdx === 0) {
543
+ this.currentItemIdx = 0;
544
+ return;
545
+ }
546
+ let currentItem = this.items[--this.currentItemIdx];
547
+ while ((currentItem && this.currentItemIdx > 0) && (currentItem.selected || currentItem.isGroupItem)) {
548
+ currentItem = this.items[--this.currentItemIdx];
549
+ }
550
+ if (!currentItem) {
551
+ return;
552
+ }
553
+ if (currentItem.selected || currentItem.isGroupItem) {
554
+ this.currentItemIdx = previousItemIdx;
555
+ return;
556
+ }
557
+ this.value = currentItem.text;
558
+ this._innerInput.value = currentItem.text;
559
+ this._innerInput.setSelectionRange(0, currentItem.text.length);
560
+ }
561
+ _handleEnter() {
562
+ const lowerCaseValue = this.value.toLowerCase();
563
+ const matchingItem = this.items.find(item => (item.text.toLowerCase() === lowerCaseValue && !item.isGroupItem));
564
+ const oldValueState = this.valueState;
565
+ const innerInput = this._innerInput;
566
+ if (this.FormSupport) {
567
+ this.FormSupport.triggerFormSubmit(this);
568
+ }
569
+ if (matchingItem) {
570
+ if (matchingItem.selected) {
571
+ if (this._validationTimeout) {
572
+ return;
573
+ }
574
+ this.valueState = ValueState.Error;
575
+ this._performingSelectionTwice = true;
576
+ this._resetValueState(oldValueState, () => {
577
+ this._performingSelectionTwice = false;
578
+ });
579
+ }
580
+ else {
581
+ matchingItem.selected = true;
582
+ this.value = "";
583
+ this.fireSelectionChange();
584
+ }
585
+ innerInput.setSelectionRange(matchingItem.text.length, matchingItem.text.length);
586
+ this.allItemsPopover?.close();
587
+ }
588
+ }
589
+ _resetValueState(valueState, callback) {
590
+ this._validationTimeout = setTimeout(() => {
591
+ this.valueState = valueState;
592
+ this._validationTimeout = null;
593
+ callback && callback();
594
+ }, 2000);
595
+ }
596
+ _onTokenizerKeydown(e) {
597
+ const isCtrl = !!(e.metaKey || e.ctrlKey);
598
+ if (isRight(e)) {
599
+ const lastTokenIndex = this._tokenizer.tokens.length - this._tokenizer.overflownTokens.length - 1;
600
+ if (e.target === this._tokenizer.tokens[lastTokenIndex]) {
601
+ setTimeout(() => {
602
+ this._inputDom.focus();
603
+ }, 0);
604
+ }
605
+ }
606
+ if ((isCtrl && ["c", "x"].includes(e.key.toLowerCase())) || isDeleteShift(e) || isInsertCtrl(e)) {
607
+ e.preventDefault();
608
+ const isCut = e.key.toLowerCase() === "x" || isDeleteShift(e);
609
+ const selectedTokens = this._tokenizer.tokens.filter(token => token.selected);
610
+ if (isCut) {
611
+ const cutResult = this._tokenizer._fillClipboard(ClipboardDataOperation.cut, selectedTokens);
612
+ selectedTokens.forEach(token => {
613
+ this._tokenizer.deleteToken(token);
614
+ });
615
+ this.focus();
616
+ return cutResult;
617
+ }
618
+ return this._tokenizer._fillClipboard(ClipboardDataOperation.copy, selectedTokens);
619
+ }
620
+ if (isCtrlV(e) || isInsertShift(e)) {
621
+ this._handlePaste();
622
+ }
623
+ if (isHome(e)) {
624
+ this._handleHome(e);
625
+ }
626
+ if (isEnd(e)) {
627
+ this._handleEnd(e);
628
+ }
629
+ if (isShow(e) && !this.readonly && !this.disabled) {
630
+ this._preventTokenizerToggle = true;
631
+ this._handleShow(e);
632
+ }
633
+ }
634
+ _filterItems(str) {
635
+ const itemsToFilter = this.items.filter(item => !item.isGroupItem);
636
+ const filteredItems = (Filters[this.filter] || Filters.StartsWithPerTerm)(str, itemsToFilter, "text");
637
+ // Return the filtered items and their group items
638
+ return this.items.filter((item, idx, allItems) => MultiComboBox_1._groupItemFilter(item, ++idx, allItems, filteredItems) || filteredItems.indexOf(item) !== -1);
639
+ }
640
+ /**
641
+ * Returns true if the group header should be shown (if there is a filtered suggestion item for this group item)
642
+ *
643
+ * @private
644
+ */
645
+ static _groupItemFilter(item, idx, allItems, filteredItems) {
646
+ if (item.isGroupItem) {
647
+ let groupHasFilteredItems;
648
+ while (allItems[idx] && !allItems[idx].isGroupItem && !groupHasFilteredItems) {
649
+ groupHasFilteredItems = filteredItems.indexOf(allItems[idx]) !== -1;
650
+ idx++;
651
+ }
652
+ return groupHasFilteredItems;
653
+ }
654
+ }
655
+ _afterOpenPicker() {
656
+ this._toggle();
657
+ if (!isPhone() && !this._isOpenedByKeyboard) {
658
+ this._innerInput.focus();
659
+ }
660
+ else if (this._isOpenedByKeyboard) {
661
+ this._itemToFocus?.focus();
662
+ }
663
+ else {
664
+ this.allItemsPopover?.focus();
665
+ }
666
+ this._isOpenedByKeyboard = false;
667
+ }
668
+ _toggle() {
669
+ this.open = !this.open;
670
+ this.fireEvent("open-change");
671
+ }
672
+ _getSelectedItems() {
673
+ // Angular 2 way data binding
674
+ this.selectedValues = this.items.filter(item => item.selected);
675
+ return this.selectedValues;
676
+ }
677
+ _listSelectionChange(e) {
678
+ // sync list items and cb items
679
+ this.syncItems(e.target.items);
680
+ // don't call selection change right after selection as user can cancel it on phone
681
+ if (!isPhone()) {
682
+ this.fireSelectionChange();
683
+ }
684
+ // casted to KeyboardEvent since isSpace and isSpaceCtrl accepts KeyboardEvent only
685
+ const castedEvent = { key: e.detail.key };
686
+ if (!e.detail.selectionComponentPressed && !isSpace(castedEvent) && !isSpaceCtrl(castedEvent)) {
687
+ this.allItemsPopover?.close();
688
+ this.value = "";
689
+ // if the item (not checkbox) is clicked, call the selection change
690
+ if (isPhone()) {
691
+ this.fireSelectionChange();
692
+ }
693
+ this.fireEvent("input");
694
+ }
695
+ this.value = this.valueBeforeAutoComplete || "";
696
+ }
697
+ syncItems(listItems) {
698
+ listItems.forEach(item => {
699
+ this.items.forEach(mcbItem => {
700
+ if (mcbItem._id === item.getAttribute("data-ui5-token-id")) {
701
+ mcbItem.selected = item.selected;
702
+ }
703
+ });
704
+ });
705
+ }
706
+ fireSelectionChange() {
707
+ this.fireEvent("selection-change", { items: this._getSelectedItems() });
708
+ // Angular 2 way data binding
709
+ this.fireEvent("value-changed");
710
+ }
711
+ async _getRespPopover() {
712
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
713
+ this.allItemsPopover = staticAreaItem.querySelector(`.ui5-multi-combobox-all-items-responsive-popover`);
714
+ }
715
+ async _getList() {
716
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
717
+ this.list = staticAreaItem.querySelector(".ui5-multi-combobox-all-items-list");
718
+ return this.list;
719
+ }
720
+ _click() {
721
+ if (isPhone() && !this.readonly && !this._showMorePressed && !this._deleting) {
722
+ this.allItemsPopover?.showAt(this);
723
+ }
724
+ this._showMorePressed = false;
725
+ }
726
+ _afterClosePicker() {
727
+ // close device's keyboard and prevent further typing
728
+ if (isPhone()) {
729
+ this.blur();
730
+ }
731
+ this._toggle();
732
+ this._iconPressed = false;
733
+ this._preventTokenizerToggle = false;
734
+ this.filterSelected = false;
735
+ }
736
+ _beforeOpen() {
737
+ this._itemsBeforeOpen = this.items.map(item => {
738
+ return {
739
+ ref: item,
740
+ selected: item.selected,
741
+ };
742
+ });
743
+ this._valueBeforeOpen = this.value;
744
+ if (this.filterSelected) {
745
+ const selectedItems = this._filteredItems.filter(item => item.selected);
746
+ this.selectedItems = this.items.filter((item, idx, allItems) => MultiComboBox_1._groupItemFilter(item, ++idx, allItems, selectedItems) || selectedItems.indexOf(item) !== -1);
747
+ }
748
+ }
749
+ _handleTypeAhead(item, filterValue) {
750
+ if (!item) {
751
+ return;
752
+ }
753
+ const value = item.text;
754
+ const innerInput = this._innerInput;
755
+ filterValue = filterValue || "";
756
+ this.value = value;
757
+ innerInput.value = value;
758
+ innerInput.setSelectionRange(filterValue.length, value.length);
759
+ this._shouldAutocomplete = false;
760
+ }
761
+ _getFirstMatchingItem(current) {
762
+ if (!this.items.length) {
763
+ return;
764
+ }
765
+ const matchingItems = this._startsWithMatchingItems(current).filter(item => !item.isGroupItem && !item.selected);
766
+ if (matchingItems.length) {
767
+ return matchingItems[0];
768
+ }
769
+ }
770
+ _startsWithMatchingItems(str) {
771
+ return Filters.StartsWith(str, this.items, "text");
772
+ }
773
+ onBeforeRendering() {
774
+ const input = this._innerInput;
775
+ const autoCompletedChars = input && (input.selectionEnd || 0) - (input.selectionStart || 0);
776
+ const value = input && input.value;
777
+ this.FormSupport = getFeature("FormSupport");
778
+ this._inputLastValue = value;
779
+ if (input && !input.value) {
780
+ this.valueBeforeAutoComplete = "";
781
+ this._filteredItems = this.items;
782
+ }
783
+ this.items.forEach(item => {
784
+ item._getRealDomRef = () => this.allItemsPopover.querySelector(`*[data-ui5-stable=${item.stableDomRef}]`);
785
+ });
786
+ this.tokenizerAvailable = this._getSelectedItems().length > 0;
787
+ this.style.setProperty("--_ui5-input-icons-count", `${this.iconsCount}`);
788
+ if (!input || !value) {
789
+ return;
790
+ }
791
+ // Typehead causes issues on Android devices, so we disable it for now
792
+ // If there is already a selection the autocomplete has already been performed
793
+ if (this._shouldAutocomplete && !isAndroid() && !autoCompletedChars) {
794
+ const item = this._getFirstMatchingItem(value);
795
+ // Keep the original typed in text intact
796
+ this.valueBeforeAutoComplete = value;
797
+ item && this._handleTypeAhead(item, value);
798
+ }
799
+ if (this._shouldFilterItems) {
800
+ this._filteredItems = this._filterItems(this._shouldAutocomplete || !!autoCompletedChars ? this.valueBeforeAutoComplete : value);
801
+ }
802
+ else {
803
+ this._filteredItems = this.items;
804
+ }
805
+ }
806
+ async onAfterRendering() {
807
+ await this._getRespPopover();
808
+ await this._getList();
809
+ this.toggle(this.shouldDisplayOnlyValueStateMessage);
810
+ this.storeResponsivePopoverWidth();
811
+ this._deleting = false;
812
+ // force resize of the tokenizer on invalidation
813
+ this._tokenizer._handleResize();
814
+ }
815
+ get _isPhone() {
816
+ return isPhone();
817
+ }
818
+ _onIconMousedown() {
819
+ this._iconPressed = true;
820
+ }
821
+ storeResponsivePopoverWidth() {
822
+ if (this.open && !this._listWidth) {
823
+ this._listWidth = this.list.offsetWidth;
824
+ }
825
+ }
826
+ toggle(isToggled) {
827
+ if (isToggled && !this.open) {
828
+ this.openPopover();
829
+ }
830
+ else {
831
+ this.closePopover();
832
+ }
833
+ }
834
+ handleCancel() {
835
+ this._itemsBeforeOpen.forEach(item => {
836
+ item.ref.selected = item.selected;
837
+ });
838
+ this.togglePopover();
839
+ this.value = this._valueBeforeOpen;
840
+ }
841
+ handleOK() {
842
+ if (isPhone()) {
843
+ this.fireSelectionChange();
844
+ }
845
+ this.togglePopover();
846
+ }
847
+ async openPopover() {
848
+ (await this._getPopover())?.showAt(this);
849
+ }
850
+ _forwardFocusToInner() {
851
+ this._innerInput.focus();
852
+ }
853
+ async closePopover() {
854
+ (await this._getPopover())?.close();
855
+ }
856
+ async _getPopover() {
857
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
858
+ return (staticAreaItem.querySelector("[ui5-popover]"));
859
+ }
860
+ async _getResponsivePopover() {
861
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
862
+ return staticAreaItem.querySelector("[ui5-responsive-popover]");
863
+ }
864
+ async _setValueStateHeader() {
865
+ const responsivePopover = await this._getResponsivePopover();
866
+ this.valueStateHeader = responsivePopover.querySelector("div.ui5-responsive-popover-header.ui5-valuestatemessage-root");
867
+ }
868
+ get _tokenizer() {
869
+ return this.shadowRoot.querySelector("[ui5-tokenizer]");
870
+ }
871
+ inputFocusIn(e) {
872
+ if (!isPhone() || this.readonly) {
873
+ this.focused = true;
874
+ this._tokenizer.expanded = true;
875
+ }
876
+ else {
877
+ this._innerInput.blur();
878
+ }
879
+ if (!isPhone() && ((e.relatedTarget?.tagName !== "UI5-STATIC-AREA-ITEM") || !e.relatedTarget)) {
880
+ this._innerInput.setSelectionRange(0, this.value.length);
881
+ }
882
+ this._lastValue = this.value;
883
+ this.valueBeforeAutoComplete = "";
884
+ }
885
+ inputFocusOut(e) {
886
+ if (!this.shadowRoot.contains(e.relatedTarget) && !this._deleting) {
887
+ this.focused = false;
888
+ this._tokenizer.expanded = this.open;
889
+ // remove the value if user focus out the input and focus is not going in the popover
890
+ if (!isPhone() && !this.allowCustomValues && (this.staticAreaItem !== e.relatedTarget)) {
891
+ this.value = "";
892
+ }
893
+ }
894
+ }
895
+ get editable() {
896
+ return !this.readonly;
897
+ }
898
+ get _isFocusInside() {
899
+ return !isPhone() && (this.focused || this._tokenizerFocused);
900
+ }
901
+ get selectedItemsListMode() {
902
+ return this.readonly ? "None" : "MultiSelect";
903
+ }
904
+ get _listItemsType() {
905
+ return this.readonly ? "Inactive" : "Active";
906
+ }
907
+ get hasValueState() {
908
+ return this.valueState !== ValueState.None;
909
+ }
910
+ get hasValueStateMessage() {
911
+ return this.hasValueState && this.valueState !== ValueState.Success;
912
+ }
913
+ get ariaValueStateHiddenText() {
914
+ if (!this.hasValueState) {
915
+ return;
916
+ }
917
+ let text = "";
918
+ if (this.valueState !== ValueState.None) {
919
+ text = this.valueStateTypeMappings[this.valueState];
920
+ }
921
+ if (this.shouldDisplayDefaultValueStateMessage) {
922
+ return `${text} ${this.valueStateDefaultText || ""}`;
923
+ }
924
+ return `${text}`.concat(" ", this.valueStateMessageText.map(el => el.textContent).join(" "));
925
+ }
926
+ get valueStateDefaultText() {
927
+ if (this.valueState === ValueState.None) {
928
+ return "";
929
+ }
930
+ if (this._performingSelectionTwice) {
931
+ return MultiComboBox_1.i18nBundle.getText(VALUE_STATE_ERROR_ALREADY_SELECTED);
932
+ }
933
+ return this.valueStateTextMappings[this.valueState];
934
+ }
935
+ get valueStateTextId() {
936
+ return this.hasValueState ? `ui5-multi-combobox-valueStateDesc` : undefined;
937
+ }
938
+ get valueStateMessageText() {
939
+ return this.getSlottedNodes("valueStateMessage").map(el => el.cloneNode(true));
940
+ }
941
+ get ariaLabelText() {
942
+ return getEffectiveAriaLabelText(this);
943
+ }
944
+ /**
945
+ * This method is relevant for sap_horizon theme only
946
+ */
947
+ get _valueStateMessageIcon() {
948
+ if (this.valueState === ValueState.None) {
949
+ return "";
950
+ }
951
+ return {
952
+ [ValueState.Error]: "error",
953
+ [ValueState.Warning]: "alert",
954
+ [ValueState.Success]: "sys-enter-2",
955
+ [ValueState.Information]: "information",
956
+ }[this.valueState];
957
+ }
958
+ get _tokensCountText() {
959
+ if (!this._tokenizer) {
960
+ return;
961
+ }
962
+ return this._tokenizer._tokensCountText();
963
+ }
964
+ get _tokensCountTextId() {
965
+ return "ui5-multi-combobox-hiddenText-nMore";
966
+ }
967
+ get _selectedTokensCount() {
968
+ return this._tokenizer.tokens.filter(token => token.selected).length;
969
+ }
970
+ get ariaDescribedByText() {
971
+ return this.valueStateTextId ? `${this._tokensCountTextId} ${this.valueStateTextId}` : `${this._tokensCountTextId}`;
972
+ }
973
+ get shouldDisplayDefaultValueStateMessage() {
974
+ return !this.valueStateMessage.length && this.hasValueStateMessage;
975
+ }
976
+ get shouldDisplayOnlyValueStateMessage() {
977
+ return this.focused && !this.readonly && this.hasValueStateMessage && !this._iconPressed;
978
+ }
979
+ get valueStateTypeMappings() {
980
+ return {
981
+ [ValueState.Success]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_TYPE_SUCCESS),
982
+ [ValueState.Information]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_TYPE_INFORMATION),
983
+ [ValueState.Error]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_TYPE_ERROR),
984
+ [ValueState.Warning]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_TYPE_WARNING),
985
+ };
986
+ }
987
+ get valueStateTextMappings() {
988
+ return {
989
+ [ValueState.Success]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_SUCCESS),
990
+ [ValueState.Error]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_ERROR),
991
+ [ValueState.Warning]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_WARNING),
992
+ [ValueState.Information]: MultiComboBox_1.i18nBundle.getText(VALUE_STATE_INFORMATION),
993
+ };
994
+ }
995
+ get _innerInput() {
996
+ if (isPhone()) {
997
+ if (this.allItemsPopover?.opened) {
998
+ return this.allItemsPopover.querySelector("input");
999
+ }
1000
+ }
1001
+ return this._inputDom;
1002
+ }
1003
+ get _headerTitleText() {
1004
+ return MultiComboBox_1.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
1005
+ }
1006
+ get _iconAccessibleNameText() {
1007
+ return MultiComboBox_1.i18nBundle.getText(SELECT_OPTIONS);
1008
+ }
1009
+ get _dialogOkButton() {
1010
+ return MultiComboBox_1.i18nBundle.getText(MULTICOMBOBOX_DIALOG_OK_BUTTON);
1011
+ }
1012
+ get _tokenizerExpanded() {
1013
+ if (isPhone() || this.readonly) {
1014
+ return false;
1015
+ }
1016
+ if (this._preventTokenizerToggle) {
1017
+ return this._tokenizer.expanded;
1018
+ }
1019
+ const isCurrentlyExpanded = this._tokenizer?.expanded;
1020
+ const shouldBeExpanded = this.focused || this.open || isCurrentlyExpanded;
1021
+ return shouldBeExpanded;
1022
+ }
1023
+ get _valueStatePopoverHorizontalAlign() {
1024
+ return this.effectiveDir !== "rtl" ? "Left" : "Right";
1025
+ }
1026
+ get iconsCount() {
1027
+ const slottedIconsCount = this.icon?.length || 0;
1028
+ const arrowDownIconsCount = this.readonly ? 0 : 1;
1029
+ return slottedIconsCount + arrowDownIconsCount;
1030
+ }
1031
+ get classes() {
1032
+ return {
1033
+ popover: {
1034
+ "ui5-multi-combobox-all-items-responsive-popover": true,
1035
+ "ui5-suggestions-popover": true,
1036
+ "ui5-suggestions-popover-with-value-state-header": this.hasValueStateMessage,
1037
+ },
1038
+ popoverValueState: {
1039
+ "ui5-valuestatemessage-root": true,
1040
+ "ui5-valuestatemessage-header": true,
1041
+ "ui5-valuestatemessage--success": this.valueState === ValueState.Success,
1042
+ "ui5-valuestatemessage--error": this.valueState === ValueState.Error,
1043
+ "ui5-valuestatemessage--warning": this.valueState === ValueState.Warning,
1044
+ "ui5-valuestatemessage--information": this.valueState === ValueState.Information,
1045
+ },
1046
+ };
1047
+ }
1048
+ get styles() {
1049
+ const remSizeIxPx = parseInt(getComputedStyle(document.documentElement).fontSize);
1050
+ return {
1051
+ popoverValueStateMessage: {
1052
+ "width": `${this._listWidth || 0}px`,
1053
+ "display": this._listWidth === 0 ? "none" : "inline-block",
1054
+ },
1055
+ popoverHeader: {
1056
+ "max-width": isPhone() ? "100%" : `${this._inputWidth}px`,
1057
+ },
1058
+ suggestionsPopover: {
1059
+ "min-width": `${this._inputWidth}px`,
1060
+ "max-width": (this._inputWidth / remSizeIxPx) > 40 ? `${this._inputWidth}px` : "40rem",
1061
+ },
1062
+ };
1063
+ }
1064
+ static async onDefine() {
1065
+ MultiComboBox_1.i18nBundle = await getI18nBundle("@ui5/webcomponents");
1066
+ }
1067
+ };
1068
+ __decorate([
1069
+ property()
1070
+ ], MultiComboBox.prototype, "value", void 0);
1071
+ __decorate([
1072
+ property({ type: Boolean })
1073
+ ], MultiComboBox.prototype, "noTypeahead", void 0);
1074
+ __decorate([
1075
+ property()
1076
+ ], MultiComboBox.prototype, "placeholder", void 0);
1077
+ __decorate([
1078
+ property({ type: Boolean })
1079
+ ], MultiComboBox.prototype, "allowCustomValues", void 0);
1080
+ __decorate([
1081
+ property({ type: Boolean })
1082
+ ], MultiComboBox.prototype, "disabled", void 0);
1083
+ __decorate([
1084
+ property({ type: ValueState, defaultValue: ValueState.None })
1085
+ ], MultiComboBox.prototype, "valueState", void 0);
1086
+ __decorate([
1087
+ property({ type: Boolean })
1088
+ ], MultiComboBox.prototype, "readonly", void 0);
1089
+ __decorate([
1090
+ property({ type: Boolean })
1091
+ ], MultiComboBox.prototype, "required", void 0);
1092
+ __decorate([
1093
+ property({ type: ComboBoxFilter, defaultValue: ComboBoxFilter.StartsWithPerTerm })
1094
+ ], MultiComboBox.prototype, "filter", void 0);
1095
+ __decorate([
1096
+ property({ type: Boolean })
1097
+ ], MultiComboBox.prototype, "open", void 0);
1098
+ __decorate([
1099
+ property()
1100
+ ], MultiComboBox.prototype, "accessibleName", void 0);
1101
+ __decorate([
1102
+ property()
1103
+ ], MultiComboBox.prototype, "accessibleNameRef", void 0);
1104
+ __decorate([
1105
+ property({ type: Object, noAttribute: true, multiple: true })
1106
+ ], MultiComboBox.prototype, "_filteredItems", void 0);
1107
+ __decorate([
1108
+ property({ type: Boolean })
1109
+ ], MultiComboBox.prototype, "filterSelected", void 0);
1110
+ __decorate([
1111
+ property({ type: Boolean })
1112
+ ], MultiComboBox.prototype, "focused", void 0);
1113
+ __decorate([
1114
+ property({ type: Boolean, noAttribute: true })
1115
+ ], MultiComboBox.prototype, "_tokenizerFocused", void 0);
1116
+ __decorate([
1117
+ property({ type: Boolean, noAttribute: true })
1118
+ ], MultiComboBox.prototype, "_iconPressed", void 0);
1119
+ __decorate([
1120
+ property({ validator: Integer, noAttribute: true })
1121
+ ], MultiComboBox.prototype, "_inputWidth", void 0);
1122
+ __decorate([
1123
+ property({ validator: Integer, noAttribute: true, defaultValue: 0 })
1124
+ ], MultiComboBox.prototype, "_listWidth", void 0);
1125
+ __decorate([
1126
+ property({ type: Boolean, noAttribute: true })
1127
+ ], MultiComboBox.prototype, "_performingSelectionTwice", void 0);
1128
+ __decorate([
1129
+ property({ type: Boolean })
1130
+ ], MultiComboBox.prototype, "tokenizerAvailable", void 0);
1131
+ __decorate([
1132
+ slot({ type: HTMLElement, "default": true, invalidateOnChildChange: true })
1133
+ ], MultiComboBox.prototype, "items", void 0);
1134
+ __decorate([
1135
+ slot()
1136
+ ], MultiComboBox.prototype, "icon", void 0);
1137
+ __decorate([
1138
+ slot()
1139
+ ], MultiComboBox.prototype, "valueStateMessage", void 0);
1140
+ MultiComboBox = MultiComboBox_1 = __decorate([
1141
+ customElement({
1142
+ tag: "ui5-multi-combobox",
1143
+ languageAware: true,
1144
+ renderer: litRender,
1145
+ template: MultiComboBoxTemplate,
1146
+ staticAreaTemplate: MultiComboBoxPopoverTemplate,
1147
+ styles: multiCbxStyles,
1148
+ staticAreaStyles: [ResponsivePopoverCommonCss, ValueStateMessageCss, SuggestionsCss, MultiComboBoxPopover],
1149
+ dependencies: [
1150
+ MultiComboBoxItem,
1151
+ MultiComboBoxGroupItem,
1152
+ Tokenizer,
1153
+ Token,
1154
+ Icon,
1155
+ ResponsivePopover,
1156
+ Popover,
1157
+ List,
1158
+ StandardListItem,
1159
+ GroupHeaderListItem,
1160
+ ToggleButton,
1161
+ Button,
1162
+ ],
1163
+ })
1164
+ /**
1165
+ * Fired when the input operation has finished by pressing Enter or on focusout.
1166
+ *
1167
+ * @event sap.ui.webc.main.MultiComboBox#change
1168
+ * @public
1169
+ */
1170
+ ,
1171
+ event("change")
1172
+ /**
1173
+ * Fired when the value of the component changes at each keystroke.
1174
+ *
1175
+ * @event sap.ui.webc.main.MultiComboBox#input
1176
+ * @public
1177
+ */
1178
+ ,
1179
+ event("input")
1180
+ /**
1181
+ * Fired when the dropdown is opened or closed.
1182
+ *
1183
+ * @event sap.ui.webc.main.MultiComboBox#open-change
1184
+ * @since 1.0.0-rc.5
1185
+ * @public
1186
+ */
1187
+ ,
1188
+ event("open-change")
1189
+ /**
1190
+ * Fired when selection is changed by user interaction
1191
+ * in <code>SingleSelect</code> and <code>MultiSelect</code> modes.
1192
+ *
1193
+ * @event sap.ui.webc.main.MultiComboBox#selection-change
1194
+ * @param {Array} items an array of the selected items.
1195
+ * @public
1196
+ */
1197
+ ,
1198
+ event("selection-change", {
1199
+ detail: {
1200
+ items: { type: Array },
1201
+ },
1202
+ })
1203
+ ], MultiComboBox);
1659
1204
  MultiComboBox.define();
1660
-
1661
1205
  export default MultiComboBox;
1206
+ //# sourceMappingURL=MultiComboBox.js.map