@ui5/webcomponents 0.0.0-39bd3067f → 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 (732) hide show
  1. package/CHANGELOG.md +610 -1
  2. package/README.md +144 -52
  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 +2 -1
  7. package/dist/Avatar.js +197 -46
  8. package/dist/AvatarGroup.js +603 -0
  9. package/dist/Badge.js +44 -22
  10. package/dist/Breadcrumbs.js +563 -0
  11. package/dist/BreadcrumbsItem.js +109 -0
  12. package/dist/BusyIndicator.js +159 -20
  13. package/dist/Button.js +132 -69
  14. package/dist/Calendar.js +342 -546
  15. package/dist/CalendarDate.js +45 -0
  16. package/dist/CalendarHeader.js +133 -62
  17. package/dist/CalendarPart.js +111 -0
  18. package/dist/Card.js +44 -158
  19. package/dist/CardHeader.js +288 -0
  20. package/dist/Carousel.js +272 -76
  21. package/dist/CheckBox.js +149 -49
  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 +603 -94
  27. package/dist/ComboBoxFilters.js +8 -1
  28. package/dist/ComboBoxGroupItem.js +70 -0
  29. package/dist/ComboBoxItem.js +12 -24
  30. package/dist/CustomListItem.js +38 -9
  31. package/dist/DateComponentBase.js +170 -0
  32. package/dist/DatePicker.js +418 -403
  33. package/dist/DateRangePicker.js +328 -0
  34. package/dist/DateTimePicker.js +111 -384
  35. package/dist/DayPicker.js +509 -431
  36. package/dist/Dialog.js +497 -50
  37. package/dist/DurationPicker.js +170 -317
  38. package/dist/FileUploader.js +217 -24
  39. package/dist/GroupHeaderListItem.js +24 -19
  40. package/dist/Icon.js +197 -36
  41. package/dist/Input.js +660 -167
  42. package/dist/Interfaces.js +192 -0
  43. package/dist/Label.js +27 -12
  44. package/dist/Link.js +138 -28
  45. package/dist/List.js +501 -110
  46. package/dist/ListItem.js +110 -28
  47. package/dist/ListItemBase.js +42 -8
  48. package/dist/MessageStrip.js +56 -70
  49. package/dist/MonthPicker.js +180 -182
  50. package/dist/MultiComboBox.js +583 -207
  51. package/dist/MultiComboBoxItem.js +8 -5
  52. package/dist/MultiInput.js +301 -0
  53. package/dist/Option.js +48 -5
  54. package/dist/Panel.js +100 -37
  55. package/dist/Popover.js +255 -224
  56. package/dist/Popup.js +381 -284
  57. package/dist/ProgressIndicator.js +235 -0
  58. package/dist/RadioButton.js +131 -51
  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 +73 -46
  63. package/dist/SegmentedButton.js +127 -60
  64. package/dist/SegmentedButtonItem.js +109 -0
  65. package/dist/Select.js +448 -107
  66. package/dist/Slider.js +320 -0
  67. package/dist/SliderBase.js +842 -0
  68. package/dist/StandardListItem.js +44 -22
  69. package/dist/StepInput.js +684 -0
  70. package/dist/SuggestionGroupItem.js +64 -0
  71. package/dist/SuggestionItem.js +37 -31
  72. package/dist/SuggestionListItem.js +76 -0
  73. package/dist/Switch.js +60 -42
  74. package/dist/Tab.js +55 -24
  75. package/dist/TabContainer.js +241 -82
  76. package/dist/TabSeparator.js +1 -0
  77. package/dist/Table.js +480 -35
  78. package/dist/TableCell.js +11 -13
  79. package/dist/TableColumn.js +13 -3
  80. package/dist/TableGroupRow.js +160 -0
  81. package/dist/TableRow.js +244 -18
  82. package/dist/TextArea.js +153 -55
  83. package/dist/TimePicker.js +55 -644
  84. package/dist/TimePickerBase.js +463 -0
  85. package/dist/TimeSelection.js +493 -0
  86. package/dist/Title.js +16 -9
  87. package/dist/Toast.js +24 -13
  88. package/dist/ToggleButton.js +21 -13
  89. package/dist/Token.js +84 -45
  90. package/dist/Tokenizer.js +246 -64
  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 +79 -59
  95. package/dist/YearPicker.js +199 -255
  96. package/dist/api.json +6877 -1
  97. package/dist/features/ColorPaletteMoreColors.js +42 -0
  98. package/dist/features/InputElementsFormSupport.js +0 -1
  99. package/dist/features/InputSuggestions.js +276 -53
  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 -1
  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 -15
  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 -6
  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 +13 -12
  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 -6
  182. package/dist/generated/templates/CustomListItemTemplate.lit.js +13 -13
  183. package/dist/generated/templates/DatePickerPopoverTemplate.lit.js +7 -6
  184. package/dist/generated/templates/DatePickerTemplate.lit.js +6 -5
  185. package/dist/generated/templates/DateTimePickerPopoverTemplate.lit.js +9 -12
  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 +7 -7
  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 -23
  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 -13
  197. package/dist/generated/templates/ListTemplate.lit.js +12 -9
  198. package/dist/generated/templates/MessageStripTemplate.lit.js +6 -27
  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 -14
  212. package/dist/generated/templates/SegmentedButtonItemTemplate.lit.js +8 -0
  213. package/dist/generated/templates/SegmentedButtonTemplate.lit.js +4 -11
  214. package/dist/generated/templates/SelectPopoverTemplate.lit.js +20 -6
  215. package/dist/generated/templates/SelectTemplate.lit.js +6 -5
  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 -19
  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 -6
  223. package/dist/generated/templates/TabContainerTemplate.lit.js +16 -14
  224. package/dist/generated/templates/TabInOverflowTemplate.lit.js +6 -17
  225. package/dist/generated/templates/TabInStripTemplate.lit.js +6 -30
  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 -10
  232. package/dist/generated/templates/TableTemplate.lit.js +13 -8
  233. package/dist/generated/templates/TextAreaPopoverTemplate.lit.js +8 -8
  234. package/dist/generated/templates/TextAreaTemplate.lit.js +8 -8
  235. package/dist/generated/templates/TimePickerPopoverTemplate.lit.js +4 -8
  236. package/dist/generated/templates/TimePickerTemplate.lit.js +6 -5
  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 +7 -7
  247. package/dist/generated/templates/YearPickerTemplate.lit.js +6 -6
  248. package/dist/generated/themes/Avatar.css.js +5 -5
  249. package/dist/generated/themes/AvatarGroup.css.js +8 -0
  250. package/dist/generated/themes/Badge.css.js +5 -5
  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 +5 -5
  255. package/dist/generated/themes/Button.css.js +5 -5
  256. package/dist/generated/themes/Button.ie11.css.js +8 -0
  257. package/dist/generated/themes/Calendar.css.js +5 -5
  258. package/dist/generated/themes/CalendarHeader.css.js +5 -5
  259. package/dist/generated/themes/Card.css.js +5 -5
  260. package/dist/generated/themes/CardHeader.css.js +8 -0
  261. package/dist/generated/themes/Carousel.css.js +5 -5
  262. package/dist/generated/themes/CheckBox.css.js +5 -5
  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 +5 -5
  269. package/dist/generated/themes/ComboBoxPopover.css.js +5 -5
  270. package/dist/generated/themes/CustomListItem.css.js +5 -5
  271. package/dist/generated/themes/DatePicker.css.js +5 -5
  272. package/dist/generated/themes/DatePickerPopover.css.js +5 -5
  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 +5 -5
  276. package/dist/generated/themes/DayPicker.css.js +5 -5
  277. package/dist/generated/themes/Dialog.css.js +5 -5
  278. package/dist/generated/themes/FileUploader.css.js +5 -5
  279. package/dist/generated/themes/GroupHeaderListItem.css.js +5 -5
  280. package/dist/generated/themes/GrowingButton.css.js +8 -0
  281. package/dist/generated/themes/Icon.css.js +5 -5
  282. package/dist/generated/themes/Input.css.js +5 -5
  283. package/dist/generated/themes/InputIcon.css.js +5 -5
  284. package/dist/generated/themes/InvisibleTextStyles.css.js +5 -5
  285. package/dist/generated/themes/Label.css.js +5 -5
  286. package/dist/generated/themes/Link.css.js +5 -5
  287. package/dist/generated/themes/List.css.js +5 -5
  288. package/dist/generated/themes/ListItem.css.js +5 -5
  289. package/dist/generated/themes/ListItemBase.css.js +5 -5
  290. package/dist/generated/themes/MessageStrip.css.js +5 -5
  291. package/dist/generated/themes/MonthPicker.css.js +5 -5
  292. package/dist/generated/themes/MultiComboBox.css.js +5 -5
  293. package/dist/generated/themes/MultiInput.css.js +8 -0
  294. package/dist/generated/themes/Panel.css.js +5 -5
  295. package/dist/generated/themes/Popover.css.js +5 -5
  296. package/dist/generated/themes/Popup.css.js +5 -5
  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 +5 -5
  302. package/dist/generated/themes/RatingIndicator.css.js +8 -0
  303. package/dist/generated/themes/ResponsivePopover.css.js +5 -5
  304. package/dist/generated/themes/ResponsivePopoverCommon.css.js +5 -5
  305. package/dist/generated/themes/SegmentedButton.css.js +5 -5
  306. package/dist/generated/themes/Select.css.js +5 -5
  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 +5 -5
  312. package/dist/generated/themes/Tab.css.js +5 -5
  313. package/dist/generated/themes/TabContainer.css.js +5 -5
  314. package/dist/generated/themes/TabInOverflow.css.js +5 -5
  315. package/dist/generated/themes/TabInStrip.css.js +5 -5
  316. package/dist/generated/themes/Table.css.js +5 -5
  317. package/dist/generated/themes/TableCell.css.js +5 -5
  318. package/dist/generated/themes/TableColumn.css.js +5 -5
  319. package/dist/generated/themes/TableGroupRow.css.js +8 -0
  320. package/dist/generated/themes/TableRow.css.js +5 -5
  321. package/dist/generated/themes/TapHighlightColor.css.js +8 -0
  322. package/dist/generated/themes/TextArea.css.js +5 -5
  323. package/dist/generated/themes/TimePicker.css.js +5 -5
  324. package/dist/generated/themes/TimePickerPopover.css.js +5 -5
  325. package/dist/generated/themes/TimeSelection.css.js +8 -0
  326. package/dist/generated/themes/Title.css.js +5 -5
  327. package/dist/generated/themes/Toast.css.js +5 -5
  328. package/dist/generated/themes/ToggleButton.css.js +5 -5
  329. package/dist/generated/themes/ToggleButton.ie11.css.js +8 -0
  330. package/dist/generated/themes/Token.css.js +5 -5
  331. package/dist/generated/themes/Tokenizer.css.js +5 -5
  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 +5 -5
  335. package/dist/generated/themes/WheelSlider.css.js +5 -5
  336. package/dist/generated/themes/YearPicker.css.js +5 -5
  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 -1
  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 +15 -13
  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 +3 -3
  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 +2 -2
  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 +5 -5
  425. package/dist/types/TabLayout.js +1 -1
  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 -6
  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 -97
  719. package/dist/TimelineItem.js +0 -161
  720. package/dist/generated/templates/ComboBoxItemTemplate.lit.js +0 -7
  721. package/dist/generated/templates/DurationPickerPopoverTemplate.lit.js +0 -8
  722. package/dist/generated/templates/DurationPickerTemplate.lit.js +0 -8
  723. package/dist/generated/templates/TimelineItemTemplate.lit.js +0 -12
  724. package/dist/generated/templates/TimelineTemplate.lit.js +0 -8
  725. package/dist/generated/themes/ComboBoxItem.css.js +0 -8
  726. package/dist/generated/themes/DurationPicker.css.js +0 -8
  727. package/dist/generated/themes/DurationPickerPopover.css.js +0 -8
  728. package/dist/generated/themes/Timeline.css.js +0 -8
  729. package/dist/generated/themes/TimelineItem.css.js +0 -8
  730. package/dist/popup-utils/PopupUtils.js +0 -55
  731. package/dist/types/AvatarFitType.js +0 -40
  732. package/dist/webcomponentsjs/package.json +0 -46
@@ -1,31 +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
+ isShow,
7
+ isDown,
8
+ isUp,
9
+ isBackSpace,
10
+ isSpace,
11
+ isLeft,
12
+ isRight,
13
+ isEscape,
14
+ isEnter,
6
15
  } from "@ui5/webcomponents-base/dist/Keys.js";
7
- import "@ui5/webcomponents-icons/dist/icons/slim-arrow-down.js";
8
- import { getRTL } from "@ui5/webcomponents-base/dist/config/RTL.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";
11
- import "@ui5/webcomponents-icons/dist/icons/decline.js";
12
- import "@ui5/webcomponents-icons/dist/icons/multiselect-all.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";
13
23
  import MultiComboBoxItem from "./MultiComboBoxItem.js";
14
24
  import Tokenizer from "./Tokenizer.js";
15
25
  import Token from "./Token.js";
16
26
  import Icon from "./Icon.js";
27
+ import Popover from "./Popover.js";
17
28
  import ResponsivePopover from "./ResponsivePopover.js";
18
29
  import List from "./List.js";
19
30
  import StandardListItem from "./StandardListItem.js";
20
31
  import ToggleButton from "./ToggleButton.js";
32
+ import * as Filters from "./ComboBoxFilters.js";
33
+ import Button from "./Button.js";
34
+
21
35
  import {
22
36
  VALUE_STATE_SUCCESS,
23
37
  VALUE_STATE_ERROR,
24
38
  VALUE_STATE_WARNING,
25
- TOKENIZER_ARIA_CONTAIN_TOKEN,
26
- TOKENIZER_ARIA_CONTAIN_ONE_TOKEN,
27
- TOKENIZER_ARIA_CONTAIN_SEVERAL_TOKENS,
39
+ VALUE_STATE_INFORMATION,
28
40
  INPUT_SUGGESTIONS_TITLE,
41
+ SELECT_OPTIONS,
42
+ MULTICOMBOBOX_DIALOG_OK_BUTTON,
43
+ VALUE_STATE_ERROR_ALREADY_SELECTED,
29
44
  } from "./generated/i18n/i18n-defaults.js";
30
45
 
31
46
  // Templates
@@ -35,37 +50,62 @@ import MultiComboBoxPopoverTemplate from "./generated/templates/MultiComboBoxPop
35
50
  // Styles
36
51
  import styles from "./generated/themes/MultiComboBox.css.js";
37
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";
38
55
 
39
56
  /**
40
57
  * @public
41
58
  */
42
59
  const metadata = {
43
60
  tag: "ui5-multi-combobox",
61
+ languageAware: true,
44
62
  managedSlots: true,
45
63
  slots: /** @lends sap.ui.webcomponents.main.MultiComboBox.prototype */ {
46
64
  /**
47
- * 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.
48
91
  * <br><br>
49
- * Example: <br>
50
- * &lt;ui5-multi-combobox><br>
51
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ui5-li>Item #1&lt;/ui5-li><br>
52
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ui5-li>Item #2&lt;/ui5-li><br>
53
- * &lt;/ui5-multi-combobox>
54
- * <br> <br>
55
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.
56
97
  * @type {HTMLElement[]}
98
+ * @since 1.0.0-rc.9
57
99
  * @slot
58
100
  * @public
59
101
  */
60
- "default": {
61
- propertyName: "items",
102
+ valueStateMessage: {
62
103
  type: HTMLElement,
63
- listenFor: { include: ["*"] },
64
104
  },
65
105
  },
66
106
  properties: /** @lends sap.ui.webcomponents.main.MultiComboBox.prototype */ {
67
107
  /**
68
- * Defines the value of the <code>ui5-multi-combobox</code>.
108
+ * Defines the value of the component.
69
109
  * <br><br>
70
110
  * <b>Note:</b> The property is updated upon typing.
71
111
  *
@@ -80,7 +120,7 @@ const metadata = {
80
120
 
81
121
  /**
82
122
  * Defines a short hint intended to aid the user with data entry when the
83
- * <code>ui5-multi-combobox</code> has no value.
123
+ * component has no value.
84
124
  * @type {string}
85
125
  * @defaultvalue ""
86
126
  * @public
@@ -102,9 +142,9 @@ const metadata = {
102
142
  },
103
143
 
104
144
  /**
105
- * Defines whether <code>ui5-multi-combobox</code> is in disabled state.
145
+ * Defines whether the component is in disabled state.
106
146
  * <br><br>
107
- * <b>Note:</b> A disabled <code>ui5-multi-combobox</code> is completely noninteractive.
147
+ * <b>Note:</b> A disabled component is completely noninteractive.
108
148
  *
109
149
  * @type {boolean}
110
150
  * @defaultvalue false
@@ -115,7 +155,7 @@ const metadata = {
115
155
  },
116
156
 
117
157
  /**
118
- * Defines the value state of the <code>ui5-multi-combobox</code>.
158
+ * Defines the value state of the component.
119
159
  * <br><br>
120
160
  * Available options are:
121
161
  * <ul>
@@ -136,9 +176,9 @@ const metadata = {
136
176
  },
137
177
 
138
178
  /**
139
- * Defines whether the <code>ui5-multi-combobox</code> is read-only.
179
+ * Defines whether the component is read-only.
140
180
  * <br><br>
141
- * <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,
142
182
  * but still provides visual feedback upon user interaction.
143
183
  *
144
184
  * @type {boolean}
@@ -150,7 +190,7 @@ const metadata = {
150
190
  },
151
191
 
152
192
  /**
153
- * Defines whether the <code>ui5-multi-combobox</code> is required.
193
+ * Defines whether the component is required.
154
194
  *
155
195
  * @type {boolean}
156
196
  * @defaultvalue false
@@ -161,11 +201,25 @@ const metadata = {
161
201
  type: Boolean,
162
202
  },
163
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
+
164
217
  /**
165
218
  * Indicates whether the dropdown is open. True if the dropdown is open, false otherwise.
166
219
  *
167
220
  * @type {boolean}
168
221
  * @defaultvalue false
222
+ * @readonly
169
223
  * @since 1.0.0-rc.5
170
224
  * @public
171
225
  */
@@ -173,16 +227,20 @@ const metadata = {
173
227
  type: Boolean,
174
228
  },
175
229
 
176
- /**
177
- * Indicates whether the input is focssed
178
- * @private
179
- */
230
+ _filteredItems: {
231
+ type: Object,
232
+ },
233
+
234
+ filterSelected: {
235
+ type: Boolean,
236
+ },
237
+
180
238
  focused: {
181
239
  type: Boolean,
182
240
  },
183
241
 
184
- _filteredItems: {
185
- type: Object,
242
+ _tokenizerFocused: {
243
+ type: Boolean,
186
244
  },
187
245
 
188
246
  _iconPressed: {
@@ -190,11 +248,18 @@ const metadata = {
190
248
  noAttribute: true,
191
249
  },
192
250
 
193
- /**
194
- * Indicates whether the tokenizer is expanded or collapsed(shows the n more label)
195
- * @private
196
- */
197
- 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: {
198
263
  type: Boolean,
199
264
  },
200
265
  },
@@ -208,7 +273,7 @@ const metadata = {
208
273
  change: {},
209
274
 
210
275
  /**
211
- * 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.
212
277
  *
213
278
  * @event
214
279
  * @public
@@ -218,21 +283,21 @@ const metadata = {
218
283
  /**
219
284
  * Fired when the dropdown is opened or closed.
220
285
  *
221
- * @event
286
+ * @event sap.ui.webcomponents.main.MultiComboBox#open-change
222
287
  * @since 1.0.0-rc.5
223
288
  * @public
224
289
  */
225
- openChange: {},
290
+ "open-change": {},
226
291
 
227
292
  /**
228
293
  * Fired when selection is changed by user interaction
229
294
  * in <code>SingleSelect</code> and <code>MultiSelect</code> modes.
230
295
  *
231
- * @event
296
+ * @event sap.ui.webcomponents.main.MultiComboBox#selection-change
232
297
  * @param {Array} items an array of the selected items.
233
298
  * @public
234
299
  */
235
- selectionChange: {
300
+ "selection-change": {
236
301
  detail: {
237
302
  items: { type: Array },
238
303
  },
@@ -245,10 +310,10 @@ const metadata = {
245
310
  *
246
311
  * <h3 class="comment-api-title">Overview</h3>
247
312
  *
248
- * 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.
249
314
  *
250
- * It is a drop-down list for selecting and filtering values, 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.
251
- * 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.
252
317
  * <h3>Structure</h3>
253
318
  * The <code>ui5-multi-combobox</code> consists of the following elements:
254
319
  * <ul>
@@ -275,6 +340,15 @@ const metadata = {
275
340
  * <li> Backspace - deletes the token and focus the next token. </li>
276
341
  * </ul>
277
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
+ *
278
352
  * <h3>ES6 Module Import</h3>
279
353
  *
280
354
  * <code>import "@ui5/webcomponents/dist/MultiComboBox";</code>
@@ -311,47 +385,70 @@ class MultiComboBox extends UI5Element {
311
385
  }
312
386
 
313
387
  static get staticAreaStyles() {
314
- 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
+ ];
315
404
  }
316
405
 
317
406
  constructor() {
318
407
  super();
319
408
 
320
409
  this._filteredItems = [];
410
+ this.selectedValues = [];
321
411
  this._inputLastValue = "";
412
+ this._valueBeforeOpen = "";
322
413
  this._deleting = false;
323
414
  this._validationTimeout = null;
324
- this._selectedItemsPopoverOpened = false;
325
- 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;
326
428
  }
327
429
 
328
430
  _inputChange() {
329
431
  this.fireEvent("change");
330
432
  }
331
433
 
332
- _showMorePopover() {
333
- if (this.readonly) {
334
- return;
335
- }
336
-
337
- this._showMorePressed = true;
338
- this._selectedItemsPopoverOpened = true;
339
- this._toggleRespPopover(true);
434
+ togglePopover() {
435
+ this.allItemsPopover.toggle(this);
340
436
  }
341
437
 
342
- _showAllItemsPopover() {
343
- this._selectedItemsPopoverOpened = false;
344
- this._toggleRespPopover(false);
438
+ _showFilteredItems() {
439
+ this.filterSelected = true;
440
+ this._showMorePressed = true;
345
441
 
346
- this._inputDom.focus();
442
+ this.togglePopover();
347
443
  }
348
444
 
349
- _closeMorePopover() {
350
- this.selectedItemsPopover.close();
445
+ filterSelectedItems(event) {
446
+ this.filterSelected = event.target.pressed;
447
+ this.selectedItems = this._filteredItems.filter(item => item.selected);
351
448
  }
352
449
 
353
- _closeAllItemsPopover() {
354
- this.allItemsPopover.close();
450
+ get _showAllItemsButtonPressed() {
451
+ return this.filterSelected;
355
452
  }
356
453
 
357
454
  get _inputDom() {
@@ -364,11 +461,15 @@ class MultiComboBox extends UI5Element {
364
461
  const filteredItems = this._filterItems(value);
365
462
  const oldValueState = this.valueState;
366
463
 
464
+ if (this.filterSelected) {
465
+ this.filterSelected = false;
466
+ }
467
+
367
468
  /* skip calling change event when an input with a placeholder is focused on IE
368
469
  - value of the host and the internal input should be differnt in case of actual input
369
470
  - input is called when a key is pressed => keyup should not be called yet
370
471
  */
371
- 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;
372
473
 
373
474
  if (skipFiring) {
374
475
  event.preventDefault();
@@ -385,15 +486,11 @@ class MultiComboBox extends UI5Element {
385
486
  input.value = this._inputLastValue;
386
487
  this.valueState = "Error";
387
488
 
388
- this._validationTimeout = setTimeout(() => {
389
- this.valueState = oldValueState;
390
- this._validationTimeout = null;
391
- }, 2000);
489
+ this._resetValueState(oldValueState);
392
490
 
393
491
  return;
394
492
  }
395
493
 
396
-
397
494
  this._inputLastValue = input.value;
398
495
  this.value = input.value;
399
496
  this._filteredItems = filteredItems;
@@ -402,8 +499,7 @@ class MultiComboBox extends UI5Element {
402
499
  if (filteredItems.length === 0) {
403
500
  this.allItemsPopover.close();
404
501
  } else {
405
- this.updateStaticAreaItemContentDensity();
406
- this.allItemsPopover.open(this);
502
+ this.allItemsPopover.showAt(this);
407
503
  }
408
504
  }
409
505
 
@@ -420,79 +516,207 @@ class MultiComboBox extends UI5Element {
420
516
  this.fireSelectionChange();
421
517
  }
422
518
 
423
- _tokenizerFocusOut() {
424
- const tokenizer = this.shadowRoot.querySelector("ui5-tokenizer");
425
- const tokensCount = tokenizer.tokens.length - 1;
519
+ get _getPlaceholder() {
520
+ if (this._tokenizer && this._tokenizer.tokens.length) {
521
+ return "";
522
+ }
426
523
 
427
- tokenizer.tokens.forEach(token => { token.selected = false; });
524
+ return this.placeholder;
525
+ }
428
526
 
429
- this._tokenizer.contentDom.scrollLeft = 0;
527
+ _handleLeft() {
528
+ const cursorPosition = this.getDomRef().querySelector(`input`).selectionStart;
529
+
530
+ if (cursorPosition === 0) {
531
+ this._tokenizer._focusLastToken();
532
+ }
533
+ }
534
+
535
+ _tokenizerFocusOut(event) {
536
+ this._tokenizerFocused = false;
537
+
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
+ }
430
544
 
431
545
  if (tokensCount === 0 && this._deleting) {
432
546
  setTimeout(() => {
433
- this.shadowRoot.querySelector("input").focus();
547
+ if (!isPhone()) {
548
+ this.shadowRoot.querySelector("input").focus();
549
+ }
550
+
434
551
  this._deleting = false;
435
552
  }, 0);
436
553
  }
437
554
  }
438
555
 
556
+ _tokenizerFocusIn() {
557
+ this._tokenizerFocused = true;
558
+ this.focused = false;
559
+ }
560
+
439
561
  _onkeyup() {
440
562
  this._keyDown = false;
441
563
  }
442
564
 
443
565
  async _onkeydown(event) {
566
+ if (isLeft(event)) {
567
+ this._handleLeft(event);
568
+ }
569
+
444
570
  if (isShow(event) && !this.readonly && !this.disabled) {
445
571
  event.preventDefault();
446
- this._toggleRespPopover();
572
+ this.togglePopover();
447
573
  }
448
574
 
449
- if (isDown(event) && this.allItemsPopover.opened && this.items.length) {
450
- event.preventDefault();
451
- await this._getList();
452
- this.list._itemNavigation.current = 0;
453
- this.list.items[0].focus();
575
+ if (this.open && (isUp(event) || isDown(event))) {
576
+ this._handleArrowNavigation(event);
454
577
  }
455
578
 
456
579
  if (isBackSpace(event) && event.target.value === "") {
457
580
  event.preventDefault();
458
581
 
459
- const lastTokenIndex = this._tokenizer.tokens.length - 1;
582
+ this._tokenizer._focusLastToken();
583
+ }
460
584
 
461
- if (lastTokenIndex < 0) {
462
- return;
463
- }
585
+ // Reset value on ESC
586
+ if (isEscape(event) && (!this.allowCustomValues || (!this.open && this.allowCustomValues))) {
587
+ this.value = this._lastValue;
588
+ }
464
589
 
465
- this._tokenizer.tokens[lastTokenIndex].focus();
466
- this._tokenizer._itemNav.currentIndex = lastTokenIndex;
590
+ if (isEnter(event)) {
591
+ this.handleEnter();
467
592
  }
468
593
 
469
594
  this._keyDown = true;
470
595
  }
471
596
 
472
- _filterItems(value) {
473
- return this.items.filter(item => {
474
- return item.text && item.text.toLowerCase().startsWith(value.toLowerCase());
475
- });
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
+ }
476
610
  }
477
611
 
478
- _toggleIcon() {
479
- this._iconPressed = !this._iconPressed;
480
- this.open = this._iconPressed;
612
+ _onItemKeydown(event) {
613
+ const isFirstItem = this.list.items[0] === event.target;
481
614
 
482
- this.fireEvent("openChange");
615
+ event.preventDefault();
483
616
 
484
- if (!this._iconPressed) {
485
- this._afterClosePopover();
617
+ if (!isUp(event) || !isFirstItem) {
618
+ return;
486
619
  }
620
+
621
+ if (this.valueStateHeader) {
622
+ this.valueStateHeader.focus();
623
+ return;
624
+ }
625
+
626
+ this._inputDom.focus();
487
627
  }
488
628
 
489
- _setInitialFocusInResponsivePopover() {
490
- this._innerInput.focus();
629
+ async _handleArrowNavigation(event) {
630
+ const isArrowDown = isDown(event);
631
+ const hasSuggestions = this.allItemsPopover.opened && this.items.length;
632
+
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
+ }
643
+
644
+ if (isArrowDown && this.focused && hasSuggestions) {
645
+ this._handleArrowDown(event);
646
+ }
647
+ }
648
+
649
+ _handleArrowDown(event) {
650
+ const firstListItem = this.list.items[0];
651
+
652
+ this.list._itemNavigation.setCurrentItem(firstListItem);
653
+ firstListItem.focus();
654
+ }
655
+
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;
665
+ }
666
+
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
+ }
677
+
678
+ this.allItemsPopover.close();
679
+ }
680
+ }
681
+
682
+ _resetValueState(valueState, callback) {
683
+ this._validationTimeout = setTimeout(() => {
684
+ this.valueState = valueState;
685
+ this._validationTimeout = null;
686
+
687
+ callback && callback();
688
+ }, 2000);
491
689
  }
492
690
 
493
- _onAllItemsPopoverAfterOpen() {
494
- this._setInitialFocusInResponsivePopover();
495
- this._toggleIcon();
691
+ _onTokenizerKeydown(event) {
692
+ if (isRight(event)) {
693
+ const lastTokenIndex = this._tokenizer.tokens.length - 1;
694
+
695
+ if (this._tokenizer.tokens[lastTokenIndex] === document.activeElement.shadowRoot.activeElement) {
696
+ setTimeout(() => {
697
+ this.shadowRoot.querySelector("input").focus();
698
+ }, 0);
699
+ }
700
+ }
701
+ }
702
+
703
+ _filterItems(str) {
704
+ return (Filters[this.filter] || Filters.StartsWithPerTerm)(str, this.items);
705
+ }
706
+
707
+ _afterOpenPicker() {
708
+ this._toggle();
709
+
710
+ if (!isPhone()) {
711
+ this._innerInput.focus();
712
+ } else {
713
+ this.allItemsPopover.focus();
714
+ }
715
+ }
716
+
717
+ _toggle() {
718
+ this.open = !this.open;
719
+ this.fireEvent("open-change");
496
720
  }
497
721
 
498
722
  _getSelectedItems() {
@@ -502,32 +726,45 @@ class MultiComboBox extends UI5Element {
502
726
  }
503
727
 
504
728
  _listSelectionChange(event) {
505
- event.target.items.forEach(item => {
506
- this.items.forEach(mcbItem => {
507
- if (mcbItem._id === item.getAttribute("data-ui5-token-id")) {
508
- mcbItem.selected = item.selected;
509
- }
510
- });
511
- });
729
+ // sync list items and cb items
730
+ this.syncItems(event.target.items);
512
731
 
513
- this.fireSelectionChange();
732
+ // don't call selection change right after selection as user can cancel it on phone
733
+ if (!isPhone()) {
734
+ this.fireSelectionChange();
735
+ }
514
736
 
515
737
  if (!event.detail.selectionComponentPressed && !isSpace(event.detail)) {
516
738
  this.allItemsPopover.close();
517
739
  this.value = "";
740
+
741
+ // if the item (not checkbox) is clicked, call the selection change
742
+ if (isPhone()) {
743
+ this.fireSelectionChange();
744
+ }
745
+
518
746
  this.fireEvent("input");
519
747
  }
520
748
  }
521
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
+
522
760
  fireSelectionChange() {
523
- this.fireEvent("selectionChange", { items: this._getSelectedItems() });
761
+ this.fireEvent("selection-change", { items: this._getSelectedItems() });
524
762
  // Angular 2 way data binding
525
763
  this.fireEvent("value-changed");
526
764
  }
527
765
 
528
766
  async _getRespPopover() {
529
767
  const staticAreaItem = await this.getStaticAreaItemDomRef();
530
- this.selectedItemsPopover = staticAreaItem.querySelector(`.ui5-multi-combobox-selected-items-responsive-popover`);
531
768
  this.allItemsPopover = staticAreaItem.querySelector(`.ui5-multi-combobox-all-items-responsive-popover`);
532
769
  }
533
770
 
@@ -536,147 +773,256 @@ class MultiComboBox extends UI5Element {
536
773
  this.list = staticAreaItem.querySelector(".ui5-multi-combobox-all-items-list");
537
774
  }
538
775
 
539
- _toggleRespPopover(isMorePopover) {
540
- this.updateStaticAreaItemContentDensity();
541
-
542
- if (isMorePopover) {
543
- this.allItemsPopover.close();
544
- return this.selectedItemsPopover.open(this);
545
- }
546
-
547
- if (this.allItemsPopover && this.allItemsPopover.opened) {
548
- return this.allItemsPopover.close();
549
- }
550
-
551
- this.selectedItemsPopover && this.selectedItemsPopover.close();
552
-
553
- this.allItemsPopover && this.allItemsPopover.open(this);
554
- }
555
-
556
- _focusin() {
557
- this.focused = true;
558
- }
559
-
560
- _focusout() {
561
- this.focused = false;
562
- }
563
-
564
776
  _click(event) {
565
- if (isPhone() && !this.readonly && !this._showMorePressed) {
566
- this.updateStaticAreaItemContentDensity();
567
- this.allItemsPopover.open(this);
777
+ if (isPhone() && !this.readonly && !this._showMorePressed && !this._deleting) {
778
+ this.allItemsPopover.showAt(this);
568
779
  }
569
780
 
570
781
  this._showMorePressed = false;
571
782
  }
572
783
 
573
- _afterClosePopover() {
784
+ _afterClosePicker() {
574
785
  // close device's keyboard and prevent further typing
575
786
  if (isPhone()) {
576
787
  this.blur();
577
788
  }
578
- }
579
789
 
580
- _toggleButtonPress(event) {
581
- const showSelectedItems = event.target.hasAttribute("show-selected");
790
+ this._toggle();
582
791
 
583
- if (showSelectedItems) {
584
- this.allItemsPopover.close();
585
- this.selectedItemsPopover.open(this);
586
- } else {
587
- this.selectedItemsPopover.close();
588
- this.allItemsPopover.open(this);
589
- }
590
-
591
- // always keep the toggle-button pressed
592
- event.target.pressed = true;
792
+ this._iconPressed = false;
793
+ this.filterSelected = false;
593
794
  }
594
795
 
595
- onBeforeRendering() {
596
- this._inputLastValue = this.value;
597
-
598
- 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
+ });
599
803
 
600
- if (this.getDomRef() && !hasSelectedItem) {
601
- const morePopover = this.selectedItemsPopover;
804
+ this._valueBeforeOpen = this.value;
602
805
 
603
- morePopover && morePopover.close();
806
+ if (this.filterSelected) {
807
+ this.selectedItems = this._filteredItems.filter(item => item.selected);
604
808
  }
809
+ }
605
810
 
811
+ onBeforeRendering() {
606
812
  const input = this.shadowRoot.querySelector("input");
813
+ this._inputLastValue = this.value;
607
814
 
608
815
  if (input && !input.value) {
609
816
  this._filteredItems = this.items;
610
817
  }
611
818
 
819
+ this.items.forEach(item => {
820
+ item._getRealDomRef = () => this.allItemsPopover.querySelector(`*[data-ui5-stable=${item.stableDomRef}]`);
821
+ });
822
+
612
823
  const filteredItems = this._filterItems(this.value);
613
824
  this._filteredItems = filteredItems;
614
825
  }
615
826
 
616
827
  async onAfterRendering() {
617
828
  await this._getRespPopover();
618
- if (this.open && !this.allItemsPopover.opened) {
619
- this.updateStaticAreaItemContentDensity();
620
- this.allItemsPopover.open(this);
621
- // Set initial focus to the native input
622
- this._innerInput.focus();
623
- }
829
+ await this._getList();
830
+
831
+ this.toggle(this.shouldDisplayOnlyValueStateMessage);
832
+ this.storeResponsivePopoverWidth();
833
+
834
+ this._deleting = false;
624
835
  }
625
836
 
626
- get valueStateTextMappings() {
627
- return {
628
- "Success": this.i18nBundle.getText(VALUE_STATE_SUCCESS),
629
- "Error": this.i18nBundle.getText(VALUE_STATE_ERROR),
630
- "Warning": this.i18nBundle.getText(VALUE_STATE_WARNING),
631
- };
837
+ get _isPhone() {
838
+ return isPhone();
632
839
  }
633
840
 
634
- get _tokenizer() {
635
- return this.shadowRoot.querySelector("ui5-tokenizer");
841
+ _onIconMousedown() {
842
+ this._iconPressed = true;
843
+ }
844
+
845
+ storeResponsivePopoverWidth() {
846
+ if (this.open && !this._listWidth) {
847
+ this._listWidth = this.list.offsetWidth;
848
+ }
636
849
  }
637
850
 
638
- get nMoreCountText() {
639
- const iTokenCount = this._getSelectedItems().length;
851
+ toggle(isToggled) {
852
+ if (isToggled && !this.open) {
853
+ this.openPopover();
854
+ } else {
855
+ this.closePopover();
856
+ }
857
+ }
858
+
859
+ handleCancel() {
860
+ this._itemsBeforeOpen.forEach(item => {
861
+ item.ref.selected = item.selected;
862
+ });
863
+
864
+ this.togglePopover();
865
+
866
+ this.value = this._valueBeforeOpen;
867
+ }
640
868
 
641
- if (iTokenCount === 0) {
642
- return this.i18nBundle.getText(TOKENIZER_ARIA_CONTAIN_TOKEN);
869
+ handleOK() {
870
+ if (isPhone()) {
871
+ this.fireSelectionChange();
643
872
  }
644
873
 
645
- if (iTokenCount === 1) {
646
- return this.i18nBundle.getText(TOKENIZER_ARIA_CONTAIN_ONE_TOKEN);
874
+ this.togglePopover();
875
+ }
876
+
877
+ async openPopover() {
878
+ const popover = await this._getPopover();
879
+
880
+ if (popover) {
881
+ popover.showAt(this);
647
882
  }
883
+ }
884
+
885
+ _forwardFocusToInner() {
886
+ this._innerInput.focus();
887
+ }
648
888
 
649
- return this.i18nBundle.getText(TOKENIZER_ARIA_CONTAIN_SEVERAL_TOKENS, iTokenCount);
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]");
650
903
  }
651
904
 
652
- rootFocusIn() {
653
- this.expandedTokenizer = true;
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]");
654
912
  }
655
913
 
656
- rootFocusOut(event) {
914
+ inputFocusIn() {
915
+ if (!isPhone()) {
916
+ this.focused = true;
917
+ } else {
918
+ this._innerInput.blur();
919
+ }
920
+
921
+ this._lastValue = this.value;
922
+ }
923
+
924
+ inputFocusOut(event) {
657
925
  if (!this.shadowRoot.contains(event.relatedTarget) && !this._deleting) {
658
- 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
+ }
659
932
  }
660
933
  }
661
934
 
935
+ _readonlyIconClick() {
936
+ this._inputDom.focus();
937
+ }
938
+
662
939
  get editable() {
663
940
  return !this.readonly;
664
941
  }
665
942
 
666
- get dir() {
667
- return getRTL() ? "rtl" : "ltr";
943
+ get _isFocusInside() {
944
+ return !isPhone() && (this.focused || this._tokenizerFocused);
668
945
  }
669
946
 
670
947
  get selectedItemsListMode() {
671
948
  return this.readonly ? "None" : "MultiSelect";
672
949
  }
673
950
 
951
+ get _listItemsType() {
952
+ return this.readonly ? "Inactive" : "Active";
953
+ }
954
+
674
955
  get hasValueState() {
675
956
  return this.valueState !== ValueState.None;
676
957
  }
677
958
 
959
+ get hasValueStateMessage() {
960
+ return this.hasValueState && this.valueState !== ValueState.Success;
961
+ }
962
+
678
963
  get valueStateText() {
679
- 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
+ };
680
1026
  }
681
1027
 
682
1028
  get _innerInput() {
@@ -684,29 +1030,59 @@ class MultiComboBox extends UI5Element {
684
1030
  if (this.allItemsPopover.opened) {
685
1031
  return this.allItemsPopover.querySelector("input");
686
1032
  }
687
-
688
- return this.selectedItemsPopover.querySelector("input");
689
1033
  }
690
1034
 
691
1035
  return this.getDomRef().querySelector("#ui5-multi-combobox-input");
692
1036
  }
693
1037
 
694
1038
  get _headerTitleText() {
695
- return this.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
1039
+ return MultiComboBox.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);
1040
+ }
1041
+
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
+ };
696
1082
  }
697
1083
 
698
1084
  static async onDefine() {
699
- await Promise.all([
700
- MultiComboBoxItem.define(),
701
- Tokenizer.define(),
702
- Token.define(),
703
- Icon.define(),
704
- ResponsivePopover.define(),
705
- List.define(),
706
- StandardListItem.define(),
707
- ToggleButton,
708
- fetchI18nBundle("@ui5/webcomponents"),
709
- ]);
1085
+ MultiComboBox.i18nBundle = await getI18nBundle("@ui5/webcomponents");
710
1086
  }
711
1087
  }
712
1088