@ui5/webcomponents 0.0.0-323968e1b → 0.0.0-4180fe799

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 (730) hide show
  1. package/CHANGELOG.md +717 -1
  2. package/README.md +144 -41
  3. package/csp.js +7 -0
  4. package/customI18n.js +50 -0
  5. package/dist/Assets-static.js +6 -0
  6. package/dist/Assets.js +3 -2
  7. package/dist/Avatar.js +224 -40
  8. package/dist/AvatarGroup.js +603 -0
  9. package/dist/Badge.js +48 -28
  10. package/dist/Breadcrumbs.js +563 -0
  11. package/dist/BreadcrumbsItem.js +109 -0
  12. package/dist/BusyIndicator.js +172 -19
  13. package/dist/Button.js +180 -49
  14. package/dist/Calendar.js +345 -554
  15. package/dist/CalendarDate.js +45 -0
  16. package/dist/CalendarHeader.js +133 -64
  17. package/dist/CalendarPart.js +111 -0
  18. package/dist/Card.js +47 -161
  19. package/dist/CardHeader.js +288 -0
  20. package/dist/Carousel.js +681 -0
  21. package/dist/CheckBox.js +154 -54
  22. package/dist/ColorPalette.js +493 -0
  23. package/dist/ColorPaletteItem.js +137 -0
  24. package/dist/ColorPalettePopover.js +219 -0
  25. package/dist/ColorPicker.js +524 -0
  26. package/dist/ComboBox.js +664 -107
  27. package/dist/ComboBoxFilters.js +8 -1
  28. package/dist/ComboBoxGroupItem.js +70 -0
  29. package/dist/ComboBoxItem.js +33 -30
  30. package/dist/CustomListItem.js +38 -9
  31. package/dist/DateComponentBase.js +170 -0
  32. package/dist/DatePicker.js +468 -384
  33. package/dist/DateRangePicker.js +328 -0
  34. package/dist/DateTimePicker.js +430 -0
  35. package/dist/DayPicker.js +513 -438
  36. package/dist/Dialog.js +501 -47
  37. package/dist/DurationPicker.js +312 -0
  38. package/dist/FileUploader.js +532 -0
  39. package/dist/GroupHeaderListItem.js +36 -8
  40. package/dist/Icon.js +221 -43
  41. package/dist/Input.js +796 -127
  42. package/dist/Interfaces.js +192 -0
  43. package/dist/Label.js +27 -12
  44. package/dist/Link.js +143 -35
  45. package/dist/List.js +560 -73
  46. package/dist/ListItem.js +139 -30
  47. package/dist/ListItemBase.js +53 -9
  48. package/dist/MessageStrip.js +82 -93
  49. package/dist/MonthPicker.js +181 -184
  50. package/dist/MultiComboBox.js +625 -200
  51. package/dist/MultiComboBoxItem.js +43 -0
  52. package/dist/MultiInput.js +301 -0
  53. package/dist/Option.js +48 -5
  54. package/dist/Panel.js +123 -41
  55. package/dist/Popover.js +314 -234
  56. package/dist/Popup.js +382 -287
  57. package/dist/ProgressIndicator.js +235 -0
  58. package/dist/RadioButton.js +153 -66
  59. package/dist/RadioButtonGroup.js +53 -29
  60. package/dist/RangeSlider.js +769 -0
  61. package/dist/RatingIndicator.js +291 -0
  62. package/dist/ResponsivePopover.js +117 -61
  63. package/dist/SegmentedButton.js +290 -0
  64. package/dist/SegmentedButtonItem.js +109 -0
  65. package/dist/Select.js +500 -110
  66. package/dist/Slider.js +320 -0
  67. package/dist/SliderBase.js +842 -0
  68. package/dist/StandardListItem.js +46 -24
  69. package/dist/StepInput.js +684 -0
  70. package/dist/SuggestionGroupItem.js +64 -0
  71. package/dist/SuggestionItem.js +146 -0
  72. package/dist/SuggestionListItem.js +76 -0
  73. package/dist/Switch.js +62 -48
  74. package/dist/Tab.js +184 -18
  75. package/dist/TabContainer.js +337 -235
  76. package/dist/TabSeparator.js +2 -1
  77. package/dist/Table.js +492 -39
  78. package/dist/TableCell.js +13 -15
  79. package/dist/TableColumn.js +18 -7
  80. package/dist/TableGroupRow.js +160 -0
  81. package/dist/TableRow.js +254 -31
  82. package/dist/TextArea.js +314 -38
  83. package/dist/TimePicker.js +166 -0
  84. package/dist/TimePickerBase.js +463 -0
  85. package/dist/TimeSelection.js +493 -0
  86. package/dist/Title.js +18 -10
  87. package/dist/Toast.js +63 -37
  88. package/dist/ToggleButton.js +21 -13
  89. package/dist/Token.js +87 -49
  90. package/dist/Tokenizer.js +250 -65
  91. package/dist/Tree.js +443 -0
  92. package/dist/TreeItem.js +168 -0
  93. package/dist/TreeListItem.js +332 -0
  94. package/dist/WheelSlider.js +435 -0
  95. package/dist/YearPicker.js +201 -258
  96. package/dist/api.json +6877 -0
  97. package/dist/features/ColorPaletteMoreColors.js +42 -0
  98. package/dist/features/InputElementsFormSupport.js +35 -1
  99. package/dist/features/InputSuggestions.js +294 -52
  100. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -0
  105. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -0
  110. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -0
  111. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -0
  112. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -0
  113. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  114. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -0
  115. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  116. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  117. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  118. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -0
  119. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  120. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  121. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  122. package/dist/generated/assets/i18n/messagebundle_in.json +1 -0
  123. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  124. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  125. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  126. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  127. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  128. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  129. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  130. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  131. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  132. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  133. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  134. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  135. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -0
  136. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  137. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  138. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  139. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  140. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  141. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  142. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  143. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  144. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  145. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  146. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  147. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  148. package/dist/generated/assets/themes/sap_belize/parameters-bundle.css.json +1 -1
  149. package/dist/generated/assets/themes/sap_belize_hcb/parameters-bundle.css.json +1 -1
  150. package/dist/generated/assets/themes/sap_belize_hcw/parameters-bundle.css.json +1 -0
  151. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  152. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  153. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -0
  154. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -0
  155. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -0
  156. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -0
  157. package/dist/generated/i18n/i18n-defaults.js +2 -2
  158. package/dist/generated/json-imports/Themes-static.js +35 -0
  159. package/dist/generated/json-imports/Themes.js +23 -13
  160. package/dist/generated/json-imports/i18n-static.js +162 -0
  161. package/dist/generated/json-imports/i18n.js +113 -89
  162. package/dist/generated/templates/AvatarGroupTemplate.lit.js +9 -0
  163. package/dist/generated/templates/AvatarTemplate.lit.js +9 -9
  164. package/dist/generated/templates/BadgeTemplate.lit.js +5 -6
  165. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js +8 -0
  166. package/dist/generated/templates/BreadcrumbsTemplate.lit.js +9 -0
  167. package/dist/generated/templates/BusyIndicatorTemplate.lit.js +7 -5
  168. package/dist/generated/templates/ButtonTemplate.lit.js +6 -6
  169. package/dist/generated/templates/CalendarHeaderTemplate.lit.js +6 -4
  170. package/dist/generated/templates/CalendarTemplate.lit.js +4 -4
  171. package/dist/generated/templates/CardHeaderTemplate.lit.js +12 -0
  172. package/dist/generated/templates/CardTemplate.lit.js +5 -8
  173. package/dist/generated/templates/CarouselTemplate.lit.js +16 -0
  174. package/dist/generated/templates/CheckBoxTemplate.lit.js +7 -7
  175. package/dist/generated/templates/ColorPaletteDialogTemplate.lit.js +7 -0
  176. package/dist/generated/templates/ColorPaletteItemTemplate.lit.js +7 -0
  177. package/dist/generated/templates/ColorPalettePopoverTemplate.lit.js +8 -0
  178. package/dist/generated/templates/ColorPaletteTemplate.lit.js +12 -0
  179. package/dist/generated/templates/ColorPickerTemplate.lit.js +7 -0
  180. package/dist/generated/templates/ComboBoxPopoverTemplate.lit.js +20 -5
  181. package/dist/generated/templates/ComboBoxTemplate.lit.js +8 -5
  182. package/dist/generated/templates/CustomListItemTemplate.lit.js +13 -12
  183. package/dist/generated/templates/DatePickerPopoverTemplate.lit.js +7 -4
  184. package/dist/generated/templates/DatePickerTemplate.lit.js +6 -5
  185. package/dist/generated/templates/DateTimePickerPopoverTemplate.lit.js +12 -0
  186. package/dist/generated/templates/DayPickerTemplate.lit.js +13 -11
  187. package/dist/generated/templates/DialogTemplate.lit.js +9 -8
  188. package/dist/generated/templates/FileUploaderPopoverTemplate.lit.js +10 -0
  189. package/dist/generated/templates/FileUploaderTemplate.lit.js +10 -0
  190. package/dist/generated/templates/GroupHeaderListItemTemplate.lit.js +4 -4
  191. package/dist/generated/templates/IconTemplate.lit.js +6 -6
  192. package/dist/generated/templates/InputPopoverTemplate.lit.js +24 -6
  193. package/dist/generated/templates/InputTemplate.lit.js +9 -8
  194. package/dist/generated/templates/LabelTemplate.lit.js +4 -4
  195. package/dist/generated/templates/LinkTemplate.lit.js +5 -5
  196. package/dist/generated/templates/ListItemTemplate.lit.js +13 -12
  197. package/dist/generated/templates/ListTemplate.lit.js +12 -8
  198. package/dist/generated/templates/MessageStripTemplate.lit.js +6 -22
  199. package/dist/generated/templates/MonthPickerTemplate.lit.js +6 -6
  200. package/dist/generated/templates/MultiComboBoxPopoverTemplate.lit.js +23 -7
  201. package/dist/generated/templates/MultiComboBoxTemplate.lit.js +10 -8
  202. package/dist/generated/templates/MultiInputTemplate.lit.js +16 -0
  203. package/dist/generated/templates/PanelTemplate.lit.js +9 -6
  204. package/dist/generated/templates/PopoverTemplate.lit.js +9 -9
  205. package/dist/generated/templates/PopupBlockLayerTemplate.lit.js +7 -0
  206. package/dist/generated/templates/PopupTemplate.lit.js +4 -4
  207. package/dist/generated/templates/ProgressIndicatorTemplate.lit.js +17 -0
  208. package/dist/generated/templates/RadioButtonTemplate.lit.js +7 -7
  209. package/dist/generated/templates/RangeSliderTemplate.lit.js +13 -0
  210. package/dist/generated/templates/RatingIndicatorTemplate.lit.js +14 -0
  211. package/dist/generated/templates/ResponsivePopoverTemplate.lit.js +16 -11
  212. package/dist/generated/templates/SegmentedButtonItemTemplate.lit.js +8 -0
  213. package/dist/generated/templates/SegmentedButtonTemplate.lit.js +7 -0
  214. package/dist/generated/templates/SelectPopoverTemplate.lit.js +20 -6
  215. package/dist/generated/templates/SelectTemplate.lit.js +6 -4
  216. package/dist/generated/templates/SliderBaseTemplate.lit.js +11 -0
  217. package/dist/generated/templates/SliderTemplate.lit.js +12 -0
  218. package/dist/generated/templates/StandardListItemTemplate.lit.js +21 -18
  219. package/dist/generated/templates/StepInputTemplate.lit.js +10 -0
  220. package/dist/generated/templates/SuggestionListItemTemplate.lit.js +27 -0
  221. package/dist/generated/templates/SwitchTemplate.lit.js +8 -6
  222. package/dist/generated/templates/TabContainerPopoverTemplate.lit.js +6 -8
  223. package/dist/generated/templates/TabContainerTemplate.lit.js +16 -18
  224. package/dist/generated/templates/TabInOverflowTemplate.lit.js +9 -0
  225. package/dist/generated/templates/TabInStripTemplate.lit.js +11 -0
  226. package/dist/generated/templates/TabSeparatorTemplate.lit.js +4 -4
  227. package/dist/generated/templates/TabTemplate.lit.js +4 -4
  228. package/dist/generated/templates/TableCellTemplate.lit.js +4 -4
  229. package/dist/generated/templates/TableColumnTemplate.lit.js +4 -4
  230. package/dist/generated/templates/TableGroupRowTemplate.lit.js +7 -0
  231. package/dist/generated/templates/TableRowTemplate.lit.js +12 -6
  232. package/dist/generated/templates/TableTemplate.lit.js +13 -8
  233. package/dist/generated/templates/TextAreaPopoverTemplate.lit.js +11 -0
  234. package/dist/generated/templates/TextAreaTemplate.lit.js +8 -8
  235. package/dist/generated/templates/TimePickerPopoverTemplate.lit.js +7 -0
  236. package/dist/generated/templates/TimePickerTemplate.lit.js +9 -0
  237. package/dist/generated/templates/TimeSelectionTemplate.lit.js +11 -0
  238. package/dist/generated/templates/TitleTemplate.lit.js +10 -10
  239. package/dist/generated/templates/ToastTemplate.lit.js +5 -4
  240. package/dist/generated/templates/ToggleButtonTemplate.lit.js +6 -6
  241. package/dist/generated/templates/TokenTemplate.lit.js +7 -5
  242. package/dist/generated/templates/TokenizerPopoverTemplate.lit.js +12 -0
  243. package/dist/generated/templates/TokenizerTemplate.lit.js +6 -6
  244. package/dist/generated/templates/TreeListItemTemplate.lit.js +21 -0
  245. package/dist/generated/templates/TreeTemplate.lit.js +8 -0
  246. package/dist/generated/templates/WheelSliderTemplate.lit.js +10 -0
  247. package/dist/generated/templates/YearPickerTemplate.lit.js +6 -6
  248. package/dist/generated/themes/Avatar.css.js +6 -7
  249. package/dist/generated/themes/AvatarGroup.css.js +8 -0
  250. package/dist/generated/themes/Badge.css.js +6 -7
  251. package/dist/generated/themes/Breadcrumbs.css.js +8 -0
  252. package/dist/generated/themes/BreadcrumbsPopover.css.js +8 -0
  253. package/dist/generated/themes/BrowserScrollbar.css.js +8 -0
  254. package/dist/generated/themes/BusyIndicator.css.js +6 -7
  255. package/dist/generated/themes/Button.css.js +6 -7
  256. package/dist/generated/themes/Button.ie11.css.js +8 -0
  257. package/dist/generated/themes/Calendar.css.js +6 -7
  258. package/dist/generated/themes/CalendarHeader.css.js +6 -7
  259. package/dist/generated/themes/Card.css.js +6 -7
  260. package/dist/generated/themes/CardHeader.css.js +8 -0
  261. package/dist/generated/themes/Carousel.css.js +8 -0
  262. package/dist/generated/themes/CheckBox.css.js +6 -7
  263. package/dist/generated/themes/ColorPalette.css.js +8 -0
  264. package/dist/generated/themes/ColorPaletteItem.css.js +8 -0
  265. package/dist/generated/themes/ColorPalettePopover.css.js +8 -0
  266. package/dist/generated/themes/ColorPaletteStaticArea.css.js +8 -0
  267. package/dist/generated/themes/ColorPicker.css.js +8 -0
  268. package/dist/generated/themes/ComboBox.css.js +6 -7
  269. package/dist/generated/themes/ComboBoxPopover.css.js +6 -7
  270. package/dist/generated/themes/CustomListItem.css.js +6 -7
  271. package/dist/generated/themes/DatePicker.css.js +6 -7
  272. package/dist/generated/themes/DatePickerPopover.css.js +6 -7
  273. package/dist/generated/themes/DateRangePicker.css.js +8 -0
  274. package/dist/generated/themes/DateTimePicker.css.js +8 -0
  275. package/dist/generated/themes/DateTimePickerPopover.css.js +8 -0
  276. package/dist/generated/themes/DayPicker.css.js +6 -7
  277. package/dist/generated/themes/Dialog.css.js +6 -7
  278. package/dist/generated/themes/FileUploader.css.js +8 -0
  279. package/dist/generated/themes/GroupHeaderListItem.css.js +6 -7
  280. package/dist/generated/themes/GrowingButton.css.js +8 -0
  281. package/dist/generated/themes/Icon.css.js +6 -7
  282. package/dist/generated/themes/Input.css.js +6 -7
  283. package/dist/generated/themes/InputIcon.css.js +6 -7
  284. package/dist/generated/themes/InvisibleTextStyles.css.js +6 -7
  285. package/dist/generated/themes/Label.css.js +6 -7
  286. package/dist/generated/themes/Link.css.js +6 -7
  287. package/dist/generated/themes/List.css.js +6 -7
  288. package/dist/generated/themes/ListItem.css.js +6 -7
  289. package/dist/generated/themes/ListItemBase.css.js +6 -7
  290. package/dist/generated/themes/MessageStrip.css.js +6 -7
  291. package/dist/generated/themes/MonthPicker.css.js +6 -7
  292. package/dist/generated/themes/MultiComboBox.css.js +6 -7
  293. package/dist/generated/themes/MultiInput.css.js +8 -0
  294. package/dist/generated/themes/Panel.css.js +6 -7
  295. package/dist/generated/themes/Popover.css.js +6 -7
  296. package/dist/generated/themes/Popup.css.js +6 -7
  297. package/dist/generated/themes/PopupGlobal.css.js +8 -0
  298. package/dist/generated/themes/PopupStaticAreaStyles.css.js +8 -0
  299. package/dist/generated/themes/PopupsCommon.css.js +8 -0
  300. package/dist/generated/themes/ProgressIndicator.css.js +8 -0
  301. package/dist/generated/themes/RadioButton.css.js +6 -7
  302. package/dist/generated/themes/RatingIndicator.css.js +8 -0
  303. package/dist/generated/themes/ResponsivePopover.css.js +6 -7
  304. package/dist/generated/themes/ResponsivePopoverCommon.css.js +6 -7
  305. package/dist/generated/themes/SegmentedButton.css.js +8 -0
  306. package/dist/generated/themes/Select.css.js +6 -7
  307. package/dist/generated/themes/SelectPopover.css.js +8 -0
  308. package/dist/generated/themes/SliderBase.css.js +8 -0
  309. package/dist/generated/themes/StepInput.css.js +8 -0
  310. package/dist/generated/themes/Suggestions.css.js +8 -0
  311. package/dist/generated/themes/Switch.css.js +6 -7
  312. package/dist/generated/themes/Tab.css.js +6 -7
  313. package/dist/generated/themes/TabContainer.css.js +6 -7
  314. package/dist/generated/themes/TabInOverflow.css.js +8 -0
  315. package/dist/generated/themes/TabInStrip.css.js +8 -0
  316. package/dist/generated/themes/Table.css.js +6 -7
  317. package/dist/generated/themes/TableCell.css.js +6 -7
  318. package/dist/generated/themes/TableColumn.css.js +6 -7
  319. package/dist/generated/themes/TableGroupRow.css.js +8 -0
  320. package/dist/generated/themes/TableRow.css.js +6 -7
  321. package/dist/generated/themes/TapHighlightColor.css.js +8 -0
  322. package/dist/generated/themes/TextArea.css.js +6 -7
  323. package/dist/generated/themes/TimePicker.css.js +8 -0
  324. package/dist/generated/themes/TimePickerPopover.css.js +8 -0
  325. package/dist/generated/themes/TimeSelection.css.js +8 -0
  326. package/dist/generated/themes/Title.css.js +6 -7
  327. package/dist/generated/themes/Toast.css.js +6 -7
  328. package/dist/generated/themes/ToggleButton.css.js +6 -7
  329. package/dist/generated/themes/ToggleButton.ie11.css.js +8 -0
  330. package/dist/generated/themes/Token.css.js +6 -7
  331. package/dist/generated/themes/Tokenizer.css.js +6 -7
  332. package/dist/generated/themes/Tree.css.js +8 -0
  333. package/dist/generated/themes/TreeListItem.css.js +8 -0
  334. package/dist/generated/themes/ValueStateMessage.css.js +8 -0
  335. package/dist/generated/themes/WheelSlider.css.js +8 -0
  336. package/dist/generated/themes/YearPicker.css.js +6 -7
  337. package/dist/generated/themes/sap_belize/parameters-bundle.css.js +1 -1
  338. package/dist/generated/themes/sap_belize_hcb/parameters-bundle.css.js +1 -1
  339. package/dist/generated/themes/sap_belize_hcw/parameters-bundle.css.js +1 -0
  340. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  341. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  342. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -0
  343. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -0
  344. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -0
  345. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -0
  346. package/dist/i18n/messagebundle.properties +335 -0
  347. package/dist/i18n/messagebundle_ar.properties +224 -0
  348. package/dist/i18n/messagebundle_bg.properties +224 -0
  349. package/dist/i18n/messagebundle_ca.properties +224 -0
  350. package/dist/i18n/messagebundle_cs.properties +224 -0
  351. package/dist/i18n/messagebundle_cy.properties +224 -0
  352. package/dist/i18n/messagebundle_da.properties +224 -0
  353. package/dist/i18n/messagebundle_de.properties +224 -0
  354. package/dist/i18n/messagebundle_el.properties +224 -0
  355. package/dist/i18n/messagebundle_en.properties +224 -0
  356. package/dist/i18n/messagebundle_en_GB.properties +224 -0
  357. package/dist/i18n/messagebundle_en_US_sappsd.properties +224 -0
  358. package/dist/i18n/messagebundle_en_US_saprigi.properties +224 -0
  359. package/dist/i18n/messagebundle_en_US_saptrc.properties +224 -0
  360. package/dist/i18n/messagebundle_es.properties +224 -0
  361. package/dist/i18n/messagebundle_es_MX.properties +224 -0
  362. package/dist/i18n/messagebundle_et.properties +224 -0
  363. package/dist/i18n/messagebundle_fi.properties +224 -0
  364. package/dist/i18n/messagebundle_fr.properties +224 -0
  365. package/dist/i18n/messagebundle_fr_CA.properties +224 -0
  366. package/dist/i18n/messagebundle_hi.properties +224 -0
  367. package/dist/i18n/messagebundle_hr.properties +224 -0
  368. package/dist/i18n/messagebundle_hu.properties +224 -0
  369. package/dist/i18n/messagebundle_id.properties +224 -0
  370. package/dist/i18n/messagebundle_in.properties +172 -0
  371. package/dist/i18n/messagebundle_it.properties +224 -0
  372. package/dist/i18n/messagebundle_iw.properties +224 -0
  373. package/dist/i18n/messagebundle_ja.properties +224 -0
  374. package/dist/i18n/messagebundle_kk.properties +224 -0
  375. package/dist/i18n/messagebundle_ko.properties +224 -0
  376. package/dist/i18n/messagebundle_lt.properties +224 -0
  377. package/dist/i18n/messagebundle_lv.properties +224 -0
  378. package/dist/i18n/messagebundle_ms.properties +224 -0
  379. package/dist/i18n/messagebundle_nl.properties +224 -0
  380. package/dist/i18n/messagebundle_no.properties +224 -0
  381. package/dist/i18n/messagebundle_pl.properties +224 -0
  382. package/dist/i18n/messagebundle_pt.properties +224 -0
  383. package/dist/i18n/messagebundle_pt_PT.properties +224 -0
  384. package/dist/i18n/messagebundle_ro.properties +224 -0
  385. package/dist/i18n/messagebundle_ru.properties +224 -0
  386. package/dist/i18n/messagebundle_sh.properties +224 -0
  387. package/dist/i18n/messagebundle_sk.properties +224 -0
  388. package/dist/i18n/messagebundle_sl.properties +224 -0
  389. package/dist/i18n/messagebundle_sv.properties +224 -0
  390. package/dist/i18n/messagebundle_th.properties +224 -0
  391. package/dist/i18n/messagebundle_tr.properties +224 -0
  392. package/dist/i18n/messagebundle_uk.properties +224 -0
  393. package/dist/i18n/messagebundle_vi.properties +224 -0
  394. package/dist/i18n/messagebundle_zh_CN.properties +224 -0
  395. package/dist/i18n/messagebundle_zh_TW.properties +224 -0
  396. package/dist/popup-utils/OpenedPopupsRegistry.js +18 -13
  397. package/dist/popup-utils/PopoverRegistry.js +55 -21
  398. package/dist/timepicker-utils/TimeSlider.js +103 -0
  399. package/dist/types/{AvatarBackgroundColor.js → AvatarColorScheme.js} +9 -9
  400. package/dist/types/AvatarGroupType.js +43 -0
  401. package/dist/types/AvatarShape.js +1 -1
  402. package/dist/types/AvatarSize.js +1 -1
  403. package/dist/types/BreadcrumbsDesign.js +42 -0
  404. package/dist/types/BreadcrumbsSeparatorStyle.js +69 -0
  405. package/dist/types/BusyIndicatorSize.js +1 -1
  406. package/dist/types/ButtonDesign.js +8 -1
  407. package/dist/types/CalendarSelectionMode.js +47 -0
  408. package/dist/types/CarouselArrowsPlacement.js +40 -0
  409. package/dist/types/GrowingMode.js +48 -0
  410. package/dist/types/InputType.js +7 -7
  411. package/dist/types/LinkDesign.js +1 -1
  412. package/dist/types/ListGrowingMode.js +15 -0
  413. package/dist/types/ListItemType.js +8 -1
  414. package/dist/types/ListMode.js +9 -1
  415. package/dist/types/ListSeparators.js +1 -1
  416. package/dist/types/{MessageStripType.js → MessageStripDesign.js} +7 -7
  417. package/dist/types/PanelAccessibleRole.js +1 -1
  418. package/dist/types/PopoverHorizontalAlign.js +1 -1
  419. package/dist/types/PopoverPlacementType.js +2 -2
  420. package/dist/types/PopoverVerticalAlign.js +1 -2
  421. package/dist/types/Priority.js +55 -0
  422. package/dist/types/SemanticColor.js +1 -1
  423. package/dist/types/SwitchDesign.js +40 -0
  424. package/dist/types/TabContainerTabsPlacement.js +40 -0
  425. package/dist/types/TabLayout.js +40 -0
  426. package/dist/types/TableGrowingMode.js +15 -0
  427. package/dist/types/TableMode.js +47 -0
  428. package/dist/types/TableRowType.js +40 -0
  429. package/dist/types/TitleLevel.js +1 -1
  430. package/dist/types/ToastPlacement.js +1 -2
  431. package/dist/types/WrappingType.js +41 -0
  432. package/dist/webcomponentsjs/CHANGELOG.md +61 -0
  433. package/dist/webcomponentsjs/README.md +64 -47
  434. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +38 -38
  435. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +1 -1
  436. package/dist/webcomponentsjs/bundles/webcomponents-pf_dom.js +60 -0
  437. package/dist/webcomponentsjs/bundles/webcomponents-pf_dom.js.map +1 -0
  438. package/dist/webcomponentsjs/bundles/webcomponents-pf_js.js +95 -0
  439. package/dist/webcomponentsjs/bundles/webcomponents-pf_js.js.map +1 -0
  440. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +292 -229
  441. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +1 -1
  442. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +190 -170
  443. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +1 -1
  444. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +151 -132
  445. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +1 -1
  446. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +2 -2
  447. package/dist/webcomponentsjs/webcomponents-bundle.js +302 -230
  448. package/dist/webcomponentsjs/webcomponents-bundle.js.map +1 -1
  449. package/dist/webcomponentsjs/webcomponents-loader.js +49 -28
  450. package/package-scripts.js +1 -0
  451. package/package.json +23 -8
  452. package/src/Assets-static.js +6 -0
  453. package/src/Assets.js +7 -0
  454. package/src/Avatar.hbs +20 -0
  455. package/src/Avatar.js +392 -0
  456. package/src/AvatarGroup.hbs +30 -0
  457. package/src/AvatarGroup.js +603 -0
  458. package/src/Badge.hbs +14 -0
  459. package/src/Badge.js +165 -0
  460. package/src/Breadcrumbs.hbs +42 -0
  461. package/src/Breadcrumbs.js +563 -0
  462. package/src/BreadcrumbsItem.js +109 -0
  463. package/src/BreadcrumbsPopover.hbs +28 -0
  464. package/src/BusyIndicator.hbs +32 -0
  465. package/src/BusyIndicator.js +269 -0
  466. package/src/Button.hbs +45 -0
  467. package/src/Button.js +463 -0
  468. package/src/Calendar.hbs +69 -0
  469. package/src/Calendar.js +489 -0
  470. package/src/CalendarDate.js +45 -0
  471. package/src/CalendarHeader.hbs +54 -0
  472. package/src/CalendarHeader.js +209 -0
  473. package/src/CalendarPart.js +111 -0
  474. package/src/Card.hbs +14 -0
  475. package/src/Card.js +160 -0
  476. package/src/CardHeader.hbs +35 -0
  477. package/src/CardHeader.js +288 -0
  478. package/src/Carousel.hbs +85 -0
  479. package/src/Carousel.js +681 -0
  480. package/src/CheckBox.hbs +44 -0
  481. package/src/CheckBox.js +424 -0
  482. package/src/ColorPalette.hbs +52 -0
  483. package/src/ColorPalette.js +493 -0
  484. package/src/ColorPaletteDialog.hbs +18 -0
  485. package/src/ColorPaletteItem.hbs +11 -0
  486. package/src/ColorPaletteItem.js +137 -0
  487. package/src/ColorPalettePopover.hbs +29 -0
  488. package/src/ColorPalettePopover.js +219 -0
  489. package/src/ColorPicker.hbs +98 -0
  490. package/src/ColorPicker.js +524 -0
  491. package/src/ComboBox.hbs +49 -0
  492. package/src/ComboBox.js +1041 -0
  493. package/src/ComboBoxFilters.js +40 -0
  494. package/src/ComboBoxGroupItem.js +70 -0
  495. package/src/ComboBoxItem.js +49 -0
  496. package/src/ComboBoxPopover.hbs +125 -0
  497. package/src/CustomListItem.hbs +5 -0
  498. package/src/CustomListItem.js +99 -0
  499. package/src/DateComponentBase.js +170 -0
  500. package/src/DatePicker.hbs +44 -0
  501. package/src/DatePicker.js +823 -0
  502. package/src/DatePickerPopover.hbs +63 -0
  503. package/src/DateRangePicker.js +328 -0
  504. package/src/DateTimePicker.js +430 -0
  505. package/src/DateTimePickerPopover.hbs +74 -0
  506. package/src/DayPicker.hbs +66 -0
  507. package/src/DayPicker.js +754 -0
  508. package/src/Dialog.hbs +35 -0
  509. package/src/Dialog.js +601 -0
  510. package/src/DurationPicker.js +312 -0
  511. package/src/FileUploader.hbs +40 -0
  512. package/src/FileUploader.js +532 -0
  513. package/src/FileUploaderPopover.hbs +25 -0
  514. package/src/GroupHeaderListItem.hbs +15 -0
  515. package/src/GroupHeaderListItem.js +94 -0
  516. package/src/Icon.hbs +25 -0
  517. package/src/Icon.js +373 -0
  518. package/src/Input.hbs +78 -0
  519. package/src/Input.js +1381 -0
  520. package/src/InputPopover.hbs +118 -0
  521. package/src/Interfaces.js +192 -0
  522. package/src/Label.hbs +13 -0
  523. package/src/Label.js +152 -0
  524. package/src/Link.hbs +20 -0
  525. package/src/Link.js +349 -0
  526. package/src/List.hbs +89 -0
  527. package/src/List.js +1056 -0
  528. package/src/ListItem.hbs +102 -0
  529. package/src/ListItem.js +371 -0
  530. package/src/ListItemBase.js +179 -0
  531. package/src/MessageStrip.hbs +34 -0
  532. package/src/MessageStrip.js +227 -0
  533. package/src/MonthPicker.hbs +29 -0
  534. package/src/MonthPicker.js +299 -0
  535. package/src/MultiComboBox.hbs +78 -0
  536. package/src/MultiComboBox.js +1091 -0
  537. package/src/MultiComboBoxItem.js +43 -0
  538. package/src/MultiComboBoxPopover.hbs +133 -0
  539. package/src/MultiInput.hbs +41 -0
  540. package/src/MultiInput.js +301 -0
  541. package/src/Option.js +115 -0
  542. package/src/Panel.hbs +63 -0
  543. package/src/Panel.js +462 -0
  544. package/src/Popover.hbs +25 -0
  545. package/src/Popover.js +786 -0
  546. package/src/Popup.hbs +34 -0
  547. package/src/Popup.js +567 -0
  548. package/src/PopupBlockLayer.hbs +7 -0
  549. package/src/ProgressIndicator.hbs +35 -0
  550. package/src/ProgressIndicator.js +235 -0
  551. package/src/RadioButton.hbs +33 -0
  552. package/src/RadioButton.js +494 -0
  553. package/src/RadioButtonGroup.js +205 -0
  554. package/src/RangeSlider.hbs +70 -0
  555. package/src/RangeSlider.js +769 -0
  556. package/src/RatingIndicator.hbs +33 -0
  557. package/src/RatingIndicator.js +291 -0
  558. package/src/ResponsivePopover.hbs +39 -0
  559. package/src/ResponsivePopover.js +206 -0
  560. package/src/SegmentedButton.hbs +17 -0
  561. package/src/SegmentedButton.js +290 -0
  562. package/src/SegmentedButtonItem.hbs +42 -0
  563. package/src/SegmentedButtonItem.js +109 -0
  564. package/src/Select.hbs +45 -0
  565. package/src/Select.js +834 -0
  566. package/src/SelectPopover.hbs +89 -0
  567. package/src/Slider.hbs +42 -0
  568. package/src/Slider.js +320 -0
  569. package/src/SliderBase.hbs +38 -0
  570. package/src/SliderBase.js +842 -0
  571. package/src/StandardListItem.hbs +44 -0
  572. package/src/StandardListItem.js +191 -0
  573. package/src/StepInput.hbs +80 -0
  574. package/src/StepInput.js +684 -0
  575. package/src/SuggestionGroupItem.js +64 -0
  576. package/src/SuggestionItem.js +146 -0
  577. package/src/SuggestionListItem.hbs +33 -0
  578. package/src/SuggestionListItem.js +76 -0
  579. package/src/Switch.hbs +50 -0
  580. package/src/Switch.js +262 -0
  581. package/src/Tab.hbs +3 -0
  582. package/src/Tab.js +334 -0
  583. package/src/TabContainer.hbs +93 -0
  584. package/src/TabContainer.js +679 -0
  585. package/src/TabContainerPopover.hbs +24 -0
  586. package/src/TabInOverflow.hbs +22 -0
  587. package/src/TabInStrip.hbs +43 -0
  588. package/src/TabSeparator.hbs +1 -0
  589. package/src/TabSeparator.js +44 -0
  590. package/src/Table.hbs +99 -0
  591. package/src/Table.js +761 -0
  592. package/src/TableCell.hbs +7 -0
  593. package/src/TableCell.js +88 -0
  594. package/src/TableColumn.hbs +8 -0
  595. package/src/TableColumn.js +136 -0
  596. package/src/TableGroupRow.hbs +12 -0
  597. package/src/TableGroupRow.js +160 -0
  598. package/src/TableRow.hbs +61 -0
  599. package/src/TableRow.js +388 -0
  600. package/src/TextArea.hbs +50 -0
  601. package/src/TextArea.js +691 -0
  602. package/src/TextAreaPopover.hbs +28 -0
  603. package/src/TimePicker.hbs +35 -0
  604. package/src/TimePicker.js +166 -0
  605. package/src/TimePickerBase.js +463 -0
  606. package/src/TimePickerPopover.hbs +34 -0
  607. package/src/TimeSelection.hbs +60 -0
  608. package/src/TimeSelection.js +493 -0
  609. package/src/Title.hbs +47 -0
  610. package/src/Title.js +132 -0
  611. package/src/Toast.hbs +13 -0
  612. package/src/Toast.js +243 -0
  613. package/src/ToggleButton.hbs +5 -0
  614. package/src/ToggleButton.js +84 -0
  615. package/src/Token.hbs +30 -0
  616. package/src/Token.js +219 -0
  617. package/src/Tokenizer.hbs +27 -0
  618. package/src/Tokenizer.js +414 -0
  619. package/src/TokenizerPopover.hbs +50 -0
  620. package/src/Tree.hbs +42 -0
  621. package/src/Tree.js +443 -0
  622. package/src/TreeItem.js +168 -0
  623. package/src/TreeListItem.hbs +48 -0
  624. package/src/TreeListItem.js +332 -0
  625. package/src/WheelSlider.hbs +48 -0
  626. package/src/WheelSlider.js +435 -0
  627. package/src/YearPicker.hbs +27 -0
  628. package/src/YearPicker.js +324 -0
  629. package/src/features/ColorPaletteMoreColors.js +42 -0
  630. package/src/features/InputElementsFormSupport.js +88 -0
  631. package/src/features/InputSuggestions.js +530 -0
  632. package/src/i18n/messagebundle.properties +335 -0
  633. package/src/i18n/messagebundle_ar.properties +224 -0
  634. package/src/i18n/messagebundle_bg.properties +224 -0
  635. package/src/i18n/messagebundle_ca.properties +224 -0
  636. package/src/i18n/messagebundle_cs.properties +224 -0
  637. package/src/i18n/messagebundle_cy.properties +224 -0
  638. package/src/i18n/messagebundle_da.properties +224 -0
  639. package/src/i18n/messagebundle_de.properties +224 -0
  640. package/src/i18n/messagebundle_el.properties +224 -0
  641. package/src/i18n/messagebundle_en.properties +224 -0
  642. package/src/i18n/messagebundle_en_GB.properties +224 -0
  643. package/src/i18n/messagebundle_en_US_sappsd.properties +224 -0
  644. package/src/i18n/messagebundle_en_US_saprigi.properties +224 -0
  645. package/src/i18n/messagebundle_en_US_saptrc.properties +224 -0
  646. package/src/i18n/messagebundle_es.properties +224 -0
  647. package/src/i18n/messagebundle_es_MX.properties +224 -0
  648. package/src/i18n/messagebundle_et.properties +224 -0
  649. package/src/i18n/messagebundle_fi.properties +224 -0
  650. package/src/i18n/messagebundle_fr.properties +224 -0
  651. package/src/i18n/messagebundle_fr_CA.properties +224 -0
  652. package/src/i18n/messagebundle_hi.properties +224 -0
  653. package/src/i18n/messagebundle_hr.properties +224 -0
  654. package/src/i18n/messagebundle_hu.properties +224 -0
  655. package/src/i18n/messagebundle_id.properties +224 -0
  656. package/src/i18n/messagebundle_in.properties +172 -0
  657. package/src/i18n/messagebundle_it.properties +224 -0
  658. package/src/i18n/messagebundle_iw.properties +224 -0
  659. package/src/i18n/messagebundle_ja.properties +224 -0
  660. package/src/i18n/messagebundle_kk.properties +224 -0
  661. package/src/i18n/messagebundle_ko.properties +224 -0
  662. package/src/i18n/messagebundle_lt.properties +224 -0
  663. package/src/i18n/messagebundle_lv.properties +224 -0
  664. package/src/i18n/messagebundle_ms.properties +224 -0
  665. package/src/i18n/messagebundle_nl.properties +224 -0
  666. package/src/i18n/messagebundle_no.properties +224 -0
  667. package/src/i18n/messagebundle_pl.properties +224 -0
  668. package/src/i18n/messagebundle_pt.properties +224 -0
  669. package/src/i18n/messagebundle_pt_PT.properties +224 -0
  670. package/src/i18n/messagebundle_ro.properties +224 -0
  671. package/src/i18n/messagebundle_ru.properties +224 -0
  672. package/src/i18n/messagebundle_sh.properties +224 -0
  673. package/src/i18n/messagebundle_sk.properties +224 -0
  674. package/src/i18n/messagebundle_sl.properties +224 -0
  675. package/src/i18n/messagebundle_sv.properties +224 -0
  676. package/src/i18n/messagebundle_th.properties +224 -0
  677. package/src/i18n/messagebundle_tr.properties +224 -0
  678. package/src/i18n/messagebundle_uk.properties +224 -0
  679. package/src/i18n/messagebundle_vi.properties +224 -0
  680. package/src/i18n/messagebundle_zh_CN.properties +224 -0
  681. package/src/i18n/messagebundle_zh_TW.properties +224 -0
  682. package/src/popup-utils/OpenedPopupsRegistry.js +50 -0
  683. package/src/popup-utils/PopoverRegistry.js +145 -0
  684. package/src/timepicker-utils/TimeSlider.js +103 -0
  685. package/src/types/AvatarColorScheme.js +104 -0
  686. package/src/types/AvatarGroupType.js +43 -0
  687. package/src/types/AvatarShape.js +41 -0
  688. package/src/types/AvatarSize.js +67 -0
  689. package/src/types/BreadcrumbsDesign.js +42 -0
  690. package/src/types/BreadcrumbsSeparatorStyle.js +69 -0
  691. package/src/types/BusyIndicatorSize.js +47 -0
  692. package/src/types/ButtonDesign.js +68 -0
  693. package/src/types/CalendarSelectionMode.js +47 -0
  694. package/src/types/CarouselArrowsPlacement.js +40 -0
  695. package/src/types/GrowingMode.js +48 -0
  696. package/src/types/InputType.js +68 -0
  697. package/src/types/LinkDesign.js +47 -0
  698. package/src/types/ListGrowingMode.js +15 -0
  699. package/src/types/ListItemType.js +47 -0
  700. package/src/types/ListMode.js +77 -0
  701. package/src/types/ListSeparators.js +46 -0
  702. package/src/types/MessageStripDesign.js +54 -0
  703. package/src/types/PanelAccessibleRole.js +48 -0
  704. package/src/types/PopoverHorizontalAlign.js +54 -0
  705. package/src/types/PopoverPlacementType.js +54 -0
  706. package/src/types/PopoverVerticalAlign.js +54 -0
  707. package/src/types/Priority.js +55 -0
  708. package/src/types/SemanticColor.js +61 -0
  709. package/src/types/SwitchDesign.js +40 -0
  710. package/src/types/TabContainerTabsPlacement.js +40 -0
  711. package/src/types/TabLayout.js +40 -0
  712. package/src/types/TableGrowingMode.js +15 -0
  713. package/src/types/TableMode.js +47 -0
  714. package/src/types/TableRowType.js +40 -0
  715. package/src/types/TitleLevel.js +68 -0
  716. package/src/types/ToastPlacement.js +91 -0
  717. package/src/types/WrappingType.js +41 -0
  718. package/dist/Timeline.js +0 -81
  719. package/dist/TimelineItem.js +0 -163
  720. package/dist/generated/templates/ComboBoxItemTemplate.lit.js +0 -7
  721. package/dist/generated/templates/TimelineItemTemplate.lit.js +0 -12
  722. package/dist/generated/templates/TimelineTemplate.lit.js +0 -8
  723. package/dist/generated/themes/ComboBoxItem.css.js +0 -9
  724. package/dist/generated/themes/TabContainerPopup.css.js +0 -9
  725. package/dist/generated/themes/Timeline.css.js +0 -9
  726. package/dist/generated/themes/TimelineItem.css.js +0 -9
  727. package/dist/popup-utils/PopupUtils.js +0 -42
  728. package/dist/types/AvatarFitType.js +0 -40
  729. package/dist/webcomponentsjs/package.json +0 -46
  730. package/index.js +0 -2
@@ -1,28 +1,46 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
+ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
3
4
  import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
4
5
  import {
5
- isShow, isDown, isBackSpace, isSpace,
6
- } from "@ui5/webcomponents-base/dist/events/PseudoEvents.js";
7
- import "@ui5/webcomponents-icons/dist/icons/slim-arrow-down.js";
8
- import { getRTL } from "@ui5/webcomponents-base/dist/config/RTL.js";
6
+ isShow,
7
+ isDown,
8
+ isUp,
9
+ isBackSpace,
10
+ isSpace,
11
+ isLeft,
12
+ isRight,
13
+ isEscape,
14
+ isEnter,
15
+ } from "@ui5/webcomponents-base/dist/Keys.js";
16
+ import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
17
+ import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
9
18
  import { isIE, isPhone } from "@ui5/webcomponents-base/dist/Device.js";
10
- import { fetchI18nBundle, getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
19
+ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
20
+ import "@ui5/webcomponents-icons/dist/decline.js";
21
+ import "@ui5/webcomponents-icons/dist/multiselect-all.js";
22
+ import "@ui5/webcomponents-icons/dist/not-editable.js";
23
+ import MultiComboBoxItem from "./MultiComboBoxItem.js";
11
24
  import Tokenizer from "./Tokenizer.js";
12
25
  import Token from "./Token.js";
13
26
  import Icon from "./Icon.js";
27
+ import Popover from "./Popover.js";
14
28
  import ResponsivePopover from "./ResponsivePopover.js";
15
29
  import List from "./List.js";
16
30
  import StandardListItem from "./StandardListItem.js";
17
31
  import ToggleButton from "./ToggleButton.js";
32
+ import * as Filters from "./ComboBoxFilters.js";
33
+ import Button from "./Button.js";
34
+
18
35
  import {
19
36
  VALUE_STATE_SUCCESS,
20
37
  VALUE_STATE_ERROR,
21
38
  VALUE_STATE_WARNING,
22
- TOKENIZER_ARIA_CONTAIN_TOKEN,
23
- TOKENIZER_ARIA_CONTAIN_ONE_TOKEN,
24
- TOKENIZER_ARIA_CONTAIN_SEVERAL_TOKENS,
39
+ VALUE_STATE_INFORMATION,
25
40
  INPUT_SUGGESTIONS_TITLE,
41
+ SELECT_OPTIONS,
42
+ MULTICOMBOBOX_DIALOG_OK_BUTTON,
43
+ VALUE_STATE_ERROR_ALREADY_SELECTED,
26
44
  } from "./generated/i18n/i18n-defaults.js";
27
45
 
28
46
  // Templates
@@ -32,36 +50,62 @@ import MultiComboBoxPopoverTemplate from "./generated/templates/MultiComboBoxPop
32
50
  // Styles
33
51
  import styles from "./generated/themes/MultiComboBox.css.js";
34
52
  import ResponsivePopoverCommonCss from "./generated/themes/ResponsivePopoverCommon.css.js";
53
+ import ValueStateMessageCss from "./generated/themes/ValueStateMessage.css.js";
54
+ import SuggestionsCss from "./generated/themes/Suggestions.css.js";
35
55
 
36
56
  /**
37
57
  * @public
38
58
  */
39
59
  const metadata = {
40
60
  tag: "ui5-multi-combobox",
61
+ languageAware: true,
62
+ managedSlots: true,
41
63
  slots: /** @lends sap.ui.webcomponents.main.MultiComboBox.prototype */ {
42
64
  /**
43
- * Defines the <code>ui5-multi-combobox</code> items.
65
+ * Defines the component items.
66
+ *
67
+ * @type {sap.ui.webcomponents.main.IMultiComboBoxItem[]}
68
+ * @slot items
69
+ * @public
70
+ */
71
+ "default": {
72
+ propertyName: "items",
73
+ type: HTMLElement,
74
+ invalidateOnChildChange: true,
75
+ },
76
+
77
+ /**
78
+ * Defines the icon to be displayed in the component.
79
+ *
80
+ * @type {sap.ui.webcomponents.main.IIcon}
81
+ * @slot
82
+ * @public
83
+ * @since 1.0.0-rc.9
84
+ */
85
+ icon: {
86
+ type: HTMLElement,
87
+ },
88
+
89
+ /**
90
+ * Defines the value state message that will be displayed as pop up under the component.
44
91
  * <br><br>
45
- * Example: <br>
46
- * &lt;ui5-multi-combobox><br>
47
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ui5-li>Item #1&lt;/ui5-li><br>
48
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ui5-li>Item #2&lt;/ui5-li><br>
49
- * &lt;/ui5-multi-combobox>
50
- * <br> <br>
51
92
  *
93
+ * <b>Note:</b> If not specified, a default text (in the respective language) will be displayed.
94
+ * <br>
95
+ * <b>Note:</b> The <code>valueStateMessage</code> would be displayed,
96
+ * when the component is in <code>Information</code>, <code>Warning</code> or <code>Error</code> value state.
52
97
  * @type {HTMLElement[]}
98
+ * @since 1.0.0-rc.9
53
99
  * @slot
54
100
  * @public
55
101
  */
56
- "default": {
57
- propertyName: "items",
102
+ valueStateMessage: {
58
103
  type: HTMLElement,
59
- listenFor: { include: ["*"] },
60
104
  },
61
105
  },
62
106
  properties: /** @lends sap.ui.webcomponents.main.MultiComboBox.prototype */ {
63
107
  /**
64
- * Defines the value of the <code>ui5-multi-combobox</code>.
108
+ * Defines the value of the component.
65
109
  * <br><br>
66
110
  * <b>Note:</b> The property is updated upon typing.
67
111
  *
@@ -76,7 +120,7 @@ const metadata = {
76
120
 
77
121
  /**
78
122
  * Defines a short hint intended to aid the user with data entry when the
79
- * <code>ui5-multi-combobox</code> has no value.
123
+ * component has no value.
80
124
  * @type {string}
81
125
  * @defaultvalue ""
82
126
  * @public
@@ -87,7 +131,7 @@ const metadata = {
87
131
  },
88
132
 
89
133
  /**
90
- * Defines if the user input will be prevented if no matching item has been found
134
+ * Defines if the user input will be prevented, if no matching item has been found
91
135
  *
92
136
  * @type {boolean}
93
137
  * @defaultvalue false
@@ -98,9 +142,9 @@ const metadata = {
98
142
  },
99
143
 
100
144
  /**
101
- * Defines whether <code>ui5-multi-combobox</code> is in disabled state.
145
+ * Defines whether the component is in disabled state.
102
146
  * <br><br>
103
- * <b>Note:</b> A disabled <code>ui5-multi-combobox</code> is completely uninteractive.
147
+ * <b>Note:</b> A disabled component is completely noninteractive.
104
148
  *
105
149
  * @type {boolean}
106
150
  * @defaultvalue false
@@ -111,10 +155,18 @@ const metadata = {
111
155
  },
112
156
 
113
157
  /**
114
- * Defines the value state of the <code>ui5-multi-combobox</code>.
115
- * Available options are: <code>None</code>, <code>Success</code>, <code>Warning</code>, and <code>Error</code>.
158
+ * Defines the value state of the component.
159
+ * <br><br>
160
+ * Available options are:
161
+ * <ul>
162
+ * <li><code>None</code></li>
163
+ * <li><code>Error</code></li>
164
+ * <li><code>Warning</code></li>
165
+ * <li><code>Success</code></li>
166
+ * <li><code>Information</code></li>
167
+ * </ul>
116
168
  *
117
- * @type {string}
169
+ * @type {ValueState}
118
170
  * @defaultvalue "None"
119
171
  * @public
120
172
  */
@@ -124,9 +176,9 @@ const metadata = {
124
176
  },
125
177
 
126
178
  /**
127
- * Defines whether the <code>ui5-multi-combobox</code> is readonly.
179
+ * Defines whether the component is read-only.
128
180
  * <br><br>
129
- * <b>Note:</b> A read-only <code>ui5-multi-combobox</code> is not editable,
181
+ * <b>Note:</b> A read-only component is not editable,
130
182
  * but still provides visual feedback upon user interaction.
131
183
  *
132
184
  * @type {boolean}
@@ -138,7 +190,7 @@ const metadata = {
138
190
  },
139
191
 
140
192
  /**
141
- * Defines whether the <code>ui5-multi-combobox</code> is required.
193
+ * Defines whether the component is required.
142
194
  *
143
195
  * @type {boolean}
144
196
  * @defaultvalue false
@@ -149,11 +201,25 @@ const metadata = {
149
201
  type: Boolean,
150
202
  },
151
203
 
204
+ /**
205
+ * Defines the filter type of the component.
206
+ * Available options are: <code>StartsWithPerTerm</code>, <code>StartsWith</code>, <code>Contains</code> and <code>None</code>.
207
+ *
208
+ * @type {string}
209
+ * @defaultvalue "StartsWithPerTerm"
210
+ * @public
211
+ */
212
+ filter: {
213
+ type: String,
214
+ defaultValue: "StartsWithPerTerm",
215
+ },
216
+
152
217
  /**
153
218
  * Indicates whether the dropdown is open. True if the dropdown is open, false otherwise.
154
219
  *
155
220
  * @type {boolean}
156
221
  * @defaultvalue false
222
+ * @readonly
157
223
  * @since 1.0.0-rc.5
158
224
  * @public
159
225
  */
@@ -161,16 +227,20 @@ const metadata = {
161
227
  type: Boolean,
162
228
  },
163
229
 
164
- /**
165
- * Indicates whether the input is focssed
166
- * @private
167
- */
230
+ _filteredItems: {
231
+ type: Object,
232
+ },
233
+
234
+ filterSelected: {
235
+ type: Boolean,
236
+ },
237
+
168
238
  focused: {
169
239
  type: Boolean,
170
240
  },
171
241
 
172
- _filteredItems: {
173
- type: Object,
242
+ _tokenizerFocused: {
243
+ type: Boolean,
174
244
  },
175
245
 
176
246
  _iconPressed: {
@@ -178,11 +248,18 @@ const metadata = {
178
248
  noAttribute: true,
179
249
  },
180
250
 
181
- /**
182
- * Indicates whether the tokenizer is expanded or collapsed(shows the n more label)
183
- * @private
184
- */
185
- expandedTokenizer: {
251
+ _inputWidth: {
252
+ type: Integer,
253
+ noAttribute: true,
254
+ },
255
+
256
+ _listWidth: {
257
+ type: Integer,
258
+ defaultValue: 0,
259
+ noAttribute: true,
260
+ },
261
+
262
+ _performingSelectionTwice: {
186
263
  type: Boolean,
187
264
  },
188
265
  },
@@ -196,7 +273,7 @@ const metadata = {
196
273
  change: {},
197
274
 
198
275
  /**
199
- * Fired when the value of the <code>ui5-multi-combobox</code> changes at each keystroke.
276
+ * Fired when the value of the component changes at each keystroke.
200
277
  *
201
278
  * @event
202
279
  * @public
@@ -206,21 +283,21 @@ const metadata = {
206
283
  /**
207
284
  * Fired when the dropdown is opened or closed.
208
285
  *
209
- * @event
286
+ * @event sap.ui.webcomponents.main.MultiComboBox#open-change
210
287
  * @since 1.0.0-rc.5
211
288
  * @public
212
289
  */
213
- openChange: {},
290
+ "open-change": {},
214
291
 
215
292
  /**
216
293
  * Fired when selection is changed by user interaction
217
294
  * in <code>SingleSelect</code> and <code>MultiSelect</code> modes.
218
295
  *
219
- * @event
296
+ * @event sap.ui.webcomponents.main.MultiComboBox#selection-change
220
297
  * @param {Array} items an array of the selected items.
221
298
  * @public
222
299
  */
223
- selectionChange: {
300
+ "selection-change": {
224
301
  detail: {
225
302
  items: { type: Array },
226
303
  },
@@ -233,12 +310,10 @@ const metadata = {
233
310
  *
234
311
  * <h3 class="comment-api-title">Overview</h3>
235
312
  *
236
- * The <code>ui5-multi-combobox</code> component provides a list box with items and a text field allowing the user to either type a value directly into the control or choose from the list of existing items.
313
+ * The <code>ui5-multi-combobox</code> component consists of a list box with items and a text field allowing the user to either type a value directly into the text field, or choose from the list of existing items.
237
314
  *
238
- * A drop-down list for selecting and filtering values.
239
- * <h3>Description</h3>
240
- * The <code>ui5-multi-combobox</code> component is commonly used to enable users to select one or more options from a predefined list. The control provides an editable input field to filter the list, and a dropdown arrow of available options.
241
- * The select options in the list have checkboxes that permit multi-selection. Entered values are displayed as tokens.
315
+ * The drop-down list is used for selecting and filtering values, it enables users to select one or more options from a predefined list. The control provides an editable input field to filter the list, and a dropdown arrow to expand/collapse the list of available options.
316
+ * The options in the list have checkboxes that permit multi-selection. Entered values are displayed as tokens.
242
317
  * <h3>Structure</h3>
243
318
  * The <code>ui5-multi-combobox</code> consists of the following elements:
244
319
  * <ul>
@@ -251,20 +326,29 @@ const metadata = {
251
326
  *
252
327
  * The <code>ui5-multi-combobox</code> provides advanced keyboard handling.
253
328
  *
254
- * <h2>Picker</h2>
329
+ * <h4>Picker</h4>
255
330
  * If the <code>ui5-multi-combobox</code> is focused,
256
331
  * you can open or close the drop-down by pressing <code>F4</code>, <code>ALT+UP</code> or <code>ALT+DOWN</code> keys.
257
332
  * Once the drop-down is opened, you can use the <code>UP</code> and <code>DOWN</code> arrow keys
258
333
  * to navigate through the available options and select one by pressing the <code>Space</code> or <code>Enter</code> keys.
259
334
  * <br>
260
335
  *
261
- * <h2>Tokens</h2>
336
+ * <h4>Tokens</h4>
262
337
  * <ul>
263
- * <li> Left/Right arrow keys - moves the focus selection form the currently focues token to the previous/next one (if available). </li>
338
+ * <li> Left/Right arrow keys - moves the focus selection form the currently focused token to the previous/next one (if available). </li>
264
339
  * <li> Delete - deletes the token and focuses the previous token. </li>
265
340
  * <li> Backspace - deletes the token and focus the next token. </li>
266
341
  * </ul>
267
342
  *
343
+ * <h3>CSS Shadow Parts</h3>
344
+ *
345
+ * <ui5-link target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/::part">CSS Shadow Parts</ui5-link> allow developers to style elements inside the Shadow DOM.
346
+ * <br>
347
+ * The <code>ui5-multi-combobox</code> exposes the following CSS Shadow Parts:
348
+ * <ul>
349
+ * <li>token-{index} - Used to style each token(where <code>token-0</code> corresponds to the first item)</li>
350
+ * </ul>
351
+ *
268
352
  * <h3>ES6 Module Import</h3>
269
353
  *
270
354
  * <code>import "@ui5/webcomponents/dist/MultiComboBox";</code>
@@ -276,6 +360,7 @@ const metadata = {
276
360
  * @extends UI5Element
277
361
  * @tagname ui5-multi-combobox
278
362
  * @public
363
+ * @appenddocs MultiComboBoxItem
279
364
  * @since 0.11.0
280
365
  */
281
366
  class MultiComboBox extends UI5Element {
@@ -300,47 +385,70 @@ class MultiComboBox extends UI5Element {
300
385
  }
301
386
 
302
387
  static get staticAreaStyles() {
303
- return ResponsivePopoverCommonCss;
388
+ return [ResponsivePopoverCommonCss, ValueStateMessageCss, SuggestionsCss];
389
+ }
390
+
391
+ static get dependencies() {
392
+ return [
393
+ MultiComboBoxItem,
394
+ Tokenizer,
395
+ Token,
396
+ Icon,
397
+ ResponsivePopover,
398
+ Popover,
399
+ List,
400
+ StandardListItem,
401
+ ToggleButton,
402
+ Button,
403
+ ];
304
404
  }
305
405
 
306
406
  constructor() {
307
407
  super();
308
408
 
309
409
  this._filteredItems = [];
410
+ this.selectedValues = [];
310
411
  this._inputLastValue = "";
412
+ this._valueBeforeOpen = "";
311
413
  this._deleting = false;
312
414
  this._validationTimeout = null;
313
- this._selectedItemsPopoverOpened = false;
314
- this.i18nBundle = getI18nBundle("@ui5/webcomponents");
415
+ this._handleResizeBound = this._handleResize.bind(this);
416
+ }
417
+
418
+ onEnterDOM() {
419
+ ResizeHandler.register(this, this._handleResizeBound);
420
+ }
421
+
422
+ onExitDOM() {
423
+ ResizeHandler.deregister(this, this._handleResizeBound);
424
+ }
425
+
426
+ _handleResize() {
427
+ this._inputWidth = this.offsetWidth;
315
428
  }
316
429
 
317
430
  _inputChange() {
318
431
  this.fireEvent("change");
319
432
  }
320
433
 
321
- _showMorePopover() {
322
- if (this.readonly) {
323
- return;
324
- }
325
-
326
- this._showMorePressed = true;
327
- this._selectedItemsPopoverOpened = true;
328
- this._toggleRespPopover(true);
434
+ togglePopover() {
435
+ this.allItemsPopover.toggle(this);
329
436
  }
330
437
 
331
- _showAllItemsPopover() {
332
- this._selectedItemsPopoverOpened = false;
333
- this._toggleRespPopover(false);
438
+ _showFilteredItems() {
439
+ this.filterSelected = true;
440
+ this._showMorePressed = true;
334
441
 
335
- this._inputDom.focus();
442
+ this.togglePopover();
336
443
  }
337
444
 
338
- _closeMorePopover() {
339
- this._getRespPopover(true).close();
445
+ filterSelectedItems(event) {
446
+ this.filterSelected = event.target.pressed;
447
+ this.selectedItems = this._filteredItems.filter(item => item.selected);
340
448
  }
341
449
 
342
- _closeAllItemsPopover() {
343
- this._getRespPopover().close();
450
+ get _showAllItemsButtonPressed() {
451
+ return this.filterSelected;
344
452
  }
345
453
 
346
454
  get _inputDom() {
@@ -353,11 +461,15 @@ class MultiComboBox extends UI5Element {
353
461
  const filteredItems = this._filterItems(value);
354
462
  const oldValueState = this.valueState;
355
463
 
464
+ if (this.filterSelected) {
465
+ this.filterSelected = false;
466
+ }
467
+
356
468
  /* skip calling change event when an input with a placeholder is focused on IE
357
469
  - value of the host and the internal input should be differnt in case of actual input
358
470
  - input is called when a key is pressed => keyup should not be called yet
359
471
  */
360
- const skipFiring = (this._inputDom.value === this.value) && isIE && !this._keyDown && !!this.placeholder;
472
+ const skipFiring = (this._inputDom.value === this.value) && isIE() && !this._keyDown && !!this.placeholder;
361
473
 
362
474
  if (skipFiring) {
363
475
  event.preventDefault();
@@ -374,24 +486,20 @@ class MultiComboBox extends UI5Element {
374
486
  input.value = this._inputLastValue;
375
487
  this.valueState = "Error";
376
488
 
377
- this._validationTimeout = setTimeout(() => {
378
- this.valueState = oldValueState;
379
- this._validationTimeout = null;
380
- }, 2000);
489
+ this._resetValueState(oldValueState);
381
490
 
382
491
  return;
383
492
  }
384
493
 
385
-
386
494
  this._inputLastValue = input.value;
387
495
  this.value = input.value;
388
496
  this._filteredItems = filteredItems;
389
497
 
390
498
  if (!isPhone()) {
391
499
  if (filteredItems.length === 0) {
392
- this._getRespPopover().close();
500
+ this.allItemsPopover.close();
393
501
  } else {
394
- this._getRespPopover().open(this);
502
+ this.allItemsPopover.showAt(this);
395
503
  }
396
504
  }
397
505
 
@@ -405,259 +513,576 @@ class MultiComboBox extends UI5Element {
405
513
  deletingItem.selected = false;
406
514
  this._deleting = true;
407
515
 
408
- this.fireEvent("selectionChange", { items: this._getSelectedItems() });
516
+ this.fireSelectionChange();
517
+ }
518
+
519
+ get _getPlaceholder() {
520
+ if (this._tokenizer && this._tokenizer.tokens.length) {
521
+ return "";
522
+ }
523
+
524
+ return this.placeholder;
525
+ }
526
+
527
+ _handleLeft() {
528
+ const cursorPosition = this.getDomRef().querySelector(`input`).selectionStart;
529
+
530
+ if (cursorPosition === 0) {
531
+ this._tokenizer._focusLastToken();
532
+ }
409
533
  }
410
534
 
411
- _tokenizerFocusOut() {
412
- const tokenizer = this.shadowRoot.querySelector("ui5-tokenizer");
413
- const tokensCount = tokenizer.tokens.length - 1;
535
+ _tokenizerFocusOut(event) {
536
+ this._tokenizerFocused = false;
414
537
 
415
- tokenizer.tokens.forEach(token => { token.selected = false; });
538
+ const tokensCount = this._tokenizer.tokens.length - 1;
539
+
540
+ if (!event.relatedTarget || event.relatedTarget.localName !== "ui5-token") {
541
+ this._tokenizer.tokens.forEach(token => { token.selected = false; });
542
+ this._tokenizer.scrollToStart();
543
+ }
416
544
 
417
545
  if (tokensCount === 0 && this._deleting) {
418
546
  setTimeout(() => {
419
- this.shadowRoot.querySelector("input").focus();
547
+ if (!isPhone()) {
548
+ this.shadowRoot.querySelector("input").focus();
549
+ }
550
+
420
551
  this._deleting = false;
421
552
  }, 0);
422
553
  }
423
554
  }
424
555
 
556
+ _tokenizerFocusIn() {
557
+ this._tokenizerFocused = true;
558
+ this.focused = false;
559
+ }
560
+
425
561
  _onkeyup() {
426
562
  this._keyDown = false;
427
563
  }
428
564
 
429
- _onkeydown(event) {
565
+ async _onkeydown(event) {
566
+ if (isLeft(event)) {
567
+ this._handleLeft(event);
568
+ }
569
+
430
570
  if (isShow(event) && !this.readonly && !this.disabled) {
431
571
  event.preventDefault();
432
- this._toggleRespPopover();
572
+ this.togglePopover();
433
573
  }
434
574
 
435
- if (isDown(event) && this._getRespPopover().opened && this.items.length) {
436
- event.preventDefault();
437
- const list = this.getStaticAreaItemDomRef().querySelector(".ui5-multi-combobox-all-items-list");
438
- list._itemNavigation.current = 0;
439
- list.items[0].focus();
575
+ if (this.open && (isUp(event) || isDown(event))) {
576
+ this._handleArrowNavigation(event);
440
577
  }
441
578
 
442
579
  if (isBackSpace(event) && event.target.value === "") {
443
580
  event.preventDefault();
444
581
 
445
- const lastTokenIndex = this._tokenizer.tokens.length - 1;
582
+ this._tokenizer._focusLastToken();
583
+ }
446
584
 
447
- if (lastTokenIndex < 0) {
448
- return;
449
- }
585
+ // Reset value on ESC
586
+ if (isEscape(event) && (!this.allowCustomValues || (!this.open && this.allowCustomValues))) {
587
+ this.value = this._lastValue;
588
+ }
450
589
 
451
- this._tokenizer.tokens[lastTokenIndex].focus();
452
- this._tokenizer._itemNav.currentIndex = lastTokenIndex;
590
+ if (isEnter(event)) {
591
+ this.handleEnter();
453
592
  }
454
593
 
455
594
  this._keyDown = true;
456
595
  }
457
596
 
458
- _filterItems(value) {
459
- return this.items.filter(item => {
460
- return item.textContent && item.textContent.toLowerCase().startsWith(value.toLowerCase());
461
- });
597
+ _onValueStateKeydown(event) {
598
+ const isArrowDown = isDown(event);
599
+ const isArrowUp = isUp(event);
600
+
601
+ event.preventDefault();
602
+
603
+ if (isArrowDown) {
604
+ this._handleArrowDown(event);
605
+ }
606
+
607
+ if (isArrowUp) {
608
+ this._inputDom.focus();
609
+ }
610
+ }
611
+
612
+ _onItemKeydown(event) {
613
+ const isFirstItem = this.list.items[0] === event.target;
614
+
615
+ event.preventDefault();
616
+
617
+ if (!isUp(event) || !isFirstItem) {
618
+ return;
619
+ }
620
+
621
+ if (this.valueStateHeader) {
622
+ this.valueStateHeader.focus();
623
+ return;
624
+ }
625
+
626
+ this._inputDom.focus();
462
627
  }
463
628
 
464
- _toggleIcon() {
465
- this._iconPressed = !this._iconPressed;
466
- this.open = this._iconPressed;
629
+ async _handleArrowNavigation(event) {
630
+ const isArrowDown = isDown(event);
631
+ const hasSuggestions = this.allItemsPopover.opened && this.items.length;
467
632
 
468
- this.fireEvent("openChange");
633
+ event.preventDefault();
634
+
635
+ if (this.hasValueStateMessage && !this.valueStateHeader) {
636
+ await this._setValueStateHeader();
637
+ }
638
+
639
+ if (isArrowDown && this.focused && this.valueStateHeader) {
640
+ this.valueStateHeader.focus();
641
+ return;
642
+ }
469
643
 
470
- if (!this._iconPressed) {
471
- this._afterClosePopover();
644
+ if (isArrowDown && this.focused && hasSuggestions) {
645
+ this._handleArrowDown(event);
472
646
  }
473
647
  }
474
648
 
475
- _getSelectedItems() {
476
- return this.items.filter(item => item.selected);
649
+ _handleArrowDown(event) {
650
+ const firstListItem = this.list.items[0];
651
+
652
+ this.list._itemNavigation.setCurrentItem(firstListItem);
653
+ firstListItem.focus();
477
654
  }
478
655
 
479
- _listSelectionChange(event) {
480
- event.target.items.forEach(item => {
481
- this.items.forEach(mcbItem => {
482
- if (mcbItem._id === item.getAttribute("data-ui5-token-id")) {
483
- mcbItem.selected = item.selected;
656
+ handleEnter() {
657
+ const lowerCaseValue = this.value.toLowerCase();
658
+ const matchingItem = this.items.find(item => item.text.toLowerCase() === lowerCaseValue);
659
+ const oldValueState = this.valueState;
660
+
661
+ if (matchingItem) {
662
+ if (matchingItem.selected) {
663
+ if (this._validationTimeout) {
664
+ return;
484
665
  }
485
- });
486
- });
487
666
 
488
- this.fireEvent("selectionChange", { items: this._getSelectedItems() });
667
+ this.valueState = "Error";
668
+ this._performingSelectionTwice = true;
669
+ this._resetValueState(oldValueState, () => {
670
+ this._performingSelectionTwice = false;
671
+ });
672
+ } else {
673
+ matchingItem.selected = true;
674
+ this.value = "";
675
+ this.fireSelectionChange();
676
+ }
489
677
 
490
- if (!event.detail.selectionComponentPressed && !isSpace(event.detail)) {
491
- this._getRespPopover().close();
492
- this.value = "";
493
- this.fireEvent("input");
678
+ this.allItemsPopover.close();
494
679
  }
495
680
  }
496
681
 
497
- _getRespPopover(isMorePopover) {
498
- return this.getStaticAreaItemDomRef().querySelector(`.ui5-multi-combobox-${isMorePopover ? "selected" : "all"}-items-responsive-popover`);
682
+ _resetValueState(valueState, callback) {
683
+ this._validationTimeout = setTimeout(() => {
684
+ this.valueState = valueState;
685
+ this._validationTimeout = null;
686
+
687
+ callback && callback();
688
+ }, 2000);
499
689
  }
500
690
 
501
- _toggleRespPopover(isMorePopover) {
502
- const popover = this._getRespPopover(isMorePopover);
503
- const otherPopover = this._getRespPopover(!isMorePopover);
691
+ _onTokenizerKeydown(event) {
692
+ if (isRight(event)) {
693
+ const lastTokenIndex = this._tokenizer.tokens.length - 1;
504
694
 
505
- if (popover && popover.opened) {
506
- return popover.close();
695
+ if (this._tokenizer.tokens[lastTokenIndex] === document.activeElement.shadowRoot.activeElement) {
696
+ setTimeout(() => {
697
+ this.shadowRoot.querySelector("input").focus();
698
+ }, 0);
699
+ }
507
700
  }
701
+ }
702
+
703
+ _filterItems(str) {
704
+ return (Filters[this.filter] || Filters.StartsWithPerTerm)(str, this.items);
705
+ }
508
706
 
509
- otherPopover && otherPopover.close();
707
+ _afterOpenPicker() {
708
+ this._toggle();
510
709
 
511
- popover && popover.open(this);
710
+ if (!isPhone()) {
711
+ this._innerInput.focus();
712
+ } else {
713
+ this.allItemsPopover.focus();
714
+ }
512
715
  }
513
716
 
514
- _focusin() {
515
- this.focused = true;
717
+ _toggle() {
718
+ this.open = !this.open;
719
+ this.fireEvent("open-change");
516
720
  }
517
721
 
518
- _focusout() {
519
- this.focused = false;
722
+ _getSelectedItems() {
723
+ // Angular 2 way data binding
724
+ this.selectedValues = this.items.filter(item => item.selected);
725
+ return this.selectedValues;
726
+ }
727
+
728
+ _listSelectionChange(event) {
729
+ // sync list items and cb items
730
+ this.syncItems(event.target.items);
731
+
732
+ // don't call selection change right after selection as user can cancel it on phone
733
+ if (!isPhone()) {
734
+ this.fireSelectionChange();
735
+ }
736
+
737
+ if (!event.detail.selectionComponentPressed && !isSpace(event.detail)) {
738
+ this.allItemsPopover.close();
739
+ this.value = "";
740
+
741
+ // if the item (not checkbox) is clicked, call the selection change
742
+ if (isPhone()) {
743
+ this.fireSelectionChange();
744
+ }
745
+
746
+ this.fireEvent("input");
747
+ }
748
+ }
749
+
750
+ syncItems(listItems) {
751
+ listItems.forEach(item => {
752
+ this.items.forEach(mcbItem => {
753
+ if (mcbItem._id === item.getAttribute("data-ui5-token-id")) {
754
+ mcbItem.selected = item.selected;
755
+ }
756
+ });
757
+ });
758
+ }
759
+
760
+ fireSelectionChange() {
761
+ this.fireEvent("selection-change", { items: this._getSelectedItems() });
762
+ // Angular 2 way data binding
763
+ this.fireEvent("value-changed");
764
+ }
765
+
766
+ async _getRespPopover() {
767
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
768
+ this.allItemsPopover = staticAreaItem.querySelector(`.ui5-multi-combobox-all-items-responsive-popover`);
769
+ }
770
+
771
+ async _getList() {
772
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
773
+ this.list = staticAreaItem.querySelector(".ui5-multi-combobox-all-items-list");
520
774
  }
521
775
 
522
776
  _click(event) {
523
- if (isPhone() && !this.readonly && !this._showMorePressed) {
524
- this._getRespPopover().open(this);
777
+ if (isPhone() && !this.readonly && !this._showMorePressed && !this._deleting) {
778
+ this.allItemsPopover.showAt(this);
525
779
  }
526
780
 
527
781
  this._showMorePressed = false;
528
782
  }
529
783
 
530
- _afterClosePopover() {
784
+ _afterClosePicker() {
531
785
  // close device's keyboard and prevent further typing
532
786
  if (isPhone()) {
533
787
  this.blur();
534
788
  }
535
- }
536
789
 
537
- _toggleButtonPress(event) {
538
- if (this._selectedItemsPopoverOpened) {
539
- event.target.pressed = true;
540
- this._showAllItemsPopover();
541
- } else {
542
- event.target.pressed = false;
543
- this._showMorePopover();
544
- }
545
- }
790
+ this._toggle();
546
791
 
547
- onBeforeRendering() {
548
- this._inputLastValue = this.value;
792
+ this._iconPressed = false;
793
+ this.filterSelected = false;
794
+ }
549
795
 
550
- const hasSelectedItem = this.items.some(item => item.selected);
796
+ _beforeOpen() {
797
+ this._itemsBeforeOpen = this.items.map(item => {
798
+ return {
799
+ ref: item,
800
+ selected: item.selected,
801
+ };
802
+ });
551
803
 
552
- if (this.getDomRef() && !hasSelectedItem) {
553
- const morePopover = this._getRespPopover(true);
804
+ this._valueBeforeOpen = this.value;
554
805
 
555
- morePopover && morePopover.close();
806
+ if (this.filterSelected) {
807
+ this.selectedItems = this._filteredItems.filter(item => item.selected);
556
808
  }
809
+ }
557
810
 
811
+ onBeforeRendering() {
558
812
  const input = this.shadowRoot.querySelector("input");
813
+ this._inputLastValue = this.value;
559
814
 
560
815
  if (input && !input.value) {
561
816
  this._filteredItems = this.items;
562
817
  }
563
818
 
819
+ this.items.forEach(item => {
820
+ item._getRealDomRef = () => this.allItemsPopover.querySelector(`*[data-ui5-stable=${item.stableDomRef}]`);
821
+ });
822
+
564
823
  const filteredItems = this._filterItems(this.value);
565
824
  this._filteredItems = filteredItems;
566
825
  }
567
826
 
568
- onAfterRendering() {
569
- if (this.open && !this._getRespPopover().opened) {
570
- this._getRespPopover().open(this);
571
- // Set initial focus to the native input
572
- this._innerInput.focus();
573
- }
827
+ async onAfterRendering() {
828
+ await this._getRespPopover();
829
+ await this._getList();
830
+
831
+ this.toggle(this.shouldDisplayOnlyValueStateMessage);
832
+ this.storeResponsivePopoverWidth();
833
+
834
+ this._deleting = false;
574
835
  }
575
836
 
576
- get valueStateTextMappings() {
577
- return {
578
- "Success": this.i18nBundle.getText(VALUE_STATE_SUCCESS),
579
- "Error": this.i18nBundle.getText(VALUE_STATE_ERROR),
580
- "Warning": this.i18nBundle.getText(VALUE_STATE_WARNING),
581
- };
837
+ get _isPhone() {
838
+ return isPhone();
582
839
  }
583
840
 
584
- get _tokenizer() {
585
- return this.shadowRoot.querySelector("ui5-tokenizer");
841
+ _onIconMousedown() {
842
+ this._iconPressed = true;
586
843
  }
587
844
 
588
- get nMoreCountText() {
589
- const iTokenCount = this._getSelectedItems().length;
845
+ storeResponsivePopoverWidth() {
846
+ if (this.open && !this._listWidth) {
847
+ this._listWidth = this.list.offsetWidth;
848
+ }
849
+ }
590
850
 
591
- if (iTokenCount === 0) {
592
- return this.i18nBundle.getText(TOKENIZER_ARIA_CONTAIN_TOKEN);
851
+ toggle(isToggled) {
852
+ if (isToggled && !this.open) {
853
+ this.openPopover();
854
+ } else {
855
+ this.closePopover();
593
856
  }
857
+ }
858
+
859
+ handleCancel() {
860
+ this._itemsBeforeOpen.forEach(item => {
861
+ item.ref.selected = item.selected;
862
+ });
594
863
 
595
- if (iTokenCount === 1) {
596
- return this.i18nBundle.getText(TOKENIZER_ARIA_CONTAIN_ONE_TOKEN);
864
+ this.togglePopover();
865
+
866
+ this.value = this._valueBeforeOpen;
867
+ }
868
+
869
+ handleOK() {
870
+ if (isPhone()) {
871
+ this.fireSelectionChange();
597
872
  }
598
873
 
599
- return this.i18nBundle.getText(TOKENIZER_ARIA_CONTAIN_SEVERAL_TOKENS, iTokenCount);
874
+ this.togglePopover();
875
+ }
876
+
877
+ async openPopover() {
878
+ const popover = await this._getPopover();
879
+
880
+ if (popover) {
881
+ popover.showAt(this);
882
+ }
883
+ }
884
+
885
+ _forwardFocusToInner() {
886
+ this._innerInput.focus();
887
+ }
888
+
889
+ async closePopover() {
890
+ const popover = await this._getPopover();
891
+
892
+ popover && popover.close();
893
+ }
894
+
895
+ async _getPopover() {
896
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
897
+ return staticAreaItem.querySelector("[ui5-popover]");
898
+ }
899
+
900
+ async _getResponsivePopover() {
901
+ const staticAreaItem = await this.getStaticAreaItemDomRef();
902
+ return staticAreaItem.querySelector("[ui5-responsive-popover]");
903
+ }
904
+
905
+ async _setValueStateHeader() {
906
+ const responsivePopover = await this._getResponsivePopover();
907
+ this.valueStateHeader = responsivePopover.querySelector("div.ui5-responsive-popover-header.ui5-valuestatemessage-root");
908
+ }
909
+
910
+ get _tokenizer() {
911
+ return this.shadowRoot.querySelector("[ui5-tokenizer]");
600
912
  }
601
913
 
602
- rootFocusIn() {
603
- this.expandedTokenizer = true;
914
+ inputFocusIn() {
915
+ if (!isPhone()) {
916
+ this.focused = true;
917
+ } else {
918
+ this._innerInput.blur();
919
+ }
920
+
921
+ this._lastValue = this.value;
604
922
  }
605
923
 
606
- rootFocusOut(event) {
924
+ inputFocusOut(event) {
607
925
  if (!this.shadowRoot.contains(event.relatedTarget) && !this._deleting) {
608
- this.expandedTokenizer = false;
926
+ this.focused = false;
927
+
928
+ // remove the value if user focus out the input and focus is not going in the popover
929
+ if (!isPhone() && !this.allowCustomValues && (this.staticAreaItem !== event.relatedTarget)) {
930
+ this.value = "";
931
+ }
609
932
  }
610
933
  }
611
934
 
935
+ _readonlyIconClick() {
936
+ this._inputDom.focus();
937
+ }
938
+
612
939
  get editable() {
613
940
  return !this.readonly;
614
941
  }
615
942
 
616
- get dir() {
617
- return getRTL() ? "rtl" : "ltr";
943
+ get _isFocusInside() {
944
+ return !isPhone() && (this.focused || this._tokenizerFocused);
618
945
  }
619
946
 
620
947
  get selectedItemsListMode() {
621
948
  return this.readonly ? "None" : "MultiSelect";
622
949
  }
623
950
 
951
+ get _listItemsType() {
952
+ return this.readonly ? "Inactive" : "Active";
953
+ }
954
+
624
955
  get hasValueState() {
625
956
  return this.valueState !== ValueState.None;
626
957
  }
627
958
 
959
+ get hasValueStateMessage() {
960
+ return this.hasValueState && this.valueState !== ValueState.Success;
961
+ }
962
+
628
963
  get valueStateText() {
629
- return this.valueStateTextMappings[this.valueState];
964
+ let key = this.valueState;
965
+
966
+ if (this._performingSelectionTwice) {
967
+ key = "Error_Selection";
968
+ }
969
+
970
+ return this.valueStateTextMappings[key];
971
+ }
972
+
973
+ get valueStateTextId() {
974
+ return this.hasValueState ? `${this._id}-valueStateDesc` : undefined;
975
+ }
976
+
977
+ get valueStateMessageText() {
978
+ return this.getSlottedNodes("valueStateMessage").map(el => el.cloneNode(true));
979
+ }
980
+
981
+ /**
982
+ * This method is relevant for sap_horizon theme only
983
+ */
984
+ get _valueStateMessageIcon() {
985
+ const iconPerValueState = {
986
+ Error: "error",
987
+ Warning: "alert",
988
+ Success: "sys-enter-2",
989
+ Information: "information",
990
+ };
991
+
992
+ return this.valueState !== ValueState.None ? iconPerValueState[this.valueState] : "";
993
+ }
994
+
995
+ get _tokensCountText() {
996
+ if (!this._tokenizer) {
997
+ return;
998
+ }
999
+ return this._tokenizer._tokensCountText();
1000
+ }
1001
+
1002
+ get _tokensCountTextId() {
1003
+ return `${this._id}-hiddenText-nMore`;
1004
+ }
1005
+
1006
+ get ariaDescribedByText() {
1007
+ return this.valueStateTextId ? `${this._tokensCountTextId} ${this.valueStateTextId}` : `${this._tokensCountTextId}`;
1008
+ }
1009
+
1010
+ get shouldDisplayDefaultValueStateMessage() {
1011
+ return !this.valueStateMessage.length && this.hasValueStateMessage;
1012
+ }
1013
+
1014
+ get shouldDisplayOnlyValueStateMessage() {
1015
+ return this.focused && this.hasValueStateMessage && !this._iconPressed;
1016
+ }
1017
+
1018
+ get valueStateTextMappings() {
1019
+ return {
1020
+ "Success": MultiComboBox.i18nBundle.getText(VALUE_STATE_SUCCESS),
1021
+ "Error": MultiComboBox.i18nBundle.getText(VALUE_STATE_ERROR),
1022
+ "Error_Selection": MultiComboBox.i18nBundle.getText(VALUE_STATE_ERROR_ALREADY_SELECTED),
1023
+ "Warning": MultiComboBox.i18nBundle.getText(VALUE_STATE_WARNING),
1024
+ "Information": MultiComboBox.i18nBundle.getText(VALUE_STATE_INFORMATION),
1025
+ };
630
1026
  }
631
1027
 
632
1028
  get _innerInput() {
633
1029
  if (isPhone()) {
634
- if (this._getRespPopover().opened) {
635
- return this._getRespPopover().querySelector("input");
1030
+ if (this.allItemsPopover.opened) {
1031
+ return this.allItemsPopover.querySelector("input");
636
1032
  }
637
-
638
- return this._getRespPopover(true).querySelector("input");
639
1033
  }
640
1034
 
641
1035
  return this.getDomRef().querySelector("#ui5-multi-combobox-input");
642
1036
  }
643
1037
 
644
1038
  get _headerTitleText() {
645
- return this.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
1039
+ return MultiComboBox.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
646
1040
  }
647
1041
 
648
- static async define(...params) {
649
- await Promise.all([
650
- Tokenizer.define(),
651
- Token.define(),
652
- Icon.define(),
653
- ResponsivePopover.define(),
654
- List.define(),
655
- StandardListItem.define(),
656
- ToggleButton,
657
- fetchI18nBundle("@ui5/webcomponents"),
658
- ]);
1042
+ get _iconAccessibleNameText() {
1043
+ return MultiComboBox.i18nBundle.getText(SELECT_OPTIONS);
1044
+ }
1045
+
1046
+ get _dialogOkButton() {
1047
+ return MultiComboBox.i18nBundle.getText(MULTICOMBOBOX_DIALOG_OK_BUTTON);
1048
+ }
1049
+
1050
+ get _tokenizerExpanded() {
1051
+ return (this._isFocusInside || this.open) && !this.readonly;
1052
+ }
1053
+
1054
+ get classes() {
1055
+ return {
1056
+ popover: {
1057
+ "ui5-multi-combobox-all-items-responsive-popover": true,
1058
+ "ui5-suggestions-popover": !this.isPhone,
1059
+ "ui5-suggestions-popover-with-value-state-header": !this.isPhone && this.hasValueStateMessage,
1060
+ },
1061
+ popoverValueState: {
1062
+ "ui5-valuestatemessage-root": true,
1063
+ "ui5-valuestatemessage-header": true,
1064
+ "ui5-valuestatemessage--success": this.valueState === ValueState.Success,
1065
+ "ui5-valuestatemessage--error": this.valueState === ValueState.Error,
1066
+ "ui5-valuestatemessage--warning": this.valueState === ValueState.Warning,
1067
+ "ui5-valuestatemessage--information": this.valueState === ValueState.Information,
1068
+ },
1069
+ };
1070
+ }
1071
+
1072
+ get styles() {
1073
+ return {
1074
+ popoverValueStateMessage: {
1075
+ "width": `${this._listWidth}px`,
1076
+ "display": this._listWidth === 0 ? "none" : "inline-block",
1077
+ },
1078
+ popoverHeader: {
1079
+ "max-width": isPhone() ? "100%" : `${this._inputWidth}px`,
1080
+ },
1081
+ };
1082
+ }
659
1083
 
660
- super.define(...params);
1084
+ static async onDefine() {
1085
+ MultiComboBox.i18nBundle = await getI18nBundle("@ui5/webcomponents");
661
1086
  }
662
1087
  }
663
1088